nikcli 0.0.6
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/.turbo/turbo-typecheck.log +1 -0
- package/AGENTS.md +27 -0
- package/Dockerfile +18 -0
- package/README.md +15 -0
- package/bin/nikcli +84 -0
- package/config.json +13 -0
- package/docs/tailscale-mobile/01-tailscale-setup.md +94 -0
- package/docs/tailscale-mobile/02-host-setup.md +115 -0
- package/docs/tailscale-mobile/03-phone-and-serve.md +134 -0
- package/docs/tailscale-mobile/README.md +59 -0
- package/examples/README.md +54 -0
- package/package.json +147 -0
- package/parsers-config.ts +253 -0
- package/script/build.ts +179 -0
- package/script/postinstall.mjs +125 -0
- package/script/publish-registries.ts +187 -0
- package/script/publish.ts +100 -0
- package/script/schema.ts +47 -0
- package/script/seed-e2e.ts +50 -0
- package/sequential-prancing-forest.md +373 -0
- package/src/acp/README.md +164 -0
- package/src/acp/agent.ts +1303 -0
- package/src/acp/session.ts +105 -0
- package/src/acp/types.ts +22 -0
- package/src/agent/agent.ts +528 -0
- package/src/agent/generate.txt +32 -0
- package/src/agent/prompt/compaction.txt +14 -0
- package/src/agent/prompt/explore.txt +18 -0
- package/src/agent/prompt/summary.txt +11 -0
- package/src/agent/prompt/title.txt +44 -0
- package/src/auth/index.ts +73 -0
- package/src/bun/index.ts +119 -0
- package/src/bun/registry.ts +54 -0
- package/src/bus/bus-event.ts +43 -0
- package/src/bus/global.ts +10 -0
- package/src/bus/index.ts +105 -0
- package/src/chatbot/handlers.ts +150 -0
- package/src/chatbot/index.ts +132 -0
- package/src/cli/bootstrap.ts +17 -0
- package/src/cli/cmd/acp.ts +69 -0
- package/src/cli/cmd/ads.ts +377 -0
- package/src/cli/cmd/agent.ts +259 -0
- package/src/cli/cmd/auth.ts +400 -0
- package/src/cli/cmd/chatbot.ts +420 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/companion.ts +81 -0
- package/src/cli/cmd/connectors.ts +593 -0
- package/src/cli/cmd/debug/agent.ts +166 -0
- package/src/cli/cmd/debug/config.ts +16 -0
- package/src/cli/cmd/debug/file.ts +97 -0
- package/src/cli/cmd/debug/index.ts +48 -0
- package/src/cli/cmd/debug/lsp.ts +52 -0
- package/src/cli/cmd/debug/ripgrep.ts +87 -0
- package/src/cli/cmd/debug/scrap.ts +16 -0
- package/src/cli/cmd/debug/skill.ts +16 -0
- package/src/cli/cmd/debug/snapshot.ts +52 -0
- package/src/cli/cmd/export.ts +88 -0
- package/src/cli/cmd/generate.ts +38 -0
- package/src/cli/cmd/github.ts +412 -0
- package/src/cli/cmd/image-model.ts +128 -0
- package/src/cli/cmd/import.ts +201 -0
- package/src/cli/cmd/lovable.ts +128 -0
- package/src/cli/cmd/mcp.ts +738 -0
- package/src/cli/cmd/mobile.ts +223 -0
- package/src/cli/cmd/models.ts +77 -0
- package/src/cli/cmd/plug.ts +231 -0
- package/src/cli/cmd/pr.ts +104 -0
- package/src/cli/cmd/rag-model.ts +167 -0
- package/src/cli/cmd/remote.ts +416 -0
- package/src/cli/cmd/run.ts +589 -0
- package/src/cli/cmd/serve.ts +51 -0
- package/src/cli/cmd/session.ts +133 -0
- package/src/cli/cmd/speak-model.ts +204 -0
- package/src/cli/cmd/stats.ts +402 -0
- package/src/cli/cmd/tui/app.tsx +841 -0
- package/src/cli/cmd/tui/attach.ts +31 -0
- package/src/cli/cmd/tui/component/border.tsx +75 -0
- package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-command.tsx +172 -0
- package/src/cli/cmd/tui/component/dialog-config.tsx +291 -0
- package/src/cli/cmd/tui/component/dialog-connectors.tsx +440 -0
- package/src/cli/cmd/tui/component/dialog-image-model.tsx +97 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +234 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +260 -0
- package/src/cli/cmd/tui/component/dialog-rag-model.tsx +217 -0
- package/src/cli/cmd/tui/component/dialog-remote.tsx +489 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +170 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-settings/index.tsx +59 -0
- package/src/cli/cmd/tui/component/dialog-settings/prompt.tsx +40 -0
- package/src/cli/cmd/tui/component/dialog-settings/sidebar.tsx +39 -0
- package/src/cli/cmd/tui/component/dialog-settings/spinner.tsx +62 -0
- package/src/cli/cmd/tui/component/dialog-settings/ui.tsx +58 -0
- package/src/cli/cmd/tui/component/dialog-skills.tsx +117 -0
- package/src/cli/cmd/tui/component/dialog-speak-model.tsx +304 -0
- package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +165 -0
- package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
- package/src/cli/cmd/tui/component/dialog-theme-create.tsx +717 -0
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +52 -0
- package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +350 -0
- package/src/cli/cmd/tui/component/error-component.tsx +91 -0
- package/src/cli/cmd/tui/component/logo.tsx +103 -0
- package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +669 -0
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +89 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +2165 -0
- package/src/cli/cmd/tui/component/prompt/stash.tsx +63 -0
- package/src/cli/cmd/tui/component/spinner.tsx +24 -0
- package/src/cli/cmd/tui/component/startup-loading.tsx +63 -0
- package/src/cli/cmd/tui/component/table/markdown-table.tsx +267 -0
- package/src/cli/cmd/tui/component/table-db/db/connections.ts +75 -0
- package/src/cli/cmd/tui/component/table-db/db/db-connection.ts +223 -0
- package/src/cli/cmd/tui/component/table-db/db/db-preview.ts +202 -0
- package/src/cli/cmd/tui/component/table-db/db/factory.ts +77 -0
- package/src/cli/cmd/tui/component/table-db/db/index.ts +9 -0
- package/src/cli/cmd/tui/component/table-db/db/mysql-connection.ts +330 -0
- package/src/cli/cmd/tui/component/table-db/db/postgres-connection.ts +338 -0
- package/src/cli/cmd/tui/component/table-db/db/sqlite-connection.ts +302 -0
- package/src/cli/cmd/tui/component/table-db/db/types.ts +108 -0
- package/src/cli/cmd/tui/component/table-db/table/dbedit-hooks.ts +74 -0
- package/src/cli/cmd/tui/component/table-db/table/index.ts +15 -0
- package/src/cli/cmd/tui/component/table-db/table/table-events.ts +54 -0
- package/src/cli/cmd/tui/component/table-db/table/table-formatters.ts +191 -0
- package/src/cli/cmd/tui/component/table-db/table/table-hooks.ts +105 -0
- package/src/cli/cmd/tui/component/table-db/table/table-keyboard-handler.ts +255 -0
- package/src/cli/cmd/tui/component/table-db/table/table-layout-engine.ts +208 -0
- package/src/cli/cmd/tui/component/table-db/table/table-renderable.ts +486 -0
- package/src/cli/cmd/tui/component/table-db/table/table-selection-manager.ts +136 -0
- package/src/cli/cmd/tui/component/table-db/table/table-state.ts +198 -0
- package/src/cli/cmd/tui/component/table-db/table/types.ts +69 -0
- package/src/cli/cmd/tui/component/table-db/ui/db-visualizer.tsx +71 -0
- package/src/cli/cmd/tui/component/table-db/ui/index.ts +2 -0
- package/src/cli/cmd/tui/component/table-db/ui/table-renderer.ts +607 -0
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +73 -0
- package/src/cli/cmd/tui/component/tips.tsx +195 -0
- package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
- package/src/cli/cmd/tui/context/args.tsx +14 -0
- package/src/cli/cmd/tui/context/directory.ts +13 -0
- package/src/cli/cmd/tui/context/exit.tsx +24 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/keybind.tsx +102 -0
- package/src/cli/cmd/tui/context/kv.tsx +52 -0
- package/src/cli/cmd/tui/context/local.tsx +458 -0
- package/src/cli/cmd/tui/context/plugin-keybinds.ts +41 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +54 -0
- package/src/cli/cmd/tui/context/sdk.tsx +128 -0
- package/src/cli/cmd/tui/context/server.tsx +8 -0
- package/src/cli/cmd/tui/context/sync.tsx +510 -0
- package/src/cli/cmd/tui/context/theme/abyss.json +233 -0
- package/src/cli/cmd/tui/context/theme/apple.json +235 -0
- package/src/cli/cmd/tui/context/theme/arctic.json +232 -0
- package/src/cli/cmd/tui/context/theme/aura.json +69 -0
- package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
- package/src/cli/cmd/tui/context/theme/ayuai.json +229 -0
- package/src/cli/cmd/tui/context/theme/blood.json +229 -0
- package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
- package/src/cli/cmd/tui/context/theme/catmoe.json +235 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-latte.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin.json +259 -0
- package/src/cli/cmd/tui/context/theme/charcoal.json +230 -0
- package/src/cli/cmd/tui/context/theme/chromatic.json +235 -0
- package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
- package/src/cli/cmd/tui/context/theme/cosmic.json +234 -0
- package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
- package/src/cli/cmd/tui/context/theme/cyber.json +235 -0
- package/src/cli/cmd/tui/context/theme/dawnfox.json +229 -0
- package/src/cli/cmd/tui/context/theme/dimension.json +235 -0
- package/src/cli/cmd/tui/context/theme/dracula-official.json +222 -0
- package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
- package/src/cli/cmd/tui/context/theme/dream.json +235 -0
- package/src/cli/cmd/tui/context/theme/duo.json +235 -0
- package/src/cli/cmd/tui/context/theme/dusk.json +235 -0
- package/src/cli/cmd/tui/context/theme/ebony.json +232 -0
- package/src/cli/cmd/tui/context/theme/equilibrium.json +232 -0
- package/src/cli/cmd/tui/context/theme/ethereal.json +235 -0
- package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
- package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
- package/src/cli/cmd/tui/context/theme/fusion.json +235 -0
- package/src/cli/cmd/tui/context/theme/ghost.json +235 -0
- package/src/cli/cmd/tui/context/theme/github-dark.json +229 -0
- package/src/cli/cmd/tui/context/theme/github-dimmed.json +231 -0
- package/src/cli/cmd/tui/context/theme/github-light.json +229 -0
- package/src/cli/cmd/tui/context/theme/github.json +233 -0
- package/src/cli/cmd/tui/context/theme/glass.json +235 -0
- package/src/cli/cmd/tui/context/theme/gold.json +235 -0
- package/src/cli/cmd/tui/context/theme/gone.json +234 -0
- package/src/cli/cmd/tui/context/theme/greyscale.json +229 -0
- package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
- package/src/cli/cmd/tui/context/theme/hacker.json +229 -0
- package/src/cli/cmd/tui/context/theme/holo.json +235 -0
- package/src/cli/cmd/tui/context/theme/ink.json +235 -0
- package/src/cli/cmd/tui/context/theme/jet.json +233 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +227 -0
- package/src/cli/cmd/tui/context/theme/lavender.json +236 -0
- package/src/cli/cmd/tui/context/theme/lightph.json +235 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +237 -0
- package/src/cli/cmd/tui/context/theme/material-ocean.json +230 -0
- package/src/cli/cmd/tui/context/theme/material.json +235 -0
- package/src/cli/cmd/tui/context/theme/matrix.json +227 -0
- package/src/cli/cmd/tui/context/theme/mercury.json +245 -0
- package/src/cli/cmd/tui/context/theme/midnight.json +235 -0
- package/src/cli/cmd/tui/context/theme/modern.json +235 -0
- package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
- package/src/cli/cmd/tui/context/theme/muted.json +229 -0
- package/src/cli/cmd/tui/context/theme/neon.json +229 -0
- package/src/cli/cmd/tui/context/theme/neonfusion.json +235 -0
- package/src/cli/cmd/tui/context/theme/neutral.json +235 -0
- package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
- package/src/cli/cmd/tui/context/theme/nikcli.json +245 -0
- package/src/cli/cmd/tui/context/theme/nord.json +223 -0
- package/src/cli/cmd/tui/context/theme/nordic.json +235 -0
- package/src/cli/cmd/tui/context/theme/nova.json +235 -0
- package/src/cli/cmd/tui/context/theme/obsidian.json +234 -0
- package/src/cli/cmd/tui/context/theme/one-dark.json +231 -0
- package/src/cli/cmd/tui/context/theme/one-pro.json +229 -0
- package/src/cli/cmd/tui/context/theme/onyx.json +233 -0
- package/src/cli/cmd/tui/context/theme/orng.json +249 -0
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +240 -0
- package/src/cli/cmd/tui/context/theme/oxocarbon.json +229 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
- package/src/cli/cmd/tui/context/theme/poimandres.json +230 -0
- package/src/cli/cmd/tui/context/theme/prism.json +235 -0
- package/src/cli/cmd/tui/context/theme/radiant.json +235 -0
- package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
- package/src/cli/cmd/tui/context/theme/shadow.json +235 -0
- package/src/cli/cmd/tui/context/theme/silicon.json +235 -0
- package/src/cli/cmd/tui/context/theme/slate.json +233 -0
- package/src/cli/cmd/tui/context/theme/soft.json +235 -0
- package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
- package/src/cli/cmd/tui/context/theme/spectrum.json +235 -0
- package/src/cli/cmd/tui/context/theme/starlight.json +233 -0
- package/src/cli/cmd/tui/context/theme/sunrise.json +235 -0
- package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
- package/src/cli/cmd/tui/context/theme/tech.json +235 -0
- package/src/cli/cmd/tui/context/theme/tokyonight-storm.json +245 -0
- package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
- package/src/cli/cmd/tui/context/theme/vapor.json +235 -0
- package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
- package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
- package/src/cli/cmd/tui/context/theme/vivid.json +232 -0
- package/src/cli/cmd/tui/context/theme/void.json +235 -0
- package/src/cli/cmd/tui/context/theme/vscode.json +235 -0
- package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
- package/src/cli/cmd/tui/context/theme/zinc.json +236 -0
- package/src/cli/cmd/tui/context/theme.tsx +1303 -0
- package/src/cli/cmd/tui/event.ts +48 -0
- package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +152 -0
- package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +50 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +63 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +62 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +93 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +66 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +96 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +48 -0
- package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +288 -0
- package/src/cli/cmd/tui/plugin/api.tsx +407 -0
- package/src/cli/cmd/tui/plugin/index.ts +3 -0
- package/src/cli/cmd/tui/plugin/internal.ts +25 -0
- package/src/cli/cmd/tui/plugin/runtime.ts +1048 -0
- package/src/cli/cmd/tui/plugin/slots.tsx +61 -0
- package/src/cli/cmd/tui/routes/home.tsx +153 -0
- package/src/cli/cmd/tui/routes/session/dbedit.tsx +474 -0
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +65 -0
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +110 -0
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +105 -0
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/footer.tsx +75 -0
- package/src/cli/cmd/tui/routes/session/header.tsx +177 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +2280 -0
- package/src/cli/cmd/tui/routes/session/permission.tsx +540 -0
- package/src/cli/cmd/tui/routes/session/question.tsx +435 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +313 -0
- package/src/cli/cmd/tui/thread.ts +174 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +204 -0
- package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +102 -0
- package/src/cli/cmd/tui/ui/dialog-select.tsx +389 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +180 -0
- package/src/cli/cmd/tui/ui/link.tsx +34 -0
- package/src/cli/cmd/tui/ui/spinner.ts +368 -0
- package/src/cli/cmd/tui/ui/toast.tsx +138 -0
- package/src/cli/cmd/tui/util/clipboard.ts +154 -0
- package/src/cli/cmd/tui/util/editor.ts +32 -0
- package/src/cli/cmd/tui/util/signal.ts +7 -0
- package/src/cli/cmd/tui/util/terminal.ts +114 -0
- package/src/cli/cmd/tui/util/transcript.ts +98 -0
- package/src/cli/cmd/tui/win32.ts +110 -0
- package/src/cli/cmd/tui/worker.ts +156 -0
- package/src/cli/cmd/uninstall.ts +357 -0
- package/src/cli/cmd/upgrade.ts +72 -0
- package/src/cli/cmd/web.ts +87 -0
- package/src/cli/cmd/workspace-serve.ts +16 -0
- package/src/cli/error.ts +57 -0
- package/src/cli/network.ts +55 -0
- package/src/cli/remote/index.ts +36 -0
- package/src/cli/remote/notifications.ts +104 -0
- package/src/cli/remote/qr-renderer.ts +86 -0
- package/src/cli/remote/remote-service.ts +757 -0
- package/src/cli/remote/session-manager.ts +284 -0
- package/src/cli/remote/subagent-hooks.ts +151 -0
- package/src/cli/remote/types.ts +121 -0
- package/src/cli/ui.ts +96 -0
- package/src/cli/upgrade.ts +25 -0
- package/src/command/index.ts +174 -0
- package/src/command/template/initialize.txt +10 -0
- package/src/command/template/review.txt +99 -0
- package/src/config/config.ts +1760 -0
- package/src/config/markdown.ts +88 -0
- package/src/config/migrate-tui-config.ts +155 -0
- package/src/config/paths.ts +174 -0
- package/src/config/tui-schema.ts +36 -0
- package/src/config/tui.ts +209 -0
- package/src/connectors/api/base.ts +75 -0
- package/src/connectors/api/figma.ts +103 -0
- package/src/connectors/api/github.ts +247 -0
- package/src/connectors/api/lovable.ts +126 -0
- package/src/connectors/api/slack.ts +137 -0
- package/src/connectors/auth.ts +68 -0
- package/src/connectors/cache.ts +119 -0
- package/src/connectors/credentials.ts +81 -0
- package/src/connectors/index.ts +202 -0
- package/src/connectors/registry.ts +358 -0
- package/src/docs/context.ts +120 -0
- package/src/docs/library.ts +189 -0
- package/src/env/index.ts +26 -0
- package/src/file/ignore.ts +83 -0
- package/src/file/index.ts +411 -0
- package/src/file/ripgrep.ts +402 -0
- package/src/file/time.ts +65 -0
- package/src/file/watcher.ts +127 -0
- package/src/flag/flag.ts +128 -0
- package/src/format/formatter.ts +356 -0
- package/src/format/index.ts +137 -0
- package/src/global/index.ts +57 -0
- package/src/id/id.ts +83 -0
- package/src/ide/index.ts +76 -0
- package/src/index.ts +184 -0
- package/src/installation/index.ts +246 -0
- package/src/lsp/client.ts +250 -0
- package/src/lsp/index.ts +483 -0
- package/src/lsp/language.ts +119 -0
- package/src/lsp/server.ts +2046 -0
- package/src/mcp/auth.ts +121 -0
- package/src/mcp/index.ts +860 -0
- package/src/mcp/oauth-callback.ts +198 -0
- package/src/mcp/oauth-provider.ts +148 -0
- package/src/mobile/auth.ts +97 -0
- package/src/mobile/github-repo.ts +185 -0
- package/src/patch/index.ts +631 -0
- package/src/permission/arity.ts +150 -0
- package/src/permission/dbedit.ts +236 -0
- package/src/permission/index.ts +210 -0
- package/src/permission/next.ts +287 -0
- package/src/plugin/codex.ts +493 -0
- package/src/plugin/copilot.ts +261 -0
- package/src/plugin/index.ts +714 -0
- package/src/plugin/install.ts +379 -0
- package/src/plugin/meta.ts +165 -0
- package/src/plugin/shared.ts +188 -0
- package/src/project/bootstrap.ts +35 -0
- package/src/project/instance.ts +84 -0
- package/src/project/project.ts +373 -0
- package/src/project/state.ts +66 -0
- package/src/project/vcs.ts +76 -0
- package/src/prompt/stash-store.ts +93 -0
- package/src/provider/auth.ts +147 -0
- package/src/provider/models-macro.ts +22 -0
- package/src/provider/models.ts +216 -0
- package/src/provider/provider.ts +1483 -0
- package/src/provider/sdk/openai-compatible/src/README.md +5 -0
- package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
- package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +100 -0
- package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
- package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1732 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
- package/src/provider/transform.ts +828 -0
- package/src/pty/index.ts +241 -0
- package/src/question/index.ts +171 -0
- package/src/rag/chunk.ts +43 -0
- package/src/rag/embed.ts +179 -0
- package/src/rag/index.ts +376 -0
- package/src/rag/storage.ts +76 -0
- package/src/scheduler/index.ts +61 -0
- package/src/server/error.ts +36 -0
- package/src/server/event.ts +7 -0
- package/src/server/mdns.ts +59 -0
- package/src/server/routes/chatbot.ts +205 -0
- package/src/server/routes/companion.ts +729 -0
- package/src/server/routes/config.ts +92 -0
- package/src/server/routes/connectors.ts +121 -0
- package/src/server/routes/dbedit.ts +76 -0
- package/src/server/routes/experimental.ts +210 -0
- package/src/server/routes/file.ts +197 -0
- package/src/server/routes/global.ts +135 -0
- package/src/server/routes/mcp.ts +225 -0
- package/src/server/routes/mobile.ts +2044 -0
- package/src/server/routes/permission.ts +68 -0
- package/src/server/routes/project.ts +82 -0
- package/src/server/routes/provider.ts +235 -0
- package/src/server/routes/pty.ts +169 -0
- package/src/server/routes/question.ts +98 -0
- package/src/server/routes/session.ts +968 -0
- package/src/server/routes/tui.ts +379 -0
- package/src/server/routes/workspace.ts +104 -0
- package/src/server/server.ts +761 -0
- package/src/server/ssh.ts +207 -0
- package/src/session/auth.ts +402 -0
- package/src/session/compaction.ts +253 -0
- package/src/session/generate.ts +38 -0
- package/src/session/index.ts +598 -0
- package/src/session/llm.ts +273 -0
- package/src/session/message-v2.ts +836 -0
- package/src/session/message.ts +189 -0
- package/src/session/processor.ts +408 -0
- package/src/session/prompt/anthropic-20250930.txt +165 -0
- package/src/session/prompt/anthropic.txt +105 -0
- package/src/session/prompt/anthropic_spoof.txt +1 -0
- package/src/session/prompt/beast.txt +147 -0
- package/src/session/prompt/build-switch.txt +5 -0
- package/src/session/prompt/codex_header.txt +79 -0
- package/src/session/prompt/copilot-gpt-5.txt +143 -0
- package/src/session/prompt/gemini.txt +155 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
- package/src/session/prompt/plan.txt +25 -0
- package/src/session/prompt/qwen.txt +108 -0
- package/src/session/prompt.ts +1942 -0
- package/src/session/retry.ts +90 -0
- package/src/session/revert.ts +120 -0
- package/src/session/stats.ts +404 -0
- package/src/session/status.ts +84 -0
- package/src/session/summary.ts +184 -0
- package/src/session/system.ts +195 -0
- package/src/session/toast.tsx +105 -0
- package/src/session/todo.ts +258 -0
- package/src/session/uninstall.ts +357 -0
- package/src/share/share-next.ts +421 -0
- package/src/share/share.ts +92 -0
- package/src/shell/shell.ts +65 -0
- package/src/skill/index.ts +1 -0
- package/src/skill/skill.ts +232 -0
- package/src/snapshot/index.ts +297 -0
- package/src/storage/storage.ts +227 -0
- package/src/tool/apply_patch.ts +288 -0
- package/src/tool/apply_patch.txt +33 -0
- package/src/tool/bash.ts +252 -0
- package/src/tool/bash.txt +115 -0
- package/src/tool/batch.ts +175 -0
- package/src/tool/batch.txt +24 -0
- package/src/tool/codesearch.ts +132 -0
- package/src/tool/codesearch.txt +12 -0
- package/src/tool/context_collect.ts +152 -0
- package/src/tool/context_collect.txt +9 -0
- package/src/tool/context_diagnostics.ts +81 -0
- package/src/tool/context_diagnostics.txt +5 -0
- package/src/tool/context_related.ts +117 -0
- package/src/tool/context_related.txt +5 -0
- package/src/tool/context_search.ts +108 -0
- package/src/tool/context_search.txt +8 -0
- package/src/tool/db-diff.ts +434 -0
- package/src/tool/db-table.txt +15 -0
- package/src/tool/docs_add.ts +50 -0
- package/src/tool/docs_add.txt +5 -0
- package/src/tool/docs_context.ts +56 -0
- package/src/tool/docs_context.txt +4 -0
- package/src/tool/docs_gap_report.ts +79 -0
- package/src/tool/docs_gap_report.txt +7 -0
- package/src/tool/docs_load.ts +41 -0
- package/src/tool/docs_load.txt +4 -0
- package/src/tool/docs_request.ts +129 -0
- package/src/tool/docs_request.txt +7 -0
- package/src/tool/docs_search.ts +51 -0
- package/src/tool/docs_search.txt +6 -0
- package/src/tool/docs_unload.ts +38 -0
- package/src/tool/docs_unload.txt +5 -0
- package/src/tool/edit.ts +614 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/external-directory.ts +32 -0
- package/src/tool/generate_image.ts +174 -0
- package/src/tool/generate_image.txt +12 -0
- package/src/tool/glob.ts +79 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +153 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/invalid.ts +17 -0
- package/src/tool/ls.ts +116 -0
- package/src/tool/ls.txt +1 -0
- package/src/tool/lsp.ts +96 -0
- package/src/tool/lsp.txt +19 -0
- package/src/tool/memory_search.ts +141 -0
- package/src/tool/memory_search.txt +8 -0
- package/src/tool/multiedit.ts +46 -0
- package/src/tool/multiedit.txt +41 -0
- package/src/tool/plan-enter.txt +14 -0
- package/src/tool/plan-exit.txt +13 -0
- package/src/tool/plan.ts +130 -0
- package/src/tool/question.ts +33 -0
- package/src/tool/question.txt +10 -0
- package/src/tool/rag_index.ts +77 -0
- package/src/tool/rag_index.txt +10 -0
- package/src/tool/rag_reset.ts +26 -0
- package/src/tool/rag_reset.txt +4 -0
- package/src/tool/rag_search.ts +62 -0
- package/src/tool/rag_search.txt +6 -0
- package/src/tool/rag_status.ts +45 -0
- package/src/tool/rag_status.txt +4 -0
- package/src/tool/read.ts +203 -0
- package/src/tool/read.txt +12 -0
- package/src/tool/registry.ts +214 -0
- package/src/tool/skill.ts +169 -0
- package/src/tool/skill.txt +3 -0
- package/src/tool/smart_docs.ts +74 -0
- package/src/tool/smart_docs.txt +7 -0
- package/src/tool/speak/elevenlabs.ts +201 -0
- package/src/tool/speak/openrouter.ts +240 -0
- package/src/tool/speak/provider.ts +83 -0
- package/src/tool/speak.ts +440 -0
- package/src/tool/task.ts +194 -0
- package/src/tool/task.txt +60 -0
- package/src/tool/todo.ts +53 -0
- package/src/tool/todoread.txt +14 -0
- package/src/tool/todowrite.txt +167 -0
- package/src/tool/tool.ts +87 -0
- package/src/tool/tree.ts +218 -0
- package/src/tool/tree.txt +8 -0
- package/src/tool/truncation.ts +106 -0
- package/src/tool/use-connector.ts +47 -0
- package/src/tool/voice.ts +188 -0
- package/src/tool/webfetch.ts +205 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch.ts +150 -0
- package/src/tool/websearch.txt +14 -0
- package/src/tool/write.ts +80 -0
- package/src/tool/write.txt +8 -0
- package/src/util/archive.ts +16 -0
- package/src/util/color.ts +19 -0
- package/src/util/context.ts +25 -0
- package/src/util/defer.ts +12 -0
- package/src/util/error.ts +77 -0
- package/src/util/eventloop.ts +20 -0
- package/src/util/filesystem.ts +125 -0
- package/src/util/flock.ts +329 -0
- package/src/util/fn.ts +11 -0
- package/src/util/format.ts +20 -0
- package/src/util/hash.ts +7 -0
- package/src/util/iife.ts +3 -0
- package/src/util/keybind.ts +103 -0
- package/src/util/lazy.ts +18 -0
- package/src/util/locale.ts +81 -0
- package/src/util/lock.ts +98 -0
- package/src/util/log.ts +180 -0
- package/src/util/network.ts +9 -0
- package/src/util/process.ts +15 -0
- package/src/util/queue.ts +32 -0
- package/src/util/record.ts +3 -0
- package/src/util/rpc.ts +66 -0
- package/src/util/scrap.ts +10 -0
- package/src/util/signal.ts +12 -0
- package/src/util/timeout.ts +14 -0
- package/src/util/token.ts +7 -0
- package/src/util/wildcard.ts +56 -0
- package/src/workspace/adaptors/index.ts +271 -0
- package/src/workspace/adaptors/types.ts +14 -0
- package/src/workspace/adaptors/worktree.ts +31 -0
- package/src/workspace/config.ts +19 -0
- package/src/workspace/index.ts +223 -0
- package/src/workspace/session-proxy-middleware.ts +97 -0
- package/src/workspace/sse.ts +66 -0
- package/src/workspace/workspace-context.ts +23 -0
- package/src/workspace/workspace-server/routes.ts +33 -0
- package/src/workspace/workspace-server/server.ts +47 -0
- package/src/worktree/index.ts +487 -0
- package/sst-env.d.ts +10 -0
- package/test/benchmark.test.ts +121 -0
- package/test/build-optimizations.test.ts +124 -0
- package/test/id-benchmark.test.ts +132 -0
- package/test/optimizations.test.ts +302 -0
- package/test/preload.ts +1 -0
- package/test/solidjs-benchmark.test.ts +262 -0
- package/test/solidjs-optimizations.test.ts +259 -0
- package/test/tui-benchmark.test.ts +230 -0
- package/test/wildcard-benchmark.test.ts +180 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
# Plan: Integrate PRs #19347 (TUI plugins) + #19467 (Single target entrypoints)
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
PRs #19347 and #19467 from `anomalyco/opencode` introduce a complete TUI plugin system:
|
|
6
|
+
- An extensible runtime that loads internal + external TUI plugins from `tui.json`
|
|
7
|
+
- Internal sidebar panels (context, MCP, LSP, todo, files, footer) rewritten as plugins
|
|
8
|
+
- A plugin manager dialog (install, enable/disable plugins)
|
|
9
|
+
- `opencode plugin <pkg>` / `opencode plug <pkg>` CLI command
|
|
10
|
+
- PR #19467 enforces single-target modules (`server` or `tui`, never both)
|
|
11
|
+
|
|
12
|
+
Target: integrate every change into `packages/nikcli/` with all import paths mapped to `@nikcli-ai/*`.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Import / Name Mapping
|
|
17
|
+
|
|
18
|
+
| opencode | nikcli |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `@opencode-ai/plugin/tui` | `@nikcli-ai/plugin/tui` |
|
|
21
|
+
| `@opencode-ai/plugin` | `@nikcli-ai/plugin` |
|
|
22
|
+
| `@opencode-ai/sdk/v2` | `@nikcli-ai/sdk/v2` |
|
|
23
|
+
| `createOpencodeClient` | `createNikcliClient` |
|
|
24
|
+
| `OpencodeClient` | `NikcliClient` |
|
|
25
|
+
| `Flag.OPENCODE_TUI_CONFIG` | `Flag.NIKCLI_TUI_CONFIG` (add to flag.ts) |
|
|
26
|
+
| `Flag.OPENCODE_PURE` | `Flag.NIKCLI_PURE` (add to flag.ts) |
|
|
27
|
+
| `Flag.OPENCODE_PLUGIN_META_FILE` | `Flag.NIKCLI_PLUGIN_META_FILE` (add to flag.ts) |
|
|
28
|
+
| `Flag.OPENCODE_DISABLE_PROJECT_CONFIG` | `Flag.NIKCLI_DISABLE_PROJECT_CONFIG` ✓ |
|
|
29
|
+
| `Flag.OPENCODE_CONFIG_DIR` | `Flag.NIKCLI_CONFIG_DIR` ✓ |
|
|
30
|
+
| `"OpenCode"` text in UI | `"NikCLI"` |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Phase 1 – New Infrastructure Files (no UI dependencies)
|
|
35
|
+
|
|
36
|
+
### 1.1 `src/util/network.ts` _(new)_
|
|
37
|
+
Export two functions:
|
|
38
|
+
```ts
|
|
39
|
+
export function online(): boolean // reads navigator.onLine, defaults true
|
|
40
|
+
export function proxied(): boolean // checks HTTP_PROXY env vars
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 1.2 `src/util/flock.ts` _(new)_
|
|
44
|
+
Used by `plugin/meta.ts` and `plugin/install.ts`. Implements advisory file locking:
|
|
45
|
+
```ts
|
|
46
|
+
export namespace Flock {
|
|
47
|
+
export async function withLock<T>(key: string, fn: () => Promise<T>): Promise<T>
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
Fetch from opencode: `src/util/flock.ts`.
|
|
51
|
+
|
|
52
|
+
### 1.3 `src/bun/registry.ts` _(new)_
|
|
53
|
+
Fetch full file from `anomalyco/opencode`. Add `online()` guard at top of `info()`.
|
|
54
|
+
Key exports: `PackageRegistry.info`, `PackageRegistry.isOutdated`.
|
|
55
|
+
|
|
56
|
+
### 1.4 `src/plugin/shared.ts` _(new)_
|
|
57
|
+
Full content from opencode (already fetched). Contains:
|
|
58
|
+
- `readV1Plugin` (enforces single-target, from PR #19467)
|
|
59
|
+
- `readPluginId`, `resolvePluginId`, `pluginSource`, `parsePluginSpecifier`
|
|
60
|
+
- `resolvePluginTarget`, `resolvePluginEntrypoint`, `checkPluginCompatibility`
|
|
61
|
+
- `isDeprecatedPlugin`
|
|
62
|
+
Replace package name in any log strings where relevant.
|
|
63
|
+
|
|
64
|
+
### 1.5 `src/plugin/meta.ts` _(new)_
|
|
65
|
+
Full content from opencode (already fetched). `PluginMeta` namespace.
|
|
66
|
+
Replace `Flag.OPENCODE_PLUGIN_META_FILE` → `Flag.NIKCLI_PLUGIN_META_FILE`.
|
|
67
|
+
|
|
68
|
+
### 1.6 `src/plugin/install.ts` _(new)_
|
|
69
|
+
Full content from opencode (already fetched). Exports `installPlugin`, `readPluginManifest`, `patchPluginConfig`.
|
|
70
|
+
|
|
71
|
+
### 1.7 `src/config/tui-schema.ts` _(new)_
|
|
72
|
+
Fetch from `anomalyco/opencode`. Zod schema for `tui.json`.
|
|
73
|
+
|
|
74
|
+
### 1.8 `src/config/migrate-tui-config.ts` _(new)_
|
|
75
|
+
Fetch from `anomalyco/opencode`. Migrates old opencode.json `tui` block to `tui.json`.
|
|
76
|
+
|
|
77
|
+
### 1.9 `src/config/paths.ts` _(new)_
|
|
78
|
+
Fetch from `anomalyco/opencode`. Utilities: `ConfigPaths.projectFiles`, `ConfigPaths.directories`, `ConfigPaths.fileInDirectory`, `ConfigPaths.readFile`, `ConfigPaths.parseText`.
|
|
79
|
+
|
|
80
|
+
### 1.10 `src/config/tui.ts` _(new)_
|
|
81
|
+
Full content from opencode. `TuiConfig` namespace: `get()`, `waitForDependencies()`, `PluginMeta` type.
|
|
82
|
+
Replace `Flag.OPENCODE_TUI_CONFIG` → `Flag.NIKCLI_TUI_CONFIG`, `Flag.OPENCODE_CONFIG_DIR` → `Flag.NIKCLI_CONFIG_DIR`, `Flag.OPENCODE_DISABLE_PROJECT_CONFIG` → `Flag.NIKCLI_DISABLE_PROJECT_CONFIG`.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Phase 2 – `packages/plugin` Package Updates
|
|
87
|
+
|
|
88
|
+
### 2.1 `packages/plugin/src/index.ts` _(modify)_
|
|
89
|
+
Update `PluginModule`:
|
|
90
|
+
```ts
|
|
91
|
+
export type PluginModule = {
|
|
92
|
+
id?: string
|
|
93
|
+
server: Plugin // was optional, now required
|
|
94
|
+
tui?: never // new — prevents dual-target modules
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 2.2 `packages/plugin/src/tui.ts` _(new)_
|
|
99
|
+
Create full TUI plugin type definitions. Key types:
|
|
100
|
+
- `TuiPlugin`, `TuiPluginModule` (target-exclusive: has `tui`, `server?: never`)
|
|
101
|
+
- `TuiPluginApi` (full surface: command, route, ui, keybind, kv, state, theme, client, event, renderer, slots, plugins, lifecycle, app)
|
|
102
|
+
- `TuiPluginMeta`, `TuiPluginStatus`, `TuiPluginInstallResult`
|
|
103
|
+
- `TuiSlotMap` (app, home_logo, home_bottom, sidebar_title, sidebar_content, sidebar_footer)
|
|
104
|
+
- `TuiDialogPromptProps` — add `busy?: boolean`, `busyText?: string`
|
|
105
|
+
- `TuiThemeCurrent` type (used by theme context refactor)
|
|
106
|
+
Import from `@nikcli-ai/sdk/v2` instead of `@opencode-ai/sdk/v2`.
|
|
107
|
+
|
|
108
|
+
### 2.3 `packages/plugin/package.json` _(modify)_
|
|
109
|
+
Add `./tui` export:
|
|
110
|
+
```json
|
|
111
|
+
"./tui": "./src/tui.ts"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Phase 3 – Modify Existing Source Files
|
|
117
|
+
|
|
118
|
+
### 3.1 `src/flag/flag.ts` _(modify)_
|
|
119
|
+
Add three new flags:
|
|
120
|
+
```ts
|
|
121
|
+
export const NIKCLI_TUI_CONFIG = process.env["NIKCLI_TUI_CONFIG"]
|
|
122
|
+
export const NIKCLI_PURE = truthy("NIKCLI_PURE")
|
|
123
|
+
export const NIKCLI_PLUGIN_META_FILE = process.env["NIKCLI_PLUGIN_META_FILE"]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 3.2 `src/bun/index.ts` _(modify)_
|
|
127
|
+
Apply PR #19347 diff:
|
|
128
|
+
- Replace `import { proxied } from "@/util/proxied"` → `import { online, proxied } from "@/util/network"`
|
|
129
|
+
- Fix version-check ordering: `latest` branch checks `online()` before `PackageRegistry.isOutdated`
|
|
130
|
+
- Reorder: check `cachedVersion === version` before `version === "latest"` branch
|
|
131
|
+
|
|
132
|
+
### 3.3 `src/plugin/index.ts` _(modify)_
|
|
133
|
+
Apply PR #19467 diff:
|
|
134
|
+
- Remove `getDefaultPlugin` import, add `readV1Plugin`, `readPluginId`, `resolvePluginId`, `readPluginPackage` imports from `./shared`
|
|
135
|
+
- Add `target` and `source` fields to `Loaded` type
|
|
136
|
+
- In `loadPlugin`: capture `source = pluginSource(spec)`, pass `target` and `source` into `Loaded`
|
|
137
|
+
- In `applyPlugin`: replace `getDefaultPlugin` call with `readV1Plugin(mod, spec, "server", "detect")`; after detection call `resolvePluginId` before applying hooks
|
|
138
|
+
|
|
139
|
+
### 3.4 `src/cli/cmd/tui/context/route.tsx` _(modify)_
|
|
140
|
+
Add `PluginRoute` type and expand `Route` union:
|
|
141
|
+
```ts
|
|
142
|
+
export type PluginRoute = { type: "plugin"; id: string; data?: Record<string, unknown> }
|
|
143
|
+
export type Route = HomeRoute | SessionRoute | PluginRoute
|
|
144
|
+
```
|
|
145
|
+
Remove `console.log("navigate", route)` from `navigate()`.
|
|
146
|
+
|
|
147
|
+
### 3.5 `src/cli/cmd/tui/context/sdk.tsx` _(modify)_
|
|
148
|
+
Expose `workspaceID` getter on the returned context object (needed by plugin API):
|
|
149
|
+
```ts
|
|
150
|
+
get workspaceID() { return workspaceID }
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 3.6 `src/cli/cmd/tui/context/keybind.tsx` _(modify)_
|
|
154
|
+
Change `match` and `print` signatures from `keyof KeybindsConfig` to `string` so plugins can pass arbitrary keybind strings:
|
|
155
|
+
```ts
|
|
156
|
+
match(key: string, evt: ParsedKey) {
|
|
157
|
+
const list = keybinds()[key] ?? Keybind.parse(key)
|
|
158
|
+
...
|
|
159
|
+
}
|
|
160
|
+
print(key: string) {
|
|
161
|
+
const first = keybinds()[key]?.at(0) ?? Keybind.parse(key).at(0)
|
|
162
|
+
...
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 3.7 `src/cli/cmd/tui/context/exit.tsx` _(modify)_
|
|
167
|
+
Add `onBeforeExit?: () => Promise<void>` to init input; call it before renderer teardown.
|
|
168
|
+
|
|
169
|
+
### 3.8 `src/cli/cmd/tui/context/theme.tsx` _(modify)_
|
|
170
|
+
Add `isRecord` import and `TuiThemeCurrent` type import from `@nikcli-ai/plugin/tui`.
|
|
171
|
+
Remove the local `ThemeColors` type definition (now replaced by `TuiThemeCurrent`).
|
|
172
|
+
Export `addTheme(name: string, data: unknown): void` and `hasTheme(name: string): boolean` functions for use by the plugin theme installer.
|
|
173
|
+
|
|
174
|
+
### 3.9 `src/cli/cmd/tui/component/dialog-command.tsx` _(modify)_
|
|
175
|
+
- Change `keybind?: KeybindKey` → `keybind?: string` on `CommandOption`
|
|
176
|
+
- Remove `KeybindKey` import
|
|
177
|
+
- Add `getOwner` / `runWithOwner` to solid-js imports; use them in `register()` so plugin commands survive outside Solid owner context
|
|
178
|
+
- Add `Show` to solid-js imports
|
|
179
|
+
|
|
180
|
+
### 3.10 `src/cli/cmd/tui/component/dialog-status.tsx` _(modify)_
|
|
181
|
+
Handle tuple plugin specs (`[spec, options]` format) by extracting the string spec:
|
|
182
|
+
```ts
|
|
183
|
+
const value = typeof item === "string" ? item : item[0]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 3.11 `src/cli/cmd/tui/component/dialog-workspace-list.tsx` _(modify)_
|
|
187
|
+
Extract `scoped()` helper function (creates `createNikcliClient` bound to a workspace) and reuse it in two places instead of inline object creation.
|
|
188
|
+
|
|
189
|
+
### 3.12 `src/cli/cmd/tui/ui/dialog-prompt.tsx` _(modify)_
|
|
190
|
+
Apply PR diff fully:
|
|
191
|
+
- Add `busy?: boolean` and `busyText?: string` to `DialogPromptProps`
|
|
192
|
+
- Import `Spinner` from `../component/spinner`
|
|
193
|
+
- Import `Show`, `createEffect` from solid-js
|
|
194
|
+
- When `busy=true`: block all keyboard input (except escape no-op), blur textarea, show `<Spinner>` and "processing..." hint
|
|
195
|
+
- `createEffect` re-focuses/blurs textarea reactively based on `busy`
|
|
196
|
+
- Mute text colors when busy
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Phase 4 – New TUI Components
|
|
201
|
+
|
|
202
|
+
### 4.1 `src/cli/cmd/tui/component/spinner.tsx` _(new)_
|
|
203
|
+
Minimal spinner component using `opentui-spinner/solid`. Shows animated spinner frames + optional text label. Respects `kv.get("animations_enabled", true)` fallback.
|
|
204
|
+
|
|
205
|
+
### 4.2 `src/cli/cmd/tui/component/error-component.tsx` _(new)_
|
|
206
|
+
Full-screen error display extracted from `app.tsx`. Used by `ErrorBoundary`. Handles Ctrl+C exit, clipboard copy of error.
|
|
207
|
+
|
|
208
|
+
### 4.3 `src/cli/cmd/tui/component/plugin-route-missing.tsx` _(new)_
|
|
209
|
+
Fallback screen shown for unknown plugin route IDs. Shows warning + "go home" button.
|
|
210
|
+
|
|
211
|
+
### 4.4 `src/cli/cmd/tui/component/startup-loading.tsx` _(new)_
|
|
212
|
+
Animated loading overlay that appears only if startup takes >threshold ms. Shows "Loading plugins..." or "Finishing startup..." spinner.
|
|
213
|
+
|
|
214
|
+
### 4.5 `src/cli/cmd/tui/context/plugin-keybinds.ts` _(new)_
|
|
215
|
+
`createPluginKeybind(base, defaults, overrides?)` utility. Returns a plugin-local keybind set (`all`, `get`, `match`, `print`).
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Phase 5 – TUI Plugin Infrastructure
|
|
220
|
+
|
|
221
|
+
### 5.1 `src/cli/cmd/tui/plugin/slots.tsx` _(new)_
|
|
222
|
+
Slot registry wrapper. Exports `setupSlots`, `Slot` (view component), `HostPluginApi`, `HostSlots`.
|
|
223
|
+
Replace `@opencode-ai/plugin/tui` → `@nikcli-ai/plugin/tui`.
|
|
224
|
+
|
|
225
|
+
### 5.2 `src/cli/cmd/tui/plugin/api.tsx` _(new)_
|
|
226
|
+
Full TUI plugin API factory (406 lines). `createTuiApi(input)` returns the full `TuiPluginApi` surface exposed to plugins.
|
|
227
|
+
Replace `createOpencodeClient` → `createNikcliClient`, `OpencodeClient` → `NikcliClient`, `@opencode-ai/*` → `@nikcli-ai/*`.
|
|
228
|
+
|
|
229
|
+
### 5.3 `src/cli/cmd/tui/plugin/runtime.ts` _(new)_
|
|
230
|
+
Main TUI plugin runtime (972 lines). Handles load/init/dispose of internal + external plugins.
|
|
231
|
+
Apply PR #19467 diff: replace `getDefaultPlugin` call with `readV1Plugin(raw, spec, "tui")`.
|
|
232
|
+
Replace all `@opencode-ai/*` → `@nikcli-ai/*`, `Flag.OPENCODE_PURE` → `Flag.NIKCLI_PURE`.
|
|
233
|
+
|
|
234
|
+
### 5.4 `src/cli/cmd/tui/plugin/internal.ts` _(new)_
|
|
235
|
+
Lists all 8 internal plugins:
|
|
236
|
+
```ts
|
|
237
|
+
export const INTERNAL_TUI_PLUGINS: InternalTuiPlugin[] = [
|
|
238
|
+
HomeTips, SidebarContext, SidebarMcp, SidebarLsp,
|
|
239
|
+
SidebarTodo, SidebarFiles, SidebarFooter, PluginManager,
|
|
240
|
+
]
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 5.5 `src/cli/cmd/tui/plugin/index.ts` _(new)_
|
|
244
|
+
Re-exports `TuiPluginRuntime`, `createTuiApi`, `RouteMap`.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Phase 6 – Feature Plugins
|
|
249
|
+
|
|
250
|
+
All files in `src/cli/cmd/tui/feature-plugins/`. Replace `@opencode-ai/*` → `@nikcli-ai/*`. Apply PR #19467 typed export pattern (`const plugin: TuiPluginModule & { id: string } = { id, tui }; export default plugin`).
|
|
251
|
+
|
|
252
|
+
### 6.1 `src/cli/cmd/tui/feature-plugins/home/tips-view.tsx` _(new — renamed from `component/tips.tsx`)_
|
|
253
|
+
Move existing `src/cli/cmd/tui/component/tips.tsx` to this path; remove unused `createMemo`, `createSignal` imports (PR diff: only `For` needed).
|
|
254
|
+
|
|
255
|
+
### 6.2 `src/cli/cmd/tui/feature-plugins/home/tips.tsx` _(new)_
|
|
256
|
+
`internal:home-tips` plugin. Registers `tips.toggle` command + `home_bottom` slot.
|
|
257
|
+
|
|
258
|
+
### 6.3 `src/cli/cmd/tui/feature-plugins/sidebar/context.tsx` _(new)_
|
|
259
|
+
`internal:sidebar-context` plugin. Shows token count, context %, and cost.
|
|
260
|
+
Replace `AssistantMessage` import with `@nikcli-ai/sdk/v2`.
|
|
261
|
+
|
|
262
|
+
### 6.4 `src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx` _(new)_
|
|
263
|
+
`internal:sidebar-mcp` plugin. Shows MCP server list with status dots (order 200).
|
|
264
|
+
|
|
265
|
+
### 6.5 `src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx` _(new)_
|
|
266
|
+
`internal:sidebar-lsp` plugin. Shows LSP server list (order 300).
|
|
267
|
+
|
|
268
|
+
### 6.6 `src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx` _(new)_
|
|
269
|
+
`internal:sidebar-todo` plugin. Shows todo items (order 400). Imports `TodoItem` from `../../component/todo-item`.
|
|
270
|
+
|
|
271
|
+
### 6.7 `src/cli/cmd/tui/feature-plugins/sidebar/files.tsx` _(new)_
|
|
272
|
+
`internal:sidebar-files` plugin. Shows modified files with diff stats (order 500).
|
|
273
|
+
|
|
274
|
+
### 6.8 `src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx` _(new)_
|
|
275
|
+
`internal:sidebar-footer` plugin. Shows "Getting started" panel + path + version.
|
|
276
|
+
Update branding text: "OpenCode includes free models" → "NikCLI includes free models" etc.
|
|
277
|
+
|
|
278
|
+
### 6.9 `src/cli/cmd/tui/feature-plugins/system/plugins.tsx` _(new)_
|
|
279
|
+
`internal:plugin-manager` plugin. Full plugin manager dialog with install prompt, enable/disable toggle.
|
|
280
|
+
Add `busy`/`busyText` props to `DialogPrompt` usage (PR #19467 addition). Replace `@opencode-ai/*` → `@nikcli-ai/*`.
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Phase 7 – `app.tsx` Integration
|
|
285
|
+
|
|
286
|
+
`src/cli/cmd/tui/app.tsx` _(modify)_
|
|
287
|
+
|
|
288
|
+
Changes from PR #19347 diff:
|
|
289
|
+
1. Import `TimeToFirstDraw` from `@opentui/solid`
|
|
290
|
+
2. Import `createCliRenderer`, `CliRendererConfig` from `@opentui/core` (replace `TextAttributes`)
|
|
291
|
+
3. Add imports: `ErrorComponent`, `PluginRouteMissing`, `StartupLoading`, `useKeybind`
|
|
292
|
+
4. Remove `win32FlushInputBuffer` from win32 imports (moved to error-component)
|
|
293
|
+
5. Add solid-js: `createMemo`, `onCleanup`; remove `untrack`
|
|
294
|
+
6. Add `TuiPluginRuntime`, `createTuiApi`, `RouteMap` imports from `./plugin`
|
|
295
|
+
7. Initialize `TuiPluginRuntime` after SDK/sync are ready; pass `createTuiApi(...)` to it
|
|
296
|
+
8. Add `routes: RouteMap` reactive signal and pass to plugin API
|
|
297
|
+
9. Add `PluginRoute` handling in main `Switch/Match`: render last registered route or `<PluginRouteMissing>`
|
|
298
|
+
10. Wrap `ErrorBoundary` to use `<ErrorComponent>` instead of inline error JSX
|
|
299
|
+
11. Add `<StartupLoading>` overlay while plugins are initializing
|
|
300
|
+
12. Pass `onBeforeExit` to `ExitProvider` that calls `TuiPluginRuntime.dispose()`
|
|
301
|
+
13. Register plugin keybind `plugin_manager` in command system
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Phase 8 – CLI `plug` Command
|
|
306
|
+
|
|
307
|
+
### 8.1 `src/cli/cmd/plug.ts` _(new)_
|
|
308
|
+
Full implementation from PR diff (231 lines). `opencode plugin <module>` and `opencode plug <module>` commands.
|
|
309
|
+
Replace all `opencode` references with `nikcli` where appropriate in log/UI text.
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Critical Files Summary
|
|
314
|
+
|
|
315
|
+
| File | Action |
|
|
316
|
+
|---|---|
|
|
317
|
+
| `src/util/network.ts` | Create |
|
|
318
|
+
| `src/util/flock.ts` | Create (fetch from opencode) |
|
|
319
|
+
| `src/bun/registry.ts` | Create |
|
|
320
|
+
| `src/bun/index.ts` | Modify |
|
|
321
|
+
| `src/plugin/shared.ts` | Create |
|
|
322
|
+
| `src/plugin/meta.ts` | Create |
|
|
323
|
+
| `src/plugin/install.ts` | Create |
|
|
324
|
+
| `src/plugin/index.ts` | Modify |
|
|
325
|
+
| `src/config/tui-schema.ts` | Create (fetch from opencode) |
|
|
326
|
+
| `src/config/migrate-tui-config.ts` | Create (fetch from opencode) |
|
|
327
|
+
| `src/config/paths.ts` | Create (fetch from opencode) |
|
|
328
|
+
| `src/config/tui.ts` | Create |
|
|
329
|
+
| `src/flag/flag.ts` | Modify (3 new flags) |
|
|
330
|
+
| `packages/plugin/src/index.ts` | Modify |
|
|
331
|
+
| `packages/plugin/src/tui.ts` | Create |
|
|
332
|
+
| `packages/plugin/package.json` | Modify |
|
|
333
|
+
| `src/cli/cmd/tui/context/route.tsx` | Modify |
|
|
334
|
+
| `src/cli/cmd/tui/context/sdk.tsx` | Modify |
|
|
335
|
+
| `src/cli/cmd/tui/context/keybind.tsx` | Modify |
|
|
336
|
+
| `src/cli/cmd/tui/context/exit.tsx` | Modify |
|
|
337
|
+
| `src/cli/cmd/tui/context/theme.tsx` | Modify |
|
|
338
|
+
| `src/cli/cmd/tui/context/plugin-keybinds.ts` | Create |
|
|
339
|
+
| `src/cli/cmd/tui/component/dialog-command.tsx` | Modify |
|
|
340
|
+
| `src/cli/cmd/tui/component/dialog-status.tsx` | Modify |
|
|
341
|
+
| `src/cli/cmd/tui/component/dialog-workspace-list.tsx` | Modify |
|
|
342
|
+
| `src/cli/cmd/tui/component/spinner.tsx` | Create |
|
|
343
|
+
| `src/cli/cmd/tui/component/error-component.tsx` | Create |
|
|
344
|
+
| `src/cli/cmd/tui/component/plugin-route-missing.tsx` | Create |
|
|
345
|
+
| `src/cli/cmd/tui/component/startup-loading.tsx` | Create |
|
|
346
|
+
| `src/cli/cmd/tui/plugin/slots.tsx` | Create |
|
|
347
|
+
| `src/cli/cmd/tui/plugin/runtime.ts` | Create |
|
|
348
|
+
| `src/cli/cmd/tui/plugin/api.tsx` | Create |
|
|
349
|
+
| `src/cli/cmd/tui/plugin/internal.ts` | Create |
|
|
350
|
+
| `src/cli/cmd/tui/plugin/index.ts` | Create |
|
|
351
|
+
| `src/cli/cmd/tui/feature-plugins/home/tips-view.tsx` | Create (move from component/tips.tsx) |
|
|
352
|
+
| `src/cli/cmd/tui/feature-plugins/home/tips.tsx` | Create |
|
|
353
|
+
| `src/cli/cmd/tui/feature-plugins/sidebar/context.tsx` | Create |
|
|
354
|
+
| `src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx` | Create |
|
|
355
|
+
| `src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx` | Create |
|
|
356
|
+
| `src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx` | Create |
|
|
357
|
+
| `src/cli/cmd/tui/feature-plugins/sidebar/files.tsx` | Create |
|
|
358
|
+
| `src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx` | Create |
|
|
359
|
+
| `src/cli/cmd/tui/feature-plugins/system/plugins.tsx` | Create |
|
|
360
|
+
| `src/cli/cmd/tui/ui/dialog-prompt.tsx` | Modify |
|
|
361
|
+
| `src/cli/cmd/tui/app.tsx` | Modify (major) |
|
|
362
|
+
| `src/cli/cmd/plug.ts` | Create |
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Verification
|
|
367
|
+
|
|
368
|
+
After all changes:
|
|
369
|
+
1. `bun typecheck` in `packages/nikcli/` — no type errors
|
|
370
|
+
2. `bun typecheck` in `packages/plugin/` — no type errors
|
|
371
|
+
3. Run the TUI: internal plugins should load and render sidebar panels as before
|
|
372
|
+
4. `nikcli plug @some-package` CLI command resolves without crash
|
|
373
|
+
5. Plugin manager dialog opens via command palette ("Plugins")
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# ACP (Agent Client Protocol) Implementation
|
|
2
|
+
|
|
3
|
+
This directory contains a clean, protocol-compliant implementation of the [Agent Client Protocol](https://agentclientprotocol.com/) for nikcli.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
The implementation follows a clean separation of concerns:
|
|
8
|
+
|
|
9
|
+
### Core Components
|
|
10
|
+
|
|
11
|
+
- **`agent.ts`** - Implements the `Agent` interface from `@agentclientprotocol/sdk`
|
|
12
|
+
- Handles initialization and capability negotiation
|
|
13
|
+
- Manages session lifecycle (`session/new`, `session/load`)
|
|
14
|
+
- Processes prompts and returns responses
|
|
15
|
+
- Properly implements ACP protocol v1
|
|
16
|
+
|
|
17
|
+
- **`client.ts`** - Implements the `Client` interface for client-side capabilities
|
|
18
|
+
- File operations (`readTextFile`, `writeTextFile`)
|
|
19
|
+
- Permission requests (auto-approves for now)
|
|
20
|
+
- Terminal support (stub implementation)
|
|
21
|
+
|
|
22
|
+
- **`session.ts`** - Session state management
|
|
23
|
+
- Creates and tracks ACP sessions
|
|
24
|
+
- Maps ACP sessions to internal nikcli sessions
|
|
25
|
+
- Maintains working directory context
|
|
26
|
+
- Handles MCP server configurations
|
|
27
|
+
|
|
28
|
+
- **`server.ts`** - ACP server startup and lifecycle
|
|
29
|
+
- Sets up JSON-RPC over stdio using the official library
|
|
30
|
+
- Manages graceful shutdown on SIGTERM/SIGINT
|
|
31
|
+
- Provides Instance context for the agent
|
|
32
|
+
|
|
33
|
+
- **`types.ts`** - Type definitions for internal use
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
### Command Line
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Start the ACP server in the current directory
|
|
41
|
+
nikcli acp
|
|
42
|
+
|
|
43
|
+
# Start in a specific directory
|
|
44
|
+
nikcli acp --cwd /path/to/project
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Programmatic
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { ACPServer } from "./acp/server"
|
|
51
|
+
|
|
52
|
+
await ACPServer.start()
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Integration with Zed
|
|
56
|
+
|
|
57
|
+
Add to your Zed configuration (`~/.config/zed/settings.json`):
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"agent_servers": {
|
|
62
|
+
"Nikcli": {
|
|
63
|
+
"command": "nikcli",
|
|
64
|
+
"args": ["acp"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Protocol Compliance
|
|
71
|
+
|
|
72
|
+
This implementation follows the ACP specification v1:
|
|
73
|
+
|
|
74
|
+
✅ **Initialization**
|
|
75
|
+
|
|
76
|
+
- Proper `initialize` request/response with protocol version negotiation
|
|
77
|
+
- Capability advertisement (`agentCapabilities`)
|
|
78
|
+
- Authentication support (stub)
|
|
79
|
+
|
|
80
|
+
✅ **Session Management**
|
|
81
|
+
|
|
82
|
+
- `session/new` - Create new conversation sessions
|
|
83
|
+
- `session/load` - Resume existing sessions (basic support)
|
|
84
|
+
- Working directory context (`cwd`)
|
|
85
|
+
- MCP server configuration support
|
|
86
|
+
|
|
87
|
+
✅ **Prompting**
|
|
88
|
+
|
|
89
|
+
- `session/prompt` - Process user messages
|
|
90
|
+
- Content block handling (text, resources)
|
|
91
|
+
- Response with stop reasons
|
|
92
|
+
|
|
93
|
+
✅ **Client Capabilities**
|
|
94
|
+
|
|
95
|
+
- File read/write operations
|
|
96
|
+
- Permission requests
|
|
97
|
+
- Terminal support (stub for future)
|
|
98
|
+
|
|
99
|
+
## Current Limitations
|
|
100
|
+
|
|
101
|
+
### Not Yet Implemented
|
|
102
|
+
|
|
103
|
+
1. **Streaming Responses** - Currently returns complete responses instead of streaming via `session/update` notifications
|
|
104
|
+
2. **Tool Call Reporting** - Doesn't report tool execution progress
|
|
105
|
+
3. **Session Modes** - No mode switching support yet
|
|
106
|
+
4. **Authentication** - No actual auth implementation
|
|
107
|
+
5. **Terminal Support** - Placeholder only
|
|
108
|
+
6. **Session Persistence** - `session/load` doesn't restore actual conversation history
|
|
109
|
+
|
|
110
|
+
### Future Enhancements
|
|
111
|
+
|
|
112
|
+
- **Real-time Streaming**: Implement `session/update` notifications for progressive responses
|
|
113
|
+
- **Tool Call Visibility**: Report tool executions as they happen
|
|
114
|
+
- **Session Persistence**: Save and restore full conversation history
|
|
115
|
+
- **Mode Support**: Implement different operational modes (ask, code, etc.)
|
|
116
|
+
- **Enhanced Permissions**: More sophisticated permission handling
|
|
117
|
+
- **Terminal Integration**: Full terminal support via nikcli's bash tool
|
|
118
|
+
|
|
119
|
+
## Testing
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Run ACP tests
|
|
123
|
+
bun test test/acp.test.ts
|
|
124
|
+
|
|
125
|
+
# Test manually with stdio
|
|
126
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' | nikcli acp
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Design Decisions
|
|
130
|
+
|
|
131
|
+
### Why the Official Library?
|
|
132
|
+
|
|
133
|
+
We use `@agentclientprotocol/sdk` instead of implementing JSON-RPC ourselves because:
|
|
134
|
+
|
|
135
|
+
- Ensures protocol compliance
|
|
136
|
+
- Handles edge cases and future protocol versions
|
|
137
|
+
- Reduces maintenance burden
|
|
138
|
+
- Works with other ACP clients automatically
|
|
139
|
+
|
|
140
|
+
### Clean Architecture
|
|
141
|
+
|
|
142
|
+
Each component has a single responsibility:
|
|
143
|
+
|
|
144
|
+
- **Agent** = Protocol interface
|
|
145
|
+
- **Client** = Client-side operations
|
|
146
|
+
- **Session** = State management
|
|
147
|
+
- **Server** = Lifecycle and I/O
|
|
148
|
+
|
|
149
|
+
This makes the codebase maintainable and testable.
|
|
150
|
+
|
|
151
|
+
### Mapping to Nikcli
|
|
152
|
+
|
|
153
|
+
ACP sessions map cleanly to nikcli's internal session model:
|
|
154
|
+
|
|
155
|
+
- ACP `session/new` → creates internal Session
|
|
156
|
+
- ACP `session/prompt` → uses SessionPrompt.prompt()
|
|
157
|
+
- Working directory context preserved per-session
|
|
158
|
+
- Tool execution uses existing ToolRegistry
|
|
159
|
+
|
|
160
|
+
## References
|
|
161
|
+
|
|
162
|
+
- [ACP Specification](https://agentclientprotocol.com/)
|
|
163
|
+
- [TypeScript Library](https://github.com/agentclientprotocol/typescript-sdk)
|
|
164
|
+
- [Protocol Examples](https://github.com/agentclientprotocol/typescript-sdk/tree/main/src/examples)
|