@senpi/runtime 3.0.72 → 3.0.74

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 (83) hide show
  1. package/dist/cli/senpi-commands.d.ts.map +1 -1
  2. package/dist/cli/senpi-commands.js +6 -5
  3. package/dist/cli/senpi-commands.js.map +1 -1
  4. package/dist/deploy/deadlines.d.ts +61 -1
  5. package/dist/deploy/deadlines.d.ts.map +1 -1
  6. package/dist/deploy/deadlines.js +85 -2
  7. package/dist/deploy/deadlines.js.map +1 -1
  8. package/dist/deploy/funding.d.ts +38 -0
  9. package/dist/deploy/funding.d.ts.map +1 -1
  10. package/dist/deploy/funding.js +39 -0
  11. package/dist/deploy/funding.js.map +1 -1
  12. package/dist/deploy/job.d.ts.map +1 -1
  13. package/dist/deploy/job.js +7 -1
  14. package/dist/deploy/job.js.map +1 -1
  15. package/dist/deploy/messages.d.ts +603 -0
  16. package/dist/deploy/messages.d.ts.map +1 -0
  17. package/dist/deploy/messages.js +1388 -0
  18. package/dist/deploy/messages.js.map +1 -0
  19. package/dist/deploy/orchestrator.d.ts +8 -0
  20. package/dist/deploy/orchestrator.d.ts.map +1 -1
  21. package/dist/deploy/orchestrator.js +146 -1211
  22. package/dist/deploy/orchestrator.js.map +1 -1
  23. package/dist/deploy/package.d.ts +89 -0
  24. package/dist/deploy/package.d.ts.map +1 -1
  25. package/dist/deploy/package.js +213 -25
  26. package/dist/deploy/package.js.map +1 -1
  27. package/dist/deploy/proof-gate.d.ts +4 -0
  28. package/dist/deploy/proof-gate.d.ts.map +1 -1
  29. package/dist/deploy/proof-gate.js +4 -0
  30. package/dist/deploy/proof-gate.js.map +1 -1
  31. package/dist/deploy/recheck-commands.d.ts.map +1 -1
  32. package/dist/deploy/recheck-commands.js +21 -3
  33. package/dist/deploy/recheck-commands.js.map +1 -1
  34. package/dist/deploy/register.d.ts +2 -0
  35. package/dist/deploy/register.d.ts.map +1 -1
  36. package/dist/deploy/register.js +23 -6
  37. package/dist/deploy/register.js.map +1 -1
  38. package/dist/deploy/taxonomy.d.ts +19 -0
  39. package/dist/deploy/taxonomy.d.ts.map +1 -1
  40. package/dist/deploy/taxonomy.js +28 -0
  41. package/dist/deploy/taxonomy.js.map +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +230 -176
  44. package/dist/index.js.map +1 -1
  45. package/dist/runtime/env-resolve.d.ts +13 -0
  46. package/dist/runtime/env-resolve.d.ts.map +1 -1
  47. package/dist/runtime/env-resolve.js +14 -1
  48. package/dist/runtime/env-resolve.js.map +1 -1
  49. package/dist/runtime/runtime-schema.d.ts +100 -100
  50. package/dist/scanners/external/scaffold/preflight.py +39 -0
  51. package/dist/telemetry/metrics.d.ts +7 -0
  52. package/dist/telemetry/metrics.d.ts.map +1 -1
  53. package/dist/telemetry/metrics.js +7 -0
  54. package/dist/telemetry/metrics.js.map +1 -1
  55. package/dist/validate/codes.d.ts +10 -0
  56. package/dist/validate/codes.d.ts.map +1 -1
  57. package/dist/validate/codes.js +38 -1
  58. package/dist/validate/codes.js.map +1 -1
  59. package/dist/validate/live-stage.d.ts +8 -0
  60. package/dist/validate/live-stage.d.ts.map +1 -1
  61. package/dist/validate/live-stage.js +87 -18
  62. package/dist/validate/live-stage.js.map +1 -1
  63. package/dist/validate/package-gates-stage.d.ts +61 -0
  64. package/dist/validate/package-gates-stage.d.ts.map +1 -0
  65. package/dist/validate/package-gates-stage.js +215 -0
  66. package/dist/validate/package-gates-stage.js.map +1 -0
  67. package/dist/validate/run.d.ts +24 -1
  68. package/dist/validate/run.d.ts.map +1 -1
  69. package/dist/validate/run.js +51 -4
  70. package/dist/validate/run.js.map +1 -1
  71. package/dist/validate/taxonomy-finding.d.ts +22 -0
  72. package/dist/validate/taxonomy-finding.d.ts.map +1 -0
  73. package/dist/validate/taxonomy-finding.js +25 -0
  74. package/dist/validate/taxonomy-finding.js.map +1 -0
  75. package/dist/validate/universe-stage.d.ts.map +1 -1
  76. package/dist/validate/universe-stage.js +2 -20
  77. package/dist/validate/universe-stage.js.map +1 -1
  78. package/dist/validate/wallet-binding-stage.d.ts +44 -0
  79. package/dist/validate/wallet-binding-stage.d.ts.map +1 -0
  80. package/dist/validate/wallet-binding-stage.js +92 -0
  81. package/dist/validate/wallet-binding-stage.js.map +1 -0
  82. package/openclaw.plugin.json +1 -1
  83. package/package.json +1 -1
