@llblab/pi-kit 0.38.4 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/README.md +1 -1
- package/node_modules/@llblab/pi-actors/AGENTS.md +108 -20
- package/node_modules/@llblab/pi-actors/BACKLOG.md +207 -4
- package/node_modules/@llblab/pi-actors/CHANGELOG.md +13 -0
- package/node_modules/@llblab/pi-actors/README.md +31 -1
- package/node_modules/@llblab/pi-actors/dist/index.js +1 -1
- package/node_modules/@llblab/pi-actors/dist/lib/async-runs.d.ts +37 -0
- package/node_modules/@llblab/pi-actors/dist/lib/async-runs.js +131 -62
- package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.d.ts +2 -0
- package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.js +3 -2
- package/node_modules/@llblab/pi-actors/dist/lib/command-templates.d.ts +37 -0
- package/node_modules/@llblab/pi-actors/dist/lib/command-templates.js +263 -129
- package/node_modules/@llblab/pi-actors/dist/lib/execution-files.d.ts +32 -0
- package/node_modules/@llblab/pi-actors/dist/lib/execution-files.js +128 -0
- package/node_modules/@llblab/pi-actors/dist/lib/execution-output.js +5 -4
- package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.d.ts +19 -1
- package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.js +62 -26
- package/node_modules/@llblab/pi-actors/dist/lib/execution.d.ts +4 -1
- package/node_modules/@llblab/pi-actors/dist/lib/execution.js +6 -1
- package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.d.ts +9 -2
- package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.js +92 -14
- package/node_modules/@llblab/pi-actors/dist/lib/file-state.js +21 -2
- package/node_modules/@llblab/pi-actors/dist/lib/inspector-command.js +2 -2
- package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.d.ts +25 -7
- package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.js +562 -262
- package/node_modules/@llblab/pi-actors/dist/lib/inspector.d.ts +20 -10
- package/node_modules/@llblab/pi-actors/dist/lib/inspector.js +80 -91
- package/node_modules/@llblab/pi-actors/dist/lib/limits.d.ts +1 -0
- package/node_modules/@llblab/pi-actors/dist/lib/limits.js +1 -0
- package/node_modules/@llblab/pi-actors/dist/lib/observability.d.ts +15 -1
- package/node_modules/@llblab/pi-actors/dist/lib/observability.js +216 -99
- package/node_modules/@llblab/pi-actors/dist/lib/pi.d.ts +5 -4
- package/node_modules/@llblab/pi-actors/dist/lib/pi.js +64 -10
- package/node_modules/@llblab/pi-actors/dist/lib/recipe-projection.d.ts +18 -0
- package/node_modules/@llblab/pi-actors/dist/lib/recipe-projection.js +220 -0
- package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.d.ts +2 -0
- package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.js +30 -6
- package/node_modules/@llblab/pi-actors/dist/lib/registry.js +270 -36
- package/node_modules/@llblab/pi-actors/dist/lib/run-delivery.d.ts +213 -5
- package/node_modules/@llblab/pi-actors/dist/lib/run-delivery.js +1909 -40
- package/node_modules/@llblab/pi-actors/dist/lib/run-supervision.d.ts +107 -0
- package/node_modules/@llblab/pi-actors/dist/lib/run-supervision.js +412 -0
- package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.d.ts +9 -2
- package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.js +283 -60
- package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.d.ts +26 -1
- package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.js +68 -2
- package/node_modules/@llblab/pi-actors/dist/lib/runs-context-exports.d.ts +451 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-context-exports.js +2315 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-context-index.d.ts +97 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-context-index.js +368 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-control-delivery.js +46 -7
- package/node_modules/@llblab/pi-actors/dist/lib/runs-control.d.ts +78 -2
- package/node_modules/@llblab/pi-actors/dist/lib/runs-control.js +334 -2
- package/node_modules/@llblab/pi-actors/dist/lib/runs-controls.js +4 -1
- package/node_modules/@llblab/pi-actors/dist/lib/runs-descendant-launches.d.ts +80 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-descendant-launches.js +287 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-execution-evidence.d.ts +110 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-execution-evidence.js +282 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-index.d.ts +66 -1
- package/node_modules/@llblab/pi-actors/dist/lib/runs-index.js +349 -13
- package/node_modules/@llblab/pi-actors/dist/lib/runs-native-launches.d.ts +73 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-native-launches.js +227 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-outcomes.d.ts +141 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-outcomes.js +292 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.d.ts +10 -1
- package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.js +36 -4
- package/node_modules/@llblab/pi-actors/dist/lib/runs-process-windows-mi.d.ts +46 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-process-windows-mi.js +114 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-process.d.ts +34 -1
- package/node_modules/@llblab/pi-actors/dist/lib/runs-process.js +158 -26
- package/node_modules/@llblab/pi-actors/dist/lib/runs-results.d.ts +116 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-results.js +518 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.d.ts +15 -2
- package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.js +148 -9
- package/node_modules/@llblab/pi-actors/dist/lib/runs-session-exports.d.ts +95 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-session-exports.js +470 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-snapshot.d.ts +58 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-snapshot.js +92 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-start.d.ts +2 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-start.js +44 -3
- package/node_modules/@llblab/pi-actors/dist/lib/runs-status.d.ts +15 -1
- package/node_modules/@llblab/pi-actors/dist/lib/runs-status.js +337 -13
- package/node_modules/@llblab/pi-actors/dist/lib/runs-supervision.d.ts +105 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-supervision.js +501 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.d.ts +1 -0
- package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.js +14 -3
- package/node_modules/@llblab/pi-actors/dist/lib/runtime.js +22 -3
- package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.d.ts +37 -0
- package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.js +59 -3
- package/node_modules/@llblab/pi-actors/dist/lib/state-readers.d.ts +4 -1
- package/node_modules/@llblab/pi-actors/dist/lib/state-readers.js +14 -8
- package/node_modules/@llblab/pi-actors/dist/lib/temp.d.ts +2 -4
- package/node_modules/@llblab/pi-actors/dist/lib/temp.js +4 -56
- package/node_modules/@llblab/pi-actors/dist/lib/tools-access.d.ts +3 -0
- package/node_modules/@llblab/pi-actors/dist/lib/tools-access.js +13 -0
- package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.d.ts +1 -0
- package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.js +110 -43
- package/node_modules/@llblab/pi-actors/dist/lib/tools-local.d.ts +3 -0
- package/node_modules/@llblab/pi-actors/dist/lib/tools-local.js +18 -6
- package/node_modules/@llblab/pi-actors/dist/lib/tools-message.d.ts +4 -1
- package/node_modules/@llblab/pi-actors/dist/lib/tools-message.js +126 -31
- package/node_modules/@llblab/pi-actors/dist/lib/tools-response.d.ts +31 -3
- package/node_modules/@llblab/pi-actors/dist/lib/tools-response.js +311 -47
- package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.d.ts +3 -0
- package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.js +29 -7
- package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.d.ts +20 -0
- package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.js +192 -43
- package/node_modules/@llblab/pi-actors/dist/scripts/async-runner.mjs +272 -194
- package/node_modules/@llblab/pi-actors/dist/scripts/conformance.mjs +14 -2
- package/node_modules/@llblab/pi-actors/dist/skills/actors/SKILL.md +46 -2
- package/node_modules/@llblab/pi-actors/dist/skills/actors/references/diagnostics.md +40 -0
- package/node_modules/@llblab/pi-actors/dist/skills/actors/references/runs.md +55 -1
- package/node_modules/@llblab/pi-actors/docs/README.md +9 -1
- package/node_modules/@llblab/pi-actors/docs/actor-inspector.md +84 -15
- package/node_modules/@llblab/pi-actors/docs/agent-experience.md +216 -0
- package/node_modules/@llblab/pi-actors/docs/async-runs.md +18 -2
- package/node_modules/@llblab/pi-actors/docs/composition-transport.md +103 -0
- package/node_modules/@llblab/pi-actors/docs/coordinator-delivery.md +204 -4
- package/node_modules/@llblab/pi-actors/docs/inspection.md +38 -2
- package/node_modules/@llblab/pi-actors/docs/output-projection-map.md +130 -0
- package/node_modules/@llblab/pi-actors/docs/releasing.md +19 -2
- package/node_modules/@llblab/pi-actors/docs/run-supervision.md +1622 -0
- package/node_modules/@llblab/pi-actors/docs/template-recipes.md +4 -0
- package/node_modules/@llblab/pi-actors/docs/windows-process-observation.md +248 -0
- package/node_modules/@llblab/pi-actors/index.ts +1 -1
- package/node_modules/@llblab/pi-actors/lib/async-runs.ts +164 -73
- package/node_modules/@llblab/pi-actors/lib/automatic-review-runtime.ts +4 -2
- package/node_modules/@llblab/pi-actors/lib/command-templates.ts +287 -138
- package/node_modules/@llblab/pi-actors/lib/execution-files.ts +118 -0
- package/node_modules/@llblab/pi-actors/lib/execution-output.ts +4 -4
- package/node_modules/@llblab/pi-actors/lib/execution-sessions.ts +57 -27
- package/node_modules/@llblab/pi-actors/lib/execution.ts +8 -0
- package/node_modules/@llblab/pi-actors/lib/extension-runtime.ts +102 -12
- package/node_modules/@llblab/pi-actors/lib/file-state.ts +16 -2
- package/node_modules/@llblab/pi-actors/lib/inspector-command.ts +2 -2
- package/node_modules/@llblab/pi-actors/lib/inspector-overlay.ts +524 -261
- package/node_modules/@llblab/pi-actors/lib/inspector.ts +101 -130
- package/node_modules/@llblab/pi-actors/lib/limits.ts +1 -0
- package/node_modules/@llblab/pi-actors/lib/observability.ts +235 -116
- package/node_modules/@llblab/pi-actors/lib/pi.ts +59 -11
- package/node_modules/@llblab/pi-actors/lib/recipe-projection.ts +232 -0
- package/node_modules/@llblab/pi-actors/lib/recipes-context.ts +27 -6
- package/node_modules/@llblab/pi-actors/lib/registry.ts +266 -36
- package/node_modules/@llblab/pi-actors/lib/run-delivery.ts +1737 -49
- package/node_modules/@llblab/pi-actors/lib/run-supervision.ts +411 -0
- package/node_modules/@llblab/pi-actors/lib/run-ui-runtime.ts +237 -73
- package/node_modules/@llblab/pi-actors/lib/runs-artifacts.ts +73 -1
- package/node_modules/@llblab/pi-actors/lib/runs-context-exports.ts +1871 -0
- package/node_modules/@llblab/pi-actors/lib/runs-context-index.ts +372 -0
- package/node_modules/@llblab/pi-actors/lib/runs-control-delivery.ts +36 -18
- package/node_modules/@llblab/pi-actors/lib/runs-control.ts +297 -1
- package/node_modules/@llblab/pi-actors/lib/runs-controls.ts +3 -1
- package/node_modules/@llblab/pi-actors/lib/runs-descendant-launches.ts +338 -0
- package/node_modules/@llblab/pi-actors/lib/runs-execution-evidence.ts +302 -0
- package/node_modules/@llblab/pi-actors/lib/runs-index.ts +345 -17
- package/node_modules/@llblab/pi-actors/lib/runs-native-launches.ts +270 -0
- package/node_modules/@llblab/pi-actors/lib/runs-outcomes.ts +377 -0
- package/node_modules/@llblab/pi-actors/lib/runs-ownership.ts +37 -4
- package/node_modules/@llblab/pi-actors/lib/runs-process-windows-mi.ts +113 -0
- package/node_modules/@llblab/pi-actors/lib/runs-process.ts +210 -34
- package/node_modules/@llblab/pi-actors/lib/runs-results.ts +601 -0
- package/node_modules/@llblab/pi-actors/lib/runs-retention.ts +134 -10
- package/node_modules/@llblab/pi-actors/lib/runs-session-exports.ts +406 -0
- package/node_modules/@llblab/pi-actors/lib/runs-snapshot.ts +143 -0
- package/node_modules/@llblab/pi-actors/lib/runs-start.ts +44 -2
- package/node_modules/@llblab/pi-actors/lib/runs-status.ts +252 -10
- package/node_modules/@llblab/pi-actors/lib/runs-supervision.ts +394 -0
- package/node_modules/@llblab/pi-actors/lib/runs-trace.ts +14 -3
- package/node_modules/@llblab/pi-actors/lib/runtime.ts +22 -3
- package/node_modules/@llblab/pi-actors/lib/session-evidence.ts +76 -4
- package/node_modules/@llblab/pi-actors/lib/state-readers.ts +16 -7
- package/node_modules/@llblab/pi-actors/lib/temp.ts +3 -56
- package/node_modules/@llblab/pi-actors/lib/tools-access.ts +13 -0
- package/node_modules/@llblab/pi-actors/lib/tools-inspect.ts +110 -51
- package/node_modules/@llblab/pi-actors/lib/tools-local.ts +37 -24
- package/node_modules/@llblab/pi-actors/lib/tools-message.ts +120 -37
- package/node_modules/@llblab/pi-actors/lib/tools-response.ts +273 -50
- package/node_modules/@llblab/pi-actors/lib/tools-spawn.ts +31 -10
- package/node_modules/@llblab/pi-actors/lib/trace-projection.ts +165 -42
- package/node_modules/@llblab/pi-actors/package.json +10 -6
- package/node_modules/@llblab/pi-actors/scripts/async-runner.mjs +272 -194
- package/node_modules/@llblab/pi-actors/scripts/conformance.mjs +14 -2
- package/node_modules/@llblab/pi-actors/skills/actors/SKILL.md +46 -2
- package/node_modules/@llblab/pi-actors/skills/actors/references/diagnostics.md +40 -0
- package/node_modules/@llblab/pi-actors/skills/actors/references/runs.md +55 -1
- package/node_modules/yaml/LICENSE +13 -0
- package/node_modules/yaml/README.md +172 -0
- package/node_modules/yaml/bin.mjs +11 -0
- package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/node_modules/yaml/browser/dist/errors.js +57 -0
- package/node_modules/yaml/browser/dist/index.js +17 -0
- package/node_modules/yaml/browser/dist/log.js +11 -0
- package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
- package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/node_modules/yaml/browser/dist/util.js +11 -0
- package/node_modules/yaml/browser/dist/visit.js +233 -0
- package/node_modules/yaml/browser/index.js +5 -0
- package/node_modules/yaml/browser/package.json +3 -0
- package/node_modules/yaml/dist/cli.d.ts +8 -0
- package/node_modules/yaml/dist/cli.mjs +201 -0
- package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/node_modules/yaml/dist/compose/composer.js +224 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/node_modules/yaml/dist/doc/Document.js +337 -0
- package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/node_modules/yaml/dist/doc/directives.js +178 -0
- package/node_modules/yaml/dist/errors.d.ts +21 -0
- package/node_modules/yaml/dist/errors.js +62 -0
- package/node_modules/yaml/dist/index.d.ts +25 -0
- package/node_modules/yaml/dist/index.js +50 -0
- package/node_modules/yaml/dist/log.d.ts +3 -0
- package/node_modules/yaml/dist/log.js +19 -0
- package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/Alias.js +118 -0
- package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/node_modules/yaml/dist/options.d.ts +350 -0
- package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/node_modules/yaml/dist/parse/cst.js +112 -0
- package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/node_modules/yaml/dist/parse/parser.js +980 -0
- package/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/node_modules/yaml/dist/public-api.js +107 -0
- package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/node_modules/yaml/dist/schema/tags.js +99 -0
- package/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/node_modules/yaml/dist/test-events.js +134 -0
- package/node_modules/yaml/dist/util.d.ts +16 -0
- package/node_modules/yaml/dist/util.js +28 -0
- package/node_modules/yaml/dist/visit.d.ts +102 -0
- package/node_modules/yaml/dist/visit.js +236 -0
- package/node_modules/yaml/package.json +97 -0
- package/node_modules/yaml/util.js +2 -0
- package/package.json +2 -2
- package/node_modules/@llblab/pi-actors/banner.jpg +0 -0
- package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.d.ts +0 -16
- package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.js +0 -57
- package/node_modules/@llblab/pi-actors/lib/inspector-actions.ts +0 -79
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Async run process control primitives.
|
|
3
|
-
* Owns: platform
|
|
3
|
+
* Owns: platform signalling, stop-request admission, evidence-only member/preparation recovery, and terminal control markers.
|
|
4
|
+
* Excludes: deadline eligibility and proof of complete owned-scope termination.
|
|
4
5
|
*/
|
|
5
6
|
import { spawnSync } from "node:child_process";
|
|
7
|
+
import { lstatSync } from "node:fs";
|
|
6
8
|
import { join } from "node:path";
|
|
7
9
|
import { writeJsonAtomic } from "./file-state.js";
|
|
8
|
-
import {
|
|
10
|
+
import { readRunSupervisionClock } from "./run-supervision.js";
|
|
11
|
+
import { assertRunDescendantPreparedMetadata, readRunDescendantLaunchLedger, readRunDescendantPreparation, recordRunDescendantLaunchIntentUnderLock, resolveRunDescendantLaunchTarget } from "./runs-descendant-launches.js";
|
|
12
|
+
import { readRunNativeLaunchLedger, recordRunNativeLaunchSettlementUnderLock } from "./runs-native-launches.js";
|
|
13
|
+
import { readRunNaturalOutcome, readRunStopClaim, RUN_OUTCOME_PROTOCOL, writeRunStopClaimUnderLock, } from "./runs-outcomes.js";
|
|
14
|
+
import { assertDistinctRunStateDirectories, readOwnedRunStateDirectory } from "./runs-ownership.js";
|
|
15
|
+
import { acquireStateStartLock } from "./runs-start.js";
|
|
16
|
+
import { readJsonFileResilient } from "./state-readers.js";
|
|
17
|
+
import { observeRunProcessExit, runProcessIdentityDigest, verifyRunProcessIdentity, } from "./runs-process.js";
|
|
9
18
|
export function getRunProcessSignalPlan(pid, signal, runtimePlatform = process.platform) {
|
|
10
19
|
if (runtimePlatform === "win32") {
|
|
11
20
|
return {
|
|
@@ -70,6 +79,329 @@ export function signalOwnedRunProcess(pid, signal, expectedIdentity, deps = {})
|
|
|
70
79
|
return { signalTarget: "process" };
|
|
71
80
|
}
|
|
72
81
|
}
|
|
82
|
+
function readOwnedRunControlMeta(stateDir) {
|
|
83
|
+
const owned = readOwnedRunStateDirectory(stateDir);
|
|
84
|
+
const path = join(owned.stateDir, "run.json");
|
|
85
|
+
if (!lstatSync(path).isFile())
|
|
86
|
+
return undefined;
|
|
87
|
+
const read = readJsonFileResilient(path, undefined);
|
|
88
|
+
if (read.diagnostics.length || !read.value || typeof read.value !== "object" || Array.isArray(read.value))
|
|
89
|
+
return undefined;
|
|
90
|
+
const meta = read.value;
|
|
91
|
+
if (meta.run !== owned.run || meta.state_dir !== owned.stateDir)
|
|
92
|
+
return undefined;
|
|
93
|
+
return { stateDir: owned.stateDir, meta };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Requests only: no signal, handled marker, or claim of physical termination.
|
|
97
|
+
* The supervisor owns deadline eligibility; this owner revalidates configuration and identity.
|
|
98
|
+
* Legacy producers cannot participate until they bind the serialized outcome protocol.
|
|
99
|
+
*/
|
|
100
|
+
export function claimRunStop(stateDir, request, deps = {}) {
|
|
101
|
+
const reject = (code) => ({ status: "rejected", code });
|
|
102
|
+
if (!request || typeof request.runInstanceId !== "string" || !request.runInstanceId) {
|
|
103
|
+
return reject("run_generation_required");
|
|
104
|
+
}
|
|
105
|
+
if (request.reason !== "manual_kill" && request.reason !== "max_runtime")
|
|
106
|
+
return reject("invalid_stop_reason");
|
|
107
|
+
const release = acquireStateStartLock(stateDir, { onContention: deps.onLockContention });
|
|
108
|
+
try {
|
|
109
|
+
const owned = readOwnedRunControlMeta(stateDir);
|
|
110
|
+
if (!owned)
|
|
111
|
+
return reject("run_identity_unavailable");
|
|
112
|
+
const { meta } = owned;
|
|
113
|
+
if (meta.run_instance_id !== request.runInstanceId)
|
|
114
|
+
return reject("run_generation_mismatch");
|
|
115
|
+
if (meta.ownerId !== request.ownerId)
|
|
116
|
+
return reject("run_owner_mismatch");
|
|
117
|
+
if (meta.outcome_protocol !== RUN_OUTCOME_PROTOCOL)
|
|
118
|
+
return reject("run_outcome_protocol_unavailable");
|
|
119
|
+
const natural = readRunNaturalOutcome(owned.stateDir, meta);
|
|
120
|
+
if (natural.state === "accepted")
|
|
121
|
+
return { status: "already_terminal", terminal_status: natural.status };
|
|
122
|
+
const stop = readRunStopClaim(owned.stateDir, meta);
|
|
123
|
+
if (stop.state === "pending")
|
|
124
|
+
return { status: "stop_requested", stopped: false, reused: true, claim: stop.claim };
|
|
125
|
+
if (stop.state !== "absent")
|
|
126
|
+
return reject("run_stop_state_unavailable");
|
|
127
|
+
if (natural.state !== "absent")
|
|
128
|
+
return reject("run_result_proof_unavailable");
|
|
129
|
+
if (!Number.isSafeInteger(meta.pid) || Number(meta.pid) <= 0 ||
|
|
130
|
+
(meta.ownerId !== undefined && (typeof meta.ownerId !== "string" || !meta.ownerId))) {
|
|
131
|
+
return reject("run_identity_unavailable");
|
|
132
|
+
}
|
|
133
|
+
if (request.reason === "max_runtime") {
|
|
134
|
+
try {
|
|
135
|
+
if (readRunSupervisionClock(meta)?.supervision.max_runtime_ms == null)
|
|
136
|
+
return reject("run_deadline_unconfigured");
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return reject("run_deadline_unproven");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const proof = (deps.verifyIdentity ?? verifyRunProcessIdentity)(Number(meta.pid), meta.process_identity, deps.runtimePlatform ?? process.platform);
|
|
143
|
+
if (!proof.valid)
|
|
144
|
+
return reject("run_process_unproven");
|
|
145
|
+
const claim = writeRunStopClaimUnderLock(owned.stateDir, meta, request.reason);
|
|
146
|
+
return { status: "stop_requested", stopped: false, reused: false, claim };
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
release();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/** Evidence only after producer exit; never repair birth, dispatch signals, reopen work, or finalize a scope. */
|
|
153
|
+
export function recoverRunNativeMemberExit(stateDir, request, deps = {}) {
|
|
154
|
+
const reject = (code) => ({ status: "rejected", code });
|
|
155
|
+
if (!request || typeof request.runInstanceId !== "string" || !request.runInstanceId)
|
|
156
|
+
return reject("run_generation_required");
|
|
157
|
+
if (typeof request.intentId !== "string" || !request.intentId)
|
|
158
|
+
return reject("run_native_intent_required");
|
|
159
|
+
const release = acquireStateStartLock(stateDir, { onContention: deps.onLockContention });
|
|
160
|
+
try {
|
|
161
|
+
let owned;
|
|
162
|
+
try {
|
|
163
|
+
owned = readOwnedRunControlMeta(stateDir);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return reject("run_identity_unavailable");
|
|
167
|
+
}
|
|
168
|
+
if (!owned)
|
|
169
|
+
return reject("run_identity_unavailable");
|
|
170
|
+
const { meta } = owned;
|
|
171
|
+
if (meta.run_instance_id !== request.runInstanceId)
|
|
172
|
+
return reject("run_generation_mismatch");
|
|
173
|
+
if (meta.ownerId !== request.ownerId)
|
|
174
|
+
return reject("run_owner_mismatch");
|
|
175
|
+
if (meta.outcome_protocol !== RUN_OUTCOME_PROTOCOL)
|
|
176
|
+
return reject("run_outcome_protocol_unavailable");
|
|
177
|
+
if (!Number.isSafeInteger(meta.pid) || Number(meta.pid) <= 0 ||
|
|
178
|
+
(meta.ownerId !== undefined && (typeof meta.ownerId !== "string" || !meta.ownerId)))
|
|
179
|
+
return reject("run_identity_unavailable");
|
|
180
|
+
const owner = {
|
|
181
|
+
run: String(meta.run), runInstanceId: request.runInstanceId,
|
|
182
|
+
...(meta.ownerId === undefined ? {} : { ownerId: String(meta.ownerId) }),
|
|
183
|
+
pid: Number(meta.pid), processIdentityDigest: runProcessIdentityDigest(meta.process_identity),
|
|
184
|
+
};
|
|
185
|
+
const read = readRunNativeLaunchLedger(owned.stateDir, owner);
|
|
186
|
+
if (read.state !== "available")
|
|
187
|
+
return reject("run_native_evidence_unavailable");
|
|
188
|
+
const intent = read.ledger.intents.find((item) => item.intent_id === request.intentId);
|
|
189
|
+
if (!intent)
|
|
190
|
+
return reject("run_native_intent_unavailable");
|
|
191
|
+
if (intent.settlement)
|
|
192
|
+
return { status: "already_recorded", settlement: intent.settlement };
|
|
193
|
+
if (!intent.birth)
|
|
194
|
+
return { status: "unproven", reason: "birth_unavailable" };
|
|
195
|
+
if (!owner.processIdentityDigest)
|
|
196
|
+
return { status: "unproven", reason: "producer_identity_unavailable" };
|
|
197
|
+
const producer = observeRunProcessExit(owner.pid, meta.process_identity, deps);
|
|
198
|
+
if (producer.status !== "exited")
|
|
199
|
+
return { status: "unproven", reason: producer.status === "running" ? "producer_running" : "producer_exit_unproven" };
|
|
200
|
+
const member = observeRunProcessExit(intent.birth.pid, intent.birth.process_identity, deps);
|
|
201
|
+
if (member.status !== "exited")
|
|
202
|
+
return { status: "unproven", reason: member.status === "running" ? "member_running" : "member_exit_unproven" };
|
|
203
|
+
let current;
|
|
204
|
+
try {
|
|
205
|
+
current = readOwnedRunControlMeta(owned.stateDir);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return reject("run_identity_changed");
|
|
209
|
+
}
|
|
210
|
+
if (!current || current.stateDir !== owned.stateDir || current.meta.run !== owner.run ||
|
|
211
|
+
current.meta.run_instance_id !== owner.runInstanceId || current.meta.ownerId !== owner.ownerId ||
|
|
212
|
+
current.meta.pid !== owner.pid || current.meta.outcome_protocol !== RUN_OUTCOME_PROTOCOL ||
|
|
213
|
+
runProcessIdentityDigest(current.meta.process_identity) !== owner.processIdentityDigest)
|
|
214
|
+
return reject("run_identity_changed");
|
|
215
|
+
const settlement = recordRunNativeLaunchSettlementUnderLock(owned.stateDir, owner, {
|
|
216
|
+
intent, birth: intent.birth, settlement: { basis: "verified_absence", observed_at: new Date().toISOString() },
|
|
217
|
+
});
|
|
218
|
+
return { status: "recorded", settlement };
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
release();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const descendantRecoveryCleanupFailures = new Map();
|
|
225
|
+
function retainDescendantRecoveryCleanupFailure(key, error) {
|
|
226
|
+
const prior = descendantRecoveryCleanupFailures.get(key);
|
|
227
|
+
if (prior)
|
|
228
|
+
return prior;
|
|
229
|
+
let code = "UNKNOWN";
|
|
230
|
+
try {
|
|
231
|
+
const value = error?.code;
|
|
232
|
+
if (typeof value === "string" && /^[A-Z0-9_]{1,64}$/.exec(value)?.[0] === value)
|
|
233
|
+
code = value;
|
|
234
|
+
}
|
|
235
|
+
catch { /* A diagnostic getter cannot replace an action outcome. */ }
|
|
236
|
+
const failure = Object.freeze({ status: "release_unproven", error_code: code });
|
|
237
|
+
descendantRecoveryCleanupFailures.set(key, failure);
|
|
238
|
+
try {
|
|
239
|
+
console.error("Run descendant recovery lifecycle cleanup failed; release remains unproven and this runtime's recovery scope is fenced.");
|
|
240
|
+
}
|
|
241
|
+
catch { /* A diagnostic sink cannot replace an action outcome. */ }
|
|
242
|
+
return failure;
|
|
243
|
+
}
|
|
244
|
+
/** Post-producer metadata evidence only; never recreate a producer, launch work, invent exits, or release scope guards. */
|
|
245
|
+
export function recoverRunDescendantPreparation(stateDir, request, deps = {}) {
|
|
246
|
+
const reject = (code) => ({ status: "rejected", code });
|
|
247
|
+
const generation = request?.runInstanceId;
|
|
248
|
+
if (typeof generation !== "string" || !generation)
|
|
249
|
+
return Object.freeze(reject("run_generation_required"));
|
|
250
|
+
const ownerId = request.ownerId;
|
|
251
|
+
if (ownerId !== undefined && (typeof ownerId !== "string" || !ownerId))
|
|
252
|
+
return Object.freeze(reject("run_owner_mismatch"));
|
|
253
|
+
if (!request.child || typeof request.child !== "object" || Array.isArray(request.child))
|
|
254
|
+
return Object.freeze(reject("run_descendant_target_required"));
|
|
255
|
+
const childRequest = Object.freeze({ ...request.child });
|
|
256
|
+
let directory;
|
|
257
|
+
try {
|
|
258
|
+
directory = readOwnedRunStateDirectory(stateDir);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return Object.freeze(reject("run_identity_unavailable"));
|
|
262
|
+
}
|
|
263
|
+
const key = JSON.stringify([directory.stateDir, generation, ownerId ?? null]);
|
|
264
|
+
const quarantined = descendantRecoveryCleanupFailures.get(key);
|
|
265
|
+
if (quarantined)
|
|
266
|
+
return Object.freeze({ ...reject("run_descendant_recovery_cleanup_unproven"), cleanup: quarantined });
|
|
267
|
+
const releaseParent = acquireStateStartLock(directory.stateDir, { onContention: deps.onLockContention });
|
|
268
|
+
let releaseChild;
|
|
269
|
+
let result;
|
|
270
|
+
let primary;
|
|
271
|
+
let failed = false;
|
|
272
|
+
let cleanup;
|
|
273
|
+
try {
|
|
274
|
+
result = (() => {
|
|
275
|
+
let owned;
|
|
276
|
+
try {
|
|
277
|
+
owned = readOwnedRunControlMeta(directory.stateDir);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return reject("run_identity_unavailable");
|
|
281
|
+
}
|
|
282
|
+
if (!owned)
|
|
283
|
+
return reject("run_identity_unavailable");
|
|
284
|
+
const { meta } = owned;
|
|
285
|
+
if (meta.run_instance_id !== generation)
|
|
286
|
+
return reject("run_generation_mismatch");
|
|
287
|
+
if (meta.ownerId !== ownerId)
|
|
288
|
+
return reject("run_owner_mismatch");
|
|
289
|
+
if (meta.outcome_protocol !== RUN_OUTCOME_PROTOCOL)
|
|
290
|
+
return reject("run_outcome_protocol_unavailable");
|
|
291
|
+
if (!Number.isSafeInteger(meta.pid) || Number(meta.pid) <= 0)
|
|
292
|
+
return reject("run_identity_unavailable");
|
|
293
|
+
const owner = { run: String(meta.run), runInstanceId: generation,
|
|
294
|
+
...(ownerId === undefined ? {} : { ownerId }), pid: Number(meta.pid), processIdentityDigest: runProcessIdentityDigest(meta.process_identity) };
|
|
295
|
+
const child = resolveRunDescendantLaunchTarget(childRequest, owner, owned.stateDir);
|
|
296
|
+
if (!child)
|
|
297
|
+
return reject("run_descendant_target_invalid");
|
|
298
|
+
const readIntent = () => {
|
|
299
|
+
const reading = readRunDescendantLaunchLedger(owned.stateDir, owner);
|
|
300
|
+
if (reading.state === "invalid")
|
|
301
|
+
return { error: "run_descendant_evidence_unavailable" };
|
|
302
|
+
const intent = reading.state === "available" ? reading.ledger.intents.find((item) => item.child.run_instance_id === child.run_instance_id) : undefined;
|
|
303
|
+
if (intent && (intent.child.run !== child.run || intent.child.ownerId !== child.ownerId || intent.child.state_dir !== child.state_dir)) {
|
|
304
|
+
return { error: "run_descendant_target_mismatch" };
|
|
305
|
+
}
|
|
306
|
+
return { intent };
|
|
307
|
+
};
|
|
308
|
+
const sameParent = () => {
|
|
309
|
+
try {
|
|
310
|
+
const current = readOwnedRunControlMeta(owned.stateDir);
|
|
311
|
+
return Boolean(current && current.stateDir === owned.stateDir && current.meta.run === owner.run &&
|
|
312
|
+
current.meta.run_instance_id === generation && current.meta.ownerId === ownerId && current.meta.pid === owner.pid &&
|
|
313
|
+
current.meta.outcome_protocol === RUN_OUTCOME_PROTOCOL && runProcessIdentityDigest(current.meta.process_identity) === owner.processIdentityDigest);
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
const initial = readIntent();
|
|
320
|
+
if (initial.error)
|
|
321
|
+
return reject(initial.error);
|
|
322
|
+
if (initial.intent?.preparation)
|
|
323
|
+
return { status: "already_recorded", intent: initial.intent };
|
|
324
|
+
try {
|
|
325
|
+
assertDistinctRunStateDirectories(owned.stateDir, child.state_dir);
|
|
326
|
+
assertRunDescendantPreparedMetadata(child.state_dir, child);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return reject("run_descendant_preparation_unavailable");
|
|
330
|
+
}
|
|
331
|
+
releaseChild = acquireStateStartLock(child.state_dir, { onContention: deps.onLockContention });
|
|
332
|
+
if (!sameParent())
|
|
333
|
+
return reject("run_identity_changed");
|
|
334
|
+
const admitted = readIntent();
|
|
335
|
+
if (admitted.error)
|
|
336
|
+
return reject(admitted.error);
|
|
337
|
+
if (admitted.intent?.preparation)
|
|
338
|
+
return { status: "already_recorded", intent: admitted.intent };
|
|
339
|
+
const parent = { run: owner.run, run_instance_id: generation, ...(ownerId === undefined ? {} : { ownerId }), state_dir: owned.stateDir };
|
|
340
|
+
try {
|
|
341
|
+
assertRunDescendantPreparedMetadata(child.state_dir, child);
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
return reject("run_descendant_preparation_unavailable");
|
|
345
|
+
}
|
|
346
|
+
const preparation = readRunDescendantPreparation(child.state_dir, child, parent);
|
|
347
|
+
if (!preparation)
|
|
348
|
+
return reject("run_descendant_preparation_unavailable");
|
|
349
|
+
if (!preparation.parent_producer)
|
|
350
|
+
return { status: "unproven", reason: "producer_binding_unavailable" };
|
|
351
|
+
if (preparation.parent_producer.process_identity_digest === null || !owner.processIdentityDigest) {
|
|
352
|
+
return { status: "unproven", reason: "producer_identity_unavailable" };
|
|
353
|
+
}
|
|
354
|
+
if (preparation.parent_producer.pid !== owner.pid || preparation.parent_producer.process_identity_digest !== owner.processIdentityDigest) {
|
|
355
|
+
return reject("run_descendant_producer_mismatch");
|
|
356
|
+
}
|
|
357
|
+
const producer = observeRunProcessExit(owner.pid, meta.process_identity, deps);
|
|
358
|
+
if (producer.status !== "exited")
|
|
359
|
+
return { status: "unproven", reason: producer.status === "running" ? "producer_running" : "producer_exit_unproven" };
|
|
360
|
+
if (!sameParent())
|
|
361
|
+
return reject("run_identity_changed");
|
|
362
|
+
const current = readIntent();
|
|
363
|
+
if (current.error)
|
|
364
|
+
return reject(current.error);
|
|
365
|
+
if (current.intent?.preparation) {
|
|
366
|
+
if (current.intent.preparation.preparation_id !== preparation.preparation_id || current.intent.preparation.prepared_at !== preparation.prepared_at) {
|
|
367
|
+
return reject("run_descendant_preparation_changed");
|
|
368
|
+
}
|
|
369
|
+
return { status: "already_recorded", intent: current.intent };
|
|
370
|
+
}
|
|
371
|
+
const retained = readRunDescendantPreparation(child.state_dir, child, parent);
|
|
372
|
+
if (!retained || JSON.stringify(retained) !== JSON.stringify(preparation))
|
|
373
|
+
return reject("run_descendant_preparation_changed");
|
|
374
|
+
try {
|
|
375
|
+
assertRunDescendantPreparedMetadata(child.state_dir, child);
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return reject("run_descendant_preparation_changed");
|
|
379
|
+
}
|
|
380
|
+
const intent = recordRunDescendantLaunchIntentUnderLock(owned.stateDir, owner, {
|
|
381
|
+
run: child.run, runInstanceId: child.run_instance_id, ownerId: child.ownerId, stateDir: child.state_dir,
|
|
382
|
+
}, preparation);
|
|
383
|
+
return { status: "recorded", intent };
|
|
384
|
+
})();
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
primary = error;
|
|
388
|
+
failed = true;
|
|
389
|
+
}
|
|
390
|
+
finally {
|
|
391
|
+
for (const release of [releaseChild, releaseParent])
|
|
392
|
+
if (release) {
|
|
393
|
+
try {
|
|
394
|
+
release();
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
cleanup = retainDescendantRecoveryCleanupFailure(key, error);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
if (failed)
|
|
402
|
+
throw primary;
|
|
403
|
+
return Object.freeze({ ...result, ...(cleanup ? { cleanup } : {}) });
|
|
404
|
+
}
|
|
73
405
|
export function markTerminalHandled(stateDir, details) {
|
|
74
406
|
writeJsonAtomic(join(stateDir, "terminal-handled.json"), {
|
|
75
407
|
...details,
|
|
@@ -34,7 +34,10 @@ export function readRunControlJournalFromStateDir(stateDir) {
|
|
|
34
34
|
return { diagnostics: [{ message: String(error), path }], records: [] };
|
|
35
35
|
}
|
|
36
36
|
try {
|
|
37
|
-
const
|
|
37
|
+
const descriptor = fstatSync(fd);
|
|
38
|
+
if (!descriptor.isFile())
|
|
39
|
+
return { diagnostics: [{ message: "Run Control journal is not a regular file", path }], records: [] };
|
|
40
|
+
const bytes = descriptor.size;
|
|
38
41
|
if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > Limits.RUN_CONTROL_JOURNAL_MAX_BYTES) {
|
|
39
42
|
return { diagnostics: [{ message: "Run Control journal exceeds bounded read limit", path }], records: [] };
|
|
40
43
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Descendant Run launch-intent evidence.
|
|
3
|
+
* Owns: declared/prepared parent-child generation facts, strict persistence, and unresolved-scope mutation fences.
|
|
4
|
+
* Excludes: authenticating child birth/membership, work/control authority, exhaustive scope, and termination.
|
|
5
|
+
*/
|
|
6
|
+
export declare const RUN_DESCENDANT_LAUNCH_FILE = "descendant-launches.json";
|
|
7
|
+
export declare const RUN_DESCENDANT_PREPARATION_FILE = "descendant-preparation.json";
|
|
8
|
+
export declare const RUN_DESCENDANT_PREPARED_META_FILE = "prepared-run.json";
|
|
9
|
+
declare const SCHEMA = "run-descendant-launches-v1";
|
|
10
|
+
declare const PREPARATION_SCHEMA = "run-descendant-preparation-v1";
|
|
11
|
+
export interface RunDescendantLaunchOwner {
|
|
12
|
+
readonly run: string;
|
|
13
|
+
readonly runInstanceId: string;
|
|
14
|
+
readonly ownerId?: string;
|
|
15
|
+
readonly pid: number;
|
|
16
|
+
readonly processIdentityDigest?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RunDescendantLaunchRequest {
|
|
19
|
+
readonly run: string;
|
|
20
|
+
readonly runInstanceId: string;
|
|
21
|
+
readonly ownerId?: string;
|
|
22
|
+
readonly stateDir: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RunDescendantLaunchTarget {
|
|
25
|
+
readonly run: string;
|
|
26
|
+
readonly run_instance_id: string;
|
|
27
|
+
readonly ownerId?: string;
|
|
28
|
+
readonly state_dir: string;
|
|
29
|
+
}
|
|
30
|
+
export interface RunDescendantPreparedFact {
|
|
31
|
+
readonly preparation_id: string;
|
|
32
|
+
readonly prepared_at: string;
|
|
33
|
+
}
|
|
34
|
+
/** Persisted reference to the original producer, never a reconstructed runtime capability or native membership proof. */
|
|
35
|
+
export interface RunDescendantProducerBinding {
|
|
36
|
+
readonly pid: number;
|
|
37
|
+
readonly process_identity_digest: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface RunDescendantPreparation extends RunDescendantPreparedFact {
|
|
40
|
+
readonly schema: typeof PREPARATION_SCHEMA;
|
|
41
|
+
readonly parent: Readonly<RunDescendantLaunchTarget>;
|
|
42
|
+
readonly child: Readonly<RunDescendantLaunchTarget>;
|
|
43
|
+
readonly parent_producer?: Readonly<RunDescendantProducerBinding>;
|
|
44
|
+
}
|
|
45
|
+
export interface RunDescendantLaunchIntent {
|
|
46
|
+
readonly intent_id: string;
|
|
47
|
+
readonly admitted_at: string;
|
|
48
|
+
readonly child: Readonly<RunDescendantLaunchTarget>;
|
|
49
|
+
readonly preparation?: Readonly<RunDescendantPreparedFact>;
|
|
50
|
+
}
|
|
51
|
+
export interface RunDescendantLaunchLedger {
|
|
52
|
+
readonly schema: typeof SCHEMA;
|
|
53
|
+
readonly run: string;
|
|
54
|
+
readonly run_instance_id: string;
|
|
55
|
+
readonly ownerId?: string;
|
|
56
|
+
readonly runner_pid: number;
|
|
57
|
+
readonly runner_identity_digest: string | null;
|
|
58
|
+
readonly intents: readonly Readonly<RunDescendantLaunchIntent>[];
|
|
59
|
+
}
|
|
60
|
+
export type RunDescendantLaunchReading = {
|
|
61
|
+
state: "absent" | "invalid";
|
|
62
|
+
} | {
|
|
63
|
+
state: "available";
|
|
64
|
+
ledger: Readonly<RunDescendantLaunchLedger>;
|
|
65
|
+
};
|
|
66
|
+
/** Validated reference data only; resolving a target never grants work or membership authority. */
|
|
67
|
+
export declare function resolveRunDescendantLaunchTarget(value: unknown, owner: RunDescendantLaunchOwner, stateDir: string): Readonly<RunDescendantLaunchTarget> | undefined;
|
|
68
|
+
/** Only ENOENT permits mutation; an empty or invalid journal is not closure proof. */
|
|
69
|
+
export declare function assertNoRetainedDescendantLaunchScope(stateDir: string): void;
|
|
70
|
+
/** Declared generations and paths confer no child work/control authority or exhaustive membership. */
|
|
71
|
+
export declare function readRunDescendantLaunchLedger(stateDir: string, owner: RunDescendantLaunchOwner): RunDescendantLaunchReading;
|
|
72
|
+
/** Retained preparation data is evidence, never a native-start or membership capability. */
|
|
73
|
+
export declare function readRunDescendantPreparation(stateDir: string, child: RunDescendantLaunchTarget, parent: RunDescendantLaunchTarget): Readonly<RunDescendantPreparation> | undefined;
|
|
74
|
+
/** Fresh evidence checks only, not a capability reconstructed from staged metadata. */
|
|
75
|
+
export declare function assertRunDescendantPreparedMetadata(stateDir: string, child: RunDescendantLaunchTarget): void;
|
|
76
|
+
/** Storage only: the kernel prepare-only branch owns child creation and holds parent then child lifecycle locks. */
|
|
77
|
+
export declare function recordRunDescendantPreparationUnderLock(stateDir: string, child: RunDescendantLaunchTarget, parent: RunDescendantLaunchTarget, producer: RunDescendantLaunchOwner): Readonly<RunDescendantPreparation>;
|
|
78
|
+
/** Storage only: bare intents require work admission; prepared facts may use evidence admission. Validate child evidence under its lock. */
|
|
79
|
+
export declare function recordRunDescendantLaunchIntentUnderLock(stateDir: string, owner: RunDescendantLaunchOwner, request: RunDescendantLaunchRequest, preparation?: RunDescendantPreparation): Readonly<RunDescendantLaunchIntent>;
|
|
80
|
+
export {};
|