@wrongstack/core 0.313.0 → 0.316.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chronicle/index.js +84 -6391
- package/dist/chronicle/legacy-journal-import.d.ts +0 -6
- package/dist/chronicle/metrics-ingest.d.ts +14 -0
- package/dist/chronicle/metrics-schema.d.ts +10 -1
- package/dist/chronicle/metrics-store.d.ts +20 -2
- package/dist/chronicle/project-server.js +98 -4874
- package/dist/chronicle/sink.d.ts +13 -0
- package/dist/chronicle/sqlite-journal.d.ts +20 -2
- package/dist/chunk-25LSLC3G.js +334 -0
- package/dist/chunk-27QIURLN.js +1073 -0
- package/dist/chunk-2FK4WTFF.js +207 -0
- package/dist/chunk-2YU4WVBW.js +134 -0
- package/dist/chunk-3AGWVSS7.js +4608 -0
- package/dist/chunk-3BDV7RL3.js +211 -0
- package/dist/chunk-3ECENVHL.js +325 -0
- package/dist/chunk-3XPVB7BA.js +135 -0
- package/dist/chunk-45WI72ZB.js +16884 -0
- package/dist/chunk-4BMVPOHO.js +3748 -0
- package/dist/chunk-4I7HGVVA.js +363 -0
- package/dist/chunk-4LCZVJVF.js +317 -0
- package/dist/chunk-4SJNS7OB.js +217 -0
- package/dist/chunk-4VWO3ZXL.js +342 -0
- package/dist/chunk-57GEWK5X.js +26 -0
- package/dist/chunk-5BMIE7QG.js +46 -0
- package/dist/chunk-5S437PRC.js +50 -0
- package/dist/chunk-5XDUGTKN.js +511 -0
- package/dist/chunk-5YPSXQXM.js +1443 -0
- package/dist/chunk-6FHWXLPT.js +10 -0
- package/dist/chunk-6H5GEOET.js +2406 -0
- package/dist/chunk-6NWEVFEL.js +151 -0
- package/dist/chunk-AYW5YINX.js +58 -0
- package/dist/chunk-B4AMLZPB.js +9 -0
- package/dist/chunk-B7F4WVP4.js +65 -0
- package/dist/chunk-BJHVULHO.js +55 -0
- package/dist/chunk-BPBKKBUK.js +2085 -0
- package/dist/chunk-BYD345OX.js +589 -0
- package/dist/chunk-C27KDLOX.js +279 -0
- package/dist/chunk-CU546ESW.js +597 -0
- package/dist/chunk-DLHHXUAM.js +172 -0
- package/dist/chunk-DOTHQSJ2.js +429 -0
- package/dist/chunk-DYLPMV4Q.js +711 -0
- package/dist/chunk-EODDVJBM.js +82 -0
- package/dist/chunk-F3JWNST7.js +361 -0
- package/dist/chunk-FC2ZGRF3.js +140 -0
- package/dist/chunk-FCBTO76Z.js +5786 -0
- package/dist/chunk-FHZVFYSL.js +396 -0
- package/dist/chunk-FNXVT7HF.js +52 -0
- package/dist/chunk-FWNLEZYG.js +259 -0
- package/dist/chunk-FXQLIX3K.js +211 -0
- package/dist/chunk-G5S3S5ZN.js +38 -0
- package/dist/chunk-GDQ7CZRQ.js +116 -0
- package/dist/chunk-GJJGJB2R.js +1374 -0
- package/dist/chunk-GTCU6DZ3.js +1 -0
- package/dist/chunk-HA4ZYA6T.js +178 -0
- package/dist/chunk-HI3JGZR2.js +188 -0
- package/dist/chunk-HMLIGAU7.js +395 -0
- package/dist/chunk-HXKZ7OBQ.js +303 -0
- package/dist/chunk-I7DALG7J.js +292 -0
- package/dist/chunk-IRUTEHCE.js +960 -0
- package/dist/chunk-IYFBFX34.js +86 -0
- package/dist/chunk-J2WRWR37.js +1104 -0
- package/dist/chunk-JFPJ6LLQ.js +129 -0
- package/dist/chunk-JMULFFLN.js +9 -0
- package/dist/chunk-JO4MGB6Z.js +1264 -0
- package/dist/chunk-JVKB2TBL.js +48 -0
- package/dist/chunk-JX7VBZDK.js +31 -0
- package/dist/chunk-K6BXGITA.js +931 -0
- package/dist/chunk-KDQJCT2J.js +45 -0
- package/dist/chunk-KJ2ZTQSL.js +47 -0
- package/dist/chunk-KZMSZV32.js +187 -0
- package/dist/chunk-LA7CLDRW.js +129 -0
- package/dist/chunk-LHOA5DWA.js +28 -0
- package/dist/chunk-LSMMOS2Z.js +119 -0
- package/dist/chunk-LX5QWLBL.js +27 -0
- package/dist/chunk-LXWCMQNJ.js +789 -0
- package/dist/chunk-M27LIEKV.js +2829 -0
- package/dist/chunk-MJPHJRAL.js +663 -0
- package/dist/chunk-MTL4O5YR.js +228 -0
- package/dist/chunk-NDBIPFNY.js +102 -0
- package/dist/chunk-NEMIWEXC.js +1199 -0
- package/dist/chunk-NHJ75HXY.js +1 -0
- package/dist/chunk-NIOAGFPB.js +1510 -0
- package/dist/chunk-NS52ISWS.js +355 -0
- package/dist/chunk-NSOFPKGT.js +5352 -0
- package/dist/chunk-NVIZG63R.js +757 -0
- package/dist/chunk-O37BQ65S.js +21 -0
- package/dist/chunk-OOYZPOXM.js +308 -0
- package/dist/chunk-OSGLYW5J.js +28 -0
- package/dist/chunk-PFCMSSUF.js +1640 -0
- package/dist/chunk-PFZO3C6H.js +14 -0
- package/dist/chunk-PGRVXIMY.js +158 -0
- package/dist/chunk-PHH7LD45.js +113 -0
- package/dist/chunk-PISBFBJN.js +109 -0
- package/dist/chunk-POOOIWE5.js +9 -0
- package/dist/chunk-PQNS3U7Z.js +1240 -0
- package/dist/chunk-QSTSJOCK.js +402 -0
- package/dist/chunk-RFQMOKWK.js +282 -0
- package/dist/chunk-RJIZEJ42.js +30 -0
- package/dist/chunk-RTOTNK3P.js +484 -0
- package/dist/chunk-RXKSDUAU.js +1172 -0
- package/dist/chunk-S45JPKQN.js +3317 -0
- package/dist/chunk-SAFHACFA.js +152 -0
- package/dist/chunk-SQJVFEBV.js +41 -0
- package/dist/chunk-SVT4RNTR.js +49 -0
- package/dist/chunk-SWUFN7XM.js +43 -0
- package/dist/chunk-SXMVYC5H.js +174 -0
- package/dist/chunk-SZ6AYUIZ.js +23 -0
- package/dist/chunk-TBRL2RCC.js +9 -0
- package/dist/chunk-TCCHINEF.js +655 -0
- package/dist/chunk-THEGTRAG.js +316 -0
- package/dist/chunk-TR4LQE7L.js +2256 -0
- package/dist/chunk-TRT2HRWZ.js +18 -0
- package/dist/chunk-TWJMGXCI.js +900 -0
- package/dist/chunk-U45AXT5D.js +1023 -0
- package/dist/chunk-U4FWBSO3.js +509 -0
- package/dist/chunk-UBGDX6FI.js +147 -0
- package/dist/chunk-UJILKYES.js +75 -0
- package/dist/chunk-ULMAQV3T.js +234 -0
- package/dist/chunk-VVBP6KGT.js +9 -0
- package/dist/chunk-W5VITDM2.js +168 -0
- package/dist/chunk-WAHQVNWT.js +194 -0
- package/dist/chunk-WBPVKEEE.js +227 -0
- package/dist/chunk-WGGYRBXH.js +5434 -0
- package/dist/chunk-WLYKU45P.js +5770 -0
- package/dist/chunk-WP7BVANJ.js +53 -0
- package/dist/chunk-WQQON3SV.js +473 -0
- package/dist/chunk-WQTOVMGV.js +119 -0
- package/dist/chunk-XBDP4QPW.js +7 -0
- package/dist/chunk-XEBHSJLT.js +103 -0
- package/dist/chunk-XF4VUMKW.js +231 -0
- package/dist/chunk-XQ2ECNK3.js +1 -0
- package/dist/chunk-Y5YXDM7D.js +74 -0
- package/dist/chunk-YOPAUVU4.js +2588 -0
- package/dist/chunk-YPT4A46F.js +362 -0
- package/dist/chunk-YWXT3JNM.js +425 -0
- package/dist/chunk-YY6APYUM.js +49 -0
- package/dist/chunk-Z2IJUO45.js +691 -0
- package/dist/chunk-ZHZ2Y2DH.js +1643 -0
- package/dist/chunk-ZT7JNIGX.js +152 -0
- package/dist/coordination/agent-monitor.d.ts +9 -1
- package/dist/coordination/agent-subagent-runner.d.ts +1 -1
- package/dist/coordination/agents/agent-prompts.d.ts +8 -0
- package/dist/coordination/agents/index.d.ts +33 -1
- package/dist/coordination/agents/index.js +184 -6269
- package/dist/coordination/agents/phase3-wave1-platform.d.ts +1 -3
- package/dist/coordination/agents/phase3-wave2-meta.d.ts +1 -3
- package/dist/coordination/agents/phase8-wave3-products.d.ts +1 -3
- package/dist/coordination/agents/phase9-wave4-platform-meta.d.ts +1 -3
- package/dist/coordination/agents/project-agent-identity.d.ts +11 -11
- package/dist/coordination/agents/types.d.ts +13 -2
- package/dist/coordination/brain-monitor.d.ts +30 -7
- package/dist/coordination/collab-debug.d.ts +1 -1
- package/dist/coordination/collab-pause.d.ts +1 -1
- package/dist/coordination/delegate-tool.d.ts +7 -5
- package/dist/coordination/director-kanban-queue-helpers.d.ts +1 -0
- package/dist/coordination/director-options.d.ts +7 -0
- package/dist/coordination/director-spawn-model.d.ts +17 -0
- package/dist/coordination/director-tools.d.ts +2 -2
- package/dist/coordination/director.d.ts +12 -0
- package/dist/coordination/dispatcher.d.ts +8 -0
- package/dist/coordination/fleet-bus.d.ts +35 -4
- package/dist/coordination/fleet-supervisor.d.ts +10 -2
- package/dist/coordination/fleet.d.ts +16 -7
- package/dist/coordination/index.d.ts +4 -0
- package/dist/coordination/index.js +402 -34324
- package/dist/coordination/kanban-dispatch-port.d.ts +2 -2
- package/dist/coordination/mailbox-http-router.d.ts +4 -3
- package/dist/coordination/mailbox-http-validation.d.ts +1 -1
- package/dist/coordination/mailbox-project-server.js +48 -3276
- package/dist/coordination/mailbox-types.d.ts +24 -6
- package/dist/coordination/model-tier-leader.d.ts +122 -0
- package/dist/coordination/model-tier.d.ts +122 -0
- package/dist/coordination/multi-agent-coordinator.d.ts +24 -0
- package/dist/coordination/origin-session.d.ts +16 -0
- package/dist/coordination/provider-status-tracker.d.ts +41 -5
- package/dist/coordination/session-note-hub.d.ts +44 -0
- package/dist/coordination/session-note-tool.d.ts +10 -0
- package/dist/core/agent.d.ts +15 -2
- package/dist/core/context.d.ts +22 -3
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +239 -12360
- package/dist/core/model-ref.js +5 -23
- package/dist/core/provider-runner.d.ts +36 -1
- package/dist/core/request-conversation-binding.d.ts +37 -0
- package/dist/core/session-notes.d.ts +25 -0
- package/dist/core/system-prompt-builder.d.ts +11 -2
- package/dist/core/system-prompt-variants.d.ts +78 -0
- package/dist/design/index.js +50 -1087
- package/dist/execution/auto-compaction-middleware.d.ts +11 -0
- package/dist/execution/autonomy-brain.d.ts +2 -1
- package/dist/execution/autonomy-prompt-contributor.d.ts +7 -2
- package/dist/execution/compaction-core.d.ts +4 -4
- package/dist/execution/eternal-autonomy.d.ts +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.js +1615 -21895
- package/dist/execution/model-runtime.d.ts +0 -7
- package/dist/execution/parallel-eternal-engine.d.ts +7 -7
- package/dist/execution/prompt-enhancer.js +16 -535
- package/dist/execution/retry-policy.d.ts +31 -1
- package/dist/extension/index.js +7 -311
- package/dist/goal/index.js +33 -3435
- package/dist/hooks/index.js +14 -1138
- package/dist/hq/index.js +114 -5139
- package/dist/hq/persistence/event-log.d.ts +0 -1
- package/dist/hq/persistence.d.ts +4 -4
- package/dist/hq/protocol.js +21 -668
- package/dist/hq/publisher.d.ts +2 -0
- package/dist/index.d.ts +14 -11
- package/dist/index.js +1502 -92655
- package/dist/infrastructure/index.d.ts +4 -4
- package/dist/infrastructure/index.js +504 -5230
- package/dist/infrastructure/token-counter.d.ts +9 -0
- package/dist/kernel/events/agent-events.d.ts +77 -3
- package/dist/kernel/events/brain-events.d.ts +12 -0
- package/dist/kernel/events/provider-events.d.ts +22 -1
- package/dist/kernel/events/session-events.d.ts +14 -0
- package/dist/kernel/events/tool-events.d.ts +13 -0
- package/dist/kernel/index.js +14 -992
- package/dist/mailbox-attach.d.ts +1 -1
- package/dist/models/index.js +41 -1117
- package/dist/notifications/index.js +3 -108
- package/dist/observability/event-bridge.d.ts +25 -5
- package/dist/observability/index.d.ts +9 -8
- package/dist/observability/index.js +477 -631
- package/dist/observability/tool-usage-source.d.ts +65 -0
- package/dist/plugin/index.d.ts +5 -0
- package/dist/plugin/index.js +600 -14835
- package/dist/plugins/auto-review-plugin.d.ts +3 -2
- package/dist/plugins/review-finding-commands.d.ts +0 -8
- package/dist/plugins/review-finding-store.js +22 -0
- package/dist/plugins/review-finding-types.js +19 -0
- package/dist/plugins/review-report-integration.js +21 -0
- package/dist/plugins/review-report-store.js +20 -0
- package/dist/plugins/review-report-types.js +13 -0
- package/dist/prompts/index.js +14 -948
- package/dist/registry/index.js +9 -822
- package/dist/registry/tool-registry.d.ts +59 -9
- package/dist/registry-7N4O3E7W.js +14 -0
- package/dist/replay/index.js +6 -84
- package/dist/security/capabilities.d.ts +6 -0
- package/dist/security/file-permissions.d.ts +1 -1
- package/dist/security/index.js +161 -2235
- package/dist/security/permission-policy.d.ts +12 -1
- package/dist/security/secret-scrubber.d.ts +15 -0
- package/dist/session-catalog/index.d.ts +1 -0
- package/dist/session-catalog/index.js +41 -2103
- package/dist/session-catalog/project-server.js +59 -1435
- package/dist/session-catalog/protocol.d.ts +32 -1
- package/dist/session-catalog/registry.d.ts +17 -1
- package/dist/session-catalog/session-agents.d.ts +56 -0
- package/dist/session-catalog/store-rebuild.d.ts +14 -0
- package/dist/session-catalog/store-schema.d.ts +26 -0
- package/dist/session-catalog/store.d.ts +27 -1
- package/dist/session-note-attach.d.ts +9 -0
- package/dist/skills/index.js +35 -1578
- package/dist/statusline/index.d.ts +43 -0
- package/dist/statusline/index.js +102 -0
- package/dist/storage/board-store-port.d.ts +2 -2
- package/dist/storage/config-loader/in-project-policy.d.ts +29 -0
- package/dist/storage/config-loader.d.ts +3 -2
- package/dist/storage/file-session-writer.d.ts +4 -2
- package/dist/storage/goal-coordination.d.ts +6 -1
- package/dist/storage/goal-kanban.d.ts +4 -1
- package/dist/storage/index.d.ts +12 -4
- package/dist/storage/index.js +198 -15601
- package/dist/storage/input-history-store.d.ts +2 -4
- package/dist/storage/memory-curator.d.ts +133 -0
- package/dist/storage/session-agent-attribution.d.ts +39 -0
- package/dist/storage/session-doctor.d.ts +109 -0
- package/dist/storage/session-event-bridge.d.ts +5 -7
- package/dist/storage/session-outcome.d.ts +42 -0
- package/dist/storage/session-recovery.d.ts +55 -0
- package/dist/storage/session-store/load-session-data.d.ts +11 -0
- package/dist/storage/session-store/prune-helpers.d.ts +1 -1
- package/dist/storage/session-store/resume-session.d.ts +0 -2
- package/dist/storage/session-store/types.d.ts +8 -0
- package/dist/storage/session-store.d.ts +3 -3
- package/dist/storage/session-summary-tracker.d.ts +8 -1
- package/dist/storage/session-write-buffer.d.ts +18 -0
- package/dist/storage/session-writer-truncate.d.ts +2 -0
- package/dist/tasking/index.js +10 -676
- package/dist/tools/fallback-manage-tools.d.ts +6 -4
- package/dist/tools/index.js +52 -9590
- package/dist/tools/model-tier-set-tool.d.ts +66 -0
- package/dist/types/agent-bridge.d.ts +2 -1
- package/dist/types/config/autonomy.d.ts +5 -0
- package/dist/types/config/mcp-features.d.ts +7 -0
- package/dist/types/config/model-tiers.d.ts +148 -0
- package/dist/types/config/root.d.ts +9 -0
- package/dist/types/config/tools.d.ts +73 -0
- package/dist/types/config/ui.d.ts +1 -1
- package/dist/types/config.d.ts +1 -0
- package/dist/types/context.d.ts +2 -0
- package/dist/types/default-config.d.ts +6 -0
- package/dist/types/errors.d.ts +20 -1
- package/dist/types/index.d.ts +11 -9
- package/dist/types/index.js +131 -1342
- package/dist/types/multi-agent.d.ts +43 -0
- package/dist/types/plugin.d.ts +1 -1
- package/dist/types/provider-runner.d.ts +8 -0
- package/dist/types/provider.d.ts +15 -0
- package/dist/types/runtime-capability-manifest.d.ts +1 -1
- package/dist/types/secret-scrubber.d.ts +15 -0
- package/dist/types/session-markers.d.ts +37 -10
- package/dist/types/session-markers.js +8 -144
- package/dist/types/session-timeline.d.ts +197 -0
- package/dist/types/session-timeline.js +12 -0
- package/dist/types/session.d.ts +172 -11
- package/dist/types/system-prompt.d.ts +27 -0
- package/dist/utils/config-backup.d.ts +9 -1
- package/dist/utils/error.js +3 -4
- package/dist/utils/expect-defined.js +3 -9
- package/dist/utils/heap-watchdog.js +6 -706
- package/dist/utils/index.js +271 -5685
- package/dist/utils/message-invariants.d.ts +4 -1
- package/dist/utils/regex-guard.d.ts +1 -1
- package/dist/utils/sage-output-block.js +5 -42
- package/dist/utils/socket-path.d.ts +1 -1
- package/dist/utils/token-estimate.d.ts +6 -2
- package/dist/utils/wstack-paths.d.ts +2 -0
- package/dist/wiring/proxy-rewrite.d.ts +46 -0
- package/dist/wiring/proxy-rewrite.js +24 -121
- package/dist/worktree/index.js +6 -887
- package/instructions/agents/explore-companion.md +45 -18
- package/instructions/agents/memory-curator.md +34 -22
- package/instructions/coordination/director-preamble.md +12 -7
- package/instructions/coordination/subagent-baseline.md +26 -5
- package/instructions/leader-after-task.md +4 -1
- package/instructions/llm/chimera-review.md +30 -9
- package/instructions/llm/memory-curator.md +31 -0
- package/instructions/sections/tool/delegation-compact.md +2 -0
- package/instructions/sections/tool/delegation-full.md +5 -1
- package/instructions/sections/tool/mailbox-compact.md +5 -1
- package/instructions/sections/tool/mailbox-full.md +3 -0
- package/instructions/sections/tool/session-note-compact.md +3 -0
- package/instructions/sections/tool/session-note-full.md +15 -0
- package/instructions/system-lite.md +9 -4
- package/instructions/system-pro.md +66 -143
- package/instructions/system.md +73 -175
- package/package.json +32 -4
- package/dist/coordination/agents.d.ts +0 -8
- package/dist/coordination/transport.d.ts +0 -2
- package/dist/storage/session-writer/session-writer-summary-tracker.d.ts +0 -28
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ERROR_CODES,
|
|
3
|
+
WrongStackError
|
|
4
|
+
} from "./chunk-25LSLC3G.js";
|
|
5
|
+
import {
|
|
6
|
+
toErrorMessage
|
|
7
|
+
} from "./chunk-TBRL2RCC.js";
|
|
8
|
+
|
|
9
|
+
// src/kernel/run-controller.ts
|
|
10
|
+
var RunController = class {
|
|
11
|
+
ctrl = new AbortController();
|
|
12
|
+
hooks = [];
|
|
13
|
+
disposed = false;
|
|
14
|
+
hooksDrained = false;
|
|
15
|
+
errorSink;
|
|
16
|
+
/**
|
|
17
|
+
* Shared promise for the in-flight `runHooks()` call. Set by the abort
|
|
18
|
+
* signal handler or by `dispose()`, whichever fires first. Both callers
|
|
19
|
+
* await the same promise so abort-triggered async cleanup (session flush,
|
|
20
|
+
* socket close) completes before `dispose()` resolves.
|
|
21
|
+
*/
|
|
22
|
+
_hooksPromise = null;
|
|
23
|
+
constructor(opts = {}) {
|
|
24
|
+
this.errorSink = opts.errorSink ?? ((err, where) => {
|
|
25
|
+
console.warn(JSON.stringify({
|
|
26
|
+
level: "warn",
|
|
27
|
+
event: "run.cleanup_hook_failed",
|
|
28
|
+
where,
|
|
29
|
+
message: toErrorMessage(err),
|
|
30
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
31
|
+
}));
|
|
32
|
+
});
|
|
33
|
+
if (opts.parentSignal) {
|
|
34
|
+
const parent = opts.parentSignal;
|
|
35
|
+
if (parent.aborted) {
|
|
36
|
+
this.ctrl.abort(parent.reason);
|
|
37
|
+
queueMicrotask(() => {
|
|
38
|
+
void this.runHooks();
|
|
39
|
+
});
|
|
40
|
+
} else {
|
|
41
|
+
const onParentAbort = () => this.ctrl.abort(parent.reason);
|
|
42
|
+
parent.addEventListener("abort", onParentAbort, { once: true });
|
|
43
|
+
this.onAbort(() => parent.removeEventListener("abort", onParentAbort));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.ctrl.signal.addEventListener(
|
|
47
|
+
"abort",
|
|
48
|
+
() => {
|
|
49
|
+
this.ensureHooksRun();
|
|
50
|
+
},
|
|
51
|
+
{ once: true }
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
get signal() {
|
|
55
|
+
return this.ctrl.signal;
|
|
56
|
+
}
|
|
57
|
+
get aborted() {
|
|
58
|
+
return this.ctrl.signal.aborted;
|
|
59
|
+
}
|
|
60
|
+
abort(reason) {
|
|
61
|
+
if (this.ctrl.signal.aborted) return;
|
|
62
|
+
this.ctrl.abort(reason);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Register a teardown hook. Returns an unsubscribe function so callers
|
|
66
|
+
* can opt out before the hook fires (e.g. when a tool finishes cleanly
|
|
67
|
+
* before abort happens).
|
|
68
|
+
*
|
|
69
|
+
* If the controller has already drained its hooks (a prior abort() or
|
|
70
|
+
* dispose() ran), the new hook is fired immediately on a best-effort
|
|
71
|
+
* basis — otherwise a hook registered after teardown would be silently
|
|
72
|
+
* dropped and the resource it cleans up would leak. The returned
|
|
73
|
+
* unsubscribe is a no-op in that case (the hook has already run). Errors
|
|
74
|
+
* from the immediate run are routed through `errorSink` like any other
|
|
75
|
+
* cleanup failure.
|
|
76
|
+
*/
|
|
77
|
+
onAbort(fn) {
|
|
78
|
+
if (this.hooksDrained) {
|
|
79
|
+
void (async () => {
|
|
80
|
+
try {
|
|
81
|
+
await fn();
|
|
82
|
+
} catch (err) {
|
|
83
|
+
this.errorSink(err, "RunController.onAbort(post-drain)");
|
|
84
|
+
}
|
|
85
|
+
})();
|
|
86
|
+
return () => {
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
this.hooks.push(fn);
|
|
90
|
+
return () => {
|
|
91
|
+
const idx = this.hooks.indexOf(fn);
|
|
92
|
+
if (idx !== -1) this.hooks.splice(idx, 1);
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Fire cleanup hooks and tear down listeners — called when the run
|
|
97
|
+
* ends *normally* so cleanup happens regardless of outcome. Subsequent
|
|
98
|
+
* aborts become no-ops.
|
|
99
|
+
*/
|
|
100
|
+
async dispose() {
|
|
101
|
+
if (this.disposed) return;
|
|
102
|
+
this.disposed = true;
|
|
103
|
+
await this.ensureHooksRun();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Start running hooks (or wait for an already-in-flight run) and return
|
|
107
|
+
* a promise that settles when all hooks complete. Both the abort signal
|
|
108
|
+
* handler and `dispose()` call this so they share the same underlying
|
|
109
|
+
* promise — abort-triggered async cleanup (session flush, socket close)
|
|
110
|
+
* is guaranteed to finish before `dispose()` resolves.
|
|
111
|
+
*/
|
|
112
|
+
ensureHooksRun() {
|
|
113
|
+
if (!this._hooksPromise) {
|
|
114
|
+
this._hooksPromise = this.runHooks();
|
|
115
|
+
}
|
|
116
|
+
return this._hooksPromise;
|
|
117
|
+
}
|
|
118
|
+
async runHooks() {
|
|
119
|
+
if (this.hooksDrained) return;
|
|
120
|
+
this.hooksDrained = true;
|
|
121
|
+
const snapshot = this.hooks.splice(0, this.hooks.length).reverse();
|
|
122
|
+
if (snapshot.length === 0) return;
|
|
123
|
+
await Promise.allSettled(
|
|
124
|
+
snapshot.map(
|
|
125
|
+
(hook) => Promise.resolve().then(() => hook()).catch((err) => {
|
|
126
|
+
this.errorSink(err, "RunController.dispose");
|
|
127
|
+
})
|
|
128
|
+
)
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// src/kernel/tokens.ts
|
|
134
|
+
var t = (name) => /* @__PURE__ */ Symbol.for(`@wrongstack/core/kernel#${name}`);
|
|
135
|
+
var TOKENS = {
|
|
136
|
+
Logger: t("Logger"),
|
|
137
|
+
TokenCounter: t("TokenCounter"),
|
|
138
|
+
SessionStore: t("SessionStore"),
|
|
139
|
+
/**
|
|
140
|
+
* @deprecated Token name retained for compatibility.
|
|
141
|
+
* The resolved value IS a `MemoryPort`, NOT the legacy `MemoryStore` interface.
|
|
142
|
+
* Callers that cast or destructure as `MemoryStore` will lose `getCapability`,
|
|
143
|
+
* `health`, `dispose`, and the narrowed `withTraceId(): MemoryPort` return type.
|
|
144
|
+
* Port implementations are opaque — query optional features via `getCapability`.
|
|
145
|
+
* Use `TOKENS.MemoryPort` instead.
|
|
146
|
+
*/
|
|
147
|
+
MemoryStore: t("MemoryStore"),
|
|
148
|
+
/** Production memory backend. Use instead of the deprecated `MemoryStore` token. */
|
|
149
|
+
MemoryPort: t("MemoryPort"),
|
|
150
|
+
PermissionPolicy: t("PermissionPolicy"),
|
|
151
|
+
Compactor: t("Compactor"),
|
|
152
|
+
PathResolver: t("PathResolver"),
|
|
153
|
+
ConfigLoader: t("ConfigLoader"),
|
|
154
|
+
ConfigStore: t("ConfigStore"),
|
|
155
|
+
FallbackProfileManager: t("FallbackProfileManager"),
|
|
156
|
+
/** Shared (provider, model) health tracker; fallback extensions read/write it. */
|
|
157
|
+
ProviderModelStatusTracker: t("ProviderModelStatusTracker"),
|
|
158
|
+
Renderer: t("Renderer"),
|
|
159
|
+
InputReader: t("InputReader"),
|
|
160
|
+
ErrorHandler: t("ErrorHandler"),
|
|
161
|
+
RetryPolicy: t("RetryPolicy"),
|
|
162
|
+
SkillLoader: t("SkillLoader"),
|
|
163
|
+
PromptLoader: t("PromptLoader"),
|
|
164
|
+
SystemPromptBuilder: t("SystemPromptBuilder"),
|
|
165
|
+
SecretScrubber: t("SecretScrubber"),
|
|
166
|
+
ModelsRegistry: t("ModelsRegistry"),
|
|
167
|
+
ModeStore: t("ModeStore"),
|
|
168
|
+
/** Replaces the entire provider call layer — retry, streaming, tracing. */
|
|
169
|
+
ProviderRunner: t("ProviderRunner"),
|
|
170
|
+
/** Optional git-worktree lifecycle manager (per-phase isolation in Goal). */
|
|
171
|
+
WorktreeManager: t("WorktreeManager"),
|
|
172
|
+
/** Optional global Brain arbiter for policy/decision escalation. */
|
|
173
|
+
BrainArbiter: t("BrainArbiter"),
|
|
174
|
+
/** Lifecycle hook registry (shell + in-process hooks). */
|
|
175
|
+
HookRegistry: t("HookRegistry")
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// src/kernel/pipeline.ts
|
|
179
|
+
var Pipeline = class {
|
|
180
|
+
chain = [];
|
|
181
|
+
errorHandler;
|
|
182
|
+
/**
|
|
183
|
+
* Optional operational logger. When set, the `swallow` error-boundary path
|
|
184
|
+
* emits a structured warning so a swallowed middleware crash is never
|
|
185
|
+
* completely silent (P2 #7, before-release.md). Without a logger, the
|
|
186
|
+
* swallow path still works but the crash is invisible — host code should
|
|
187
|
+
* always wire one.
|
|
188
|
+
*/
|
|
189
|
+
logger;
|
|
190
|
+
/**
|
|
191
|
+
* Install an error boundary. When a middleware throws or rejects, the
|
|
192
|
+
* handler is called and decides whether to swallow (continue with the
|
|
193
|
+
* pre-handler value) or rethrow. Without a handler, errors propagate.
|
|
194
|
+
*
|
|
195
|
+
* Wire one per pipeline at boot — the host CLI typically installs a
|
|
196
|
+
* single boundary that logs to the operational log and emits a
|
|
197
|
+
* `pipeline.error` event for /diag.
|
|
198
|
+
*/
|
|
199
|
+
setErrorHandler(handler) {
|
|
200
|
+
this.errorHandler = handler;
|
|
201
|
+
return this;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Set the operational logger used by the swallow error-boundary path.
|
|
205
|
+
* Without this, a swallowed middleware crash is completely silent.
|
|
206
|
+
*/
|
|
207
|
+
setLogger(logger) {
|
|
208
|
+
this.logger = logger;
|
|
209
|
+
return this;
|
|
210
|
+
}
|
|
211
|
+
use(mw) {
|
|
212
|
+
this.ensureUnique(mw.name);
|
|
213
|
+
this.chain.push(mw);
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
prepend(mw) {
|
|
217
|
+
this.ensureUnique(mw.name);
|
|
218
|
+
this.chain.unshift(mw);
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Insert middleware at an explicit index. Out-of-range indices are clamped.
|
|
223
|
+
* Use this when insertBefore/insertAfter are insufficient (e.g. to place
|
|
224
|
+
* a middleware at a known position regardless of named targets).
|
|
225
|
+
*/
|
|
226
|
+
insertAt(index, mw) {
|
|
227
|
+
this.ensureUnique(mw.name);
|
|
228
|
+
const idx = Math.max(0, Math.min(index, this.chain.length));
|
|
229
|
+
this.chain.splice(idx, 0, mw);
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Insert mw immediately before the first occurrence of target.
|
|
234
|
+
* If called multiple times with the same target, each call inserts
|
|
235
|
+
* before the target's current position — so after insertBefore('B', X)
|
|
236
|
+
* then insertBefore('B', Y), the order is Y → X → B.
|
|
237
|
+
*/
|
|
238
|
+
insertBefore(target, mw, opts) {
|
|
239
|
+
this.ensureUnique(mw.name);
|
|
240
|
+
const idx = this.indexOf(target, opts?.optional);
|
|
241
|
+
if (idx === -1) return this;
|
|
242
|
+
this.chain.splice(idx, 0, mw);
|
|
243
|
+
return this;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Insert mw immediately after the first occurrence of target.
|
|
247
|
+
* If called multiple times with the same target, each call inserts
|
|
248
|
+
* after the target's current position — so after insertAfter('B', X)
|
|
249
|
+
* then insertAfter('B', Y), the order is B → X → Y.
|
|
250
|
+
*/
|
|
251
|
+
insertAfter(target, mw, opts) {
|
|
252
|
+
this.ensureUnique(mw.name);
|
|
253
|
+
const idx = this.indexOf(target, opts?.optional);
|
|
254
|
+
if (idx === -1) return this;
|
|
255
|
+
this.chain.splice(idx + 1, 0, mw);
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
replace(target, mw, opts) {
|
|
259
|
+
if (mw.name !== target) this.ensureUnique(mw.name);
|
|
260
|
+
const idx = this.indexOf(target, opts?.optional);
|
|
261
|
+
if (idx === -1) return this;
|
|
262
|
+
this.chain[idx] = mw;
|
|
263
|
+
return this;
|
|
264
|
+
}
|
|
265
|
+
remove(name, opts) {
|
|
266
|
+
const idx = this.indexOf(name, opts?.optional);
|
|
267
|
+
if (idx === -1) return this;
|
|
268
|
+
this.chain.splice(idx, 1);
|
|
269
|
+
return this;
|
|
270
|
+
}
|
|
271
|
+
list() {
|
|
272
|
+
return this.chain.map((m) => m.name);
|
|
273
|
+
}
|
|
274
|
+
size() {
|
|
275
|
+
return this.chain.length;
|
|
276
|
+
}
|
|
277
|
+
/** Return a read-only view suitable for passing to plugins. */
|
|
278
|
+
asReadonly() {
|
|
279
|
+
const self = this;
|
|
280
|
+
const view = Object.freeze({
|
|
281
|
+
get size() {
|
|
282
|
+
return self.chain.length;
|
|
283
|
+
},
|
|
284
|
+
list() {
|
|
285
|
+
return Object.freeze(self.chain.map((m) => m.name));
|
|
286
|
+
},
|
|
287
|
+
run(input) {
|
|
288
|
+
return self.run(input);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
return view;
|
|
292
|
+
}
|
|
293
|
+
async run(input) {
|
|
294
|
+
let index = -1;
|
|
295
|
+
const chain = this.chain;
|
|
296
|
+
const errorHandler = this.errorHandler;
|
|
297
|
+
const dispatch = async (i, value) => {
|
|
298
|
+
if (i <= index) {
|
|
299
|
+
const offender = chain[index]?.name;
|
|
300
|
+
throw new WrongStackError({
|
|
301
|
+
message: `Pipeline: next() called multiple times in "${offender}"`,
|
|
302
|
+
code: ERROR_CODES.VALIDATION_ERROR,
|
|
303
|
+
subsystem: "container",
|
|
304
|
+
context: { middleware: offender }
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
index = i;
|
|
308
|
+
const mw = chain[i];
|
|
309
|
+
if (!mw) return value;
|
|
310
|
+
try {
|
|
311
|
+
return await mw.handler(value, (v) => dispatch(i + 1, v));
|
|
312
|
+
} catch (err) {
|
|
313
|
+
if (!errorHandler) throw err;
|
|
314
|
+
const policy = await errorHandler({ middleware: mw.name, owner: mw.owner, err });
|
|
315
|
+
if (policy === "rethrow") throw err;
|
|
316
|
+
this.logger?.warn("pipeline.error", {
|
|
317
|
+
middleware: mw.name,
|
|
318
|
+
owner: mw.owner,
|
|
319
|
+
error: err instanceof Error ? err.message : String(err)
|
|
320
|
+
});
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
return dispatch(0, input);
|
|
325
|
+
}
|
|
326
|
+
indexOf(name, optional = false) {
|
|
327
|
+
const idx = this.chain.findIndex((m) => m.name === name);
|
|
328
|
+
if (idx === -1 && !optional) {
|
|
329
|
+
throw new WrongStackError({
|
|
330
|
+
message: `Pipeline: middleware "${name}" not found`,
|
|
331
|
+
code: ERROR_CODES.REGISTRY_NOT_FOUND,
|
|
332
|
+
subsystem: "container",
|
|
333
|
+
context: { middleware: name }
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
return idx;
|
|
337
|
+
}
|
|
338
|
+
ensureUnique(name) {
|
|
339
|
+
if (this.chain.some((m) => m.name === name)) {
|
|
340
|
+
throw new WrongStackError({
|
|
341
|
+
message: `Pipeline: middleware "${name}" already registered`,
|
|
342
|
+
code: ERROR_CODES.REGISTRY_DUPLICATE,
|
|
343
|
+
subsystem: "container",
|
|
344
|
+
context: { middleware: name }
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
export {
|
|
351
|
+
RunController,
|
|
352
|
+
TOKENS,
|
|
353
|
+
Pipeline
|
|
354
|
+
};
|
|
355
|
+
//# sourceMappingURL=chunk-NS52ISWS.js.map
|