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,1084 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { BannerReplacer } from "./banner.js";
|
|
3
|
+
import { KimiBugFilter } from "./bug-filter.js";
|
|
4
|
+
import { KimiContinuePromptGuard } from "./continue-prompt-guard.js";
|
|
5
|
+
import { omkBanner, style, loadThemeConfig } from "../../util/theme.js";
|
|
6
|
+
import { ensureDir, injectKimiGlobals, getProjectRoot, getUserHome, pathExists } from "../../util/fs.js";
|
|
7
|
+
import { pasteScreenshot } from "../../util/screenshot-store.js";
|
|
8
|
+
import { isAbsolute, join, relative, resolve } from "path";
|
|
9
|
+
import { capabilityScopesFromRouting } from "../../orchestration/capability-routing.js";
|
|
10
|
+
import { runShellStreaming } from "../../util/shell.js";
|
|
11
|
+
import { resolveTimeoutMs } from "../../util/timeout-config.js";
|
|
12
|
+
import { getOmkResourceSettings } from "../../util/resource-profile.js";
|
|
13
|
+
import { KimiStatusLineEnhancer } from "./statusline.js";
|
|
14
|
+
import { formatOmkVersionFooter } from "../../util/version.js";
|
|
15
|
+
import { prepareIsolatedKimiHome, cleanupIsolatedKimiHome, resolveOriginalHome } from "./isolated-home.js";
|
|
16
|
+
import { enableRawTerminalInput, restoreTerminalInputState } from "../../util/terminal-input.js";
|
|
17
|
+
import { checkCommand, resolveKimiBin } from "../../util/shell.js";
|
|
18
|
+
import { defaultScopedRoleAgentFile, writeScopedAgentFile } from "../../util/scoped-agent-file.js";
|
|
19
|
+
import { terminateProcessTree } from "../../util/process-tree.js";
|
|
20
|
+
import { sanitizeUserVisibleOutput } from "../../util/user-visible-output.js";
|
|
21
|
+
import { isDeniedChildEnvName } from "../../runtime/child-env.js";
|
|
22
|
+
const REQUIRED_KIMI_ENV_KEYS = new Set([
|
|
23
|
+
"PATH",
|
|
24
|
+
"HOME",
|
|
25
|
+
"USERPROFILE",
|
|
26
|
+
"HOMEDRIVE",
|
|
27
|
+
"HOMEPATH",
|
|
28
|
+
"SHELL",
|
|
29
|
+
"TERM",
|
|
30
|
+
"COLORTERM",
|
|
31
|
+
"TMP",
|
|
32
|
+
"TMPDIR",
|
|
33
|
+
"TEMP",
|
|
34
|
+
"USER",
|
|
35
|
+
"LOGNAME",
|
|
36
|
+
"PWD",
|
|
37
|
+
"LANG",
|
|
38
|
+
"LC_ALL",
|
|
39
|
+
]);
|
|
40
|
+
const SECRET_ENV_KEY_PATTERN = /(?:^|[_-])(?:SECRET|TOKEN|PASSWORD|PASSWD|API[_-]?KEY|ACCESS[_-]?KEY|PRIVATE[_-]?KEY|CREDENTIAL|AUTHORIZATION|AUTH|COOKIE|SESSION(?:[_-]?(?:ID|TOKEN|SECRET))?|JSESSIONID|PHPSESSID|BEARER|DATABASE[_-]?URL|REDIS[_-]?URL|MONGO(?:DB)?[_-]?URI|CONNECTION[_-]?STRING|DSN)(?:[_-]|$)/i;
|
|
41
|
+
const NON_SECRET_KIMI_METADATA_ENV_KEYS = new Set([
|
|
42
|
+
"KIMI_SESSION_ID",
|
|
43
|
+
"OMK_RUN_ID",
|
|
44
|
+
"OMK_SESSION_ID",
|
|
45
|
+
"OMK_INHERIT_LOCAL_AUTH",
|
|
46
|
+
"OMK_ISOLATED_HOME_INHERIT_AUTH",
|
|
47
|
+
"OMK_TOTAL_TOKENS",
|
|
48
|
+
"OMK_NODE_PROVIDER_AUTHORITY",
|
|
49
|
+
]);
|
|
50
|
+
const TRUSTED_KIMI_EXPLICIT_SECRET_ENV_PATTERN = /^(1|true|yes)$/i;
|
|
51
|
+
const KIMI_EXPLICIT_SECRET_ENV_WARNED = new Set();
|
|
52
|
+
function isAllowedInheritedKimiEnvKey(key) {
|
|
53
|
+
if (isDeniedChildEnvName(key))
|
|
54
|
+
return false;
|
|
55
|
+
if (NON_SECRET_KIMI_METADATA_ENV_KEYS.has(key))
|
|
56
|
+
return true;
|
|
57
|
+
if (SECRET_ENV_KEY_PATTERN.test(key))
|
|
58
|
+
return false;
|
|
59
|
+
return REQUIRED_KIMI_ENV_KEYS.has(key) || key.startsWith("LC_") || key.startsWith("KIMI_") || key.startsWith("OMK_");
|
|
60
|
+
}
|
|
61
|
+
export function isSecretLikeKimiEnvKey(key) {
|
|
62
|
+
if (NON_SECRET_KIMI_METADATA_ENV_KEYS.has(key))
|
|
63
|
+
return false;
|
|
64
|
+
return SECRET_ENV_KEY_PATTERN.test(key);
|
|
65
|
+
}
|
|
66
|
+
function isTrustedExplicitSecretEnvEnabled(env) {
|
|
67
|
+
return TRUSTED_KIMI_EXPLICIT_SECRET_ENV_PATTERN.test(env.OMK_TRUST_KIMI_EXPLICIT_SECRET_ENV ?? "");
|
|
68
|
+
}
|
|
69
|
+
function warnExplicitSecretLikeKimiEnvKey(key, context, onWarning) {
|
|
70
|
+
const warningKey = `${context}:${key}`;
|
|
71
|
+
if (KIMI_EXPLICIT_SECRET_ENV_WARNED.has(warningKey))
|
|
72
|
+
return;
|
|
73
|
+
KIMI_EXPLICIT_SECRET_ENV_WARNED.add(warningKey);
|
|
74
|
+
onWarning(`[omk] Warning: explicit Kimi child env includes secret-like key "${key}" in ${context}; ` +
|
|
75
|
+
"the key was dropped. Set OMK_TRUST_KIMI_EXPLICIT_SECRET_ENV=1 only inside an isolated runner to pass it through.");
|
|
76
|
+
}
|
|
77
|
+
export function buildSafeKimiChildEnv(inheritedEnv = process.env, explicitEnv = {}, forcedEnv = {}, options = {}) {
|
|
78
|
+
const safeEnv = {};
|
|
79
|
+
for (const [key, value] of Object.entries(inheritedEnv)) {
|
|
80
|
+
if (value !== undefined && isAllowedInheritedKimiEnvKey(key)) {
|
|
81
|
+
safeEnv[key] = value;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const trustedExplicitSecretEnv = isTrustedExplicitSecretEnvEnabled({ ...inheritedEnv, ...explicitEnv, ...forcedEnv });
|
|
85
|
+
const explicitEnvContext = options.explicitEnvContext ?? "kimi child env";
|
|
86
|
+
const onWarning = options.onWarning ?? ((message) => process.stderr.write(`${message}\n`));
|
|
87
|
+
for (const [key, value] of Object.entries(explicitEnv)) {
|
|
88
|
+
if (value === undefined) {
|
|
89
|
+
delete safeEnv[key];
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (isDeniedChildEnvName(key)) {
|
|
93
|
+
delete safeEnv[key];
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (isSecretLikeKimiEnvKey(key) && !trustedExplicitSecretEnv) {
|
|
97
|
+
if (options.warnExplicitSecrets) {
|
|
98
|
+
warnExplicitSecretLikeKimiEnvKey(key, explicitEnvContext, onWarning);
|
|
99
|
+
}
|
|
100
|
+
delete safeEnv[key];
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
safeEnv[key] = value;
|
|
104
|
+
}
|
|
105
|
+
for (const [key, value] of Object.entries(forcedEnv)) {
|
|
106
|
+
if (value === undefined)
|
|
107
|
+
delete safeEnv[key];
|
|
108
|
+
else
|
|
109
|
+
safeEnv[key] = value;
|
|
110
|
+
}
|
|
111
|
+
return safeEnv;
|
|
112
|
+
}
|
|
113
|
+
function readFlagValue(args, longName, shortName) {
|
|
114
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
115
|
+
const arg = args[index];
|
|
116
|
+
if (arg === longName || (shortName && arg === shortName)) {
|
|
117
|
+
return args[index + 1];
|
|
118
|
+
}
|
|
119
|
+
if (arg.startsWith(`${longName}=`)) {
|
|
120
|
+
return arg.slice(longName.length + 1);
|
|
121
|
+
}
|
|
122
|
+
if (shortName && arg.startsWith(`${shortName}=`)) {
|
|
123
|
+
return arg.slice(shortName.length + 1);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
export function parseKimiLaunchMeta(args, env = process.env, cwd = process.cwd()) {
|
|
129
|
+
return {
|
|
130
|
+
directory: cwd,
|
|
131
|
+
session: env.KIMI_SESSION_ID ?? env.OMK_SESSION_ID ?? env.OMK_RUN_ID,
|
|
132
|
+
model: readFlagValue([...args], "--model", "-m") ?? env.OMK_KIMI_MODEL ?? env.OMK_MODEL,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function classifyKimiProviderFailure(output) {
|
|
136
|
+
const normalized = output.toLowerCase();
|
|
137
|
+
const isMonthlyQuota = normalized.includes("exceeded_current_quota_error") ||
|
|
138
|
+
normalized.includes("monthly usage limit") ||
|
|
139
|
+
(normalized.includes("billing cycle") && (normalized.includes("quota") || normalized.includes("usage limit"))) ||
|
|
140
|
+
(normalized.includes("quota") && normalized.includes("refreshed in the next cycle"));
|
|
141
|
+
const isRateLimit = normalized.includes("error code: 429") ||
|
|
142
|
+
normalized.includes("rate limit") ||
|
|
143
|
+
(/\b429\b/.test(normalized) &&
|
|
144
|
+
(normalized.includes("llm") || normalized.includes("provider") || normalized.includes("kimi") || normalized.includes("moonshot")));
|
|
145
|
+
const isProviderError = normalized.includes("llm provider error") ||
|
|
146
|
+
normalized.includes("provider error") ||
|
|
147
|
+
isMonthlyQuota ||
|
|
148
|
+
isRateLimit;
|
|
149
|
+
if (!isProviderError)
|
|
150
|
+
return null;
|
|
151
|
+
if (isMonthlyQuota) {
|
|
152
|
+
return {
|
|
153
|
+
kind: "monthly-quota",
|
|
154
|
+
title: "Kimi monthly quota exhausted",
|
|
155
|
+
remediation: [
|
|
156
|
+
"Login/auth can be valid while the Kimi account's monthly provider quota is exhausted.",
|
|
157
|
+
"This is a provider quota/billing limit, not an MCP or repository failure.",
|
|
158
|
+
"Use a non-Kimi provider/profile until the quota refreshes, or upgrade Kimi Code quota.",
|
|
159
|
+
"For this repo, try: omk provider deepseek enable (if configured) or rerun with a non-Kimi provider.",
|
|
160
|
+
"If Kimi support asks for diagnostics, run: kimi export — keep the exported file private.",
|
|
161
|
+
],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (isRateLimit) {
|
|
165
|
+
return {
|
|
166
|
+
kind: "rate-limit",
|
|
167
|
+
title: "Kimi provider rate limit reached",
|
|
168
|
+
remediation: [
|
|
169
|
+
"Wait and retry later, reduce parallel workers, or switch to a configured fallback provider.",
|
|
170
|
+
"For worker runs, reduce concurrency with --workers 1 or OMK_WORKERS=1.",
|
|
171
|
+
],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
kind: "provider",
|
|
176
|
+
title: "Kimi provider unavailable",
|
|
177
|
+
remediation: [
|
|
178
|
+
"Check Kimi account/provider status and retry, or switch to a configured fallback provider.",
|
|
179
|
+
],
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
export function formatKimiProviderFailureHint(output) {
|
|
183
|
+
const diagnosis = classifyKimiProviderFailure(output);
|
|
184
|
+
if (!diagnosis)
|
|
185
|
+
return null;
|
|
186
|
+
const lines = [
|
|
187
|
+
`[omk] ${diagnosis.title}.`,
|
|
188
|
+
...diagnosis.remediation.map((line) => ` - ${line}`),
|
|
189
|
+
];
|
|
190
|
+
return lines.join("\n") + "\n";
|
|
191
|
+
}
|
|
192
|
+
export function shouldFailOnMcpError(input) {
|
|
193
|
+
if (input.failurePolicy === "strict")
|
|
194
|
+
return true;
|
|
195
|
+
return input.requiredServers.includes(input.serverName);
|
|
196
|
+
}
|
|
197
|
+
export function extractKimiMcpConnectionFailureNames(output) {
|
|
198
|
+
if (!/Failed to connect MCP servers/i.test(output))
|
|
199
|
+
return [];
|
|
200
|
+
const names = new Set();
|
|
201
|
+
const objectMatches = output.matchAll(/['"]([^'"]+)['"]\s*:/g);
|
|
202
|
+
for (const match of objectMatches) {
|
|
203
|
+
const name = match[1]?.trim();
|
|
204
|
+
if (name)
|
|
205
|
+
names.add(name);
|
|
206
|
+
}
|
|
207
|
+
const fallbackMatches = output.matchAll(/\b(?:server|MCP)\s+([a-zA-Z0-9_.-]+)\s+(?:failed|unavailable|closed)/gi);
|
|
208
|
+
for (const match of fallbackMatches) {
|
|
209
|
+
const name = match[1]?.trim();
|
|
210
|
+
if (name && name.toLowerCase() !== "servers")
|
|
211
|
+
names.add(name);
|
|
212
|
+
}
|
|
213
|
+
return [...names];
|
|
214
|
+
}
|
|
215
|
+
function optionalRootMcpAllowlist(names) {
|
|
216
|
+
const normalized = [...new Set((names ?? []).map((name) => name.trim()).filter(Boolean))];
|
|
217
|
+
const preferred = normalized.filter((name) => {
|
|
218
|
+
const lowered = name.toLowerCase();
|
|
219
|
+
return lowered === "omk-project" || lowered === "memory" || lowered.includes("filesystem") || lowered === "git";
|
|
220
|
+
});
|
|
221
|
+
return preferred.length > 0 ? preferred : ["omk-project"];
|
|
222
|
+
}
|
|
223
|
+
function parseMcpHints(value) {
|
|
224
|
+
if (value === undefined)
|
|
225
|
+
return undefined;
|
|
226
|
+
return value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
227
|
+
}
|
|
228
|
+
function resolveNodeMcpAllowlist(node, nodeEnv, fallbackNames) {
|
|
229
|
+
const envHints = parseMcpHints(nodeEnv.OMK_MCP_HINTS);
|
|
230
|
+
if (envHints !== undefined)
|
|
231
|
+
return envHints;
|
|
232
|
+
if (node.routing?.mcpServers)
|
|
233
|
+
return [...node.routing.mcpServers];
|
|
234
|
+
return optionalRootMcpAllowlist(fallbackNames);
|
|
235
|
+
}
|
|
236
|
+
function isOptionalMcpFailureResult(node, output, hasStdout) {
|
|
237
|
+
const failedNames = extractKimiMcpConnectionFailureNames(output);
|
|
238
|
+
if (failedNames.length === 0 || !hasStdout)
|
|
239
|
+
return false;
|
|
240
|
+
const requiredServers = node.routing?.requiresMcp ? node.routing.mcpServers ?? [] : [];
|
|
241
|
+
return failedNames.every((serverName) => !shouldFailOnMcpError({
|
|
242
|
+
serverName,
|
|
243
|
+
requiredServers,
|
|
244
|
+
failurePolicy: node.routing?.requiresMcp ? "strict" : "required-only",
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
const DEFAULT_KIMI_FAST_EXIT_MS = 1500;
|
|
248
|
+
const DEFAULT_KIMI_STARTUP_TIMEOUT_MS = 45_000;
|
|
249
|
+
function resolveKimiFastExitThresholdMs(env) {
|
|
250
|
+
const raw = env.OMK_CHAT_FAST_EXIT_MS;
|
|
251
|
+
if (!raw)
|
|
252
|
+
return DEFAULT_KIMI_FAST_EXIT_MS;
|
|
253
|
+
const parsed = Number.parseInt(raw, 10);
|
|
254
|
+
if (!Number.isFinite(parsed))
|
|
255
|
+
return DEFAULT_KIMI_FAST_EXIT_MS;
|
|
256
|
+
return Math.max(0, parsed);
|
|
257
|
+
}
|
|
258
|
+
export function resolveKimiStartupTimeoutMs(env) {
|
|
259
|
+
const raw = env.OMK_CHAT_STARTUP_TIMEOUT_MS;
|
|
260
|
+
if (raw === undefined || raw.trim() === "")
|
|
261
|
+
return DEFAULT_KIMI_STARTUP_TIMEOUT_MS;
|
|
262
|
+
if (raw.trim() === "0")
|
|
263
|
+
return 0;
|
|
264
|
+
const parsed = Number.parseInt(raw, 10);
|
|
265
|
+
if (!Number.isFinite(parsed) || parsed < 1000)
|
|
266
|
+
return DEFAULT_KIMI_STARTUP_TIMEOUT_MS;
|
|
267
|
+
return Math.min(parsed, 10 * 60_000);
|
|
268
|
+
}
|
|
269
|
+
function stripAnsiControls(value) {
|
|
270
|
+
return value.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "");
|
|
271
|
+
}
|
|
272
|
+
function isKimiPromptReadyLine(line) {
|
|
273
|
+
const trimmed = stripAnsiControls(line).trim();
|
|
274
|
+
return /(?:^|\s)(?:waiting for input|ready for input|enter your prompt|prompt ready)(?:\s|$)/i.test(trimmed)
|
|
275
|
+
|| /^kimi[❯>›]\s*$/i.test(trimmed);
|
|
276
|
+
}
|
|
277
|
+
export function isKimiStartupReadyData(data) {
|
|
278
|
+
const clean = stripAnsiControls(data);
|
|
279
|
+
if (/(?:^|\n)\s*(?:Kimi\s+)?Session(?:\s*ID)?\s*:/i.test(clean))
|
|
280
|
+
return true;
|
|
281
|
+
return clean.split(/\r?\n/).some(isKimiPromptReadyLine);
|
|
282
|
+
}
|
|
283
|
+
function createPtyProcessTreeTarget(ptyProcess) {
|
|
284
|
+
let exitCode = null;
|
|
285
|
+
const exitListeners = new Set();
|
|
286
|
+
const disposable = ptyProcess.onExit((event) => {
|
|
287
|
+
exitCode = event.exitCode;
|
|
288
|
+
for (const listener of exitListeners) {
|
|
289
|
+
listener(event.exitCode, event.signal);
|
|
290
|
+
}
|
|
291
|
+
exitListeners.clear();
|
|
292
|
+
disposable.dispose();
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
pid: ptyProcess.pid,
|
|
296
|
+
get exitCode() {
|
|
297
|
+
return exitCode;
|
|
298
|
+
},
|
|
299
|
+
signalCode: null,
|
|
300
|
+
kill(signal) {
|
|
301
|
+
try {
|
|
302
|
+
ptyProcess.kill(typeof signal === "string" ? signal : undefined);
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
once(event, listener) {
|
|
310
|
+
if (event === "error")
|
|
311
|
+
return undefined;
|
|
312
|
+
if (exitCode !== null) {
|
|
313
|
+
queueMicrotask(() => listener(exitCode));
|
|
314
|
+
return undefined;
|
|
315
|
+
}
|
|
316
|
+
exitListeners.add(listener);
|
|
317
|
+
return {
|
|
318
|
+
dispose: () => exitListeners.delete(listener),
|
|
319
|
+
};
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
export function classifyKimiStartupExit(exitCode, elapsedMs, env = process.env) {
|
|
324
|
+
const allowFastExit = /^(1|true|yes)$/i.test(env.OMK_ALLOW_FAST_CHAT_EXIT ?? "");
|
|
325
|
+
if (allowFastExit || exitCode !== 0)
|
|
326
|
+
return null;
|
|
327
|
+
const thresholdMs = resolveKimiFastExitThresholdMs(env);
|
|
328
|
+
if (thresholdMs <= 0 || elapsedMs > thresholdMs)
|
|
329
|
+
return null;
|
|
330
|
+
return {
|
|
331
|
+
elapsedMs,
|
|
332
|
+
thresholdMs,
|
|
333
|
+
message: `Kimi exited immediately after ${elapsedMs}ms before an interactive chat could start.`,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
/** args 배열에서 --mcp-config-file 경로들을 찾아 존재 여부 검증 (fail-fast, 3s timeout) */
|
|
337
|
+
async function preflightMcpConfigs(args) {
|
|
338
|
+
const MCP_PREFLIGHT_TIMEOUT_MS = 3000;
|
|
339
|
+
const start = Date.now();
|
|
340
|
+
for (let i = 0; i < args.length - 1; i++) {
|
|
341
|
+
if (args[i] === "--mcp-config-file") {
|
|
342
|
+
const configPath = args[i + 1];
|
|
343
|
+
if (!configPath)
|
|
344
|
+
continue;
|
|
345
|
+
if (Date.now() - start > MCP_PREFLIGHT_TIMEOUT_MS) {
|
|
346
|
+
console.warn(style.orange(`[omk] ⚠️ MCP preflight timed out after ${MCP_PREFLIGHT_TIMEOUT_MS}ms`));
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
if (!(await pathExists(configPath))) {
|
|
350
|
+
console.warn(style.orange(`[omk] ⚠️ MCP config not found: ${configPath}`) +
|
|
351
|
+
"\n Kimi may fail to start. Run `omk doctor` to check MCP configuration.");
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
export async function runKimiInteractive(args, options) {
|
|
357
|
+
const resources = await getOmkResourceSettings();
|
|
358
|
+
// Debug: log args so we can verify MCP/skills flags are present
|
|
359
|
+
if (process.env.OMK_DEBUG === "1") {
|
|
360
|
+
process.stderr.write(`[omk-debug] runKimiInteractive args: ${JSON.stringify(args)}\n`);
|
|
361
|
+
}
|
|
362
|
+
const noBanner = process.env.OMK_CHAT_NO_BANNER === "1";
|
|
363
|
+
const theme = await loadThemeConfig();
|
|
364
|
+
const launchMeta = parseKimiLaunchMeta(args, { ...process.env, ...(options?.env ?? {}) }, options?.cwd ?? process.cwd());
|
|
365
|
+
let observedKimiSession;
|
|
366
|
+
let startupReady = false;
|
|
367
|
+
const markStartupReady = () => {
|
|
368
|
+
startupReady = true;
|
|
369
|
+
};
|
|
370
|
+
const replacer = new BannerReplacer((meta) => {
|
|
371
|
+
if (noBanner)
|
|
372
|
+
return;
|
|
373
|
+
writeStdout(omkBanner(meta, formatOmkVersionFooter(), theme ?? undefined) + "\n");
|
|
374
|
+
options?.onMeta?.(meta);
|
|
375
|
+
}, true, (rawMeta) => {
|
|
376
|
+
const kimiSession = rawMeta.session?.trim();
|
|
377
|
+
if (!kimiSession || kimiSession === observedKimiSession)
|
|
378
|
+
return;
|
|
379
|
+
observedKimiSession = kimiSession;
|
|
380
|
+
process.env.KIMI_SESSION_ID = kimiSession;
|
|
381
|
+
options?.onKimiMeta?.(rawMeta);
|
|
382
|
+
markStartupReady();
|
|
383
|
+
if (!noBanner) {
|
|
384
|
+
const omkSession = launchMeta.session;
|
|
385
|
+
const suffix = omkSession && omkSession !== kimiSession ? ` ${style.gray(`(OMK session: ${omkSession})`)}` : "";
|
|
386
|
+
writeStdout(`${style.gray("[omk] Kimi session:")} ${style.cream(kimiSession)}${suffix}\n`);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
const bugFilter = new KimiBugFilter();
|
|
390
|
+
const continuePromptGuard = new KimiContinuePromptGuard({ maxAutoEnters: Number(process.env.OMK_KIMI_MAX_AUTO_ENTER ?? 5) });
|
|
391
|
+
const statusLine = await KimiStatusLineEnhancer.create();
|
|
392
|
+
const baseEnv = buildSafeKimiChildEnv(process.env, options?.env ?? {}, {}, {
|
|
393
|
+
warnExplicitSecrets: true,
|
|
394
|
+
explicitEnvContext: "interactive Kimi options.env",
|
|
395
|
+
});
|
|
396
|
+
const originalHome = resolveOriginalHome(baseEnv);
|
|
397
|
+
const tmpHome = await prepareIsolatedKimiHome({
|
|
398
|
+
originalHome,
|
|
399
|
+
env: baseEnv,
|
|
400
|
+
skillsScope: resources.skillsScope,
|
|
401
|
+
hooksScope: resources.hooksScope,
|
|
402
|
+
});
|
|
403
|
+
const env = buildSafeKimiChildEnv({}, baseEnv, {
|
|
404
|
+
KIMI_HIDE_BANNER: "1",
|
|
405
|
+
KIMI_NO_BANNER: "1",
|
|
406
|
+
OMK_RESOURCE_PROFILE_EFFECTIVE: resources.profile,
|
|
407
|
+
OMK_ORIGINAL_HOME: originalHome,
|
|
408
|
+
HOME: tmpHome,
|
|
409
|
+
USERPROFILE: tmpHome,
|
|
410
|
+
HOMEDRIVE: "",
|
|
411
|
+
HOMEPATH: tmpHome,
|
|
412
|
+
PWD: options?.cwd ?? process.cwd(),
|
|
413
|
+
CODEX_HOME: join(tmpHome, ".codex"),
|
|
414
|
+
});
|
|
415
|
+
const kimiBin = resolveKimiBin(env);
|
|
416
|
+
// Binary resolution guard: verify `kimi` is reachable before spawn
|
|
417
|
+
const kimiAvailable = await checkCommand(kimiBin);
|
|
418
|
+
if (!kimiAvailable) {
|
|
419
|
+
await cleanupIsolatedKimiHome(tmpHome);
|
|
420
|
+
throw new Error("[omk] `kimi` command not found in PATH. " +
|
|
421
|
+
"Kimi/OMK primary provider not found. Install Kimi CLI: npm i -g @anthropic-ai/kimi-code, or set KIMI_BIN to an alternative provider binary.\n" +
|
|
422
|
+
"If already installed, check your PATH or set KIMI_BIN env var.");
|
|
423
|
+
}
|
|
424
|
+
// MCP preflight: verify config files exist before spawn
|
|
425
|
+
await preflightMcpConfigs(args);
|
|
426
|
+
// ── Backpressure-safe stdout writer (circular buffer) ──
|
|
427
|
+
// Prevents process.stdout.write from blocking the event loop when the
|
|
428
|
+
// TTY is slow, which in turn starves stdin keypress handlers.
|
|
429
|
+
const rawMaxLines = parseInt(process.env.OMK_MAX_STDOUT_LINES ?? "10000", 10);
|
|
430
|
+
const MAX_STDOUT_LINES = Number.isNaN(rawMaxLines) ? 10000 : Math.max(1000, Math.min(20000, rawMaxLines));
|
|
431
|
+
const MAX_CHUNK_BYTES = 65536; // cap individual chunks to avoid memory spikes
|
|
432
|
+
const stdoutQueue = [];
|
|
433
|
+
let stdoutHead = 0;
|
|
434
|
+
let stdoutCount = 0;
|
|
435
|
+
let stdoutWriting = false;
|
|
436
|
+
function circularPush(data) {
|
|
437
|
+
// Limit individual chunk size to prevent memory spikes from huge single writes
|
|
438
|
+
const chunks = data.length > MAX_CHUNK_BYTES
|
|
439
|
+
? [data.slice(0, MAX_CHUNK_BYTES), data.slice(MAX_CHUNK_BYTES)]
|
|
440
|
+
: [data];
|
|
441
|
+
for (const chunk of chunks) {
|
|
442
|
+
const idx = (stdoutHead + stdoutCount) % MAX_STDOUT_LINES;
|
|
443
|
+
if (stdoutCount < MAX_STDOUT_LINES) {
|
|
444
|
+
stdoutQueue[idx] = chunk;
|
|
445
|
+
stdoutCount++;
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
stdoutQueue[stdoutHead] = chunk;
|
|
449
|
+
stdoutHead = (stdoutHead + 1) % MAX_STDOUT_LINES;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
function circularShift() {
|
|
454
|
+
if (stdoutCount === 0)
|
|
455
|
+
return undefined;
|
|
456
|
+
const data = stdoutQueue[stdoutHead];
|
|
457
|
+
stdoutQueue[stdoutHead] = "";
|
|
458
|
+
stdoutHead = (stdoutHead + 1) % MAX_STDOUT_LINES;
|
|
459
|
+
stdoutCount--;
|
|
460
|
+
return data;
|
|
461
|
+
}
|
|
462
|
+
function flushStdoutQueue() {
|
|
463
|
+
stdoutWriting = true;
|
|
464
|
+
while (stdoutCount > 0) {
|
|
465
|
+
const chunk = circularShift();
|
|
466
|
+
if (!process.stdout.write(chunk)) {
|
|
467
|
+
process.stdout.once("drain", () => {
|
|
468
|
+
stdoutWriting = false;
|
|
469
|
+
flushStdoutQueue();
|
|
470
|
+
});
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
stdoutWriting = false;
|
|
475
|
+
}
|
|
476
|
+
function writeStdout(data) {
|
|
477
|
+
circularPush(sanitizeUserVisibleOutput(data));
|
|
478
|
+
if (!stdoutWriting) {
|
|
479
|
+
flushStdoutQueue();
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
// Print OMK banner BEFORE spawning Kimi
|
|
483
|
+
const meta = launchMeta;
|
|
484
|
+
if (!noBanner) {
|
|
485
|
+
writeStdout(omkBanner(meta, formatOmkVersionFooter(), theme ?? undefined) + "\n");
|
|
486
|
+
}
|
|
487
|
+
options?.onMeta?.(meta);
|
|
488
|
+
let ptyModule;
|
|
489
|
+
try {
|
|
490
|
+
ptyModule = await import("node-pty");
|
|
491
|
+
}
|
|
492
|
+
catch (err) {
|
|
493
|
+
await cleanupIsolatedKimiHome(tmpHome);
|
|
494
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
495
|
+
throw new Error("[omk] Failed to load node-pty native module. " +
|
|
496
|
+
`(${message})\n` +
|
|
497
|
+
"This usually happens when installed with --ignore-scripts.\n" +
|
|
498
|
+
"Fix: npm rebuild -g @omk/cli\n" +
|
|
499
|
+
"Or reinstall: npm uninstall -g @omk/cli && npm install -g @omk/cli");
|
|
500
|
+
}
|
|
501
|
+
let ptyProcess;
|
|
502
|
+
try {
|
|
503
|
+
ptyProcess = ptyModule.spawn(kimiBin, args, {
|
|
504
|
+
name: "xterm-256color",
|
|
505
|
+
cols: process.stdout.columns || 80,
|
|
506
|
+
rows: process.stdout.rows || 24,
|
|
507
|
+
cwd: options?.cwd ?? process.cwd(),
|
|
508
|
+
env,
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
catch (err) {
|
|
512
|
+
await cleanupIsolatedKimiHome(tmpHome);
|
|
513
|
+
throw err;
|
|
514
|
+
}
|
|
515
|
+
const spawnedAt = Date.now();
|
|
516
|
+
const ptyTarget = createPtyProcessTreeTarget(ptyProcess);
|
|
517
|
+
// ── Signal handlers registered inside Promise below ──
|
|
518
|
+
let recentProviderOutput = "";
|
|
519
|
+
const rememberProviderOutput = (chunk) => {
|
|
520
|
+
recentProviderOutput = (recentProviderOutput + chunk).slice(-8000);
|
|
521
|
+
};
|
|
522
|
+
// stdout → 터미널 (버그 필터 → 배너 필터링 적용)
|
|
523
|
+
ptyProcess.onData((data) => {
|
|
524
|
+
options?.onData?.(data);
|
|
525
|
+
if (isKimiStartupReadyData(data))
|
|
526
|
+
markStartupReady();
|
|
527
|
+
rememberProviderOutput(data);
|
|
528
|
+
// Strip terminal sequences that break scrollback / native mouse scrolling:
|
|
529
|
+
// - alternate-screen buffer enter/exit (1049, legacy 47)
|
|
530
|
+
// - mouse tracking (1000, 1002, 1006)
|
|
531
|
+
// - scroll-region setting (r) — prevents partial-screen redraws that confuse scrollback
|
|
532
|
+
data = data
|
|
533
|
+
.replace(/\x1b\[\?1049[hl]/g, "")
|
|
534
|
+
.replace(/\x1b\[\?47[hl]/g, "")
|
|
535
|
+
.replace(/\x1b\[\?(1000|1002|1003|1006)[hl]/g, "")
|
|
536
|
+
.replace(/\x1b\[\d+;\d+[r]/g, "");
|
|
537
|
+
const bugResult = bugFilter.process(data);
|
|
538
|
+
if (bugResult.sendEnter) {
|
|
539
|
+
ptyProcess.write("\n");
|
|
540
|
+
}
|
|
541
|
+
const continueResult = continuePromptGuard.process(data);
|
|
542
|
+
if (continueResult.sendEnter) {
|
|
543
|
+
ptyProcess.write("\r");
|
|
544
|
+
process.stderr.write("[omk] auto-entered Kimi continue prompt\n");
|
|
545
|
+
}
|
|
546
|
+
if (continueResult.exceeded) {
|
|
547
|
+
process.stderr.write(`[omk] ${continueResult.reason}\n`);
|
|
548
|
+
forceTerminate(1);
|
|
549
|
+
}
|
|
550
|
+
if (bugResult.output === null) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
const output = replacer.process(bugResult.output);
|
|
554
|
+
if (output !== null) {
|
|
555
|
+
writeStdout(statusLine.process(output));
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
// stdin → pty (Buffer passthrough for lower latency)
|
|
559
|
+
const terminalInputState = enableRawTerminalInput(process.stdin);
|
|
560
|
+
const handleStdinData = (data) => {
|
|
561
|
+
const text = typeof data === "string" ? data : data.toString("utf8");
|
|
562
|
+
// Ctrl+V (0x16) — auto-attach a clipboard image if Windows Capture/Snipping Tool
|
|
563
|
+
// copied one via Ctrl+C. Text paste still falls through to Kimi unchanged.
|
|
564
|
+
// Set OMK_IMAGE_PASTE_MODE=native/off to disable, or managed to show clipboard errors.
|
|
565
|
+
if (text.includes("\x16")) {
|
|
566
|
+
const mode = (process.env.OMK_IMAGE_PASTE_MODE ?? "auto").toLowerCase();
|
|
567
|
+
const remaining = text.replace(/\x16/g, "");
|
|
568
|
+
if (!["native", "off", "disabled", "0"].includes(mode)) {
|
|
569
|
+
const result = pasteScreenshot(getProjectRoot());
|
|
570
|
+
if (result.ok && result.relativePath) {
|
|
571
|
+
// Insert path but do NOT auto-submit; user must press Enter.
|
|
572
|
+
ptyProcess.write(`Image file: ${result.relativePath}`);
|
|
573
|
+
if (remaining) {
|
|
574
|
+
ptyProcess.write(remaining);
|
|
575
|
+
}
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
if (mode === "managed" && remaining.trim().length === 0) {
|
|
579
|
+
ptyProcess.write(`[Clipboard: ${result.error ?? "no image found"}]`);
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
ptyProcess.write(text);
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
// /paste-image — explicit command to save clipboard image and insert path
|
|
587
|
+
if (text.trim() === "/paste-image") {
|
|
588
|
+
const result = pasteScreenshot(getProjectRoot());
|
|
589
|
+
if (result.ok && result.relativePath) {
|
|
590
|
+
// Insert path but do NOT auto-submit; user must press Enter.
|
|
591
|
+
ptyProcess.write(`Image file: ${result.relativePath}`);
|
|
592
|
+
}
|
|
593
|
+
else {
|
|
594
|
+
ptyProcess.write(`[Screenshot error: ${result.error ?? "No image found"}]`);
|
|
595
|
+
}
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
ptyProcess.write(text);
|
|
599
|
+
};
|
|
600
|
+
process.stdin.on("data", handleStdinData);
|
|
601
|
+
// 터미널 리사이즈 → pty 동기화
|
|
602
|
+
const handleStdoutResize = () => {
|
|
603
|
+
ptyProcess.resize(process.stdout.columns || 80, process.stdout.rows || 24);
|
|
604
|
+
};
|
|
605
|
+
process.stdout.on("resize", handleStdoutResize);
|
|
606
|
+
// 종료 대기
|
|
607
|
+
let forceTerminate;
|
|
608
|
+
return new Promise((resolve) => {
|
|
609
|
+
let cleaned = false;
|
|
610
|
+
let settled = false;
|
|
611
|
+
let startupTimer;
|
|
612
|
+
let terminationStarted;
|
|
613
|
+
const clearWatchdogs = () => {
|
|
614
|
+
if (startupTimer)
|
|
615
|
+
clearTimeout(startupTimer);
|
|
616
|
+
};
|
|
617
|
+
const cleanupRuntime = async () => {
|
|
618
|
+
if (cleaned)
|
|
619
|
+
return;
|
|
620
|
+
cleaned = true;
|
|
621
|
+
clearWatchdogs();
|
|
622
|
+
try {
|
|
623
|
+
process.stdin.off("data", handleStdinData);
|
|
624
|
+
process.stdout.off("resize", handleStdoutResize);
|
|
625
|
+
process.removeListener("SIGINT", signalHandler);
|
|
626
|
+
process.removeListener("SIGTERM", signalHandler);
|
|
627
|
+
}
|
|
628
|
+
finally {
|
|
629
|
+
try {
|
|
630
|
+
statusLine.dispose();
|
|
631
|
+
}
|
|
632
|
+
finally {
|
|
633
|
+
restoreTerminalInputState(process.stdin, terminalInputState);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
await cleanupIsolatedKimiHome(tmpHome);
|
|
637
|
+
};
|
|
638
|
+
const resolveOnce = (code) => {
|
|
639
|
+
if (settled)
|
|
640
|
+
return;
|
|
641
|
+
settled = true;
|
|
642
|
+
clearWatchdogs();
|
|
643
|
+
resolve(code);
|
|
644
|
+
};
|
|
645
|
+
forceTerminate = (exitCode) => {
|
|
646
|
+
if (!terminationStarted) {
|
|
647
|
+
terminationStarted = terminateProcessTree(ptyTarget, { graceMs: 1000, waitMs: 5000 })
|
|
648
|
+
.catch((err) => {
|
|
649
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
650
|
+
process.stderr.write(`[omk] PTY termination warning: ${message}\n`);
|
|
651
|
+
try {
|
|
652
|
+
process.kill(-ptyProcess.pid, "SIGKILL");
|
|
653
|
+
}
|
|
654
|
+
catch {
|
|
655
|
+
try {
|
|
656
|
+
ptyProcess.kill("SIGKILL");
|
|
657
|
+
}
|
|
658
|
+
catch { /* pty already dead */ }
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
terminationStarted
|
|
663
|
+
.then(() => cleanupRuntime())
|
|
664
|
+
.catch((err) => {
|
|
665
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
666
|
+
process.stderr.write(`[omk] PTY cleanup warning: ${message}\n`);
|
|
667
|
+
})
|
|
668
|
+
.finally(() => resolveOnce(exitCode));
|
|
669
|
+
};
|
|
670
|
+
const startupTimeoutMs = resolveKimiStartupTimeoutMs(env);
|
|
671
|
+
if (startupTimeoutMs > 0) {
|
|
672
|
+
startupTimer = setTimeout(() => {
|
|
673
|
+
if (startupReady || settled)
|
|
674
|
+
return;
|
|
675
|
+
const runId = options?.env?.OMK_RUN_ID;
|
|
676
|
+
const resumeHint = runId ? ` • resume: omk chat --run-id ${runId}` : "";
|
|
677
|
+
process.stderr.write(style.red(`[omk] Kimi startup timed out after ${startupTimeoutMs}ms without session or prompt-ready signal${resumeHint}\n`));
|
|
678
|
+
forceTerminate(1);
|
|
679
|
+
}, startupTimeoutMs);
|
|
680
|
+
startupTimer.unref?.();
|
|
681
|
+
}
|
|
682
|
+
const signalHandler = (signal) => {
|
|
683
|
+
// Remove listeners first to prevent re-entry
|
|
684
|
+
process.removeListener("SIGINT", signalHandler);
|
|
685
|
+
process.removeListener("SIGTERM", signalHandler);
|
|
686
|
+
process.exitCode = signal === "SIGINT" ? 130 : 143; // 128+2, 128+15
|
|
687
|
+
forceTerminate(process.exitCode);
|
|
688
|
+
};
|
|
689
|
+
process.once("SIGINT", signalHandler);
|
|
690
|
+
process.once("SIGTERM", signalHandler);
|
|
691
|
+
ptyProcess.onExit(({ exitCode }) => {
|
|
692
|
+
if (settled)
|
|
693
|
+
return;
|
|
694
|
+
void (async () => {
|
|
695
|
+
const elapsedMs = Date.now() - spawnedAt;
|
|
696
|
+
const bugRest = bugFilter.forceFlush();
|
|
697
|
+
if (bugRest)
|
|
698
|
+
writeStdout(statusLine.process(bugRest));
|
|
699
|
+
const replacerRest = replacer.forceFlush();
|
|
700
|
+
if (replacerRest)
|
|
701
|
+
writeStdout(statusLine.process(replacerRest));
|
|
702
|
+
await cleanupRuntime().catch((err) => {
|
|
703
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
704
|
+
process.stderr.write(`[omk] PTY cleanup warning: ${message}\n`);
|
|
705
|
+
});
|
|
706
|
+
const runId = options?.env?.OMK_RUN_ID;
|
|
707
|
+
const resumeHint = runId ? ` • resume: omk chat --run-id ${runId}` : "";
|
|
708
|
+
const startupExit = classifyKimiStartupExit(exitCode, elapsedMs, env);
|
|
709
|
+
if (startupExit) {
|
|
710
|
+
process.stderr.write(style.red(`[omk] ${startupExit.message}${resumeHint}\n`));
|
|
711
|
+
process.stderr.write(style.orange(`[omk] Treating this as a startup failure so OMK does not silently close the chat.\n` +
|
|
712
|
+
` Run 'kimi' directly or 'omk doctor --fix' to diagnose startup configuration.\n`));
|
|
713
|
+
}
|
|
714
|
+
else if (exitCode !== 0) {
|
|
715
|
+
process.stderr.write(style.red(`[omk] kimi exited with code ${exitCode}${resumeHint}\n`));
|
|
716
|
+
// Detect MCP connection failures from stderr that was buffered in PTY
|
|
717
|
+
const providerHint = formatKimiProviderFailureHint(recentProviderOutput);
|
|
718
|
+
if (providerHint) {
|
|
719
|
+
process.stderr.write(style.orange(providerHint));
|
|
720
|
+
}
|
|
721
|
+
else if (exitCode === 1) {
|
|
722
|
+
process.stderr.write(style.orange(`[omk] If this was caused by MCP server connection failure, run 'omk doctor' to diagnose.\n` +
|
|
723
|
+
` You can also try: OMK_MCP_SCOPE=none omk chat --provider kimi\n`));
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
resolveOnce(startupExit ? 1 : exitCode);
|
|
727
|
+
})();
|
|
728
|
+
});
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
function createLiveThinkingHandler(onThinking) {
|
|
732
|
+
if (!onThinking)
|
|
733
|
+
return undefined;
|
|
734
|
+
let recentLine = "";
|
|
735
|
+
let debounceTimer = null;
|
|
736
|
+
const flush = () => {
|
|
737
|
+
if (recentLine)
|
|
738
|
+
onThinking(`📝 ${recentLine}`);
|
|
739
|
+
};
|
|
740
|
+
return (chunk) => {
|
|
741
|
+
const lines = chunk.split("\n");
|
|
742
|
+
for (const raw of lines) {
|
|
743
|
+
const line = raw.trim();
|
|
744
|
+
if (!line || line.length < 3)
|
|
745
|
+
continue;
|
|
746
|
+
// Explicit thinking markers
|
|
747
|
+
const explicit = line.match(/^<think(?:ing)?>[\s:]*(.+?)(?:<\/think(?:ing)?>)?$/i);
|
|
748
|
+
if (explicit) {
|
|
749
|
+
onThinking(`🧠 ${explicit[1].trim().slice(0, 100)}`);
|
|
750
|
+
continue;
|
|
751
|
+
}
|
|
752
|
+
// Tool/file activity
|
|
753
|
+
if (/read_file|write_file|edit_file|search_files|glob|grep|ctx_read/i.test(line)) {
|
|
754
|
+
const m = line.match(/["']([^"']{1,60})["']/);
|
|
755
|
+
onThinking(m ? `📄 ${m[1].split("/").pop() ?? m[1]}` : `🔧 ${line.slice(0, 60)}`);
|
|
756
|
+
continue;
|
|
757
|
+
}
|
|
758
|
+
if (line.length > 5 && line.length < 120 && !line.startsWith("```")) {
|
|
759
|
+
recentLine = line.slice(0, 80);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
if (debounceTimer)
|
|
763
|
+
clearTimeout(debounceTimer);
|
|
764
|
+
debounceTimer = setTimeout(flush, 400);
|
|
765
|
+
};
|
|
766
|
+
}
|
|
767
|
+
function isPathInside(parent, child) {
|
|
768
|
+
const rel = relative(resolve(parent), resolve(child));
|
|
769
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
770
|
+
}
|
|
771
|
+
function formatFallbackAgentFilePath(fallback, projectRoot) {
|
|
772
|
+
const normalizedFallback = resolve(fallback);
|
|
773
|
+
if (isPathInside(projectRoot, normalizedFallback)) {
|
|
774
|
+
return `project fallback ${relative(projectRoot, normalizedFallback).replace(/\\/g, "/") || "."}`;
|
|
775
|
+
}
|
|
776
|
+
const userHome = getUserHome();
|
|
777
|
+
if (isPathInside(userHome, normalizedFallback)) {
|
|
778
|
+
return `global fallback ~/${relative(userHome, normalizedFallback).replace(/\\/g, "/")}`;
|
|
779
|
+
}
|
|
780
|
+
return `external fallback ${fallback}`;
|
|
781
|
+
}
|
|
782
|
+
export async function resolveAgentFileForRole(role, fallback) {
|
|
783
|
+
const projectRoot = getProjectRoot();
|
|
784
|
+
const candidates = [
|
|
785
|
+
join(projectRoot, ".omk", "agents", `${role}.yaml`),
|
|
786
|
+
join(projectRoot, ".omk", "agents", `${role}.yml`),
|
|
787
|
+
join(projectRoot, ".omk", "agents", "roles", `${role}.yaml`),
|
|
788
|
+
join(projectRoot, ".omk", "agents", "roles", `${role}.yml`),
|
|
789
|
+
join(projectRoot, ".kimi", "agents", `${role}.yaml`),
|
|
790
|
+
join(projectRoot, ".kimi", "agents", `${role}.yml`),
|
|
791
|
+
join(projectRoot, ".kimi", "agents", "roles", `${role}.yaml`),
|
|
792
|
+
join(projectRoot, ".kimi", "agents", "roles", `${role}.yml`),
|
|
793
|
+
];
|
|
794
|
+
for (const candidate of candidates) {
|
|
795
|
+
if (await pathExists(candidate))
|
|
796
|
+
return candidate;
|
|
797
|
+
}
|
|
798
|
+
if (fallback) {
|
|
799
|
+
const searched = candidates.map((candidate) => relative(projectRoot, candidate).replace(/\\/g, "/"));
|
|
800
|
+
console.warn(`[omk] No agent file found for role "${role}" in ${searched.join(", ")}; ` +
|
|
801
|
+
`falling back to ${formatFallbackAgentFilePath(fallback, projectRoot)}. ` +
|
|
802
|
+
`Run "omk doctor --fix" to restore missing generated role files and root aliases.`);
|
|
803
|
+
}
|
|
804
|
+
return fallback;
|
|
805
|
+
}
|
|
806
|
+
export function createKimiTaskRunner(options = {}) {
|
|
807
|
+
const { cwd, timeout = 120000, env, agentFile, promptPrefix, mcpScope, skillsScope, hooksScope, mcpNames, skillNames, hookNames, toolNames, onThinking, roleAgentFiles } = options;
|
|
808
|
+
let currentOnThinking = onThinking;
|
|
809
|
+
const runner = {
|
|
810
|
+
get onThinking() {
|
|
811
|
+
return currentOnThinking;
|
|
812
|
+
},
|
|
813
|
+
set onThinking(fn) {
|
|
814
|
+
currentOnThinking = fn;
|
|
815
|
+
},
|
|
816
|
+
fork(newOnThinking) {
|
|
817
|
+
return createKimiTaskRunner({ ...options, onThinking: newOnThinking });
|
|
818
|
+
},
|
|
819
|
+
async run(node, nodeEnv, signal) {
|
|
820
|
+
const baseEnv = buildSafeKimiChildEnv(process.env, { ...(env ?? {}), ...nodeEnv }, {}, {
|
|
821
|
+
warnExplicitSecrets: true,
|
|
822
|
+
explicitEnvContext: "Kimi DAG env/nodeEnv",
|
|
823
|
+
});
|
|
824
|
+
const resources = await getOmkResourceSettings();
|
|
825
|
+
const effectiveMcpScope = mcpScope ?? resources.mcpScope;
|
|
826
|
+
const effectiveSkillsScope = skillsScope ?? resources.skillsScope;
|
|
827
|
+
const effectiveHooksScope = hooksScope ?? resources.hooksScope;
|
|
828
|
+
const originalHome = resolveOriginalHome(baseEnv);
|
|
829
|
+
const tmpHome = await prepareIsolatedKimiHome({
|
|
830
|
+
originalHome,
|
|
831
|
+
env: baseEnv,
|
|
832
|
+
skillsScope: effectiveSkillsScope,
|
|
833
|
+
hooksScope: effectiveHooksScope,
|
|
834
|
+
});
|
|
835
|
+
const worktree = node.worktree ?? cwd;
|
|
836
|
+
const mergedEnv = buildSafeKimiChildEnv({}, baseEnv, {
|
|
837
|
+
OMK_ORIGINAL_HOME: originalHome,
|
|
838
|
+
HOME: tmpHome,
|
|
839
|
+
USERPROFILE: tmpHome,
|
|
840
|
+
HOMEDRIVE: "",
|
|
841
|
+
HOMEPATH: tmpHome,
|
|
842
|
+
PWD: worktree ?? process.cwd(),
|
|
843
|
+
CODEX_HOME: join(tmpHome, ".codex"),
|
|
844
|
+
});
|
|
845
|
+
const args = [];
|
|
846
|
+
const mcpAllowlist = resolveNodeMcpAllowlist(node, nodeEnv, mcpNames);
|
|
847
|
+
await injectKimiGlobals(args, { mcpScope: effectiveMcpScope, skillsScope: effectiveSkillsScope, hooksScope: effectiveHooksScope, role: node.role, mcpAllowlist });
|
|
848
|
+
await preflightMcpConfigs(args);
|
|
849
|
+
if (process.env.OMK_DEBUG === "1") {
|
|
850
|
+
const mcpConfigIdx = args.indexOf("--mcp-config-file");
|
|
851
|
+
if (mcpConfigIdx >= 0) {
|
|
852
|
+
const configPath = args[mcpConfigIdx + 1];
|
|
853
|
+
try {
|
|
854
|
+
const configContent = await readFile(configPath, "utf-8");
|
|
855
|
+
const config = JSON.parse(configContent);
|
|
856
|
+
const servers = config.mcpServers ?? {};
|
|
857
|
+
const count = Object.keys(servers).length;
|
|
858
|
+
console.error(`[omk:mcp] passing ${count} server(s) to Kimi via ${configPath}`);
|
|
859
|
+
}
|
|
860
|
+
catch { /* ignore */ }
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
const resolvedAgentFile = roleAgentFiles
|
|
864
|
+
? await resolveAgentFileForRole(node.role, agentFile)
|
|
865
|
+
: agentFile;
|
|
866
|
+
if (resolvedAgentFile) {
|
|
867
|
+
const capabilityScopes = capabilityScopesFromRouting(node.routing, {
|
|
868
|
+
mcpServers: mcpNames ?? [],
|
|
869
|
+
skills: skillNames ?? [],
|
|
870
|
+
hooks: hookNames ?? [],
|
|
871
|
+
tools: toolNames ?? [],
|
|
872
|
+
});
|
|
873
|
+
const scopedAgentFile = await writeScopedAgentFile({
|
|
874
|
+
baseAgentFile: resolvedAgentFile,
|
|
875
|
+
outputFile: defaultScopedRoleAgentFile(getProjectRoot(), mergedEnv.OMK_RUN_ID ?? mergedEnv.OMK_SESSION_ID, node.role, node.id),
|
|
876
|
+
role: node.role,
|
|
877
|
+
resources: {
|
|
878
|
+
mcpScope: effectiveMcpScope,
|
|
879
|
+
skillsScope: effectiveSkillsScope,
|
|
880
|
+
hooksScope: effectiveHooksScope,
|
|
881
|
+
mcpNames: [...capabilityScopes.mcpServers],
|
|
882
|
+
skillNames: [...capabilityScopes.skills],
|
|
883
|
+
hookNames: [...capabilityScopes.hooks],
|
|
884
|
+
toolNames: [...capabilityScopes.tools],
|
|
885
|
+
},
|
|
886
|
+
});
|
|
887
|
+
args.push("--agent-file", scopedAgentFile);
|
|
888
|
+
}
|
|
889
|
+
const promptInput = buildNodeMessage(node, mergedEnv, promptPrefix);
|
|
890
|
+
args.push("--print", "--input-format", "text");
|
|
891
|
+
if (worktree) {
|
|
892
|
+
await ensureDir(worktree);
|
|
893
|
+
}
|
|
894
|
+
const runId = mergedEnv.OMK_RUN_ID;
|
|
895
|
+
const logPath = runId
|
|
896
|
+
? join(getProjectRoot(), ".omk", "runs", runId, `${node.id}.log`)
|
|
897
|
+
: undefined;
|
|
898
|
+
const thinkingHandler = createLiveThinkingHandler(currentOnThinking);
|
|
899
|
+
const effectiveTimeout = await resolveTimeoutMs({ timeoutMs: timeout, timeoutPreset: node.timeoutPreset });
|
|
900
|
+
// Binary resolution guard for DAG mode
|
|
901
|
+
const kimiBin = resolveKimiBin(mergedEnv);
|
|
902
|
+
const kimiAvailable = await checkCommand(kimiBin);
|
|
903
|
+
if (!kimiAvailable) {
|
|
904
|
+
return {
|
|
905
|
+
success: false,
|
|
906
|
+
exitCode: 1,
|
|
907
|
+
stdout: "",
|
|
908
|
+
stderr: `[omk] Primary provider (kimi) not found: ${kimiBin}. Install Kimi CLI or set KIMI_BIN to an alternative provider binary.`,
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
let result;
|
|
912
|
+
try {
|
|
913
|
+
const continuePromptGuard = new KimiContinuePromptGuard({ maxAutoEnters: Number(process.env.OMK_KIMI_MAX_AUTO_ENTER ?? 5) });
|
|
914
|
+
result = await runShellStreaming(kimiBin, args, {
|
|
915
|
+
cwd: worktree,
|
|
916
|
+
timeout: effectiveTimeout,
|
|
917
|
+
env: mergedEnv,
|
|
918
|
+
input: promptInput,
|
|
919
|
+
logPath,
|
|
920
|
+
onStdout: (chunk) => {
|
|
921
|
+
const safeChunk = sanitizeUserVisibleOutput(chunk);
|
|
922
|
+
options.onOutput?.(safeChunk);
|
|
923
|
+
thinkingHandler?.(chunk);
|
|
924
|
+
const decision = continuePromptGuard.process(chunk);
|
|
925
|
+
if (decision.sendEnter) {
|
|
926
|
+
process.stderr.write("[omk] Kimi continue prompt detected; streaming shell does not expose stdin in this path\n");
|
|
927
|
+
}
|
|
928
|
+
if (decision.exceeded) {
|
|
929
|
+
process.stderr.write(`[omk] ${decision.reason}\n`);
|
|
930
|
+
}
|
|
931
|
+
},
|
|
932
|
+
onStderr: (chunk) => {
|
|
933
|
+
const decision = continuePromptGuard.process(chunk);
|
|
934
|
+
if (decision.sendEnter) {
|
|
935
|
+
process.stderr.write("[omk] Kimi continue prompt detected; streaming shell does not expose stdin in this path\n");
|
|
936
|
+
}
|
|
937
|
+
if (decision.exceeded) {
|
|
938
|
+
process.stderr.write(`[omk] ${decision.reason}\n`);
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
signal,
|
|
942
|
+
});
|
|
943
|
+
}
|
|
944
|
+
finally {
|
|
945
|
+
await cleanupIsolatedKimiHome(tmpHome);
|
|
946
|
+
}
|
|
947
|
+
// Debug: log runner result so we can diagnose unexpected failures
|
|
948
|
+
if (result.failed || result.exitCode !== 0) {
|
|
949
|
+
const stderrPreview = result.stderr.slice(0, 500).replace(/\n/g, "\\n");
|
|
950
|
+
process.stderr.write(`[omk-debug] node=${node.id} exitCode=${result.exitCode} failed=${result.failed} stdoutLen=${result.stdout.length} stderrLen=${result.stderr.length} stderrPreview=${stderrPreview}\n`);
|
|
951
|
+
if (result.stderr.includes("Failed to connect MCP servers")) {
|
|
952
|
+
process.stderr.write(style.red(`[omk] MCP server connection failure detected in node ${node.id}.\n` +
|
|
953
|
+
` Run 'omk doctor' to check MCP status, or disable the failing server in ~/.kimi/mcp.json.\n`));
|
|
954
|
+
}
|
|
955
|
+
if (result.stderr.includes("text content is empty")) {
|
|
956
|
+
process.stderr.write(style.red(`[omk] Kimi API returned 400 "text content is empty" in node ${node.id}.\n` +
|
|
957
|
+
` This is a known Kimi CLI bug (fixed in v1.39.0, 2026-04-24).\n` +
|
|
958
|
+
` Upgrade Kimi CLI: npm i -g @anthropic-ai/kimi-code\n`));
|
|
959
|
+
}
|
|
960
|
+
const providerHint = formatKimiProviderFailureHint(`${result.stderr}\n${result.stdout}`);
|
|
961
|
+
if (providerHint) {
|
|
962
|
+
process.stderr.write(style.orange(providerHint));
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
const providerHint = formatKimiProviderFailureHint(`${result.stderr}\n${result.stdout}`);
|
|
966
|
+
if (providerHint && !result.stderr.includes("[omk] Kimi monthly quota exhausted")) {
|
|
967
|
+
result = {
|
|
968
|
+
...result,
|
|
969
|
+
stderr: result.stderr ? `${result.stderr}\n${providerHint}` : providerHint,
|
|
970
|
+
};
|
|
971
|
+
}
|
|
972
|
+
const prefix = `[${node.id}:${node.role}] `;
|
|
973
|
+
const prefixStdout = result.stdout
|
|
974
|
+
.split("\n")
|
|
975
|
+
.map((line) => (line.trim() ? prefix + line : line))
|
|
976
|
+
.join("\n");
|
|
977
|
+
const prefixStderr = result.stderr
|
|
978
|
+
.split("\n")
|
|
979
|
+
.map((line) => (line.trim() ? prefix + line : line))
|
|
980
|
+
.join("\n");
|
|
981
|
+
// Known MCP soft-failure: Kimi CLI may return exit code 1 when an MCP
|
|
982
|
+
// server fails to connect, even though it produced meaningful stdout.
|
|
983
|
+
// Only allow this specific exception; all other non-zero exits are failures.
|
|
984
|
+
const optionalMcpFailure = isOptionalMcpFailureResult(node, `${result.stderr}\n${result.stdout}`, result.stdout.trim().length > 0);
|
|
985
|
+
const stderrWithOptionalWarning = optionalMcpFailure
|
|
986
|
+
? [
|
|
987
|
+
prefixStderr,
|
|
988
|
+
`${prefix}[omk] Warning: optional MCP server startup failed; continuing because this node does not require MCP.`,
|
|
989
|
+
].filter(Boolean).join("\n")
|
|
990
|
+
: prefixStderr;
|
|
991
|
+
return {
|
|
992
|
+
success: (!result.failed && result.exitCode === 0) || optionalMcpFailure,
|
|
993
|
+
exitCode: result.exitCode,
|
|
994
|
+
stdout: prefixStdout,
|
|
995
|
+
stderr: stderrWithOptionalWarning,
|
|
996
|
+
};
|
|
997
|
+
},
|
|
998
|
+
};
|
|
999
|
+
return runner;
|
|
1000
|
+
}
|
|
1001
|
+
function buildNodeMessage(node, env, promptPrefix) {
|
|
1002
|
+
const routing = node.routing;
|
|
1003
|
+
if (routing?.promptMode === "dnc-nlp") {
|
|
1004
|
+
return [promptPrefix?.trim(), node.name].filter((section) => Boolean(section)).join("\n\n");
|
|
1005
|
+
}
|
|
1006
|
+
const routingDirectives = [];
|
|
1007
|
+
if (routing?.skills?.length) {
|
|
1008
|
+
routingDirectives.push(`- Selected skills (use when relevant): ${routing.skills.join(", ")}`);
|
|
1009
|
+
}
|
|
1010
|
+
if (routing?.mcpServers?.length) {
|
|
1011
|
+
routingDirectives.push(routing.requiresMcp
|
|
1012
|
+
? `- Required MCP servers: ${routing.mcpServers.join(", ")}`
|
|
1013
|
+
: `- Optional MCP servers: ${routing.mcpServers.join(", ")}`);
|
|
1014
|
+
}
|
|
1015
|
+
if (routing?.tools?.length) {
|
|
1016
|
+
routingDirectives.push(routing.requiresToolCalling
|
|
1017
|
+
? `- Required tools: ${routing.tools.join(", ")}`
|
|
1018
|
+
: `- Available tools: ${routing.tools.join(", ")}`);
|
|
1019
|
+
}
|
|
1020
|
+
if (routing?.hooks?.length) {
|
|
1021
|
+
routingDirectives.push(`- Hooks (active boundaries): ${routing.hooks.join(", ")}`);
|
|
1022
|
+
}
|
|
1023
|
+
const provider = routing?.assignedProvider ?? routing?.provider;
|
|
1024
|
+
if (provider) {
|
|
1025
|
+
routingDirectives.push(`- Provider route: ${provider}${routing?.assignedProviderAuthority ? ` (${routing.assignedProviderAuthority})` : ""}`);
|
|
1026
|
+
}
|
|
1027
|
+
if (routing?.rationale) {
|
|
1028
|
+
routingDirectives.push(`- Rationale: ${routing.rationale}`);
|
|
1029
|
+
}
|
|
1030
|
+
const deepseekAdvisory = env.OMK_DEEPSEEK_ADVISORY?.trim();
|
|
1031
|
+
const actionAtom = routing?.actionAtom;
|
|
1032
|
+
const actionAtomSection = actionAtom
|
|
1033
|
+
? [
|
|
1034
|
+
"ActionAtom contract (source of truth for this node):",
|
|
1035
|
+
`- id: ${actionAtom.id}`,
|
|
1036
|
+
`- label: ${actionAtom.label}`,
|
|
1037
|
+
`- verb: ${actionAtom.verb}`,
|
|
1038
|
+
`- object: ${actionAtom.object ?? "assigned scope"}`,
|
|
1039
|
+
`- evidence target: ${actionAtom.evidenceTarget}`,
|
|
1040
|
+
`- done condition: ${actionAtom.doneCondition}`,
|
|
1041
|
+
].join("\n")
|
|
1042
|
+
: undefined;
|
|
1043
|
+
const sections = [
|
|
1044
|
+
promptPrefix?.trim(),
|
|
1045
|
+
[
|
|
1046
|
+
`Execute DAG node: ${node.id}`,
|
|
1047
|
+
`Name: ${node.name}`,
|
|
1048
|
+
`Role: ${node.role}`,
|
|
1049
|
+
`Run ID: ${env.OMK_RUN_ID ?? ""}`,
|
|
1050
|
+
`Dependencies: ${node.dependsOn.length > 0 ? node.dependsOn.join(", ") : "none"}`,
|
|
1051
|
+
`Context budget: ${routing?.contextBudget ?? env.OMK_CONTEXT_BUDGET ?? "small"}`,
|
|
1052
|
+
`Evidence required: ${String(routing?.evidenceRequired ?? env.OMK_ROUTE_EVIDENCE_REQUIRED ?? false)}`,
|
|
1053
|
+
].join("\n"),
|
|
1054
|
+
actionAtomSection,
|
|
1055
|
+
routingDirectives.length > 0
|
|
1056
|
+
? [
|
|
1057
|
+
"Routing directives:",
|
|
1058
|
+
...routingDirectives,
|
|
1059
|
+
"- Do not activate every available MCP server, skill, or tool.",
|
|
1060
|
+
"- Activate only capabilities required by the current task.",
|
|
1061
|
+
"- Optional MCP server failures are warnings unless this node lists Required MCP servers.",
|
|
1062
|
+
].join("\n")
|
|
1063
|
+
: undefined,
|
|
1064
|
+
deepseekAdvisory
|
|
1065
|
+
? [
|
|
1066
|
+
"DeepSeek advisory (non-authoritative — verify before editing):",
|
|
1067
|
+
`- Status: ${env.OMK_DEEPSEEK_ADVISORY_STATUS ?? "success"}`,
|
|
1068
|
+
`- Model: ${env.OMK_DEEPSEEK_ADVISORY_MODEL ?? "deepseek-v4-pro"}`,
|
|
1069
|
+
deepseekAdvisory,
|
|
1070
|
+
"The OMK authority provider remains responsible for actual file edits, shell execution, evidence, and final acceptance.",
|
|
1071
|
+
].join("\n")
|
|
1072
|
+
: undefined,
|
|
1073
|
+
[
|
|
1074
|
+
"Instructions:",
|
|
1075
|
+
"- Treat the prompt prefix as the active OMK orchestration contract; turn it into concrete node work, not a repeated summary.",
|
|
1076
|
+
"- Preserve completed work and continue only the unresolved scope named by this node.",
|
|
1077
|
+
"- Keep context small and read only the files needed for this node.",
|
|
1078
|
+
"- Use selected skills/MCP/tools only when they fit the node.",
|
|
1079
|
+
"- Produce concrete evidence, changed files, blockers, and verification result.",
|
|
1080
|
+
"- Do not silently skip required gates.",
|
|
1081
|
+
].join("\n"),
|
|
1082
|
+
].filter((section) => Boolean(section));
|
|
1083
|
+
return sections.join("\n\n");
|
|
1084
|
+
}
|