@stigmer/cli 3.3.0 → 3.4.0

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.
@@ -11,7 +11,7 @@ export function registerDelete(program) {
11
11
  const del = program
12
12
  .command("delete <type> <reference>")
13
13
  .description("delete a resource by type and reference (slug, org/slug, or ID)")
14
- .option("-f, --force", "skip the confirmation prompt")
14
+ .option("-f, --force", "skip the confirmation prompt and acknowledge destructive side effects (e.g. destroying a datastore's records)")
15
15
  .action((type, reference, options, command) => runDelete(type, reference, options, command));
16
16
  addResultFlags(del);
17
17
  }
@@ -26,7 +26,10 @@ async function runDelete(type, reference, options, command) {
26
26
  const client = connectBackend();
27
27
  ensureAuthenticated(client.config);
28
28
  const org = resolveOrganization(client.config, globalOrg(command));
29
- const plan = await planDelete(client.stigmer, type, reference, org);
29
+ // `-f/--force` carries double duty by design: it skips the prompt below AND
30
+ // rides the delete RPC as the force acknowledgment for kinds with
31
+ // server-side destruction guards (e.g. a non-empty datastore).
32
+ const plan = await planDelete(client.stigmer, type, reference, org, options.force === true);
30
33
  if (options.force !== true) {
31
34
  renderResult(plan.warning, format);
32
35
  const confirmed = await confirm(plan.confirmPrompt);
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,qDAAqD;AAGrD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMtE,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,2BAA2B,CAAC;SACpC,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,aAAa,EAAE,8BAA8B,CAAC;SACrD,MAAM,CAAC,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAoB,EAAE,OAAgB,EAAE,EAAE,CAClF,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAC7C,CAAC;IACJ,cAAc,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAoB,EAAE,OAAgB;IAC9F,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAErC,MAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5F,MAAM,CAAC,eAAe,CAAC;QACvB,MAAM,CAAC,wBAAwB,CAAC;QAChC,MAAM,CAAC,sBAAsB,CAAC;QAC9B,MAAM,CAAC,6BAA6B,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEpE,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,kEAAkE;YAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;IACH,CAAC;IAED,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,qDAAqD;AAGrD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMtE,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,2BAA2B,CAAC;SACpC,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,aAAa,EAAE,+GAA+G,CAAC;SACtI,MAAM,CAAC,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAoB,EAAE,OAAgB,EAAE,EAAE,CAClF,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAC7C,CAAC;IACJ,cAAc,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAoB,EAAE,OAAgB;IAC9F,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAErC,MAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5F,MAAM,CAAC,eAAe,CAAC;QACvB,MAAM,CAAC,wBAAwB,CAAC;QAChC,MAAM,CAAC,sBAAsB,CAAC;QAC9B,MAAM,CAAC,6BAA6B,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnE,4EAA4E;IAC5E,kEAAkE;IAClE,+DAA+D;IAC/D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE5F,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,kEAAkE;YAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;IACH,CAAC;IAED,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stigmer/cli",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "Stigmer command-line interface — manage agents, workflows, MCP servers, skills, and executions from the terminal",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -35,10 +35,10 @@
35
35
  "@connectrpc/connect": "^2.0.0",
36
36
  "@connectrpc/connect-node": "^2.1.1",
37
37
  "@modelcontextprotocol/sdk": "^1.26.0",
38
- "@stigmer/ink": "3.3.0",
39
- "@stigmer/mcp-server": "3.3.0",
40
- "@stigmer/protos": "3.3.0",
41
- "@stigmer/sdk": "3.3.0",
38
+ "@stigmer/ink": "3.4.0",
39
+ "@stigmer/mcp-server": "3.4.0",
40
+ "@stigmer/protos": "3.4.0",
41
+ "@stigmer/sdk": "3.4.0",
42
42
  "commander": "^12.1.0",
43
43
  "fflate": "^0.8.3",
44
44
  "ink": "^7.0.0",
@@ -13,6 +13,10 @@ export interface DeletePlan {
13
13
  * Build the delete plan for a `<type> <reference>` pair. Routes the three
14
14
  * special cases first, then the registry-driven standard path. Throws on
15
15
  * unknown/unsupported types before any network call.
16
+ *
17
+ * `force` is the caller's acknowledgment of destructive side effects; it rides
18
+ * the delete RPC for kinds whose contract carries a force field (see
19
+ * DELETE_HANDLERS). The command layer maps `-f/--force` onto it.
16
20
  */
17
- export declare function planDelete(client: Stigmer, typeArg: string, reference: string, org: string): Promise<DeletePlan>;
21
+ export declare function planDelete(client: Stigmer, typeArg: string, reference: string, org: string, force?: boolean): Promise<DeletePlan>;
18
22
  //# sourceMappingURL=delete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/resources/delete.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,gEAAgE;IAChE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACnC;AA0BD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,CAAC,CA0BrB"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/resources/delete.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,gEAAgE;IAChE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACnC;AAgDD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,KAAK,UAAQ,GACZ,OAAO,CAAC,UAAU,CAAC,CAwBrB"}
@@ -27,30 +27,51 @@ import { getterFor } from "./get-bindings.js";
27
27
  import { parseReference } from "./reference.js";
28
28
  // Kinds the unified delete handles directly, each bound to its SDK delete call.
29
29
  // Kinds that carry a Delete verb but no entry here (identity_provider,
30
- // oauth_app, environment, workflow_instance, session) fall through to a
30
+ // oauth_app, agent_share, workflow_instance, session) fall through to a
31
31
  // "not implemented" usage error, matching Go's default branch.
32
- // McpServer is the outlier whose delete takes a DeleteResourceInput, not an ID.
32
+ // Kinds whose delete takes a DeleteResourceInput (not an ID) thread the force
33
+ // acknowledgment through; today only the datastore server honors it (the
34
+ // non-empty guard), but force is the contract's generic ack carrier.
33
35
  const DELETE_HANDLERS = new Map([
34
36
  [ApiResourceKind.agent, (c, id) => c.agent.delete(id)],
35
37
  [ApiResourceKind.agent_instance, (c, id) => c.agentInstance.delete(id)],
36
38
  [ApiResourceKind.workflow, (c, id) => c.workflow.delete(id)],
37
- [ApiResourceKind.mcp_server, (c, id) => c.mcpServer.delete({ resourceId: id })],
39
+ [ApiResourceKind.mcp_server, (c, id, force) => c.mcpServer.delete({ resourceId: id, force })],
38
40
  [ApiResourceKind.project, (c, id) => c.project.delete(id)],
41
+ [ApiResourceKind.datastore, (c, id, force) => c.datastore.delete({ resourceId: id, force })],
42
+ [ApiResourceKind.environment, (c, id, force) => c.environment.delete({ resourceId: id, force })],
43
+ [ApiResourceKind.agent_channel, (c, id) => c.agentChannel.delete(id)],
44
+ [ApiResourceKind.channel_app, (c, id, force) => c.channelapp.delete({ resourceId: id, force })],
39
45
  [ApiResourceKind.skill, (c, id) => c.skill.delete(id)],
40
46
  [ApiResourceKind.api_key, (c, id) => c.apiKey.delete(id)],
41
47
  ]);
48
+ // The deletable-types list for the unknown-type error, derived from the
49
+ // handler map (plus the two special-cased routes) so it can never drift from
50
+ // what the dispatch below actually supports. Deliberately NOT derived from the
51
+ // registry's verb matrix — that declares Delete for kinds this dispatch does
52
+ // not wire, and listing those would over-promise.
53
+ function availableDeleteTypes() {
54
+ const wired = [...DELETE_HANDLERS.keys()]
55
+ .map((kind) => defaultRegistry().getByKind(kind)?.singular)
56
+ .filter((singular) => singular !== undefined);
57
+ return [...wired, "execution", "organization"].join(", ");
58
+ }
42
59
  /**
43
60
  * Build the delete plan for a `<type> <reference>` pair. Routes the three
44
61
  * special cases first, then the registry-driven standard path. Throws on
45
62
  * unknown/unsupported types before any network call.
63
+ *
64
+ * `force` is the caller's acknowledgment of destructive side effects; it rides
65
+ * the delete RPC for kinds whose contract carries a force field (see
66
+ * DELETE_HANDLERS). The command layer maps `-f/--force` onto it.
46
67
  */
47
- export async function planDelete(client, typeArg, reference, org) {
68
+ export async function planDelete(client, typeArg, reference, org, force = false) {
48
69
  if (isExecutionAlias(typeArg)) {
49
70
  return planExecutionCancel(client, reference);
50
71
  }
51
72
  const info = defaultRegistry().getByAlias(typeArg);
52
73
  if (info === undefined) {
53
- throw new UsageError(`unknown resource type: ${typeArg}\n\nAvailable types: agent, agent-instance, workflow, mcpserver, project, skill, execution, organization`);
74
+ throw new UsageError(`unknown resource type: ${typeArg}\n\nAvailable types: ${availableDeleteTypes()}`);
54
75
  }
55
76
  if (info.kind === ApiResourceKind.organization) {
56
77
  return planOrganizationDelete(client, reference);
@@ -62,9 +83,9 @@ export async function planDelete(client, typeArg, reference, org) {
62
83
  if (deleteFn === undefined) {
63
84
  throw new UsageError(`delete not implemented for ${info.displayName}`);
64
85
  }
65
- return planStandardDelete(client, info, reference, org, deleteFn);
86
+ return planStandardDelete(client, info, reference, org, deleteFn, force);
66
87
  }
67
- async function planStandardDelete(client, info, reference, org, deleteFn) {
88
+ async function planStandardDelete(client, info, reference, org, deleteFn, force) {
68
89
  // Safe by construction: every DELETE_HANDLERS key also has a get binding.
69
90
  const getter = getterFor(info.kind);
70
91
  if (getter === undefined) {
@@ -78,7 +99,7 @@ async function planStandardDelete(client, info, reference, org, deleteFn) {
78
99
  return {
79
100
  warning: buildDeleteWarning(info, resource),
80
101
  confirmPrompt: "Proceed with deletion? [y/N]",
81
- perform: async () => buildDeleteSuccess(info, await deleteFn(client, id)),
102
+ perform: async () => buildDeleteSuccess(info, await deleteFn(client, id, force)),
82
103
  };
83
104
  }
84
105
  async function planOrganizationDelete(client, reference) {
@@ -142,6 +163,17 @@ function buildDeleteWarning(info, message) {
142
163
  section.field("Tag", tag);
143
164
  warning.hint("This will delete the skill and all its versions.");
144
165
  }
166
+ if (info.kind === ApiResourceKind.datastore) {
167
+ // Mirrors the server's non-empty guard (GuardNonEmptyStep): the delete of
168
+ // a datastore holding records is refused unless force acknowledges it.
169
+ warning.hint("All records held by this datastore will be destroyed.");
170
+ warning.hint("A datastore holding records is refused unless --force acknowledges destroying them.");
171
+ }
172
+ if (info.kind === ApiResourceKind.agent_channel) {
173
+ // The server's documented distinction: delete is the connection's full
174
+ // teardown; disabling is the config-preserving pause.
175
+ warning.hint("Delete is the connection's full teardown; to pause instead, apply with spec.enabled: false.");
176
+ }
145
177
  warning.hint("This action cannot be undone.");
146
178
  return warning;
147
179
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/resources/delete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/resources/delete.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,qCAAqC;AACrC,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,qDAAqD;AACrD,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,4EAA4E;AAC5E,uCAAuC;AACvC,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,sCAAsC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAE9F,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyBhD,gFAAgF;AAChF,uEAAuE;AACvE,wEAAwE;AACxE,+DAA+D;AAC/D,8EAA8E;AAC9E,yEAAyE;AACzE,qEAAqE;AACrE,MAAM,eAAe,GAA2C,IAAI,GAAG,CAA4B;IACjG,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH,wEAAwE;AACxE,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,kDAAkD;AAClD,SAAS,oBAAoB;IAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;SAC1D,MAAM,CAAC,CAAC,QAAQ,EAAsB,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAe,EACf,OAAe,EACf,SAAiB,EACjB,GAAW,EACX,KAAK,GAAG,KAAK;IAEb,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,0BAA0B,OAAO,wBAAwB,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,4BAA4B,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,8BAA8B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAe,EACf,IAAc,EACd,SAAiB,EACjB,GAAW,EACX,QAAkB,EAClB,KAAc;IAEd,0EAA0E;IAC1E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,UAAU,CAAC,8BAA8B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAiC,CAAC;IAClF,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IAE/B,OAAO;QACL,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC3C,aAAa,EAAE,8BAA8B;QAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,MAAe,EAAE,SAAiB;IACtE,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAiC,CAAC;IACvH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;IAC7F,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9F,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAE9C,OAAO;QACL,OAAO;QACP,aAAa,EAAE,8BAA8B;QAC7C,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YACvE,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACvH,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe,EAAE,SAAiB;IAC7D,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,YAAY,CACpB,yBAAyB,SAAS,8DAA8D,EAChG,QAAQ,CAAC,KAAK,CACf,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAE7D,OAAO;QACL,OAAO;QACP,aAAa,EAAE,kCAAkC;QACjD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxF,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,cAAc,CAAC,2BAA2B,CAAC,CAAC;YAEvG,MAAM,GAAG,GAAG,kBAAkB;gBAC5B,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,yCAAyC,CAAC;gBAClE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YAC9D,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,IAAc,EAAE,OAAoB;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,yCAAyC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClH,MAAM,OAAO,GAAG,OAAO;SACpB,UAAU,CAAC,EAAE,CAAC;SACd,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;SACpB,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;SACxB,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;SACxB,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAE1B,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,GAAG,GAAI,OAAuC,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/D,IAAI,GAAG;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;QAC5C,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,aAAa,EAAE,CAAC;QAChD,uEAAuE;QACvE,sDAAsD;QACtD,OAAO,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;IAC9G,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAoB;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,WAAW,GAAI,OAA+C,CAAC,IAAI,EAAE,WAAW,CAAC;IACvF,IAAI,WAAW;QAAE,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,WAAW,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc,EAAE,OAAoB;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,uBAAuB,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnF,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,OAAoB;IAClC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;QAC9B,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;QAClC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;QAClC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-bindings.d.ts","sourceRoot":"","sources":["../../src/resources/get-bindings.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM/D,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAGtH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAYjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEnE"}
1
+ {"version":3,"file":"get-bindings.d.ts","sourceRoot":"","sources":["../../src/resources/get-bindings.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAU/D,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAGtH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAgBjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEnE"}
@@ -3,7 +3,11 @@
3
3
  // proto-kind registry and the high-level SDK sub-clients for the `get` verb;
4
4
  // the schema travels with the message so rendering stays kind-agnostic.
5
5
  import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
6
+ import { AgentChannelSchema } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
6
7
  import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
8
+ import { ChannelAppSchema } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
9
+ import { DatastoreSchema } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
10
+ import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
7
11
  import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
8
12
  import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
9
13
  import { WorkflowSchema } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
@@ -17,6 +21,10 @@ const GET_BINDINGS = new Map([
17
21
  [ApiResourceKind.workflow, refGetter(ApiResourceKind.workflow, WorkflowSchema, (c) => c.workflow)],
18
22
  [ApiResourceKind.mcp_server, refGetter(ApiResourceKind.mcp_server, McpServerSchema, (c) => c.mcpServer)],
19
23
  [ApiResourceKind.project, refGetter(ApiResourceKind.project, ProjectSchema, (c) => c.project)],
24
+ [ApiResourceKind.datastore, refGetter(ApiResourceKind.datastore, DatastoreSchema, (c) => c.datastore)],
25
+ [ApiResourceKind.environment, refGetter(ApiResourceKind.environment, EnvironmentSchema, (c) => c.environment)],
26
+ [ApiResourceKind.agent_channel, refGetter(ApiResourceKind.agent_channel, AgentChannelSchema, (c) => c.agentChannel)],
27
+ [ApiResourceKind.channel_app, refGetter(ApiResourceKind.channel_app, ChannelAppSchema, (c) => c.channelapp)],
20
28
  [ApiResourceKind.skill, refGetter(ApiResourceKind.skill, SkillSchema, (c) => c.skill)],
21
29
  [ApiResourceKind.api_key, idOnlyGetter(ApiKeySchema, (c) => c.apiKey, "API keys")],
22
30
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"get-bindings.js","sourceRoot":"","sources":["../../src/resources/get-bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-bindings.js","sourceRoot":"","sources":["../../src/resources/get-bindings.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export function registerDelete(program: Command): void {
19
19
  const del = program
20
20
  .command("delete <type> <reference>")
21
21
  .description("delete a resource by type and reference (slug, org/slug, or ID)")
22
- .option("-f, --force", "skip the confirmation prompt")
22
+ .option("-f, --force", "skip the confirmation prompt and acknowledge destructive side effects (e.g. destroying a datastore's records)")
23
23
  .action((type: string, reference: string, options: DeleteFlags, command: Command) =>
24
24
  runDelete(type, reference, options, command),
25
25
  );
@@ -40,7 +40,10 @@ async function runDelete(type: string, reference: string, options: DeleteFlags,
40
40
  ensureAuthenticated(client.config);
41
41
  const org = resolveOrganization(client.config, globalOrg(command));
42
42
 
43
- const plan = await planDelete(client.stigmer, type, reference, org);
43
+ // `-f/--force` carries double duty by design: it skips the prompt below AND
44
+ // rides the delete RPC as the force acknowledgment for kinds with
45
+ // server-side destruction guards (e.g. a non-empty datastore).
46
+ const plan = await planDelete(client.stigmer, type, reference, org, options.force === true);
44
47
 
45
48
  if (options.force !== true) {
46
49
  renderResult(plan.warning, format);
@@ -45,33 +45,60 @@ interface HasMetadata {
45
45
  readonly metadata?: { readonly id?: string; readonly name?: string; readonly slug?: string; readonly org?: string };
46
46
  }
47
47
 
48
- type DeleteFn = (client: Stigmer, id: string) => Promise<HasMetadata>;
48
+ // `force` is the RPC-level acknowledgment of destructive side effects (e.g. a
49
+ // datastore's held records) — distinct from, but carried by, the CLI's
50
+ // `-f/--force` flag. Kinds whose delete RPC takes a plain typed ID have no
51
+ // force field and simply ignore the argument.
52
+ type DeleteFn = (client: Stigmer, id: string, force: boolean) => Promise<HasMetadata>;
49
53
 
50
54
  // Kinds the unified delete handles directly, each bound to its SDK delete call.
51
55
  // Kinds that carry a Delete verb but no entry here (identity_provider,
52
- // oauth_app, environment, workflow_instance, session) fall through to a
56
+ // oauth_app, agent_share, workflow_instance, session) fall through to a
53
57
  // "not implemented" usage error, matching Go's default branch.
54
- // McpServer is the outlier whose delete takes a DeleteResourceInput, not an ID.
58
+ // Kinds whose delete takes a DeleteResourceInput (not an ID) thread the force
59
+ // acknowledgment through; today only the datastore server honors it (the
60
+ // non-empty guard), but force is the contract's generic ack carrier.
55
61
  const DELETE_HANDLERS: ReadonlyMap<ApiResourceKind, DeleteFn> = new Map<ApiResourceKind, DeleteFn>([
56
62
  [ApiResourceKind.agent, (c, id) => c.agent.delete(id)],
57
63
  [ApiResourceKind.agent_instance, (c, id) => c.agentInstance.delete(id)],
58
64
  [ApiResourceKind.workflow, (c, id) => c.workflow.delete(id)],
59
- [ApiResourceKind.mcp_server, (c, id) => c.mcpServer.delete({ resourceId: id })],
65
+ [ApiResourceKind.mcp_server, (c, id, force) => c.mcpServer.delete({ resourceId: id, force })],
60
66
  [ApiResourceKind.project, (c, id) => c.project.delete(id)],
67
+ [ApiResourceKind.datastore, (c, id, force) => c.datastore.delete({ resourceId: id, force })],
68
+ [ApiResourceKind.environment, (c, id, force) => c.environment.delete({ resourceId: id, force })],
69
+ [ApiResourceKind.agent_channel, (c, id) => c.agentChannel.delete(id)],
70
+ [ApiResourceKind.channel_app, (c, id, force) => c.channelapp.delete({ resourceId: id, force })],
61
71
  [ApiResourceKind.skill, (c, id) => c.skill.delete(id)],
62
72
  [ApiResourceKind.api_key, (c, id) => c.apiKey.delete(id)],
63
73
  ]);
64
74
 
75
+ // The deletable-types list for the unknown-type error, derived from the
76
+ // handler map (plus the two special-cased routes) so it can never drift from
77
+ // what the dispatch below actually supports. Deliberately NOT derived from the
78
+ // registry's verb matrix — that declares Delete for kinds this dispatch does
79
+ // not wire, and listing those would over-promise.
80
+ function availableDeleteTypes(): string {
81
+ const wired = [...DELETE_HANDLERS.keys()]
82
+ .map((kind) => defaultRegistry().getByKind(kind)?.singular)
83
+ .filter((singular): singular is string => singular !== undefined);
84
+ return [...wired, "execution", "organization"].join(", ");
85
+ }
86
+
65
87
  /**
66
88
  * Build the delete plan for a `<type> <reference>` pair. Routes the three
67
89
  * special cases first, then the registry-driven standard path. Throws on
68
90
  * unknown/unsupported types before any network call.
91
+ *
92
+ * `force` is the caller's acknowledgment of destructive side effects; it rides
93
+ * the delete RPC for kinds whose contract carries a force field (see
94
+ * DELETE_HANDLERS). The command layer maps `-f/--force` onto it.
69
95
  */
70
96
  export async function planDelete(
71
97
  client: Stigmer,
72
98
  typeArg: string,
73
99
  reference: string,
74
100
  org: string,
101
+ force = false,
75
102
  ): Promise<DeletePlan> {
76
103
  if (isExecutionAlias(typeArg)) {
77
104
  return planExecutionCancel(client, reference);
@@ -79,9 +106,7 @@ export async function planDelete(
79
106
 
80
107
  const info = defaultRegistry().getByAlias(typeArg);
81
108
  if (info === undefined) {
82
- throw new UsageError(
83
- `unknown resource type: ${typeArg}\n\nAvailable types: agent, agent-instance, workflow, mcpserver, project, skill, execution, organization`,
84
- );
109
+ throw new UsageError(`unknown resource type: ${typeArg}\n\nAvailable types: ${availableDeleteTypes()}`);
85
110
  }
86
111
 
87
112
  if (info.kind === ApiResourceKind.organization) {
@@ -97,7 +122,7 @@ export async function planDelete(
97
122
  throw new UsageError(`delete not implemented for ${info.displayName}`);
98
123
  }
99
124
 
100
- return planStandardDelete(client, info, reference, org, deleteFn);
125
+ return planStandardDelete(client, info, reference, org, deleteFn, force);
101
126
  }
102
127
 
103
128
  async function planStandardDelete(
@@ -106,6 +131,7 @@ async function planStandardDelete(
106
131
  reference: string,
107
132
  org: string,
108
133
  deleteFn: DeleteFn,
134
+ force: boolean,
109
135
  ): Promise<DeletePlan> {
110
136
  // Safe by construction: every DELETE_HANDLERS key also has a get binding.
111
137
  const getter = getterFor(info.kind);
@@ -122,7 +148,7 @@ async function planStandardDelete(
122
148
  return {
123
149
  warning: buildDeleteWarning(info, resource),
124
150
  confirmPrompt: "Proceed with deletion? [y/N]",
125
- perform: async () => buildDeleteSuccess(info, await deleteFn(client, id)),
151
+ perform: async () => buildDeleteSuccess(info, await deleteFn(client, id, force)),
126
152
  };
127
153
  }
128
154
 
@@ -200,6 +226,19 @@ function buildDeleteWarning(info: TypeInfo, message: HasMetadata): CommandResult
200
226
  warning.hint("This will delete the skill and all its versions.");
201
227
  }
202
228
 
229
+ if (info.kind === ApiResourceKind.datastore) {
230
+ // Mirrors the server's non-empty guard (GuardNonEmptyStep): the delete of
231
+ // a datastore holding records is refused unless force acknowledges it.
232
+ warning.hint("All records held by this datastore will be destroyed.");
233
+ warning.hint("A datastore holding records is refused unless --force acknowledges destroying them.");
234
+ }
235
+
236
+ if (info.kind === ApiResourceKind.agent_channel) {
237
+ // The server's documented distinction: delete is the connection's full
238
+ // teardown; disabling is the config-preserving pause.
239
+ warning.hint("Delete is the connection's full teardown; to pause instead, apply with spec.enabled: false.");
240
+ }
241
+
203
242
  warning.hint("This action cannot be undone.");
204
243
  return warning;
205
244
  }
@@ -5,7 +5,11 @@
5
5
 
6
6
  import type { DescMessage, Message } from "@bufbuild/protobuf";
7
7
  import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
8
+ import { AgentChannelSchema } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
8
9
  import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
10
+ import { ChannelAppSchema } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
11
+ import { DatastoreSchema } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
12
+ import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
9
13
  import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
10
14
  import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
11
15
  import { WorkflowSchema } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
@@ -29,6 +33,10 @@ const GET_BINDINGS: ReadonlyMap<ApiResourceKind, Getter> = new Map([
29
33
  [ApiResourceKind.workflow, refGetter(ApiResourceKind.workflow, WorkflowSchema, (c) => c.workflow)],
30
34
  [ApiResourceKind.mcp_server, refGetter(ApiResourceKind.mcp_server, McpServerSchema, (c) => c.mcpServer)],
31
35
  [ApiResourceKind.project, refGetter(ApiResourceKind.project, ProjectSchema, (c) => c.project)],
36
+ [ApiResourceKind.datastore, refGetter(ApiResourceKind.datastore, DatastoreSchema, (c) => c.datastore)],
37
+ [ApiResourceKind.environment, refGetter(ApiResourceKind.environment, EnvironmentSchema, (c) => c.environment)],
38
+ [ApiResourceKind.agent_channel, refGetter(ApiResourceKind.agent_channel, AgentChannelSchema, (c) => c.agentChannel)],
39
+ [ApiResourceKind.channel_app, refGetter(ApiResourceKind.channel_app, ChannelAppSchema, (c) => c.channelapp)],
32
40
  [ApiResourceKind.skill, refGetter(ApiResourceKind.skill, SkillSchema, (c) => c.skill)],
33
41
  [ApiResourceKind.api_key, idOnlyGetter(ApiKeySchema, (c) => c.apiKey, "API keys")],
34
42
  ]);
@@ -16,9 +16,21 @@ import { AgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentex
16
16
  import { AgentExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/command_pb";
17
17
  import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
18
18
  import { AgentExecutionQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/query_pb";
19
+ import { AgentChannelSchema } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
20
+ import { AgentChannelCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/command_pb";
21
+ import { AgentChannelQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/query_pb";
19
22
  import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
20
23
  import { AgentInstanceCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/command_pb";
21
24
  import { AgentInstanceQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/query_pb";
25
+ import { ChannelAppSchema } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
26
+ import { ChannelAppCommandController } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/command_pb";
27
+ import { ChannelAppQueryController } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/query_pb";
28
+ import { DatastoreSchema } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
29
+ import { DatastoreCommandController } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/command_pb";
30
+ import { DatastoreQueryController } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/query_pb";
31
+ import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
32
+ import { EnvironmentCommandController } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/command_pb";
33
+ import { EnvironmentQueryController } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/query_pb";
22
34
  import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
23
35
  import { McpServerCommandController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/command_pb";
24
36
  import { McpServerQueryController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/query_pb";
@@ -51,6 +63,28 @@ const knownWorkflow = create(WorkflowSchema, {
51
63
  metadata: { name: "Deploy", slug: "deploy", org: "acme", id: "wfl_1" },
52
64
  });
53
65
 
66
+ // The mock treats this datastore as NON-EMPTY: delete refuses without the
67
+ // force acknowledgment, mirroring the server's GuardNonEmptyStep contract.
68
+ const knownDatastore = create(DatastoreSchema, {
69
+ metadata: { name: "clinic-records", slug: "clinic-records", org: "acme", id: "dst_1" },
70
+ });
71
+
72
+ // Byte-shaped like the Go server's GuardNonEmptyStep refusal (delete_guards.go).
73
+ const nonEmptyGuardMessage =
74
+ 'datastore "clinic-records" holds 12 records across 3 collections; deleting destroys them — pass force to acknowledge';
75
+
76
+ const knownEnvironment = create(EnvironmentSchema, {
77
+ metadata: { name: "clinic-patient-db", slug: "clinic-patient-db", org: "acme", id: "env_1" },
78
+ });
79
+
80
+ const knownChannel = create(AgentChannelSchema, {
81
+ metadata: { name: "clinic-patient-whatsapp", slug: "clinic-patient-whatsapp", org: "acme", id: "ach_1" },
82
+ });
83
+
84
+ const knownChannelApp = create(ChannelAppSchema, {
85
+ metadata: { name: "clinic-meta-app", slug: "clinic-meta-app", org: "acme", id: "chapp_1" },
86
+ });
87
+
54
88
  // Pending execution (cancellable) vs. an already-terminal one.
55
89
  const pendingExecution = create(AgentExecutionSchema, {
56
90
  metadata: { id: "aex_run" },
@@ -72,10 +106,20 @@ const openSessions = new Set<ServerHttp2Session>();
72
106
  // Spies for the command-side calls, reset per test.
73
107
  let cancelCalls: string[] = [];
74
108
  let tagCalls: { workflowId: string; versionHash: string; tag: string }[] = [];
109
+ // Force-carrying deletes record what actually rode the RPC.
110
+ let datastoreDeletes: { resourceId: string; force: boolean }[] = [];
111
+ let environmentDeletes: { resourceId: string; force: boolean }[] = [];
112
+ let channelAppDeletes: { resourceId: string; force: boolean }[] = [];
113
+ // agent_channel's delete is a typed ID — no force field exists on the wire.
114
+ let channelDeleteIds: string[] = [];
75
115
 
76
116
  beforeEach(() => {
77
117
  cancelCalls = [];
78
118
  tagCalls = [];
119
+ datastoreDeletes = [];
120
+ environmentDeletes = [];
121
+ channelAppDeletes = [];
122
+ channelDeleteIds = [];
79
123
  });
80
124
 
81
125
  beforeAll(async () => {
@@ -118,6 +162,60 @@ beforeAll(async () => {
118
162
  },
119
163
  });
120
164
 
165
+ router.service(DatastoreQueryController, {
166
+ getByReference: (req) => {
167
+ if (req.slug !== "clinic-records") throw new ConnectError("datastore not found", Code.NotFound);
168
+ return knownDatastore;
169
+ },
170
+ });
171
+ router.service(DatastoreCommandController, {
172
+ delete: (req) => {
173
+ datastoreDeletes.push({ resourceId: req.resourceId, force: req.force });
174
+ // Mirrors GuardNonEmptyStep: a non-empty datastore refuses without force.
175
+ if (!req.force) throw new ConnectError(nonEmptyGuardMessage, Code.FailedPrecondition);
176
+ return knownDatastore;
177
+ },
178
+ });
179
+
180
+ router.service(EnvironmentQueryController, {
181
+ getByReference: (req) => {
182
+ if (req.slug !== "clinic-patient-db") throw new ConnectError("environment not found", Code.NotFound);
183
+ return knownEnvironment;
184
+ },
185
+ });
186
+ router.service(EnvironmentCommandController, {
187
+ delete: (req) => {
188
+ environmentDeletes.push({ resourceId: req.resourceId, force: req.force });
189
+ return knownEnvironment;
190
+ },
191
+ });
192
+
193
+ router.service(AgentChannelQueryController, {
194
+ getByReference: (req) => {
195
+ if (req.slug !== "clinic-patient-whatsapp") throw new ConnectError("agent channel not found", Code.NotFound);
196
+ return knownChannel;
197
+ },
198
+ });
199
+ router.service(AgentChannelCommandController, {
200
+ delete: (req) => {
201
+ channelDeleteIds.push(req.value);
202
+ return knownChannel;
203
+ },
204
+ });
205
+
206
+ router.service(ChannelAppQueryController, {
207
+ getByReference: (req) => {
208
+ if (req.slug !== "clinic-meta-app") throw new ConnectError("channel app not found", Code.NotFound);
209
+ return knownChannelApp;
210
+ },
211
+ });
212
+ router.service(ChannelAppCommandController, {
213
+ delete: (req) => {
214
+ channelAppDeletes.push({ resourceId: req.resourceId, force: req.force });
215
+ return knownChannelApp;
216
+ },
217
+ });
218
+
121
219
  router.service(WorkflowQueryController, {
122
220
  getByReference: (req) => {
123
221
  if (req.slug !== "deploy") throw new ConnectError("workflow not found", Code.NotFound);
@@ -208,9 +306,17 @@ describe("delete (standard kinds)", () => {
208
306
  expect(classify(err)?.exitCode).toBe(ExitCode.NotFound);
209
307
  });
210
308
 
211
- it("rejects an unknown type with a usage error", async () => {
309
+ it("rejects an unknown type and lists exactly the wired types", async () => {
212
310
  const err = await planDelete(client, "bogus", "x", "acme").catch((e) => e);
213
311
  expect(classify(err)?.exitCode).toBe(ExitCode.Usage);
312
+ // The list is derived from DELETE_HANDLERS (+ the two special cases), so
313
+ // it must name the wired kinds and never the declared-but-unwired ones.
314
+ const message = String(err.message);
315
+ for (const wired of ["datastore", "environment", "agentchannel", "channelapp", "execution", "organization"]) {
316
+ expect(message).toContain(wired);
317
+ }
318
+ expect(message).not.toContain("session");
319
+ expect(message).not.toContain("oauthapp");
214
320
  });
215
321
 
216
322
  it("rejects a kind that has no delete handler with a usage error", async () => {
@@ -219,6 +325,77 @@ describe("delete (standard kinds)", () => {
219
325
  });
220
326
  });
221
327
 
328
+ describe("delete (force acknowledgment)", () => {
329
+ it("threads --force to the datastore delete RPC as the destroy-records ack", async () => {
330
+ const plan = await planDelete(client, "datastore", "clinic-records", "acme", true);
331
+ const result = await plan.perform();
332
+
333
+ expect(result.status).toBe("success");
334
+ expect(result.message).toBe("Datastore deleted successfully");
335
+ expect(datastoreDeletes).toEqual([{ resourceId: "dst_1", force: true }]);
336
+ });
337
+
338
+ it("surfaces the non-empty guard refusal verbatim when force is absent", async () => {
339
+ const plan = await planDelete(client, "datastore", "clinic-records", "acme");
340
+ const err = await plan.perform().catch((e) => e);
341
+
342
+ // A confirmed-but-unforced delete must NOT bypass the server guard: the
343
+ // RPC carries force=false and the refusal reaches the user verbatim.
344
+ expect(datastoreDeletes).toEqual([{ resourceId: "dst_1", force: false }]);
345
+ const classified = classify(err);
346
+ expect(classified?.exitCode).toBe(ExitCode.Usage);
347
+ expect(classified?.message).toBe(`Precondition failed: ${nonEmptyGuardMessage}`);
348
+ });
349
+
350
+ it("warns up front that datastore records are destroyed and force-guarded", async () => {
351
+ const plan = await planDelete(client, "datastore", "clinic-records", "acme");
352
+ expect(plan.warning.hints).toContain("All records held by this datastore will be destroyed.");
353
+ expect(plan.warning.hints).toContain(
354
+ "A datastore holding records is refused unless --force acknowledges destroying them.",
355
+ );
356
+ });
357
+ });
358
+
359
+ describe("delete (cutover kinds: environment, agent channel, channel app)", () => {
360
+ it("deletes an environment via the DeleteResourceInput shape", async () => {
361
+ const plan = await planDelete(client, "environment", "clinic-patient-db", "acme");
362
+ const result = await plan.perform();
363
+
364
+ expect(result.status).toBe("success");
365
+ expect(result.message).toBe("Environment deleted successfully");
366
+ expect(environmentDeletes).toEqual([{ resourceId: "env_1", force: false }]);
367
+ });
368
+
369
+ it("threads --force through the environment delete (generic ack carrier)", async () => {
370
+ const plan = await planDelete(client, "environment", "clinic-patient-db", "acme", true);
371
+ await plan.perform();
372
+ expect(environmentDeletes).toEqual([{ resourceId: "env_1", force: true }]);
373
+ });
374
+
375
+ it("deletes an agent channel via its typed-ID contract, ignoring force gracefully", async () => {
376
+ const plan = await planDelete(client, "agent-channel", "clinic-patient-whatsapp", "acme", true);
377
+
378
+ // The teardown-vs-pause distinction rides the warning (server doc contract).
379
+ expect(plan.warning.hints).toContain(
380
+ "Delete is the connection's full teardown; to pause instead, apply with spec.enabled: false.",
381
+ );
382
+
383
+ const result = await plan.perform();
384
+ expect(result.status).toBe("success");
385
+ expect(result.message).toBe("Agent Channel deleted successfully");
386
+ expect(channelDeleteIds).toEqual(["ach_1"]);
387
+ });
388
+
389
+ it("deletes a channel app via the DeleteResourceInput shape", async () => {
390
+ const plan = await planDelete(client, "channel-app", "clinic-meta-app", "acme");
391
+ const result = await plan.perform();
392
+
393
+ expect(result.status).toBe("success");
394
+ expect(result.message).toBe("Channel App deleted successfully");
395
+ expect(channelAppDeletes).toEqual([{ resourceId: "chapp_1", force: false }]);
396
+ });
397
+ });
398
+
222
399
  describe("delete execution (cancel special case)", () => {
223
400
  it("cancels a non-terminal execution", async () => {
224
401
  const plan = await planDelete(client, "execution", "aex_run", "");
@@ -11,8 +11,14 @@ import { Code, ConnectError, type ConnectRouter } from "@connectrpc/connect";
11
11
  import { connectNodeAdapter } from "@connectrpc/connect-node";
12
12
  import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
13
13
  import { AgentQueryController } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/query_pb";
14
+ import { AgentChannelSchema } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
15
+ import { AgentChannelQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/query_pb";
14
16
  import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
15
17
  import { AgentInstanceQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/query_pb";
18
+ import { ChannelAppSchema } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
19
+ import { ChannelAppQueryController } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/query_pb";
20
+ import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
21
+ import { EnvironmentQueryController } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/query_pb";
16
22
  import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
17
23
  import { ApiKeySchema } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
18
24
  import { ApiKeyQueryController } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/query_pb";
@@ -67,6 +73,26 @@ const knownSearchResult = create(SearchResultSchema, {
67
73
  description: "reviews code",
68
74
  });
69
75
 
76
+ // The three T07 cutover kinds — wired into get-bindings alongside this test.
77
+ const knownEnvironment = create(EnvironmentSchema, {
78
+ apiVersion: "agentic.stigmer.ai/v1",
79
+ kind: "Environment",
80
+ metadata: { name: "clinic-patient-db", slug: "clinic-patient-db", org: "acme", id: "env_1" },
81
+ });
82
+
83
+ const knownChannel = create(AgentChannelSchema, {
84
+ apiVersion: "agentic.stigmer.ai/v1",
85
+ kind: "AgentChannel",
86
+ metadata: { name: "clinic-patient-whatsapp", slug: "clinic-patient-whatsapp", org: "acme", id: "ach_1" },
87
+ spec: { enabled: true },
88
+ });
89
+
90
+ const knownChannelApp = create(ChannelAppSchema, {
91
+ apiVersion: "agentic.stigmer.ai/v1",
92
+ kind: "ChannelApp",
93
+ metadata: { name: "clinic-meta-app", slug: "clinic-meta-app", org: "acme", id: "chapp_1" },
94
+ });
95
+
70
96
  let backend: Http2Server;
71
97
  let client: Stigmer;
72
98
  const openSessions = new Set<ServerHttp2Session>();
@@ -106,6 +132,36 @@ beforeAll(async () => {
106
132
  router.service(ApiKeyQueryController, {
107
133
  findAll: () => ({ entries: [knownApiKey] }),
108
134
  });
135
+ router.service(EnvironmentQueryController, {
136
+ get: (req) => {
137
+ if (req.value !== "env_1") throw new ConnectError("environment not found", Code.NotFound);
138
+ return knownEnvironment;
139
+ },
140
+ getByReference: (req) => {
141
+ if (req.slug !== "clinic-patient-db") throw new ConnectError("environment not found", Code.NotFound);
142
+ return knownEnvironment;
143
+ },
144
+ });
145
+ router.service(AgentChannelQueryController, {
146
+ get: (req) => {
147
+ if (req.value !== "ach_1") throw new ConnectError("agent channel not found", Code.NotFound);
148
+ return knownChannel;
149
+ },
150
+ getByReference: (req) => {
151
+ if (req.slug !== "clinic-patient-whatsapp") throw new ConnectError("agent channel not found", Code.NotFound);
152
+ return knownChannel;
153
+ },
154
+ });
155
+ router.service(ChannelAppQueryController, {
156
+ get: (req) => {
157
+ if (req.value !== "chapp_1") throw new ConnectError("channel app not found", Code.NotFound);
158
+ return knownChannelApp;
159
+ },
160
+ getByReference: (req) => {
161
+ if (req.slug !== "clinic-meta-app") throw new ConnectError("channel app not found", Code.NotFound);
162
+ return knownChannelApp;
163
+ },
164
+ });
109
165
  };
110
166
  backend = createHttp2Server(connectNodeAdapter({ routes }));
111
167
  backend.on("session", (session) => {
@@ -169,6 +225,58 @@ describe("get integration", () => {
169
225
  });
170
226
  });
171
227
 
228
+ it("fetches an environment by org/slug and renders backend protojson", async () => {
229
+ const { schema, message } = await fetchResource(client, ApiResourceKind.environment, {
230
+ kind: "ref",
231
+ org: "acme",
232
+ slug: "clinic-patient-db",
233
+ });
234
+ const rendered = JSON.parse(renderResource(schema, message, "json"));
235
+ expect(rendered).toEqual(toJson(EnvironmentSchema, knownEnvironment, { useProtoFieldName: true }));
236
+ });
237
+
238
+ it("fetches an environment by ID", async () => {
239
+ const { message } = await fetchResource(client, ApiResourceKind.environment, { kind: "id", id: "env_1" });
240
+ expect(JSON.parse(renderResource(EnvironmentSchema, message, "json"))).toMatchObject({
241
+ metadata: { id: "env_1" },
242
+ });
243
+ });
244
+
245
+ it("fetches an agent channel by org/slug and renders backend protojson", async () => {
246
+ const { schema, message } = await fetchResource(client, ApiResourceKind.agent_channel, {
247
+ kind: "ref",
248
+ org: "acme",
249
+ slug: "clinic-patient-whatsapp",
250
+ });
251
+ const rendered = JSON.parse(renderResource(schema, message, "json"));
252
+ expect(rendered).toEqual(toJson(AgentChannelSchema, knownChannel, { useProtoFieldName: true }));
253
+ });
254
+
255
+ it("fetches an agent channel by ID", async () => {
256
+ const { message } = await fetchResource(client, ApiResourceKind.agent_channel, { kind: "id", id: "ach_1" });
257
+ expect(JSON.parse(renderResource(AgentChannelSchema, message, "json"))).toMatchObject({
258
+ metadata: { id: "ach_1" },
259
+ spec: { enabled: true },
260
+ });
261
+ });
262
+
263
+ it("fetches a channel app by org/slug and renders backend protojson", async () => {
264
+ const { schema, message } = await fetchResource(client, ApiResourceKind.channel_app, {
265
+ kind: "ref",
266
+ org: "acme",
267
+ slug: "clinic-meta-app",
268
+ });
269
+ const rendered = JSON.parse(renderResource(schema, message, "json"));
270
+ expect(rendered).toEqual(toJson(ChannelAppSchema, knownChannelApp, { useProtoFieldName: true }));
271
+ });
272
+
273
+ it("fetches a channel app by ID", async () => {
274
+ const { message } = await fetchResource(client, ApiResourceKind.channel_app, { kind: "id", id: "chapp_1" });
275
+ expect(JSON.parse(renderResource(ChannelAppSchema, message, "json"))).toMatchObject({
276
+ metadata: { id: "chapp_1" },
277
+ });
278
+ });
279
+
172
280
  it("maps a NotFound backend error to ExitCode.NotFound", async () => {
173
281
  const err = await fetchResource(client, ApiResourceKind.agent, { kind: "id", id: "missing" }).catch((e) => e);
174
282
  const classified = classify(err);
@@ -176,7 +284,9 @@ describe("get integration", () => {
176
284
  });
177
285
 
178
286
  it("rejects an unsupported kind with a usage error", async () => {
179
- const err = await fetchResource(client, ApiResourceKind.environment, { kind: "id", id: "x" }).catch((e) => e);
287
+ // session declares Get in the registry but has no get binding — the
288
+ // canonical still-unwired kind (environment gained a binding).
289
+ const err = await fetchResource(client, ApiResourceKind.session, { kind: "id", id: "x" }).catch((e) => e);
180
290
  expect(classify(err)?.exitCode).toBe(ExitCode.Usage);
181
291
  });
182
292
  });