open-multi-agent-kit 0.78.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/AGENTS.md +550 -0
- package/CHANGELOG.md +464 -0
- package/CLAUDE.md +8 -0
- package/DESIGN.md +334 -0
- package/GEMINI.md +8 -0
- package/LICENSE +21 -0
- package/MATURITY.md +77 -0
- package/README.md +279 -0
- package/ROADMAP.md +130 -0
- package/SECURITY.md +83 -0
- package/WORKER_MANIFEST.md +35 -0
- package/dist/adapters/commandcode/commandcode-cli-adapter.d.ts +10 -0
- package/dist/adapters/commandcode/commandcode-cli-adapter.js +57 -0
- package/dist/adapters/kimi/ascii-art.d.ts +1 -0
- package/dist/adapters/kimi/ascii-art.js +23 -0
- package/dist/adapters/kimi/banner.d.ts +53 -0
- package/dist/adapters/kimi/banner.js +284 -0
- package/dist/adapters/kimi/bug-filter.d.ts +15 -0
- package/dist/adapters/kimi/bug-filter.js +150 -0
- package/dist/adapters/kimi/capability.d.ts +25 -0
- package/dist/adapters/kimi/capability.js +68 -0
- package/dist/adapters/kimi/continue-prompt-guard.d.ts +20 -0
- package/dist/adapters/kimi/continue-prompt-guard.js +70 -0
- package/dist/adapters/kimi/isolated-home.d.ts +21 -0
- package/dist/adapters/kimi/isolated-home.js +270 -0
- package/dist/adapters/kimi/runner.d.ts +71 -0
- package/dist/adapters/kimi/runner.js +1084 -0
- package/dist/adapters/kimi/simple-art.d.ts +1 -0
- package/dist/adapters/kimi/simple-art.js +1 -0
- package/dist/adapters/kimi/statusline.d.ts +26 -0
- package/dist/adapters/kimi/statusline.js +142 -0
- package/dist/adapters/kimi/usage.d.ts +52 -0
- package/dist/adapters/kimi/usage.js +481 -0
- package/dist/adapters/kimi/wire-client.d.ts +142 -0
- package/dist/adapters/kimi/wire-client.js +725 -0
- package/dist/adapters/kimi/wire-protocol-types.d.ts +549 -0
- package/dist/adapters/kimi/wire-protocol-types.js +59 -0
- package/dist/adapters/opencode/opencode-cli-adapter.d.ts +9 -0
- package/dist/adapters/opencode/opencode-cli-adapter.js +43 -0
- package/dist/awareness/classifiers/browser-console-classifier.d.ts +3 -0
- package/dist/awareness/classifiers/browser-console-classifier.js +47 -0
- package/dist/awareness/classifiers/evidence-gap-classifier.d.ts +3 -0
- package/dist/awareness/classifiers/evidence-gap-classifier.js +31 -0
- package/dist/awareness/classifiers/stalled-run-classifier.d.ts +2 -0
- package/dist/awareness/classifiers/stalled-run-classifier.js +24 -0
- package/dist/awareness/notice-store.d.ts +6 -0
- package/dist/awareness/notice-store.js +91 -0
- package/dist/awareness/notice.d.ts +17 -0
- package/dist/awareness/notice.js +1 -0
- package/dist/awareness/noticer-engine.d.ts +42 -0
- package/dist/awareness/noticer-engine.js +63 -0
- package/dist/awareness/router.d.ts +6 -0
- package/dist/awareness/router.js +46 -0
- package/dist/brand/matrix-rain.d.ts +15 -0
- package/dist/brand/matrix-rain.js +132 -0
- package/dist/brand/omk-matrix-art.d.ts +1 -0
- package/dist/brand/omk-matrix-art.js +10 -0
- package/dist/brand/omk-simple-art.d.ts +7 -0
- package/dist/brand/omk-simple-art.js +13 -0
- package/dist/brand/palette.d.ts +194 -0
- package/dist/brand/palette.js +53 -0
- package/dist/brand/theme.d.ts +41 -0
- package/dist/brand/theme.js +262 -0
- package/dist/browser/browser-feedback.d.ts +10 -0
- package/dist/browser/browser-feedback.js +84 -0
- package/dist/browser/browser-observer.d.ts +21 -0
- package/dist/browser/browser-observer.js +159 -0
- package/dist/browser/browser-session.d.ts +26 -0
- package/dist/browser/browser-session.js +63 -0
- package/dist/cli/command-registry.d.ts +2 -0
- package/dist/cli/command-registry.js +20 -0
- package/dist/cli/input/argv-parser.d.ts +16 -0
- package/dist/cli/input/argv-parser.js +50 -0
- package/dist/cli/input/command-envelope.d.ts +16 -0
- package/dist/cli/input/command-envelope.js +64 -0
- package/dist/cli/input/config-loader.d.ts +16 -0
- package/dist/cli/input/config-loader.js +48 -0
- package/dist/cli/input/index.d.ts +8 -0
- package/dist/cli/input/index.js +8 -0
- package/dist/cli/input/input-resolver.d.ts +13 -0
- package/dist/cli/input/input-resolver.js +50 -0
- package/dist/cli/input/validator.d.ts +10 -0
- package/dist/cli/input/validator.js +37 -0
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +34 -0
- package/dist/cli/output/error-renderer.d.ts +10 -0
- package/dist/cli/output/error-renderer.js +68 -0
- package/dist/cli/output/hash.d.ts +1 -0
- package/dist/cli/output/hash.js +10 -0
- package/dist/cli/output/index.d.ts +9 -0
- package/dist/cli/output/index.js +9 -0
- package/dist/cli/output/json-renderer.d.ts +7 -0
- package/dist/cli/output/json-renderer.js +35 -0
- package/dist/cli/output/markdown-renderer.d.ts +5 -0
- package/dist/cli/output/markdown-renderer.js +86 -0
- package/dist/cli/output/nlp-renderer.d.ts +7 -0
- package/dist/cli/output/nlp-renderer.js +96 -0
- package/dist/cli/output/output-router.d.ts +5 -0
- package/dist/cli/output/output-router.js +33 -0
- package/dist/cli/register-awareness-commands.d.ts +2 -0
- package/dist/cli/register-awareness-commands.js +133 -0
- package/dist/cli/register-basic-commands.d.ts +2 -0
- package/dist/cli/register-basic-commands.js +487 -0
- package/dist/cli/register-integration-commands.d.ts +2 -0
- package/dist/cli/register-integration-commands.js +59 -0
- package/dist/cli/register-mcp-dag-cron-screenshot-commands.d.ts +2 -0
- package/dist/cli/register-mcp-dag-cron-screenshot-commands.js +273 -0
- package/dist/cli/register-openai-codex-commands.d.ts +2 -0
- package/dist/cli/register-openai-codex-commands.js +55 -0
- package/dist/cli/register-provider-commands.d.ts +2 -0
- package/dist/cli/register-provider-commands.js +244 -0
- package/dist/cli/register-spec-agent-goal-commands.d.ts +2 -0
- package/dist/cli/register-spec-agent-goal-commands.js +441 -0
- package/dist/cli/register-tool-commands.d.ts +2 -0
- package/dist/cli/register-tool-commands.js +191 -0
- package/dist/cli/register-workflow-commands.d.ts +2 -0
- package/dist/cli/register-workflow-commands.js +157 -0
- package/dist/cli/registry/core.d.ts +2 -0
- package/dist/cli/registry/core.js +27 -0
- package/dist/cli/registry/session.d.ts +2 -0
- package/dist/cli/registry/session.js +137 -0
- package/dist/cli/registry/system.d.ts +2 -0
- package/dist/cli/registry/system.js +95 -0
- package/dist/cli/registry/tooling.d.ts +2 -0
- package/dist/cli/registry/tooling.js +111 -0
- package/dist/cli/registry/visual.d.ts +2 -0
- package/dist/cli/registry/visual.js +91 -0
- package/dist/cli/root.d.ts +10 -0
- package/dist/cli/root.js +118 -0
- package/dist/cli/runtime/capability-selector.d.ts +18 -0
- package/dist/cli/runtime/capability-selector.js +208 -0
- package/dist/cli/runtime/cli-runtime.d.ts +10 -0
- package/dist/cli/runtime/cli-runtime.js +35 -0
- package/dist/cli/runtime/cli-writer.d.ts +18 -0
- package/dist/cli/runtime/cli-writer.js +87 -0
- package/dist/cli/runtime/command-bus.d.ts +45 -0
- package/dist/cli/runtime/command-bus.js +132 -0
- package/dist/cli/runtime/event-bus.d.ts +12 -0
- package/dist/cli/runtime/event-bus.js +31 -0
- package/dist/cli/runtime/generic-provider-adapter.d.ts +24 -0
- package/dist/cli/runtime/generic-provider-adapter.js +38 -0
- package/dist/cli/runtime/index.d.ts +17 -0
- package/dist/cli/runtime/index.js +18 -0
- package/dist/cli/runtime/intent-classifier.d.ts +16 -0
- package/dist/cli/runtime/intent-classifier.js +113 -0
- package/dist/cli/runtime/plan-controller.d.ts +7 -0
- package/dist/cli/runtime/plan-controller.js +29 -0
- package/dist/cli/runtime/provider-adapter-registry.d.ts +32 -0
- package/dist/cli/runtime/provider-adapter-registry.js +60 -0
- package/dist/cli/runtime/provider-event-normalizer.d.ts +19 -0
- package/dist/cli/runtime/provider-event-normalizer.js +150 -0
- package/dist/cli/runtime/run-controller.d.ts +7 -0
- package/dist/cli/runtime/run-controller.js +30 -0
- package/dist/cli/runtime/runtime-sidecar.d.ts +17 -0
- package/dist/cli/runtime/runtime-sidecar.js +138 -0
- package/dist/cli/runtime/task-controller.d.ts +7 -0
- package/dist/cli/runtime/task-controller.js +29 -0
- package/dist/cli/runtime/types.d.ts +312 -0
- package/dist/cli/runtime/types.js +6 -0
- package/dist/cli/theme/index.d.ts +9 -0
- package/dist/cli/theme/index.js +6 -0
- package/dist/cli/theme/terminal-capability.d.ts +18 -0
- package/dist/cli/theme/terminal-capability.js +88 -0
- package/dist/cli/theme/theme-registry.d.ts +25 -0
- package/dist/cli/theme/theme-registry.js +336 -0
- package/dist/cli/theme/theme-resolver.d.ts +12 -0
- package/dist/cli/theme/theme-resolver.js +38 -0
- package/dist/cli/ui/event.d.ts +65 -0
- package/dist/cli/ui/event.js +1 -0
- package/dist/cli/ui/green-rain-renderer.d.ts +17 -0
- package/dist/cli/ui/green-rain-renderer.js +96 -0
- package/dist/cli/ui/neon-grid-renderer.d.ts +17 -0
- package/dist/cli/ui/neon-grid-renderer.js +99 -0
- package/dist/cli/ui/plain-renderer.d.ts +37 -0
- package/dist/cli/ui/plain-renderer.js +160 -0
- package/dist/cli/ui/renderer.d.ts +7 -0
- package/dist/cli/ui/renderer.js +1 -0
- package/dist/cli/ui/rich-renderer.d.ts +32 -0
- package/dist/cli/ui/rich-renderer.js +234 -0
- package/dist/cli/ui/route-blocked-panel.d.ts +5 -0
- package/dist/cli/ui/route-blocked-panel.js +67 -0
- package/dist/cli/ui/rust-forge-renderer.d.ts +19 -0
- package/dist/cli/ui/rust-forge-renderer.js +129 -0
- package/dist/cli/ui/system24-renderer.d.ts +79 -0
- package/dist/cli/ui/system24-renderer.js +508 -0
- package/dist/cli/v2/chat-repl.d.ts +37 -0
- package/dist/cli/v2/chat-repl.js +280 -0
- package/dist/cli/v2/cli-v2-skeleton.d.ts +99 -0
- package/dist/cli/v2/cli-v2-skeleton.js +350 -0
- package/dist/cli/v2/interactive-prompt.d.ts +51 -0
- package/dist/cli/v2/interactive-prompt.js +187 -0
- package/dist/cli/v2/persistent-memory.d.ts +70 -0
- package/dist/cli/v2/persistent-memory.js +229 -0
- package/dist/cli/v2/provider-commands.d.ts +120 -0
- package/dist/cli/v2/provider-commands.js +244 -0
- package/dist/cli/v2/workflow-commands.d.ts +72 -0
- package/dist/cli/v2/workflow-commands.js +198 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +17 -0
- package/dist/cockpit/git-numstat.d.ts +10 -0
- package/dist/cockpit/git-numstat.js +97 -0
- package/dist/cockpit/lsp-status.d.ts +5 -0
- package/dist/cockpit/lsp-status.js +51 -0
- package/dist/cockpit/types.d.ts +66 -0
- package/dist/cockpit/types.js +4 -0
- package/dist/cockpit/views/rail-view.d.ts +9 -0
- package/dist/cockpit/views/rail-view.js +160 -0
- package/dist/commands/agent.d.ts +6 -0
- package/dist/commands/agent.js +263 -0
- package/dist/commands/appshot.d.ts +15 -0
- package/dist/commands/appshot.js +122 -0
- package/dist/commands/auth.d.ts +43 -0
- package/dist/commands/auth.js +167 -0
- package/dist/commands/browser.d.ts +18 -0
- package/dist/commands/browser.js +110 -0
- package/dist/commands/chat/chat-turn-dag.d.ts +21 -0
- package/dist/commands/chat/chat-turn-dag.js +72 -0
- package/dist/commands/chat/core.d.ts +27 -0
- package/dist/commands/chat/core.js +418 -0
- package/dist/commands/chat/index.d.ts +5 -0
- package/dist/commands/chat/index.js +5 -0
- package/dist/commands/chat/native-root-loop.d.ts +57 -0
- package/dist/commands/chat/native-root-loop.js +1041 -0
- package/dist/commands/chat/runtime.d.ts +46 -0
- package/dist/commands/chat/runtime.js +395 -0
- package/dist/commands/chat/slash/commands/control.d.ts +2 -0
- package/dist/commands/chat/slash/commands/control.js +196 -0
- package/dist/commands/chat/slash/commands/diagnostics.d.ts +2 -0
- package/dist/commands/chat/slash/commands/diagnostics.js +64 -0
- package/dist/commands/chat/slash/commands/harness.d.ts +2 -0
- package/dist/commands/chat/slash/commands/harness.js +21 -0
- package/dist/commands/chat/slash/commands/index.d.ts +2 -0
- package/dist/commands/chat/slash/commands/index.js +18 -0
- package/dist/commands/chat/slash/commands/routing.d.ts +2 -0
- package/dist/commands/chat/slash/commands/routing.js +355 -0
- package/dist/commands/chat/slash/commands/session.d.ts +2 -0
- package/dist/commands/chat/slash/commands/session.js +86 -0
- package/dist/commands/chat/slash/commands/tool-plane.d.ts +2 -0
- package/dist/commands/chat/slash/commands/tool-plane.js +64 -0
- package/dist/commands/chat/slash/commands/ui.d.ts +2 -0
- package/dist/commands/chat/slash/commands/ui.js +108 -0
- package/dist/commands/chat/slash/context.d.ts +3 -0
- package/dist/commands/chat/slash/context.js +9 -0
- package/dist/commands/chat/slash/format.d.ts +3 -0
- package/dist/commands/chat/slash/format.js +19 -0
- package/dist/commands/chat/slash/parser.d.ts +15 -0
- package/dist/commands/chat/slash/parser.js +97 -0
- package/dist/commands/chat/slash/registry.d.ts +13 -0
- package/dist/commands/chat/slash/registry.js +38 -0
- package/dist/commands/chat/slash/result.d.ts +7 -0
- package/dist/commands/chat/slash/result.js +35 -0
- package/dist/commands/chat/slash/types.d.ts +32 -0
- package/dist/commands/chat/slash/types.js +1 -0
- package/dist/commands/chat/startup.d.ts +68 -0
- package/dist/commands/chat/startup.js +150 -0
- package/dist/commands/chat/state.d.ts +3 -0
- package/dist/commands/chat/state.js +100 -0
- package/dist/commands/chat/utils.d.ts +25 -0
- package/dist/commands/chat/utils.js +208 -0
- package/dist/commands/chat.d.ts +2 -0
- package/dist/commands/chat.js +2 -0
- package/dist/commands/cockpit/core.d.ts +5 -0
- package/dist/commands/cockpit/core.js +91 -0
- package/dist/commands/cockpit/render.d.ts +5 -0
- package/dist/commands/cockpit/render.js +931 -0
- package/dist/commands/cockpit/scroll.d.ts +39 -0
- package/dist/commands/cockpit/scroll.js +87 -0
- package/dist/commands/cockpit/telemetry.d.ts +30 -0
- package/dist/commands/cockpit/telemetry.js +361 -0
- package/dist/commands/cockpit/update-loop.d.ts +54 -0
- package/dist/commands/cockpit/update-loop.js +285 -0
- package/dist/commands/cockpit/utils.d.ts +231 -0
- package/dist/commands/cockpit/utils.js +388 -0
- package/dist/commands/cockpit.d.ts +8 -0
- package/dist/commands/cockpit.js +7 -0
- package/dist/commands/codex.d.ts +70 -0
- package/dist/commands/codex.js +597 -0
- package/dist/commands/consent.d.ts +24 -0
- package/dist/commands/consent.js +255 -0
- package/dist/commands/cron.d.ts +16 -0
- package/dist/commands/cron.js +187 -0
- package/dist/commands/dag-from-spec.d.ts +30 -0
- package/dist/commands/dag-from-spec.js +284 -0
- package/dist/commands/dag.d.ts +10 -0
- package/dist/commands/dag.js +467 -0
- package/dist/commands/design.d.ts +73 -0
- package/dist/commands/design.js +1251 -0
- package/dist/commands/diff-runs.d.ts +3 -0
- package/dist/commands/diff-runs.js +36 -0
- package/dist/commands/do.d.ts +29 -0
- package/dist/commands/do.js +196 -0
- package/dist/commands/doctor/checks.d.ts +20 -0
- package/dist/commands/doctor/checks.js +896 -0
- package/dist/commands/doctor/core.d.ts +2 -0
- package/dist/commands/doctor/core.js +53 -0
- package/dist/commands/doctor/fix-plan.d.ts +69 -0
- package/dist/commands/doctor/fix-plan.js +78 -0
- package/dist/commands/doctor/fix.d.ts +5 -0
- package/dist/commands/doctor/fix.js +1002 -0
- package/dist/commands/doctor/report.d.ts +7 -0
- package/dist/commands/doctor/report.js +151 -0
- package/dist/commands/doctor/utils.d.ts +52 -0
- package/dist/commands/doctor/utils.js +124 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +1 -0
- package/dist/commands/goal.d.ts +46 -0
- package/dist/commands/goal.js +492 -0
- package/dist/commands/google.d.ts +1 -0
- package/dist/commands/google.js +27 -0
- package/dist/commands/graph.d.ts +9 -0
- package/dist/commands/graph.js +26 -0
- package/dist/commands/hud.d.ts +57 -0
- package/dist/commands/hud.js +1031 -0
- package/dist/commands/image.d.ts +16 -0
- package/dist/commands/image.js +102 -0
- package/dist/commands/init/config.d.ts +8 -0
- package/dist/commands/init/config.js +97 -0
- package/dist/commands/init/constants.d.ts +7 -0
- package/dist/commands/init/constants.js +49 -0
- package/dist/commands/init/content.d.ts +12 -0
- package/dist/commands/init/content.js +1783 -0
- package/dist/commands/init/core.d.ts +2 -0
- package/dist/commands/init/core.js +298 -0
- package/dist/commands/init/interactive.d.ts +9 -0
- package/dist/commands/init/interactive.js +170 -0
- package/dist/commands/init/scaffold.d.ts +17 -0
- package/dist/commands/init/scaffold.js +146 -0
- package/dist/commands/init/types.d.ts +35 -0
- package/dist/commands/init/types.js +1 -0
- package/dist/commands/init/utils.d.ts +13 -0
- package/dist/commands/init/utils.js +107 -0
- package/dist/commands/init.d.ts +32 -0
- package/dist/commands/init.js +2581 -0
- package/dist/commands/inspect.d.ts +9 -0
- package/dist/commands/inspect.js +12 -0
- package/dist/commands/lsp.d.ts +8 -0
- package/dist/commands/lsp.js +60 -0
- package/dist/commands/mcp.d.ts +104 -0
- package/dist/commands/mcp.js +1603 -0
- package/dist/commands/menu.d.ts +4 -0
- package/dist/commands/menu.js +213 -0
- package/dist/commands/merge.d.ts +8 -0
- package/dist/commands/merge.js +229 -0
- package/dist/commands/mode.d.ts +3 -0
- package/dist/commands/mode.js +60 -0
- package/dist/commands/model.d.ts +15 -0
- package/dist/commands/model.js +215 -0
- package/dist/commands/notice.d.ts +7 -0
- package/dist/commands/notice.js +76 -0
- package/dist/commands/open-design-agent.d.ts +46 -0
- package/dist/commands/open-design-agent.js +569 -0
- package/dist/commands/orchestrate.d.ts +18 -0
- package/dist/commands/orchestrate.js +284 -0
- package/dist/commands/parallel/core.d.ts +34 -0
- package/dist/commands/parallel/core.js +296 -0
- package/dist/commands/parallel/index.d.ts +5 -0
- package/dist/commands/parallel/index.js +5 -0
- package/dist/commands/parallel/interactive.d.ts +27 -0
- package/dist/commands/parallel/interactive.js +172 -0
- package/dist/commands/parallel/orchestrator.d.ts +40 -0
- package/dist/commands/parallel/orchestrator.js +564 -0
- package/dist/commands/parallel/utils.d.ts +12 -0
- package/dist/commands/parallel/utils.js +114 -0
- package/dist/commands/parallel/worker.d.ts +43 -0
- package/dist/commands/parallel/worker.js +276 -0
- package/dist/commands/parallel.d.ts +4 -0
- package/dist/commands/parallel.js +3 -0
- package/dist/commands/plan.d.ts +6 -0
- package/dist/commands/plan.js +113 -0
- package/dist/commands/project-index.d.ts +18 -0
- package/dist/commands/project-index.js +312 -0
- package/dist/commands/provider.d.ts +65 -0
- package/dist/commands/provider.js +619 -0
- package/dist/commands/rail.d.ts +6 -0
- package/dist/commands/rail.js +7 -0
- package/dist/commands/replay.d.ts +7 -0
- package/dist/commands/replay.js +10 -0
- package/dist/commands/research.d.ts +5 -0
- package/dist/commands/research.js +48 -0
- package/dist/commands/run.d.ts +15 -0
- package/dist/commands/run.js +312 -0
- package/dist/commands/runs.d.ts +36 -0
- package/dist/commands/runs.js +504 -0
- package/dist/commands/screenshot.d.ts +10 -0
- package/dist/commands/screenshot.js +72 -0
- package/dist/commands/skill.d.ts +28 -0
- package/dist/commands/skill.js +382 -0
- package/dist/commands/snip.d.ts +8 -0
- package/dist/commands/snip.js +77 -0
- package/dist/commands/spec.d.ts +17 -0
- package/dist/commands/spec.js +262 -0
- package/dist/commands/specify.d.ts +18 -0
- package/dist/commands/specify.js +111 -0
- package/dist/commands/star.d.ts +3 -0
- package/dist/commands/star.js +30 -0
- package/dist/commands/summary.d.ts +2 -0
- package/dist/commands/summary.js +343 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.js +129 -0
- package/dist/commands/team.d.ts +7 -0
- package/dist/commands/team.js +264 -0
- package/dist/commands/verify.d.ts +4 -0
- package/dist/commands/verify.js +320 -0
- package/dist/commands/version.d.ts +6 -0
- package/dist/commands/version.js +83 -0
- package/dist/commands/web-bridge.d.ts +12 -0
- package/dist/commands/web-bridge.js +75 -0
- package/dist/commands/why.d.ts +14 -0
- package/dist/commands/why.js +46 -0
- package/dist/commands/workflow.d.ts +13 -0
- package/dist/commands/workflow.js +385 -0
- package/dist/contracts/dag.d.ts +134 -0
- package/dist/contracts/dag.js +4 -0
- package/dist/contracts/decision.d.ts +23 -0
- package/dist/contracts/decision.js +1 -0
- package/dist/contracts/envelope.d.ts +29 -0
- package/dist/contracts/envelope.js +1 -0
- package/dist/contracts/errors.d.ts +13 -0
- package/dist/contracts/errors.js +15 -0
- package/dist/contracts/evidence.d.ts +23 -0
- package/dist/contracts/evidence.js +1 -0
- package/dist/contracts/goal.d.ts +169 -0
- package/dist/contracts/goal.js +4 -0
- package/dist/contracts/hud.d.ts +17 -0
- package/dist/contracts/hud.js +4 -0
- package/dist/contracts/index.d.ts +8 -0
- package/dist/contracts/index.js +8 -0
- package/dist/contracts/orchestration.d.ts +215 -0
- package/dist/contracts/orchestration.js +4 -0
- package/dist/contracts/proof.d.ts +32 -0
- package/dist/contracts/proof.js +1 -0
- package/dist/contracts/provider.d.ts +35 -0
- package/dist/contracts/provider.js +1 -0
- package/dist/contracts/replay.d.ts +95 -0
- package/dist/contracts/replay.js +7 -0
- package/dist/contracts/run.d.ts +34 -0
- package/dist/contracts/run.js +1 -0
- package/dist/contracts/safety.d.ts +10 -0
- package/dist/contracts/safety.js +4 -0
- package/dist/contracts/version.d.ts +21 -0
- package/dist/contracts/version.js +1 -0
- package/dist/contracts/web-bridge.d.ts +95 -0
- package/dist/contracts/web-bridge.js +168 -0
- package/dist/contracts/worker-context.d.ts +70 -0
- package/dist/contracts/worker-context.js +1 -0
- package/dist/evidence/attempt-record.d.ts +78 -0
- package/dist/evidence/attempt-record.js +16 -0
- package/dist/evidence/context-snapshot.d.ts +20 -0
- package/dist/evidence/context-snapshot.js +81 -0
- package/dist/evidence/decision-trace.d.ts +14 -0
- package/dist/evidence/decision-trace.js +54 -0
- package/dist/evidence/diagnosis.d.ts +15 -0
- package/dist/evidence/diagnosis.js +279 -0
- package/dist/evidence/evidence-recorder.d.ts +19 -0
- package/dist/evidence/evidence-recorder.js +55 -0
- package/dist/evidence/index.d.ts +15 -0
- package/dist/evidence/index.js +7 -0
- package/dist/evidence/run-trace.d.ts +103 -0
- package/dist/evidence/run-trace.js +191 -0
- package/dist/goal/compiler.d.ts +5 -0
- package/dist/goal/compiler.js +350 -0
- package/dist/goal/control-loop.d.ts +109 -0
- package/dist/goal/control-loop.js +1089 -0
- package/dist/goal/ensemble-memory.d.ts +26 -0
- package/dist/goal/ensemble-memory.js +55 -0
- package/dist/goal/eval-criteria.d.ts +3 -0
- package/dist/goal/eval-criteria.js +72 -0
- package/dist/goal/evidence.d.ts +20 -0
- package/dist/goal/evidence.js +321 -0
- package/dist/goal/goal-daemon.d.ts +40 -0
- package/dist/goal/goal-daemon.js +318 -0
- package/dist/goal/intake.d.ts +48 -0
- package/dist/goal/intake.js +561 -0
- package/dist/goal/intent-analyzer.d.ts +9 -0
- package/dist/goal/intent-analyzer.js +322 -0
- package/dist/goal/intent-frame.d.ts +35 -0
- package/dist/goal/intent-frame.js +566 -0
- package/dist/goal/persistence.d.ts +11 -0
- package/dist/goal/persistence.js +134 -0
- package/dist/goal/prompt-digest.d.ts +13 -0
- package/dist/goal/prompt-digest.js +111 -0
- package/dist/goal/scoring.d.ts +2 -0
- package/dist/goal/scoring.js +69 -0
- package/dist/goal/wake-policy.d.ts +26 -0
- package/dist/goal/wake-policy.js +58 -0
- package/dist/harness/create-harness-task-runner.d.ts +43 -0
- package/dist/harness/create-harness-task-runner.js +56 -0
- package/dist/harness/execute-harness-run.d.ts +34 -0
- package/dist/harness/execute-harness-run.js +109 -0
- package/dist/hooks/events.d.ts +71 -0
- package/dist/hooks/events.js +1 -0
- package/dist/hooks/hook-bus.d.ts +13 -0
- package/dist/hooks/hook-bus.js +59 -0
- package/dist/hooks/hook-registry.d.ts +6 -0
- package/dist/hooks/hook-registry.js +64 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hud/index.d.ts +9 -0
- package/dist/hud/index.js +11 -0
- package/dist/hud/live-renderer.d.ts +17 -0
- package/dist/hud/live-renderer.js +52 -0
- package/dist/hud/render.d.ts +62 -0
- package/dist/hud/render.js +954 -0
- package/dist/hud/types.d.ts +58 -0
- package/dist/hud/types.js +7 -0
- package/dist/input/input-artifacts.d.ts +10 -0
- package/dist/input/input-artifacts.js +19 -0
- package/dist/input/input-envelope.d.ts +64 -0
- package/dist/input/input-envelope.js +86 -0
- package/dist/integrations/servarr/adapter.d.ts +29 -0
- package/dist/integrations/servarr/adapter.js +156 -0
- package/dist/integrations/servarr/commands.d.ts +15 -0
- package/dist/integrations/servarr/commands.js +119 -0
- package/dist/integrations/servarr/schema.d.ts +34 -0
- package/dist/integrations/servarr/schema.js +149 -0
- package/dist/kimi/ascii-art.d.ts +1 -0
- package/dist/kimi/ascii-art.js +23 -0
- package/dist/kimi/banner.d.ts +53 -0
- package/dist/kimi/banner.js +284 -0
- package/dist/kimi/bug-filter.d.ts +15 -0
- package/dist/kimi/bug-filter.js +150 -0
- package/dist/kimi/capability.d.ts +25 -0
- package/dist/kimi/capability.js +68 -0
- package/dist/kimi/isolated-home.d.ts +21 -0
- package/dist/kimi/isolated-home.js +270 -0
- package/dist/kimi/runner.d.ts +74 -0
- package/dist/kimi/runner.js +1052 -0
- package/dist/kimi/simple-art.d.ts +1 -0
- package/dist/kimi/simple-art.js +1 -0
- package/dist/kimi/statusline.d.ts +26 -0
- package/dist/kimi/statusline.js +142 -0
- package/dist/kimi/usage.d.ts +52 -0
- package/dist/kimi/usage.js +481 -0
- package/dist/kimi/wire-client.d.ts +95 -0
- package/dist/kimi/wire-client.js +338 -0
- package/dist/lsp/default-config.d.ts +16 -0
- package/dist/lsp/default-config.js +26 -0
- package/dist/mcp/acp-server.d.ts +2 -0
- package/dist/mcp/acp-server.js +357 -0
- package/dist/mcp/autoconnect.d.ts +60 -0
- package/dist/mcp/autoconnect.js +192 -0
- package/dist/mcp/client.d.ts +112 -0
- package/dist/mcp/client.js +276 -0
- package/dist/mcp/config-permissions.d.ts +23 -0
- package/dist/mcp/config-permissions.js +66 -0
- package/dist/mcp/consent-flow.d.ts +152 -0
- package/dist/mcp/consent-flow.js +329 -0
- package/dist/mcp/filesystem-readonly-server.d.ts +2 -0
- package/dist/mcp/filesystem-readonly-server.js +320 -0
- package/dist/mcp/governance.d.ts +292 -0
- package/dist/mcp/governance.js +602 -0
- package/dist/mcp/host.d.ts +154 -0
- package/dist/mcp/host.js +792 -0
- package/dist/mcp/omk-project-server.d.ts +2 -0
- package/dist/mcp/omk-project-server.js +1632 -0
- package/dist/mcp/omk-web-bridge-server.d.ts +14 -0
- package/dist/mcp/omk-web-bridge-server.js +154 -0
- package/dist/mcp/permission-resolver.d.ts +67 -0
- package/dist/mcp/permission-resolver.js +124 -0
- package/dist/mcp/quality-gate.d.ts +36 -0
- package/dist/mcp/quality-gate.js +247 -0
- package/dist/mcp/quarantine.d.ts +11 -0
- package/dist/mcp/quarantine.js +79 -0
- package/dist/mcp/secret-scanner.d.ts +189 -0
- package/dist/mcp/secret-scanner.js +709 -0
- package/dist/mcp/server-catalog.d.ts +36 -0
- package/dist/mcp/server-catalog.js +168 -0
- package/dist/mcp/shared-secret-registry.d.ts +61 -0
- package/dist/mcp/shared-secret-registry.js +171 -0
- package/dist/mcp/transports/stdio.d.ts +22 -0
- package/dist/mcp/transports/stdio.js +165 -0
- package/dist/mcp/transports/streamable-http.d.ts +31 -0
- package/dist/mcp/transports/streamable-http.js +289 -0
- package/dist/mcp/transports/transport.d.ts +20 -0
- package/dist/mcp/transports/transport.js +3 -0
- package/dist/memory/embedding.d.ts +11 -0
- package/dist/memory/embedding.js +24 -0
- package/dist/memory/graph-viewer.d.ts +72 -0
- package/dist/memory/graph-viewer.js +402 -0
- package/dist/memory/kuzu-memory-store.d.ts +37 -0
- package/dist/memory/kuzu-memory-store.js +453 -0
- package/dist/memory/local-graph-memory-store.d.ts +141 -0
- package/dist/memory/local-graph-memory-store.js +884 -0
- package/dist/memory/memory-config.d.ts +51 -0
- package/dist/memory/memory-config.js +187 -0
- package/dist/memory/memory-store.d.ts +48 -0
- package/dist/memory/memory-store.js +210 -0
- package/dist/memory/ontology-model.d.ts +175 -0
- package/dist/memory/ontology-model.js +131 -0
- package/dist/native/linux-x64/omk-safety +0 -0
- package/dist/openai/image-client.d.ts +103 -0
- package/dist/openai/image-client.js +380 -0
- package/dist/orchestration/agent-worker.d.ts +72 -0
- package/dist/orchestration/agent-worker.js +278 -0
- package/dist/orchestration/capability-agents.d.ts +14 -0
- package/dist/orchestration/capability-agents.js +180 -0
- package/dist/orchestration/capability-routing.d.ts +42 -0
- package/dist/orchestration/capability-routing.js +65 -0
- package/dist/orchestration/compiled-dag-executor.d.ts +56 -0
- package/dist/orchestration/compiled-dag-executor.js +88 -0
- package/dist/orchestration/completion-artifacts.d.ts +37 -0
- package/dist/orchestration/completion-artifacts.js +84 -0
- package/dist/orchestration/completion-sentinel.d.ts +37 -0
- package/dist/orchestration/completion-sentinel.js +66 -0
- package/dist/orchestration/contracts/index.d.ts +45 -0
- package/dist/orchestration/contracts/index.js +6 -0
- package/dist/orchestration/dag-artifacts.d.ts +11 -0
- package/dist/orchestration/dag-artifacts.js +42 -0
- package/dist/orchestration/dag-compiler-presets.d.ts +20 -0
- package/dist/orchestration/dag-compiler-presets.js +476 -0
- package/dist/orchestration/dag-compiler-types.d.ts +40 -0
- package/dist/orchestration/dag-compiler-types.js +1 -0
- package/dist/orchestration/dag-compiler.d.ts +3 -0
- package/dist/orchestration/dag-compiler.js +122 -0
- package/dist/orchestration/dag.d.ts +158 -0
- package/dist/orchestration/dag.js +310 -0
- package/dist/orchestration/diagnostics.d.ts +27 -0
- package/dist/orchestration/diagnostics.js +262 -0
- package/dist/orchestration/enhanced-modes.d.ts +116 -0
- package/dist/orchestration/enhanced-modes.js +231 -0
- package/dist/orchestration/enhanced-parallel-orchestrator.d.ts +127 -0
- package/dist/orchestration/enhanced-parallel-orchestrator.js +734 -0
- package/dist/orchestration/ensemble-decision.d.ts +40 -0
- package/dist/orchestration/ensemble-decision.js +297 -0
- package/dist/orchestration/ensemble.d.ts +22 -0
- package/dist/orchestration/ensemble.js +558 -0
- package/dist/orchestration/eta.d.ts +10 -0
- package/dist/orchestration/eta.js +75 -0
- package/dist/orchestration/evidence-check.d.ts +36 -0
- package/dist/orchestration/evidence-check.js +257 -0
- package/dist/orchestration/evidence-gate.d.ts +34 -0
- package/dist/orchestration/evidence-gate.js +501 -0
- package/dist/orchestration/execution-planner.d.ts +40 -0
- package/dist/orchestration/execution-planner.js +252 -0
- package/dist/orchestration/executor.d.ts +11 -0
- package/dist/orchestration/executor.js +979 -0
- package/dist/orchestration/interactive-orchestrator.d.ts +134 -0
- package/dist/orchestration/interactive-orchestrator.js +450 -0
- package/dist/orchestration/log-streamer.d.ts +104 -0
- package/dist/orchestration/log-streamer.js +288 -0
- package/dist/orchestration/loop-artifacts.d.ts +14 -0
- package/dist/orchestration/loop-artifacts.js +20 -0
- package/dist/orchestration/loop-controller.d.ts +14 -0
- package/dist/orchestration/loop-controller.js +311 -0
- package/dist/orchestration/loop-guard.d.ts +28 -0
- package/dist/orchestration/loop-guard.js +104 -0
- package/dist/orchestration/loop-state.d.ts +86 -0
- package/dist/orchestration/loop-state.js +1 -0
- package/dist/orchestration/node-monitor.d.ts +18 -0
- package/dist/orchestration/node-monitor.js +98 -0
- package/dist/orchestration/orchestrate-prompt.d.ts +43 -0
- package/dist/orchestration/orchestrate-prompt.js +533 -0
- package/dist/orchestration/orchestration-state.d.ts +3 -0
- package/dist/orchestration/orchestration-state.js +2 -0
- package/dist/orchestration/parallel-orchestrator.d.ts +159 -0
- package/dist/orchestration/parallel-orchestrator.js +576 -0
- package/dist/orchestration/parallel-ui.d.ts +51 -0
- package/dist/orchestration/parallel-ui.js +470 -0
- package/dist/orchestration/repair-policy.d.ts +20 -0
- package/dist/orchestration/repair-policy.js +221 -0
- package/dist/orchestration/routing/inventory.d.ts +9 -0
- package/dist/orchestration/routing/inventory.js +273 -0
- package/dist/orchestration/routing/mcp-config.d.ts +17 -0
- package/dist/orchestration/routing/mcp-config.js +154 -0
- package/dist/orchestration/routing/types.d.ts +38 -0
- package/dist/orchestration/routing/types.js +4 -0
- package/dist/orchestration/routing.d.ts +31 -0
- package/dist/orchestration/routing.js +961 -0
- package/dist/orchestration/run-state.d.ts +36 -0
- package/dist/orchestration/run-state.js +176 -0
- package/dist/orchestration/scheduler.d.ts +9 -0
- package/dist/orchestration/scheduler.js +85 -0
- package/dist/orchestration/skill-assigner.d.ts +22 -0
- package/dist/orchestration/skill-assigner.js +345 -0
- package/dist/orchestration/state-machine/index.d.ts +3 -0
- package/dist/orchestration/state-machine/index.js +3 -0
- package/dist/orchestration/state-machine/node-state-machine.d.ts +24 -0
- package/dist/orchestration/state-machine/node-state-machine.js +35 -0
- package/dist/orchestration/state-machine/run-state-machine.d.ts +38 -0
- package/dist/orchestration/state-machine/run-state-machine.js +161 -0
- package/dist/orchestration/state-machine/run-state-manager.d.ts +108 -0
- package/dist/orchestration/state-machine/run-state-manager.js +314 -0
- package/dist/orchestration/state-persister.d.ts +7 -0
- package/dist/orchestration/state-persister.js +77 -0
- package/dist/orchestration/task-graph.d.ts +29 -0
- package/dist/orchestration/task-graph.js +261 -0
- package/dist/orchestration/verification-only.d.ts +28 -0
- package/dist/orchestration/verification-only.js +94 -0
- package/dist/providers/attempt-recorder.d.ts +10 -0
- package/dist/providers/attempt-recorder.js +38 -0
- package/dist/providers/codex-cli-runner.d.ts +11 -0
- package/dist/providers/codex-cli-runner.js +129 -0
- package/dist/providers/context-preflight.d.ts +47 -0
- package/dist/providers/context-preflight.js +134 -0
- package/dist/providers/deepseek/deepseek-balance.d.ts +29 -0
- package/dist/providers/deepseek/deepseek-balance.js +80 -0
- package/dist/providers/deepseek/deepseek-client.d.ts +53 -0
- package/dist/providers/deepseek/deepseek-client.js +164 -0
- package/dist/providers/deepseek/deepseek-config.d.ts +89 -0
- package/dist/providers/deepseek/deepseek-config.js +272 -0
- package/dist/providers/deepseek/deepseek-errors.d.ts +5 -0
- package/dist/providers/deepseek/deepseek-errors.js +48 -0
- package/dist/providers/deepseek/deepseek-provider.d.ts +10 -0
- package/dist/providers/deepseek/deepseek-provider.js +162 -0
- package/dist/providers/deepseek/deepseek-super-config.d.ts +31 -0
- package/dist/providers/deepseek/deepseek-super-config.js +136 -0
- package/dist/providers/deepseek-provider.d.ts +8 -0
- package/dist/providers/deepseek-provider.js +78 -0
- package/dist/providers/health.d.ts +13 -0
- package/dist/providers/health.js +55 -0
- package/dist/providers/index.d.ts +22 -0
- package/dist/providers/index.js +22 -0
- package/dist/providers/kimi-provider-failure.d.ts +8 -0
- package/dist/providers/kimi-provider-failure.js +56 -0
- package/dist/providers/kimi-provider.d.ts +7 -0
- package/dist/providers/kimi-provider.js +27 -0
- package/dist/providers/model-registry.d.ts +103 -0
- package/dist/providers/model-registry.js +571 -0
- package/dist/providers/model-table.d.ts +24 -0
- package/dist/providers/model-table.js +140 -0
- package/dist/providers/model-tabs.d.ts +33 -0
- package/dist/providers/model-tabs.js +98 -0
- package/dist/providers/openai-compatible-runner.d.ts +17 -0
- package/dist/providers/openai-compatible-runner.js +180 -0
- package/dist/providers/provider-router.d.ts +8 -0
- package/dist/providers/provider-router.js +174 -0
- package/dist/providers/provider-runtime.d.ts +17 -0
- package/dist/providers/provider-runtime.js +246 -0
- package/dist/providers/provider-stats.d.ts +56 -0
- package/dist/providers/provider-stats.js +303 -0
- package/dist/providers/provider-task-runner.d.ts +23 -0
- package/dist/providers/provider-task-runner.js +1171 -0
- package/dist/providers/provider.d.ts +74 -0
- package/dist/providers/provider.js +9 -0
- package/dist/providers/router.d.ts +14 -0
- package/dist/providers/router.js +486 -0
- package/dist/providers/runner/deepseek-helpers.d.ts +38 -0
- package/dist/providers/runner/deepseek-helpers.js +150 -0
- package/dist/providers/runner/env.d.ts +12 -0
- package/dist/providers/runner/env.js +98 -0
- package/dist/providers/runner/execution.d.ts +26 -0
- package/dist/providers/runner/execution.js +42 -0
- package/dist/providers/runner/helpers.d.ts +9 -0
- package/dist/providers/runner/helpers.js +38 -0
- package/dist/providers/runner/results.d.ts +26 -0
- package/dist/providers/runner/results.js +104 -0
- package/dist/providers/thinking-levels.d.ts +7 -0
- package/dist/providers/thinking-levels.js +67 -0
- package/dist/providers/types.d.ts +139 -0
- package/dist/providers/types.js +60 -0
- package/dist/replay/differ.d.ts +5 -0
- package/dist/replay/differ.js +314 -0
- package/dist/replay/index.d.ts +6 -0
- package/dist/replay/index.js +4 -0
- package/dist/replay/inspector.d.ts +14 -0
- package/dist/replay/inspector.js +264 -0
- package/dist/replay/manifest-builder.d.ts +11 -0
- package/dist/replay/manifest-builder.js +184 -0
- package/dist/replay/replay-engine.d.ts +18 -0
- package/dist/replay/replay-engine.js +265 -0
- package/dist/runtime/adapter.d.ts +77 -0
- package/dist/runtime/adapter.js +28 -0
- package/dist/runtime/agent-runtime.d.ts +123 -0
- package/dist/runtime/agent-runtime.js +18 -0
- package/dist/runtime/cache-stable-session.d.ts +55 -0
- package/dist/runtime/cache-stable-session.js +108 -0
- package/dist/runtime/capability-injection.d.ts +39 -0
- package/dist/runtime/capability-injection.js +93 -0
- package/dist/runtime/chat-advisory-runtime.d.ts +2 -0
- package/dist/runtime/chat-advisory-runtime.js +71 -0
- package/dist/runtime/child-env.d.ts +31 -0
- package/dist/runtime/child-env.js +131 -0
- package/dist/runtime/codex-cli-runtime.d.ts +10 -0
- package/dist/runtime/codex-cli-runtime.js +78 -0
- package/dist/runtime/codex-runtime.d.ts +35 -0
- package/dist/runtime/codex-runtime.js +264 -0
- package/dist/runtime/command-bus.d.ts +13 -0
- package/dist/runtime/command-bus.js +57 -0
- package/dist/runtime/context-broker-converter.d.ts +9 -0
- package/dist/runtime/context-broker-converter.js +96 -0
- package/dist/runtime/context-broker.d.ts +25 -0
- package/dist/runtime/context-broker.js +308 -0
- package/dist/runtime/context-budget-optimizer.d.ts +73 -0
- package/dist/runtime/context-budget-optimizer.js +300 -0
- package/dist/runtime/context-capsule.d.ts +81 -0
- package/dist/runtime/context-capsule.js +46 -0
- package/dist/runtime/contracts/command-envelope.d.ts +99 -0
- package/dist/runtime/contracts/command-envelope.js +5 -0
- package/dist/runtime/contracts/reasoning-trace.d.ts +120 -0
- package/dist/runtime/contracts/reasoning-trace.js +10 -0
- package/dist/runtime/contracts/shared.d.ts +34 -0
- package/dist/runtime/contracts/shared.js +12 -0
- package/dist/runtime/core-verified-preset.d.ts +37 -0
- package/dist/runtime/core-verified-preset.js +205 -0
- package/dist/runtime/debloat-nlp.d.ts +140 -0
- package/dist/runtime/debloat-nlp.js +398 -0
- package/dist/runtime/deepseek-runtime.d.ts +28 -0
- package/dist/runtime/deepseek-runtime.js +270 -0
- package/dist/runtime/external-cli-adapter.d.ts +29 -0
- package/dist/runtime/external-cli-adapter.js +283 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/kimi-api-runtime.d.ts +52 -0
- package/dist/runtime/kimi-api-runtime.js +367 -0
- package/dist/runtime/kimi-print-runtime.d.ts +10 -0
- package/dist/runtime/kimi-print-runtime.js +87 -0
- package/dist/runtime/kimi-wire-protocol-runtime.d.ts +44 -0
- package/dist/runtime/kimi-wire-protocol-runtime.js +436 -0
- package/dist/runtime/kimi-wire-runtime.d.ts +17 -0
- package/dist/runtime/kimi-wire-runtime.js +112 -0
- package/dist/runtime/legacy-bridge.d.ts +14 -0
- package/dist/runtime/legacy-bridge.js +27 -0
- package/dist/runtime/local-llm-runtime.d.ts +29 -0
- package/dist/runtime/local-llm-runtime.js +231 -0
- package/dist/runtime/mimo-api-runtime.d.ts +13 -0
- package/dist/runtime/mimo-api-runtime.js +24 -0
- package/dist/runtime/nlg-renderer.d.ts +38 -0
- package/dist/runtime/nlg-renderer.js +132 -0
- package/dist/runtime/output-router.d.ts +20 -0
- package/dist/runtime/output-router.js +171 -0
- package/dist/runtime/process-session.d.ts +27 -0
- package/dist/runtime/process-session.js +35 -0
- package/dist/runtime/prompt-envelope.d.ts +28 -0
- package/dist/runtime/prompt-envelope.js +78 -0
- package/dist/runtime/provider-event-normalizer.d.ts +117 -0
- package/dist/runtime/provider-event-normalizer.js +454 -0
- package/dist/runtime/provider-tool-contracts.d.ts +24 -0
- package/dist/runtime/provider-tool-contracts.js +56 -0
- package/dist/runtime/reasoning-trace.d.ts +46 -0
- package/dist/runtime/reasoning-trace.js +289 -0
- package/dist/runtime/renderers.d.ts +33 -0
- package/dist/runtime/renderers.js +221 -0
- package/dist/runtime/runtime-backed-task-runner.d.ts +20 -0
- package/dist/runtime/runtime-backed-task-runner.js +166 -0
- package/dist/runtime/runtime-bootstrap.d.ts +21 -0
- package/dist/runtime/runtime-bootstrap.js +208 -0
- package/dist/runtime/runtime-registry.d.ts +23 -0
- package/dist/runtime/runtime-registry.js +95 -0
- package/dist/runtime/runtime-router.d.ts +51 -0
- package/dist/runtime/runtime-router.js +620 -0
- package/dist/runtime/sandbox-profile.d.ts +25 -0
- package/dist/runtime/sandbox-profile.js +35 -0
- package/dist/runtime/slash-commands.d.ts +46 -0
- package/dist/runtime/slash-commands.js +321 -0
- package/dist/runtime/stable-json.d.ts +9 -0
- package/dist/runtime/stable-json.js +45 -0
- package/dist/runtime/tool-call-repair.d.ts +35 -0
- package/dist/runtime/tool-call-repair.js +181 -0
- package/dist/runtime/tool-dispatch-contracts.d.ts +8 -0
- package/dist/runtime/tool-dispatch-contracts.js +32 -0
- package/dist/runtime/tool-plane.d.ts +31 -0
- package/dist/runtime/tool-plane.js +112 -0
- package/dist/runtime/tool-proxy.d.ts +20 -0
- package/dist/runtime/tool-proxy.js +109 -0
- package/dist/runtime/tool-registry-contract.d.ts +40 -0
- package/dist/runtime/tool-registry-contract.js +52 -0
- package/dist/runtime/ui-components.d.ts +64 -0
- package/dist/runtime/ui-components.js +232 -0
- package/dist/runtime/worker-manifest.d.ts +34 -0
- package/dist/runtime/worker-manifest.js +204 -0
- package/dist/safety/approval-policy.d.ts +4 -0
- package/dist/safety/approval-policy.js +33 -0
- package/dist/safety/guard-hooks.d.ts +3 -0
- package/dist/safety/guard-hooks.js +64 -0
- package/dist/schema/decision.schema.d.ts +57 -0
- package/dist/schema/decision.schema.js +32 -0
- package/dist/schema/envelope.schema.d.ts +216 -0
- package/dist/schema/envelope.schema.js +38 -0
- package/dist/schema/error.schema.d.ts +51 -0
- package/dist/schema/error.schema.js +12 -0
- package/dist/schema/evidence.schema.d.ts +58 -0
- package/dist/schema/evidence.schema.js +31 -0
- package/dist/schema/index.d.ts +8 -0
- package/dist/schema/index.js +8 -0
- package/dist/schema/proof-bundle.schema.d.ts +150 -0
- package/dist/schema/proof-bundle.schema.js +42 -0
- package/dist/schema/provider.schema.d.ts +138 -0
- package/dist/schema/provider.schema.js +35 -0
- package/dist/schema/run-manifest.schema.d.ts +168 -0
- package/dist/schema/run-manifest.schema.js +35 -0
- package/dist/schema/version.schema.d.ts +64 -0
- package/dist/schema/version.schema.js +21 -0
- package/dist/theme/ansi.d.ts +15 -0
- package/dist/theme/ansi.js +41 -0
- package/dist/theme/colors.d.ts +87 -0
- package/dist/theme/colors.js +105 -0
- package/dist/theme/hud-theme.d.ts +6 -0
- package/dist/theme/hud-theme.js +41 -0
- package/dist/theme/index.d.ts +12 -0
- package/dist/theme/index.js +20 -0
- package/dist/theme/layout.d.ts +24 -0
- package/dist/theme/layout.js +139 -0
- package/dist/theme/metrics.d.ts +23 -0
- package/dist/theme/metrics.js +93 -0
- package/dist/theme/parallel.d.ts +68 -0
- package/dist/theme/parallel.js +345 -0
- package/dist/theme/working-indicator.d.ts +38 -0
- package/dist/theme/working-indicator.js +149 -0
- package/dist/tui/model.d.ts +28 -0
- package/dist/tui/model.js +1 -0
- package/dist/tui/terminal-frame-renderer.d.ts +19 -0
- package/dist/tui/terminal-frame-renderer.js +60 -0
- package/dist/tui/views/capabilities-view.d.ts +3 -0
- package/dist/tui/views/capabilities-view.js +13 -0
- package/dist/tui/views/common.d.ts +11 -0
- package/dist/tui/views/common.js +35 -0
- package/dist/tui/views/dag-view.d.ts +3 -0
- package/dist/tui/views/dag-view.js +12 -0
- package/dist/tui/views/evidence-view.d.ts +3 -0
- package/dist/tui/views/evidence-view.js +18 -0
- package/dist/tui/views/index.d.ts +4 -0
- package/dist/tui/views/index.js +3 -0
- package/dist/ui/omk-sigil.d.ts +13 -0
- package/dist/ui/omk-sigil.js +277 -0
- package/dist/ui/omk-working-sweep.d.ts +61 -0
- package/dist/ui/omk-working-sweep.js +416 -0
- package/dist/util/agent-schema.d.ts +24 -0
- package/dist/util/agent-schema.js +293 -0
- package/dist/util/appshot-store.d.ts +68 -0
- package/dist/util/appshot-store.js +506 -0
- package/dist/util/chat-agent-mode.d.ts +173 -0
- package/dist/util/chat-agent-mode.js +905 -0
- package/dist/util/chat-cockpit.d.ts +45 -0
- package/dist/util/chat-cockpit.js +293 -0
- package/dist/util/chat-startup.d.ts +35 -0
- package/dist/util/chat-startup.js +330 -0
- package/dist/util/chat-state.d.ts +27 -0
- package/dist/util/chat-state.js +105 -0
- package/dist/util/checkpoint.d.ts +21 -0
- package/dist/util/checkpoint.js +238 -0
- package/dist/util/cli-contract.d.ts +46 -0
- package/dist/util/cli-contract.js +72 -0
- package/dist/util/cron-engine.d.ts +24 -0
- package/dist/util/cron-engine.js +227 -0
- package/dist/util/events-logger.d.ts +30 -0
- package/dist/util/events-logger.js +135 -0
- package/dist/util/execution-selection.d.ts +13 -0
- package/dist/util/execution-selection.js +82 -0
- package/dist/util/first-run-star.d.ts +49 -0
- package/dist/util/first-run-star.js +223 -0
- package/dist/util/fs.d.ts +128 -0
- package/dist/util/fs.js +1757 -0
- package/dist/util/git.d.ts +11 -0
- package/dist/util/git.js +39 -0
- package/dist/util/help-text.d.ts +1 -0
- package/dist/util/help-text.js +60 -0
- package/dist/util/i18n.d.ts +10 -0
- package/dist/util/i18n.js +848 -0
- package/dist/util/json-envelope.d.ts +15 -0
- package/dist/util/json-envelope.js +28 -0
- package/dist/util/mcp-preflight.d.ts +26 -0
- package/dist/util/mcp-preflight.js +29 -0
- package/dist/util/mode-preset.d.ts +29 -0
- package/dist/util/mode-preset.js +222 -0
- package/dist/util/mode-selector.d.ts +6 -0
- package/dist/util/mode-selector.js +74 -0
- package/dist/util/native-safety.d.ts +28 -0
- package/dist/util/native-safety.js +118 -0
- package/dist/util/output-buffer.d.ts +12 -0
- package/dist/util/output-buffer.js +59 -0
- package/dist/util/process-tree.d.ts +18 -0
- package/dist/util/process-tree.js +102 -0
- package/dist/util/project-root.d.ts +27 -0
- package/dist/util/project-root.js +382 -0
- package/dist/util/provider-usage.d.ts +2 -0
- package/dist/util/provider-usage.js +1 -0
- package/dist/util/reasoning-nlp.d.ts +84 -0
- package/dist/util/reasoning-nlp.js +325 -0
- package/dist/util/resource-profile.d.ts +32 -0
- package/dist/util/resource-profile.js +219 -0
- package/dist/util/run-store.d.ts +38 -0
- package/dist/util/run-store.js +151 -0
- package/dist/util/run-view-model.d.ts +111 -0
- package/dist/util/run-view-model.js +333 -0
- package/dist/util/runtime-profile.d.ts +34 -0
- package/dist/util/runtime-profile.js +149 -0
- package/dist/util/runtime-scope.d.ts +2 -0
- package/dist/util/runtime-scope.js +19 -0
- package/dist/util/scoped-agent-file.d.ts +47 -0
- package/dist/util/scoped-agent-file.js +121 -0
- package/dist/util/screenshot-store.d.ts +35 -0
- package/dist/util/screenshot-store.js +310 -0
- package/dist/util/secret-mask.d.ts +5 -0
- package/dist/util/secret-mask.js +41 -0
- package/dist/util/session.d.ts +19 -0
- package/dist/util/session.js +80 -0
- package/dist/util/shell.d.ts +30 -0
- package/dist/util/shell.js +350 -0
- package/dist/util/snippet.d.ts +17 -0
- package/dist/util/snippet.js +110 -0
- package/dist/util/sync-manifest.d.ts +13 -0
- package/dist/util/sync-manifest.js +22 -0
- package/dist/util/terminal-input.d.ts +25 -0
- package/dist/util/terminal-input.js +35 -0
- package/dist/util/terminal-layout.d.ts +18 -0
- package/dist/util/terminal-layout.js +108 -0
- package/dist/util/terminal-owner.d.ts +19 -0
- package/dist/util/terminal-owner.js +64 -0
- package/dist/util/theme.d.ts +9 -0
- package/dist/util/theme.js +9 -0
- package/dist/util/timeout-config.d.ts +18 -0
- package/dist/util/timeout-config.js +101 -0
- package/dist/util/todo-sync.d.ts +58 -0
- package/dist/util/todo-sync.js +473 -0
- package/dist/util/update-check.d.ts +89 -0
- package/dist/util/update-check.js +321 -0
- package/dist/util/usage-view-model.d.ts +22 -0
- package/dist/util/usage-view-model.js +57 -0
- package/dist/util/user-visible-output.d.ts +19 -0
- package/dist/util/user-visible-output.js +48 -0
- package/dist/util/version.d.ts +4 -0
- package/dist/util/version.js +51 -0
- package/dist/util/worktree.d.ts +10 -0
- package/dist/util/worktree.js +165 -0
- package/dist/ux/explain-loop-decision.d.ts +4 -0
- package/dist/ux/explain-loop-decision.js +55 -0
- package/dist/ux/intent-router.d.ts +15 -0
- package/dist/ux/intent-router.js +64 -0
- package/dist/ux/natural-entrypoint.d.ts +21 -0
- package/dist/ux/natural-entrypoint.js +122 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.js +18 -0
- package/dist/web-bridge/host.d.ts +8 -0
- package/dist/web-bridge/host.js +109 -0
- package/dist/web-bridge/native-host.d.ts +6 -0
- package/dist/web-bridge/native-host.js +40 -0
- package/dist/web-bridge/status.d.ts +84 -0
- package/dist/web-bridge/status.js +201 -0
- package/docs/2026-05-01-16gb-lite-mode.md +37 -0
- package/docs/2026-05-01-critical-issues-and-improvements.md +361 -0
- package/docs/2026-05-01-dag-ensemble-runtime.md +74 -0
- package/docs/2026-05-02-p1-p2-hardening-handoff.md +139 -0
- package/docs/2026-05-05-adjustable-timeouts-and-cron-jobs.md +252 -0
- package/docs/2026-05-08-omk-hardening-plan.md +62 -0
- package/docs/2026-05-14/critical-issues.md +20 -0
- package/docs/2026-05-14/improvements.md +14 -0
- package/docs/2026-05-14/init-checklist.md +25 -0
- package/docs/2026-05-14/plan.md +20 -0
- package/docs/2026-05-15/critical-issues.md +20 -0
- package/docs/2026-05-15/improvements.md +14 -0
- package/docs/2026-05-15/init-checklist.md +25 -0
- package/docs/2026-05-15/plan.md +20 -0
- package/docs/2026-05-16/critical-issues.md +20 -0
- package/docs/2026-05-16/improvements.md +14 -0
- package/docs/2026-05-16/init-checklist.md +25 -0
- package/docs/2026-05-16/plan.md +20 -0
- package/docs/2026-05-17/critical-issues.md +20 -0
- package/docs/2026-05-17/improvements.md +14 -0
- package/docs/2026-05-17/init-checklist.md +25 -0
- package/docs/2026-05-17/plan.md +20 -0
- package/docs/2026-05-18/improvements.md +14 -0
- package/docs/2026-05-18/init-checklist.md +25 -0
- package/docs/2026-05-18/plan.md +20 -0
- package/docs/2026-05-18-critical-issues-and-improvements.md +441 -0
- package/docs/2026-05-18-project-direction.md +223 -0
- package/docs/2026-05-19/critical-issues.md +20 -0
- package/docs/2026-05-19/improvements.md +14 -0
- package/docs/2026-05-19/init-checklist.md +25 -0
- package/docs/2026-05-19/plan.md +20 -0
- package/docs/2026-05-20/critical-issues.md +20 -0
- package/docs/2026-05-20/improvements.md +14 -0
- package/docs/2026-05-20/init-checklist.md +25 -0
- package/docs/2026-05-20/plan.md +20 -0
- package/docs/2026-05-21/critical-issues.md +20 -0
- package/docs/2026-05-21/improvements.md +14 -0
- package/docs/2026-05-21/init-checklist.md +25 -0
- package/docs/2026-05-21/plan.md +20 -0
- package/docs/2026-05-22/critical-issues.md +20 -0
- package/docs/2026-05-22/improvements.md +14 -0
- package/docs/2026-05-22/init-checklist.md +25 -0
- package/docs/2026-05-22/plan.md +20 -0
- package/docs/2026-05-23/critical-issues.md +20 -0
- package/docs/2026-05-23/improvements.md +14 -0
- package/docs/2026-05-23/init-checklist.md +25 -0
- package/docs/2026-05-23/plan.md +20 -0
- package/docs/2026-05-24/critical-issues.md +30 -0
- package/docs/2026-05-24/improvements.md +23 -0
- package/docs/2026-05-24/init-checklist.md +25 -0
- package/docs/2026-05-24/plan.md +22 -0
- package/docs/2026-05-25/critical-issues.md +20 -0
- package/docs/2026-05-25/improvements.md +14 -0
- package/docs/2026-05-25/init-checklist.md +25 -0
- package/docs/2026-05-25/plan.md +20 -0
- package/docs/2026-05-26/critical-issues.md +20 -0
- package/docs/2026-05-26/improvements.md +14 -0
- package/docs/2026-05-26/init-checklist.md +25 -0
- package/docs/2026-05-26/plan.md +20 -0
- package/docs/2026-05-27/critical-issues.md +20 -0
- package/docs/2026-05-27/improvements.md +14 -0
- package/docs/2026-05-27/init-checklist.md +25 -0
- package/docs/2026-05-27/plan.md +20 -0
- package/docs/2026-05-28/critical-issues.md +20 -0
- package/docs/2026-05-28/improvements.md +14 -0
- package/docs/2026-05-28/init-checklist.md +25 -0
- package/docs/2026-05-28/plan.md +20 -0
- package/docs/2026-05-29/critical-issues.md +20 -0
- package/docs/2026-05-29/improvements.md +14 -0
- package/docs/2026-05-29/init-checklist.md +25 -0
- package/docs/2026-05-29/plan.md +20 -0
- package/docs/2026-05-30/critical-issues.md +20 -0
- package/docs/2026-05-30/improvements.md +14 -0
- package/docs/2026-05-30/init-checklist.md +25 -0
- package/docs/2026-05-30/plan.md +20 -0
- package/docs/2026-05-31/critical-issues.md +20 -0
- package/docs/2026-05-31/improvements.md +14 -0
- package/docs/2026-05-31/init-checklist.md +25 -0
- package/docs/2026-05-31/plan.md +20 -0
- package/docs/2026-06-01/critical-issues.md +20 -0
- package/docs/2026-06-01/improvements.md +14 -0
- package/docs/2026-06-01/init-checklist.md +25 -0
- package/docs/2026-06-01/plan.md +20 -0
- package/docs/2026-06-02/critical-issues.md +20 -0
- package/docs/2026-06-02/improvements.md +14 -0
- package/docs/2026-06-02/init-checklist.md +25 -0
- package/docs/2026-06-02/plan.md +20 -0
- package/docs/2026-06-03/critical-issues.md +20 -0
- package/docs/2026-06-03/improvements.md +14 -0
- package/docs/2026-06-03/init-checklist.md +25 -0
- package/docs/2026-06-03/plan.md +20 -0
- package/docs/2026-06-04/critical-issues.md +20 -0
- package/docs/2026-06-04/improvements.md +14 -0
- package/docs/2026-06-04/init-checklist.md +25 -0
- package/docs/2026-06-04/plan.md +20 -0
- package/docs/2026-06-05/critical-issues.md +20 -0
- package/docs/2026-06-05/improvements.md +14 -0
- package/docs/2026-06-05/init-checklist.md +25 -0
- package/docs/2026-06-05/plan.md +20 -0
- package/docs/2026-06-06/critical-issues.md +20 -0
- package/docs/2026-06-06/improvements.md +14 -0
- package/docs/2026-06-06/init-checklist.md +25 -0
- package/docs/2026-06-06/plan.md +20 -0
- package/docs/2026-06-07/critical-issues.md +20 -0
- package/docs/2026-06-07/improvements.md +14 -0
- package/docs/2026-06-07/init-checklist.md +25 -0
- package/docs/2026-06-07/plan.md +20 -0
- package/docs/GSTACK_MIGRATION.md +169 -0
- package/docs/OMK_CLI_V2_RUNTIME_ARCHITECTURE.md +2058 -0
- package/docs/cli-v2-migration.md +87 -0
- package/docs/codex-oauth-setup.md +48 -0
- package/docs/demo/verified-run/README.md +32 -0
- package/docs/demo/verified-run/artifacts/README.md +18 -0
- package/docs/demo/verified-run/capture-plan.md +51 -0
- package/docs/demo/verified-run/generated-diff.md +27 -0
- package/docs/demo/verified-run/raw-prompt.md +21 -0
- package/docs/demo/verified-run/video-shot-list.md +14 -0
- package/docs/design-md.md +35 -0
- package/docs/getting-started.md +37 -0
- package/docs/hud-and-parallel-ux.md +155 -0
- package/docs/kimi-oauth-usage-status.md +33 -0
- package/docs/kimi-okabe-dmail.md +44 -0
- package/docs/local-graph-memory.md +102 -0
- package/docs/lsp.md +48 -0
- package/docs/mcp-ontology-proposal.md +12 -0
- package/docs/native-root-runtime-algorithms.md +402 -0
- package/docs/native-root-runtime-hardening.md +131 -0
- package/docs/neo4j-memory.md +5 -0
- package/docs/openai-platform-image-keys.md +23 -0
- package/docs/phase1-final-report.md +154 -0
- package/docs/provider-maturity.md +44 -0
- package/docs/runtime-architecture.md +89 -0
- package/docs/versioning.md +49 -0
- package/llms.txt +38 -0
- package/package.json +188 -0
- package/readmeasset/.npmignore +20 -0
- package/readmeasset/ASSET_INDEX.md +36 -0
- package/readmeasset/ASSET_PROVENANCE.md +94 -0
- package/readmeasset/omk-control.webp +0 -0
- package/readmeasset/omk-core-loop.svg +25 -0
- package/readmeasset/omk-evidence-gate-card.png +0 -0
- package/readmeasset/omk-github-banner.webp +0 -0
- package/readmeasset/omk-github-header.webp +0 -0
- package/readmeasset/omk-install-card.png +0 -0
- package/readmeasset/omk-logo-512.png +0 -0
- package/readmeasset/omk-logo-mark.svg +7 -0
- package/readmeasset/omk-provider-router-card.png +0 -0
- package/readmeasset/omk-runtime-flow-0.78.0.webp +0 -0
- package/readmeasset/omk-social-preview.png +0 -0
- package/readmeasset/omk-tui-0.78.0.webp +0 -0
- package/readmeasset/omk_tui.png +0 -0
- package/templates/.kimi/AGENTS.md +93 -0
- package/templates/.omk/agents/okabe.yaml +30 -0
- package/templates/.omk/agents/roles/aggregator.yaml +13 -0
- package/templates/.omk/agents/roles/architect.yaml +13 -0
- package/templates/.omk/agents/roles/coder.yaml +9 -0
- package/templates/.omk/agents/roles/explorer.yaml +13 -0
- package/templates/.omk/agents/roles/integrator.yaml +13 -0
- package/templates/.omk/agents/roles/interviewer.yaml +13 -0
- package/templates/.omk/agents/roles/ontology.yaml +18 -0
- package/templates/.omk/agents/roles/planner.yaml +13 -0
- package/templates/.omk/agents/roles/qa.yaml +12 -0
- package/templates/.omk/agents/roles/researcher.yaml +13 -0
- package/templates/.omk/agents/roles/reviewer.yaml +13 -0
- package/templates/.omk/agents/roles/router.yaml +13 -0
- package/templates/.omk/agents/roles/security.yaml +12 -0
- package/templates/.omk/agents/roles/tester.yaml +12 -0
- package/templates/.omk/agents/roles/vision-debugger.yaml +12 -0
- package/templates/.omk/agents/root.yaml +62 -0
- package/templates/.omk/lsp.json +27 -0
- package/templates/.omk/prompts/root.md +74 -0
- package/templates/AGENTS.md +510 -0
- package/templates/skills/agents/agentmemory/SKILL.md +40 -0
- package/templates/skills/agents/andrej-karpathy-skills/SKILL.md +41 -0
- package/templates/skills/agents/claude-for-legal/SKILL.md +63 -0
- package/templates/skills/agents/claude-for-legal/references/workflow-catalog.md +38 -0
- package/templates/skills/agents/matt-pocock-skills/SKILL.md +40 -0
- package/templates/skills/agents/multica/SKILL.md +40 -0
- package/templates/skills/agents/omk-adaptorch-orchestration-review/SKILL.md +52 -0
- package/templates/skills/agents/omk-backend-api-review/SKILL.md +30 -0
- package/templates/skills/agents/omk-code-review/SKILL.md +40 -0
- package/templates/skills/agents/omk-context-broker/SKILL.md +57 -0
- package/templates/skills/agents/omk-control-loop-debugger/SKILL.md +49 -0
- package/templates/skills/agents/omk-design-system/SKILL.md +22 -0
- package/templates/skills/agents/omk-docs-release/SKILL.md +42 -0
- package/templates/skills/agents/omk-evidence-contract/SKILL.md +52 -0
- package/templates/skills/agents/omk-frontend-implementation/SKILL.md +13 -0
- package/templates/skills/agents/omk-frontend-ui-review/SKILL.md +29 -0
- package/templates/skills/agents/omk-git-commit-pr/SKILL.md +45 -0
- package/templates/skills/agents/omk-industrial-control-loop/SKILL.md +33 -0
- package/templates/skills/agents/omk-plan-first/SKILL.md +39 -0
- package/templates/skills/agents/omk-project-rules/SKILL.md +46 -0
- package/templates/skills/agents/omk-python-typing/SKILL.md +33 -0
- package/templates/skills/agents/omk-quality-gate/SKILL.md +54 -0
- package/templates/skills/agents/omk-repo-explorer/SKILL.md +33 -0
- package/templates/skills/agents/omk-research-verify/SKILL.md +30 -0
- package/templates/skills/agents/omk-secret-guard/SKILL.md +23 -0
- package/templates/skills/agents/omk-security-review/SKILL.md +49 -0
- package/templates/skills/agents/omk-test-debug-loop/SKILL.md +43 -0
- package/templates/skills/agents/omk-troubleshooting/SKILL.md +14 -0
- package/templates/skills/agents/omk-typescript-strict/SKILL.md +38 -0
- package/templates/skills/agents/omk-worktree-team/SKILL.md +44 -0
- package/templates/skills/agents/react-doctor/SKILL.md +46 -0
- package/templates/skills/kimi/agentmemory/SKILL.md +40 -0
- package/templates/skills/kimi/andrej-karpathy-skills/SKILL.md +41 -0
- package/templates/skills/kimi/awesome-design-md/SKILL.md +54 -0
- package/templates/skills/kimi/claude-for-legal/SKILL.md +63 -0
- package/templates/skills/kimi/claude-for-legal/references/workflow-catalog.md +38 -0
- package/templates/skills/kimi/deepseek-api/SKILL.md +27 -0
- package/templates/skills/kimi/deepseek-disable/SKILL.md +20 -0
- package/templates/skills/kimi/deepseek-enable/SKILL.md +20 -0
- package/templates/skills/kimi/deepseekset/SKILL.md +27 -0
- package/templates/skills/kimi/graph-view/SKILL.md +29 -0
- package/templates/skills/kimi/matt-pocock-skills/SKILL.md +40 -0
- package/templates/skills/kimi/mcp-install/SKILL.md +66 -0
- package/templates/skills/kimi/multica/SKILL.md +40 -0
- package/templates/skills/kimi/omk-adaptorch-orchestration-review/SKILL.md +52 -0
- package/templates/skills/kimi/omk-backend-api-review/SKILL.md +30 -0
- package/templates/skills/kimi/omk-code-review/SKILL.md +34 -0
- package/templates/skills/kimi/omk-context-broker/SKILL.md +57 -0
- package/templates/skills/kimi/omk-control-loop-debugger/SKILL.md +49 -0
- package/templates/skills/kimi/omk-design-md/SKILL.md +55 -0
- package/templates/skills/kimi/omk-design-system/SKILL.md +22 -0
- package/templates/skills/kimi/omk-docs-release/SKILL.md +42 -0
- package/templates/skills/kimi/omk-evidence-contract/SKILL.md +52 -0
- package/templates/skills/kimi/omk-flow-bugfix/SKILL.md +20 -0
- package/templates/skills/kimi/omk-flow-design-to-code/SKILL.md +23 -0
- package/templates/skills/kimi/omk-flow-feature-dev/SKILL.md +24 -0
- package/templates/skills/kimi/omk-flow-pr-review/SKILL.md +17 -0
- package/templates/skills/kimi/omk-flow-refactor/SKILL.md +21 -0
- package/templates/skills/kimi/omk-flow-release/SKILL.md +20 -0
- package/templates/skills/kimi/omk-flow-team-run/SKILL.md +24 -0
- package/templates/skills/kimi/omk-frontend-implementation/SKILL.md +13 -0
- package/templates/skills/kimi/omk-frontend-ui-review/SKILL.md +29 -0
- package/templates/skills/kimi/omk-git-commit-pr/SKILL.md +45 -0
- package/templates/skills/kimi/omk-global-rules/SKILL.md +31 -0
- package/templates/skills/kimi/omk-industrial-control-loop/SKILL.md +33 -0
- package/templates/skills/kimi/omk-kimi-runtime/SKILL.md +46 -0
- package/templates/skills/kimi/omk-multimodal-ui-review/SKILL.md +26 -0
- package/templates/skills/kimi/omk-plan-first/SKILL.md +39 -0
- package/templates/skills/kimi/omk-project-rules/SKILL.md +21 -0
- package/templates/skills/kimi/omk-python-typing/SKILL.md +33 -0
- package/templates/skills/kimi/omk-quality-gate/SKILL.md +36 -0
- package/templates/skills/kimi/omk-repo-explorer/SKILL.md +33 -0
- package/templates/skills/kimi/omk-research-verify/SKILL.md +30 -0
- package/templates/skills/kimi/omk-secret-guard/SKILL.md +23 -0
- package/templates/skills/kimi/omk-security-review/SKILL.md +49 -0
- package/templates/skills/kimi/omk-task-router/SKILL.md +27 -0
- package/templates/skills/kimi/omk-test-debug-loop/SKILL.md +43 -0
- package/templates/skills/kimi/omk-typescript-strict/SKILL.md +38 -0
- package/templates/skills/kimi/omk-worktree-team/SKILL.md +44 -0
- package/templates/skills/kimi/open-design/SKILL.md +56 -0
- package/templates/skills/kimi/provider/SKILL.md +47 -0
- package/templates/skills/kimi/react-doctor/SKILL.md +46 -0
- package/templates/skills/kimi/speckit-analyze/SKILL.md +255 -0
- package/templates/skills/kimi/speckit-checklist/SKILL.md +367 -0
- package/templates/skills/kimi/speckit-clarify/SKILL.md +249 -0
- package/templates/skills/kimi/speckit-constitution/SKILL.md +152 -0
- package/templates/skills/kimi/speckit-implement/SKILL.md +204 -0
- package/templates/skills/kimi/speckit-plan/SKILL.md +147 -0
- package/templates/skills/kimi/speckit-specify/SKILL.md +325 -0
- package/templates/skills/kimi/speckit-tasks/SKILL.md +197 -0
- package/templates/skills/kimi/speckit-taskstoissues/SKILL.md +101 -0
- package/templates/skills/kimi/think/SKILL.md +41 -0
- package/templates/spec-kit-omk-preset/commands/plan.md +21 -0
- package/templates/spec-kit-omk-preset/commands/tasks.md +21 -0
- package/templates/spec-kit-omk-preset/preset.yml +12 -0
- package/templates/spec-kit-omk-preset/templates/plan-template.md +75 -0
- package/templates/spec-kit-omk-preset/templates/spec-template.md +80 -0
- package/templates/spec-kit-omk-preset/templates/tasks-template.md +160 -0
- package/templates/web-bridge/chrome-extension/README.md +18 -0
- package/templates/web-bridge/chrome-extension/background.js +57 -0
- package/templates/web-bridge/chrome-extension/content-script.js +46 -0
- package/templates/web-bridge/chrome-extension/manifest.json +16 -0
- package/templates/web-bridge/chrome-extension/popup.html +21 -0
- package/templates/web-bridge/chrome-extension/popup.js +9 -0
|
@@ -0,0 +1,1632 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createInterface } from "readline";
|
|
3
|
+
import { writeSync } from "fs";
|
|
4
|
+
import { readFile, writeFile, readdir, access, realpath, stat } from "fs/promises";
|
|
5
|
+
import { join, resolve, relative } from "path";
|
|
6
|
+
import { execFileSync } from "child_process";
|
|
7
|
+
import { MemoryStore } from "../memory/memory-store.js";
|
|
8
|
+
import { canCallMcpTool, canWriteConfig, configWriteDeniedMessage, filterAllowedMcpTools, mcpToolDeniedMessage, } from "./config-permissions.js";
|
|
9
|
+
import { runQualityGate } from "./quality-gate.js";
|
|
10
|
+
import { saveCheckpoint, listCheckpoints, restoreCheckpoint } from "../util/checkpoint.js";
|
|
11
|
+
import { getOmkVersionSync } from "../util/version.js";
|
|
12
|
+
import { saveSnippet, getSnippet, deleteSnippet, searchSnippets } from "../util/snippet.js";
|
|
13
|
+
import { normalizeGoal } from "../goal/intake.js";
|
|
14
|
+
import { createGoalPersister } from "../goal/persistence.js";
|
|
15
|
+
import { checkGoalEvidence, checkGoalConstraints } from "../goal/evidence.js";
|
|
16
|
+
import { scoreGoal } from "../goal/scoring.js";
|
|
17
|
+
import { suggestNextAction, evaluateMissingCriteria } from "../goal/eval-criteria.js";
|
|
18
|
+
import { createStatePersister, redactSecrets } from "../orchestration/state-persister.js";
|
|
19
|
+
import { loadTodos, readTodos, deriveTodosFromState, writeTodos, normalizeTodoItems, normalizeTodoWriteInput, applyTodoWriteOperations } from "../util/todo-sync.js";
|
|
20
|
+
import { listActiveSessions, readSessionMeta } from "../util/session.js";
|
|
21
|
+
import { readEvents, tailEvents } from "../util/events-logger.js";
|
|
22
|
+
let clientDisconnected = false;
|
|
23
|
+
// ─── Constants ──────────────────────────────────────────────────────────
|
|
24
|
+
const PROJECT_ROOT = process.env.OMK_PROJECT_ROOT || process.cwd();
|
|
25
|
+
const OMK_DIR = join(PROJECT_ROOT, ".omk");
|
|
26
|
+
const OMK_MEMORY_DIR = join(OMK_DIR, "memory");
|
|
27
|
+
const OMK_AGENTS_DIR = join(OMK_DIR, "agents", "roles");
|
|
28
|
+
const OMK_RUNS_DIR = join(OMK_DIR, "runs");
|
|
29
|
+
const OMK_CONFIG_PATH = join(OMK_DIR, "config.toml");
|
|
30
|
+
const OMK_GOALS_DIR = join(OMK_DIR, "goals");
|
|
31
|
+
const PROTOCOL_VERSION = "2024-11-05";
|
|
32
|
+
const SERVER_NAME = "omk-project";
|
|
33
|
+
const SERVER_VERSION = getOmkVersionSync();
|
|
34
|
+
const MEMORY_STORE = new MemoryStore(OMK_MEMORY_DIR, {
|
|
35
|
+
projectRoot: PROJECT_ROOT,
|
|
36
|
+
source: "omk-project-mcp",
|
|
37
|
+
});
|
|
38
|
+
const GOAL_PERSISTER = createGoalPersister(OMK_GOALS_DIR);
|
|
39
|
+
const STATE_PERSISTER = createStatePersister(OMK_RUNS_DIR);
|
|
40
|
+
// ─── JSON-RPC / MCP error helpers ───────────────────────────────────────
|
|
41
|
+
const JSON_RPC_METHOD_NOT_FOUND = -32601;
|
|
42
|
+
const JSON_RPC_INVALID_PARAMS = -32602;
|
|
43
|
+
const JSON_RPC_OMK_SERVER_ERROR = -32000;
|
|
44
|
+
function errorMessage(err) {
|
|
45
|
+
return err instanceof Error ? err.message : String(err);
|
|
46
|
+
}
|
|
47
|
+
function errorName(err) {
|
|
48
|
+
return err instanceof Error ? err.name : typeof err;
|
|
49
|
+
}
|
|
50
|
+
function writeDiagnostic(message, data) {
|
|
51
|
+
if (clientDisconnected)
|
|
52
|
+
return;
|
|
53
|
+
const payload = JSON.stringify(redactSecrets({ message, ...data }));
|
|
54
|
+
try {
|
|
55
|
+
process.stderr.write(`[omk-project-mcp] ${payload}\n`);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// stderr unavailable, silently drop
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function isBrokenPipeError(err) {
|
|
62
|
+
if (!(err instanceof Error))
|
|
63
|
+
return false;
|
|
64
|
+
const code = err.code;
|
|
65
|
+
return code === "EPIPE" || code === "ERR_STREAM_DESTROYED" || code === "ERR_STREAM_WRITE_AFTER_END";
|
|
66
|
+
}
|
|
67
|
+
function safeWriteStdout(data) {
|
|
68
|
+
if (clientDisconnected)
|
|
69
|
+
return;
|
|
70
|
+
try {
|
|
71
|
+
writeSync(process.stdout.fd ?? 1, data);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (isBrokenPipeError(err)) {
|
|
75
|
+
clientDisconnected = true;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
process.stdout.write(data);
|
|
80
|
+
}
|
|
81
|
+
catch (err2) {
|
|
82
|
+
if (isBrokenPipeError(err2)) {
|
|
83
|
+
clientDisconnected = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function buildErrorData(req, err, context = {}) {
|
|
89
|
+
return {
|
|
90
|
+
requestId: req.id,
|
|
91
|
+
method: req.method,
|
|
92
|
+
errorName: errorName(err),
|
|
93
|
+
...context,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function formatToolErrorText(toolName, err) {
|
|
97
|
+
return JSON.stringify({
|
|
98
|
+
ok: false,
|
|
99
|
+
source: "omk-project-mcp",
|
|
100
|
+
tool: toolName,
|
|
101
|
+
error: {
|
|
102
|
+
message: errorMessage(err),
|
|
103
|
+
name: errorName(err),
|
|
104
|
+
},
|
|
105
|
+
hint: "This is an OMK tool-level failure, not a JSON-RPC transport failure. Fix the input or inspect the referenced OMK project state, then retry the tool.",
|
|
106
|
+
}, null, 2);
|
|
107
|
+
}
|
|
108
|
+
function toolResultFromValue(result) {
|
|
109
|
+
return {
|
|
110
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function toolErrorResult(toolName, err) {
|
|
114
|
+
return {
|
|
115
|
+
isError: true,
|
|
116
|
+
content: [{ type: "text", text: formatToolErrorText(toolName, err) }],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// ─── Security helpers ───────────────────────────────────────────────────
|
|
120
|
+
async function safePath(inputPath, baseDir) {
|
|
121
|
+
// 1. Reject null bytes
|
|
122
|
+
if (inputPath.includes("\0")) {
|
|
123
|
+
throw new Error(`Invalid path: null byte detected`);
|
|
124
|
+
}
|
|
125
|
+
// 2. Normalize backslashes to forward slashes
|
|
126
|
+
let normalized = inputPath.replace(/\\/g, "/");
|
|
127
|
+
// 3. Decode percent-encoded sequences
|
|
128
|
+
try {
|
|
129
|
+
normalized = decodeURIComponent(normalized);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
throw new Error(`Invalid path: malformed percent-encoding`);
|
|
133
|
+
}
|
|
134
|
+
// Re-check null bytes after decoding
|
|
135
|
+
if (normalized.includes("\0")) {
|
|
136
|
+
throw new Error(`Invalid path: null byte detected after decoding`);
|
|
137
|
+
}
|
|
138
|
+
const full = resolve(join(baseDir, normalized));
|
|
139
|
+
// 4. Resolve symlinks with realpath
|
|
140
|
+
const realFull = await realpath(full).catch(() => full);
|
|
141
|
+
// 5. Final guard: ensure resolved path is still under baseDir
|
|
142
|
+
const rel = relative(baseDir, realFull);
|
|
143
|
+
if (rel.startsWith("..") || rel === "..") {
|
|
144
|
+
throw new Error(`Path traversal detected: ${inputPath}`);
|
|
145
|
+
}
|
|
146
|
+
return realFull;
|
|
147
|
+
}
|
|
148
|
+
async function pathExists(path) {
|
|
149
|
+
try {
|
|
150
|
+
await access(path);
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function sanitizeGoalId(goalId) {
|
|
158
|
+
const sanitized = goalId.replace(/[^a-zA-Z0-9_.-]/g, "");
|
|
159
|
+
if (sanitized !== goalId || sanitized.length === 0 || sanitized.length > 128) {
|
|
160
|
+
throw new Error(`Invalid goalId: ${goalId}`);
|
|
161
|
+
}
|
|
162
|
+
return sanitized;
|
|
163
|
+
}
|
|
164
|
+
function sanitizeRunId(runId) {
|
|
165
|
+
const sanitized = runId.replace(/[^a-zA-Z0-9_.-]/g, "");
|
|
166
|
+
if (sanitized !== runId || sanitized.length === 0 || sanitized.length > 128) {
|
|
167
|
+
throw new Error(`Invalid runId: ${runId}`);
|
|
168
|
+
}
|
|
169
|
+
return sanitized;
|
|
170
|
+
}
|
|
171
|
+
function validateMemoryWrite(content) {
|
|
172
|
+
if (!content || content.trim().length === 0) {
|
|
173
|
+
throw new Error("Memory write rejected: content is empty");
|
|
174
|
+
}
|
|
175
|
+
const trimmed = content.trim();
|
|
176
|
+
if ((trimmed.startsWith("{") && trimmed.endsWith("}")) || (trimmed.startsWith("[") && trimmed.endsWith("]"))) {
|
|
177
|
+
try {
|
|
178
|
+
JSON.parse(trimmed);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
throw new Error("Memory write rejected: content looks like JSON but is not valid");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function sanitizeMemoryQuery(query) {
|
|
186
|
+
return query.replace(/[^\p{L}\p{N}\s\-_./:@#]/gu, "").slice(0, 200);
|
|
187
|
+
}
|
|
188
|
+
// ─── Resource handlers ──────────────────────────────────────────────────
|
|
189
|
+
async function handleReadGoalResource(goalId) {
|
|
190
|
+
const goal = await GOAL_PERSISTER.load(sanitizeGoalId(goalId));
|
|
191
|
+
if (!goal)
|
|
192
|
+
throw new Error(`Goal not found: ${goalId}`);
|
|
193
|
+
return { content: JSON.stringify(redactSecrets(goal), null, 2) };
|
|
194
|
+
}
|
|
195
|
+
async function handleReadRunResource(runId) {
|
|
196
|
+
const state = await STATE_PERSISTER.load(runId);
|
|
197
|
+
if (!state)
|
|
198
|
+
throw new Error(`Run state not found: ${runId}`);
|
|
199
|
+
return { content: JSON.stringify(state, null, 2) };
|
|
200
|
+
}
|
|
201
|
+
async function handleReadOntologyResource() {
|
|
202
|
+
const ontology = await MEMORY_STORE.ontology();
|
|
203
|
+
if (!ontology) {
|
|
204
|
+
const status = await MEMORY_STORE.status();
|
|
205
|
+
return { content: JSON.stringify({ backend: status.backend, note: "Ontology is available when backend=local_graph" }, null, 2) };
|
|
206
|
+
}
|
|
207
|
+
return { content: JSON.stringify(ontology, null, 2) };
|
|
208
|
+
}
|
|
209
|
+
// ─── Prompt handlers ────────────────────────────────────────────────────
|
|
210
|
+
function handleGetGoalIntakePrompt(args) {
|
|
211
|
+
const rawGoal = args?.rawGoal ?? "<paste the raw user goal here>";
|
|
212
|
+
return {
|
|
213
|
+
description: "Normalize a raw goal into a structured GoalSpec",
|
|
214
|
+
messages: [
|
|
215
|
+
{
|
|
216
|
+
role: "user",
|
|
217
|
+
content: {
|
|
218
|
+
type: "text",
|
|
219
|
+
text: `You are a goal-intake agent. Normalize the following raw goal into a structured GoalSpec (JSON).
|
|
220
|
+
|
|
221
|
+
Raw goal:
|
|
222
|
+
"""
|
|
223
|
+
${rawGoal}
|
|
224
|
+
"""
|
|
225
|
+
|
|
226
|
+
Output a JSON object with these fields:
|
|
227
|
+
- title: concise title (max 120 chars)
|
|
228
|
+
- objective: one-paragraph objective
|
|
229
|
+
- successCriteria: array of { id, description, requirement: "required"|"optional", weight, inferred: false }
|
|
230
|
+
- constraints: array of { id, description }
|
|
231
|
+
- nonGoals: array of strings
|
|
232
|
+
- expectedArtifacts: array of { name, path?, gate? }
|
|
233
|
+
- riskLevel: "low" | "medium" | "high"
|
|
234
|
+
|
|
235
|
+
Only return valid JSON.`,
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function handleGetEvidenceReviewPrompt(args) {
|
|
242
|
+
const goalId = args?.goalId ?? "<goalId>";
|
|
243
|
+
return {
|
|
244
|
+
description: "Review evidence against success criteria for a goal",
|
|
245
|
+
messages: [
|
|
246
|
+
{
|
|
247
|
+
role: "user",
|
|
248
|
+
content: {
|
|
249
|
+
type: "text",
|
|
250
|
+
text: `You are an evidence-review agent. Review the collected evidence for goal ${goalId}.
|
|
251
|
+
|
|
252
|
+
For each success criterion:
|
|
253
|
+
1. State whether evidence exists and is sufficient.
|
|
254
|
+
2. Identify gaps or risks.
|
|
255
|
+
3. Recommend next steps (add evidence, re-run tests, or mark blocked).
|
|
256
|
+
|
|
257
|
+
Use the omk_goal_show and omk_evidence_check tools to fetch current state before writing your review.`,
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function handleGetQualityGatePrompt(args) {
|
|
264
|
+
const scope = args?.scope ?? "all";
|
|
265
|
+
return {
|
|
266
|
+
description: "Run lint, typecheck, test, and build quality gates",
|
|
267
|
+
messages: [
|
|
268
|
+
{
|
|
269
|
+
role: "user",
|
|
270
|
+
content: {
|
|
271
|
+
type: "text",
|
|
272
|
+
text: `You are a quality-gate agent. Run the quality gates for scope: ${scope}.
|
|
273
|
+
|
|
274
|
+
Steps:
|
|
275
|
+
1. Call omk_quality_gate to execute lint, typecheck, test, and build.
|
|
276
|
+
2. For any failure, read the saved log and propose a fix.
|
|
277
|
+
3. Do not proceed with downstream tasks until required gates pass.
|
|
278
|
+
4. Summarize results in a concise pass/fail table.`,
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
],
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
// ─── Tool handlers (Goal) ───────────────────────────────────────────────
|
|
285
|
+
async function handleGoalCreate(args) {
|
|
286
|
+
const spec = normalizeGoal({
|
|
287
|
+
rawPrompt: args.rawPrompt,
|
|
288
|
+
title: args.title,
|
|
289
|
+
objective: args.objective,
|
|
290
|
+
successCriteria: args.successCriteria?.map((c) => ({ ...c, inferred: false })),
|
|
291
|
+
constraints: args.constraints,
|
|
292
|
+
nonGoals: args.nonGoals,
|
|
293
|
+
expectedArtifacts: args.expectedArtifacts,
|
|
294
|
+
riskLevel: args.riskLevel,
|
|
295
|
+
});
|
|
296
|
+
await GOAL_PERSISTER.save(spec);
|
|
297
|
+
return { goalId: spec.goalId, spec };
|
|
298
|
+
}
|
|
299
|
+
async function handleGoalShow(args) {
|
|
300
|
+
const spec = await GOAL_PERSISTER.load(sanitizeGoalId(args.goalId));
|
|
301
|
+
if (!spec)
|
|
302
|
+
throw new Error(`Goal not found: ${args.goalId}`);
|
|
303
|
+
return { spec };
|
|
304
|
+
}
|
|
305
|
+
async function handleGoalList() {
|
|
306
|
+
const goals = await GOAL_PERSISTER.list();
|
|
307
|
+
return { goals };
|
|
308
|
+
}
|
|
309
|
+
async function handleGoalVerify(args) {
|
|
310
|
+
const goal = await GOAL_PERSISTER.load(sanitizeGoalId(args.goalId));
|
|
311
|
+
if (!goal)
|
|
312
|
+
throw new Error(`Goal not found: ${args.goalId}`);
|
|
313
|
+
let evidence = [];
|
|
314
|
+
if (args.runId) {
|
|
315
|
+
const runState = await STATE_PERSISTER.load(args.runId);
|
|
316
|
+
if (!runState)
|
|
317
|
+
throw new Error(`Run state not found: ${args.runId}`);
|
|
318
|
+
evidence = await checkGoalEvidence(goal, { root: PROJECT_ROOT, runState });
|
|
319
|
+
await GOAL_PERSISTER.saveEvidence(goal.goalId, evidence);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
evidence = await GOAL_PERSISTER.loadEvidence(goal.goalId);
|
|
323
|
+
}
|
|
324
|
+
const constraints = checkGoalConstraints(goal);
|
|
325
|
+
const score = scoreGoal(goal, evidence);
|
|
326
|
+
return { goalId: goal.goalId, evidence, score, constraints };
|
|
327
|
+
}
|
|
328
|
+
async function handleGoalClose(args) {
|
|
329
|
+
const goal = await GOAL_PERSISTER.load(sanitizeGoalId(args.goalId));
|
|
330
|
+
if (!goal)
|
|
331
|
+
throw new Error(`Goal not found: ${args.goalId}`);
|
|
332
|
+
goal.status = "closed";
|
|
333
|
+
goal.updatedAt = new Date().toISOString();
|
|
334
|
+
await GOAL_PERSISTER.save(goal);
|
|
335
|
+
return { success: true, goalId: goal.goalId };
|
|
336
|
+
}
|
|
337
|
+
// ─── Tool handlers (Evidence) ───────────────────────────────────────────
|
|
338
|
+
async function handleEvidenceAdd(args) {
|
|
339
|
+
const goalId = sanitizeGoalId(args.goalId);
|
|
340
|
+
const goal = await GOAL_PERSISTER.load(goalId);
|
|
341
|
+
if (!goal)
|
|
342
|
+
throw new Error(`Goal not found: ${args.goalId}`);
|
|
343
|
+
const evidence = await GOAL_PERSISTER.loadEvidence(goalId);
|
|
344
|
+
evidence.push({
|
|
345
|
+
criterionId: args.criterionId,
|
|
346
|
+
passed: args.passed,
|
|
347
|
+
message: args.message,
|
|
348
|
+
ref: args.ref,
|
|
349
|
+
checkedAt: new Date().toISOString(),
|
|
350
|
+
});
|
|
351
|
+
await GOAL_PERSISTER.saveEvidence(goalId, evidence);
|
|
352
|
+
return { success: true, goalId, criterionId: args.criterionId };
|
|
353
|
+
}
|
|
354
|
+
async function handleEvidenceCheck(args) {
|
|
355
|
+
const goal = await GOAL_PERSISTER.load(sanitizeGoalId(args.goalId));
|
|
356
|
+
if (!goal)
|
|
357
|
+
throw new Error(`Goal not found: ${args.goalId}`);
|
|
358
|
+
let evidence = [];
|
|
359
|
+
if (args.runId) {
|
|
360
|
+
const runState = await STATE_PERSISTER.load(args.runId);
|
|
361
|
+
if (!runState)
|
|
362
|
+
throw new Error(`Run state not found: ${args.runId}`);
|
|
363
|
+
evidence = await checkGoalEvidence(goal, { root: PROJECT_ROOT, runState });
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
evidence = await checkGoalEvidence(goal, {
|
|
367
|
+
root: PROJECT_ROOT,
|
|
368
|
+
runState: {
|
|
369
|
+
schemaVersion: 1,
|
|
370
|
+
runId: "none",
|
|
371
|
+
nodes: [],
|
|
372
|
+
startedAt: new Date().toISOString(),
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
await GOAL_PERSISTER.saveEvidence(goal.goalId, evidence);
|
|
377
|
+
const constraints = checkGoalConstraints(goal);
|
|
378
|
+
const score = scoreGoal(goal, evidence);
|
|
379
|
+
return { goalId: goal.goalId, evidence, score, constraints };
|
|
380
|
+
}
|
|
381
|
+
// ─── Tool handlers (Run) ────────────────────────────────────────────────
|
|
382
|
+
async function handleRunState(args) {
|
|
383
|
+
const state = await STATE_PERSISTER.load(args.runId);
|
|
384
|
+
if (!state)
|
|
385
|
+
throw new Error(`Run state not found: ${args.runId}`);
|
|
386
|
+
return { state };
|
|
387
|
+
}
|
|
388
|
+
// ─── Tool handlers (Quality Gate) ───────────────────────────────────────
|
|
389
|
+
async function handleQualityGate() {
|
|
390
|
+
const config = await readFile(OMK_CONFIG_PATH, "utf-8").catch(() => "");
|
|
391
|
+
return runQualityGate(PROJECT_ROOT, config);
|
|
392
|
+
}
|
|
393
|
+
// ─── Tool handlers (Memory) ─────────────────────────────────────────────
|
|
394
|
+
async function handleMemoryRead(args) {
|
|
395
|
+
await safePath(args.path, OMK_MEMORY_DIR);
|
|
396
|
+
const content = await MEMORY_STORE.read(args.path);
|
|
397
|
+
return { content };
|
|
398
|
+
}
|
|
399
|
+
async function handleMemoryWrite(args) {
|
|
400
|
+
await safePath(args.path, OMK_MEMORY_DIR);
|
|
401
|
+
validateMemoryWrite(args.content);
|
|
402
|
+
await MEMORY_STORE.write(args.path, args.content);
|
|
403
|
+
return { success: true };
|
|
404
|
+
}
|
|
405
|
+
// ─── Tool handlers (Graph) ──────────────────────────────────────────────
|
|
406
|
+
async function handleGraphQuery(args) {
|
|
407
|
+
return MEMORY_STORE.graphQuery(args.query);
|
|
408
|
+
}
|
|
409
|
+
// ─── Tool handlers (Memory Search / Status / Ontology / Mindmap) ─────────
|
|
410
|
+
async function handleSearchMemory(args) {
|
|
411
|
+
const query = sanitizeMemoryQuery(args.query);
|
|
412
|
+
const limit = typeof args.limit === "number" ? Math.max(1, Math.min(50, Math.floor(args.limit))) : 10;
|
|
413
|
+
const searchResults = await MEMORY_STORE.search(query, limit);
|
|
414
|
+
return {
|
|
415
|
+
results: searchResults.map((r) => ({
|
|
416
|
+
type: "Memory",
|
|
417
|
+
name: r.path,
|
|
418
|
+
snippet: r.content.slice(0, 500),
|
|
419
|
+
})),
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
async function handleMemoryStatus() {
|
|
423
|
+
const status = await MEMORY_STORE.status();
|
|
424
|
+
let healthy = status.backend === "local_graph" && status.localGraph.configured;
|
|
425
|
+
let nodeCounts = {};
|
|
426
|
+
const lastSync = null;
|
|
427
|
+
try {
|
|
428
|
+
const mindmap = await MEMORY_STORE.mindmap("", 1);
|
|
429
|
+
if (mindmap) {
|
|
430
|
+
if (status.backend === "kuzu")
|
|
431
|
+
healthy = true;
|
|
432
|
+
nodeCounts = mindmap.nodes.reduce((acc, node) => {
|
|
433
|
+
acc[node.type] = (acc[node.type] ?? 0) + 1;
|
|
434
|
+
return acc;
|
|
435
|
+
}, {});
|
|
436
|
+
// lastSync not available from mindmap structure; set to null
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
// Fallback: node counts unavailable
|
|
441
|
+
}
|
|
442
|
+
return {
|
|
443
|
+
backend: status.backend,
|
|
444
|
+
healthy,
|
|
445
|
+
nodeCounts,
|
|
446
|
+
lastSync,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
async function handleMemoryOntology(args) {
|
|
450
|
+
const ontology = await MEMORY_STORE.ontology();
|
|
451
|
+
return { ontology, nodeType: args.nodeType };
|
|
452
|
+
}
|
|
453
|
+
async function handleMemoryMindmap(args) {
|
|
454
|
+
const query = args.query ? sanitizeMemoryQuery(args.query) : undefined;
|
|
455
|
+
const limit = typeof args.depth === "number" ? Math.max(1, Math.min(250, args.depth * 20)) : 80;
|
|
456
|
+
const mindmap = await MEMORY_STORE.mindmap(query, limit);
|
|
457
|
+
return { mindmap };
|
|
458
|
+
}
|
|
459
|
+
// ─── Tool handlers (Goal Next Action) ────────────────────────────────────
|
|
460
|
+
async function handleGoalNext(args) {
|
|
461
|
+
let goalId = args.goalId;
|
|
462
|
+
if (!goalId) {
|
|
463
|
+
const goals = await GOAL_PERSISTER.list();
|
|
464
|
+
for (const id of goals) {
|
|
465
|
+
const g = await GOAL_PERSISTER.load(id);
|
|
466
|
+
if (g && g.status !== "closed" && g.status !== "done" && g.status !== "cancelled") {
|
|
467
|
+
goalId = g.goalId;
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
if (!goalId) {
|
|
473
|
+
throw new Error("No active goal found");
|
|
474
|
+
}
|
|
475
|
+
const goal = await GOAL_PERSISTER.load(sanitizeGoalId(goalId));
|
|
476
|
+
if (!goal)
|
|
477
|
+
throw new Error(`Goal not found: ${goalId}`);
|
|
478
|
+
const evidence = await GOAL_PERSISTER.loadEvidence(goal.goalId);
|
|
479
|
+
const missingCriteria = evaluateMissingCriteria(goal, evidence);
|
|
480
|
+
const suggestion = suggestNextAction(goal, evidence);
|
|
481
|
+
const recommendedCommands = [];
|
|
482
|
+
const recommendedSkills = [];
|
|
483
|
+
if (goal.riskLevel === "high") {
|
|
484
|
+
recommendedCommands.push("omk_quality_gate", "omk_save_checkpoint");
|
|
485
|
+
recommendedSkills.push("omk-plan-first", "omk-quality-gate");
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
recommendedCommands.push("omk_quality_gate");
|
|
489
|
+
recommendedSkills.push("omk-quality-gate");
|
|
490
|
+
}
|
|
491
|
+
if (missingCriteria.some((c) => c.requirement === "required")) {
|
|
492
|
+
recommendedSkills.push("omk-test-debug-loop");
|
|
493
|
+
}
|
|
494
|
+
return {
|
|
495
|
+
goal: {
|
|
496
|
+
goalId: goal.goalId,
|
|
497
|
+
title: goal.title,
|
|
498
|
+
objective: goal.objective,
|
|
499
|
+
status: goal.status,
|
|
500
|
+
},
|
|
501
|
+
missingCriteria,
|
|
502
|
+
latestEvidence: evidence.slice(-10),
|
|
503
|
+
suggestedNextAction: suggestion,
|
|
504
|
+
recommendedCommands,
|
|
505
|
+
recommendedSkills,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
// ─── Context compression with ontology grounding ─────────────────────────
|
|
509
|
+
async function handleCompressContext(args) {
|
|
510
|
+
const limit = Math.max(1, Math.min(50, args.limit ?? 20));
|
|
511
|
+
const sources = [];
|
|
512
|
+
// 1. Pull ontology schema
|
|
513
|
+
try {
|
|
514
|
+
const ontology = await MEMORY_STORE.ontology();
|
|
515
|
+
if (ontology) {
|
|
516
|
+
sources.push({
|
|
517
|
+
type: "ontology",
|
|
518
|
+
label: `Project Ontology (${ontology.version})`,
|
|
519
|
+
content: `Classes: ${ontology.classes.join(", ")}\nRelations: ${ontology.relationTypes.join(", ")}`,
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
catch {
|
|
524
|
+
// ignore ontology failures
|
|
525
|
+
}
|
|
526
|
+
// 2. Pull mindmap centered on query
|
|
527
|
+
try {
|
|
528
|
+
const mindmap = await MEMORY_STORE.mindmap(args.query, limit);
|
|
529
|
+
if (mindmap && mindmap.nodes.length > 0) {
|
|
530
|
+
const relevant = mindmap.nodes
|
|
531
|
+
.filter((n) => n.type === "Goal" || n.type === "Task" || n.type === "Decision" || n.type === "Evidence" || n.type === "Concept")
|
|
532
|
+
.slice(0, limit)
|
|
533
|
+
.map((n) => `- ${n.label} (${n.type})${n.summary ? `: ${n.summary}` : ""}`)
|
|
534
|
+
.join("\n");
|
|
535
|
+
if (relevant) {
|
|
536
|
+
sources.push({
|
|
537
|
+
type: "mindmap",
|
|
538
|
+
label: `Mindmap: ${args.query}`,
|
|
539
|
+
content: relevant,
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
// ignore mindmap failures
|
|
546
|
+
}
|
|
547
|
+
// 3. Search memory for related facts
|
|
548
|
+
try {
|
|
549
|
+
const searchResults = await MEMORY_STORE.search(args.query, limit);
|
|
550
|
+
if (searchResults.length > 0) {
|
|
551
|
+
const relevant = searchResults
|
|
552
|
+
.slice(0, Math.min(10, limit))
|
|
553
|
+
.map((r) => `- ${r.path}: ${r.content.slice(0, 200)}`)
|
|
554
|
+
.join("\n");
|
|
555
|
+
sources.push({
|
|
556
|
+
type: "search",
|
|
557
|
+
label: `Memory Search: ${args.query}`,
|
|
558
|
+
content: relevant,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
catch {
|
|
563
|
+
// ignore search failures
|
|
564
|
+
}
|
|
565
|
+
// 4. Fetch recent ensemble decisions if query looks like a goal
|
|
566
|
+
try {
|
|
567
|
+
const { recallRecentEnsembleDecisions } = await import("../goal/ensemble-memory.js");
|
|
568
|
+
const recent = await recallRecentEnsembleDecisions(args.query, PROJECT_ROOT, 3);
|
|
569
|
+
if (recent.length > 0) {
|
|
570
|
+
const content = recent
|
|
571
|
+
.map((d) => `- [${d.timestamp}] action=${d.action}, confidence=${d.confidence.toFixed(2)}\n ${d.candidateVotes.map((v) => ` ${v.id}: ${v.action} (weight=${v.weight}) — ${v.reason}`).join("\n")}`)
|
|
572
|
+
.join("\n");
|
|
573
|
+
sources.push({
|
|
574
|
+
type: "ensemble",
|
|
575
|
+
label: "Recent Ensemble Decisions",
|
|
576
|
+
content,
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
catch {
|
|
581
|
+
// ignore ensemble recall failures
|
|
582
|
+
}
|
|
583
|
+
// 5. Build grounded briefing
|
|
584
|
+
const briefingLines = [
|
|
585
|
+
`# Ground Truth Briefing for Context Compression`,
|
|
586
|
+
``,
|
|
587
|
+
`> Query: ${args.query}`,
|
|
588
|
+
`> Sources: ${sources.length} (ontology, mindmap, memory search, ensemble decisions)`,
|
|
589
|
+
``,
|
|
590
|
+
`## Rules for compression`,
|
|
591
|
+
`- Preserve every class, relation, and decision listed below.`,
|
|
592
|
+
`- Do not invent nodes, files, or APIs that are not present in the sources.`,
|
|
593
|
+
`- When summarizing, anchor statements to specific source types (ontology / mindmap / search / ensemble).`,
|
|
594
|
+
``,
|
|
595
|
+
];
|
|
596
|
+
for (const src of sources) {
|
|
597
|
+
briefingLines.push(`## ${src.label} [${src.type}]`, src.content, ``);
|
|
598
|
+
}
|
|
599
|
+
briefingLines.push(`## End of Ground Truth Briefing`, `Compress the conversation context above, keeping these grounded facts as immovable anchors.`);
|
|
600
|
+
return {
|
|
601
|
+
briefing: briefingLines.join("\n"),
|
|
602
|
+
sources,
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
// ─── Legacy tool handlers (kept for internal use, not exported) ─────────
|
|
606
|
+
async function handleReadConfig() {
|
|
607
|
+
const content = await readFile(OMK_CONFIG_PATH, "utf-8").catch(() => "");
|
|
608
|
+
return { content };
|
|
609
|
+
}
|
|
610
|
+
async function handleWriteConfig(args) {
|
|
611
|
+
if (!canWriteConfig()) {
|
|
612
|
+
throw new Error(configWriteDeniedMessage());
|
|
613
|
+
}
|
|
614
|
+
if (!args.content || args.content.length > 100_000) {
|
|
615
|
+
throw new Error("Invalid config content: empty or exceeds 100KB");
|
|
616
|
+
}
|
|
617
|
+
await writeFile(OMK_CONFIG_PATH, args.content, "utf-8");
|
|
618
|
+
return { success: true };
|
|
619
|
+
}
|
|
620
|
+
async function handleListAgents() {
|
|
621
|
+
if (!(await pathExists(OMK_AGENTS_DIR)))
|
|
622
|
+
return { agents: [] };
|
|
623
|
+
const entries = await readdir(OMK_AGENTS_DIR, { withFileTypes: true });
|
|
624
|
+
const agents = entries.filter((e) => e.isFile() && e.name.endsWith(".yaml")).map((e) => e.name.replace(/\.yaml$/, ""));
|
|
625
|
+
return { agents };
|
|
626
|
+
}
|
|
627
|
+
async function handleReadAgent(args) {
|
|
628
|
+
const full = await safePath(`${args.name}.yaml`, OMK_AGENTS_DIR);
|
|
629
|
+
const content = await readFile(full, "utf-8").catch(() => "");
|
|
630
|
+
return { content };
|
|
631
|
+
}
|
|
632
|
+
async function handleListRuns() {
|
|
633
|
+
if (!(await pathExists(OMK_RUNS_DIR)))
|
|
634
|
+
return { runs: [] };
|
|
635
|
+
const entries = await readdir(OMK_RUNS_DIR, { withFileTypes: true });
|
|
636
|
+
const runs = entries
|
|
637
|
+
.filter((e) => e.isDirectory())
|
|
638
|
+
.map((e) => ({
|
|
639
|
+
id: e.name,
|
|
640
|
+
createdAt: parseRunDate(e.name),
|
|
641
|
+
}))
|
|
642
|
+
.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
643
|
+
return { runs };
|
|
644
|
+
}
|
|
645
|
+
function parseRunDate(runId) {
|
|
646
|
+
try {
|
|
647
|
+
const parts = runId.split("T");
|
|
648
|
+
if (parts.length === 2) {
|
|
649
|
+
const date = parts[0];
|
|
650
|
+
const time = parts[1].replace(/-/g, ":").replace(/:(\d+)Z$/, ".$1Z");
|
|
651
|
+
return `${date}T${time}`;
|
|
652
|
+
}
|
|
653
|
+
return runId;
|
|
654
|
+
}
|
|
655
|
+
catch {
|
|
656
|
+
return runId;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
async function handleReadRun(args) {
|
|
660
|
+
const runDir = await safePath(args.runId, OMK_RUNS_DIR);
|
|
661
|
+
const [goal, plan] = await Promise.all([
|
|
662
|
+
readFile(join(runDir, "goal.md"), "utf-8").catch(() => ""),
|
|
663
|
+
readFile(join(runDir, "plan.md"), "utf-8").catch(() => ""),
|
|
664
|
+
]);
|
|
665
|
+
return { goal, plan };
|
|
666
|
+
}
|
|
667
|
+
async function handleGetProjectInfo() {
|
|
668
|
+
const config = await readFile(OMK_CONFIG_PATH, "utf-8").catch(() => "");
|
|
669
|
+
const nameMatch = config.match(/^name\s*=\s*"([^"]+)"/m);
|
|
670
|
+
const descMatch = config.match(/^description\s*=\s*"([^"]*)"/m);
|
|
671
|
+
let gitBranch;
|
|
672
|
+
let gitClean = true;
|
|
673
|
+
let gitChanges = 0;
|
|
674
|
+
try {
|
|
675
|
+
gitBranch = execFileSync("git", ["branch", "--show-current"], { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000 }).trim();
|
|
676
|
+
const status = execFileSync("git", ["status", "--porcelain"], { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000 }).trim();
|
|
677
|
+
const lines = status.split("\n").filter((l) => l.trim().length > 0);
|
|
678
|
+
gitChanges = lines.length;
|
|
679
|
+
gitClean = lines.length === 0;
|
|
680
|
+
}
|
|
681
|
+
catch {
|
|
682
|
+
// ignore git errors
|
|
683
|
+
}
|
|
684
|
+
return {
|
|
685
|
+
name: nameMatch?.[1] ?? "my-project",
|
|
686
|
+
description: descMatch?.[1] ?? undefined,
|
|
687
|
+
gitBranch,
|
|
688
|
+
gitClean,
|
|
689
|
+
gitChanges,
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
async function handleGetQualitySettings() {
|
|
693
|
+
const config = await readFile(OMK_CONFIG_PATH, "utf-8").catch(() => "");
|
|
694
|
+
const lint = config.match(/^lint\s*=\s*"([^"]+)"/m)?.[1] ?? "auto";
|
|
695
|
+
const test = config.match(/^test\s*=\s*"([^"]+)"/m)?.[1] ?? "auto";
|
|
696
|
+
const typecheck = config.match(/^typecheck\s*=\s*"([^"]+)"/m)?.[1] ?? "auto";
|
|
697
|
+
const build = config.match(/^build\s*=\s*"([^"]+)"/m)?.[1] ?? "auto";
|
|
698
|
+
return { lint, test, typecheck, build };
|
|
699
|
+
}
|
|
700
|
+
async function handleGetApprovalPolicy() {
|
|
701
|
+
const config = await readFile(OMK_CONFIG_PATH, "utf-8").catch(() => "");
|
|
702
|
+
const policy = config.match(/^approval_policy\s*=\s*"([^"]+)"/m)?.[1] ?? "auto";
|
|
703
|
+
return { policy };
|
|
704
|
+
}
|
|
705
|
+
async function handleListWorktrees() {
|
|
706
|
+
const worktreesDir = join(OMK_DIR, "worktrees");
|
|
707
|
+
if (!(await pathExists(worktreesDir)))
|
|
708
|
+
return { worktrees: [] };
|
|
709
|
+
const result = [];
|
|
710
|
+
const runEntries = await readdir(worktreesDir, { withFileTypes: true });
|
|
711
|
+
for (const runEntry of runEntries) {
|
|
712
|
+
if (!runEntry.isDirectory())
|
|
713
|
+
continue;
|
|
714
|
+
const runPath = join(worktreesDir, runEntry.name);
|
|
715
|
+
const nodeEntries = await readdir(runPath, { withFileTypes: true });
|
|
716
|
+
for (const nodeEntry of nodeEntries) {
|
|
717
|
+
if (nodeEntry.isDirectory()) {
|
|
718
|
+
result.push(join(runPath, nodeEntry.name));
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
return { worktrees: result };
|
|
723
|
+
}
|
|
724
|
+
async function handleRunQualityGatePrint() {
|
|
725
|
+
const config = await readFile(OMK_CONFIG_PATH, "utf-8").catch(() => "");
|
|
726
|
+
const results = await runQualityGate(PROJECT_ROOT, config);
|
|
727
|
+
const { printQualityGateResults } = await import("./quality-gate.js");
|
|
728
|
+
return { text: printQualityGateResults(results, true) };
|
|
729
|
+
}
|
|
730
|
+
async function handleSaveCheckpoint(args) {
|
|
731
|
+
return saveCheckpoint(args.runId, args.label, args.metadata);
|
|
732
|
+
}
|
|
733
|
+
async function handleListCheckpoints(args) {
|
|
734
|
+
const checkpoints = await listCheckpoints(args.runId);
|
|
735
|
+
return { checkpoints };
|
|
736
|
+
}
|
|
737
|
+
async function handleRestoreCheckpoint(args) {
|
|
738
|
+
return restoreCheckpoint(args.checkpointId, args.runId, { force: args.force === true });
|
|
739
|
+
}
|
|
740
|
+
// ─── Tool handlers (Session / TODO) ─────────────────────────────────────
|
|
741
|
+
async function handleListSessions(args) {
|
|
742
|
+
const status = args.status;
|
|
743
|
+
if (!status || status === "active") {
|
|
744
|
+
const sessions = await listActiveSessions();
|
|
745
|
+
return { sessions };
|
|
746
|
+
}
|
|
747
|
+
const runsDir = join(OMK_DIR, "runs");
|
|
748
|
+
if (!(await pathExists(runsDir)))
|
|
749
|
+
return { sessions: [] };
|
|
750
|
+
const entries = await readdir(runsDir, { withFileTypes: true });
|
|
751
|
+
const sessions = [];
|
|
752
|
+
for (const entry of entries) {
|
|
753
|
+
if (!entry.isDirectory())
|
|
754
|
+
continue;
|
|
755
|
+
const meta = await readSessionMeta(entry.name).catch(() => null);
|
|
756
|
+
if (meta && meta.status === status) {
|
|
757
|
+
sessions.push(meta);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
return { sessions: sessions.sort((a, b) => b.startedAt.localeCompare(a.startedAt)) };
|
|
761
|
+
}
|
|
762
|
+
async function handleReadTodos(args) {
|
|
763
|
+
const fromFile = await readTodos(args.runId);
|
|
764
|
+
if (fromFile !== null) {
|
|
765
|
+
return { todos: redactSecrets(fromFile), source: "todos.json" };
|
|
766
|
+
}
|
|
767
|
+
const fromState = await deriveTodosFromState(args.runId);
|
|
768
|
+
if (fromState && fromState.length > 0) {
|
|
769
|
+
return { todos: redactSecrets(fromState), source: "state.json" };
|
|
770
|
+
}
|
|
771
|
+
return { todos: [], source: null };
|
|
772
|
+
}
|
|
773
|
+
async function handleTailRunEvents(args) {
|
|
774
|
+
const runId = sanitizeRunId(args.runId);
|
|
775
|
+
const runDir = join(OMK_RUNS_DIR, runId);
|
|
776
|
+
const events = await tailEvents(runDir, {
|
|
777
|
+
afterSeq: typeof args.afterSeq === "number" ? args.afterSeq : undefined,
|
|
778
|
+
limit: typeof args.limit === "number" ? Math.max(0, Math.min(500, args.limit)) : 200,
|
|
779
|
+
});
|
|
780
|
+
return { events: redactSecrets(events), source: "events.jsonl" };
|
|
781
|
+
}
|
|
782
|
+
async function handleReadRunState(args) {
|
|
783
|
+
const runId = sanitizeRunId(args.runId);
|
|
784
|
+
const [state, events, todos] = await Promise.all([
|
|
785
|
+
STATE_PERSISTER.load(runId),
|
|
786
|
+
readEvents(join(OMK_RUNS_DIR, runId)).catch(() => []),
|
|
787
|
+
loadTodos(runId).catch(() => null),
|
|
788
|
+
]);
|
|
789
|
+
return { state: redactSecrets(state), events: redactSecrets(events), todos: redactSecrets(todos) };
|
|
790
|
+
}
|
|
791
|
+
async function handleReadRuntimeStatus(args = {}) {
|
|
792
|
+
const runId = args.runId ? sanitizeRunId(args.runId) : await resolveLatestRunIdForMcp();
|
|
793
|
+
if (!runId)
|
|
794
|
+
return { runId: null, state: null, events: [], todos: null, mcpStatus: null };
|
|
795
|
+
const mcpStatusPath = join(OMK_RUNS_DIR, runId, "mcp-status.json");
|
|
796
|
+
const [state, events, todos, mcpStatus] = await Promise.all([
|
|
797
|
+
STATE_PERSISTER.load(runId),
|
|
798
|
+
tailEvents(join(OMK_RUNS_DIR, runId), { limit: 200 }).catch(() => []),
|
|
799
|
+
loadTodos(runId).catch(() => null),
|
|
800
|
+
readFile(mcpStatusPath, "utf-8").then((raw) => redactSecrets(JSON.parse(raw))).catch(() => null),
|
|
801
|
+
]);
|
|
802
|
+
return { runId, state: redactSecrets(state), events: redactSecrets(events), todos: redactSecrets(todos), mcpStatus };
|
|
803
|
+
}
|
|
804
|
+
async function resolveLatestRunIdForMcp() {
|
|
805
|
+
if (!(await pathExists(OMK_RUNS_DIR)))
|
|
806
|
+
return null;
|
|
807
|
+
const entries = await readdir(OMK_RUNS_DIR, { withFileTypes: true });
|
|
808
|
+
let best = null;
|
|
809
|
+
for (const entry of entries) {
|
|
810
|
+
if (!entry.isDirectory())
|
|
811
|
+
continue;
|
|
812
|
+
const statePath = join(OMK_RUNS_DIR, entry.name, "state.json");
|
|
813
|
+
try {
|
|
814
|
+
const real = await safePath(join(entry.name, "state.json"), OMK_RUNS_DIR);
|
|
815
|
+
if (real !== statePath && !real.endsWith(join(entry.name, "state.json")))
|
|
816
|
+
continue;
|
|
817
|
+
const stats = await stat(statePath);
|
|
818
|
+
if (!best || stats.mtimeMs > best.mtimeMs)
|
|
819
|
+
best = { name: entry.name, mtimeMs: stats.mtimeMs };
|
|
820
|
+
}
|
|
821
|
+
catch {
|
|
822
|
+
// ignore invalid run directories
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
return best?.name ?? null;
|
|
826
|
+
}
|
|
827
|
+
async function resolveTodoWriteRunId(runId) {
|
|
828
|
+
const candidate = runId ?? process.env.OMK_SESSION_ID ?? await resolveLatestRunIdForMcp();
|
|
829
|
+
if (!candidate) {
|
|
830
|
+
throw new Error("TodoWrite requires runId when no active OMK session can be inferred");
|
|
831
|
+
}
|
|
832
|
+
return sanitizeRunId(candidate);
|
|
833
|
+
}
|
|
834
|
+
async function handleWriteTodos(args) {
|
|
835
|
+
const runId = sanitizeRunId(args.runId);
|
|
836
|
+
const todos = normalizeTodoItems(args.todos);
|
|
837
|
+
await writeTodos(runId, todos);
|
|
838
|
+
return { runId, written: todos.length };
|
|
839
|
+
}
|
|
840
|
+
async function handleTodoWrite(args) {
|
|
841
|
+
const input = args && typeof args === "object" ? args : {};
|
|
842
|
+
const runId = await resolveTodoWriteRunId(input.runId);
|
|
843
|
+
const todos = normalizeTodoWriteInput(args);
|
|
844
|
+
await writeTodos(runId, todos);
|
|
845
|
+
return { runId, written: todos.length, source: "TodoWrite" };
|
|
846
|
+
}
|
|
847
|
+
async function handleOmkTodoWrite(args) {
|
|
848
|
+
const runId = await resolveTodoWriteRunId(args.runId);
|
|
849
|
+
const existing = await readTodos(runId).then((todos) => todos ?? []);
|
|
850
|
+
const result = applyTodoWriteOperations(existing, args.ops);
|
|
851
|
+
await writeTodos(runId, result.todos);
|
|
852
|
+
return {
|
|
853
|
+
runId,
|
|
854
|
+
applied: result.applied,
|
|
855
|
+
written: result.todos.length,
|
|
856
|
+
todos: redactSecrets(result.todos),
|
|
857
|
+
};
|
|
858
|
+
}
|
|
859
|
+
// ─── Resource registry ──────────────────────────────────────────────────
|
|
860
|
+
const RESOURCES = [
|
|
861
|
+
{
|
|
862
|
+
uri: "omk://goal/{goalId}",
|
|
863
|
+
name: "GoalSpec",
|
|
864
|
+
description: "Structured goal specification JSON by goal ID",
|
|
865
|
+
mimeType: "application/json",
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
uri: "omk://run/{runId}",
|
|
869
|
+
name: "RunState",
|
|
870
|
+
description: "Run state JSON by run ID",
|
|
871
|
+
mimeType: "application/json",
|
|
872
|
+
},
|
|
873
|
+
{
|
|
874
|
+
uri: "omk://ontology/project",
|
|
875
|
+
name: "ProjectOntology",
|
|
876
|
+
description: "Project ontology graph summary from the memory backend",
|
|
877
|
+
mimeType: "application/json",
|
|
878
|
+
},
|
|
879
|
+
];
|
|
880
|
+
// ─── Prompt registry ────────────────────────────────────────────────────
|
|
881
|
+
const PROMPTS = [
|
|
882
|
+
{
|
|
883
|
+
name: "goal-intake",
|
|
884
|
+
description: "Prompt template for normalizing a raw goal into GoalSpec",
|
|
885
|
+
arguments: [{ name: "rawGoal", description: "The raw user goal text", required: false }],
|
|
886
|
+
},
|
|
887
|
+
{
|
|
888
|
+
name: "evidence-review",
|
|
889
|
+
description: "Prompt template for reviewing evidence against criteria",
|
|
890
|
+
arguments: [{ name: "goalId", description: "Goal ID to review", required: false }],
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
name: "quality-gate",
|
|
894
|
+
description: "Prompt template for running lint/test/build/audit",
|
|
895
|
+
arguments: [{ name: "scope", description: "Scope of gates to run (default: all)", required: false }],
|
|
896
|
+
},
|
|
897
|
+
];
|
|
898
|
+
// ─── Tool registry ──────────────────────────────────────────────────────
|
|
899
|
+
const TOOLS = [
|
|
900
|
+
// ── Goal lifecycle ──
|
|
901
|
+
{
|
|
902
|
+
name: "omk_goal_create",
|
|
903
|
+
description: "Create a GoalSpec from a raw prompt. Infers title, objective, criteria, and risk level.",
|
|
904
|
+
inputSchema: {
|
|
905
|
+
type: "object",
|
|
906
|
+
properties: {
|
|
907
|
+
rawPrompt: { type: "string", description: "Raw user goal text" },
|
|
908
|
+
title: { type: "string", description: "Optional explicit title" },
|
|
909
|
+
objective: { type: "string", description: "Optional explicit objective" },
|
|
910
|
+
successCriteria: {
|
|
911
|
+
type: "array",
|
|
912
|
+
description: "Optional explicit success criteria",
|
|
913
|
+
items: {
|
|
914
|
+
type: "object",
|
|
915
|
+
properties: {
|
|
916
|
+
id: { type: "string" },
|
|
917
|
+
description: { type: "string" },
|
|
918
|
+
requirement: { type: "string", enum: ["required", "optional"] },
|
|
919
|
+
weight: { type: "number" },
|
|
920
|
+
},
|
|
921
|
+
required: ["id", "description", "requirement", "weight"],
|
|
922
|
+
},
|
|
923
|
+
},
|
|
924
|
+
constraints: { type: "array", description: "Optional constraint descriptions", items: { type: "string" } },
|
|
925
|
+
nonGoals: { type: "array", description: "Explicit out-of-scope items", items: { type: "string" } },
|
|
926
|
+
expectedArtifacts: {
|
|
927
|
+
type: "array",
|
|
928
|
+
description: "Expected deliverables",
|
|
929
|
+
items: {
|
|
930
|
+
type: "object",
|
|
931
|
+
properties: {
|
|
932
|
+
name: { type: "string" },
|
|
933
|
+
path: { type: "string" },
|
|
934
|
+
},
|
|
935
|
+
required: ["name"],
|
|
936
|
+
},
|
|
937
|
+
},
|
|
938
|
+
riskLevel: { type: "string", enum: ["low", "medium", "high"], description: "Optional risk override" },
|
|
939
|
+
},
|
|
940
|
+
required: ["rawPrompt"],
|
|
941
|
+
},
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
name: "omk_goal_show",
|
|
945
|
+
description: "Read a GoalSpec by ID",
|
|
946
|
+
inputSchema: {
|
|
947
|
+
type: "object",
|
|
948
|
+
properties: {
|
|
949
|
+
goalId: { type: "string", description: "Goal identifier" },
|
|
950
|
+
},
|
|
951
|
+
required: ["goalId"],
|
|
952
|
+
},
|
|
953
|
+
},
|
|
954
|
+
{
|
|
955
|
+
name: "omk_goal_list",
|
|
956
|
+
description: "List all goal IDs",
|
|
957
|
+
inputSchema: { type: "object", properties: {} },
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
name: "omk_goal_verify",
|
|
961
|
+
description: "Verify goal evidence and compute a pass/fail score",
|
|
962
|
+
inputSchema: {
|
|
963
|
+
type: "object",
|
|
964
|
+
properties: {
|
|
965
|
+
goalId: { type: "string", description: "Goal identifier" },
|
|
966
|
+
runId: { type: "string", description: "Optional run ID to pull node-level evidence from" },
|
|
967
|
+
},
|
|
968
|
+
required: ["goalId"],
|
|
969
|
+
},
|
|
970
|
+
},
|
|
971
|
+
{
|
|
972
|
+
name: "omk_goal_close",
|
|
973
|
+
description: "Close a goal by ID",
|
|
974
|
+
inputSchema: {
|
|
975
|
+
type: "object",
|
|
976
|
+
properties: {
|
|
977
|
+
goalId: { type: "string", description: "Goal identifier" },
|
|
978
|
+
},
|
|
979
|
+
required: ["goalId"],
|
|
980
|
+
},
|
|
981
|
+
},
|
|
982
|
+
// ── Evidence ──
|
|
983
|
+
{
|
|
984
|
+
name: "omk_evidence_add",
|
|
985
|
+
description: "Add evidence to a success criterion",
|
|
986
|
+
inputSchema: {
|
|
987
|
+
type: "object",
|
|
988
|
+
properties: {
|
|
989
|
+
goalId: { type: "string", description: "Goal identifier" },
|
|
990
|
+
criterionId: { type: "string", description: "Criterion identifier" },
|
|
991
|
+
passed: { type: "boolean", description: "Whether the criterion is satisfied" },
|
|
992
|
+
message: { type: "string", description: "Human-readable evidence summary" },
|
|
993
|
+
ref: { type: "string", description: "Reference (URL, commit, file path)" },
|
|
994
|
+
},
|
|
995
|
+
required: ["goalId", "criterionId", "passed"],
|
|
996
|
+
},
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
name: "omk_evidence_check",
|
|
1000
|
+
description: "Check evidence gates for a goal (artifact gates + criterion stubs)",
|
|
1001
|
+
inputSchema: {
|
|
1002
|
+
type: "object",
|
|
1003
|
+
properties: {
|
|
1004
|
+
goalId: { type: "string", description: "Goal identifier" },
|
|
1005
|
+
runId: { type: "string", description: "Optional run ID to pull node-level evidence from" },
|
|
1006
|
+
},
|
|
1007
|
+
required: ["goalId"],
|
|
1008
|
+
},
|
|
1009
|
+
},
|
|
1010
|
+
// ── Run ──
|
|
1011
|
+
{
|
|
1012
|
+
name: "omk_run_state",
|
|
1013
|
+
description: "Get run state by ID",
|
|
1014
|
+
inputSchema: {
|
|
1015
|
+
type: "object",
|
|
1016
|
+
properties: {
|
|
1017
|
+
runId: { type: "string", description: "Run identifier" },
|
|
1018
|
+
},
|
|
1019
|
+
required: ["runId"],
|
|
1020
|
+
},
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
name: "omk_tail_run_events",
|
|
1024
|
+
description: "Tail append-only telemetry events for a run (secret-free summaries only)",
|
|
1025
|
+
inputSchema: {
|
|
1026
|
+
type: "object",
|
|
1027
|
+
properties: {
|
|
1028
|
+
runId: { type: "string", description: "Run identifier" },
|
|
1029
|
+
afterSeq: { type: "number", description: "Only return events with seq greater than this value" },
|
|
1030
|
+
limit: { type: "number", description: "Maximum events to return (0-500, default 200)" },
|
|
1031
|
+
},
|
|
1032
|
+
required: ["runId"],
|
|
1033
|
+
},
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
name: "omk_read_run_state",
|
|
1037
|
+
description: "Read run state plus telemetry and canonical todos for a run",
|
|
1038
|
+
inputSchema: {
|
|
1039
|
+
type: "object",
|
|
1040
|
+
properties: {
|
|
1041
|
+
runId: { type: "string", description: "Run identifier" },
|
|
1042
|
+
},
|
|
1043
|
+
required: ["runId"],
|
|
1044
|
+
},
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
name: "omk_read_runtime_status",
|
|
1048
|
+
description: "Read latest or selected run state, telemetry, todos, and MCP status metadata",
|
|
1049
|
+
inputSchema: {
|
|
1050
|
+
type: "object",
|
|
1051
|
+
properties: {
|
|
1052
|
+
runId: { type: "string", description: "Optional run identifier; latest run is used when omitted" },
|
|
1053
|
+
},
|
|
1054
|
+
},
|
|
1055
|
+
},
|
|
1056
|
+
// ── Quality gate ──
|
|
1057
|
+
{
|
|
1058
|
+
name: "omk_quality_gate",
|
|
1059
|
+
description: "Run quality gates: lint, typecheck, test, and build",
|
|
1060
|
+
inputSchema: { type: "object", properties: {} },
|
|
1061
|
+
},
|
|
1062
|
+
// ── Memory ──
|
|
1063
|
+
{
|
|
1064
|
+
name: "omk_memory_read",
|
|
1065
|
+
description: "Read canonical full project memory content from the graph or filesystem mirror",
|
|
1066
|
+
inputSchema: {
|
|
1067
|
+
type: "object",
|
|
1068
|
+
properties: {
|
|
1069
|
+
path: { type: "string", description: "Relative path under .omk/memory/" },
|
|
1070
|
+
},
|
|
1071
|
+
required: ["path"],
|
|
1072
|
+
},
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
name: "omk_memory_write",
|
|
1076
|
+
description: "Write canonical project memory with validation (non-empty, JSON-checked)",
|
|
1077
|
+
inputSchema: {
|
|
1078
|
+
type: "object",
|
|
1079
|
+
properties: {
|
|
1080
|
+
path: { type: "string", description: "Relative path under .omk/memory/" },
|
|
1081
|
+
content: { type: "string", description: "Content to write" },
|
|
1082
|
+
},
|
|
1083
|
+
required: ["path", "content"],
|
|
1084
|
+
},
|
|
1085
|
+
},
|
|
1086
|
+
// ── Graph ──
|
|
1087
|
+
{
|
|
1088
|
+
name: "omk_graph_query",
|
|
1089
|
+
description: "Run read-only queries over the graph memory backend. local_graph supports GraphQL-lite (ontology, memory, memories, mindmap, nodes). kuzu supports read-only Cypher queries.",
|
|
1090
|
+
inputSchema: {
|
|
1091
|
+
type: "object",
|
|
1092
|
+
properties: {
|
|
1093
|
+
query: {
|
|
1094
|
+
type: "string",
|
|
1095
|
+
description: 'GraphQL-lite example: query { mindmap(query: "decision", limit: 20) { root nodes edges } }. Cypher example: MATCH (n:OmkTask {projectId: $projectId}) RETURN n LIMIT 10',
|
|
1096
|
+
},
|
|
1097
|
+
},
|
|
1098
|
+
required: ["query"],
|
|
1099
|
+
},
|
|
1100
|
+
},
|
|
1101
|
+
// ── Memory search / status / ontology / mindmap ──
|
|
1102
|
+
{
|
|
1103
|
+
name: "omk_search_memory",
|
|
1104
|
+
description: "Search the configured local graph or Kuzu memory backend for nodes matching query",
|
|
1105
|
+
inputSchema: {
|
|
1106
|
+
type: "object",
|
|
1107
|
+
properties: {
|
|
1108
|
+
query: { type: "string", description: "Search query string" },
|
|
1109
|
+
limit: { type: "number", description: "Max results (1-50, default 10)" },
|
|
1110
|
+
},
|
|
1111
|
+
required: ["query"],
|
|
1112
|
+
},
|
|
1113
|
+
},
|
|
1114
|
+
{
|
|
1115
|
+
name: "omk_memory_status",
|
|
1116
|
+
description: "Return current memory backend status, connection health, node counts, and last sync timestamp",
|
|
1117
|
+
inputSchema: { type: "object", properties: {} },
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
name: "omk_memory_ontology",
|
|
1121
|
+
description: "Return the ontology schema for the requested node type, or all node types if not specified",
|
|
1122
|
+
inputSchema: {
|
|
1123
|
+
type: "object",
|
|
1124
|
+
properties: {
|
|
1125
|
+
nodeType: { type: "string", description: "Optional node type to filter schema" },
|
|
1126
|
+
},
|
|
1127
|
+
},
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
name: "omk_memory_mindmap",
|
|
1131
|
+
description: "Return a mindmap-style subgraph centered on the query term, or project-level root graph if no query",
|
|
1132
|
+
inputSchema: {
|
|
1133
|
+
type: "object",
|
|
1134
|
+
properties: {
|
|
1135
|
+
query: { type: "string", description: "Optional center query term" },
|
|
1136
|
+
depth: { type: "number", description: "Optional exploration depth (maps to result limit)" },
|
|
1137
|
+
},
|
|
1138
|
+
},
|
|
1139
|
+
},
|
|
1140
|
+
// ── Goal next action ──
|
|
1141
|
+
{
|
|
1142
|
+
name: "omk_goal_next",
|
|
1143
|
+
description: "Get the next recommended action for a goal. Uses the latest active goal if goalId is omitted.",
|
|
1144
|
+
inputSchema: {
|
|
1145
|
+
type: "object",
|
|
1146
|
+
properties: {
|
|
1147
|
+
goalId: { type: "string", description: "Optional goal identifier" },
|
|
1148
|
+
},
|
|
1149
|
+
},
|
|
1150
|
+
},
|
|
1151
|
+
// ── Context compression with ontology grounding ──
|
|
1152
|
+
{
|
|
1153
|
+
name: "omk_compress_context",
|
|
1154
|
+
description: "Prepare a hallucination-resistant context briefing by pulling the ontology, mindmap, and recent ensemble decisions before calling ctx_compress. Returns a grounded summary that should be prepended to the ctx_compress call.",
|
|
1155
|
+
inputSchema: {
|
|
1156
|
+
type: "object",
|
|
1157
|
+
properties: {
|
|
1158
|
+
query: { type: "string", description: "Topic or goal to center the briefing on" },
|
|
1159
|
+
limit: { type: "number", description: "Max nodes to fetch (default 20)" },
|
|
1160
|
+
},
|
|
1161
|
+
required: ["query"],
|
|
1162
|
+
},
|
|
1163
|
+
},
|
|
1164
|
+
// ── Session / TODO ──
|
|
1165
|
+
{
|
|
1166
|
+
name: "omk_list_sessions",
|
|
1167
|
+
description: "List active or recent chat sessions with metadata",
|
|
1168
|
+
inputSchema: {
|
|
1169
|
+
type: "object",
|
|
1170
|
+
properties: {
|
|
1171
|
+
status: { type: "string", description: "Optional filter by status (active, completed, failed, idle)" },
|
|
1172
|
+
},
|
|
1173
|
+
},
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
name: "omk_read_todos",
|
|
1177
|
+
description: "Read TODO items for a run",
|
|
1178
|
+
inputSchema: {
|
|
1179
|
+
type: "object",
|
|
1180
|
+
properties: {
|
|
1181
|
+
runId: { type: "string", description: "Run identifier" },
|
|
1182
|
+
},
|
|
1183
|
+
required: ["runId"],
|
|
1184
|
+
},
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
name: "omk_write_todos",
|
|
1188
|
+
description: "Write or update TODO items for a run",
|
|
1189
|
+
inputSchema: {
|
|
1190
|
+
type: "object",
|
|
1191
|
+
properties: {
|
|
1192
|
+
runId: { type: "string", description: "Run identifier" },
|
|
1193
|
+
todos: {
|
|
1194
|
+
type: "array",
|
|
1195
|
+
description: "TODO items to write",
|
|
1196
|
+
items: {
|
|
1197
|
+
type: "object",
|
|
1198
|
+
properties: {
|
|
1199
|
+
title: { type: "string" },
|
|
1200
|
+
status: { type: "string" },
|
|
1201
|
+
agent: { type: "string" },
|
|
1202
|
+
role: { type: "string" },
|
|
1203
|
+
startedAt: { type: "string" },
|
|
1204
|
+
completedAt: { type: "string" },
|
|
1205
|
+
elapsedMs: { type: "number" },
|
|
1206
|
+
evidence: { type: "string" },
|
|
1207
|
+
description: { type: "string" },
|
|
1208
|
+
},
|
|
1209
|
+
required: ["title", "status"],
|
|
1210
|
+
},
|
|
1211
|
+
},
|
|
1212
|
+
},
|
|
1213
|
+
required: ["runId", "todos"],
|
|
1214
|
+
},
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
name: "omk_todo_write",
|
|
1218
|
+
description: "Apply phased todo_write operations to the run TODO list. Supports init/start/done/drop/rm/append/note.",
|
|
1219
|
+
inputSchema: {
|
|
1220
|
+
type: "object",
|
|
1221
|
+
properties: {
|
|
1222
|
+
runId: { type: "string", description: "Optional run identifier; current/latest run is used when omitted" },
|
|
1223
|
+
ops: {
|
|
1224
|
+
type: "array",
|
|
1225
|
+
description: "Todo operations in order",
|
|
1226
|
+
items: {
|
|
1227
|
+
type: "object",
|
|
1228
|
+
properties: {
|
|
1229
|
+
op: { type: "string", enum: ["init", "start", "done", "drop", "rm", "append", "note"] },
|
|
1230
|
+
list: {
|
|
1231
|
+
type: "array",
|
|
1232
|
+
description: "For init: phased task list",
|
|
1233
|
+
items: {
|
|
1234
|
+
type: "object",
|
|
1235
|
+
properties: {
|
|
1236
|
+
phase: { type: "string" },
|
|
1237
|
+
items: { type: "array", items: { type: "string" } },
|
|
1238
|
+
},
|
|
1239
|
+
required: ["phase", "items"],
|
|
1240
|
+
},
|
|
1241
|
+
},
|
|
1242
|
+
task: { type: "string", description: "Task title for task-scoped operations" },
|
|
1243
|
+
phase: { type: "string", description: "Phase name for phase-scoped operations or append" },
|
|
1244
|
+
items: { type: "array", items: { type: "string" }, description: "Tasks to append" },
|
|
1245
|
+
text: { type: "string", description: "Note text for note operation" },
|
|
1246
|
+
},
|
|
1247
|
+
required: ["op"],
|
|
1248
|
+
},
|
|
1249
|
+
},
|
|
1250
|
+
},
|
|
1251
|
+
required: ["ops"],
|
|
1252
|
+
},
|
|
1253
|
+
},
|
|
1254
|
+
{
|
|
1255
|
+
name: "TodoWrite",
|
|
1256
|
+
description: "Claude-compatible TodoWrite tool. Replaces the run TODO list from todos: [{ content, status, activeForm? }]. Status values are pending, in_progress, or completed.",
|
|
1257
|
+
inputSchema: {
|
|
1258
|
+
type: "object",
|
|
1259
|
+
properties: {
|
|
1260
|
+
runId: { type: "string", description: "Optional run identifier; current/latest run is used when omitted" },
|
|
1261
|
+
todos: {
|
|
1262
|
+
type: "array",
|
|
1263
|
+
description: "Claude TodoWrite items",
|
|
1264
|
+
items: {
|
|
1265
|
+
type: "object",
|
|
1266
|
+
properties: {
|
|
1267
|
+
content: { type: "string", description: "Stable todo text" },
|
|
1268
|
+
status: { type: "string", enum: ["pending", "in_progress", "completed"] },
|
|
1269
|
+
activeForm: { type: "string", description: "Present-continuous text shown while in_progress" },
|
|
1270
|
+
},
|
|
1271
|
+
required: ["content", "status"],
|
|
1272
|
+
},
|
|
1273
|
+
},
|
|
1274
|
+
},
|
|
1275
|
+
required: ["todos"],
|
|
1276
|
+
},
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
name: "todo_write",
|
|
1280
|
+
description: "Alias for omk_todo_write. Applies phased todo_write operations: init/start/done/drop/rm/append/note.",
|
|
1281
|
+
inputSchema: {
|
|
1282
|
+
type: "object",
|
|
1283
|
+
properties: {
|
|
1284
|
+
runId: { type: "string", description: "Optional run identifier; current/latest run is used when omitted" },
|
|
1285
|
+
ops: {
|
|
1286
|
+
type: "array",
|
|
1287
|
+
description: "Todo operations in order",
|
|
1288
|
+
items: {
|
|
1289
|
+
type: "object",
|
|
1290
|
+
properties: {
|
|
1291
|
+
op: { type: "string", enum: ["init", "start", "done", "drop", "rm", "append", "note"] },
|
|
1292
|
+
list: {
|
|
1293
|
+
type: "array",
|
|
1294
|
+
description: "For init: phased task list",
|
|
1295
|
+
items: {
|
|
1296
|
+
type: "object",
|
|
1297
|
+
properties: {
|
|
1298
|
+
phase: { type: "string" },
|
|
1299
|
+
items: { type: "array", items: { type: "string" } },
|
|
1300
|
+
},
|
|
1301
|
+
required: ["phase", "items"],
|
|
1302
|
+
},
|
|
1303
|
+
},
|
|
1304
|
+
task: { type: "string", description: "Task title for task-scoped operations" },
|
|
1305
|
+
phase: { type: "string", description: "Phase name for phase-scoped operations or append" },
|
|
1306
|
+
items: { type: "array", items: { type: "string" }, description: "Tasks to append" },
|
|
1307
|
+
text: { type: "string", description: "Note text for note operation" },
|
|
1308
|
+
},
|
|
1309
|
+
required: ["op"],
|
|
1310
|
+
},
|
|
1311
|
+
},
|
|
1312
|
+
},
|
|
1313
|
+
required: ["ops"],
|
|
1314
|
+
},
|
|
1315
|
+
},
|
|
1316
|
+
];
|
|
1317
|
+
async function handleToolCall(name, args) {
|
|
1318
|
+
if (!canCallMcpTool(name)) {
|
|
1319
|
+
throw new Error(mcpToolDeniedMessage(name));
|
|
1320
|
+
}
|
|
1321
|
+
switch (name) {
|
|
1322
|
+
// Goal lifecycle
|
|
1323
|
+
case "omk_goal_create":
|
|
1324
|
+
return handleGoalCreate(args);
|
|
1325
|
+
case "omk_goal_show":
|
|
1326
|
+
return handleGoalShow(args);
|
|
1327
|
+
case "omk_goal_list":
|
|
1328
|
+
return handleGoalList();
|
|
1329
|
+
case "omk_goal_verify":
|
|
1330
|
+
return handleGoalVerify(args);
|
|
1331
|
+
case "omk_goal_close":
|
|
1332
|
+
return handleGoalClose(args);
|
|
1333
|
+
// Evidence
|
|
1334
|
+
case "omk_evidence_add":
|
|
1335
|
+
return handleEvidenceAdd(args);
|
|
1336
|
+
case "omk_evidence_check":
|
|
1337
|
+
return handleEvidenceCheck(args);
|
|
1338
|
+
// Run
|
|
1339
|
+
case "omk_run_state":
|
|
1340
|
+
return handleRunState(args);
|
|
1341
|
+
case "omk_tail_run_events":
|
|
1342
|
+
return handleTailRunEvents(args);
|
|
1343
|
+
case "omk_read_run_state":
|
|
1344
|
+
return handleReadRunState(args);
|
|
1345
|
+
case "omk_read_runtime_status":
|
|
1346
|
+
return handleReadRuntimeStatus(args);
|
|
1347
|
+
// Quality gate
|
|
1348
|
+
case "omk_quality_gate":
|
|
1349
|
+
return handleQualityGate();
|
|
1350
|
+
// Memory
|
|
1351
|
+
case "omk_memory_read":
|
|
1352
|
+
return handleMemoryRead(args);
|
|
1353
|
+
case "omk_memory_write":
|
|
1354
|
+
return handleMemoryWrite(args);
|
|
1355
|
+
// Graph
|
|
1356
|
+
case "omk_graph_query":
|
|
1357
|
+
return handleGraphQuery(args);
|
|
1358
|
+
// Memory search / status / ontology / mindmap
|
|
1359
|
+
case "omk_search_memory":
|
|
1360
|
+
return handleSearchMemory(args);
|
|
1361
|
+
case "omk_memory_status":
|
|
1362
|
+
return handleMemoryStatus();
|
|
1363
|
+
case "omk_memory_ontology":
|
|
1364
|
+
return handleMemoryOntology(args);
|
|
1365
|
+
case "omk_memory_mindmap":
|
|
1366
|
+
return handleMemoryMindmap(args);
|
|
1367
|
+
// Goal next action
|
|
1368
|
+
case "omk_goal_next":
|
|
1369
|
+
return handleGoalNext(args);
|
|
1370
|
+
// Context compression with ontology grounding
|
|
1371
|
+
case "omk_compress_context":
|
|
1372
|
+
return handleCompressContext(args);
|
|
1373
|
+
// Session / TODO
|
|
1374
|
+
case "omk_list_sessions":
|
|
1375
|
+
return handleListSessions(args);
|
|
1376
|
+
case "omk_read_todos":
|
|
1377
|
+
return handleReadTodos(args);
|
|
1378
|
+
case "omk_write_todos":
|
|
1379
|
+
return handleWriteTodos(args);
|
|
1380
|
+
case "TodoWrite":
|
|
1381
|
+
return handleTodoWrite(args);
|
|
1382
|
+
case "omk_todo_write":
|
|
1383
|
+
case "todo_write":
|
|
1384
|
+
return handleOmkTodoWrite(args);
|
|
1385
|
+
// Legacy aliases (still callable for backward compatibility)
|
|
1386
|
+
case "omk_read_memory":
|
|
1387
|
+
return handleMemoryRead(args);
|
|
1388
|
+
case "omk_write_memory":
|
|
1389
|
+
return handleMemoryWrite(args);
|
|
1390
|
+
case "omk_read_config":
|
|
1391
|
+
return handleReadConfig();
|
|
1392
|
+
case "omk_write_config":
|
|
1393
|
+
return handleWriteConfig(args);
|
|
1394
|
+
case "omk_list_agents":
|
|
1395
|
+
return handleListAgents();
|
|
1396
|
+
case "omk_read_agent":
|
|
1397
|
+
return handleReadAgent(args);
|
|
1398
|
+
case "omk_list_runs":
|
|
1399
|
+
return handleListRuns();
|
|
1400
|
+
case "omk_read_run":
|
|
1401
|
+
return handleReadRun(args);
|
|
1402
|
+
case "omk_get_project_info":
|
|
1403
|
+
return handleGetProjectInfo();
|
|
1404
|
+
case "omk_get_quality_settings":
|
|
1405
|
+
return handleGetQualitySettings();
|
|
1406
|
+
case "omk_get_approval_policy":
|
|
1407
|
+
return handleGetApprovalPolicy();
|
|
1408
|
+
case "omk_list_worktrees":
|
|
1409
|
+
return handleListWorktrees();
|
|
1410
|
+
case "omk_run_quality_gate":
|
|
1411
|
+
return handleQualityGate();
|
|
1412
|
+
case "omk_run_quality_gate_print":
|
|
1413
|
+
return handleRunQualityGatePrint();
|
|
1414
|
+
case "omk_save_checkpoint":
|
|
1415
|
+
return handleSaveCheckpoint(args);
|
|
1416
|
+
case "omk_list_checkpoints":
|
|
1417
|
+
return handleListCheckpoints(args);
|
|
1418
|
+
case "omk_restore_checkpoint":
|
|
1419
|
+
return handleRestoreCheckpoint(args);
|
|
1420
|
+
case "omk_save_snippet":
|
|
1421
|
+
return saveSnippet(args.name, args.content, args.tags);
|
|
1422
|
+
case "omk_search_snippets":
|
|
1423
|
+
return searchSnippets(args.query ?? "", args.limit);
|
|
1424
|
+
case "omk_get_snippet":
|
|
1425
|
+
return getSnippet(args.name);
|
|
1426
|
+
case "omk_delete_snippet":
|
|
1427
|
+
return deleteSnippet(args.name);
|
|
1428
|
+
default:
|
|
1429
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
// ─── Server loop ────────────────────────────────────────────────────────
|
|
1433
|
+
function sendResponse(res) {
|
|
1434
|
+
const data = JSON.stringify(res) + "\n";
|
|
1435
|
+
safeWriteStdout(data);
|
|
1436
|
+
}
|
|
1437
|
+
function sendError(id, code, message, data) {
|
|
1438
|
+
sendResponse({ jsonrpc: "2.0", id, error: { code, message, data } });
|
|
1439
|
+
}
|
|
1440
|
+
function sendResult(id, result) {
|
|
1441
|
+
sendResponse({ jsonrpc: "2.0", id, result });
|
|
1442
|
+
}
|
|
1443
|
+
async function handleRequest(req) {
|
|
1444
|
+
switch (req.method) {
|
|
1445
|
+
case "initialize": {
|
|
1446
|
+
sendResult(req.id, {
|
|
1447
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
1448
|
+
capabilities: {
|
|
1449
|
+
tools: {},
|
|
1450
|
+
resources: { listChanged: false },
|
|
1451
|
+
prompts: { listChanged: false },
|
|
1452
|
+
},
|
|
1453
|
+
serverInfo: {
|
|
1454
|
+
name: SERVER_NAME,
|
|
1455
|
+
version: SERVER_VERSION,
|
|
1456
|
+
},
|
|
1457
|
+
});
|
|
1458
|
+
return;
|
|
1459
|
+
}
|
|
1460
|
+
case "notifications/initialized":
|
|
1461
|
+
// No response needed for notifications
|
|
1462
|
+
return;
|
|
1463
|
+
case "resources/list": {
|
|
1464
|
+
sendResult(req.id, { resources: RESOURCES });
|
|
1465
|
+
return;
|
|
1466
|
+
}
|
|
1467
|
+
case "resources/read": {
|
|
1468
|
+
const resourceParams = req.params;
|
|
1469
|
+
const uri = resourceParams?.uri;
|
|
1470
|
+
if (!uri || typeof uri !== "string") {
|
|
1471
|
+
sendError(req.id, JSON_RPC_INVALID_PARAMS, "Invalid params: missing 'uri'");
|
|
1472
|
+
return;
|
|
1473
|
+
}
|
|
1474
|
+
try {
|
|
1475
|
+
let result;
|
|
1476
|
+
if (uri.startsWith("omk://goal/")) {
|
|
1477
|
+
const goalId = uri.slice("omk://goal/".length);
|
|
1478
|
+
result = await handleReadGoalResource(goalId);
|
|
1479
|
+
}
|
|
1480
|
+
else if (uri.startsWith("omk://run/")) {
|
|
1481
|
+
const runId = uri.slice("omk://run/".length);
|
|
1482
|
+
result = await handleReadRunResource(runId);
|
|
1483
|
+
}
|
|
1484
|
+
else if (uri === "omk://ontology/project") {
|
|
1485
|
+
result = await handleReadOntologyResource();
|
|
1486
|
+
}
|
|
1487
|
+
else {
|
|
1488
|
+
sendError(req.id, JSON_RPC_INVALID_PARAMS, `Resource not found: ${uri}`);
|
|
1489
|
+
return;
|
|
1490
|
+
}
|
|
1491
|
+
sendResult(req.id, {
|
|
1492
|
+
contents: [
|
|
1493
|
+
{
|
|
1494
|
+
uri,
|
|
1495
|
+
mimeType: "application/json",
|
|
1496
|
+
text: result.content,
|
|
1497
|
+
},
|
|
1498
|
+
],
|
|
1499
|
+
});
|
|
1500
|
+
}
|
|
1501
|
+
catch (err) {
|
|
1502
|
+
const data = buildErrorData(req, err, { uri });
|
|
1503
|
+
writeDiagnostic("resource_read_failed", data);
|
|
1504
|
+
sendError(req.id, JSON_RPC_OMK_SERVER_ERROR, `OMK MCP resource read failed: ${errorMessage(err)}`, data);
|
|
1505
|
+
}
|
|
1506
|
+
return;
|
|
1507
|
+
}
|
|
1508
|
+
case "prompts/list": {
|
|
1509
|
+
sendResult(req.id, { prompts: PROMPTS });
|
|
1510
|
+
return;
|
|
1511
|
+
}
|
|
1512
|
+
case "prompts/get": {
|
|
1513
|
+
const promptParams = req.params;
|
|
1514
|
+
const promptName = promptParams?.name;
|
|
1515
|
+
const promptArgs = promptParams?.arguments ?? {};
|
|
1516
|
+
if (!promptName || typeof promptName !== "string") {
|
|
1517
|
+
sendError(req.id, JSON_RPC_INVALID_PARAMS, "Invalid params: missing 'name'");
|
|
1518
|
+
return;
|
|
1519
|
+
}
|
|
1520
|
+
try {
|
|
1521
|
+
let result;
|
|
1522
|
+
switch (promptName) {
|
|
1523
|
+
case "goal-intake":
|
|
1524
|
+
result = handleGetGoalIntakePrompt(promptArgs);
|
|
1525
|
+
break;
|
|
1526
|
+
case "evidence-review":
|
|
1527
|
+
result = handleGetEvidenceReviewPrompt(promptArgs);
|
|
1528
|
+
break;
|
|
1529
|
+
case "quality-gate":
|
|
1530
|
+
result = handleGetQualityGatePrompt(promptArgs);
|
|
1531
|
+
break;
|
|
1532
|
+
default:
|
|
1533
|
+
sendError(req.id, JSON_RPC_INVALID_PARAMS, `Prompt not found: ${promptName}`);
|
|
1534
|
+
return;
|
|
1535
|
+
}
|
|
1536
|
+
sendResult(req.id, result);
|
|
1537
|
+
}
|
|
1538
|
+
catch (err) {
|
|
1539
|
+
const data = buildErrorData(req, err, { promptName });
|
|
1540
|
+
writeDiagnostic("prompt_get_failed", data);
|
|
1541
|
+
sendError(req.id, JSON_RPC_OMK_SERVER_ERROR, `OMK MCP prompt get failed: ${errorMessage(err)}`, data);
|
|
1542
|
+
}
|
|
1543
|
+
return;
|
|
1544
|
+
}
|
|
1545
|
+
case "tools/list": {
|
|
1546
|
+
sendResult(req.id, { tools: filterAllowedMcpTools(TOOLS) });
|
|
1547
|
+
return;
|
|
1548
|
+
}
|
|
1549
|
+
case "tools/call": {
|
|
1550
|
+
const params = req.params;
|
|
1551
|
+
const toolName = params?.name;
|
|
1552
|
+
const toolArgs = params?.arguments ?? {};
|
|
1553
|
+
if (!toolName || typeof toolName !== "string") {
|
|
1554
|
+
sendError(req.id, JSON_RPC_INVALID_PARAMS, "Invalid params: missing 'name'");
|
|
1555
|
+
return;
|
|
1556
|
+
}
|
|
1557
|
+
try {
|
|
1558
|
+
const result = await handleToolCall(toolName, toolArgs);
|
|
1559
|
+
sendResult(req.id, toolResultFromValue(result));
|
|
1560
|
+
}
|
|
1561
|
+
catch (err) {
|
|
1562
|
+
writeDiagnostic("tool_call_failed", buildErrorData(req, err, { toolName }));
|
|
1563
|
+
sendResult(req.id, toolErrorResult(toolName, err));
|
|
1564
|
+
}
|
|
1565
|
+
return;
|
|
1566
|
+
}
|
|
1567
|
+
default: {
|
|
1568
|
+
sendError(req.id, JSON_RPC_METHOD_NOT_FOUND, `Method not found: ${req.method}`);
|
|
1569
|
+
return;
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
}
|
|
1573
|
+
async function main() {
|
|
1574
|
+
// Ensure synchronous stdout in piped environments (MCP stdio)
|
|
1575
|
+
try {
|
|
1576
|
+
const stdoutWithHandle = process.stdout;
|
|
1577
|
+
stdoutWithHandle._handle?.setBlocking?.(true);
|
|
1578
|
+
}
|
|
1579
|
+
catch {
|
|
1580
|
+
// ignore if unavailable
|
|
1581
|
+
}
|
|
1582
|
+
process.stdout.on("error", (err) => {
|
|
1583
|
+
if (isBrokenPipeError(err)) {
|
|
1584
|
+
clientDisconnected = true;
|
|
1585
|
+
}
|
|
1586
|
+
});
|
|
1587
|
+
process.stderr.on("error", () => {
|
|
1588
|
+
// stderr errors are non-fatal for MCP server
|
|
1589
|
+
});
|
|
1590
|
+
const rl = createInterface({ input: process.stdin, crlfDelay: Infinity });
|
|
1591
|
+
for await (const line of rl) {
|
|
1592
|
+
const trimmed = line.trim();
|
|
1593
|
+
if (!trimmed)
|
|
1594
|
+
continue;
|
|
1595
|
+
let req;
|
|
1596
|
+
try {
|
|
1597
|
+
req = JSON.parse(trimmed);
|
|
1598
|
+
}
|
|
1599
|
+
catch {
|
|
1600
|
+
// Not valid JSON — can't reply without an id, so ignore
|
|
1601
|
+
continue;
|
|
1602
|
+
}
|
|
1603
|
+
if (req.jsonrpc !== "2.0")
|
|
1604
|
+
continue;
|
|
1605
|
+
try {
|
|
1606
|
+
await handleRequest(req);
|
|
1607
|
+
}
|
|
1608
|
+
catch (err) {
|
|
1609
|
+
const data = buildErrorData(req, err);
|
|
1610
|
+
writeDiagnostic("request_failed", data);
|
|
1611
|
+
sendError(req.id, JSON_RPC_OMK_SERVER_ERROR, `OMK MCP request failed while handling ${req.method}: ${errorMessage(err)}`, data);
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
clientDisconnected = true;
|
|
1615
|
+
// Gracefully flush remaining stdout before the process exits
|
|
1616
|
+
try {
|
|
1617
|
+
process.stdout.end?.();
|
|
1618
|
+
}
|
|
1619
|
+
catch {
|
|
1620
|
+
// ignore
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
main().catch((err) => {
|
|
1624
|
+
if (isBrokenPipeError(err))
|
|
1625
|
+
return;
|
|
1626
|
+
try {
|
|
1627
|
+
console.error("Fatal error:", err);
|
|
1628
|
+
}
|
|
1629
|
+
catch {
|
|
1630
|
+
// stderr unavailable
|
|
1631
|
+
}
|
|
1632
|
+
});
|