@stigmer/cli 3.1.11 → 3.1.13
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/resources/share.d.ts.map +1 -1
- package/resources/share.js +37 -15
- package/resources/share.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/src/resources/share.test.ts +73 -0
- package/src/resources/share.ts +42 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/cli",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.13",
|
|
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.13",
|
|
39
|
+
"@stigmer/mcp-server": "3.1.13",
|
|
40
|
+
"@stigmer/protos": "3.1.13",
|
|
41
|
+
"@stigmer/sdk": "3.1.13",
|
|
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":"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"}
|
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/resources/share.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/resources/share.ts"],"names":[],"mappings":"AA8BA,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7C,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/resources/share.ts"],"names":[],"mappings":"AA8BA,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7C,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CA4FxB"}
|
package/resources/share.js
CHANGED
|
@@ -43,10 +43,28 @@ export async function shareAgent(client, ref, org, options) {
|
|
|
43
43
|
` stigmer share agent ${ref} --org <org>`);
|
|
44
44
|
}
|
|
45
45
|
const agent = await resolveAgentRef(client, ref, org);
|
|
46
|
-
|
|
46
|
+
const agentOrg = agent.metadata?.org ?? "";
|
|
47
|
+
// The share lands in the CALLER's resolved org (decision 013 D8): when
|
|
48
|
+
// it differs from the agent's, this is a cross-org share — the caller
|
|
49
|
+
// org's own channel (URL, billing, credentials) of another org's
|
|
50
|
+
// marketplace-public agent. An empty org (ID ref without context)
|
|
51
|
+
// falls back to the agent's own — the Phase A same-org form.
|
|
52
|
+
const shareOrg = org || agentOrg;
|
|
53
|
+
const isCrossOrg = shareOrg !== agentOrg;
|
|
54
|
+
let share = await resolveCanonicalShare(client, agent, shareOrg);
|
|
47
55
|
const current = share?.spec;
|
|
48
56
|
const currentAudience = audienceFromProto(current?.audience);
|
|
49
57
|
const targetAudience = options.audience ?? currentAudience;
|
|
58
|
+
// Cross-org shares are public-audience only (decision 013 D3). The
|
|
59
|
+
// server refuses this too; refusing here names the remedy instead of
|
|
60
|
+
// surfacing a bare FAILED_PRECONDITION — and mirrors the share dialog,
|
|
61
|
+
// which hides the audience selector in cross-org mode.
|
|
62
|
+
if (isCrossOrg && targetAudience === "org") {
|
|
63
|
+
throw new UsageError("--audience org is not available for another organization's agent\n\n" +
|
|
64
|
+
`A share of ${agentOrg}/${agent.metadata?.slug ?? ""} in your organization\n` +
|
|
65
|
+
"(" + shareOrg + ") serves anyone with the link. Org-members-only sharing\n" +
|
|
66
|
+
"is limited to the agent's own organization.");
|
|
67
|
+
}
|
|
50
68
|
// Resetting the link is meaningless for org-members-only shares: their
|
|
51
69
|
// access is gated by live membership, and the member link never carries
|
|
52
70
|
// the token. Refuse rather than silently rotating an unused secret —
|
|
@@ -71,7 +89,7 @@ export async function shareAgent(client, ref, org, options) {
|
|
|
71
89
|
// Apply the COMPLETE spec with only the requested fields changed, so a
|
|
72
90
|
// CLI toggle can never wipe console-configured origins, visitor
|
|
73
91
|
// messages, credential bindings, or an org-members-only audience.
|
|
74
|
-
share = await client.agentShare.apply(preservingShareInput(agent, share, options.enabled, targetAudience));
|
|
92
|
+
share = await client.agentShare.apply(preservingShareInput(agent, share, shareOrg, options.enabled, targetAudience));
|
|
75
93
|
}
|
|
76
94
|
// The rotation is a separate targeted RPC (the token is server-owned
|
|
77
95
|
// status, not part of the spec apply merges). The returned share carries
|
|
@@ -84,19 +102,22 @@ export async function shareAgent(client, ref, org, options) {
|
|
|
84
102
|
return describeOutcome(agent, share, options, targetAudience, alreadyInState && options.resetLink !== true);
|
|
85
103
|
}
|
|
86
104
|
/**
|
|
87
|
-
* The agent's canonical share
|
|
88
|
-
* server's default on create), else the
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
105
|
+
* The agent's canonical share **within one sharing org**: the one whose
|
|
106
|
+
* slug equals the agent's (the server's default on create), else the
|
|
107
|
+
* first entry in that org, else null when the agent has never been shared
|
|
108
|
+
* there. Mirrors the web dialog's selection so both surfaces manage the
|
|
109
|
+
* same row. The org filter is what keeps each org on its own channel
|
|
110
|
+
* (decision 013): an agent may be shared in N orgs, and toggling here
|
|
111
|
+
* must never edit another org's share.
|
|
92
112
|
*/
|
|
93
|
-
async function resolveCanonicalShare(client, agent) {
|
|
113
|
+
async function resolveCanonicalShare(client, agent, shareOrg) {
|
|
94
114
|
const result = await client.agentShare.getByAgent(create(GetAgentSharesByAgentRequestSchema, {
|
|
95
115
|
agentId: agent.metadata?.id ?? "",
|
|
96
116
|
}));
|
|
97
117
|
const agentSlug = agent.metadata?.slug ?? "";
|
|
98
|
-
|
|
99
|
-
|
|
118
|
+
const inOrg = result.items.filter((share) => share.metadata?.org === shareOrg);
|
|
119
|
+
return (inOrg.find((share) => share.metadata?.slug === agentSlug) ??
|
|
120
|
+
inOrg[0] ??
|
|
100
121
|
null);
|
|
101
122
|
}
|
|
102
123
|
// Unspecified means public by contract (a share created without an explicit
|
|
@@ -109,15 +130,16 @@ function audienceFromProto(audience) {
|
|
|
109
130
|
// was never shared before). Identity comes from the existing share when one
|
|
110
131
|
// exists — a manifest-created share may carry a non-default slug, and
|
|
111
132
|
// applying with the agent's slug would create a SECOND share — and from the
|
|
112
|
-
// agent otherwise (the server's own D2 default,
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
|
|
133
|
+
// sharing org + the agent's slug otherwise (the server's own D2 default,
|
|
134
|
+
// made explicit; for a cross-org share the org is the CALLER's, not the
|
|
135
|
+
// agent's — decision 013). The audience is written explicitly — never left
|
|
136
|
+
// unspecified — so a console-managed org share can't drift back to public.
|
|
137
|
+
function preservingShareInput(agent, share, shareOrg, enabled, audience) {
|
|
116
138
|
const agentOrg = agent.metadata?.org ?? "";
|
|
117
139
|
const agentSlug = agent.metadata?.slug ?? "";
|
|
118
140
|
const current = share?.spec;
|
|
119
141
|
return {
|
|
120
|
-
org: share?.metadata?.org ||
|
|
142
|
+
org: share?.metadata?.org || shareOrg,
|
|
121
143
|
slug: share?.metadata?.slug || agentSlug,
|
|
122
144
|
name: share?.metadata?.name || agent.metadata?.name || agentSlug,
|
|
123
145
|
agentRef: { org: agentOrg, slug: agentSlug },
|
package/resources/share.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/resources/share.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wCAAwC;AACxC,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,oCAAoC;AACpC,EAAE;AACF,sEAAsE;AACtE,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,uEAAuE;AACvE,+EAA+E;AAC/E,4EAA4E;AAE5E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,GAC3B,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAC9F,OAAO,EACL,YAAY,EACZ,iBAAiB,GAGlB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAgCnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAe,EACf,GAAW,EACX,GAAW,EACX,OAA0B;IAE1B,sEAAsE;IACtE,yEAAyE;IACzE,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,UAAU,CAClB,0BAA0B;YACxB,gBAAgB;YAChB,4CAA4C;YAC5C,yBAAyB,GAAG,cAAc,CAC7C,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,KAAK,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/resources/share.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
|
});
|
|
@@ -467,6 +467,79 @@ describe("shareAgent --reset-link (rotatable share token)", () => {
|
|
|
467
467
|
});
|
|
468
468
|
});
|
|
469
469
|
|
|
470
|
+
describe("shareAgent cross-org (decision 013)", () => {
|
|
471
|
+
it("lands the share in the CALLER's org, agent_ref keeps the provider's", async () => {
|
|
472
|
+
const { client, applies } = fakeClient(makeAgent(), null);
|
|
473
|
+
|
|
474
|
+
const result = await shareAgent(client, "acme/support-agent", "consumer-org", {
|
|
475
|
+
enabled: true,
|
|
476
|
+
...CLOUD,
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
expect(applies).toHaveLength(1);
|
|
480
|
+
// The share is the caller org's channel: its URL, billing, and
|
|
481
|
+
// credentials — while the blueprint reference stays the provider's.
|
|
482
|
+
expect(applies[0].org).toBe("consumer-org");
|
|
483
|
+
expect(applies[0].slug).toBe("support-agent");
|
|
484
|
+
expect(applies[0].agentRef).toEqual({ org: "acme", slug: "support-agent" });
|
|
485
|
+
|
|
486
|
+
const link = result.sections.find((s) => s.title === "Public chat link");
|
|
487
|
+
expect(link?.items).toEqual(["https://app.stigmer.ai/chat/consumer-org/support-agent"]);
|
|
488
|
+
expect(result.hints.some((h) => h.includes("consumer-org's credits"))).toBe(true);
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
it("never edits the provider org's own share (canonical resolution is org-scoped)", async () => {
|
|
492
|
+
// The provider already shares this agent with its own config; the
|
|
493
|
+
// caller's toggle must create the CALLER org's share, not flip (or
|
|
494
|
+
// inherit the config of) the provider's row.
|
|
495
|
+
const providerShare = makeShare({
|
|
496
|
+
enabled: true,
|
|
497
|
+
allowedOrigins: ["https://provider.example.com"],
|
|
498
|
+
});
|
|
499
|
+
const { client, applies } = fakeClient(makeAgent(), providerShare);
|
|
500
|
+
|
|
501
|
+
await shareAgent(client, "acme/support-agent", "consumer-org", {
|
|
502
|
+
enabled: true,
|
|
503
|
+
...CLOUD,
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
expect(applies).toHaveLength(1);
|
|
507
|
+
expect(applies[0].org).toBe("consumer-org");
|
|
508
|
+
// Fresh channel, fresh config: the provider's origins must not leak
|
|
509
|
+
// into the caller org's share.
|
|
510
|
+
expect(applies[0].allowedOrigins).toEqual([]);
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
it("refuses --audience org with guidance (cross-org shares are public only)", async () => {
|
|
514
|
+
const { client, applies } = fakeClient(makeAgent(), null);
|
|
515
|
+
|
|
516
|
+
const err = await shareAgent(client, "acme/support-agent", "consumer-org", {
|
|
517
|
+
enabled: true,
|
|
518
|
+
audience: "org",
|
|
519
|
+
...CLOUD,
|
|
520
|
+
}).catch((e: unknown) => e);
|
|
521
|
+
|
|
522
|
+
expect(err).toBeInstanceOf(UsageError);
|
|
523
|
+
expect((err as Error).message).toContain("agent's own organization");
|
|
524
|
+
expect(classify(err)?.exitCode).toBe(ExitCode.Usage);
|
|
525
|
+
expect(applies).toHaveLength(0);
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
it("passes the server's fail-loud dependency refusal through unchanged", async () => {
|
|
529
|
+
// The D5 sweep names every non-public dependency; the CLI must
|
|
530
|
+
// surface that message verbatim — it tells the caller exactly what
|
|
531
|
+
// to ask the provider org to publish.
|
|
532
|
+
const refusal = new Error(
|
|
533
|
+
"cannot share acme/support-agent across organizations: it references resources that are not public: skill acme/private-skill",
|
|
534
|
+
);
|
|
535
|
+
const { client } = fakeClient(makeAgent(), null, { failWith: refusal });
|
|
536
|
+
|
|
537
|
+
await expect(
|
|
538
|
+
shareAgent(client, "acme/support-agent", "consumer-org", { enabled: true, ...CLOUD }),
|
|
539
|
+
).rejects.toThrow(/skill acme\/private-skill/);
|
|
540
|
+
});
|
|
541
|
+
});
|
|
542
|
+
|
|
470
543
|
describe("shareAgent errors", () => {
|
|
471
544
|
it("fails fast with org guidance for a bare slug and no org", async () => {
|
|
472
545
|
const { client, applies } = fakeClient(makeAgent(), null);
|
package/src/resources/share.ts
CHANGED
|
@@ -93,12 +93,33 @@ export async function shareAgent(
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
const agent = await resolveAgentRef(client, ref, org);
|
|
96
|
-
|
|
96
|
+
const agentOrg = agent.metadata?.org ?? "";
|
|
97
|
+
// The share lands in the CALLER's resolved org (decision 013 D8): when
|
|
98
|
+
// it differs from the agent's, this is a cross-org share — the caller
|
|
99
|
+
// org's own channel (URL, billing, credentials) of another org's
|
|
100
|
+
// marketplace-public agent. An empty org (ID ref without context)
|
|
101
|
+
// falls back to the agent's own — the Phase A same-org form.
|
|
102
|
+
const shareOrg = org || agentOrg;
|
|
103
|
+
const isCrossOrg = shareOrg !== agentOrg;
|
|
104
|
+
let share = await resolveCanonicalShare(client, agent, shareOrg);
|
|
97
105
|
const current = share?.spec;
|
|
98
106
|
|
|
99
107
|
const currentAudience = audienceFromProto(current?.audience);
|
|
100
108
|
const targetAudience = options.audience ?? currentAudience;
|
|
101
109
|
|
|
110
|
+
// Cross-org shares are public-audience only (decision 013 D3). The
|
|
111
|
+
// server refuses this too; refusing here names the remedy instead of
|
|
112
|
+
// surfacing a bare FAILED_PRECONDITION — and mirrors the share dialog,
|
|
113
|
+
// which hides the audience selector in cross-org mode.
|
|
114
|
+
if (isCrossOrg && targetAudience === "org") {
|
|
115
|
+
throw new UsageError(
|
|
116
|
+
"--audience org is not available for another organization's agent\n\n" +
|
|
117
|
+
`A share of ${agentOrg}/${agent.metadata?.slug ?? ""} in your organization\n` +
|
|
118
|
+
"(" + shareOrg + ") serves anyone with the link. Org-members-only sharing\n" +
|
|
119
|
+
"is limited to the agent's own organization.",
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
102
123
|
// Resetting the link is meaningless for org-members-only shares: their
|
|
103
124
|
// access is gated by live membership, and the member link never carries
|
|
104
125
|
// the token. Refuse rather than silently rotating an unused secret —
|
|
@@ -129,7 +150,7 @@ export async function shareAgent(
|
|
|
129
150
|
// CLI toggle can never wipe console-configured origins, visitor
|
|
130
151
|
// messages, credential bindings, or an org-members-only audience.
|
|
131
152
|
share = await client.agentShare.apply(
|
|
132
|
-
preservingShareInput(agent, share, options.enabled, targetAudience),
|
|
153
|
+
preservingShareInput(agent, share, shareOrg, options.enabled, targetAudience),
|
|
133
154
|
);
|
|
134
155
|
}
|
|
135
156
|
|
|
@@ -154,15 +175,18 @@ export async function shareAgent(
|
|
|
154
175
|
}
|
|
155
176
|
|
|
156
177
|
/**
|
|
157
|
-
* The agent's canonical share
|
|
158
|
-
* server's default on create), else the
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
178
|
+
* The agent's canonical share **within one sharing org**: the one whose
|
|
179
|
+
* slug equals the agent's (the server's default on create), else the
|
|
180
|
+
* first entry in that org, else null when the agent has never been shared
|
|
181
|
+
* there. Mirrors the web dialog's selection so both surfaces manage the
|
|
182
|
+
* same row. The org filter is what keeps each org on its own channel
|
|
183
|
+
* (decision 013): an agent may be shared in N orgs, and toggling here
|
|
184
|
+
* must never edit another org's share.
|
|
162
185
|
*/
|
|
163
186
|
async function resolveCanonicalShare(
|
|
164
187
|
client: Stigmer,
|
|
165
188
|
agent: Agent,
|
|
189
|
+
shareOrg: string,
|
|
166
190
|
): Promise<AgentShare | null> {
|
|
167
191
|
const result = await client.agentShare.getByAgent(
|
|
168
192
|
create(GetAgentSharesByAgentRequestSchema, {
|
|
@@ -170,9 +194,12 @@ async function resolveCanonicalShare(
|
|
|
170
194
|
}),
|
|
171
195
|
);
|
|
172
196
|
const agentSlug = agent.metadata?.slug ?? "";
|
|
197
|
+
const inOrg = result.items.filter(
|
|
198
|
+
(share) => share.metadata?.org === shareOrg,
|
|
199
|
+
);
|
|
173
200
|
return (
|
|
174
|
-
|
|
175
|
-
|
|
201
|
+
inOrg.find((share) => share.metadata?.slug === agentSlug) ??
|
|
202
|
+
inOrg[0] ??
|
|
176
203
|
null
|
|
177
204
|
);
|
|
178
205
|
}
|
|
@@ -188,12 +215,14 @@ function audienceFromProto(audience: AgentShareAudience | undefined): ShareAudie
|
|
|
188
215
|
// was never shared before). Identity comes from the existing share when one
|
|
189
216
|
// exists — a manifest-created share may carry a non-default slug, and
|
|
190
217
|
// applying with the agent's slug would create a SECOND share — and from the
|
|
191
|
-
// agent otherwise (the server's own D2 default,
|
|
192
|
-
//
|
|
193
|
-
//
|
|
218
|
+
// sharing org + the agent's slug otherwise (the server's own D2 default,
|
|
219
|
+
// made explicit; for a cross-org share the org is the CALLER's, not the
|
|
220
|
+
// agent's — decision 013). The audience is written explicitly — never left
|
|
221
|
+
// unspecified — so a console-managed org share can't drift back to public.
|
|
194
222
|
function preservingShareInput(
|
|
195
223
|
agent: Agent,
|
|
196
224
|
share: AgentShare | null,
|
|
225
|
+
shareOrg: string,
|
|
197
226
|
enabled: boolean,
|
|
198
227
|
audience: ShareAudience,
|
|
199
228
|
): AgentShareInput {
|
|
@@ -201,7 +230,7 @@ function preservingShareInput(
|
|
|
201
230
|
const agentSlug = agent.metadata?.slug ?? "";
|
|
202
231
|
const current = share?.spec;
|
|
203
232
|
return {
|
|
204
|
-
org: share?.metadata?.org ||
|
|
233
|
+
org: share?.metadata?.org || shareOrg,
|
|
205
234
|
slug: share?.metadata?.slug || agentSlug,
|
|
206
235
|
name: share?.metadata?.name || agent.metadata?.name || agentSlug,
|
|
207
236
|
agentRef: { org: agentOrg, slug: agentSlug },
|