opensip-cli 0.1.12 → 0.1.13

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 (160) hide show
  1. package/dist/bootstrap/artifact-seams.d.ts +7 -0
  2. package/dist/bootstrap/artifact-seams.d.ts.map +1 -0
  3. package/dist/bootstrap/artifact-seams.js +53 -0
  4. package/dist/bootstrap/artifact-seams.js.map +1 -0
  5. package/dist/bootstrap/atomic-artifact-write.d.ts +19 -0
  6. package/dist/bootstrap/atomic-artifact-write.d.ts.map +1 -0
  7. package/dist/bootstrap/atomic-artifact-write.js +68 -0
  8. package/dist/bootstrap/atomic-artifact-write.js.map +1 -0
  9. package/dist/bootstrap/baseline-seams.d.ts.map +1 -1
  10. package/dist/bootstrap/baseline-seams.js +79 -27
  11. package/dist/bootstrap/baseline-seams.js.map +1 -1
  12. package/dist/bootstrap/build-external-worker-child-env.d.ts +25 -0
  13. package/dist/bootstrap/build-external-worker-child-env.d.ts.map +1 -0
  14. package/dist/bootstrap/build-external-worker-child-env.js +71 -0
  15. package/dist/bootstrap/build-external-worker-child-env.js.map +1 -0
  16. package/dist/bootstrap/build-per-run-scope.js +1 -1
  17. package/dist/bootstrap/build-per-run-scope.js.map +1 -1
  18. package/dist/bootstrap/config-and-capabilities.d.ts.map +1 -1
  19. package/dist/bootstrap/config-and-capabilities.js +12 -94
  20. package/dist/bootstrap/config-and-capabilities.js.map +1 -1
  21. package/dist/bootstrap/config-declarations.d.ts +23 -0
  22. package/dist/bootstrap/config-declarations.d.ts.map +1 -0
  23. package/dist/bootstrap/config-declarations.js +73 -0
  24. package/dist/bootstrap/config-declarations.js.map +1 -0
  25. package/dist/bootstrap/deliver-envelope.d.ts +4 -1
  26. package/dist/bootstrap/deliver-envelope.d.ts.map +1 -1
  27. package/dist/bootstrap/deliver-envelope.js +12 -5
  28. package/dist/bootstrap/deliver-envelope.js.map +1 -1
  29. package/dist/bootstrap/dispatch-fork-core.d.ts +1 -1
  30. package/dist/bootstrap/dispatch-fork-core.d.ts.map +1 -1
  31. package/dist/bootstrap/dispatch-fork-core.js +73 -75
  32. package/dist/bootstrap/dispatch-fork-core.js.map +1 -1
  33. package/dist/bootstrap/dispatch-host-rpc-handler.d.ts.map +1 -1
  34. package/dist/bootstrap/dispatch-host-rpc-handler.js +4 -0
  35. package/dist/bootstrap/dispatch-host-rpc-handler.js.map +1 -1
  36. package/dist/bootstrap/dispatch-replay-result.d.ts.map +1 -1
  37. package/dist/bootstrap/dispatch-replay-result.js +3 -0
  38. package/dist/bootstrap/dispatch-replay-result.js.map +1 -1
  39. package/dist/bootstrap/load-tool-capabilities.d.ts.map +1 -1
  40. package/dist/bootstrap/load-tool-capabilities.js +34 -3
  41. package/dist/bootstrap/load-tool-capabilities.js.map +1 -1
  42. package/dist/bootstrap/register-tools-discovery.d.ts.map +1 -1
  43. package/dist/bootstrap/register-tools-discovery.js +2 -0
  44. package/dist/bootstrap/register-tools-discovery.js.map +1 -1
  45. package/dist/bootstrap/report-failure.d.ts +28 -0
  46. package/dist/bootstrap/report-failure.d.ts.map +1 -0
  47. package/dist/bootstrap/report-failure.js +135 -0
  48. package/dist/bootstrap/report-failure.js.map +1 -0
  49. package/dist/bootstrap/scope-access.d.ts +1 -1
  50. package/dist/bootstrap/scope-access.d.ts.map +1 -1
  51. package/dist/bootstrap/scope-access.js +7 -2
  52. package/dist/bootstrap/scope-access.js.map +1 -1
  53. package/dist/bootstrap/state-lock-policy.d.ts +19 -0
  54. package/dist/bootstrap/state-lock-policy.d.ts.map +1 -0
  55. package/dist/bootstrap/state-lock-policy.js +86 -0
  56. package/dist/bootstrap/state-lock-policy.js.map +1 -0
  57. package/dist/bootstrap/synthesize-external-tool.d.ts.map +1 -1
  58. package/dist/bootstrap/synthesize-external-tool.js +11 -1
  59. package/dist/bootstrap/synthesize-external-tool.js.map +1 -1
  60. package/dist/bootstrap/tool-command-dispatch-types.d.ts +23 -2
  61. package/dist/bootstrap/tool-command-dispatch-types.d.ts.map +1 -1
  62. package/dist/bootstrap/tool-command-worker-context.d.ts +4 -3
  63. package/dist/bootstrap/tool-command-worker-context.d.ts.map +1 -1
  64. package/dist/bootstrap/tool-command-worker-context.js +28 -4
  65. package/dist/bootstrap/tool-command-worker-context.js.map +1 -1
  66. package/dist/bootstrap/tool-command-worker-entry.d.ts.map +1 -1
  67. package/dist/bootstrap/tool-command-worker-entry.js +38 -31
  68. package/dist/bootstrap/tool-command-worker-entry.js.map +1 -1
  69. package/dist/bootstrap/tool-command-worker-result.d.ts +25 -0
  70. package/dist/bootstrap/tool-command-worker-result.d.ts.map +1 -0
  71. package/dist/bootstrap/tool-command-worker-result.js +60 -0
  72. package/dist/bootstrap/tool-command-worker-result.js.map +1 -0
  73. package/dist/bootstrap/tool-trust.d.ts +12 -0
  74. package/dist/bootstrap/tool-trust.d.ts.map +1 -1
  75. package/dist/bootstrap/tool-trust.js +29 -5
  76. package/dist/bootstrap/tool-trust.js.map +1 -1
  77. package/dist/cli-context.d.ts.map +1 -1
  78. package/dist/cli-context.js +22 -3
  79. package/dist/cli-context.js.map +1 -1
  80. package/dist/commands/agent-catalog.d.ts +8 -7
  81. package/dist/commands/agent-catalog.d.ts.map +1 -1
  82. package/dist/commands/agent-catalog.js +108 -60
  83. package/dist/commands/agent-catalog.js.map +1 -1
  84. package/dist/commands/config.d.ts +22 -0
  85. package/dist/commands/config.d.ts.map +1 -0
  86. package/dist/commands/config.js +135 -0
  87. package/dist/commands/config.js.map +1 -0
  88. package/dist/commands/host-command-specs.d.ts.map +1 -1
  89. package/dist/commands/host-command-specs.js +8 -4
  90. package/dist/commands/host-command-specs.js.map +1 -1
  91. package/dist/commands/host-subcommand-config.d.ts +7 -0
  92. package/dist/commands/host-subcommand-config.d.ts.map +1 -0
  93. package/dist/commands/host-subcommand-config.js +75 -0
  94. package/dist/commands/host-subcommand-config.js.map +1 -0
  95. package/dist/commands/host-subcommand-groups.d.ts.map +1 -1
  96. package/dist/commands/host-subcommand-groups.js +7 -1
  97. package/dist/commands/host-subcommand-groups.js.map +1 -1
  98. package/dist/commands/host-subcommand-sessions.d.ts.map +1 -1
  99. package/dist/commands/host-subcommand-sessions.js +3 -3
  100. package/dist/commands/host-subcommand-sessions.js.map +1 -1
  101. package/dist/commands/init/language-detection.d.ts.map +1 -1
  102. package/dist/commands/init/language-detection.js +3 -2
  103. package/dist/commands/init/language-detection.js.map +1 -1
  104. package/dist/commands/init.d.ts +5 -4
  105. package/dist/commands/init.d.ts.map +1 -1
  106. package/dist/commands/init.js +5 -4
  107. package/dist/commands/init.js.map +1 -1
  108. package/dist/commands/mount-command-spec.d.ts +3 -1
  109. package/dist/commands/mount-command-spec.d.ts.map +1 -1
  110. package/dist/commands/mount-command-spec.js +27 -4
  111. package/dist/commands/mount-command-spec.js.map +1 -1
  112. package/dist/commands/shared.d.ts +5 -1
  113. package/dist/commands/shared.d.ts.map +1 -1
  114. package/dist/commands/tools/create-template-writer.d.ts +16 -0
  115. package/dist/commands/tools/create-template-writer.d.ts.map +1 -0
  116. package/dist/commands/tools/create-template-writer.js +39 -0
  117. package/dist/commands/tools/create-template-writer.js.map +1 -0
  118. package/dist/commands/tools/create-templates.d.ts +19 -0
  119. package/dist/commands/tools/create-templates.d.ts.map +1 -0
  120. package/dist/commands/tools/create-templates.js +228 -0
  121. package/dist/commands/tools/create-templates.js.map +1 -0
  122. package/dist/commands/tools/create.d.ts +4 -1
  123. package/dist/commands/tools/create.d.ts.map +1 -1
  124. package/dist/commands/tools/create.js +35 -50
  125. package/dist/commands/tools/create.js.map +1 -1
  126. package/dist/commands/tools/index.d.ts.map +1 -1
  127. package/dist/commands/tools/index.js +8 -0
  128. package/dist/commands/tools/index.js.map +1 -1
  129. package/dist/commands/tools/install.d.ts.map +1 -1
  130. package/dist/commands/tools/install.js +14 -1
  131. package/dist/commands/tools/install.js.map +1 -1
  132. package/dist/commands/tools/validate.d.ts.map +1 -1
  133. package/dist/commands/tools/validate.js +46 -5
  134. package/dist/commands/tools/validate.js.map +1 -1
  135. package/dist/env/host-env-specs.d.ts.map +1 -1
  136. package/dist/env/host-env-specs.js +57 -4
  137. package/dist/env/host-env-specs.js.map +1 -1
  138. package/dist/error-handler.d.ts.map +1 -1
  139. package/dist/error-handler.js +28 -6
  140. package/dist/error-handler.js.map +1 -1
  141. package/dist/index.js +2 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/report-compose.d.ts.map +1 -1
  144. package/dist/report-compose.js +21 -3
  145. package/dist/report-compose.js.map +1 -1
  146. package/dist/ui/result-to-view.d.ts.map +1 -1
  147. package/dist/ui/result-to-view.js +10 -1
  148. package/dist/ui/result-to-view.js.map +1 -1
  149. package/dist/ui/views/misc-views.d.ts +13 -0
  150. package/dist/ui/views/misc-views.d.ts.map +1 -1
  151. package/dist/ui/views/misc-views.js +53 -1
  152. package/dist/ui/views/misc-views.js.map +1 -1
  153. package/dist/ui/views/tools-views.d.ts.map +1 -1
  154. package/dist/ui/views/tools-views.js +8 -7
  155. package/dist/ui/views/tools-views.js.map +1 -1
  156. package/dist/update-notifier.d.ts +3 -0
  157. package/dist/update-notifier.d.ts.map +1 -1
  158. package/dist/update-notifier.js +3 -0
  159. package/dist/update-notifier.js.map +1 -1
  160. package/package.json +33 -33
