Skip to content

Commit 1af4e7f

Browse files
fix: ensure system env compilation case sensitive (#1033)
1 parent 90a3b7b commit 1af4e7f

File tree

7 files changed

+19
-11
lines changed

7 files changed

+19
-11
lines changed

.changeset/empty-birds-work.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"server": patch
3+
---
4+
5+
fix: ensure system env compilation is case sensitive

server/internal/chat/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
"github.com/speakeasy-api/gram/server/internal/guardian"
3030
"github.com/speakeasy-api/gram/server/internal/mv"
3131
"github.com/speakeasy-api/gram/server/internal/o11y"
32-
"github.com/speakeasy-api/gram/server/internal/thirdparty/openrouter"
3332
tm "github.com/speakeasy-api/gram/server/internal/telemetry"
33+
"github.com/speakeasy-api/gram/server/internal/thirdparty/openrouter"
3434
"github.com/speakeasy-api/gram/server/internal/toolsets"
3535
)
3636

@@ -281,7 +281,7 @@ func (c *ChatClient) LoadToolsetTools(
281281
}
282282

283283
err = c.toolProxy.Do(ctx, rw, bytes.NewBufferString(rawArgs), gateway.ToolCallEnv{
284-
SystemEnv: gateway.CIEnvFrom(systemConfig),
284+
SystemEnv: systemConfig,
285285
UserConfig: ciEnv,
286286
}, plan, tm.NewNoopToolCallLogger())
287287
if err != nil {

server/internal/environments/shared.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"errors"
77
"fmt"
88
"log/slog"
9-
"maps"
109
"strings"
1110

1211
"github.com/google/uuid"
@@ -119,7 +118,7 @@ func (e *EnvironmentEntries) LoadToolsetEnv(ctx context.Context, projectID uuid.
119118
// LoadSystemEnv loads and merges source and toolset environments.
120119
// Merges in order: source env (base) -> toolset env (override).
121120
// Returns empty map if neither environment exists.
122-
func (e *EnvironmentEntries) LoadSystemEnv(ctx context.Context, projectID uuid.UUID, toolsetID uuid.UUID, sourceKind string, sourceSlug string) (map[string]string, error) {
121+
func (e *EnvironmentEntries) LoadSystemEnv(ctx context.Context, projectID uuid.UUID, toolsetID uuid.UUID, sourceKind string, sourceSlug string) (*gateway.CaseInsensitiveEnv, error) {
123122
// Load source environment (tool-specific)
124123
sourceEnv, err := e.LoadSourceEnv(ctx, projectID, sourceKind, sourceSlug)
125124
if err != nil {
@@ -133,9 +132,13 @@ func (e *EnvironmentEntries) LoadSystemEnv(ctx context.Context, projectID uuid.U
133132
}
134133

135134
// Merge: source env (base) + toolset env (override)
136-
systemEnv := make(map[string]string)
137-
maps.Copy(systemEnv, sourceEnv)
138-
maps.Copy(systemEnv, toolsetEnv)
135+
systemEnv := gateway.NewCaseInsensitiveEnv()
136+
for k, v := range sourceEnv {
137+
systemEnv.Set(k, v)
138+
}
139+
for k, v := range toolsetEnv {
140+
systemEnv.Set(k, v)
141+
}
139142

140143
return systemEnv, nil
141144
}

server/internal/gateway/env.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type EnvironmentLoader interface {
2222
//
2323
// # Errors
2424
// * `error`: when an unrecognized error occurs.
25-
LoadSystemEnv(ctx context.Context, projectID uuid.UUID, toolsetID uuid.UUID, sourceKind string, sourceSlug string) (map[string]string, error)
25+
LoadSystemEnv(ctx context.Context, projectID uuid.UUID, toolsetID uuid.UUID, sourceKind string, sourceSlug string) (*CaseInsensitiveEnv, error)
2626
}
2727

2828
type SlugOrID struct {

server/internal/instances/impl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ func (s *Service) ExecuteInstanceTool(w http.ResponseWriter, r *http.Request) er
339339
interceptor := newResponseInterceptor(w)
340340

341341
err = s.toolProxy.Do(ctx, interceptor, requestBody, gateway.ToolCallEnv{
342-
SystemEnv: gateway.CIEnvFrom(systemConfig),
342+
SystemEnv: systemConfig,
343343
UserConfig: ciEnv,
344344
}, plan, toolCallLogger)
345345
if err != nil {

server/internal/mcp/rpc_resources_read.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func handleResourcesRead(ctx context.Context, logger *slog.Logger, db *pgxpool.P
170170

171171
err = toolProxy.ReadResource(ctx, rw, strings.NewReader("{}"), gateway.ToolCallEnv{
172172
UserConfig: userConfig,
173-
SystemEnv: gateway.CIEnvFrom(systemConfig),
173+
SystemEnv: systemConfig,
174174
}, plan, toolCallLogger)
175175
if err != nil {
176176
return nil, oops.E(oops.CodeUnexpected, err, "failed to execute resource call").Log(ctx, logger)

server/internal/mcp/rpc_tools_call.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ func handleToolsCall(
219219
}()
220220

221221
err = toolProxy.Do(ctx, rw, bytes.NewBuffer(params.Arguments), gateway.ToolCallEnv{
222-
UserConfig: userConfig, SystemEnv: gateway.CIEnvFrom(systemConfig)}, plan, toolCallLogger)
222+
UserConfig: userConfig, SystemEnv: systemConfig}, plan, toolCallLogger)
223223
if err != nil {
224224
return nil, oops.E(oops.CodeUnexpected, err, "failed execute tool call").Log(ctx, logger)
225225
}

0 commit comments

Comments
 (0)