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,2058 @@
|
|
|
1
|
+
# OMK CLI v2 Runtime Architecture
|
|
2
|
+
|
|
3
|
+
> 목적: 현재 OMK interactive chat/runtime에서 발생하는 **prompt envelope 비대화**, **MCP 전체 강제 활성화**, **theme 미적용**, **NLP 비활성화**, **slash command 비대화형 유지**, **optional MCP 실패 fatal 처리** 문제를 해결하기 위한 CLI/runtime 아키텍처 문서.
|
|
4
|
+
|
|
5
|
+
- 대상 저장소: `dmae97/open-multi-agent-kit`
|
|
6
|
+
- 기준 관찰 로그: `붙여넣은 마크다운(1)(3).md`
|
|
7
|
+
- 기준 공개 커밋 맥락: `main` 최신 공개 커밋이 `fix(runtime): reuse fallback provider default in env` 계열로 확인된 상태
|
|
8
|
+
- 핵심 방향: **CLI 프레임워크 교체보다 먼저 `CapabilityPlan + RuntimeSidecar + OutputRouter + ProviderEventNormalizer`를 도입한다.**
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 0. Executive Summary
|
|
13
|
+
|
|
14
|
+
현재 OMK의 문제는 개별 provider, Kimi, theme palette, slash command handler 하나의 문제가 아니다. 근본 원인은 다음 한 줄이다.
|
|
15
|
+
|
|
16
|
+
```txt
|
|
17
|
+
OMK control-plane envelope가 machine sidecar로 분리되지 않고 provider model prompt와 provider runtime config로 그대로 누수되고 있다.
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
그 결과 다음 장애가 동시에 발생한다.
|
|
21
|
+
|
|
22
|
+
```txt
|
|
23
|
+
1. 사용자 요청은 짧은데 provider prompt는 수만 글자까지 비대해진다.
|
|
24
|
+
2. available MCP/skills가 required activation으로 오인된다.
|
|
25
|
+
3. unrelated MCP 하나가 실패해도 전체 turn이 exit=1로 죽는다.
|
|
26
|
+
4. provider raw stdout/event가 ThemeRenderer와 NlpRenderer를 우회한다.
|
|
27
|
+
5. slash command가 CommandBus와 session state에 연결되지 않고 one-shot local print로 남는다.
|
|
28
|
+
6. runtime preset을 줄여도 Kimi isolated HOME 또는 ~/.kimi/mcp.json 전체가 다시 로딩된다.
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
해결책은 CLI를 다음 구조로 재설계하는 것이다.
|
|
32
|
+
|
|
33
|
+
```txt
|
|
34
|
+
User Input / Slash Command
|
|
35
|
+
↓
|
|
36
|
+
CommandBus
|
|
37
|
+
↓
|
|
38
|
+
IntentClassifier
|
|
39
|
+
↓
|
|
40
|
+
CapabilitySelector
|
|
41
|
+
↓
|
|
42
|
+
RuntimeSidecar Builder
|
|
43
|
+
↓ ↓
|
|
44
|
+
NLP Prompt Compiler Filtered MCP Config
|
|
45
|
+
↓ ↓
|
|
46
|
+
ProviderAdapter Provider Runtime
|
|
47
|
+
↓
|
|
48
|
+
ProviderEventNormalizer
|
|
49
|
+
↓
|
|
50
|
+
OmkEventBus
|
|
51
|
+
↓
|
|
52
|
+
OutputRouter
|
|
53
|
+
↓
|
|
54
|
+
ThemeRenderer / NlpRenderer / JsonRenderer
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
핵심 원칙은 다음과 같다.
|
|
58
|
+
|
|
59
|
+
```txt
|
|
60
|
+
available ≠ required
|
|
61
|
+
inventory ≠ activation
|
|
62
|
+
prompt ≠ sidecar
|
|
63
|
+
provider stdout ≠ user output
|
|
64
|
+
slash command ≠ plain text print
|
|
65
|
+
optional failure ≠ fatal error
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 1. 현재 증상 정리
|
|
71
|
+
|
|
72
|
+
### 1.1 관찰된 사용자 입력
|
|
73
|
+
|
|
74
|
+
사용자는 interactive shell에서 다음을 입력했다.
|
|
75
|
+
|
|
76
|
+
```txt
|
|
77
|
+
/model
|
|
78
|
+
현재 상태는 어때
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`/model`은 다음처럼 단순 텍스트를 출력했다.
|
|
82
|
+
|
|
83
|
+
```txt
|
|
84
|
+
Current model: kimi-code default
|
|
85
|
+
Usage: /model codex/codex-cli
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
그리고 `현재 상태는 어때`라는 9자 요청에 대해 OMK는 아래 상태를 구성했다.
|
|
89
|
+
|
|
90
|
+
```txt
|
|
91
|
+
Selected provider: kimi
|
|
92
|
+
Selected runtime: kimi-print
|
|
93
|
+
Selected model: kimi-code default
|
|
94
|
+
Turn risk: read
|
|
95
|
+
Sandbox: read-only
|
|
96
|
+
MCP: enabled (21); live-required=false
|
|
97
|
+
Skills: enabled (67)
|
|
98
|
+
Tools: disabled; tool-calling-required=false
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
하지만 이후 prompt에는 다음 directive가 들어갔다.
|
|
102
|
+
|
|
103
|
+
```txt
|
|
104
|
+
Routing directives (MANDATORY — activate these skills/MCP/tools explicitly):
|
|
105
|
+
- Skills (MUST use): 67개 전부
|
|
106
|
+
- MCP servers (MUST activate): 21개 전부
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
여기서 구조적 모순이 발생한다.
|
|
110
|
+
|
|
111
|
+
```txt
|
|
112
|
+
live-required=false
|
|
113
|
+
requiresMcp=false
|
|
114
|
+
requiresToolCalling=false
|
|
115
|
+
|
|
116
|
+
하지만
|
|
117
|
+
|
|
118
|
+
MCP servers MUST activate: all 21
|
|
119
|
+
Skills MUST use: all 67
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 1.2 실제 실패
|
|
123
|
+
|
|
124
|
+
MCP loading 결과는 다음과 같았다.
|
|
125
|
+
|
|
126
|
+
```txt
|
|
127
|
+
connected=20
|
|
128
|
+
total=21
|
|
129
|
+
omk-web-bridge status=failed
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
그러나 `omk-web-bridge`가 현재 status query에 required capability가 아님에도 전체 turn은 실패했다.
|
|
133
|
+
|
|
134
|
+
```txt
|
|
135
|
+
Unknown error: Failed to connect MCP servers: {'omk-web-bridge': McpError('Connection closed')}
|
|
136
|
+
exit=1
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 1.3 핵심 판정
|
|
140
|
+
|
|
141
|
+
이건 Kimi 자체의 추론 실패가 아니라, OMK runtime envelope 설계 문제다.
|
|
142
|
+
|
|
143
|
+
```txt
|
|
144
|
+
P0 원인:
|
|
145
|
+
- Capability inventory와 required activation이 섞임
|
|
146
|
+
- prompt envelope가 provider input으로 누수됨
|
|
147
|
+
- provider raw event가 renderer를 우회함
|
|
148
|
+
- optional failure가 hard failure로 승격됨
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 2. 목표 아키텍처
|
|
154
|
+
|
|
155
|
+
### 2.1 High-Level Architecture
|
|
156
|
+
|
|
157
|
+
```txt
|
|
158
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
159
|
+
│ CLI Entrypoint │
|
|
160
|
+
│ omk / omk chat / omk run │
|
|
161
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
162
|
+
│
|
|
163
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
164
|
+
│ Input Layer │
|
|
165
|
+
│ argv / stdin / REPL line / slash command / file / goal prompt │
|
|
166
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
167
|
+
│
|
|
168
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
169
|
+
│ CommandBus │
|
|
170
|
+
│ normal command, slash command, agent turn을 하나의 command로 │
|
|
171
|
+
│ 정규화한다. │
|
|
172
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
173
|
+
│
|
|
174
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
175
|
+
│ Intent + Risk Classifier │
|
|
176
|
+
│ status / resume / memory / repo_read / code_edit / web │
|
|
177
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
178
|
+
│
|
|
179
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
180
|
+
│ Capability Selector │
|
|
181
|
+
│ available inventory에서 required/optional/disabled만 선별 │
|
|
182
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
183
|
+
│
|
|
184
|
+
┌─────────────────┴─────────────────┐
|
|
185
|
+
│ │
|
|
186
|
+
┌────────────▼────────────┐ ┌─────────────▼─────────────┐
|
|
187
|
+
│ RuntimeSidecar Builder │ │ Debloat-to-NLP Compiler │
|
|
188
|
+
│ machine execution plan │ │ model-facing prompt only │
|
|
189
|
+
└────────────┬────────────┘ └─────────────┬─────────────┘
|
|
190
|
+
│ │
|
|
191
|
+
┌────────────▼────────────┐ ┌─────────────▼─────────────┐
|
|
192
|
+
│ Filtered MCP Config │ │ Provider Prompt │
|
|
193
|
+
│ per-turn mcp.json │ │ short, natural instruction│
|
|
194
|
+
└────────────┬────────────┘ └─────────────┬─────────────┘
|
|
195
|
+
│ │
|
|
196
|
+
└─────────────────┬─────────────────┘
|
|
197
|
+
│
|
|
198
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
199
|
+
│ ProviderAdapter │
|
|
200
|
+
│ Kimi / Codex / Claude / DeepSeek / local model adapter │
|
|
201
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
202
|
+
│
|
|
203
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
204
|
+
│ ProviderEventNormalizer │
|
|
205
|
+
│ raw TurnBegin/StatusUpdate/MCP snapshots → OMK UI events │
|
|
206
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
207
|
+
│
|
|
208
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
209
|
+
│ OmkEventBus │
|
|
210
|
+
│ progress / warning / result / error / trace / memory events │
|
|
211
|
+
└──────────────────────────────┬───────────────────────────────┘
|
|
212
|
+
│
|
|
213
|
+
┌──────────────────────────────▼───────────────────────────────┐
|
|
214
|
+
│ OutputRouter │
|
|
215
|
+
│ stdout/stderr/file 분리 + renderer 강제 │
|
|
216
|
+
└──────────────┬────────────────┬────────────────┬─────────────┘
|
|
217
|
+
│ │ │
|
|
218
|
+
┌──────────────▼─────┐ ┌────────▼────────┐ ┌─────▼─────────────┐
|
|
219
|
+
│ ThemeRenderer │ │ NlpRenderer │ │ Json/JsonlRenderer│
|
|
220
|
+
│ terminal UI │ │ human report │ │ machine output │
|
|
221
|
+
└────────────────────┘ └─────────────────┘ └───────────────────┘
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 2.2 Control Plane vs Data Plane
|
|
225
|
+
|
|
226
|
+
OMK v2에서 가장 중요한 분리는 다음이다.
|
|
227
|
+
|
|
228
|
+
| Layer | 내용 | 모델 prompt에 들어가는가? | runtime sidecar에 들어가는가? |
|
|
229
|
+
|---|---|---:|---:|
|
|
230
|
+
| User request | 사용자가 입력한 실제 요청 | Yes | Yes |
|
|
231
|
+
| Intent | status/code_edit/web 등 | Limited | Yes |
|
|
232
|
+
| Required MCP | 없으면 작업 불가능한 capability | Limited | Yes |
|
|
233
|
+
| Optional MCP | 있으면 도움 되는 capability | Limited | Yes |
|
|
234
|
+
| Available MCP inventory | 현재 설치된 전체 MCP 목록 | No | Yes 또는 hidden |
|
|
235
|
+
| Skill inventory | 전체 skill 목록 | No | Yes 또는 hidden |
|
|
236
|
+
| Provider env | HOME, mcp config, fallback provider | No | Yes |
|
|
237
|
+
| Telemetry | TurnBegin, StatusUpdate raw dump | No | Event stream only |
|
|
238
|
+
| Theme/NLP 설정 | 출력 렌더링 정책 | No | Yes |
|
|
239
|
+
|
|
240
|
+
정책:
|
|
241
|
+
|
|
242
|
+
```txt
|
|
243
|
+
모델에게는 “지금 무엇을 해야 하는지”만 말한다.
|
|
244
|
+
런타임에는 “어떤 capability를 어떻게 붙일지”를 sidecar로 넘긴다.
|
|
245
|
+
전체 inventory는 모델 prompt에 절대 직접 넣지 않는다.
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 3. 핵심 Invariants
|
|
251
|
+
|
|
252
|
+
다음 invariant는 테스트로 강제해야 한다.
|
|
253
|
+
|
|
254
|
+
```txt
|
|
255
|
+
I-001. availableMcp는 prompt의 MUST activate로 변환되면 안 된다.
|
|
256
|
+
I-002. availableSkills는 prompt의 MUST use로 변환되면 안 된다.
|
|
257
|
+
I-003. requiredMcp만 hard failure 조건이 될 수 있다.
|
|
258
|
+
I-004. optionalMcp failure는 warning이어야 한다.
|
|
259
|
+
I-005. provider raw TurnBegin/StatusUpdate는 user-facing stdout에 출력되면 안 된다.
|
|
260
|
+
I-006. status intent는 requiredMcp=[]가 기본값이어야 한다.
|
|
261
|
+
I-007. status intent는 MCP optional 후보를 최대 2~3개로 제한한다.
|
|
262
|
+
I-008. slash command도 CommandBus와 OutputRouter를 반드시 탄다.
|
|
263
|
+
I-009. theme 출력은 모든 human-facing output에 적용되어야 한다.
|
|
264
|
+
I-010. machine output JSON은 stdout, progress/warning은 stderr에만 쓴다.
|
|
265
|
+
I-011. `kimi-print`는 debug raw mode에서만 허용한다.
|
|
266
|
+
I-012. prompt envelope schema는 model prompt가 아니라 runtime sidecar로 취급한다.
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## 4. Package / Directory Structure
|
|
272
|
+
|
|
273
|
+
추천 구조는 다음과 같다.
|
|
274
|
+
|
|
275
|
+
```txt
|
|
276
|
+
packages/
|
|
277
|
+
cli/
|
|
278
|
+
src/
|
|
279
|
+
main.ts
|
|
280
|
+
bootstrap/
|
|
281
|
+
detect-terminal.ts
|
|
282
|
+
load-config.ts
|
|
283
|
+
resolve-theme.ts
|
|
284
|
+
resolve-runtime.ts
|
|
285
|
+
command-bus/
|
|
286
|
+
command-bus.ts
|
|
287
|
+
command-result.ts
|
|
288
|
+
command-context.ts
|
|
289
|
+
handlers/
|
|
290
|
+
chat-command.ts
|
|
291
|
+
run-command.ts
|
|
292
|
+
status-command.ts
|
|
293
|
+
model-command.ts
|
|
294
|
+
memory-command.ts
|
|
295
|
+
theme-command.ts
|
|
296
|
+
doctor-command.ts
|
|
297
|
+
repl/
|
|
298
|
+
repl-loop.ts
|
|
299
|
+
slash-command-parser.ts
|
|
300
|
+
interactive-state.ts
|
|
301
|
+
input/
|
|
302
|
+
argv-parser.ts
|
|
303
|
+
stdin-reader.ts
|
|
304
|
+
goal-file-reader.ts
|
|
305
|
+
command-envelope.ts
|
|
306
|
+
intent/
|
|
307
|
+
classify-intent.ts
|
|
308
|
+
classify-risk.ts
|
|
309
|
+
intent-types.ts
|
|
310
|
+
capability/
|
|
311
|
+
capability-inventory.ts
|
|
312
|
+
capability-selector.ts
|
|
313
|
+
capability-plan.ts
|
|
314
|
+
failure-policy.ts
|
|
315
|
+
mcp-config-filter.ts
|
|
316
|
+
prompt/
|
|
317
|
+
prompt-envelope.ts
|
|
318
|
+
debloat-to-nlp.ts
|
|
319
|
+
prompt-budget.ts
|
|
320
|
+
prompt-validator.ts
|
|
321
|
+
runtime/
|
|
322
|
+
runtime-sidecar.ts
|
|
323
|
+
runtime-orchestrator.ts
|
|
324
|
+
provider-router.ts
|
|
325
|
+
providers/
|
|
326
|
+
provider-adapter.ts
|
|
327
|
+
kimi/
|
|
328
|
+
kimi-adapter.ts
|
|
329
|
+
kimi-mcp-config.ts
|
|
330
|
+
kimi-event-parser.ts
|
|
331
|
+
kimi-runtime-selector.ts
|
|
332
|
+
codex/
|
|
333
|
+
codex-adapter.ts
|
|
334
|
+
claude/
|
|
335
|
+
claude-adapter.ts
|
|
336
|
+
events/
|
|
337
|
+
omk-event.ts
|
|
338
|
+
event-bus.ts
|
|
339
|
+
provider-event-normalizer.ts
|
|
340
|
+
output/
|
|
341
|
+
output-router.ts
|
|
342
|
+
output-profile.ts
|
|
343
|
+
theme-renderer.ts
|
|
344
|
+
nlp-renderer.ts
|
|
345
|
+
json-renderer.ts
|
|
346
|
+
error-renderer.ts
|
|
347
|
+
theme/
|
|
348
|
+
theme-definition.ts
|
|
349
|
+
theme-registry.ts
|
|
350
|
+
theme-writer.ts
|
|
351
|
+
builtins/
|
|
352
|
+
omk.ts
|
|
353
|
+
mono.ts
|
|
354
|
+
minimal.ts
|
|
355
|
+
memory/
|
|
356
|
+
project-memory.ts
|
|
357
|
+
session-ledger.ts
|
|
358
|
+
memory-capsule.ts
|
|
359
|
+
resume-policy.ts
|
|
360
|
+
tests/
|
|
361
|
+
regression-status-no-all-mcp.test.ts
|
|
362
|
+
regression-optional-mcp-warning.test.ts
|
|
363
|
+
regression-no-raw-provider-output.test.ts
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 5. Core Data Models
|
|
369
|
+
|
|
370
|
+
### 5.1 Command Envelope
|
|
371
|
+
|
|
372
|
+
`CommandEnvelope`는 CLI 입력을 runtime이 이해할 수 있는 구조로 정규화한다. 단, 이것은 그대로 provider prompt가 되면 안 된다.
|
|
373
|
+
|
|
374
|
+
```ts
|
|
375
|
+
export type CommandKind =
|
|
376
|
+
| 'chat'
|
|
377
|
+
| 'run'
|
|
378
|
+
| 'status'
|
|
379
|
+
| 'model'
|
|
380
|
+
| 'memory'
|
|
381
|
+
| 'theme'
|
|
382
|
+
| 'doctor';
|
|
383
|
+
|
|
384
|
+
export type InputSource =
|
|
385
|
+
| 'argv'
|
|
386
|
+
| 'stdin'
|
|
387
|
+
| 'file'
|
|
388
|
+
| 'repl'
|
|
389
|
+
| 'slash-command';
|
|
390
|
+
|
|
391
|
+
export interface CommandEnvelope {
|
|
392
|
+
readonly kind: CommandKind;
|
|
393
|
+
readonly source: InputSource;
|
|
394
|
+
readonly rawText: string;
|
|
395
|
+
readonly decodedUserRequest: string;
|
|
396
|
+
readonly cwd: string;
|
|
397
|
+
readonly sessionId: string;
|
|
398
|
+
readonly projectId?: string;
|
|
399
|
+
readonly providerPolicy: 'auto' | 'kimi' | 'codex' | 'claude' | 'deepseek';
|
|
400
|
+
readonly outputProfile: OutputProfile;
|
|
401
|
+
readonly debug: {
|
|
402
|
+
readonly rawProvider: boolean;
|
|
403
|
+
readonly explainRouting: boolean;
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### 5.2 Intent
|
|
409
|
+
|
|
410
|
+
```ts
|
|
411
|
+
export type RequestIntent =
|
|
412
|
+
| 'status'
|
|
413
|
+
| 'resume'
|
|
414
|
+
| 'memory_query'
|
|
415
|
+
| 'repo_read'
|
|
416
|
+
| 'code_edit'
|
|
417
|
+
| 'debug_error'
|
|
418
|
+
| 'web_research'
|
|
419
|
+
| 'plan'
|
|
420
|
+
| 'chat'
|
|
421
|
+
| 'unknown';
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### 5.3 Capability Inventory
|
|
425
|
+
|
|
426
|
+
Inventory는 “설치/발견된 목록”일 뿐이다.
|
|
427
|
+
|
|
428
|
+
```ts
|
|
429
|
+
export interface CapabilityInventory {
|
|
430
|
+
readonly mcp: readonly McpServerDescriptor[];
|
|
431
|
+
readonly skills: readonly SkillDescriptor[];
|
|
432
|
+
readonly hooks: readonly HookDescriptor[];
|
|
433
|
+
readonly toolsEnabled: boolean;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export interface McpServerDescriptor {
|
|
437
|
+
readonly name: string;
|
|
438
|
+
readonly scope: 'project' | 'user' | 'global' | 'runtime';
|
|
439
|
+
readonly status: 'unknown' | 'available' | 'connected' | 'failed' | 'disabled';
|
|
440
|
+
readonly tools?: readonly string[];
|
|
441
|
+
readonly lastError?: string;
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### 5.4 Capability Plan
|
|
446
|
+
|
|
447
|
+
`CapabilityPlan`은 현재 turn에서 실제로 사용할 capability만 선별한다.
|
|
448
|
+
|
|
449
|
+
```ts
|
|
450
|
+
export interface CapabilityPlan {
|
|
451
|
+
readonly availableMcp: readonly string[];
|
|
452
|
+
readonly requiredMcp: readonly string[];
|
|
453
|
+
readonly optionalMcp: readonly string[];
|
|
454
|
+
readonly disabledMcp: readonly string[];
|
|
455
|
+
|
|
456
|
+
readonly availableSkills: readonly string[];
|
|
457
|
+
readonly selectedSkills: readonly string[];
|
|
458
|
+
|
|
459
|
+
readonly toolCallingRequired: boolean;
|
|
460
|
+
readonly liveMcpRequired: boolean;
|
|
461
|
+
readonly failurePolicy: 'required-only' | 'strict';
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
정책:
|
|
466
|
+
|
|
467
|
+
```txt
|
|
468
|
+
availableMcp는 prompt에 출력하지 않는다.
|
|
469
|
+
requiredMcp와 optionalMcp만 prompt에 제한적으로 출력한다.
|
|
470
|
+
disabledMcp는 warning으로만 출력한다.
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### 5.5 Runtime Sidecar
|
|
474
|
+
|
|
475
|
+
Provider 실행기는 prompt 문자열이 아니라 sidecar를 보고 runtime을 구성한다.
|
|
476
|
+
|
|
477
|
+
```ts
|
|
478
|
+
export interface RuntimeSidecar {
|
|
479
|
+
readonly provider: 'kimi' | 'codex' | 'claude' | 'deepseek' | 'local';
|
|
480
|
+
readonly model: string;
|
|
481
|
+
readonly runtime: 'kimi-event' | 'kimi-wire' | 'kimi-print' | 'codex' | 'claude';
|
|
482
|
+
|
|
483
|
+
readonly intent: RequestIntent;
|
|
484
|
+
readonly risk: 'read' | 'write' | 'network' | 'dangerous';
|
|
485
|
+
readonly sandbox: 'read-only' | 'workspace-write' | 'full-access';
|
|
486
|
+
|
|
487
|
+
readonly requiredMcp: readonly string[];
|
|
488
|
+
readonly optionalMcp: readonly string[];
|
|
489
|
+
readonly disabledMcp: readonly string[];
|
|
490
|
+
readonly selectedSkills: readonly string[];
|
|
491
|
+
|
|
492
|
+
readonly failurePolicy: 'required-only' | 'strict';
|
|
493
|
+
readonly outputProfile: OutputProfile;
|
|
494
|
+
readonly projectId?: string;
|
|
495
|
+
readonly sessionId: string;
|
|
496
|
+
}
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### 5.6 Output Profile
|
|
500
|
+
|
|
501
|
+
```ts
|
|
502
|
+
export type OutputFormat = 'theme' | 'nlp' | 'json' | 'jsonl' | 'markdown' | 'silent';
|
|
503
|
+
|
|
504
|
+
export interface OutputProfile {
|
|
505
|
+
readonly format: OutputFormat;
|
|
506
|
+
readonly progress: 'none' | 'live' | 'compact' | 'jsonl';
|
|
507
|
+
readonly color: 'auto' | 'always' | 'never';
|
|
508
|
+
readonly rawProvider: boolean;
|
|
509
|
+
readonly explainRouting: boolean;
|
|
510
|
+
readonly stdoutMode: 'human' | 'machine';
|
|
511
|
+
}
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## 6. Intent Classification
|
|
517
|
+
|
|
518
|
+
### 6.1 Rule-Based MVP
|
|
519
|
+
|
|
520
|
+
처음부터 LLM classifier를 쓰지 않는다. CLI control-plane은 deterministic해야 한다.
|
|
521
|
+
|
|
522
|
+
```ts
|
|
523
|
+
export function classifyIntent(userRequest: string): RequestIntent {
|
|
524
|
+
const text = userRequest.trim().toLowerCase();
|
|
525
|
+
|
|
526
|
+
if (/현재 상태|상태|status|progress|어때|어디까지|진행|뭐 했/.test(text)) {
|
|
527
|
+
return 'status';
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
if (/이어|resume|계속|이전|마지막|left off|where we left/.test(text)) {
|
|
531
|
+
return 'resume';
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
if (/기억|memory|remember|잊어|forget|전에/.test(text)) {
|
|
535
|
+
return 'memory_query';
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
if (/파일|읽어|구조|repo|repository|코드베이스|찾아/.test(text)) {
|
|
539
|
+
return 'repo_read';
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
if (/수정|고쳐|구현|패치|edit|fix|implement|refactor/.test(text)) {
|
|
543
|
+
return 'code_edit';
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
if (/검색|웹|최신|news|github|x에서|찾아봐/.test(text)) {
|
|
547
|
+
return 'web_research';
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
if (/계획|설계|plan|architecture|알고리즘/.test(text)) {
|
|
551
|
+
return 'plan';
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
return 'chat';
|
|
555
|
+
}
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
### 6.2 Risk Classification
|
|
559
|
+
|
|
560
|
+
```ts
|
|
561
|
+
export function classifyRisk(intent: RequestIntent, userRequest: string) {
|
|
562
|
+
if (intent === 'code_edit') return 'write';
|
|
563
|
+
if (intent === 'web_research') return 'network';
|
|
564
|
+
if (/삭제|delete|rm -rf|drop table|credential|token/.test(userRequest)) {
|
|
565
|
+
return 'dangerous';
|
|
566
|
+
}
|
|
567
|
+
return 'read';
|
|
568
|
+
}
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
## 7. Capability Selection Algorithm
|
|
574
|
+
|
|
575
|
+
### 7.1 기본 정책
|
|
576
|
+
|
|
577
|
+
```txt
|
|
578
|
+
status:
|
|
579
|
+
requiredMcp: []
|
|
580
|
+
optionalMcp: [omk-project, memory]
|
|
581
|
+
selectedSkills: [omk-context-broker, omk-project-rules]
|
|
582
|
+
|
|
583
|
+
resume:
|
|
584
|
+
requiredMcp: []
|
|
585
|
+
optionalMcp: [omk-project, memory, sqlite]
|
|
586
|
+
selectedSkills: [agentmemory, omk-context-broker, omk-project-rules]
|
|
587
|
+
|
|
588
|
+
repo_read:
|
|
589
|
+
requiredMcp: [filesystem-readonly] if available
|
|
590
|
+
optionalMcp: [omk-project, memory]
|
|
591
|
+
|
|
592
|
+
code_edit:
|
|
593
|
+
requiredMcp: [filesystem]
|
|
594
|
+
optionalMcp: [omk-project, memory, sqlite]
|
|
595
|
+
selectedSkills: [omk-flow-feature-dev, omk-typescript-strict, omk-quality-gate]
|
|
596
|
+
|
|
597
|
+
web_research:
|
|
598
|
+
requiredMcp: [fetch] if available and task explicitly requires network
|
|
599
|
+
optionalMcp: [web-reader, playwright]
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
### 7.2 Implementation
|
|
603
|
+
|
|
604
|
+
```ts
|
|
605
|
+
export function selectCapabilities(input: {
|
|
606
|
+
readonly intent: RequestIntent;
|
|
607
|
+
readonly inventory: CapabilityInventory;
|
|
608
|
+
readonly failedMcp: readonly string[];
|
|
609
|
+
}): CapabilityPlan {
|
|
610
|
+
const availableMcp = input.inventory.mcp.map(server => server.name);
|
|
611
|
+
const availableSkills = input.inventory.skills.map(skill => skill.name);
|
|
612
|
+
|
|
613
|
+
const hasMcp = (name: string) => availableMcp.includes(name);
|
|
614
|
+
const hasSkill = (name: string) => availableSkills.includes(name);
|
|
615
|
+
const notFailed = (name: string) => !input.failedMcp.includes(name);
|
|
616
|
+
|
|
617
|
+
const optionalMcp = (...names: string[]) =>
|
|
618
|
+
names.filter(name => hasMcp(name) && notFailed(name));
|
|
619
|
+
|
|
620
|
+
const selectedSkills = (...names: string[]) =>
|
|
621
|
+
names.filter(name => hasSkill(name));
|
|
622
|
+
|
|
623
|
+
switch (input.intent) {
|
|
624
|
+
case 'status':
|
|
625
|
+
return {
|
|
626
|
+
availableMcp,
|
|
627
|
+
requiredMcp: [],
|
|
628
|
+
optionalMcp: optionalMcp('omk-project', 'memory'),
|
|
629
|
+
disabledMcp: input.failedMcp,
|
|
630
|
+
availableSkills,
|
|
631
|
+
selectedSkills: selectedSkills('omk-context-broker', 'omk-project-rules'),
|
|
632
|
+
toolCallingRequired: false,
|
|
633
|
+
liveMcpRequired: false,
|
|
634
|
+
failurePolicy: 'required-only',
|
|
635
|
+
};
|
|
636
|
+
|
|
637
|
+
case 'repo_read':
|
|
638
|
+
return {
|
|
639
|
+
availableMcp,
|
|
640
|
+
requiredMcp: hasMcp('filesystem-readonly') ? ['filesystem-readonly'] : [],
|
|
641
|
+
optionalMcp: optionalMcp('omk-project', 'memory'),
|
|
642
|
+
disabledMcp: input.failedMcp,
|
|
643
|
+
availableSkills,
|
|
644
|
+
selectedSkills: selectedSkills('omk-repo-explorer', 'omk-project-rules'),
|
|
645
|
+
toolCallingRequired: hasMcp('filesystem-readonly'),
|
|
646
|
+
liveMcpRequired: hasMcp('filesystem-readonly'),
|
|
647
|
+
failurePolicy: 'required-only',
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
case 'code_edit':
|
|
651
|
+
return {
|
|
652
|
+
availableMcp,
|
|
653
|
+
requiredMcp: hasMcp('filesystem') ? ['filesystem'] : [],
|
|
654
|
+
optionalMcp: optionalMcp('omk-project', 'memory', 'sqlite'),
|
|
655
|
+
disabledMcp: input.failedMcp,
|
|
656
|
+
availableSkills,
|
|
657
|
+
selectedSkills: selectedSkills(
|
|
658
|
+
'omk-flow-feature-dev',
|
|
659
|
+
'omk-typescript-strict',
|
|
660
|
+
'omk-quality-gate',
|
|
661
|
+
'omk-test-debug-loop',
|
|
662
|
+
),
|
|
663
|
+
toolCallingRequired: true,
|
|
664
|
+
liveMcpRequired: true,
|
|
665
|
+
failurePolicy: 'required-only',
|
|
666
|
+
};
|
|
667
|
+
|
|
668
|
+
case 'web_research':
|
|
669
|
+
return {
|
|
670
|
+
availableMcp,
|
|
671
|
+
requiredMcp: hasMcp('fetch') ? ['fetch'] : [],
|
|
672
|
+
optionalMcp: optionalMcp('web-reader', 'playwright', 'omk-project'),
|
|
673
|
+
disabledMcp: input.failedMcp,
|
|
674
|
+
availableSkills,
|
|
675
|
+
selectedSkills: selectedSkills('omk-research-verify'),
|
|
676
|
+
toolCallingRequired: true,
|
|
677
|
+
liveMcpRequired: true,
|
|
678
|
+
failurePolicy: 'required-only',
|
|
679
|
+
};
|
|
680
|
+
|
|
681
|
+
default:
|
|
682
|
+
return {
|
|
683
|
+
availableMcp,
|
|
684
|
+
requiredMcp: [],
|
|
685
|
+
optionalMcp: optionalMcp('omk-project', 'memory'),
|
|
686
|
+
disabledMcp: input.failedMcp,
|
|
687
|
+
availableSkills,
|
|
688
|
+
selectedSkills: selectedSkills('omk-context-broker'),
|
|
689
|
+
toolCallingRequired: false,
|
|
690
|
+
liveMcpRequired: false,
|
|
691
|
+
failurePolicy: 'required-only',
|
|
692
|
+
};
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
## 8. Failure Policy
|
|
700
|
+
|
|
701
|
+
### 8.1 잘못된 현재 정책
|
|
702
|
+
|
|
703
|
+
```txt
|
|
704
|
+
mcpFailures.length > 0 → exit=1
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
이 정책은 status/query/chat에서 치명적이다. optional MCP failure가 전체 turn failure로 승격된다.
|
|
708
|
+
|
|
709
|
+
### 8.2 올바른 정책
|
|
710
|
+
|
|
711
|
+
```ts
|
|
712
|
+
export interface FailurePolicyResult {
|
|
713
|
+
readonly blockers: readonly string[];
|
|
714
|
+
readonly warnings: readonly string[];
|
|
715
|
+
readonly exitCode: 0 | 1;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
export function applyMcpFailurePolicy(input: {
|
|
719
|
+
readonly requiredMcp: readonly string[];
|
|
720
|
+
readonly failedMcp: readonly string[];
|
|
721
|
+
readonly failurePolicy: 'required-only' | 'strict';
|
|
722
|
+
}): FailurePolicyResult {
|
|
723
|
+
if (input.failurePolicy === 'strict') {
|
|
724
|
+
return {
|
|
725
|
+
blockers: input.failedMcp,
|
|
726
|
+
warnings: [],
|
|
727
|
+
exitCode: input.failedMcp.length > 0 ? 1 : 0,
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
const blockers = input.failedMcp.filter(name => input.requiredMcp.includes(name));
|
|
732
|
+
const warnings = input.failedMcp.filter(name => !input.requiredMcp.includes(name));
|
|
733
|
+
|
|
734
|
+
return {
|
|
735
|
+
blockers,
|
|
736
|
+
warnings,
|
|
737
|
+
exitCode: blockers.length > 0 ? 1 : 0,
|
|
738
|
+
};
|
|
739
|
+
}
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
### 8.3 status query의 기대 결과
|
|
743
|
+
|
|
744
|
+
입력:
|
|
745
|
+
|
|
746
|
+
```txt
|
|
747
|
+
intent=status
|
|
748
|
+
requiredMcp=[]
|
|
749
|
+
optionalMcp=[omk-project, memory]
|
|
750
|
+
failedMcp=[omk-web-bridge]
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
결과:
|
|
754
|
+
|
|
755
|
+
```txt
|
|
756
|
+
blockers=[]
|
|
757
|
+
warnings=[omk-web-bridge]
|
|
758
|
+
exitCode=0
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
---
|
|
762
|
+
|
|
763
|
+
## 9. Debloat-to-NLP Compiler
|
|
764
|
+
|
|
765
|
+
### 9.1 목적
|
|
766
|
+
|
|
767
|
+
비대한 OMK prompt envelope를 provider model이 읽기 위한 짧은 자연어 prompt와 runtime sidecar로 분리한다.
|
|
768
|
+
|
|
769
|
+
```txt
|
|
770
|
+
Raw OMK Envelope
|
|
771
|
+
├─ modelPrompt: short natural language instruction
|
|
772
|
+
└─ runtimeSidecar: machine execution metadata
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
### 9.2 Compiler Input / Output
|
|
776
|
+
|
|
777
|
+
```ts
|
|
778
|
+
export interface DebloatInput {
|
|
779
|
+
readonly envelope: CommandEnvelope;
|
|
780
|
+
readonly intent: RequestIntent;
|
|
781
|
+
readonly risk: 'read' | 'write' | 'network' | 'dangerous';
|
|
782
|
+
readonly capabilityPlan: CapabilityPlan;
|
|
783
|
+
readonly provider: string;
|
|
784
|
+
readonly model: string;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
export interface DebloatOutput {
|
|
788
|
+
readonly modelPrompt: string;
|
|
789
|
+
readonly runtimeSidecar: RuntimeSidecar;
|
|
790
|
+
readonly diagnostics: DebloatDiagnostics;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
export interface DebloatDiagnostics {
|
|
794
|
+
readonly originalChars: number;
|
|
795
|
+
readonly finalChars: number;
|
|
796
|
+
readonly compressionRatio: number;
|
|
797
|
+
readonly removedSections: readonly string[];
|
|
798
|
+
readonly warnings: readonly string[];
|
|
799
|
+
}
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
### 9.3 Prompt Renderer
|
|
803
|
+
|
|
804
|
+
```ts
|
|
805
|
+
export function renderModelPrompt(input: {
|
|
806
|
+
readonly userRequest: string;
|
|
807
|
+
readonly intent: RequestIntent;
|
|
808
|
+
readonly provider: string;
|
|
809
|
+
readonly model: string;
|
|
810
|
+
readonly risk: string;
|
|
811
|
+
readonly sandbox: string;
|
|
812
|
+
readonly plan: CapabilityPlan;
|
|
813
|
+
readonly warnings: readonly string[];
|
|
814
|
+
}): string {
|
|
815
|
+
const lines: string[] = [];
|
|
816
|
+
|
|
817
|
+
lines.push('You are the OMK root coordinator.');
|
|
818
|
+
lines.push('');
|
|
819
|
+
lines.push(`User request: ${JSON.stringify(input.userRequest)}`);
|
|
820
|
+
lines.push('');
|
|
821
|
+
lines.push(`Intent: ${input.intent}`);
|
|
822
|
+
lines.push(`Risk: ${input.risk}`);
|
|
823
|
+
lines.push(`Sandbox: ${input.sandbox}`);
|
|
824
|
+
lines.push('');
|
|
825
|
+
|
|
826
|
+
if (input.plan.requiredMcp.length > 0) {
|
|
827
|
+
lines.push(`Required capabilities: ${input.plan.requiredMcp.join(', ')}`);
|
|
828
|
+
} else {
|
|
829
|
+
lines.push('Required capabilities: none');
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
if (input.plan.optionalMcp.length > 0) {
|
|
833
|
+
lines.push(`Optional capabilities: ${input.plan.optionalMcp.join(', ')}`);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
if (input.plan.selectedSkills.length > 0) {
|
|
837
|
+
lines.push(`Selected skills: ${input.plan.selectedSkills.join(', ')}`);
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
if (input.warnings.length > 0) {
|
|
841
|
+
lines.push('');
|
|
842
|
+
lines.push(`Warnings: ${input.warnings.join(', ')} unavailable; continue unless required.`);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
lines.push('');
|
|
846
|
+
lines.push('Instructions:');
|
|
847
|
+
lines.push('- Answer the user request directly.');
|
|
848
|
+
lines.push('- Do not activate unrelated capabilities.');
|
|
849
|
+
lines.push('- Treat optional capability failures as warnings.');
|
|
850
|
+
lines.push('- If project state is unavailable, say so briefly.');
|
|
851
|
+
lines.push('- Keep the answer concise and operational.');
|
|
852
|
+
|
|
853
|
+
return lines.join('\n');
|
|
854
|
+
}
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
### 9.4 Example: 현재 상태는 어때
|
|
858
|
+
|
|
859
|
+
Before:
|
|
860
|
+
|
|
861
|
+
```txt
|
|
862
|
+
- User request: 9 characters
|
|
863
|
+
- Prompt: OMK envelope + 67 skills + 21 MCP + raw TurnBegin + StatusUpdate
|
|
864
|
+
- Runtime: kimi-print
|
|
865
|
+
- Result: omk-web-bridge failure exits turn
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
After:
|
|
869
|
+
|
|
870
|
+
```txt
|
|
871
|
+
You are the OMK root coordinator.
|
|
872
|
+
|
|
873
|
+
User request: "현재 상태는 어때"
|
|
874
|
+
|
|
875
|
+
Intent: status
|
|
876
|
+
Risk: read
|
|
877
|
+
Sandbox: read-only
|
|
878
|
+
|
|
879
|
+
Required capabilities: none
|
|
880
|
+
Optional capabilities: omk-project, memory
|
|
881
|
+
Selected skills: omk-context-broker, omk-project-rules
|
|
882
|
+
|
|
883
|
+
Warnings: omk-web-bridge unavailable; continue unless required.
|
|
884
|
+
|
|
885
|
+
Instructions:
|
|
886
|
+
- Report current OMK project/runtime status concisely.
|
|
887
|
+
- Do not activate unrelated capabilities.
|
|
888
|
+
- Treat optional capability failures as warnings.
|
|
889
|
+
- If no active project state is available, say so briefly.
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
---
|
|
893
|
+
|
|
894
|
+
## 10. Per-Turn MCP Config Filtering
|
|
895
|
+
|
|
896
|
+
### 10.1 문제
|
|
897
|
+
|
|
898
|
+
Preset에서 MCP를 줄여도 provider runtime이 `~/.kimi/mcp.json` 전체를 읽으면 다시 21개가 켜진다.
|
|
899
|
+
|
|
900
|
+
### 10.2 정책
|
|
901
|
+
|
|
902
|
+
매 turn마다 sidecar 기준으로 임시 MCP config를 생성한다.
|
|
903
|
+
|
|
904
|
+
```txt
|
|
905
|
+
Allowed MCP = requiredMcp ∪ optionalMcp - disabledMcp
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
### 10.3 Implementation
|
|
909
|
+
|
|
910
|
+
```ts
|
|
911
|
+
export interface McpConfig {
|
|
912
|
+
readonly mcpServers: Record<string, unknown>;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
export function filterMcpConfigForTurn(input: {
|
|
916
|
+
readonly userMcpConfig: McpConfig;
|
|
917
|
+
readonly projectMcpConfig: McpConfig;
|
|
918
|
+
readonly sidecar: RuntimeSidecar;
|
|
919
|
+
}): McpConfig {
|
|
920
|
+
const allowed = new Set([
|
|
921
|
+
...input.sidecar.requiredMcp,
|
|
922
|
+
...input.sidecar.optionalMcp,
|
|
923
|
+
]);
|
|
924
|
+
|
|
925
|
+
const disabled = new Set(input.sidecar.disabledMcp);
|
|
926
|
+
|
|
927
|
+
const merged = {
|
|
928
|
+
...input.userMcpConfig.mcpServers,
|
|
929
|
+
...input.projectMcpConfig.mcpServers,
|
|
930
|
+
};
|
|
931
|
+
|
|
932
|
+
return {
|
|
933
|
+
mcpServers: Object.fromEntries(
|
|
934
|
+
Object.entries(merged).filter(([name]) => {
|
|
935
|
+
return allowed.has(name) && !disabled.has(name);
|
|
936
|
+
}),
|
|
937
|
+
),
|
|
938
|
+
};
|
|
939
|
+
}
|
|
940
|
+
```
|
|
941
|
+
|
|
942
|
+
### 10.4 status query의 기대 임시 mcp.json
|
|
943
|
+
|
|
944
|
+
```json
|
|
945
|
+
{
|
|
946
|
+
"mcpServers": {
|
|
947
|
+
"omk-project": {},
|
|
948
|
+
"memory": {}
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
혹은 memory가 unavailable이면:
|
|
954
|
+
|
|
955
|
+
```json
|
|
956
|
+
{
|
|
957
|
+
"mcpServers": {
|
|
958
|
+
"omk-project": {}
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
```
|
|
962
|
+
|
|
963
|
+
아예 상태를 local runtime에서 알 수 있다면:
|
|
964
|
+
|
|
965
|
+
```json
|
|
966
|
+
{
|
|
967
|
+
"mcpServers": {}
|
|
968
|
+
}
|
|
969
|
+
```
|
|
970
|
+
|
|
971
|
+
---
|
|
972
|
+
|
|
973
|
+
## 11. Provider Runtime Selection
|
|
974
|
+
|
|
975
|
+
### 11.1 문제
|
|
976
|
+
|
|
977
|
+
현재 관찰 로그에서는 `Selected runtime: kimi-print`로 선택된다. 이 runtime은 provider stdout/raw event를 그대로 print하는 경향이 있으므로 theme/NLP를 우회한다.
|
|
978
|
+
|
|
979
|
+
### 11.2 정책
|
|
980
|
+
|
|
981
|
+
```txt
|
|
982
|
+
kimi-event 또는 kimi-wire:
|
|
983
|
+
default interactive runtime
|
|
984
|
+
|
|
985
|
+
kimi-print:
|
|
986
|
+
--debug-raw 또는 OMK_DEBUG_RAW_PROVIDER=1에서만 허용
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
### 11.3 Implementation
|
|
990
|
+
|
|
991
|
+
```ts
|
|
992
|
+
export function selectProviderRuntime(input: {
|
|
993
|
+
readonly provider: string;
|
|
994
|
+
readonly intent: RequestIntent;
|
|
995
|
+
readonly debugRaw: boolean;
|
|
996
|
+
}): RuntimeSidecar['runtime'] {
|
|
997
|
+
if (input.provider === 'kimi') {
|
|
998
|
+
if (input.debugRaw) return 'kimi-print';
|
|
999
|
+
return 'kimi-event';
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
if (input.provider === 'codex') return 'codex';
|
|
1003
|
+
if (input.provider === 'claude') return 'claude';
|
|
1004
|
+
|
|
1005
|
+
return 'kimi-event';
|
|
1006
|
+
}
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
### 11.4 Regression Rule
|
|
1010
|
+
|
|
1011
|
+
```ts
|
|
1012
|
+
expect(selectProviderRuntime({ provider: 'kimi', intent: 'status', debugRaw: false }))
|
|
1013
|
+
.not.toBe('kimi-print');
|
|
1014
|
+
|
|
1015
|
+
expect(selectProviderRuntime({ provider: 'kimi', intent: 'status', debugRaw: true }))
|
|
1016
|
+
.toBe('kimi-print');
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
---
|
|
1020
|
+
|
|
1021
|
+
## 12. ProviderEventNormalizer
|
|
1022
|
+
|
|
1023
|
+
### 12.1 목적
|
|
1024
|
+
|
|
1025
|
+
Provider raw event를 사용자에게 그대로 보여주지 않는다.
|
|
1026
|
+
|
|
1027
|
+
금지되는 raw output:
|
|
1028
|
+
|
|
1029
|
+
```txt
|
|
1030
|
+
TurnBegin(...)
|
|
1031
|
+
StatusUpdate(...)
|
|
1032
|
+
MCPLoadingBegin()
|
|
1033
|
+
MCPLoadingEnd()
|
|
1034
|
+
MCPStatusSnapshot(...)
|
|
1035
|
+
TextPart(...)
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
이들은 다음 OMK UI event로 정규화되어야 한다.
|
|
1039
|
+
|
|
1040
|
+
```ts
|
|
1041
|
+
export type OmkEvent =
|
|
1042
|
+
| { type: 'turn_started'; nodeId: string; provider: string; model: string }
|
|
1043
|
+
| { type: 'progress'; message: string }
|
|
1044
|
+
| { type: 'mcp_status'; connected: number; total: number; failed: readonly string[] }
|
|
1045
|
+
| { type: 'warning'; message: string; code?: string }
|
|
1046
|
+
| { type: 'result'; content: string }
|
|
1047
|
+
| { type: 'error'; message: string; code: string; fatal: boolean }
|
|
1048
|
+
| { type: 'turn_finished'; exitCode: number; durationMs: number };
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
### 12.2 Normalizer Interface
|
|
1052
|
+
|
|
1053
|
+
```ts
|
|
1054
|
+
export interface ProviderEventNormalizer {
|
|
1055
|
+
normalize(chunk: ProviderRawChunk): readonly OmkEvent[];
|
|
1056
|
+
flush(): readonly OmkEvent[];
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
export interface ProviderRawChunk {
|
|
1060
|
+
readonly stream: 'stdout' | 'stderr';
|
|
1061
|
+
readonly text: string;
|
|
1062
|
+
readonly at: string;
|
|
1063
|
+
}
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
### 12.3 Kimi Normalizer Example
|
|
1067
|
+
|
|
1068
|
+
```ts
|
|
1069
|
+
export class KimiEventNormalizer implements ProviderEventNormalizer {
|
|
1070
|
+
normalize(chunk: ProviderRawChunk): readonly OmkEvent[] {
|
|
1071
|
+
const events: OmkEvent[] = [];
|
|
1072
|
+
|
|
1073
|
+
if (chunk.text.includes('MCPLoadingBegin')) {
|
|
1074
|
+
events.push({ type: 'progress', message: 'Loading selected MCP servers...' });
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
const failure = parseMcpFailure(chunk.text);
|
|
1078
|
+
if (failure) {
|
|
1079
|
+
events.push({
|
|
1080
|
+
type: 'warning',
|
|
1081
|
+
code: 'OPTIONAL_MCP_UNAVAILABLE',
|
|
1082
|
+
message: `Optional MCP unavailable: ${failure.serverName}`,
|
|
1083
|
+
});
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
const status = parseMcpStatusSnapshot(chunk.text);
|
|
1087
|
+
if (status) {
|
|
1088
|
+
events.push({
|
|
1089
|
+
type: 'mcp_status',
|
|
1090
|
+
connected: status.connected,
|
|
1091
|
+
total: status.total,
|
|
1092
|
+
failed: status.failedServers,
|
|
1093
|
+
});
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
return events;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
flush(): readonly OmkEvent[] {
|
|
1100
|
+
return [];
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
---
|
|
1106
|
+
|
|
1107
|
+
## 13. OutputRouter
|
|
1108
|
+
|
|
1109
|
+
### 13.1 stdout/stderr 정책
|
|
1110
|
+
|
|
1111
|
+
```txt
|
|
1112
|
+
stdout:
|
|
1113
|
+
- 최종 답변
|
|
1114
|
+
- JSON/JSONL machine output
|
|
1115
|
+
- markdown/nlp report
|
|
1116
|
+
|
|
1117
|
+
stderr:
|
|
1118
|
+
- progress
|
|
1119
|
+
- warnings
|
|
1120
|
+
- debug routing
|
|
1121
|
+
- MCP loading status
|
|
1122
|
+
- provider diagnostics
|
|
1123
|
+
```
|
|
1124
|
+
|
|
1125
|
+
### 13.2 Interface
|
|
1126
|
+
|
|
1127
|
+
```ts
|
|
1128
|
+
export interface OutputRouter {
|
|
1129
|
+
onEvent(event: OmkEvent): void;
|
|
1130
|
+
complete(result: CommandResult): void;
|
|
1131
|
+
fail(error: OmkError): void;
|
|
1132
|
+
}
|
|
1133
|
+
```
|
|
1134
|
+
|
|
1135
|
+
### 13.3 Implementation Sketch
|
|
1136
|
+
|
|
1137
|
+
```ts
|
|
1138
|
+
export class DefaultOutputRouter implements OutputRouter {
|
|
1139
|
+
constructor(
|
|
1140
|
+
private readonly profile: OutputProfile,
|
|
1141
|
+
private readonly theme: ThemeRenderer,
|
|
1142
|
+
private readonly nlp: NlpRenderer,
|
|
1143
|
+
private readonly json: JsonRenderer,
|
|
1144
|
+
private readonly streams: { stdout: NodeJS.WriteStream; stderr: NodeJS.WriteStream },
|
|
1145
|
+
) {}
|
|
1146
|
+
|
|
1147
|
+
onEvent(event: OmkEvent): void {
|
|
1148
|
+
if (this.profile.rawProvider) {
|
|
1149
|
+
return;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
if (event.type === 'progress') {
|
|
1153
|
+
this.streams.stderr.write(this.theme.renderProgress(event) + '\n');
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
if (event.type === 'warning') {
|
|
1158
|
+
this.streams.stderr.write(this.theme.renderWarning(event) + '\n');
|
|
1159
|
+
return;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
if (event.type === 'error') {
|
|
1163
|
+
this.streams.stderr.write(this.theme.renderError(event) + '\n');
|
|
1164
|
+
return;
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
complete(result: CommandResult): void {
|
|
1169
|
+
if (this.profile.format === 'json') {
|
|
1170
|
+
this.streams.stdout.write(this.json.render(result) + '\n');
|
|
1171
|
+
return;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
if (this.profile.format === 'nlp') {
|
|
1175
|
+
this.streams.stdout.write(this.nlp.render(result) + '\n');
|
|
1176
|
+
return;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
this.streams.stdout.write(this.theme.renderResult(result) + '\n');
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
fail(error: OmkError): void {
|
|
1183
|
+
this.streams.stderr.write(this.theme.renderFatal(error) + '\n');
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
```
|
|
1187
|
+
|
|
1188
|
+
---
|
|
1189
|
+
|
|
1190
|
+
## 14. Theme Architecture
|
|
1191
|
+
|
|
1192
|
+
### 14.1 원칙
|
|
1193
|
+
|
|
1194
|
+
Theme는 색상 함수가 아니라 semantic renderer다.
|
|
1195
|
+
|
|
1196
|
+
나쁜 방식:
|
|
1197
|
+
|
|
1198
|
+
```ts
|
|
1199
|
+
console.log(chalk.green('Done'));
|
|
1200
|
+
```
|
|
1201
|
+
|
|
1202
|
+
좋은 방식:
|
|
1203
|
+
|
|
1204
|
+
```ts
|
|
1205
|
+
writer.success('Done');
|
|
1206
|
+
writer.warning('Optional MCP unavailable: omk-web-bridge');
|
|
1207
|
+
writer.status({ provider, model, runtime });
|
|
1208
|
+
```
|
|
1209
|
+
|
|
1210
|
+
### 14.2 Theme Schema
|
|
1211
|
+
|
|
1212
|
+
```ts
|
|
1213
|
+
export interface ThemeDefinition {
|
|
1214
|
+
readonly name: string;
|
|
1215
|
+
readonly displayName: string;
|
|
1216
|
+
readonly mode: 'dark' | 'light' | 'auto' | 'mono';
|
|
1217
|
+
readonly tokens: ThemeTokens;
|
|
1218
|
+
readonly icons: ThemeIcons;
|
|
1219
|
+
readonly layout: ThemeLayout;
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
export interface ThemeTokens {
|
|
1223
|
+
readonly text: string;
|
|
1224
|
+
readonly muted: string;
|
|
1225
|
+
readonly primary: string;
|
|
1226
|
+
readonly success: string;
|
|
1227
|
+
readonly warning: string;
|
|
1228
|
+
readonly error: string;
|
|
1229
|
+
readonly info: string;
|
|
1230
|
+
readonly border: string;
|
|
1231
|
+
readonly provider: string;
|
|
1232
|
+
readonly mcp: string;
|
|
1233
|
+
readonly skill: string;
|
|
1234
|
+
readonly memory: string;
|
|
1235
|
+
readonly trace: string;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
export interface ThemeIcons {
|
|
1239
|
+
readonly success: string;
|
|
1240
|
+
readonly warning: string;
|
|
1241
|
+
readonly error: string;
|
|
1242
|
+
readonly info: string;
|
|
1243
|
+
readonly running: string;
|
|
1244
|
+
readonly provider: string;
|
|
1245
|
+
readonly mcp: string;
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
export interface ThemeLayout {
|
|
1249
|
+
readonly compact: boolean;
|
|
1250
|
+
readonly useUnicode: boolean;
|
|
1251
|
+
readonly maxWidth: number;
|
|
1252
|
+
}
|
|
1253
|
+
```
|
|
1254
|
+
|
|
1255
|
+
### 14.3 Terminal Capability
|
|
1256
|
+
|
|
1257
|
+
```ts
|
|
1258
|
+
export interface TerminalCapability {
|
|
1259
|
+
readonly isTty: boolean;
|
|
1260
|
+
readonly supportsColor: boolean;
|
|
1261
|
+
readonly colorDepth: 1 | 4 | 8 | 24;
|
|
1262
|
+
readonly supportsUnicode: boolean;
|
|
1263
|
+
readonly width: number;
|
|
1264
|
+
readonly noColor: boolean;
|
|
1265
|
+
readonly ci: boolean;
|
|
1266
|
+
}
|
|
1267
|
+
```
|
|
1268
|
+
|
|
1269
|
+
정책:
|
|
1270
|
+
|
|
1271
|
+
```txt
|
|
1272
|
+
NO_COLOR=true → mono
|
|
1273
|
+
TERM=dumb → mono
|
|
1274
|
+
CI=true → compact + no spinner
|
|
1275
|
+
stdout non-TTY → progress stderr only
|
|
1276
|
+
--color=always → force color
|
|
1277
|
+
--no-color → mono
|
|
1278
|
+
```
|
|
1279
|
+
|
|
1280
|
+
---
|
|
1281
|
+
|
|
1282
|
+
## 15. NLP Renderer
|
|
1283
|
+
|
|
1284
|
+
### 15.1 목적
|
|
1285
|
+
|
|
1286
|
+
NLP renderer는 provider prompt compiler와 다르다.
|
|
1287
|
+
|
|
1288
|
+
```txt
|
|
1289
|
+
Debloat-to-NLP Compiler:
|
|
1290
|
+
provider에게 보낼 짧은 자연어 지시문 생성
|
|
1291
|
+
|
|
1292
|
+
NlpRenderer:
|
|
1293
|
+
사용자에게 보여줄 자연어 결과/상태 리포트 생성
|
|
1294
|
+
```
|
|
1295
|
+
|
|
1296
|
+
### 15.2 Interface
|
|
1297
|
+
|
|
1298
|
+
```ts
|
|
1299
|
+
export interface NlpRenderer {
|
|
1300
|
+
render(result: CommandResult): string;
|
|
1301
|
+
renderStatus(status: OmkStatusResult): string;
|
|
1302
|
+
renderError(error: OmkError): string;
|
|
1303
|
+
}
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
### 15.3 status output 예시
|
|
1307
|
+
|
|
1308
|
+
```txt
|
|
1309
|
+
OMK is running in read-only chat mode.
|
|
1310
|
+
|
|
1311
|
+
Provider:
|
|
1312
|
+
- kimi / kimi-code default
|
|
1313
|
+
|
|
1314
|
+
Runtime:
|
|
1315
|
+
- kimi-event
|
|
1316
|
+
|
|
1317
|
+
MCP:
|
|
1318
|
+
- Required: none
|
|
1319
|
+
- Optional: omk-project, memory
|
|
1320
|
+
- Warning: omk-web-bridge is unavailable and was ignored for this status request.
|
|
1321
|
+
|
|
1322
|
+
No active run state was found.
|
|
1323
|
+
```
|
|
1324
|
+
|
|
1325
|
+
---
|
|
1326
|
+
|
|
1327
|
+
## 16. Slash Command Architecture
|
|
1328
|
+
|
|
1329
|
+
### 16.1 문제
|
|
1330
|
+
|
|
1331
|
+
현재 `/model`은 단순 local print로 보인다.
|
|
1332
|
+
|
|
1333
|
+
```txt
|
|
1334
|
+
/model
|
|
1335
|
+
Current model: kimi-code default
|
|
1336
|
+
Usage: /model codex/codex-cli
|
|
1337
|
+
```
|
|
1338
|
+
|
|
1339
|
+
이 구조에서는 theme, NLP, session state, runtime sidecar와 연결되지 않는다.
|
|
1340
|
+
|
|
1341
|
+
### 16.2 목표 구조
|
|
1342
|
+
|
|
1343
|
+
```txt
|
|
1344
|
+
REPL input: /model
|
|
1345
|
+
↓
|
|
1346
|
+
SlashCommandParser
|
|
1347
|
+
↓
|
|
1348
|
+
CommandBus.dispatch({ kind: 'model.show' })
|
|
1349
|
+
↓
|
|
1350
|
+
ModelCommandHandler
|
|
1351
|
+
↓
|
|
1352
|
+
CommandResult
|
|
1353
|
+
↓
|
|
1354
|
+
OutputRouter
|
|
1355
|
+
↓
|
|
1356
|
+
ThemeRenderer or NlpRenderer
|
|
1357
|
+
```
|
|
1358
|
+
|
|
1359
|
+
### 16.3 Slash Command Result
|
|
1360
|
+
|
|
1361
|
+
```ts
|
|
1362
|
+
export interface SlashCommandResult {
|
|
1363
|
+
readonly kind: 'status' | 'mutation' | 'error';
|
|
1364
|
+
readonly command: string;
|
|
1365
|
+
readonly payload: unknown;
|
|
1366
|
+
readonly renderMode: 'theme' | 'nlp' | 'json';
|
|
1367
|
+
readonly sideEffects: readonly RuntimeSideEffect[];
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
export type RuntimeSideEffect =
|
|
1371
|
+
| { type: 'provider_changed'; provider: string; model: string }
|
|
1372
|
+
| { type: 'session_updated'; sessionId: string }
|
|
1373
|
+
| { type: 'memory_written'; memoryId: string }
|
|
1374
|
+
| { type: 'theme_changed'; theme: string };
|
|
1375
|
+
```
|
|
1376
|
+
|
|
1377
|
+
### 16.4 `/model` Handler
|
|
1378
|
+
|
|
1379
|
+
```ts
|
|
1380
|
+
export class ModelCommandHandler {
|
|
1381
|
+
async execute(input: SlashCommandInput): Promise<SlashCommandResult> {
|
|
1382
|
+
if (!input.args[0]) {
|
|
1383
|
+
return {
|
|
1384
|
+
kind: 'status',
|
|
1385
|
+
command: 'model.show',
|
|
1386
|
+
payload: {
|
|
1387
|
+
currentProvider: input.state.provider,
|
|
1388
|
+
currentModel: input.state.model,
|
|
1389
|
+
usage: '/model <provider>/<model>',
|
|
1390
|
+
},
|
|
1391
|
+
renderMode: 'theme',
|
|
1392
|
+
sideEffects: [],
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
const parsed = parseProviderModel(input.args[0]);
|
|
1397
|
+
|
|
1398
|
+
return {
|
|
1399
|
+
kind: 'mutation',
|
|
1400
|
+
command: 'model.set',
|
|
1401
|
+
payload: parsed,
|
|
1402
|
+
renderMode: 'theme',
|
|
1403
|
+
sideEffects: [
|
|
1404
|
+
{ type: 'provider_changed', provider: parsed.provider, model: parsed.model },
|
|
1405
|
+
{ type: 'session_updated', sessionId: input.state.sessionId },
|
|
1406
|
+
],
|
|
1407
|
+
};
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
```
|
|
1411
|
+
|
|
1412
|
+
---
|
|
1413
|
+
|
|
1414
|
+
## 17. Persistent Project Memory Integration
|
|
1415
|
+
|
|
1416
|
+
### 17.1 목표
|
|
1417
|
+
|
|
1418
|
+
프로젝트 폴더로 들어가면 이전 세션의 상태를 자동 복원한다.
|
|
1419
|
+
|
|
1420
|
+
```txt
|
|
1421
|
+
cd project
|
|
1422
|
+
omk
|
|
1423
|
+
|
|
1424
|
+
→ last session, open todos, decisions, current branch, known failure patterns를 자동 로드
|
|
1425
|
+
```
|
|
1426
|
+
|
|
1427
|
+
### 17.2 Memory Mount Flow
|
|
1428
|
+
|
|
1429
|
+
```txt
|
|
1430
|
+
cwd
|
|
1431
|
+
↓
|
|
1432
|
+
ProjectRootResolver
|
|
1433
|
+
↓
|
|
1434
|
+
ProjectIdResolver
|
|
1435
|
+
↓
|
|
1436
|
+
MemoryStore.open(projectId)
|
|
1437
|
+
↓
|
|
1438
|
+
ProjectStateCapsule load
|
|
1439
|
+
↓
|
|
1440
|
+
Intent-specific retrieval
|
|
1441
|
+
↓
|
|
1442
|
+
Context injection to planner/provider prompt
|
|
1443
|
+
```
|
|
1444
|
+
|
|
1445
|
+
### 17.3 State Capsule
|
|
1446
|
+
|
|
1447
|
+
```ts
|
|
1448
|
+
export interface ProjectStateCapsule {
|
|
1449
|
+
readonly projectId: string;
|
|
1450
|
+
readonly rootPath: string;
|
|
1451
|
+
readonly projectName: string;
|
|
1452
|
+
readonly currentBranch?: string;
|
|
1453
|
+
|
|
1454
|
+
readonly lastSession?: {
|
|
1455
|
+
readonly sessionId: string;
|
|
1456
|
+
readonly endedAt: string;
|
|
1457
|
+
readonly summary: string;
|
|
1458
|
+
readonly lastGoal?: string;
|
|
1459
|
+
};
|
|
1460
|
+
|
|
1461
|
+
readonly activeTodos: readonly CapsuleTodo[];
|
|
1462
|
+
readonly recentDecisions: readonly CapsuleDecision[];
|
|
1463
|
+
readonly projectInvariants: readonly string[];
|
|
1464
|
+
readonly preferredCommands: readonly string[];
|
|
1465
|
+
readonly knownFailurePatterns: readonly string[];
|
|
1466
|
+
readonly importantFiles: readonly string[];
|
|
1467
|
+
readonly openQuestions: readonly string[];
|
|
1468
|
+
|
|
1469
|
+
readonly updatedAt: string;
|
|
1470
|
+
}
|
|
1471
|
+
```
|
|
1472
|
+
|
|
1473
|
+
### 17.4 Memory as Runtime State
|
|
1474
|
+
|
|
1475
|
+
Memory는 provider prompt에 무식하게 전부 넣지 않는다.
|
|
1476
|
+
|
|
1477
|
+
```txt
|
|
1478
|
+
Planner:
|
|
1479
|
+
capsule summary + relevant decisions
|
|
1480
|
+
|
|
1481
|
+
Status:
|
|
1482
|
+
last session + active todos + runtime state
|
|
1483
|
+
|
|
1484
|
+
Code edit:
|
|
1485
|
+
task-local memory + project rules + failure patterns
|
|
1486
|
+
|
|
1487
|
+
Reviewer:
|
|
1488
|
+
decisions + quality gate + known regressions
|
|
1489
|
+
```
|
|
1490
|
+
|
|
1491
|
+
---
|
|
1492
|
+
|
|
1493
|
+
## 18. End-to-End Flow Examples
|
|
1494
|
+
|
|
1495
|
+
### 18.1 `현재 상태는 어때`
|
|
1496
|
+
|
|
1497
|
+
```txt
|
|
1498
|
+
Input: 현재 상태는 어때
|
|
1499
|
+
↓
|
|
1500
|
+
CommandBus: chat.turn
|
|
1501
|
+
↓
|
|
1502
|
+
IntentClassifier: status
|
|
1503
|
+
↓
|
|
1504
|
+
RiskClassifier: read
|
|
1505
|
+
↓
|
|
1506
|
+
CapabilitySelector:
|
|
1507
|
+
requiredMcp=[]
|
|
1508
|
+
optionalMcp=[omk-project, memory]
|
|
1509
|
+
selectedSkills=[omk-context-broker, omk-project-rules]
|
|
1510
|
+
↓
|
|
1511
|
+
RuntimeSidecar:
|
|
1512
|
+
provider=kimi
|
|
1513
|
+
runtime=kimi-event
|
|
1514
|
+
failurePolicy=required-only
|
|
1515
|
+
↓
|
|
1516
|
+
Filtered MCP config:
|
|
1517
|
+
omk-project, memory only
|
|
1518
|
+
↓
|
|
1519
|
+
Model prompt:
|
|
1520
|
+
concise status request
|
|
1521
|
+
↓
|
|
1522
|
+
ProviderEventNormalizer:
|
|
1523
|
+
raw events → warning/status/progress
|
|
1524
|
+
↓
|
|
1525
|
+
OutputRouter:
|
|
1526
|
+
theme or nlp result
|
|
1527
|
+
```
|
|
1528
|
+
|
|
1529
|
+
Expected result:
|
|
1530
|
+
|
|
1531
|
+
```txt
|
|
1532
|
+
OMK status
|
|
1533
|
+
|
|
1534
|
+
Provider: kimi / kimi-code default
|
|
1535
|
+
Runtime: kimi-event
|
|
1536
|
+
Mode: read-only
|
|
1537
|
+
|
|
1538
|
+
MCP:
|
|
1539
|
+
- Required: none
|
|
1540
|
+
- Optional: omk-project, memory
|
|
1541
|
+
|
|
1542
|
+
No active run state found.
|
|
1543
|
+
```
|
|
1544
|
+
|
|
1545
|
+
### 18.2 `CLI input parser 고쳐줘`
|
|
1546
|
+
|
|
1547
|
+
```txt
|
|
1548
|
+
Intent: code_edit
|
|
1549
|
+
Risk: write
|
|
1550
|
+
Required MCP: filesystem
|
|
1551
|
+
Optional MCP: omk-project, memory, sqlite
|
|
1552
|
+
Selected skills: omk-flow-feature-dev, omk-typescript-strict, omk-quality-gate
|
|
1553
|
+
Sandbox: workspace-write
|
|
1554
|
+
Failure policy: required-only
|
|
1555
|
+
```
|
|
1556
|
+
|
|
1557
|
+
Expected behavior:
|
|
1558
|
+
|
|
1559
|
+
```txt
|
|
1560
|
+
filesystem unavailable → blocker
|
|
1561
|
+
memory unavailable → warning
|
|
1562
|
+
omk-web-bridge unavailable → ignored
|
|
1563
|
+
```
|
|
1564
|
+
|
|
1565
|
+
### 18.3 `/model codex/codex-cli`
|
|
1566
|
+
|
|
1567
|
+
```txt
|
|
1568
|
+
SlashCommandParser
|
|
1569
|
+
↓
|
|
1570
|
+
CommandBus: model.set
|
|
1571
|
+
↓
|
|
1572
|
+
Session state mutation
|
|
1573
|
+
↓
|
|
1574
|
+
Runtime sidecar update
|
|
1575
|
+
↓
|
|
1576
|
+
OutputRouter
|
|
1577
|
+
```
|
|
1578
|
+
|
|
1579
|
+
Expected output:
|
|
1580
|
+
|
|
1581
|
+
```txt
|
|
1582
|
+
Model switched.
|
|
1583
|
+
|
|
1584
|
+
Provider: codex
|
|
1585
|
+
Model: codex-cli
|
|
1586
|
+
This change applies to the current OMK session.
|
|
1587
|
+
```
|
|
1588
|
+
|
|
1589
|
+
---
|
|
1590
|
+
|
|
1591
|
+
## 19. Migration Plan
|
|
1592
|
+
|
|
1593
|
+
### Phase 0 — Hotfix
|
|
1594
|
+
|
|
1595
|
+
목표: 현재 장애를 즉시 줄인다.
|
|
1596
|
+
|
|
1597
|
+
```txt
|
|
1598
|
+
1. `MUST activate all` 제거
|
|
1599
|
+
2. available/required/optional capability 분리
|
|
1600
|
+
3. optional MCP failure warning 처리
|
|
1601
|
+
4. status intent requiredMcp=[] 강제
|
|
1602
|
+
5. `kimi-print`를 debug raw에서만 사용
|
|
1603
|
+
```
|
|
1604
|
+
|
|
1605
|
+
Suggested commits:
|
|
1606
|
+
|
|
1607
|
+
```txt
|
|
1608
|
+
fix(runtime): split capability inventory from required activation
|
|
1609
|
+
fix(kimi): demote optional mcp connection failures
|
|
1610
|
+
fix(chat): stop emitting all skills and mcp as mandatory routing hints
|
|
1611
|
+
fix(runtime): avoid kimi-print outside debug raw mode
|
|
1612
|
+
```
|
|
1613
|
+
|
|
1614
|
+
### Phase 1 — RuntimeSidecar
|
|
1615
|
+
|
|
1616
|
+
```txt
|
|
1617
|
+
1. RuntimeSidecar type 추가
|
|
1618
|
+
2. ProviderAdapter input을 {modelPrompt, sidecar}로 변경
|
|
1619
|
+
3. per-turn MCP config 생성
|
|
1620
|
+
4. prompt envelope를 sidecar로 이동
|
|
1621
|
+
```
|
|
1622
|
+
|
|
1623
|
+
Suggested commits:
|
|
1624
|
+
|
|
1625
|
+
```txt
|
|
1626
|
+
feat(runtime): introduce runtime sidecar for provider execution
|
|
1627
|
+
feat(kimi): filter mcp config per turn from runtime sidecar
|
|
1628
|
+
```
|
|
1629
|
+
|
|
1630
|
+
### Phase 2 — ProviderEventNormalizer + OutputRouter
|
|
1631
|
+
|
|
1632
|
+
```txt
|
|
1633
|
+
1. provider raw stdout/stderr 수집
|
|
1634
|
+
2. Kimi raw event parser 추가
|
|
1635
|
+
3. OMK event로 normalize
|
|
1636
|
+
4. OutputRouter로만 출력
|
|
1637
|
+
5. raw mode는 --debug-raw에서만 허용
|
|
1638
|
+
```
|
|
1639
|
+
|
|
1640
|
+
Suggested commits:
|
|
1641
|
+
|
|
1642
|
+
```txt
|
|
1643
|
+
feat(output): route provider events through omk output router
|
|
1644
|
+
feat(kimi): normalize raw kimi status events before rendering
|
|
1645
|
+
```
|
|
1646
|
+
|
|
1647
|
+
### Phase 3 — Theme / NLP Renderer Activation
|
|
1648
|
+
|
|
1649
|
+
```txt
|
|
1650
|
+
1. ThemeRenderer semantic tokens 정리
|
|
1651
|
+
2. NlpRenderer status/error/result 구현
|
|
1652
|
+
3. output profile을 chat path에 강제 적용
|
|
1653
|
+
4. CI/no-color/non-tty 대응
|
|
1654
|
+
```
|
|
1655
|
+
|
|
1656
|
+
Suggested commits:
|
|
1657
|
+
|
|
1658
|
+
```txt
|
|
1659
|
+
feat(theme): apply semantic renderer to interactive chat output
|
|
1660
|
+
feat(nlp): enable deterministic status and error reports
|
|
1661
|
+
```
|
|
1662
|
+
|
|
1663
|
+
### Phase 4 — Slash Command CommandBus Migration
|
|
1664
|
+
|
|
1665
|
+
```txt
|
|
1666
|
+
1. SlashCommandParser 추가
|
|
1667
|
+
2. /model, /status, /memory, /theme부터 CommandBus로 이동
|
|
1668
|
+
3. SlashCommandResult 도입
|
|
1669
|
+
4. session state mutation과 memory 기록 연결
|
|
1670
|
+
```
|
|
1671
|
+
|
|
1672
|
+
Suggested commits:
|
|
1673
|
+
|
|
1674
|
+
```txt
|
|
1675
|
+
refactor(repl): route slash commands through command bus
|
|
1676
|
+
feat(repl): persist provider changes in interactive session state
|
|
1677
|
+
```
|
|
1678
|
+
|
|
1679
|
+
### Phase 5 — CLI Framework Migration
|
|
1680
|
+
|
|
1681
|
+
추천 후보:
|
|
1682
|
+
|
|
1683
|
+
```txt
|
|
1684
|
+
1순위: Clipanion + Clack + custom renderer
|
|
1685
|
+
2순위: oclif + Clack
|
|
1686
|
+
3순위: Commander/Yargs + Clack
|
|
1687
|
+
장기 후보: Rust clap + ratatui 또는 Go Cobra + Bubble Tea
|
|
1688
|
+
```
|
|
1689
|
+
|
|
1690
|
+
주의:
|
|
1691
|
+
|
|
1692
|
+
```txt
|
|
1693
|
+
CLI framework만 바꾸면 문제가 해결되지 않는다.
|
|
1694
|
+
반드시 RuntimeSidecar / OutputRouter / ProviderEventNormalizer를 먼저 넣어야 한다.
|
|
1695
|
+
```
|
|
1696
|
+
|
|
1697
|
+
---
|
|
1698
|
+
|
|
1699
|
+
## 20. Regression Tests
|
|
1700
|
+
|
|
1701
|
+
### 20.1 status does not load all MCP
|
|
1702
|
+
|
|
1703
|
+
```ts
|
|
1704
|
+
it('does not load all MCP servers for status intent', () => {
|
|
1705
|
+
const sidecar = buildTurnSidecar({
|
|
1706
|
+
userRequest: '현재 상태는 어때',
|
|
1707
|
+
inventory: inventoryWith21Mcp(),
|
|
1708
|
+
});
|
|
1709
|
+
|
|
1710
|
+
expect(sidecar.intent).toBe('status');
|
|
1711
|
+
expect(sidecar.requiredMcp).toEqual([]);
|
|
1712
|
+
expect(sidecar.optionalMcp.length).toBeLessThanOrEqual(2);
|
|
1713
|
+
expect(sidecar.optionalMcp).toContain('omk-project');
|
|
1714
|
+
});
|
|
1715
|
+
```
|
|
1716
|
+
|
|
1717
|
+
### 20.2 no MUST activate leakage
|
|
1718
|
+
|
|
1719
|
+
```ts
|
|
1720
|
+
it('does not leak full inventory into provider prompt', () => {
|
|
1721
|
+
const { modelPrompt } = compileTurnPrompt({
|
|
1722
|
+
userRequest: '현재 상태는 어때',
|
|
1723
|
+
inventory: inventoryWith21McpAnd67Skills(),
|
|
1724
|
+
});
|
|
1725
|
+
|
|
1726
|
+
expect(modelPrompt).not.toContain('MUST activate');
|
|
1727
|
+
expect(modelPrompt).not.toContain('MUST use');
|
|
1728
|
+
expect(modelPrompt).not.toContain('filesystem, codex, web-reader');
|
|
1729
|
+
expect(modelPrompt.length).toBeLessThan(1200);
|
|
1730
|
+
});
|
|
1731
|
+
```
|
|
1732
|
+
|
|
1733
|
+
### 20.3 optional MCP failure is warning
|
|
1734
|
+
|
|
1735
|
+
```ts
|
|
1736
|
+
it('treats optional MCP failure as warning', () => {
|
|
1737
|
+
const result = applyMcpFailurePolicy({
|
|
1738
|
+
requiredMcp: [],
|
|
1739
|
+
failedMcp: ['omk-web-bridge'],
|
|
1740
|
+
failurePolicy: 'required-only',
|
|
1741
|
+
});
|
|
1742
|
+
|
|
1743
|
+
expect(result.exitCode).toBe(0);
|
|
1744
|
+
expect(result.blockers).toEqual([]);
|
|
1745
|
+
expect(result.warnings).toEqual(['omk-web-bridge']);
|
|
1746
|
+
});
|
|
1747
|
+
```
|
|
1748
|
+
|
|
1749
|
+
### 20.4 kimi-print debug only
|
|
1750
|
+
|
|
1751
|
+
```ts
|
|
1752
|
+
it('does not select kimi-print unless debug raw is enabled', () => {
|
|
1753
|
+
expect(selectProviderRuntime({
|
|
1754
|
+
provider: 'kimi',
|
|
1755
|
+
intent: 'status',
|
|
1756
|
+
debugRaw: false,
|
|
1757
|
+
})).not.toBe('kimi-print');
|
|
1758
|
+
|
|
1759
|
+
expect(selectProviderRuntime({
|
|
1760
|
+
provider: 'kimi',
|
|
1761
|
+
intent: 'status',
|
|
1762
|
+
debugRaw: true,
|
|
1763
|
+
})).toBe('kimi-print');
|
|
1764
|
+
});
|
|
1765
|
+
```
|
|
1766
|
+
|
|
1767
|
+
### 20.5 raw provider event not visible
|
|
1768
|
+
|
|
1769
|
+
```ts
|
|
1770
|
+
it('does not show raw provider event objects in normal output', async () => {
|
|
1771
|
+
const output = await runInteractiveTurn('현재 상태는 어때');
|
|
1772
|
+
|
|
1773
|
+
expect(output.stdout).not.toContain('TurnBegin(');
|
|
1774
|
+
expect(output.stdout).not.toContain('StatusUpdate(');
|
|
1775
|
+
expect(output.stdout).not.toContain('MCPStatusSnapshot(');
|
|
1776
|
+
});
|
|
1777
|
+
```
|
|
1778
|
+
|
|
1779
|
+
### 20.6 slash command goes through OutputRouter
|
|
1780
|
+
|
|
1781
|
+
```ts
|
|
1782
|
+
it('routes slash command through command bus and output router', async () => {
|
|
1783
|
+
const result = await repl.handleLine('/model');
|
|
1784
|
+
|
|
1785
|
+
expect(result.command).toBe('model.show');
|
|
1786
|
+
expect(result.renderedBy).toBe('OutputRouter');
|
|
1787
|
+
expect(result.rawConsoleLogUsed).toBe(false);
|
|
1788
|
+
});
|
|
1789
|
+
```
|
|
1790
|
+
|
|
1791
|
+
---
|
|
1792
|
+
|
|
1793
|
+
## 21. CLI v2 Candidate Recommendation
|
|
1794
|
+
|
|
1795
|
+
### 21.1 Recommended Stack
|
|
1796
|
+
|
|
1797
|
+
```txt
|
|
1798
|
+
Parser / Command Tree:
|
|
1799
|
+
Clipanion
|
|
1800
|
+
|
|
1801
|
+
Interactive prompts:
|
|
1802
|
+
Clack
|
|
1803
|
+
|
|
1804
|
+
Rendering:
|
|
1805
|
+
custom OMK ThemeRenderer / NlpRenderer
|
|
1806
|
+
|
|
1807
|
+
Runtime:
|
|
1808
|
+
existing OMK orchestration core + RuntimeSidecar
|
|
1809
|
+
|
|
1810
|
+
Provider layer:
|
|
1811
|
+
ProviderAdapter abstraction
|
|
1812
|
+
```
|
|
1813
|
+
|
|
1814
|
+
### 21.2 Why Clipanion + Clack
|
|
1815
|
+
|
|
1816
|
+
```txt
|
|
1817
|
+
- TypeScript strict와 잘 맞음
|
|
1818
|
+
- nested command tree에 강함
|
|
1819
|
+
- OMK의 /run, /chat, /memory, /doctor, /theme, /provider 구조에 적합
|
|
1820
|
+
- Clack으로 interactive UX를 정리하기 좋음
|
|
1821
|
+
- renderer는 직접 통제해야 theme/NLP가 보장됨
|
|
1822
|
+
```
|
|
1823
|
+
|
|
1824
|
+
### 21.3 Non-goal
|
|
1825
|
+
|
|
1826
|
+
```txt
|
|
1827
|
+
- CLI framework migration으로 P0 runtime bug를 해결하려 하지 않는다.
|
|
1828
|
+
- Kimi 전용 SDK에 CLI 전체를 종속하지 않는다.
|
|
1829
|
+
- provider raw stdout을 user output으로 쓰지 않는다.
|
|
1830
|
+
```
|
|
1831
|
+
|
|
1832
|
+
---
|
|
1833
|
+
|
|
1834
|
+
## 22. Implementation Checklist
|
|
1835
|
+
|
|
1836
|
+
### P0 Checklist
|
|
1837
|
+
|
|
1838
|
+
```txt
|
|
1839
|
+
[ ] CapabilityPlan type 추가
|
|
1840
|
+
[ ] available/required/optional split 적용
|
|
1841
|
+
[ ] Prompt에서 full skill/MCP inventory 제거
|
|
1842
|
+
[ ] `MUST activate` / `MUST use` 문구 제거
|
|
1843
|
+
[ ] status intent requiredMcp=[] 테스트 추가
|
|
1844
|
+
[ ] optional MCP failure warning 처리
|
|
1845
|
+
[ ] per-turn filtered mcp.json 생성
|
|
1846
|
+
[ ] kimi-print debug-only 처리
|
|
1847
|
+
```
|
|
1848
|
+
|
|
1849
|
+
### P1 Checklist
|
|
1850
|
+
|
|
1851
|
+
```txt
|
|
1852
|
+
[ ] RuntimeSidecar Builder 추가
|
|
1853
|
+
[ ] Debloat-to-NLP Compiler 추가
|
|
1854
|
+
[ ] ProviderEventNormalizer 추가
|
|
1855
|
+
[ ] OutputRouter 추가
|
|
1856
|
+
[ ] ThemeRenderer를 chat path에 강제 적용
|
|
1857
|
+
[ ] NlpRenderer status/error 구현
|
|
1858
|
+
[ ] `/model` CommandBus migration
|
|
1859
|
+
[ ] `/status` CommandBus migration
|
|
1860
|
+
[ ] raw provider event regression test 추가
|
|
1861
|
+
```
|
|
1862
|
+
|
|
1863
|
+
### P2 Checklist
|
|
1864
|
+
|
|
1865
|
+
```txt
|
|
1866
|
+
[ ] Clipanion 기반 cli-v2 skeleton 추가
|
|
1867
|
+
[ ] Clack 기반 interactive prompt 추가
|
|
1868
|
+
[ ] 기존 CLI와 cli-v2 병렬 실행 플래그 추가
|
|
1869
|
+
[ ] `OMK_CLI_V2=1` smoke test 추가
|
|
1870
|
+
[ ] docs/runtime-architecture.md 추가
|
|
1871
|
+
[ ] docs/cli-v2-migration.md 추가
|
|
1872
|
+
```
|
|
1873
|
+
|
|
1874
|
+
---
|
|
1875
|
+
|
|
1876
|
+
## 23. Final Target Behavior
|
|
1877
|
+
|
|
1878
|
+
### Before
|
|
1879
|
+
|
|
1880
|
+
```txt
|
|
1881
|
+
User: 현재 상태는 어때
|
|
1882
|
+
|
|
1883
|
+
OMK:
|
|
1884
|
+
- 67 skills dump
|
|
1885
|
+
- 21 MCP dump
|
|
1886
|
+
- MUST activate all
|
|
1887
|
+
- TurnBegin raw object 출력
|
|
1888
|
+
- StatusUpdate raw object 출력
|
|
1889
|
+
- omk-web-bridge failure
|
|
1890
|
+
- exit=1
|
|
1891
|
+
```
|
|
1892
|
+
|
|
1893
|
+
### After
|
|
1894
|
+
|
|
1895
|
+
```txt
|
|
1896
|
+
User: 현재 상태는 어때
|
|
1897
|
+
|
|
1898
|
+
OMK status
|
|
1899
|
+
|
|
1900
|
+
Provider:
|
|
1901
|
+
- kimi / kimi-code default
|
|
1902
|
+
|
|
1903
|
+
Runtime:
|
|
1904
|
+
- kimi-event
|
|
1905
|
+
|
|
1906
|
+
Mode:
|
|
1907
|
+
- read-only
|
|
1908
|
+
|
|
1909
|
+
Capabilities:
|
|
1910
|
+
- Required MCP: none
|
|
1911
|
+
- Optional MCP: omk-project, memory
|
|
1912
|
+
- Ignored MCP: 19 unrelated servers
|
|
1913
|
+
- Warning: omk-web-bridge unavailable, ignored for this request
|
|
1914
|
+
|
|
1915
|
+
Project:
|
|
1916
|
+
- No active run state found.
|
|
1917
|
+
```
|
|
1918
|
+
|
|
1919
|
+
Exit code:
|
|
1920
|
+
|
|
1921
|
+
```txt
|
|
1922
|
+
0
|
|
1923
|
+
```
|
|
1924
|
+
|
|
1925
|
+
Provider prompt length:
|
|
1926
|
+
|
|
1927
|
+
```txt
|
|
1928
|
+
Before: 30k+ chars
|
|
1929
|
+
After: < 1.2k chars for status intent
|
|
1930
|
+
```
|
|
1931
|
+
|
|
1932
|
+
MCP loading:
|
|
1933
|
+
|
|
1934
|
+
```txt
|
|
1935
|
+
Before: 21 servers
|
|
1936
|
+
After: 0~2 servers for status intent
|
|
1937
|
+
```
|
|
1938
|
+
|
|
1939
|
+
---
|
|
1940
|
+
|
|
1941
|
+
## 24. Closing Architecture Decision
|
|
1942
|
+
|
|
1943
|
+
최종 결정은 다음이다.
|
|
1944
|
+
|
|
1945
|
+
```txt
|
|
1946
|
+
ADR-001:
|
|
1947
|
+
OMK v2는 provider-neutral orchestration envelope를 model prompt로 보내지 않는다.
|
|
1948
|
+
Envelope는 RuntimeSidecar로 컴파일하고,
|
|
1949
|
+
model prompt는 Debloat-to-NLP Compiler가 생성한 최소 자연어 지시문만 사용한다.
|
|
1950
|
+
|
|
1951
|
+
ADR-002:
|
|
1952
|
+
Capability inventory는 activation requirement가 아니다.
|
|
1953
|
+
requiredMcp와 optionalMcp는 IntentClassifier + CapabilitySelector가 turn 단위로 결정한다.
|
|
1954
|
+
|
|
1955
|
+
ADR-003:
|
|
1956
|
+
Provider raw output은 user output이 아니다.
|
|
1957
|
+
모든 provider event는 ProviderEventNormalizer와 OutputRouter를 통과해야 한다.
|
|
1958
|
+
|
|
1959
|
+
ADR-004:
|
|
1960
|
+
Slash command도 일반 command와 동일하게 CommandBus를 통과한다.
|
|
1961
|
+
Plain console print 기반 slash command는 금지한다.
|
|
1962
|
+
|
|
1963
|
+
ADR-005:
|
|
1964
|
+
kimi-print는 debug raw runtime이다.
|
|
1965
|
+
기본 interactive runtime은 event-normalized runtime이어야 한다.
|
|
1966
|
+
```
|
|
1967
|
+
|
|
1968
|
+
---
|
|
1969
|
+
|
|
1970
|
+
## 25. Recommended Next Commit Sequence
|
|
1971
|
+
|
|
1972
|
+
```txt
|
|
1973
|
+
1. fix(runtime): split capability inventory from required activation
|
|
1974
|
+
2. fix(chat): remove mandatory all-skill and all-mcp routing directives
|
|
1975
|
+
3. fix(kimi): filter MCP config per turn from runtime sidecar
|
|
1976
|
+
4. fix(kimi): demote optional MCP connection failures to warnings
|
|
1977
|
+
5. fix(runtime): disable kimi-print outside debug raw mode
|
|
1978
|
+
6. feat(prompt): compile prompt envelope into NLP prompt and runtime sidecar
|
|
1979
|
+
7. feat(output): normalize provider events before rendering
|
|
1980
|
+
8. feat(theme): route interactive chat output through theme renderer
|
|
1981
|
+
9. feat(nlp): add deterministic status and error renderer
|
|
1982
|
+
10. refactor(repl): route slash commands through command bus
|
|
1983
|
+
11. test(regression): status turn must not load unrelated MCP servers
|
|
1984
|
+
12. test(regression): optional omk-web-bridge failure must not exit 1
|
|
1985
|
+
```
|
|
1986
|
+
|
|
1987
|
+
---
|
|
1988
|
+
|
|
1989
|
+
## 26. Success Metrics
|
|
1990
|
+
|
|
1991
|
+
```txt
|
|
1992
|
+
Metric 1: status prompt size
|
|
1993
|
+
Target: < 1,200 chars
|
|
1994
|
+
|
|
1995
|
+
Metric 2: status MCP count
|
|
1996
|
+
Target: <= 2
|
|
1997
|
+
|
|
1998
|
+
Metric 3: optional MCP failure exit behavior
|
|
1999
|
+
Target: exit=0 for non-required failures
|
|
2000
|
+
|
|
2001
|
+
Metric 4: raw provider event leakage
|
|
2002
|
+
Target: 0 occurrences of TurnBegin/StatusUpdate in normal stdout
|
|
2003
|
+
|
|
2004
|
+
Metric 5: theme application
|
|
2005
|
+
Target: 100% human-facing normal output goes through ThemeRenderer
|
|
2006
|
+
|
|
2007
|
+
Metric 6: slash command integration
|
|
2008
|
+
Target: /model, /status, /memory, /theme all return CommandResult
|
|
2009
|
+
|
|
2010
|
+
Metric 7: JSON machine safety
|
|
2011
|
+
Target: `omk run --output json > result.json` contains valid JSON only
|
|
2012
|
+
```
|
|
2013
|
+
|
|
2014
|
+
---
|
|
2015
|
+
|
|
2016
|
+
## 27. Risk Assessment
|
|
2017
|
+
|
|
2018
|
+
| Risk | Probability | Impact | Mitigation |
|
|
2019
|
+
|---|---:|---:|---|
|
|
2020
|
+
| Provider raw event parser가 불완전함 | Medium | Medium | raw mode 유지, parser fixture test 추가 |
|
|
2021
|
+
| CapabilitySelector가 필요한 MCP를 과소선택함 | Medium | High | intent별 regression, `--explain-routing` 제공 |
|
|
2022
|
+
| Slash command migration 중 기존 UX 깨짐 | Medium | Medium | legacy alias 유지, CommandBus smoke test |
|
|
2023
|
+
| ThemeRenderer가 non-TTY/CI에서 깨짐 | Low | Medium | terminal capability detection |
|
|
2024
|
+
| Kimi isolated HOME이 user config를 다시 읽음 | Medium | High | explicit mcp config file path 강제 |
|
|
2025
|
+
| NLP renderer가 결과를 과장함 | Medium | Medium | deterministic template 우선, source result hash 포함 |
|
|
2026
|
+
|
|
2027
|
+
---
|
|
2028
|
+
|
|
2029
|
+
## 28. Decision Summary
|
|
2030
|
+
|
|
2031
|
+
지금 당장 필요한 것은 “예쁜 테마”나 “NLP 출력 옵션”을 덧붙이는 게 아니다.
|
|
2032
|
+
|
|
2033
|
+
먼저 runtime을 다음처럼 분리해야 한다.
|
|
2034
|
+
|
|
2035
|
+
```txt
|
|
2036
|
+
Control-plane:
|
|
2037
|
+
CommandEnvelope, CapabilityInventory, RuntimeSidecar, Provider config
|
|
2038
|
+
|
|
2039
|
+
Data-plane:
|
|
2040
|
+
modelPrompt, provider response, normalized events, rendered output
|
|
2041
|
+
```
|
|
2042
|
+
|
|
2043
|
+
이 분리가 끝나야 theme, NLP, slash command, memory, MCP 안정화가 모두 정상 작동한다.
|
|
2044
|
+
|
|
2045
|
+
최종 권장 순서는 다음이다.
|
|
2046
|
+
|
|
2047
|
+
```txt
|
|
2048
|
+
1. CapabilityPlan
|
|
2049
|
+
2. RuntimeSidecar
|
|
2050
|
+
3. Per-turn MCP filtering
|
|
2051
|
+
4. FailurePolicy
|
|
2052
|
+
5. ProviderEventNormalizer
|
|
2053
|
+
6. OutputRouter
|
|
2054
|
+
7. Theme/NLP Renderer
|
|
2055
|
+
8. Slash Command CommandBus
|
|
2056
|
+
9. CLI v2 framework migration
|
|
2057
|
+
```
|
|
2058
|
+
|