@alfe.ai/openclaw-secrets 0.1.15 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
 
2
- > @alfe.ai/openclaw-secrets@0.1.15 build /home/runner/work/alfe/alfe/packages/openclaw-secrets
2
+ > @alfe.ai/openclaw-secrets@0.2.1 build /home/runner/work/alfe/alfe/packages/openclaw-secrets
3
3
  > tsc
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @alfe.ai/openclaw-secrets
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [893a67a]
8
+ - @alfe.ai/agent-api-client@0.1.3
9
+
10
+ ## 0.2.0
11
+
12
+ ### Minor Changes
13
+
14
+ - 28b68cd: Auto-fill `scopeId` from `ctx.agentId` for `scope === "agent"` and tighten every tool's schema description so an LLM can't pick the literal word `"agent"` as the ID. Previously, the plugin's tool schemas required `scopeId` with no description, which led to LLMs writing the literal string `"agent"` and stranding secret rows at `scopeId="agent"` instead of the real agent ID. The corresponding server-side enforcement (`requireAgentSelfScope`) now rejects that same mistake, but the plugin should make the happy path discoverable rather than fail-closed.
15
+
16
+ Behaviour:
17
+
18
+ - `scope: "agent"` with `scopeId` omitted, empty, or the literal `"agent"` → falls back to `ctx.agentId` from the OpenClaw runtime.
19
+ - `scope: "agent"` with a real agent ID → passed through (server-side enforces it must equal the calling agent).
20
+ - `scope: "org" | "team" | "project"` → `scopeId` is still required and validated as before.
21
+
22
+ `scopeId` is now optional in the JSON schema for `scope: "agent"`. Agents on older runtimes that don't populate `ctx.agentId` will see a clear error pointing them at `secret_list_scopes` for the canonical ID.
23
+
3
24
  ## 0.1.15
4
25
 
5
26
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAED,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACzF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7I,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,8BAA8B,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3G;;;;;;;kBAsFe,SAAS,GAAG,IAAI;;AAPhC,wBAgdE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAED,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACzF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7I,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,8BAA8B,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3G;;;;;;;kBA2Fe,SAAS,GAAG,IAAI;;AAPhC,wBAgdE"}
package/dist/index.js CHANGED
@@ -58,6 +58,10 @@ function parseString(raw, field, max = 256) {
58
58
  }
59
59
  return raw;
60
60
  }