@@ -8,15 +8,25 @@
8
8
  * touches the network, the registry, or money.
9
9
  */
10
10
  import { readFileSync, existsSync } from "node:fs";
11
- import { basename, join, dirname, resolve } from "node:path";
11
+ import { basename, join, dirname, resolve, relative, isAbsolute } from "node:path";
12
12
  import { parse as parseYaml } from "yaml";
13
+ import { ENV_VAR_PATTERN_SOURCE } from "../runtime/env-resolve.js";
13
14
  import { pythonFloat } from "./python-float.js";
14
15
  /** Platform cap on a strategy name; also the cap on a derived wallet/runtime id. */
15
16
  const WALLET_NAME_MAX = 40;
16
17
  /** Matches a whole-value `${TOKEN}` wallet binding in a flat package's runtime.yaml. */
17
18
  const WALLET_TOKEN_RE = /^\$\{([A-Z0-9_]+)\}$/;
18
- /** Any surviving `${TOKEN}` after render — an unresolved placeholder must never reach the runtime. */
19
- const LEFTOVER_TOKEN_RE = /\$\{[A-Z0-9_]+\}/;
19
+ /**
20
+ * Any surviving `${...}` after render — an unresolved placeholder must never reach the runtime.
21
+ *
22
+ * Built from the EXPANDER's own grammar ({@link ENV_VAR_PATTERN_SOURCE}) rather than a local
23
+ * approximation of it. This gate used to be `\$\{[A-Z0-9_]+\}`, which cannot match `:` or `-`, so
24
+ * `${SENPI_API_KEY:-x}` — a form `resolveEnvInString` expands — passed it silently and installed
25
+ * verbatim, handing the box's credentials to author-written scanner code as an ordinary input
26
+ * value. Sharing the grammar is what makes the gate's stated purpose true: anything left as
27
+ * `${...}` is a packaging bug and throws rather than reaching the runtime.
28
+ */
29
+ const LEFTOVER_TOKEN_RE = new RegExp(ENV_VAR_PATTERN_SOURCE);
20
30
  /** Port of deploy.py `_sanitize_strategy_name`: whitespace→'-', keep [A-Za-z0-9_-], trim '-', cap 40. */
