agent-tower 0.7.2-beta.7 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -1
- package/dist/app.js.map +1 -1
- package/dist/app.test.js +80 -1
- package/dist/app.test.js.map +1 -1
- package/dist/cli.js +4 -10
- package/dist/cli.js.map +1 -1
- package/dist/core/container.d.ts +8 -0
- package/dist/core/container.d.ts.map +1 -1
- package/dist/core/container.js +42 -0
- package/dist/core/container.js.map +1 -1
- package/dist/core/event-bus.d.ts +2 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/executors/__tests__/image-utils.test.d.ts +2 -0
- package/dist/executors/__tests__/image-utils.test.d.ts.map +1 -0
- package/dist/executors/__tests__/image-utils.test.js +25 -0
- package/dist/executors/__tests__/image-utils.test.js.map +1 -0
- package/dist/executors/base.executor.d.ts +2 -0
- package/dist/executors/base.executor.d.ts.map +1 -1
- package/dist/executors/base.executor.js +6 -0
- package/dist/executors/base.executor.js.map +1 -1
- package/dist/executors/image-utils.d.ts.map +1 -1
- package/dist/executors/image-utils.js +10 -8
- package/dist/executors/image-utils.js.map +1 -1
- package/dist/git/git-cli.d.ts +2 -0
- package/dist/git/git-cli.d.ts.map +1 -1
- package/dist/git/git-cli.js +2 -0
- package/dist/git/git-cli.js.map +1 -1
- package/dist/git/worktree.manager.d.ts +2 -1
- package/dist/git/worktree.manager.d.ts.map +1 -1
- package/dist/git/worktree.manager.js +18 -12
- package/dist/git/worktree.manager.js.map +1 -1
- package/dist/index.js +16 -31
- package/dist/index.js.map +1 -1
- package/dist/mcp/http-client.d.ts +1 -0
- package/dist/mcp/http-client.d.ts.map +1 -1
- package/dist/mcp/http-client.js +3 -0
- package/dist/mcp/http-client.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sessions.js +2 -2
- package/dist/mcp/tools/sessions.js.map +1 -1
- package/dist/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/mcp/tools/workspaces.js +2 -1
- package/dist/mcp/tools/workspaces.js.map +1 -1
- package/dist/middleware/access-auth.d.ts +1 -0
- package/dist/middleware/access-auth.d.ts.map +1 -1
- package/dist/middleware/access-auth.js +1 -1
- package/dist/middleware/access-auth.js.map +1 -1
- package/dist/output/__tests__/text-block-lifecycle.test.d.ts +2 -0
- package/dist/output/__tests__/text-block-lifecycle.test.d.ts.map +1 -0
- package/dist/output/__tests__/text-block-lifecycle.test.js +241 -0
- package/dist/output/__tests__/text-block-lifecycle.test.js.map +1 -0
- package/dist/output/claude-code-parser.d.ts +3 -0
- package/dist/output/claude-code-parser.d.ts.map +1 -1
- package/dist/output/claude-code-parser.js +58 -7
- package/dist/output/claude-code-parser.js.map +1 -1
- package/dist/output/codex-parser.d.ts.map +1 -1
- package/dist/output/codex-parser.js +4 -6
- package/dist/output/codex-parser.js.map +1 -1
- package/dist/output/cursor-agent-parser.d.ts.map +1 -1
- package/dist/output/cursor-agent-parser.js +4 -0
- package/dist/output/cursor-agent-parser.js.map +1 -1
- package/dist/output/gemini-parser.d.ts +18 -0
- package/dist/output/gemini-parser.d.ts.map +1 -0
- package/dist/output/gemini-parser.js +91 -0
- package/dist/output/gemini-parser.js.map +1 -0
- package/dist/output/msg-store.d.ts +6 -0
- package/dist/output/msg-store.d.ts.map +1 -1
- package/dist/output/msg-store.js +17 -0
- package/dist/output/msg-store.js.map +1 -1
- package/dist/output/text-block-tracker.d.ts +29 -0
- package/dist/output/text-block-tracker.d.ts.map +1 -0
- package/dist/output/text-block-tracker.js +149 -0
- package/dist/output/text-block-tracker.js.map +1 -0
- package/dist/output/types.d.ts +9 -0
- package/dist/output/types.d.ts.map +1 -1
- package/dist/output/types.js +0 -4
- package/dist/output/types.js.map +1 -1
- package/dist/routes/__tests__/sessions-runtime.test.js +3 -0
- package/dist/routes/__tests__/sessions-runtime.test.js.map +1 -1
- package/dist/routes/__tests__/team-run-translations.test.d.ts +2 -0
- package/dist/routes/__tests__/team-run-translations.test.d.ts.map +1 -0
- package/dist/routes/__tests__/team-run-translations.test.js +418 -0
- package/dist/routes/__tests__/team-run-translations.test.js.map +1 -0
- package/dist/routes/__tests__/translations.test.d.ts +2 -0
- package/dist/routes/__tests__/translations.test.d.ts.map +1 -0
- package/dist/routes/__tests__/translations.test.js +286 -0
- package/dist/routes/__tests__/translations.test.js.map +1 -0
- package/dist/routes/__tests__/workspaces.test.js +140 -0
- package/dist/routes/__tests__/workspaces.test.js.map +1 -1
- package/dist/routes/conversations.d.ts.map +1 -1
- package/dist/routes/conversations.js +19 -2
- package/dist/routes/conversations.js.map +1 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +32 -3
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/team-runs.d.ts.map +1 -1
- package/dist/routes/team-runs.js +84 -15
- package/dist/routes/team-runs.js.map +1 -1
- package/dist/routes/translations.d.ts +4 -0
- package/dist/routes/translations.d.ts.map +1 -0
- package/dist/routes/translations.js +148 -0
- package/dist/routes/translations.js.map +1 -0
- package/dist/routes/user-input-origin.d.ts +4 -0
- package/dist/routes/user-input-origin.d.ts.map +1 -0
- package/dist/routes/user-input-origin.js +7 -0
- package/dist/routes/user-input-origin.js.map +1 -0
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/routes/workspaces.js +32 -2
- package/dist/routes/workspaces.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js +2 -2
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-submission.test.d.ts +2 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.js +88 -0
- package/dist/runtime/__tests__/acp-driver-submission.test.js.map +1 -0
- package/dist/runtime/__tests__/acp-history-reconciler.test.js +244 -0
- package/dist/runtime/__tests__/acp-history-reconciler.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-projector.test.js +36 -0
- package/dist/runtime/__tests__/acp-projector.test.js.map +1 -1
- package/dist/runtime/__tests__/claude-cli-control.test.js +20 -0
- package/dist/runtime/__tests__/claude-cli-control.test.js.map +1 -1
- package/dist/runtime/__tests__/cli-driver-submission.test.d.ts +2 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.js +61 -0
- package/dist/runtime/__tests__/cli-driver-submission.test.js.map +1 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js +25 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js.map +1 -1
- package/dist/runtime/acp/acp-driver.js +38 -1
- package/dist/runtime/acp/acp-driver.js.map +1 -1
- package/dist/runtime/acp/history-reconciler.d.ts.map +1 -1
- package/dist/runtime/acp/history-reconciler.js +95 -36
- package/dist/runtime/acp/history-reconciler.js.map +1 -1
- package/dist/runtime/acp/projector.d.ts +5 -2
- package/dist/runtime/acp/projector.d.ts.map +1 -1
- package/dist/runtime/acp/projector.js +50 -23
- package/dist/runtime/acp/projector.js.map +1 -1
- package/dist/runtime/claude-cli-control.d.ts +4 -1
- package/dist/runtime/claude-cli-control.d.ts.map +1 -1
- package/dist/runtime/claude-cli-control.js +3 -1
- package/dist/runtime/claude-cli-control.js.map +1 -1
- package/dist/runtime/cli-driver.js +21 -7
- package/dist/runtime/cli-driver.js.map +1 -1
- package/dist/runtime/cli-parser.d.ts.map +1 -1
- package/dist/runtime/cli-parser.js +3 -0
- package/dist/runtime/cli-parser.js.map +1 -1
- package/dist/runtime/codex-cli-control.d.ts +4 -1
- package/dist/runtime/codex-cli-control.d.ts.map +1 -1
- package/dist/runtime/codex-cli-control.js +9 -6
- package/dist/runtime/codex-cli-control.js.map +1 -1
- package/dist/runtime/codex-cli-projector.d.ts +1 -1
- package/dist/runtime/codex-cli-projector.d.ts.map +1 -1
- package/dist/runtime/codex-cli-projector.js +4 -2
- package/dist/runtime/codex-cli-projector.js.map +1 -1
- package/dist/runtime/contracts.d.ts +15 -2
- package/dist/runtime/contracts.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.js +34 -1
- package/dist/runtime/runtime-coordinator.js.map +1 -1
- package/dist/services/__tests__/conflict-admission.test.d.ts +2 -0
- package/dist/services/__tests__/conflict-admission.test.d.ts.map +1 -0
- package/dist/services/__tests__/conflict-admission.test.js +37 -0
- package/dist/services/__tests__/conflict-admission.test.js.map +1 -0
- package/dist/services/__tests__/conflict-recovery-key.test.d.ts +2 -0
- package/dist/services/__tests__/conflict-recovery-key.test.d.ts.map +1 -0
- package/dist/services/__tests__/conflict-recovery-key.test.js +143 -0
- package/dist/services/__tests__/conflict-recovery-key.test.js.map +1 -0
- package/dist/services/__tests__/message-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/message-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/message-delivery.integration.test.js +1137 -0
- package/dist/services/__tests__/message-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.d.ts +2 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.js +200 -0
- package/dist/services/__tests__/review-team-user-counterexamples.test.js.map +1 -0
- package/dist/services/__tests__/session-manager.lifecycle.test.js +37 -0
- package/dist/services/__tests__/session-manager.lifecycle.test.js.map +1 -1
- package/dist/services/__tests__/session-manager.team-run.test.js +19 -2
- package/dist/services/__tests__/session-manager.team-run.test.js.map +1 -1
- package/dist/services/__tests__/team-initial-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.js +469 -0
- package/dist/services/__tests__/team-initial-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/team-reconciler.service.test.js +102 -101
- package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
- package/dist/services/__tests__/team-room-delivery.test.d.ts +2 -0
- package/dist/services/__tests__/team-room-delivery.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-room-delivery.test.js +670 -0
- package/dist/services/__tests__/team-room-delivery.test.js.map +1 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.d.ts +2 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.js +622 -0
- package/dist/services/__tests__/team-user-delivery.integration.test.js.map +1 -0
- package/dist/services/__tests__/translation-client.test.d.ts +2 -0
- package/dist/services/__tests__/translation-client.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-client.test.js +240 -0
- package/dist/services/__tests__/translation-client.test.js.map +1 -0
- package/dist/services/__tests__/translation-protection.test.d.ts +2 -0
- package/dist/services/__tests__/translation-protection.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-protection.test.js +156 -0
- package/dist/services/__tests__/translation-protection.test.js.map +1 -0
- package/dist/services/__tests__/translation-queue.test.d.ts +2 -0
- package/dist/services/__tests__/translation-queue.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-queue.test.js +277 -0
- package/dist/services/__tests__/translation-queue.test.js.map +1 -0
- package/dist/services/__tests__/translation-room-admission.test.d.ts +2 -0
- package/dist/services/__tests__/translation-room-admission.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-room-admission.test.js +371 -0
- package/dist/services/__tests__/translation-room-admission.test.js.map +1 -0
- package/dist/services/__tests__/translation-session-blocks.test.d.ts +2 -0
- package/dist/services/__tests__/translation-session-blocks.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-session-blocks.test.js +367 -0
- package/dist/services/__tests__/translation-session-blocks.test.js.map +1 -0
- package/dist/services/__tests__/translation-settings.service.test.d.ts +2 -0
- package/dist/services/__tests__/translation-settings.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation-settings.service.test.js +154 -0
- package/dist/services/__tests__/translation-settings.service.test.js.map +1 -0
- package/dist/services/__tests__/translation.service.test.d.ts +2 -0
- package/dist/services/__tests__/translation.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/translation.service.test.js +480 -0
- package/dist/services/__tests__/translation.service.test.js.map +1 -0
- package/dist/services/access-auth.service.d.ts +1 -0
- package/dist/services/access-auth.service.d.ts.map +1 -1
- package/dist/services/access-auth.service.js +8 -0
- package/dist/services/access-auth.service.js.map +1 -1
- package/dist/services/attachment-context.d.ts +7 -1
- package/dist/services/attachment-context.d.ts.map +1 -1
- package/dist/services/attachment-context.js +23 -2
- package/dist/services/attachment-context.js.map +1 -1
- package/dist/services/conflict-admission.d.ts +37 -0
- package/dist/services/conflict-admission.d.ts.map +1 -0
- package/dist/services/conflict-admission.js +97 -0
- package/dist/services/conflict-admission.js.map +1 -0
- package/dist/services/conflict-resolution-context.d.ts +33 -0
- package/dist/services/conflict-resolution-context.d.ts.map +1 -0
- package/dist/services/conflict-resolution-context.js +434 -0
- package/dist/services/conflict-resolution-context.js.map +1 -0
- package/dist/services/message-delivery.service.d.ts +195 -0
- package/dist/services/message-delivery.service.d.ts.map +1 -0
- package/dist/services/message-delivery.service.js +956 -0
- package/dist/services/message-delivery.service.js.map +1 -0
- package/dist/services/project.service.d.ts +1 -1
- package/dist/services/session-manager.d.ts +94 -74
- package/dist/services/session-manager.d.ts.map +1 -1
- package/dist/services/session-manager.js +91 -17
- package/dist/services/session-manager.js.map +1 -1
- package/dist/services/task.service.d.ts +26 -20
- package/dist/services/task.service.d.ts.map +1 -1
- package/dist/services/task.service.js +9 -26
- package/dist/services/task.service.js.map +1 -1
- package/dist/services/team-room-delivery.d.ts +541 -0
- package/dist/services/team-room-delivery.d.ts.map +1 -0
- package/dist/services/team-room-delivery.js +123 -0
- package/dist/services/team-room-delivery.js.map +1 -0
- package/dist/services/team-run.service.d.ts +83 -0
- package/dist/services/team-run.service.d.ts.map +1 -1
- package/dist/services/team-run.service.js +207 -18
- package/dist/services/team-run.service.js.map +1 -1
- package/dist/services/team-scheduler.service.d.ts +3 -0
- package/dist/services/team-scheduler.service.d.ts.map +1 -1
- package/dist/services/team-scheduler.service.js +65 -11
- package/dist/services/team-scheduler.service.js.map +1 -1
- package/dist/services/team-task-input.d.ts +37 -0
- package/dist/services/team-task-input.d.ts.map +1 -0
- package/dist/services/team-task-input.js +98 -0
- package/dist/services/team-task-input.js.map +1 -0
- package/dist/services/team-task-input.service.d.ts +72 -0
- package/dist/services/team-task-input.service.d.ts.map +1 -0
- package/dist/services/team-task-input.service.js +205 -0
- package/dist/services/team-task-input.service.js.map +1 -0
- package/dist/services/translation-client.d.ts +31 -0
- package/dist/services/translation-client.d.ts.map +1 -0
- package/dist/services/translation-client.js +169 -0
- package/dist/services/translation-client.js.map +1 -0
- package/dist/services/translation-errors.d.ts +14 -0
- package/dist/services/translation-errors.d.ts.map +1 -0
- package/dist/services/translation-errors.js +16 -0
- package/dist/services/translation-errors.js.map +1 -0
- package/dist/services/translation-protection.d.ts +27 -0
- package/dist/services/translation-protection.d.ts.map +1 -0
- package/dist/services/translation-protection.js +547 -0
- package/dist/services/translation-protection.js.map +1 -0
- package/dist/services/translation-queue.d.ts +49 -0
- package/dist/services/translation-queue.d.ts.map +1 -0
- package/dist/services/translation-queue.js +211 -0
- package/dist/services/translation-queue.js.map +1 -0
- package/dist/services/translation-settings.service.d.ts +152 -0
- package/dist/services/translation-settings.service.d.ts.map +1 -0
- package/dist/services/translation-settings.service.js +174 -0
- package/dist/services/translation-settings.service.js.map +1 -0
- package/dist/services/translation.service.d.ts +168 -0
- package/dist/services/translation.service.d.ts.map +1 -0
- package/dist/services/translation.service.js +861 -0
- package/dist/services/translation.service.js.map +1 -0
- package/dist/services/workspace.service.d.ts +84 -93
- package/dist/services/workspace.service.d.ts.map +1 -1
- package/dist/services/workspace.service.js +69 -5
- package/dist/services/workspace.service.js.map +1 -1
- package/dist/socket/__tests__/socket-gateway.test.js +131 -1
- package/dist/socket/__tests__/socket-gateway.test.js.map +1 -1
- package/dist/socket/socket-gateway.d.ts +6 -0
- package/dist/socket/socket-gateway.d.ts.map +1 -1
- package/dist/socket/socket-gateway.js +312 -6
- package/dist/socket/socket-gateway.js.map +1 -1
- package/dist/utils/database-runtime.test.js +82 -5
- package/dist/utils/database-runtime.test.js.map +1 -1
- package/dist/utils/database-schema.d.ts +9 -0
- package/dist/utils/database-schema.d.ts.map +1 -0
- package/dist/utils/database-schema.js +434 -0
- package/dist/utils/database-schema.js.map +1 -0
- package/dist/utils/database-schema.test.d.ts +2 -0
- package/dist/utils/database-schema.test.d.ts.map +1 -0
- package/dist/utils/database-schema.test.js +359 -0
- package/dist/utils/database-schema.test.js.map +1 -0
- package/dist/utils/database-team-foundation.test.d.ts +2 -0
- package/dist/utils/database-team-foundation.test.d.ts.map +1 -0
- package/dist/utils/database-team-foundation.test.js +467 -0
- package/dist/utils/database-team-foundation.test.js.map +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +29 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/owned-child-process.test.js +6 -3
- package/dist/utils/owned-child-process.test.js.map +1 -1
- package/dist/utils/text-preview.d.ts +4 -0
- package/dist/utils/text-preview.d.ts.map +1 -0
- package/dist/utils/text-preview.js +21 -0
- package/dist/utils/text-preview.js.map +1 -0
- package/dist/web/assets/AgentDemoPage-BfXkNCdN.js +1 -0
- package/dist/web/assets/{AgentEnvironmentSettingsPage-SnxiaHvN.js → AgentEnvironmentSettingsPage-GHjKIWpb.js} +1 -1
- package/dist/web/assets/AttachmentPreview-CLN1lnLe.js +2 -0
- package/dist/web/assets/BranchSelect-Cofp8vYf.js +1 -0
- package/dist/web/assets/BrandLogo-BUimEX-9.js +1 -0
- package/dist/web/assets/ConversationPage-R7vNaOQv.js +1 -0
- package/dist/web/assets/CreateTaskInput-CasITF8y.js +1 -0
- package/dist/web/assets/{DemoPage-BHbnnZFF.js → DemoPage-DK-ikg1_.js} +3 -3
- package/dist/web/assets/DesignSystemPage-BhjNs2vP.js +12 -0
- package/dist/web/assets/EditableTaskTitle-BJ9Rxggf.js +70 -0
- package/dist/web/assets/{ExecutionPermissionSelector-DcC4IBOF.js → ExecutionPermissionSelector-B8befbxJ.js} +1 -1
- package/dist/web/assets/GeneralSettingsPage-RMN2al8I.js +1 -0
- package/dist/web/assets/{LoadingPreviewPage-dE_jyl19.js → LoadingPreviewPage-BDlf89rJ.js} +1 -1
- package/dist/web/assets/{McpSettingsPage-CIuQ4bvy.js → McpSettingsPage-CPNxFF67.js} +1 -1
- package/dist/web/assets/{MemberAvatar-BG0VDZKf.js → MemberAvatar-YVr_erAr.js} +1 -1
- package/dist/web/assets/MobileTaskDetail-QNUHMq7u.js +3 -0
- package/dist/web/assets/NotificationSettingsPage-BEyuyu3Z.js +1 -0
- package/dist/web/assets/ProfileSettingsPage-CHe4LlRp.js +3 -0
- package/dist/web/assets/ProjectKanbanPage-Bt_01giW.js +12 -0
- package/dist/web/assets/ProjectSettingsPage-cus6Ns97.js +2 -0
- package/dist/web/assets/{ProviderSettingsPage-DLq-GBxp.js → ProviderSettingsPage-DqA_B1Ey.js} +2 -2
- package/dist/web/assets/{SettingsMasterDetail-UfyoKAum.js → SettingsMasterDetail-DjWR9Sqk.js} +1 -1
- package/dist/web/assets/TaskDetail-rEXNe2h3.js +1 -0
- package/dist/web/assets/TeamSettingsPage-DwWROtW6.js +1 -0
- package/dist/web/assets/TranslationSettingsPage-Cod9c4Ug.js +1 -0
- package/dist/web/assets/arc-DEy33vTc.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-BCNj6ZWE.js → architectureDiagram-3BPJPVTR-Ky1D1LBk.js} +1 -1
- package/dist/web/assets/{at-sign-C4VhWike.js → at-sign-C48_y345.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-D1kmB9gz.js → blockDiagram-GPEHLZMM-BNgB7kNT.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DbWKTkSe.js → c4Diagram-AAUBKEIU-4GMrPMgQ.js} +1 -1
- package/dist/web/assets/channel-DTP-syjA.js +1 -0
- package/dist/web/assets/check-BmiJ7qMY.js +1 -0
- package/dist/web/assets/chevron-down-3y5Aiolp.js +1 -0
- package/dist/web/assets/{chevron-up-DOkDFvIc.js → chevron-up-DqaYcjpq.js} +1 -1
- package/dist/web/assets/{chunk-2J33WTMH-B3TA0-LD.js → chunk-2J33WTMH-C439hRe_.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CvPTiBSV.js → chunk-4BX2VUAB-D8GK3M3t.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-xGe9Fu9Z.js → chunk-55IACEB6-Dl4UhJ8X.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-H8pz3amK.js → chunk-727SXJPM-BSEeayBq.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-BmYYNxcL.js → chunk-AQP2D5EJ-B6chbZfT.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-BmOEsLTE.js → chunk-FMBD7UC4-DaLkiLdQ.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-C5MfA0xc.js → chunk-ND2GUHAM-DeQwZAAT.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-BcrGYZ7V.js → chunk-QZHKN3VN-CLRr4YRM.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-CUKgurLa.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CUKgurLa.js +1 -0
- package/dist/web/assets/code-block-OCS4YCEC-CnoxUpOx.js +2 -0
- package/dist/web/assets/confirm-dialog-ltNBFYCs.js +1 -0
- package/dist/web/assets/content-DPQMfMae.js +2 -0
- package/dist/web/assets/{copy-CdzVE3kf.js → copy-HRMhTkIG.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-CLQ-m71G.js → cose-bilkent-S5V4N54A-C1UiYzfk.js} +1 -1
- package/dist/web/assets/cssMode-DkuSsGeg.js +1 -0
- package/dist/web/assets/{dagre-BM42HDAG-CmDqxOfn.js → dagre-BM42HDAG-CTJpBgye.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-D-fSbEll.js → diagram-2AECGRRQ-Dj1_TEYp.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-HPywThAf.js → diagram-5GNKFQAL-V-KUpwqh.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DAzLhllz.js → diagram-KO2AKTUF-CXG1ZIeX.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-DXYB9h8L.js → diagram-LMA3HP47-BZSJUwk9.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-vv4kz4Zo.js → diagram-OG6HWLK6-CCr4gq4u.js} +1 -1
- package/dist/web/assets/dialog-CuFEdqLg.js +5 -0
- package/dist/web/assets/{erDiagram-TEJ5UH35-Cu6aVKAa.js → erDiagram-TEJ5UH35-Djtyzh6z.js} +1 -1
- package/dist/web/assets/{flowDiagram-I6XJVG4X-BKDe8WSQ.js → flowDiagram-I6XJVG4X-BmSVSiXJ.js} +1 -1
- package/dist/web/assets/{freemarker2-DI2giuAo.js → freemarker2-DdptX5f1.js} +2 -2
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DMVLzmAE.js → ganttDiagram-6RSMTGT7-r5vQX-b5.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-vogzYdKn.js → gitGraphDiagram-PVQCEYII-Zj9aloh9.js} +1 -1
- package/dist/web/assets/{globe-Rnn-nKw-.js → globe-B9I-jHBB.js} +1 -1
- package/dist/web/assets/handlebars-B34f-LAf.js +1 -0
- package/dist/web/assets/hooks-BLxb16IA.js +1 -0
- package/dist/web/assets/html-CnvOQ63o.js +1 -0
- package/dist/web/assets/htmlMode-RdxZ8Svp.js +1 -0
- package/dist/web/assets/{icon-button-CuSuXgr_.js → icon-button-CYiKa-7C.js} +1 -1
- package/dist/web/assets/index-0XPZayUU.css +1 -0
- package/dist/web/assets/index-B1oVmCie.js +1 -0
- package/dist/web/assets/index-BJObbxud.js +122 -0
- package/dist/web/assets/index-Bhvt-E6d.js +41 -0
- package/dist/web/assets/index-BtUQYU5l.js +1 -0
- package/dist/web/assets/index-CThFsQNP.js +1 -0
- package/dist/web/assets/index-DZLnTISJ.js +1 -0
- package/dist/web/assets/index-DcOU2m2F.js +1 -0
- package/dist/web/assets/{index-CMjLMilU.js → index-Dk3bRQAK.js} +1 -1
- package/dist/web/assets/{index-B88xAivn.js → index-DkRy6eNX.js} +5 -5
- package/dist/web/assets/{infoDiagram-5YYISTIA-CEfSHkNq.js → infoDiagram-5YYISTIA-BHtVaxZx.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BXKZuWtD.js → ishikawaDiagram-YF4QCWOH-BYmwjkbC.js} +5 -5
- package/dist/web/assets/javascript-BhombDEO.js +1 -0
- package/dist/web/assets/{journeyDiagram-JHISSGLW-wsOUYlu7.js → journeyDiagram-JHISSGLW-c8BBqqRS.js} +1 -1
- package/dist/web/assets/jsonMode-BJGOUeaV.js +7 -0
- package/dist/web/assets/{kanban-definition-UN3LZRKU-DNsuvOrU.js → kanban-definition-UN3LZRKU-D4Vr-oFT.js} +1 -1
- package/dist/web/assets/{kbd-B3m64lRd.js → kbd-C88ut3t9.js} +1 -1
- package/dist/web/assets/{key-round-DpYSyeDH.js → key-round-Cjbj2qNa.js} +1 -1
- package/dist/web/assets/{layers-CxqMQVmH.js → layers-eaHAVcc3.js} +1 -1
- package/dist/web/assets/{linear-BmmCZdOQ.js → linear-opi90s0L.js} +1 -1
- package/dist/web/assets/{link-DbSpzB1w.js → link-BSGb85gq.js} +1 -1
- package/dist/web/assets/liquid-Czy1WpPz.js +1 -0
- package/dist/web/assets/{lspLanguageFeatures-WhdC7zdf.js → lspLanguageFeatures-DWu2Ubf0.js} +1 -1
- package/dist/web/assets/mdx-DhXfoSnM.js +1 -0
- package/dist/web/assets/menu--sjyisSg.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-DmKVQY9m.js → mermaid-NOHMQCX5-BSNbBj78.js} +71 -71
- package/dist/web/assets/{message-square-CfNb-MTd.js → message-square-BLEJN6p7.js} +1 -1
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-0RzXjZ9G.js → mindmap-definition-RKZ34NQL-BN3ZjBh-.js} +1 -1
- package/dist/web/assets/{modal-Kpqn-nDO.js → modal-CSGOqphK.js} +1 -1
- package/dist/web/assets/{monaco-I1fXAMIt.js → monaco-BkuNyOkP.js} +3 -3
- package/dist/web/assets/{paperclip-BBrzKZQC.js → paperclip-CTNoXpUW.js} +1 -1
- package/dist/web/assets/{pencil-pzVKblxj.js → pencil-Cp70ZwtG.js} +1 -1
- package/dist/web/assets/{people-C6b3eeLq.js → people-DT78SebR.js} +1 -1
- package/dist/web/assets/{pieDiagram-4H26LBE5-Bcvzb8TW.js → pieDiagram-4H26LBE5-CfmFHpPI.js} +2 -2
- package/dist/web/assets/popover-BiVxGGgp.js +1 -0
- package/dist/web/assets/python-DIcQDjcf.js +1 -0
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DwNhxMxj.js → quadrantDiagram-W4KKPZXB-CeaumJAa.js} +1 -1
- package/dist/web/assets/razor-DYK6Rxer.js +1 -0
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-D2wSGYn2.js → requirementDiagram-4Y6WPE33-BWWCDXCE.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-l3LLF--T.js → sankeyDiagram-5OEKKPKP-DAJut743.js} +1 -1
- package/dist/web/assets/search-DniD_AGC.js +1 -0
- package/dist/web/assets/search-field-CQLDXLeA.js +1 -0
- package/dist/web/assets/select-B5RYunTs.js +1 -0
- package/dist/web/assets/{select-DGwKE4l0.js → select-BPdJrr5M.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BAGsbTS_.js → sequenceDiagram-3UESZ5HK-CynjRGW4.js} +1 -1
- package/dist/web/assets/{server-BIPZ9Ka-.js → server-xswxWpKD.js} +1 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-amAtpx9w.js +1 -0
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-V-lSceg1.js +1 -0
- package/dist/web/assets/{textarea-Bnfq7adW.js → textarea-BVyPl9rM.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-Dt-DcRrG.js → timeline-definition-PNZ67QCA-DZ9W7WlP.js} +1 -1
- package/dist/web/assets/toggles-QcIz43DP.js +1 -0
- package/dist/web/assets/tooltip-CPqGK_WZ.js +1 -0
- package/dist/web/assets/{track-B_K578io.js → track-Ckye0-tt.js} +1 -1
- package/dist/web/assets/{trash-2-ALAYDudv.js → trash-2-CvUJsbtT.js} +1 -1
- package/dist/web/assets/tsMode-c5x0d47n.js +11 -0
- package/dist/web/assets/typescript-i7eYblLt.js +1 -0
- package/dist/web/assets/{upload-D7hKT2VA.js → upload-CsXAmAun.js} +1 -1
- package/dist/web/assets/{use-profiles-Ncqxdw7S.js → use-profiles-DuXaBRju.js} +1 -1
- package/dist/web/assets/{use-projects-Dwy9AfAG.js → use-projects-Ddz0knyr.js} +1 -1
- package/dist/web/assets/{use-providers-BRyZjuBG.js → use-providers-Td1-gyrN.js} +1 -1
- package/dist/web/assets/use-translation-settings-NYM0lmBx.js +1 -0
- package/dist/web/assets/use-workspaces-CdJZLmGh.js +1 -0
- package/dist/web/assets/useNormalizedLogs--RbVywYa.js +1 -0
- package/dist/web/assets/useTokenUsage-DDXf7E4p.js +1 -0
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Cr55FtiY.js → vennDiagram-CIIHVFJN-CB2Ubvy9.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-CtwMk9MJ.js → wardley-L42UT6IY-BXOkk77I.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-BeyHmTu3.js → wardleyDiagram-YWT4CUSO-VA6ywdQQ.js} +1 -1
- package/dist/web/assets/xml-D2EGActB.js +1 -0
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-9g34Lq8E.js → xychartDiagram-2RQKCTM6-FNcvDj5G.js} +1 -1
- package/dist/web/assets/yaml-jeiIZSL4.js +1 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@agent-tower/shared/dist/index.d.ts +1 -0
- package/node_modules/@agent-tower/shared/dist/index.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/index.js +1 -0
- package/node_modules/@agent-tower/shared/dist/index.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts +11 -0
- package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/log-adapter.js +2 -0
- package/node_modules/@agent-tower/shared/dist/log-adapter.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/socket/events.d.ts +5 -2
- package/node_modules/@agent-tower/shared/dist/socket/events.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/socket/events.js +2 -0
- package/node_modules/@agent-tower/shared/dist/socket/events.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/translation.d.ts +306 -0
- package/node_modules/@agent-tower/shared/dist/translation.d.ts.map +1 -0
- package/node_modules/@agent-tower/shared/dist/translation.js +8 -0
- package/node_modules/@agent-tower/shared/dist/translation.js.map +1 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts +23 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20261016000000_add_translation_foundation/migration.sql +104 -0
- package/prisma/migrations/20261016010000_add_message_deliveries/migration.sql +158 -0
- package/prisma/migrations/20261019000000_add_room_translation_eligibility/migration.sql +3 -0
- package/prisma/migrations/20261019100000_add_team_delivery_foundation/migration.sql +217 -0
- package/prisma/schema.prisma +224 -0
- package/dist/web/assets/AgentDemoPage-CaR_Yk9_.js +0 -1
- package/dist/web/assets/BranchSelect-D-kqavDG.js +0 -1
- package/dist/web/assets/BrandLogo-CC1alVsd.js +0 -1
- package/dist/web/assets/ConversationPage-RWKLxe1j.js +0 -3
- package/dist/web/assets/CreateTaskInput-SHJ1YpRe.js +0 -1
- package/dist/web/assets/DesignSystemPage-ChCrzeKT.js +0 -12
- package/dist/web/assets/EditableTaskTitle-CGVeZUSt.js +0 -70
- package/dist/web/assets/GeneralSettingsPage-C_tkwpmF.js +0 -1
- package/dist/web/assets/MobileTaskDetail-DxE6ZDAS.js +0 -5
- package/dist/web/assets/NotificationSettingsPage-B-Ot2OMg.js +0 -1
- package/dist/web/assets/ProfileSettingsPage-Dn1lrjJr.js +0 -3
- package/dist/web/assets/ProjectKanbanPage-jcW8sA7x.js +0 -12
- package/dist/web/assets/ProjectSettingsPage-BFPty2eA.js +0 -2
- package/dist/web/assets/TaskDetail-a1jalILy.js +0 -3
- package/dist/web/assets/TeamSettingsPage-BxGc4W7K.js +0 -1
- package/dist/web/assets/arc-dhk0OSs5.js +0 -1
- package/dist/web/assets/channel-K0AG6Tl1.js +0 -1
- package/dist/web/assets/check-DYlb0A_N.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-BTJ44hwx.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BTJ44hwx.js +0 -1
- package/dist/web/assets/code-block-OCS4YCEC-DLPrDBDy.js +0 -2
- package/dist/web/assets/confirm-dialog-BRkrtULz.js +0 -1
- package/dist/web/assets/content-DPCGELMz.js +0 -2
- package/dist/web/assets/cssMode-ChMyv9Nj.js +0 -1
- package/dist/web/assets/dialog-B_vC5R4B.js +0 -5
- package/dist/web/assets/handlebars-B9tmKQPV.js +0 -1
- package/dist/web/assets/hooks-DK4m7-FN.js +0 -1
- package/dist/web/assets/html-B_E2U0g5.js +0 -1
- package/dist/web/assets/htmlMode-DRHM_Cwq.js +0 -1
- package/dist/web/assets/index-B6Lvy5Sr.js +0 -1
- package/dist/web/assets/index-BCV57B4O.js +0 -41
- package/dist/web/assets/index-CTG-4w90.js +0 -1
- package/dist/web/assets/index-Cz73HpYH.js +0 -122
- package/dist/web/assets/index-CzvAGoau.css +0 -1
- package/dist/web/assets/index-DENY_U7o.js +0 -1
- package/dist/web/assets/index-ZO2tqdha.js +0 -1
- package/dist/web/assets/javascript-ClWqjgn3.js +0 -1
- package/dist/web/assets/jsonMode-DVAoDfae.js +0 -7
- package/dist/web/assets/liquid-CZf3xdoq.js +0 -1
- package/dist/web/assets/mdx-xzVEPP01.js +0 -1
- package/dist/web/assets/menu-0A0v_lRV.js +0 -1
- package/dist/web/assets/popover-BYz89aiY.js +0 -1
- package/dist/web/assets/python-DL05HvW4.js +0 -1
- package/dist/web/assets/razor-BCZ3_uDf.js +0 -1
- package/dist/web/assets/search-field-B5czD2Pl.js +0 -1
- package/dist/web/assets/select-yem-xN9Z.js +0 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-C0BHmXYX.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Be3UCkeQ.js +0 -1
- package/dist/web/assets/toggles-DxNDJZsN.js +0 -1
- package/dist/web/assets/tooltip-CHOgkFbE.js +0 -1
- package/dist/web/assets/tsMode-kXxq-Lw7.js +0 -11
- package/dist/web/assets/typescript-E3_QcT_u.js +0 -1
- package/dist/web/assets/use-attachments-CK7y5KsN.js +0 -2
- package/dist/web/assets/use-workspaces-BBbahdwU.js +0 -1
- package/dist/web/assets/useNormalizedLogs-CRHRedwp.js +0 -1
- package/dist/web/assets/useTokenUsage-YwiF0xnT.js +0 -1
- package/dist/web/assets/xml-DxKND8qX.js +0 -1
- package/dist/web/assets/yaml-BqpCqTY6.js +0 -1
|
@@ -4,7 +4,7 @@ import { getProviderById, ExecutionEnv, isPreChildProcessFailure, markPreChildPr
|
|
|
4
4
|
import { filterAgentSubprocessExternalEnv } from '../executors/execution-env.js';
|
|
5
5
|
import { sessionMsgStoreManager, createUserMessage, addNormalizedEntry, } from '../output/index.js';
|
|
6
6
|
import { execGit } from '../git/git-cli.js';
|
|
7
|
-
import { getCommitMessageService } from '../core/container.js';
|
|
7
|
+
import { getCommitMessageService, getTranslationService } from '../core/container.js';
|
|
8
8
|
import { TeamReconcilerService } from './team-reconciler.service.js';
|
|
9
9
|
import { acquireTeamMemberAdmission } from './team-member-admission-barrier.js';
|
|
10
10
|
import { NotFoundError, ServiceError, ValidationError } from '../errors.js';
|
|
@@ -106,6 +106,8 @@ function isAgentProgressPatch(patch) {
|
|
|
106
106
|
return false;
|
|
107
107
|
}
|
|
108
108
|
return patch.some((op) => {
|
|
109
|
+
if (op && typeof op === 'object' && 'path' in op && /\/metadata$/.test(String(op.path)) && 'value' in op && op.value && typeof op.value === 'object' && Object.keys(op.value).every(key => key === 'textBlock'))
|
|
110
|
+
return false;
|
|
109
111
|
const value = op?.value;
|
|
110
112
|
if (!value || typeof value !== 'object') {
|
|
111
113
|
// 非整条 entry 写入(如对 /entries/N/content 的流式更新)视为 agent 进展。
|
|
@@ -130,6 +132,10 @@ function hasCompletePersistedSnapshot(session) {
|
|
|
130
132
|
export class SessionManager {
|
|
131
133
|
eventBus;
|
|
132
134
|
executionPermissions;
|
|
135
|
+
deliveryService;
|
|
136
|
+
setMessageDeliveryService(service) { this.deliveryService = service; }
|
|
137
|
+
resumeConversationQueue(sessionId) { this.kickConversationQueue(sessionId); }
|
|
138
|
+
translationBoundaryPending = new Set();
|
|
133
139
|
snapshotFlushTimers = new Map();
|
|
134
140
|
snapshotFlushChains = new Map();
|
|
135
141
|
sessionPersistenceWriterChain = Promise.resolve();
|
|
@@ -172,6 +178,7 @@ export class SessionManager {
|
|
|
172
178
|
/** Durable conversation turns are consumed one at a time per Session. */
|
|
173
179
|
conversationQueueWorkers = new Map();
|
|
174
180
|
conversationQueueStopping = false;
|
|
181
|
+
pendingConversationQueueKicks = new Set();
|
|
175
182
|
artifactService = new AgentArtifactService();
|
|
176
183
|
static SNAPSHOT_CHECKPOINT_MS = 15_000;
|
|
177
184
|
static HEARTBEAT_THROTTLE_MS = 30_000;
|
|
@@ -350,22 +357,27 @@ export class SessionManager {
|
|
|
350
357
|
}
|
|
351
358
|
/** Recover turns left in RUNNING state by an interrupted server process. */
|
|
352
359
|
async startConversationQueue() {
|
|
353
|
-
this.conversationQueueStopping =
|
|
360
|
+
this.conversationQueueStopping = true;
|
|
354
361
|
await prisma.conversationTurn.updateMany({
|
|
355
|
-
where: { status: CONVERSATION_TURN_RUNNING },
|
|
362
|
+
where: { status: CONVERSATION_TURN_RUNNING, deliveryId: null },
|
|
356
363
|
data: {
|
|
357
364
|
status: CONVERSATION_TURN_QUEUED,
|
|
358
365
|
startedAt: null,
|
|
359
366
|
},
|
|
360
367
|
});
|
|
368
|
+
const interruptedDeliveries = await prisma.conversationTurn.findMany({ where: { status: CONVERSATION_TURN_RUNNING, deliveryId: { not: null } }, include: { delivery: true } });
|
|
369
|
+
for (const turn of interruptedDeliveries)
|
|
370
|
+
await prisma.conversationTurn.update({ where: { id: turn.id }, data: { status: turn.delivery?.state === 'SENT' ? CONVERSATION_TURN_FAILED : turn.delivery?.state === 'ACCEPTED' ? CONVERSATION_TURN_QUEUED : 'PAUSED', lastError: 'INTERRUPTED_EXECUTION' } });
|
|
361
371
|
const pending = await prisma.conversationTurn.findMany({
|
|
362
372
|
where: { status: CONVERSATION_TURN_QUEUED },
|
|
363
373
|
select: { sessionId: true },
|
|
364
374
|
distinct: ['sessionId'],
|
|
365
375
|
});
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
376
|
+
const sessions = new Set([...pending.map(turn => turn.sessionId), ...this.pendingConversationQueueKicks]);
|
|
377
|
+
this.pendingConversationQueueKicks.clear();
|
|
378
|
+
this.conversationQueueStopping = false;
|
|
379
|
+
for (const sessionId of sessions)
|
|
380
|
+
this.kickConversationQueue(sessionId);
|
|
369
381
|
}
|
|
370
382
|
/** Stop scheduling new work during the Fastify shutdown phase. */
|
|
371
383
|
stopConversationQueue() {
|
|
@@ -468,7 +480,20 @@ export class SessionManager {
|
|
|
468
480
|
authorizeDelivery();
|
|
469
481
|
await this.runtimeCoordinator.resolvePermission(sessionId, requestId, optionId, authorizeDelivery);
|
|
470
482
|
}
|
|
471
|
-
async create(workspaceId, agentType, prompt, variant = 'DEFAULT', providerId) {
|
|
483
|
+
async create(workspaceId, agentType, prompt, variant = 'DEFAULT', providerId, input) {
|
|
484
|
+
const fingerprint = createHash('sha256').update(JSON.stringify([workspaceId, agentType, prompt, variant, providerId ?? null, input?.attachmentIds ?? [], !!input?.retryTask])).digest('hex');
|
|
485
|
+
if (input?.clientSubmissionId) {
|
|
486
|
+
const existing = await prisma.session.findUnique({ where: { creationSubmissionId: input.clientSubmissionId } });
|
|
487
|
+
if (existing) {
|
|
488
|
+
if (existing.workspaceId !== workspaceId || existing.creationFingerprint !== fingerprint)
|
|
489
|
+
throw new ServiceError('Submission identity conflict', 'DELIVERY_CONFLICT', 409);
|
|
490
|
+
const workspace = await prisma.workspace.findUnique({ where: { id: workspaceId }, include: { task: true } });
|
|
491
|
+
if (!workspace)
|
|
492
|
+
throw new NotFoundError('Workspace', workspaceId);
|
|
493
|
+
ensureTaskNotDeleted(workspace.task);
|
|
494
|
+
return existing;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
472
497
|
const workspace = await prisma.workspace.findUnique({
|
|
473
498
|
where: { id: workspaceId },
|
|
474
499
|
include: { task: true },
|
|
@@ -491,6 +516,9 @@ export class SessionManager {
|
|
|
491
516
|
}
|
|
492
517
|
return prisma.session.create({
|
|
493
518
|
data: {
|
|
519
|
+
creationSubmissionId: input?.clientSubmissionId,
|
|
520
|
+
creationFingerprint: fingerprint,
|
|
521
|
+
inputIntent: JSON.stringify({ attachmentIds: input?.attachmentIds ?? [], retryTask: !!input?.retryTask }),
|
|
494
522
|
workspaceId,
|
|
495
523
|
context: SessionContext.WORKSPACE,
|
|
496
524
|
agentType,
|
|
@@ -500,9 +528,13 @@ export class SessionManager {
|
|
|
500
528
|
prompt,
|
|
501
529
|
status: SessionStatus.PENDING,
|
|
502
530
|
},
|
|
531
|
+
}).catch(async (error) => {
|
|
532
|
+
if (error.code === 'P2002' && input?.clientSubmissionId)
|
|
533
|
+
return this.create(workspaceId, agentType, prompt, variant, providerId, input);
|
|
534
|
+
throw error;
|
|
503
535
|
});
|
|
504
536
|
}
|
|
505
|
-
async start(id) {
|
|
537
|
+
async start(id, input = {}) {
|
|
506
538
|
console.log('[SessionManager] 🚀 Starting session:', id);
|
|
507
539
|
const startOperation = this.reserveInitialStartOperation(id);
|
|
508
540
|
try {
|
|
@@ -527,7 +559,9 @@ export class SessionManager {
|
|
|
527
559
|
// publication inside startRuntimeTurn(). A later stop is then observed by
|
|
528
560
|
// the runtime admission signal instead of being lost between the gates.
|
|
529
561
|
startOperation.throwIfStopped();
|
|
530
|
-
|
|
562
|
+
if (input.deliveryId)
|
|
563
|
+
this.appendUserMessageEntry(session, input.originalText ?? session.prompt, `user:${input.deliveryId}`, input.deliveryId);
|
|
564
|
+
await this.startRuntimeTurn(session, input.prompt ?? session.prompt, session.externalSessionId, session.providerId, 'load', undefined, true, undefined, false, input);
|
|
531
565
|
return session;
|
|
532
566
|
}
|
|
533
567
|
finally {
|
|
@@ -662,13 +696,13 @@ export class SessionManager {
|
|
|
662
696
|
}
|
|
663
697
|
}
|
|
664
698
|
await this.waitForPendingAutoCommit(id);
|
|
665
|
-
const userEntryId = options.
|
|
699
|
+
const userEntryId = this.appendUserMessageEntry(session, options.originalText ?? message, options.userEntryId, options.deliveryId);
|
|
666
700
|
const agentSessionId = session.externalSessionId
|
|
667
701
|
?? this.resolveAgentSessionId(id, session.logSnapshot);
|
|
668
702
|
if (providerId && providerId !== session.providerId) {
|
|
669
703
|
await this.runtimeCoordinator.disposeSession(id);
|
|
670
704
|
}
|
|
671
|
-
await this.startRuntimeTurn(session, message, agentSessionId, effectiveProviderId, resumeMode, userEntryId, false, expectedTeamRunInvocationId, true);
|
|
705
|
+
await this.startRuntimeTurn(session, message, agentSessionId, effectiveProviderId, resumeMode, userEntryId, false, expectedTeamRunInvocationId, true, options);
|
|
672
706
|
return session;
|
|
673
707
|
}
|
|
674
708
|
finally {
|
|
@@ -865,9 +899,12 @@ export class SessionManager {
|
|
|
865
899
|
clearAgentApiCredentials();
|
|
866
900
|
}
|
|
867
901
|
kickConversationQueue(sessionId) {
|
|
868
|
-
if (this.conversationQueueStopping
|
|
902
|
+
if (this.conversationQueueStopping) {
|
|
903
|
+
this.pendingConversationQueueKicks.add(sessionId);
|
|
869
904
|
return;
|
|
870
905
|
}
|
|
906
|
+
if (this.conversationQueueWorkers.has(sessionId))
|
|
907
|
+
return;
|
|
871
908
|
const worker = new Promise((resolve, reject) => {
|
|
872
909
|
setImmediate(() => {
|
|
873
910
|
this.processConversationQueue(sessionId).then(resolve, reject);
|
|
@@ -915,6 +952,7 @@ export class SessionManager {
|
|
|
915
952
|
});
|
|
916
953
|
if (claimed.count !== 1)
|
|
917
954
|
continue;
|
|
955
|
+
let submission;
|
|
918
956
|
try {
|
|
919
957
|
console.log(`[ConversationQueue] claimed session=${sessionId} turn=${queued.id} queueWaitMs=${Math.max(0, Date.now() - queued.queuedAt.getTime())} attempt=${queued.attempts + 1}`);
|
|
920
958
|
// A conversation accepts one ACP prompt at a time. Waiting here keeps
|
|
@@ -931,8 +969,13 @@ export class SessionManager {
|
|
|
931
969
|
if (!session)
|
|
932
970
|
throw new NotFoundError('Session', sessionId);
|
|
933
971
|
this.ensureExecutionRecordIsLive(session);
|
|
972
|
+
submission = queued.deliveryId ? await this.deliveryService?.claim(queued.deliveryId, queued.deliveryRevision ?? undefined) : undefined;
|
|
973
|
+
if (queued.deliveryId && !submission) {
|
|
974
|
+
await prisma.conversationTurn.updateMany({ where: { id: queued.id, status: CONVERSATION_TURN_RUNNING, deliveryRevision: queued.deliveryRevision }, data: { status: 'PAUSED' } });
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
934
977
|
const userEntryId = queued.userEntryId ?? `user:${queued.id}`;
|
|
935
|
-
this.appendUserMessageEntry(session, queued.message, userEntryId);
|
|
978
|
+
this.appendUserMessageEntry(session, queued.originalText ?? queued.message, userEntryId, queued.deliveryId ?? undefined);
|
|
936
979
|
if (!queued.userEntryId) {
|
|
937
980
|
await prisma.conversationTurn.updateMany({
|
|
938
981
|
where: { id: queued.id, status: CONVERSATION_TURN_RUNNING },
|
|
@@ -940,7 +983,8 @@ export class SessionManager {
|
|
|
940
983
|
});
|
|
941
984
|
}
|
|
942
985
|
const dispatchStartedAt = Date.now();
|
|
943
|
-
await this.sendMessage(sessionId, queued.message, queued.providerId ?? undefined, undefined, { userEntryId });
|
|
986
|
+
await this.sendMessage(sessionId, queued.message, queued.providerId ?? undefined, undefined, { userEntryId, originalText: queued.originalText ?? undefined, deliveryId: queued.deliveryId ?? undefined, ...submission });
|
|
987
|
+
await submission?.settle();
|
|
944
988
|
console.log(`[ConversationQueue] dispatched session=${sessionId} turn=${queued.id} dispatchMs=${Date.now() - dispatchStartedAt}`);
|
|
945
989
|
const turnWaitStartedAt = Date.now();
|
|
946
990
|
await this.runtimeCoordinator.waitForTurnCompletion(sessionId);
|
|
@@ -954,8 +998,10 @@ export class SessionManager {
|
|
|
954
998
|
console.log(`[ConversationQueue] completed session=${sessionId} turn=${queued.id} runtimeWaitMs=${Date.now() - turnWaitStartedAt}`);
|
|
955
999
|
}
|
|
956
1000
|
catch (error) {
|
|
1001
|
+
await submission?.settle();
|
|
957
1002
|
if (this.conversationQueueStopping) {
|
|
958
|
-
|
|
1003
|
+
if (!queued.deliveryId)
|
|
1004
|
+
await this.requeueConversationTurn(queued.id);
|
|
959
1005
|
return;
|
|
960
1006
|
}
|
|
961
1007
|
const lastError = error instanceof Error ? error.message : String(error);
|
|
@@ -1004,7 +1050,7 @@ export class SessionManager {
|
|
|
1004
1050
|
}
|
|
1005
1051
|
return null;
|
|
1006
1052
|
}
|
|
1007
|
-
async startRuntimeTurn(session, prompt, resumeExternalSessionId, providerId = session.providerId, resumeMode = 'load', historyBoundaryEntryId, initialStart = false, expectedTeamRunInvocationId, advanceGeneration = false) {
|
|
1053
|
+
async startRuntimeTurn(session, prompt, resumeExternalSessionId, providerId = session.providerId, resumeMode = 'load', historyBoundaryEntryId, initialStart = false, expectedTeamRunInvocationId, advanceGeneration = false, submission = {}) {
|
|
1008
1054
|
const workingDir = this.getExecutionWorkingDir(session);
|
|
1009
1055
|
let launchClaimNumber = null;
|
|
1010
1056
|
let admissionEntered = false;
|
|
@@ -1066,6 +1112,9 @@ export class SessionManager {
|
|
|
1066
1112
|
this.logSessionError('session.snapshotRestore', error, { sessionId: session.id });
|
|
1067
1113
|
}
|
|
1068
1114
|
}
|
|
1115
|
+
msgStore.textBlocks.admission = session.purpose === SessionPurpose.CHAT
|
|
1116
|
+
? () => getTranslationService().getAdmissionEpoch()
|
|
1117
|
+
: () => undefined;
|
|
1069
1118
|
// Every turn claim is durable before RuntimeCoordinator can call a driver.
|
|
1070
1119
|
// The lease remains held until runTurn has either failed before spawn or
|
|
1071
1120
|
// handed the child/transport to its DriverSession owner.
|
|
@@ -1097,6 +1146,8 @@ export class SessionManager {
|
|
|
1097
1146
|
resumeExternalSessionId,
|
|
1098
1147
|
resumeMode,
|
|
1099
1148
|
historyBoundaryEntryId,
|
|
1149
|
+
onSubmitting: submission.onSubmitting,
|
|
1150
|
+
onSubmitted: submission.onSubmitted,
|
|
1100
1151
|
launchClaimNumber,
|
|
1101
1152
|
admission,
|
|
1102
1153
|
});
|
|
@@ -1300,6 +1351,21 @@ export class SessionManager {
|
|
|
1300
1351
|
handleRuntimeTurnEvent(envelope) {
|
|
1301
1352
|
const sessionId = envelope.towerSessionId;
|
|
1302
1353
|
const event = envelope.event;
|
|
1354
|
+
if (event.type === 'text_block') {
|
|
1355
|
+
const block = event.entry.metadata?.textBlock;
|
|
1356
|
+
if (block?.translationEpoch !== undefined && (block.state !== 'OPEN' || block.sourceRevision > 1)) {
|
|
1357
|
+
this.dirtySnapshots.add(sessionId);
|
|
1358
|
+
// Coalesce same-tick boundaries through the existing single snapshot writer.
|
|
1359
|
+
if (!this.translationBoundaryPending.has(sessionId)) {
|
|
1360
|
+
this.translationBoundaryPending.add(sessionId);
|
|
1361
|
+
queueMicrotask(() => {
|
|
1362
|
+
this.translationBoundaryPending.delete(sessionId);
|
|
1363
|
+
void this.flushSnapshotPersist(sessionId).catch(() => this.scheduleSnapshotPersist(sessionId));
|
|
1364
|
+
});
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
return;
|
|
1368
|
+
}
|
|
1303
1369
|
if (event.type === 'stdout') {
|
|
1304
1370
|
this.eventBus.emit('session:stdout', { sessionId, data: event.data });
|
|
1305
1371
|
return;
|
|
@@ -2009,6 +2075,12 @@ export class SessionManager {
|
|
|
2009
2075
|
});
|
|
2010
2076
|
if (snapshotChanged) {
|
|
2011
2077
|
this.persistedSnapshotHashes.set(sessionId, snapshotHash);
|
|
2078
|
+
if (serializedSnapshot.includes('"translationEpoch":')) {
|
|
2079
|
+
try {
|
|
2080
|
+
getTranslationService().checkpointCommitted(sessionId);
|
|
2081
|
+
}
|
|
2082
|
+
catch { /* Original snapshot is durable for startup recovery. */ }
|
|
2083
|
+
}
|
|
2012
2084
|
}
|
|
2013
2085
|
if (DEBUG_SNAPSHOT) {
|
|
2014
2086
|
console.log(`[SessionManager:snapshot] flush persisted sessionId=${sessionId} status=${pendingStatus ?? 'unchanged'} entries=${snapshot.entries.length} changed=${snapshotChanged}`);
|
|
@@ -2052,7 +2124,7 @@ export class SessionManager {
|
|
|
2052
2124
|
},
|
|
2053
2125
|
});
|
|
2054
2126
|
}
|
|
2055
|
-
appendUserMessageEntry(session, message, entryId) {
|
|
2127
|
+
appendUserMessageEntry(session, message, entryId, deliveryId) {
|
|
2056
2128
|
const sessionId = session.id;
|
|
2057
2129
|
const isNewStore = !sessionMsgStoreManager.has(sessionId);
|
|
2058
2130
|
const msgStore = sessionMsgStoreManager.getOrCreate(sessionId);
|
|
@@ -2083,6 +2155,8 @@ export class SessionManager {
|
|
|
2083
2155
|
return entryId;
|
|
2084
2156
|
}
|
|
2085
2157
|
const userEntry = createUserMessage(message, entryId);
|
|
2158
|
+
if (deliveryId)
|
|
2159
|
+
userEntry.metadata = { ...userEntry.metadata, deliveryId };
|
|
2086
2160
|
const userIndex = msgStore.entryIndex.next();
|
|
2087
2161
|
const userPatch = addNormalizedEntry(userIndex, userEntry);
|
|
2088
2162
|
if (DEBUG_SNAPSHOT) {
|