agent-tower 0.7.2-beta.7 → 0.7.2-beta.8
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-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/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-CtCYXopw.js +1 -0
- package/dist/web/assets/{AgentEnvironmentSettingsPage-SnxiaHvN.js → AgentEnvironmentSettingsPage-DSWN546Y.js} +1 -1
- package/dist/web/assets/AttachmentPreview-DRG5_cfN.js +2 -0
- package/dist/web/assets/BranchSelect-Dxs7HnMM.js +1 -0
- package/dist/web/assets/BrandLogo-Ilm880Xs.js +1 -0
- package/dist/web/assets/ConversationPage-B55Bj_ft.js +1 -0
- package/dist/web/assets/CreateTaskInput-CxWPeToI.js +1 -0
- package/dist/web/assets/{DemoPage-BHbnnZFF.js → DemoPage-Dyn-U9JO.js} +3 -3
- package/dist/web/assets/DesignSystemPage-BxypsRUZ.js +12 -0
- package/dist/web/assets/EditableTaskTitle-Dh-SmvFW.js +70 -0
- package/dist/web/assets/{ExecutionPermissionSelector-DcC4IBOF.js → ExecutionPermissionSelector-CQ_GNxR0.js} +1 -1
- package/dist/web/assets/GeneralSettingsPage-CzoejPZP.js +1 -0
- package/dist/web/assets/{LoadingPreviewPage-dE_jyl19.js → LoadingPreviewPage-BlW2PJhI.js} +1 -1
- package/dist/web/assets/{McpSettingsPage-CIuQ4bvy.js → McpSettingsPage-DD7EqD4L.js} +1 -1
- package/dist/web/assets/{MemberAvatar-BG0VDZKf.js → MemberAvatar-B2pAdWUi.js} +1 -1
- package/dist/web/assets/MobileTaskDetail-CvmNW0BQ.js +3 -0
- package/dist/web/assets/NotificationSettingsPage-BIqldIRf.js +1 -0
- package/dist/web/assets/ProfileSettingsPage-DMxpHmF1.js +3 -0
- package/dist/web/assets/ProjectKanbanPage-CHW79td4.js +12 -0
- package/dist/web/assets/ProjectSettingsPage-DKiEUkoa.js +2 -0
- package/dist/web/assets/{ProviderSettingsPage-DLq-GBxp.js → ProviderSettingsPage-DZT7wyE2.js} +2 -2
- package/dist/web/assets/{SettingsMasterDetail-UfyoKAum.js → SettingsMasterDetail-DnF0lsV1.js} +1 -1
- package/dist/web/assets/TaskDetail-D_970BDY.js +1 -0
- package/dist/web/assets/TeamSettingsPage-BJIEZ7xL.js +1 -0
- package/dist/web/assets/TranslationSettingsPage-D3mazqEW.js +1 -0
- package/dist/web/assets/arc-hUh7ykl8.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-BCNj6ZWE.js → architectureDiagram-3BPJPVTR-CcV9CLkm.js} +1 -1
- package/dist/web/assets/{at-sign-C4VhWike.js → at-sign-B-nhoGyH.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-D1kmB9gz.js → blockDiagram-GPEHLZMM-5q3Y9y0e.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DbWKTkSe.js → c4Diagram-AAUBKEIU-CorBXi06.js} +1 -1
- package/dist/web/assets/channel-By24WpLg.js +1 -0
- package/dist/web/assets/check-DqPSoX0r.js +1 -0
- package/dist/web/assets/chevron-down-CPnvItQw.js +1 -0
- package/dist/web/assets/{chevron-up-DOkDFvIc.js → chevron-up-B8PE5N0G.js} +1 -1
- package/dist/web/assets/{chunk-2J33WTMH-B3TA0-LD.js → chunk-2J33WTMH-BUf5B4z4.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CvPTiBSV.js → chunk-4BX2VUAB-CdnOHkro.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-xGe9Fu9Z.js → chunk-55IACEB6-U7edZDpP.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-H8pz3amK.js → chunk-727SXJPM-B64Tuhla.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-BmYYNxcL.js → chunk-AQP2D5EJ-dXfe56jB.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-BmOEsLTE.js → chunk-FMBD7UC4-DDYbxc1Q.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-C5MfA0xc.js → chunk-ND2GUHAM-BQDGMv0R.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-BcrGYZ7V.js → chunk-QZHKN3VN-DB8q4xAj.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-DxHoimtR.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-DxHoimtR.js +1 -0
- package/dist/web/assets/code-block-OCS4YCEC-BSdICyOa.js +2 -0
- package/dist/web/assets/confirm-dialog-DxEBZEbV.js +1 -0
- package/dist/web/assets/content-CMUL3HGx.js +2 -0
- package/dist/web/assets/{copy-CdzVE3kf.js → copy-DyxlXxiU.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-CLQ-m71G.js → cose-bilkent-S5V4N54A-Dx6eMnll.js} +1 -1
- package/dist/web/assets/cssMode-ZnNWfjZ6.js +1 -0
- package/dist/web/assets/{dagre-BM42HDAG-CmDqxOfn.js → dagre-BM42HDAG-Cxe8pLgD.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-D-fSbEll.js → diagram-2AECGRRQ-RMsswEBe.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-HPywThAf.js → diagram-5GNKFQAL-Bi4E0hzx.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DAzLhllz.js → diagram-KO2AKTUF-Mv6CDCyn.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-DXYB9h8L.js → diagram-LMA3HP47-CJ3qKNzK.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-vv4kz4Zo.js → diagram-OG6HWLK6-D8SBY4ft.js} +1 -1
- package/dist/web/assets/dialog-BYdeYC2Y.js +5 -0
- package/dist/web/assets/{erDiagram-TEJ5UH35-Cu6aVKAa.js → erDiagram-TEJ5UH35-DwVSCU6X.js} +1 -1
- package/dist/web/assets/{flowDiagram-I6XJVG4X-BKDe8WSQ.js → flowDiagram-I6XJVG4X-CyipYAWd.js} +1 -1
- package/dist/web/assets/{freemarker2-DI2giuAo.js → freemarker2-DbH_yMCO.js} +2 -2
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DMVLzmAE.js → ganttDiagram-6RSMTGT7-CsC6Wjt4.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-vogzYdKn.js → gitGraphDiagram-PVQCEYII-E5jNbqlq.js} +1 -1
- package/dist/web/assets/{globe-Rnn-nKw-.js → globe-B2rgTPH3.js} +1 -1
- package/dist/web/assets/handlebars-C5VY_S-z.js +1 -0
- package/dist/web/assets/hooks-Ct0srfV-.js +1 -0
- package/dist/web/assets/html-e5uLnAgN.js +1 -0
- package/dist/web/assets/htmlMode-BeNiGozX.js +1 -0
- package/dist/web/assets/{icon-button-CuSuXgr_.js → icon-button-BEMJj_6T.js} +1 -1
- package/dist/web/assets/index-0XPZayUU.css +1 -0
- package/dist/web/assets/index-BYPOXP6w.js +1 -0
- package/dist/web/assets/{index-B88xAivn.js → index-C-M0QDqc.js} +5 -5
- package/dist/web/assets/index-CAjqC8pT.js +41 -0
- package/dist/web/assets/index-CPGzLjEC.js +1 -0
- package/dist/web/assets/index-Cm6snkmR.js +122 -0
- package/dist/web/assets/index-DNdMmXBr.js +1 -0
- package/dist/web/assets/{index-CMjLMilU.js → index-DppwrK2G.js} +1 -1
- package/dist/web/assets/index-IMdA08Ok.js +1 -0
- package/dist/web/assets/index-kr6U6_pi.js +1 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-CEfSHkNq.js → infoDiagram-5YYISTIA-5_0wrRXl.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BXKZuWtD.js → ishikawaDiagram-YF4QCWOH-aQujIFZw.js} +5 -5
- package/dist/web/assets/javascript-D7QVj9jR.js +1 -0
- package/dist/web/assets/{journeyDiagram-JHISSGLW-wsOUYlu7.js → journeyDiagram-JHISSGLW-ClMzHdqI.js} +1 -1
- package/dist/web/assets/jsonMode-nHmLVf-n.js +7 -0
- package/dist/web/assets/{kanban-definition-UN3LZRKU-DNsuvOrU.js → kanban-definition-UN3LZRKU-BFVlt0tz.js} +1 -1
- package/dist/web/assets/{kbd-B3m64lRd.js → kbd-Bfq5K6Ux.js} +1 -1
- package/dist/web/assets/{key-round-DpYSyeDH.js → key-round-BqsaQdce.js} +1 -1
- package/dist/web/assets/{layers-CxqMQVmH.js → layers-DI4vFJ4F.js} +1 -1
- package/dist/web/assets/{linear-BmmCZdOQ.js → linear-DZ-6PAPS.js} +1 -1
- package/dist/web/assets/{link-DbSpzB1w.js → link-BU4PN723.js} +1 -1
- package/dist/web/assets/liquid-BPIyogoj.js +1 -0
- package/dist/web/assets/{lspLanguageFeatures-WhdC7zdf.js → lspLanguageFeatures-DH4Z8jiM.js} +1 -1
- package/dist/web/assets/mdx-CI8yO2pV.js +1 -0
- package/dist/web/assets/menu-C3uB3M7p.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-DmKVQY9m.js → mermaid-NOHMQCX5-BqeX1osS.js} +71 -71
- package/dist/web/assets/{message-square-CfNb-MTd.js → message-square-E5K8E3A-.js} +1 -1
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-0RzXjZ9G.js → mindmap-definition-RKZ34NQL-C7dea0db.js} +1 -1
- package/dist/web/assets/{modal-Kpqn-nDO.js → modal-Cz1iIVeD.js} +1 -1
- package/dist/web/assets/{monaco-I1fXAMIt.js → monaco-DM3DuGN5.js} +3 -3
- package/dist/web/assets/{paperclip-BBrzKZQC.js → paperclip-COXNce_v.js} +1 -1
- package/dist/web/assets/{pencil-pzVKblxj.js → pencil-BFc4n44f.js} +1 -1
- package/dist/web/assets/{people-C6b3eeLq.js → people-BaCetIqh.js} +1 -1
- package/dist/web/assets/{pieDiagram-4H26LBE5-Bcvzb8TW.js → pieDiagram-4H26LBE5-2q5medug.js} +2 -2
- package/dist/web/assets/popover-CJCQLoGu.js +1 -0
- package/dist/web/assets/python-CSxVPG9p.js +1 -0
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DwNhxMxj.js → quadrantDiagram-W4KKPZXB-DHPEM56s.js} +1 -1
- package/dist/web/assets/razor-CVoIieeS.js +1 -0
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-D2wSGYn2.js → requirementDiagram-4Y6WPE33-B_KyH7PP.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-l3LLF--T.js → sankeyDiagram-5OEKKPKP-CrqkZAYW.js} +1 -1
- package/dist/web/assets/search-CkiBPir_.js +1 -0
- package/dist/web/assets/search-field-CbM2P2KE.js +1 -0
- package/dist/web/assets/{select-DGwKE4l0.js → select-Br0TAs7A.js} +1 -1
- package/dist/web/assets/select-DJsEG0jq.js +1 -0
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BAGsbTS_.js → sequenceDiagram-3UESZ5HK-BRTm1WQA.js} +1 -1
- package/dist/web/assets/{server-BIPZ9Ka-.js → server-DYeSE1wn.js} +1 -1
- package/dist/web/assets/stateDiagram-AJRCARHV-qN49iyR2.js +1 -0
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-B1clBPkJ.js +1 -0
- package/dist/web/assets/{textarea-Bnfq7adW.js → textarea-B7vtoRE3.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-Dt-DcRrG.js → timeline-definition-PNZ67QCA-BzarcDi3.js} +1 -1
- package/dist/web/assets/toggles-jo27o0AH.js +1 -0
- package/dist/web/assets/tooltip-DbVtCXcO.js +1 -0
- package/dist/web/assets/{track-B_K578io.js → track-C0vxnITw.js} +1 -1
- package/dist/web/assets/{trash-2-ALAYDudv.js → trash-2-CUM-XX8B.js} +1 -1
- package/dist/web/assets/tsMode-7D3gqep6.js +11 -0
- package/dist/web/assets/typescript-CbOVEQNg.js +1 -0
- package/dist/web/assets/{upload-D7hKT2VA.js → upload-CJ6jVmte.js} +1 -1
- package/dist/web/assets/{use-profiles-Ncqxdw7S.js → use-profiles-B0xXAf7Z.js} +1 -1
- package/dist/web/assets/{use-projects-Dwy9AfAG.js → use-projects-BlTwWxkY.js} +1 -1
- package/dist/web/assets/{use-providers-BRyZjuBG.js → use-providers-FMSfyTD1.js} +1 -1
- package/dist/web/assets/use-translation-settings-BOlszecX.js +1 -0
- package/dist/web/assets/use-workspaces-DYrEp0Lw.js +1 -0
- package/dist/web/assets/useNormalizedLogs-D0N8MJdH.js +1 -0
- package/dist/web/assets/useTokenUsage-WB3ZQ25v.js +1 -0
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Cr55FtiY.js → vennDiagram-CIIHVFJN-B6oZetvf.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-CtwMk9MJ.js → wardley-L42UT6IY-Bzuhm76f.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-BeyHmTu3.js → wardleyDiagram-YWT4CUSO-DaC-FUf5.js} +1 -1
- package/dist/web/assets/xml-Cfa9tkdT.js +1 -0
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-9g34Lq8E.js → xychartDiagram-2RQKCTM6-CCvRIJRL.js} +1 -1
- package/dist/web/assets/yaml-C86f7VLL.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) {
|