@stigmer/cli 3.1.6 → 3.1.8

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.
Files changed (93) hide show
  1. package/commands/share.d.ts +3 -0
  2. package/commands/share.d.ts.map +1 -0
  3. package/commands/share.js +75 -0
  4. package/commands/share.js.map +1 -0
  5. package/config/index.d.ts +1 -1
  6. package/config/index.d.ts.map +1 -1
  7. package/config/index.js +1 -1
  8. package/config/index.js.map +1 -1
  9. package/config/resolve.d.ts +19 -2
  10. package/config/resolve.d.ts.map +1 -1
  11. package/config/resolve.js +40 -2
  12. package/config/resolve.js.map +1 -1
  13. package/local/runtime/node.d.ts +9 -2
  14. package/local/runtime/node.d.ts.map +1 -1
  15. package/local/runtime/node.js +38 -23
  16. package/local/runtime/node.js.map +1 -1
  17. package/package.json +6 -6
  18. package/program.d.ts.map +1 -1
  19. package/program.js +2 -0
  20. package/program.js.map +1 -1
  21. package/resources/connect/connect.d.ts.map +1 -1
  22. package/resources/connect/connect.js +76 -8
  23. package/resources/connect/connect.js.map +1 -1
  24. package/resources/connect/discover.d.ts.map +1 -1
  25. package/resources/connect/discover.js +12 -4
  26. package/resources/connect/discover.js.map +1 -1
  27. package/resources/connect/oauth.d.ts +0 -9
  28. package/resources/connect/oauth.d.ts.map +1 -1
  29. package/resources/connect/oauth.js +1 -17
  30. package/resources/connect/oauth.js.map +1 -1
  31. package/resources/mcp/placeholder-resolver.d.ts +19 -0
  32. package/resources/mcp/placeholder-resolver.d.ts.map +1 -0
  33. package/resources/mcp/placeholder-resolver.js +52 -0
  34. package/resources/mcp/placeholder-resolver.js.map +1 -0
  35. package/resources/mcp/runtime-env.d.ts +16 -0
  36. package/resources/mcp/runtime-env.d.ts.map +1 -1
  37. package/resources/mcp/runtime-env.js +29 -8
  38. package/resources/mcp/runtime-env.js.map +1 -1
  39. package/resources/share.d.ts +37 -0
  40. package/resources/share.d.ts.map +1 -0
  41. package/resources/share.js +144 -0
  42. package/resources/share.js.map +1 -0
  43. package/resources/stream/convert.d.ts +6 -2
  44. package/resources/stream/convert.d.ts.map +1 -1
  45. package/resources/stream/convert.js +8 -2
  46. package/resources/stream/convert.js.map +1 -1
  47. package/resources/stream/events.d.ts +14 -2
  48. package/resources/stream/events.d.ts.map +1 -1
  49. package/resources/stream/events.js.map +1 -1
  50. package/resources/stream/render-ndjson.js +2 -0
  51. package/resources/stream/render-ndjson.js.map +1 -1
  52. package/resources/stream/render-plaintext.d.ts.map +1 -1
  53. package/resources/stream/render-plaintext.js +3 -0
  54. package/resources/stream/render-plaintext.js.map +1 -1
  55. package/resources/stream/snapshot.js +6 -1
  56. package/resources/stream/snapshot.js.map +1 -1
  57. package/resources/stream/tool-state.d.ts +1 -1
  58. package/resources/stream/tool-state.d.ts.map +1 -1
  59. package/resources/stream/tool-state.js +13 -4
  60. package/resources/stream/tool-state.js.map +1 -1
  61. package/src/commands/connect.test.ts +26 -4
  62. package/src/commands/share.ts +99 -0
  63. package/src/config/index.ts +2 -0
  64. package/src/config/resolve.test.ts +38 -0
  65. package/src/config/resolve.ts +42 -3
  66. package/src/local/runtime/node.ts +43 -25
  67. package/src/local/runtime/runtime.test.ts +5 -4
  68. package/src/program.test.ts +7 -0
  69. package/src/program.ts +2 -0
  70. package/src/resources/connect/__fixtures__/stdio-server.mjs +8 -3
  71. package/src/resources/connect/connect.integration.test.ts +91 -0
  72. package/src/resources/connect/connect.ts +86 -8
  73. package/src/resources/connect/discover.test.ts +40 -1
  74. package/src/resources/connect/discover.ts +16 -4
  75. package/src/resources/connect/oauth.test.ts +1 -24
  76. package/src/resources/connect/oauth.ts +1 -17
  77. package/src/resources/mcp/placeholder-resolver.test.ts +71 -0
  78. package/src/resources/mcp/placeholder-resolver.ts +63 -0
  79. package/src/resources/mcp/runtime-env.test.ts +35 -1
  80. package/src/resources/mcp/runtime-env.ts +35 -9
  81. package/src/resources/read-verbs.integration.test.ts +1 -1
  82. package/src/resources/share.test.ts +389 -0
  83. package/src/resources/share.ts +227 -0
  84. package/src/resources/stream/convert.ts +17 -3
  85. package/src/resources/stream/diff.test.ts +22 -0
  86. package/src/resources/stream/events.ts +15 -1
  87. package/src/resources/stream/render-ndjson.test.ts +10 -0
  88. package/src/resources/stream/render-ndjson.ts +2 -0
  89. package/src/resources/stream/render-plaintext.test.ts +8 -0
  90. package/src/resources/stream/render-plaintext.ts +3 -0
  91. package/src/resources/stream/snapshot.test.ts +14 -0
  92. package/src/resources/stream/snapshot.ts +5 -1
  93. package/src/resources/stream/tool-state.ts +13 -4