21
31
  export function sanitizeStrategyName(name) {
22
32
  const collapsed = name
@@ -73,6 +83,12 @@ function assertIdentityRoundTrips(id, name, manifestPath) {
73
83
  * a package that already has money in the ground. Same call the skills side made for the same
74
84
  * reason: the rule lives in `_pkg.validate`, which `deploy.py` runs before every money verb, and
75
85
  * never in `_pkg.load`, which `close.py` needs in order to tear a package down.
86
+ *
87
+ * `senpi validate` reports it too, at static depth (`E_VALIDATE_PACKAGE_ID_CASE`), rendering its
88
+ * fix from {@link lowercasePackageIdFix} so both surfaces name the identical edit. Note the ops
89
+ * ordering that creates: the redeploy loop is `validate → close → create`, so the finding fires
90
+ * before anything is closed and the id is lowercased on a package that may already own funded
91
+ * wallets. That is safe only because both stamp comparisons case-FOLD.
76
92
  */
77
93
  export function nonLowercasePackageId(pkg) {
78
94
  return pkg.id !== pkg.id.toLowerCase() ? pkg.id : null;
@@ -132,6 +148,7 @@ function readYamlMapping(path) {
132
148
  */
133
149
  const readFundingShare = pythonFloat;
134
150
  function readDeclaredInstances(rawInstances, dir, manifestPath) {
151
+ const seen = new Set();
135
152
  return rawInstances.map((entry) => {
136
153
  const name = String(entry.name ?? "");
137
154
  const rel = String(entry.runtime ?? "");
@@ -139,6 +156,22 @@ function readDeclaredInstances(rawInstances, dir, manifestPath) {
139
156
  if (!name || !rel || !walletEnv) {
140
157
  throw new Error(`strategy.yaml instance entries need name, runtime, wallet_env (${manifestPath})`);
141
158
  }
159
+ // A repeated name is not a cosmetic clash — it costs money twice over, and nothing downstream
160
+ // can recover from it. `planFunding` keys its amounts Map on this name, so two entries collapse
161
+ // into one and the preflight validates HALF the money that actually moves; both runs then read
162
+ // the same amount and issue two creates. At install both derive the same `<id>-<instance>`
163
+ // runtime id, so the second deletes the first's runtime and rebinds to its own wallet —
164
+ // leaving wallet #1 funded, live, and supervised by no runtime and no exit engine, with its
165
+ // install step reported `ok`. Refused in the loader, beside the sibling name rule above: unlike
166
+ // a mixed-case package id (which deploys coherently and only misstamps), there is no reading of
167
+ // a duplicated name any consumer can act on, so there is no recovery read to keep working.
168
+ if (seen.has(name)) {
169
+ throw new Error(`strategy.yaml declares instance "${name}" more than once (${manifestPath}). Instance ` +
170
+ `names must be unique within a package: the funding plan and the runtime id are both ` +
171
+ `keyed on this name, so a repeated one funds two wallets and then leaves one of them ` +
172
+ `with no runtime watching it. Give each instance its own name.`);
173
+ }
174
+ seen.add(name);
142
175
  // An instance name has to survive `sanitizeStrategyName` UNCHANGED, because two different
143
176
  // consumers disagree about it otherwise: the runtime registers the sanitized
144
177
  // `<id>-<instance>`, while `close.py --instance <name>` looks the sleeve up under the RAW one.
@@ -152,6 +185,21 @@ function readDeclaredInstances(rawInstances, dir, manifestPath) {
152
185
  `looks up the raw one, so a name that changes here cannot be closed by instance later.`);
153
186
  }
154
187
  const runtimeYamlPath = resolve(dir, rel);
188
+ // The user names ONE directory, and everything this deploy reads, funds and runs has to come
189
+ // from inside it. `resolve` + `existsSync` alone let `../../other/runtime.yaml` — or a bare
190
+ // absolute path, which has no `../` to notice — relocate every consumer at once: the pre-money
191
+ // gates would validate a foreign recipe, `checkPackageProof` would read a `.senpi-proof.json`
192
+ // recorded for a package nobody inspected (satisfying the funding gate), relative
193
+ // `scanners[].path` entrypoints would resolve and therefore EXECUTE from outside the package,
194
+ // and the refusals would print `openclaw senpi validate '<that outside dir>'` for the reader to
195
+ // run. One containment check upstream of all of them is the whole fix.
196
+ const inside = relative(dir, runtimeYamlPath);
197
+ if (inside.startsWith("..") || isAbsolute(inside)) {
198
+ throw new Error(`strategy.yaml instance "${name}" points at a runtime file outside the package: ` +
199
+ `"${rel}" resolves to ${runtimeYamlPath}, which is not under ${dir}. An instance's ` +
200
+ `runtime.yaml must live inside the package directory being deployed — move the file in, ` +
201
+ `or deploy the package that already contains it.`);
202
+ }
155
203
  if (!existsSync(runtimeYamlPath)) {
156
204
  throw new Error(`Instance "${name}" runtime file not found: ${runtimeYamlPath}`);
157
205
  }
@@ -226,6 +274,59 @@ export function walletName(pkg, inst) {
226
274
  export function readRuntimeYaml(inst) {
227
275
  return readFileSync(inst.runtimeYamlPath, "utf8");
228
276
  }
277
+ /** The `${TOKEN}` an instance's recipe must bind its wallet to, from the manifest's `wallet_env`. */
278
+ function expectedWalletBinding(inst) {
279
+ return `\${${inst.walletEnv}}`;
280
+ }
281
+ /**
282
+ * Instances whose recipe does not bind the wallet `strategy.yaml` says it binds.
283
+ *
284
+ * `wallet_env` is a promise the manifest makes on behalf of the recipe, and nothing used to check
285
+ * that the recipe keeps it. `renderRuntimeYaml` substitutes by string replacement, so a declared
286
+ * token that never appears substitutes NOTHING — silently, because the leftover-placeholder gate
287
+ * only looks for surviving `${...}` and a hardcoded address leaves none. A package declaring
288
+ * `wallet_env: UNUSED` beside a recipe pinning an address it chose therefore had `senpi deploy`
289
+ * create and fund a fresh wallet from the user's budget and then install the runtime — actions,
290
+ * DSL exit engine and all — against the OTHER address. The install step named the recipe's wallet,
291
+ * so the report read clean while the funded wallet sat with nothing watching it.
292
+ *
293
+ * Read from the PARSED recipe, not by searching its text: a token that appears anywhere at all
294
+ * satisfies a text search, substitutes harmlessly into some field nobody reads, and leaves the
295
+ * leftover gate with nothing to catch. Only `strategy.wallet` decides what the runtime binds.
296
+ *
297
+ * Flat packages cannot fault here and are not special-cased: `synthesizeFlatInstance` derives
298
+ * `walletEnv` from this very field, so the invariant holds by construction.
299
+ *
300
+ * Never throws. A recipe that will not parse is a fault the YAML-syntax gate already owns and
301
+ * words properly — restating it here in worse words helps nobody — and this check is called from
302
+ * places (validate's static depth, deploy's preflight) where taking the whole run down over one
303
+ * unreadable file would be the wrong answer.
304
+ */
305
+ export function unboundWalletInstances(pkg) {
306
+ const faults = [];
307
+ for (const inst of pkg.instances) {
308
+ let declared;
309
+ try {
310
+ const parsed = parseYaml(readRuntimeYaml(inst));
311
+ const strategy = parsed?.strategy;
312
+ // A missing or non-mapping `strategy:` block is NOT skipped: it parses, so it can reach
313
+ // install, and it binds no wallet — which is exactly the fault this asks about. Only a file
314
+ // that will not parse at all is passed over, and that one cannot reach install because
315
+ // `renderRuntimeYaml` re-parses before it returns.
316
+ const wallet = strategy !== null && typeof strategy === "object" && !Array.isArray(strategy)
317
+ ? strategy.wallet
318
+ : undefined;
319
+ declared = typeof wallet === "string" ? wallet.trim() : undefined;
320
+ }
321
+ catch {
322
+ continue;
323
+ }
324
+ const expected = expectedWalletBinding(inst);
325
+ if (declared !== expected)
326
+ faults.push({ instance: inst, declared, expected });
327
+ }
328
+ return faults;
329
+ }
229
330
  /**
230
331
  * Render an instance's runtime.yaml for install. Only the wallet token and (when
231
332
  * supplied) the decision-model token are substituted; anything else left as
@@ -242,8 +343,52 @@ export function renderRuntimeYaml(inst, wallet, decisionModel) {
242
343
  throw new Error(`Unresolved placeholder ${leftover[0]} in ${inst.runtimeYamlPath}. ` +
243
344
  `Only \${${inst.walletEnv}}${decisionModel ? ` and \${${decisionModel.env}}` : ""} are substituted by deploy.`);
244
345
  }
346
+ assertBindsFundedWallet(inst, text, wallet);
245
347
  return text;
246
348
  }
349
+ /**
350
+ * The last gate before install: does the recipe about to be installed bind the wallet this run
351
+ * actually funded?
352
+ *
353
+ * Not redundant with the pre-money check in the preflight, for a reason that is a property of this
354
+ * function: it RE-READS the file. Whatever any earlier gate inspected is not provably these bytes
355
+ * (`runtime.yaml` is read several times across one deploy, and nothing pins the file between
356
+ * them). This is the one point where the funded wallet and the exact text that will be installed
357
+ * are both in hand, so it is the only place the invariant can actually be asserted rather than
358
+ * approximated.
359
+ *
360
+ * Compares the PARSED value — the runtime binds what the YAML parses to, not what the text looks
361
+ * like — and folds case, because a wallet address is one margin account however it is spelled
362
+ * (`findByWallet` folds for the same reason). An exact compare here would refuse correct deploys
363
+ * and, since this throw lands on the money path, roll their funded wallets back.
364
+ *
365
+ * Fails CLOSED on a rendered recipe that will not parse. The runtime would reject it anyway; the
366
+ * difference is that refusing here happens before the wallet is handed to an install.
367
+ */
368
+ function assertBindsFundedWallet(inst, rendered, wallet) {
369
+ let bound;
370
+ try {
371
+ const parsed = parseYaml(rendered);
372
+ const strategy = parsed?.strategy;
373
+ bound =
374
+ strategy !== null && typeof strategy === "object" && !Array.isArray(strategy)
375
+ ? strategy.wallet
376
+ : undefined;
377
+ }
378
+ catch (err) {
379
+ throw new Error(`Rendered recipe for instance "${inst.name}" (${inst.runtimeYamlPath}) is not parseable as ` +
380
+ `YAML: ${err instanceof Error ? err.message : String(err)}. Nothing was installed on the ` +
381
+ `wallet this run funded — a recipe that cannot be read cannot be confirmed to bind it.`);
382
+ }
383
+ const boundText = typeof bound === "string" ? bound.trim() : "";
384
+ if (boundText.toLowerCase() === wallet.trim().toLowerCase())
385
+ return;
386
+ throw new Error(`Instance "${inst.name}" would install against ${boundText === "" ? "no wallet" : `wallet ${boundText}`}, ` +
387
+ `but this deploy funded ${wallet}. Its recipe (${inst.runtimeYamlPath}) must bind ` +
388
+ `strategy.wallet to \${${inst.walletEnv}} — the token strategy.yaml declares for it — so ` +
389
+ `deploy can substitute the wallet it created. As written, the money this run moved and the ` +
390
+ `account the strategy would trade are two different wallets.`);
391
+ }
247
392
  /**
248
393
  * True iff the instance ships a DSL exit block — `exit.dsl_preset`, or `exit.engine: dsl`.
249
394
  *
@@ -252,7 +397,25 @@ export function renderRuntimeYaml(inst, wallet, decisionModel) {
252
397
  * the taught path, so the same gate has to live here or the hole reopens on the direct-verb route.
253
398
  */
254
399
  export function instanceHasDslExit(inst) {
255
- const parsed = parseYaml(readRuntimeYaml(inst));
400
+ return hasDslExitBlock(parseYaml(readRuntimeYaml(inst)));
401
+ }
402
+ /**
403
+ * True iff a PARSED recipe ships a DSL exit block — `exit.dsl_preset`, or `exit.engine: dsl`.
404
+ *
405
+ * Split from {@link instanceHasDslExit} so `senpi validate` can ask the same question of the config
406
+ * it has already parsed, rather than re-reading and re-parsing the file — and rather than growing a
407
+ * second predicate that could quietly disagree with this one about, say, `dsl_preset: true`. Same
408
+ * reason {@link isTruthyPreset} is exported for `runtime-descriptor.ts`.
409
+ *
410
+ * Takes `unknown` because its two callers hold different things: a `parseYaml` result here, and a
411
+ * schema-parsed `RuntimeConfig` in validate. Both are read the same way, and neither is trusted to
412
+ * have the shape — but note their INPUTS are not identical: validate resolves `${ENV}` before
413
+ * parsing (`recipe.ts`), deploy does not, so `exit: { engine: "${EXIT_ENGINE}" }` reads as `dsl`
414
+ * here only after substitution and as the literal token on the deploy path. Validate's reading is
415
+ * the more accurate one (that is what would install); the divergence is narrow and pre-existing,
416
+ * and this is the note that stops the next reader concluding the two can never disagree.
417
+ */
418
+ export function hasDslExitBlock(parsed) {
256
419
  const exit = parsed?.exit;
257
420
  if (exit === null || typeof exit !== "object" || Array.isArray(exit))
258
421
  return false;
@@ -290,6 +453,10 @@ export function isTruthyPreset(value) {
290
453
  * The instances themselves, not their names: both refusals built from this name the re-check
291
454
  * command for each offender, and that command takes a directory the instance carries. A name is not
292
455
  * a path, and re-deriving the instance from its name at the refusal site is a lookup that can fail.
456
+ *
457
+ * `senpi validate` reports the same fault at static depth (`E_VALIDATE_NO_DSL_EXIT`, via
458
+ * {@link hasDslExitBlock} in `validate/package-gates-stage.ts`), so the re-check command these
459
+ * refusals emit agrees with them. Do not add a third reading of this fact.
293
460
  */
294
461
  export function instancesWithoutDslExit(pkg) {
295
462
  return pkg.instances.filter((inst) => !instanceHasDslExit(inst));
@@ -308,23 +475,43 @@ export function instancesWithoutDslExit(pkg) {
308
475
  *
309
476
  * The live-state twin of this is the observe step's all-disabled branch, which reads engine rows
310
477
  * rather than YAML — the runtime API can genuinely disable a scanner after install.
478
+ *
479
+ * `senpi validate` reports the same key at static depth (`E_VALIDATE_SCANNER_ENABLED`, via
480
+ * {@link scannerEnabledEntries}), one finding per offending entry, so an author never first learns
481
+ * about it from the money path.
311
482
  */
312
483
  export function scannersDeclaringEnabled(pkg) {
484
+ return pkg.instances.flatMap((inst) => scannerEnabledEntries(parseYaml(readRuntimeYaml(inst))).map((entry) => ({
485
+ instance: inst.name,
486
+ scanner: entry.scanner,
487
+ value: entry.value,
488
+ runtimeYamlPath: inst.runtimeYamlPath,
489
+ })));
490
+ }
491
+ /**
492
+ * Scanner entries in a PARSED recipe that declare an `enabled` key at all.
493
+ *
494
+ * The instance-free core of {@link scannersDeclaringEnabled}, so validate can ask it of a recipe
495
+ * that has no package around it yet — the mid-authoring case, where the fault is just as real and
496
+ * the author is exactly the person who should hear about it.
497
+ */
498
+ export function scannerEnabledEntries(parsed) {
499
+ const scanners = parsed?.scanners;
500
+ if (!Array.isArray(scanners))
501
+ return [];
313
502
  const found = [];
314
- for (const inst of pkg.instances) {
315
- readScannerEntries(inst).forEach((scanner, index) => {
316
- // Key presence, not truthiness: a bare `enabled:` (null) is the same unsupported key.
317
- if (scanner === null || typeof scanner !== "object" || !("enabled" in scanner))
318
- return;
319
- const name = typeof scanner.name === "string" ? scanner.name : scanner.id;
320
- found.push({
321
- instance: inst.name,
322
- scanner: typeof name === "string" && name.length > 0 ? name : `scanners[${index}]`,
323
- value: scanner.enabled,
324
- runtimeYamlPath: inst.runtimeYamlPath,
325
- });
503
+ scanners.forEach((scanner, index) => {
504
+ // Key presence, not truthiness: a bare `enabled:` (null) is the same unsupported key.
505
+ if (scanner === null || typeof scanner !== "object" || !("enabled" in scanner))
506
+ return;
507
+ const entry = scanner;
508
+ const name = typeof entry.name === "string" ? entry.name : entry.id;
509
+ found.push({
510
+ scanner: typeof name === "string" && name.length > 0 ? name : `scanners[${index}]`,
511
+ index,
512
+ value: entry.enabled,
326
513
  });
327
- }
514
+ });
328
515
  return found;
329
516
  }
330
517
  /**
@@ -334,17 +521,18 @@ export function scannersDeclaringEnabled(pkg) {
334
521
  */
335
522
  export function describeScannerEnabledOffense(entry) {
336
523
  return (`instance "${entry.instance}", scanner "${entry.scanner}": delete the line ` +
337
- `\`${renderEnabledLine(entry.value)}\` from ${entry.runtimeYamlPath}`);
524
+ `\`${renderScannerEnabledLine(entry.value)}\` from ${entry.runtimeYamlPath}`);
338
525
  }
339
- /** The offending line as it appears in the YAML — a bare `enabled:` has no value to echo. */
340
- function renderEnabledLine(value) {
526
+ /**
527
+ * The offending line as it appears in the YAML — a bare `enabled:` has no value to echo.
528
+ *
529
+ * Exported so validate's finding quotes the author's own line with the same rendering deploy's
530
+ * refusal uses. Two surfaces telling someone to delete "the line `enabled: false`" must agree on
531
+ * what that line says, or one of them is describing a line that is not in the file.
532
+ */
533
+ export function renderScannerEnabledLine(value) {
341
534
  return value === null || value === undefined ? "enabled:" : `enabled: ${JSON.stringify(value)}`;
342
535
  }
343
- /** The instance's `scanners:` list, or []. */
344
- function readScannerEntries(inst) {
345
- const parsed = parseYaml(readRuntimeYaml(inst));
346
- return Array.isArray(parsed?.scanners) ? parsed.scanners : [];
347
- }
348
536
  /** True iff any action runs `decision_mode: llm` — those installs need a decision model. */
349
537
  export function runtimeUsesLlmDecisions(runtimeYamlText) {
350
538
  const parsed = parseYaml(runtimeYamlText);
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/deploy/package.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/deploy/package.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,10 @@ export interface InstanceDirCollision {
22
22
  * layer is the one that HAS the manifest and can see the collision, so it refuses here. Fail-closed
23
23
  * on principle and free in practice: of the 103 packages in the shipped catalog, 21 are
24
24
  * multi-instance and none shares a runtime directory.
25
+ *
26
+ * `senpi validate` calls this too, at static depth (`E_VALIDATE_INSTANCE_DIR_COLLISION`), scoped to
27
+ * the collision the validated recipe is IN — reporting a sibling pair the run never looked at would
28
+ * send an author to edit files outside the target.
25
29
  */
26
30
  export declare function collidingInstanceDirs(pkg: DeployPackage): InstanceDirCollision[];
27
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"proof-gate.d.ts","sourceRoot":"","sources":["../../src/deploy/proof-gate.ts"],"names":[],"mappings":"AA6BA,OAAO,EAA8B,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,CAGlE;AAED,mFAAmF;AACnF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,oBAAoB,EAAE,CAQhF;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,oBAAoB,EAAE,EAClC,GAAG,EAAE,aAAa,GACjB,MAAM,CAqCR;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAgED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,iBAAiB,CAwD7F;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAalF"}
1
+ {"version":3,"file":"proof-gate.d.ts","sourceRoot":"","sources":["../../src/deploy/proof-gate.ts"],"names":[],"mappings":"AA6BA,OAAO,EAA8B,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,CAGlE;AAED,mFAAmF;AACnF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,oBAAoB,EAAE,CAQhF;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,oBAAoB,EAAE,EAClC,GAAG,EAAE,aAAa,GACjB,MAAM,CAqCR;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAgED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,iBAAiB,CAwD7F;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAalF"}
@@ -51,6 +51,10 @@ export function checkPackageProof(pkg) {
51
51
  * layer is the one that HAS the manifest and can see the collision, so it refuses here. Fail-closed
52
52
  * on principle and free in practice: of the 103 packages in the shipped catalog, 21 are
53
53
  * multi-instance and none shares a runtime directory.
54
+ *
55
+ * `senpi validate` calls this too, at static depth (`E_VALIDATE_INSTANCE_DIR_COLLISION`), scoped to
56
+ * the collision the validated recipe is IN — reporting a sibling pair the run never looked at would
57
+ * send an author to edit files outside the target.
54
58
  */
55
59
  export function collidingInstanceDirs(pkg) {
56
60
  const byDir = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"proof-gate.js","sourceRoot":"","sources":["../../src/deploy/proof-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proof-gate.js","sourceRoot":"","sources":["../../src/deploy/proof-gate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recheck-commands.d.ts","sourceRoot":"","sources":["../../src/deploy/recheck-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAG3F;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,yGAC2E,CAAC"}
1
+ {"version":3,"file":"recheck-commands.d.ts","sourceRoot":"","sources":["../../src/deploy/recheck-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqBH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAG3F;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,yGAC2E,CAAC"}
@@ -15,6 +15,24 @@
15
15
  * would be imported back by the other — the same cycle constraint that gave `error-text.ts` a
16
16
  * module of its own.
17
17
  */
18
+ /**
19
+ * A path as a single POSIX shell word.
20
+ *
21
+ * Wrapping in quotes is not the same as quoting. A directory is package-controlled input — the
22
+ * manifest chooses it, an instance's `runtime:` can point anywhere, and a directory name may
23
+ * legally contain `'` — so a bare `'${dir}'` lets the path CLOSE the quote and everything after it
24
+ * parses as further commands. These strings are printed under "fix" as something the reader pastes,
25
+ * which makes the refusal itself the delivery vehicle: the operator runs the line we told them to
26
+ * run, on the box holding the trading funds.
27
+ *
28
+ * The rule is the standard one — end the quote, emit an escaped `'`, reopen — so `a'b` becomes
29
+ * `'a'\''b'`. Nothing inside single quotes is special to the shell, so no other character needs a
30
+ * case. Every path this module emits goes through it; the wrapping quotes stay because a real
31
+ * workspace path has spaces in it, which is what they were always for.
32
+ */
33
+ function shellQuote(value) {
34
+ return `'${value.split("'").join(`'\\''`)}'`;
35
+ }
18
36
  /**
19
37
  * `openclaw senpi validate '<dir>'` — the route that records a proof.
20
38
  *
@@ -25,15 +43,15 @@
25
43
  * gate exists to survive), and never a `<placeholder>`, which an agent pastes literally.
26
44
  */
27
45
  export function validateCommand(dir) {
28
- return `openclaw senpi validate '${dir}'`;
46
+ return `openclaw senpi validate ${shellQuote(dir)}`;
29
47
  }
30
48
  /** The skills package validator: the author-side checks over a package, and no proof. */
31
49
  export function deployPyValidateCommand(packageDir) {
32
- return `python3 senpi-strategy-ops/scripts/deploy.py validate '${packageDir}'`;
50
+ return `python3 senpi-strategy-ops/scripts/deploy.py validate ${shellQuote(packageDir)}`;
33
51
  }
34
52
  /** The skills universe validator: the live-instrument half of the checks, and no proof. */
35
53
  export function validateUniversePyCommand(packageDir) {
36
- return `python3 senpi-strategy-ops/scripts/validate_universe.py '${packageDir}'`;
54
+ return `python3 senpi-strategy-ops/scripts/validate_universe.py ${shellQuote(packageDir)}`;
37
55
  }
38
56
  /**
39
57
  * Both routes as an indented block, one command per line — the form every refusal below the "fix"
@@ -1 +1 @@
1
- {"version":3,"file":"recheck-commands.js","sourceRoot":"","sources":["../../src/deploy/recheck-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,4BAA4B,GAAG,GAAG,CAAC;AAC5C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAO,0DAA0D,UAAU,GAAG,CAAC;AACjF,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,OAAO,4DAA4D,UAAU,GAAG,CAAC;AACnF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,YAA+B,EAAE,aAAqB;IACjF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,KAAK,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,sGAAsG,CAAC"}
1
+ {"version":3,"file":"recheck-commands.js","sourceRoot":"","sources":["../../src/deploy/recheck-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;GAcG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,2BAA2B,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAO,yDAAyD,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,OAAO,2DAA2D,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,YAA+B,EAAE,aAAqB;IACjF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,KAAK,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,sGAAsG,CAAC"}
@@ -70,6 +70,8 @@ export interface DeployGatewayContext {
70
70
  getScannerRows(runtimeId: string): Promise<ScannerRowLite[] | null>;
71
71
  /** H4: does this runtime id have a LIVE handle (not merely a registry row)? */
72
72
  runtimeIsLive(id: string): Promise<boolean>;
73
+ /** = the gateway's in-process install fence; see `installsInFlight` in index.ts. */
74
+ installPendingOnWallet(wallet: string): Promise<boolean>;
73
75
  logger: {
74
76
  info(line: string): void;
75
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/deploy/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/deploy/register.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@ import path from "node:path";
5
5
  import { withSpan } from "../telemetry/tracing.js";
6
6
  import { recordDeployRollback, recordDeployStep } from "../telemetry/metrics.js";
7
7
  import { isClosing, isDead } from "../senpi/strategy-status.js";
8
- import { DEFAULT_MAX_WAIT_SEC, DEFAULT_TICK_WAIT_SEC, isWaitInRange, jobCapMs, MAX_WAIT_SEC, MIN_WAIT_SEC, } from "./deadlines.js";
9
- import { extractTaxonomyCode } from "./taxonomy.js";
8
+ import { DEFAULT_MAX_WAIT_SEC, DEFAULT_TICK_WAIT_SEC, isWaitInRange, jobCapMs, MAX_WAIT_SEC, MIN_WAIT_SEC, withInstallDeadline, } from "./deadlines.js";
9
+ import { extractTaxonomyCode, firstIndeterminateCode } from "./taxonomy.js";
10
10
  import { runDeploy } from "./orchestrator.js";
11
11
  import { MCP_CALL_TIMEOUT_MS } from "./job.js";
12
12
  /** The real clock for every orchestrator poll loop (create-ACTIVE and observe-tick alike). */
@@ -335,16 +335,24 @@ function buildDeployDeps(ctx, client, job) {
335
335
  createCustomStrategy: (params) => client.createCustomStrategy(params, callDeadline()),
336
336
  getPortfolio: () => client.getPortfolio({ forceFetch: true, ...callDeadline() }),
337
337
  listLiveInstruments: () => client.listInstrumentNames(callDeadline()),
338
- installRuntime: (params) => ctx.installRuntime({
338
+ // The one dep that is NOT an MCP call: `installRuntimeCore` is in-process work (state hydrate,
339
+ // runtime construction, scanner children) and takes no signal, so there is nothing to abort.
340
+ // What is bounded is the WAIT — without it a wedged install outlived the job's own accounting:
341
+ // the watchdog force-terminated, the single-flight slot came back, and a re-run reinstalled on
342
+ // the same wallet while the first install was still in flight. The wait ends here; the wallet
343
+ // stays fenced for as long as the install actually runs (`index.ts` installsInFlight), and the
344
+ // unknown outcome is reported rather than unwound (`E_INSTALL_INDETERMINATE`).
345
+ installRuntime: (params) => withInstallDeadline(ctx.installRuntime({
339
346
  runtimeYamlContent: params.runtimeYamlContent,
340
347
  runtimeYamlDir: params.runtimeYamlDir,
341
348
  id: params.id,
342
- }),
349
+ })),
343
350
  deleteRuntime: (id) => ctx.deleteRuntime(id),
344
351
  registryFindByWallet: (wallet) => ctx.registryFindByWallet(wallet),
345
352
  registryFindById: (id) => ctx.registryFindById(id),
346
353
  getScannerRows: (runtimeId) => ctx.getScannerRows(runtimeId),
347
354
  runtimeIsLive: (id) => ctx.runtimeIsLive(id),
355
+ installPendingOnWallet: (wallet) => ctx.installPendingOnWallet(wallet),
348
356
  // D-6 rollback surfaces, both deadline-bounded. The flat check especially: it runs INSIDE the
349
357
  // rollback, so a hung one costs the `[E_ROLLBACK_INCOMPLETE]` report itself — the job cap would
350
358
  // force-terminate with a generic `instances: []` terminal and the stranded funded wallet would
@@ -580,8 +588,8 @@ async function startBody(ctx, params, respond, refuse, span) {
580
588
  // not resume as a silent adoption. `funded` is still re-read live on this run.
581
589
  const priorRequested = ctx.controller.priorRequestedFunding(pkg.id);
582
590
  // D-5: the job's wall-clock cap. Sized to what the run can legitimately spend — every instance
583
- // may burn a full ACTIVE poll plus a full tick-wait — plus 300s of headroom for the install and
584
- // the un-timed steps. Past it the watchdog stops the run and takes the slot back.
591
+ // may burn a full ACTIVE poll, a full tick-wait, and one bounded install — plus 300s of headroom
592
+ // for the un-timed steps. Past it the watchdog stops the run and takes the slot back.
585
593
  const capMs = jobCapMs(maxWaitSec, tickWaitSec, pkg.instances.length);
586
594
  // L5: the package attribute is the BASENAME, never the absolute path — a user's home directory
587
595
  // is not a span dimension, and the basename is what identifies the package anyway.
@@ -617,6 +625,15 @@ async function startBody(ctx, params, respond, refuse, span) {
617
625
  const code = extractTaxonomyCode(firstRefusal?.detail);
618
626
  if (code)
619
627
  span.setAttribute("senpi.deploy.refusal.code", code);
628
+ // Its OWN attribute, never `refusal.code`: this outcome rides a `failed` step, not a
629
+ // refusal, and folding it into the refusal dimension would corrupt the one signal the
630
+ // CLI's exit-code contract is read from. It needs a signal of its own because the deploy
631
+ // deliberately does NOT roll back here — so `senpi.deploy.rollback.count`, until now the
632
+ // only fleet-level tell that a deploy left a funded wallet behind, stays silent — and
633
+ // `outcome: failed` alone cannot tell a stranded wallet from an ENOSPC.
634
+ const indeterminate = firstIndeterminateCode(report);
635
+ if (indeterminate)
636
+ span.setAttribute("senpi.deploy.indeterminate.code", indeterminate);
620
637
  // The SOFT calculated-minimum tier rides ATTRIBUTES, deliberately never
621
638
  // `senpi.deploy.refusal.code` and never a span error: it warned, the deploy proceeded, and
622
639
  // a dashboard that counted it as a refusal would report healthy deploys as failures. What