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 @@
|
|
|
1
|
+
$ tsgo --noEmit
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# nikcli agent guidelines
|
|
2
|
+
|
|
3
|
+
## Build/Test Commands
|
|
4
|
+
|
|
5
|
+
- **Install**: `bun install`
|
|
6
|
+
- **Run**: `bun run --conditions=browser ./src/index.ts`
|
|
7
|
+
- **Typecheck**: `bun run typecheck` (npm run typecheck)
|
|
8
|
+
- **Test**: `bun test` (runs all tests)
|
|
9
|
+
- **Single test**: `bun test test/tool/tool.test.ts` (specific test file)
|
|
10
|
+
|
|
11
|
+
## Code Style
|
|
12
|
+
|
|
13
|
+
- **Runtime**: Bun with TypeScript ESM modules
|
|
14
|
+
- **Imports**: Use relative imports for local modules, named imports preferred
|
|
15
|
+
- **Types**: Zod schemas for validation, TypeScript interfaces for structure
|
|
16
|
+
- **Naming**: camelCase for variables/functions, PascalCase for classes/namespaces
|
|
17
|
+
- **Error handling**: Use Result patterns, avoid throwing exceptions in tools
|
|
18
|
+
- **File structure**: Namespace-based organization (e.g., `Tool.define()`, `Session.create()`)
|
|
19
|
+
|
|
20
|
+
## Architecture
|
|
21
|
+
|
|
22
|
+
- **Tools**: Implement `Tool.Info` interface with `execute()` method
|
|
23
|
+
- **Context**: Pass `sessionID` in tool context, use `App.provide()` for DI
|
|
24
|
+
- **Validation**: All inputs validated with Zod schemas
|
|
25
|
+
- **Logging**: Use `Log.create({ service: "name" })` pattern
|
|
26
|
+
- **Storage**: Use `Storage` namespace for persistence
|
|
27
|
+
- **API Client**: The TypeScript TUI (built with SolidJS + OpenTUI) communicates with the Nikcli server using `@nikcli-ai/sdk`. When adding/modifying server endpoints in `src/server/server.ts`, regenerate the SDK in `packages/sdk/js` to keep types in sync.
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM alpine AS base
|
|
2
|
+
|
|
3
|
+
# Disable the runtime transpiler cache by default inside Docker containers.
|
|
4
|
+
# On ephemeral containers, the cache is not useful
|
|
5
|
+
ARG BUN_RUNTIME_TRANSPILER_CACHE_PATH=0
|
|
6
|
+
ENV BUN_RUNTIME_TRANSPILER_CACHE_PATH=${BUN_RUNTIME_TRANSPILER_CACHE_PATH}
|
|
7
|
+
RUN apk add libgcc libstdc++ ripgrep
|
|
8
|
+
|
|
9
|
+
FROM base AS build-amd64
|
|
10
|
+
COPY dist/nikcli-linux-x64-baseline-musl/bin/nikcli /usr/local/bin/nikcli
|
|
11
|
+
|
|
12
|
+
FROM base AS build-arm64
|
|
13
|
+
COPY dist/nikcli-linux-arm64-musl/bin/nikcli /usr/local/bin/nikcli
|
|
14
|
+
|
|
15
|
+
ARG TARGETARCH
|
|
16
|
+
FROM build-${TARGETARCH}
|
|
17
|
+
RUN nikcli --version
|
|
18
|
+
ENTRYPOINT ["nikcli"]
|
package/README.md
ADDED
package/bin/nikcli
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const childProcess = require("child_process")
|
|
4
|
+
const fs = require("fs")
|
|
5
|
+
const path = require("path")
|
|
6
|
+
const os = require("os")
|
|
7
|
+
|
|
8
|
+
function run(target) {
|
|
9
|
+
const result = childProcess.spawnSync(target, process.argv.slice(2), {
|
|
10
|
+
stdio: "inherit",
|
|
11
|
+
})
|
|
12
|
+
if (result.error) {
|
|
13
|
+
console.error(result.error.message)
|
|
14
|
+
process.exit(1)
|
|
15
|
+
}
|
|
16
|
+
const code = typeof result.status === "number" ? result.status : 0
|
|
17
|
+
process.exit(code)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const envPath = process.env.NIKCLI_BIN_PATH
|
|
21
|
+
if (envPath) {
|
|
22
|
+
run(envPath)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const scriptPath = fs.realpathSync(__filename)
|
|
26
|
+
const scriptDir = path.dirname(scriptPath)
|
|
27
|
+
|
|
28
|
+
const platformMap = {
|
|
29
|
+
darwin: "darwin",
|
|
30
|
+
linux: "linux",
|
|
31
|
+
win32: "windows",
|
|
32
|
+
}
|
|
33
|
+
const archMap = {
|
|
34
|
+
x64: "x64",
|
|
35
|
+
arm64: "arm64",
|
|
36
|
+
arm: "arm",
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let platform = platformMap[os.platform()]
|
|
40
|
+
if (!platform) {
|
|
41
|
+
platform = os.platform()
|
|
42
|
+
}
|
|
43
|
+
let arch = archMap[os.arch()]
|
|
44
|
+
if (!arch) {
|
|
45
|
+
arch = os.arch()
|
|
46
|
+
}
|
|
47
|
+
const base = "nikcli-" + platform + "-" + arch
|
|
48
|
+
const binary = platform === "windows" ? "nikcli.exe" : "nikcli"
|
|
49
|
+
|
|
50
|
+
function findBinary(startDir) {
|
|
51
|
+
let current = startDir
|
|
52
|
+
for (;;) {
|
|
53
|
+
const modules = path.join(current, "node_modules")
|
|
54
|
+
if (fs.existsSync(modules)) {
|
|
55
|
+
const entries = fs.readdirSync(modules)
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
if (!entry.startsWith(base)) {
|
|
58
|
+
continue
|
|
59
|
+
}
|
|
60
|
+
const candidate = path.join(modules, entry, "bin", binary)
|
|
61
|
+
if (fs.existsSync(candidate)) {
|
|
62
|
+
return candidate
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const parent = path.dirname(current)
|
|
67
|
+
if (parent === current) {
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
current = parent
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const resolved = findBinary(scriptDir)
|
|
75
|
+
if (!resolved) {
|
|
76
|
+
console.error(
|
|
77
|
+
'It seems that your package manager failed to install the right version of the nikcli CLI for your platform. You can try manually installing the "' +
|
|
78
|
+
base +
|
|
79
|
+
'" package',
|
|
80
|
+
)
|
|
81
|
+
process.exit(1)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
run(resolved)
|
package/config.json
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 01 - Setup Tailscale (host + telefono)
|
|
2
|
+
|
|
3
|
+
Questa sezione configura Tailscale in modo che:
|
|
4
|
+
|
|
5
|
+
- l'host abbia un nome DNS nel tailnet (`...ts.net`)
|
|
6
|
+
- il telefono possa raggiungere l'host in modo privato
|
|
7
|
+
- Tailscale Serve possa generare cert HTTPS per il tuo nodo
|
|
8
|
+
|
|
9
|
+
## 1) Crea (o scegli) il tuo tailnet
|
|
10
|
+
|
|
11
|
+
1. Vai nella console admin di Tailscale (web).
|
|
12
|
+
2. Assicurati di sapere quale account/tailnet userai per i device.
|
|
13
|
+
|
|
14
|
+
Consiglio: se usi un tailnet condiviso (team/famiglia), pianifica subito ACL (vedi sezione 6).
|
|
15
|
+
|
|
16
|
+
## 2) Installa Tailscale sull'host
|
|
17
|
+
|
|
18
|
+
### macOS (consigliato)
|
|
19
|
+
|
|
20
|
+
1. Installa l'app Tailscale (GUI).
|
|
21
|
+
2. Apri l'app e fai login.
|
|
22
|
+
3. Verifica da terminale:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
tailscale version
|
|
26
|
+
tailscale status
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Linux (generico)
|
|
30
|
+
|
|
31
|
+
1. Installa e avvia Tailscale (metodo ufficiale):
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
curl -fsSL https://tailscale.com/install.sh | sh
|
|
35
|
+
sudo tailscale up
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
2. Verifica:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
tailscale version
|
|
42
|
+
tailscale status
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 3) Installa Tailscale sul telefono
|
|
46
|
+
|
|
47
|
+
1. Installa l'app Tailscale (iOS/Android).
|
|
48
|
+
2. Login con lo stesso tailnet.
|
|
49
|
+
3. Attiva la VPN (toggle ON).
|
|
50
|
+
4. Verifica che l'host appaia nella lista dei device.
|
|
51
|
+
|
|
52
|
+
## 4) Abilita MagicDNS (consigliato)
|
|
53
|
+
|
|
54
|
+
1. Console admin Tailscale -> DNS.
|
|
55
|
+
2. Abilita MagicDNS.
|
|
56
|
+
|
|
57
|
+
Questo ti permette di raggiungere l'host con un nome tipo:
|
|
58
|
+
`nome-host.tuo-tailnet.ts.net`
|
|
59
|
+
|
|
60
|
+
## 5) Abilita HTTPS certificates (Serve)
|
|
61
|
+
|
|
62
|
+
1. Console admin Tailscale -> DNS.
|
|
63
|
+
2. Abilita "HTTPS Certificates" (o voce equivalente).
|
|
64
|
+
|
|
65
|
+
Serve usa questi cert per esporre `https://...ts.net`.
|
|
66
|
+
|
|
67
|
+
## 6) (Raccomandato) Configura Access Controls / ACL
|
|
68
|
+
|
|
69
|
+
Se il tailnet e' solo tuo e i device sono solo i tuoi, puoi anche evitare, ma e' meglio restringere.
|
|
70
|
+
|
|
71
|
+
Obiettivo minimo:
|
|
72
|
+
|
|
73
|
+
- solo il tuo utente/device puo' raggiungere questo host
|
|
74
|
+
|
|
75
|
+
Da console admin Tailscale -> Access controls:
|
|
76
|
+
|
|
77
|
+
- limita chi puo' connettersi al nodo che userai per Nikcli
|
|
78
|
+
|
|
79
|
+
Nota: le ACL dipendono molto da come organizzi users/tags. Se vuoi, dimmi se il tuo tailnet e' personale o team e ti scrivo una policy ACL precisa.
|
|
80
|
+
|
|
81
|
+
## 7) Trova il DNSName del tuo host (ti servira' dopo)
|
|
82
|
+
|
|
83
|
+
Metodo 1 (piu' semplice)
|
|
84
|
+
|
|
85
|
+
- apri `tailscale status`
|
|
86
|
+
- cerca la riga del tuo host e copia il nome `...ts.net`
|
|
87
|
+
|
|
88
|
+
Metodo 2 (automatica, senza jq, usando bun)
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
tailscale status --json | bun -e 'import { readFileSync } from "fs"; const j = JSON.parse(readFileSync(0, "utf8")); process.stdout.write(j.Self.DNSName.replace(/\.$/, ""))'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Salva questo valore: lo userai per aprire la UI dal telefono e per configurare l'API.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# 02 - Setup host (Nikcli server + Web UI)
|
|
2
|
+
|
|
3
|
+
In questa sezione avvii i due processi sull'host:
|
|
4
|
+
|
|
5
|
+
- Nikcli API server (loopback)
|
|
6
|
+
- Web UI (loopback)
|
|
7
|
+
|
|
8
|
+
Nota importante
|
|
9
|
+
|
|
10
|
+
- Con auth Tailscale attiva e senza password, le chiamate locali dirette a `127.0.0.1:4096` (senza header Tailscale) rispondono 401. E' normale.
|
|
11
|
+
|
|
12
|
+
## 1) Prerequisiti sull'host
|
|
13
|
+
|
|
14
|
+
Verifica binari:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
tailscale version
|
|
18
|
+
nikcli --version || true
|
|
19
|
+
bun --version || true
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Se `nikcli` non e' nel PATH, usa la modalita' repo (vedi sotto) oppure installalo come fai di solito nel tuo ambiente.
|
|
23
|
+
|
|
24
|
+
## 2) Scegli la directory workspace
|
|
25
|
+
|
|
26
|
+
Decidi dove vuoi che Nikcli lavori (repo/progetto).
|
|
27
|
+
|
|
28
|
+
Consiglio:
|
|
29
|
+
|
|
30
|
+
- avvia `nikcli serve` con working directory uguale al workspace
|
|
31
|
+
- cosi' il client mobile non deve impostare `Directory` nelle Settings
|
|
32
|
+
|
|
33
|
+
Esempio:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd /percorso/al/tuo/workspace
|
|
37
|
+
pwd
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 3) Abilita auth passwordless via Tailscale
|
|
41
|
+
|
|
42
|
+
Imposta queste env:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
export NIKCLI_SERVER_TAILSCALE_AUTH=1
|
|
46
|
+
|
|
47
|
+
# Raccomandato: allowlist. Di solito e' la mail con cui fai login a Tailscale.
|
|
48
|
+
export NIKCLI_SERVER_TAILSCALE_USERS="tuo-utente@dominio.com"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Opzionale (fallback Basic Auth per accessi locali non via Serve):
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
export NIKCLI_SERVER_PASSWORD="una_password_forte"
|
|
55
|
+
export NIKCLI_SERVER_USERNAME="nikcli"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 4) Avvia Nikcli API server (loopback)
|
|
59
|
+
|
|
60
|
+
Raccomandato (porta stabile):
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
nikcli --print-logs serve --hostname 127.0.0.1 --port 4096
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Se stai lavorando dal monorepo e vuoi avviare la versione dev:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
cd /percorso/al/monorepo/packages/nikcli
|
|
70
|
+
bun run dev -- serve --hostname 127.0.0.1 --port 4096
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 5) Avvia la Web UI (packages/app)
|
|
74
|
+
|
|
75
|
+
Se hai il monorepo:
|
|
76
|
+
|
|
77
|
+
1. Installa deps (una volta sola):
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cd /percorso/al/monorepo
|
|
81
|
+
bun install
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
2. Build + preview:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
cd packages/app
|
|
88
|
+
bun run build
|
|
89
|
+
bun run preview -- --host 127.0.0.1 --port 3002
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Nota: `preview` va bene per uso personale. Se vuoi, puoi anche servire `packages/app/dist` con un web server a tua scelta.
|
|
93
|
+
|
|
94
|
+
## 6) Verifica locale (host)
|
|
95
|
+
|
|
96
|
+
UI (deve rispondere HTML):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -I http://127.0.0.1:3002
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
API (con Tailscale auth attiva e senza password, e' normale vedere 401):
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
curl -i http://127.0.0.1:4096/global/health
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 7) (Opzionale) Avvio automatico
|
|
109
|
+
|
|
110
|
+
Se vuoi che tutto riparta dopo reboot, usa:
|
|
111
|
+
|
|
112
|
+
- macOS: launchd
|
|
113
|
+
- Linux: systemd
|
|
114
|
+
|
|
115
|
+
Qui non creo file di sistema automaticamente (dipende dal tuo OS e percorsi), ma se mi dici macOS o Linux ti scrivo gli unit/plist completi con i comandi esatti che stai usando.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 03 - Tailscale Serve (Option B) + configurazione telefono
|
|
2
|
+
|
|
3
|
+
Questa e' la parte che rende raggiungibili UI e API dal telefono tramite `https://...ts.net`.
|
|
4
|
+
|
|
5
|
+
## 1) Configura Tailscale Serve sull'host
|
|
6
|
+
|
|
7
|
+
Esegui sull'host:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# UI: espone in HTTPS 443 e proxya verso 127.0.0.1:3002
|
|
11
|
+
tailscale serve --bg --https=443 3002
|
|
12
|
+
|
|
13
|
+
# API: espone in HTTPS 8443 e proxya verso 127.0.0.1:4096
|
|
14
|
+
tailscale serve --bg --https=8443 4096
|
|
15
|
+
|
|
16
|
+
tailscale serve status
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Se in futuro vuoi spegnere tutto:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
tailscale serve off
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 2) Trova gli URL corretti
|
|
26
|
+
|
|
27
|
+
Il comando `tailscale serve status` ti stampa gli URL pubblicati nel tailnet.
|
|
28
|
+
|
|
29
|
+
In particolare ti servono:
|
|
30
|
+
|
|
31
|
+
- URL UI: `https://<dnsname>.ts.net`
|
|
32
|
+
- URL API: `https://<dnsname>.ts.net:8443`
|
|
33
|
+
|
|
34
|
+
Se vuoi stampare solo il DNSName con bun:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
tailscale status --json | bun -e 'import { readFileSync } from "fs"; const j = JSON.parse(readFileSync(0, "utf8")); process.stdout.write(j.Self.DNSName.replace(/\.$/, ""))'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 3) Apri la UI dal telefono
|
|
41
|
+
|
|
42
|
+
1. Sul telefono: apri Tailscale e metti ON.
|
|
43
|
+
2. Apri Safari/Chrome.
|
|
44
|
+
3. Vai all'URL UI (quello su 443).
|
|
45
|
+
|
|
46
|
+
Se la pagina non carica:
|
|
47
|
+
|
|
48
|
+
- verifica che l'host sia online
|
|
49
|
+
- verifica `tailscale status` su host e telefono
|
|
50
|
+
|
|
51
|
+
## 4) Configura la UI per puntare all'API (porta 8443)
|
|
52
|
+
|
|
53
|
+
Nella web UI:
|
|
54
|
+
|
|
55
|
+
1. Vai su Settings.
|
|
56
|
+
2. In "Server URL" inserisci l'URL API su porta 8443.
|
|
57
|
+
3. (Opzionale) "Directory": lascia vuoto per usare la directory di avvio del server, oppure imposta un path specifico.
|
|
58
|
+
4. Premi Save.
|
|
59
|
+
|
|
60
|
+
Se auth Tailscale e' corretta:
|
|
61
|
+
|
|
62
|
+
- Status diventa Connected
|
|
63
|
+
- La sezione Authentication mostra che non serve login
|
|
64
|
+
|
|
65
|
+
## 5) Test end-to-end
|
|
66
|
+
|
|
67
|
+
1. Crea una sessione.
|
|
68
|
+
2. Invia un prompt.
|
|
69
|
+
3. Verifica che i messaggi arrivino in realtime.
|
|
70
|
+
4. Se Nikcli chiede permission/question/dbedit, rispondi dalla modale: la sessione deve riprendere.
|
|
71
|
+
|
|
72
|
+
## 6) Troubleshooting
|
|
73
|
+
|
|
74
|
+
### A) UI ok, ma API "Disconnected"
|
|
75
|
+
|
|
76
|
+
Checklist:
|
|
77
|
+
|
|
78
|
+
- `tailscale serve status` mostra anche la porta 8443?
|
|
79
|
+
- il processo `nikcli serve` e' vivo sull'host?
|
|
80
|
+
- hai inserito Server URL corretto (porta 8443)?
|
|
81
|
+
|
|
82
|
+
Test da un altro device nel tailnet:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
curl -i https://DNSNAME:8443/global/health
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### B) 403 Forbidden
|
|
89
|
+
|
|
90
|
+
Significa che l'header Tailscale e' presente ma l'utente non e' ammesso.
|
|
91
|
+
|
|
92
|
+
Azioni:
|
|
93
|
+
|
|
94
|
+
- controlla `NIKCLI_SERVER_TAILSCALE_USERS`
|
|
95
|
+
- ricordati che in genere e' la mail con cui fai login a Tailscale
|
|
96
|
+
|
|
97
|
+
### C) 401 Unauthorized
|
|
98
|
+
|
|
99
|
+
Cause tipiche:
|
|
100
|
+
|
|
101
|
+
- stai chiamando direttamente `http://127.0.0.1:4096` (non passa da Serve)
|
|
102
|
+
- `tailscale serve` non e' configurato per 8443/4096
|
|
103
|
+
- hai attivato Tailscale auth ma non hai header (Serve non in mezzo)
|
|
104
|
+
|
|
105
|
+
Soluzioni:
|
|
106
|
+
|
|
107
|
+
- usa sempre l'URL `https://...:8443` dal telefono
|
|
108
|
+
- oppure imposta `NIKCLI_SERVER_PASSWORD` se vuoi anche accesso locale senza header
|
|
109
|
+
|
|
110
|
+
### D) Errori CORS nel browser
|
|
111
|
+
|
|
112
|
+
Con Option B l'origin e' `https://DNSNAME.ts.net` e l'API e' su `https://DNSNAME.ts.net:8443`.
|
|
113
|
+
|
|
114
|
+
In Nikcli ho abilitato automaticamente CORS per `https://*.ts.net` quando:
|
|
115
|
+
|
|
116
|
+
- `NIKCLI_SERVER_TAILSCALE_AUTH=1`
|
|
117
|
+
- il server e' in listen su loopback (`127.0.0.1` / `localhost`)
|
|
118
|
+
|
|
119
|
+
Se stai usando un origin diverso (custom domain, reverse proxy esterno, ecc.), allora avvia il server con `--cors <origin>`.
|
|
120
|
+
|
|
121
|
+
### E) SSE (realtime) non aggiorna
|
|
122
|
+
|
|
123
|
+
Controlla che l'endpoint eventi sia raggiungibile:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
curl -N https://DNSNAME:8443/event
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Devi vedere una riga iniziale con `server.connected` e poi heartbeat.
|
|
130
|
+
|
|
131
|
+
## 7) Aggiungi alla Home Screen (esperienza "app")
|
|
132
|
+
|
|
133
|
+
iOS (Safari): Share -> Add to Home Screen.
|
|
134
|
+
Android (Chrome): menu -> Add to Home screen.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Nikcli sul telefono via Tailscale (Option B)
|
|
2
|
+
|
|
3
|
+
Questa guida ti porta da zero ad avere Nikcli utilizzabile dal browser del tuo telefono, collegandoti in modo privato tramite Tailscale (nessuna porta esposta su Internet).
|
|
4
|
+
|
|
5
|
+
Obiettivo finale
|
|
6
|
+
|
|
7
|
+
- Apri un URL `https://...ts.net` dal telefono (Safari/Chrome).
|
|
8
|
+
- Vedi la web UI di Nikcli.
|
|
9
|
+
- Il telefono parla con il Nikcli server remoto (API) tramite Tailscale.
|
|
10
|
+
- Autenticazione passwordless: l'accesso e' concesso solo se la richiesta arriva da Tailscale Serve e (opzionale) se l'utente Tailscale e' in allowlist.
|
|
11
|
+
|
|
12
|
+
Architettura (Option B)
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Telefono (Tailscale ON)
|
|
16
|
+
|
|
|
17
|
+
| HTTPS 443 -> Web UI (Vite preview o static)
|
|
18
|
+
| HTTPS 8443 -> Nikcli API (Hono/Bun)
|
|
19
|
+
v
|
|
20
|
+
Tailscale Serve sul nodo host
|
|
21
|
+
|
|
|
22
|
+
| proxy verso 127.0.0.1
|
|
23
|
+
v
|
|
24
|
+
Host (workspace e processi)
|
|
25
|
+
- Web UI locale: http://127.0.0.1:3002
|
|
26
|
+
- Nikcli API: http://127.0.0.1:4096
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Perche' Option B
|
|
30
|
+
|
|
31
|
+
- Funziona bene su mobile.
|
|
32
|
+
- Mantiene API e UI separate (utile per debug e upgrade).
|
|
33
|
+
- Non richiede reverse proxy esterni.
|
|
34
|
+
|
|
35
|
+
Porte usate
|
|
36
|
+
|
|
37
|
+
- UI locale (host): `3002` (solo loopback)
|
|
38
|
+
- API locale (host): `4096` (solo loopback)
|
|
39
|
+
- UI esposta nel tailnet: `443` (HTTPS)
|
|
40
|
+
- API esposta nel tailnet: `8443` (HTTPS)
|
|
41
|
+
|
|
42
|
+
Prerequisiti
|
|
43
|
+
|
|
44
|
+
- Un "host" sempre acceso (Mac/Linux/VM) dove risiede il tuo workspace.
|
|
45
|
+
- Tailscale installato su host e telefono.
|
|
46
|
+
- Nikcli disponibile sull'host (binario installato o repo).
|
|
47
|
+
- Bun sull'host se vuoi buildare la web UI dal repo.
|
|
48
|
+
|
|
49
|
+
Indice (leggi in ordine)
|
|
50
|
+
|
|
51
|
+
- `docs/tailscale-mobile/01-tailscale-setup.md`
|
|
52
|
+
- `docs/tailscale-mobile/02-host-setup.md`
|
|
53
|
+
- `docs/tailscale-mobile/03-phone-and-serve.md`
|
|
54
|
+
|
|
55
|
+
Security note (importante)
|
|
56
|
+
|
|
57
|
+
- Nikcli puo' leggere/scrivere file ed eseguire comandi sul tuo host.
|
|
58
|
+
- Non usare Funnel.
|
|
59
|
+
- Se il tailnet non e' solo tuo, configura ACL Tailscale e/o `NIKCLI_SERVER_TAILSCALE_USERS`.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Nikcli Visual Examples
|
|
2
|
+
|
|
3
|
+
This directory contains visual demonstrations of nikcli's capabilities.
|
|
4
|
+
|
|
5
|
+
## Examples
|
|
6
|
+
|
|
7
|
+
### 1. CLI Interface Demo (`cli-demo/`)
|
|
8
|
+
|
|
9
|
+
Interactive terminal UI showcasing nikcli's command-line interface with:
|
|
10
|
+
|
|
11
|
+
- Session management display
|
|
12
|
+
- Real-time AI response streaming
|
|
13
|
+
- File tree visualization
|
|
14
|
+
- Command palette
|
|
15
|
+
|
|
16
|
+
### 2. Web App Components (`web-components/`)
|
|
17
|
+
|
|
18
|
+
React components from the nikcli web app:
|
|
19
|
+
|
|
20
|
+
- Session viewer with syntax highlighting
|
|
21
|
+
- Settings panel with theme switcher
|
|
22
|
+
- Connection status indicators
|
|
23
|
+
- Terminal emulator
|
|
24
|
+
|
|
25
|
+
### 3. Mobile App UI (`mobile-ui/`)
|
|
26
|
+
|
|
27
|
+
Expo/React Native screens:
|
|
28
|
+
|
|
29
|
+
- Session list with swipe actions
|
|
30
|
+
- Chat interface with code blocks
|
|
31
|
+
- Settings and connection management
|
|
32
|
+
- Offline mode indicators
|
|
33
|
+
|
|
34
|
+
### 4. AI Tools Visualization (`ai-tools/`)
|
|
35
|
+
|
|
36
|
+
Visual representations of nikcli's AI tool system:
|
|
37
|
+
|
|
38
|
+
- Tool execution flow diagrams
|
|
39
|
+
- Context collection visualization
|
|
40
|
+
- RAG search result display
|
|
41
|
+
- Multi-agent orchestration
|
|
42
|
+
|
|
43
|
+
## Running Examples
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# CLI Demo
|
|
47
|
+
bun run packages/nikcli/examples/cli-demo/demo.ts
|
|
48
|
+
|
|
49
|
+
# Web Components
|
|
50
|
+
cd packages/app && bun dev
|
|
51
|
+
|
|
52
|
+
# Mobile UI
|
|
53
|
+
cd packages/mobile && bun start
|
|
54
|
+
```
|