@stigmer/cli 3.1.11 → 3.1.12
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.
- package/package.json +5 -5
- package/resources/delete.d.ts.map +1 -1
- package/resources/delete.js +5 -4
- package/resources/delete.js.map +1 -1
- package/resources/get-bindings.d.ts.map +1 -1
- package/resources/get-bindings.js +2 -0
- package/resources/get-bindings.js.map +1 -1
- package/resources/list.d.ts.map +1 -1
- package/resources/list.js +25 -2
- package/resources/list.js.map +1 -1
- package/src/resources/delete.ts +5 -4
- package/src/resources/get-bindings.ts +2 -0
- package/src/resources/list.ts +28 -2
- package/src/resources/mutate-verbs.integration.test.ts +33 -0
- package/src/resources/read-verbs.integration.test.ts +53 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/cli",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.12",
|
|
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.1.
|
|
39
|
-
"@stigmer/mcp-server": "3.1.
|
|
40
|
-
"@stigmer/protos": "3.1.
|
|
41
|
-
"@stigmer/sdk": "3.1.
|
|
38
|
+
"@stigmer/ink": "3.1.12",
|
|
39
|
+
"@stigmer/mcp-server": "3.1.12",
|
|
40
|
+
"@stigmer/protos": "3.1.12",
|
|
41
|
+
"@stigmer/sdk": "3.1.12",
|
|
42
42
|
"commander": "^12.1.0",
|
|
43
43
|
"fflate": "^0.8.3",
|
|
44
44
|
"ink": "^7.0.0",
|
|
@@ -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;
|
|
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"}
|
package/resources/delete.js
CHANGED
|
@@ -26,12 +26,13 @@ import { fetchResource } from "./get.js";
|
|
|
26
26
|
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
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
29
|
+
// Kinds that carry a Delete verb but no entry here (identity_provider,
|
|
30
|
+
// oauth_app, environment, workflow_instance, session) fall through to a
|
|
31
|
+
// "not implemented" usage error, matching Go's default branch.
|
|
32
32
|
// McpServer is the outlier whose delete takes a DeleteResourceInput, not an ID.
|
|
33
33
|
const DELETE_HANDLERS = new Map([
|
|
34
34
|
[ApiResourceKind.agent, (c, id) => c.agent.delete(id)],
|
|
35
|
+
[ApiResourceKind.agent_instance, (c, id) => c.agentInstance.delete(id)],
|
|
35
36
|
[ApiResourceKind.workflow, (c, id) => c.workflow.delete(id)],
|
|
36
37
|
[ApiResourceKind.mcp_server, (c, id) => c.mcpServer.delete({ resourceId: id })],
|
|
37
38
|
[ApiResourceKind.project, (c, id) => c.project.delete(id)],
|
|
@@ -49,7 +50,7 @@ export async function planDelete(client, typeArg, reference, org) {
|
|
|
49
50
|
}
|
|
50
51
|
const info = defaultRegistry().getByAlias(typeArg);
|
|
51
52
|
if (info === undefined) {
|
|
52
|
-
throw new UsageError(`unknown resource type: ${typeArg}\n\nAvailable types: agent, workflow, mcpserver, project, skill, execution, organization`);
|
|
53
|
+
throw new UsageError(`unknown resource type: ${typeArg}\n\nAvailable types: agent, agent-instance, workflow, mcpserver, project, skill, execution, organization`);
|
|
53
54
|
}
|
|
54
55
|
if (info.kind === ApiResourceKind.organization) {
|
|
55
56
|
return planOrganizationDelete(client, reference);
|
package/resources/delete.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AAqBhD,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/resources/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
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 { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
6
7
|
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
7
8
|
import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
|
|
8
9
|
import { WorkflowSchema } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
|
|
@@ -12,6 +13,7 @@ import { ProjectSchema } from "@stigmer/protos/ai/stigmer/tenancy/project/v1/api
|
|
|
12
13
|
import { UsageError } from "../errors/index.js";
|
|
13
14
|
const GET_BINDINGS = new Map([
|
|
14
15
|
[ApiResourceKind.agent, refGetter(ApiResourceKind.agent, AgentSchema, (c) => c.agent)],
|
|
16
|
+
[ApiResourceKind.agent_instance, refGetter(ApiResourceKind.agent_instance, AgentInstanceSchema, (c) => c.agentInstance)],
|
|
15
17
|
[ApiResourceKind.workflow, refGetter(ApiResourceKind.workflow, WorkflowSchema, (c) => c.workflow)],
|
|
16
18
|
[ApiResourceKind.mcp_server, refGetter(ApiResourceKind.mcp_server, McpServerSchema, (c) => c.mcpServer)],
|
|
17
19
|
[ApiResourceKind.project, refGetter(ApiResourceKind.project, ProjectSchema, (c) => c.project)],
|
|
@@ -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":"AAAA,+EAA+E;AAC/E,iFAAiF;AACjF,6EAA6E;AAC7E,wEAAwE;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,sDAAsD,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUhD,MAAM,YAAY,GAAyC,IAAI,GAAG,CAAC;IACjE,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,eAAe,CAAC,cAAc,EAAE,SAAS,CAAC,eAAe,CAAC,cAAc,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACxH,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClG,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxG,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9F,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,IAAqB;IAC7C,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAQD,SAAS,SAAS,CAAC,IAAqB,EAAE,MAAmB,EAAE,IAA+B;IAC5F,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,OAAO,GACX,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/G,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,SAAS,YAAY,CAAC,MAAmB,EAAE,IAA2D,EAAE,KAAa;IACnH,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,4BAA4B,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC"}
|
package/resources/list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/resources/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/resources/list.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAKtH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAqD,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAWjG,wBAAsB,aAAa,CACjC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAGD,eAAO,MAAM,YAAY,EAAE,UAS1B,CAAC"}
|
package/resources/list.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
// `list` dispatch: render a collection of resources for a kind.
|
|
2
2
|
//
|
|
3
3
|
// Most registry kinds are search-indexed and list through the unified
|
|
4
|
-
// SearchService (matching the Go CLI's search-backed list). Organizations
|
|
5
|
-
// API keys are not search-indexed and use their
|
|
4
|
+
// SearchService (matching the Go CLI's search-backed list). Organizations,
|
|
5
|
+
// API keys, and agent instances are not search-indexed and use their
|
|
6
|
+
// dedicated find/list RPCs.
|
|
7
|
+
import { create } from "@bufbuild/protobuf";
|
|
8
|
+
import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
9
|
+
import { ListAgentInstancesRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/io_pb";
|
|
6
10
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
11
|
+
import { PageInfoSchema } from "@stigmer/protos/ai/stigmer/commons/rpc/pagination_pb";
|
|
7
12
|
import { ApiKeySchema } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
8
13
|
import { SearchResultSchema } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
|
|
9
14
|
import { OrganizationSchema } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
@@ -26,6 +31,10 @@ export async function listResources(client, kind, org, limit, format) {
|
|
|
26
31
|
const result = await client.apiKey.findAll();
|
|
27
32
|
return renderCollection(ApiKeySchema, result.entries, format, APIKEY_TABLE);
|
|
28
33
|
}
|
|
34
|
+
if (kind === ApiResourceKind.agent_instance) {
|
|
35
|
+
const result = await client.agentInstance.list(create(ListAgentInstancesRequestSchema, { org, pageInfo: create(PageInfoSchema, { num: 1, size: limit }) }));
|
|
36
|
+
return renderCollection(AgentInstanceSchema, result.items, format, INSTANCE_TABLE);
|
|
37
|
+
}
|
|
29
38
|
if (!SEARCH_KINDS.has(kind)) {
|
|
30
39
|
throw new UsageError("list is not implemented for this resource type");
|
|
31
40
|
}
|
|
@@ -43,6 +52,20 @@ export const SEARCH_TABLE = {
|
|
|
43
52
|
date(str(json, "created_at")),
|
|
44
53
|
],
|
|
45
54
|
};
|
|
55
|
+
const INSTANCE_TABLE = {
|
|
56
|
+
resourceName: "agent instances",
|
|
57
|
+
headers: ["ID", "SLUG", "AGENT", "DESCRIPTION"],
|
|
58
|
+
row: (json) => {
|
|
59
|
+
const metadata = obj(json, "metadata");
|
|
60
|
+
const spec = obj(json, "spec");
|
|
61
|
+
return [
|
|
62
|
+
str(metadata, "id"),
|
|
63
|
+
str(metadata, "slug"),
|
|
64
|
+
str(spec, "agent_id"),
|
|
65
|
+
truncate(str(spec, "description"), 50),
|
|
66
|
+
];
|
|
67
|
+
},
|
|
68
|
+
};
|
|
46
69
|
const ORG_TABLE = {
|
|
47
70
|
resourceName: "organizations",
|
|
48
71
|
headers: ["NAME", "SLUG", "ID"],
|
package/resources/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/resources/list.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/resources/list.ts"],"names":[],"mappings":"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"}
|
package/src/resources/delete.ts
CHANGED
|
@@ -48,12 +48,13 @@ interface HasMetadata {
|
|
|
48
48
|
type DeleteFn = (client: Stigmer, id: string) => Promise<HasMetadata>;
|
|
49
49
|
|
|
50
50
|
// Kinds the unified delete handles directly, each bound to its SDK delete call.
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
51
|
+
// Kinds that carry a Delete verb but no entry here (identity_provider,
|
|
52
|
+
// oauth_app, environment, workflow_instance, session) fall through to a
|
|
53
|
+
// "not implemented" usage error, matching Go's default branch.
|
|
54
54
|
// McpServer is the outlier whose delete takes a DeleteResourceInput, not an ID.
|
|
55
55
|
const DELETE_HANDLERS: ReadonlyMap<ApiResourceKind, DeleteFn> = new Map<ApiResourceKind, DeleteFn>([
|
|
56
56
|
[ApiResourceKind.agent, (c, id) => c.agent.delete(id)],
|
|
57
|
+
[ApiResourceKind.agent_instance, (c, id) => c.agentInstance.delete(id)],
|
|
57
58
|
[ApiResourceKind.workflow, (c, id) => c.workflow.delete(id)],
|
|
58
59
|
[ApiResourceKind.mcp_server, (c, id) => c.mcpServer.delete({ resourceId: id })],
|
|
59
60
|
[ApiResourceKind.project, (c, id) => c.project.delete(id)],
|
|
@@ -79,7 +80,7 @@ export async function planDelete(
|
|
|
79
80
|
const info = defaultRegistry().getByAlias(typeArg);
|
|
80
81
|
if (info === undefined) {
|
|
81
82
|
throw new UsageError(
|
|
82
|
-
`unknown resource type: ${typeArg}\n\nAvailable types: agent, workflow, mcpserver, project, skill, execution, organization`,
|
|
83
|
+
`unknown resource type: ${typeArg}\n\nAvailable types: agent, agent-instance, workflow, mcpserver, project, skill, execution, organization`,
|
|
83
84
|
);
|
|
84
85
|
}
|
|
85
86
|
|
|
@@ -5,6 +5,7 @@
|
|
|
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 { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
8
9
|
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
9
10
|
import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
|
|
10
11
|
import { WorkflowSchema } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
|
|
@@ -24,6 +25,7 @@ type Getter = (client: Stigmer, ref: ParsedReference) => Promise<ResourceResult>
|
|
|
24
25
|
|
|
25
26
|
const GET_BINDINGS: ReadonlyMap<ApiResourceKind, Getter> = new Map([
|
|
26
27
|
[ApiResourceKind.agent, refGetter(ApiResourceKind.agent, AgentSchema, (c) => c.agent)],
|
|
28
|
+
[ApiResourceKind.agent_instance, refGetter(ApiResourceKind.agent_instance, AgentInstanceSchema, (c) => c.agentInstance)],
|
|
27
29
|
[ApiResourceKind.workflow, refGetter(ApiResourceKind.workflow, WorkflowSchema, (c) => c.workflow)],
|
|
28
30
|
[ApiResourceKind.mcp_server, refGetter(ApiResourceKind.mcp_server, McpServerSchema, (c) => c.mcpServer)],
|
|
29
31
|
[ApiResourceKind.project, refGetter(ApiResourceKind.project, ProjectSchema, (c) => c.project)],
|
package/src/resources/list.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
// `list` dispatch: render a collection of resources for a kind.
|
|
2
2
|
//
|
|
3
3
|
// Most registry kinds are search-indexed and list through the unified
|
|
4
|
-
// SearchService (matching the Go CLI's search-backed list). Organizations
|
|
5
|
-
// API keys are not search-indexed and use their
|
|
4
|
+
// SearchService (matching the Go CLI's search-backed list). Organizations,
|
|
5
|
+
// API keys, and agent instances are not search-indexed and use their
|
|
6
|
+
// dedicated find/list RPCs.
|
|
6
7
|
|
|
8
|
+
import { create } from "@bufbuild/protobuf";
|
|
9
|
+
import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
10
|
+
import { ListAgentInstancesRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/io_pb";
|
|
7
11
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
12
|
+
import { PageInfoSchema } from "@stigmer/protos/ai/stigmer/commons/rpc/pagination_pb";
|
|
8
13
|
import { ApiKeySchema } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
9
14
|
import { SearchResultSchema } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
|
|
10
15
|
import { OrganizationSchema } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
@@ -37,6 +42,12 @@ export async function listResources(
|
|
|
37
42
|
const result = await client.apiKey.findAll();
|
|
38
43
|
return renderCollection(ApiKeySchema, result.entries, format, APIKEY_TABLE);
|
|
39
44
|
}
|
|
45
|
+
if (kind === ApiResourceKind.agent_instance) {
|
|
46
|
+
const result = await client.agentInstance.list(
|
|
47
|
+
create(ListAgentInstancesRequestSchema, { org, pageInfo: create(PageInfoSchema, { num: 1, size: limit }) }),
|
|
48
|
+
);
|
|
49
|
+
return renderCollection(AgentInstanceSchema, result.items, format, INSTANCE_TABLE);
|
|
50
|
+
}
|
|
40
51
|
if (!SEARCH_KINDS.has(kind)) {
|
|
41
52
|
throw new UsageError("list is not implemented for this resource type");
|
|
42
53
|
}
|
|
@@ -56,6 +67,21 @@ export const SEARCH_TABLE: TableShape = {
|
|
|
56
67
|
],
|
|
57
68
|
};
|
|
58
69
|
|
|
70
|
+
const INSTANCE_TABLE: TableShape = {
|
|
71
|
+
resourceName: "agent instances",
|
|
72
|
+
headers: ["ID", "SLUG", "AGENT", "DESCRIPTION"],
|
|
73
|
+
row: (json) => {
|
|
74
|
+
const metadata = obj(json, "metadata");
|
|
75
|
+
const spec = obj(json, "spec");
|
|
76
|
+
return [
|
|
77
|
+
str(metadata, "id"),
|
|
78
|
+
str(metadata, "slug"),
|
|
79
|
+
str(spec, "agent_id"),
|
|
80
|
+
truncate(str(spec, "description"), 50),
|
|
81
|
+
];
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
59
85
|
const ORG_TABLE: TableShape = {
|
|
60
86
|
resourceName: "organizations",
|
|
61
87
|
headers: ["NAME", "SLUG", "ID"],
|
|
@@ -16,6 +16,9 @@ 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 { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
20
|
+
import { AgentInstanceCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/command_pb";
|
|
21
|
+
import { AgentInstanceQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/query_pb";
|
|
19
22
|
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
20
23
|
import { McpServerCommandController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/command_pb";
|
|
21
24
|
import { McpServerQueryController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/query_pb";
|
|
@@ -35,6 +38,11 @@ const knownAgent = create(AgentSchema, {
|
|
|
35
38
|
metadata: { name: "Reviewer", slug: "reviewer", org: "acme", id: "agt_1" },
|
|
36
39
|
});
|
|
37
40
|
|
|
41
|
+
const knownInstance = create(AgentInstanceSchema, {
|
|
42
|
+
metadata: { name: "reviewer-default", slug: "reviewer-default", org: "acme", id: "ain_1" },
|
|
43
|
+
spec: { agentId: "agt_1" },
|
|
44
|
+
});
|
|
45
|
+
|
|
38
46
|
const knownMcp = create(McpServerSchema, {
|
|
39
47
|
metadata: { name: "Filesystem", slug: "filesystem", org: "acme", id: "mcp_1" },
|
|
40
48
|
});
|
|
@@ -86,6 +94,20 @@ beforeAll(async () => {
|
|
|
86
94
|
delete: () => knownAgent,
|
|
87
95
|
});
|
|
88
96
|
|
|
97
|
+
router.service(AgentInstanceQueryController, {
|
|
98
|
+
get: (req) => {
|
|
99
|
+
if (req.value !== "ain_1") throw new ConnectError("agent instance not found", Code.NotFound);
|
|
100
|
+
return knownInstance;
|
|
101
|
+
},
|
|
102
|
+
getByReference: (req) => {
|
|
103
|
+
if (req.slug !== "reviewer-default") throw new ConnectError("agent instance not found", Code.NotFound);
|
|
104
|
+
return knownInstance;
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
router.service(AgentInstanceCommandController, {
|
|
108
|
+
delete: () => knownInstance,
|
|
109
|
+
});
|
|
110
|
+
|
|
89
111
|
router.service(McpServerQueryController, {
|
|
90
112
|
getByReference: () => knownMcp,
|
|
91
113
|
});
|
|
@@ -163,6 +185,17 @@ describe("delete (standard kinds)", () => {
|
|
|
163
185
|
expect((await plan.perform()).status).toBe("success");
|
|
164
186
|
});
|
|
165
187
|
|
|
188
|
+
it("describes then deletes an agent instance by org/slug", async () => {
|
|
189
|
+
const plan = await planDelete(client, "agent-instance", "reviewer-default", "acme");
|
|
190
|
+
|
|
191
|
+
expect(plan.warning.status).toBe("warning");
|
|
192
|
+
expect(plan.warning.sections[0].fields).toContainEqual({ key: "ID", value: "ain_1" });
|
|
193
|
+
|
|
194
|
+
const result = await plan.perform();
|
|
195
|
+
expect(result.status).toBe("success");
|
|
196
|
+
expect(result.message).toBe("Agent Instance deleted successfully");
|
|
197
|
+
});
|
|
198
|
+
|
|
166
199
|
it("deletes an MCP server via the DeleteResourceInput shape", async () => {
|
|
167
200
|
const plan = await planDelete(client, "mcpserver", "filesystem", "acme");
|
|
168
201
|
const result = await plan.perform();
|
|
@@ -11,6 +11,8 @@ 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 { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
15
|
+
import { AgentInstanceQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/query_pb";
|
|
14
16
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
15
17
|
import { ApiKeySchema } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
16
18
|
import { ApiKeyQueryController } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/query_pb";
|
|
@@ -35,6 +37,13 @@ const knownAgent = create(AgentSchema, {
|
|
|
35
37
|
spec: { description: "reviews code" },
|
|
36
38
|
});
|
|
37
39
|
|
|
40
|
+
const knownInstance = create(AgentInstanceSchema, {
|
|
41
|
+
apiVersion: "agentic.stigmer.ai/v1",
|
|
42
|
+
kind: "AgentInstance",
|
|
43
|
+
metadata: { name: "reviewer-default", slug: "reviewer-default", org: "acme", id: "ain_1" },
|
|
44
|
+
spec: { agentId: "agt_1", description: "Default instance (auto-created, no custom configuration)" },
|
|
45
|
+
});
|
|
46
|
+
|
|
38
47
|
const knownOrg = create(OrganizationSchema, {
|
|
39
48
|
apiVersion: "tenancy.stigmer.ai/v1",
|
|
40
49
|
kind: "Organization",
|
|
@@ -74,6 +83,20 @@ beforeAll(async () => {
|
|
|
74
83
|
return knownAgent;
|
|
75
84
|
},
|
|
76
85
|
});
|
|
86
|
+
router.service(AgentInstanceQueryController, {
|
|
87
|
+
get: (req) => {
|
|
88
|
+
if (req.value !== "ain_1") throw new ConnectError("agent instance not found", Code.NotFound);
|
|
89
|
+
return knownInstance;
|
|
90
|
+
},
|
|
91
|
+
getByReference: (req) => {
|
|
92
|
+
if (req.slug !== "reviewer-default") throw new ConnectError("agent instance not found", Code.NotFound);
|
|
93
|
+
return knownInstance;
|
|
94
|
+
},
|
|
95
|
+
list: (req) => {
|
|
96
|
+
if (req.org !== "acme") throw new ConnectError("org is required", Code.InvalidArgument);
|
|
97
|
+
return { totalCount: 1, items: [knownInstance] };
|
|
98
|
+
},
|
|
99
|
+
});
|
|
77
100
|
router.service(SearchService, {
|
|
78
101
|
search: () => ({ entries: [knownSearchResult], totalCount: 1, totalPages: 1 }),
|
|
79
102
|
});
|
|
@@ -117,6 +140,24 @@ describe("get integration", () => {
|
|
|
117
140
|
});
|
|
118
141
|
});
|
|
119
142
|
|
|
143
|
+
it("fetches an agent instance by org/slug and renders backend protojson", async () => {
|
|
144
|
+
const { schema, message } = await fetchResource(client, ApiResourceKind.agent_instance, {
|
|
145
|
+
kind: "ref",
|
|
146
|
+
org: "acme",
|
|
147
|
+
slug: "reviewer-default",
|
|
148
|
+
});
|
|
149
|
+
const rendered = JSON.parse(renderResource(schema, message, "json"));
|
|
150
|
+
expect(rendered).toEqual(toJson(AgentInstanceSchema, knownInstance, { useProtoFieldName: true }));
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it("fetches an agent instance by ID", async () => {
|
|
154
|
+
const { message } = await fetchResource(client, ApiResourceKind.agent_instance, { kind: "id", id: "ain_1" });
|
|
155
|
+
expect(JSON.parse(renderResource(AgentInstanceSchema, message, "json"))).toMatchObject({
|
|
156
|
+
metadata: { id: "ain_1" },
|
|
157
|
+
spec: { agent_id: "agt_1" },
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
120
161
|
it("resolves an organization by slug through findMyOrganizations", async () => {
|
|
121
162
|
const { message } = await fetchResource(client, ApiResourceKind.organization, {
|
|
122
163
|
kind: "ref",
|
|
@@ -161,4 +202,16 @@ describe("list integration", () => {
|
|
|
161
202
|
expect(out).toContain("NAME");
|
|
162
203
|
expect(out).toContain("acme/reviewer");
|
|
163
204
|
});
|
|
205
|
+
|
|
206
|
+
it("lists agent instances via the dedicated list RPC as JSON", async () => {
|
|
207
|
+
const out = await listResources(client, ApiResourceKind.agent_instance, "acme", 50, "json");
|
|
208
|
+
expect(JSON.parse(out)).toEqual([toJson(AgentInstanceSchema, knownInstance, { useProtoFieldName: true })]);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("renders a human table for agent instances with their parent agent", async () => {
|
|
212
|
+
const out = await listResources(client, ApiResourceKind.agent_instance, "acme", 50, "table");
|
|
213
|
+
expect(out).toContain("AGENT");
|
|
214
|
+
expect(out).toContain("reviewer-default");
|
|
215
|
+
expect(out).toContain("agt_1");
|
|
216
|
+
});
|
|
164
217
|
});
|