@stigmer/cli 3.14.1 → 3.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/client/client.d.ts +20 -1
  2. package/client/client.d.ts.map +1 -1
  3. package/client/client.js +32 -5
  4. package/client/client.js.map +1 -1
  5. package/commands/auth/index.d.ts.map +1 -1
  6. package/commands/auth/index.js +7 -36
  7. package/commands/auth/index.js.map +1 -1
  8. package/commands/auth/login.d.ts +13 -0
  9. package/commands/auth/login.d.ts.map +1 -0
  10. package/commands/auth/login.js +58 -0
  11. package/commands/auth/login.js.map +1 -0
  12. package/commands/auth/whoami.d.ts +18 -0
  13. package/commands/auth/whoami.d.ts.map +1 -0
  14. package/commands/auth/whoami.js +58 -0
  15. package/commands/auth/whoami.js.map +1 -0
  16. package/commands/draft.d.ts.map +1 -1
  17. package/commands/draft.js +24 -8
  18. package/commands/draft.js.map +1 -1
  19. package/commands/internal-daemon.d.ts.map +1 -1
  20. package/commands/internal-daemon.js +2 -9
  21. package/commands/internal-daemon.js.map +1 -1
  22. package/commands/run.d.ts.map +1 -1
  23. package/commands/run.js +15 -6
  24. package/commands/run.js.map +1 -1
  25. package/commands/up.d.ts.map +1 -1
  26. package/commands/up.js +37 -8
  27. package/commands/up.js.map +1 -1
  28. package/local/artifact.d.ts +13 -3
  29. package/local/artifact.d.ts.map +1 -1
  30. package/local/artifact.js +31 -10
  31. package/local/artifact.js.map +1 -1
  32. package/local/daemon/components.d.ts.map +1 -1
  33. package/local/daemon/components.js +2 -0
  34. package/local/daemon/components.js.map +1 -1
  35. package/local/daemon/host.d.ts +8 -0
  36. package/local/daemon/host.d.ts.map +1 -1
  37. package/local/daemon/host.js +42 -1
  38. package/local/daemon/host.js.map +1 -1
  39. package/local/daemon/index.d.ts +3 -3
  40. package/local/daemon/index.d.ts.map +1 -1
  41. package/local/daemon/index.js +2 -2
  42. package/local/daemon/index.js.map +1 -1
  43. package/local/daemon/launch.d.ts +29 -1
  44. package/local/daemon/launch.d.ts.map +1 -1
  45. package/local/daemon/launch.js +73 -23
  46. package/local/daemon/launch.js.map +1 -1
  47. package/local/daemon/process.d.ts +16 -2
  48. package/local/daemon/process.d.ts.map +1 -1
  49. package/local/daemon/process.js +16 -2
  50. package/local/daemon/process.js.map +1 -1
  51. package/local/daemon/types.d.ts +2 -0
  52. package/local/daemon/types.d.ts.map +1 -1
  53. package/local/paths.d.ts +14 -4
  54. package/local/paths.d.ts.map +1 -1
  55. package/local/paths.js +17 -4
  56. package/local/paths.js.map +1 -1
  57. package/local/runtime/runner.d.ts +4 -0
  58. package/local/runtime/runner.d.ts.map +1 -1
  59. package/local/runtime/runner.js +10 -6
  60. package/local/runtime/runner.js.map +1 -1
  61. package/local/runtime/server.d.ts +5 -0
  62. package/local/runtime/server.d.ts.map +1 -1
  63. package/local/runtime/server.js +13 -8
  64. package/local/runtime/server.js.map +1 -1
  65. package/local/seedpack/content.d.ts +4 -0
  66. package/local/seedpack/content.d.ts.map +1 -1
  67. package/local/seedpack/content.js +11 -11
  68. package/local/seedpack/content.js.map +1 -1
  69. package/local/state/lock.d.ts +3 -2
  70. package/local/state/lock.d.ts.map +1 -1
  71. package/local/state/lock.js +23 -9
  72. package/local/state/lock.js.map +1 -1
  73. package/local/state/proc.d.ts +13 -0
  74. package/local/state/proc.d.ts.map +1 -1
  75. package/local/state/proc.js +15 -0
  76. package/local/state/proc.js.map +1 -1
  77. package/local/temporal/download.d.ts +7 -1
  78. package/local/temporal/download.d.ts.map +1 -1
  79. package/local/temporal/download.js +21 -11
  80. package/local/temporal/download.js.map +1 -1
  81. package/local/temporal/index.d.ts +3 -3
  82. package/local/temporal/index.d.ts.map +1 -1
  83. package/local/temporal/index.js +2 -2
  84. package/local/temporal/index.js.map +1 -1
  85. package/local/temporal/inspect.d.ts +10 -3
  86. package/local/temporal/inspect.d.ts.map +1 -1
  87. package/local/temporal/inspect.js +52 -13
  88. package/local/temporal/inspect.js.map +1 -1
  89. package/local/temporal/manager.d.ts +16 -4
  90. package/local/temporal/manager.d.ts.map +1 -1
  91. package/local/temporal/manager.js +19 -6
  92. package/local/temporal/manager.js.map +1 -1
  93. package/package.json +5 -5
  94. package/resources/run/prepare.d.ts +10 -8
  95. package/resources/run/prepare.d.ts.map +1 -1
  96. package/resources/run/prepare.js +18 -4
  97. package/resources/run/prepare.js.map +1 -1
  98. package/src/client/client.test.ts +89 -1
  99. package/src/client/client.ts +82 -9
  100. package/src/commands/auth/index.ts +7 -56
  101. package/src/commands/auth/login.test.ts +52 -0
  102. package/src/commands/auth/login.ts +70 -0
  103. package/src/commands/auth/whoami.test.ts +96 -0
  104. package/src/commands/auth/whoami.ts +87 -0
  105. package/src/commands/draft.ts +85 -26
  106. package/src/commands/internal-daemon.ts +2 -10
  107. package/src/commands/run.ts +77 -35
  108. package/src/commands/up.ts +52 -8
  109. package/src/local/artifact.test.ts +27 -1
  110. package/src/local/artifact.ts +35 -13
  111. package/src/local/daemon/components.ts +2 -0
  112. package/src/local/daemon/daemon.integration.test.ts +33 -0
  113. package/src/local/daemon/host.ts +50 -1
  114. package/src/local/daemon/index.ts +3 -3
  115. package/src/local/daemon/launch.test.ts +136 -0
  116. package/src/local/daemon/launch.ts +108 -27
  117. package/src/local/daemon/process.ts +31 -4
  118. package/src/local/daemon/supervisor.test.ts +1 -1
  119. package/src/local/daemon/types.ts +2 -0
  120. package/src/local/paths.ts +17 -4
  121. package/src/local/runtime/runner.ts +10 -6
  122. package/src/local/runtime/runtime.test.ts +15 -0
  123. package/src/local/runtime/server.test.ts +37 -0
  124. package/src/local/runtime/server.ts +17 -12
  125. package/src/local/seedpack/content.test.ts +21 -0
  126. package/src/local/seedpack/content.ts +15 -16
  127. package/src/local/state/lock.ts +24 -9
  128. package/src/local/state/proc.ts +16 -0
  129. package/src/local/state/state.test.ts +25 -1
  130. package/src/local/temporal/download.test.ts +79 -11
  131. package/src/local/temporal/download.ts +24 -11
  132. package/src/local/temporal/index.ts +11 -3
  133. package/src/local/temporal/inspect.test.ts +83 -0
  134. package/src/local/temporal/inspect.ts +60 -12
  135. package/src/local/temporal/manager.test.ts +34 -1
  136. package/src/local/temporal/manager.ts +22 -8
  137. package/src/resources/run/prepare.test.ts +28 -26
  138. package/src/resources/run/prepare.ts +48 -18
