@cuongtran001/kanna 1.63.2 → 1.63.3

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.
Files changed (199) hide show
  1. package/README.md +5 -9
  2. package/dist/client/assets/{BoardsPage-BJalB-bc.js → BoardsPage-AckCuswi.js} +1 -1
  3. package/dist/client/assets/BoardsRoutePage-DzKwKy3f.js +1 -0
  4. package/dist/client/assets/ChatPage-DsaH8CTz.js +93 -0
  5. package/dist/client/assets/{CronJobRow-CPbO_jwU.js → CronJobRow-Bx9gRqKW.js} +1 -1
  6. package/dist/client/assets/{CronJobsPage-Ck3SNgGi.js → CronJobsPage-v0-2X1oX.js} +1 -1
  7. package/dist/client/assets/{FilePreviewSheet-XEuUtDPn.js → FilePreviewSheet-B6SDxSD0.js} +2 -2
  8. package/dist/client/assets/{FlowSurface-BCbeMTJe.js → FlowSurface-CLC-ZFar.js} +1 -1
  9. package/dist/client/assets/{GenUIBlock-BJy_dfs-.js → GenUIBlock-CC79Ujro.js} +2 -2
  10. package/dist/client/assets/{KannaSocketProvider-D7Lzlt35.js → KannaSocketProvider-B2sHsWP5.js} +1 -1
  11. package/dist/client/assets/{LocalProjectsPage-9LJkQjhT.js → LocalProjectsPage-DYBkcEAm.js} +1 -1
  12. package/dist/client/assets/SettingsPage-CZqMkMRW.js +9 -0
  13. package/dist/client/assets/{StackBoardsRoutePage-t_EaFNG4.js → StackBoardsRoutePage-Clviz0hX.js} +1 -1
  14. package/dist/client/assets/{ToolCallMessage-RbF9XT2B.js → ToolCallMessage-BfNbWGmc.js} +1 -1
  15. package/dist/client/assets/{VChartSurface-CKuPelsn.js → VChartSurface-CUbxyBo3.js} +1 -1
  16. package/dist/client/assets/{WorkflowsPage-B6qUmQA3.js → WorkflowsPage-rengzb97.js} +1 -1
  17. package/dist/client/assets/{WorkflowsSection-DxO0S4An.js → WorkflowsSection-DuXdLsMO.js} +1 -1
  18. package/dist/client/assets/{chart-renderer-DjYZvNxh.js → chart-renderer-D7ukB2wg.js} +1 -1
  19. package/dist/client/assets/{chatSounds-FD2DQzF6.js → chatSounds-BLg2xPDZ.js} +1 -1
  20. package/dist/client/assets/chevron-left-RbFvmeyK.js +1 -0
  21. package/dist/client/assets/{clipboard.adapter-GN9nnYak.js → clipboard.adapter-CgdNwn-1.js} +1 -1
  22. package/dist/client/assets/{columnStyle-DjA7hA9k.js → columnStyle-CMCF0ds6.js} +1 -1
  23. package/dist/client/assets/{createScopedStore-BoLB9Rhc.js → createScopedStore-BrD5NHWx.js} +1 -1
  24. package/dist/client/assets/{dist-CimtOoGK.js → dist-DNSTHlSo.js} +1 -1
  25. package/dist/client/assets/editor-icons-DY4uKeEY.js +1 -0
  26. package/dist/client/assets/{ellipsis-Cd7sO0LO.js → ellipsis-OHg0x_x1.js} +1 -1
  27. package/dist/client/assets/{flow-kinds-CW2TU_83.js → flow-kinds-Ki2DP9nP.js} +1 -1
  28. package/dist/client/assets/{folder-C7sXCaHj.js → folder-CnWzWIG5.js} +1 -1
  29. package/dist/client/assets/{formatters-wSVyvDFZ.js → formatters-BGORekd-.js} +1 -1
  30. package/dist/client/assets/{genui-EzBIAYFE.js → genui-C9i6j0XZ.js} +1 -1
  31. package/dist/client/assets/{globe-xmRpmpma.js → globe-BjR1tyE4.js} +1 -1
  32. package/dist/client/assets/{host-DCaA9W-Z.js → host-D9tJwZXl.js} +1 -1
  33. package/dist/client/assets/{index-CDqjh7nt.js → index-CesRxZ0X.js} +7 -7
  34. package/dist/client/assets/index-CxDE9VOy.css +1 -0
  35. package/dist/client/assets/{info-D4MMvZFe.js → info-DNYekoE-.js} +1 -1
  36. package/dist/client/assets/{input-C4fvDiQ4.js → input-DgW9uRZN.js} +1 -1
  37. package/dist/client/assets/{lexicalToReact-sPUyOWk6.js → lexicalToReact-CZvp9Pgz.js} +3 -3
  38. package/dist/client/assets/{log-aTaDVF_e.js → log-DnEvbp3E.js} +1 -1
  39. package/dist/client/assets/{monitor-_CRKcV1h.js → monitor-qbWfUdBG.js} +1 -1
  40. package/dist/client/assets/{pencil-fNBeUUCf.js → pencil-C965rrpd.js} +1 -1
  41. package/dist/client/assets/{pendingActionsStore-COTh4Ztq.js → pendingActionsStore-CxhI19V9.js} +1 -1
  42. package/dist/client/assets/{play-BAmkJfn6.js → play-uofLR7yT.js} +1 -1
  43. package/dist/client/assets/{plus-c75CkNEO.js → plus-D4CI6rj1.js} +1 -1
  44. package/dist/client/assets/{popover-CHM4skzh.js → popover-Bc646hKn.js} +1 -1
  45. package/dist/client/assets/{pushClient-BJH_ITRB.js → pushClient-CxnHu9h4.js} +1 -1
  46. package/dist/client/assets/runDetached-DfQXHAaY.js +1 -0
  47. package/dist/client/assets/{segmented-control-DNOwRupT.js → segmented-control-CKGX29Kl.js} +1 -1
  48. package/dist/client/assets/{select-dLHiAls6.js → select-BjeajpVt.js} +1 -1
  49. package/dist/client/assets/{settings-header-button-CGKCzFyk.js → settings-header-button-BYvHR6Xl.js} +1 -1
  50. package/dist/client/assets/{sidebarPendingActions-Dyp80Lv_.js → sidebarPendingActions-xgMTnfRY.js} +1 -1
  51. package/dist/client/assets/{square-pen-B1IxmScM.js → square-pen-DmppQdTd.js} +1 -1
  52. package/dist/client/assets/{state-mark-BhTZfcYe.js → state-mark-C3kEL1hX.js} +1 -1
  53. package/dist/client/assets/{status-pill-CwhJhaMy.js → status-pill-Bo1Nb6HX.js} +1 -1
  54. package/dist/client/assets/{terminal-Bnj7qFGw.js → terminal-DfCF-J4p.js} +1 -1
  55. package/dist/client/assets/{timer.adapter-DHt2zwsL.js → timer.adapter-C2RhP4d6.js} +1 -1
  56. package/dist/client/assets/{tools-3gJcj3hK.js → tools-t5T_3UBg.js} +1 -1
  57. package/dist/client/assets/{triangle-alert-CWrc0CIO.js → triangle-alert-CYQhobyY.js} +1 -1
  58. package/dist/client/assets/useAppGlobalState-DUa3pkCF.js +1 -0
  59. package/dist/client/assets/useKannaState-FcieR5qb.js +5 -0
  60. package/dist/client/assets/useTheme-D9sKDPEm.js +1 -0
  61. package/dist/client/index.html +35 -35
  62. package/package.json +2 -2
  63. package/src/server/agent-coordinator-types.ts +0 -6
  64. package/src/server/agent-coordinator.ts +6 -45
  65. package/src/server/agent.compaction.test.ts +1 -13
  66. package/src/server/agent.oauth-account-info.test.ts +0 -3
  67. package/src/server/agent.oauth-release.test.ts +0 -2
  68. package/src/server/agent.oauth-rotation.test.ts +0 -9
  69. package/src/server/agent.oauth-token-share-cap.test.ts +0 -1
  70. package/src/server/agent.openrouter-model.test.ts +0 -2
  71. package/src/server/agent.openrouter-watchdog.test.ts +0 -3
  72. package/src/server/agent.sdk-workflow-register.test.ts +2 -64
  73. package/src/server/agent.test.ts +1 -319
  74. package/src/server/app-settings.test.ts +14 -17
  75. package/src/server/app-settings.ts +22 -37
  76. package/src/server/auto-continue/e2e.test.ts +0 -1
  77. package/src/server/background-task-output-registry.test.ts +1 -1
  78. package/src/server/background-task-output-registry.ts +1 -1
  79. package/src/server/claude-cancel-handler.test.ts +0 -58
  80. package/src/server/claude-cancel-handler.ts +1 -17
  81. package/src/server/claude-harness-stream.test.ts +134 -0
  82. package/src/server/{claude-pty/jsonl-path.test.ts → claude-projects-path.adapter.test.ts} +1 -19
  83. package/src/server/{claude-pty/jsonl-path.adapter.ts → claude-projects-path.adapter.ts} +0 -11
  84. package/src/server/claude-send-command.test.ts +0 -1
  85. package/src/server/claude-session-config-helpers.test.ts +1 -90
  86. package/src/server/claude-session-config-helpers.ts +1 -38
  87. package/src/server/claude-session-error-handler.test.ts +0 -1
  88. package/src/server/claude-session-lifecycle.test.ts +2 -36
  89. package/src/server/claude-session-lifecycle.ts +2 -8
  90. package/src/server/claude-session-runner.test.ts +8 -36
  91. package/src/server/claude-session-runner.ts +1 -26
  92. package/src/server/claude-session-spawner.test.ts +5 -64
  93. package/src/server/claude-session-spawner.ts +49 -115
  94. package/src/server/claude-session-start.test.ts +1 -14
  95. package/src/server/claude-session-start.ts +0 -8
  96. package/src/server/claude-session-state-queries.test.ts +1 -2
  97. package/src/server/claude-session-state.test.ts +0 -1
  98. package/src/server/claude-session-state.ts +0 -4
  99. package/src/server/claude-subagent-wiring.test.ts +2 -68
  100. package/src/server/claude-subagent-wiring.ts +3 -50
  101. package/src/server/claude-turn-starter-types.ts +0 -3
  102. package/src/server/claude-turn-starter.test.ts +0 -28
  103. package/src/server/claude-turn-starter.ts +0 -5
  104. package/src/server/event-store.test.ts +0 -2
  105. package/src/server/events.ts +1 -2
  106. package/src/server/harness-types.ts +1 -2
  107. package/src/server/import-subagent-drill.e2e.test.ts +1 -1
  108. package/src/server/imported-subagents-dir.test.ts +1 -1
  109. package/src/server/imported-subagents-dir.ts +1 -1
  110. package/src/server/kanna-mcp.test.ts +0 -75
  111. package/src/server/kanna-mcp.ts +1 -47
  112. package/src/server/server.test.ts +5 -7
  113. package/src/server/server.ts +2 -18
  114. package/src/server/subagent-orchestrator.test.ts +0 -1
  115. package/src/server/subagent-provider-run.test.ts +48 -10
  116. package/src/server/subagent-provider-run.ts +12 -3
  117. package/src/server/tool-callback.test.ts +1 -1
  118. package/src/server/ws-router-agent-ctrl.test.ts +0 -45
  119. package/src/server/ws-router-agent-ctrl.ts +1 -31
  120. package/src/server/ws-router-broadcast.ts +0 -27
  121. package/src/server/ws-router-defaults.test.ts +2 -3
  122. package/src/server/ws-router-defaults.ts +2 -3
  123. package/src/server/ws-router-envelope.ts +0 -15
  124. package/src/server/ws-router-observability.test.ts +1 -1
  125. package/src/server/ws-router-settings.test.ts +2 -2
  126. package/src/server/ws-router.test.ts +2 -2
  127. package/src/server/ws-router.ts +0 -8
  128. package/src/shared/app-settings-types.ts +9 -20
  129. package/src/shared/claude-api-error-classification.ts +1 -1
  130. package/src/shared/protocol.ts +1 -11
  131. package/dist/client/assets/BoardsRoutePage-BTTjJX-Y.js +0 -1
  132. package/dist/client/assets/ChatPage-DH8wtQyD.js +0 -93
  133. package/dist/client/assets/SettingsPage-CKrZ6dGQ.js +0 -9
  134. package/dist/client/assets/chevron-left-CJ0qv9kF.js +0 -1
  135. package/dist/client/assets/editor-icons-CONDQZof.js +0 -1
  136. package/dist/client/assets/index-C-UYaDk6.css +0 -1
  137. package/dist/client/assets/runDetached-DqQ3k2ji.js +0 -1
  138. package/dist/client/assets/useAppGlobalState-DKOGrO5l.js +0 -1
  139. package/dist/client/assets/useKannaState-D7R_-dM6.js +0 -5
  140. package/dist/client/assets/useTheme-B57LIKyx.js +0 -1
  141. package/src/server/agent.pty-rotation.test.ts +0 -322
  142. package/src/server/claude-pty/auth.test.ts +0 -38
  143. package/src/server/claude-pty/auth.ts +0 -17
  144. package/src/server/claude-pty/claude-session-registry.adapter.ts +0 -68
  145. package/src/server/claude-pty/claude-session-registry.test.ts +0 -149
  146. package/src/server/claude-pty/driver.test.ts +0 -1153
  147. package/src/server/claude-pty/driver.ts +0 -829
  148. package/src/server/claude-pty/env.test.ts +0 -79
  149. package/src/server/claude-pty/env.ts +0 -20
  150. package/src/server/claude-pty/jsonl-to-event.test.ts +0 -882
  151. package/src/server/claude-pty/jsonl-to-event.ts +0 -357
  152. package/src/server/claude-pty/parity-matrix.test.ts +0 -437
  153. package/src/server/claude-pty/pid-registry.adapter.ts +0 -164
  154. package/src/server/claude-pty/pid-registry.test.ts +0 -178
  155. package/src/server/claude-pty/preflight/binary-fingerprint.adapter.ts +0 -20
  156. package/src/server/claude-pty/preflight/binary-fingerprint.test.ts +0 -32
  157. package/src/server/claude-pty/pty-instance-registry.test.ts +0 -208
  158. package/src/server/claude-pty/pty-instance-registry.ts +0 -172
  159. package/src/server/claude-pty/pty-memory-sampler.adapter.test.ts +0 -103
  160. package/src/server/claude-pty/pty-memory-sampler.adapter.ts +0 -86
  161. package/src/server/claude-pty/pty-process.adapter.ts +0 -60
  162. package/src/server/claude-pty/pty-process.test.ts +0 -49
  163. package/src/server/claude-pty/resolve-binary.adapter.ts +0 -106
  164. package/src/server/claude-pty/resolve-binary.test.ts +0 -118
  165. package/src/server/claude-pty/runtime-dir.adapter.ts +0 -19
  166. package/src/server/claude-pty/sandbox/detect.adapter.ts +0 -17
  167. package/src/server/claude-pty/sandbox/detect.test.ts +0 -17
  168. package/src/server/claude-pty/sandbox/platform.test.ts +0 -35
  169. package/src/server/claude-pty/sandbox/platform.ts +0 -27
  170. package/src/server/claude-pty/sandbox/preflight-io.adapter.ts +0 -14
  171. package/src/server/claude-pty/sandbox/preflight.test.ts +0 -69
  172. package/src/server/claude-pty/sandbox/preflight.ts +0 -44
  173. package/src/server/claude-pty/sandbox/profile-linux.adapter.ts +0 -63
  174. package/src/server/claude-pty/sandbox/profile-linux.test.ts +0 -90
  175. package/src/server/claude-pty/sandbox/profile-macos.adapter.ts +0 -72
  176. package/src/server/claude-pty/sandbox/profile-macos.test.ts +0 -68
  177. package/src/server/claude-pty/sandbox/wrap.adapter.ts +0 -58
  178. package/src/server/claude-pty/sandbox/wrap.test.ts +0 -82
  179. package/src/server/claude-pty/settings-writer.adapter.ts +0 -23
  180. package/src/server/claude-pty/settings-writer.test.ts +0 -22
  181. package/src/server/claude-pty/smoke-test-io.adapter.ts +0 -28
  182. package/src/server/claude-pty/smoke-test.test.ts +0 -199
  183. package/src/server/claude-pty/smoke-test.ts +0 -182
  184. package/src/server/claude-pty/tui-control.test.ts +0 -300
  185. package/src/server/claude-pty/tui-control.ts +0 -174
  186. package/src/server/claude-pty/tui-source.adapter.test.ts +0 -374
  187. package/src/server/claude-pty/tui-source.adapter.ts +0 -294
  188. package/src/server/http-server.adapter.test.ts +0 -18
  189. package/src/server/http-server.adapter.ts +0 -39
  190. package/src/server/kanna-mcp-http.test.ts +0 -274
  191. package/src/server/kanna-mcp-http.ts +0 -194
  192. package/src/server/kanna-mcp-tools/ask-user-question.test.ts +0 -108
  193. package/src/server/kanna-mcp-tools/ask-user-question.ts +0 -55
  194. package/src/server/kanna-mcp-tools/exit-plan-mode.test.ts +0 -61
  195. package/src/server/kanna-mcp-tools/exit-plan-mode.ts +0 -49
  196. package/src/server/mcp-zod-compat.adapter.ts +0 -20
  197. package/src/shared/pty-instance.ts +0 -43
  198. /package/src/server/{claude-pty/output-ring.test.ts → output-ring.test.ts} +0 -0
  199. /package/src/server/{claude-pty/output-ring.ts → output-ring.ts} +0 -0
