kimaki 0.31.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-ui.d.ts +33 -0
- package/dist/agent-ui.e2e.test.d.ts +1 -0
- package/dist/agent-ui.e2e.test.js +140 -0
- package/dist/agent-ui.e2e.test.js.map +1 -0
- package/dist/agent-ui.js +199 -0
- package/dist/agent-ui.js.map +1 -0
- package/dist/analytics.d.ts +42 -0
- package/dist/analytics.e2e.test.d.ts +1 -0
- package/dist/analytics.e2e.test.js +112 -0
- package/dist/analytics.e2e.test.js.map +1 -0
- package/dist/analytics.js +162 -223
- package/dist/analytics.js.map +1 -0
- package/dist/analytics.test.d.ts +1 -0
- package/dist/analytics.test.js +121 -157
- package/dist/analytics.test.js.map +1 -0
- package/dist/autostart.d.ts +7 -0
- package/dist/autostart.js +75 -0
- package/dist/autostart.js.map +1 -0
- package/dist/bot.d.ts +90 -0
- package/dist/bot.js +120 -0
- package/dist/bot.js.map +1 -0
- package/dist/btw.e2e.test.d.ts +1 -0
- package/dist/btw.e2e.test.js +102 -0
- package/dist/btw.e2e.test.js.map +1 -0
- package/dist/catalog-refresh.e2e.test.d.ts +1 -0
- package/dist/catalog-refresh.e2e.test.js +90 -0
- package/dist/catalog-refresh.e2e.test.js.map +1 -0
- package/dist/cli/bot.d.ts +5 -0
- package/dist/cli/bot.js +427 -0
- package/dist/cli/bot.js.map +1 -0
- package/dist/cli/discord.d.ts +3 -0
- package/dist/cli/discord.js +118 -0
- package/dist/cli/discord.js.map +1 -0
- package/dist/cli/project.d.ts +5 -0
- package/dist/cli/project.js +143 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/schedule.d.ts +3 -0
- package/dist/cli/schedule.js +156 -0
- package/dist/cli/schedule.js.map +1 -0
- package/dist/cli/session.d.ts +4 -0
- package/dist/cli/session.js +281 -0
- package/dist/cli/session.js.map +1 -0
- package/dist/cli/shared.d.ts +55 -0
- package/dist/cli/shared.js +138 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli-discord.e2e.test.d.ts +1 -0
- package/dist/cli-discord.e2e.test.js +64 -0
- package/dist/cli-discord.e2e.test.js.map +1 -0
- package/dist/cli-lock.e2e.test.d.ts +1 -0
- package/dist/cli-lock.e2e.test.js +520 -0
- package/dist/cli-lock.e2e.test.js.map +1 -0
- package/dist/cli-read.e2e.test.d.ts +1 -0
- package/dist/cli-read.e2e.test.js +81 -0
- package/dist/cli-read.e2e.test.js.map +1 -0
- package/dist/cli-sessions.e2e.test.d.ts +1 -0
- package/dist/cli-sessions.e2e.test.js +116 -0
- package/dist/cli-sessions.e2e.test.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +34 -263
- package/dist/cli.js.map +1 -0
- package/dist/commands/login-commands.d.ts +59 -0
- package/dist/commands/login-commands.js +341 -0
- package/dist/commands/login-commands.js.map +1 -0
- package/dist/commands/preference-commands.d.ts +44 -0
- package/dist/commands/preference-commands.js +551 -0
- package/dist/commands/preference-commands.js.map +1 -0
- package/dist/commands/session-commands.d.ts +8 -0
- package/dist/commands/session-commands.js +267 -0
- package/dist/commands/session-commands.js.map +1 -0
- package/dist/commands/thread-commands.d.ts +16 -0
- package/dist/commands/thread-commands.js +285 -0
- package/dist/commands/thread-commands.js.map +1 -0
- package/dist/commands/worktree-commands.d.ts +41 -0
- package/dist/commands/worktree-commands.js +279 -0
- package/dist/commands/worktree-commands.js.map +1 -0
- package/dist/commands.e2e.test.d.ts +1 -0
- package/dist/commands.e2e.test.js +255 -0
- package/dist/commands.e2e.test.js.map +1 -0
- package/dist/credentials.d.ts +84 -0
- package/dist/credentials.js +320 -0
- package/dist/credentials.js.map +1 -0
- package/dist/db.d.ts +1532 -0
- package/dist/db.js +57 -245
- package/dist/db.js.map +1 -0
- package/dist/db.test.d.ts +1 -0
- package/dist/db.test.js +351 -682
- package/dist/db.test.js.map +1 -0
- package/dist/duration.d.ts +2 -0
- package/dist/duration.js +18 -0
- package/dist/duration.js.map +1 -0
- package/dist/effects.d.ts +15 -0
- package/dist/effects.js +291 -0
- package/dist/effects.js.map +1 -0
- package/dist/errors.d.ts +38 -0
- package/dist/errors.js +40 -175
- package/dist/errors.js.map +1 -0
- package/dist/event-loop.d.ts +40 -0
- package/dist/event-loop.js +414 -0
- package/dist/event-loop.js.map +1 -0
- package/dist/file-edit-log.d.ts +41 -0
- package/dist/file-edit-log.js +122 -164
- package/dist/file-edit-log.js.map +1 -0
- package/dist/file-edit-log.test.d.ts +1 -0
- package/dist/file-edit-log.test.js +68 -244
- package/dist/file-edit-log.test.js.map +1 -0
- package/dist/format-parts.d.ts +137 -0
- package/dist/format-parts.js +300 -0
- package/dist/format-parts.js.map +1 -0
- package/dist/format-parts.test.d.ts +1 -0
- package/dist/format-parts.test.js +144 -0
- package/dist/format-parts.test.js.map +1 -0
- package/dist/gateway-replay.e2e.test.d.ts +1 -0
- package/dist/gateway-replay.e2e.test.js +95 -0
- package/dist/gateway-replay.e2e.test.js.map +1 -0
- package/dist/harness.e2e.test.d.ts +1 -0
- package/dist/harness.e2e.test.js +107 -0
- package/dist/harness.e2e.test.js.map +1 -0
- package/dist/hello-thread.e2e.test.d.ts +1 -0
- package/dist/hello-thread.e2e.test.js +194 -0
- package/dist/hello-thread.e2e.test.js.map +1 -0
- package/dist/ingress.d.ts +7 -0
- package/dist/ingress.js +337 -0
- package/dist/ingress.js.map +1 -0
- package/dist/interaction-context.d.ts +45 -0
- package/dist/interaction-context.js +77 -0
- package/dist/interaction-context.js.map +1 -0
- package/dist/interrupt.e2e.test.d.ts +1 -0
- package/dist/interrupt.e2e.test.js +124 -0
- package/dist/interrupt.e2e.test.js.map +1 -0
- package/dist/legacy.e2e.test.d.ts +1 -0
- package/dist/legacy.e2e.test.js +85 -0
- package/dist/legacy.e2e.test.js.map +1 -0
- package/dist/live-call.d.ts +51 -0
- package/dist/live-call.js +207 -0
- package/dist/live-call.js.map +1 -0
- package/dist/lock-routes.d.ts +812 -0
- package/dist/lock-routes.js +635 -0
- package/dist/lock-routes.js.map +1 -0
- package/dist/lock-server.d.ts +36 -0
- package/dist/lock-server.js +223 -0
- package/dist/lock-server.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.js +112 -162
- package/dist/logger.js.map +1 -0
- package/dist/login.e2e.test.d.ts +1 -0
- package/dist/login.e2e.test.js +83 -0
- package/dist/login.e2e.test.js.map +1 -0
- package/dist/main.d.ts +32 -0
- package/dist/main.js +190 -0
- package/dist/main.js.map +1 -0
- package/dist/markdown/components.d.ts +10 -0
- package/dist/markdown/components.js +77 -0
- package/dist/markdown/components.js.map +1 -0
- package/dist/markdown/markdown.test.d.ts +1 -0
- package/dist/markdown/markdown.test.js +393 -0
- package/dist/markdown/markdown.test.js.map +1 -0
- package/dist/markdown/render-markdown.d.ts +30 -0
- package/dist/markdown/render-markdown.js +265 -0
- package/dist/markdown/render-markdown.js.map +1 -0
- package/dist/message-tool.e2e.test.d.ts +1 -0
- package/dist/message-tool.e2e.test.js +39 -0
- package/dist/message-tool.e2e.test.js.map +1 -0
- package/dist/migrations.d.ts +8 -0
- package/dist/migrations.js +187 -0
- package/dist/migrations.js.map +1 -0
- package/dist/onboarding-cli.e2e.test.d.ts +1 -0
- package/dist/onboarding-cli.e2e.test.js +178 -0
- package/dist/onboarding-cli.e2e.test.js.map +1 -0
- package/dist/onboarding.d.ts +36 -0
- package/dist/onboarding.e2e.test.d.ts +1 -0
- package/dist/onboarding.e2e.test.js +148 -0
- package/dist/onboarding.e2e.test.js.map +1 -0
- package/dist/onboarding.js +261 -0
- package/dist/onboarding.js.map +1 -0
- package/dist/opencode-server.d.ts +54 -0
- package/dist/opencode-server.js +413 -0
- package/dist/opencode-server.js.map +1 -0
- package/dist/opencode-server.test.d.ts +1 -0
- package/dist/opencode-server.test.js +21 -0
- package/dist/opencode-server.test.js.map +1 -0
- package/dist/permissions.d.ts +31 -0
- package/dist/permissions.e2e.test.d.ts +1 -0
- package/dist/permissions.e2e.test.js +166 -0
- package/dist/permissions.e2e.test.js.map +1 -0
- package/dist/permissions.js +95 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin/anthropic/index.d.ts +13 -0
- package/dist/plugin/anthropic/index.js +201 -0
- package/dist/plugin/anthropic/index.js.map +1 -0
- package/dist/plugin/anthropic/index.test.d.ts +1 -0
- package/dist/plugin/anthropic/index.test.js +39 -0
- package/dist/plugin/anthropic/index.test.js.map +1 -0
- package/dist/plugin/index.d.ts +3 -0
- package/dist/plugin/index.js +106 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/session-id/index.d.ts +3 -0
- package/dist/plugin/session-id/index.js +18 -0
- package/dist/plugin/session-id/index.js.map +1 -0
- package/dist/plugin.e2e.test.d.ts +1 -0
- package/dist/plugin.e2e.test.js +87 -0
- package/dist/plugin.e2e.test.js.map +1 -0
- package/dist/preference-commands.e2e.test.d.ts +1 -0
- package/dist/preference-commands.e2e.test.js +555 -0
- package/dist/preference-commands.e2e.test.js.map +1 -0
- package/dist/probe-live.tmp.d.ts +1 -0
- package/dist/probe-live.tmp.js +82 -0
- package/dist/probe-live.tmp.js.map +1 -0
- package/dist/project.d.ts +58 -0
- package/dist/project.js +169 -0
- package/dist/project.js.map +1 -0
- package/dist/prompt.d.ts +112 -0
- package/dist/prompt.js +578 -0
- package/dist/prompt.js.map +1 -0
- package/dist/questions.d.ts +59 -0
- package/dist/questions.e2e.test.d.ts +1 -0
- package/dist/questions.e2e.test.js +290 -0
- package/dist/questions.e2e.test.js.map +1 -0
- package/dist/questions.js +231 -0
- package/dist/questions.js.map +1 -0
- package/dist/queue.d.ts +45 -0
- package/dist/queue.e2e.test.d.ts +1 -0
- package/dist/queue.e2e.test.js +220 -0
- package/dist/queue.e2e.test.js.map +1 -0
- package/dist/queue.js +132 -0
- package/dist/queue.js.map +1 -0
- package/dist/remote-send.d.ts +32 -0
- package/dist/remote-send.e2e.test.d.ts +1 -0
- package/dist/remote-send.e2e.test.js +89 -0
- package/dist/remote-send.e2e.test.js.map +1 -0
- package/dist/remote-send.js +105 -0
- package/dist/remote-send.js.map +1 -0
- package/dist/renderer.e2e.test.d.ts +1 -0
- package/dist/renderer.e2e.test.js +357 -0
- package/dist/renderer.e2e.test.js.map +1 -0
- package/dist/restart.e2e.test.d.ts +1 -0
- package/dist/restart.e2e.test.js +68 -0
- package/dist/restart.e2e.test.js.map +1 -0
- package/dist/routes.d.ts +24 -0
- package/dist/routes.js +42 -0
- package/dist/routes.js.map +1 -0
- package/dist/routes.test.d.ts +1 -0
- package/dist/routes.test.js +79 -0
- package/dist/routes.test.js.map +1 -0
- package/dist/routines.e2e.test.d.ts +1 -0
- package/dist/routines.e2e.test.js +188 -0
- package/dist/routines.e2e.test.js.map +1 -0
- package/dist/scheduler.d.ts +116 -0
- package/dist/scheduler.e2e.test.d.ts +1 -0
- package/dist/scheduler.e2e.test.js +163 -0
- package/dist/scheduler.e2e.test.js.map +1 -0
- package/dist/scheduler.js +602 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/scheduler.test.d.ts +1 -0
- package/dist/scheduler.test.js +180 -0
- package/dist/scheduler.test.js.map +1 -0
- package/dist/schema-sql.d.ts +1 -0
- package/dist/schema-sql.js +3 -0
- package/dist/schema-sql.js.map +1 -0
- package/dist/schema.d.ts +2968 -0
- package/dist/schema.js +95 -252
- package/dist/schema.js.map +1 -0
- package/dist/session-commands.e2e.test.d.ts +1 -0
- package/dist/session-commands.e2e.test.js +285 -0
- package/dist/session-commands.e2e.test.js.map +1 -0
- package/dist/session-events.d.ts +55 -0
- package/dist/session-events.js +190 -0
- package/dist/session-events.js.map +1 -0
- package/dist/session-ops.e2e.test.d.ts +1 -0
- package/dist/session-ops.e2e.test.js +114 -0
- package/dist/session-ops.e2e.test.js.map +1 -0
- package/dist/sessions.d.ts +121 -0
- package/dist/sessions.js +662 -0
- package/dist/sessions.js.map +1 -0
- package/dist/shell.e2e.test.d.ts +1 -0
- package/dist/shell.e2e.test.js +147 -0
- package/dist/shell.e2e.test.js.map +1 -0
- package/dist/slash-commands.d.ts +62 -0
- package/dist/slash-commands.js +475 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/slash-commands.test.d.ts +1 -0
- package/dist/slash-commands.test.js +87 -0
- package/dist/slash-commands.test.js.map +1 -0
- package/dist/sleep.e2e.test.d.ts +1 -0
- package/dist/sleep.e2e.test.js +115 -487
- package/dist/sleep.e2e.test.js.map +1 -0
- package/dist/sleeps.d.ts +37 -0
- package/dist/sleeps.js +220 -0
- package/dist/sleeps.js.map +1 -0
- package/dist/store.d.ts +10 -0
- package/dist/store.js +8 -28
- package/dist/store.js.map +1 -0
- package/dist/system-prompt.d.ts +65 -0
- package/dist/system-prompt.js +875 -0
- package/dist/system-prompt.js.map +1 -0
- package/dist/tasks.e2e.test.d.ts +1 -0
- package/dist/tasks.e2e.test.js +173 -0
- package/dist/tasks.e2e.test.js.map +1 -0
- package/dist/test/auth-plugin/index.d.ts +3 -0
- package/dist/test/auth-plugin/index.js +18 -0
- package/dist/test/auth-plugin/index.js.map +1 -0
- package/dist/test/fake-mcp-server.d.ts +1 -0
- package/dist/test/fake-mcp-server.js +45 -0
- package/dist/test/fake-mcp-server.js.map +1 -0
- package/dist/test/harness.d.ts +246 -0
- package/dist/test/harness.js +704 -0
- package/dist/test/harness.js.map +1 -0
- package/dist/test/replay.d.ts +14 -0
- package/dist/test/replay.js +75 -0
- package/dist/test/replay.js.map +1 -0
- package/dist/thread-reducer.d.ts +172 -0
- package/dist/thread-reducer.fixtures.test.d.ts +1 -0
- package/dist/thread-reducer.fixtures.test.js +360 -0
- package/dist/thread-reducer.fixtures.test.js.map +1 -0
- package/dist/thread-reducer.js +497 -0
- package/dist/thread-reducer.js.map +1 -0
- package/dist/thread-reducer.test.d.ts +1 -0
- package/dist/thread-reducer.test.js +369 -0
- package/dist/thread-reducer.test.js.map +1 -0
- package/dist/tts.test.d.ts +1 -0
- package/dist/tts.test.js +147 -0
- package/dist/tts.test.js.map +1 -0
- package/dist/voice-agent.d.ts +33 -0
- package/dist/voice-agent.js +159 -0
- package/dist/voice-agent.js.map +1 -0
- package/dist/voice-attachments.e2e.test.d.ts +1 -0
- package/dist/voice-attachments.e2e.test.js +253 -0
- package/dist/voice-attachments.e2e.test.js.map +1 -0
- package/dist/voice-call.d.ts +59 -0
- package/dist/voice-call.e2e.test.d.ts +1 -0
- package/dist/voice-call.e2e.test.js +259 -0
- package/dist/voice-call.e2e.test.js.map +1 -0
- package/dist/voice-call.js +760 -0
- package/dist/voice-call.js.map +1 -0
- package/dist/voice-openai.e2e.test.d.ts +1 -0
- package/dist/voice-openai.e2e.test.js +161 -0
- package/dist/voice-openai.e2e.test.js.map +1 -0
- package/dist/voice.d.ts +116 -0
- package/dist/voice.js +619 -717
- package/dist/voice.js.map +1 -0
- package/dist/working-directory.e2e.test.d.ts +1 -0
- package/dist/working-directory.e2e.test.js +231 -0
- package/dist/working-directory.e2e.test.js.map +1 -0
- package/dist/worktrees.d.ts +54 -0
- package/dist/worktrees.js +247 -709
- package/dist/worktrees.js.map +1 -0
- package/dist/worktrees.test.d.ts +1 -0
- package/dist/worktrees.test.js +97 -952
- package/dist/worktrees.test.js.map +1 -0
- package/package.json +38 -74
- package/src/agent-ui.e2e.test.ts +134 -0
- package/src/agent-ui.ts +216 -0
- package/src/analytics.e2e.test.ts +138 -0
- package/src/analytics.test.ts +122 -182
- package/src/analytics.ts +206 -258
- package/src/autostart.ts +78 -0
- package/src/bot.ts +194 -0
- package/src/btw.e2e.test.ts +130 -0
- package/src/catalog-refresh.e2e.test.ts +112 -0
- package/src/cli/bot.ts +419 -0
- package/src/cli/discord.ts +116 -0
- package/src/cli/project.ts +147 -0
- package/src/cli/schedule.ts +151 -0
- package/src/cli/session.ts +285 -0
- package/src/cli/shared.ts +139 -0
- package/src/cli-discord.e2e.test.ts +62 -0
- package/src/cli-lock.e2e.test.ts +530 -0
- package/src/cli-read.e2e.test.ts +78 -0
- package/src/cli-sessions.e2e.test.ts +122 -0
- package/src/cli.ts +35 -418
- package/src/commands/login-commands.ts +360 -0
- package/src/commands/preference-commands.ts +586 -0
- package/src/commands/session-commands.ts +289 -0
- package/src/commands/thread-commands.ts +324 -0
- package/src/commands/worktree-commands.ts +288 -0
- package/src/commands.e2e.test.ts +290 -0
- package/src/credentials.ts +425 -0
- package/src/db.test.ts +344 -759
- package/src/db.ts +66 -284
- package/src/duration.ts +18 -0
- package/src/effects.ts +303 -0
- package/src/errors.ts +39 -228
- package/src/event-loop.ts +462 -0
- package/src/file-edit-log.test.ts +68 -272
- package/src/file-edit-log.ts +108 -231
- package/src/fixtures/v1-schema.sql +241 -0
- package/src/fixtures/voice.ogg +0 -0
- package/src/format-parts.test.ts +150 -0
- package/src/format-parts.ts +405 -0
- package/src/gateway-replay.e2e.test.ts +116 -0
- package/src/harness.e2e.test.ts +124 -0
- package/src/hello-thread.e2e.test.ts +223 -0
- package/src/ingress.ts +334 -0
- package/src/interaction-context.ts +131 -0
- package/src/interrupt.e2e.test.ts +151 -0
- package/src/legacy.e2e.test.ts +105 -0
- package/src/live-call.ts +249 -0
- package/src/lock-routes.ts +625 -0
- package/src/lock-server.ts +233 -0
- package/src/logger.ts +120 -207
- package/src/login.e2e.test.ts +86 -0
- package/src/main.ts +230 -0
- package/src/markdown/components.ts +102 -0
- package/src/markdown/markdown.test.ts +414 -0
- package/src/markdown/render-markdown.ts +288 -0
- package/src/migrations.ts +198 -0
- package/src/onboarding-cli.e2e.test.ts +215 -0
- package/src/onboarding.e2e.test.ts +171 -0
- package/src/onboarding.ts +297 -0
- package/src/opencode-server.test.ts +24 -0
- package/src/opencode-server.ts +461 -0
- package/src/permissions.e2e.test.ts +191 -0
- package/src/permissions.ts +121 -0
- package/src/plugin/anthropic/index.test.ts +39 -0
- package/src/plugin/anthropic/index.ts +213 -0
- package/src/plugin/index.ts +93 -0
- package/src/plugin/session-id/index.ts +19 -0
- package/src/plugin.e2e.test.ts +112 -0
- package/src/preference-commands.e2e.test.ts +597 -0
- package/src/project.ts +216 -0
- package/src/prompt.ts +664 -0
- package/src/questions.e2e.test.ts +328 -0
- package/src/questions.ts +322 -0
- package/src/queue.e2e.test.ts +253 -0
- package/src/queue.ts +158 -0
- package/src/remote-send.e2e.test.ts +91 -0
- package/src/remote-send.ts +110 -0
- package/src/renderer.e2e.test.ts +390 -0
- package/src/restart.e2e.test.ts +90 -0
- package/src/routes.test.ts +81 -0
- package/src/routes.ts +48 -0
- package/src/routines.e2e.test.ts +210 -0
- package/src/scheduler.e2e.test.ts +182 -0
- package/src/scheduler.test.ts +183 -0
- package/src/scheduler.ts +648 -0
- package/src/schema-sql.ts +3 -0
- package/src/schema.ts +95 -271
- package/src/session-commands.e2e.test.ts +326 -0
- package/src/session-events.ts +218 -0
- package/src/session-ops.e2e.test.ts +141 -0
- package/src/sessions.ts +803 -0
- package/src/shell.e2e.test.ts +173 -0
- package/src/slash-commands.test.ts +89 -0
- package/src/slash-commands.ts +539 -0
- package/src/sleep.e2e.test.ts +135 -552
- package/src/sleeps.ts +230 -0
- package/src/store.ts +19 -217
- package/src/system-prompt.ts +944 -0
- package/src/test/auth-plugin/index.ts +17 -0
- package/src/test/fake-mcp-server.ts +49 -0
- package/src/test/harness.ts +957 -0
- package/src/test/replay.ts +90 -0
- package/src/thread-reducer.fixtures.test.ts +374 -0
- package/src/thread-reducer.test.ts +380 -0
- package/src/thread-reducer.ts +671 -0
- package/src/tts.test.ts +150 -0
- package/src/voice-agent.ts +196 -0
- package/src/voice-attachments.e2e.test.ts +298 -0
- package/src/voice-call.e2e.test.ts +293 -0
- package/src/voice-call.ts +764 -0
- package/src/voice-openai.e2e.test.ts +191 -0
- package/src/voice.ts +668 -988
- package/src/working-directory.e2e.test.ts +226 -0
- package/src/worktrees.test.ts +89 -1115
- package/src/worktrees.ts +195 -957
- package/bin.js +0 -2
- package/dist/agent-model.e2e.test.js +0 -1223
- package/dist/ai-tool-to-genai.js +0 -233
- package/dist/ai-tool-to-genai.test.js +0 -267
- package/dist/ai-tool.js +0 -6
- package/dist/anthropic-account-identity.js +0 -70
- package/dist/anthropic-account-identity.test.js +0 -38
- package/dist/anthropic-auth-plugin.js +0 -958
- package/dist/anthropic-auth-plugin.test.js +0 -115
- package/dist/anthropic-auth-state.js +0 -186
- package/dist/anthropic-auth-state.test.js +0 -203
- package/dist/bash-tool-schema-plugin.js +0 -50
- package/dist/bash-tool-schema-plugin.test.js +0 -68
- package/dist/bin.js +0 -151
- package/dist/bot-lifecycle.test.js +0 -206
- package/dist/btw-prefix-detection.js +0 -24
- package/dist/btw-prefix-detection.test.js +0 -130
- package/dist/cache-drift-plugin.js +0 -183
- package/dist/cache-rewrite.js +0 -39
- package/dist/cache-rewrite.test.js +0 -41
- package/dist/channel-management.js +0 -347
- package/dist/cli-commands/bot.js +0 -254
- package/dist/cli-commands/maintenance.js +0 -171
- package/dist/cli-commands/misc.js +0 -153
- package/dist/cli-commands/project.js +0 -510
- package/dist/cli-commands/send.js +0 -659
- package/dist/cli-commands/session.js +0 -889
- package/dist/cli-commands/task.js +0 -277
- package/dist/cli-commands/thread.js +0 -63
- package/dist/cli-commands/user.js +0 -145
- package/dist/cli-parsing.test.js +0 -226
- package/dist/cli-runner.js +0 -1591
- package/dist/cli-runner.test.js +0 -119
- package/dist/cli-send-thread.e2e.test.js +0 -470
- package/dist/cloudflare-transcription.js +0 -56
- package/dist/commands/abort.js +0 -84
- package/dist/commands/action-buttons.js +0 -248
- package/dist/commands/add-project.js +0 -111
- package/dist/commands/agent.js +0 -658
- package/dist/commands/ask-question.js +0 -371
- package/dist/commands/ask-question.test.js +0 -150
- package/dist/commands/btw.js +0 -275
- package/dist/commands/compact.js +0 -117
- package/dist/commands/context-usage.js +0 -194
- package/dist/commands/context-usage.test.js +0 -49
- package/dist/commands/create-new-project.js +0 -138
- package/dist/commands/diff.js +0 -63
- package/dist/commands/file-upload.js +0 -280
- package/dist/commands/fork-subagent.js +0 -175
- package/dist/commands/fork.js +0 -291
- package/dist/commands/gemini-apikey.js +0 -123
- package/dist/commands/last-sessions.js +0 -129
- package/dist/commands/login.js +0 -893
- package/dist/commands/mcp.js +0 -239
- package/dist/commands/memory-snapshot.js +0 -24
- package/dist/commands/mention-mode.js +0 -42
- package/dist/commands/merge-worktree.js +0 -205
- package/dist/commands/model-variant.js +0 -390
- package/dist/commands/model.js +0 -1012
- package/dist/commands/multioauth.js +0 -425
- package/dist/commands/new-worktree.js +0 -625
- package/dist/commands/paginated-select.js +0 -57
- package/dist/commands/permissions.js +0 -327
- package/dist/commands/queue.js +0 -347
- package/dist/commands/queue.test.js +0 -15
- package/dist/commands/remove-project.js +0 -111
- package/dist/commands/restart-opencode-server.js +0 -133
- package/dist/commands/resume.js +0 -148
- package/dist/commands/run-command.js +0 -79
- package/dist/commands/screenshare.js +0 -307
- package/dist/commands/screenshare.test.js +0 -20
- package/dist/commands/session-id.js +0 -78
- package/dist/commands/session.js +0 -248
- package/dist/commands/share.js +0 -80
- package/dist/commands/tasks.js +0 -296
- package/dist/commands/types.js +0 -2
- package/dist/commands/undo-redo.js +0 -313
- package/dist/commands/unset-model.js +0 -116
- package/dist/commands/upgrade.js +0 -41
- package/dist/commands/user-command.js +0 -196
- package/dist/commands/verbosity.js +0 -124
- package/dist/commands/vscode.js +0 -295
- package/dist/commands/worktrees.js +0 -548
- package/dist/condense-memory.js +0 -33
- package/dist/config.js +0 -126
- package/dist/context-awareness-plugin.js +0 -357
- package/dist/context-awareness-plugin.test.js +0 -126
- package/dist/cpu-profiler.js +0 -211
- package/dist/cpu-profiler.test.js +0 -160
- package/dist/critique-utils.js +0 -95
- package/dist/database.js +0 -1074
- package/dist/debounce-timeout.js +0 -28
- package/dist/debounced-process-flush.js +0 -77
- package/dist/default-channel-provisioning.test.js +0 -149
- package/dist/discord-bot.js +0 -1432
- package/dist/discord-command-registration.js +0 -519
- package/dist/discord-command-registration.test.js +0 -17
- package/dist/discord-urls.js +0 -81
- package/dist/discord-utils.js +0 -789
- package/dist/discord-utils.test.js +0 -400
- package/dist/escape-backticks.test.js +0 -429
- package/dist/event-stream-real-capture.e2e.test.js +0 -533
- package/dist/eventsource-parser.test.js +0 -327
- package/dist/exec-async.js +0 -38
- package/dist/external-directory-permissions.e2e.test.js +0 -86
- package/dist/external-directory-project-deny.e2e.test.js +0 -70
- package/dist/external-opencode-sync.js +0 -620
- package/dist/external-opencode-sync.test.js +0 -206
- package/dist/extract-sdk-error-message.test.js +0 -13
- package/dist/format-tables.js +0 -728
- package/dist/format-tables.test.js +0 -915
- package/dist/forum-sync/config.js +0 -79
- package/dist/forum-sync/discord-operations.js +0 -157
- package/dist/forum-sync/index.js +0 -5
- package/dist/forum-sync/markdown.js +0 -110
- package/dist/forum-sync/sync-to-discord.js +0 -417
- package/dist/forum-sync/sync-to-files.js +0 -190
- package/dist/forum-sync/types.js +0 -53
- package/dist/forum-sync/watchers.js +0 -322
- package/dist/gateway-proxy-reconnect.e2e.test.js +0 -414
- package/dist/gateway-proxy.e2e.test.js +0 -488
- package/dist/genai-worker-wrapper.js +0 -111
- package/dist/genai-worker.js +0 -309
- package/dist/genai.js +0 -232
- package/dist/git-worktree-core.js +0 -461
- package/dist/guild-categories.test.js +0 -225
- package/dist/heap-monitor.js +0 -122
- package/dist/hrana-server.js +0 -322
- package/dist/hrana-server.test.js +0 -99
- package/dist/html-actions.js +0 -123
- package/dist/html-actions.test.js +0 -70
- package/dist/html-components.js +0 -115
- package/dist/html-components.test.js +0 -34
- package/dist/image-optimizer-plugin.js +0 -153
- package/dist/image-utils.js +0 -112
- package/dist/interaction-handler.js +0 -578
- package/dist/ipc-polling.js +0 -245
- package/dist/ipc-tools-plugin.js +0 -251
- package/dist/kimaki-digital-twin.e2e.test.js +0 -161
- package/dist/kimaki-opencode-plugin-loading.e2e.test.js +0 -158
- package/dist/kimaki-opencode-plugin.js +0 -33
- package/dist/kimaki-opencode-plugin.test.js +0 -126
- package/dist/kimaki-workspace-adaptor.js +0 -118
- package/dist/limit-heading-depth.js +0 -25
- package/dist/limit-heading-depth.test.js +0 -105
- package/dist/list-channel-threads.js +0 -163
- package/dist/list-channel-threads.test.js +0 -80
- package/dist/markdown.js +0 -455
- package/dist/markdown.test.js +0 -411
- package/dist/memory-overview-plugin.js +0 -123
- package/dist/message-formatting.js +0 -788
- package/dist/message-formatting.test.js +0 -1132
- package/dist/message-preprocessing.js +0 -419
- package/dist/oauth-rotation-shared.js +0 -253
- package/dist/onboarding-tutorial.js +0 -163
- package/dist/onboarding-welcome.js +0 -37
- package/dist/openai-auth-plugin.js +0 -125
- package/dist/openai-auth-state.js +0 -237
- package/dist/openai-realtime.js +0 -224
- package/dist/opencode-command-detection.js +0 -65
- package/dist/opencode-command-detection.test.js +0 -240
- package/dist/opencode-command.js +0 -181
- package/dist/opencode-command.test.js +0 -218
- package/dist/opencode-interrupt-plugin.js +0 -253
- package/dist/opencode-interrupt-plugin.test.js +0 -293
- package/dist/opencode.js +0 -1217
- package/dist/parse-permission-rules.test.js +0 -117
- package/dist/patch-text-parser.js +0 -97
- package/dist/plugin-logger.js +0 -105
- package/dist/plugin-opencode-client.js +0 -54
- package/dist/privacy-sanitizer.js +0 -105
- package/dist/project-add.test.js +0 -62
- package/dist/question-abort-clears-dropdown.e2e.test.js +0 -89
- package/dist/question-abort-resume.e2e.test.js +0 -100
- package/dist/question-abort-retry-text-before-dropdown.e2e.test.js +0 -150
- package/dist/question-text-before-dropdown.e2e.test.js +0 -52
- package/dist/queue-advanced-abort.e2e.test.js +0 -348
- package/dist/queue-advanced-action-buttons.e2e.test.js +0 -209
- package/dist/queue-advanced-e2e-setup.js +0 -1043
- package/dist/queue-advanced-footer.e2e.test.js +0 -286
- package/dist/queue-advanced-model-switch.e2e.test.js +0 -297
- package/dist/queue-advanced-permissions-typing.e2e.test.js +0 -189
- package/dist/queue-advanced-question.e2e.test.js +0 -266
- package/dist/queue-advanced-typing-interrupt.e2e.test.js +0 -113
- package/dist/queue-advanced-typing.e2e.test.js +0 -151
- package/dist/queue-delete-message.e2e.test.js +0 -216
- package/dist/queue-drain-after-interactive-ui.e2e.test.js +0 -120
- package/dist/queue-interrupt-drain.e2e.test.js +0 -256
- package/dist/queue-question-select-drain.e2e.test.js +0 -162
- package/dist/runtime-idle-sweeper.js +0 -52
- package/dist/runtime-lifecycle.e2e.test.js +0 -570
- package/dist/sentry.js +0 -23
- package/dist/session-handler/agent-utils.js +0 -65
- package/dist/session-handler/event-stream-state.js +0 -1225
- package/dist/session-handler/event-stream-state.test.js +0 -3160
- package/dist/session-handler/global-event-listener.js +0 -212
- package/dist/session-handler/model-utils.js +0 -311
- package/dist/session-handler/model-utils.test.js +0 -445
- package/dist/session-handler/opencode-session-event-log.js +0 -121
- package/dist/session-handler/thread-ingress.test.js +0 -41
- package/dist/session-handler/thread-runtime-state.js +0 -209
- package/dist/session-handler/thread-session-runtime-summary.test.js +0 -121
- package/dist/session-handler/thread-session-runtime.js +0 -4320
- package/dist/session-handler.js +0 -9
- package/dist/session-search.js +0 -219
- package/dist/session-search.test.js +0 -287
- package/dist/session-sleep.test.js +0 -224
- package/dist/session-title-rename.test.js +0 -128
- package/dist/skill-filter.js +0 -43
- package/dist/skill-filter.test.js +0 -86
- package/dist/startup-service.js +0 -153
- package/dist/startup-time.e2e.test.js +0 -297
- package/dist/system-message.js +0 -806
- package/dist/system-message.test.js +0 -917
- package/dist/task-id-plugin.js +0 -16
- package/dist/task-runner.js +0 -554
- package/dist/task-schedule.js +0 -298
- package/dist/task-schedule.test.js +0 -366
- package/dist/test-utils.js +0 -385
- package/dist/thinking-utils.js +0 -45
- package/dist/thinking-utils.test.js +0 -35
- package/dist/thread-message-queue.e2e.test.js +0 -1227
- package/dist/tools.js +0 -357
- package/dist/undo-redo.e2e.test.js +0 -171
- package/dist/unnest-code-blocks.js +0 -146
- package/dist/unnest-code-blocks.test.js +0 -673
- package/dist/upgrade.js +0 -114
- package/dist/utils.js +0 -148
- package/dist/voice-attachment.js +0 -56
- package/dist/voice-handler.js +0 -727
- package/dist/voice-message.e2e.test.js +0 -1254
- package/dist/voice-routing-input.e2e.test.js +0 -195
- package/dist/voice-routing-question.e2e.test.js +0 -182
- package/dist/voice.test.js +0 -500
- package/dist/wait-session.js +0 -193
- package/dist/websockify.js +0 -69
- package/dist/worker-types.js +0 -4
- package/dist/worktree-clone-isolation.e2e.test.js +0 -188
- package/dist/worktree-lifecycle.e2e.test.js +0 -735
- package/dist/worktree-utils.js +0 -3
- package/dist/xai-auth-plugin.js +0 -238
- package/dist/xai-auth-state.js +0 -234
- package/dist/xai-auth-state.test.js +0 -183
- package/dist/xml.js +0 -92
- package/dist/xml.test.js +0 -32
- package/skills/bump-holocron-consumers/SKILL.md +0 -137
- package/skills/critique/SKILL.md +0 -116
- package/skills/egaki/SKILL.md +0 -86
- package/skills/errore/SKILL.md +0 -501
- package/skills/goke/SKILL.md +0 -695
- package/skills/holocron/SKILL.md +0 -942
- package/skills/lintcn/SKILL.md +0 -873
- package/skills/new-skill/SKILL.md +0 -339
- package/skills/npm-package/SKILL.md +0 -692
- package/skills/opensrc/SKILL.md +0 -102
- package/skills/playwriter/SKILL.md +0 -35
- package/skills/profano/SKILL.md +0 -33
- package/skills/readme.md +0 -20
- package/skills/sigillo/SKILL.md +0 -370
- package/skills/spiceflow/SKILL.md +0 -80
- package/skills/strada/SKILL.md +0 -104
- package/skills/termcast/SKILL.md +0 -133
- package/skills/tuistory/SKILL.md +0 -237
- package/skills/usecomputer/SKILL.md +0 -264
- package/skills/zele/SKILL.md +0 -81
- package/src/agent-model.e2e.test.ts +0 -1557
- package/src/ai-tool-to-genai.test.ts +0 -296
- package/src/ai-tool-to-genai.ts +0 -283
- package/src/ai-tool.ts +0 -39
- package/src/anthropic-account-identity.test.ts +0 -52
- package/src/anthropic-account-identity.ts +0 -96
- package/src/anthropic-auth-plugin.test.ts +0 -135
- package/src/anthropic-auth-plugin.ts +0 -1180
- package/src/anthropic-auth-state.test.ts +0 -259
- package/src/anthropic-auth-state.ts +0 -272
- package/src/bash-tool-schema-plugin.test.ts +0 -84
- package/src/bash-tool-schema-plugin.ts +0 -77
- package/src/bin.ts +0 -173
- package/src/bot-lifecycle.test.ts +0 -252
- package/src/btw-prefix-detection.test.ts +0 -142
- package/src/btw-prefix-detection.ts +0 -30
- package/src/cache-drift-plugin.ts +0 -249
- package/src/cache-rewrite.test.ts +0 -49
- package/src/cache-rewrite.ts +0 -96
- package/src/channel-management.ts +0 -494
- package/src/cli-commands/bot.ts +0 -374
- package/src/cli-commands/maintenance.ts +0 -237
- package/src/cli-commands/misc.ts +0 -208
- package/src/cli-commands/project.ts +0 -680
- package/src/cli-commands/send.ts +0 -885
- package/src/cli-commands/session.ts +0 -1181
- package/src/cli-commands/task.ts +0 -358
- package/src/cli-commands/thread.ts +0 -86
- package/src/cli-commands/user.ts +0 -195
- package/src/cli-parsing.test.ts +0 -305
- package/src/cli-runner.test.ts +0 -166
- package/src/cli-runner.ts +0 -2157
- package/src/cli-send-thread.e2e.test.ts +0 -609
- package/src/cloudflare-transcription.ts +0 -76
- package/src/commands/abort.ts +0 -113
- package/src/commands/action-buttons.ts +0 -371
- package/src/commands/add-project.ts +0 -146
- package/src/commands/agent.ts +0 -911
- package/src/commands/ask-question.test.ts +0 -177
- package/src/commands/ask-question.ts +0 -532
- package/src/commands/btw.ts +0 -356
- package/src/commands/compact.ts +0 -154
- package/src/commands/context-usage.test.ts +0 -57
- package/src/commands/context-usage.ts +0 -267
- package/src/commands/create-new-project.ts +0 -203
- package/src/commands/diff.ts +0 -91
- package/src/commands/file-upload.ts +0 -398
- package/src/commands/fork-subagent.ts +0 -262
- package/src/commands/fork.ts +0 -421
- package/src/commands/gemini-apikey.ts +0 -205
- package/src/commands/last-sessions.ts +0 -176
- package/src/commands/login.ts +0 -1182
- package/src/commands/mcp.ts +0 -307
- package/src/commands/memory-snapshot.ts +0 -30
- package/src/commands/mention-mode.ts +0 -66
- package/src/commands/merge-worktree.ts +0 -282
- package/src/commands/model-variant.ts +0 -522
- package/src/commands/model.ts +0 -1377
- package/src/commands/multioauth.ts +0 -508
- package/src/commands/new-worktree.ts +0 -835
- package/src/commands/paginated-select.ts +0 -81
- package/src/commands/permissions.ts +0 -458
- package/src/commands/queue.test.ts +0 -19
- package/src/commands/queue.ts +0 -471
- package/src/commands/remove-project.ts +0 -152
- package/src/commands/restart-opencode-server.ts +0 -173
- package/src/commands/resume.ts +0 -229
- package/src/commands/run-command.ts +0 -123
- package/src/commands/screenshare.test.ts +0 -30
- package/src/commands/screenshare.ts +0 -388
- package/src/commands/session-id.ts +0 -109
- package/src/commands/session.ts +0 -319
- package/src/commands/share.ts +0 -106
- package/src/commands/tasks.ts +0 -399
- package/src/commands/types.ts +0 -25
- package/src/commands/undo-redo.ts +0 -394
- package/src/commands/unset-model.ts +0 -152
- package/src/commands/upgrade.ts +0 -51
- package/src/commands/user-command.ts +0 -260
- package/src/commands/verbosity.ts +0 -172
- package/src/commands/vscode.ts +0 -378
- package/src/commands/worktrees.ts +0 -762
- package/src/condense-memory.ts +0 -36
- package/src/config.ts +0 -147
- package/src/context-awareness-plugin.test.ts +0 -144
- package/src/context-awareness-plugin.ts +0 -508
- package/src/cpu-profiler.test.ts +0 -183
- package/src/cpu-profiler.ts +0 -293
- package/src/critique-utils.ts +0 -139
- package/src/database.ts +0 -1484
- package/src/debounce-timeout.ts +0 -43
- package/src/debounced-process-flush.ts +0 -104
- package/src/default-channel-provisioning.test.ts +0 -156
- package/src/discord-bot.ts +0 -1852
- package/src/discord-command-registration.test.ts +0 -20
- package/src/discord-command-registration.ts +0 -704
- package/src/discord-urls.ts +0 -88
- package/src/discord-utils.test.ts +0 -470
- package/src/discord-utils.ts +0 -1079
- package/src/escape-backticks.test.ts +0 -469
- package/src/event-stream-real-capture.e2e.test.ts +0 -692
- package/src/eventsource-parser.test.ts +0 -351
- package/src/exec-async.ts +0 -44
- package/src/external-directory-permissions.e2e.test.ts +0 -103
- package/src/external-directory-project-deny.e2e.test.ts +0 -84
- package/src/external-opencode-sync.test.ts +0 -248
- package/src/external-opencode-sync.ts +0 -867
- package/src/extract-sdk-error-message.test.ts +0 -18
- package/src/format-tables.test.ts +0 -988
- package/src/format-tables.ts +0 -1031
- package/src/forum-sync/config.ts +0 -92
- package/src/forum-sync/discord-operations.ts +0 -245
- package/src/forum-sync/index.ts +0 -9
- package/src/forum-sync/markdown.ts +0 -172
- package/src/forum-sync/sync-to-discord.ts +0 -595
- package/src/forum-sync/sync-to-files.ts +0 -294
- package/src/forum-sync/types.ts +0 -175
- package/src/forum-sync/watchers.ts +0 -474
- package/src/gateway-proxy-reconnect.e2e.test.ts +0 -553
- package/src/gateway-proxy.e2e.test.ts +0 -648
- package/src/genai-worker-wrapper.ts +0 -164
- package/src/genai-worker.ts +0 -385
- package/src/genai.ts +0 -318
- package/src/git-worktree-core.ts +0 -616
- package/src/guild-categories.test.ts +0 -260
- package/src/heap-monitor.ts +0 -152
- package/src/hrana-server.test.ts +0 -130
- package/src/hrana-server.ts +0 -399
- package/src/html-actions.test.ts +0 -87
- package/src/html-actions.ts +0 -174
- package/src/html-components.test.ts +0 -38
- package/src/html-components.ts +0 -177
- package/src/image-optimizer-plugin.ts +0 -194
- package/src/image-utils.ts +0 -150
- package/src/interaction-handler.ts +0 -775
- package/src/ipc-polling.ts +0 -325
- package/src/ipc-tools-plugin.ts +0 -306
- package/src/kimaki-digital-twin.e2e.test.ts +0 -199
- package/src/kimaki-opencode-plugin-loading.e2e.test.ts +0 -208
- package/src/kimaki-opencode-plugin.test.ts +0 -142
- package/src/kimaki-opencode-plugin.ts +0 -34
- package/src/kimaki-workspace-adaptor.ts +0 -144
- package/src/limit-heading-depth.test.ts +0 -116
- package/src/limit-heading-depth.ts +0 -26
- package/src/list-channel-threads.test.ts +0 -90
- package/src/list-channel-threads.ts +0 -252
- package/src/markdown.test.ts +0 -498
- package/src/markdown.ts +0 -577
- package/src/memory-overview-plugin.ts +0 -159
- package/src/message-formatting.test.ts +0 -1401
- package/src/message-formatting.ts +0 -999
- package/src/message-preprocessing.ts +0 -557
- package/src/oauth-rotation-shared.ts +0 -332
- package/src/onboarding-tutorial.ts +0 -167
- package/src/onboarding-welcome.ts +0 -49
- package/src/openai-auth-plugin.ts +0 -158
- package/src/openai-auth-state.ts +0 -297
- package/src/openai-realtime.ts +0 -358
- package/src/opencode-command-detection.test.ts +0 -307
- package/src/opencode-command-detection.ts +0 -76
- package/src/opencode-command.test.ts +0 -290
- package/src/opencode-command.ts +0 -251
- package/src/opencode-interrupt-plugin.test.ts +0 -419
- package/src/opencode-interrupt-plugin.ts +0 -306
- package/src/opencode.ts +0 -1590
- package/src/parse-permission-rules.test.ts +0 -127
- package/src/patch-text-parser.ts +0 -107
- package/src/plugin-logger.ts +0 -139
- package/src/plugin-opencode-client.ts +0 -71
- package/src/privacy-sanitizer.ts +0 -142
- package/src/project-add.test.ts +0 -80
- package/src/question-abort-clears-dropdown.e2e.test.ts +0 -109
- package/src/question-abort-resume.e2e.test.ts +0 -121
- package/src/question-abort-retry-text-before-dropdown.e2e.test.ts +0 -172
- package/src/question-text-before-dropdown.e2e.test.ts +0 -67
- package/src/queue-advanced-abort.e2e.test.ts +0 -449
- package/src/queue-advanced-action-buttons.e2e.test.ts +0 -271
- package/src/queue-advanced-e2e-setup.ts +0 -1164
- package/src/queue-advanced-footer.e2e.test.ts +0 -357
- package/src/queue-advanced-model-switch.e2e.test.ts +0 -382
- package/src/queue-advanced-permissions-typing.e2e.test.ts +0 -256
- package/src/queue-advanced-question.e2e.test.ts +0 -322
- package/src/queue-advanced-typing-interrupt.e2e.test.ts +0 -147
- package/src/queue-advanced-typing.e2e.test.ts +0 -199
- package/src/queue-delete-message.e2e.test.ts +0 -262
- package/src/queue-drain-after-interactive-ui.e2e.test.ts +0 -152
- package/src/queue-interrupt-drain.e2e.test.ts +0 -299
- package/src/queue-question-select-drain.e2e.test.ts +0 -209
- package/src/runtime-idle-sweeper.ts +0 -76
- package/src/runtime-lifecycle.e2e.test.ts +0 -714
- package/src/schema.sql +0 -251
- package/src/sentry.ts +0 -26
- package/src/session-handler/agent-utils.ts +0 -104
- package/src/session-handler/event-stream-fixtures/real-session-action-buttons.jsonl +0 -45
- package/src/session-handler/event-stream-fixtures/real-session-footer-suppressed-on-pre-idle-interrupt.jsonl +0 -40
- package/src/session-handler/event-stream-fixtures/real-session-permission-external-file.jsonl +0 -23
- package/src/session-handler/event-stream-fixtures/real-session-task-normal.jsonl +0 -22
- package/src/session-handler/event-stream-fixtures/real-session-task-three-parallel-sleeps.jsonl +0 -277
- package/src/session-handler/event-stream-fixtures/real-session-task-user-interruption.jsonl +0 -46
- package/src/session-handler/event-stream-fixtures/session-abort-after-idle-race.jsonl +0 -21
- package/src/session-handler/event-stream-fixtures/session-concurrent-messages-serialized.jsonl +0 -56
- package/src/session-handler/event-stream-fixtures/session-explicit-abort.jsonl +0 -44
- package/src/session-handler/event-stream-fixtures/session-normal-completion.jsonl +0 -29
- package/src/session-handler/event-stream-fixtures/session-tool-call-noisy-stream.jsonl +0 -29
- package/src/session-handler/event-stream-fixtures/session-two-completions-same-session.jsonl +0 -50
- package/src/session-handler/event-stream-fixtures/session-user-interruption.jsonl +0 -59
- package/src/session-handler/event-stream-fixtures/session-voice-queued-followup.jsonl +0 -52
- package/src/session-handler/event-stream-state.test.ts +0 -3431
- package/src/session-handler/event-stream-state.ts +0 -1792
- package/src/session-handler/global-event-listener.ts +0 -258
- package/src/session-handler/model-utils.test.ts +0 -537
- package/src/session-handler/model-utils.ts +0 -489
- package/src/session-handler/opencode-session-event-log.ts +0 -159
- package/src/session-handler/thread-ingress.test.ts +0 -54
- package/src/session-handler/thread-runtime-state.ts +0 -358
- package/src/session-handler/thread-session-runtime-summary.test.ts +0 -169
- package/src/session-handler/thread-session-runtime.ts +0 -5696
- package/src/session-handler.ts +0 -15
- package/src/session-search.test.ts +0 -331
- package/src/session-search.ts +0 -382
- package/src/session-sleep.test.ts +0 -294
- package/src/session-title-rename.test.ts +0 -186
- package/src/skill-filter.test.ts +0 -110
- package/src/skill-filter.ts +0 -63
- package/src/startup-service.ts +0 -200
- package/src/startup-time.e2e.test.ts +0 -377
- package/src/system-message.test.ts +0 -1013
- package/src/system-message.ts +0 -1043
- package/src/task-id-plugin.ts +0 -17
- package/src/task-runner.ts +0 -768
- package/src/task-schedule.test.ts +0 -424
- package/src/task-schedule.ts +0 -470
- package/src/test-utils.ts +0 -549
- package/src/thinking-utils.test.ts +0 -46
- package/src/thinking-utils.ts +0 -82
- package/src/thread-message-queue.e2e.test.ts +0 -1468
- package/src/tools.ts +0 -430
- package/src/undici.d.ts +0 -12
- package/src/undo-redo.e2e.test.ts +0 -219
- package/src/unnest-code-blocks.test.ts +0 -713
- package/src/unnest-code-blocks.ts +0 -185
- package/src/upgrade.ts +0 -127
- package/src/utils.ts +0 -216
- package/src/voice-attachment.ts +0 -79
- package/src/voice-handler.ts +0 -1000
- package/src/voice-message.e2e.test.ts +0 -1513
- package/src/voice-routing-input.e2e.test.ts +0 -203
- package/src/voice-routing-question.e2e.test.ts +0 -188
- package/src/voice.test.ts +0 -565
- package/src/wait-session.ts +0 -291
- package/src/websockify.ts +0 -101
- package/src/worker-types.ts +0 -64
- package/src/worktree-clone-isolation.e2e.test.ts +0 -213
- package/src/worktree-lifecycle.e2e.test.ts +0 -900
- package/src/worktree-utils.ts +0 -4
- package/src/xai-auth-plugin.ts +0 -303
- package/src/xai-auth-state.test.ts +0 -224
- package/src/xai-auth-state.ts +0 -294
- package/src/xml.test.ts +0 -38
- package/src/xml.ts +0 -121
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
import { afterAll, beforeAll, expect, test } from 'vitest';
|
|
6
|
+
import { seedProjectChannel, startOpencodeTestServer, startTestBot, startTwin, tempDataDir, waitFor, waitForFooter, warmUp } from "./test/harness.js";
|
|
7
|
+
const exec = promisify(execFile);
|
|
8
|
+
const dataDir = tempDataDir();
|
|
9
|
+
let server;
|
|
10
|
+
let twin;
|
|
11
|
+
let bot;
|
|
12
|
+
beforeAll(async () => {
|
|
13
|
+
;
|
|
14
|
+
[server, twin] = await Promise.all([startOpencodeTestServer(), startTwin()]);
|
|
15
|
+
await seedProjectChannel({ dataDir, channelId: twin.channelId, guildId: twin.discord.guildId, directory: server.projectDirectory });
|
|
16
|
+
bot = await startTestBot({ dataDir, twin, server });
|
|
17
|
+
await warmUp({ server });
|
|
18
|
+
}, 60_000);
|
|
19
|
+
afterAll(async () => {
|
|
20
|
+
await bot?.stop();
|
|
21
|
+
await Promise.all([server?.stop(), twin?.stop()]);
|
|
22
|
+
fs.rmSync(dataDir, { recursive: true, force: true });
|
|
23
|
+
});
|
|
24
|
+
function cli(args) {
|
|
25
|
+
return exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), ...args, '--data-dir', dataDir], {
|
|
26
|
+
env: { ...process.env, KIMAKI_LOCK_PORT: String(bot.lock.port), KIMAKI_OPENCODE_SERVICE_FILE: server.serviceFile },
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
test('CLI send starts and continues a session through the authenticated bot API', async () => {
|
|
30
|
+
const first = await cli(['send', '--channel', twin.channelId, '--prompt', 'CLI first']);
|
|
31
|
+
const ids = JSON.parse(first.stdout);
|
|
32
|
+
await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
|
|
33
|
+
await cli(['send', '--thread', ids.threadId, '--prompt', 'CLI second. queue']);
|
|
34
|
+
await waitForFooter({ discord: twin.discord, threadId: ids.threadId, count: 2 });
|
|
35
|
+
expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
|
|
36
|
+
"--- from: assistant (TestBot)
|
|
37
|
+
» **CLI:** CLI first
|
|
38
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
39
|
+
ok
|
|
40
|
+
-# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
|
|
41
|
+
ok
|
|
42
|
+
-# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
|
|
43
|
+
`);
|
|
44
|
+
expect(ids.sessionId).toMatch(/^ses_/);
|
|
45
|
+
const tokenFile = path.join(dataDir, 'lock-token');
|
|
46
|
+
expect(fs.statSync(tokenFile).mode & 0o777).toBe(0o600);
|
|
47
|
+
const unauthorized = await fetch(`http://127.0.0.1:${bot.lock.port}/kimaki/send`, { method: 'POST', body: '{}' });
|
|
48
|
+
expect(unauthorized.status).toBe(401);
|
|
49
|
+
const token = fs.readFileSync(tokenFile, 'utf8');
|
|
50
|
+
const invalid = await fetch(`http://127.0.0.1:${bot.lock.port}/kimaki/send`, {
|
|
51
|
+
method: 'POST', headers: { authorization: `Bearer ${token}` }, body: JSON.stringify({ channelId: { gt: '0' }, prompt: 'unsafe' }),
|
|
52
|
+
});
|
|
53
|
+
expect(invalid.status).toBe(400);
|
|
54
|
+
});
|
|
55
|
+
test('CLI help documents the supported P7 commands', async () => {
|
|
56
|
+
const output = await cli(['--help']);
|
|
57
|
+
expect(output.stdout).toContain('send');
|
|
58
|
+
expect(output.stdout).toContain('upload-request');
|
|
59
|
+
expect(output.stdout).toMatchInlineSnapshot(`
|
|
60
|
+
"kimaki
|
|
61
|
+
|
|
62
|
+
Usage:
|
|
63
|
+
$ kimaki [options]
|
|
64
|
+
|
|
65
|
+
Commands:
|
|
66
|
+
kimaki Start the bot. Runs onboarding on first start
|
|
67
|
+
|
|
68
|
+
Project:
|
|
69
|
+
project list List project directories and their channels
|
|
70
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
71
|
+
--json Output as JSON
|
|
72
|
+
|
|
73
|
+
project add [directory] Create a channel for a directory (default: current directory)
|
|
74
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
75
|
+
-g, --guild <guildId> Server (default: the one with Kimaki channels)
|
|
76
|
+
--machine-name <name> Machine name of a new category and of a channel name suffix (default: hostname)
|
|
77
|
+
|
|
78
|
+
Session:
|
|
79
|
+
session list List sessions with native status and token counts
|
|
80
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
81
|
+
--project <path> Project (default: current directory)
|
|
82
|
+
--all All projects
|
|
83
|
+
--active Only busy sessions, never the caller; exit 1 when none remain, 64 on errors
|
|
84
|
+
--exclude <id> Exclude session (repeatable)
|
|
85
|
+
--json Output as JSON
|
|
86
|
+
|
|
87
|
+
session search <query> Search titles, then real message content
|
|
88
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
89
|
+
--project <path> Project (default: current directory)
|
|
90
|
+
-c, --channel <id> Project of this Discord channel
|
|
91
|
+
--all All projects
|
|
92
|
+
--days <n> Recent days (default: 14; 0 = all)
|
|
93
|
+
--json Output as JSON
|
|
94
|
+
|
|
95
|
+
session wait <id> Wait until idle or waiting for input, then print the session
|
|
96
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
97
|
+
--timeout <duration> Timeout, for example 30m or 2h
|
|
98
|
+
|
|
99
|
+
session editors <file> List sessions that last edited a file, newest first
|
|
100
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
101
|
+
--json Output as JSON
|
|
102
|
+
--limit <n> Max sessions to show (default: 20)
|
|
103
|
+
|
|
104
|
+
session diff Upload the git diff of the session folder to critique.work and print the URL
|
|
105
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
106
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
107
|
+
|
|
108
|
+
session url <id> Print the Discord URL of a session or thread
|
|
109
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
110
|
+
|
|
111
|
+
channel agent [value] Set channel agent through the running bot
|
|
112
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
113
|
+
-c, --channel <id> Target channel (default: current project)
|
|
114
|
+
--clear Clear the saved agent
|
|
115
|
+
|
|
116
|
+
channel model [value] Set channel model through the running bot
|
|
117
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
118
|
+
-c, --channel <id> Target channel (default: current project)
|
|
119
|
+
--variant <name> Thinking variant for model
|
|
120
|
+
--global Default of all channels without their own model
|
|
121
|
+
--clear Clear the saved model
|
|
122
|
+
|
|
123
|
+
channel verbosity [value] Set channel verbosity through the running bot
|
|
124
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
125
|
+
-c, --channel <id> Target channel (default: current project)
|
|
126
|
+
|
|
127
|
+
session abort [id] Stop the running turn and clear its queue
|
|
128
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
129
|
+
|
|
130
|
+
session archive [id] Archive a session thread
|
|
131
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
132
|
+
|
|
133
|
+
session title <title> Rename the session and its Discord thread
|
|
134
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
135
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
136
|
+
|
|
137
|
+
session queue add <value> add native queued prompts
|
|
138
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
139
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
140
|
+
--json Output as JSON
|
|
141
|
+
|
|
142
|
+
session queue remove <value> remove native queued prompts
|
|
143
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
144
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
145
|
+
--json Output as JSON
|
|
146
|
+
|
|
147
|
+
session queue list list native queued prompts
|
|
148
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
149
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
150
|
+
--json Output as JSON
|
|
151
|
+
|
|
152
|
+
session queue clear clear native queued prompts
|
|
153
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
154
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
155
|
+
--json Output as JSON
|
|
156
|
+
|
|
157
|
+
session command <name> [...args] Run an OpenCode command, skill, or MCP prompt
|
|
158
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
159
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
160
|
+
--queue Run after the current turn instead of interrupting
|
|
161
|
+
|
|
162
|
+
session shell <text> Run shell through the shared session action
|
|
163
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
164
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
165
|
+
--queue Queue an OpenCode command
|
|
166
|
+
|
|
167
|
+
session btw <text> Run btw through the shared session action
|
|
168
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
169
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
170
|
+
--queue Queue an OpenCode command
|
|
171
|
+
|
|
172
|
+
session fork [id] Fork a root or child session into a new thread
|
|
173
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
174
|
+
--before <messageId> Fork before this user message
|
|
175
|
+
-n, --name <name> Thread name
|
|
176
|
+
|
|
177
|
+
session resume <id> Bind an existing session to a new thread in its project channel
|
|
178
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
179
|
+
-c, --channel <id> Destination channel (default: channel of the session folder)
|
|
180
|
+
|
|
181
|
+
buttons Show 1-3 action buttons. Call last, after visible text
|
|
182
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
183
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
184
|
+
-b, --button <spec> Repeatable: Label[:white|blue|green|red]
|
|
185
|
+
|
|
186
|
+
upload-request Ask for file uploads; waits up to 6 minutes. Shell timeout must be 10 minutes
|
|
187
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
188
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
189
|
+
-p, --prompt <text> Text above the upload button
|
|
190
|
+
--max-files <n> 1 to 10 (default: 5)
|
|
191
|
+
|
|
192
|
+
login <provider> Connect a provider using OpenCode integration credentials
|
|
193
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
194
|
+
--key <key> API key to store in OpenCode
|
|
195
|
+
--method <id> OAuth method ID; without flags, list login methods
|
|
196
|
+
--attempt <id> Check or complete this native OAuth attempt
|
|
197
|
+
--code <code> Authorization code for the attempt
|
|
198
|
+
--cancel Cancel the native OAuth attempt
|
|
199
|
+
|
|
200
|
+
login credential <id> Activate, remove, or label an OpenCode credential
|
|
201
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
202
|
+
--operation <name> activate | remove | label
|
|
203
|
+
--label <text> Credential label
|
|
204
|
+
|
|
205
|
+
send Start a session in a channel, or continue a thread
|
|
206
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
207
|
+
-c, --channel <id> New thread in this channel
|
|
208
|
+
-d, --project <path> Project directory of the new thread
|
|
209
|
+
--thread <id> Continue this thread (ID or URL)
|
|
210
|
+
-s, --session <id> Continue this session: session ID, thread ID or thread URL
|
|
211
|
+
-p, --prompt <text> Prompt; thread suffixes . queue and . btw are supported
|
|
212
|
+
-f, --file <path> Attach a local file (repeatable)
|
|
213
|
+
-n, --name <text> Thread name
|
|
214
|
+
--agent <name> Agent ID
|
|
215
|
+
--model <provider/model> Model for the new session
|
|
216
|
+
-u, --user <id> Add this Discord user to the thread (repeatable)
|
|
217
|
+
--cwd <path> Existing project subfolder or linked Git worktree
|
|
218
|
+
--worktree [name] Create a custom Git worktree (automatic name when omitted)
|
|
219
|
+
--base-branch <ref> Starting ref for --worktree (default: project HEAD)
|
|
220
|
+
--parent-session <id> Record the parent session in session metadata
|
|
221
|
+
--permission <rule> Repeatable: tool[:pattern]:allow|deny|ask
|
|
222
|
+
--notify-only Post a notification thread without a model turn
|
|
223
|
+
--wait Wait until idle or input is needed, then print the session
|
|
224
|
+
--send-at <when> Schedule: UTC ISO date ending in Z, or cron expression (UTC)
|
|
225
|
+
--pre-run <command> Scheduled only: run first in the project. Exit 0 starts, stdout is appended
|
|
226
|
+
--allow-concurrency Scheduled only: allow overlapping runs of this routine
|
|
227
|
+
|
|
228
|
+
session events <id> Print the recorded OpenCode events of a thread as JSONL (root + subagents)
|
|
229
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
230
|
+
|
|
231
|
+
session read <id> Print the messages of a session from OpenCode as markdown
|
|
232
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
233
|
+
--thinking Include reasoning
|
|
234
|
+
--verbose Include full tool inputs and outputs
|
|
235
|
+
--json Print raw OpenCode messages
|
|
236
|
+
|
|
237
|
+
session cwd [directory] Show or change the working directory at a native safe boundary
|
|
238
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
239
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
240
|
+
|
|
241
|
+
Channel:
|
|
242
|
+
channel worktrees <value> Set automatic worktrees: on | off
|
|
243
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
244
|
+
-c, --channel <id> Project channel (default: current directory)
|
|
245
|
+
|
|
246
|
+
Worktree:
|
|
247
|
+
worktree list List linked Git worktrees
|
|
248
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
249
|
+
-c, --channel <id> Project channel
|
|
250
|
+
-p, --project <path> Project directory (default: current directory)
|
|
251
|
+
|
|
252
|
+
worktree create [name] Create an isolated worktree session
|
|
253
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
254
|
+
-c, --channel <id> Project channel
|
|
255
|
+
-p, --project <path> Project directory (default: current directory)
|
|
256
|
+
--base-branch <ref> Starting Git ref (default: project HEAD)
|
|
257
|
+
|
|
258
|
+
worktree remove <directory> Remove a clean, merged worktree checkout; retain branch refs
|
|
259
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
260
|
+
-c, --channel <id> Project channel
|
|
261
|
+
-p, --project <path> Project directory (default: current directory)
|
|
262
|
+
--target-branch <branch> Local merge target branch
|
|
263
|
+
--strategy <name> Merge strategy: rebase | squash
|
|
264
|
+
|
|
265
|
+
worktree merge <directory> Merge into a local target branch
|
|
266
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
267
|
+
-c, --channel <id> Project channel
|
|
268
|
+
-p, --project <path> Project directory (default: current directory)
|
|
269
|
+
--target-branch <branch> Local merge target branch
|
|
270
|
+
--strategy <name> Merge strategy: rebase | squash
|
|
271
|
+
|
|
272
|
+
Schedule:
|
|
273
|
+
routine list List routines (planned, running, failed)
|
|
274
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
275
|
+
--json Output as JSON
|
|
276
|
+
--all Also list finished and cancelled V1 routines
|
|
277
|
+
|
|
278
|
+
routine edit <routineId> Change a planned routine. An empty string clears a value
|
|
279
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
280
|
+
--prompt <text> New prompt
|
|
281
|
+
--send-at <when> New schedule: UTC ISO date ending in Z, or cron (UTC)
|
|
282
|
+
--agent <name> Agent for the scheduled session
|
|
283
|
+
--model <provider/model> Model for the scheduled session
|
|
284
|
+
-u, --user <id> Discord user ID added to each run's thread
|
|
285
|
+
--pre-run <command> Command to run before each run
|
|
286
|
+
--allow-concurrency <bool> true | false
|
|
287
|
+
|
|
288
|
+
routine delete <routineId> Delete a routine
|
|
289
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
290
|
+
|
|
291
|
+
routine run <routineId> Run a routine now
|
|
292
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
293
|
+
|
|
294
|
+
sleep Wake this session later with a new message in the same thread. Run it last, after your text. To monitor slow events (email replies, PR reviews), wait 2h or more; never poll every few minutes
|
|
295
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
296
|
+
--duration <duration> Relative wait, e.g. 30m, 2h, 1d
|
|
297
|
+
--until <date> UTC ISO date ending in Z
|
|
298
|
+
--reason <text> Shown in Discord and in the wake message
|
|
299
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
300
|
+
|
|
301
|
+
Discord:
|
|
302
|
+
thread list List active and optionally archived threads in a channel
|
|
303
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
304
|
+
-c, --channel <id> Channel to list
|
|
305
|
+
--archived Include archived threads
|
|
306
|
+
--json Output as JSON
|
|
307
|
+
|
|
308
|
+
user list Find Discord users for mentions
|
|
309
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
310
|
+
-g, --guild <id> Guild to search
|
|
311
|
+
-q, --query <text> Name filter
|
|
312
|
+
--json Output as JSON
|
|
313
|
+
|
|
314
|
+
upload-to-discord <...files> Attach local files to a session thread or the Kimaki voice channel chat
|
|
315
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
316
|
+
-s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
|
|
317
|
+
-c, --channel <id> Kimaki voice channel to post in (default in voice calls: KIMAKI_CHANNEL_ID)
|
|
318
|
+
|
|
319
|
+
Tools:
|
|
320
|
+
tunnel Run a command and expose its local port with a public URL. The child gets TRAFORO_URL
|
|
321
|
+
-p, --port <port> Local port (default: read from the command output)
|
|
322
|
+
-t, --tunnel-id <id> Fixed tunnel ID (default: random). Only for public-safe services
|
|
323
|
+
--host <host> Local host (default: localhost)
|
|
324
|
+
-k, --kill Kill the process on --port first
|
|
325
|
+
|
|
326
|
+
tts [text] Text to speech with OpenAI or Gemini. Reads stdin if no text is given
|
|
327
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
328
|
+
-o, --output <path> Output file (default: speech.mp3 or speech.wav)
|
|
329
|
+
-p, --provider <name> openai | gemini (default: from the stored key)
|
|
330
|
+
-v, --voice <voice> Voice ID (default: alloy for OpenAI, Kore for Gemini)
|
|
331
|
+
-i, --instructions <text> Style instructions (OpenAI only)
|
|
332
|
+
--speed <n> 0.25 to 4.0 (OpenAI only, default: 1.25)
|
|
333
|
+
|
|
334
|
+
Bot:
|
|
335
|
+
status Bot health: running, pid, uptime, OpenCode URL and version, guilds
|
|
336
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
337
|
+
--json Output as JSON
|
|
338
|
+
|
|
339
|
+
logs Print the log file path. The bot resets the file on every start
|
|
340
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
341
|
+
-f, --follow Print the log and keep printing new lines
|
|
342
|
+
|
|
343
|
+
restart Restart the running bot with the code on disk. Sessions keep running in OpenCode
|
|
344
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
345
|
+
|
|
346
|
+
profile cpu Record a CPU profile of the running bot and print the .cpuprofile path
|
|
347
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
348
|
+
-d, --duration <duration> How long to record, e.g. 20s or 2m (default: 20s)
|
|
349
|
+
|
|
350
|
+
profile heap Write a heap snapshot of the running bot and print the .heapsnapshot path
|
|
351
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
352
|
+
|
|
353
|
+
bot token Print saved bot credentials for automation
|
|
354
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
355
|
+
|
|
356
|
+
bot keys set Store OpenAI or Gemini API keys for voice transcription and kimaki tts
|
|
357
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
358
|
+
--openai <key> OpenAI API key
|
|
359
|
+
--gemini <key> Gemini API key
|
|
360
|
+
|
|
361
|
+
bot install-url Print the Discord bot install URL
|
|
362
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
363
|
+
--gateway-callback-url <url> Gateway only: redirect here after the install
|
|
364
|
+
|
|
365
|
+
Options:
|
|
366
|
+
--data-dir <path> Data directory (default: ~/.kimaki)
|
|
367
|
+
-g, --guild <guildId> Server to onboard when the bot is in several
|
|
368
|
+
--gateway Use the shared Kimaki bot, no Discord app needed
|
|
369
|
+
--gateway-callback-url <url> Redirect here after the gateway install (appends ?guild_id=<id>)
|
|
370
|
+
--install-url Print the install URL and exit (non-interactive onboarding)
|
|
371
|
+
--machine-name <name> Name in this machine's category "Kimaki <name>" (default: hostname)
|
|
372
|
+
--restart-onboarding Choose credentials again
|
|
373
|
+
--worktrees Use a fresh Git worktree for new sessions unless the channel overrides it
|
|
374
|
+
--voice <name> Voice of voice calls, saved for later starts (e.g. cove, juniper, sol). "default" resets it
|
|
375
|
+
--no-analytics Disable anonymous usage analytics (same as KIMAKI_STRADA_ENABLED=0)
|
|
376
|
+
--if-not-running Start only if no bot runs; never stop the running one (used by autostart)
|
|
377
|
+
-h, --help Display this message
|
|
378
|
+
"
|
|
379
|
+
`);
|
|
380
|
+
});
|
|
381
|
+
test('CLI registry shares thread actions, preferences, title and archive', async () => {
|
|
382
|
+
const started = JSON.parse((await cli(['send', '--channel', twin.channelId, '-p', 'Registry first'])).stdout);
|
|
383
|
+
await waitForFooter({ discord: twin.discord, threadId: started.threadId });
|
|
384
|
+
await cli(['channel', 'agent', 'plan', '--channel', twin.channelId]);
|
|
385
|
+
await cli(['channel', 'model', 'deterministic-provider/deterministic-v2', '--channel', twin.channelId]);
|
|
386
|
+
await cli(['channel', 'verbosity', 'text', '--channel', twin.channelId]);
|
|
387
|
+
await cli(['channel', 'model', 'deterministic-provider/deterministic-v2', '--global', '--variant', 'fast']);
|
|
388
|
+
const global = await bot.db.query.global_models.findFirst();
|
|
389
|
+
expect({ app: global?.app_id === bot.appId, model: global?.model_id, variant: global?.variant }).toMatchInlineSnapshot(`
|
|
390
|
+
{
|
|
391
|
+
"app": true,
|
|
392
|
+
"model": "deterministic-provider/deterministic-v2",
|
|
393
|
+
"variant": "fast",
|
|
394
|
+
}
|
|
395
|
+
`);
|
|
396
|
+
await cli(['channel', 'model', '--global', '--clear']);
|
|
397
|
+
expect(await bot.db.query.global_models.findFirst()).toBeUndefined();
|
|
398
|
+
// --session takes a session ID, a thread ID or a thread URL.
|
|
399
|
+
await cli(['session', 'title', 'CLI renamed', '--session', `https://discord.com/channels/${twin.discord.guildId}/${started.threadId}`]);
|
|
400
|
+
await cli(['session', 'queue', 'add', 'Registry queued', '--session', started.threadId]);
|
|
401
|
+
await expect(cli(['session', 'queue', 'list', '--session', 'not-an-id'])).rejects.toThrow('Not a session ID, Discord thread ID or thread URL: not-an-id');
|
|
402
|
+
await waitForFooter({ discord: twin.discord, threadId: started.threadId, count: 2 });
|
|
403
|
+
await cli(['session', 'abort', started.sessionId]);
|
|
404
|
+
await cli(['session', 'archive', started.threadId]);
|
|
405
|
+
expect(await twin.discord.thread(started.threadId).text()).toMatchInlineSnapshot(`
|
|
406
|
+
"--- from: assistant (TestBot)
|
|
407
|
+
» **CLI:** Registry first
|
|
408
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
409
|
+
ok
|
|
410
|
+
-# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
|
|
411
|
+
ok
|
|
412
|
+
-# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
|
|
413
|
+
`);
|
|
414
|
+
expect((await twin.discord.channel(twin.channelId).getThreads()).find((thread) => thread.id === started.threadId)?.name).toBe('CLI renamed');
|
|
415
|
+
});
|
|
416
|
+
test('send settings reach native session creation; notifications create no session', async () => {
|
|
417
|
+
const subdir = path.join(server.projectDirectory, 'subfolder');
|
|
418
|
+
fs.mkdirSync(subdir);
|
|
419
|
+
const result = await cli(['send', '--channel', twin.channelId, '-p', 'Send settings', '--cwd', subdir, '--permission', 'shell:deny', '--parent-session', 'ses_parent', '--agent', 'build', '--wait']);
|
|
420
|
+
const ids = JSON.parse(result.stdout.split('\n')[0]);
|
|
421
|
+
await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
|
|
422
|
+
expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
|
|
423
|
+
"--- from: assistant (TestBot)
|
|
424
|
+
» **CLI:** Send settings
|
|
425
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
426
|
+
ok
|
|
427
|
+
-# *subfolder ⋅ main ⋅ Ns ⋅ deterministic-v2*"
|
|
428
|
+
`);
|
|
429
|
+
const info = await (await server.client()).session.get({ sessionID: ids.sessionId });
|
|
430
|
+
expect(info.location.directory).toBe(subdir);
|
|
431
|
+
expect(info.permissions).toEqual([
|
|
432
|
+
{ action: 'question', resource: '*', effect: 'deny' },
|
|
433
|
+
{ action: 'shell', resource: '*', effect: 'deny' },
|
|
434
|
+
]);
|
|
435
|
+
await expect(cli(['send', '--thread', ids.threadId, '-p', 'Must not run', '--permission', 'shell:deny']))
|
|
436
|
+
.rejects.toMatchObject({ stderr: expect.stringContaining('--permission applies only to new sessions') });
|
|
437
|
+
expect(info.metadata?.['kimaki']).toMatchObject({ parentSessionId: 'ses_parent' });
|
|
438
|
+
expect(result.stdout).toContain('# Send settings');
|
|
439
|
+
const notice = JSON.parse((await cli(['send', '--channel', twin.channelId, '-p', 'Notification only', '--notify-only'])).stdout);
|
|
440
|
+
expect(await twin.discord.thread(notice.threadId).text()).toMatchInlineSnapshot(`
|
|
441
|
+
"--- from: assistant (TestBot)
|
|
442
|
+
Notification only"
|
|
443
|
+
`);
|
|
444
|
+
expect(notice.sessionId).toBe(null);
|
|
445
|
+
expect(bot.store.getState().roots[notice.threadId]).toBeUndefined();
|
|
446
|
+
});
|
|
447
|
+
test('status reports the running bot, logs prints and follows the log file', async () => {
|
|
448
|
+
const running = JSON.parse((await cli(['status', '--json'])).stdout);
|
|
449
|
+
const opencode = running['opencode'];
|
|
450
|
+
expect({ ...running, mode: running['mode'] === (twin.discord.botToken.includes(':') ? 'gateway' : 'self_hosted'), guilds: running['guilds'].map((guild) => ({ ...guild, id: guild.id === twin.discord.guildId })), pid: typeof running['pid'], uptimeSec: typeof running['uptimeSec'], dataDir: running['dataDir'] === dataDir, opencode: { ...opencode, url: opencode.url === bot.opencode.endpoint?.url, version: typeof opencode.version } }).toMatchInlineSnapshot(`
|
|
451
|
+
{
|
|
452
|
+
"analytics": false,
|
|
453
|
+
"dataDir": true,
|
|
454
|
+
"guilds": [
|
|
455
|
+
{
|
|
456
|
+
"id": true,
|
|
457
|
+
"name": "Kimaki Test",
|
|
458
|
+
},
|
|
459
|
+
],
|
|
460
|
+
"mode": true,
|
|
461
|
+
"opencode": {
|
|
462
|
+
"connected": true,
|
|
463
|
+
"url": true,
|
|
464
|
+
"version": "string",
|
|
465
|
+
},
|
|
466
|
+
"pid": "number",
|
|
467
|
+
"running": true,
|
|
468
|
+
"uptimeSec": "number",
|
|
469
|
+
}
|
|
470
|
+
`);
|
|
471
|
+
// A data dir without a running bot.
|
|
472
|
+
const otherDir = tempDataDir();
|
|
473
|
+
const stopped = await exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'status', '--json', '--data-dir', otherDir]).catch((error) => error);
|
|
474
|
+
fs.rmSync(otherDir, { recursive: true, force: true });
|
|
475
|
+
expect({ code: 'code' in stopped ? stopped.code : 0, stdout: JSON.parse(stopped.stdout) }).toMatchInlineSnapshot(`
|
|
476
|
+
{
|
|
477
|
+
"code": 1,
|
|
478
|
+
"stdout": {
|
|
479
|
+
"reason": "Kimaki bot is not running. Start kimaki first.",
|
|
480
|
+
"running": false,
|
|
481
|
+
},
|
|
482
|
+
}
|
|
483
|
+
`);
|
|
484
|
+
expect((await cli(['logs'])).stdout.trim()).toBe(path.join(dataDir, 'kimaki.log'));
|
|
485
|
+
const follow = execFile(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'logs', '--follow', '--data-dir', dataDir]);
|
|
486
|
+
const output = { text: '' };
|
|
487
|
+
follow.stdout?.on('data', (chunk) => (output.text += chunk.toString()));
|
|
488
|
+
fs.appendFileSync(path.join(dataDir, 'kimaki.log'), 'follow-marker-line\n');
|
|
489
|
+
await waitFor({ label: 'followed log line', check: async () => output.text.includes('follow-marker-line') });
|
|
490
|
+
follow.kill();
|
|
491
|
+
});
|
|
492
|
+
test('profile cpu and profile heap write owner-only files; restart needs the supervisor', async () => {
|
|
493
|
+
const cpu = (await cli(['profile', 'cpu', '--duration', '200ms'])).stdout.trim();
|
|
494
|
+
const heap = (await cli(['profile', 'heap'])).stdout.trim();
|
|
495
|
+
const profile = JSON.parse(fs.readFileSync(cpu, 'utf8'));
|
|
496
|
+
expect({
|
|
497
|
+
cpu: path.relative(dataDir, cpu).replace(/cpu-.*/, 'cpu-<time>.cpuprofile'),
|
|
498
|
+
heap: path.relative(dataDir, heap).replace(/heap-.*/, 'heap-<time>.heapsnapshot'),
|
|
499
|
+
cpuMode: (fs.statSync(cpu).mode & 0o777).toString(8),
|
|
500
|
+
heapMode: (fs.statSync(heap).mode & 0o777).toString(8),
|
|
501
|
+
hasNodes: profile.nodes.length > 0,
|
|
502
|
+
}).toMatchInlineSnapshot(`
|
|
503
|
+
{
|
|
504
|
+
"cpu": "profiles/cpu-<time>.cpuprofile",
|
|
505
|
+
"cpuMode": "600",
|
|
506
|
+
"hasNodes": true,
|
|
507
|
+
"heap": "profiles/heap-<time>.heapsnapshot",
|
|
508
|
+
"heapMode": "600",
|
|
509
|
+
}
|
|
510
|
+
`);
|
|
511
|
+
// The test bot runs in-process, not under the `kimaki` supervisor.
|
|
512
|
+
const restart = await cli(['restart']).catch((error) => error);
|
|
513
|
+
expect('code' in restart ? { code: restart.code, stderr: restart.stderr.trim() } : restart).toMatchInlineSnapshot(`
|
|
514
|
+
{
|
|
515
|
+
"code": 1,
|
|
516
|
+
"stderr": "This bot was not started by the \`kimaki\` command, so nothing would start it again. Stop it and start it yourself.",
|
|
517
|
+
}
|
|
518
|
+
`);
|
|
519
|
+
}, 60_000);
|
|
520
|
+
//# sourceMappingURL=cli-lock.e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-lock.e2e.test.js","sourceRoot":"","sources":["../src/cli-lock.e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { execFile } from 'node:child_process';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
import { afterAll, beforeAll, expect, test } from 'vitest';
|
|
6
|
+
import { scriptedTurn, seedProjectChannel, startOpencodeTestServer, startTestBot, startTwin, tempDataDir, waitForFooter, waitForSelectMenu, warmUp } from "./test/harness.js";
|
|
7
|
+
import { abort, send } from "./prompt.js";
|
|
8
|
+
const exec = promisify(execFile);
|
|
9
|
+
const dataDir = tempDataDir();
|
|
10
|
+
let server;
|
|
11
|
+
let twin;
|
|
12
|
+
let bot;
|
|
13
|
+
beforeAll(async () => {
|
|
14
|
+
;
|
|
15
|
+
[server, twin] = await Promise.all([startOpencodeTestServer({ matchers: scriptedTurn({ marker: 'wait-form-marker', steps: [{ id: 'wait-question', tool: 'question', input: { questions: [{ question: 'Continue?', header: 'Next', options: [{ label: 'Yes', description: 'Continue' }] }] } }], finalText: 'Question answered' }) }), startTwin()]);
|
|
16
|
+
await seedProjectChannel({ dataDir, channelId: twin.channelId, guildId: twin.discord.guildId, directory: server.projectDirectory });
|
|
17
|
+
bot = await startTestBot({ dataDir, twin, server });
|
|
18
|
+
await warmUp({ server });
|
|
19
|
+
}, 60_000);
|
|
20
|
+
afterAll(async () => {
|
|
21
|
+
await bot?.stop();
|
|
22
|
+
await Promise.all([server?.stop(), twin?.stop()]);
|
|
23
|
+
fs.rmSync(dataDir, { recursive: true, force: true });
|
|
24
|
+
});
|
|
25
|
+
function cli(args) {
|
|
26
|
+
return exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), ...args, '--data-dir', dataDir], {
|
|
27
|
+
cwd: process.cwd(), env: { ...process.env, KIMAKI_LOCK_PORT: String(bot.lock.port), KIMAKI_OPENCODE_SERVICE_FILE: server.serviceFile, KIMAKI_DISCORD_REST_URL: twin.discord.restUrl },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
test('session read, list, search, wait, url and events read real session history', async () => {
|
|
31
|
+
const first = await send(bot, { channelId: twin.channelId, prompt: 'Reader content marker' });
|
|
32
|
+
if (first instanceof Error)
|
|
33
|
+
throw first;
|
|
34
|
+
if (!first.sessionId)
|
|
35
|
+
throw new Error('Expected an AI session');
|
|
36
|
+
await waitForFooter({ discord: twin.discord, threadId: first.threadId });
|
|
37
|
+
const list = await cli(['session', 'list', '--project', server.projectDirectory, '--json']);
|
|
38
|
+
const search = await cli(['session', 'search', 'Reader content', '--project', server.projectDirectory, '--json']);
|
|
39
|
+
const read = await cli(['session', 'read', first.threadId]);
|
|
40
|
+
const wait = await cli(['session', 'wait', first.sessionId, '--timeout', '10s']);
|
|
41
|
+
const url = await cli(['session', 'url', first.sessionId]);
|
|
42
|
+
const events = await cli(['session', 'events', first.sessionId]);
|
|
43
|
+
expect(await twin.discord.thread(first.threadId).text()).toMatchInlineSnapshot(`
|
|
44
|
+
"--- from: assistant (TestBot)
|
|
45
|
+
» **CLI:** Reader content marker
|
|
46
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
47
|
+
ok
|
|
48
|
+
-# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
|
|
49
|
+
`);
|
|
50
|
+
expect(list.stdout).toContain(first.sessionId);
|
|
51
|
+
expect(search.stdout).toContain(first.sessionId);
|
|
52
|
+
expect(read.stdout).toContain('Reader content marker');
|
|
53
|
+
expect(wait.stdout).toContain('Reader content marker');
|
|
54
|
+
expect(url.stdout).toContain(first.threadId);
|
|
55
|
+
expect(events.stdout).toContain('session.execution.succeeded');
|
|
56
|
+
const none = await cli(['session', 'list', '--active', '--all']).catch((error) => error);
|
|
57
|
+
expect(none instanceof Error && none.code).toBe(1);
|
|
58
|
+
});
|
|
59
|
+
test('session wait returns for a real pending question; active discovery errors use exit 64', async () => {
|
|
60
|
+
const first = await send(bot, { channelId: twin.channelId, prompt: 'wait-form-marker', permissions: ['question:allow'] });
|
|
61
|
+
if (first instanceof Error || !first.sessionId)
|
|
62
|
+
throw new Error('Expected a session');
|
|
63
|
+
await waitForSelectMenu({ discord: twin.discord, channelId: first.threadId, prefix: 'form:' });
|
|
64
|
+
const result = await cli(['session', 'wait', first.sessionId, '--timeout', '3s']);
|
|
65
|
+
expect(await twin.discord.thread(first.threadId).text()).toMatchInlineSnapshot(`
|
|
66
|
+
"--- from: assistant (TestBot)
|
|
67
|
+
» **CLI:** wait-form-marker
|
|
68
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
69
|
+
**Next**
|
|
70
|
+
Continue?"
|
|
71
|
+
`);
|
|
72
|
+
expect(result.stdout).toContain('Continue?');
|
|
73
|
+
const failure = await exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'session', 'list', '--active'], {
|
|
74
|
+
env: { ...process.env, KIMAKI_OPENCODE_SERVICE_FILE: path.join(server.root, 'missing-service.json') },
|
|
75
|
+
}).catch((error) => error);
|
|
76
|
+
expect(failure instanceof Error && failure.code).toBe(64);
|
|
77
|
+
const aborted = await abort(bot, { threadId: first.threadId });
|
|
78
|
+
if (aborted instanceof Error)
|
|
79
|
+
throw aborted;
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=cli-read.e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-read.e2e.test.js","sourceRoot":"","sources":["../src/cli-read.e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|