@@ -93,18 +93,20 @@ export interface PreparedRun {
93
93
  /** Optional behavior switches for {@link prepareAgentExec}. */
94
94
  export interface PrepareAgentExecOptions {
95
95
  /**
96
- * When `true` (the caller's backend is Stigmer Cloud) and `--model` is
97
- * omitted, the model is filled from the caller's account preference
98
- * (`IdentityAccountPreferences.default_*_model` for the resolved harness)
99
- * via `whoAmI()`. Local mode has no IdentityAccount, so callers pass
100
- * `false` there and the omitted model keeps resolving to the platform
101
- * default.
96
+ * When `true` and `--model` is omitted, the model is filled from the
97
+ * caller's account preference (`IdentityAccountPreferences.default_*_model`
98
+ * for the resolved harness) via `whoAmI()`. The caller answers this from
99
+ * the connected server's edition and the kind's tier —
100
+ * `client.isResourceAvailable(ApiResourceKind.identity_account)` — never
101
+ * from the config's backend type (20260911.11 A3): a server that does not
102
+ * serve identity accounts is not even asked, and the omitted model keeps
103
+ * resolving to the platform default.
102
104
  */
103
- readonly cloudBackend?: boolean;
105
+ readonly accountPreferencesAvailable?: boolean;
104
106
  /**
105
107
  * When `true` and `--harness` is omitted, the harness is filled from the
106
108
  * caller's account preference (`IdentityAccountPreferences.default_harness`)
107
- * on cloud. `run` opts in; `draft` deliberately does not: draft executes the
109
+ * where the kind is served. `run` opts in; `draft` deliberately does not: draft executes the
108
110
  * seedpack's system creator agents (a utility flow, not the user's own
109
111
  * conversation), which are built and exercised on the native harness —
110
112
  * silently rerouting them onto the cursor engine (different toolset,
@@ -133,27 +135,38 @@ export async function prepareAgentExec(
133
135
  validateHarness(flags.harness);
134
136
 
135
137
  // Layered seeds (oss#293, DD-003): explicit flag > account preference
136
- // (cloud only) > platform default. Harness resolves first because the model
138
+ // (where the server serves identity accounts) > platform default. Harness resolves first because the model
137
139
  // fill is harness-aware: a cursor session fills from default_cursor_model,
138
140
  // everything else from default_native_model. `run` and `draft` always
139
141
  // create a NEW session (threading lives in `resume`, which does not pass
140
142
  // through here), so neither fill can ever contradict an existing session's
141
143
  // immutable harness. One whoAmI round trip serves both fills, and it is
142
144
  // skipped entirely when explicit flags leave nothing to fill.
143
- const wantsHarnessFill = flags.harness === "" && options?.applyAccountHarnessDefault === true;
145
+ const wantsHarnessFill =
146
+ flags.harness === "" && options?.applyAccountHarnessDefault === true;
144
147
  const wantsModelFill = flags.model === "";
145
148
  const accountDefaults =
146
- options?.cloudBackend === true && (wantsHarnessFill || wantsModelFill)
149
+ options?.accountPreferencesAvailable === true &&
150
+ (wantsHarnessFill || wantsModelFill)
147
151
  ? await resolveAccountExecutionDefaults(client)
148
152
  : NO_ACCOUNT_DEFAULTS;
149
- const harness = flags.harness !== "" ? flags.harness : wantsHarnessFill ? accountDefaults.harness : "";
153
+ const harness =
154
+ flags.harness !== ""
155
+ ? flags.harness
156
+ : wantsHarnessFill
157
+ ? accountDefaults.harness
158
+ : "";
150
159
  const model = wantsModelFill
151
160
  ? harness === "cursor"
152
161
  ? accountDefaults.cursorModel
153
162
  : accountDefaults.nativeModel
154
163
  : flags.model;
155
164
 
156
- const workspaceEntries = parseWorkspaceEntries(flags.workspace, flags.branch, flags.commit);
165
+ const workspaceEntries = parseWorkspaceEntries(
166
+ flags.workspace,
167
+ flags.branch,
168
+ flags.commit,
169
+ );
157
170
 
158
171
  const runtimeEnv = loadAndMergeEnv({
159
172
  envFlags: flags.env,
@@ -197,7 +210,11 @@ interface AccountExecutionDefaults {
197
210
  readonly cursorModel: string;
198
211
  }
199
212
 
200
- const NO_ACCOUNT_DEFAULTS: AccountExecutionDefaults = { harness: "", nativeModel: "", cursorModel: "" };
213
+ const NO_ACCOUNT_DEFAULTS: AccountExecutionDefaults = {
214
+ harness: "",
215
+ nativeModel: "",
216
+ cursorModel: "",
217
+ };
201
218
 
202
219
  /**
203
220
  * Best-effort read of the caller's execution defaults
@@ -206,12 +223,19 @@ const NO_ACCOUNT_DEFAULTS: AccountExecutionDefaults = { harness: "", nativeModel
206
223
  * IdentityAccount — resolves to no defaults and the run proceeds exactly as
207
224
  * unfilled flags do today: a missing preference must never fail a run.
208
225
  *
226
+ * This reads `whoAmI` directly and never the SDK's ensureMyIdentityAccount:
227
+ * a run must not create an account as a side effect, so NOT_FOUND here means
228
+ * "no preferences yet". Provisioning belongs to `auth login` and `auth
229
+ * whoami`, the commands whose purpose is the caller's identity.
230
+ *
209
231
  * The persisted harness value is allowlist-guarded to the shipped engines
210
232
  * (the same guard the web launcher's useAccountExecutionDefaults applies):
211
233
  * a client must not trust stored data it did not write, so anything outside
212
234
  * native/cursor is treated as undeclared rather than stamped on the wire.
213
235
  */
214
- async function resolveAccountExecutionDefaults(client: Stigmer): Promise<AccountExecutionDefaults> {
236
+ async function resolveAccountExecutionDefaults(
237
+ client: Stigmer,
238
+ ): Promise<AccountExecutionDefaults> {
215
239
  try {
216
240
  const account = await client.identityAccount.whoAmI();
217
241
  const prefs = account.spec?.preferences;
@@ -257,7 +281,9 @@ export function parseApprovalAction(value: string): ApprovalAction {
257
281
  */
258
282
  export function validateMode(mode: string): asserts mode is RunMode {
259
283
  if (mode !== "" && mode !== "agent" && mode !== "plan") {
260
- throw new UsageError(`invalid --mode value "${mode}": must be "agent" or "plan"`);
284
+ throw new UsageError(
285
+ `invalid --mode value "${mode}": must be "agent" or "plan"`,
286
+ );
261
287
  }
262
288
  }
263
289
 
@@ -267,7 +293,9 @@ export function validateMode(mode: string): asserts mode is RunMode {
267
293
  * server refuses fast on models without a registry fast variant; this check
268
294
  * only catches spelling errors before a network round trip.
269
295
  */
270
- export function validateServiceTier(tier: string): asserts tier is ServiceTierFlag {
296
+ export function validateServiceTier(
297
+ tier: string,
298
+ ): asserts tier is ServiceTierFlag {
271
299
  if (tier !== "" && tier !== "standard" && tier !== "fast") {
272
300
  throw new UsageError(
273
301
  `invalid --service-tier value "${tier}": must be "standard" or "fast"`,
@@ -298,7 +326,9 @@ export function validateThinking(mode: string): asserts mode is ThinkingFlag {
298
326
  * them here is honest, and this check catches spelling errors before a
299
327
  * network round trip.
300
328
  */
301
- export function validateHarness(harness: string): asserts harness is HarnessFlag {
329
+ export function validateHarness(
330
+ harness: string,
331
+ ): asserts harness is HarnessFlag {
302
332
  if (harness !== "" && harness !== "native" && harness !== "cursor") {
303
333
  throw new UsageError(
304
334
  `invalid --harness value "${harness}": must be "native" or "cursor"`,