@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.
- package/commands/share.d.ts +3 -0
- package/commands/share.d.ts.map +1 -0
- package/commands/share.js +75 -0
- package/commands/share.js.map +1 -0
- package/config/index.d.ts +1 -1
- package/config/index.d.ts.map +1 -1
- package/config/index.js +1 -1
- package/config/index.js.map +1 -1
- package/config/resolve.d.ts +19 -2
- package/config/resolve.d.ts.map +1 -1
- package/config/resolve.js +40 -2
- package/config/resolve.js.map +1 -1
- package/local/runtime/node.d.ts +9 -2
- package/local/runtime/node.d.ts.map +1 -1
- package/local/runtime/node.js +38 -23
- package/local/runtime/node.js.map +1 -1
- package/package.json +6 -6
- package/program.d.ts.map +1 -1
- package/program.js +2 -0
- package/program.js.map +1 -1
- package/resources/connect/connect.d.ts.map +1 -1
- package/resources/connect/connect.js +76 -8
- package/resources/connect/connect.js.map +1 -1
- package/resources/connect/discover.d.ts.map +1 -1
- package/resources/connect/discover.js +12 -4
- package/resources/connect/discover.js.map +1 -1
- package/resources/connect/oauth.d.ts +0 -9
- package/resources/connect/oauth.d.ts.map +1 -1
- package/resources/connect/oauth.js +1 -17
- package/resources/connect/oauth.js.map +1 -1
- package/resources/mcp/placeholder-resolver.d.ts +19 -0
- package/resources/mcp/placeholder-resolver.d.ts.map +1 -0
- package/resources/mcp/placeholder-resolver.js +52 -0
- package/resources/mcp/placeholder-resolver.js.map +1 -0
- package/resources/mcp/runtime-env.d.ts +16 -0
- package/resources/mcp/runtime-env.d.ts.map +1 -1
- package/resources/mcp/runtime-env.js +29 -8
- package/resources/mcp/runtime-env.js.map +1 -1
- package/resources/share.d.ts +37 -0
- package/resources/share.d.ts.map +1 -0
- package/resources/share.js +144 -0
- package/resources/share.js.map +1 -0
- package/resources/stream/convert.d.ts +6 -2
- package/resources/stream/convert.d.ts.map +1 -1
- package/resources/stream/convert.js +8 -2
- package/resources/stream/convert.js.map +1 -1
- package/resources/stream/events.d.ts +14 -2
- package/resources/stream/events.d.ts.map +1 -1
- package/resources/stream/events.js.map +1 -1
- package/resources/stream/render-ndjson.js +2 -0
- package/resources/stream/render-ndjson.js.map +1 -1
- package/resources/stream/render-plaintext.d.ts.map +1 -1
- package/resources/stream/render-plaintext.js +3 -0
- package/resources/stream/render-plaintext.js.map +1 -1
- package/resources/stream/snapshot.js +6 -1
- package/resources/stream/snapshot.js.map +1 -1
- package/resources/stream/tool-state.d.ts +1 -1
- package/resources/stream/tool-state.d.ts.map +1 -1
- package/resources/stream/tool-state.js +13 -4
- package/resources/stream/tool-state.js.map +1 -1
- package/src/commands/connect.test.ts +26 -4
- package/src/commands/share.ts +99 -0
- package/src/config/index.ts +2 -0
- package/src/config/resolve.test.ts +38 -0
- package/src/config/resolve.ts +42 -3
- package/src/local/runtime/node.ts +43 -25
- package/src/local/runtime/runtime.test.ts +5 -4
- package/src/program.test.ts +7 -0
- package/src/program.ts +2 -0
- package/src/resources/connect/__fixtures__/stdio-server.mjs +8 -3
- package/src/resources/connect/connect.integration.test.ts +91 -0
- package/src/resources/connect/connect.ts +86 -8
- package/src/resources/connect/discover.test.ts +40 -1
- package/src/resources/connect/discover.ts +16 -4
- package/src/resources/connect/oauth.test.ts +1 -24
- package/src/resources/connect/oauth.ts +1 -17
- package/src/resources/mcp/placeholder-resolver.test.ts +71 -0
- package/src/resources/mcp/placeholder-resolver.ts +63 -0
- package/src/resources/mcp/runtime-env.test.ts +35 -1
- package/src/resources/mcp/runtime-env.ts +35 -9
- package/src/resources/read-verbs.integration.test.ts +1 -1
- package/src/resources/share.test.ts +389 -0
- package/src/resources/share.ts +227 -0
- package/src/resources/stream/convert.ts +17 -3
- package/src/resources/stream/diff.test.ts +22 -0
- package/src/resources/stream/events.ts +15 -1
- package/src/resources/stream/render-ndjson.test.ts +10 -0
- package/src/resources/stream/render-ndjson.ts +2 -0
- package/src/resources/stream/render-plaintext.test.ts +8 -0
- package/src/resources/stream/render-plaintext.ts +3 -0
- package/src/resources/stream/snapshot.test.ts +14 -0
- package/src/resources/stream/snapshot.ts +5 -1
- 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:
|
|
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
|
|
82
|
-
const transport = new StreamableHTTPClientTransport(new URL(url),
|
|
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":"AAAA,qEAAqE;AACrE,EAAE;AACF,gFAAgF;AAChF,2EAA2E;AAC3E,iFAAiF;AACjF,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,mDAAmD;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAEL,4BAA4B,EAC5B,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,2DAA2D,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
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;
|
|
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":"AAAA,wEAAwE;AACxE,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAChF,8BAA8B;AAC9B,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,8CAA8C;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAGvG,OAAO,EAAE,
|
|
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,
|
|
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
|
|
66
|
+
const values = resolveDeclaredEnvValues(declarations, envOverrides);
|
|
40
67
|
const runtime = {};
|
|
41
|
-
for (const [key,
|
|
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
|
|
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
|
-
/**
|
|
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,
|
|
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
|
-
/**
|
|
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) {
|