botmux 2.93.1 → 2.95.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/dist/adapters/backend/tmux-backend.d.ts +18 -2
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +45 -3
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +8 -0
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +1 -1
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +6 -1
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/bot-registry.d.ts +50 -1
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +30 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +11 -4
- package/dist/cli/workflow.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +146 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +28 -3
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +92 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/inherit-peer.d.ts +5 -0
- package/dist/core/inherit-peer.d.ts.map +1 -1
- package/dist/core/inherit-peer.js +3 -0
- package/dist/core/inherit-peer.js.map +1 -1
- package/dist/core/session-discovery.d.ts +9 -0
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +24 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +7 -6
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/terminal-url.d.ts.map +1 -1
- package/dist/core/terminal-url.js +15 -0
- package/dist/core/terminal-url.js.map +1 -1
- package/dist/core/trigger-session.js +2 -2
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +30 -0
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +296 -23
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +5 -0
- package/dist/dashboard/aggregator.d.ts.map +1 -1
- package/dist/dashboard/aggregator.js +7 -0
- package/dist/dashboard/aggregator.js.map +1 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +7 -1
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +2 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +2 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +14 -3
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +2 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +7 -0
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/v3-runs-api.d.ts +26 -0
- package/dist/dashboard/v3-runs-api.d.ts.map +1 -0
- package/dist/dashboard/v3-runs-api.js +67 -0
- package/dist/dashboard/v3-runs-api.js.map +1 -0
- package/dist/dashboard/web/app.js +21 -9
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +128 -33
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +42 -6
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/legacy-workflow-link.d.ts +2 -0
- package/dist/dashboard/web/legacy-workflow-link.d.ts.map +1 -0
- package/dist/dashboard/web/legacy-workflow-link.js +12 -0
- package/dist/dashboard/web/legacy-workflow-link.js.map +1 -0
- package/dist/dashboard/web/settings.d.ts.map +1 -1
- package/dist/dashboard/web/settings.js +11 -0
- package/dist/dashboard/web/settings.js.map +1 -1
- package/dist/dashboard/web/v3-terminal.d.ts +11 -0
- package/dist/dashboard/web/v3-terminal.d.ts.map +1 -0
- package/dist/dashboard/web/v3-terminal.js +143 -0
- package/dist/dashboard/web/v3-terminal.js.map +1 -0
- package/dist/dashboard/web/v3.d.ts +2 -0
- package/dist/dashboard/web/v3.d.ts.map +1 -0
- package/dist/dashboard/web/v3.js +564 -0
- package/dist/dashboard/web/v3.js.map +1 -0
- package/dist/dashboard/web/whiteboards.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards.js +14 -5
- package/dist/dashboard/web/whiteboards.js.map +1 -1
- package/dist/dashboard/web/workflows.d.ts.map +1 -1
- package/dist/dashboard/web/workflows.js +12 -8
- package/dist/dashboard/web/workflows.js.map +1 -1
- package/dist/dashboard-web/app.js +834 -724
- package/dist/dashboard-web/apple-touch-icon.png +0 -0
- package/dist/dashboard-web/favicon.png +0 -0
- package/dist/dashboard-web/index.html +3 -1
- package/dist/dashboard-web/style.css +223 -0
- package/dist/dashboard.js +170 -10
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +10 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +8 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +23 -3
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +23 -3
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +12 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +28 -0
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +3 -12
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +2 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +20 -6
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-command.js +4 -4
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +29 -1
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +35 -1
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.d.ts +28 -0
- package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-blocked-card-handler.js +134 -0
- package/dist/im/lark/v3-blocked-card-handler.js.map +1 -0
- package/dist/im/lark/v3-blocked-card.d.ts +75 -0
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -0
- package/dist/im/lark/v3-blocked-card.js +206 -0
- package/dist/im/lark/v3-blocked-card.js.map +1 -0
- package/dist/im/lark/v3-gate-card-handler.d.ts +31 -0
- package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-gate-card-handler.js +110 -0
- package/dist/im/lark/v3-gate-card-handler.js.map +1 -0
- package/dist/im/lark/v3-gate-card.d.ts +47 -0
- package/dist/im/lark/v3-gate-card.d.ts.map +1 -0
- package/dist/im/lark/v3-gate-card.js +119 -0
- package/dist/im/lark/v3-gate-card.js.map +1 -0
- package/dist/im/lark/v3-loop-grant-card-handler.d.ts +28 -0
- package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-loop-grant-card-handler.js +90 -0
- package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -0
- package/dist/im/lark/v3-loop-grant-card.d.ts +46 -0
- package/dist/im/lark/v3-loop-grant-card.d.ts.map +1 -0
- package/dist/im/lark/v3-loop-grant-card.js +119 -0
- package/dist/im/lark/v3-loop-grant-card.js.map +1 -0
- package/dist/im/lark/v3-revisit-grant-card-handler.d.ts +29 -0
- package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -0
- package/dist/im/lark/v3-revisit-grant-card-handler.js +96 -0
- package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -0
- package/dist/im/lark/v3-revisit-grant-card.d.ts +52 -0
- package/dist/im/lark/v3-revisit-grant-card.d.ts.map +1 -0
- package/dist/im/lark/v3-revisit-grant-card.js +123 -0
- package/dist/im/lark/v3-revisit-grant-card.js.map +1 -0
- package/dist/im/lark/workflow-cards.d.ts.map +1 -1
- package/dist/im/lark/workflow-cards.js +5 -1
- package/dist/im/lark/workflow-cards.js.map +1 -1
- package/dist/im/lark/workflow-progress-card.d.ts +1 -1
- package/dist/im/lark/workflow-progress-card.js +1 -1
- package/dist/im/lark/workflow-slash-command.d.ts +28 -0
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
- package/dist/im/lark/workflow-slash-command.js +61 -5
- package/dist/im/lark/workflow-slash-command.js.map +1 -1
- package/dist/platform/binding.d.ts +6 -0
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +17 -0
- package/dist/platform/binding.js.map +1 -1
- package/dist/platform/tunnel-client.d.ts +2 -0
- package/dist/platform/tunnel-client.d.ts.map +1 -1
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +1 -0
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/card-prefs-store.d.ts +4 -0
- package/dist/services/card-prefs-store.d.ts.map +1 -1
- package/dist/services/card-prefs-store.js +19 -0
- package/dist/services/card-prefs-store.js.map +1 -1
- package/dist/services/oncall-store.d.ts +25 -0
- package/dist/services/oncall-store.d.ts.map +1 -1
- package/dist/services/oncall-store.js +56 -0
- package/dist/services/oncall-store.js.map +1 -1
- package/dist/services/transcript-resolver.d.ts.map +1 -1
- package/dist/services/transcript-resolver.js +21 -4
- package/dist/services/transcript-resolver.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts +7 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +33 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +208 -4
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/terminal-favicon.d.ts +2 -0
- package/dist/utils/terminal-favicon.d.ts.map +1 -0
- package/dist/utils/terminal-favicon.js +5 -0
- package/dist/utils/terminal-favicon.js.map +1 -0
- package/dist/worker.js +152 -8
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +80 -80
- package/dist/workflows/events/payloads.d.ts +4 -4
- package/dist/workflows/events/schema.d.ts +16 -16
- package/dist/workflows/v3/architect.d.ts +37 -0
- package/dist/workflows/v3/architect.d.ts.map +1 -0
- package/dist/workflows/v3/architect.js +226 -0
- package/dist/workflows/v3/architect.js.map +1 -0
- package/dist/workflows/v3/bot-resolve.d.ts +21 -0
- package/dist/workflows/v3/bot-resolve.d.ts.map +1 -0
- package/dist/workflows/v3/bot-resolve.js +48 -0
- package/dist/workflows/v3/bot-resolve.js.map +1 -0
- package/dist/workflows/v3/cli-run.d.ts +24 -0
- package/dist/workflows/v3/cli-run.d.ts.map +1 -0
- package/dist/workflows/v3/cli-run.js +265 -0
- package/dist/workflows/v3/cli-run.js.map +1 -0
- package/dist/workflows/v3/contract.d.ts +302 -0
- package/dist/workflows/v3/contract.d.ts.map +1 -0
- package/dist/workflows/v3/contract.js +91 -0
- package/dist/workflows/v3/contract.js.map +1 -0
- package/dist/workflows/v3/daemon-run.d.ts +311 -0
- package/dist/workflows/v3/daemon-run.d.ts.map +1 -0
- package/dist/workflows/v3/daemon-run.js +775 -0
- package/dist/workflows/v3/daemon-run.js.map +1 -0
- package/dist/workflows/v3/dag.d.ts +332 -0
- package/dist/workflows/v3/dag.d.ts.map +1 -0
- package/dist/workflows/v3/dag.js +1040 -0
- package/dist/workflows/v3/dag.js.map +1 -0
- package/dist/workflows/v3/ephemeral-pool.d.ts +29 -0
- package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -0
- package/dist/workflows/v3/ephemeral-pool.js +331 -0
- package/dist/workflows/v3/ephemeral-pool.js.map +1 -0
- package/dist/workflows/v3/grill-state.d.ts +92 -0
- package/dist/workflows/v3/grill-state.d.ts.map +1 -0
- package/dist/workflows/v3/grill-state.js +151 -0
- package/dist/workflows/v3/grill-state.js.map +1 -0
- package/dist/workflows/v3/host.d.ts +88 -0
- package/dist/workflows/v3/host.d.ts.map +1 -0
- package/dist/workflows/v3/host.js +349 -0
- package/dist/workflows/v3/host.js.map +1 -0
- package/dist/workflows/v3/human-gate.d.ts +85 -0
- package/dist/workflows/v3/human-gate.d.ts.map +1 -0
- package/dist/workflows/v3/human-gate.js +153 -0
- package/dist/workflows/v3/human-gate.js.map +1 -0
- package/dist/workflows/v3/journal.d.ts +207 -0
- package/dist/workflows/v3/journal.d.ts.map +1 -0
- package/dist/workflows/v3/journal.js +74 -0
- package/dist/workflows/v3/journal.js.map +1 -0
- package/dist/workflows/v3/manifest.d.ts +17 -0
- package/dist/workflows/v3/manifest.d.ts.map +1 -0
- package/dist/workflows/v3/manifest.js +266 -0
- package/dist/workflows/v3/manifest.js.map +1 -0
- package/dist/workflows/v3/ops-projection.d.ts +110 -0
- package/dist/workflows/v3/ops-projection.d.ts.map +1 -0
- package/dist/workflows/v3/ops-projection.js +0 -0
- package/dist/workflows/v3/ops-projection.js.map +1 -0
- package/dist/workflows/v3/orchestrator.d.ts +168 -0
- package/dist/workflows/v3/orchestrator.d.ts.map +1 -0
- package/dist/workflows/v3/orchestrator.js +417 -0
- package/dist/workflows/v3/orchestrator.js.map +1 -0
- package/dist/workflows/v3/runtime.d.ts +193 -0
- package/dist/workflows/v3/runtime.d.ts.map +1 -0
- package/dist/workflows/v3/runtime.js +1284 -0
- package/dist/workflows/v3/runtime.js.map +1 -0
- package/dist/workflows/v3/spec.d.ts +32 -0
- package/dist/workflows/v3/spec.d.ts.map +1 -0
- package/dist/workflows/v3/spec.js +173 -0
- package/dist/workflows/v3/spec.js.map +1 -0
- package/dist/workflows/v3/state.d.ts +74 -0
- package/dist/workflows/v3/state.d.ts.map +1 -0
- package/dist/workflows/v3/state.js +353 -0
- package/dist/workflows/v3/state.js.map +1 -0
- package/package.json +2 -2
- package/dist/dashboard/web/workflow-catalog.d.ts +0 -2
- package/dist/dashboard/web/workflow-catalog.d.ts.map +0 -1
- package/dist/dashboard/web/workflow-catalog.js +0 -323
- package/dist/dashboard/web/workflow-catalog.js.map +0 -1
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v3 state — materialize the journal into a run snapshot + STATE checkpoint.
|
|
3
|
+
*
|
|
4
|
+
* Two-layer truth (codex v1-review blocker #1):
|
|
5
|
+
* - `journal.ndjson` (journal.ts) = append-only audit truth
|
|
6
|
+
* - `STATE` (this file) = materialized checkpoint, derived by replaying the
|
|
7
|
+
* journal. Cheap to grep, fast for the dashboard / a human to read, and
|
|
8
|
+
* re-derivable at any time so it never becomes an independent source of
|
|
9
|
+
* truth that can drift from the journal.
|
|
10
|
+
*
|
|
11
|
+
* Resume after a daemon restart replays the journal through `materialize`
|
|
12
|
+
* (correctness first); the on-disk STATE file is an observability artifact and
|
|
13
|
+
* a fast-path the runtime refreshes after every event.
|
|
14
|
+
*/
|
|
15
|
+
import { writeFileSync, renameSync, readFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
16
|
+
import { dirname } from 'node:path';
|
|
17
|
+
// ─── Materialize (replay) ────────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Fold the journal into a snapshot. Pure — same events always yield the same
|
|
20
|
+
* snapshot, which is what makes STATE safe to throw away and re-derive.
|
|
21
|
+
*
|
|
22
|
+
* Node status transitions:
|
|
23
|
+
* nodeDispatched → running (preserve gateCleared across the transition)
|
|
24
|
+
* nodeSucceeded → done
|
|
25
|
+
* nodeFailed → failed
|
|
26
|
+
* nodeBlocked → blocked
|
|
27
|
+
* nodeRetryRequested → pending (+ attempt reservation; run blocked→running)
|
|
28
|
+
* gateDispatched → gateWaiting
|
|
29
|
+
* gateResolved/ok → pending + gateCleared (next tick dispatches work)
|
|
30
|
+
* gateResolved/no → failed
|
|
31
|
+
* edgeResolved → edges[first `${from}->${to}`] (first-wins)
|
|
32
|
+
* nodeSkipped → skipped
|
|
33
|
+
* nodeCancelled → cancelled (settle-wins; late same-attempt settle ignored)
|
|
34
|
+
*/
|
|
35
|
+
export function materialize(events) {
|
|
36
|
+
const nodes = new Map();
|
|
37
|
+
const instances = new Map();
|
|
38
|
+
const attempts = new Map();
|
|
39
|
+
const loops = new Map();
|
|
40
|
+
const edges = new Map();
|
|
41
|
+
let runStatus = 'running';
|
|
42
|
+
let failedNodeId;
|
|
43
|
+
let failureReason;
|
|
44
|
+
let failureDetail;
|
|
45
|
+
let blockedNodeId;
|
|
46
|
+
const cancelledAttempts = new Map();
|
|
47
|
+
const set = (id, status, gateCleared) => {
|
|
48
|
+
const prev = nodes.get(id);
|
|
49
|
+
const next = { status };
|
|
50
|
+
// Carry an approved-gate flag forward unless this transition sets it.
|
|
51
|
+
const carried = gateCleared ?? prev?.gateCleared;
|
|
52
|
+
if (carried)
|
|
53
|
+
next.gateCleared = true;
|
|
54
|
+
// Preserve the node's effective instance pointer across status changes.
|
|
55
|
+
if (prev?.effectiveInstanceId)
|
|
56
|
+
next.effectiveInstanceId = prev.effectiveInstanceId;
|
|
57
|
+
nodes.set(id, next);
|
|
58
|
+
};
|
|
59
|
+
// Instance-layer mirror (instance restoration 2026-06-08): when a lifecycle
|
|
60
|
+
// event carries `instanceId`, record that instance's status AND point the
|
|
61
|
+
// definition node's `effectiveInstanceId` at it. Events without instanceId
|
|
62
|
+
// (loop body expansions, pre-instance-layer) skip this entirely and keep the
|
|
63
|
+
// plain nodeId-keyed behavior above.
|
|
64
|
+
const recordInstance = (nodeId, instanceId, status, makeEffective) => {
|
|
65
|
+
// A superseded instance is FROZEN: a stale late settle from its old worker
|
|
66
|
+
// (nodeSucceeded/Failed/Blocked) must NOT revive it to done/failed — the
|
|
67
|
+
// refresh state is what the dashboard shows (review blocker 1).
|
|
68
|
+
if (instances.get(instanceId)?.status === 'superseded')
|
|
69
|
+
return;
|
|
70
|
+
instances.set(instanceId, { status });
|
|
71
|
+
if (makeEffective) {
|
|
72
|
+
const prev = nodes.get(nodeId);
|
|
73
|
+
nodes.set(nodeId, { ...(prev ?? { status }), status, effectiveInstanceId: instanceId });
|
|
74
|
+
}
|
|
75
|
+
else if (nodes.get(nodeId)?.effectiveInstanceId === instanceId) {
|
|
76
|
+
// settle of the CURRENT effective instance → reflect on the node view.
|
|
77
|
+
const prev = nodes.get(nodeId);
|
|
78
|
+
nodes.set(nodeId, { ...prev, status });
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const loop = (id) => {
|
|
82
|
+
let ls = loops.get(id);
|
|
83
|
+
if (!ls) {
|
|
84
|
+
ls = { iteration: 0, decided: false, granted: 0, pendingGrant: false };
|
|
85
|
+
loops.set(id, ls);
|
|
86
|
+
}
|
|
87
|
+
return ls;
|
|
88
|
+
};
|
|
89
|
+
const terminal = (id) => {
|
|
90
|
+
const status = nodes.get(id)?.status;
|
|
91
|
+
return status === 'done' ||
|
|
92
|
+
status === 'skipped' ||
|
|
93
|
+
status === 'cancelled' ||
|
|
94
|
+
status === 'failed' ||
|
|
95
|
+
status === 'blocked';
|
|
96
|
+
};
|
|
97
|
+
// Keyed by `(instanceId ?? nodeId)` so cancelling `A#001` (an early-release
|
|
98
|
+
// loser) never suppresses `A#002`'s settle after a revisit re-dispatch.
|
|
99
|
+
const cancelledCovers = (key, attemptId) => {
|
|
100
|
+
if (!cancelledAttempts.has(key))
|
|
101
|
+
return false;
|
|
102
|
+
const cancelledAttemptId = cancelledAttempts.get(key);
|
|
103
|
+
return cancelledAttemptId === undefined || cancelledAttemptId === attemptId;
|
|
104
|
+
};
|
|
105
|
+
for (const e of events) {
|
|
106
|
+
switch (e.type) {
|
|
107
|
+
case 'runStarted':
|
|
108
|
+
runStatus = 'running';
|
|
109
|
+
break;
|
|
110
|
+
case 'nodeDispatched':
|
|
111
|
+
// Don't resurrect a cancelled early-release loser via a late dispatch.
|
|
112
|
+
// Instance-aware: only the SAME cancelled instance is blocked — a fresh
|
|
113
|
+
// instance (`A#002` after a revisit) dispatches even though `A#001` was
|
|
114
|
+
// cancelled. Legacy (no instance) keeps the node-view guard.
|
|
115
|
+
if (e.instanceId) {
|
|
116
|
+
if (instances.get(e.instanceId)?.status === 'cancelled')
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
else if (nodes.get(e.nodeId)?.status === 'cancelled')
|
|
120
|
+
break;
|
|
121
|
+
// Dispatch makes this instance the node's effective one.
|
|
122
|
+
if (e.instanceId)
|
|
123
|
+
recordInstance(e.nodeId, e.instanceId, 'running', true);
|
|
124
|
+
else
|
|
125
|
+
set(e.nodeId, 'running');
|
|
126
|
+
attempts.set(e.instanceId ?? e.nodeId, e.attemptId); // constraint 3: key by instance when present
|
|
127
|
+
break;
|
|
128
|
+
case 'nodeSucceeded':
|
|
129
|
+
if (cancelledCovers(e.instanceId ?? e.nodeId, e.attemptId))
|
|
130
|
+
break;
|
|
131
|
+
if (e.instanceId)
|
|
132
|
+
recordInstance(e.nodeId, e.instanceId, 'done', false);
|
|
133
|
+
else
|
|
134
|
+
set(e.nodeId, 'done');
|
|
135
|
+
break;
|
|
136
|
+
case 'nodeFailed':
|
|
137
|
+
if (cancelledCovers(e.instanceId ?? e.nodeId, e.attemptId))
|
|
138
|
+
break;
|
|
139
|
+
if (e.instanceId)
|
|
140
|
+
recordInstance(e.nodeId, e.instanceId, 'failed', false);
|
|
141
|
+
else
|
|
142
|
+
set(e.nodeId, 'failed');
|
|
143
|
+
break;
|
|
144
|
+
case 'nodeBlocked':
|
|
145
|
+
if (cancelledCovers(e.instanceId ?? e.nodeId, e.attemptId))
|
|
146
|
+
break;
|
|
147
|
+
if (e.instanceId)
|
|
148
|
+
recordInstance(e.nodeId, e.instanceId, 'blocked', false);
|
|
149
|
+
else
|
|
150
|
+
set(e.nodeId, 'blocked');
|
|
151
|
+
break;
|
|
152
|
+
case 'nodeRetryRequested':
|
|
153
|
+
// Replay-correct unblock (codex blocker #1 of the blocked design):
|
|
154
|
+
// the retry is a journal event, so a fresh materialize() yields
|
|
155
|
+
// pending — NOT a memory-only patch that evaporates on next replay.
|
|
156
|
+
// Constraint 5: retry is a new ATTEMPT inside the SAME instance — the
|
|
157
|
+
// node keeps its effectiveInstanceId; only its status goes pending.
|
|
158
|
+
set(e.nodeId, 'pending');
|
|
159
|
+
if (e.instanceId)
|
|
160
|
+
instances.set(e.instanceId, { status: 'pending' });
|
|
161
|
+
attempts.set(e.instanceId ?? e.nodeId, e.nextAttemptId); // constraint 3
|
|
162
|
+
if (runStatus === 'blocked') {
|
|
163
|
+
runStatus = 'running';
|
|
164
|
+
blockedNodeId = undefined;
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
// ── cross-node revisit / instance refresh ──
|
|
168
|
+
case 'nodeRevisitRequested':
|
|
169
|
+
// Audit only: the nodeInstanceSuperseded events the runtime appends
|
|
170
|
+
// right after do the actual state change. Recorded for replay /
|
|
171
|
+
// dashboard "why did this node refresh".
|
|
172
|
+
break;
|
|
173
|
+
case 'nodeInstanceSuperseded': {
|
|
174
|
+
instances.set(e.instanceId, { status: 'superseded' });
|
|
175
|
+
// If the superseded instance was the node's live one, the node re-
|
|
176
|
+
// dispatches a fresh instance: drop effectiveInstanceId + gateCleared
|
|
177
|
+
// (constraint 6: the fresh instance must re-approve its gate) and go
|
|
178
|
+
// pending so decideNext re-dispatches.
|
|
179
|
+
if (nodes.get(e.nodeId)?.effectiveInstanceId === e.instanceId) {
|
|
180
|
+
nodes.set(e.nodeId, { status: 'pending' });
|
|
181
|
+
}
|
|
182
|
+
// A refresh during a blocked run re-opens scheduling (analogue of
|
|
183
|
+
// nodeRetryRequested / loopIterationGranted).
|
|
184
|
+
if (runStatus === 'blocked' && blockedNodeId === e.nodeId) {
|
|
185
|
+
runStatus = 'running';
|
|
186
|
+
blockedNodeId = undefined;
|
|
187
|
+
}
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
case 'gateDispatched':
|
|
191
|
+
if (nodes.get(e.nodeId)?.status === 'cancelled')
|
|
192
|
+
break;
|
|
193
|
+
// Gate is per-INSTANCE (constraint 6): A#001's approval must not clear
|
|
194
|
+
// A#002. When the event carries instanceId, the gate state lives on
|
|
195
|
+
// the instance + (when effective) mirrors to the node.
|
|
196
|
+
if (e.instanceId) {
|
|
197
|
+
instances.set(e.instanceId, { status: 'gateWaiting' });
|
|
198
|
+
nodes.set(e.nodeId, { ...(nodes.get(e.nodeId) ?? {}), status: 'gateWaiting', effectiveInstanceId: e.instanceId });
|
|
199
|
+
}
|
|
200
|
+
else
|
|
201
|
+
set(e.nodeId, 'gateWaiting');
|
|
202
|
+
break;
|
|
203
|
+
case 'gateResolved': {
|
|
204
|
+
if (nodes.get(e.nodeId)?.status === 'cancelled')
|
|
205
|
+
break;
|
|
206
|
+
const approved = e.resolution === 'approved';
|
|
207
|
+
if (e.instanceId) {
|
|
208
|
+
instances.set(e.instanceId, approved ? { status: 'pending', gateCleared: true } : { status: 'failed' });
|
|
209
|
+
// Only mirror to the node view if this instance is the live one.
|
|
210
|
+
if (nodes.get(e.nodeId)?.effectiveInstanceId === e.instanceId) {
|
|
211
|
+
const prev = nodes.get(e.nodeId);
|
|
212
|
+
nodes.set(e.nodeId, approved ? { ...prev, status: 'pending', gateCleared: true } : { ...prev, status: 'failed' });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else if (approved)
|
|
216
|
+
set(e.nodeId, 'pending', true);
|
|
217
|
+
else
|
|
218
|
+
set(e.nodeId, 'failed');
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case 'edgeResolved': {
|
|
222
|
+
// Verdict is bound to the SOURCE effective instance only (code review):
|
|
223
|
+
// the edge resolves BEFORE the target dispatches, so the target has no
|
|
224
|
+
// instance yet — key is `<sourceInstance>-><targetNodeId>`. This makes
|
|
225
|
+
// `A#001->B` and `A#002->B` distinct, so a SOURCE revisit's fresh verdict
|
|
226
|
+
// is never first-wins-shadowed by the superseded one. KNOWN LIMITATION:
|
|
227
|
+
// a TARGET-only revisit (B refreshed, A unchanged) reuses `A#001->B` — to
|
|
228
|
+
// be upgraded when target-specific edge semantics actually arise.
|
|
229
|
+
// `toInstanceId` stays on the event as record-only, NOT part of the key.
|
|
230
|
+
const key = `${e.fromInstanceId ?? e.from}->${e.to}`;
|
|
231
|
+
if (!edges.has(key)) {
|
|
232
|
+
edges.set(key, { active: e.active, sourceAttemptId: e.sourceAttemptId });
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case 'nodeSkipped':
|
|
237
|
+
if (terminal(e.nodeId))
|
|
238
|
+
break;
|
|
239
|
+
set(e.nodeId, 'skipped');
|
|
240
|
+
break;
|
|
241
|
+
case 'nodeCancelled':
|
|
242
|
+
if (terminal(e.nodeId))
|
|
243
|
+
break;
|
|
244
|
+
// Suppress by instance (or nodeId fallback) so a later instance settles freely.
|
|
245
|
+
cancelledAttempts.set(e.instanceId ?? e.nodeId, e.attemptId);
|
|
246
|
+
if (e.instanceId)
|
|
247
|
+
recordInstance(e.nodeId, e.instanceId, 'cancelled', false);
|
|
248
|
+
else
|
|
249
|
+
set(e.nodeId, 'cancelled');
|
|
250
|
+
break;
|
|
251
|
+
case 'runSucceeded':
|
|
252
|
+
runStatus = 'succeeded';
|
|
253
|
+
break;
|
|
254
|
+
case 'runFailed':
|
|
255
|
+
runStatus = 'failed';
|
|
256
|
+
failedNodeId = e.failedNodeId;
|
|
257
|
+
failureReason = e.reason;
|
|
258
|
+
failureDetail = e.detail;
|
|
259
|
+
break;
|
|
260
|
+
case 'runBlocked':
|
|
261
|
+
runStatus = 'blocked';
|
|
262
|
+
blockedNodeId = e.blockedNodeId;
|
|
263
|
+
break;
|
|
264
|
+
// ── structured loop lifecycle ──
|
|
265
|
+
case 'loopStarted':
|
|
266
|
+
loop(e.loopId);
|
|
267
|
+
set(e.loopId, 'running');
|
|
268
|
+
break;
|
|
269
|
+
case 'loopIterationStarted': {
|
|
270
|
+
const ls = loop(e.loopId);
|
|
271
|
+
ls.iteration = e.iteration;
|
|
272
|
+
ls.decided = false;
|
|
273
|
+
ls.pendingGrant = false; // an unconsumed grant is consumed here
|
|
274
|
+
set(e.loopId, 'running');
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
case 'loopIterationDecision': {
|
|
278
|
+
const ls = loop(e.loopId);
|
|
279
|
+
ls.decided = true;
|
|
280
|
+
ls.lastDecision = e.decision;
|
|
281
|
+
// 'exhausted' blocks the LOOP node (the run-level runBlocked is
|
|
282
|
+
// appended by the orchestrator's blocked sweep on the next tick).
|
|
283
|
+
// 'exit' keeps the node 'running' until the orchestrator seals it
|
|
284
|
+
// with a nodeSucceeded on the loop id (output projection manifest).
|
|
285
|
+
if (e.decision === 'exhausted')
|
|
286
|
+
set(e.loopId, 'blocked');
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
case 'loopIterationGranted': {
|
|
290
|
+
// Replay-correct unblock — the loop analogue of nodeRetryRequested:
|
|
291
|
+
// a journal event, so a fresh materialize() yields a running loop.
|
|
292
|
+
const ls = loop(e.loopId);
|
|
293
|
+
ls.granted += 1;
|
|
294
|
+
ls.pendingGrant = true;
|
|
295
|
+
set(e.loopId, 'running');
|
|
296
|
+
if (runStatus === 'blocked') {
|
|
297
|
+
runStatus = 'running';
|
|
298
|
+
blockedNodeId = undefined;
|
|
299
|
+
}
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return { runStatus, failedNodeId, failureReason, failureDetail, blockedNodeId, nodes, instances, attempts, loops, edges };
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Write the snapshot to `statePath` atomically: write a sibling `.tmp` then
|
|
308
|
+
* `rename` over the target (rename is atomic on the same filesystem), so a
|
|
309
|
+
* crash mid-write never leaves a half-written STATE — readers see either the
|
|
310
|
+
* old or the new file, never a torn one.
|
|
311
|
+
*/
|
|
312
|
+
export function writeState(statePath, snap) {
|
|
313
|
+
const dir = dirname(statePath);
|
|
314
|
+
if (!existsSync(dir))
|
|
315
|
+
mkdirSync(dir, { recursive: true });
|
|
316
|
+
const file = {
|
|
317
|
+
runStatus: snap.runStatus,
|
|
318
|
+
failedNodeId: snap.failedNodeId,
|
|
319
|
+
failureReason: snap.failureReason,
|
|
320
|
+
failureDetail: snap.failureDetail,
|
|
321
|
+
blockedNodeId: snap.blockedNodeId,
|
|
322
|
+
nodes: Object.fromEntries(snap.nodes),
|
|
323
|
+
instances: snap.instances.size > 0 ? Object.fromEntries(snap.instances) : undefined,
|
|
324
|
+
attempts: Object.fromEntries(snap.attempts),
|
|
325
|
+
loops: snap.loops.size > 0 ? Object.fromEntries(snap.loops) : undefined,
|
|
326
|
+
edges: snap.edges.size > 0 ? Object.fromEntries(snap.edges) : undefined,
|
|
327
|
+
updatedAt: Date.now(),
|
|
328
|
+
};
|
|
329
|
+
const tmp = `${statePath}.tmp`;
|
|
330
|
+
writeFileSync(tmp, JSON.stringify(file, null, 2));
|
|
331
|
+
renameSync(tmp, statePath);
|
|
332
|
+
}
|
|
333
|
+
/** Read a previously-written STATE checkpoint back into a snapshot. Returns
|
|
334
|
+
* `undefined` when absent. Resume normally prefers `materialize(readJournal)`
|
|
335
|
+
* (the journal is authoritative); this is for fast reads / observability. */
|
|
336
|
+
export function readState(statePath) {
|
|
337
|
+
if (!existsSync(statePath))
|
|
338
|
+
return undefined;
|
|
339
|
+
const file = JSON.parse(readFileSync(statePath, 'utf-8'));
|
|
340
|
+
return {
|
|
341
|
+
runStatus: file.runStatus,
|
|
342
|
+
failedNodeId: file.failedNodeId,
|
|
343
|
+
failureReason: file.failureReason,
|
|
344
|
+
failureDetail: file.failureDetail,
|
|
345
|
+
blockedNodeId: file.blockedNodeId,
|
|
346
|
+
nodes: new Map(Object.entries(file.nodes)),
|
|
347
|
+
instances: new Map(Object.entries(file.instances ?? {})),
|
|
348
|
+
attempts: new Map(Object.entries(file.attempts)),
|
|
349
|
+
loops: new Map(Object.entries(file.loops ?? {})),
|
|
350
|
+
edges: new Map(Object.entries(file.edges ?? {})),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/workflows/v3/state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "botmux",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.95.0",
|
|
4
4
|
"description": "Bridge between IM platforms and AI coding CLIs — one topic, one CLI session with live streaming",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index-daemon.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
],
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "tsc && cp src/setup/lark-scopes.json dist/setup/ && pnpm dashboard:bundle && chmod +x dist/cli.js",
|
|
19
|
-
"dashboard:bundle": "esbuild src/dashboard/web/app.ts --bundle --outfile=dist/dashboard-web/app.js --platform=browser --format=iife --minify && cp src/dashboard/web/index.html dist/dashboard-web/index.html && cp src/dashboard/web/style.css dist/dashboard-web/style.css && cp src/dashboard/web/terminal-replay.html dist/dashboard-web/terminal-replay.html && rm -rf dist/dashboard-web/skins && cp -r src/dashboard/web/skins dist/dashboard-web/skins && rm -rf dist/dashboard-web/game && { [ ! -d src/dashboard/web/game ] || cp -r src/dashboard/web/game dist/dashboard-web/game; }",
|
|
19
|
+
"dashboard:bundle": "esbuild src/dashboard/web/app.ts --bundle --outfile=dist/dashboard-web/app.js --platform=browser --format=iife --minify && cp src/dashboard/web/index.html dist/dashboard-web/index.html && cp src/dashboard/web/style.css dist/dashboard-web/style.css && cp src/dashboard/web/favicon.png dist/dashboard-web/favicon.png && cp src/dashboard/web/apple-touch-icon.png dist/dashboard-web/apple-touch-icon.png && cp src/dashboard/web/terminal-replay.html dist/dashboard-web/terminal-replay.html && rm -rf dist/dashboard-web/skins && cp -r src/dashboard/web/skins dist/dashboard-web/skins && rm -rf dist/dashboard-web/game && { [ ! -d src/dashboard/web/game ] || cp -r src/dashboard/web/game dist/dashboard-web/game; }",
|
|
20
20
|
"daemon": "tsx src/index-daemon.ts",
|
|
21
21
|
"daemon:start": "node dist/cli.js start",
|
|
22
22
|
"daemon:stop": "node dist/cli.js stop",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-catalog.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/workflow-catalog.ts"],"names":[],"mappings":"AA2DA,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CAWvE"}
|