@stigmer/cli 3.1.14 → 3.1.16
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/local/daemon/components.d.ts.map +1 -1
- package/local/daemon/components.js +6 -0
- package/local/daemon/components.js.map +1 -1
- package/local/daemon/env.d.ts +6 -0
- package/local/daemon/env.d.ts.map +1 -1
- package/local/daemon/env.js +8 -0
- package/local/daemon/env.js.map +1 -1
- package/local/daemon/launch.d.ts.map +1 -1
- package/local/daemon/launch.js +21 -0
- package/local/daemon/launch.js.map +1 -1
- package/package.json +5 -5
- package/resources/run/agent-exec.d.ts.map +1 -1
- package/resources/run/agent-exec.js +13 -25
- package/resources/run/agent-exec.js.map +1 -1
- package/resources/run/create.d.ts +5 -14
- package/resources/run/create.d.ts.map +1 -1
- package/resources/run/create.js +6 -23
- package/resources/run/create.js.map +1 -1
- package/resources/share.js +6 -5
- package/resources/share.js.map +1 -1
- package/src/local/daemon/components.test.ts +15 -0
- package/src/local/daemon/components.ts +4 -0
- package/src/local/daemon/env.test.ts +18 -0
- package/src/local/daemon/env.ts +14 -0
- package/src/local/daemon/launch.ts +22 -1
- package/src/resources/run/agent-exec.test.ts +128 -0
- package/src/resources/run/agent-exec.ts +13 -26
- package/src/resources/run/create.test.ts +51 -15
- package/src/resources/run/create.ts +12 -31
- package/src/resources/share.test.ts +10 -5
- package/src/resources/share.ts +6 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAK/D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAY7G;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAK/D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAY7G;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAkB7G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,EAAE,CAmC5G"}
|
|
@@ -46,6 +46,12 @@ export function buildRunnerEnv(config, base = process.env) {
|
|
|
46
46
|
};
|
|
47
47
|
if (config.cursorApiKey !== undefined)
|
|
48
48
|
env.CURSOR_API_KEY = config.cursorApiKey;
|
|
49
|
+
// Explicit set (after the base spread) so the launcher-resolved key wins over any
|
|
50
|
+
// stale inherited value — the delivery path for a `stigmer setup`-persisted key.
|
|
51
|
+
if (config.anthropicApiKey !== undefined)
|
|
52
|
+
env.ANTHROPIC_API_KEY = config.anthropicApiKey;
|
|
53
|
+
if (config.openaiApiKey !== undefined)
|
|
54
|
+
env.OPENAI_API_KEY = config.openaiApiKey;
|
|
49
55
|
if (config.activityRouting !== undefined)
|
|
50
56
|
env.STIGMER_ACTIVITY_ROUTING = config.activityRouting;
|
|
51
57
|
return env;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"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"}
|
package/local/daemon/env.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export declare const DaemonEnvVar: {
|
|
|
11
11
|
readonly RunnerEntry: "STIGMER_RUNNER_ENTRY";
|
|
12
12
|
readonly RunnerAppDir: "STIGMER_RUNNER_APP_DIR";
|
|
13
13
|
readonly CursorApiKey: "CURSOR_API_KEY";
|
|
14
|
+
readonly AnthropicApiKey: "ANTHROPIC_API_KEY";
|
|
15
|
+
readonly OpenAiApiKey: "OPENAI_API_KEY";
|
|
14
16
|
readonly ActivityRouting: "STIGMER_ACTIVITY_ROUTING";
|
|
15
17
|
};
|
|
16
18
|
/** Resolved runner launch coordinates. */
|
|
@@ -30,6 +32,8 @@ export interface DaemonConfig {
|
|
|
30
32
|
serverBin: string;
|
|
31
33
|
runner?: RunnerLaunch;
|
|
32
34
|
cursorApiKey?: string;
|
|
35
|
+
anthropicApiKey?: string;
|
|
36
|
+
openaiApiKey?: string;
|
|
33
37
|
activityRouting?: string;
|
|
34
38
|
}
|
|
35
39
|
/** Inputs the launcher already resolved, to encode into the daemon env. */
|
|
@@ -42,6 +46,8 @@ export interface DaemonEnvInputs {
|
|
|
42
46
|
noWeb: boolean;
|
|
43
47
|
serverBin: string;
|
|
44
48
|
runner?: RunnerLaunch;
|
|
49
|
+
anthropicApiKey?: string;
|
|
50
|
+
openaiApiKey?: string;
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
47
53
|
* Build the environment for the internal-daemon child: the caller's environment
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/env.ts"],"names":[],"mappings":"AAMA,+EAA+E;AAC/E,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/env.ts"],"names":[],"mappings":"AAMA,+EAA+E;AAC/E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAef,CAAC;AAEX,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IAKtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAiBhH;AAED;uBACuB;AACvB,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAoBnF"}
|
package/local/daemon/env.js
CHANGED
|
@@ -16,6 +16,8 @@ export const DaemonEnvVar = {
|
|
|
16
16
|
RunnerEntry: "STIGMER_RUNNER_ENTRY",
|
|
17
17
|
RunnerAppDir: "STIGMER_RUNNER_APP_DIR",
|
|
18
18
|
CursorApiKey: "CURSOR_API_KEY",
|
|
19
|
+
AnthropicApiKey: "ANTHROPIC_API_KEY",
|
|
20
|
+
OpenAiApiKey: "OPENAI_API_KEY",
|
|
19
21
|
ActivityRouting: "STIGMER_ACTIVITY_ROUTING",
|
|
20
22
|
};
|
|
21
23
|
/**
|
|
@@ -39,6 +41,10 @@ export function buildDaemonEnv(inputs, base = process.env) {
|
|
|
39
41
|
env[DaemonEnvVar.RunnerEntry] = inputs.runner.entryPath;
|
|
40
42
|
env[DaemonEnvVar.RunnerAppDir] = inputs.runner.appDir;
|
|
41
43
|
}
|
|
44
|
+
if (inputs.anthropicApiKey !== undefined)
|
|
45
|
+
env[DaemonEnvVar.AnthropicApiKey] = inputs.anthropicApiKey;
|
|
46
|
+
if (inputs.openaiApiKey !== undefined)
|
|
47
|
+
env[DaemonEnvVar.OpenAiApiKey] = inputs.openaiApiKey;
|
|
42
48
|
return env;
|
|
43
49
|
}
|
|
44
50
|
/** Parse the daemon configuration from an environment. Throws if a required
|
|
@@ -58,6 +64,8 @@ export function readDaemonConfig(env = process.env) {
|
|
|
58
64
|
serverBin: required(env, DaemonEnvVar.ServerBin),
|
|
59
65
|
runner: serverOnly ? undefined : runner,
|
|
60
66
|
cursorApiKey: nonEmpty(env[DaemonEnvVar.CursorApiKey]),
|
|
67
|
+
anthropicApiKey: nonEmpty(env[DaemonEnvVar.AnthropicApiKey]),
|
|
68
|
+
openaiApiKey: nonEmpty(env[DaemonEnvVar.OpenAiApiKey]),
|
|
61
69
|
activityRouting: nonEmpty(env[DaemonEnvVar.ActivityRouting]),
|
|
62
70
|
};
|
|
63
71
|
}
|
package/local/daemon/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/local/daemon/env.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,iFAAiF;AACjF,+EAA+E;AAC/E,8EAA8E;AAC9E,mEAAmE;AAEnE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,iBAAiB;IACzB,eAAe,EAAE,0BAA0B;IAC3C,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EAAE,qBAAqB;IACjC,KAAK,EAAE,gBAAgB;IACvB,SAAS,EAAE,oBAAoB;IAC/B,aAAa,EAAE,yBAAyB;IACxC,WAAW,EAAE,sBAAsB;IACnC,YAAY,EAAE,wBAAwB;IACtC,YAAY,EAAE,gBAAgB;IAC9B,eAAe,EAAE,0BAA0B;CACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/local/daemon/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/launch.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,8EAA8E;AAC9E,wBAAsB,EAAE,CAAC,OAAO,GAAE,SAAc,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDzF;AAuCD,kEAAkE;AAClE,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiCrE;AAED,4EAA4E;AAC5E,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1E"}
|
package/local/daemon/launch.js
CHANGED
|
@@ -20,6 +20,7 @@ import { readPidFile, removePidFile } from "../state/pidfile.js";
|
|
|
20
20
|
import { findProcessByPort, isProcessAlive, killProcess } from "../state/proc.js";
|
|
21
21
|
import { removeStartupConfig, saveStartupConfig } from "../state/startup-config.js";
|
|
22
22
|
import { rotateLogs } from "../state/log-rotation.js";
|
|
23
|
+
import { resolveApiKey, resolveProvider } from "../llm-config.js";
|
|
23
24
|
import { ensureRunner } from "../runtime/runner.js";
|
|
24
25
|
import { ensureServerBinary } from "../runtime/server.js";
|
|
25
26
|
import { TemporalManager } from "../temporal/manager.js";
|
|
@@ -60,6 +61,7 @@ export async function up(options = {}, home = homedir()) {
|
|
|
60
61
|
noWeb: options.noWeb === true,
|
|
61
62
|
serverBin,
|
|
62
63
|
runner,
|
|
64
|
+
...resolveLlmKeyInputs(config),
|
|
63
65
|
}, process.env);
|
|
64
66
|
const daemonPid = spawnDaemon(env, join(logs, "daemon.log"));
|
|
65
67
|
log.info("daemon process started", { pid: daemonPid });
|
|
@@ -189,6 +191,25 @@ async function stopManagedTemporal(home) {
|
|
|
189
191
|
log.debug("managed Temporal stop skipped", { error: String(err) });
|
|
190
192
|
}
|
|
191
193
|
}
|
|
194
|
+
// LLM-key delivery for the runner: a key persisted by `stigmer setup` lives only in
|
|
195
|
+
// the config file, so the launcher must write it into the daemon contract explicitly
|
|
196
|
+
// — unlike a shell-exported key, it cannot flow by env inheritance. resolveApiKey's
|
|
197
|
+
// precedence (env var > config file) makes both cases one code path; when the env
|
|
198
|
+
// var is set this re-writes the same value. Only the effective provider's key is
|
|
199
|
+
// passed: the config file stores a single key, keyed to the chosen provider.
|
|
200
|
+
function resolveLlmKeyInputs(config) {
|
|
201
|
+
const key = resolveApiKey(config);
|
|
202
|
+
if (key === "")
|
|
203
|
+
return {};
|
|
204
|
+
switch (resolveProvider(config)) {
|
|
205
|
+
case "anthropic":
|
|
206
|
+
return { anthropicApiKey: key };
|
|
207
|
+
case "openai":
|
|
208
|
+
return { openaiApiKey: key };
|
|
209
|
+
default:
|
|
210
|
+
return {};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
192
213
|
// Default to managed Temporal unless the opaque local config explicitly opts out
|
|
193
214
|
// (Go parity: managed is the default). Wave 4's `setup` models this section.
|
|
194
215
|
function isTemporalManaged(config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/local/daemon/launch.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,0EAA0E;AAC1E,oEAAoE;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAe,IAAI,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAsB,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/local/daemon/launch.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,0EAA0E;AAC1E,oEAAoE;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAe,IAAI,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAsB,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAwB,MAAM,UAAU,CAAC;AAEhE,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,oFAAoF;AACpF,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,2EAA2E;AAC3E,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,YAAY,GAAG,GAAG,CAAC;AAOzB,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,UAAqB,EAAE,EAAE,OAAe,OAAO,EAAE;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE1B,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CAAC,2BAA2B,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;IAED,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,eAAe,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC3C,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhF,MAAM,GAAG,GAAG,cAAc,CACxB;QACE,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,eAAe;QACf,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;QAC7B,SAAS;QACT,MAAM;QACN,GAAG,mBAAmB,CAAC,MAAM,CAAC;KAC/B,EACD,OAAO,CAAC,GAAG,CACZ,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvD,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,YAAY,CAAC,uCAAuC,EAAE,QAAQ,CAAC,OAAO,EAAE;YAChF,SAAS,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,eAAe;SACjD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAE9F,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAEpC,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACxG,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,uBAAuB,CAAC,IAAY;IACjD,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrF,MAAM,CAAC,uBAAuB,CAAC;YAC/B,MAAM,CAAC,wBAAwB,CAAC;YAChC,MAAM,CAAC,sBAAsB,CAAC;SAC/B,CAAC,CAAC;QACH,4EAA4E;QAC5E,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;YACE,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;YACjD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;SAClD,EACD,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CACnC,CAAC;QACF,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5G,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gGAAgG,CACjG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAe,OAAO,EAAE;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IACnD,IAAI,GAAG,KAAK,IAAI;QAAE,GAAG,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEvD,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;QAC3C,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAChC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wEAAwE;IACxE,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5B,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;YAC3C,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,+CAA+C,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3C,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAChC,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe,OAAO,EAAE;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IACrD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,IAAI,cAAc,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ;IACtD,CAAC;IACD,OAAO,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,iFAAiF;AACjF,gFAAgF;AAChF,SAAS,WAAW,CAAC,GAAsB,EAAE,SAAiB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,YAAY,CAAC,yDAAyD,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE;QACtF,QAAQ,EAAE,IAAI;QACd,GAAG;QACH,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;KAC5B,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CAAC,oCAAoC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,kFAAkF;AAClF,SAAS,cAAc,CAAC,IAAY;IAClC,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,oBAAoB,EAAE,YAAY,CAAC,EAAE,CAAC;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QAC3B,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9E,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,aAAa,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,qFAAqF;AACrF,oFAAoF;AACpF,kFAAkF;AAClF,iFAAiF;AACjF,6EAA6E;AAC7E,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,QAAQ,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,KAAK,WAAW;YACd,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;QAClC,KAAK,QAAQ;YACX,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;QAC/B;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,6EAA6E;AAC7E,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAyD,CAAC;IACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,KAAK,KAAK,CAAC;AAC5C,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,IAAY,EACZ,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,OAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAuF,CAAC;IACrH,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,YAAY;QAC3B,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,IAAI,EAAE;QACxC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAClC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,IAAI,EAAE;QACxC,cAAc,EAAE,OAAO;QACvB,aAAa,EAAE,EAAE;QACjB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,KAAK;QACtB,WAAW,EAAE,CAAC;QACd,kBAAkB,EAAE,SAAS;QAC7B,WAAW,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/cli",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.16",
|
|
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.16",
|
|
39
|
+
"@stigmer/mcp-server": "3.1.16",
|
|
40
|
+
"@stigmer/protos": "3.1.16",
|
|
41
|
+
"@stigmer/sdk": "3.1.16",
|
|
42
42
|
"commander": "^12.1.0",
|
|
43
43
|
"fflate": "^0.8.3",
|
|
44
44
|
"ink": "^7.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-exec.d.ts","sourceRoot":"","sources":["../../../src/resources/run/agent-exec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-exec.d.ts","sourceRoot":"","sources":["../../../src/resources/run/agent-exec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DvF"}
|
|
@@ -1,48 +1,36 @@
|
|
|
1
1
|
// The "run a resolved agent" flow (Go's executeResolvedAgent in
|
|
2
|
-
// run_agent_exec.go): create the
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
2
|
+
// run_agent_exec.go): create the agent execution (one call — a workspace rides
|
|
3
|
+
// the embedded session_spec and the backend bootstraps the session), then
|
|
4
|
+
// either detach (print header + re-attach hint) or stream and optionally
|
|
5
|
+
// download artifacts. Shared by `run` and `draft`.
|
|
6
6
|
import { downloadExecutionArtifacts } from "../download.js";
|
|
7
|
-
import { createAgentExecution
|
|
7
|
+
import { createAgentExecution } from "./create.js";
|
|
8
8
|
import { renderSessionHeader, workspaceNames } from "./header.js";
|
|
9
9
|
import { streamAgentExecution } from "./stream.js";
|
|
10
10
|
export async function executeResolvedAgent(input) {
|
|
11
11
|
const { prepared, org, client } = input;
|
|
12
12
|
const controller = client.controller.bind(client);
|
|
13
13
|
const progress = stderrProgress();
|
|
14
|
-
// Workspaces require a CLI-created session: the backend's auto-create flow has
|
|
15
|
-
// no workspace passthrough (Go's createSessionForAgent).
|
|
16
|
-
let sessionId = "";
|
|
17
|
-
if (prepared.workspaceEntries.length > 0) {
|
|
18
|
-
const instanceId = input.agent.status?.defaultInstanceId ?? "";
|
|
19
|
-
if (instanceId === "") {
|
|
20
|
-
throw new CliExitError("agent has no default instance — cannot create workspace session", ExitCode.General);
|
|
21
|
-
}
|
|
22
|
-
progress("Creating workspace...");
|
|
23
|
-
const session = await createSessionForAgent(controller, {
|
|
24
|
-
agentInstanceId: instanceId,
|
|
25
|
-
orgId: org,
|
|
26
|
-
workspaceEntries: prepared.workspaceEntries,
|
|
27
|
-
});
|
|
28
|
-
sessionId = session.metadata?.id ?? "";
|
|
29
|
-
}
|
|
30
14
|
progress("Creating execution...");
|
|
15
|
+
// One call: workspace entries ride the embedded session_spec
|
|
16
|
+
// (stigmer/stigmer#249), so the backend bootstraps the session — resolving
|
|
17
|
+
// the agent's default instance server-side (auto-creating it if missing,
|
|
18
|
+
// which a client-side lookup could not) — and dispatches the message.
|
|
31
19
|
const execution = await createAgentExecution(controller, {
|
|
32
20
|
agentId: input.agent.metadata?.id,
|
|
33
|
-
sessionId: sessionId === "" ? undefined : sessionId,
|
|
34
21
|
orgId: org,
|
|
35
22
|
message: prepared.message,
|
|
36
23
|
runtimeEnv: prepared.runtimeEnv,
|
|
37
24
|
attachments: prepared.attachments,
|
|
38
25
|
workspaceFileRefs: prepared.workspaceFileRefs,
|
|
26
|
+
workspaceEntries: prepared.workspaceEntries,
|
|
39
27
|
model: prepared.model,
|
|
40
28
|
mode: prepared.mode,
|
|
41
29
|
autoApproveAll: prepared.autoApproveAll,
|
|
42
30
|
});
|
|
43
|
-
// The backend owns the canonical session id
|
|
44
|
-
//
|
|
45
|
-
sessionId = execution.spec?.sessionId ??
|
|
31
|
+
// The backend owns the canonical session id: it creates the session and
|
|
32
|
+
// records the id on the returned execution spec.
|
|
33
|
+
const sessionId = execution.spec?.sessionId ?? "";
|
|
46
34
|
const header = {
|
|
47
35
|
agentName: input.agent.metadata?.name ?? "",
|
|
48
36
|
sessionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-exec.js","sourceRoot":"","sources":["../../../src/resources/run/agent-exec.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,+EAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"agent-exec.js","sourceRoot":"","sources":["../../../src/resources/run/agent-exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import type { Client } from "@connectrpc/connect";
|
|
|
2
2
|
import { type DescService } from "@bufbuild/protobuf";
|
|
3
3
|
import { type AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
4
4
|
import type { Attachment } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/spec_pb";
|
|
5
|
-
import { type Session } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
|
|
6
5
|
import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
7
6
|
import { type WorkflowExecution } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
8
7
|
import type { RuntimeEnv } from "./env.js";
|
|
@@ -12,6 +11,10 @@ export type ControllerFn = <Desc extends DescService>(service: Desc) => Client<D
|
|
|
12
11
|
* Inputs for creating an agent execution. At least one of agentId/sessionId
|
|
13
12
|
* must be set: agentId-only starts a new backend-managed session, sessionId
|
|
14
13
|
* threads a follow-up, both pins the agent within an existing session.
|
|
14
|
+
*
|
|
15
|
+
* workspaceEntries ride the one-call bootstrap (spec.session_spec,
|
|
16
|
+
* stigmer/stigmer#249) and shape the auto-created session; they are mutually
|
|
17
|
+
* exclusive with sessionId (a session's workspace is fixed at creation).
|
|
15
18
|
*/
|
|
16
19
|
export interface CreateAgentExecutionInput {
|
|
17
20
|
readonly agentId?: string;
|
|
@@ -21,25 +24,13 @@ export interface CreateAgentExecutionInput {
|
|
|
21
24
|
readonly runtimeEnv: RuntimeEnv;
|
|
22
25
|
readonly attachments: readonly Attachment[];
|
|
23
26
|
readonly workspaceFileRefs: readonly string[];
|
|
27
|
+
readonly workspaceEntries: readonly WorkspaceEntry[];
|
|
24
28
|
readonly model: string;
|
|
25
29
|
readonly mode: RunMode;
|
|
26
30
|
readonly autoApproveAll: boolean;
|
|
27
31
|
}
|
|
28
32
|
/** Create an agent execution. Mirrors Go's createAgentExecution. */
|
|
29
33
|
export declare function createAgentExecution(controller: ControllerFn, input: CreateAgentExecutionInput): Promise<AgentExecution>;
|
|
30
|
-
/** Inputs for creating a workspace-bearing session. */
|
|
31
|
-
export interface CreateSessionInput {
|
|
32
|
-
readonly agentInstanceId: string;
|
|
33
|
-
readonly orgId: string;
|
|
34
|
-
readonly workspaceEntries: readonly WorkspaceEntry[];
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Create a session with explicit workspace entries. Mirrors Go's
|
|
38
|
-
* createSessionForAgent: the backend's auto-create flow has no workspace
|
|
39
|
-
* passthrough, so the CLI creates the session itself. The "Auto-created session"
|
|
40
|
-
* subject matches the backend sentinel, so the async title activity replaces it.
|
|
41
|
-
*/
|
|
42
|
-
export declare function createSessionForAgent(controller: ControllerFn, input: CreateSessionInput): Promise<Session>;
|
|
43
34
|
/** Inputs for creating a workflow execution. */
|
|
44
35
|
export interface CreateWorkflowExecutionInput {
|
|
45
36
|
readonly workflowId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/resources/run/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/resources/run/create.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,6DAA6D,CAAC;AAGxH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8DAA8D,CAAC;AAQ/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4DAA4D,CAAC;AACjG,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,gEAAgE,CAAC;AAKxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM5C,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,SAAS,WAAW,EAAE,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AAErF;;;;;;;;GAQG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,oEAAoE;AACpE,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,YAAY,EACxB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAuBzB;AAED,gDAAgD;AAChD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,YAAY,EACxB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAY5B"}
|
package/resources/run/create.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
// Resource creation for the run path: AgentExecution
|
|
2
|
-
// may need, and WorkflowExecution.
|
|
1
|
+
// Resource creation for the run path: AgentExecution and WorkflowExecution.
|
|
3
2
|
//
|
|
4
3
|
// Ports the Go CLI's run_create.go. We build the full proto messages and drive
|
|
5
4
|
// the generated command controllers directly — the Wave-2 fidelity rule (see
|
|
@@ -11,8 +10,6 @@ import { AgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentex
|
|
|
11
10
|
import { AgentExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/command_pb";
|
|
12
11
|
import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
13
12
|
import { AgentExecutionSpecSchema, ExecutionConfigSchema, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/spec_pb";
|
|
14
|
-
import { SessionSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
|
|
15
|
-
import { SessionCommandController } from "@stigmer/protos/ai/stigmer/agentic/session/v1/command_pb";
|
|
16
13
|
import { SessionSpecSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/spec_pb";
|
|
17
14
|
import { WorkflowExecutionSchema, } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
18
15
|
import { WorkflowExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/command_pb";
|
|
@@ -34,30 +31,16 @@ export async function createAgentExecution(controller, input) {
|
|
|
34
31
|
autoApproveAll: input.autoApproveAll,
|
|
35
32
|
sessionId: input.sessionId ?? "",
|
|
36
33
|
agentId: input.agentId ?? "",
|
|
34
|
+
// Subject is left empty: the server defaults its sentinel and the async
|
|
35
|
+
// title activity replaces it, same as any auto-created session.
|
|
36
|
+
sessionSpec: input.workspaceEntries.length > 0
|
|
37
|
+
? create(SessionSpecSchema, { workspaceEntries: [...input.workspaceEntries] })
|
|
38
|
+
: undefined,
|
|
37
39
|
executionConfig: buildExecutionConfig(input.model, input.mode),
|
|
38
40
|
}),
|
|
39
41
|
});
|
|
40
42
|
return controller(AgentExecutionCommandController).create(execution);
|
|
41
43
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Create a session with explicit workspace entries. Mirrors Go's
|
|
44
|
-
* createSessionForAgent: the backend's auto-create flow has no workspace
|
|
45
|
-
* passthrough, so the CLI creates the session itself. The "Auto-created session"
|
|
46
|
-
* subject matches the backend sentinel, so the async title activity replaces it.
|
|
47
|
-
*/
|
|
48
|
-
export async function createSessionForAgent(controller, input) {
|
|
49
|
-
const session = create(SessionSchema, {
|
|
50
|
-
apiVersion: API_VERSION,
|
|
51
|
-
kind: "Session",
|
|
52
|
-
metadata: create(ApiResourceMetadataSchema, { name: `session-${Date.now()}`, org: input.orgId }),
|
|
53
|
-
spec: create(SessionSpecSchema, {
|
|
54
|
-
agentInstanceId: input.agentInstanceId,
|
|
55
|
-
subject: "Auto-created session",
|
|
56
|
-
workspaceEntries: [...input.workspaceEntries],
|
|
57
|
-
}),
|
|
58
|
-
});
|
|
59
|
-
return controller(SessionCommandController).create(session);
|
|
60
|
-
}
|
|
61
44
|
/**
|
|
62
45
|
* Create a workflow execution. Mirrors Go's createWorkflowExecution. The caller
|
|
63
46
|
* either detaches (prints IDs) or streams the execution live over the canonical
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/resources/run/create.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/resources/run/create.ts"],"names":[],"mappings":"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"}
|
package/resources/share.js
CHANGED
|
@@ -106,18 +106,19 @@ export async function shareAgent(client, ref, org, options) {
|
|
|
106
106
|
* slug equals the agent's (the server's default on create), else the
|
|
107
107
|
* first entry in that org, else null when the agent has never been shared
|
|
108
108
|
* there. Mirrors the web dialog's selection so both surfaces manage the
|
|
109
|
-
* same row. The org
|
|
109
|
+
* same row. The org scope is what keeps each org on its own channel
|
|
110
110
|
* (decision 013): an agent may be shared in N orgs, and toggling here
|
|
111
|
-
* must never edit another org's share.
|
|
111
|
+
* must never edit another org's share. The server applies the scope via
|
|
112
|
+
* the request's org field.
|
|
112
113
|
*/
|
|
113
114
|
async function resolveCanonicalShare(client, agent, shareOrg) {
|
|
114
115
|
const result = await client.agentShare.getByAgent(create(GetAgentSharesByAgentRequestSchema, {
|
|
115
116
|
agentId: agent.metadata?.id ?? "",
|
|
117
|
+
org: shareOrg,
|
|
116
118
|
}));
|
|
117
119
|
const agentSlug = agent.metadata?.slug ?? "";
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
inOrg[0] ??
|
|
120
|
+
return (result.items.find((share) => share.metadata?.slug === agentSlug) ??
|
|
121
|
+
result.items[0] ??
|
|
121
122
|
null);
|
|
122
123
|
}
|
|
123
124
|
// Unspecified means public by contract (a share created without an explicit
|
package/resources/share.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/resources/share.ts"],"names":[],"mappings":"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
|
|
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,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3C,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,kEAAkE;IAClE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,GAAG,IAAI,QAAQ,CAAC;IACjC,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC;IACzC,IAAI,KAAK,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC;IAE5B,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IAE3D,mEAAmE;IACnE,qEAAqE;IACrE,uEAAuE;IACvE,uDAAuD;IACvD,IAAI,UAAU,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAClB,sEAAsE;YACpE,cAAc,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,yBAAyB;YAC7E,GAAG,GAAG,QAAQ,GAAG,2DAA2D;YAC5E,6CAA6C,CAChD,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,qEAAqE;IACrE,oEAAoE;IACpE,eAAe;IACf,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC3D,MAAM,IAAI,UAAU,CAClB,+CAA+C;YAC7C,qEAAqE;YACrE,sEAAsE;YACtE,eAAe,CAClB,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,cAAc,GAClB,KAAK,KAAK,IAAI;QACZ,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO;YAC/C,eAAe,KAAK,cAAc;QACpC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,cAAc,KAAK,KAAK,CAAC;IAEnD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,uEAAuE;QACvE,gEAAgE;QAChE,kEAAkE;QAClE,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CACnC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAC9E,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,yEAAyE;IACzE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,eAAe,CAC7C,MAAM,CAAC,0BAA0B,EAAE;YACjC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;SACrC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CACpB,KAAK,EACL,KAAK,EACL,OAAO,EACP,cAAc,EACd,cAAc,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAC7C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,qBAAqB,CAClC,MAAe,EACf,KAAY,EACZ,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,CAC/C,MAAM,CAAC,kCAAkC,EAAE;QACzC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;QACjC,GAAG,EAAE,QAAQ;KACd,CAAC,CACH,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAC7C,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACf,IAAI,CACL,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,0CAA0C;AAC1C,SAAS,iBAAiB,CAAC,QAAwC;IACjE,OAAO,QAAQ,KAAK,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,sEAAsE;AACtE,4EAA4E;AAC5E,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,SAAS,oBAAoB,CAC3B,KAAY,EACZ,KAAwB,EACxB,QAAgB,EAChB,OAAgB,EAChB,QAAuB;IAEvB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC;IAC5B,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,QAAQ;QACrC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,SAAS;QACxC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS;QAChE,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5C,OAAO;QACP,QAAQ,EACN,QAAQ,KAAK,KAAK;YAChB,CAAC,CAAC,kBAAkB,CAAC,GAAG;YACxB,CAAC,CAAC,kBAAkB,CAAC,MAAM;QAC/B,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;QACpD,QAAQ,EAAE;YACR,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,IAAI,EAAE;YACjD,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,IAAI,EAAE;YACjD,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,IAAI,EAAE;SAC9D;QACD,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjE,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,6EAA6E;AAC7E,mEAAmE;AACnE,4EAA4E;AAC5E,4CAA4C;AAC5C,SAAS,eAAe,CACtB,KAAY,EACZ,KAAwB,EACxB,OAA0B,EAC1B,QAAuB,EACvB,cAAuB;IAEvB,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC;IAEtD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAClC,cAAc,CAAC,CAAC,CAAC,+BAA+B,IAAI,GAAG,CAAC,CAAC,CAAC,yBAAyB,IAAI,GAAG,CAC3F,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,yBAAyB,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAClC,OAAO,CAAC,SAAS,KAAK,IAAI;QACxB,CAAC,CAAC,yBAAyB,IAAI,kCAAkC;QACjE,CAAC,CAAC,cAAc;YACd,CAAC,CAAC,8BAA8B,IAAI,GAAG;YACvC,CAAC,CAAC,wBAAwB,IAAI,GAAG,CACtC,CAAC;IAEF,MAAM,eAAe,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC;IAChF,MAAM;SACH,UAAU,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;SACxE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAErE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,sEAAsE;QACtE,mCAAmC;QACnC,MAAM,CAAC,IAAI,CAAC,6BAA6B,GAAG,0DAA0D,CAAC,CAAC;QACxG,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAC/D,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -47,6 +47,21 @@ describe("buildRunnerEnv", () => {
|
|
|
47
47
|
expect(withKey.STIGMER_ACTIVITY_ROUTING).toBe("session");
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
it("forwards LLM provider keys only when set, resolved value winning over the base env", () => {
|
|
51
|
+
const bare = buildRunnerEnv(config, {});
|
|
52
|
+
expect(bare.ANTHROPIC_API_KEY).toBeUndefined();
|
|
53
|
+
expect(bare.OPENAI_API_KEY).toBeUndefined();
|
|
54
|
+
|
|
55
|
+
// The contract value is authoritative: the launcher already applied the
|
|
56
|
+
// env > config precedence, so whatever sits in the child's base env must
|
|
57
|
+
// not override the resolved key.
|
|
58
|
+
const env = buildRunnerEnv(
|
|
59
|
+
{ ...config, anthropicApiKey: "sk-ant-resolved" },
|
|
60
|
+
{ ANTHROPIC_API_KEY: "sk-ant-other" },
|
|
61
|
+
);
|
|
62
|
+
expect(env.ANTHROPIC_API_KEY).toBe("sk-ant-resolved");
|
|
63
|
+
});
|
|
64
|
+
|
|
50
65
|
// The regression guard for the queue bug: the server dispatches to, and the
|
|
51
66
|
// runner polls, the exact same queue.
|
|
52
67
|
it("pins the runner's poll queue to the server's dispatch queue", () => {
|
|
@@ -51,6 +51,10 @@ export function buildRunnerEnv(config: DaemonConfig, base: NodeJS.ProcessEnv = p
|
|
|
51
51
|
LOG_LEVEL: base.LOG_LEVEL ?? "info",
|
|
52
52
|
};
|
|
53
53
|
if (config.cursorApiKey !== undefined) env.CURSOR_API_KEY = config.cursorApiKey;
|
|
54
|
+
// Explicit set (after the base spread) so the launcher-resolved key wins over any
|
|
55
|
+
// stale inherited value — the delivery path for a `stigmer setup`-persisted key.
|
|
56
|
+
if (config.anthropicApiKey !== undefined) env.ANTHROPIC_API_KEY = config.anthropicApiKey;
|
|
57
|
+
if (config.openaiApiKey !== undefined) env.OPENAI_API_KEY = config.openaiApiKey;
|
|
54
58
|
if (config.activityRouting !== undefined) env.STIGMER_ACTIVITY_ROUTING = config.activityRouting;
|
|
55
59
|
return env;
|
|
56
60
|
}
|
|
@@ -26,6 +26,8 @@ describe("buildDaemonEnv + readDaemonConfig", () => {
|
|
|
26
26
|
serverBin: "/usr/local/bin/stigmer-server",
|
|
27
27
|
runner: { nodeBin: "/usr/bin/node", entryPath: "/repo/runner/dist/main.js", appDir: "/repo/runner" },
|
|
28
28
|
cursorApiKey: undefined,
|
|
29
|
+
anthropicApiKey: undefined,
|
|
30
|
+
openaiApiKey: undefined,
|
|
29
31
|
activityRouting: undefined,
|
|
30
32
|
});
|
|
31
33
|
});
|
|
@@ -44,6 +46,22 @@ describe("buildDaemonEnv + readDaemonConfig", () => {
|
|
|
44
46
|
expect(config.activityRouting).toBe("session");
|
|
45
47
|
});
|
|
46
48
|
|
|
49
|
+
// The config-file-only delivery path: a key from `stigmer setup` is not in the
|
|
50
|
+
// shell env, so the launcher must write it into the contract explicitly.
|
|
51
|
+
it("delivers a launcher-resolved LLM key with no help from the base env", () => {
|
|
52
|
+
const env = buildDaemonEnv({ ...baseInputs, anthropicApiKey: "sk-ant-cfg" }, {});
|
|
53
|
+
const config = readDaemonConfig(env);
|
|
54
|
+
expect(config.anthropicApiKey).toBe("sk-ant-cfg");
|
|
55
|
+
expect(config.openaiApiKey).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("passes shell-exported LLM keys through from the base env", () => {
|
|
59
|
+
const env = buildDaemonEnv(baseInputs, { ANTHROPIC_API_KEY: "sk-ant-env", OPENAI_API_KEY: "sk-oai-env" });
|
|
60
|
+
const config = readDaemonConfig(env);
|
|
61
|
+
expect(config.anthropicApiKey).toBe("sk-ant-env");
|
|
62
|
+
expect(config.openaiApiKey).toBe("sk-oai-env");
|
|
63
|
+
});
|
|
64
|
+
|
|
47
65
|
it("requires the data dir and server binary", () => {
|
|
48
66
|
expect(() => readDaemonConfig({})).toThrow(/STIGMER_DATA_DIR/);
|
|
49
67
|
expect(() => readDaemonConfig({ STIGMER_DATA_DIR: "/x" })).toThrow(/STIGMER_SERVER_BIN/);
|
package/src/local/daemon/env.ts
CHANGED
|
@@ -17,6 +17,8 @@ export const DaemonEnvVar = {
|
|
|
17
17
|
RunnerEntry: "STIGMER_RUNNER_ENTRY",
|
|
18
18
|
RunnerAppDir: "STIGMER_RUNNER_APP_DIR",
|
|
19
19
|
CursorApiKey: "CURSOR_API_KEY",
|
|
20
|
+
AnthropicApiKey: "ANTHROPIC_API_KEY",
|
|
21
|
+
OpenAiApiKey: "OPENAI_API_KEY",
|
|
20
22
|
ActivityRouting: "STIGMER_ACTIVITY_ROUTING",
|
|
21
23
|
} as const;
|
|
22
24
|
|
|
@@ -38,6 +40,8 @@ export interface DaemonConfig {
|
|
|
38
40
|
serverBin: string;
|
|
39
41
|
runner?: RunnerLaunch;
|
|
40
42
|
cursorApiKey?: string;
|
|
43
|
+
anthropicApiKey?: string;
|
|
44
|
+
openaiApiKey?: string;
|
|
41
45
|
activityRouting?: string;
|
|
42
46
|
}
|
|
43
47
|
|
|
@@ -51,6 +55,12 @@ export interface DaemonEnvInputs {
|
|
|
51
55
|
noWeb: boolean;
|
|
52
56
|
serverBin: string;
|
|
53
57
|
runner?: RunnerLaunch;
|
|
58
|
+
// LLM provider key resolved by the launcher (env > config file). Must be written
|
|
59
|
+
// into the daemon env explicitly: unlike a shell-exported key, a key persisted by
|
|
60
|
+
// `stigmer setup` exists only in the config file and would otherwise never reach
|
|
61
|
+
// the runner. Only the effective provider's key is set.
|
|
62
|
+
anthropicApiKey?: string;
|
|
63
|
+
openaiApiKey?: string;
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
/**
|
|
@@ -72,6 +82,8 @@ export function buildDaemonEnv(inputs: DaemonEnvInputs, base: NodeJS.ProcessEnv
|
|
|
72
82
|
env[DaemonEnvVar.RunnerEntry] = inputs.runner.entryPath;
|
|
73
83
|
env[DaemonEnvVar.RunnerAppDir] = inputs.runner.appDir;
|
|
74
84
|
}
|
|
85
|
+
if (inputs.anthropicApiKey !== undefined) env[DaemonEnvVar.AnthropicApiKey] = inputs.anthropicApiKey;
|
|
86
|
+
if (inputs.openaiApiKey !== undefined) env[DaemonEnvVar.OpenAiApiKey] = inputs.openaiApiKey;
|
|
75
87
|
return env;
|
|
76
88
|
}
|
|
77
89
|
|
|
@@ -93,6 +105,8 @@ export function readDaemonConfig(env: NodeJS.ProcessEnv = process.env): DaemonCo
|
|
|
93
105
|
serverBin: required(env, DaemonEnvVar.ServerBin),
|
|
94
106
|
runner: serverOnly ? undefined : runner,
|
|
95
107
|
cursorApiKey: nonEmpty(env[DaemonEnvVar.CursorApiKey]),
|
|
108
|
+
anthropicApiKey: nonEmpty(env[DaemonEnvVar.AnthropicApiKey]),
|
|
109
|
+
openaiApiKey: nonEmpty(env[DaemonEnvVar.OpenAiApiKey]),
|
|
96
110
|
activityRouting: nonEmpty(env[DaemonEnvVar.ActivityRouting]),
|
|
97
111
|
};
|
|
98
112
|
}
|
|
@@ -21,10 +21,11 @@ import { readPidFile, removePidFile } from "../state/pidfile.js";
|
|
|
21
21
|
import { findProcessByPort, isProcessAlive, killProcess } from "../state/proc.js";
|
|
22
22
|
import { type StartupConfig, removeStartupConfig, saveStartupConfig } from "../state/startup-config.js";
|
|
23
23
|
import { rotateLogs } from "../state/log-rotation.js";
|
|
24
|
+
import { resolveApiKey, resolveProvider } from "../llm-config.js";
|
|
24
25
|
import { ensureRunner } from "../runtime/runner.js";
|
|
25
26
|
import { ensureServerBinary } from "../runtime/server.js";
|
|
26
27
|
import { TemporalManager } from "../temporal/manager.js";
|
|
27
|
-
import { buildDaemonEnv } from "./env.js";
|
|
28
|
+
import { buildDaemonEnv, type DaemonEnvInputs } from "./env.js";
|
|
28
29
|
|
|
29
30
|
/** How long `up` waits for the server's gRPC port after spawning the daemon. */
|
|
30
31
|
const READY_TIMEOUT_MS = 60_000;
|
|
@@ -75,6 +76,7 @@ export async function up(options: UpOptions = {}, home: string = homedir()): Pro
|
|
|
75
76
|
noWeb: options.noWeb === true,
|
|
76
77
|
serverBin,
|
|
77
78
|
runner,
|
|
79
|
+
...resolveLlmKeyInputs(config),
|
|
78
80
|
},
|
|
79
81
|
process.env,
|
|
80
82
|
);
|
|
@@ -222,6 +224,25 @@ async function stopManagedTemporal(home: string): Promise<void> {
|
|
|
222
224
|
}
|
|
223
225
|
}
|
|
224
226
|
|
|
227
|
+
// LLM-key delivery for the runner: a key persisted by `stigmer setup` lives only in
|
|
228
|
+
// the config file, so the launcher must write it into the daemon contract explicitly
|
|
229
|
+
// — unlike a shell-exported key, it cannot flow by env inheritance. resolveApiKey's
|
|
230
|
+
// precedence (env var > config file) makes both cases one code path; when the env
|
|
231
|
+
// var is set this re-writes the same value. Only the effective provider's key is
|
|
232
|
+
// passed: the config file stores a single key, keyed to the chosen provider.
|
|
233
|
+
function resolveLlmKeyInputs(config: Config): Pick<DaemonEnvInputs, "anthropicApiKey" | "openaiApiKey"> {
|
|
234
|
+
const key = resolveApiKey(config);
|
|
235
|
+
if (key === "") return {};
|
|
236
|
+
switch (resolveProvider(config)) {
|
|
237
|
+
case "anthropic":
|
|
238
|
+
return { anthropicApiKey: key };
|
|
239
|
+
case "openai":
|
|
240
|
+
return { openaiApiKey: key };
|
|
241
|
+
default:
|
|
242
|
+
return {};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
225
246
|
// Default to managed Temporal unless the opaque local config explicitly opts out
|
|
226
247
|
// (Go parity: managed is the default). Wave 4's `setup` models this section.
|
|
227
248
|
function isTemporalManaged(config: Config): boolean {
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Orchestration tests for executeResolvedAgent: the one-call bootstrap
|
|
2
|
+
// contract (stigmer/stigmer#249). A workspace-bearing run must issue exactly
|
|
3
|
+
// one create RPC — the AgentExecution carrying session_spec — instead of the
|
|
4
|
+
// old session.create + agentExecution.create pair, and the flow must read the
|
|
5
|
+
// canonical session id back from the returned execution spec. Runs use
|
|
6
|
+
// detach mode so no streaming machinery is exercised.
|
|
7
|
+
|
|
8
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
9
|
+
import { create } from "@bufbuild/protobuf";
|
|
10
|
+
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
11
|
+
import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
12
|
+
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
13
|
+
import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
14
|
+
import {
|
|
15
|
+
LocalPathSourceSchema,
|
|
16
|
+
WorkspaceEntrySchema,
|
|
17
|
+
WorkspaceSourceSchema,
|
|
18
|
+
} from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
19
|
+
import type { BackendClient } from "../../client/index.js";
|
|
20
|
+
import { executeResolvedAgent } from "./agent-exec.js";
|
|
21
|
+
import type { PreparedRun } from "./prepare.js";
|
|
22
|
+
|
|
23
|
+
const WORKSPACE_ENTRY = create(WorkspaceEntrySchema, {
|
|
24
|
+
name: "repo",
|
|
25
|
+
source: create(WorkspaceSourceSchema, {
|
|
26
|
+
source: { case: "localPath", value: create(LocalPathSourceSchema, { path: "/home/user/repo" }) },
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
function makeAgent(): Agent {
|
|
31
|
+
return create(AgentSchema, {
|
|
32
|
+
metadata: { id: "agt_1", name: "helper" },
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function makePrepared(overrides: Partial<PreparedRun> = {}): PreparedRun {
|
|
37
|
+
return {
|
|
38
|
+
defaultAction: ApprovalAction.UNSPECIFIED,
|
|
39
|
+
workspaceEntries: [],
|
|
40
|
+
runtimeEnv: {},
|
|
41
|
+
attachments: [],
|
|
42
|
+
workspaceFileRefs: [],
|
|
43
|
+
message: "hi",
|
|
44
|
+
detach: true,
|
|
45
|
+
verbose: false,
|
|
46
|
+
model: "",
|
|
47
|
+
autoApproveAll: false,
|
|
48
|
+
mode: "",
|
|
49
|
+
...overrides,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// A BackendClient double whose controller records every create call and
|
|
54
|
+
// emulates the server stamping the bootstrapped session id onto the returned
|
|
55
|
+
// execution spec.
|
|
56
|
+
function fakeBackend(): { client: BackendClient; creates: () => AgentExecution[] } {
|
|
57
|
+
const captured: AgentExecution[] = [];
|
|
58
|
+
const controller = () => ({
|
|
59
|
+
create: async (msg: AgentExecution) => {
|
|
60
|
+
captured.push(msg);
|
|
61
|
+
// Echo with the server-owned session id filled in, like the real backend.
|
|
62
|
+
return {
|
|
63
|
+
...msg,
|
|
64
|
+
spec: msg.spec === undefined ? undefined : { ...msg.spec, sessionId: "ses_srv" },
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
const client = { controller } as unknown as BackendClient;
|
|
69
|
+
return { client, creates: () => captured };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Captured stderr lines (the header + re-attach hint in detach mode).
|
|
73
|
+
let stderrLines: string[];
|
|
74
|
+
|
|
75
|
+
beforeEach(() => {
|
|
76
|
+
stderrLines = [];
|
|
77
|
+
vi.spyOn(process.stderr, "write").mockImplementation((chunk) => {
|
|
78
|
+
stderrLines.push(String(chunk));
|
|
79
|
+
return true;
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
afterEach(() => {
|
|
84
|
+
vi.restoreAllMocks();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
describe("executeResolvedAgent", () => {
|
|
88
|
+
it("issues exactly one create carrying session_spec for a workspace run", async () => {
|
|
89
|
+
const { client, creates } = fakeBackend();
|
|
90
|
+
|
|
91
|
+
await executeResolvedAgent({
|
|
92
|
+
agent: makeAgent(),
|
|
93
|
+
prepared: makePrepared({ workspaceEntries: [WORKSPACE_ENTRY] }),
|
|
94
|
+
org: "acme",
|
|
95
|
+
downloadDir: "",
|
|
96
|
+
outputMode: "inline",
|
|
97
|
+
client,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const sent = creates();
|
|
101
|
+
expect(sent, "a workspace run is a single AgentExecution create").toHaveLength(1);
|
|
102
|
+
expect(sent[0]?.spec?.agentId).toBe("agt_1");
|
|
103
|
+
expect(sent[0]?.spec?.sessionId, "no client-created session id").toBe("");
|
|
104
|
+
expect(sent[0]?.spec?.sessionSpec?.workspaceEntries).toEqual([WORKSPACE_ENTRY]);
|
|
105
|
+
|
|
106
|
+
// The canonical session id comes back on the execution spec and drives the
|
|
107
|
+
// re-attach hint.
|
|
108
|
+
expect(stderrLines.join("")).toContain("stigmer resume ses_srv");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("issues one create with no session_spec when there is no workspace", async () => {
|
|
112
|
+
const { client, creates } = fakeBackend();
|
|
113
|
+
|
|
114
|
+
await executeResolvedAgent({
|
|
115
|
+
agent: makeAgent(),
|
|
116
|
+
prepared: makePrepared(),
|
|
117
|
+
org: "acme",
|
|
118
|
+
downloadDir: "",
|
|
119
|
+
outputMode: "inline",
|
|
120
|
+
client,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const sent = creates();
|
|
124
|
+
expect(sent).toHaveLength(1);
|
|
125
|
+
expect(sent[0]?.spec?.sessionSpec).toBeUndefined();
|
|
126
|
+
expect(sent[0]?.spec?.agentId).toBe("agt_1");
|
|
127
|
+
});
|
|
128
|
+
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// The "run a resolved agent" flow (Go's executeResolvedAgent in
|
|
2
|
-
// run_agent_exec.go): create the
|
|
3
|
-
//
|
|
4
|
-
//
|
|
2
|
+
// run_agent_exec.go): create the agent execution (one call — a workspace rides
|
|
3
|
+
// the embedded session_spec and the backend bootstraps the session), then
|
|
4
|
+
// either detach (print header + re-attach hint) or stream and optionally
|
|
5
|
+
// download artifacts. Shared by `run` and `draft`.
|
|
5
6
|
|
|
6
7
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
7
8
|
import type { BackendClient } from "../../client/index.js";
|
|
8
|
-
import { CliExitError, ExitCode } from "../../errors/index.js";
|
|
9
9
|
import { downloadExecutionArtifacts } from "../download.js";
|
|
10
|
-
import { createAgentExecution
|
|
10
|
+
import { createAgentExecution } from "./create.js";
|
|
11
11
|
import { renderSessionHeader, type SessionHeaderInfo, workspaceNames } from "./header.js";
|
|
12
12
|
import type { PreparedRun } from "./prepare.js";
|
|
13
13
|
import { streamAgentExecution, type RunOutputMode } from "./stream.js";
|
|
@@ -27,40 +27,27 @@ export async function executeResolvedAgent(input: ResolvedAgentExecInput): Promi
|
|
|
27
27
|
const controller = client.controller.bind(client);
|
|
28
28
|
const progress = stderrProgress();
|
|
29
29
|
|
|
30
|
-
// Workspaces require a CLI-created session: the backend's auto-create flow has
|
|
31
|
-
// no workspace passthrough (Go's createSessionForAgent).
|
|
32
|
-
let sessionId = "";
|
|
33
|
-
if (prepared.workspaceEntries.length > 0) {
|
|
34
|
-
const instanceId = input.agent.status?.defaultInstanceId ?? "";
|
|
35
|
-
if (instanceId === "") {
|
|
36
|
-
throw new CliExitError("agent has no default instance — cannot create workspace session", ExitCode.General);
|
|
37
|
-
}
|
|
38
|
-
progress("Creating workspace...");
|
|
39
|
-
const session = await createSessionForAgent(controller, {
|
|
40
|
-
agentInstanceId: instanceId,
|
|
41
|
-
orgId: org,
|
|
42
|
-
workspaceEntries: prepared.workspaceEntries,
|
|
43
|
-
});
|
|
44
|
-
sessionId = session.metadata?.id ?? "";
|
|
45
|
-
}
|
|
46
|
-
|
|
47
30
|
progress("Creating execution...");
|
|
31
|
+
// One call: workspace entries ride the embedded session_spec
|
|
32
|
+
// (stigmer/stigmer#249), so the backend bootstraps the session — resolving
|
|
33
|
+
// the agent's default instance server-side (auto-creating it if missing,
|
|
34
|
+
// which a client-side lookup could not) — and dispatches the message.
|
|
48
35
|
const execution = await createAgentExecution(controller, {
|
|
49
36
|
agentId: input.agent.metadata?.id,
|
|
50
|
-
sessionId: sessionId === "" ? undefined : sessionId,
|
|
51
37
|
orgId: org,
|
|
52
38
|
message: prepared.message,
|
|
53
39
|
runtimeEnv: prepared.runtimeEnv,
|
|
54
40
|
attachments: prepared.attachments,
|
|
55
41
|
workspaceFileRefs: prepared.workspaceFileRefs,
|
|
42
|
+
workspaceEntries: prepared.workspaceEntries,
|
|
56
43
|
model: prepared.model,
|
|
57
44
|
mode: prepared.mode,
|
|
58
45
|
autoApproveAll: prepared.autoApproveAll,
|
|
59
46
|
});
|
|
60
47
|
|
|
61
|
-
// The backend owns the canonical session id
|
|
62
|
-
//
|
|
63
|
-
sessionId = execution.spec?.sessionId ??
|
|
48
|
+
// The backend owns the canonical session id: it creates the session and
|
|
49
|
+
// records the id on the returned execution spec.
|
|
50
|
+
const sessionId = execution.spec?.sessionId ?? "";
|
|
64
51
|
|
|
65
52
|
const header: SessionHeaderInfo = {
|
|
66
53
|
agentName: input.agent.metadata?.name ?? "",
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
// Unit tests for run-path resource creation: full-proto field mapping, the
|
|
2
2
|
// message default, ExecutionConfig presence/contents, runtime-env conversion,
|
|
3
|
-
// and
|
|
4
|
-
// proto sent to the RPC.
|
|
3
|
+
// the one-call session_spec bootstrap, and the workflow shape. The controller
|
|
4
|
+
// is faked to capture the exact proto sent to the RPC.
|
|
5
5
|
|
|
6
6
|
import { describe, expect, it } from "vitest";
|
|
7
7
|
import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
8
|
+
import { create } from "@bufbuild/protobuf";
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "./create.js";
|
|
10
|
+
LocalPathSourceSchema,
|
|
11
|
+
WorkspaceEntrySchema,
|
|
12
|
+
WorkspaceSourceSchema,
|
|
13
|
+
} from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
14
|
+
import { type ControllerFn, createAgentExecution, createWorkflowExecution } from "./create.js";
|
|
14
15
|
|
|
15
16
|
// Returns a controller whose every RPC echoes the request back, and records the
|
|
16
17
|
// last message sent. `create` is the only RPC the run path calls.
|
|
@@ -36,6 +37,7 @@ describe("createAgentExecution", () => {
|
|
|
36
37
|
runtimeEnv: { FOO: { value: "bar", isSecret: false }, TOKEN: { value: "s", isSecret: true } },
|
|
37
38
|
attachments: [],
|
|
38
39
|
workspaceFileRefs: ["src/a.ts"],
|
|
40
|
+
workspaceEntries: [],
|
|
39
41
|
model: "claude",
|
|
40
42
|
mode: "plan",
|
|
41
43
|
autoApproveAll: true,
|
|
@@ -62,6 +64,7 @@ describe("createAgentExecution", () => {
|
|
|
62
64
|
runtimeEnv: {},
|
|
63
65
|
attachments: [],
|
|
64
66
|
workspaceFileRefs: [],
|
|
67
|
+
workspaceEntries: [],
|
|
65
68
|
model: "",
|
|
66
69
|
mode: "",
|
|
67
70
|
autoApproveAll: false,
|
|
@@ -79,6 +82,7 @@ describe("createAgentExecution", () => {
|
|
|
79
82
|
runtimeEnv: {},
|
|
80
83
|
attachments: [],
|
|
81
84
|
workspaceFileRefs: [],
|
|
85
|
+
workspaceEntries: [],
|
|
82
86
|
model: "m",
|
|
83
87
|
mode: "agent",
|
|
84
88
|
autoApproveAll: false,
|
|
@@ -86,19 +90,51 @@ describe("createAgentExecution", () => {
|
|
|
86
90
|
expect(exec.spec?.sessionId).toBe("ses_1");
|
|
87
91
|
expect(exec.spec?.executionConfig?.interactionMode).toBe(InteractionMode.UNSPECIFIED);
|
|
88
92
|
});
|
|
89
|
-
});
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
it("embeds workspace entries as session_spec (one-call bootstrap) with an empty subject", async () => {
|
|
95
|
+
const entry = create(WorkspaceEntrySchema, {
|
|
96
|
+
name: "repo",
|
|
97
|
+
source: create(WorkspaceSourceSchema, {
|
|
98
|
+
source: { case: "localPath", value: create(LocalPathSourceSchema, { path: "/home/user/repo" }) },
|
|
99
|
+
}),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const { fn } = fakeController();
|
|
103
|
+
const exec = await createAgentExecution(fn, {
|
|
104
|
+
agentId: "agt_1",
|
|
105
|
+
orgId: "acme",
|
|
106
|
+
message: "hi",
|
|
107
|
+
runtimeEnv: {},
|
|
108
|
+
attachments: [],
|
|
109
|
+
workspaceFileRefs: [],
|
|
110
|
+
workspaceEntries: [entry],
|
|
111
|
+
model: "",
|
|
112
|
+
mode: "",
|
|
113
|
+
autoApproveAll: false,
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
expect(exec.spec?.sessionId).toBe("");
|
|
117
|
+
expect(exec.spec?.sessionSpec?.workspaceEntries).toEqual([entry]);
|
|
118
|
+
// Subject stays empty so the server defaults its sentinel and the async
|
|
119
|
+
// title activity generates a real one.
|
|
120
|
+
expect(exec.spec?.sessionSpec?.subject).toBe("");
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("omits session_spec when there are no workspace entries", async () => {
|
|
93
124
|
const { fn } = fakeController();
|
|
94
|
-
const
|
|
95
|
-
|
|
125
|
+
const exec = await createAgentExecution(fn, {
|
|
126
|
+
agentId: "agt_1",
|
|
96
127
|
orgId: "acme",
|
|
128
|
+
message: "hi",
|
|
129
|
+
runtimeEnv: {},
|
|
130
|
+
attachments: [],
|
|
131
|
+
workspaceFileRefs: [],
|
|
97
132
|
workspaceEntries: [],
|
|
133
|
+
model: "",
|
|
134
|
+
mode: "",
|
|
135
|
+
autoApproveAll: false,
|
|
98
136
|
});
|
|
99
|
-
expect(
|
|
100
|
-
expect(session.spec?.agentInstanceId).toBe("ain_1");
|
|
101
|
-
expect(session.spec?.subject).toBe("Auto-created session");
|
|
137
|
+
expect(exec.spec?.sessionSpec).toBeUndefined();
|
|
102
138
|
});
|
|
103
139
|
});
|
|
104
140
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
// Resource creation for the run path: AgentExecution
|
|
2
|
-
// may need, and WorkflowExecution.
|
|
1
|
+
// Resource creation for the run path: AgentExecution and WorkflowExecution.
|
|
3
2
|
//
|
|
4
3
|
// Ports the Go CLI's run_create.go. We build the full proto messages and drive
|
|
5
4
|
// the generated command controllers directly — the Wave-2 fidelity rule (see
|
|
@@ -19,8 +18,6 @@ import {
|
|
|
19
18
|
ExecutionConfigSchema,
|
|
20
19
|
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/spec_pb";
|
|
21
20
|
import type { ExecutionValue } from "@stigmer/protos/ai/stigmer/agentic/executioncontext/v1/spec_pb";
|
|
22
|
-
import { type Session, SessionSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
|
|
23
|
-
import { SessionCommandController } from "@stigmer/protos/ai/stigmer/agentic/session/v1/command_pb";
|
|
24
21
|
import { SessionSpecSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/spec_pb";
|
|
25
22
|
import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
26
23
|
import {
|
|
@@ -44,6 +41,10 @@ export type ControllerFn = <Desc extends DescService>(service: Desc) => Client<D
|
|
|
44
41
|
* Inputs for creating an agent execution. At least one of agentId/sessionId
|
|
45
42
|
* must be set: agentId-only starts a new backend-managed session, sessionId
|
|
46
43
|
* threads a follow-up, both pins the agent within an existing session.
|
|
44
|
+
*
|
|
45
|
+
* workspaceEntries ride the one-call bootstrap (spec.session_spec,
|
|
46
|
+
* stigmer/stigmer#249) and shape the auto-created session; they are mutually
|
|
47
|
+
* exclusive with sessionId (a session's workspace is fixed at creation).
|
|
47
48
|
*/
|
|
48
49
|
export interface CreateAgentExecutionInput {
|
|
49
50
|
readonly agentId?: string;
|
|
@@ -53,6 +54,7 @@ export interface CreateAgentExecutionInput {
|
|
|
53
54
|
readonly runtimeEnv: RuntimeEnv;
|
|
54
55
|
readonly attachments: readonly Attachment[];
|
|
55
56
|
readonly workspaceFileRefs: readonly string[];
|
|
57
|
+
readonly workspaceEntries: readonly WorkspaceEntry[];
|
|
56
58
|
readonly model: string;
|
|
57
59
|
readonly mode: RunMode;
|
|
58
60
|
readonly autoApproveAll: boolean;
|
|
@@ -75,39 +77,18 @@ export async function createAgentExecution(
|
|
|
75
77
|
autoApproveAll: input.autoApproveAll,
|
|
76
78
|
sessionId: input.sessionId ?? "",
|
|
77
79
|
agentId: input.agentId ?? "",
|
|
80
|
+
// Subject is left empty: the server defaults its sentinel and the async
|
|
81
|
+
// title activity replaces it, same as any auto-created session.
|
|
82
|
+
sessionSpec:
|
|
83
|
+
input.workspaceEntries.length > 0
|
|
84
|
+
? create(SessionSpecSchema, { workspaceEntries: [...input.workspaceEntries] })
|
|
85
|
+
: undefined,
|
|
78
86
|
executionConfig: buildExecutionConfig(input.model, input.mode),
|
|
79
87
|
}),
|
|
80
88
|
});
|
|
81
89
|
return controller(AgentExecutionCommandController).create(execution);
|
|
82
90
|
}
|
|
83
91
|
|
|
84
|
-
/** Inputs for creating a workspace-bearing session. */
|
|
85
|
-
export interface CreateSessionInput {
|
|
86
|
-
readonly agentInstanceId: string;
|
|
87
|
-
readonly orgId: string;
|
|
88
|
-
readonly workspaceEntries: readonly WorkspaceEntry[];
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Create a session with explicit workspace entries. Mirrors Go's
|
|
93
|
-
* createSessionForAgent: the backend's auto-create flow has no workspace
|
|
94
|
-
* passthrough, so the CLI creates the session itself. The "Auto-created session"
|
|
95
|
-
* subject matches the backend sentinel, so the async title activity replaces it.
|
|
96
|
-
*/
|
|
97
|
-
export async function createSessionForAgent(controller: ControllerFn, input: CreateSessionInput): Promise<Session> {
|
|
98
|
-
const session = create(SessionSchema, {
|
|
99
|
-
apiVersion: API_VERSION,
|
|
100
|
-
kind: "Session",
|
|
101
|
-
metadata: create(ApiResourceMetadataSchema, { name: `session-${Date.now()}`, org: input.orgId }),
|
|
102
|
-
spec: create(SessionSpecSchema, {
|
|
103
|
-
agentInstanceId: input.agentInstanceId,
|
|
104
|
-
subject: "Auto-created session",
|
|
105
|
-
workspaceEntries: [...input.workspaceEntries],
|
|
106
|
-
}),
|
|
107
|
-
});
|
|
108
|
-
return controller(SessionCommandController).create(session);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
92
|
/** Inputs for creating a workflow execution. */
|
|
112
93
|
export interface CreateWorkflowExecutionInput {
|
|
113
94
|
readonly workflowId: string;
|
|
@@ -73,11 +73,16 @@ function fakeClient(
|
|
|
73
73
|
},
|
|
74
74
|
},
|
|
75
75
|
agentShare: {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
// Mirrors the server's org scope: a non-empty request org returns
|
|
77
|
+
// only that org's shares (the contract resolveCanonicalShare relies
|
|
78
|
+
// on to never surface another org's channel).
|
|
79
|
+
async getByAgent(input: { org?: string }) {
|
|
80
|
+
const items =
|
|
81
|
+
currentShare &&
|
|
82
|
+
(!input.org || currentShare.metadata.org === input.org)
|
|
83
|
+
? [currentShare]
|
|
84
|
+
: [];
|
|
85
|
+
return { totalCount: items.length, items };
|
|
81
86
|
},
|
|
82
87
|
async apply(input: AgentShareInput) {
|
|
83
88
|
if (opts.failWith) throw opts.failWith;
|
package/src/resources/share.ts
CHANGED
|
@@ -179,9 +179,10 @@ export async function shareAgent(
|
|
|
179
179
|
* slug equals the agent's (the server's default on create), else the
|
|
180
180
|
* first entry in that org, else null when the agent has never been shared
|
|
181
181
|
* there. Mirrors the web dialog's selection so both surfaces manage the
|
|
182
|
-
* same row. The org
|
|
182
|
+
* same row. The org scope is what keeps each org on its own channel
|
|
183
183
|
* (decision 013): an agent may be shared in N orgs, and toggling here
|
|
184
|
-
* must never edit another org's share.
|
|
184
|
+
* must never edit another org's share. The server applies the scope via
|
|
185
|
+
* the request's org field.
|
|
185
186
|
*/
|
|
186
187
|
async function resolveCanonicalShare(
|
|
187
188
|
client: Stigmer,
|
|
@@ -191,15 +192,13 @@ async function resolveCanonicalShare(
|
|
|
191
192
|
const result = await client.agentShare.getByAgent(
|
|
192
193
|
create(GetAgentSharesByAgentRequestSchema, {
|
|
193
194
|
agentId: agent.metadata?.id ?? "",
|
|
195
|
+
org: shareOrg,
|
|
194
196
|
}),
|
|
195
197
|
);
|
|
196
198
|
const agentSlug = agent.metadata?.slug ?? "";
|
|
197
|
-
const inOrg = result.items.filter(
|
|
198
|
-
(share) => share.metadata?.org === shareOrg,
|
|
199
|
-
);
|
|
200
199
|
return (
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
result.items.find((share) => share.metadata?.slug === agentSlug) ??
|
|
201
|
+
result.items[0] ??
|
|
203
202
|
null
|
|
204
203
|
);
|
|
205
204
|
}
|