@monoes/monomindcli 2.8.3 → 2.9.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/.claude/helpers/auto-memory-hook.mjs +0 -0
- package/.claude/helpers/handlers/route-handler.cjs +12 -0
- package/.claude/helpers/handlers/session-restore-handler.cjs +28 -7
- package/.claude/helpers/hook-handler.cjs +0 -0
- package/.claude/helpers/utils/micro-agents.cjs +22 -0
- package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +11 -6
- package/.claude/skills/monodesign/scripts/live-inject.mjs +20 -7
- package/.claude/skills/monodesign/scripts/live-server.mjs +38 -2
- package/LICENSE +191 -0
- package/README.md +8 -6
- package/dist/src/browser/dashboard/server.d.ts +5 -0
- package/dist/src/browser/dashboard/server.d.ts.map +1 -1
- package/dist/src/browser/dashboard/server.js +59 -4
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +18 -8
- package/dist/src/browser/workflow/store.d.ts.map +1 -1
- package/dist/src/browser/workflow/store.js +3 -2
- package/dist/src/browser/workflow/store.js.map +1 -1
- package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
- package/dist/src/capabilities/cap-documents.js +14 -9
- package/dist/src/capabilities/cap-documents.js.map +1 -1
- package/dist/src/commands/design-palette.d.ts +5 -0
- package/dist/src/commands/design-palette.d.ts.map +1 -1
- package/dist/src/commands/design-palette.js +8 -5
- package/dist/src/commands/design-palette.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +22 -18
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/download-embeddings.d.ts +8 -0
- package/dist/src/commands/download-embeddings.d.ts.map +1 -0
- package/dist/src/commands/download-embeddings.js +34 -0
- package/dist/src/commands/download-embeddings.js.map +1 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +14 -0
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init-wizard.js +1 -1
- package/dist/src/commands/init-wizard.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +48 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +35 -1
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +10 -0
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +195 -31
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts +1 -0
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +139 -3
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/route.d.ts +1 -9
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +42 -65
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/security-cve.d.ts.map +1 -1
- package/dist/src/commands/security-cve.js +2 -1
- package/dist/src/commands/security-cve.js.map +1 -1
- package/dist/src/index.d.ts +0 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -15
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/copy-assets.d.ts +17 -0
- package/dist/src/init/copy-assets.d.ts.map +1 -0
- package/dist/src/init/copy-assets.js +271 -0
- package/dist/src/init/copy-assets.js.map +1 -0
- package/dist/src/init/executor.d.ts +2 -30
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +56 -2493
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/geminimd-generator.js +2 -2
- package/dist/src/init/helpers-generator.d.ts.map +1 -1
- package/dist/src/init/helpers-generator.js +9 -0
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/kimi-generator.js +3 -3
- package/dist/src/init/kimi-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +0 -4
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/shared.d.ts +112 -0
- package/dist/src/init/shared.d.ts.map +1 -0
- package/dist/src/init/shared.js +475 -0
- package/dist/src/init/shared.js.map +1 -0
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +37 -0
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/upgrade.d.ts +34 -0
- package/dist/src/init/upgrade.d.ts.map +1 -0
- package/dist/src/init/upgrade.js +477 -0
- package/dist/src/init/upgrade.js.map +1 -0
- package/dist/src/init/write-antigravity.d.ts +13 -0
- package/dist/src/init/write-antigravity.d.ts.map +1 -0
- package/dist/src/init/write-antigravity.js +117 -0
- package/dist/src/init/write-antigravity.js.map +1 -0
- package/dist/src/init/write-capabilities.d.ts +9 -0
- package/dist/src/init/write-capabilities.d.ts.map +1 -0
- package/dist/src/init/write-capabilities.js +392 -0
- package/dist/src/init/write-capabilities.js.map +1 -0
- package/dist/src/init/write-claude.d.ts +25 -0
- package/dist/src/init/write-claude.d.ts.map +1 -0
- package/dist/src/init/write-claude.js +279 -0
- package/dist/src/init/write-claude.js.map +1 -0
- package/dist/src/init/write-kimicode.d.ts +19 -0
- package/dist/src/init/write-kimicode.d.ts.map +1 -0
- package/dist/src/init/write-kimicode.js +223 -0
- package/dist/src/init/write-kimicode.js.map +1 -0
- package/dist/src/init/write-opencode.d.ts +14 -0
- package/dist/src/init/write-opencode.d.ts.map +1 -0
- package/dist/src/init/write-opencode.js +130 -0
- package/dist/src/init/write-opencode.js.map +1 -0
- package/dist/src/init/write-runtime-config.d.ts +14 -0
- package/dist/src/init/write-runtime-config.d.ts.map +1 -0
- package/dist/src/init/write-runtime-config.js +214 -0
- package/dist/src/init/write-runtime-config.js.map +1 -0
- package/dist/src/init/write-sample-org.d.ts +9 -0
- package/dist/src/init/write-sample-org.d.ts.map +1 -0
- package/dist/src/init/write-sample-org.js +39 -0
- package/dist/src/init/write-sample-org.js.map +1 -0
- package/dist/src/knowledge/eval/golden-set.js +1 -1
- package/dist/src/knowledge/eval/golden-set.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +7 -3
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +2 -25
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -1
- package/dist/src/mcp-tools/auto-install.js +2 -1
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +26 -0
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +2 -37
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monodesign-tools.d.ts +19 -0
- package/dist/src/mcp-tools/monodesign-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monodesign-tools.js +233 -0
- package/dist/src/mcp-tools/monodesign-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts +5 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.js +177 -0
- package/dist/src/mcp-tools/monograph/agent-history-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/build-tools.d.ts +9 -0
- package/dist/src/mcp-tools/monograph/build-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/build-tools.js +299 -0
- package/dist/src/mcp-tools/monograph/build-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/group-tools.d.ts +10 -0
- package/dist/src/mcp-tools/monograph/group-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/group-tools.js +225 -0
- package/dist/src/mcp-tools/monograph/group-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/health-tools.d.ts +6 -0
- package/dist/src/mcp-tools/monograph/health-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/health-tools.js +113 -0
- package/dist/src/mcp-tools/monograph/health-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/impact-tools.d.ts +9 -0
- package/dist/src/mcp-tools/monograph/impact-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/impact-tools.js +532 -0
- package/dist/src/mcp-tools/monograph/impact-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/index.d.ts +10 -0
- package/dist/src/mcp-tools/monograph/index.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/index.js +73 -0
- package/dist/src/mcp-tools/monograph/index.js.map +1 -0
- package/dist/src/mcp-tools/monograph/query-tools.d.ts +11 -0
- package/dist/src/mcp-tools/monograph/query-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/query-tools.js +500 -0
- package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph/shared.d.ts +64 -0
- package/dist/src/mcp-tools/monograph/shared.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/shared.js +215 -0
- package/dist/src/mcp-tools/monograph/shared.js.map +1 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.d.ts +10 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.js +382 -0
- package/dist/src/mcp-tools/monograph/visualize-tools.js.map +1 -0
- package/dist/src/mcp-tools/monograph-tools.d.ts +4 -23
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +4 -2439
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/monomind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.js +13 -1
- package/dist/src/mcp-tools/monomind-tools.js.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +31 -2
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +31 -1
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +8 -27
- package/dist/src/mcp-tools/types.d.ts.map +1 -1
- package/dist/src/mcp-tools/types.js +9 -91
- package/dist/src/mcp-tools/types.js.map +1 -1
- package/dist/src/memory/file-permissions.d.ts +15 -0
- package/dist/src/memory/file-permissions.d.ts.map +1 -0
- package/dist/src/memory/file-permissions.js +25 -0
- package/dist/src/memory/file-permissions.js.map +1 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +94 -34
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-crud.d.ts.map +1 -1
- package/dist/src/memory/memory-crud.js +298 -275
- package/dist/src/memory/memory-crud.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +2 -4
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +53 -76
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/memory-migrations.d.ts +1 -14
- package/dist/src/memory/memory-migrations.d.ts.map +1 -1
- package/dist/src/memory/memory-migrations.js +52 -105
- package/dist/src/memory/memory-migrations.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +1 -1
- package/dist/src/memory/sona-optimizer.js +1 -1
- package/dist/src/monovector/index.d.ts +16 -19
- package/dist/src/monovector/index.d.ts.map +1 -1
- package/dist/src/monovector/index.js +50 -8
- package/dist/src/monovector/index.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts +16 -0
- package/dist/src/orgrt/approvals.d.ts.map +1 -0
- package/dist/src/orgrt/approvals.js +72 -0
- package/dist/src/orgrt/approvals.js.map +1 -0
- package/dist/src/orgrt/bus.d.ts.map +1 -1
- package/dist/src/orgrt/bus.js +21 -0
- package/dist/src/orgrt/bus.js.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.d.ts +19 -0
- package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -0
- package/dist/src/orgrt/checkpoint-ops.js +219 -0
- package/dist/src/orgrt/checkpoint-ops.js.map +1 -0
- package/dist/src/orgrt/checkpoint.d.ts +33 -1
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js +50 -6
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/cross-org.d.ts +32 -0
- package/dist/src/orgrt/cross-org.d.ts.map +1 -0
- package/dist/src/orgrt/cross-org.js +256 -0
- package/dist/src/orgrt/cross-org.js.map +1 -0
- package/dist/src/orgrt/daemon.d.ts +131 -157
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +356 -966
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +33 -0
- package/dist/src/orgrt/decisions.d.ts.map +1 -0
- package/dist/src/orgrt/decisions.js +169 -0
- package/dist/src/orgrt/decisions.js.map +1 -0
- package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/kimicode-runner.js +5 -1
- package/dist/src/orgrt/kimicode-runner.js.map +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/opencode-runner.js +10 -2
- package/dist/src/orgrt/opencode-runner.js.map +1 -1
- package/dist/src/orgrt/org-memory.d.ts +45 -0
- package/dist/src/orgrt/org-memory.d.ts.map +1 -0
- package/dist/src/orgrt/org-memory.js +220 -0
- package/dist/src/orgrt/org-memory.js.map +1 -0
- package/dist/src/orgrt/policy.d.ts +4 -0
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +13 -1
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/prechecks.d.ts +15 -0
- package/dist/src/orgrt/prechecks.d.ts.map +1 -0
- package/dist/src/orgrt/prechecks.js +21 -0
- package/dist/src/orgrt/prechecks.js.map +1 -0
- package/dist/src/orgrt/questions.d.ts +39 -0
- package/dist/src/orgrt/questions.d.ts.map +1 -0
- package/dist/src/orgrt/questions.js +135 -0
- package/dist/src/orgrt/questions.js.map +1 -0
- package/dist/src/orgrt/remote.d.ts +25 -0
- package/dist/src/orgrt/remote.d.ts.map +1 -0
- package/dist/src/orgrt/remote.js +73 -0
- package/dist/src/orgrt/remote.js.map +1 -0
- package/dist/src/orgrt/scheduler-integration.d.ts +19 -0
- package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -0
- package/dist/src/orgrt/scheduler-integration.js +90 -0
- package/dist/src/orgrt/scheduler-integration.js.map +1 -0
- package/dist/src/orgrt/server.d.ts.map +1 -1
- package/dist/src/orgrt/server.js +70 -2
- package/dist/src/orgrt/server.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +30 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +184 -53
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/state-detector.d.ts +19 -0
- package/dist/src/orgrt/state-detector.d.ts.map +1 -0
- package/dist/src/orgrt/state-detector.js +59 -0
- package/dist/src/orgrt/state-detector.js.map +1 -0
- package/dist/src/orgrt/task-dag.d.ts +27 -0
- package/dist/src/orgrt/task-dag.d.ts.map +1 -0
- package/dist/src/orgrt/task-dag.js +100 -0
- package/dist/src/orgrt/task-dag.js.map +1 -0
- package/dist/src/orgrt/tool-fence.d.ts +7 -4
- package/dist/src/orgrt/tool-fence.d.ts.map +1 -1
- package/dist/src/orgrt/tool-fence.js +47 -6
- package/dist/src/orgrt/tool-fence.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +57 -2
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +34 -3
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/routing/model-download.d.ts +49 -0
- package/dist/src/routing/model-download.d.ts.map +1 -0
- package/dist/src/routing/model-download.js +106 -0
- package/dist/src/routing/model-download.js.map +1 -0
- package/dist/src/services/crash-reporter.d.ts +5 -0
- package/dist/src/services/crash-reporter.d.ts.map +1 -1
- package/dist/src/services/crash-reporter.js +49 -0
- package/dist/src/services/crash-reporter.js.map +1 -1
- package/dist/src/transfer/anonymization/index.d.ts +18 -15
- package/dist/src/transfer/anonymization/index.d.ts.map +1 -1
- package/dist/src/transfer/anonymization/index.js +7 -119
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/ui/dashboard.html +606 -7
- package/dist/src/ui/orgs.html +7 -1
- package/dist/src/ui/routes-monograph.mjs +6 -0
- package/dist/src/ui/server.mjs +327 -7
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +2 -1
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts.map +1 -1
- package/dist/src/update/executor.js +7 -3
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +0 -1
- package/dist/src/update/index.d.ts.map +1 -1
- package/dist/src/update/index.js +5 -24
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/utils/db-mutex.d.ts +11 -0
- package/dist/src/utils/db-mutex.d.ts.map +1 -0
- package/dist/src/utils/db-mutex.js +23 -0
- package/dist/src/utils/db-mutex.js.map +1 -0
- package/dist/src/utils/input-guards.d.ts +23 -0
- package/dist/src/utils/input-guards.d.ts.map +1 -1
- package/dist/src/utils/input-guards.js +72 -0
- package/dist/src/utils/input-guards.js.map +1 -1
- package/dist/src/utils/npm-command.d.ts +10 -0
- package/dist/src/utils/npm-command.d.ts.map +1 -0
- package/dist/src/utils/npm-command.js +12 -0
- package/dist/src/utils/npm-command.js.map +1 -0
- package/dist/src/utils/paths.d.ts +28 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +108 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
- package/scripts/download-embedding-model.mjs +97 -0
- package/scripts/publish.sh +0 -0
- package/scripts/sync-claude-assets.sh +0 -0
- package/dist/src/production/circuit-breaker.d.ts +0 -121
- package/dist/src/production/circuit-breaker.d.ts.map +0 -1
- package/dist/src/production/circuit-breaker.js +0 -262
- package/dist/src/production/circuit-breaker.js.map +0 -1
- package/dist/src/production/error-handler.d.ts +0 -119
- package/dist/src/production/error-handler.d.ts.map +0 -1
- package/dist/src/production/error-handler.js +0 -324
- package/dist/src/production/error-handler.js.map +0 -1
- package/dist/src/production/index.d.ts +0 -6
- package/dist/src/production/index.d.ts.map +0 -1
- package/dist/src/production/index.js +0 -6
- package/dist/src/production/index.js.map +0 -1
- package/dist/src/production/monitoring.d.ts +0 -181
- package/dist/src/production/monitoring.d.ts.map +0 -1
- package/dist/src/production/monitoring.js +0 -375
- package/dist/src/production/monitoring.js.map +0 -1
- package/dist/src/production/rate-limiter.d.ts +0 -125
- package/dist/src/production/rate-limiter.d.ts.map +0 -1
- package/dist/src/production/rate-limiter.js +0 -218
- package/dist/src/production/rate-limiter.js.map +0 -1
- package/dist/src/production/retry.d.ts +0 -48
- package/dist/src/production/retry.d.ts.map +0 -1
- package/dist/src/production/retry.js +0 -189
- package/dist/src/production/retry.js.map +0 -1
- package/dist/src/transfer/types.d.ts +0 -245
- package/dist/src/transfer/types.d.ts.map +0 -1
- package/dist/src/transfer/types.js +0 -6
- package/dist/src/transfer/types.js.map +0 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SONA (Self-Optimizing Neural Architecture) Optimizer
|
|
3
3
|
*
|
|
4
4
|
* Processes trajectory outcomes to learn optimal routing patterns.
|
|
5
|
-
* Integrates with
|
|
5
|
+
* Integrates with keyword router and persistence layer.
|
|
6
6
|
*
|
|
7
7
|
* Features:
|
|
8
8
|
* - Processes trajectory outcomes from hooksTrajectoryEnd
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SONA (Self-Optimizing Neural Architecture) Optimizer
|
|
3
3
|
*
|
|
4
4
|
* Processes trajectory outcomes to learn optimal routing patterns.
|
|
5
|
-
* Integrates with
|
|
5
|
+
* Integrates with keyword router and persistence layer.
|
|
6
6
|
*
|
|
7
7
|
* Features:
|
|
8
8
|
* - Processes trajectory outcomes from hooksTrajectoryEnd
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module @monomind/cli/monovector
|
|
11
11
|
*/
|
|
12
|
+
import { type RouteOutcomeRecord } from './route-outcomes.js';
|
|
12
13
|
export { createInitState, type InitState, type InitStatus } from './init-state.js';
|
|
13
14
|
export { recordRoute, joinOutcome, joinLatestUnresolved, readOutcomes, computeRoutingAccuracy, computeAdherence, type RouteOutcomeRecord, type RoutingAccuracy, } from './route-outcomes.js';
|
|
14
15
|
export { DiffClassifier, createDiffClassifier, analyzeDiff, analyzeDiffSync, assessFileRisk, assessOverallRisk, classifyDiff, suggestReviewers, getGitDiffNumstat, getGitDiffNumstatAsync, clearDiffCache, clearAllDiffCaches, type DiffClassification, type DiffHunk, type DiffChange, type FileDiff, type DiffAnalysis, type DiffClassifierConfig, type DiffFile, type RiskLevel, type FileRisk, type OverallRisk, type DiffAnalysisResult, } from './diff-classifier.js';
|
|
@@ -17,38 +18,34 @@ export interface RouteAlternative {
|
|
|
17
18
|
route: string;
|
|
18
19
|
score?: number;
|
|
19
20
|
}
|
|
20
|
-
/** Statistics
|
|
21
|
+
/** Statistics from the route-outcomes store. */
|
|
21
22
|
export interface KeywordRouterStats {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
outcomeCount: number;
|
|
24
|
+
accuracy: number | null;
|
|
25
|
+
adherence: number | null;
|
|
26
|
+
trend: number | null;
|
|
27
|
+
byMode: {
|
|
28
|
+
native: number | null;
|
|
29
|
+
js: number | null;
|
|
30
|
+
};
|
|
29
31
|
}
|
|
30
32
|
export interface KeywordRouter {
|
|
31
|
-
route: (task: string
|
|
33
|
+
route: (task: string) => Promise<RouteDecision>;
|
|
32
34
|
initialize: () => Promise<void>;
|
|
33
|
-
getStats: () => KeywordRouterStats
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
import: (data: unknown) => void;
|
|
35
|
+
getStats: () => Promise<KeywordRouterStats>;
|
|
36
|
+
update: (task: string, agentId: string, reward: number, nextTask?: string) => Promise<void>;
|
|
37
|
+
reset: () => Promise<void>;
|
|
38
|
+
export: () => Promise<RouteOutcomeRecord[]>;
|
|
39
|
+
import: (data: RouteOutcomeRecord[]) => Promise<void>;
|
|
39
40
|
}
|
|
40
41
|
export interface RouteDecision {
|
|
41
42
|
agentType: string;
|
|
42
43
|
confidence: number;
|
|
43
44
|
reasoning?: string;
|
|
44
45
|
route: string;
|
|
45
|
-
qValues?: number[];
|
|
46
|
-
explored?: boolean;
|
|
47
46
|
alternatives?: RouteAlternative[];
|
|
48
47
|
}
|
|
49
48
|
export interface KeywordRouterConfig {
|
|
50
|
-
learningRate?: number;
|
|
51
|
-
discountFactor?: number;
|
|
52
49
|
}
|
|
53
50
|
export declare function createKeywordRouter(_config?: KeywordRouterConfig): KeywordRouter;
|
|
54
51
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAEpE,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAGD,MAAM,WAAW,aAAa;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAAE;AAG/I,MAAM,WAAW,mBAAmB;CAAkC;AAItE,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,CAwEhF"}
|
|
@@ -9,11 +9,14 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module @monomind/cli/monovector
|
|
11
11
|
*/
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { recordRoute, joinLatestUnresolved, readOutcomes, computeRoutingAccuracy, computeAdherence, } from './route-outcomes.js';
|
|
12
14
|
export { createInitState } from './init-state.js';
|
|
13
15
|
export { recordRoute, joinOutcome, joinLatestUnresolved, readOutcomes, computeRoutingAccuracy, computeAdherence, } from './route-outcomes.js';
|
|
14
16
|
export { DiffClassifier, createDiffClassifier, analyzeDiff, analyzeDiffSync, assessFileRisk, assessOverallRisk, classifyDiff, suggestReviewers, getGitDiffNumstat, getGitDiffNumstatAsync, clearDiffCache, clearAllDiffCaches, } from './diff-classifier.js';
|
|
15
17
|
export function createKeywordRouter(_config) {
|
|
16
18
|
const agentTypes = ['coder', 'tester', 'reviewer', 'architect', 'researcher', 'optimizer', 'debugger', 'documenter'];
|
|
19
|
+
const baseDir = join(process.cwd(), '.monomind');
|
|
17
20
|
return {
|
|
18
21
|
async route(task) {
|
|
19
22
|
const lower = task.toLowerCase();
|
|
@@ -37,19 +40,58 @@ export function createKeywordRouter(_config) {
|
|
|
37
40
|
confidence: 0.75,
|
|
38
41
|
reasoning: 'keyword-based routing',
|
|
39
42
|
route: agentType,
|
|
40
|
-
qValues: [],
|
|
41
|
-
explored: false,
|
|
42
43
|
alternatives: agentTypes.filter(a => a !== agentType).slice(0, 3).map(a => ({ route: a, score: 0 })),
|
|
43
44
|
};
|
|
44
45
|
},
|
|
45
46
|
async initialize() { },
|
|
46
|
-
getStats() {
|
|
47
|
-
|
|
47
|
+
async getStats() {
|
|
48
|
+
const acc = await computeRoutingAccuracy(baseDir);
|
|
49
|
+
const adh = await computeAdherence(baseDir);
|
|
50
|
+
return {
|
|
51
|
+
outcomeCount: acc.totalWithOutcome,
|
|
52
|
+
accuracy: acc.accuracy,
|
|
53
|
+
adherence: adh.adherence,
|
|
54
|
+
trend: acc.recentVsPrior,
|
|
55
|
+
byMode: acc.byMode,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
async update(task, agentId, reward) {
|
|
59
|
+
const outcome = {
|
|
60
|
+
agentActuallyUsed: agentId,
|
|
61
|
+
measuredSuccess: reward > 0,
|
|
62
|
+
quality: Math.max(-1, Math.min(1, reward)),
|
|
63
|
+
};
|
|
64
|
+
const joined = await joinLatestUnresolved(baseDir, outcome);
|
|
65
|
+
if (!joined) {
|
|
66
|
+
const { randomUUID } = await import('node:crypto');
|
|
67
|
+
const rec = {
|
|
68
|
+
routeId: randomUUID(),
|
|
69
|
+
ts: Date.now(),
|
|
70
|
+
task,
|
|
71
|
+
recommendedAgent: agentId,
|
|
72
|
+
routingMethod: 'manual-feedback',
|
|
73
|
+
confidence: 1,
|
|
74
|
+
learningMode: 'js',
|
|
75
|
+
...outcome,
|
|
76
|
+
};
|
|
77
|
+
await recordRoute(baseDir, rec);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
async reset() {
|
|
81
|
+
const { promises: fsp } = await import('node:fs');
|
|
82
|
+
await fsp.writeFile(join(baseDir, 'route-outcomes.jsonl'), '', 'utf8').catch(() => { });
|
|
83
|
+
},
|
|
84
|
+
async export() {
|
|
85
|
+
return readOutcomes(baseDir);
|
|
86
|
+
},
|
|
87
|
+
async import(data) {
|
|
88
|
+
if (!Array.isArray(data))
|
|
89
|
+
return;
|
|
90
|
+
const { promises: fsp } = await import('node:fs');
|
|
91
|
+
await fsp.mkdir(baseDir, { recursive: true });
|
|
92
|
+
const lines = data.map(r => JSON.stringify(r)).join('\n') + '\n';
|
|
93
|
+
await fsp.writeFile(join(baseDir, 'route-outcomes.jsonl'), lines, 'utf8');
|
|
48
94
|
},
|
|
49
|
-
update() { return 0; },
|
|
50
|
-
reset() { },
|
|
51
|
-
export() { return {}; },
|
|
52
|
-
import() { },
|
|
53
95
|
};
|
|
54
96
|
}
|
|
55
97
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAmC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,GAYnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OrgDaemon } from './daemon.js';
|
|
2
|
+
/** Check if an action requires human approval (beforeTool hook for guardrails). Returns
|
|
3
|
+
* the approval decision: true = approved, false = denied, null = pending (requires human input).
|
|
4
|
+
*
|
|
5
|
+
* R5: serialized per-org via withApprovalLock() — concurrent checkApproval and
|
|
6
|
+
* setApproval calls previously raced on this.approvals + approvals.json. */
|
|
7
|
+
export declare function checkApproval(daemon: OrgDaemon, org: string, role: string, action: string): Promise<boolean | null>;
|
|
8
|
+
/** Approve or deny a pending action (called by dashboard or CLI).
|
|
9
|
+
* R5: serialized per-org via withApprovalLock(). */
|
|
10
|
+
export declare function setApproval(daemon: OrgDaemon, org: string, role: string, action: string, approved: boolean): Promise<{
|
|
11
|
+
ok: true;
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
error: string;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=approvals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../../src/orgrt/approvals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;6EAI6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA6BnH;AAED;qDACqD;AACrD,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBvK"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/approvals.ts
|
|
2
|
+
// Extracted from daemon.ts — approval checking and setting for org tool calls.
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { mkdirSync } from 'node:fs';
|
|
5
|
+
import { writeJsonFileAtomic } from '../utils/json-file.js';
|
|
6
|
+
import { ORG_DIR } from './types.js';
|
|
7
|
+
/** Check if an action requires human approval (beforeTool hook for guardrails). Returns
|
|
8
|
+
* the approval decision: true = approved, false = denied, null = pending (requires human input).
|
|
9
|
+
*
|
|
10
|
+
* R5: serialized per-org via withApprovalLock() — concurrent checkApproval and
|
|
11
|
+
* setApproval calls previously raced on this.approvals + approvals.json. */
|
|
12
|
+
export function checkApproval(daemon, org, role, action) {
|
|
13
|
+
return withApprovalLock(daemon, org, async () => {
|
|
14
|
+
const pending = daemon.approvals.get(org) ?? [];
|
|
15
|
+
const existing = pending.find(a => a.roleId === role && a.action === action);
|
|
16
|
+
// If already approved/denied, return that decision
|
|
17
|
+
if (existing && existing.approved !== null)
|
|
18
|
+
return existing.approved;
|
|
19
|
+
// Require human approval for sensitive actions
|
|
20
|
+
const sensitiveActions = ['Bash', 'WebFetch', 'WebSearch', 'org_complete'];
|
|
21
|
+
if (sensitiveActions.includes(action)) {
|
|
22
|
+
// Queue for approval
|
|
23
|
+
if (!existing) {
|
|
24
|
+
pending.push({ roleId: role, action, question: `Approve ${action} tool call?`, ts: Date.now(), approved: null });
|
|
25
|
+
daemon.approvals.set(org, pending);
|
|
26
|
+
}
|
|
27
|
+
// Persist to approvals.json (C4: atomic write)
|
|
28
|
+
const approvalsPath = join(daemon.root, ORG_DIR, org, 'approvals.json');
|
|
29
|
+
mkdirSync(join(daemon.root, ORG_DIR, org), { recursive: true });
|
|
30
|
+
writeJsonFileAtomic(approvalsPath, { approvals: pending });
|
|
31
|
+
// Emit a question event for the dashboard
|
|
32
|
+
const running = daemon.orgs.get(org);
|
|
33
|
+
running?.bus.emit({ type: 'question', from: role, data: { question: `Approval required for ${action}`, action } });
|
|
34
|
+
return null; // Pending human approval
|
|
35
|
+
}
|
|
36
|
+
return true; // Auto-approved for non-sensitive actions
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Approve or deny a pending action (called by dashboard or CLI).
|
|
40
|
+
* R5: serialized per-org via withApprovalLock(). */
|
|
41
|
+
export async function setApproval(daemon, org, role, action, approved) {
|
|
42
|
+
return withApprovalLock(daemon, org, async () => {
|
|
43
|
+
const pending = daemon.approvals.get(org) ?? [];
|
|
44
|
+
const item = pending.find(a => a.roleId === role && a.action === action);
|
|
45
|
+
if (!item)
|
|
46
|
+
return { ok: false, error: `No pending approval found for ${role} action ${action}` };
|
|
47
|
+
item.approved = approved;
|
|
48
|
+
item.ts = Date.now();
|
|
49
|
+
// Persist updated approval state (C4: atomic write)
|
|
50
|
+
const approvalsPath = join(daemon.root, ORG_DIR, org, 'approvals.json');
|
|
51
|
+
writeJsonFileAtomic(approvalsPath, { approvals: pending });
|
|
52
|
+
// Notify the waiting agent via its mailbox
|
|
53
|
+
const running = daemon.orgs.get(org);
|
|
54
|
+
const agent = running?.agents.get(role);
|
|
55
|
+
if (agent && !agent.mailbox.isClosed) {
|
|
56
|
+
agent.mailbox.push(`[approval] ${action}: ${approved ? 'APPROVED' : 'DENIED'}`);
|
|
57
|
+
}
|
|
58
|
+
running?.bus.emit({ type: 'status', from: role, msg: `Approval ${approved ? 'granted' : 'denied'} for ${action}` });
|
|
59
|
+
return { ok: true };
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** R5: serialize approval mutations per org. Chains a Promise so concurrent
|
|
63
|
+
* callers run strictly in arrival order without blocking the daemon's
|
|
64
|
+
* event loop on unrelated orgs. Errors unwind the chain but don't poison
|
|
65
|
+
* future callers (the slot is reset to a resolved promise). */
|
|
66
|
+
function withApprovalLock(daemon, org, fn) {
|
|
67
|
+
const prev = daemon.approvalLocks.get(org) ?? Promise.resolve();
|
|
68
|
+
const next = prev.then(fn, fn);
|
|
69
|
+
daemon.approvalLocks.set(org, next.catch(() => { }));
|
|
70
|
+
return next;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../../src/orgrt/approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtC;;;GAGG;AACH,qBAAa,MAAM;IAOL,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAN5E,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAqB,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAE3E;IAED,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtC;;;GAGG;AACH,qBAAa,MAAM;IAOL,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAN5E,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAqB,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAE3E;IAED,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,CAqCnE;IAED;;;;4FAIwF;IACxF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAyB;IAE/C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAM1C;CACF"}
|
package/dist/src/orgrt/bus.js
CHANGED
|
@@ -41,8 +41,29 @@ export class OrgBus {
|
|
|
41
41
|
}
|
|
42
42
|
await appendFile(this.file, JSON.stringify(e) + '\n', 'utf8');
|
|
43
43
|
}).catch((err) => {
|
|
44
|
+
// R7: surface durable-log failures instead of swallowing under DEBUG.
|
|
45
|
+
// Without this, summarizeRun() reads back a partial bus.jsonl and
|
|
46
|
+
// produces wrong run summaries while the dashboard looks healthy
|
|
47
|
+
// (in-memory listeners still got the event). Emit a follow-up audit
|
|
48
|
+
// event so the loss is visible in the next-history read.
|
|
44
49
|
if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
|
|
45
50
|
console.error('[org-bus] event write failed:', err);
|
|
51
|
+
try {
|
|
52
|
+
const audit = {
|
|
53
|
+
id: `${this.run}-${Date.now()}-${this.seq++}-audit`,
|
|
54
|
+
ts: Date.now(),
|
|
55
|
+
org: this.org,
|
|
56
|
+
run: this.run,
|
|
57
|
+
type: 'audit',
|
|
58
|
+
from: 'system',
|
|
59
|
+
msg: `bus append failed: ${err instanceof Error ? err.message : String(err)}. Event id ${e.id} not persisted.`,
|
|
60
|
+
};
|
|
61
|
+
// best-effort second write — if the FS is genuinely down this also
|
|
62
|
+
// fails silently, but on transient SQLITE_BUSY-style hiccups the
|
|
63
|
+
// audit line lands and the lost event is at least attributable.
|
|
64
|
+
void appendFile(this.file, JSON.stringify(audit) + '\n', 'utf8').catch(() => { });
|
|
65
|
+
}
|
|
66
|
+
catch { /* nothing more we can do */ }
|
|
46
67
|
});
|
|
47
68
|
for (const fn of this.listeners) {
|
|
48
69
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC;;;GAGG;AACH,MAAM,OAAO,MAAM;IAOI,GAAG;IAAmB,GAAG;IAAmB,GAAG;IAN5D,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAChC,GAAG,GAAG,CAAC,CAAC;IACR,OAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC;IAChB,IAAI,CAAS;IAEtB,YAAqB,GAAW,EAAW,GAAW,EAAW,GAAW;mBAAvD,GAAG;mBAAmB,GAAG;mBAAmB,GAAG;QAClE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,CAAC,EAAY;QACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,OAAoD;QACvD,MAAM,CAAC,GAAa;YAClB,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YAC7C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,OAAO;SACX,CAAC;QACF,yCAAyC;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAAC,CAAC;YACzF,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACf,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;gBAAE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { OrgDaemon, RunningOrg } from './daemon.js';
|
|
2
|
+
/** Time-travel debugging: replay from a specific checkpoint by run ID.
|
|
3
|
+
* Creates a fresh daemon instance and replays events from the target run's bus.jsonl. */
|
|
4
|
+
export declare function replayFrom(daemon: OrgDaemon, name: string, run: string): Promise<RunningOrg | null>;
|
|
5
|
+
/** Resume a previous run from its checkpoint (runtime.json state). Reconstructs
|
|
6
|
+
* the org's agents and mailboxes from the persisted state, enabling time-travel
|
|
7
|
+
* debugging and run recovery after crashes. Returns the resumed RunningOrg or null.
|
|
8
|
+
* Pattern 3: Full state restoration including mailbox queues, policy counters,
|
|
9
|
+
* and session state with TTL and validation. */
|
|
10
|
+
export declare function resumeOrg(daemon: OrgDaemon, name: string): Promise<RunningOrg | null>;
|
|
11
|
+
/** Create a branch from a checkpoint for "what-if" experiments */
|
|
12
|
+
export declare function branchCheckpoint(daemon: OrgDaemon, name: string, run: string, branchName: string): {
|
|
13
|
+
ok: true;
|
|
14
|
+
branchRun: string;
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
error: string;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=checkpoint-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-ops.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAA0D,MAAM,aAAa,CAAC;AAGjH;0FAC0F;AAC1F,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAmDzG;AAED;;;;iDAIiD;AACjD,wBAAsB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA4I3F;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA4BjK"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/checkpoint-ops.ts
|
|
2
|
+
// Extracted from daemon.ts — replay, resume, branch checkpoint operations.
|
|
3
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, renameSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { writeJsonFileAtomic } from '../utils/json-file.js';
|
|
6
|
+
import { OrgBus } from './bus.js';
|
|
7
|
+
import { Mailbox } from './mailbox.js';
|
|
8
|
+
import { PolicyEngine } from './policy.js';
|
|
9
|
+
import { OrgDefSchema, ORG_DIR } from './types.js';
|
|
10
|
+
import { validateCheckpoint, isCheckpointExpired, restoreMailboxQueue } from './checkpoint.js';
|
|
11
|
+
import { ScrollbackBuffer, roleTokenBudget } from './daemon.js';
|
|
12
|
+
/** Time-travel debugging: replay from a specific checkpoint by run ID.
|
|
13
|
+
* Creates a fresh daemon instance and replays events from the target run's bus.jsonl. */
|
|
14
|
+
export async function replayFrom(daemon, name, run) {
|
|
15
|
+
const runDir = join(daemon.root, ORG_DIR, name, run);
|
|
16
|
+
if (!existsSync(runDir))
|
|
17
|
+
return null;
|
|
18
|
+
const busFile = join(runDir, 'bus.jsonl');
|
|
19
|
+
if (!existsSync(busFile))
|
|
20
|
+
return null;
|
|
21
|
+
// Create a replay org with a fresh run ID
|
|
22
|
+
const replayRun = `replay-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}-${Math.random().toString(36).slice(2, 6)}`;
|
|
23
|
+
const replayDir = join(daemon.root, ORG_DIR, name, replayRun);
|
|
24
|
+
mkdirSync(replayDir, { recursive: true });
|
|
25
|
+
// Read original events
|
|
26
|
+
const events = readFileSync(busFile, 'utf8').split('\n').filter(Boolean)
|
|
27
|
+
.map(l => { try {
|
|
28
|
+
return JSON.parse(l);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
} })
|
|
33
|
+
.filter((e) => e !== null);
|
|
34
|
+
if (!events.length)
|
|
35
|
+
return null;
|
|
36
|
+
// Load org definition
|
|
37
|
+
const defPath = join(daemon.root, ORG_DIR, `${name}.json`);
|
|
38
|
+
if (!existsSync(defPath))
|
|
39
|
+
return null;
|
|
40
|
+
const def = OrgDefSchema.parse(JSON.parse(readFileSync(defPath, 'utf8')));
|
|
41
|
+
// Create replay bus
|
|
42
|
+
const bus = new OrgBus(name, replayRun, replayDir);
|
|
43
|
+
const MAX_COLLECTED = 1000;
|
|
44
|
+
const collected = [];
|
|
45
|
+
bus.subscribe(e => {
|
|
46
|
+
const slim = e.data?.content != null
|
|
47
|
+
? { ...e, data: { ...e.data, content: undefined } }
|
|
48
|
+
: e;
|
|
49
|
+
collected.push(slim);
|
|
50
|
+
if (collected.length > MAX_COLLECTED)
|
|
51
|
+
collected.splice(0, collected.length - MAX_COLLECTED);
|
|
52
|
+
for (const fn of daemon.globalSubscribers)
|
|
53
|
+
fn(e);
|
|
54
|
+
});
|
|
55
|
+
const running = { def, run: replayRun, bus, agents: new Map(), busEvents: () => [...collected] };
|
|
56
|
+
// Reemit events into the replay bus with updated timestamps
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
for (const e of events) {
|
|
59
|
+
const replayEvent = { ...e, org: name, run: replayRun, ts: startTime };
|
|
60
|
+
bus.emit(replayEvent);
|
|
61
|
+
}
|
|
62
|
+
daemon.orgs.set(name, running);
|
|
63
|
+
bus.emit({ type: 'status', msg: `replay started from ${run} (${events.length} events replayed)` });
|
|
64
|
+
daemon.persistState(name, 'running', replayRun);
|
|
65
|
+
return running;
|
|
66
|
+
}
|
|
67
|
+
/** Resume a previous run from its checkpoint (runtime.json state). Reconstructs
|
|
68
|
+
* the org's agents and mailboxes from the persisted state, enabling time-travel
|
|
69
|
+
* debugging and run recovery after crashes. Returns the resumed RunningOrg or null.
|
|
70
|
+
* Pattern 3: Full state restoration including mailbox queues, policy counters,
|
|
71
|
+
* and session state with TTL and validation. */
|
|
72
|
+
export async function resumeOrg(daemon, name) {
|
|
73
|
+
const rtPath = join(daemon.root, ORG_DIR, name, 'runtime.json');
|
|
74
|
+
if (!existsSync(rtPath)) {
|
|
75
|
+
console.error('resumeOrg failed: runtime.json missing for', name);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
let rt;
|
|
79
|
+
try {
|
|
80
|
+
rt = JSON.parse(readFileSync(rtPath, 'utf8'));
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error('resumeOrg failed: invalid JSON in runtime.json for', name, err instanceof Error ? err.message : err);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
// Allow resume from 'stopped' orgs - the checkpoint contains the running state to restore
|
|
87
|
+
if (!rt?.run || !rt?.checkpoint) {
|
|
88
|
+
console.error('resumeOrg failed: invalid runtime state for', name, 'status:', rt?.status, 'run:', rt?.run, 'checkpoint:', !!rt?.checkpoint);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
// Pattern 3: Checkpoint TTL validation - expire stale checkpoints
|
|
92
|
+
if (rt.checkpoint && isCheckpointExpired(rt.checkpoint)) {
|
|
93
|
+
console.error('resumeOrg failed: checkpoint expired for', name, 'updated:', rt.checkpoint.updated);
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
// Pattern 3: Checksum validation - detect corrupted state
|
|
97
|
+
if (rt.checkpoint && !validateCheckpoint(rt.checkpoint)) {
|
|
98
|
+
console.error('resumeOrg failed: checkpoint validation failed for', name);
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
// Load the org definition
|
|
102
|
+
const defPath = join(daemon.root, ORG_DIR, `${name}.json`);
|
|
103
|
+
if (!existsSync(defPath)) {
|
|
104
|
+
console.error('resumeOrg failed: org definition missing for', name);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const def = OrgDefSchema.parse(JSON.parse(readFileSync(defPath, 'utf8')));
|
|
108
|
+
const dir = join(daemon.root, ORG_DIR, name, rt.run);
|
|
109
|
+
// Check if run directory exists
|
|
110
|
+
if (!existsSync(dir)) {
|
|
111
|
+
console.error('resumeOrg failed: run directory missing', dir);
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
// Reconstruct the bus from history
|
|
115
|
+
const bus = new OrgBus(name, rt.run, dir);
|
|
116
|
+
const MAX_COLLECTED = 1000;
|
|
117
|
+
const collected = [];
|
|
118
|
+
bus.subscribe(e => {
|
|
119
|
+
const slim = e.data?.content != null
|
|
120
|
+
? { ...e, data: { ...e.data, content: undefined } }
|
|
121
|
+
: e;
|
|
122
|
+
collected.push(slim);
|
|
123
|
+
if (collected.length > MAX_COLLECTED)
|
|
124
|
+
collected.splice(0, collected.length - MAX_COLLECTED);
|
|
125
|
+
for (const fn of daemon.globalSubscribers)
|
|
126
|
+
fn(e);
|
|
127
|
+
});
|
|
128
|
+
const running = { def, run: rt.run, bus, agents: new Map(), busEvents: () => [...collected] };
|
|
129
|
+
// Pattern 3: Full checkpoint restoration - reconstruct agents with complete state
|
|
130
|
+
if (rt.checkpoint) {
|
|
131
|
+
const checkpoint = rt.checkpoint;
|
|
132
|
+
// Reconstruct each role from checkpoint state
|
|
133
|
+
for (const [roleId, roleState] of Object.entries(checkpoint.roleState)) {
|
|
134
|
+
const role = def.roles.find(r => r.id === roleId);
|
|
135
|
+
if (!role)
|
|
136
|
+
continue; // Role no longer exists in org definition
|
|
137
|
+
const mailbox = new Mailbox();
|
|
138
|
+
const perRoleBudget = roleTokenBudget(role, def);
|
|
139
|
+
const policy = new PolicyEngine(roleId, { maxTokens: perRoleBudget, ...(role.policy ?? {}) }, bus, daemon.root);
|
|
140
|
+
const runtime = {
|
|
141
|
+
mailbox,
|
|
142
|
+
policy,
|
|
143
|
+
status: roleState.status,
|
|
144
|
+
done: Promise.resolve(),
|
|
145
|
+
metrics: { tokens: roleState.tokensUsed, costUsd: roleState.costUsd },
|
|
146
|
+
lastMessageId: roleState.lastMessageId,
|
|
147
|
+
error: roleState.error,
|
|
148
|
+
scrollback: new ScrollbackBuffer(),
|
|
149
|
+
};
|
|
150
|
+
// Restore scrollback from checkpoint if available
|
|
151
|
+
if (roleState.scrollback?.length) {
|
|
152
|
+
for (const line of roleState.scrollback)
|
|
153
|
+
runtime.scrollback.push(line);
|
|
154
|
+
}
|
|
155
|
+
// Pattern 3: Restore mailbox queue content (not just closed state)
|
|
156
|
+
if (roleState.mailboxQueue.length > 0) {
|
|
157
|
+
restoreMailboxQueue(runtime, roleState.mailboxQueue);
|
|
158
|
+
}
|
|
159
|
+
// Pattern 3: Restore mailbox closed state
|
|
160
|
+
if (roleState.mailboxClosed) {
|
|
161
|
+
mailbox.close();
|
|
162
|
+
}
|
|
163
|
+
// Pattern 3: Restore policy usage counters
|
|
164
|
+
if (roleState.tokensUsed > 0) {
|
|
165
|
+
policy.setUsage(roleState.tokensUsed);
|
|
166
|
+
}
|
|
167
|
+
running.agents.set(roleId, runtime);
|
|
168
|
+
}
|
|
169
|
+
// Set up pending roles for lazy spawn (roles not in checkpoint)
|
|
170
|
+
const reconstructedRoles = new Set(Object.keys(checkpoint.roleState));
|
|
171
|
+
const pendingRoles = new Map();
|
|
172
|
+
for (const role of def.roles) {
|
|
173
|
+
if (!reconstructedRoles.has(role.id)) {
|
|
174
|
+
pendingRoles.set(role.id, role);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (pendingRoles.size > 0) {
|
|
178
|
+
running.pendingRoles = pendingRoles;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Restore abandoned roles tracking
|
|
182
|
+
if (rt.abandonedRoles) {
|
|
183
|
+
daemon.abandoned.set(name, new Set(rt.abandonedRoles));
|
|
184
|
+
}
|
|
185
|
+
daemon.orgs.set(name, running);
|
|
186
|
+
bus.emit({ type: 'status', msg: `org resumed from checkpoint (${rt.run})` });
|
|
187
|
+
daemon.persistState(name, 'running', rt.run);
|
|
188
|
+
return running;
|
|
189
|
+
}
|
|
190
|
+
/** Create a branch from a checkpoint for "what-if" experiments */
|
|
191
|
+
export function branchCheckpoint(daemon, name, run, branchName) {
|
|
192
|
+
const runDir = join(daemon.root, ORG_DIR, name, run);
|
|
193
|
+
if (!existsSync(runDir)) {
|
|
194
|
+
return { ok: false, error: `run ${run} not found for org ${name}` };
|
|
195
|
+
}
|
|
196
|
+
const branchRun = `branch-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}-${Math.random().toString(36).slice(2, 6)}`;
|
|
197
|
+
const branchDir = join(daemon.root, ORG_DIR, name, branchRun);
|
|
198
|
+
try {
|
|
199
|
+
mkdirSync(branchDir, { recursive: true });
|
|
200
|
+
// Copy bus.jsonl to branch (C4: atomic — partial copy on crash leaves
|
|
201
|
+
// a branch that can't replay its event log).
|
|
202
|
+
const busFile = join(runDir, 'bus.jsonl');
|
|
203
|
+
if (existsSync(busFile)) {
|
|
204
|
+
const busContent = readFileSync(busFile, 'utf8');
|
|
205
|
+
const branchBusFile = join(branchDir, 'bus.jsonl');
|
|
206
|
+
// Atomic write for raw (non-JSON) content: tmp + rename.
|
|
207
|
+
const tmp = `${branchBusFile}.${process.pid}.${Date.now()}.tmp`;
|
|
208
|
+
writeFileSync(tmp, busContent, 'utf8');
|
|
209
|
+
renameSync(tmp, branchBusFile);
|
|
210
|
+
}
|
|
211
|
+
// Create branch marker file (atomic)
|
|
212
|
+
writeJsonFileAtomic(join(branchDir, '.branch-source'), { from: run, branchedAt: new Date().toISOString() });
|
|
213
|
+
return { ok: true, branchRun };
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
return { ok: false, error: `failed to create branch: ${err instanceof Error ? err.message : String(err)}` };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=checkpoint-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-ops.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"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"}
|