@@ -26,84 +26,10 @@
26
26
  * config namespace (see `docs/public/10-concepts/03-modular-monolith.md`); at
27
27
  * run time they read the validated namespace off `scope.toolConfig`.
28
28
  */
29
- import { analyzeNamespaceClaims, composeConfigSchema, decorateToolConfigDeclarationsWithGateKeys, hostConfigDeclarations, jsonSchemaObjectToZod, resolveConfig, validateConfigDocument, } from '@opensip-cli/config';
29
+ import { analyzeNamespaceClaims, composeConfigSchema, partitionUnclaimedNamespaces, resolveConfig, validateConfigDocument, } from '@opensip-cli/config';
30
30
  import { ConfigurationError, isPlainRecord, logger, readYamlFileOrThrow, resolveToolHooks, registerCapabilityDomainsFromManifest, } from '@opensip-cli/core';
31
- import { provenanceSourceFor, shouldRunHookInHost } from './tool-provenance.js';
32
- /**
33
- * Find the manifest config descriptor for a tool, matching by stable id then by
34
- * the manifest's human id. Returns `undefined` when no admitted manifest for the
35
- * tool declares a `config` descriptor.
36
- */
37
- function manifestDescriptorFor(tool, manifests) {
38
- const manifest = manifests.find((m) => m.stableId !== undefined && m.stableId === tool.metadata.id) ??
39
- manifests.find((m) => m.id === tool.metadata.name);
40
- return manifest?.config;
41
- }
42
- /**
43
- * Collect the contributed config declarations from the registered tools —
44
- * provenance-aware (ADR-0054 M4-E Config two-pass).
45
- *
46
- * - **Bundled** (trusted computing base) → fold the tool's runtime Zod
47
- * `config` declaration host-side, exactly as before. A bundled tool's
48
- * `config` slot is the kernel-side `ToolConfigContribution` carrier,
49
- * structurally a `ToolConfigDeclaration` (schema `unknown` at the kernel
50
- * boundary, a Zod schema at the config layer), so narrowing it here — the
51
- * composition root, which DOES import `@opensip-cli/config` — is sound.
52
- * - **External** (installed / project-local / user-global) → NEVER import the
53
- * tool's Zod (executable code — the ADR-0054 load-time hole). Instead derive
54
- * a COARSE declaration from the tool's serializable manifest descriptor
55
- * ({@link ToolConfigManifestDescriptor}); the host validates the namespace's
56
- * top-level shape as pure data. An external tool that ships NO descriptor
57
- * contributes no declaration — its namespace (if present) passes through the
58
- * document catchall (rule-2) and ALL of its validation defers to the worker
59
- * deep pass.
60
- */
61
- function collectDeclarations(tools, provenance, manifests) {
62
- const declarations = [];
63
- for (const tool of tools.list()) {
64
- if (provenanceSourceFor(tool, provenance) === 'bundled') {
65
- const config = resolveToolHooks(tool).config;
66
- if (config !== undefined) {
67
- declarations.push(config);
68
- }
69
- continue;
70
- }
71
- // External: coarse, manifest-descriptor-derived schema only — no Zod import.
72
- const descriptor = manifestDescriptorFor(tool, manifests);
73
- if (descriptor !== undefined) {
74
- declarations.push({
75
- namespace: descriptor.namespace,
76
- schema: jsonSchemaObjectToZod(descriptor.schema),
77
- });
78
- }
79
- // No descriptor → defer entirely to the worker deep pass (catchall passes
80
- // any present namespace block through; do NOT host-import its Zod to "help").
81
- }
82
- return declarations;
83
- }
84
- function addPluginConfigKey(keys, key, kind) {
85
- if (key === undefined)
86
- return;
87
- const existing = keys.get(key);
88
- if (existing !== undefined && existing !== kind) {
89
- throw new ConfigurationError(`Plugin config key '${key}' is declared with conflicting value kinds (${existing}, ${kind}).`, { code: 'CONFIGURATION_ERROR', namespace: 'plugins' });
90
- }
91
- keys.set(key, kind);
92
- }
93
- function collectPluginConfigKeys(manifests) {
94
- const keys = new Map();
95
- for (const manifest of manifests) {
96
- for (const capability of manifest.capabilities ?? []) {
97
- const configKeys = capability.discovery?.configKeys;
98
- if (configKeys === undefined)
99
- continue;
100
- addPluginConfigKey(keys, configKeys.packages, 'packages');
101
- addPluginConfigKey(keys, configKeys.autoDiscover, 'autoDiscover');
102
- addPluginConfigKey(keys, configKeys.scopes, 'scopes');
103
- }
104
- }
105
- return [...keys.entries()].map(([key, kind]) => ({ key, kind }));
106
- }
31
+ import { buildConfigDeclarations } from './config-declarations.js';
32
+ import { shouldRunHookInHost } from './tool-provenance.js';
107
33
  /**
108
34
  * Project the validated document's per-namespace blocks into the `file`
109
35
  * precedence source (`namespace -> { key -> value }`). Only the declared
@@ -146,25 +72,18 @@ export function composeAndValidateToolConfig(args) {
146
72
  // host-side (trusted), external tools validate from their serializable
147
73
  // manifest descriptor (coarse, NO Zod import); the deep Zod pass runs in the
148
74
  // worker.
149
- const toolDeclarations = decorateToolConfigDeclarationsWithGateKeys(collectDeclarations(tools, provenance, manifests));
75
+ const { declarations, hasToolNamespaces } = buildConfigDeclarations({
76
+ tools,
77
+ manifests,
78
+ provenance,
79
+ });
150
80
  // A run with no tools that declare config (e.g. a project-agnostic context)
151
81
  // carries no toolConfig — tools fall back to their in-tool defaults. The host
152
82
  // document-level blocks (cli/dashboard/schemaVersion) only need composing when
153
83
  // there is a tool dispatch to validate the document for; the real CLI always
154
84
  // registers fit/graph/sim, so they are always composed in practice.
155
- if (toolDeclarations.length === 0)
85
+ if (!hasToolNamespaces)
156
86
  return { config: undefined, document: {} };
157
- // Compose the host document-level declarations (cli/dashboard/schemaVersion,
158
- // and from Phase 1 the targeting blocks) BESIDE the decorated tool
159
- // declarations, so the whole document — not just the tool namespaces —
160
- // validates STRICT through the one composed schema (ADR-0023, the launch seam).
161
- // Gate keys are added only to tool namespaces; host blocks stay strict.
162
- const declarations = [
163
- ...hostConfigDeclarations({
164
- pluginConfigKeys: collectPluginConfigKeys(manifests),
165
- }),
166
- ...toolDeclarations,
167
- ];
168
87
  // When a configPath was resolved by the project context (i.e. a real
169
88
  // opensip-cli.config.yml or a package.json pointer), read it *strictly*.
170
89
  // Malformed YAML or unreadable file must fail before any dispatch (a
@@ -172,11 +91,10 @@ export function composeAndValidateToolConfig(args) {
172
91
  // When no configPath, fall back to defaults only (permissive discovery
173
92
  // paths elsewhere still use the non-throwing reader).
174
93
  const raw = configPath === undefined ? {} : readYamlFileOrThrow(configPath, { loader: 'project-config' });
175
- const document = isPlainRecord(raw) ? raw : {};
176
94
  const schema = composeConfigSchema(declarations);
177
95
  // STRICT gate: a typo in any tool namespace throws ConfigurationError here,
178
96
  // before dispatch. The CLI error boundary maps it to CONFIGURATION_ERROR.
179
- const validated = validateConfigDocument(schema, document);
97
+ const validated = validateConfigDocument(schema, raw);
180
98
  // ADR-0043: the composer TOLERATES unclaimed top-level namespaces (the
181
99
  // uninstalled-tool forward-compat contract) — but never silently. Two cases:
182
100
  // - the namespace equals a LOADED tool's id → that tool declares no
@@ -215,13 +133,13 @@ function reportUnclaimedNamespaces(args) {
215
133
  if (report.unclaimed.length === 0)
216
134
  return;
217
135
  const loadedToolNames = new Set(args.tools.list().map((t) => t.metadata.name ?? t.metadata.id));
218
- const toolBugs = report.unclaimed.filter((u) => loadedToolNames.has(u.namespace));
136
+ const { toolBugs, benign } = partitionUnclaimedNamespaces(report, loadedToolNames);
219
137
  if (toolBugs.length > 0) {
220
138
  const names = toolBugs.map((u) => `'${u.namespace}'`).join(', ');
221
139
  throw new ConfigurationError(`Config declares ${names} but the loaded tool(s) of the same id contribute no Tool.config — ` +
222
140
  `the block can never apply. Remove the block or fix the tool's config contribution. (ADR-0043)`, { code: 'CONFIGURATION_ERROR' });
223
141
  }
224
- for (const u of report.unclaimed) {
142
+ for (const u of benign) {
225
143
  const didYouMean = u.suggestion === undefined ? '' : ` — did you mean '${u.suggestion}:'?`;
226
144
  logger.warn({
227
145
  evt: 'cli.config.unclaimed_namespace',
@@ -1 +1 @@
1
- {"version":3,"file":"config-and-capabilities.js","sourceRoot":"","sources":["../../src/bootstrap/config-and-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-and-capabilities.js","sourceRoot":"","sources":["../../src/bootstrap/config-and-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * config-declarations — shared config declaration assembly for the dispatcher
3
+ * and `opensip config validate|schema` operator commands.
4
+ *
5
+ * Extracted from `config-and-capabilities.ts` so schema composition uses the
6
+ * same declaration set without duplicating provenance/manifest folding logic.
7
+ */
8
+ import { type ToolConfigDeclaration } from '@opensip-cli/config';
9
+ import { type ToolPluginManifest, type ToolProvenance, type ToolRegistry } from '@opensip-cli/core';
10
+ export interface ConfigDeclarationBundle {
11
+ readonly declarations: readonly ToolConfigDeclaration[];
12
+ /** True when at least one registered tool contributed a config namespace. */
13
+ readonly hasToolNamespaces: boolean;
14
+ }
15
+ /**
16
+ * Build the ordered declaration array the dispatcher and config commands use.
17
+ */
18
+ export declare function buildConfigDeclarations(args: {
19
+ readonly tools: ToolRegistry;
20
+ readonly manifests?: readonly ToolPluginManifest[];
21
+ readonly provenance?: readonly ToolProvenance[];
22
+ }): ConfigDeclarationBundle;
23
+ //# sourceMappingURL=config-declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-declarations.d.ts","sourceRoot":"","sources":["../../src/bootstrap/config-declarations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAuE3B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxD,6EAA6E;IAC7E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACjD,GAAG,uBAAuB,CAY1B"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * config-declarations — shared config declaration assembly for the dispatcher
3
+ * and `opensip config validate|schema` operator commands.
4
+ *
5
+ * Extracted from `config-and-capabilities.ts` so schema composition uses the
6
+ * same declaration set without duplicating provenance/manifest folding logic.
7
+ */
8
+ import { decorateToolConfigDeclarationsWithGateKeys, hostConfigDeclarations, jsonSchemaObjectToZod, } from '@opensip-cli/config';
9
+ import { ConfigurationError, resolveToolHooks, } from '@opensip-cli/core';
10
+ import { provenanceSourceFor } from './tool-provenance.js';
11
+ function manifestDescriptorFor(tool, manifests) {
12
+ const manifest = manifests.find((m) => m.stableId !== undefined && m.stableId === tool.metadata.id) ??
13
+ manifests.find((m) => m.id === tool.metadata.name);
14
+ return manifest?.config;
15
+ }
16
+ function collectDeclarations(tools, provenance, manifests) {
17
+ const declarations = [];
18
+ for (const tool of tools.list()) {
19
+ if (provenanceSourceFor(tool, provenance) === 'bundled') {
20
+ const config = resolveToolHooks(tool).config;
21
+ if (config !== undefined) {
22
+ declarations.push(config);
23
+ }
24
+ continue;
25
+ }
26
+ const descriptor = manifestDescriptorFor(tool, manifests);
27
+ if (descriptor !== undefined) {
28
+ declarations.push({
29
+ namespace: descriptor.namespace,
30
+ schema: jsonSchemaObjectToZod(descriptor.schema),
31
+ });
32
+ }
33
+ }
34
+ return declarations;
35
+ }
36
+ function addPluginConfigKey(keys, key, kind) {
37
+ if (key === undefined)
38
+ return;
39
+ const existing = keys.get(key);
40
+ if (existing !== undefined && existing !== kind) {
41
+ throw new ConfigurationError(`Plugin config key '${key}' is declared with conflicting value kinds (${existing}, ${kind}).`, { code: 'CONFIGURATION_ERROR', namespace: 'plugins' });
42
+ }
43
+ keys.set(key, kind);
44
+ }
45
+ function collectPluginConfigKeys(manifests) {
46
+ const keys = new Map();
47
+ for (const manifest of manifests) {
48
+ for (const capability of manifest.capabilities ?? []) {
49
+ const configKeys = capability.discovery?.configKeys;
50
+ if (configKeys === undefined)
51
+ continue;
52
+ addPluginConfigKey(keys, configKeys.packages, 'packages');
53
+ addPluginConfigKey(keys, configKeys.autoDiscover, 'autoDiscover');
54
+ addPluginConfigKey(keys, configKeys.scopes, 'scopes');
55
+ }
56
+ }
57
+ return [...keys.entries()].map(([key, kind]) => ({ key, kind }));
58
+ }
59
+ /**
60
+ * Build the ordered declaration array the dispatcher and config commands use.
61
+ */
62
+ export function buildConfigDeclarations(args) {
63
+ const { tools, manifests = [], provenance = [] } = args;
64
+ const toolDeclarations = decorateToolConfigDeclarationsWithGateKeys(collectDeclarations(tools, provenance, manifests));
65
+ const declarations = [
66
+ ...hostConfigDeclarations({
67
+ pluginConfigKeys: collectPluginConfigKeys(manifests),
68
+ }),
69
+ ...toolDeclarations,
70
+ ];
71
+ return { declarations, hasToolNamespaces: toolDeclarations.length > 0 };
72
+ }
73
+ //# sourceMappingURL=config-declarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-declarations.js","sourceRoot":"","sources":["../../src/bootstrap/config-declarations.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@
24
24
  * engines return envelopes, and the composition root owns formatting,
