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
package/src/commands/agent.ts
DELETED
|
@@ -1,911 +0,0 @@
|
|
|
1
|
-
// /agent command - Set the preferred agent for this channel or session.
|
|
2
|
-
// Also provides quick agent commands like /plan-agent, /build-agent that switch instantly.
|
|
3
|
-
// When a prompt is provided to a quick agent command (e.g. /plan-agent "fix the bug"),
|
|
4
|
-
// the prompt is sent with that agent and the session keeps that agent afterwards.
|
|
5
|
-
// Optional last `variant` option sets the model thinking level for that agent.
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
ChatInputCommandInteraction,
|
|
9
|
-
StringSelectMenuInteraction,
|
|
10
|
-
StringSelectMenuBuilder,
|
|
11
|
-
ActionRowBuilder,
|
|
12
|
-
ChannelType,
|
|
13
|
-
ThreadAutoArchiveDuration,
|
|
14
|
-
type ThreadChannel,
|
|
15
|
-
type TextChannel,
|
|
16
|
-
MessageFlags,
|
|
17
|
-
} from 'discord.js'
|
|
18
|
-
import crypto from 'node:crypto'
|
|
19
|
-
import {
|
|
20
|
-
setChannelAgent,
|
|
21
|
-
setSessionAgent,
|
|
22
|
-
setSessionModel,
|
|
23
|
-
setChannelModel,
|
|
24
|
-
getChannelModel,
|
|
25
|
-
clearSessionModel,
|
|
26
|
-
getThreadSession,
|
|
27
|
-
getSessionAgent,
|
|
28
|
-
getChannelAgent,
|
|
29
|
-
getChannelWorktreesEnabled,
|
|
30
|
-
} from '../database.js'
|
|
31
|
-
import { initializeOpencodeForDirectory } from '../opencode.js'
|
|
32
|
-
import {
|
|
33
|
-
resolveTextChannel,
|
|
34
|
-
resolveWorkingDirectory,
|
|
35
|
-
resolveProjectDirectoryFromAutocomplete,
|
|
36
|
-
getKimakiMetadata,
|
|
37
|
-
SILENT_MESSAGE_FLAGS,
|
|
38
|
-
} from '../discord-utils.js'
|
|
39
|
-
import {
|
|
40
|
-
getOrCreateRuntime,
|
|
41
|
-
releaseCurrentThreadIngress,
|
|
42
|
-
waitForCurrentThreadIngress,
|
|
43
|
-
} from '../session-handler/thread-session-runtime.js'
|
|
44
|
-
import { createLogger, LogPrefix } from '../logger.js'
|
|
45
|
-
import {
|
|
46
|
-
formatModelSource,
|
|
47
|
-
getCurrentModelInfo,
|
|
48
|
-
type CurrentModelInfo,
|
|
49
|
-
} from './model.js'
|
|
50
|
-
import { isGitRepositoryRoot } from '../worktrees.js'
|
|
51
|
-
import {
|
|
52
|
-
formatAutoWorktreeName,
|
|
53
|
-
createWorktreeInBackground,
|
|
54
|
-
worktreeCreatingMessage,
|
|
55
|
-
} from './new-worktree.js'
|
|
56
|
-
import { WORKTREE_PREFIX } from './merge-worktree.js'
|
|
57
|
-
import { QUEUE_PREFIX } from '../message-formatting.js'
|
|
58
|
-
import { store } from '../store.js'
|
|
59
|
-
import {
|
|
60
|
-
getThinkingValuesForModel,
|
|
61
|
-
resolveRequestedThinkingVariant,
|
|
62
|
-
} from '../thinking-utils.js'
|
|
63
|
-
import type { AutocompleteContext } from './types.js'
|
|
64
|
-
import { OpenCodeSdkError } from '../errors.js'
|
|
65
|
-
|
|
66
|
-
const agentLogger = createLogger(LogPrefix.AGENT)
|
|
67
|
-
|
|
68
|
-
const AGENT_CONTEXT_TTL_MS = 10 * 60 * 1000
|
|
69
|
-
const pendingAgentContexts = new Map<string, AgentCommandContext>()
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Context for agent commands, containing channel/session info.
|
|
73
|
-
*/
|
|
74
|
-
export type AgentCommandContext = {
|
|
75
|
-
dir: string
|
|
76
|
-
workingDirectory: string
|
|
77
|
-
channelId: string
|
|
78
|
-
sessionId?: string
|
|
79
|
-
isThread: boolean
|
|
80
|
-
appId: string
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export type CurrentAgentInfo =
|
|
84
|
-
| { type: 'session'; agent: string }
|
|
85
|
-
| { type: 'channel'; agent: string }
|
|
86
|
-
| { type: 'none' }
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Get the current agent info for a channel/session, including where it comes from.
|
|
90
|
-
* Priority: session > channel > none
|
|
91
|
-
*/
|
|
92
|
-
export async function getCurrentAgentInfo({
|
|
93
|
-
sessionId,
|
|
94
|
-
channelId,
|
|
95
|
-
}: {
|
|
96
|
-
sessionId?: string
|
|
97
|
-
channelId?: string
|
|
98
|
-
}): Promise<CurrentAgentInfo> {
|
|
99
|
-
if (sessionId) {
|
|
100
|
-
const sessionAgent = await getSessionAgent(sessionId)
|
|
101
|
-
if (sessionAgent) {
|
|
102
|
-
return { type: 'session', agent: sessionAgent }
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (channelId) {
|
|
106
|
-
const channelAgent = await getChannelAgent(channelId)
|
|
107
|
-
if (channelAgent) {
|
|
108
|
-
return { type: 'channel', agent: channelAgent }
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return { type: 'none' }
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Sanitize an agent name to be a valid Discord command name component.
|
|
116
|
-
* Lowercase, alphanumeric and hyphens only.
|
|
117
|
-
*/
|
|
118
|
-
export function sanitizeAgentName(name: string): string {
|
|
119
|
-
return name
|
|
120
|
-
.toLowerCase()
|
|
121
|
-
.replace(/[^a-z0-9-]/g, '-')
|
|
122
|
-
.replace(/-+/g, '-')
|
|
123
|
-
.replace(/^-|-$/g, '')
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const QUICK_AGENT_DESCRIPTION_PATTERN = /^\[agent:([^\]]+)\]/
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Build quick-agent command description with an embedded original agent name.
|
|
130
|
-
* Metadata format: [agent:<original-name>] <visible description>
|
|
131
|
-
*/
|
|
132
|
-
export function buildQuickAgentCommandDescription({
|
|
133
|
-
agentName,
|
|
134
|
-
description,
|
|
135
|
-
}: {
|
|
136
|
-
agentName: string
|
|
137
|
-
description?: string
|
|
138
|
-
}): string {
|
|
139
|
-
const metadataPrefix = `[agent:${agentName}]`
|
|
140
|
-
if (metadataPrefix.length > 100) {
|
|
141
|
-
return metadataPrefix.slice(0, 100)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const visibleDescription = description || `Switch to ${agentName} agent`
|
|
145
|
-
const maxVisibleLength = 100 - metadataPrefix.length - 1
|
|
146
|
-
|
|
147
|
-
if (maxVisibleLength <= 0) {
|
|
148
|
-
return metadataPrefix
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const trimmedVisible = visibleDescription.slice(0, maxVisibleLength).trim()
|
|
152
|
-
if (!trimmedVisible) {
|
|
153
|
-
return metadataPrefix
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return `${metadataPrefix} ${trimmedVisible}`
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function parseQuickAgentNameFromDescription(
|
|
160
|
-
description: string | undefined,
|
|
161
|
-
): string | undefined {
|
|
162
|
-
if (!description) {
|
|
163
|
-
return undefined
|
|
164
|
-
}
|
|
165
|
-
const match = QUICK_AGENT_DESCRIPTION_PATTERN.exec(description)
|
|
166
|
-
if (!match) {
|
|
167
|
-
return undefined
|
|
168
|
-
}
|
|
169
|
-
const agentName = match[1]?.trim()
|
|
170
|
-
if (!agentName) {
|
|
171
|
-
return undefined
|
|
172
|
-
}
|
|
173
|
-
return agentName
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
async function resolveQuickAgentNameFromInteraction({
|
|
177
|
-
command,
|
|
178
|
-
}: {
|
|
179
|
-
command: ChatInputCommandInteraction
|
|
180
|
-
}): Promise<string | undefined> {
|
|
181
|
-
const fromCommandObject = parseQuickAgentNameFromDescription(
|
|
182
|
-
command.command?.description,
|
|
183
|
-
)
|
|
184
|
-
if (fromCommandObject) {
|
|
185
|
-
return fromCommandObject
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (!command.guild) {
|
|
189
|
-
return undefined
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const fetchedCommand = await command.guild.commands.fetch(command.commandId)
|
|
193
|
-
if (!fetchedCommand) {
|
|
194
|
-
return undefined
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return parseQuickAgentNameFromDescription(fetchedCommand.description)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Resolve the context for an agent command (directory, channel, session).
|
|
202
|
-
* Returns null if the command cannot be executed in this context.
|
|
203
|
-
*/
|
|
204
|
-
export async function resolveAgentCommandContext({
|
|
205
|
-
interaction,
|
|
206
|
-
appId,
|
|
207
|
-
}: {
|
|
208
|
-
interaction: ChatInputCommandInteraction
|
|
209
|
-
appId: string
|
|
210
|
-
}): Promise<AgentCommandContext | null> {
|
|
211
|
-
const channel = interaction.channel
|
|
212
|
-
|
|
213
|
-
if (!channel) {
|
|
214
|
-
await interaction.editReply({
|
|
215
|
-
content: 'This command can only be used in a channel',
|
|
216
|
-
})
|
|
217
|
-
return null
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
const isThread = [
|
|
221
|
-
ChannelType.PublicThread,
|
|
222
|
-
ChannelType.PrivateThread,
|
|
223
|
-
ChannelType.AnnouncementThread,
|
|
224
|
-
].includes(channel.type)
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
!isThread &&
|
|
228
|
-
channel.type !== ChannelType.GuildText
|
|
229
|
-
) {
|
|
230
|
-
await interaction.editReply({
|
|
231
|
-
content: 'This command can only be used in text channels or threads',
|
|
232
|
-
})
|
|
233
|
-
return null
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
const resolved = await resolveWorkingDirectory({
|
|
237
|
-
channel: channel as TextChannel | ThreadChannel,
|
|
238
|
-
})
|
|
239
|
-
if (!resolved) {
|
|
240
|
-
await interaction.editReply({
|
|
241
|
-
content: 'This channel is not configured with a project directory',
|
|
242
|
-
})
|
|
243
|
-
return null
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const textChannel = isThread
|
|
247
|
-
? await resolveTextChannel(channel as ThreadChannel)
|
|
248
|
-
: undefined
|
|
249
|
-
const sessionId = isThread
|
|
250
|
-
? await getThreadSession(channel.id)
|
|
251
|
-
: undefined
|
|
252
|
-
|
|
253
|
-
return {
|
|
254
|
-
dir: resolved.projectDirectory,
|
|
255
|
-
workingDirectory: resolved.workingDirectory,
|
|
256
|
-
channelId: textChannel?.id || channel.id,
|
|
257
|
-
sessionId,
|
|
258
|
-
isThread,
|
|
259
|
-
appId,
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Set the agent preference for a context (session or channel).
|
|
265
|
-
* When switching agents for a session, clears session model preference
|
|
266
|
-
* so the new agent's model takes effect (agent model > channel model).
|
|
267
|
-
*/
|
|
268
|
-
export async function setAgentForContext({
|
|
269
|
-
context,
|
|
270
|
-
agentName,
|
|
271
|
-
}: {
|
|
272
|
-
context: AgentCommandContext
|
|
273
|
-
agentName: string
|
|
274
|
-
}): Promise<void> {
|
|
275
|
-
if (context.isThread && context.sessionId) {
|
|
276
|
-
await setSessionAgent(context.sessionId, agentName)
|
|
277
|
-
// Clear session model so the new agent's model takes effect
|
|
278
|
-
await clearSessionModel(context.sessionId)
|
|
279
|
-
agentLogger.log(
|
|
280
|
-
`Set agent ${agentName} for session ${context.sessionId} (cleared session model)`,
|
|
281
|
-
)
|
|
282
|
-
} else {
|
|
283
|
-
await setChannelAgent(context.channelId, agentName)
|
|
284
|
-
agentLogger.log(`Set agent ${agentName} for channel ${context.channelId}`)
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
async function applyQuickAgentVariant({
|
|
289
|
-
context,
|
|
290
|
-
agentName,
|
|
291
|
-
variant,
|
|
292
|
-
}: {
|
|
293
|
-
context: AgentCommandContext
|
|
294
|
-
agentName: string
|
|
295
|
-
variant: string
|
|
296
|
-
}): Promise<string | undefined> {
|
|
297
|
-
const modelInfo = await resolveAgentModelInfo({ context, agentName })
|
|
298
|
-
if (modelInfo.type === 'none') {
|
|
299
|
-
agentLogger.warn(
|
|
300
|
-
`[AGENT] Skipping variant ${variant}: no model for agent ${agentName}`,
|
|
301
|
-
)
|
|
302
|
-
return undefined
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
const getClient = await initializeOpencodeForDirectory(context.dir)
|
|
306
|
-
if (getClient instanceof Error) return undefined
|
|
307
|
-
|
|
308
|
-
const providersResponse = await getClient()
|
|
309
|
-
.provider.list({ directory: context.workingDirectory })
|
|
310
|
-
.catch((e) => new OpenCodeSdkError({ operation: 'provider.list', cause: e }))
|
|
311
|
-
if (providersResponse instanceof Error || !providersResponse.data) {
|
|
312
|
-
agentLogger.warn(`[AGENT] Skipping variant ${variant}: provider list failed`)
|
|
313
|
-
return undefined
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
const matchedVariant = resolveRequestedThinkingVariant({
|
|
317
|
-
requestedValue: variant,
|
|
318
|
-
providers: providersResponse.data.all,
|
|
319
|
-
providerId: modelInfo.providerID,
|
|
320
|
-
modelId: modelInfo.modelID,
|
|
321
|
-
})
|
|
322
|
-
if (!matchedVariant) {
|
|
323
|
-
agentLogger.warn(
|
|
324
|
-
`[AGENT] Skipping variant ${variant}: not supported by ${modelInfo.model}`,
|
|
325
|
-
)
|
|
326
|
-
return undefined
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
if (context.isThread && context.sessionId) {
|
|
330
|
-
await setSessionModel({
|
|
331
|
-
sessionId: context.sessionId,
|
|
332
|
-
modelId: modelInfo.model,
|
|
333
|
-
variant: matchedVariant,
|
|
334
|
-
})
|
|
335
|
-
return matchedVariant
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const existing = await getChannelModel(context.channelId)
|
|
339
|
-
await setChannelModel({
|
|
340
|
-
channelId: context.channelId,
|
|
341
|
-
modelId: existing?.modelId ?? modelInfo.model,
|
|
342
|
-
variant: matchedVariant,
|
|
343
|
-
})
|
|
344
|
-
return matchedVariant
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
function formatAgentModelLine(modelInfo: CurrentModelInfo): string {
|
|
348
|
-
if (modelInfo.type === 'none') return ''
|
|
349
|
-
const source = formatModelSource({
|
|
350
|
-
type: modelInfo.type,
|
|
351
|
-
agentName: modelInfo.type === 'agent' ? modelInfo.agentName : undefined,
|
|
352
|
-
})
|
|
353
|
-
const line = `\nModel: *${modelInfo.model}* (${source})`
|
|
354
|
-
if (modelInfo.type !== 'session' && modelInfo.type !== 'channel') {
|
|
355
|
-
return line
|
|
356
|
-
}
|
|
357
|
-
return `${line}\nThis model comes from a ${modelInfo.type} override. Use /model and press Clear override if you want this agent's model.`
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
function formatAgentPreferenceReply({
|
|
361
|
-
agentName,
|
|
362
|
-
previousAgentName,
|
|
363
|
-
modelInfo,
|
|
364
|
-
scope,
|
|
365
|
-
variant,
|
|
366
|
-
}: {
|
|
367
|
-
agentName: string
|
|
368
|
-
previousAgentName?: string
|
|
369
|
-
modelInfo: CurrentModelInfo
|
|
370
|
-
scope: 'session' | 'channel'
|
|
371
|
-
variant?: string
|
|
372
|
-
}): string {
|
|
373
|
-
const sameAgent = previousAgentName === agentName
|
|
374
|
-
const verb = sameAgent ? 'Using' : 'Switched to'
|
|
375
|
-
const previousText =
|
|
376
|
-
!sameAgent && previousAgentName ? ` (was **${previousAgentName}**)` : ''
|
|
377
|
-
const modelText = formatAgentModelLine(modelInfo)
|
|
378
|
-
const variantText = variant ? `\nVariant: **${variant}**` : ''
|
|
379
|
-
if (scope === 'session') {
|
|
380
|
-
return `${verb} **${agentName}** agent for this session${previousText}${modelText}${variantText}\nThe agent will change on the next message.`
|
|
381
|
-
}
|
|
382
|
-
return `${verb} **${agentName}** agent for this channel${previousText}${modelText}${variantText}\nAll new sessions will use this agent.`
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
async function resolveAgentModelInfo({
|
|
386
|
-
context,
|
|
387
|
-
agentName,
|
|
388
|
-
}: {
|
|
389
|
-
context: AgentCommandContext
|
|
390
|
-
agentName: string
|
|
391
|
-
}): Promise<CurrentModelInfo> {
|
|
392
|
-
const getClient = await initializeOpencodeForDirectory(context.dir)
|
|
393
|
-
if (getClient instanceof Error) return { type: 'none' }
|
|
394
|
-
return getCurrentModelInfo({
|
|
395
|
-
sessionId: context.sessionId,
|
|
396
|
-
channelId: context.channelId,
|
|
397
|
-
appId: context.appId,
|
|
398
|
-
agentPreference: agentName,
|
|
399
|
-
getClient,
|
|
400
|
-
directory: context.workingDirectory,
|
|
401
|
-
})
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
export async function handleAgentCommand({
|
|
405
|
-
interaction,
|
|
406
|
-
appId,
|
|
407
|
-
}: {
|
|
408
|
-
interaction: ChatInputCommandInteraction
|
|
409
|
-
appId: string
|
|
410
|
-
}): Promise<void> {
|
|
411
|
-
await interaction.deferReply()
|
|
412
|
-
|
|
413
|
-
const context = await resolveAgentCommandContext({ interaction, appId })
|
|
414
|
-
if (!context) {
|
|
415
|
-
return
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
try {
|
|
419
|
-
const getClient = await initializeOpencodeForDirectory(context.dir)
|
|
420
|
-
if (getClient instanceof Error) {
|
|
421
|
-
await interaction.editReply({ content: getClient.message })
|
|
422
|
-
return
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
const agentsResponse = await getClient().app.agents({
|
|
426
|
-
directory: context.workingDirectory,
|
|
427
|
-
})
|
|
428
|
-
|
|
429
|
-
if (!agentsResponse.data || agentsResponse.data.length === 0) {
|
|
430
|
-
await interaction.editReply({ content: 'No agents available' })
|
|
431
|
-
return
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
const agents = agentsResponse.data
|
|
435
|
-
.filter((agent) => {
|
|
436
|
-
const hidden = (agent as { hidden?: boolean }).hidden
|
|
437
|
-
return (agent.mode === 'primary' || agent.mode === 'all') && !hidden
|
|
438
|
-
})
|
|
439
|
-
.slice(0, 25)
|
|
440
|
-
|
|
441
|
-
if (agents.length === 0) {
|
|
442
|
-
await interaction.editReply({ content: 'No primary agents available' })
|
|
443
|
-
return
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
const currentAgentInfo = await getCurrentAgentInfo({
|
|
447
|
-
sessionId: context.sessionId,
|
|
448
|
-
channelId: context.channelId,
|
|
449
|
-
})
|
|
450
|
-
|
|
451
|
-
const currentAgentText = (() => {
|
|
452
|
-
switch (currentAgentInfo.type) {
|
|
453
|
-
case 'session':
|
|
454
|
-
return `**Current (session override):** \`${currentAgentInfo.agent}\``
|
|
455
|
-
case 'channel':
|
|
456
|
-
return `**Current (channel override):** \`${currentAgentInfo.agent}\``
|
|
457
|
-
case 'none':
|
|
458
|
-
return '**Current:** none'
|
|
459
|
-
}
|
|
460
|
-
})()
|
|
461
|
-
|
|
462
|
-
const contextHash = crypto.randomBytes(8).toString('hex')
|
|
463
|
-
pendingAgentContexts.set(contextHash, context)
|
|
464
|
-
setTimeout(() => {
|
|
465
|
-
pendingAgentContexts.delete(contextHash)
|
|
466
|
-
}, AGENT_CONTEXT_TTL_MS).unref()
|
|
467
|
-
|
|
468
|
-
const options = agents.map((agent) => ({
|
|
469
|
-
label: agent.name.slice(0, 100),
|
|
470
|
-
value: agent.name,
|
|
471
|
-
description: (agent.description || `${agent.mode} agent`).slice(0, 100),
|
|
472
|
-
}))
|
|
473
|
-
|
|
474
|
-
const selectMenu = new StringSelectMenuBuilder()
|
|
475
|
-
.setCustomId(`agent_select:${contextHash}`)
|
|
476
|
-
.setPlaceholder('Select an agent')
|
|
477
|
-
.addOptions(options)
|
|
478
|
-
|
|
479
|
-
const actionRow =
|
|
480
|
-
new ActionRowBuilder<StringSelectMenuBuilder>().addComponents(selectMenu)
|
|
481
|
-
|
|
482
|
-
await interaction.editReply({
|
|
483
|
-
content: `**Set Agent Preference**\n${currentAgentText}\nSelect an agent:`,
|
|
484
|
-
components: [actionRow],
|
|
485
|
-
})
|
|
486
|
-
} catch (error) {
|
|
487
|
-
agentLogger.error('Error loading agents:', error)
|
|
488
|
-
await interaction.editReply({
|
|
489
|
-
content: `Failed to load agents: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
490
|
-
})
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
export async function handleAgentSelectMenu(
|
|
495
|
-
interaction: StringSelectMenuInteraction,
|
|
496
|
-
): Promise<void> {
|
|
497
|
-
const customId = interaction.customId
|
|
498
|
-
|
|
499
|
-
if (!customId.startsWith('agent_select:')) {
|
|
500
|
-
return
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
await interaction.deferUpdate()
|
|
504
|
-
|
|
505
|
-
const contextHash = customId.replace('agent_select:', '')
|
|
506
|
-
const context = pendingAgentContexts.get(contextHash)
|
|
507
|
-
|
|
508
|
-
if (!context) {
|
|
509
|
-
await interaction.editReply({
|
|
510
|
-
content: 'Selection expired. Please run /agent again.',
|
|
511
|
-
components: [],
|
|
512
|
-
})
|
|
513
|
-
return
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
const selectedAgent = interaction.values[0]
|
|
517
|
-
if (!selectedAgent) {
|
|
518
|
-
await interaction.editReply({
|
|
519
|
-
content: 'No agent selected',
|
|
520
|
-
components: [],
|
|
521
|
-
})
|
|
522
|
-
return
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
try {
|
|
526
|
-
const previousAgent = await getCurrentAgentInfo({
|
|
527
|
-
sessionId: context.sessionId,
|
|
528
|
-
channelId: context.channelId,
|
|
529
|
-
})
|
|
530
|
-
const previousAgentName =
|
|
531
|
-
previousAgent.type !== 'none' ? previousAgent.agent : undefined
|
|
532
|
-
|
|
533
|
-
await waitForCurrentThreadIngress()
|
|
534
|
-
try {
|
|
535
|
-
await setAgentForContext({ context, agentName: selectedAgent })
|
|
536
|
-
} finally {
|
|
537
|
-
releaseCurrentThreadIngress()
|
|
538
|
-
}
|
|
539
|
-
const modelInfo = await resolveAgentModelInfo({
|
|
540
|
-
context,
|
|
541
|
-
agentName: selectedAgent,
|
|
542
|
-
})
|
|
543
|
-
const scope =
|
|
544
|
-
context.isThread && context.sessionId ? 'session' : 'channel'
|
|
545
|
-
|
|
546
|
-
await interaction.editReply({
|
|
547
|
-
content: formatAgentPreferenceReply({
|
|
548
|
-
agentName: selectedAgent,
|
|
549
|
-
previousAgentName,
|
|
550
|
-
modelInfo,
|
|
551
|
-
scope,
|
|
552
|
-
}),
|
|
553
|
-
components: [],
|
|
554
|
-
})
|
|
555
|
-
|
|
556
|
-
pendingAgentContexts.delete(contextHash)
|
|
557
|
-
} catch (error) {
|
|
558
|
-
agentLogger.error('Error saving agent preference:', error)
|
|
559
|
-
await interaction.editReply({
|
|
560
|
-
content: `Failed to save agent preference: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
561
|
-
components: [],
|
|
562
|
-
})
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
/**
|
|
567
|
-
* Handle quick agent commands like /plan-agent, /build-agent.
|
|
568
|
-
* These instantly switch to the specified agent without showing a dropdown.
|
|
569
|
-
*
|
|
570
|
-
* The slash command name is sanitized for Discord and can be lossy
|
|
571
|
-
* (for example gpt5.4 -> gpt5-4-agent). To keep the original agent name,
|
|
572
|
-
* registration stores [agent:<name>] metadata in the description and this
|
|
573
|
-
* handler resolves from that metadata first.
|
|
574
|
-
*/
|
|
575
|
-
export async function handleQuickAgentCommand({
|
|
576
|
-
command,
|
|
577
|
-
appId,
|
|
578
|
-
}: {
|
|
579
|
-
command: ChatInputCommandInteraction
|
|
580
|
-
appId: string
|
|
581
|
-
}): Promise<void> {
|
|
582
|
-
const fallbackAgentName = command.commandName.replace(/-agent$/, '')
|
|
583
|
-
const prompt = command.options.getString('prompt') || undefined
|
|
584
|
-
const variant = command.options.getString('variant') || undefined
|
|
585
|
-
|
|
586
|
-
// Prompt mode: send the prompt with this agent immediately.
|
|
587
|
-
if (prompt) {
|
|
588
|
-
return handleQuickAgentWithPrompt({
|
|
589
|
-
command,
|
|
590
|
-
appId,
|
|
591
|
-
fallbackAgentName,
|
|
592
|
-
prompt,
|
|
593
|
-
variant,
|
|
594
|
-
})
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
// No prompt: switch the persistent agent preference (original behavior).
|
|
598
|
-
await command.deferReply()
|
|
599
|
-
|
|
600
|
-
const context = await resolveAgentCommandContext({
|
|
601
|
-
interaction: command,
|
|
602
|
-
appId,
|
|
603
|
-
})
|
|
604
|
-
if (!context) {
|
|
605
|
-
return
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
try {
|
|
609
|
-
const resolvedAgentName =
|
|
610
|
-
(await resolveQuickAgentNameFromInteraction({ command })) ||
|
|
611
|
-
fallbackAgentName
|
|
612
|
-
|
|
613
|
-
// Check current agent and set new one.
|
|
614
|
-
// getCurrentAgentInfo is fast (DB only), use it for the "was X" text.
|
|
615
|
-
const previousAgent = await getCurrentAgentInfo({
|
|
616
|
-
sessionId: context.sessionId,
|
|
617
|
-
channelId: context.channelId,
|
|
618
|
-
})
|
|
619
|
-
const previousAgentName =
|
|
620
|
-
previousAgent.type !== 'none' ? previousAgent.agent : undefined
|
|
621
|
-
|
|
622
|
-
await waitForCurrentThreadIngress()
|
|
623
|
-
try {
|
|
624
|
-
await setAgentForContext({ context, agentName: resolvedAgentName })
|
|
625
|
-
const modelInfo = await resolveAgentModelInfo({
|
|
626
|
-
context,
|
|
627
|
-
agentName: resolvedAgentName,
|
|
628
|
-
})
|
|
629
|
-
const appliedVariant = variant
|
|
630
|
-
? await applyQuickAgentVariant({
|
|
631
|
-
context,
|
|
632
|
-
agentName: resolvedAgentName,
|
|
633
|
-
variant,
|
|
634
|
-
})
|
|
635
|
-
: undefined
|
|
636
|
-
const scope =
|
|
637
|
-
context.isThread && context.sessionId ? 'session' : 'channel'
|
|
638
|
-
const unsupportedVariantNote =
|
|
639
|
-
variant && !appliedVariant
|
|
640
|
-
? `\nVariant **${variant}** is not supported by this agent's model.`
|
|
641
|
-
: ''
|
|
642
|
-
|
|
643
|
-
await command.editReply({
|
|
644
|
-
content: `${formatAgentPreferenceReply({
|
|
645
|
-
agentName: resolvedAgentName,
|
|
646
|
-
previousAgentName,
|
|
647
|
-
modelInfo,
|
|
648
|
-
scope,
|
|
649
|
-
variant: appliedVariant,
|
|
650
|
-
})}${unsupportedVariantNote}`,
|
|
651
|
-
})
|
|
652
|
-
} finally {
|
|
653
|
-
releaseCurrentThreadIngress()
|
|
654
|
-
}
|
|
655
|
-
} catch (error) {
|
|
656
|
-
agentLogger.error('Error in quick agent command:', error)
|
|
657
|
-
await command.editReply({
|
|
658
|
-
content: `Failed to switch agent: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
659
|
-
})
|
|
660
|
-
}
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
/**
|
|
664
|
-
* Handle prompt mode: send a prompt with the requested agent.
|
|
665
|
-
* In a thread: enqueue the prompt on the existing session and switch that session.
|
|
666
|
-
* In a channel: create a new thread whose session starts with the requested agent.
|
|
667
|
-
* Channel-level preferences are not changed.
|
|
668
|
-
*/
|
|
669
|
-
async function handleQuickAgentWithPrompt({
|
|
670
|
-
command,
|
|
671
|
-
appId,
|
|
672
|
-
fallbackAgentName,
|
|
673
|
-
prompt,
|
|
674
|
-
variant,
|
|
675
|
-
}: {
|
|
676
|
-
command: ChatInputCommandInteraction
|
|
677
|
-
appId: string
|
|
678
|
-
fallbackAgentName: string
|
|
679
|
-
prompt: string
|
|
680
|
-
variant?: string
|
|
681
|
-
}): Promise<void> {
|
|
682
|
-
const channel = command.channel
|
|
683
|
-
if (!channel) {
|
|
684
|
-
await command.reply({
|
|
685
|
-
content: 'This command can only be used in a channel',
|
|
686
|
-
flags: MessageFlags.Ephemeral,
|
|
687
|
-
})
|
|
688
|
-
return
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
const resolvedAgentName =
|
|
692
|
-
(await resolveQuickAgentNameFromInteraction({ command })) ||
|
|
693
|
-
fallbackAgentName
|
|
694
|
-
|
|
695
|
-
const isThread = [
|
|
696
|
-
ChannelType.PublicThread,
|
|
697
|
-
ChannelType.PrivateThread,
|
|
698
|
-
ChannelType.AnnouncementThread,
|
|
699
|
-
].includes(channel.type)
|
|
700
|
-
|
|
701
|
-
const displayText = `${prompt.slice(0, 1000)}${prompt.length > 1000 ? '...' : ''}`
|
|
702
|
-
|
|
703
|
-
if (isThread) {
|
|
704
|
-
// In a thread: enqueue the prompt and switch the existing session to this agent.
|
|
705
|
-
const thread = channel as ThreadChannel
|
|
706
|
-
const resolved = await resolveWorkingDirectory({ channel: thread })
|
|
707
|
-
if (!resolved) {
|
|
708
|
-
await command.reply({
|
|
709
|
-
content: 'Could not determine project directory for this channel',
|
|
710
|
-
flags: MessageFlags.Ephemeral,
|
|
711
|
-
})
|
|
712
|
-
return
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
const runtime = getOrCreateRuntime({
|
|
716
|
-
threadId: thread.id,
|
|
717
|
-
thread,
|
|
718
|
-
projectDirectory: resolved.projectDirectory,
|
|
719
|
-
sdkDirectory: resolved.workingDirectory,
|
|
720
|
-
channelId: thread.parentId || thread.id,
|
|
721
|
-
appId,
|
|
722
|
-
})
|
|
723
|
-
|
|
724
|
-
// Visible reply showing the one-shot prompt (not ephemeral, so it appears in thread).
|
|
725
|
-
await command.reply({
|
|
726
|
-
content: `${QUEUE_PREFIX}**${command.user.displayName}** (${resolvedAgentName}): ${displayText}`,
|
|
727
|
-
flags: SILENT_MESSAGE_FLAGS,
|
|
728
|
-
})
|
|
729
|
-
|
|
730
|
-
await runtime.enqueueIncoming({
|
|
731
|
-
prompt,
|
|
732
|
-
userId: command.user.id,
|
|
733
|
-
username: command.user.displayName,
|
|
734
|
-
agent: resolvedAgentName,
|
|
735
|
-
appId,
|
|
736
|
-
mode: 'opencode',
|
|
737
|
-
variant,
|
|
738
|
-
})
|
|
739
|
-
} else if (channel.type === ChannelType.GuildText) {
|
|
740
|
-
// In a channel: create a new thread and enqueue with the requested agent.
|
|
741
|
-
const metadata = await getKimakiMetadata(channel)
|
|
742
|
-
const projectDirectory = metadata.projectDirectory
|
|
743
|
-
|
|
744
|
-
if (!projectDirectory) {
|
|
745
|
-
await command.reply({
|
|
746
|
-
content: 'This channel is not configured with a project directory',
|
|
747
|
-
flags: MessageFlags.Ephemeral,
|
|
748
|
-
})
|
|
749
|
-
return
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
await command.deferReply()
|
|
753
|
-
|
|
754
|
-
// Check if worktrees should be enabled (CLI flag OR channel setting),
|
|
755
|
-
// mirroring the logic in discord-bot.ts message handler.
|
|
756
|
-
const wantsWorktrees =
|
|
757
|
-
store.getState().useWorktrees ||
|
|
758
|
-
(await getChannelWorktreesEnabled(channel.id))
|
|
759
|
-
const shouldUseWorktrees =
|
|
760
|
-
wantsWorktrees && (await isGitRepositoryRoot(projectDirectory))
|
|
761
|
-
|
|
762
|
-
if (wantsWorktrees && !shouldUseWorktrees) {
|
|
763
|
-
agentLogger.warn(
|
|
764
|
-
`[WORKTREE] Skipping automatic worktree for non-git project directory: ${projectDirectory}`,
|
|
765
|
-
)
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
const baseThreadName = prompt.slice(0, 80)
|
|
769
|
-
const threadName = shouldUseWorktrees
|
|
770
|
-
? `${WORKTREE_PREFIX}${baseThreadName}`
|
|
771
|
-
: baseThreadName
|
|
772
|
-
|
|
773
|
-
const starterMessage = await channel.send({
|
|
774
|
-
content: `${QUEUE_PREFIX}**${command.user.displayName}** (${resolvedAgentName}): ${displayText}`,
|
|
775
|
-
flags: SILENT_MESSAGE_FLAGS,
|
|
776
|
-
})
|
|
777
|
-
|
|
778
|
-
const thread = await starterMessage.startThread({
|
|
779
|
-
name: threadName.slice(0, 80),
|
|
780
|
-
autoArchiveDuration: ThreadAutoArchiveDuration.OneDay,
|
|
781
|
-
reason: `${resolvedAgentName} agent prompt`,
|
|
782
|
-
})
|
|
783
|
-
|
|
784
|
-
await thread.members.add(command.user.id)
|
|
785
|
-
|
|
786
|
-
// Create worktree in background if enabled, same as discord-bot.ts
|
|
787
|
-
let worktreePromise: Promise<string | Error> | undefined
|
|
788
|
-
if (shouldUseWorktrees) {
|
|
789
|
-
const worktreeName = formatAutoWorktreeName(baseThreadName.slice(0, 50))
|
|
790
|
-
agentLogger.log(`[WORKTREE] Creating worktree: ${worktreeName}`)
|
|
791
|
-
|
|
792
|
-
const worktreeStatusMessage = await thread
|
|
793
|
-
.send({
|
|
794
|
-
content: worktreeCreatingMessage(worktreeName),
|
|
795
|
-
flags: SILENT_MESSAGE_FLAGS,
|
|
796
|
-
})
|
|
797
|
-
.catch(() => undefined)
|
|
798
|
-
|
|
799
|
-
worktreePromise = createWorktreeInBackground({
|
|
800
|
-
thread,
|
|
801
|
-
starterMessage: worktreeStatusMessage,
|
|
802
|
-
worktreeName,
|
|
803
|
-
projectDirectory,
|
|
804
|
-
rest: command.client.rest,
|
|
805
|
-
})
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
const worktreeResult = worktreePromise ? await worktreePromise : projectDirectory
|
|
809
|
-
if (worktreeResult instanceof Error) {
|
|
810
|
-
await command.editReply(`Worktree creation failed: ${worktreeResult.message}`)
|
|
811
|
-
return
|
|
812
|
-
}
|
|
813
|
-
const sessionDirectory = worktreeResult
|
|
814
|
-
|
|
815
|
-
await command
|
|
816
|
-
.editReply(`Sent with **${resolvedAgentName}** agent in ${thread.toString()}`)
|
|
817
|
-
.catch(() => {
|
|
818
|
-
agentLogger.warn('[AGENT] Failed to edit quick-agent reply, continuing session')
|
|
819
|
-
})
|
|
820
|
-
|
|
821
|
-
const runtime = getOrCreateRuntime({
|
|
822
|
-
threadId: thread.id,
|
|
823
|
-
thread,
|
|
824
|
-
projectDirectory,
|
|
825
|
-
sdkDirectory: sessionDirectory,
|
|
826
|
-
channelId: channel.id,
|
|
827
|
-
appId,
|
|
828
|
-
})
|
|
829
|
-
|
|
830
|
-
await runtime.enqueueIncoming({
|
|
831
|
-
prompt,
|
|
832
|
-
userId: command.user.id,
|
|
833
|
-
username: command.user.displayName,
|
|
834
|
-
agent: resolvedAgentName,
|
|
835
|
-
appId,
|
|
836
|
-
mode: 'opencode',
|
|
837
|
-
variant,
|
|
838
|
-
})
|
|
839
|
-
} else {
|
|
840
|
-
await command.reply({
|
|
841
|
-
content: 'This command can only be used in text channels or threads',
|
|
842
|
-
flags: MessageFlags.Ephemeral,
|
|
843
|
-
})
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
export async function handleQuickAgentAutocomplete({
|
|
848
|
-
interaction,
|
|
849
|
-
}: AutocompleteContext): Promise<void> {
|
|
850
|
-
if (interaction.options.getFocused(true).name !== 'variant') {
|
|
851
|
-
await interaction.respond([])
|
|
852
|
-
return
|
|
853
|
-
}
|
|
854
|
-
|
|
855
|
-
const focusedValue = interaction.options.getFocused().trim().toLowerCase()
|
|
856
|
-
const projectDirectory = await resolveProjectDirectoryFromAutocomplete(interaction)
|
|
857
|
-
if (!projectDirectory) {
|
|
858
|
-
await interaction.respond([])
|
|
859
|
-
return
|
|
860
|
-
}
|
|
861
|
-
|
|
862
|
-
const getClient = await initializeOpencodeForDirectory(projectDirectory)
|
|
863
|
-
if (getClient instanceof Error) {
|
|
864
|
-
await interaction.respond([])
|
|
865
|
-
return
|
|
866
|
-
}
|
|
867
|
-
|
|
868
|
-
const [providersResponse, agentsResponse] = await Promise.all([
|
|
869
|
-
getClient()
|
|
870
|
-
.provider.list({ directory: projectDirectory })
|
|
871
|
-
.catch((e) => new OpenCodeSdkError({ operation: 'provider.list', cause: e })),
|
|
872
|
-
getClient()
|
|
873
|
-
.app.agents({ directory: projectDirectory })
|
|
874
|
-
.catch((e) => new OpenCodeSdkError({ operation: 'app.agents', cause: e })),
|
|
875
|
-
])
|
|
876
|
-
if (providersResponse instanceof Error || agentsResponse instanceof Error) {
|
|
877
|
-
agentLogger.warn('[AUTOCOMPLETE] Failed to fetch variant choices')
|
|
878
|
-
await interaction.respond([])
|
|
879
|
-
return
|
|
880
|
-
}
|
|
881
|
-
if (!providersResponse.data || !agentsResponse.data) {
|
|
882
|
-
await interaction.respond([])
|
|
883
|
-
return
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
const resolvedAgentName =
|
|
887
|
-
parseQuickAgentNameFromDescription(interaction.command?.description) ||
|
|
888
|
-
interaction.commandName.replace(/-agent$/, '')
|
|
889
|
-
const agent = agentsResponse.data.find((candidate) => candidate.name === resolvedAgentName)
|
|
890
|
-
const agentModel = agent?.model
|
|
891
|
-
if (!agentModel) {
|
|
892
|
-
await interaction.respond([])
|
|
893
|
-
return
|
|
894
|
-
}
|
|
895
|
-
|
|
896
|
-
const variants = getThinkingValuesForModel({
|
|
897
|
-
providers: providersResponse.data.all,
|
|
898
|
-
providerId: agentModel.providerID,
|
|
899
|
-
modelId: agentModel.modelID,
|
|
900
|
-
}).filter((variant) => {
|
|
901
|
-
if (!focusedValue) return true
|
|
902
|
-
return variant.toLowerCase().includes(focusedValue)
|
|
903
|
-
})
|
|
904
|
-
|
|
905
|
-
await interaction.respond(
|
|
906
|
-
variants.slice(0, 25).map((variant) => ({
|
|
907
|
-
name: variant.slice(0, 100),
|
|
908
|
-
value: variant,
|
|
909
|
-
})),
|
|
910
|
-
)
|
|
911
|
-
}
|