61
+ // Re-export the local-friendly type alias so the rest of the file
62
+ // continues to refer to ToolContext (which has agentId? on it). The
63
+ // scope-resolve helper is structurally compatible.
64
+ import { resolveScopeId, SCOPE_ID_DESCRIPTION } from "./scope-resolve.js";
61
65
  function parseSecretName(raw) {
62
66
  const s = parseString(raw, "name", 128);
63
67
  if (!NAME_REGEX.test(s)) {
@@ -146,7 +150,7 @@ export default {
146
150
  api.registerTool(() => ({
147
151
  name: "secret_list_scopes",
148
152
  label: "List Secret Scopes",
149
- description: "List scopes (org/team/project/agent) the agent can manage secrets in.",
153
+ description: "List scopes (org/team/project/agent) the agent can manage secrets in. The returned `scopeId` values are the IDs to pass into the other secret tools — never pass the literal word \"agent\" as a scopeId; for agent scope, omit scopeId and the runtime will fill in the current agent's ID.",
150
154
  parameters: { type: "object", properties: {} },
151
155
  execute: async () => {
152
156
  const scopes = await client.listSecretScopes();
@@ -154,7 +158,7 @@ export default {
154
158
  },
155
159
  }), { names: ["secret_list_scopes"] });
156
160
  // ─── secret_list ────────────────────────────────────────────
157
- api.registerTool(() => ({
161
+ api.registerTool((ctx) => ({
158
162
  name: "secret_list",
159
163
  label: "List Secrets",
160
164
  description: "List secret metadata in a scope. Optional category/tag/fieldKey filters route through the byFacet GSI.",
@@ -162,16 +166,16 @@ export default {
162
166
  type: "object",
163
167
  properties: {
164
168
  scope: { type: "string", enum: VALID_SCOPES },
165
- scopeId: { type: "string" },
169
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
166
170
  category: { type: "string", enum: VALID_CATEGORIES },
167
171
  tag: { type: "string" },
168
172
  fieldKey: { type: "string" },
169
173
  },
170
- required: ["scope", "scopeId"],
174
+ required: ["scope"],
171
175
  },
172
176
  execute: async (_id, params) => {
173
177
  const scope = parseScope(params.scope);
174
- const scopeId = parseString(params.scopeId, "scopeId");
178
+ const scopeId = resolveScopeId(scope, params, ctx);
175
179
  const category = typeof params.category === "string" ? params.category : undefined;
176
180
  const tag = typeof params.tag === "string" ? params.tag : undefined;
177
181
  const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
@@ -180,7 +184,7 @@ export default {
180
184
  },
181
185
  }), { names: ["secret_list"] });
182
186
  // ─── secret_set ─────────────────────────────────────────────
183
- api.registerTool(() => ({
187
+ api.registerTool((ctx) => ({
184
188
  name: "secret_set",
185
189
  label: "Set Secret",
186
190
  description: "Create a new secret with one or more fields. Encrypted fields are sealed locally before upload.",
@@ -188,7 +192,7 @@ export default {
188
192
  type: "object",
189
193
  properties: {
190
194
  scope: { type: "string", enum: VALID_SCOPES },
191
- scopeId: { type: "string" },
195
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
192
196
  name: { type: "string", description: "Human-readable secret name (unique within scope)" },
193
197
  category: { type: "string", enum: VALID_CATEGORIES, description: "Defaults to 'other'" },
194
198
  description: { type: "string" },
@@ -212,11 +216,11 @@ export default {
212
216
  value: { type: "string", description: "Shorthand for fields=[{ key: 'value', sensitivity: 'encrypted', value }]" },
213
217
  reason: { type: "string" },
214
218
  },
215
- required: ["scope", "scopeId", "name"],
219
+ required: ["scope", "name"],
216
220
  },
217
221
  execute: async (_id, params) => {
218
222
  const scope = parseScope(params.scope);
219
- const scopeId = parseString(params.scopeId, "scopeId");
223
+ const scopeId = resolveScopeId(scope, params, ctx);
220
224
  const name = parseSecretName(params.name);
221
225
  const category = typeof params.category === "string"
222
226
  ? params.category
@@ -258,7 +262,7 @@ export default {
258
262
  },
259
263
  }), { names: ["secret_set"] });
260
264
  // ─── secret_get (legacy: returns `value` field plaintext as a string) ──
261
- api.registerTool(() => ({
265
+ api.registerTool((ctx) => ({
262
266
  name: "secret_get",
263
267
  label: "Get Secret (Legacy)",
264
268
  description: "Fetch and decrypt the `value`-keyed field. The output is SENSITIVE; do not echo or log.",
@@ -266,14 +270,14 @@ export default {
266
270
  type: "object",
267
271
  properties: {
268
272
  scope: { type: "string", enum: VALID_SCOPES },
269
- scopeId: { type: "string" },
273
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
270
274
  secretId: { type: "string" },
271
275
  },
272
- required: ["scope", "scopeId", "secretId"],
276
+ required: ["scope", "secretId"],
273
277
  },
274
278
  execute: async (_id, params) => {
275
279
  const scope = parseScope(params.scope);
276
- const scopeId = parseString(params.scopeId, "scopeId");
280
+ const scopeId = resolveScopeId(scope, params, ctx);
277
281
  const secretId = parseSecretId(params.secretId);
278
282
  const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey: "value" });
279
283
  if (field.sensitivity === "plaintext") {
@@ -288,7 +292,7 @@ export default {
288
292
  },
289
293
  }), { names: ["secret_get"] });
290
294
  // ─── secret_get_full ────────────────────────────────────────
291
- api.registerTool(() => ({
295
+ api.registerTool((ctx) => ({
292
296
  name: "secret_get_full",
293
297
  label: "Get Secret (All Fields)",
294
298
  description: "Fetch the secret aggregate with all fields decrypted. Output is SENSITIVE.",
@@ -296,14 +300,14 @@ export default {
296
300
  type: "object",
297
301
  properties: {
298
302
  scope: { type: "string", enum: VALID_SCOPES },
299
- scopeId: { type: "string" },
303
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
300
304
  secretId: { type: "string" },
301
305
  },
302
- required: ["scope", "scopeId", "secretId"],
306
+ required: ["scope", "secretId"],
303
307
  },
304
308
  execute: async (_id, params) => {
305
309
  const scope = parseScope(params.scope);
306
- const scopeId = parseString(params.scopeId, "scopeId");
310
+ const scopeId = resolveScopeId(scope, params, ctx);
307
311
  const secretId = parseSecretId(params.secretId);
308
312
  const { aggregate, envelopes } = await client.getSecret({ scope, scopeId, secretId });
309
313
  const decryptedFields = await Promise.all(aggregate.fields.map(async (f) => {
@@ -329,7 +333,7 @@ export default {
329
333
  },
330
334
  }), { names: ["secret_get_full"] });
331
335
  // ─── secret_get_field ───────────────────────────────────────
332
- api.registerTool(() => ({
336
+ api.registerTool((ctx) => ({
333
337
  name: "secret_get_field",
334
338
  label: "Get Secret Field",
335
339
  description: "Fetch and decrypt one field by key. Cheaper than secret_get_full when you only need one piece.",
@@ -337,15 +341,15 @@ export default {
337
341
  type: "object",
338
342
  properties: {
339
343
  scope: { type: "string", enum: VALID_SCOPES },
340
- scopeId: { type: "string" },
344
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
341
345
  secretId: { type: "string" },
342
346
  fieldKey: { type: "string" },
343
347
  },
344
- required: ["scope", "scopeId", "secretId", "fieldKey"],
348
+ required: ["scope", "secretId", "fieldKey"],
345
349
  },
346
350
  execute: async (_id, params) => {
347
351
  const scope = parseScope(params.scope);
348
- const scopeId = parseString(params.scopeId, "scopeId");
352
+ const scopeId = resolveScopeId(scope, params, ctx);
349
353
  const secretId = parseSecretId(params.secretId);
350
354
  const fieldKey = parseFieldKey(params.fieldKey);
351
355
  const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey });
@@ -361,7 +365,7 @@ export default {
361
365
  },
362
366
  }), { names: ["secret_get_field"] });
363
367
  // ─── secret_set_field ───────────────────────────────────────
364
- api.registerTool(() => ({
368
+ api.registerTool((ctx) => ({
365
369
  name: "secret_set_field",
366
370
  label: "Set Secret Field",
367
371
  description: "Add OR rotate one field. Same key as existing = rotate; new key = add. Encrypted fields are sealed locally.",
@@ -369,7 +373,7 @@ export default {
369
373
  type: "object",
370
374
  properties: {
371
375
  scope: { type: "string", enum: VALID_SCOPES },
372
- scopeId: { type: "string" },
376
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
373
377
  secretId: { type: "string" },
374
378
  fieldKey: { type: "string" },
375
379
  sensitivity: { type: "string", enum: VALID_SENSITIVITIES },
@@ -377,11 +381,11 @@ export default {
377
381
  value: { type: "string" },
378
382
  reason: { type: "string" },
379
383
  },
380
- required: ["scope", "scopeId", "secretId", "fieldKey", "sensitivity", "value"],
384
+ required: ["scope", "secretId", "fieldKey", "sensitivity", "value"],
381
385
  },
382
386
  execute: async (_id, params) => {
383
387
  const scope = parseScope(params.scope);
384
- const scopeId = parseString(params.scopeId, "scopeId");
388
+ const scopeId = resolveScopeId(scope, params, ctx);
385
389
  const secretId = parseSecretId(params.secretId);
386
390
  const fieldKey = parseFieldKey(params.fieldKey);
387
391
  const sensitivity = (() => {
@@ -420,7 +424,7 @@ export default {
420
424
  },
421
425
  }), { names: ["secret_set_field"] });
422
426
  // ─── secret_remove_field ────────────────────────────────────
423
- api.registerTool(() => ({
427
+ api.registerTool((ctx) => ({
424
428
  name: "secret_remove_field",
425
429
  label: "Remove Secret Field",
426
430
  description: "Remove one field from a secret. Other fields untouched.",
@@ -428,15 +432,15 @@ export default {
428
432
  type: "object",
429
433
  properties: {
430
434
  scope: { type: "string", enum: VALID_SCOPES },
431
- scopeId: { type: "string" },
435
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
432
436
  secretId: { type: "string" },
433
437
  fieldKey: { type: "string" },
434
438
  },
435
- required: ["scope", "scopeId", "secretId", "fieldKey"],
439
+ required: ["scope", "secretId", "fieldKey"],
436
440
  },
437
441
  execute: async (_id, params) => {
438
442
  const scope = parseScope(params.scope);
439
- const scopeId = parseString(params.scopeId, "scopeId");
443
+ const scopeId = resolveScopeId(scope, params, ctx);
440
444
  const secretId = parseSecretId(params.secretId);
441
445
  const fieldKey = parseFieldKey(params.fieldKey);
442
446
  await client.removeSecretField({ scope, scopeId, secretId, fieldKey });
@@ -445,7 +449,7 @@ export default {
445
449
  },
446
450
  }), { names: ["secret_remove_field"] });
447
451
  // ─── secret_update_metadata ─────────────────────────────────
448
- api.registerTool(() => ({
452
+ api.registerTool((ctx) => ({
449
453
  name: "secret_update_metadata",
450
454
  label: "Update Secret Metadata",
451
455
  description: "Patch secret-level metadata (name, description, tags, category). Does not touch fields.",
@@ -453,7 +457,7 @@ export default {
453
457
  type: "object",
454
458
  properties: {
455
459
  scope: { type: "string", enum: VALID_SCOPES },
456
- scopeId: { type: "string" },
460
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
457
461
  secretId: { type: "string" },
458
462
  secretName: { type: "string" },
459
463
  description: { type: "string" },
@@ -461,11 +465,11 @@ export default {
461
465
  category: { type: "string", enum: VALID_CATEGORIES },
462
466
  reason: { type: "string" },
463
467
  },
464
- required: ["scope", "scopeId", "secretId"],
468
+ required: ["scope", "secretId"],
465
469
  },
466
470
  execute: async (_id, params) => {
467
471
  const scope = parseScope(params.scope);
468
- const scopeId = parseString(params.scopeId, "scopeId");
472
+ const scopeId = resolveScopeId(scope, params, ctx);
469
473
  const secretId = parseSecretId(params.secretId);
470
474
  const secretName = typeof params.secretName === "string" ? parseSecretName(params.secretName) : undefined;
471
475
  const description = typeof params.description === "string" ? params.description : undefined;
@@ -480,7 +484,7 @@ export default {
480
484
  },
481
485
  }), { names: ["secret_update_metadata"] });
482
486
  // ─── secret_search ──────────────────────────────────────────
483
- api.registerTool(() => ({
487
+ api.registerTool((ctx) => ({
484
488
  name: "secret_search",
485
489
  label: "Search Secrets",
486
490
  description: "Find secrets by category, tag, or field key via the byFacet GSI.",
@@ -488,16 +492,16 @@ export default {
488
492
  type: "object",
489
493
  properties: {
490
494
  scope: { type: "string", enum: VALID_SCOPES },
491
- scopeId: { type: "string" },
495
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
492
496
  category: { type: "string", enum: VALID_CATEGORIES },
493
497
  tag: { type: "string" },
494
498
  fieldKey: { type: "string" },
495
499
  },
496
- required: ["scope", "scopeId"],
500
+ required: ["scope"],
497
501
  },
498
502
  execute: async (_id, params) => {
499
503
  const scope = parseScope(params.scope);
500
- const scopeId = parseString(params.scopeId, "scopeId");
504
+ const scopeId = resolveScopeId(scope, params, ctx);
501
505
  const category = typeof params.category === "string" ? params.category : undefined;
502
506
  const tag = typeof params.tag === "string" ? params.tag : undefined;
503
507
  const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
@@ -506,7 +510,7 @@ export default {
506
510
  },
507
511
  }), { names: ["secret_search"] });
508
512
  // ─── secret_get_history ─────────────────────────────────────
509
- api.registerTool(() => ({
513
+ api.registerTool((ctx) => ({
510
514
  name: "secret_get_history",
511
515
  label: "Get Secret History",
512
516
  description: "Bounded changelog read — metadata-only audit entries (no field values).",
@@ -514,16 +518,16 @@ export default {
514
518
  type: "object",
515
519
  properties: {
516
520
  scope: { type: "string", enum: VALID_SCOPES },
517
- scopeId: { type: "string" },
521
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
518
522
  secretId: { type: "string" },
519
523
  limit: { type: "number" },
520
524
  cursor: { type: "string" },
521
525
  },
522
- required: ["scope", "scopeId", "secretId"],
526
+ required: ["scope", "secretId"],
523
527
  },
524
528
  execute: async (_id, params) => {
525
529
  const scope = parseScope(params.scope);
526
- const scopeId = parseString(params.scopeId, "scopeId");
530
+ const scopeId = resolveScopeId(scope, params, ctx);
527
531
  const secretId = parseSecretId(params.secretId);
528
532
  const limit = typeof params.limit === "number" ? params.limit : undefined;
529
533
  const cursor = typeof params.cursor === "string" ? params.cursor : undefined;
@@ -531,7 +535,7 @@ export default {
531
535
  },
532
536
  }), { names: ["secret_get_history"] });
533
537
  // ─── secret_delete ──────────────────────────────────────────
534
- api.registerTool(() => ({
538
+ api.registerTool((ctx) => ({
535
539
  name: "secret_delete",
536
540
  label: "Delete Secret",
537
541
  description: "Delete a secret and all its fields, tags, and changelog rows.",
@@ -539,14 +543,14 @@ export default {
539
543
  type: "object",
540
544
  properties: {
541
545
  scope: { type: "string", enum: VALID_SCOPES },
542
- scopeId: { type: "string" },
546
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
543
547
  secretId: { type: "string" },
544
548
  },
545
- required: ["scope", "scopeId", "secretId"],
549
+ required: ["scope", "secretId"],
546
550
  },
547
551
  execute: async (_id, params) => {
548
552
  const scope = parseScope(params.scope);
549
- const scopeId = parseString(params.scopeId, "scopeId");
553
+ const scopeId = resolveScopeId(scope, params, ctx);
550
554
  const secretId = parseSecretId(params.secretId);
551
555
  await client.deleteSecret({ scope, scopeId, secretId });
552
556
  logger.info("Secret deleted", { scope, scopeId, secretId });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { SecretScope } from "@alfe.ai/agent-api-client";
2
+ export interface ToolContextLike {
3
+ agentId?: string;
4
+ }
5
+ /**
6
+ * Resolve `scopeId` for a tool call.
7
+ *
8
+ * For `scope === "agent"` the canonical value is the current agent's own ID.
9
+ * Agents only ever operate on their own per-agent scope (the server enforces
10
+ * via requireAgentSelfScope). We accept three inputs and normalise to the
11
+ * agent's ID:
12
+ *
13
+ * - omitted or empty → fill from ctx.agentId
14
+ * - the literal string "agent" → fill from ctx.agentId (LLM mistake)
15
+ * - a real ID (e.g. "agt_…") → use as-is
16
+ *
17
+ * Other scopes (org/team/project) require an explicit scopeId from the
18
+ * `secret_list_scopes` tool — they have no sensible default.
19
+ */
20
+ export declare function resolveScopeId(scope: SecretScope, params: Record<string, unknown>, ctx: ToolContextLike): string;
21
+ export declare const SCOPE_ID_DESCRIPTION = "For org/team/project scope: the concrete ID from `secret_list_scopes`. For agent scope: optional \u2014 defaults to the current agent's own ID. Never pass the literal word \"agent\" as the ID; pass the real agent ID (or omit it).";
22
+ //# sourceMappingURL=scope-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolve.d.ts","sourceRoot":"","sources":["../src/scope-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,eAAe,GACnB,MAAM,CAwBR;AAED,eAAO,MAAM,oBAAoB,0OACmM,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Resolve `scopeId` for a tool call.
3
+ *
4
+ * For `scope === "agent"` the canonical value is the current agent's own ID.
5
+ * Agents only ever operate on their own per-agent scope (the server enforces
6
+ * via requireAgentSelfScope). We accept three inputs and normalise to the
7
+ * agent's ID:
8
+ *
9
+ * - omitted or empty → fill from ctx.agentId
10
+ * - the literal string "agent" → fill from ctx.agentId (LLM mistake)
11
+ * - a real ID (e.g. "agt_…") → use as-is
12
+ *
13
+ * Other scopes (org/team/project) require an explicit scopeId from the
14
+ * `secret_list_scopes` tool — they have no sensible default.
15
+ */
16
+ export function resolveScopeId(scope, params, ctx) {
17
+ if (scope === "agent") {
18
+ const explicit = typeof params.scopeId === "string" &&
19
+ params.scopeId !== "agent" &&
20
+ params.scopeId.length > 0
21
+ ? params.scopeId
22
+ : undefined;
23
+ const fallback = ctx.agentId;
24
+ const resolved = explicit ?? fallback ?? "";
25
+ if (!resolved) {
26
+ throw new Error("agent scope requires either ctx.agentId from the runtime or an explicit agent scopeId from secret_list_scopes");
27
+ }
28
+ return resolved;
29
+ }
30
+ if (typeof params.scopeId !== "string" || params.scopeId.length === 0) {
31
+ throw new Error("scopeId is required");
32
+ }
33
+ if (params.scopeId.length > 256) {
34
+ throw new Error("scopeId must be 256 characters or fewer");
35
+ }
36
+ return params.scopeId;
37
+ }
38
+ export const SCOPE_ID_DESCRIPTION = "For org/team/project scope: the concrete ID from `secret_list_scopes`. For agent scope: optional — defaults to the current agent's own ID. Never pass the literal word \"agent\" as the ID; pass the real agent ID (or omit it).";
39
+ //# sourceMappingURL=scope-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolve.js","sourceRoot":"","sources":["../src/scope-resolve.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,MAA+B,EAC/B,GAAoB;IAEpB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,MAAM,CAAC,OAAO,KAAK,OAAO;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAC7B,MAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAC/B,kOAAkO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfe.ai/openclaw-secrets",
3
- "version": "0.1.15",
3
+ "version": "0.2.1",
4
4
  "description": "OpenClaw plugin — per-scope (org/team/project/agent) encrypted secret store. Agents encrypt/decrypt locally with AES-256-GCM; KMS data keys are fetched via the Alfe secrets service.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,7 +12,7 @@
12
12
  },
13
13
  "license": "UNLICENSED",
14
14
  "dependencies": {
15
- "@alfe.ai/agent-api-client": "0.1.2",
15
+ "@alfe.ai/agent-api-client": "0.1.3",
16
16
  "@alfe.ai/config": "0.0.8"
17
17
  },
18
18
  "devDependencies": {
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Unit coverage for the scopeId auto-fill helper. The plugin used to
3
+ * require an explicit scopeId for every tool call, which led LLMs to
4
+ * pass the literal word "agent" as the ID. This helper closes the gap
5
+ * by filling from ctx.agentId when scope=agent and the LLM either
6
+ * omits scopeId or sets it to "agent".
7
+ */
8
+ import { describe, it, expect } from "vitest";
9
+ import { resolveScopeId } from "../scope-resolve.js";
10
+
11
+ describe("resolveScopeId — agent scope", () => {
12
+ const ctx = { agentId: "agt_01TEST" };
13
+
14
+ it("falls back to ctx.agentId when scopeId is omitted", () => {
15
+ expect(resolveScopeId("agent", {}, ctx)).toBe("agt_01TEST");
16
+ });
17
+
18
+ it("falls back to ctx.agentId when scopeId is empty string", () => {
19
+ expect(resolveScopeId("agent", { scopeId: "" }, ctx)).toBe("agt_01TEST");
20
+ });
21
+
22
+ it("falls back to ctx.agentId when scopeId is the literal 'agent'", () => {
23
+ expect(resolveScopeId("agent", { scopeId: "agent" }, ctx)).toBe("agt_01TEST");
24
+ });
25
+
26
+ it("uses an explicit real agent ID as-is", () => {
27
+ expect(resolveScopeId("agent", { scopeId: "agt_01OTHER" }, ctx)).toBe("agt_01OTHER");
28
+ });
29
+
30
+ it("throws when ctx.agentId is missing and no usable scopeId is provided", () => {
31
+ expect(() => resolveScopeId("agent", {}, {})).toThrow(/agent scope requires/);
32
+ expect(() => resolveScopeId("agent", { scopeId: "agent" }, {})).toThrow(/agent scope requires/);
33
+ });
34
+ });
35
+
36
+ describe("resolveScopeId — non-agent scopes", () => {
37
+ const ctx = { agentId: "agt_01TEST" };
38
+
39
+ it("requires an explicit scopeId for org scope", () => {
40
+ expect(() => resolveScopeId("org", {}, ctx)).toThrow(/scopeId is required/);
41
+ expect(() => resolveScopeId("org", { scopeId: "" }, ctx)).toThrow(/scopeId is required/);
42
+ });
43
+
44
+ it("returns the explicit scopeId for team scope", () => {
45
+ expect(resolveScopeId("team", { scopeId: "team_x" }, ctx)).toBe("team_x");
46
+ });
47
+
48
+ it("returns the explicit scopeId for project scope", () => {
49
+ expect(resolveScopeId("project", { scopeId: "proj_y" }, ctx)).toBe("proj_y");
50
+ });
51
+
52
+ it("rejects scopeIds longer than 256 characters", () => {
53
+ const tooLong = "x".repeat(257);
54
+ expect(() => resolveScopeId("org", { scopeId: tooLong }, ctx)).toThrow(/256 characters/);
55
+ });
56
+
57
+ it("ignores ctx.agentId for non-agent scopes — explicit scopeId always wins", () => {
58
+ expect(resolveScopeId("team", { scopeId: "team_x" }, { agentId: "agt_other" })).toBe(
59
+ "team_x",
60
+ );
61
+ });
62
+ });
package/src/index.ts CHANGED
@@ -101,6 +101,11 @@ function parseString(raw: unknown, field: string, max = 256): string {
101
101
  return raw;
102
102
  }
103
103
 
104
+ // Re-export the local-friendly type alias so the rest of the file
105
+ // continues to refer to ToolContext (which has agentId? on it). The
106
+ // scope-resolve helper is structurally compatible.
107
+ import { resolveScopeId, SCOPE_ID_DESCRIPTION } from "./scope-resolve.js";
108
+
104
109
  function parseSecretName(raw: unknown): string {
105
110
  const s = parseString(raw, "name", 128);
106
111
  if (!NAME_REGEX.test(s)) {
@@ -191,7 +196,7 @@ export default {
191
196
  api.registerTool(() => ({
192
197
  name: "secret_list_scopes",
193
198
  label: "List Secret Scopes",
194
- description: "List scopes (org/team/project/agent) the agent can manage secrets in.",
199
+ description: "List scopes (org/team/project/agent) the agent can manage secrets in. The returned `scopeId` values are the IDs to pass into the other secret tools — never pass the literal word \"agent\" as a scopeId; for agent scope, omit scopeId and the runtime will fill in the current agent's ID.",
195
200
  parameters: { type: "object", properties: {} },
196
201
  execute: async () => {
197
202
  const scopes = await client.listSecretScopes();
@@ -200,7 +205,7 @@ export default {
200
205
  }), { names: ["secret_list_scopes"] });
201
206
 
202
207
  // ─── secret_list ────────────────────────────────────────────
203
- api.registerTool(() => ({
208
+ api.registerTool((ctx) => ({
204
209
  name: "secret_list",
205
210
  label: "List Secrets",
206
211
  description: "List secret metadata in a scope. Optional category/tag/fieldKey filters route through the byFacet GSI.",
@@ -208,16 +213,16 @@ export default {
208
213
  type: "object",
209
214
  properties: {
210
215
  scope: { type: "string", enum: VALID_SCOPES },
211
- scopeId: { type: "string" },
216
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
212
217
  category: { type: "string", enum: VALID_CATEGORIES },
213
218
  tag: { type: "string" },
214
219
  fieldKey: { type: "string" },
215
220
  },
216
- required: ["scope", "scopeId"],
221
+ required: ["scope"],
217
222
  },
218
223
  execute: async (_id, params) => {
219
224
  const scope = parseScope(params.scope);
220
- const scopeId = parseString(params.scopeId, "scopeId");
225
+ const scopeId = resolveScopeId(scope, params, ctx);
221
226
  const category = typeof params.category === "string" ? params.category as SecretCategory : undefined;
222
227
  const tag = typeof params.tag === "string" ? params.tag : undefined;
223
228
  const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
@@ -227,7 +232,7 @@ export default {
227
232
  }), { names: ["secret_list"] });
228
233
 
229
234
  // ─── secret_set ─────────────────────────────────────────────
230
- api.registerTool(() => ({
235
+ api.registerTool((ctx) => ({
231
236
  name: "secret_set",
232
237
  label: "Set Secret",
233
238
  description: "Create a new secret with one or more fields. Encrypted fields are sealed locally before upload.",
@@ -235,7 +240,7 @@ export default {
235
240
  type: "object",
236
241
  properties: {
237
242
  scope: { type: "string", enum: VALID_SCOPES },
238
- scopeId: { type: "string" },
243
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
239
244
  name: { type: "string", description: "Human-readable secret name (unique within scope)" },
240
245
  category: { type: "string", enum: VALID_CATEGORIES, description: "Defaults to 'other'" },
241
246
  description: { type: "string" },
@@ -259,11 +264,11 @@ export default {
259
264
  value: { type: "string", description: "Shorthand for fields=[{ key: 'value', sensitivity: 'encrypted', value }]" },
260
265
  reason: { type: "string" },
261
266
  },
262
- required: ["scope", "scopeId", "name"],
267
+ required: ["scope", "name"],
263
268
  },
264
269
  execute: async (_id, params) => {
265
270
  const scope = parseScope(params.scope);
266
- const scopeId = parseString(params.scopeId, "scopeId");
271
+ const scopeId = resolveScopeId(scope, params, ctx);
267
272
  const name = parseSecretName(params.name);
268
273
  const category = typeof params.category === "string"
269
274
  ? params.category as SecretCategory
@@ -308,7 +313,7 @@ export default {
308
313
  }), { names: ["secret_set"] });
309
314
 
310
315
  // ─── secret_get (legacy: returns `value` field plaintext as a string) ──
311
- api.registerTool(() => ({
316
+ api.registerTool((ctx) => ({
312
317
  name: "secret_get",
313
318
  label: "Get Secret (Legacy)",
314
319
  description: "Fetch and decrypt the `value`-keyed field. The output is SENSITIVE; do not echo or log.",
@@ -316,14 +321,14 @@ export default {
316
321
  type: "object",
317
322
  properties: {
318
323
  scope: { type: "string", enum: VALID_SCOPES },
319
- scopeId: { type: "string" },
324
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
320
325
  secretId: { type: "string" },
321
326
  },
322
- required: ["scope", "scopeId", "secretId"],
327
+ required: ["scope", "secretId"],
323
328
  },
324
329
  execute: async (_id, params) => {
325
330
  const scope = parseScope(params.scope);
326
- const scopeId = parseString(params.scopeId, "scopeId");
331
+ const scopeId = resolveScopeId(scope, params, ctx);
327
332
  const secretId = parseSecretId(params.secretId);
328
333
  const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey: "value" });
329
334
  if (field.sensitivity === "plaintext") {
@@ -338,7 +343,7 @@ export default {
338
343
  }), { names: ["secret_get"] });
339
344
 
340
345
  // ─── secret_get_full ────────────────────────────────────────
341
- api.registerTool(() => ({
346
+ api.registerTool((ctx) => ({
342
347
  name: "secret_get_full",
343
348
  label: "Get Secret (All Fields)",
344
349
  description: "Fetch the secret aggregate with all fields decrypted. Output is SENSITIVE.",
@@ -346,14 +351,14 @@ export default {
346
351
  type: "object",
347
352
  properties: {
348
353
  scope: { type: "string", enum: VALID_SCOPES },
349
- scopeId: { type: "string" },
354
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
350
355
  secretId: { type: "string" },
351
356
  },
352
- required: ["scope", "scopeId", "secretId"],
357
+ required: ["scope", "secretId"],
353
358
  },
354
359
  execute: async (_id, params) => {
355
360
  const scope = parseScope(params.scope);
356
- const scopeId = parseString(params.scopeId, "scopeId");
361
+ const scopeId = resolveScopeId(scope, params, ctx);
357
362
  const secretId = parseSecretId(params.secretId);
358
363
  const { aggregate, envelopes } = await client.getSecret({ scope, scopeId, secretId });
359
364
 
@@ -381,7 +386,7 @@ export default {
381
386
  }), { names: ["secret_get_full"] });
382
387
 
383
388
  // ─── secret_get_field ───────────────────────────────────────
384
- api.registerTool(() => ({
389
+ api.registerTool((ctx) => ({
385
390
  name: "secret_get_field",
386
391
  label: "Get Secret Field",
387
392
  description: "Fetch and decrypt one field by key. Cheaper than secret_get_full when you only need one piece.",
@@ -389,15 +394,15 @@ export default {
389
394
  type: "object",
390
395
  properties: {
391
396
  scope: { type: "string", enum: VALID_SCOPES },
392
- scopeId: { type: "string" },
397
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
393
398
  secretId: { type: "string" },
394
399
  fieldKey: { type: "string" },
395
400
  },
396
- required: ["scope", "scopeId", "secretId", "fieldKey"],
401
+ required: ["scope", "secretId", "fieldKey"],
397
402
  },
398
403
  execute: async (_id, params) => {
399
404
  const scope = parseScope(params.scope);
400
- const scopeId = parseString(params.scopeId, "scopeId");
405
+ const scopeId = resolveScopeId(scope, params, ctx);
401
406
  const secretId = parseSecretId(params.secretId);
402
407
  const fieldKey = parseFieldKey(params.fieldKey);
403
408
  const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey });
@@ -413,7 +418,7 @@ export default {
413
418
  }), { names: ["secret_get_field"] });
414
419
 
415
420
  // ─── secret_set_field ───────────────────────────────────────
416
- api.registerTool(() => ({
421
+ api.registerTool((ctx) => ({
417
422
  name: "secret_set_field",
418
423
  label: "Set Secret Field",
419
424
  description: "Add OR rotate one field. Same key as existing = rotate; new key = add. Encrypted fields are sealed locally.",
@@ -421,7 +426,7 @@ export default {
421
426
  type: "object",
422
427
  properties: {
423
428
  scope: { type: "string", enum: VALID_SCOPES },
424
- scopeId: { type: "string" },
429
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
425
430
  secretId: { type: "string" },
426
431
  fieldKey: { type: "string" },
427
432
  sensitivity: { type: "string", enum: VALID_SENSITIVITIES },
@@ -429,11 +434,11 @@ export default {
429
434
  value: { type: "string" },
430
435
  reason: { type: "string" },
431
436
  },
432
- required: ["scope", "scopeId", "secretId", "fieldKey", "sensitivity", "value"],
437
+ required: ["scope", "secretId", "fieldKey", "sensitivity", "value"],
433
438
  },
434
439
  execute: async (_id, params) => {
435
440
  const scope = parseScope(params.scope);
436
- const scopeId = parseString(params.scopeId, "scopeId");
441
+ const scopeId = resolveScopeId(scope, params, ctx);
437
442
  const secretId = parseSecretId(params.secretId);
438
443
  const fieldKey = parseFieldKey(params.fieldKey);
439
444
  const sensitivity = (() => {
@@ -474,7 +479,7 @@ export default {
474
479
  }), { names: ["secret_set_field"] });
475
480
 
476
481
  // ─── secret_remove_field ────────────────────────────────────
477
- api.registerTool(() => ({
482
+ api.registerTool((ctx) => ({
478
483
  name: "secret_remove_field",
479
484
  label: "Remove Secret Field",
480
485
  description: "Remove one field from a secret. Other fields untouched.",
@@ -482,15 +487,15 @@ export default {
482
487
  type: "object",
483
488
  properties: {
484
489
  scope: { type: "string", enum: VALID_SCOPES },
485
- scopeId: { type: "string" },
490
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
486
491
  secretId: { type: "string" },
487
492
  fieldKey: { type: "string" },
488
493
  },
489
- required: ["scope", "scopeId", "secretId", "fieldKey"],
494
+ required: ["scope", "secretId", "fieldKey"],
490
495
  },
491
496
  execute: async (_id, params) => {
492
497
  const scope = parseScope(params.scope);
493
- const scopeId = parseString(params.scopeId, "scopeId");
498
+ const scopeId = resolveScopeId(scope, params, ctx);
494
499
  const secretId = parseSecretId(params.secretId);
495
500
  const fieldKey = parseFieldKey(params.fieldKey);
496
501
  await client.removeSecretField({ scope, scopeId, secretId, fieldKey });
@@ -500,7 +505,7 @@ export default {
500
505
  }), { names: ["secret_remove_field"] });
501
506
 
502
507
  // ─── secret_update_metadata ─────────────────────────────────
503
- api.registerTool(() => ({
508
+ api.registerTool((ctx) => ({
504
509
  name: "secret_update_metadata",
505
510
  label: "Update Secret Metadata",
506
511
  description: "Patch secret-level metadata (name, description, tags, category). Does not touch fields.",
@@ -508,7 +513,7 @@ export default {
508
513
  type: "object",
509
514
  properties: {
510
515
  scope: { type: "string", enum: VALID_SCOPES },
511
- scopeId: { type: "string" },
516
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
512
517
  secretId: { type: "string" },
513
518
  secretName: { type: "string" },
514
519
  description: { type: "string" },
@@ -516,11 +521,11 @@ export default {
516
521
  category: { type: "string", enum: VALID_CATEGORIES },
517
522
  reason: { type: "string" },
518
523
  },
519
- required: ["scope", "scopeId", "secretId"],
524
+ required: ["scope", "secretId"],
520
525
  },
521
526
  execute: async (_id, params) => {
522
527
  const scope = parseScope(params.scope);
523
- const scopeId = parseString(params.scopeId, "scopeId");
528
+ const scopeId = resolveScopeId(scope, params, ctx);
524
529
  const secretId = parseSecretId(params.secretId);
525
530
  const secretName = typeof params.secretName === "string" ? parseSecretName(params.secretName) : undefined;
526
531
  const description = typeof params.description === "string" ? params.description : undefined;
@@ -536,7 +541,7 @@ export default {
536
541
  }), { names: ["secret_update_metadata"] });
537
542
 
538
543
  // ─── secret_search ──────────────────────────────────────────
539
- api.registerTool(() => ({
544
+ api.registerTool((ctx) => ({
540
545
  name: "secret_search",
541
546
  label: "Search Secrets",
542
547
  description: "Find secrets by category, tag, or field key via the byFacet GSI.",
@@ -544,16 +549,16 @@ export default {
544
549
  type: "object",
545
550
  properties: {
546
551
  scope: { type: "string", enum: VALID_SCOPES },
547
- scopeId: { type: "string" },
552
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
548
553
  category: { type: "string", enum: VALID_CATEGORIES },
549
554
  tag: { type: "string" },
550
555
  fieldKey: { type: "string" },
551
556
  },
552
- required: ["scope", "scopeId"],
557
+ required: ["scope"],
553
558
  },
554
559
  execute: async (_id, params) => {
555
560
  const scope = parseScope(params.scope);
556
- const scopeId = parseString(params.scopeId, "scopeId");
561
+ const scopeId = resolveScopeId(scope, params, ctx);
557
562
  const category = typeof params.category === "string" ? params.category as SecretCategory : undefined;
558
563
  const tag = typeof params.tag === "string" ? params.tag : undefined;
559
564
  const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
@@ -563,7 +568,7 @@ export default {
563
568
  }), { names: ["secret_search"] });
564
569
 
565
570
  // ─── secret_get_history ─────────────────────────────────────
566
- api.registerTool(() => ({
571
+ api.registerTool((ctx) => ({
567
572
  name: "secret_get_history",
568
573
  label: "Get Secret History",
569
574
  description: "Bounded changelog read — metadata-only audit entries (no field values).",
@@ -571,16 +576,16 @@ export default {
571
576
  type: "object",
572
577
  properties: {
573
578
  scope: { type: "string", enum: VALID_SCOPES },
574
- scopeId: { type: "string" },
579
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
575
580
  secretId: { type: "string" },
576
581
  limit: { type: "number" },
577
582
  cursor: { type: "string" },
578
583
  },
579
- required: ["scope", "scopeId", "secretId"],
584
+ required: ["scope", "secretId"],
580
585
  },
581
586
  execute: async (_id, params) => {
582
587
  const scope = parseScope(params.scope);
583
- const scopeId = parseString(params.scopeId, "scopeId");
588
+ const scopeId = resolveScopeId(scope, params, ctx);
584
589
  const secretId = parseSecretId(params.secretId);
585
590
  const limit = typeof params.limit === "number" ? params.limit : undefined;
586
591
  const cursor = typeof params.cursor === "string" ? params.cursor : undefined;
@@ -589,7 +594,7 @@ export default {
589
594
  }), { names: ["secret_get_history"] });
590
595
 
591
596
  // ─── secret_delete ──────────────────────────────────────────
592
- api.registerTool(() => ({
597
+ api.registerTool((ctx) => ({
593
598
  name: "secret_delete",
594
599
  label: "Delete Secret",
595
600
  description: "Delete a secret and all its fields, tags, and changelog rows.",
@@ -597,14 +602,14 @@ export default {
597
602
  type: "object",
598
603
  properties: {
599
604
  scope: { type: "string", enum: VALID_SCOPES },
600
- scopeId: { type: "string" },
605
+ scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
601
606
  secretId: { type: "string" },
602
607
  },
603
- required: ["scope", "scopeId", "secretId"],
608
+ required: ["scope", "secretId"],
604
609
  },
605
610
  execute: async (_id, params) => {
606
611
  const scope = parseScope(params.scope);
607
- const scopeId = parseString(params.scopeId, "scopeId");
612
+ const scopeId = resolveScopeId(scope, params, ctx);
608
613
  const secretId = parseSecretId(params.secretId);
609
614
  await client.deleteSecret({ scope, scopeId, secretId });
610
615
  logger.info("Secret deleted", { scope, scopeId, secretId });
@@ -0,0 +1,53 @@
1
+ import type { SecretScope } from "@alfe.ai/agent-api-client";
2
+
3
+ export interface ToolContextLike {
4
+ agentId?: string;
5
+ }
6
+
7
+ /**
8
+ * Resolve `scopeId` for a tool call.
9
+ *
10
+ * For `scope === "agent"` the canonical value is the current agent's own ID.
11
+ * Agents only ever operate on their own per-agent scope (the server enforces
12
+ * via requireAgentSelfScope). We accept three inputs and normalise to the
13
+ * agent's ID:
14
+ *
15
+ * - omitted or empty → fill from ctx.agentId
16
+ * - the literal string "agent" → fill from ctx.agentId (LLM mistake)
17
+ * - a real ID (e.g. "agt_…") → use as-is
18
+ *
19
+ * Other scopes (org/team/project) require an explicit scopeId from the
20
+ * `secret_list_scopes` tool — they have no sensible default.
21
+ */
22
+ export function resolveScopeId(
23
+ scope: SecretScope,
24
+ params: Record<string, unknown>,
25
+ ctx: ToolContextLike,
26
+ ): string {
27
+ if (scope === "agent") {
28
+ const explicit =
29
+ typeof params.scopeId === "string" &&
30
+ params.scopeId !== "agent" &&
31
+ params.scopeId.length > 0
32
+ ? params.scopeId
33
+ : undefined;
34
+ const fallback = ctx.agentId;
35
+ const resolved = explicit ?? fallback ?? "";
36
+ if (!resolved) {
37
+ throw new Error(
38
+ "agent scope requires either ctx.agentId from the runtime or an explicit agent scopeId from secret_list_scopes",
39
+ );
40
+ }
41
+ return resolved;
42
+ }
43
+ if (typeof params.scopeId !== "string" || params.scopeId.length === 0) {
44
+ throw new Error("scopeId is required");
45
+ }
46
+ if (params.scopeId.length > 256) {
47
+ throw new Error("scopeId must be 256 characters or fewer");
48
+ }
49
+ return params.scopeId;
50
+ }
51
+
52
+ export const SCOPE_ID_DESCRIPTION =
53
+ "For org/team/project scope: the concrete ID from `secret_list_scopes`. For agent scope: optional — defaults to the current agent's own ID. Never pass the literal word \"agent\" as the ID; pass the real agent ID (or omit it).";