@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.
- package/README.md +5 -9
- package/dist/client/assets/{BoardsPage-BJalB-bc.js → BoardsPage-AckCuswi.js} +1 -1
- package/dist/client/assets/BoardsRoutePage-DzKwKy3f.js +1 -0
- package/dist/client/assets/ChatPage-DsaH8CTz.js +93 -0
- package/dist/client/assets/{CronJobRow-CPbO_jwU.js → CronJobRow-Bx9gRqKW.js} +1 -1
- package/dist/client/assets/{CronJobsPage-Ck3SNgGi.js → CronJobsPage-v0-2X1oX.js} +1 -1
- package/dist/client/assets/{FilePreviewSheet-XEuUtDPn.js → FilePreviewSheet-B6SDxSD0.js} +2 -2
- package/dist/client/assets/{FlowSurface-BCbeMTJe.js → FlowSurface-CLC-ZFar.js} +1 -1
- package/dist/client/assets/{GenUIBlock-BJy_dfs-.js → GenUIBlock-CC79Ujro.js} +2 -2
- package/dist/client/assets/{KannaSocketProvider-D7Lzlt35.js → KannaSocketProvider-B2sHsWP5.js} +1 -1
- package/dist/client/assets/{LocalProjectsPage-9LJkQjhT.js → LocalProjectsPage-DYBkcEAm.js} +1 -1
- package/dist/client/assets/SettingsPage-CZqMkMRW.js +9 -0
- package/dist/client/assets/{StackBoardsRoutePage-t_EaFNG4.js → StackBoardsRoutePage-Clviz0hX.js} +1 -1
- package/dist/client/assets/{ToolCallMessage-RbF9XT2B.js → ToolCallMessage-BfNbWGmc.js} +1 -1
- package/dist/client/assets/{VChartSurface-CKuPelsn.js → VChartSurface-CUbxyBo3.js} +1 -1
- package/dist/client/assets/{WorkflowsPage-B6qUmQA3.js → WorkflowsPage-rengzb97.js} +1 -1
- package/dist/client/assets/{WorkflowsSection-DxO0S4An.js → WorkflowsSection-DuXdLsMO.js} +1 -1
- package/dist/client/assets/{chart-renderer-DjYZvNxh.js → chart-renderer-D7ukB2wg.js} +1 -1
- package/dist/client/assets/{chatSounds-FD2DQzF6.js → chatSounds-BLg2xPDZ.js} +1 -1
- package/dist/client/assets/chevron-left-RbFvmeyK.js +1 -0
- package/dist/client/assets/{clipboard.adapter-GN9nnYak.js → clipboard.adapter-CgdNwn-1.js} +1 -1
- package/dist/client/assets/{columnStyle-DjA7hA9k.js → columnStyle-CMCF0ds6.js} +1 -1
- package/dist/client/assets/{createScopedStore-BoLB9Rhc.js → createScopedStore-BrD5NHWx.js} +1 -1
- package/dist/client/assets/{dist-CimtOoGK.js → dist-DNSTHlSo.js} +1 -1
- package/dist/client/assets/editor-icons-DY4uKeEY.js +1 -0
- package/dist/client/assets/{ellipsis-Cd7sO0LO.js → ellipsis-OHg0x_x1.js} +1 -1
- package/dist/client/assets/{flow-kinds-CW2TU_83.js → flow-kinds-Ki2DP9nP.js} +1 -1
- package/dist/client/assets/{folder-C7sXCaHj.js → folder-CnWzWIG5.js} +1 -1
- package/dist/client/assets/{formatters-wSVyvDFZ.js → formatters-BGORekd-.js} +1 -1
- package/dist/client/assets/{genui-EzBIAYFE.js → genui-C9i6j0XZ.js} +1 -1
- package/dist/client/assets/{globe-xmRpmpma.js → globe-BjR1tyE4.js} +1 -1
- package/dist/client/assets/{host-DCaA9W-Z.js → host-D9tJwZXl.js} +1 -1
- package/dist/client/assets/{index-CDqjh7nt.js → index-CesRxZ0X.js} +7 -7
- package/dist/client/assets/index-CxDE9VOy.css +1 -0
- package/dist/client/assets/{info-D4MMvZFe.js → info-DNYekoE-.js} +1 -1
- package/dist/client/assets/{input-C4fvDiQ4.js → input-DgW9uRZN.js} +1 -1
- package/dist/client/assets/{lexicalToReact-sPUyOWk6.js → lexicalToReact-CZvp9Pgz.js} +3 -3
- package/dist/client/assets/{log-aTaDVF_e.js → log-DnEvbp3E.js} +1 -1
- package/dist/client/assets/{monitor-_CRKcV1h.js → monitor-qbWfUdBG.js} +1 -1
- package/dist/client/assets/{pencil-fNBeUUCf.js → pencil-C965rrpd.js} +1 -1
- package/dist/client/assets/{pendingActionsStore-COTh4Ztq.js → pendingActionsStore-CxhI19V9.js} +1 -1
- package/dist/client/assets/{play-BAmkJfn6.js → play-uofLR7yT.js} +1 -1
- package/dist/client/assets/{plus-c75CkNEO.js → plus-D4CI6rj1.js} +1 -1
- package/dist/client/assets/{popover-CHM4skzh.js → popover-Bc646hKn.js} +1 -1
- package/dist/client/assets/{pushClient-BJH_ITRB.js → pushClient-CxnHu9h4.js} +1 -1
- package/dist/client/assets/runDetached-DfQXHAaY.js +1 -0
- package/dist/client/assets/{segmented-control-DNOwRupT.js → segmented-control-CKGX29Kl.js} +1 -1
- package/dist/client/assets/{select-dLHiAls6.js → select-BjeajpVt.js} +1 -1
- package/dist/client/assets/{settings-header-button-CGKCzFyk.js → settings-header-button-BYvHR6Xl.js} +1 -1
- package/dist/client/assets/{sidebarPendingActions-Dyp80Lv_.js → sidebarPendingActions-xgMTnfRY.js} +1 -1
- package/dist/client/assets/{square-pen-B1IxmScM.js → square-pen-DmppQdTd.js} +1 -1
- package/dist/client/assets/{state-mark-BhTZfcYe.js → state-mark-C3kEL1hX.js} +1 -1
- package/dist/client/assets/{status-pill-CwhJhaMy.js → status-pill-Bo1Nb6HX.js} +1 -1
- package/dist/client/assets/{terminal-Bnj7qFGw.js → terminal-DfCF-J4p.js} +1 -1
- package/dist/client/assets/{timer.adapter-DHt2zwsL.js → timer.adapter-C2RhP4d6.js} +1 -1
- package/dist/client/assets/{tools-3gJcj3hK.js → tools-t5T_3UBg.js} +1 -1
- package/dist/client/assets/{triangle-alert-CWrc0CIO.js → triangle-alert-CYQhobyY.js} +1 -1
- package/dist/client/assets/useAppGlobalState-DUa3pkCF.js +1 -0
- package/dist/client/assets/useKannaState-FcieR5qb.js +5 -0
- package/dist/client/assets/useTheme-D9sKDPEm.js +1 -0
- package/dist/client/index.html +35 -35
- package/package.json +2 -2
- package/src/server/agent-coordinator-types.ts +0 -6
- package/src/server/agent-coordinator.ts +6 -45
- package/src/server/agent.compaction.test.ts +1 -13
- package/src/server/agent.oauth-account-info.test.ts +0 -3
- package/src/server/agent.oauth-release.test.ts +0 -2
- package/src/server/agent.oauth-rotation.test.ts +0 -9
- package/src/server/agent.oauth-token-share-cap.test.ts +0 -1
- package/src/server/agent.openrouter-model.test.ts +0 -2
- package/src/server/agent.openrouter-watchdog.test.ts +0 -3
- package/src/server/agent.sdk-workflow-register.test.ts +2 -64
- package/src/server/agent.test.ts +1 -319
- package/src/server/app-settings.test.ts +14 -17
- package/src/server/app-settings.ts +22 -37
- package/src/server/auto-continue/e2e.test.ts +0 -1
- package/src/server/background-task-output-registry.test.ts +1 -1
- package/src/server/background-task-output-registry.ts +1 -1
- package/src/server/claude-cancel-handler.test.ts +0 -58
- package/src/server/claude-cancel-handler.ts +1 -17
- package/src/server/claude-harness-stream.test.ts +134 -0
- package/src/server/{claude-pty/jsonl-path.test.ts → claude-projects-path.adapter.test.ts} +1 -19
- package/src/server/{claude-pty/jsonl-path.adapter.ts → claude-projects-path.adapter.ts} +0 -11
- package/src/server/claude-send-command.test.ts +0 -1
- package/src/server/claude-session-config-helpers.test.ts +1 -90
- package/src/server/claude-session-config-helpers.ts +1 -38
- package/src/server/claude-session-error-handler.test.ts +0 -1
- package/src/server/claude-session-lifecycle.test.ts +2 -36
- package/src/server/claude-session-lifecycle.ts +2 -8
- package/src/server/claude-session-runner.test.ts +8 -36
- package/src/server/claude-session-runner.ts +1 -26
- package/src/server/claude-session-spawner.test.ts +5 -64
- package/src/server/claude-session-spawner.ts +49 -115
- package/src/server/claude-session-start.test.ts +1 -14
- package/src/server/claude-session-start.ts +0 -8
- package/src/server/claude-session-state-queries.test.ts +1 -2
- package/src/server/claude-session-state.test.ts +0 -1
- package/src/server/claude-session-state.ts +0 -4
- package/src/server/claude-subagent-wiring.test.ts +2 -68
- package/src/server/claude-subagent-wiring.ts +3 -50
- package/src/server/claude-turn-starter-types.ts +0 -3
- package/src/server/claude-turn-starter.test.ts +0 -28
- package/src/server/claude-turn-starter.ts +0 -5
- package/src/server/event-store.test.ts +0 -2
- package/src/server/events.ts +1 -2
- package/src/server/harness-types.ts +1 -2
- package/src/server/import-subagent-drill.e2e.test.ts +1 -1
- package/src/server/imported-subagents-dir.test.ts +1 -1
- package/src/server/imported-subagents-dir.ts +1 -1
- package/src/server/kanna-mcp.test.ts +0 -75
- package/src/server/kanna-mcp.ts +1 -47
- package/src/server/server.test.ts +5 -7
- package/src/server/server.ts +2 -18
- package/src/server/subagent-orchestrator.test.ts +0 -1
- package/src/server/subagent-provider-run.test.ts +48 -10
- package/src/server/subagent-provider-run.ts +12 -3
- package/src/server/tool-callback.test.ts +1 -1
- package/src/server/ws-router-agent-ctrl.test.ts +0 -45
- package/src/server/ws-router-agent-ctrl.ts +1 -31
- package/src/server/ws-router-broadcast.ts +0 -27
- package/src/server/ws-router-defaults.test.ts +2 -3
- package/src/server/ws-router-defaults.ts +2 -3
- package/src/server/ws-router-envelope.ts +0 -15
- package/src/server/ws-router-observability.test.ts +1 -1
- package/src/server/ws-router-settings.test.ts +2 -2
- package/src/server/ws-router.test.ts +2 -2
- package/src/server/ws-router.ts +0 -8
- package/src/shared/app-settings-types.ts +9 -20
- package/src/shared/claude-api-error-classification.ts +1 -1
- package/src/shared/protocol.ts +1 -11
- package/dist/client/assets/BoardsRoutePage-BTTjJX-Y.js +0 -1
- package/dist/client/assets/ChatPage-DH8wtQyD.js +0 -93
- package/dist/client/assets/SettingsPage-CKrZ6dGQ.js +0 -9
- package/dist/client/assets/chevron-left-CJ0qv9kF.js +0 -1
- package/dist/client/assets/editor-icons-CONDQZof.js +0 -1
- package/dist/client/assets/index-C-UYaDk6.css +0 -1
- package/dist/client/assets/runDetached-DqQ3k2ji.js +0 -1
- package/dist/client/assets/useAppGlobalState-DKOGrO5l.js +0 -1
- package/dist/client/assets/useKannaState-D7R_-dM6.js +0 -5
- package/dist/client/assets/useTheme-B57LIKyx.js +0 -1
- package/src/server/agent.pty-rotation.test.ts +0 -322
- package/src/server/claude-pty/auth.test.ts +0 -38
- package/src/server/claude-pty/auth.ts +0 -17
- package/src/server/claude-pty/claude-session-registry.adapter.ts +0 -68
- package/src/server/claude-pty/claude-session-registry.test.ts +0 -149
- package/src/server/claude-pty/driver.test.ts +0 -1153
- package/src/server/claude-pty/driver.ts +0 -829
- package/src/server/claude-pty/env.test.ts +0 -79
- package/src/server/claude-pty/env.ts +0 -20
- package/src/server/claude-pty/jsonl-to-event.test.ts +0 -882
- package/src/server/claude-pty/jsonl-to-event.ts +0 -357
- package/src/server/claude-pty/parity-matrix.test.ts +0 -437
- package/src/server/claude-pty/pid-registry.adapter.ts +0 -164
- package/src/server/claude-pty/pid-registry.test.ts +0 -178
- package/src/server/claude-pty/preflight/binary-fingerprint.adapter.ts +0 -20
- package/src/server/claude-pty/preflight/binary-fingerprint.test.ts +0 -32
- package/src/server/claude-pty/pty-instance-registry.test.ts +0 -208
- package/src/server/claude-pty/pty-instance-registry.ts +0 -172
- package/src/server/claude-pty/pty-memory-sampler.adapter.test.ts +0 -103
- package/src/server/claude-pty/pty-memory-sampler.adapter.ts +0 -86
- package/src/server/claude-pty/pty-process.adapter.ts +0 -60
- package/src/server/claude-pty/pty-process.test.ts +0 -49
- package/src/server/claude-pty/resolve-binary.adapter.ts +0 -106
- package/src/server/claude-pty/resolve-binary.test.ts +0 -118
- package/src/server/claude-pty/runtime-dir.adapter.ts +0 -19
- package/src/server/claude-pty/sandbox/detect.adapter.ts +0 -17
- package/src/server/claude-pty/sandbox/detect.test.ts +0 -17
- package/src/server/claude-pty/sandbox/platform.test.ts +0 -35
- package/src/server/claude-pty/sandbox/platform.ts +0 -27
- package/src/server/claude-pty/sandbox/preflight-io.adapter.ts +0 -14
- package/src/server/claude-pty/sandbox/preflight.test.ts +0 -69
- package/src/server/claude-pty/sandbox/preflight.ts +0 -44
- package/src/server/claude-pty/sandbox/profile-linux.adapter.ts +0 -63
- package/src/server/claude-pty/sandbox/profile-linux.test.ts +0 -90
- package/src/server/claude-pty/sandbox/profile-macos.adapter.ts +0 -72
- package/src/server/claude-pty/sandbox/profile-macos.test.ts +0 -68
- package/src/server/claude-pty/sandbox/wrap.adapter.ts +0 -58
- package/src/server/claude-pty/sandbox/wrap.test.ts +0 -82
- package/src/server/claude-pty/settings-writer.adapter.ts +0 -23
- package/src/server/claude-pty/settings-writer.test.ts +0 -22
- package/src/server/claude-pty/smoke-test-io.adapter.ts +0 -28
- package/src/server/claude-pty/smoke-test.test.ts +0 -199
- package/src/server/claude-pty/smoke-test.ts +0 -182
- package/src/server/claude-pty/tui-control.test.ts +0 -300
- package/src/server/claude-pty/tui-control.ts +0 -174
- package/src/server/claude-pty/tui-source.adapter.test.ts +0 -374
- package/src/server/claude-pty/tui-source.adapter.ts +0 -294
- package/src/server/http-server.adapter.test.ts +0 -18
- package/src/server/http-server.adapter.ts +0 -39
- package/src/server/kanna-mcp-http.test.ts +0 -274
- package/src/server/kanna-mcp-http.ts +0 -194
- package/src/server/kanna-mcp-tools/ask-user-question.test.ts +0 -108
- package/src/server/kanna-mcp-tools/ask-user-question.ts +0 -55
- package/src/server/kanna-mcp-tools/exit-plan-mode.test.ts +0 -61
- package/src/server/kanna-mcp-tools/exit-plan-mode.ts +0 -49
- package/src/server/mcp-zod-compat.adapter.ts +0 -20
- package/src/shared/pty-instance.ts +0 -43
- /package/src/server/{claude-pty/output-ring.test.ts → output-ring.test.ts} +0 -0
- /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
|
|
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.
|
|
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
|
-
|
|
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: { ...
|
|
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-
|
|
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
|
-
|
|
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: { ...
|
|
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,
|
|
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: { ...
|
|
140
|
+
claudeDriver: { ...CLAUDE_DRIVER_DEFAULTS, lifecycle: { ...CLAUDE_LIFECYCLE_DEFAULTS } },
|
|
141
141
|
globalPromptAppend: "",
|
|
142
142
|
shareDefaultTtlHours: 24,
|
|
143
143
|
subagentRuntime: { runTimeoutMs: 600_000, defaultLoopSubagentId: null },
|
package/src/server/ws-router.ts
CHANGED
|
@@ -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
|
|
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
|
|
144
|
+
export const CLAUDE_LIFECYCLE_DEFAULTS: ClaudeLifecycleSettings = {
|
|
153
145
|
idleTimeoutMs: 600_000,
|
|
154
146
|
maxConcurrent: 4,
|
|
155
147
|
}
|
|
156
148
|
|
|
157
|
-
export const
|
|
158
|
-
export const
|
|
159
|
-
export const
|
|
160
|
-
export const
|
|
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
|
-
|
|
164
|
-
lifecycle: ClaudePtyLifecycleSettings
|
|
155
|
+
lifecycle: ClaudeLifecycleSettings
|
|
165
156
|
}
|
|
166
157
|
|
|
167
158
|
export const CLAUDE_DRIVER_DEFAULTS: ClaudeDriverSettings = {
|
|
168
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
|
package/src/shared/protocol.ts
CHANGED
|
@@ -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 |
|
|
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};
|