kimaki 0.26.0 → 0.28.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-model.e2e.test.js +250 -164
- package/dist/anthropic-account-identity.js +9 -1
- package/dist/anthropic-auth-plugin.js +10 -13
- package/dist/anthropic-auth-plugin.test.js +17 -0
- package/dist/anthropic-auth-state.js +1 -0
- package/dist/bash-tool-schema-plugin.js +32 -0
- package/dist/bash-tool-schema-plugin.test.js +49 -0
- package/dist/bin.js +73 -19
- package/dist/cli-commands/maintenance.js +46 -7
- package/dist/cli-commands/project.js +11 -27
- package/dist/cli-commands/send.js +30 -1
- package/dist/cli-commands/session.js +322 -90
- package/dist/cli-commands/task.js +34 -15
- package/dist/cli-parsing.test.js +83 -4
- package/dist/cli-runner.js +44 -8
- package/dist/cli-runner.test.js +27 -0
- package/dist/cli-send-thread.e2e.test.js +9 -9
- package/dist/cli.js +32 -0
- package/dist/commands/abort.js +5 -1
- package/dist/commands/action-buttons.js +2 -1
- package/dist/commands/add-project.js +4 -7
- package/dist/commands/agent.js +164 -32
- package/dist/commands/ask-question.js +23 -33
- package/dist/commands/ask-question.test.js +43 -1
- package/dist/commands/btw.js +28 -6
- package/dist/commands/file-upload.js +2 -1
- package/dist/commands/fork-subagent.js +2 -4
- package/dist/commands/fork.js +4 -4
- package/dist/commands/last-sessions.js +17 -10
- package/dist/commands/login.js +6 -0
- package/dist/commands/merge-worktree.js +47 -14
- package/dist/commands/model-variant.js +8 -1
- package/dist/commands/model.js +16 -9
- package/dist/commands/multioauth.js +1 -0
- package/dist/commands/new-worktree.js +170 -102
- package/dist/commands/queue.js +3 -2
- package/dist/commands/resume.js +4 -4
- package/dist/commands/session.js +78 -63
- package/dist/commands/user-command.js +6 -8
- package/dist/commands/worktrees.js +5 -13
- package/dist/config.js +16 -1
- package/dist/cpu-profiler.js +211 -0
- package/dist/cpu-profiler.test.js +160 -0
- package/dist/database.js +152 -3
- package/dist/db.js +33 -0
- package/dist/db.test.js +267 -1
- package/dist/default-channel-provisioning.test.js +148 -0
- package/dist/discord-bot.js +517 -488
- package/dist/discord-command-registration.js +25 -10
- package/dist/discord-command-registration.test.js +17 -0
- package/dist/discord-utils.js +97 -5
- package/dist/discord-utils.test.js +151 -1
- package/dist/errors.js +10 -0
- package/dist/exec-async.js +17 -5
- package/dist/external-directory-permissions.e2e.test.js +11 -7
- package/dist/external-directory-project-deny.e2e.test.js +5 -3
- package/dist/external-opencode-sync.js +94 -17
- package/dist/external-opencode-sync.test.js +206 -0
- package/dist/extract-sdk-error-message.test.js +13 -0
- package/dist/file-edit-log.js +197 -0
- package/dist/file-edit-log.test.js +258 -0
- package/dist/format-tables.js +52 -0
- package/dist/format-tables.test.js +93 -0
- package/dist/gateway-proxy-reconnect.e2e.test.js +28 -8
- package/dist/gateway-proxy.e2e.test.js +18 -18
- package/dist/git-worktree-core.js +182 -17
- package/dist/interaction-handler.js +416 -398
- package/dist/ipc-tools-plugin.js +68 -3
- package/dist/kimaki-opencode-plugin-loading.e2e.test.js +122 -58
- package/dist/kimaki-opencode-plugin.js +9 -3
- package/dist/kimaki-workspace-adaptor.js +33 -10
- package/dist/logger.js +11 -1
- package/dist/markdown.js +3 -1
- package/dist/markdown.test.js +11 -3
- package/dist/message-formatting.js +181 -51
- package/dist/message-formatting.test.js +529 -22
- package/dist/message-preprocessing.js +105 -1
- package/dist/oauth-rotation-shared.js +10 -0
- package/dist/openai-auth-plugin.js +1 -0
- package/dist/openai-auth-state.js +1 -0
- package/dist/opencode-command.js +28 -0
- package/dist/opencode-command.test.js +109 -1
- package/dist/opencode-interrupt-plugin.js +4 -0
- package/dist/opencode-interrupt-plugin.test.js +24 -0
- package/dist/opencode.js +82 -15
- package/dist/project-add.test.js +62 -0
- package/dist/question-abort-clears-dropdown.e2e.test.js +89 -0
- package/dist/question-abort-retry-text-before-dropdown.e2e.test.js +150 -0
- package/dist/question-text-before-dropdown.e2e.test.js +52 -0
- package/dist/queue-advanced-abort.e2e.test.js +8 -10
- package/dist/queue-advanced-action-buttons.e2e.test.js +8 -8
- package/dist/queue-advanced-e2e-setup.js +78 -5
- package/dist/queue-advanced-footer.e2e.test.js +60 -269
- package/dist/queue-advanced-model-switch.e2e.test.js +9 -11
- package/dist/queue-advanced-permissions-typing.e2e.test.js +15 -15
- package/dist/queue-advanced-question.e2e.test.js +32 -27
- package/dist/queue-advanced-typing-interrupt.e2e.test.js +10 -12
- package/dist/queue-advanced-typing.e2e.test.js +7 -9
- package/dist/queue-delete-message.e2e.test.js +3 -3
- package/dist/queue-drain-after-interactive-ui.e2e.test.js +5 -5
- package/dist/queue-interrupt-drain.e2e.test.js +122 -12
- package/dist/queue-question-select-drain.e2e.test.js +34 -132
- package/dist/runtime-lifecycle.e2e.test.js +21 -51
- package/dist/schema.js +35 -1
- package/dist/session-handler/event-stream-state.js +391 -50
- package/dist/session-handler/event-stream-state.test.js +736 -8
- package/dist/session-handler/model-utils.js +172 -5
- package/dist/session-handler/model-utils.test.js +445 -0
- package/dist/session-handler/opencode-session-event-log.js +30 -1
- package/dist/session-handler/thread-ingress.test.js +41 -0
- package/dist/session-handler/thread-runtime-state.js +2 -0
- package/dist/session-handler/thread-session-runtime-summary.test.js +121 -0
- package/dist/session-handler/thread-session-runtime.js +574 -299
- package/dist/session-search.js +123 -4
- package/dist/session-search.test.js +248 -1
- package/dist/session-sleep.test.js +224 -0
- package/dist/session-title-rename.test.js +37 -39
- package/dist/sleep.e2e.test.js +494 -0
- package/dist/startup-time.e2e.test.js +2 -1
- package/dist/store.js +3 -0
- package/dist/system-message.js +102 -16
- package/dist/system-message.test.js +192 -15
- package/dist/task-runner.js +96 -5
- package/dist/task-schedule.js +87 -1
- package/dist/task-schedule.test.js +149 -1
- package/dist/test-utils.js +17 -9
- package/dist/thinking-utils.js +10 -0
- package/dist/thinking-utils.test.js +35 -0
- package/dist/thread-message-queue.e2e.test.js +65 -213
- package/dist/undo-redo.e2e.test.js +17 -9
- package/dist/voice-attachment.js +23 -1
- package/dist/voice-handler.js +21 -4
- package/dist/voice-message.e2e.test.js +144 -30
- package/dist/voice-routing-input.e2e.test.js +195 -0
- package/dist/voice-routing-question.e2e.test.js +125 -0
- package/dist/voice.js +28 -8
- package/dist/voice.test.js +96 -30
- package/dist/worktree-clone-isolation.e2e.test.js +188 -0
- package/dist/worktree-lifecycle.e2e.test.js +55 -36
- package/dist/worktrees.js +226 -443
- package/dist/worktrees.test.js +435 -58
- package/dist/xai-auth-plugin.js +1 -0
- package/dist/xai-auth-state.js +1 -0
- package/package.json +8 -6
- package/skills/bump-holocron-consumers/SKILL.md +137 -0
- package/skills/critique/SKILL.md +4 -4
- package/skills/errore/SKILL.md +60 -218
- package/skills/goke/SKILL.md +150 -10
- package/skills/holocron/SKILL.md +154 -17
- package/skills/npm-package/SKILL.md +55 -35
- package/skills/profano/SKILL.md +17 -2
- package/skills/spiceflow/SKILL.md +39 -3
- package/skills/strada/SKILL.md +39 -0
- package/skills/zele/SKILL.md +19 -0
- package/src/agent-model.e2e.test.ts +287 -186
- package/src/anthropic-account-identity.ts +20 -1
- package/src/anthropic-auth-plugin.test.ts +19 -0
- package/src/anthropic-auth-plugin.ts +12 -16
- package/src/anthropic-auth-state.ts +1 -0
- package/src/bash-tool-schema-plugin.test.ts +55 -0
- package/src/bash-tool-schema-plugin.ts +46 -0
- package/src/bin.ts +78 -26
- package/src/cli-commands/maintenance.ts +59 -13
- package/src/cli-commands/project.ts +14 -35
- package/src/cli-commands/send.ts +31 -1
- package/src/cli-commands/session.ts +374 -114
- package/src/cli-commands/task.ts +34 -15
- package/src/cli-parsing.test.ts +103 -4
- package/src/cli-runner.test.ts +49 -0
- package/src/cli-runner.ts +44 -7
- package/src/cli-send-thread.e2e.test.ts +9 -11
- package/src/cli.ts +53 -0
- package/src/commands/abort.ts +6 -1
- package/src/commands/action-buttons.ts +2 -1
- package/src/commands/add-project.ts +4 -8
- package/src/commands/agent.ts +205 -29
- package/src/commands/ask-question.test.ts +48 -1
- package/src/commands/ask-question.ts +23 -33
- package/src/commands/btw.ts +40 -5
- package/src/commands/file-upload.ts +2 -1
- package/src/commands/fork-subagent.ts +2 -3
- package/src/commands/fork.ts +4 -3
- package/src/commands/last-sessions.ts +10 -4
- package/src/commands/login.ts +6 -0
- package/src/commands/merge-worktree.ts +54 -16
- package/src/commands/model-variant.ts +9 -1
- package/src/commands/model.ts +20 -9
- package/src/commands/multioauth.ts +1 -0
- package/src/commands/new-worktree.ts +138 -55
- package/src/commands/queue.ts +3 -2
- package/src/commands/resume.ts +4 -3
- package/src/commands/session.ts +94 -70
- package/src/commands/user-command.ts +6 -6
- package/src/commands/worktrees.ts +5 -12
- package/src/config.ts +18 -1
- package/src/cpu-profiler.test.ts +183 -0
- package/src/cpu-profiler.ts +293 -0
- package/src/database.ts +235 -3
- package/src/db.test.ts +293 -0
- package/src/db.ts +38 -0
- package/src/default-channel-provisioning.test.ts +155 -0
- package/src/discord-bot.ts +78 -36
- package/src/discord-command-registration.test.ts +20 -0
- package/src/discord-command-registration.ts +42 -12
- package/src/discord-utils.test.ts +176 -0
- package/src/discord-utils.ts +152 -7
- package/src/errors.ts +12 -0
- package/src/exec-async.ts +20 -11
- package/src/external-directory-permissions.e2e.test.ts +11 -7
- package/src/external-directory-project-deny.e2e.test.ts +5 -3
- package/src/external-opencode-sync.test.ts +248 -0
- package/src/external-opencode-sync.ts +122 -19
- package/src/extract-sdk-error-message.test.ts +18 -0
- package/src/file-edit-log.test.ts +287 -0
- package/src/file-edit-log.ts +283 -0
- package/src/format-tables.test.ts +101 -0
- package/src/format-tables.ts +75 -0
- package/src/gateway-proxy-reconnect.e2e.test.ts +38 -8
- package/src/gateway-proxy.e2e.test.ts +18 -17
- package/src/git-worktree-core.ts +247 -20
- package/src/interaction-handler.ts +36 -13
- package/src/ipc-tools-plugin.ts +82 -5
- package/src/kimaki-opencode-plugin-loading.e2e.test.ts +188 -97
- package/src/kimaki-opencode-plugin.ts +9 -3
- package/src/kimaki-workspace-adaptor.ts +40 -11
- package/src/logger.ts +14 -4
- package/src/markdown.test.ts +13 -3
- package/src/markdown.ts +4 -1
- package/src/message-formatting.test.ts +672 -25
- package/src/message-formatting.ts +242 -53
- package/src/message-preprocessing.ts +116 -1
- package/src/oauth-rotation-shared.ts +10 -0
- package/src/openai-auth-plugin.ts +1 -0
- package/src/openai-auth-state.ts +1 -0
- package/src/opencode-command.test.ts +140 -0
- package/src/opencode-command.ts +38 -0
- package/src/opencode-interrupt-plugin.test.ts +32 -0
- package/src/opencode-interrupt-plugin.ts +3 -0
- package/src/opencode.ts +115 -15
- package/src/project-add.test.ts +80 -0
- package/src/question-abort-clears-dropdown.e2e.test.ts +109 -0
- package/src/question-abort-retry-text-before-dropdown.e2e.test.ts +172 -0
- package/src/question-text-before-dropdown.e2e.test.ts +67 -0
- package/src/queue-advanced-abort.e2e.test.ts +8 -9
- package/src/queue-advanced-action-buttons.e2e.test.ts +8 -8
- package/src/queue-advanced-e2e-setup.ts +83 -4
- package/src/queue-advanced-footer.e2e.test.ts +67 -315
- package/src/queue-advanced-model-switch.e2e.test.ts +9 -10
- package/src/queue-advanced-permissions-typing.e2e.test.ts +15 -15
- package/src/queue-advanced-question.e2e.test.ts +36 -30
- package/src/queue-advanced-typing-interrupt.e2e.test.ts +11 -11
- package/src/queue-advanced-typing.e2e.test.ts +8 -8
- package/src/queue-delete-message.e2e.test.ts +3 -3
- package/src/queue-drain-after-interactive-ui.e2e.test.ts +5 -5
- package/src/queue-interrupt-drain.e2e.test.ts +133 -12
- package/src/queue-question-select-drain.e2e.test.ts +36 -161
- package/src/runtime-lifecycle.e2e.test.ts +21 -54
- package/src/schema.sql +15 -2
- package/src/schema.ts +37 -1
- package/src/session-handler/event-stream-state.test.ts +790 -7
- package/src/session-handler/event-stream-state.ts +568 -53
- package/src/session-handler/model-utils.test.ts +537 -0
- package/src/session-handler/model-utils.ts +281 -5
- package/src/session-handler/opencode-session-event-log.ts +31 -1
- package/src/session-handler/thread-ingress.test.ts +54 -0
- package/src/session-handler/thread-runtime-state.ts +3 -0
- package/src/session-handler/thread-session-runtime-summary.test.ts +169 -0
- package/src/session-handler/thread-session-runtime.ts +712 -358
- package/src/session-search.test.ts +281 -0
- package/src/session-search.ts +241 -7
- package/src/session-sleep.test.ts +294 -0
- package/src/session-title-rename.test.ts +54 -48
- package/src/sleep.e2e.test.ts +565 -0
- package/src/startup-time.e2e.test.ts +5 -1
- package/src/store.ts +22 -0
- package/src/system-message.test.ts +226 -15
- package/src/system-message.ts +130 -16
- package/src/task-runner.ts +138 -3
- package/src/task-schedule.test.ts +170 -0
- package/src/task-schedule.ts +141 -1
- package/src/test-utils.ts +21 -10
- package/src/thinking-utils.test.ts +46 -0
- package/src/thinking-utils.ts +21 -0
- package/src/thread-message-queue.e2e.test.ts +65 -245
- package/src/undo-redo.e2e.test.ts +17 -9
- package/src/voice-attachment.ts +29 -1
- package/src/voice-handler.ts +23 -4
- package/src/voice-message.e2e.test.ts +149 -29
- package/src/voice-routing-input.e2e.test.ts +203 -0
- package/src/voice-routing-question.e2e.test.ts +131 -0
- package/src/voice.test.ts +107 -29
- package/src/voice.ts +34 -6
- package/src/worktree-clone-isolation.e2e.test.ts +213 -0
- package/src/worktree-lifecycle.e2e.test.ts +55 -35
- package/src/worktrees.test.ts +505 -64
- package/src/worktrees.ts +257 -603
- package/src/xai-auth-plugin.ts +1 -0
- package/src/xai-auth-state.ts +1 -0
- package/dist/message-finish-field.e2e.test.js +0 -169
- package/dist/subagent-rate-limit-plugin.js +0 -184
- package/src/message-finish-field.e2e.test.ts +0 -196
- package/src/subagent-rate-limit-plugin.ts +0 -228
|
@@ -32,6 +32,8 @@ import {
|
|
|
32
32
|
setChannelWorktreesEnabled,
|
|
33
33
|
getThreadSession,
|
|
34
34
|
getThreadWorktreeOrWorkspace,
|
|
35
|
+
getSessionModel,
|
|
36
|
+
setSessionModel,
|
|
35
37
|
type VerbosityLevel,
|
|
36
38
|
} from './database.js'
|
|
37
39
|
import { startHranaServer, stopHranaServer } from './hrana-server.js'
|
|
@@ -55,6 +57,7 @@ const WORKTREE_SUFFIX = Date.now().toString(36).slice(-6)
|
|
|
55
57
|
const WORKTREE_NAME = `wt-e2e-${WORKTREE_SUFFIX}`
|
|
56
58
|
const CHANNEL_WORKTREE_NAME = `wt-chan-${WORKTREE_SUFFIX}`
|
|
57
59
|
const AUTO_WORKTREE_SUFFIX = `wt-auto-${WORKTREE_SUFFIX}`
|
|
60
|
+
const SOURCE_MODEL = 'source-model-v2'
|
|
58
61
|
|
|
59
62
|
function normalizeWorktreeLifecycleText(text: string): string {
|
|
60
63
|
return text
|
|
@@ -224,6 +227,9 @@ describe('worktree lifecycle', () => {
|
|
|
224
227
|
matchers: createDeterministicMatchers(),
|
|
225
228
|
},
|
|
226
229
|
})
|
|
230
|
+
const providerConfig = opencodeConfig.provider['deterministic-provider']
|
|
231
|
+
if (!providerConfig) throw new Error('Missing deterministic provider config')
|
|
232
|
+
providerConfig.models[SOURCE_MODEL] = { name: SOURCE_MODEL }
|
|
227
233
|
fs.writeFileSync(
|
|
228
234
|
path.join(directories.projectDirectory, 'opencode.json'),
|
|
229
235
|
JSON.stringify(opencodeConfig, null, 2),
|
|
@@ -386,7 +392,7 @@ describe('worktree lifecycle', () => {
|
|
|
386
392
|
discord,
|
|
387
393
|
threadId: thread.id,
|
|
388
394
|
userId: TEST_USER_ID,
|
|
389
|
-
text: '
|
|
395
|
+
text: 'ok',
|
|
390
396
|
afterUserMessageIncludes: 'before-worktree',
|
|
391
397
|
timeout: 10_000,
|
|
392
398
|
})
|
|
@@ -397,6 +403,11 @@ describe('worktree lifecycle', () => {
|
|
|
397
403
|
expect(runtimeBefore!.sdkDirectory).toBe(directories.projectDirectory)
|
|
398
404
|
const sessionBefore = await getThreadSession(thread.id)
|
|
399
405
|
expect(sessionBefore).toBeTruthy()
|
|
406
|
+
if (!sessionBefore) throw new Error('Source session was not persisted')
|
|
407
|
+
await setSessionModel({
|
|
408
|
+
sessionId: sessionBefore,
|
|
409
|
+
modelId: `deterministic-provider/${SOURCE_MODEL}`,
|
|
410
|
+
})
|
|
400
411
|
|
|
401
412
|
// 2. Run /new-worktree inside the source thread.
|
|
402
413
|
// This should create a new worktree thread instead of switching this one.
|
|
@@ -436,6 +447,12 @@ describe('worktree lifecycle', () => {
|
|
|
436
447
|
timeout: 10_000,
|
|
437
448
|
})
|
|
438
449
|
|
|
450
|
+
// Messages sent as soon as the checkout is ready must wait for the
|
|
451
|
+
// source session fork and keep its model.
|
|
452
|
+
await worktreeTh.user(TEST_USER_ID).sendMessage({
|
|
453
|
+
content: 'Reply with exactly: after-worktree-thread',
|
|
454
|
+
})
|
|
455
|
+
|
|
439
456
|
await waitForBotMessageContaining({
|
|
440
457
|
discord,
|
|
441
458
|
threadId: worktreeThread.id,
|
|
@@ -450,6 +467,12 @@ describe('worktree lifecycle', () => {
|
|
|
450
467
|
expect(worktreeSession).toBeTruthy()
|
|
451
468
|
if (!worktreeSession) throw new Error('Worktree session was not persisted')
|
|
452
469
|
expect(worktreeSession).not.toBe(sessionBefore)
|
|
470
|
+
await expect(getSessionModel(worktreeSession)).resolves.toMatchInlineSnapshot(`
|
|
471
|
+
{
|
|
472
|
+
"modelId": "deterministic-provider/source-model-v2",
|
|
473
|
+
"variant": null,
|
|
474
|
+
}
|
|
475
|
+
`)
|
|
453
476
|
await expect(getThreadWorktreeOrWorkspace(thread.id)).resolves.toBeUndefined()
|
|
454
477
|
const worktreeInfo = await getThreadWorktreeOrWorkspace(worktreeThread.id)
|
|
455
478
|
expect(worktreeInfo?.status).toBe('ready')
|
|
@@ -478,9 +501,6 @@ describe('worktree lifecycle', () => {
|
|
|
478
501
|
|
|
479
502
|
// 4. Send messages to both threads. The source continues in the base
|
|
480
503
|
// checkout, and the new thread runs in the worktree checkout.
|
|
481
|
-
await worktreeTh.user(TEST_USER_ID).sendMessage({
|
|
482
|
-
content: 'Reply with exactly: after-worktree-thread',
|
|
483
|
-
})
|
|
484
504
|
await th.user(TEST_USER_ID).sendMessage({
|
|
485
505
|
content: 'Reply with exactly: after-source-thread',
|
|
486
506
|
})
|
|
@@ -489,7 +509,7 @@ describe('worktree lifecycle', () => {
|
|
|
489
509
|
discord,
|
|
490
510
|
threadId: worktreeThread.id,
|
|
491
511
|
userId: TEST_USER_ID,
|
|
492
|
-
text: '
|
|
512
|
+
text: 'ok',
|
|
493
513
|
afterUserMessageIncludes: 'after-worktree-thread',
|
|
494
514
|
timeout: 4_000,
|
|
495
515
|
})
|
|
@@ -497,7 +517,7 @@ describe('worktree lifecycle', () => {
|
|
|
497
517
|
discord,
|
|
498
518
|
threadId: thread.id,
|
|
499
519
|
userId: TEST_USER_ID,
|
|
500
|
-
text: '
|
|
520
|
+
text: 'ok',
|
|
501
521
|
afterUserMessageIncludes: 'after-source-thread',
|
|
502
522
|
timeout: 4_000,
|
|
503
523
|
})
|
|
@@ -507,7 +527,7 @@ describe('worktree lifecycle', () => {
|
|
|
507
527
|
discord,
|
|
508
528
|
threadId: worktreeThread.id,
|
|
509
529
|
userId: TEST_USER_ID,
|
|
510
|
-
text:
|
|
530
|
+
text: SOURCE_MODEL,
|
|
511
531
|
afterUserMessageIncludes: 'after-worktree-thread',
|
|
512
532
|
timeout: 4_000,
|
|
513
533
|
})
|
|
@@ -515,7 +535,7 @@ describe('worktree lifecycle', () => {
|
|
|
515
535
|
discord,
|
|
516
536
|
threadId: thread.id,
|
|
517
537
|
userId: TEST_USER_ID,
|
|
518
|
-
text:
|
|
538
|
+
text: SOURCE_MODEL,
|
|
519
539
|
afterUserMessageIncludes: 'after-source-thread',
|
|
520
540
|
timeout: 4_000,
|
|
521
541
|
})
|
|
@@ -525,20 +545,20 @@ describe('worktree lifecycle', () => {
|
|
|
525
545
|
"--- from: user (worktree-tester)
|
|
526
546
|
Reply with exactly: before-worktree
|
|
527
547
|
--- from: assistant (TestBot)
|
|
528
|
-
*using deterministic-provider/deterministic-v2*
|
|
529
|
-
|
|
548
|
+
> *using deterministic-provider/deterministic-v2*
|
|
549
|
+
> ok
|
|
530
550
|
Creating worktree in <#THREAD_ID>
|
|
531
|
-
*project ⋅ main ⋅
|
|
551
|
+
> *project ⋅ main ⋅ <1s ⋅ 0% ⋅ deterministic-v2* <@200000000000000901>
|
|
532
552
|
--- from: user (worktree-tester)
|
|
533
553
|
Reply with exactly: after-source-thread
|
|
534
554
|
--- from: assistant (TestBot)
|
|
535
|
-
|
|
536
|
-
*project ⋅ main ⋅
|
|
555
|
+
> ok
|
|
556
|
+
> *project ⋅ main ⋅ <1s ⋅ 0% ⋅ source-model-v2* <@200000000000000901>"
|
|
537
557
|
`)
|
|
538
558
|
expect(sourceText).toContain('Reply with exactly: before-worktree')
|
|
539
559
|
expect(sourceText).toContain('Reply with exactly: after-source-thread')
|
|
540
560
|
expect(sourceText).not.toContain('Worktree:')
|
|
541
|
-
expect((sourceText.match(
|
|
561
|
+
expect((sourceText.match(/ok/g) || []).length).toBe(2)
|
|
542
562
|
|
|
543
563
|
const worktreeText = await worktreeTh.text()
|
|
544
564
|
expect(normalizeWorktreeLifecycleText(worktreeText)).toMatchInlineSnapshot(`
|
|
@@ -550,14 +570,14 @@ describe('worktree lifecycle', () => {
|
|
|
550
570
|
--- from: user (worktree-tester)
|
|
551
571
|
Reply with exactly: after-worktree-thread
|
|
552
572
|
--- from: assistant (TestBot)
|
|
553
|
-
|
|
554
|
-
*WORKTREE_NAME ⋅ opencode/kimaki-WORKTREE_NAME ⋅
|
|
573
|
+
> ok
|
|
574
|
+
> *WORKTREE_NAME ⋅ opencode/kimaki-WORKTREE_NAME ⋅ <1s ⋅ 0% ⋅ source-model-v2* <@200000000000000901>"
|
|
555
575
|
`)
|
|
556
576
|
expect(worktreeText).toContain('Worktree:')
|
|
557
577
|
expect(worktreeText).toContain('Branch:')
|
|
558
578
|
expect(worktreeText).toContain('Reusing context from')
|
|
559
579
|
expect(worktreeText).toContain('Reply with exactly: after-worktree-thread')
|
|
560
|
-
expect(worktreeText).toContain('
|
|
580
|
+
expect(worktreeText).toContain('ok')
|
|
561
581
|
},
|
|
562
582
|
30_000,
|
|
563
583
|
)
|
|
@@ -615,7 +635,7 @@ describe('worktree lifecycle', () => {
|
|
|
615
635
|
discord,
|
|
616
636
|
threadId: worktreeThread.id,
|
|
617
637
|
userId: TEST_USER_ID,
|
|
618
|
-
text: '
|
|
638
|
+
text: 'ok',
|
|
619
639
|
afterUserMessageIncludes: 'channel-worktree-msg',
|
|
620
640
|
timeout: 10_000,
|
|
621
641
|
})
|
|
@@ -646,11 +666,11 @@ describe('worktree lifecycle', () => {
|
|
|
646
666
|
--- from: user (worktree-tester)
|
|
647
667
|
Reply with exactly: channel-worktree-msg
|
|
648
668
|
--- from: assistant (TestBot)
|
|
649
|
-
*using deterministic-provider/deterministic-v2*
|
|
650
|
-
|
|
669
|
+
> *using deterministic-provider/deterministic-v2*
|
|
670
|
+
> ok"
|
|
651
671
|
`)
|
|
652
672
|
expect(worktreeText).toContain('Branch:')
|
|
653
|
-
expect(worktreeText).toContain('
|
|
673
|
+
expect(worktreeText).toContain('ok')
|
|
654
674
|
expect(worktreeText).toContain('Reply with exactly: channel-worktree-msg')
|
|
655
675
|
},
|
|
656
676
|
30_000,
|
|
@@ -684,7 +704,7 @@ describe('worktree lifecycle', () => {
|
|
|
684
704
|
discord,
|
|
685
705
|
threadId: thread.id,
|
|
686
706
|
userId: TEST_USER_ID,
|
|
687
|
-
text: '
|
|
707
|
+
text: 'ok',
|
|
688
708
|
afterUserMessageIncludes: AUTO_WORKTREE_SUFFIX,
|
|
689
709
|
timeout: 25_000,
|
|
690
710
|
})
|
|
@@ -709,17 +729,17 @@ describe('worktree lifecycle', () => {
|
|
|
709
729
|
discord,
|
|
710
730
|
threadId: thread.id,
|
|
711
731
|
userId: TEST_USER_ID,
|
|
712
|
-
text: '
|
|
732
|
+
text: 'ok',
|
|
713
733
|
afterUserMessageIncludes: 'auto-followup',
|
|
714
734
|
timeout: 4_000,
|
|
715
735
|
})
|
|
716
736
|
|
|
717
737
|
const text = await th.text()
|
|
718
|
-
expect(text).toContain('
|
|
738
|
+
expect(text).toContain('ok')
|
|
719
739
|
expect(text).toContain(AUTO_WORKTREE_SUFFIX)
|
|
720
740
|
expect(text).toContain('Reply with exactly: auto-followup')
|
|
721
741
|
// Should have at least 2 ok replies
|
|
722
|
-
expect((text.match(
|
|
742
|
+
expect((text.match(/ok/g) || []).length).toBeGreaterThanOrEqual(2)
|
|
723
743
|
},
|
|
724
744
|
35_000,
|
|
725
745
|
)
|
|
@@ -744,7 +764,7 @@ describe('worktree lifecycle', () => {
|
|
|
744
764
|
discord,
|
|
745
765
|
threadId: thread.id,
|
|
746
766
|
userId: TEST_USER_ID,
|
|
747
|
-
text: '
|
|
767
|
+
text: 'ok',
|
|
748
768
|
afterUserMessageIncludes: 'non-git-first',
|
|
749
769
|
timeout: 4_000,
|
|
750
770
|
})
|
|
@@ -757,7 +777,7 @@ describe('worktree lifecycle', () => {
|
|
|
757
777
|
discord,
|
|
758
778
|
threadId: thread.id,
|
|
759
779
|
userId: TEST_USER_ID,
|
|
760
|
-
text: '
|
|
780
|
+
text: 'ok',
|
|
761
781
|
afterUserMessageIncludes: 'non-git-second',
|
|
762
782
|
timeout: 4_000,
|
|
763
783
|
})
|
|
@@ -777,18 +797,18 @@ describe('worktree lifecycle', () => {
|
|
|
777
797
|
"--- from: user (worktree-tester)
|
|
778
798
|
Reply with exactly: non-git-first
|
|
779
799
|
--- from: assistant (TestBot)
|
|
780
|
-
*using deterministic-provider/deterministic-v2*
|
|
781
|
-
|
|
800
|
+
> *using deterministic-provider/deterministic-v2*
|
|
801
|
+
> ok
|
|
782
802
|
--- from: user (worktree-tester)
|
|
783
803
|
Reply with exactly: non-git-second
|
|
784
804
|
--- from: assistant (TestBot)
|
|
785
|
-
*non-git-project ⋅ main ⋅
|
|
786
|
-
|
|
805
|
+
> *non-git-project ⋅ main ⋅ <1s ⋅ 0% ⋅ deterministic-v2* <@200000000000000901>
|
|
806
|
+
> ok"
|
|
787
807
|
`)
|
|
788
808
|
expect(text).toContain('Reply with exactly: non-git-first')
|
|
789
809
|
expect(text).toContain('Reply with exactly: non-git-second')
|
|
790
810
|
expect(text).not.toContain('Worktree creation failed')
|
|
791
|
-
const okCount = (text.match(
|
|
811
|
+
const okCount = (text.match(/ok/g) || []).length
|
|
792
812
|
expect(okCount).toBe(2)
|
|
793
813
|
},
|
|
794
814
|
20_000,
|
|
@@ -844,7 +864,7 @@ describe('worktree lifecycle', () => {
|
|
|
844
864
|
discord,
|
|
845
865
|
threadId: threadData.id,
|
|
846
866
|
userId: discord.botUserId,
|
|
847
|
-
text: '
|
|
867
|
+
text: 'ok',
|
|
848
868
|
timeout: 10_000,
|
|
849
869
|
})
|
|
850
870
|
|
|
@@ -860,8 +880,8 @@ describe('worktree lifecycle', () => {
|
|
|
860
880
|
🌳 **Worktree: AUTO_WORKTREE_BRANCH**
|
|
861
881
|
📁 \`/tmp/worktrees/WORKTREE_NAME\`
|
|
862
882
|
🌿 Branch: \`AUTO_WORKTREE_BRANCH\`
|
|
863
|
-
*using deterministic-provider/deterministic-v2*
|
|
864
|
-
|
|
883
|
+
> *using deterministic-provider/deterministic-v2*
|
|
884
|
+
> ok"
|
|
865
885
|
`)
|
|
866
886
|
|
|
867
887
|
// Verify DB has worktree info
|