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,48 @@
|
|
|
1
|
+
import { BusEvent } from "@/bus/bus-event"
|
|
2
|
+
import { Bus } from "@/bus"
|
|
3
|
+
import z from "zod"
|
|
4
|
+
|
|
5
|
+
export const TuiEvent = {
|
|
6
|
+
PromptAppend: BusEvent.define("tui.prompt.append", z.object({ text: z.string() })),
|
|
7
|
+
CommandExecute: BusEvent.define(
|
|
8
|
+
"tui.command.execute",
|
|
9
|
+
z.object({
|
|
10
|
+
command: z.union([
|
|
11
|
+
z.enum([
|
|
12
|
+
"session.list",
|
|
13
|
+
"session.new",
|
|
14
|
+
"session.share",
|
|
15
|
+
"session.interrupt",
|
|
16
|
+
"session.compact",
|
|
17
|
+
"session.page.up",
|
|
18
|
+
"session.page.down",
|
|
19
|
+
"session.line.up",
|
|
20
|
+
"session.line.down",
|
|
21
|
+
"session.half.page.up",
|
|
22
|
+
"session.half.page.down",
|
|
23
|
+
"session.first",
|
|
24
|
+
"session.last",
|
|
25
|
+
"prompt.clear",
|
|
26
|
+
"prompt.submit",
|
|
27
|
+
"agent.cycle",
|
|
28
|
+
]),
|
|
29
|
+
z.string(),
|
|
30
|
+
]),
|
|
31
|
+
}),
|
|
32
|
+
),
|
|
33
|
+
ToastShow: BusEvent.define(
|
|
34
|
+
"tui.toast.show",
|
|
35
|
+
z.object({
|
|
36
|
+
title: z.string().optional(),
|
|
37
|
+
message: z.string(),
|
|
38
|
+
variant: z.enum(["info", "success", "warning", "error"]),
|
|
39
|
+
duration: z.number().int().positive().default(5000).describe("Duration in milliseconds"),
|
|
40
|
+
}),
|
|
41
|
+
),
|
|
42
|
+
SessionSelect: BusEvent.define(
|
|
43
|
+
"tui.session.select",
|
|
44
|
+
z.object({
|
|
45
|
+
sessionID: z.string().regex(/^ses/).describe("Session ID to navigate to"),
|
|
46
|
+
}),
|
|
47
|
+
),
|
|
48
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { For } from "solid-js"
|
|
2
|
+
import { DEFAULT_THEMES, useTheme } from "@tui/context/theme"
|
|
3
|
+
|
|
4
|
+
const themeCount = Object.keys(DEFAULT_THEMES).length
|
|
5
|
+
const themeTip = `Use {highlight}/themes{/highlight} or {highlight}Ctrl+X T{/highlight} to switch between ${themeCount} built-in themes`
|
|
6
|
+
|
|
7
|
+
type TipPart = { text: string; highlight: boolean }
|
|
8
|
+
|
|
9
|
+
function parse(tip: string): TipPart[] {
|
|
10
|
+
const parts: TipPart[] = []
|
|
11
|
+
const regex = /\{highlight\}(.*?)\{\/highlight\}/g
|
|
12
|
+
const found = Array.from(tip.matchAll(regex))
|
|
13
|
+
const state = found.reduce(
|
|
14
|
+
(acc, match) => {
|
|
15
|
+
const start = match.index ?? 0
|
|
16
|
+
if (start > acc.index) {
|
|
17
|
+
acc.parts.push({ text: tip.slice(acc.index, start), highlight: false })
|
|
18
|
+
}
|
|
19
|
+
acc.parts.push({ text: match[1], highlight: true })
|
|
20
|
+
acc.index = start + match[0].length
|
|
21
|
+
return acc
|
|
22
|
+
},
|
|
23
|
+
{ parts, index: 0 },
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
if (state.index < tip.length) {
|
|
27
|
+
parts.push({ text: tip.slice(state.index), highlight: false })
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return parts
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function Tips() {
|
|
34
|
+
const theme = useTheme().theme
|
|
35
|
+
const parts = parse(TIPS[Math.floor(Math.random() * TIPS.length)])
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<box flexDirection="row" maxWidth="100%">
|
|
39
|
+
<text flexShrink={0} style={{ fg: theme.warning }}>
|
|
40
|
+
● Tip{" "}
|
|
41
|
+
</text>
|
|
42
|
+
<text flexShrink={1}>
|
|
43
|
+
<For each={parts}>
|
|
44
|
+
{(part) => <span style={{ fg: part.highlight ? theme.text : theme.textMuted }}>{part.text}</span>}
|
|
45
|
+
</For>
|
|
46
|
+
</text>
|
|
47
|
+
</box>
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const TIPS = [
|
|
52
|
+
"Type {highlight}@{/highlight} followed by a filename to fuzzy search and attach files",
|
|
53
|
+
"Start a message with {highlight}!{/highlight} to run shell commands directly (e.g., {highlight}!ls -la{/highlight})",
|
|
54
|
+
"Press {highlight}Tab{/highlight} to cycle between Build and Plan agents",
|
|
55
|
+
"Use {highlight}/undo{/highlight} to revert the last message and file changes",
|
|
56
|
+
"Use {highlight}/redo{/highlight} to restore previously undone messages and file changes",
|
|
57
|
+
"Run {highlight}/share{/highlight} to create a public link to your conversation at opencode.ai",
|
|
58
|
+
"Drag and drop images into the terminal to add them as context",
|
|
59
|
+
"Press {highlight}Ctrl+V{/highlight} to paste images from your clipboard into the prompt",
|
|
60
|
+
"Press {highlight}Ctrl+X E{/highlight} or {highlight}/editor{/highlight} to compose messages in your external editor",
|
|
61
|
+
"Run {highlight}/init{/highlight} to auto-generate project rules based on your codebase",
|
|
62
|
+
"Run {highlight}/models{/highlight} or {highlight}Ctrl+X M{/highlight} to see and switch between available AI models",
|
|
63
|
+
themeTip,
|
|
64
|
+
"Press {highlight}Ctrl+X N{/highlight} or {highlight}/new{/highlight} to start a fresh conversation session",
|
|
65
|
+
"Use {highlight}/sessions{/highlight} or {highlight}Ctrl+X L{/highlight} to list and continue previous conversations",
|
|
66
|
+
"Run {highlight}/compact{/highlight} to summarize long sessions near context limits",
|
|
67
|
+
"Press {highlight}Ctrl+X X{/highlight} or {highlight}/export{/highlight} to save the conversation as Markdown",
|
|
68
|
+
"Press {highlight}Ctrl+X Y{/highlight} to copy the assistant's last message to clipboard",
|
|
69
|
+
"Press {highlight}Ctrl+P{/highlight} to see all available actions and commands",
|
|
70
|
+
"Run {highlight}/connect{/highlight} to add API keys for 75+ supported LLM providers",
|
|
71
|
+
"The leader key is {highlight}Ctrl+X{/highlight}; combine with other keys for quick actions",
|
|
72
|
+
"Press {highlight}F2{/highlight} to quickly switch between recently used models",
|
|
73
|
+
"Press {highlight}Ctrl+X B{/highlight} to show/hide the sidebar panel",
|
|
74
|
+
"Use {highlight}PageUp{/highlight}/{highlight}PageDown{/highlight} to navigate through conversation history",
|
|
75
|
+
"Press {highlight}Ctrl+G{/highlight} or {highlight}Home{/highlight} to jump to the beginning of the conversation",
|
|
76
|
+
"Press {highlight}Ctrl+Alt+G{/highlight} or {highlight}End{/highlight} to jump to the most recent message",
|
|
77
|
+
"Press {highlight}Shift+Enter{/highlight} or {highlight}Ctrl+J{/highlight} to add newlines in your prompt",
|
|
78
|
+
"Press {highlight}Ctrl+C{/highlight} when typing to clear the input field",
|
|
79
|
+
"Press {highlight}Escape{/highlight} to stop the AI mid-response",
|
|
80
|
+
"Switch to {highlight}Plan{/highlight} agent to get suggestions without making actual changes",
|
|
81
|
+
"Use {highlight}@agent-name{/highlight} in prompts to invoke specialized subagents",
|
|
82
|
+
"Press {highlight}Ctrl+X Right/Left{/highlight} to cycle through parent and child sessions",
|
|
83
|
+
"Create {highlight}nikcli.json{/highlight} for server settings and {highlight}tui.json{/highlight} for TUI settings",
|
|
84
|
+
"Place TUI settings in {highlight}~/.config/nikcli/tui.json{/highlight} for global config",
|
|
85
|
+
"Add {highlight}$schema{/highlight} to your config for autocomplete in your editor",
|
|
86
|
+
"Configure {highlight}model{/highlight} in config to set your default model",
|
|
87
|
+
"Override any keybind in {highlight}tui.json{/highlight} via the {highlight}keybinds{/highlight} section",
|
|
88
|
+
"Set any keybind to {highlight}none{/highlight} to disable it completely",
|
|
89
|
+
"Configure local or remote MCP servers in the {highlight}mcp{/highlight} config section",
|
|
90
|
+
"NikCLI auto-handles OAuth for remote MCP servers requiring auth",
|
|
91
|
+
"Add {highlight}.md{/highlight} files to {highlight}.nikcli/command/{/highlight} to define reusable custom prompts",
|
|
92
|
+
"Use {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} in custom commands for dynamic input",
|
|
93
|
+
"Use backticks in commands to inject shell output (e.g., {highlight}`git status`{/highlight})",
|
|
94
|
+
"Add {highlight}.md{/highlight} files to {highlight}.nikcli/agent/{/highlight} for specialized AI personas",
|
|
95
|
+
"Configure per-agent permissions for {highlight}edit{/highlight}, {highlight}bash{/highlight}, and {highlight}webfetch{/highlight} tools",
|
|
96
|
+
'Use patterns like {highlight}"git *": "allow"{/highlight} for granular bash permissions',
|
|
97
|
+
'Set {highlight}"rm -rf *": "deny"{/highlight} to block destructive commands',
|
|
98
|
+
'Configure {highlight}"git push": "ask"{/highlight} to require approval before pushing',
|
|
99
|
+
"NikCLI auto-formats files using prettier, gofmt, ruff, and more",
|
|
100
|
+
'Set {highlight}"formatter": false{/highlight} in config to disable all auto-formatting',
|
|
101
|
+
"Define custom formatter commands with file extensions in config",
|
|
102
|
+
"NikCLI uses LSP servers for intelligent code analysis",
|
|
103
|
+
"Create {highlight}.ts{/highlight} files in {highlight}.nikcli/tools/{/highlight} to define new LLM tools",
|
|
104
|
+
"Tool definitions can invoke scripts written in Python, Go, etc",
|
|
105
|
+
"Add {highlight}.ts{/highlight} files to {highlight}.nikcli/plugin/{/highlight} for event hooks",
|
|
106
|
+
"Use plugins to send OS notifications when sessions complete",
|
|
107
|
+
"Create a plugin to prevent NikCLI from reading sensitive files",
|
|
108
|
+
"Use {highlight}nikcli run{/highlight} for non-interactive scripting",
|
|
109
|
+
"Use {highlight}nikcli --continue{/highlight} to resume the last session",
|
|
110
|
+
"Use {highlight}nikcli run -f file.ts{/highlight} to attach files via CLI",
|
|
111
|
+
"Use {highlight}--format json{/highlight} for machine-readable output in scripts",
|
|
112
|
+
"Run {highlight}nikcli serve{/highlight} for headless API access to NikCLI",
|
|
113
|
+
"Use {highlight}nikcli run --attach{/highlight} to connect to a running server",
|
|
114
|
+
"Run {highlight}nikcli upgrade{/highlight} to update to the latest version",
|
|
115
|
+
"Run {highlight}nikcli auth list{/highlight} to see all configured providers",
|
|
116
|
+
"Run {highlight}nikcli agent create{/highlight} for guided agent creation",
|
|
117
|
+
"Use {highlight}/opencode{/highlight} in GitHub issues/PRs to trigger AI actions",
|
|
118
|
+
"Run {highlight}nikcli github install{/highlight} to set up the GitHub workflow",
|
|
119
|
+
"Comment {highlight}/opencode fix this{/highlight} on issues to auto-create PRs",
|
|
120
|
+
"Comment {highlight}/oc{/highlight} on PR code lines for targeted code reviews",
|
|
121
|
+
'Use {highlight}"theme": "system"{/highlight} to match your terminal\'s colors',
|
|
122
|
+
"Create JSON theme files in {highlight}.nikcli/themes/{/highlight} directory",
|
|
123
|
+
"Themes support dark/light variants for both modes",
|
|
124
|
+
"Reference ANSI colors 0-255 in custom themes",
|
|
125
|
+
"Use {highlight}{env:VAR_NAME}{/highlight} syntax to reference environment variables in config",
|
|
126
|
+
"Use {highlight}{file:path}{/highlight} to include file contents in config values",
|
|
127
|
+
"Use {highlight}instructions{/highlight} in config to load additional rules files",
|
|
128
|
+
"Set agent {highlight}temperature{/highlight} from 0.0 (focused) to 1.0 (creative)",
|
|
129
|
+
"Configure {highlight}steps{/highlight} to limit agentic iterations per request",
|
|
130
|
+
'Set {highlight}"tools": {"bash": false}{/highlight} to disable specific tools',
|
|
131
|
+
'Set {highlight}"mcp_*": false{/highlight} to disable all tools from an MCP server',
|
|
132
|
+
"Override global tool settings per agent configuration",
|
|
133
|
+
'Set {highlight}"share": "auto"{/highlight} to automatically share all sessions',
|
|
134
|
+
'Set {highlight}"share": "disabled"{/highlight} to prevent any session sharing',
|
|
135
|
+
"Run {highlight}/unshare{/highlight} to remove a session from public access",
|
|
136
|
+
"Permission {highlight}doom_loop{/highlight} prevents infinite tool call loops",
|
|
137
|
+
"Permission {highlight}external_directory{/highlight} protects files outside project",
|
|
138
|
+
"Run {highlight}nikcli debug config{/highlight} to troubleshoot configuration",
|
|
139
|
+
"Use {highlight}--print-logs{/highlight} flag to see detailed logs in stderr",
|
|
140
|
+
"Press {highlight}Ctrl+X G{/highlight} or {highlight}/timeline{/highlight} to jump to specific messages",
|
|
141
|
+
"Press {highlight}Ctrl+X H{/highlight} to toggle code block visibility in messages",
|
|
142
|
+
"Press {highlight}Ctrl+X S{/highlight} or {highlight}/status{/highlight} to see system status info",
|
|
143
|
+
"Enable {highlight}scroll_acceleration{/highlight} in {highlight}tui.json{/highlight} for smooth macOS-style scrolling",
|
|
144
|
+
"Toggle username display in chat via command palette ({highlight}Ctrl+P{/highlight})",
|
|
145
|
+
"Run {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} for containerized use",
|
|
146
|
+
"Use {highlight}/connect{/highlight} with NikCLI Zen for curated, tested models",
|
|
147
|
+
"Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team sharing",
|
|
148
|
+
"Use {highlight}/review{/highlight} to review uncommitted changes, branches, or PRs",
|
|
149
|
+
"Run {highlight}/help{/highlight} or {highlight}Ctrl+X H{/highlight} to show the help dialog",
|
|
150
|
+
"Use {highlight}/rename{/highlight} to rename the current session",
|
|
151
|
+
"Press {highlight}Ctrl+Z{/highlight} to suspend the terminal and return to your shell",
|
|
152
|
+
]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { TuiPlugin, TuiPluginModule } from "@nikcli-ai/plugin/tui"
|
|
2
|
+
import { createMemo, Show } from "solid-js"
|
|
3
|
+
import { Tips } from "./tips-view"
|
|
4
|
+
|
|
5
|
+
const id = "internal:home-tips"
|
|
6
|
+
|
|
7
|
+
function View(props: { show: boolean }) {
|
|
8
|
+
return (
|
|
9
|
+
<box height={4} minHeight={0} width="100%" maxWidth={75} alignItems="center" paddingTop={3} flexShrink={1}>
|
|
10
|
+
<Show when={props.show}>
|
|
11
|
+
<Tips />
|
|
12
|
+
</Show>
|
|
13
|
+
</box>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const tui: TuiPlugin = async (api) => {
|
|
18
|
+
api.command.register(() => [
|
|
19
|
+
{
|
|
20
|
+
title: api.kv.get("tips_hidden", false) ? "Show tips" : "Hide tips",
|
|
21
|
+
value: "tips.toggle",
|
|
22
|
+
keybind: "tips_toggle",
|
|
23
|
+
category: "System",
|
|
24
|
+
hidden: api.route.current.name !== "home",
|
|
25
|
+
onSelect() {
|
|
26
|
+
api.kv.set("tips_hidden", !api.kv.get("tips_hidden", false))
|
|
27
|
+
api.ui.dialog.clear()
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
api.slots.register({
|
|
33
|
+
order: 100,
|
|
34
|
+
slots: {
|
|
35
|
+
home_bottom() {
|
|
36
|
+
const hidden = createMemo(() => api.kv.get("tips_hidden", false))
|
|
37
|
+
const first = createMemo(() => api.state.session.count() === 0)
|
|
38
|
+
const show = createMemo(() => !first() && !hidden())
|
|
39
|
+
return <View show={show()} />
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
46
|
+
id,
|
|
47
|
+
tui,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default plugin
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { AssistantMessage } from "@nikcli-ai/sdk/v2"
|
|
2
|
+
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@nikcli-ai/plugin/tui"
|
|
3
|
+
import { createMemo } from "solid-js"
|
|
4
|
+
|
|
5
|
+
const id = "internal:sidebar-context"
|
|
6
|
+
|
|
7
|
+
const money = new Intl.NumberFormat("en-US", {
|
|
8
|
+
style: "currency",
|
|
9
|
+
currency: "USD",
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
function View(props: { api: TuiPluginApi; session_id: string }) {
|
|
13
|
+
const theme = () => props.api.theme.current
|
|
14
|
+
const msg = createMemo(() => props.api.state.session.messages(props.session_id))
|
|
15
|
+
const cost = createMemo(() => msg().reduce((sum, item) => sum + (item.role === "assistant" ? item.cost : 0), 0))
|
|
16
|
+
|
|
17
|
+
const state = createMemo(() => {
|
|
18
|
+
const last = msg().findLast((item): item is AssistantMessage => item.role === "assistant" && item.tokens.output > 0)
|
|
19
|
+
if (!last) {
|
|
20
|
+
return {
|
|
21
|
+
tokens: 0,
|
|
22
|
+
percent: null,
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const tokens =
|
|
27
|
+
last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write
|
|
28
|
+
const model = props.api.state.provider.find((item) => item.id === last.providerID)?.models[last.modelID]
|
|
29
|
+
return {
|
|
30
|
+
tokens,
|
|
31
|
+
percent: model?.limit.context ? Math.round((tokens / model.limit.context) * 100) : null,
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<box>
|
|
37
|
+
<text fg={theme().text}>
|
|
38
|
+
<b>Context</b>
|
|
39
|
+
</text>
|
|
40
|
+
<text fg={theme().textMuted}>{state().tokens.toLocaleString()} tokens</text>
|
|
41
|
+
<text fg={theme().textMuted}>{state().percent ?? 0}% used</text>
|
|
42
|
+
<text fg={theme().textMuted}>{money.format(cost())} spent</text>
|
|
43
|
+
</box>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const tui: TuiPlugin = async (api) => {
|
|
48
|
+
api.slots.register({
|
|
49
|
+
order: 100,
|
|
50
|
+
slots: {
|
|
51
|
+
sidebar_content(_ctx, props) {
|
|
52
|
+
return <View api={api} session_id={props.session_id} />
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
59
|
+
id,
|
|
60
|
+
tui,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export default plugin
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@nikcli-ai/plugin/tui"
|
|
2
|
+
import { createMemo, For, Show, createSignal } from "solid-js"
|
|
3
|
+
|
|
4
|
+
const id = "internal:sidebar-files"
|
|
5
|
+
|
|
6
|
+
function View(props: { api: TuiPluginApi; session_id: string }) {
|
|
7
|
+
const [open, setOpen] = createSignal(true)
|
|
8
|
+
const theme = () => props.api.theme.current
|
|
9
|
+
const list = createMemo(() => props.api.state.session.diff(props.session_id))
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<Show when={list().length > 0}>
|
|
13
|
+
<box>
|
|
14
|
+
<box flexDirection="row" gap={1} onMouseDown={() => list().length > 2 && setOpen((x) => !x)}>
|
|
15
|
+
<Show when={list().length > 2}>
|
|
16
|
+
<text fg={theme().text}>{open() ? "▼" : "▶"}</text>
|
|
17
|
+
</Show>
|
|
18
|
+
<text fg={theme().text}>
|
|
19
|
+
<b>Modified Files</b>
|
|
20
|
+
</text>
|
|
21
|
+
</box>
|
|
22
|
+
<Show when={list().length <= 2 || open()}>
|
|
23
|
+
<For each={list()}>
|
|
24
|
+
{(item) => (
|
|
25
|
+
<box flexDirection="row" gap={1} justifyContent="space-between">
|
|
26
|
+
<text fg={theme().textMuted} wrapMode="none">
|
|
27
|
+
{item.file}
|
|
28
|
+
</text>
|
|
29
|
+
<box flexDirection="row" gap={1} flexShrink={0}>
|
|
30
|
+
<Show when={item.additions}>
|
|
31
|
+
<text fg={theme().diffAdded}>+{item.additions}</text>
|
|
32
|
+
</Show>
|
|
33
|
+
<Show when={item.deletions}>
|
|
34
|
+
<text fg={theme().diffRemoved}>-{item.deletions}</text>
|
|
35
|
+
</Show>
|
|
36
|
+
</box>
|
|
37
|
+
</box>
|
|
38
|
+
)}
|
|
39
|
+
</For>
|
|
40
|
+
</Show>
|
|
41
|
+
</box>
|
|
42
|
+
</Show>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const tui: TuiPlugin = async (api) => {
|
|
47
|
+
api.slots.register({
|
|
48
|
+
order: 500,
|
|
49
|
+
slots: {
|
|
50
|
+
sidebar_content(_ctx, props) {
|
|
51
|
+
return <View api={api} session_id={props.session_id} />
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
58
|
+
id,
|
|
59
|
+
tui,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default plugin
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@nikcli-ai/plugin/tui"
|
|
2
|
+
import { createMemo, Show } from "solid-js"
|
|
3
|
+
import { Global } from "@/global"
|
|
4
|
+
|
|
5
|
+
const id = "internal:sidebar-footer"
|
|
6
|
+
|
|
7
|
+
function View(props: { api: TuiPluginApi }) {
|
|
8
|
+
const theme = () => props.api.theme.current
|
|
9
|
+
const has = createMemo(() =>
|
|
10
|
+
props.api.state.provider.some(
|
|
11
|
+
(item) => item.id !== "opencode" || Object.values(item.models).some((model) => model.cost?.input !== 0),
|
|
12
|
+
),
|
|
13
|
+
)
|
|
14
|
+
const done = createMemo(() => props.api.kv.get("dismissed_getting_started", false))
|
|
15
|
+
const show = createMemo(() => !has() && !done())
|
|
16
|
+
const path = createMemo(() => {
|
|
17
|
+
const dir = props.api.state.path.directory || process.cwd()
|
|
18
|
+
const out = dir.replace(Global.Path.home, "~")
|
|
19
|
+
const text = props.api.state.vcs?.branch ? out + ":" + props.api.state.vcs.branch : out
|
|
20
|
+
const list = text.split("/")
|
|
21
|
+
return {
|
|
22
|
+
parent: list.slice(0, -1).join("/"),
|
|
23
|
+
name: list.at(-1) ?? "",
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<box gap={1}>
|
|
29
|
+
<Show when={show()}>
|
|
30
|
+
<box
|
|
31
|
+
backgroundColor={theme().backgroundElement}
|
|
32
|
+
paddingTop={1}
|
|
33
|
+
paddingBottom={1}
|
|
34
|
+
paddingLeft={2}
|
|
35
|
+
paddingRight={2}
|
|
36
|
+
flexDirection="row"
|
|
37
|
+
gap={1}
|
|
38
|
+
>
|
|
39
|
+
<text flexShrink={0} fg={theme().text}>
|
|
40
|
+
⬖
|
|
41
|
+
</text>
|
|
42
|
+
<box flexGrow={1} gap={1}>
|
|
43
|
+
<box flexDirection="row" justifyContent="space-between">
|
|
44
|
+
<text fg={theme().text}>
|
|
45
|
+
<b>Getting started</b>
|
|
46
|
+
</text>
|
|
47
|
+
<text fg={theme().textMuted} onMouseDown={() => props.api.kv.set("dismissed_getting_started", true)}>
|
|
48
|
+
✕
|
|
49
|
+
</text>
|
|
50
|
+
</box>
|
|
51
|
+
<text fg={theme().textMuted}>NikCLI includes free models so you can start immediately.</text>
|
|
52
|
+
<text fg={theme().textMuted}>
|
|
53
|
+
Connect from 75+ providers to use other models, including Claude, GPT, Gemini etc
|
|
54
|
+
</text>
|
|
55
|
+
<box flexDirection="row" gap={1} justifyContent="space-between">
|
|
56
|
+
<text fg={theme().text}>Connect provider</text>
|
|
57
|
+
<text fg={theme().textMuted}>/connect</text>
|
|
58
|
+
</box>
|
|
59
|
+
</box>
|
|
60
|
+
</box>
|
|
61
|
+
</Show>
|
|
62
|
+
<text>
|
|
63
|
+
<span style={{ fg: theme().textMuted }}>{path().parent}/</span>
|
|
64
|
+
<span style={{ fg: theme().text }}>{path().name}</span>
|
|
65
|
+
</text>
|
|
66
|
+
<text fg={theme().textMuted}>
|
|
67
|
+
<span style={{ fg: theme().success }}>•</span> <b>Nik</b>
|
|
68
|
+
<span style={{ fg: theme().text }}>
|
|
69
|
+
<b>CLI</b>
|
|
70
|
+
</span>{" "}
|
|
71
|
+
<span>{props.api.app.version}</span>
|
|
72
|
+
</text>
|
|
73
|
+
</box>
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const tui: TuiPlugin = async (api) => {
|
|
78
|
+
api.slots.register({
|
|
79
|
+
order: 100,
|
|
80
|
+
slots: {
|
|
81
|
+
sidebar_footer() {
|
|
82
|
+
return <View api={api} />
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
89
|
+
id,
|
|
90
|
+
tui,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export default plugin
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@nikcli-ai/plugin/tui"
|
|
2
|
+
import { createMemo, For, Show, createSignal } from "solid-js"
|
|
3
|
+
|
|
4
|
+
const id = "internal:sidebar-lsp"
|
|
5
|
+
|
|
6
|
+
function View(props: { api: TuiPluginApi }) {
|
|
7
|
+
const [open, setOpen] = createSignal(true)
|
|
8
|
+
const theme = () => props.api.theme.current
|
|
9
|
+
const list = createMemo(() => props.api.state.lsp())
|
|
10
|
+
const off = createMemo(() => props.api.state.config.lsp === false)
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<box>
|
|
14
|
+
<box flexDirection="row" gap={1} onMouseDown={() => list().length > 2 && setOpen((x) => !x)}>
|
|
15
|
+
<Show when={list().length > 2}>
|
|
16
|
+
<text fg={theme().text}>{open() ? "▼" : "▶"}</text>
|
|
17
|
+
</Show>
|
|
18
|
+
<text fg={theme().text}>
|
|
19
|
+
<b>LSP</b>
|
|
20
|
+
</text>
|
|
21
|
+
</box>
|
|
22
|
+
<Show when={list().length <= 2 || open()}>
|
|
23
|
+
<Show when={list().length === 0}>
|
|
24
|
+
<text fg={theme().textMuted}>
|
|
25
|
+
{off() ? "LSPs have been disabled in settings" : "LSPs will activate as files are read"}
|
|
26
|
+
</text>
|
|
27
|
+
</Show>
|
|
28
|
+
<For each={list()}>
|
|
29
|
+
{(item) => (
|
|
30
|
+
<box flexDirection="row" gap={1}>
|
|
31
|
+
<text
|
|
32
|
+
flexShrink={0}
|
|
33
|
+
style={{
|
|
34
|
+
fg: item.status === "connected" ? theme().success : theme().error,
|
|
35
|
+
}}
|
|
36
|
+
>
|
|
37
|
+
•
|
|
38
|
+
</text>
|
|
39
|
+
<text fg={theme().textMuted}>
|
|
40
|
+
{item.id} {item.root}
|
|
41
|
+
</text>
|
|
42
|
+
</box>
|
|
43
|
+
)}
|
|
44
|
+
</For>
|
|
45
|
+
</Show>
|
|
46
|
+
</box>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const tui: TuiPlugin = async (api) => {
|
|
51
|
+
api.slots.register({
|
|
52
|
+
order: 300,
|
|
53
|
+
slots: {
|
|
54
|
+
sidebar_content() {
|
|
55
|
+
return <View api={api} />
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
62
|
+
id,
|
|
63
|
+
tui,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default plugin
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@nikcli-ai/plugin/tui"
|
|
2
|
+
import { createMemo, For, Match, Show, Switch, createSignal } from "solid-js"
|
|
3
|
+
|
|
4
|
+
const id = "internal:sidebar-mcp"
|
|
5
|
+
|
|
6
|
+
function View(props: { api: TuiPluginApi }) {
|
|
7
|
+
const [open, setOpen] = createSignal(true)
|
|
8
|
+
const theme = () => props.api.theme.current
|
|
9
|
+
const list = createMemo(() => props.api.state.mcp())
|
|
10
|
+
const on = createMemo(() => list().filter((item) => item.status === "connected").length)
|
|
11
|
+
const bad = createMemo(
|
|
12
|
+
() =>
|
|
13
|
+
list().filter(
|
|
14
|
+
(item) =>
|
|
15
|
+
item.status === "failed" || item.status === "needs_auth" || item.status === "needs_client_registration",
|
|
16
|
+
).length,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
const dot = (status: string) => {
|
|
20
|
+
if (status === "connected") return theme().success
|
|
21
|
+
if (status === "failed") return theme().error
|
|
22
|
+
if (status === "disabled") return theme().textMuted
|
|
23
|
+
if (status === "needs_auth") return theme().warning
|
|
24
|
+
if (status === "needs_client_registration") return theme().error
|
|
25
|
+
return theme().textMuted
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<Show when={list().length > 0}>
|
|
30
|
+
<box>
|
|
31
|
+
<box flexDirection="row" gap={1} onMouseDown={() => list().length > 2 && setOpen((x) => !x)}>
|
|
32
|
+
<Show when={list().length > 2}>
|
|
33
|
+
<text fg={theme().text}>{open() ? "▼" : "▶"}</text>
|
|
34
|
+
</Show>
|
|
35
|
+
<text fg={theme().text}>
|
|
36
|
+
<b>MCP</b>
|
|
37
|
+
<Show when={!open()}>
|
|
38
|
+
<span style={{ fg: theme().textMuted }}>
|
|
39
|
+
{" "}
|
|
40
|
+
({on()} active{bad() > 0 ? `, ${bad()} error${bad() > 1 ? "s" : ""}` : ""})
|
|
41
|
+
</span>
|
|
42
|
+
</Show>
|
|
43
|
+
</text>
|
|
44
|
+
</box>
|
|
45
|
+
<Show when={list().length <= 2 || open()}>
|
|
46
|
+
<For each={list()}>
|
|
47
|
+
{(item) => (
|
|
48
|
+
<box flexDirection="row" gap={1}>
|
|
49
|
+
<text
|
|
50
|
+
flexShrink={0}
|
|
51
|
+
style={{
|
|
52
|
+
fg: dot(item.status),
|
|
53
|
+
}}
|
|
54
|
+
>
|
|
55
|
+
•
|
|
56
|
+
</text>
|
|
57
|
+
<text fg={theme().text} wrapMode="word">
|
|
58
|
+
{item.name}{" "}
|
|
59
|
+
<span style={{ fg: theme().textMuted }}>
|
|
60
|
+
<Switch fallback={item.status}>
|
|
61
|
+
<Match when={item.status === "connected"}>Connected</Match>
|
|
62
|
+
<Match when={item.status === "failed"}>
|
|
63
|
+
<i>{item.error}</i>
|
|
64
|
+
</Match>
|
|
65
|
+
<Match when={item.status === "disabled"}>Disabled</Match>
|
|
66
|
+
<Match when={item.status === "needs_auth"}>Needs auth</Match>
|
|
67
|
+
<Match when={item.status === "needs_client_registration"}>Needs client ID</Match>
|
|
68
|
+
</Switch>
|
|
69
|
+
</span>
|
|
70
|
+
</text>
|
|
71
|
+
</box>
|
|
72
|
+
)}
|
|
73
|
+
</For>
|
|
74
|
+
</Show>
|
|
75
|
+
</box>
|
|
76
|
+
</Show>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const tui: TuiPlugin = async (api) => {
|
|
81
|
+
api.slots.register({
|
|
82
|
+
order: 200,
|
|
83
|
+
slots: {
|
|
84
|
+
sidebar_content() {
|
|
85
|
+
return <View api={api} />
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
92
|
+
id,
|
|
93
|
+
tui,
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export default plugin
|