25
25
  * delivery, and report-upload exit-code policy.
26
26
  */
27
+ import type { ArtifactWriteContext } from './atomic-artifact-write.js';
27
28
  import type { SignalEnvelope } from '@opensip-cli/contracts';
28
29
  import type { Logger, RepoIdentity, SignalBatch, SignalDeliveryResult } from '@opensip-cli/core';
29
30
  /** Options the root supplies when delivering a tool's envelope. */
@@ -83,5 +84,7 @@ export declare function deliverEnvelope(envelope: SignalEnvelope, opts: DeliverE
83
84
  * `@opensip-cli/output` itself. The formatter is pure; this function owns
84
85
  * the effect (fs write).
85
86
  */
86
- export declare function writeEnvelopeSarif(envelope: SignalEnvelope, path: string): Promise<void>;
87
+ export declare function writeEnvelopeSarif(envelope: SignalEnvelope, path: string, artifactCtx?: Partial<ArtifactWriteContext> & {
88
+ readonly logger?: ArtifactWriteContext['logger'];
89
+ }): Promise<void>;
87
90
  //# sourceMappingURL=deliver-envelope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deliver-envelope.d.ts","sourceRoot":"","sources":["../../src/bootstrap/deliver-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIjG,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,CAS/F;AAmED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,OAAO,GACjB,MAAM,GAAG,SAAS,CAMpB;AAyBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CA2EhC;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9F"}
1
+ {"version":3,"file":"deliver-envelope.d.ts","sourceRoot":"","sources":["../../src/bootstrap/deliver-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAcH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIjG,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,CAS/F;AAmED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,OAAO,GACjB,MAAM,GAAG,SAAS,CAMpB;AAyBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CA2EhC;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;CAClD,GACA,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -24,11 +24,11 @@
24
24
  * engines return envelopes, and the composition root owns formatting,
25
25
  * delivery, and report-upload exit-code policy.
26
26
  */
27
- import { mkdir, writeFile } from 'node:fs/promises';
28
- import { dirname } from 'node:path';
29
27
  import { EXIT_CODES } from '@opensip-cli/contracts';
30
28
  import { buildSignalBatch, currentScope, logger as defaultLogger } from '@opensip-cli/core';
31
29
  import { formatSignalSarif, postChunked, resolveRepoIdentity, } from '@opensip-cli/output';
30
+ import { writeArtifactAtomically } from './atomic-artifact-write.js';
31
+ import { resolveStateLockPolicy } from './state-lock-policy.js';
32
32
  const MODULE_TAG = 'cli:bootstrap';
33
33
  /**
34
34
  * Map a {@link SignalEnvelope} to the cloud {@link SignalBatch} wire shape:
@@ -201,9 +201,16 @@ export async function deliverEnvelope(envelope, opts) {
201
201
  * `@opensip-cli/output` itself. The formatter is pure; this function owns
202
202
  * the effect (fs write).
203
203
  */
204
- export async function writeEnvelopeSarif(envelope, path) {
204
+ export function writeEnvelopeSarif(envelope, path, artifactCtx) {
205
205
  const sarif = formatSignalSarif(envelope);
206
- await mkdir(dirname(path), { recursive: true });
207
- await writeFile(path, sarif);
206
+ const ctx = {
207
+ policy: artifactCtx?.policy ?? resolveStateLockPolicy(),
208
+ logger: artifactCtx?.logger ?? defaultLogger,
209
+ runId: artifactCtx?.runId,
210
+ command: artifactCtx?.command,
211
+ cwdBasename: artifactCtx?.cwdBasename,
212
+ };
213
+ writeArtifactAtomically(path, sarif, ctx);
214
+ return Promise.resolve();
208
215
  }
209
216
  //# sourceMappingURL=deliver-envelope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deliver-envelope.js","sourceRoot":"","sources":["../../src/bootstrap/deliver-envelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deliver-envelope.js","sourceRoot":"","sources":["../../src/bootstrap/deliver-envelope.ts"],"names":[],"mappings":"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"}
@@ -44,5 +44,5 @@ export declare function runWorkerSpec(args: {
44
44
  readonly timeoutMs?: number;
45
45
  }): Promise<ToolCommandResult>;
46
46
  /** Build a structured supervisor-side dispatch error, logged with its failure class. */
47
- export declare function dispatchError(spec: ToolCommandWorkerSpec, message: string, failureClass: string): ToolError;
47
+ export declare function dispatchError(spec: ToolCommandWorkerSpec, message: string, failureClass: string, stderrTail?: string): ToolError;
48
48
  //# sourceMappingURL=dispatch-fork-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-fork-core.d.ts","sourceRoot":"","sources":["../../src/bootstrap/dispatch-fork-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EAGV,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kCAAkC,CAAC;AAE1C,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAQzD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CASpE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoB7B;AA4JD,wFAAwF;AACxF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,SAAS,CAoBX"}
1
+ {"version":3,"file":"dispatch-fork-core.d.ts","sourceRoot":"","sources":["../../src/bootstrap/dispatch-fork-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAGV,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,kCAAkC,CAAC;AAE1C,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAQzD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CASpE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoB7B;AAqKD,wFAAwF;AACxF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,SAAS,CAqBX"}
@@ -21,14 +21,13 @@
21
21
  * structured parent-side {@link ToolError} — the host never crashes and external
22
22
  * runtime NEVER falls back to in-host execution (ADR-0054 trust tier).
23
23
  */
24
- import { fork } from 'node:child_process';
25
24
  import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
26
25
  import { tmpdir } from 'node:os';
27
26
  import { join } from 'node:path';
28
- import { ConfigurationError, currentScope, SystemError, } from '@opensip-cli/core';
27
+ import { ConfigurationError, currentScope, currentTraceparent, forkAndSettle, getWorkerLimits, SystemError, } from '@opensip-cli/core';
28
+ import { buildExternalWorkerChildEnv } from './build-external-worker-child-env.js';
29
29
  import { BOOTSTRAP_MODULE } from './constants.js';
30
30
  import { handleHostRpc } from './dispatch-host-rpc-handler.js';
31
- import { IN_TOOL_WORKER_ENV } from './tool-provenance.js';
32
31
  /** Default supervisor wall-clock timeout for one forked worker run (ms). */
33
32
  export const DEFAULT_DISPATCH_TIMEOUT_MS = 120_000;
34
33
  /** The internal worker subcommand the supervisor forks the CLI binary into. */
@@ -70,81 +69,79 @@ export async function runWorkerSpec(args) {
70
69
  function forkAndAwait({ cliScript, specPath, cwd, spec, timeoutMs, ctx, }) {
71
70
  return new Promise((resolve, reject) => {
72
71
  const runId = currentScope()?.runId;
73
- // ADR-0054 M4-F: the child IS the isolation boundary. OPENSIP_CLI_IN_TOOL_WORKER
74
- // tells the worker bootstrap to RUN the dispatched external tool's lifecycle
75
- // hooks worker-local (the host-skip is disabled there). OPENSIP_RUN_ID stitches
76
- // the worker's logs to the parent run. fork() with `env` set REPLACES the child
77
- // env, so the parent env is spread in first to preserve PATH/HOME/etc.
78
- // @fitness-ignore-next-line env-secret-exposure -- spreading process.env preserves PATH/HOME for the child; only OPENSIP_RUN_ID (no secret) + the OPENSIP_CLI_IN_TOOL_WORKER marker are added; this object is passed to fork, never logged (parity with subprocess-transport's childEnv).
79
- const childEnv = { ...process.env, [IN_TOOL_WORKER_ENV]: '1' };
80
- if (runId !== undefined && runId.length > 0)
81
- childEnv.OPENSIP_RUN_ID = runId;
82
- // Fork the CLI binary into the internal worker subcommand. The full bootstrap
83
- // (preAction) re-builds the per-run scope in the worker before the worker
84
- // handler runs.
85
- //
86
- // `cwd` is set on the CHILD PROCESS (not only passed as `--cwd`): the CLI
87
- // bootstrap anchors TOOL DISCOVERY on `process.cwd()`, while the `--cwd` flag
88
- // only steers later PROJECT resolution in the pre-action hook. Pinning the
89
- // child cwd to the same project keeps discovery and project resolution
90
- // coherent — the worker bootstraps exactly as an in-project invocation would.
91
- const child = fork(cliScript, [WORKER_SUBCOMMAND, specPath, '--cwd', cwd], {
72
+ const traceparent = currentTraceparent();
73
+ let inFlightRpc = 0;
74
+ let totalRpc = 0;
75
+ const handle = forkAndSettle({
76
+ command: cliScript,
77
+ argv: [WORKER_SUBCOMMAND, specPath, '--cwd', cwd],
92
78
  cwd,
93
- stdio: ['ignore', 'ignore', 'inherit', 'ipc'],
94
- serialization: 'advanced',
95
- env: childEnv,
96
- });
97
- let settled = false;
98
- const done = (apply) => {
99
- if (settled)
100
- return;
101
- settled = true;
102
- clearTimeout(timer);
103
- apply();
104
- child.kill();
105
- };
106
- const timer = setTimeout(() => {
107
- done(() => {
108
- child.kill('SIGKILL');
109
- reject(dispatchError(spec, `worker timed out after ${String(timeoutMs)}ms`, 'timeout'));
110
- });
111
- }, timeoutMs);
112
- timer.unref?.();
113
- // M4-C: serve one host-RPC upcall against the REAL host ctx and reply. A
114
- // host-side fault is folded into a structured `{ ok: false }` reply by
115
- // handleHostRpc never an unhandled host crash. If the child has already
116
- // settled (raced a result/exit), the reply is dropped (the worker is gone).
79
+ timeoutMs,
80
+ enableHeartbeat: true,
81
+ enableSigintCancellation: true,
82
+ buildChildEnv: (parentEnv) => buildExternalWorkerChildEnv({ parentEnv, runId, traceparent }),
83
+ onMessage: (msg) => {
84
+ const typed = msg;
85
+ if (typed.kind === 'progress') {
86
+ serveRpc(typed.event);
87
+ }
88
+ else if (typed.kind === 'result') {
89
+ handle.done(() => {
90
+ resolve(typed.value);
91
+ });
92
+ }
93
+ else if (typed.kind === 'error') {
94
+ handle.done(() => {
95
+ reject(workerErrorToToolError(spec, typed, handle.getStderrTail()));
96
+ });
97
+ }
98
+ },
99
+ onLimitFailure: (failureClass, detail) => {
100
+ reject(dispatchError(spec, detail === undefined
101
+ ? `worker failed: ${failureClass}`
102
+ : `worker failed: ${failureClass} (${detail})`, failureClass, handle.getStderrTail()));
103
+ },
104
+ }, { runId });
117
105
  const serveRpc = (request) => {
118
- void handleHostRpc(request, ctx).then((reply) => {
119
- if (!settled)
120
- sendRpcReply(child, reply, spec);
121
- });
122
- };
123
- child.on('message', (msg) => {
124
- if (msg.kind === 'progress') {
125
- serveRpc(msg.event);
126
- }
127
- else if (msg.kind === 'result') {
128
- done(() => {
129
- resolve(msg.value);
106
+ const workerLimits = getWorkerLimits();
107
+ totalRpc += 1;
108
+ if (totalRpc > workerLimits.maxTotalRpc) {
109
+ handle.killTree('SIGKILL');
110
+ handle.done(() => {
111
+ reject(dispatchError(spec, 'host-RPC upcall flood (total cap exceeded)', 'rpc_flood'));
130
112
  });
113
+ return;
131
114
  }
132
- else {
133
- done(() => {
134
- reject(workerErrorToToolError(spec, msg));
115
+ if (inFlightRpc >= workerLimits.maxConcurrentRpc) {
116
+ handle.killTree('SIGKILL');
117
+ handle.done(() => {
118
+ reject(dispatchError(spec, 'host-RPC upcall flood (concurrency cap exceeded)', 'rpc_flood'));
135
119
  });
120
+ return;
136
121
  }
137
- });
122
+ inFlightRpc += 1;
123
+ void handleHostRpc(request, ctx)
124
+ .then((reply) => {
125
+ inFlightRpc -= 1;
126
+ if (!handle.isSettled())
127
+ sendRpcReply(handle.child, reply, spec);
128
+ })
129
+ .catch(() => {
130
+ inFlightRpc -= 1;
131
+ });
132
+ };
138
133
  /* v8 ignore next 16 -- defensive isolation-safety arm: `child.on('error')` fires only on a node-executable SPAWN failure (ENOENT on the runtime, EACCES), which is only reachable via impractical fault injection — node always exists in a normal run, so a bad worker entry surfaces via `child.on('exit')` (the covered sibling arm) instead. ADR-0054 trust tier: an external tool that cannot fork is a HARD error, NEVER an in-host fallback (that would run untrusted code in the kernel process). A future explicitly-named developer override (OPENSIP_CLI_DANGEROUSLY_RUN_EXTERNAL_IN_HOST) is reserved, not built. */
139
- child.on('error', (err) => {
140
- done(() => {
134
+ handle.child.on('error', (err) => {
135
+ handle.done(() => {
141
136
  reject(dispatchError(spec, `cannot isolate external tool '${spec.toolId}' (worker fork failed: ${err.message}); ` +
142
137
  'refusing to run it in-process', 'spawn'));
143
138
  });
144
139
  });
145
- child.on('exit', (code) => {
146
- done(() => {
147
- reject(dispatchError(spec, `worker exited (code ${code ?? 'null'}) before producing a result`, 'exit_nonzero'));
140
+ handle.child.on('exit', (code) => {
141
+ if (handle.isSettled())
142
+ return;
143
+ handle.done(() => {
144
+ reject(dispatchError(spec, `worker exited (code ${code ?? 'null'}) before producing a result`, 'exit_nonzero', handle.getStderrTail()));
148
145
  });
149
146
  });
150
147
  });
@@ -180,7 +177,7 @@ function specLabel(spec) {
180
177
  return spec.commandName ?? spec.hook ?? 'unknown';
181
178
  }
182
179
  /** Build a structured supervisor-side dispatch error, logged with its failure class. */
183
- export function dispatchError(spec, message, failureClass) {
180
+ export function dispatchError(spec, message, failureClass, stderrTail) {
184
181
  const label = specLabel(spec);
185
182
  currentScope()?.logger.error({
186
183
  evt: 'cli.tool.dispatch_failed',
@@ -189,20 +186,21 @@ export function dispatchError(spec, message, failureClass) {
189
186
  command: label,
190
187
  failureClass,
191
188
  });
192
- // ADR-0054 M4-E single config-error contract: a worker DEEP-pass config failure
193
- // (`config-invalid`) maps to the SAME typed error + exit code (ConfigurationError
194
- // → CONFIGURATION_ERROR, exit 2) the host COARSE pass throws, so the user sees a
195
- // consistent "Invalid configuration …" regardless of which pass caught it.
196
189
  if (failureClass === 'config-invalid') {
197
- return new ConfigurationError(message, { code: 'CONFIGURATION_ERROR', failureClass });
190
+ return new ConfigurationError(message, {
191
+ code: 'CONFIGURATION_ERROR',
192
+ failureClass,
193
+ stderrTail,
194
+ });
198
195
  }
199
196
  return new SystemError(`external tool '${spec.toolId}' ${label} failed: ${message}`, {
200
197
  code: 'SYSTEM.DISPATCH.WORKER_FAILED',
201
198
  failureClass,
199
+ stderrTail,
202
200
  });
203
201
  }
204
202
  /** Convert a worker `error` IPC message into a logged, structured {@link ToolError}. */
205
- function workerErrorToToolError(spec, msg) {
206
- return dispatchError(spec, msg.message, msg.failureClass ?? 'ipc_error');
203
+ function workerErrorToToolError(spec, msg, stderrTail) {
204
+ return dispatchError(spec, msg.message, msg.failureClass ?? 'ipc_error', stderrTail);
207
205
  }
208
206
  //# sourceMappingURL=dispatch-fork-core.js.map