@@ -1,8 +1,6 @@
1
1
  import { log } from "../shared/log"
2
2
  import { PROTOCOL_VERSION } from "../shared/types"
3
3
  import type { ServerWebSocket } from "bun"
4
- import type { PtyInstanceDelta } from "../shared/pty-instance"
5
- import type { PtyInstanceRegistry } from "./claude-pty/pty-instance-registry"
6
4
  import type { WorkflowRegistry } from "./workflow-registry"
7
5
  import type { BackgroundTaskOutputRegistry } from "./background-task-output-registry"
8
6
  import type { BoardChange, BoardRegistry } from "./board-registry"
@@ -38,7 +36,6 @@ export interface BroadcastManagerDeps {
38
36
  resolvedAppSettings: ResolvedAppSettings
39
37
  updateManager: UpdateManager | null
40
38
  packageUpdateManager?: PackageUpdateManager
41
- ptyInstances?: PtyInstanceRegistry
42
39
  workflowRegistry?: WorkflowRegistry
43
40
  boardRegistry?: BoardRegistry
44
41
  backgroundTaskOutputRegistry?: BackgroundTaskOutputRegistry
@@ -57,7 +54,6 @@ export class BroadcastManager {
57
54
  private readonly disposeKeybindingEvents: () => void
58
55
  private readonly disposeAppSettingsEvents: () => void
59
56
  private readonly disposeUpdateEvents: () => void
60
- private readonly disposePtyInstances: () => void
61
57
  private readonly disposeWorkflows: () => void
62
58
  private readonly disposeBoards: () => void
63
59
  private readonly disposeBackgroundTaskOutput: () => void
@@ -71,7 +67,6 @@ export class BroadcastManager {
71
67
  resolvedAppSettings,
72
68
  updateManager,
73
69
  packageUpdateManager,
74
- ptyInstances,
75
70
  workflowRegistry,
76
71
  boardRegistry,
77
72
  backgroundTaskOutputRegistry,
@@ -128,16 +123,6 @@ export class BroadcastManager {
128
123
  }
129
124
  }) ?? (() => {})
130
125
 
131
- this.disposePtyInstances = ptyInstances?.subscribe((delta: PtyInstanceDelta) => {
132
- if (delta.type === "added") {
133
- this.pushPtyInstancesEvent({ type: "pty-instances.added", instance: delta.instance })
134
- } else if (delta.type === "updated") {
135
- this.pushPtyInstancesEvent({ type: "pty-instances.updated", instance: delta.instance })
136
- } else {
137
- this.pushPtyInstancesEvent({ type: "pty-instances.removed", chatId: delta.chatId })
138
- }
139
- }) ?? (() => {})
140
-
141
126
  this.disposeWorkflows = workflowRegistry?.subscribe((chatId) => {
142
127
  for (const ws of this.sockets) {
143
128
  const snapshotSignatures = ensureSnapshotSignatures(ws)
@@ -532,17 +517,6 @@ export class BroadcastManager {
532
517
  }
533
518
  }
534
519
 
535
- private pushPtyInstancesEvent(
536
- event: Extract<ServerEnvelope, { type: "event" }>["event"]
537
- ): void {
538
- for (const ws of this.sockets) {
539
- for (const [id, topic] of ws.data.subscriptions.entries()) {
540
- if (topic.type !== "pty-instances") continue
541
- send(ws, { v: PROTOCOL_VERSION, type: "event", id, event })
542
- }
543
- }
544
- }
545
-
546
520
  pushFollowedSessions(): void {
547
521
  for (const ws of this.sockets) {
548
522
  const snapshotSignatures = ensureSnapshotSignatures(ws)
@@ -584,7 +558,6 @@ export class BroadcastManager {
584
558
  this.disposeKeybindingEvents()
585
559
  this.disposeAppSettingsEvents()
586
560
  this.disposeUpdateEvents()
587
- this.disposePtyInstances()
588
561
  this.disposeWorkflows()
589
562
  this.disposeBoards()
590
563
  this.disposeBackgroundTaskOutput()
@@ -94,13 +94,12 @@ describe("mergeAppSettingsPatch", () => {
94
94
  expect(result.providerDefaults.codex.modelOptions.reasoningEffort).toBe("high")
95
95
  })
96
96
 
97
- test("claudeDriver lifecycle is deep-merged and preference is preserved", () => {
97
+ test("claudeDriver lifecycle is deep-merged", () => {
98
98
  const snapshot = makeSnapshot()
99
99
  const result = mergeAppSettingsPatch(snapshot, {
100
100
  claudeDriver: { lifecycle: { idleTimeoutMs: 9_000 } },
101
101
  })
102
- expect(result.claudeDriver.preference).toBe(snapshot.claudeDriver.preference)
103
- expect(result.claudeDriver.lifecycle).toMatchObject({ idleTimeoutMs: 9_000 })
102
+ expect(result.claudeDriver.lifecycle).toEqual({ ...snapshot.claudeDriver.lifecycle, idleTimeoutMs: 9_000 })
104
103
  })
105
104
 
106
105
  test("subagentRuntime.defaultLoopSubagentId null clears the value", () => {
@@ -4,7 +4,7 @@ import {
4
4
  AUTH_DEFAULTS,
5
5
  CLAUDE_AUTH_DEFAULTS,
6
6
  CLAUDE_DRIVER_DEFAULTS,
7
- CLAUDE_PTY_LIFECYCLE_DEFAULTS,
7
+ CLAUDE_LIFECYCLE_DEFAULTS,
8
8
  CLOUDFLARE_TUNNEL_DEFAULTS,
9
9
  DEFAULT_OPENROUTER_SDK_MODEL,
10
10
  PACKAGE_UPDATE_SETTINGS_DEFAULTS,
@@ -166,7 +166,6 @@ export function mergeAppSettingsPatch(
166
166
  },
167
167
  installedPlugins: snapshot.installedPlugins,
168
168
  claudeDriver: {
169
- preference: patch.claudeDriver?.preference ?? snapshot.claudeDriver.preference,
170
169
  lifecycle: {
171
170
  ...snapshot.claudeDriver.lifecycle,
172
171
  ...patch.claudeDriver?.lifecycle,
@@ -241,7 +240,7 @@ export function buildInitialAppSettingsSnapshot(): AppSettingsSnapshot {
241
240
  customMcpServers: [],
242
241
  customModels: [],
243
242
  textSnippets: [],
244
- claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_PTY_LIFECYCLE_DEFAULTS } },
243
+ claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_LIFECYCLE_DEFAULTS } },
245
244
  globalPromptAppend: "",
246
245
  shareDefaultTtlHours: 24,
247
246
  subagentRuntime: { runTimeoutMs: 600_000, defaultLoopSubagentId: null },
@@ -13,7 +13,6 @@ import type { EventStore } from "./event-store"
13
13
  import type { AgentCoordinator } from "./agent"
14
14
  import type { TerminalManager } from "./terminal-manager"
15
15
  import type { KeybindingsManager } from "./keybindings"
16
- import type { PtyInstanceRegistry } from "./claude-pty/pty-instance-registry"
17
16
  import type { WorkflowRegistry } from "./workflow-registry"
18
17
  import type { BackgroundTaskOutputRegistry } from "./background-task-output-registry"
19
18
  import type { BoardRegistry } from "./board-registry"
@@ -65,7 +64,6 @@ export interface EnvelopeDeps {
65
64
  "checkGitHubRepoAvailability" | "publishToGitHub" | "listBranches" | "previewMergeBranch" |
66
65
  "mergeBranch" | "syncBranch" | "checkoutBranch" | "createBranch" | "generateCommitMessage" |
67
66
  "commitFiles" | "discardFile" | "ignoreFile" | "readPatch">
68
- ptyInstances?: PtyInstanceRegistry
69
67
  workflowRegistry?: WorkflowRegistry
70
68
  backgroundTaskOutputRegistry?: BackgroundTaskOutputRegistry
71
69
  boardRegistry?: BoardRegistry
@@ -158,7 +156,6 @@ export function createEnvelopeBuilder(deps: EnvelopeDeps): EnvelopeBuilder {
158
156
  resolvedAppSettings,
159
157
  keybindings,
160
158
  resolvedDiffStore,
161
- ptyInstances,
162
159
  workflowRegistry,
163
160
  backgroundTaskOutputRegistry,
164
161
  boardRegistry,
@@ -327,18 +324,6 @@ export function createEnvelopeBuilder(deps: EnvelopeDeps): EnvelopeBuilder {
327
324
  }
328
325
  }
329
326
 
330
- if (topic.type === "pty-instances") {
331
- return {
332
- v: PROTOCOL_VERSION,
333
- type: "snapshot",
334
- id,
335
- snapshot: {
336
- type: "pty-instances",
337
- data: { instances: ptyInstances?.snapshot() ?? [] },
338
- },
339
- }
340
- }
341
-
342
327
  if (topic.type === "workflows") {
343
328
  return {
344
329
  v: PROTOCOL_VERSION,
@@ -3,7 +3,7 @@ import type { ObservabilityCommandDeps } from "./ws-router-observability"
3
3
  import { handleObservabilityCommand } from "./ws-router-observability"
4
4
  import type { ClientCommand } from "../shared/protocol"
5
5
  import type { ChatRecord, ProjectRecord } from "./events"
6
- import { encodeCwd } from "./claude-pty/jsonl-path.adapter"
6
+ import { encodeCwd } from "./claude-projects-path.adapter"
7
7
 
8
8
  const REAL_CWD = process.cwd()
9
9
 
@@ -7,7 +7,7 @@ import {
7
7
  AUTH_DEFAULTS,
8
8
  CLAUDE_AUTH_DEFAULTS,
9
9
  CLAUDE_DRIVER_DEFAULTS,
10
- CLAUDE_PTY_LIFECYCLE_DEFAULTS,
10
+ CLAUDE_LIFECYCLE_DEFAULTS,
11
11
  CLOUDFLARE_TUNNEL_DEFAULTS,
12
12
  DEFAULT_OPENROUTER_SDK_MODEL,
13
13
  PACKAGE_UPDATE_SETTINGS_DEFAULTS,
@@ -53,7 +53,7 @@ function makeSnapshot(): AppSettingsSnapshot {
53
53
  customMcpServers: [],
54
54
  customModels: [],
55
55
  textSnippets: [],
56
- claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_PTY_LIFECYCLE_DEFAULTS } },
56
+ claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_LIFECYCLE_DEFAULTS } },
57
57
  globalPromptAppend: "",
58
58
  shareDefaultTtlHours: 24,
59
59
  subagentRuntime: { runTimeoutMs: 600_000, defaultLoopSubagentId: null },
@@ -4,7 +4,7 @@ import { randomUUID } from "node:crypto"
4
4
  import { mkdtemp, rm, writeFile } from "node:fs/promises"
5
5
  import { tmpdir } from "node:os"
6
6
  import path from "node:path"
7
- import { AUTH_DEFAULTS, CLAUDE_AUTH_DEFAULTS, CLAUDE_DRIVER_DEFAULTS, CLAUDE_PTY_LIFECYCLE_DEFAULTS, CLOUDFLARE_TUNNEL_DEFAULTS, DEFAULT_OPENROUTER_SDK_MODEL, EMPTY_CHAT_ACTIVITY, PACKAGE_UPDATE_SETTINGS_DEFAULTS, PLUGIN_SETTINGS_DEFAULTS, PROTOCOL_VERSION, PUSH_DEFAULTS,
7
+ import { AUTH_DEFAULTS, CLAUDE_AUTH_DEFAULTS, CLAUDE_DRIVER_DEFAULTS, CLAUDE_LIFECYCLE_DEFAULTS, CLOUDFLARE_TUNNEL_DEFAULTS, DEFAULT_OPENROUTER_SDK_MODEL, EMPTY_CHAT_ACTIVITY, PACKAGE_UPDATE_SETTINGS_DEFAULTS, PLUGIN_SETTINGS_DEFAULTS, PROTOCOL_VERSION, PUSH_DEFAULTS,
8
8
  TELEMETRY_DEFAULTS, TYPOGRAPHY_DEFAULTS, UPLOAD_DEFAULTS } from "../shared/types"
9
9
  import { BUILTIN_SLASH_COMMANDS } from "../shared/builtin-commands"
10
10
  import type { AppSettingsSnapshot, ChatActivity, KeybindingsSnapshot, LlmProviderSnapshot, McpServerConfig, McpServerTestResult, OpenRouterModel, UpdateSnapshot } from "../shared/types"
@@ -137,7 +137,7 @@ const DEFAULT_APP_SETTINGS_SNAPSHOT: AppSettingsSnapshot = {
137
137
  customMcpServers: [],
138
138
  customModels: [],
139
139
  textSnippets: [],
140
- claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_PTY_LIFECYCLE_DEFAULTS } },
140
+ claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_LIFECYCLE_DEFAULTS } },
141
141
  globalPromptAppend: "",
142
142
  shareDefaultTtlHours: 24,
143
143
  subagentRuntime: { runTimeoutMs: 600_000, defaultLoopSubagentId: null },
@@ -28,7 +28,6 @@ import { listWorktrees } from "./worktree-store.adapter"
28
28
  import type { TunnelGateway } from "./cloudflare-tunnel/gateway"
29
29
  import type { PushManager } from "./push/push-manager"
30
30
  import type { SessionShareService } from "./session-share"
31
- import type { PtyInstanceRegistry } from "./claude-pty/pty-instance-registry"
32
31
  import type { WorkflowRegistry } from "./workflow-registry"
33
32
  import type { BackgroundTaskOutputRegistry } from "./background-task-output-registry"
34
33
  import { handleBoardCommand } from "./ws-router-boards"
@@ -107,8 +106,6 @@ interface CreateWsRouterArgs {
107
106
  machineDisplayName: string
108
107
  updateManager: UpdateManager | null
109
108
  pushManager: PushManager
110
- ptyInstances?: PtyInstanceRegistry
111
- killPtyInstance?: (chatId: string) => Promise<{ ok: boolean; error?: string }>
112
109
  workflowRegistry?: WorkflowRegistry
113
110
  boardRegistry?: BoardRegistry
114
111
  boardSync?: BoardSync
@@ -141,8 +138,6 @@ export function createWsRouter({
141
138
  machineDisplayName,
142
139
  updateManager,
143
140
  pushManager,
144
- ptyInstances,
145
- killPtyInstance,
146
141
  workflowRegistry,
147
142
  boardRegistry,
148
143
  boardSync,
@@ -169,7 +164,6 @@ export function createWsRouter({
169
164
  resolvedAppSettings,
170
165
  keybindings,
171
166
  resolvedDiffStore,
172
- ptyInstances,
173
167
  workflowRegistry,
174
168
  boardRegistry,
175
169
  backgroundTaskOutputRegistry,
@@ -190,7 +184,6 @@ export function createWsRouter({
190
184
  resolvedAppSettings,
191
185
  updateManager,
192
186
  packageUpdateManager,
193
- ptyInstances,
194
187
  workflowRegistry,
195
188
  boardRegistry,
196
189
  backgroundTaskOutputRegistry,
@@ -229,7 +222,6 @@ export function createWsRouter({
229
222
  return {
230
223
  agent,
231
224
  tunnelGateway,
232
- killPtyInstance,
233
225
  send: (envelope) => send(ws, envelope),
234
226
  broadcastChatAndSidebar: (chatId) => broadcast.broadcastChatAndSidebar(chatId),
235
227
  }
@@ -136,37 +136,27 @@ export function normalizeAnthropicBaseUrl(raw: string): string | null {
136
136
  export const GLOBAL_PROMPT_APPEND_MAX_CHARS = 8_000
137
137
 
138
138
 
139
- export type ClaudeDriverPreference = "sdk" | "pty"
140
-
141
- export const CLAUDE_DRIVER_VALUES: readonly ClaudeDriverPreference[] = ["sdk", "pty"]
142
-
143
- export function isClaudeDriverPreference(value: string | null | undefined): value is ClaudeDriverPreference {
144
- return value === "sdk" || value === "pty"
145
- }
146
-
147
- export interface ClaudePtyLifecycleSettings {
139
+ export interface ClaudeLifecycleSettings {
148
140
  idleTimeoutMs: number
149
141
  maxConcurrent: number
150
142
  }
151
143
 
152
- export const CLAUDE_PTY_LIFECYCLE_DEFAULTS: ClaudePtyLifecycleSettings = {
144
+ export const CLAUDE_LIFECYCLE_DEFAULTS: ClaudeLifecycleSettings = {
153
145
  idleTimeoutMs: 600_000,
154
146
  maxConcurrent: 4,
155
147
  }
156
148
 
157
- export const CLAUDE_PTY_IDLE_TIMEOUT_MS_MIN = 60_000
158
- export const CLAUDE_PTY_IDLE_TIMEOUT_MS_MAX = 3_600_000
159
- export const CLAUDE_PTY_MAX_CONCURRENT_MIN = 1
160
- export const CLAUDE_PTY_MAX_CONCURRENT_MAX = 16
149
+ export const CLAUDE_IDLE_TIMEOUT_MS_MIN = 60_000
150
+ export const CLAUDE_IDLE_TIMEOUT_MS_MAX = 3_600_000
151
+ export const CLAUDE_MAX_CONCURRENT_MIN = 1
152
+ export const CLAUDE_MAX_CONCURRENT_MAX = 16
161
153
 
162
154
  export interface ClaudeDriverSettings {
163
- preference: ClaudeDriverPreference
164
- lifecycle: ClaudePtyLifecycleSettings
155
+ lifecycle: ClaudeLifecycleSettings
165
156
  }
166
157
 
167
158
  export const CLAUDE_DRIVER_DEFAULTS: ClaudeDriverSettings = {
168
- preference: "sdk",
169
- lifecycle: { ...CLAUDE_PTY_LIFECYCLE_DEFAULTS },
159
+ lifecycle: { ...CLAUDE_LIFECYCLE_DEFAULTS },
170
160
  }
171
161
 
172
162
  export type ClaudeSessionLifecycleStatus = "cold" | "warming" | "active" | "idle" | "cooling"
@@ -386,8 +376,7 @@ export interface AppSettingsPatch {
386
376
  delete?: { id: string }
387
377
  }
388
378
  claudeDriver?: {
389
- preference?: ClaudeDriverPreference
390
- lifecycle?: Partial<ClaudePtyLifecycleSettings>
379
+ lifecycle?: Partial<ClaudeLifecycleSettings>
391
380
  }
392
381
  globalPromptAppend?: string
393
382
  shareDefaultTtlHours?: number
@@ -8,7 +8,7 @@ const DESCRIPTION_BY_REASON: ReadonlyMap<string, ClaudeApiErrorDescription> = ne
8
8
  ["claude_code_version_too_old", {
9
9
  headline: "Model not supported by this Claude Code version",
10
10
  explanation: "The selected model needs a newer Claude Code than the one Kanna runs, so every turn on this model fails.",
11
- remedy: "Pick another model, or update Kanna, which bundles Claude Code. If Kanna runs your own claude binary (the PTY driver, or CLAUDE_EXECUTABLE is set), run \"claude update\" instead.",
11
+ remedy: "Pick another model, or update Kanna, which bundles Claude Code. If Kanna runs your own claude binary (CLAUDE_EXECUTABLE is set), run \"claude update\" instead.",
12
12
  }],
13
13
  ])
14
14
 
@@ -28,7 +28,6 @@ import type {
28
28
  } from "./types"
29
29
  import type { ChatOpsEvent } from "./chat-ops"
30
30
  import type { ChatPermissionPolicyOverride, ToolRequestDecision } from "./permission-policy"
31
- import type { PtyInstanceDelta, PtyInstancesSnapshot } from "./pty-instance"
32
31
  import type {
33
32
  BoardOwnerKind,
34
33
  BoardSummary,
@@ -58,7 +57,6 @@ export type SubscriptionTopic =
58
57
  | { type: "project-git"; projectId: string; chatId?: string }
59
58
  | { type: "project-commands"; projectId: string }
60
59
  | { type: "terminal"; terminalId: string }
61
- | { type: "pty-instances" }
62
60
  | { type: "workflows"; chatId: string }
63
61
  | { type: "boards"; ownerKind: BoardOwnerKind; ownerId: string }
64
62
  | { type: "board"; boardId: string; pageSize?: number }
@@ -91,11 +89,6 @@ export type SubagentCommandResult =
91
89
 
92
90
  export type SubagentDeleteResult = { ok: true }
93
91
 
94
- export type PtyInstancesEvent =
95
- | { type: "pty-instances.added"; instance: Extract<PtyInstanceDelta, { type: "added" }>["instance"] }
96
- | { type: "pty-instances.updated"; instance: Extract<PtyInstanceDelta, { type: "updated" }>["instance"] }
97
- | { type: "pty-instances.removed"; chatId: string }
98
-
99
92
  export interface WorkflowsSnapshot {
100
93
  chatId: string
101
94
  runs: WorkflowRunSummary[]
@@ -140,7 +133,7 @@ export function readProjectDeleteResult(value: JsonValue): ProjectDeleteResult {
140
133
  return { deletedBoardIds: stringsOf(record.deletedBoardIds), failures: stringsOf(record.failures) }
141
134
  }
142
135
 
143
- export type WsEvent = TerminalEvent | PtyInstancesEvent | ChatOpsEvent
136
+ export type WsEvent = TerminalEvent | ChatOpsEvent
144
137
 
145
138
  export type ClientCommand =
146
139
  | { type: "project.open"; localPath: string }
@@ -412,8 +405,6 @@ export type ClientCommand =
412
405
  | { type: "terminal.input"; terminalId: string; data: string }
413
406
  | { type: "terminal.resize"; terminalId: string; cols: number; rows: number }
414
407
  | { type: "terminal.close"; terminalId: string }
415
- | { type: "pty.cancel"; chatId: string }
416
- | { type: "pty.kill"; chatId: string }
417
408
  | { type: "push.identifyDevice"; pushDeviceId: string | null }
418
409
  | { type: "push.subscribe"; subscription: PushSubscribeRequestPayload; label: string; userAgent: string }
419
410
  | { type: "push.unsubscribe"; pushDeviceId: string }
@@ -442,7 +433,6 @@ export type ServerSnapshot =
442
433
  | { type: "project-git"; data: ChatDiffSnapshot | null }
443
434
  | { type: "project-commands"; data: ProjectCommandsSnapshot }
444
435
  | { type: "terminal"; data: TerminalSnapshot | null }
445
- | { type: "pty-instances"; data: PtyInstancesSnapshot }
446
436
  | { type: "workflows"; data: WorkflowsSnapshot }
447
437
  | { type: "boards"; data: BoardsSnapshot }
448
438
  | { type: "board"; data: BoardSnapshot }
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-DiVRNtpo.js";import{c as n,l as r,u as i}from"./chunk-OB3PAWPO-mARpRU1A.js";import{t as a}from"./jsx-runtime-BdxMnOeJ.js";import{o}from"./formatters-wSVyvDFZ.js";import{t as s}from"./BoardsPage-BJalB-bc.js";var c=e(t(),1),l=e(a(),1);function u(){let e=r(),t=n(),{projectId:a=``}=i(),u=[...e.sidebarData.starredProjectGroups,...e.sidebarData.projectGroups].find(e=>e.groupKey===a),d=u?o(u.localPath):`Project`,f=(0,c.useCallback)(e=>{t(`/boards/${a}/${e}`)},[t,a]);return(0,l.jsx)(`div`,{className:`relative flex min-h-0 min-w-0 flex-1 flex-col`,children:(0,l.jsx)(s,{ownerKind:`project`,ownerId:a,ownerName:d,socket:e.socket,onOpenBoard:f})})}export{u as BoardsRoutePage};