@jingyi0605/codingns 0.3.0 → 0.3.6
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 +13 -0
- package/bin/codingns.mjs +880 -9
- package/dist/public/assets/{TerminalPage-Dfw1QUqW.js → TerminalPage-D00S4KM6.js} +19 -19
- package/dist/public/assets/index-BlOinYqR.js +122 -0
- package/dist/public/assets/index-Dg_7g6lA.css +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.d.ts +2 -0
- package/dist/server/config/env.js +35 -0
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/config/opencode-base-url-resolver.d.ts +7 -0
- package/dist/server/config/opencode-base-url-resolver.js +48 -11
- package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
- package/dist/server/config/opencode-system-probe-helper-client.d.ts +4 -0
- package/dist/server/config/opencode-system-probe-helper-client.js +29 -0
- package/dist/server/config/opencode-system-probe-helper-client.js.map +1 -1
- package/dist/server/config/opencode-system-probe-helper-process.d.ts +12 -0
- package/dist/server/config/opencode-system-probe-helper-process.js +34 -7
- package/dist/server/config/opencode-system-probe-helper-process.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +144 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js +242 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +133 -2
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +395 -2
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/auth/auth-service.d.ts +18 -1
- package/dist/server/modules/auth/auth-service.js +168 -7
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/butler/butler-codex-model-policy.d.ts +1 -0
- package/dist/server/modules/butler/butler-codex-model-policy.js +36 -0
- package/dist/server/modules/butler/butler-codex-model-policy.js.map +1 -0
- package/dist/server/modules/butler/butler-control-session-service.d.ts +13 -1
- package/dist/server/modules/butler/butler-control-session-service.js +55 -231
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-controller.d.ts +17 -0
- package/dist/server/modules/butler/butler-controller.js +20 -1
- package/dist/server/modules/butler/butler-controller.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-service.js +7 -3
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +36 -0
- package/dist/server/modules/butler/butler-inbox-analysis-service.js +375 -0
- package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -0
- package/dist/server/modules/butler/butler-inbox-instruction-adapter.d.ts +23 -0
- package/dist/server/modules/butler/butler-inbox-instruction-adapter.js +97 -0
- package/dist/server/modules/butler/butler-inbox-instruction-adapter.js.map +1 -0
- package/dist/server/modules/butler/butler-inbox-service.d.ts +39 -2
- package/dist/server/modules/butler/butler-inbox-service.js +392 -2
- package/dist/server/modules/butler/butler-inbox-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +8 -0
- package/dist/server/modules/butler/butler-session-service.js +205 -53
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-summary-service.d.ts +1 -0
- package/dist/server/modules/butler/butler-session-summary-service.js +48 -23
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
- package/dist/server/modules/butler/butler-workspace-context.d.ts +13 -0
- package/dist/server/modules/butler/butler-workspace-context.js +234 -0
- package/dist/server/modules/butler/butler-workspace-context.js.map +1 -0
- package/dist/server/modules/client/client-controller.d.ts +6 -0
- package/dist/server/modules/client/client-controller.js +30 -8
- package/dist/server/modules/client/client-controller.js.map +1 -1
- package/dist/server/modules/client/client-service.d.ts +22 -10
- package/dist/server/modules/client/client-service.js +77 -100
- package/dist/server/modules/client/client-service.js.map +1 -1
- package/dist/server/modules/client/npm-global-package-service.d.ts +21 -0
- package/dist/server/modules/client/npm-global-package-service.js +210 -0
- package/dist/server/modules/client/npm-global-package-service.js.map +1 -0
- package/dist/server/modules/client/service-update-task-service.d.ts +15 -0
- package/dist/server/modules/client/service-update-task-service.js +147 -0
- package/dist/server/modules/client/service-update-task-service.js.map +1 -0
- package/dist/server/modules/client/service-update-types.d.ts +30 -0
- package/dist/server/modules/client/service-update-types.js +2 -0
- package/dist/server/modules/client/service-update-types.js.map +1 -0
- package/dist/server/modules/debug-target/debug-target-controller.d.ts +13 -0
- package/dist/server/modules/debug-target/debug-target-controller.js +77 -2
- package/dist/server/modules/debug-target/debug-target-controller.js.map +1 -1
- package/dist/server/modules/debug-target/debug-target-service.d.ts +11 -2
- package/dist/server/modules/debug-target/debug-target-service.js +138 -3
- package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
- package/dist/server/modules/git/git-command-helper-client.d.ts +2 -0
- package/dist/server/modules/git/git-command-helper-client.js +52 -3
- package/dist/server/modules/git/git-command-helper-client.js.map +1 -1
- package/dist/server/modules/git/git-command-helper-process.js +62 -9
- package/dist/server/modules/git/git-command-helper-process.js.map +1 -1
- package/dist/server/modules/git/git-command-runner.d.ts +1 -0
- package/dist/server/modules/git/git-command-runner.js +25 -0
- package/dist/server/modules/git/git-command-runner.js.map +1 -1
- package/dist/server/modules/git/git-controller.js +8 -7
- package/dist/server/modules/git/git-controller.js.map +1 -1
- package/dist/server/modules/git/git-read-service.d.ts +7 -7
- package/dist/server/modules/git/git-read-service.js +41 -24
- package/dist/server/modules/git/git-read-service.js.map +1 -1
- package/dist/server/modules/model-switch/cc-switch-adapter.d.ts +36 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js +321 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -0
- package/dist/server/modules/model-switch/model-switch-controller.d.ts +11 -0
- package/dist/server/modules/model-switch/model-switch-controller.js +30 -0
- package/dist/server/modules/model-switch/model-switch-controller.js.map +1 -0
- package/dist/server/modules/model-switch/model-switch-service.d.ts +16 -0
- package/dist/server/modules/model-switch/model-switch-service.js +29 -0
- package/dist/server/modules/model-switch/model-switch-service.js.map +1 -0
- package/dist/server/modules/preferences/profile-service.d.ts +1 -0
- package/dist/server/modules/preferences/profile-service.js +9 -0
- package/dist/server/modules/preferences/profile-service.js.map +1 -1
- package/dist/server/modules/provider/codex-model-options.js +2 -3
- package/dist/server/modules/provider/codex-model-options.js.map +1 -1
- package/dist/server/modules/provider/opencode-model-options.js +2 -3
- package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +9 -4
- package/dist/server/modules/provider/provider-discovery-helper-client.js +87 -11
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +52 -47
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.d.ts +4 -0
- package/dist/server/modules/provider/provider-discovery-runtime.js +65 -0
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -0
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +3 -0
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/session-activity-authority-service.d.ts +3 -1
- package/dist/server/modules/sessions/session-activity-authority-service.js +3 -0
- package/dist/server/modules/sessions/session-activity-authority-service.js.map +1 -1
- package/dist/server/modules/sessions/session-activity-inspector.d.ts +1 -1
- package/dist/server/modules/sessions/session-activity-inspector.js +43 -16
- package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +3 -3
- package/dist/server/modules/sessions/session-controller.js +3 -3
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +8 -2
- package/dist/server/modules/sessions/session-history-service.js +473 -65
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +9 -3
- package/dist/server/modules/sessions/session-live-runtime-service.js +114 -34
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.d.ts +8 -8
- package/dist/server/modules/sessions/session-message-attachment-service.js +25 -34
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +7 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/skills/builtin-skill-service.d.ts +12 -0
- package/dist/server/modules/skills/builtin-skill-service.js +49 -0
- package/dist/server/modules/skills/builtin-skill-service.js.map +1 -0
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +75 -0
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/agents/openai.yaml +4 -0
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +130 -0
- package/dist/server/modules/skills/skill-manager-service.d.ts +7 -0
- package/dist/server/modules/skills/skill-manager-service.js +98 -0
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/tailscale/tailscale-helper-client.d.ts +1 -0
- package/dist/server/modules/tailscale/tailscale-helper-client.js +12 -0
- package/dist/server/modules/tailscale/tailscale-helper-client.js.map +1 -1
- package/dist/server/modules/tailscale/tailscale-manager.js +5 -1
- package/dist/server/modules/tailscale/tailscale-manager.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-client.d.ts +5 -0
- package/dist/server/modules/tasks/task-helper-client.js +45 -0
- package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +10 -3
- package/dist/server/modules/tasks/task-helper-process-handlers.js +7 -5
- package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process.js +11 -1
- package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
- package/dist/server/modules/tasks/task-lane-executors.js +5 -2
- package/dist/server/modules/tasks/task-lane-executors.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +3 -0
- package/dist/server/modules/tasks/task-types.js +4 -1
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/terminal/command-template-service.d.ts +2 -2
- package/dist/server/modules/terminal/command-template-service.js +14 -5
- package/dist/server/modules/terminal/command-template-service.js.map +1 -1
- package/dist/server/modules/terminal/runtime/terminal-log-writer-client.js +1 -1
- package/dist/server/modules/terminal/runtime/terminal-log-writer-client.js.map +1 -1
- package/dist/server/modules/terminal/runtime/terminal-log-writer-process.js +160 -11
- package/dist/server/modules/terminal/runtime/terminal-log-writer-process.js.map +1 -1
- package/dist/server/modules/terminal/template-port-runtime.d.ts +13 -2
- package/dist/server/modules/terminal/template-port-runtime.js +266 -44
- package/dist/server/modules/terminal/template-port-runtime.js.map +1 -1
- package/dist/server/modules/terminal/terminal-service.d.ts +4 -0
- package/dist/server/modules/terminal/terminal-service.js +65 -4
- package/dist/server/modules/terminal/terminal-service.js.map +1 -1
- package/dist/server/modules/workbench/workbench-service.js +3 -3
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +1 -0
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +118 -39
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/modules/workspace/workspace-code-composition.d.ts +1 -0
- package/dist/server/modules/workspace/workspace-code-composition.js +277 -2
- package/dist/server/modules/workspace/workspace-code-composition.js.map +1 -1
- package/dist/server/modules/workspace/workspace-service.js +54 -17
- package/dist/server/modules/workspace/workspace-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-cleanup-service.d.ts +1 -1
- package/dist/server/modules/worktree/worktree-cleanup-service.js +22 -17
- package/dist/server/modules/worktree/worktree-cleanup-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-controller.js +6 -5
- package/dist/server/modules/worktree/worktree-controller.js.map +1 -1
- package/dist/server/modules/worktree/worktree-manager.d.ts +1 -1
- package/dist/server/modules/worktree/worktree-manager.js +26 -19
- package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
- package/dist/server/modules/worktree/worktree-merge-service.d.ts +2 -2
- package/dist/server/modules/worktree/worktree-merge-service.js +34 -27
- package/dist/server/modules/worktree/worktree-merge-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-sync-service.d.ts +1 -1
- package/dist/server/modules/worktree/worktree-sync-service.js +5 -3
- package/dist/server/modules/worktree/worktree-sync-service.js.map +1 -1
- package/dist/server/routes/assistant.js +24 -0
- package/dist/server/routes/assistant.js.map +1 -1
- package/dist/server/routes/butler.js +4 -0
- package/dist/server/routes/butler.js.map +1 -1
- package/dist/server/routes/client.js +2 -0
- package/dist/server/routes/client.js.map +1 -1
- package/dist/server/routes/sessions.js +1 -1
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/system.d.ts +2 -1
- package/dist/server/routes/system.js +3 -1
- package/dist/server/routes/system.js.map +1 -1
- package/dist/server/server/create-server.d.ts +4 -0
- package/dist/server/server/create-server.js +67 -8
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/errors/app-error.d.ts +2 -0
- package/dist/server/shared/errors/app-error.js +2 -0
- package/dist/server/shared/errors/app-error.js.map +1 -1
- package/dist/server/shared/http/error-handler.d.ts +2 -1
- package/dist/server/shared/http/error-handler.js +3 -2
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/shared/http/request-abort.d.ts +2 -0
- package/dist/server/shared/http/request-abort.js +38 -0
- package/dist/server/shared/http/request-abort.js.map +1 -0
- package/dist/server/storage/repositories/auth-login-attempt-repository.d.ts +9 -0
- package/dist/server/storage/repositories/auth-login-attempt-repository.js +59 -0
- package/dist/server/storage/repositories/auth-login-attempt-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-control-session-repository.d.ts +3 -0
- package/dist/server/storage/repositories/butler-control-session-repository.js +80 -4
- package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-inbox-item-repository.js +54 -3
- package/dist/server/storage/repositories/butler-inbox-item-repository.js.map +1 -1
- package/dist/server/storage/repositories/terminal-instance-repository.js +1 -1
- package/dist/server/storage/repositories/terminal-instance-repository.js.map +1 -1
- package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
- package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +127 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +19 -1
- package/dist/server/types/domain.d.ts +37 -1
- package/dist/server/ws/workbench-ws-hub.d.ts +1 -0
- package/dist/server/ws/workbench-ws-hub.js +25 -3
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +23 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +162 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +89 -33
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +18 -2
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +3 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +238 -53
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +6 -2
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.mjs +33 -0
- package/dist/public/assets/index-DR2rPNi7.css +0 -1
- package/dist/public/assets/index-DTOruahn.js +0 -114
|
@@ -2,7 +2,7 @@ import { existsSync, readdirSync } from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { performance } from "node:perf_hooks";
|
|
4
4
|
import { ClaudeRuntimeAdapter, CodexRuntimeAdapter, GeminiRuntimeAdapter, KimiRuntimeAdapter, OpenCodeRuntimeAdapter, ProviderRuntimeService } from "@codingns/session-sync-core";
|
|
5
|
-
import { AppError } from "../../shared/errors/app-error.js";
|
|
5
|
+
import { AppError, isAppError } from "../../shared/errors/app-error.js";
|
|
6
6
|
import { createId } from "../../shared/utils/id.js";
|
|
7
7
|
import { isPerfDebugEnabled, logPerformance } from "../../shared/utils/perf-log.js";
|
|
8
8
|
import { logPermissionDebug } from "../../shared/utils/permission-debug-log.js";
|
|
@@ -103,7 +103,6 @@ export class SessionLiveRuntimeService {
|
|
|
103
103
|
userId: input.userId
|
|
104
104
|
});
|
|
105
105
|
const snapshot = handle.getSnapshot();
|
|
106
|
-
this.attachRuntimePersistence(handle, sessionId, workspace.id, input.userId);
|
|
107
106
|
this.createRuntimeBackedSession({
|
|
108
107
|
sessionId,
|
|
109
108
|
workspaceId: workspace.id,
|
|
@@ -116,6 +115,9 @@ export class SessionLiveRuntimeService {
|
|
|
116
115
|
initialContent: input.content,
|
|
117
116
|
snapshot
|
|
118
117
|
});
|
|
118
|
+
// 先把基础记录建出来,再回放 runtime 缓存事件,避免超快启动时出现
|
|
119
|
+
// “事件先到、索引还没落库”的竞态窗口。
|
|
120
|
+
this.attachRuntimePersistence(handle, sessionId, workspace.id, input.userId);
|
|
119
121
|
const startBindingTask = this.waitForResolvedStartBinding(sessionId, workspace.id, input.provider, handle).catch(() => {
|
|
120
122
|
return;
|
|
121
123
|
});
|
|
@@ -143,7 +145,18 @@ export class SessionLiveRuntimeService {
|
|
|
143
145
|
}
|
|
144
146
|
const acceptedAt = acceptedMessage?.timestamp ?? nowIso();
|
|
145
147
|
const boundAttachments = this.sessionMessageAttachmentService.bindClientRequestToMessage(sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null);
|
|
146
|
-
const session = this.
|
|
148
|
+
const session = this.resolveStartedSession({
|
|
149
|
+
sessionId,
|
|
150
|
+
workspaceId: workspace.id,
|
|
151
|
+
userId: input.userId,
|
|
152
|
+
provider: input.provider,
|
|
153
|
+
parentSessionId: input.parentSessionId ?? null,
|
|
154
|
+
sessionKind: input.sessionKind ?? "default",
|
|
155
|
+
annotationSourceMessageId: input.annotationSourceMessageId ?? null,
|
|
156
|
+
annotationSourceText: input.annotationSourceText ?? null,
|
|
157
|
+
initialContent: input.content,
|
|
158
|
+
handle
|
|
159
|
+
});
|
|
147
160
|
this.markSendDebugResponseReady(debugTrace, {
|
|
148
161
|
returnedAcceptedMessage: Boolean(acceptedMessage),
|
|
149
162
|
returnedSyntheticUser: !acceptedMessage,
|
|
@@ -428,6 +441,10 @@ export class SessionLiveRuntimeService {
|
|
|
428
441
|
const runtimeSessionId = this.resolveRuntimeSessionId(sessionId);
|
|
429
442
|
const runtimeSnapshot = this.providerRuntimeService.getSnapshot(runtimeSessionId);
|
|
430
443
|
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(runtimeSessionId) ?? null;
|
|
444
|
+
const runtimeHasActiveRun = runtimeSnapshot ? isActiveRuntimeState(runtimeSnapshot.runningState) : false;
|
|
445
|
+
const externalHasActiveRun = externalRuntimeSnapshot
|
|
446
|
+
? isActiveRuntimeState(externalRuntimeSnapshot.runningState)
|
|
447
|
+
: false;
|
|
431
448
|
const session = runtimeSnapshot || externalRuntimeSnapshot
|
|
432
449
|
? this.sessionHistoryService.getSession(sessionId, userId)
|
|
433
450
|
: await this.sessionHistoryService.refreshRuntimeFallbackSession(sessionId, userId);
|
|
@@ -445,14 +462,15 @@ export class SessionLiveRuntimeService {
|
|
|
445
462
|
provider: session.provider,
|
|
446
463
|
providerSessionId: runtimeSnapshot.providerSessionId ?? session.providerSessionId,
|
|
447
464
|
runningState: resolution.runningState,
|
|
448
|
-
hasActiveRun:
|
|
449
|
-
canAttach:
|
|
450
|
-
canInterrupt: runtimeSnapshot.supportsInterrupt,
|
|
465
|
+
hasActiveRun: runtimeHasActiveRun,
|
|
466
|
+
canAttach: runtimeHasActiveRun,
|
|
467
|
+
canInterrupt: runtimeHasActiveRun && runtimeSnapshot.supportsInterrupt,
|
|
451
468
|
inRunInputMode: capabilities.inRunInputMode,
|
|
452
469
|
activityResolutionSource: resolution.activityResolutionSource,
|
|
453
470
|
activityConfidence: resolution.activityConfidence,
|
|
454
471
|
runId: resolution.runId,
|
|
455
472
|
detail: resolution.detail,
|
|
473
|
+
interruptSource: resolution.interruptSource,
|
|
456
474
|
errorCode: resolution.runningState === "failed"
|
|
457
475
|
? resolution.errorCode ?? session.lastErrorCode
|
|
458
476
|
: null,
|
|
@@ -470,7 +488,7 @@ export class SessionLiveRuntimeService {
|
|
|
470
488
|
provider: "claude-code",
|
|
471
489
|
providerSessionId: externalRuntimeSnapshot.providerSessionId,
|
|
472
490
|
runningState: resolution.runningState,
|
|
473
|
-
hasActiveRun:
|
|
491
|
+
hasActiveRun: externalHasActiveRun,
|
|
474
492
|
canAttach: false,
|
|
475
493
|
canInterrupt: false,
|
|
476
494
|
inRunInputMode: capabilities.inRunInputMode,
|
|
@@ -478,6 +496,7 @@ export class SessionLiveRuntimeService {
|
|
|
478
496
|
activityConfidence: resolution.activityConfidence,
|
|
479
497
|
runId: resolution.runId,
|
|
480
498
|
detail: resolution.detail,
|
|
499
|
+
interruptSource: resolution.interruptSource,
|
|
481
500
|
errorCode: resolution.runningState === "failed" ? resolution.errorCode ?? session.lastErrorCode : null,
|
|
482
501
|
errorDetail: resolution.runningState === "failed" ? resolution.detail ?? session.lastErrorDetail : null,
|
|
483
502
|
updatedAt: resolution.updatedAt,
|
|
@@ -500,6 +519,7 @@ export class SessionLiveRuntimeService {
|
|
|
500
519
|
activityConfidence: resolution.activityConfidence,
|
|
501
520
|
runId: resolution.runId,
|
|
502
521
|
detail: persistedErrorDetail,
|
|
522
|
+
interruptSource: resolution.interruptSource,
|
|
503
523
|
errorCode: persistedErrorCode,
|
|
504
524
|
errorDetail: persistedErrorDetail,
|
|
505
525
|
updatedAt: resolution.updatedAt,
|
|
@@ -573,6 +593,7 @@ export class SessionLiveRuntimeService {
|
|
|
573
593
|
sessionId,
|
|
574
594
|
status: runtimeSnapshot.runningState,
|
|
575
595
|
detail: runtimeSnapshot.detail,
|
|
596
|
+
interruptSource: runtimeSnapshot.interruptSource,
|
|
576
597
|
timestamp: runtimeSnapshot.lastEventAt ?? runtimeSnapshot.startedAt
|
|
577
598
|
});
|
|
578
599
|
}
|
|
@@ -582,6 +603,7 @@ export class SessionLiveRuntimeService {
|
|
|
582
603
|
sessionId,
|
|
583
604
|
status: externalRuntimeSnapshot.runningState,
|
|
584
605
|
detail: externalRuntimeSnapshot.detail,
|
|
606
|
+
interruptSource: null,
|
|
585
607
|
timestamp: externalRuntimeSnapshot.updatedAt
|
|
586
608
|
});
|
|
587
609
|
}
|
|
@@ -669,8 +691,8 @@ export class SessionLiveRuntimeService {
|
|
|
669
691
|
const resolution = this.sessionActivityAuthorityService.observe(createRuntimeActivityObservation(runtimeSessionId, runtimeSnapshot));
|
|
670
692
|
return {
|
|
671
693
|
...this.mapResolutionToActivityEnvelope(resolution, {
|
|
672
|
-
hasActiveRun:
|
|
673
|
-
canInterrupt: runtimeSnapshot.supportsInterrupt
|
|
694
|
+
hasActiveRun: isActiveRuntimeState(runtimeSnapshot.runningState),
|
|
695
|
+
canInterrupt: isActiveRuntimeState(runtimeSnapshot.runningState) && runtimeSnapshot.supportsInterrupt
|
|
674
696
|
}),
|
|
675
697
|
sessionId
|
|
676
698
|
};
|
|
@@ -680,7 +702,7 @@ export class SessionLiveRuntimeService {
|
|
|
680
702
|
const resolution = this.sessionActivityAuthorityService.observe(createExternalRuntimeActivityObservation(runtimeSessionId, externalRuntimeSnapshot));
|
|
681
703
|
return {
|
|
682
704
|
...this.mapResolutionToActivityEnvelope(resolution, {
|
|
683
|
-
hasActiveRun:
|
|
705
|
+
hasActiveRun: isActiveRuntimeState(externalRuntimeSnapshot.runningState),
|
|
684
706
|
canInterrupt: false
|
|
685
707
|
}),
|
|
686
708
|
sessionId
|
|
@@ -734,6 +756,7 @@ export class SessionLiveRuntimeService {
|
|
|
734
756
|
activityConfidence: resolution.activityConfidence,
|
|
735
757
|
runId: resolution.runId,
|
|
736
758
|
detail: resolution.detail,
|
|
759
|
+
interruptSource: resolution.interruptSource,
|
|
737
760
|
errorCode: resolution.errorCode,
|
|
738
761
|
errorDetail: resolution.detail,
|
|
739
762
|
hasActiveRun: options.hasActiveRun,
|
|
@@ -852,6 +875,7 @@ export class SessionLiveRuntimeService {
|
|
|
852
875
|
source: "authoritative_provider_event",
|
|
853
876
|
confidence: input.runningState === "failed" ? "strong" : "authoritative",
|
|
854
877
|
detail: input.detail,
|
|
878
|
+
interruptSource: null,
|
|
855
879
|
errorCode: input.runningState === "failed" ? "CLAUDE_HOOK_STOP_FAILURE" : null,
|
|
856
880
|
observedAt: input.timestamp
|
|
857
881
|
});
|
|
@@ -882,6 +906,7 @@ export class SessionLiveRuntimeService {
|
|
|
882
906
|
sessionId: input.sessionId,
|
|
883
907
|
status: input.runningState,
|
|
884
908
|
detail: input.detail,
|
|
909
|
+
interruptSource: null,
|
|
885
910
|
timestamp: input.timestamp
|
|
886
911
|
};
|
|
887
912
|
await this.emitExternalRuntimeEnvelope(envelope);
|
|
@@ -1171,42 +1196,71 @@ export class SessionLiveRuntimeService {
|
|
|
1171
1196
|
});
|
|
1172
1197
|
}
|
|
1173
1198
|
createRuntimeBackedSession(input) {
|
|
1199
|
+
this.upsertRuntimeBackedSessionRecords(input);
|
|
1200
|
+
}
|
|
1201
|
+
resolveStartedSession(input) {
|
|
1202
|
+
try {
|
|
1203
|
+
return this.sessionHistoryService.getSession(input.sessionId, input.userId);
|
|
1204
|
+
}
|
|
1205
|
+
catch (error) {
|
|
1206
|
+
if (!isRepairableStartedSessionLookupError(error)) {
|
|
1207
|
+
throw error;
|
|
1208
|
+
}
|
|
1209
|
+
this.upsertRuntimeBackedSessionRecords({
|
|
1210
|
+
sessionId: input.sessionId,
|
|
1211
|
+
workspaceId: input.workspaceId,
|
|
1212
|
+
userId: input.userId,
|
|
1213
|
+
provider: input.provider,
|
|
1214
|
+
parentSessionId: input.parentSessionId,
|
|
1215
|
+
sessionKind: input.sessionKind,
|
|
1216
|
+
annotationSourceMessageId: input.annotationSourceMessageId,
|
|
1217
|
+
annotationSourceText: input.annotationSourceText,
|
|
1218
|
+
initialContent: input.initialContent,
|
|
1219
|
+
snapshot: input.handle.getSnapshot()
|
|
1220
|
+
});
|
|
1221
|
+
return this.sessionHistoryService.getSession(input.sessionId, input.userId);
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
upsertRuntimeBackedSessionRecords(input) {
|
|
1174
1225
|
const timestamp = nowIso();
|
|
1226
|
+
const currentIndex = this.sessionIndexRepository.findIndexRecordBySessionId(input.sessionId);
|
|
1227
|
+
const currentState = this.sessionStateRepository.findBySessionAndUser(input.sessionId, input.userId);
|
|
1228
|
+
const currentSnapshot = this.sessionStatusSnapshotRepository.findBySessionId(input.sessionId);
|
|
1175
1229
|
this.sessionHistoryService.persistSessionBinding(input.sessionId, input.workspaceId, this.buildBindingSnapshot(input.sessionId, input.snapshot.provider, input.snapshot.providerSessionId, input.snapshot.rawStoreRef));
|
|
1176
1230
|
this.sessionIndexRepository.upsert({
|
|
1177
1231
|
sessionId: input.sessionId,
|
|
1178
1232
|
workspaceId: input.workspaceId,
|
|
1179
1233
|
provider: input.provider,
|
|
1180
|
-
parentSessionId: input.parentSessionId,
|
|
1181
|
-
sessionKind: input.sessionKind,
|
|
1182
|
-
annotationSourceMessageId: input.annotationSourceMessageId,
|
|
1183
|
-
annotationSourceText: input.annotationSourceText,
|
|
1184
|
-
isSubagent: false,
|
|
1185
|
-
subagentLabel: null,
|
|
1186
|
-
title: buildSessionTitle(input.initialContent),
|
|
1187
|
-
messageCount: 0,
|
|
1188
|
-
isArchived: false,
|
|
1189
|
-
lastMessageAt: input.snapshot.lastEventAt,
|
|
1190
|
-
createdAt: timestamp,
|
|
1234
|
+
parentSessionId: currentIndex?.parentSessionId ?? input.parentSessionId,
|
|
1235
|
+
sessionKind: currentIndex?.sessionKind ?? input.sessionKind,
|
|
1236
|
+
annotationSourceMessageId: currentIndex?.annotationSourceMessageId ?? input.annotationSourceMessageId,
|
|
1237
|
+
annotationSourceText: currentIndex?.annotationSourceText ?? input.annotationSourceText,
|
|
1238
|
+
isSubagent: currentIndex?.isSubagent ?? false,
|
|
1239
|
+
subagentLabel: currentIndex?.subagentLabel ?? null,
|
|
1240
|
+
title: currentIndex?.title?.trim() || buildSessionTitle(input.initialContent),
|
|
1241
|
+
messageCount: currentIndex?.messageCount ?? 0,
|
|
1242
|
+
isArchived: currentIndex?.isArchived ?? false,
|
|
1243
|
+
lastMessageAt: currentIndex?.lastMessageAt ?? input.snapshot.lastEventAt,
|
|
1244
|
+
createdAt: currentIndex?.createdAt ?? timestamp,
|
|
1191
1245
|
updatedAt: timestamp
|
|
1192
1246
|
});
|
|
1193
1247
|
this.upsertSnapshot(input.sessionId, {
|
|
1194
|
-
syncStatus: "idle",
|
|
1195
|
-
syncCursor: null,
|
|
1196
|
-
lastSyncAt: input.snapshot.lastEventAt ?? timestamp,
|
|
1197
|
-
lastErrorCode: null,
|
|
1198
|
-
lastErrorDetail: null,
|
|
1199
|
-
resumedAt: null
|
|
1248
|
+
syncStatus: currentSnapshot?.syncStatus ?? "idle",
|
|
1249
|
+
syncCursor: currentSnapshot?.syncCursor ?? null,
|
|
1250
|
+
lastSyncAt: currentSnapshot?.lastSyncAt ?? input.snapshot.lastEventAt ?? timestamp,
|
|
1251
|
+
lastErrorCode: currentSnapshot?.lastErrorCode ?? null,
|
|
1252
|
+
lastErrorDetail: currentSnapshot?.lastErrorDetail ?? null,
|
|
1253
|
+
resumedAt: currentSnapshot?.resumedAt ?? null
|
|
1200
1254
|
});
|
|
1201
1255
|
this.sessionStateRepository.upsert({
|
|
1202
1256
|
sessionId: input.sessionId,
|
|
1203
1257
|
userId: input.userId,
|
|
1204
1258
|
runningState: toStoredRunningState(input.snapshot.runningState),
|
|
1205
1259
|
activitySource: "runtime",
|
|
1206
|
-
favorite: false,
|
|
1207
|
-
lastEventAt: input.snapshot.lastEventAt,
|
|
1208
|
-
completedAt: input.snapshot.completedAt,
|
|
1209
|
-
lastSeenAt: null,
|
|
1260
|
+
favorite: currentState?.favorite ?? false,
|
|
1261
|
+
lastEventAt: input.snapshot.lastEventAt ?? currentState?.lastEventAt ?? null,
|
|
1262
|
+
completedAt: input.snapshot.completedAt ?? currentState?.completedAt ?? null,
|
|
1263
|
+
lastSeenAt: currentState?.lastSeenAt ?? null,
|
|
1210
1264
|
updatedAt: timestamp
|
|
1211
1265
|
});
|
|
1212
1266
|
this.sessionActivityAuthorityService.observe(createRuntimeActivityObservation(input.sessionId, input.snapshot));
|
|
@@ -1489,13 +1543,13 @@ export class SessionLiveRuntimeService {
|
|
|
1489
1543
|
return Math.max(maxSequence + 1, 1);
|
|
1490
1544
|
}
|
|
1491
1545
|
async waitForResolvedStartBinding(sessionId, workspaceId, provider, handle) {
|
|
1492
|
-
if (provider !== "gemini" && provider !== "kimi") {
|
|
1546
|
+
if (provider !== "gemini" && provider !== "kimi" && provider !== "codex") {
|
|
1493
1547
|
return;
|
|
1494
1548
|
}
|
|
1495
1549
|
const startedAt = Date.now();
|
|
1496
1550
|
while (Date.now() - startedAt < RUNTIME_START_BINDING_WAIT_TIMEOUT_MS) {
|
|
1497
1551
|
const snapshot = handle.getSnapshot();
|
|
1498
|
-
if (
|
|
1552
|
+
if (shouldPersistResolvedStartBinding(snapshot.provider, snapshot.providerSessionId, snapshot.rawStoreRef)) {
|
|
1499
1553
|
this.sessionHistoryService.persistSessionBinding(sessionId, workspaceId, {
|
|
1500
1554
|
provider: snapshot.provider,
|
|
1501
1555
|
providerSessionId: snapshot.providerSessionId,
|
|
@@ -1513,7 +1567,7 @@ export class SessionLiveRuntimeService {
|
|
|
1513
1567
|
runtimeAttachments: []
|
|
1514
1568
|
};
|
|
1515
1569
|
}
|
|
1516
|
-
return this.sessionMessageAttachmentService.
|
|
1570
|
+
return this.sessionMessageAttachmentService.persistAttachments({
|
|
1517
1571
|
sessionId,
|
|
1518
1572
|
clientRequestId,
|
|
1519
1573
|
attachments
|
|
@@ -1560,6 +1614,7 @@ export class SessionLiveRuntimeService {
|
|
|
1560
1614
|
type: "session.interrupted",
|
|
1561
1615
|
sessionId,
|
|
1562
1616
|
detail: event.detail,
|
|
1617
|
+
interruptSource: event.interruptSource,
|
|
1563
1618
|
timestamp: event.timestamp
|
|
1564
1619
|
};
|
|
1565
1620
|
}
|
|
@@ -1568,6 +1623,7 @@ export class SessionLiveRuntimeService {
|
|
|
1568
1623
|
sessionId,
|
|
1569
1624
|
status: event.status,
|
|
1570
1625
|
detail: event.detail,
|
|
1626
|
+
interruptSource: event.interruptSource,
|
|
1571
1627
|
timestamp: event.timestamp
|
|
1572
1628
|
};
|
|
1573
1629
|
}
|
|
@@ -1673,6 +1729,7 @@ function createRuntimeActivityObservation(sessionId, snapshot) {
|
|
|
1673
1729
|
? "strong"
|
|
1674
1730
|
: "authoritative",
|
|
1675
1731
|
detail: snapshot.detail,
|
|
1732
|
+
interruptSource: snapshot.interruptSource,
|
|
1676
1733
|
errorCode: snapshot.runningState === "failed" ? snapshot.errorCode ?? null : null,
|
|
1677
1734
|
observedAt: snapshot.lastEventAt ?? snapshot.startedAt
|
|
1678
1735
|
};
|
|
@@ -1685,6 +1742,7 @@ function createExternalRuntimeActivityObservation(sessionId, snapshot) {
|
|
|
1685
1742
|
source: "authoritative_provider_event",
|
|
1686
1743
|
confidence: snapshot.runningState === "failed" ? "strong" : "authoritative",
|
|
1687
1744
|
detail: snapshot.detail,
|
|
1745
|
+
interruptSource: null,
|
|
1688
1746
|
errorCode: snapshot.runningState === "failed" ? "CLAUDE_HOOK_STOP_FAILURE" : null,
|
|
1689
1747
|
observedAt: snapshot.updatedAt
|
|
1690
1748
|
};
|
|
@@ -1701,6 +1759,7 @@ function createRuntimeEventObservation(sessionId, event, startedAt) {
|
|
|
1701
1759
|
detail: event.type === "message"
|
|
1702
1760
|
? "Host 正在接收这一轮运行的实时事件"
|
|
1703
1761
|
: event.detail,
|
|
1762
|
+
interruptSource: event.interruptSource,
|
|
1704
1763
|
errorCode: event.type === "error" ? event.errorCode : null,
|
|
1705
1764
|
observedAt: event.type === "message" ? event.message.timestamp : event.timestamp
|
|
1706
1765
|
};
|
|
@@ -1901,6 +1960,23 @@ function hasResolvedRuntimeBinding(providerSessionId, rawStoreRef) {
|
|
|
1901
1960
|
return !providerSessionId.trim().toLowerCase().startsWith("pending://")
|
|
1902
1961
|
&& !rawStoreRef.trim().toLowerCase().startsWith("pending://");
|
|
1903
1962
|
}
|
|
1963
|
+
function shouldPersistResolvedStartBinding(provider, providerSessionId, rawStoreRef) {
|
|
1964
|
+
if (!hasResolvedRuntimeBinding(providerSessionId, rawStoreRef)) {
|
|
1965
|
+
return false;
|
|
1966
|
+
}
|
|
1967
|
+
if (provider === "codex") {
|
|
1968
|
+
return !isSyntheticCodexRuntimeBinding(rawStoreRef);
|
|
1969
|
+
}
|
|
1970
|
+
return true;
|
|
1971
|
+
}
|
|
1972
|
+
function isSyntheticCodexRuntimeBinding(rawStoreRef) {
|
|
1973
|
+
if (!rawStoreRef?.trim()) {
|
|
1974
|
+
return false;
|
|
1975
|
+
}
|
|
1976
|
+
const normalizedRawStoreRef = rawStoreRef.trim().replaceAll("\\", "/").toLowerCase();
|
|
1977
|
+
return normalizedRawStoreRef.includes("/runtime/codex/")
|
|
1978
|
+
|| normalizedRawStoreRef.startsWith("runtime/codex/");
|
|
1979
|
+
}
|
|
1904
1980
|
function waitForRuntimeBindingPoll() {
|
|
1905
1981
|
return new Promise((resolve) => {
|
|
1906
1982
|
setTimeout(resolve, START_BINDING_POLL_INTERVAL_MS);
|
|
@@ -1912,6 +1988,10 @@ function isGeminiPendingRuntimeAliasBinding(value, targetSessionId) {
|
|
|
1912
1988
|
function shouldAwaitAcceptedUserMessage(provider) {
|
|
1913
1989
|
return provider !== "gemini";
|
|
1914
1990
|
}
|
|
1991
|
+
function isRepairableStartedSessionLookupError(error) {
|
|
1992
|
+
return isAppError(error)
|
|
1993
|
+
&& (error.errorCode === "SESSION_INDEX_MISSING" || error.errorCode === "SESSION_NOT_FOUND");
|
|
1994
|
+
}
|
|
1915
1995
|
function shouldAwaitStartBindingBeforeAcceptedUserLookup(provider) {
|
|
1916
1996
|
return provider === "kimi";
|
|
1917
1997
|
}
|