@@ -12,7 +12,8 @@
12
12
  import { create } from "@bufbuild/protobuf";
13
13
  import { DiscoveredCapabilitiesSchema, DiscoveredResourceTemplateSchema, DiscoveredToolSchema, } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/status_pb";
14
14
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
15
- import { mergeProcessEnv } from "../mcp/runtime-env.js";
15
+ import { mergeProcessEnv, resolveDeclaredEnvValues } from "../mcp/runtime-env.js";
16
+ import { resolveHeaders, resolvePlaceholders } from "../mcp/placeholder-resolver.js";
16
17
  /** Discover an MCP server's capabilities locally without persisting to the backend. */
17
18
  export async function localDiscover(spec, envOverrides, timeoutMs) {
18
19
  const { transport, readStderr } = await buildTransport(spec, envOverrides);
@@ -53,14 +54,21 @@ export async function localDiscover(spec, envOverrides, timeoutMs) {
53
54
  }
54
55
  }
55
56
  async function buildTransport(spec, envOverrides) {
57
+ // ${VAR} placeholders in args/headers resolve against the exact same env the
58
+ // backend hands the runner for real connect (declared keys from the OS env +
59
+ // --env overrides) — so dry-run is a faithful preview. Resolution is strict:
60
+ // an unresolved placeholder throws before any subprocess is spawned, matching
61
+ // the proto contract (never pass a literal "${VAR}" to the server).
62
+ const resolutionEnv = resolveDeclaredEnvValues(spec.env ?? {}, envOverrides);
56
63
  if (spec.serverType?.case === "stdio") {
57
64
  const { command, args, workingDir } = spec.serverType.value;
58
65
  if (command === "")
59
66
  throw new Error("stdio transport requires a command");
67
+ const resolvedArgs = args.map((arg, i) => resolvePlaceholders(arg, resolutionEnv, `stdio arg[${i}]`));
60
68
  const { StdioClientTransport } = await import("@modelcontextprotocol/sdk/client/stdio.js");
61
69
  const transport = new StdioClientTransport({
62
70
  command,
63
- args: [...args],
71
+ args: resolvedArgs,
64
72
  cwd: workingDir !== "" ? workingDir : undefined,
65
73
  env: mergeProcessEnv([...envOverrides, ...goRunEnvOverrides(command, args)]),
66
74
  // "pipe" exposes the child stderr as a PassThrough immediately, so we can
@@ -78,8 +86,8 @@ async function buildTransport(spec, envOverrides) {
78
86
  if (url === "")
79
87
  throw new Error("HTTP transport requires a URL");
80
88
  const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
81
- const requestInit = Object.keys(headers).length > 0 ? { headers: { ...headers } } : undefined;
82
- const transport = new StreamableHTTPClientTransport(new URL(url), requestInit ? { requestInit } : undefined);
89
+ const resolvedHeaders = Object.keys(headers).length > 0 ? resolveHeaders(headers, resolutionEnv) : undefined;
90
+ const transport = new StreamableHTTPClientTransport(new URL(url), resolvedHeaders ? { requestInit: { headers: resolvedHeaders } } : undefined);
83
91
  return { transport, readStderr: () => "" };
84
92
  }
85
93
  throw new Error("MCP server has no transport configured (expected stdio or http)");
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/resources/connect/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/resources/connect/discover.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
2
2
  import type { Stigmer } from "@stigmer/sdk";
3
3
  import type { BackendType } from "../../config/config.js";
4
- /** Well-known URL for the Stigmer Cloud web console. */
5
- export declare const DEFAULT_CLOUD_CONSOLE_URL = "https://app.stigmer.ai";
6
4
  /** Injectable side effects + inputs for {@link runOAuthFlow}. */
7
5
  export interface OAuthFlowDeps {
8
6
  readonly client: Stigmer;
@@ -33,13 +31,6 @@ export declare function runOAuthFlow(deps: OAuthFlowDeps): Promise<void>;
33
31
  export declare function waitForOAuthGrant(deps: OAuthFlowDeps): Promise<void>;
34
32
  /** Query the backend for an existing/just-created OAuth grant. */
35
33
  export declare function checkOAuthGrant(client: Stigmer, mcpServerId: string, org: string): Promise<boolean>;
36
- /**
37
- * Resolve the web console URL:
38
- * 1. `STIGMER_CONSOLE_URL` (explicit override)
39
- * 2. local backend → `http://localhost:{WEB_CONSOLE_PORT}`
40
- * 3. cloud backend → {@link DEFAULT_CLOUD_CONSOLE_URL}
41
- */
42
- export declare function resolveConsoleURL(backendType: BackendType, env?: NodeJS.ProcessEnv): string;
43
34
  /** The OS-specific command + args to open a URL. Exported for tests. */
44
35
  export declare function browserCommand(platform: NodeJS.Platform, url: string): [string | undefined, string[]];
45
36
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/resources/connect/oauth.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wDAAwD,CAAC;AAExF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wDAAwD;AACxD,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAMlE,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,oEAAoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,gFAAgF;IAChF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBrE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1E;AAED,kEAAkE;AAClE,wBAAsB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKzG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAKxG;AAgDD,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,CAWrG"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/resources/connect/oauth.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wDAAwD,CAAC;AAExF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,oEAAoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,gFAAgF;IAChF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBrE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1E;AAED,kEAAkE;AAClE,wBAAsB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKzG;AAgDD,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,CAWrG"}
@@ -12,10 +12,8 @@
12
12
  // real browser, network, or wall-clock delay.
13
13
  import { create } from "@bufbuild/protobuf";
14
14
  import { GetOAuthGrantStatusInputSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/io_pb";
15
+ import { resolveConsoleURL } from "../../config/index.js";
15
16
  import { UsageError } from "../../errors/index.js";
16
- import { WEB_CONSOLE_PORT } from "../../local/constants.js";
17
- /** Well-known URL for the Stigmer Cloud web console. */
18
- export const DEFAULT_CLOUD_CONSOLE_URL = "https://app.stigmer.ai";
19
17
  const POLL_INTERVAL_MS = 3000;
20
18
  const POLL_TIMEOUT_MS = 5 * 60 * 1000;
21
19
  const CONSOLE_PROBE_TIMEOUT_MS = 2000;
@@ -74,20 +72,6 @@ export async function checkOAuthGrant(client, mcpServerId, org) {
74
72
  const status = await client.mcpServer.getOAuthGrantStatus(create(GetOAuthGrantStatusInputSchema, { resourceId: mcpServerId, org }));
75
73
  return status.connected;
76
74
  }
77
- /**
78
- * Resolve the web console URL:
79
- * 1. `STIGMER_CONSOLE_URL` (explicit override)
80
- * 2. local backend → `http://localhost:{WEB_CONSOLE_PORT}`
81
- * 3. cloud backend → {@link DEFAULT_CLOUD_CONSOLE_URL}
82
- */
83
- export function resolveConsoleURL(backendType, env = process.env) {
84
- const override = env.STIGMER_CONSOLE_URL;
85
- if (override !== undefined && override !== "")
86
- return override;
87
- if (backendType === "local")
88
- return `http://localhost:${WEB_CONSOLE_PORT}`;
89
- return DEFAULT_CLOUD_CONSOLE_URL;
90
- }
91
75
  // Probe the local web console with a short-timeout GET. Any HTTP response (even
92
76
  // an error status) means it's serving; a network/timeout failure means it isn't.
93
77
  async function probeWebConsole(url) {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/resources/connect/oauth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/resources/connect/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare class PlaceholderResolutionError extends Error {
2
+ readonly variableName: string;
3
+ readonly context?: string | undefined;
4
+ constructor(variableName: string, context?: string | undefined);
5
+ }
6
+ /**
7
+ * Resolve all ${VAR_NAME} placeholders in a template string.
8
+ *
9
+ * @throws PlaceholderResolutionError if any placeholder cannot be resolved.
10
+ */
11
+ export declare function resolvePlaceholders(template: string, envVars: Record<string, string>, context?: string): string;
12
+ /**
13
+ * Resolve placeholders in every value of a headers map.
14
+ *
15
+ * @throws PlaceholderResolutionError if any header value contains an
16
+ * unresolvable placeholder.
17
+ */
18
+ export declare function resolveHeaders(headers: Record<string, string>, envVars: Record<string, string>): Record<string, string>;
19
+ //# sourceMappingURL=placeholder-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-resolver.d.ts","sourceRoot":"","sources":["../../../src/resources/mcp/placeholder-resolver.ts"],"names":[],"mappings":"AAeA,qBAAa,0BAA2B,SAAQ,KAAK;aAEjC,YAAY,EAAE,MAAM;aACpB,OAAO,CAAC,EAAE,MAAM;gBADhB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,YAAA;CASnC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAOR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB"}
@@ -0,0 +1,52 @@
1
+ // Strict placeholder resolver for ${VAR_NAME} syntax in MCP server configs.
2
+ //
3
+ // The MCP server spec (StdioServerConfig.args, HttpServerConfig.headers) allows
4
+ // values to reference declared env vars with ${VAR_NAME}. The proto contract is
5
+ // explicit that resolution is strict: a missing variable must produce a clear
6
+ // error rather than passing a literal "${VAR}" to the subprocess/server.
7
+ //
8
+ // This mirrors the runner's shared resolver (backend/services/runner/src/shared/
9
+ // placeholder-resolver.ts) so `connect --dry-run` (which discovers locally)
10
+ // behaves identically to real connect (which resolves on the runner). Kept
11
+ // intentionally dependency-free and semantically identical so the two can be
12
+ // collapsed into one shared package later without any behavior change.
13
+ const PLACEHOLDER_RE = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
14
+ export class PlaceholderResolutionError extends Error {
15
+ variableName;
16
+ context;
17
+ constructor(variableName, context) {
18
+ const where = context ? ` in ${context}` : "";
19
+ super(`Unresolved placeholder \${${variableName}}${where}: ` +
20
+ `variable is not present in the execution environment`);
21
+ this.variableName = variableName;
22
+ this.context = context;
23
+ this.name = "PlaceholderResolutionError";
24
+ }
25
+ }
26
+ /**
27
+ * Resolve all ${VAR_NAME} placeholders in a template string.
28
+ *
29
+ * @throws PlaceholderResolutionError if any placeholder cannot be resolved.
30
+ */
31
+ export function resolvePlaceholders(template, envVars, context) {
32
+ return template.replace(PLACEHOLDER_RE, (_match, varName) => {
33
+ if (varName in envVars) {
34
+ return envVars[varName];
35
+ }
36
+ throw new PlaceholderResolutionError(varName, context);
37
+ });
38
+ }
39
+ /**
40
+ * Resolve placeholders in every value of a headers map.
41
+ *
42
+ * @throws PlaceholderResolutionError if any header value contains an
43
+ * unresolvable placeholder.
44
+ */
45
+ export function resolveHeaders(headers, envVars) {
46
+ const resolved = {};
47
+ for (const [key, value] of Object.entries(headers)) {
48
+ resolved[key] = resolvePlaceholders(value, envVars, `header "${key}"`);
49
+ }
50
+ return resolved;
51
+ }
52
+ //# sourceMappingURL=placeholder-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../../src/resources/mcp/placeholder-resolver.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,yEAAyE;AACzE,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,uEAAuE;AAEvE,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAEzD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAEjC;IACA;IAFlB,YACkB,YAAoB,EACpB,OAAgB;QAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,KAAK,CACH,6BAA6B,YAAY,IAAI,KAAK,IAAI;YACpD,sDAAsD,CACzD,CAAC;QAPc,iBAAY,GAAZ,YAAY,CAAQ;QACpB,YAAO,GAAP,OAAO,CAAS;QAOhC,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,OAA+B,EAC/B,OAAgB;IAEhB,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QAClE,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA+B,EAC/B,OAA+B;IAE/B,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -8,6 +8,22 @@ type ExecutionValue = ReturnType<typeof create<typeof ExecutionValueSchema>>;
8
8
  * clear usage error rather than a silently-ignored credential.
9
9
  */
10
10
  export declare function parseEnvOverrides(overrides: readonly string[]): Record<string, string>;
11
+ /**
12
+ * Resolve the values behind a server's declared env vars: declared keys pulled
13
+ * from the OS environment (non-empty only), with `--env` overrides layered on
14
+ * top (override wins; an undeclared override is still included).
15
+ *
16
+ * This is the single source of truth for "which env value is in play". It backs
17
+ * both the runtime_env sent to the backend (buildRuntimeEnv) and the ${VAR}
18
+ * placeholder resolution done locally for `--dry-run` (discover.ts), so the two
19
+ * can never drift: dry-run resolves against the exact same map the backend hands
20
+ * the runner (minus platform-injected infra vars, which a local machine cannot
21
+ * know).
22
+ *
23
+ * `declarations` is the server's `spec.env` map; only its keys (the declared
24
+ * variable names) are read, so any map keyed by those names is accepted.
25
+ */
26
+ export declare function resolveDeclaredEnvValues(declarations: Record<string, unknown>, envOverrides?: readonly string[]): Record<string, string>;
11
27
  /**
12
28
  * Build the runtime_env map for the Connect RPC from the OS environment and the
13
29
  * supplied --env overrides. Only keys with a non-empty value are emitted.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-env.d.ts","sourceRoot":"","sources":["../../../src/resources/mcp/runtime-env.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAC;AACtG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wDAAwD,CAAC;AAGxF,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAE7E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAiBhC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASvF"}
1
+ {"version":3,"file":"runtime-env.d.ts","sourceRoot":"","sources":["../../../src/resources/mcp/runtime-env.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAC;AACtG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wDAAwD,CAAC;AAGxF,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAE7E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAUhC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASvF"}
@@ -30,21 +30,42 @@ export function parseEnvOverrides(overrides) {
30
30
  }
31
31
  return result;
32
32
  }
33
+ /**
34
+ * Resolve the values behind a server's declared env vars: declared keys pulled
35
+ * from the OS environment (non-empty only), with `--env` overrides layered on
36
+ * top (override wins; an undeclared override is still included).
37
+ *
38
+ * This is the single source of truth for "which env value is in play". It backs
39
+ * both the runtime_env sent to the backend (buildRuntimeEnv) and the ${VAR}
40
+ * placeholder resolution done locally for `--dry-run` (discover.ts), so the two
41
+ * can never drift: dry-run resolves against the exact same map the backend hands
42
+ * the runner (minus platform-injected infra vars, which a local machine cannot
43
+ * know).
44
+ *
45
+ * `declarations` is the server's `spec.env` map; only its keys (the declared
46
+ * variable names) are read, so any map keyed by those names is accepted.
47
+ */
48
+ export function resolveDeclaredEnvValues(declarations, envOverrides = []) {
49
+ const values = {};
50
+ for (const key of Object.keys(declarations)) {
51
+ const value = process.env[key];
52
+ if (value !== undefined && value !== "")
53
+ values[key] = value;
54
+ }
55
+ for (const [key, value] of Object.entries(parseEnvOverrides(envOverrides))) {
56
+ values[key] = value;
57
+ }
58
+ return values;
59
+ }
33
60
  /**
34
61
  * Build the runtime_env map for the Connect RPC from the OS environment and the
35
62
  * supplied --env overrides. Only keys with a non-empty value are emitted.
36
63
  */
37
64
  export function buildRuntimeEnv(server, envOverrides = []) {
38
65
  const declarations = server.spec?.env ?? {};
39
- const overrides = parseEnvOverrides(envOverrides);
66
+ const values = resolveDeclaredEnvValues(declarations, envOverrides);
40
67
  const runtime = {};
41
- for (const [key, decl] of Object.entries(declarations)) {
42
- const value = process.env[key];
43
- if (value !== undefined && value !== "") {
44
- runtime[key] = create(ExecutionValueSchema, { value, isSecret: decl.isSecret });
45
- }
46
- }
47
- for (const [key, value] of Object.entries(overrides)) {
68
+ for (const [key, value] of Object.entries(values)) {
48
69
  runtime[key] = create(ExecutionValueSchema, { value, isSecret: declarations[key]?.isSecret ?? false });
49
70
  }
50
71
  return runtime;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../../../src/resources/mcp/runtime-env.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,+EAA+E;AAC/E,2EAA2E;AAC3E,EAAE;AACF,gDAAgD;AAChD,0EAA0E;AAC1E,uEAAuE;AACvE,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAE3E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAC;AAEtG,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAA4B;IAC5D,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,UAAU,CAAC,wBAAwB,KAAK,uBAAuB,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiB,EACjB,eAAkC,EAAE;IAEpC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,OAAO,GAAmC,EAAE,CAAC;IAEnD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,YAA+B;IAC7D,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC/C,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../../../src/resources/mcp/runtime-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type Stigmer } from "@stigmer/sdk";
2
+ import { CommandResult } from "../output/index.js";
3
+ /** Who can chat over the shared link. Mirrors the SDK's SharingAudience. */
4
+ export type ShareAudience = "public" | "org";
5
+ /** Inputs for {@link shareAgent} beyond the reference itself. */
6
+ export interface ShareAgentOptions {
7
+ /** Desired sharing state: `true` to enable, `false` to disable. */
8
+ readonly enabled: boolean;
9
+ /**
10
+ * Desired audience. Omitted means "keep the agent's current audience" —
11
+ * a plain toggle must never flip an org-members-only share back to
12
+ * public (or vice versa).
13
+ */
14
+ readonly audience?: ShareAudience;
15
+ /**
16
+ * Rotate the share-link token: the server generates a fresh `?k=`
17
+ * secret and the current link (tokened or plain) stops working
18
+ * immediately. The token is server-owned status — never part of the
19
+ * sharing block this module merges.
20
+ */
21
+ readonly resetLink?: boolean;
22
+ /** The app origin serving the hosted chat page and `embed.js`. */
23
+ readonly appOrigin: string;
24
+ /**
25
+ * Whether the CLI points at a local backend. Guest chat (the token mint
26
+ * behind the hosted page) is a Stigmer Cloud capability, so a local link
27
+ * gets a "won't serve visitors" warning alongside the result.
28
+ */
29
+ readonly isLocal: boolean;
30
+ }
31
+ /**
32
+ * Enable or disable sharing for the referenced agent and describe the
33
+ * outcome. Idempotent: when the agent is already in the desired state, no
34
+ * write is issued (the link is still reported when sharing is on).
35
+ */
36
+ export declare function shareAgent(client: Stigmer, ref: string, org: string, options: ShareAgentOptions): Promise<CommandResult>;
37
+ //# sourceMappingURL=share.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/resources/share.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7E,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;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CA8DxB"}
@@ -0,0 +1,144 @@
1
+ // `share agent` dispatch: enable or disable public sharing for an agent and
2
+ // report the hosted chat link + embed snippet.
3
+ //
4
+ // The one correctness invariant here: the `updateSharing` RPC replaces
5
+ // `spec.sharing` WHOLESALE. A naive "set enabled" would silently wipe any
6
+ // `allowed_origins` or visitor messages the owner configured in the console.
7
+ // So this module always reads the current state first and sends the complete
8
+ // block back with only `enabled` flipped — the same merge-preserve discipline
9
+ // as the web dialog's draftFromAgent (sdk/react ShareAgentDialog.tsx).
10
+ //
11
+ // URL and snippet shapes come from @stigmer/sdk's sharing helpers — the single
12
+ // source of truth shared with the web console — so every surface emits
13
+ // byte-identical output. The caller supplies the app origin (resolved from the
14
+ // backend type by the command layer) to keep this module pure and env-free.
15
+ import { create } from "@bufbuild/protobuf";
16
+ import { RotateShareLinkInputSchema, UpdateAgentSharingInputSchema, } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/io_pb";
17
+ import { AgentSharingAudience, AgentSharingMessagesSchema, AgentSharingSchema, } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
18
+ import { buildChatUrl, buildEmbedSnippet } from "@stigmer/sdk";
19
+ import { UsageError } from "../errors/index.js";
20
+ import { CommandResult } from "../output/index.js";
21
+ import { isAgentId } from "./reference.js";
22
+ import { resolveAgentRef } from "./run/resolve.js";
23
+ /**
24
+ * Enable or disable sharing for the referenced agent and describe the
25
+ * outcome. Idempotent: when the agent is already in the desired state, no
26
+ * write is issued (the link is still reported when sharing is on).
27
+ */
28
+ export async function shareAgent(client, ref, org, options) {
29
+ // Fail fast with actionable guidance instead of the backend's cryptic
30
+ // "org value length must be at least 1" — mirrors the connect org guard.
31
+ if (org === "" && !isAgentId(ref) && !ref.includes("/")) {
32
+ throw new UsageError("organization not set\n\n" +
33
+ "Set it with:\n" +
34
+ " stigmer config context set --org <org>\n" +
35
+ ` stigmer share agent ${ref} --org <org>`);
36
+ }
37
+ const agent = await resolveAgentRef(client, ref, org);
38
+ const current = agent.spec?.sharing;
39
+ const currentAudience = audienceFromProto(current?.audience);
40
+ const targetAudience = options.audience ?? currentAudience;
41
+ // Resetting the link is meaningless for org-members-only shares: their
42
+ // access is gated by live membership, and the member link never carries
43
+ // the token. Refuse rather than silently rotating an unused secret —
44
+ // the share dialog hides its Reset control for org audience for the
45
+ // same reason.
46
+ if (options.resetLink === true && targetAudience === "org") {
47
+ throw new UsageError("--reset-link only applies to public links\n\n" +
48
+ "This share is restricted to organization members, whose access is\n" +
49
+ "checked on every message. To cut someone off, remove them from the\n" +
50
+ "organization.");
51
+ }
52
+ const alreadyInState = (current?.enabled ?? false) === options.enabled &&
53
+ currentAudience === targetAudience;
54
+ if (!alreadyInState) {
55
+ // Send the COMPLETE sharing block with only the requested fields changed,
56
+ // so a CLI toggle can never wipe console-configured origins, visitor
57
+ // messages, or an org-members-only audience.
58
+ await client.agent.updateSharing(create(UpdateAgentSharingInputSchema, {
59
+ resourceId: agent.metadata?.id ?? "",
60
+ sharing: preservingSharing(current, options.enabled, targetAudience),
61
+ }));
62
+ }
63
+ // The rotation is a separate targeted RPC (the token is server-owned
64
+ // status, not part of the sharing block). The returned agent carries the
65
+ // fresh token, so the link printed below is the new one.
66
+ let linkToken = agent.status?.shareLinkToken ?? "";
67
+ if (options.resetLink === true) {
68
+ const rotated = await client.agent.rotateShareLink(create(RotateShareLinkInputSchema, {
69
+ resourceId: agent.metadata?.id ?? "",
70
+ }));
71
+ linkToken = rotated.status?.shareLinkToken ?? "";
72
+ }
73
+ return describeOutcome(agent, options, targetAudience, linkToken, alreadyInState && options.resetLink !== true);
74
+ }
75
+ // Unspecified means public by contract (pre-audience shares keep their
76
+ // anyone-with-link behavior).
77
+ function audienceFromProto(audience) {
78
+ return audience === AgentSharingAudience.org ? "org" : "public";
79
+ }
80
+ // The full sharing config with the desired `enabled` and audience,
81
+ // preserving origins and messages (empty defaults when the agent was never
82
+ // shared before). The audience is written explicitly — never left
83
+ // unspecified — so a console-managed org share can't drift back to public.
84
+ function preservingSharing(current, enabled, audience) {
85
+ return create(AgentSharingSchema, {
86
+ enabled,
87
+ audience: audience === "org"
88
+ ? AgentSharingAudience.org
89
+ : AgentSharingAudience.public,
90
+ allowedOrigins: [...(current?.allowedOrigins ?? [])],
91
+ messages: create(AgentSharingMessagesSchema, {
92
+ rateLimited: current?.messages?.rateLimited ?? "",
93
+ unavailable: current?.messages?.unavailable ?? "",
94
+ conversationEnded: current?.messages?.conversationEnded ?? "",
95
+ }),
96
+ });
97
+ }
98
+ // Build the user-facing result. Org/slug come from the RESOLVED agent's
99
+ // metadata (authoritative even when the user passed an ID), matching how the
100
+ // web share dialog derives them. The link token comes from the agent's
101
+ // status (post-rotation when --reset-link ran) and rides the printed URL
102
+ // and snippet — public audience only (org access is gated by membership).
103
+ function describeOutcome(agent, options, audience, linkToken, alreadyInState) {
104
+ const org = agent.metadata?.org ?? "";
105
+ const slug = agent.metadata?.slug ?? "";
106
+ const name = agent.metadata?.name || slug;
107
+ if (!options.enabled) {
108
+ const result = CommandResult.success(alreadyInState ? `Sharing is already off for '${name}'` : `Sharing disabled for '${name}'`);
109
+ result.hint("The share link no longer works. Re-enable with:");
110
+ result.hint(` stigmer share agent ${org}/${slug}`);
111
+ return result;
112
+ }
113
+ const result = CommandResult.success(options.resetLink === true
114
+ ? `Share link reset for '${name}' — the old link no longer works`
115
+ : alreadyInState
116
+ ? `Sharing is already on for '${name}'`
117
+ : `Sharing enabled for '${name}'`);
118
+ const publicLinkToken = audience === "org" ? undefined : linkToken || undefined;
119
+ result
120
+ .addSection(audience === "org" ? "Member chat link" : "Public chat link")
121
+ .item(buildChatUrl(options.appOrigin, org, slug, publicLinkToken));
122
+ if (audience === "org") {
123
+ // Embeds serve anonymous guests, which org-members-only shares refuse
124
+ // by design — no snippet to print.
125
+ result.hint(`Only signed-in members of ${org} can chat. Access ends when they leave the organization.`);
126
+ result.hint(`Members chat on ${org}'s credits.`);
127
+ }
128
+ else {
129
+ const snippetSection = result.addSection("Embed on your site");
130
+ for (const line of buildEmbedSnippet(options.appOrigin, org, slug, publicLinkToken).split("\n")) {
131
+ snippetSection.item(line);
132
+ }
133
+ result.hint(`Visitors chat on ${org}'s credits.`);
134
+ result.hint("Public links can be forwarded and indexed by search engines.");
135
+ if (options.resetLink === true) {
136
+ result.hint("Re-share the new link with the people who should keep access.");
137
+ }
138
+ }
139
+ if (options.isLocal) {
140
+ result.hint("Guest chat is a Stigmer Cloud capability — this local link won't serve visitors.");
141
+ }
142
+ return result;
143
+ }
144
+ //# sourceMappingURL=share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/resources/share.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { TodoItem } from "@stigmer/protos/ai/stigmer/agentic/agentexecution
4
4
  import { ExecutionPhase, SubAgentStatus, SummarizationSource, ToolCallStatus, TodoStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
5
5
  import type { ToolCallInfo, TodoItemView } from "./events.js";
6
6
  /** Mapped tool-call status strings. */
7
- export type ToolStatus = "pending" | "running" | "completed" | "failed" | "waiting_approval" | "skipped" | "unknown";
7
+ export type ToolStatus = "pending" | "running" | "completed" | "failed" | "waiting_approval" | "skipped" | "interrupted" | "unknown";
8
8
  /** Convert a proto ToolCall to render info. Mirrors Go's convertToolCall. */
9
9
  export declare function convertToolCall(tc: ToolCall): ToolCallInfo;
10
10
  /** Convert a slice of proto ToolCalls. Mirrors Go's convertToolCalls. */
@@ -25,7 +25,11 @@ export declare function mapTodoStatus(status: TodoStatus): string;
25
25
  export declare function mapSummarizationSource(source: SummarizationSource): string;
26
26
  /** The protojson enum name for a sub-agent status (matches Go's status.String()). */
27
27
  export declare function subAgentStatusName(status: SubAgentStatus): string;
28
- /** True for tool statuses that mean the tool is no longer executing. Mirrors Go's isTerminalToolStatus. */
28
+ /**
29
+ * True for tool statuses that mean the tool is no longer executing.
30
+ * "interrupted" (platform-settled at terminalization, issue #207) is terminal:
31
+ * without it, a settled call replays as a live running block forever.
32
+ */
29
33
  export declare function isTerminalToolStatus(status: string): boolean;
30
34
  /** True for terminal agent phases. Mirrors Go's isTerminalAgentPhase. */
31
35
  export declare function isTerminalAgentPhase(phase: ExecutionPhase): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/resources/stream/convert.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACX,MAAM,8DAA8D,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,uCAAuC;AACvC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErH,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,YAAY,CAU1D;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,EAAE,CAE/E;AAED,qGAAqG;AACrG,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,EAAE,CAI1F;AAED,qGAAqG;AACrG,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,EAAE,EAAE,MAAM,GACT,QAAQ,GAAG,SAAS,CAYtB;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,YAAY,EAAE,CAMjF;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAmB9D;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAiBpE;AAED,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAaxD;AAED,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAS1E;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEjE;AAED,2GAA2G;AAC3G,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAOnE;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAMxE;AAMD,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED,yHAAyH;AACzH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D"}
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/resources/stream/convert.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACX,MAAM,8DAA8D,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,uCAAuC;AACvC,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,kBAAkB,GAClB,SAAS,GACT,aAAa,GACb,SAAS,CAAC;AAEd,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,YAAY,CAU1D;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,EAAE,CAE/E;AAED,qGAAqG;AACrG,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,EAAE,CAI1F;AAED,qGAAqG;AACrG,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,EAAE,EAAE,MAAM,GACT,QAAQ,GAAG,SAAS,CAYtB;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,YAAY,EAAE,CAMjF;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAmB9D;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAmBpE;AAED,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAaxD;AAED,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAS1E;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAOnE;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAMxE;AAMD,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED,yHAAyH;AACzH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -88,6 +88,8 @@ export function mapToolCallStatus(status) {
88
88
  return "waiting_approval";
89
89
  case ToolCallStatus.TOOL_CALL_SKIPPED:
90
90
  return "skipped";
91
+ case ToolCallStatus.TOOL_CALL_INTERRUPTED:
92
+ return "interrupted";
91
93
  default:
92
94
  return "unknown";
93
95
  }
@@ -122,9 +124,13 @@ export function mapSummarizationSource(source) {
122
124
  export function subAgentStatusName(status) {
123
125
  return SubAgentStatus[status] ?? "SUB_AGENT_STATUS_UNSPECIFIED";
124
126
  }
125
- /** True for tool statuses that mean the tool is no longer executing. Mirrors Go's isTerminalToolStatus. */
127
+ /**
128
+ * True for tool statuses that mean the tool is no longer executing.
129
+ * "interrupted" (platform-settled at terminalization, issue #207) is terminal:
130
+ * without it, a settled call replays as a live running block forever.
131
+ */
126
132
  export function isTerminalToolStatus(status) {
127
- return status === "completed" || status === "failed" || status === "skipped";
133
+ return status === "completed" || status === "failed" || status === "skipped" || status === "interrupted";
128
134
  }
129
135
  /** True for terminal agent phases. Mirrors Go's isTerminalAgentPhase. */
130
136
  export function isTerminalAgentPhase(phase) {