factory-factory 0.3.8 → 0.3.9
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/client/assets/{_basePickBy-BzH_iru3.js → _basePickBy-CoLLbaiQ.js} +1 -1
- package/dist/client/assets/{_baseUniq-D6ny9r_u.js → _baseUniq-xRgxfXUW.js} +1 -1
- package/dist/client/assets/{arc-CRVgibiy.js → arc-De4Ny3V9.js} +1 -1
- package/dist/client/assets/{architectureDiagram-VXUJARFQ-1aDFSaTZ.js → architectureDiagram-VXUJARFQ-DM0j158z.js} +1 -1
- package/dist/client/assets/{blockDiagram-VD42YOAC-m3mDHY-k.js → blockDiagram-VD42YOAC-DKBZN-sz.js} +1 -1
- package/dist/client/assets/{c4Diagram-YG6GDRKO-B7ZlkfXz.js → c4Diagram-YG6GDRKO-CIA6AVRp.js} +1 -1
- package/dist/client/assets/channel-DW2o9xrZ.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-zLj9eiFf.js → chunk-4BX2VUAB-BrHsCtgI.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-D6KQTgyD.js → chunk-55IACEB6-DLwlJB2L.js} +1 -1
- package/dist/client/assets/{chunk-B4BG7PRW-BQbzvx8l.js → chunk-B4BG7PRW-cqTY9ldj.js} +1 -1
- package/dist/client/assets/{chunk-DI55MBZ5-CPxKCw_e.js → chunk-DI55MBZ5-PAp7fYLU.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-nFaeGtHP.js → chunk-FMBD7UC4-CsvpScij.js} +1 -1
- package/dist/client/assets/{chunk-QN33PNHL-DhrGqSLY.js → chunk-QN33PNHL-DmkkCoc-.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CZWrGmvf.js → chunk-QZHKN3VN-Ds5Tjlpo.js} +1 -1
- package/dist/client/assets/{chunk-TZMSLE5B-xhHdVO37.js → chunk-TZMSLE5B-4Gu0uKkR.js} +1 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-CUeZuC6S.js +1 -0
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-CUeZuC6S.js +1 -0
- package/dist/client/assets/clone-Df9JDgIw.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-Cr0HX6ro.js → cose-bilkent-S5V4N54A-CQJ_MgcD.js} +1 -1
- package/dist/client/assets/{dagre-6UL2VRFP-s6RRMHqY.js → dagre-6UL2VRFP-CfyncTju.js} +1 -1
- package/dist/client/assets/{diagram-PSM6KHXK-BhdZNVs7.js → diagram-PSM6KHXK-BL2QA0bQ.js} +1 -1
- package/dist/client/assets/{diagram-QEK2KX5R-Dgwc4sx_.js → diagram-QEK2KX5R-BDcBrJO4.js} +1 -1
- package/dist/client/assets/{diagram-S2PKOQOG-BlcMpYrQ.js → diagram-S2PKOQOG-BxofoMik.js} +1 -1
- package/dist/client/assets/{erDiagram-Q2GNP2WA-BQQjswcC.js → erDiagram-Q2GNP2WA-CDGe-bUA.js} +1 -1
- package/dist/client/assets/{flowDiagram-NV44I4VS-_cBTH43Q.js → flowDiagram-NV44I4VS-CodDw20I.js} +1 -1
- package/dist/client/assets/{ganttDiagram-JELNMOA3-BxuyB7Oz.js → ganttDiagram-JELNMOA3-BHJlNcF5.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-D0GjSYQi.js → gitGraphDiagram-V2S2FVAM-DsFPFnxn.js} +1 -1
- package/dist/client/assets/{graph-DNCXrik3.js → graph-DtyTGYVa.js} +1 -1
- package/dist/client/assets/index-BkwQogmx.css +1 -0
- package/dist/client/assets/{index-CCnMDzRJ.js → index-CSanKe06.js} +175 -175
- package/dist/client/assets/{infoDiagram-HS3SLOUP-BsUKtNMj.js → infoDiagram-HS3SLOUP-CczckdeY.js} +1 -1
- package/dist/client/assets/{journeyDiagram-XKPGCS4Q-sScoNj-6.js → journeyDiagram-XKPGCS4Q-CIDlGmYi.js} +1 -1
- package/dist/client/assets/{kanban-definition-3W4ZIXB7-CycFvltk.js → kanban-definition-3W4ZIXB7-Dvuu9eqr.js} +1 -1
- package/dist/client/assets/{layout-LTiJ8avf.js → layout-Cth5sJm6.js} +1 -1
- package/dist/client/assets/{linear-CnQEAniJ.js → linear-DRv-Y17x.js} +1 -1
- package/dist/client/assets/{mindmap-definition-VGOIOE7T-Du5mb-g5.js → mindmap-definition-VGOIOE7T-AXsc24V4.js} +1 -1
- package/dist/client/assets/{mobile-baseline-necQV4Mu.js → mobile-baseline-DXBPdrir.js} +1 -1
- package/dist/client/assets/{pieDiagram-ADFJNKIX-CUAEo70K.js → pieDiagram-ADFJNKIX-oIn8Bgi4.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-AYHSOK5B-1MjtTI_Y.js → quadrantDiagram-AYHSOK5B-rGTqNh3q.js} +1 -1
- package/dist/client/assets/{requirementDiagram-UZGBJVZJ-zgmi2Sjr.js → requirementDiagram-UZGBJVZJ-DgE2dYES.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-TZEHDZUN-Datw0Rj8.js → sankeyDiagram-TZEHDZUN-BWRLa217.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WL72ISMW-DopxoRon.js → sequenceDiagram-WL72ISMW-lYEkh9VX.js} +1 -1
- package/dist/client/assets/{stateDiagram-FKZM4ZOC-ZqoVSvsu.js → stateDiagram-FKZM4ZOC-CV9VCuVK.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DQ10FejB.js +1 -0
- package/dist/client/assets/{terminal-instance-gybkMDHu.js → terminal-instance-C3nwiweh.js} +1 -1
- package/dist/client/assets/{timeline-definition-IT6M3QCI-DQwpSE-n.js → timeline-definition-IT6M3QCI-Bzm_qoWF.js} +1 -1
- package/dist/client/assets/{treemap-GDKQZRPO-DK4UuMc6.js → treemap-GDKQZRPO-gouxKMUq.js} +1 -1
- package/dist/client/assets/{xychartDiagram-PRI3JC2R-CJP1ULwR.js → xychartDiagram-PRI3JC2R-DqSTMw-l.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/prisma/generated/enums.d.ts +1 -0
- package/dist/prisma/generated/enums.d.ts.map +1 -1
- package/dist/prisma/generated/enums.js +1 -0
- package/dist/prisma/generated/enums.js.map +1 -1
- package/dist/prisma/generated/internal/class.js +1 -1
- package/dist/prisma/generated/internal/class.js.map +1 -1
- package/dist/src/backend/app-context.d.ts.map +1 -1
- package/dist/src/backend/app-context.js +3 -0
- package/dist/src/backend/app-context.js.map +1 -1
- package/dist/src/backend/domains/github/github-cli/mappers.d.ts +1 -1
- package/dist/src/backend/domains/github/github-cli/mappers.d.ts.map +1 -1
- package/dist/src/backend/domains/github/github-cli/mappers.js +2 -37
- package/dist/src/backend/domains/github/github-cli/mappers.js.map +1 -1
- package/dist/src/backend/domains/github/github-cli.service.test.js +20 -0
- package/dist/src/backend/domains/github/github-cli.service.test.js.map +1 -1
- package/dist/src/backend/domains/linear/linear-state-sync.service.d.ts.map +1 -1
- package/dist/src/backend/domains/linear/linear-state-sync.service.js.map +1 -1
- package/dist/src/backend/domains/ratchet/bridges.d.ts +4 -0
- package/dist/src/backend/domains/ratchet/bridges.d.ts.map +1 -1
- package/dist/src/backend/domains/ratchet/ratchet-active-session.helpers.d.ts +15 -0
- package/dist/src/backend/domains/ratchet/ratchet-active-session.helpers.d.ts.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-active-session.helpers.js +126 -0
- package/dist/src/backend/domains/ratchet/ratchet-active-session.helpers.js.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-fixer-dispatch.helpers.d.ts +14 -0
- package/dist/src/backend/domains/ratchet/ratchet-fixer-dispatch.helpers.d.ts.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-fixer-dispatch.helpers.js +55 -0
- package/dist/src/backend/domains/ratchet/ratchet-fixer-dispatch.helpers.js.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-pr-state.helpers.d.ts +107 -0
- package/dist/src/backend/domains/ratchet/ratchet-pr-state.helpers.d.ts.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-pr-state.helpers.js +246 -0
- package/dist/src/backend/domains/ratchet/ratchet-pr-state.helpers.js.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-review-poll.helpers.d.ts +16 -0
- package/dist/src/backend/domains/ratchet/ratchet-review-poll.helpers.d.ts.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet-review-poll.helpers.js +52 -0
- package/dist/src/backend/domains/ratchet/ratchet-review-poll.helpers.js.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet.service.d.ts +6 -40
- package/dist/src/backend/domains/ratchet/ratchet.service.d.ts.map +1 -1
- package/dist/src/backend/domains/ratchet/ratchet.service.js +99 -426
- package/dist/src/backend/domains/ratchet/ratchet.service.js.map +1 -1
- package/dist/src/backend/domains/ratchet/ratchet.types.d.ts +86 -0
- package/dist/src/backend/domains/ratchet/ratchet.types.d.ts.map +1 -0
- package/dist/src/backend/domains/ratchet/ratchet.types.js +2 -0
- package/dist/src/backend/domains/ratchet/ratchet.types.js.map +1 -0
- package/dist/src/backend/domains/ratchet/reconciliation.service.d.ts.map +1 -1
- package/dist/src/backend/domains/ratchet/reconciliation.service.js +1 -2
- package/dist/src/backend/domains/ratchet/reconciliation.service.js.map +1 -1
- package/dist/src/backend/domains/ratchet/reconciliation.service.test.js +8 -10
- package/dist/src/backend/domains/ratchet/reconciliation.service.test.js.map +1 -1
- package/dist/src/backend/domains/run-script/run-script.service.d.ts +1 -0
- package/dist/src/backend/domains/run-script/run-script.service.d.ts.map +1 -1
- package/dist/src/backend/domains/run-script/run-script.service.js +46 -19
- package/dist/src/backend/domains/run-script/run-script.service.js.map +1 -1
- package/dist/src/backend/domains/run-script/run-script.service.test.js +118 -0
- package/dist/src/backend/domains/run-script/run-script.service.test.js.map +1 -1
- package/dist/src/backend/domains/session/acp/acp-event-translator.d.ts +13 -1
- package/dist/src/backend/domains/session/acp/acp-event-translator.d.ts.map +1 -1
- package/dist/src/backend/domains/session/acp/acp-event-translator.js +86 -1
- package/dist/src/backend/domains/session/acp/acp-event-translator.js.map +1 -1
- package/dist/src/backend/domains/session/acp/acp-event-translator.test.js +39 -0
- package/dist/src/backend/domains/session/acp/acp-event-translator.test.js.map +1 -1
- package/dist/src/backend/domains/session/acp/acp-runtime-manager.d.ts +5 -0
- package/dist/src/backend/domains/session/acp/acp-runtime-manager.d.ts.map +1 -1
- package/dist/src/backend/domains/session/acp/acp-runtime-manager.js +12 -12
- package/dist/src/backend/domains/session/acp/acp-runtime-manager.js.map +1 -1
- package/dist/src/backend/domains/session/acp/acp-runtime-manager.test.js +3 -12
- package/dist/src/backend/domains/session/acp/acp-runtime-manager.test.js.map +1 -1
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/acp-adapter-utils.d.ts +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/acp-adapter-utils.d.ts.map +1 -1
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/acp-adapter-utils.js +3 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/acp-adapter-utils.js.map +1 -1
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/codex-app-server-acp-adapter.d.ts +14 -15
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/codex-app-server-acp-adapter.d.ts.map +1 -1
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/codex-app-server-acp-adapter.js +74 -568
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/codex-app-server-acp-adapter.js.map +1 -1
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/retry-logic.d.ts +16 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/retry-logic.d.ts.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/retry-logic.js +53 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/retry-logic.js.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-config-resolver.d.ts +20 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-config-resolver.d.ts.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-config-resolver.js +341 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-config-resolver.js.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-negotiation.d.ts +41 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-negotiation.d.ts.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-negotiation.js +137 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-negotiation.js.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-state-container.d.ts +25 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-state-container.d.ts.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-state-container.js +47 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/session-state-container.js.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/shape-drift-reporter.d.ts +8 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/shape-drift-reporter.d.ts.map +1 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/shape-drift-reporter.js +37 -0
- package/dist/src/backend/domains/session/acp/codex-app-server-adapter/shape-drift-reporter.js.map +1 -0
- package/dist/src/backend/domains/session/bridges.d.ts +5 -0
- package/dist/src/backend/domains/session/bridges.d.ts.map +1 -1
- package/dist/src/backend/domains/session/chat/chat-message-handlers/handlers/load-session.handler.d.ts.map +1 -1
- package/dist/src/backend/domains/session/chat/chat-message-handlers/handlers/load-session.handler.js +2 -2
- package/dist/src/backend/domains/session/chat/chat-message-handlers/handlers/load-session.handler.js.map +1 -1
- package/dist/src/backend/domains/session/chat/chat-message-handlers/handlers/load-session.handler.test.js +1 -1
- package/dist/src/backend/domains/session/chat/chat-message-handlers/handlers/load-session.handler.test.js.map +1 -1
- package/dist/src/backend/domains/session/chat/chat-message-handlers.service.js +2 -2
- package/dist/src/backend/domains/session/chat/chat-message-handlers.service.js.map +1 -1
- package/dist/src/backend/domains/session/data/{claude-session-history-loader.service.d.ts → session-history-loader.service.d.ts} +1 -1
- package/dist/src/backend/domains/session/data/session-history-loader.service.d.ts.map +1 -0
- package/dist/src/backend/domains/session/data/{claude-session-history-loader.service.js → session-history-loader.service.js} +4 -4
- package/dist/src/backend/domains/session/data/session-history-loader.service.js.map +1 -0
- package/dist/src/backend/domains/session/data/session-history-loader.service.test.d.ts +2 -0
- package/dist/src/backend/domains/session/data/session-history-loader.service.test.d.ts.map +1 -0
- package/dist/src/backend/domains/session/data/{claude-session-history-loader.service.test.js → session-history-loader.service.test.js} +6 -3
- package/dist/src/backend/domains/session/data/session-history-loader.service.test.js.map +1 -0
- package/dist/src/backend/domains/session/lifecycle/acp-event-processor.d.ts +71 -0
- package/dist/src/backend/domains/session/lifecycle/acp-event-processor.d.ts.map +1 -0
- package/dist/src/backend/domains/session/lifecycle/acp-event-processor.js +404 -0
- package/dist/src/backend/domains/session/lifecycle/acp-event-processor.js.map +1 -0
- package/dist/src/backend/domains/session/lifecycle/session.repository.d.ts +0 -2
- package/dist/src/backend/domains/session/lifecycle/session.repository.d.ts.map +1 -1
- package/dist/src/backend/domains/session/lifecycle/session.repository.js +0 -3
- package/dist/src/backend/domains/session/lifecycle/session.repository.js.map +1 -1
- package/dist/src/backend/domains/session/lifecycle/session.repository.test.js +0 -1
- package/dist/src/backend/domains/session/lifecycle/session.repository.test.js.map +1 -1
- package/dist/src/backend/domains/session/lifecycle/session.service.d.ts +8 -27
- package/dist/src/backend/domains/session/lifecycle/session.service.d.ts.map +1 -1
- package/dist/src/backend/domains/session/lifecycle/session.service.js +64 -376
- package/dist/src/backend/domains/session/lifecycle/session.service.js.map +1 -1
- package/dist/src/backend/domains/session/lifecycle/session.service.test.js +92 -21
- package/dist/src/backend/domains/session/lifecycle/session.service.test.js.map +1 -1
- package/dist/src/backend/domains/session/logging/acp-trace-logger.service.d.ts.map +1 -1
- package/dist/src/backend/domains/session/logging/acp-trace-logger.service.js +2 -13
- package/dist/src/backend/domains/session/logging/acp-trace-logger.service.js.map +1 -1
- package/dist/src/backend/domains/session/logging/acp-trace-logger.service.test.js +15 -3
- package/dist/src/backend/domains/session/logging/acp-trace-logger.service.test.js.map +1 -1
- package/dist/src/backend/domains/session/logging/session-file-logger.service.js +1 -1
- package/dist/src/backend/domains/session/logging/session-file-logger.service.js.map +1 -1
- package/dist/src/backend/domains/session/logging/session-file-logger.service.test.js +3 -0
- package/dist/src/backend/domains/session/logging/session-file-logger.service.test.js.map +1 -1
- package/dist/src/backend/domains/session/session-domain.service.d.ts.map +1 -1
- package/dist/src/backend/domains/session/session-domain.service.js +16 -0
- package/dist/src/backend/domains/session/session-domain.service.js.map +1 -1
- package/dist/src/backend/domains/session/session-domain.service.test.js +34 -0
- package/dist/src/backend/domains/session/session-domain.service.test.js.map +1 -1
- package/dist/src/backend/domains/session/store/file-lock.service.d.ts.map +1 -1
- package/dist/src/backend/domains/session/store/file-lock.service.js +2 -4
- package/dist/src/backend/domains/session/store/file-lock.service.js.map +1 -1
- package/dist/src/backend/domains/session/store/file-lock.service.test.js +3 -0
- package/dist/src/backend/domains/session/store/file-lock.service.test.js.map +1 -1
- package/dist/src/backend/domains/workspace/index.d.ts +0 -1
- package/dist/src/backend/domains/workspace/index.d.ts.map +1 -1
- package/dist/src/backend/domains/workspace/index.js +0 -1
- package/dist/src/backend/domains/workspace/index.js.map +1 -1
- package/dist/src/backend/domains/workspace/lifecycle/state-machine.service.d.ts +8 -0
- package/dist/src/backend/domains/workspace/lifecycle/state-machine.service.d.ts.map +1 -1
- package/dist/src/backend/domains/workspace/lifecycle/state-machine.service.js +47 -5
- package/dist/src/backend/domains/workspace/lifecycle/state-machine.service.js.map +1 -1
- package/dist/src/backend/domains/workspace/lifecycle/state-machine.service.test.js +117 -22
- package/dist/src/backend/domains/workspace/lifecycle/state-machine.service.test.js.map +1 -1
- package/dist/src/backend/domains/workspace/query/workspace-query.service.d.ts.map +1 -1
- package/dist/src/backend/domains/workspace/query/workspace-query.service.js +48 -44
- package/dist/src/backend/domains/workspace/query/workspace-query.service.js.map +1 -1
- package/dist/src/backend/domains/workspace/query/workspace-query.service.test.js +137 -97
- package/dist/src/backend/domains/workspace/query/workspace-query.service.test.js.map +1 -1
- package/dist/src/backend/domains/workspace/state/flow-state.d.ts +2 -2
- package/dist/src/backend/domains/workspace/state/flow-state.d.ts.map +1 -1
- package/dist/src/backend/domains/workspace/state/flow-state.js.map +1 -1
- package/dist/src/backend/domains/workspace/state/init-policy.js +1 -1
- package/dist/src/backend/domains/workspace/state/init-policy.js.map +1 -1
- package/dist/src/backend/domains/workspace/state/kanban-state.d.ts.map +1 -1
- package/dist/src/backend/domains/workspace/state/kanban-state.js +3 -2
- package/dist/src/backend/domains/workspace/state/kanban-state.js.map +1 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.js +16 -2
- package/dist/src/backend/interceptors/conversation-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/conversation-rename.interceptor.test.js +15 -3
- package/dist/src/backend/interceptors/conversation-rename.interceptor.test.js.map +1 -1
- package/dist/src/backend/interceptors/index.d.ts +2 -0
- package/dist/src/backend/interceptors/index.d.ts.map +1 -1
- package/dist/src/backend/interceptors/index.js +6 -0
- package/dist/src/backend/interceptors/index.js.map +1 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.js +8 -0
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.js +5 -1
- package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.js.map +1 -1
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.d.ts.map +1 -1
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.js +3 -0
- package/dist/src/backend/interceptors/pre-push-rename.interceptor.js.map +1 -1
- package/dist/src/backend/interceptors/registry.d.ts +5 -0
- package/dist/src/backend/interceptors/registry.d.ts.map +1 -1
- package/dist/src/backend/interceptors/registry.js +51 -0
- package/dist/src/backend/interceptors/registry.js.map +1 -1
- package/dist/src/backend/interceptors/types.d.ts +2 -0
- package/dist/src/backend/interceptors/types.d.ts.map +1 -1
- package/dist/src/backend/lib/workspace-derived-state.d.ts +47 -0
- package/dist/src/backend/lib/workspace-derived-state.d.ts.map +1 -0
- package/dist/src/backend/lib/workspace-derived-state.js +31 -0
- package/dist/src/backend/lib/workspace-derived-state.js.map +1 -0
- package/dist/src/backend/lib/workspace-derived-state.test.d.ts +2 -0
- package/dist/src/backend/lib/workspace-derived-state.test.d.ts.map +1 -0
- package/dist/src/backend/lib/workspace-derived-state.test.js +66 -0
- package/dist/src/backend/lib/workspace-derived-state.test.js.map +1 -0
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.js +3 -0
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.test.js +19 -1
- package/dist/src/backend/orchestration/domain-bridges.orchestrator.test.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.js +16 -6
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js +63 -30
- package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.d.ts +18 -0
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.d.ts.map +1 -0
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.js +75 -0
- package/dist/src/backend/orchestration/workspace-init-script-pipeline.js.map +1 -0
- package/dist/src/backend/orchestration/workspace-init.orchestrator.d.ts.map +1 -1
- package/dist/src/backend/orchestration/workspace-init.orchestrator.js +22 -73
- package/dist/src/backend/orchestration/workspace-init.orchestrator.js.map +1 -1
- package/dist/src/backend/orchestration/workspace-init.orchestrator.test.js +75 -16
- package/dist/src/backend/orchestration/workspace-init.orchestrator.test.js.map +1 -1
- package/dist/src/backend/resource_accessors/project.accessor.js +1 -1
- package/dist/src/backend/resource_accessors/project.accessor.js.map +1 -1
- package/dist/src/backend/routers/websocket/snapshots.handler.d.ts.map +1 -1
- package/dist/src/backend/routers/websocket/snapshots.handler.js +17 -6
- package/dist/src/backend/routers/websocket/snapshots.handler.js.map +1 -1
- package/dist/src/backend/routers/websocket/snapshots.handler.test.js +40 -5
- package/dist/src/backend/routers/websocket/snapshots.handler.test.js.map +1 -1
- package/dist/src/backend/routers/websocket/websocket.integration.test.js +1 -0
- package/dist/src/backend/routers/websocket/websocket.integration.test.js.map +1 -1
- package/dist/src/backend/server.d.ts.map +1 -1
- package/dist/src/backend/server.js +6 -2
- package/dist/src/backend/server.js.map +1 -1
- package/dist/src/backend/server.upgrade.test.js +2 -0
- package/dist/src/backend/server.upgrade.test.js.map +1 -1
- package/dist/src/backend/services/check-single-writer.test.d.ts +2 -0
- package/dist/src/backend/services/check-single-writer.test.d.ts.map +1 -0
- package/dist/src/backend/services/check-single-writer.test.js +132 -0
- package/dist/src/backend/services/check-single-writer.test.js.map +1 -0
- package/dist/src/backend/services/config.service.d.ts +14 -6
- package/dist/src/backend/services/config.service.d.ts.map +1 -1
- package/dist/src/backend/services/config.service.js +31 -9
- package/dist/src/backend/services/config.service.js.map +1 -1
- package/dist/src/backend/services/env-schemas.d.ts +7 -3
- package/dist/src/backend/services/env-schemas.d.ts.map +1 -1
- package/dist/src/backend/services/env-schemas.js +19 -3
- package/dist/src/backend/services/env-schemas.js.map +1 -1
- package/dist/src/backend/services/run-script-config-persistence.service.d.ts +37 -0
- package/dist/src/backend/services/run-script-config-persistence.service.d.ts.map +1 -0
- package/dist/src/backend/services/run-script-config-persistence.service.js +73 -0
- package/dist/src/backend/services/run-script-config-persistence.service.js.map +1 -0
- package/dist/src/backend/services/run-script-config-persistence.service.test.d.ts +2 -0
- package/dist/src/backend/services/run-script-config-persistence.service.test.d.ts.map +1 -0
- package/dist/src/backend/services/run-script-config-persistence.service.test.js +111 -0
- package/dist/src/backend/services/run-script-config-persistence.service.test.js.map +1 -0
- package/dist/src/backend/services/run-script-proxy.service.d.ts.map +1 -1
- package/dist/src/backend/services/run-script-proxy.service.js +2 -1
- package/dist/src/backend/services/run-script-proxy.service.js.map +1 -1
- package/dist/src/backend/services/run-script-proxy.service.test.js +4 -0
- package/dist/src/backend/services/run-script-proxy.service.test.js.map +1 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.d.ts +3 -3
- package/dist/src/backend/services/workspace-snapshot-store.service.d.ts.map +1 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.js +13 -12
- package/dist/src/backend/services/workspace-snapshot-store.service.js.map +1 -1
- package/dist/src/backend/services/workspace-snapshot-store.service.test.js +3 -0
- package/dist/src/backend/services/workspace-snapshot-store.service.test.js.map +1 -1
- package/dist/src/backend/trpc/admin.router.test.js +0 -2
- package/dist/src/backend/trpc/admin.router.test.js.map +1 -1
- package/dist/src/backend/trpc/admin.trpc.d.ts +2 -7
- package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/admin.trpc.js +0 -1
- package/dist/src/backend/trpc/admin.trpc.js.map +1 -1
- package/dist/src/backend/trpc/index.d.ts +8 -13
- package/dist/src/backend/trpc/index.d.ts.map +1 -1
- package/dist/src/backend/trpc/project.trpc.d.ts +3 -3
- package/dist/src/backend/trpc/workspace/run-script.router.test.js +31 -4
- package/dist/src/backend/trpc/workspace/run-script.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace/run-script.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace/run-script.trpc.js +8 -8
- package/dist/src/backend/trpc/workspace/run-script.trpc.js.map +1 -1
- package/dist/src/backend/trpc/workspace.router.test.js +6 -1
- package/dist/src/backend/trpc/workspace.router.test.js.map +1 -1
- package/dist/src/backend/trpc/workspace.trpc.d.ts +3 -3
- package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
- package/dist/src/backend/trpc/workspace.trpc.js +19 -13
- package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
- package/dist/src/cli/index.js +5 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/shared/core/ci-status.d.ts +6 -4
- package/dist/src/shared/core/ci-status.d.ts.map +1 -1
- package/dist/src/shared/core/ci-status.js +47 -13
- package/dist/src/shared/core/ci-status.js.map +1 -1
- package/dist/src/shared/core/enums.d.ts +1 -0
- package/dist/src/shared/core/enums.d.ts.map +1 -1
- package/dist/src/shared/core/enums.js +1 -0
- package/dist/src/shared/core/enums.js.map +1 -1
- package/dist/src/shared/core/index.d.ts +1 -1
- package/dist/src/shared/core/index.d.ts.map +1 -1
- package/dist/src/shared/core/index.js +1 -1
- package/dist/src/shared/core/index.js.map +1 -1
- package/dist/src/shared/schemas/export-data.schema.d.ts +2 -0
- package/dist/src/shared/schemas/export-data.schema.d.ts.map +1 -1
- package/dist/src/shared/schemas/issue-tracker-config.schema.d.ts +2 -2
- package/dist/src/shared/workspace-flow-state.d.ts +3 -0
- package/dist/src/shared/workspace-flow-state.d.ts.map +1 -0
- package/dist/src/shared/workspace-flow-state.js +2 -0
- package/dist/src/shared/workspace-flow-state.js.map +1 -0
- package/dist/tsconfig.backend.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20260224150000_add_workspace_archiving_state/migration.sql +4 -0
- package/prisma/schema.prisma +1 -0
- package/dist/client/assets/channel-B_f9a3jD.js +0 -1
- package/dist/client/assets/classDiagram-2ON5EDUG-CgnrkUO8.js +0 -1
- package/dist/client/assets/classDiagram-v2-WZHVMYZB-CgnrkUO8.js +0 -1
- package/dist/client/assets/clone-BmilxOGI.js +0 -1
- package/dist/client/assets/index-DVprBuNv.css +0 -1
- package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BRKf4wQr.js +0 -1
- package/dist/src/backend/domains/session/data/claude-session-history-loader.service.d.ts.map +0 -1
- package/dist/src/backend/domains/session/data/claude-session-history-loader.service.js.map +0 -1
- package/dist/src/backend/domains/session/data/claude-session-history-loader.service.test.d.ts +0 -2
- package/dist/src/backend/domains/session/data/claude-session-history-loader.service.test.d.ts.map +0 -1
- package/dist/src/backend/domains/session/data/claude-session-history-loader.service.test.js.map +0 -1
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.d.ts +0 -10
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.d.ts.map +0 -1
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.js +0 -24
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.js.map +0 -1
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.test.d.ts +0 -2
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.test.d.ts.map +0 -1
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.test.js +0 -17
- package/dist/src/backend/domains/workspace/lifecycle/archive-tracker.service.test.js.map +0 -1
|
@@ -2,127 +2,16 @@ import { Readable, Writable } from 'node:stream';
|
|
|
2
2
|
import { AgentSideConnection, ndJsonStream, PROTOCOL_VERSION, RequestError, } from '@agentclientprotocol/sdk';
|
|
3
3
|
import { asString, dedupeStrings, extractLocations, isRecord, resolveToolCallId, } from './acp-adapter-utils.js';
|
|
4
4
|
import { CodexRequestError, CodexRpcClient } from './codex-rpc-client.js';
|
|
5
|
-
import {
|
|
5
|
+
import { turnStartResponseSchema } from './codex-zod.js';
|
|
6
6
|
import { resolveCommandDisplay } from './command-metadata.js';
|
|
7
7
|
import { handleCodexServerPermissionRequest } from './protocol-permission-handler.js';
|
|
8
|
+
import { attachCloseWatcherWithRetry } from './retry-logic.js';
|
|
9
|
+
import { buildConfigOptions, createSandboxPolicyFromMode, getCollaborationModeValues, getExecutionPresets, isKnownModel, isReasoningEffortSupportedForModel, resolveCollaborationModeLabel, resolveDefaultCollaborationMode, resolveDefaultModel, resolveReasoningEffortForModel, resolveSandboxPolicy, resolveSessionModel, resolveTurnCollaborationMode, } from './session-config-resolver.js';
|
|
10
|
+
import { loadCollaborationModes, loadConfigRequirements, loadModelCatalog, negotiateNewSession, negotiateSessionResume, } from './session-negotiation.js';
|
|
11
|
+
import { CodexAdapterSessionStateContainer } from './session-state-container.js';
|
|
12
|
+
import { ShapeDriftReporter } from './shape-drift-reporter.js';
|
|
8
13
|
import { CodexStreamEventHandler } from './stream-event-handler.js';
|
|
9
14
|
const PENDING_TURN_ID = '__pending_turn__';
|
|
10
|
-
const MAX_CLOSE_WATCHER_ATTACH_RETRIES = 50;
|
|
11
|
-
const DEFAULT_APPROVAL_POLICIES = ['on-failure', 'on-request', 'never'];
|
|
12
|
-
const DEFAULT_SANDBOX_MODES = ['read-only', 'workspace-write', 'danger-full-access'];
|
|
13
|
-
const SHAPE_DRIFT_DETAILS_LIMIT = 700;
|
|
14
|
-
function toShapeDriftDetails(value) {
|
|
15
|
-
try {
|
|
16
|
-
const text = JSON.stringify(value);
|
|
17
|
-
if (typeof text !== 'string') {
|
|
18
|
-
return '[unserializable]';
|
|
19
|
-
}
|
|
20
|
-
return text.length > SHAPE_DRIFT_DETAILS_LIMIT
|
|
21
|
-
? `${text.slice(0, SHAPE_DRIFT_DETAILS_LIMIT)}...`
|
|
22
|
-
: text;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return '[unserializable]';
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function isNonEmptyString(value) {
|
|
29
|
-
return typeof value === 'string' && value.trim().length > 0;
|
|
30
|
-
}
|
|
31
|
-
function humanizeToken(value) {
|
|
32
|
-
return value
|
|
33
|
-
.split(/[-_]/)
|
|
34
|
-
.filter((part) => part.length > 0)
|
|
35
|
-
.map((part) => part.slice(0, 1).toUpperCase() + part.slice(1))
|
|
36
|
-
.join(' ');
|
|
37
|
-
}
|
|
38
|
-
function sanitizeModeName(mode) {
|
|
39
|
-
return mode
|
|
40
|
-
.split('_')
|
|
41
|
-
.map((part) => part.slice(0, 1).toUpperCase() + part.slice(1))
|
|
42
|
-
.join(' ');
|
|
43
|
-
}
|
|
44
|
-
function formatApprovalPolicyLabel(policy) {
|
|
45
|
-
if (policy === 'on-request') {
|
|
46
|
-
return 'On Request';
|
|
47
|
-
}
|
|
48
|
-
if (policy === 'on-failure') {
|
|
49
|
-
return 'On Failure';
|
|
50
|
-
}
|
|
51
|
-
if (policy === 'never') {
|
|
52
|
-
return 'Never Ask';
|
|
53
|
-
}
|
|
54
|
-
if (policy === 'untrusted') {
|
|
55
|
-
return 'Untrusted';
|
|
56
|
-
}
|
|
57
|
-
return humanizeToken(policy);
|
|
58
|
-
}
|
|
59
|
-
function formatSandboxModeLabel(mode) {
|
|
60
|
-
if (mode === 'workspace-write') {
|
|
61
|
-
return 'Workspace Write';
|
|
62
|
-
}
|
|
63
|
-
if (mode === 'read-only') {
|
|
64
|
-
return 'Read-only';
|
|
65
|
-
}
|
|
66
|
-
if (mode === 'danger-full-access') {
|
|
67
|
-
return 'Full Access';
|
|
68
|
-
}
|
|
69
|
-
return humanizeToken(mode);
|
|
70
|
-
}
|
|
71
|
-
function formatExecutionPresetName(approvalPolicy, sandboxMode) {
|
|
72
|
-
if (approvalPolicy === 'never' && sandboxMode === 'danger-full-access') {
|
|
73
|
-
return 'YOLO (Full Access)';
|
|
74
|
-
}
|
|
75
|
-
return `${formatApprovalPolicyLabel(approvalPolicy)} (${formatSandboxModeLabel(sandboxMode)})`;
|
|
76
|
-
}
|
|
77
|
-
function createWorkspaceWriteSandboxPolicy(cwd) {
|
|
78
|
-
return {
|
|
79
|
-
type: 'workspaceWrite',
|
|
80
|
-
writableRoots: [cwd],
|
|
81
|
-
readOnlyAccess: { type: 'fullAccess' },
|
|
82
|
-
networkAccess: true,
|
|
83
|
-
excludeTmpdirEnvVar: false,
|
|
84
|
-
excludeSlashTmp: false,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function createDangerFullAccessSandboxPolicy() {
|
|
88
|
-
return {
|
|
89
|
-
type: 'dangerFullAccess',
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
function parseSandboxModeFromPolicy(policy) {
|
|
93
|
-
if (!isRecord(policy)) {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
const policyType = asString(policy.type);
|
|
97
|
-
if (policyType === 'workspaceWrite') {
|
|
98
|
-
return 'workspace-write';
|
|
99
|
-
}
|
|
100
|
-
if (policyType === 'readOnly') {
|
|
101
|
-
return 'read-only';
|
|
102
|
-
}
|
|
103
|
-
if (policyType === 'dangerFullAccess') {
|
|
104
|
-
return 'danger-full-access';
|
|
105
|
-
}
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
function createSandboxPolicyFromMode(mode, cwd) {
|
|
109
|
-
if (mode === 'danger-full-access') {
|
|
110
|
-
return createDangerFullAccessSandboxPolicy();
|
|
111
|
-
}
|
|
112
|
-
if (mode === 'read-only') {
|
|
113
|
-
return {
|
|
114
|
-
type: 'readOnly',
|
|
115
|
-
access: { type: 'fullAccess' },
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
return createWorkspaceWriteSandboxPolicy(cwd);
|
|
119
|
-
}
|
|
120
|
-
function toSessionId(threadId) {
|
|
121
|
-
return `sess_${threadId}`;
|
|
122
|
-
}
|
|
123
|
-
function toThreadId(sessionId) {
|
|
124
|
-
return sessionId.startsWith('sess_') ? sessionId.slice('sess_'.length) : sessionId;
|
|
125
|
-
}
|
|
126
15
|
function isPlanLikeMode(mode) {
|
|
127
16
|
return /plan/i.test(mode);
|
|
128
17
|
}
|
|
@@ -284,112 +173,34 @@ function parseTextFromPromptBlock(block) {
|
|
|
284
173
|
}
|
|
285
174
|
return JSON.stringify(block);
|
|
286
175
|
}
|
|
287
|
-
function createCollaborationModeConfigOption(currentMode, collaborationModes) {
|
|
288
|
-
const options = collaborationModes
|
|
289
|
-
.filter((entry) => isNonEmptyString(entry.mode))
|
|
290
|
-
.map((entry) => ({
|
|
291
|
-
value: entry.mode,
|
|
292
|
-
name: entry.name,
|
|
293
|
-
}));
|
|
294
|
-
if (!options.some((option) => option.value === currentMode)) {
|
|
295
|
-
options.unshift({ value: currentMode, name: sanitizeModeName(currentMode) });
|
|
296
|
-
}
|
|
297
|
-
return {
|
|
298
|
-
id: 'mode',
|
|
299
|
-
category: 'mode',
|
|
300
|
-
name: 'Collaboration Mode',
|
|
301
|
-
type: 'select',
|
|
302
|
-
currentValue: currentMode,
|
|
303
|
-
options,
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
function createModelConfigOption(currentModel, modelCatalog) {
|
|
307
|
-
const options = modelCatalog.map((model) => ({
|
|
308
|
-
value: model.id,
|
|
309
|
-
name: model.displayName,
|
|
310
|
-
description: model.description,
|
|
311
|
-
}));
|
|
312
|
-
if (!options.some((option) => option.value === currentModel)) {
|
|
313
|
-
options.unshift({ value: currentModel, name: currentModel });
|
|
314
|
-
}
|
|
315
|
-
return {
|
|
316
|
-
id: 'model',
|
|
317
|
-
category: 'model',
|
|
318
|
-
name: 'Model',
|
|
319
|
-
type: 'select',
|
|
320
|
-
currentValue: currentModel,
|
|
321
|
-
options,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
function createReasoningEffortConfigOption(currentReasoningEffort, modelCatalog, currentModel) {
|
|
325
|
-
const modelEntry = modelCatalog.find((model) => model.id === currentModel);
|
|
326
|
-
if (!modelEntry) {
|
|
327
|
-
return null;
|
|
328
|
-
}
|
|
329
|
-
const supportedEntries = modelEntry.supportedReasoningEfforts.filter((entry) => isNonEmptyString(entry.reasoningEffort));
|
|
330
|
-
if (supportedEntries.length === 0) {
|
|
331
|
-
return null;
|
|
332
|
-
}
|
|
333
|
-
const supportedByValue = new Map();
|
|
334
|
-
for (const entry of supportedEntries) {
|
|
335
|
-
if (!supportedByValue.has(entry.reasoningEffort)) {
|
|
336
|
-
supportedByValue.set(entry.reasoningEffort, entry.description);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
const supportedValues = [...supportedByValue.keys()];
|
|
340
|
-
const resolvedCurrent = currentReasoningEffort && supportedByValue.has(currentReasoningEffort)
|
|
341
|
-
? currentReasoningEffort
|
|
342
|
-
: supportedByValue.has(modelEntry.defaultReasoningEffort)
|
|
343
|
-
? modelEntry.defaultReasoningEffort
|
|
344
|
-
: supportedValues[0];
|
|
345
|
-
if (!resolvedCurrent) {
|
|
346
|
-
return null;
|
|
347
|
-
}
|
|
348
|
-
return {
|
|
349
|
-
id: 'reasoning_effort',
|
|
350
|
-
category: 'thought_level',
|
|
351
|
-
name: 'Reasoning Effort',
|
|
352
|
-
type: 'select',
|
|
353
|
-
currentValue: resolvedCurrent,
|
|
354
|
-
options: supportedValues.map((value) => ({
|
|
355
|
-
value,
|
|
356
|
-
name: value,
|
|
357
|
-
...(supportedByValue.get(value) ? { description: supportedByValue.get(value) } : {}),
|
|
358
|
-
})),
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
function createExecutionModeConfigOption(currentPresetId, presets) {
|
|
362
|
-
return {
|
|
363
|
-
id: 'execution_mode',
|
|
364
|
-
category: 'permission',
|
|
365
|
-
name: 'Execution Mode',
|
|
366
|
-
type: 'select',
|
|
367
|
-
currentValue: currentPresetId,
|
|
368
|
-
options: presets.map((preset) => ({
|
|
369
|
-
value: preset.id,
|
|
370
|
-
name: preset.name,
|
|
371
|
-
...(preset.description ? { description: preset.description } : {}),
|
|
372
|
-
})),
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
function toExecutionPresetId(approvalPolicy, sandboxMode) {
|
|
376
|
-
return JSON.stringify([approvalPolicy, sandboxMode]);
|
|
377
|
-
}
|
|
378
176
|
export class CodexAppServerAcpAdapter {
|
|
379
177
|
connection;
|
|
380
178
|
codex;
|
|
381
|
-
|
|
382
|
-
sessionIdByThreadId = new Map();
|
|
179
|
+
stateContainer = new CodexAdapterSessionStateContainer();
|
|
383
180
|
modelCatalog = [];
|
|
384
181
|
allowedApprovalPolicies = [];
|
|
385
182
|
allowedSandboxModes = [];
|
|
386
183
|
collaborationModes = [];
|
|
387
|
-
|
|
388
|
-
appliedMcpServerConfigJson = '{}';
|
|
389
|
-
shapeDriftCounts = new Map();
|
|
184
|
+
shapeDriftReporter;
|
|
390
185
|
streamEventHandler;
|
|
391
|
-
|
|
186
|
+
get sessions() {
|
|
187
|
+
return this.stateContainer.sessions;
|
|
188
|
+
}
|
|
189
|
+
get sessionIdByThreadId() {
|
|
190
|
+
return this.stateContainer.sessionIdByThreadId;
|
|
191
|
+
}
|
|
192
|
+
get mcpServersByThreadId() {
|
|
193
|
+
return this.stateContainer.mcpServersByThreadId;
|
|
194
|
+
}
|
|
195
|
+
get appliedMcpServerConfigJson() {
|
|
196
|
+
return this.stateContainer.appliedMcpServerConfigJson;
|
|
197
|
+
}
|
|
198
|
+
set appliedMcpServerConfigJson(value) {
|
|
199
|
+
this.stateContainer.appliedMcpServerConfigJson = value;
|
|
200
|
+
}
|
|
201
|
+
constructor(connection, codexClient, options) {
|
|
392
202
|
this.connection = connection;
|
|
203
|
+
this.shapeDriftReporter = new ShapeDriftReporter(options?.shapeDriftWarn);
|
|
393
204
|
this.codex =
|
|
394
205
|
codexClient ??
|
|
395
206
|
new CodexRpcClient({
|
|
@@ -434,28 +245,14 @@ export class CodexAppServerAcpAdapter {
|
|
|
434
245
|
this.monitorConnectionClose();
|
|
435
246
|
}
|
|
436
247
|
monitorConnectionClose() {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
catch {
|
|
448
|
-
attachAttempts += 1;
|
|
449
|
-
if (attachAttempts >= MAX_CLOSE_WATCHER_ATTACH_RETRIES) {
|
|
450
|
-
process.stderr.write(`[codex-app-server-acp] failed to attach close watcher after ${MAX_CLOSE_WATCHER_ATTACH_RETRIES} attempts\n`);
|
|
451
|
-
void this.codex.stop();
|
|
452
|
-
return;
|
|
453
|
-
}
|
|
454
|
-
const retryTimer = setTimeout(attachCloseWatcher, 0);
|
|
455
|
-
retryTimer.unref?.();
|
|
456
|
-
}
|
|
457
|
-
};
|
|
458
|
-
queueMicrotask(attachCloseWatcher);
|
|
248
|
+
attachCloseWatcherWithRetry({
|
|
249
|
+
getClosed: () => this.connection.closed,
|
|
250
|
+
onClose: async () => this.codex.stop(),
|
|
251
|
+
onAttachRetryLimitReached: (maxAttempts) => {
|
|
252
|
+
process.stderr.write(`[codex-app-server-acp] failed to attach close watcher after ${maxAttempts} attempts\n`);
|
|
253
|
+
void this.codex.stop();
|
|
254
|
+
},
|
|
255
|
+
});
|
|
459
256
|
}
|
|
460
257
|
async initialize(_params) {
|
|
461
258
|
this.codex.start();
|
|
@@ -469,11 +266,11 @@ export class CodexAppServerAcpAdapter {
|
|
|
469
266
|
},
|
|
470
267
|
});
|
|
471
268
|
this.codex.notify('initialized');
|
|
472
|
-
const configRequirements = await this.
|
|
269
|
+
const configRequirements = await loadConfigRequirements({ codex: this.codex });
|
|
473
270
|
this.allowedApprovalPolicies = configRequirements.allowedApprovalPolicies;
|
|
474
271
|
this.allowedSandboxModes = configRequirements.allowedSandboxModes;
|
|
475
|
-
this.collaborationModes = await this.
|
|
476
|
-
this.modelCatalog = await this.
|
|
272
|
+
this.collaborationModes = await loadCollaborationModes({ codex: this.codex });
|
|
273
|
+
this.modelCatalog = await loadModelCatalog({ codex: this.codex });
|
|
477
274
|
return {
|
|
478
275
|
protocolVersion: PROTOCOL_VERSION,
|
|
479
276
|
agentInfo: {
|
|
@@ -491,91 +288,42 @@ export class CodexAppServerAcpAdapter {
|
|
|
491
288
|
};
|
|
492
289
|
}
|
|
493
290
|
async newSession(params) {
|
|
494
|
-
const
|
|
495
|
-
|
|
291
|
+
const negotiatedSession = await negotiateNewSession({
|
|
292
|
+
codex: this.codex,
|
|
496
293
|
cwd: params.cwd,
|
|
497
|
-
|
|
294
|
+
resolveDefaultModel: () => this.resolveDefaultModel(),
|
|
295
|
+
resolveSessionModel: (model, fallbackModel) => this.resolveSessionModel(model, fallbackModel),
|
|
296
|
+
resolveSandboxPolicy: (sandbox, cwd) => this.resolveSandboxPolicy(sandbox, cwd),
|
|
297
|
+
resolveReasoningEffortForModel: (modelId, candidateReasoningEffort) => this.resolveReasoningEffortForModel(modelId, candidateReasoningEffort),
|
|
298
|
+
resolveDefaultCollaborationMode: () => this.resolveDefaultCollaborationMode(),
|
|
498
299
|
});
|
|
499
|
-
const
|
|
500
|
-
|
|
501
|
-
const approvalPolicy = this.requireApprovalPolicy(response.approvalPolicy, 'thread/start');
|
|
502
|
-
const model = this.resolveSessionModel(response.model, defaultModel);
|
|
503
|
-
const sandboxPolicy = this.resolveSandboxPolicy(response.sandbox, params.cwd);
|
|
504
|
-
const reasoningEffort = this.resolveReasoningEffortForModel(model, response.reasoningEffort);
|
|
505
|
-
const collaborationMode = this.resolveDefaultCollaborationMode();
|
|
506
|
-
const session = {
|
|
507
|
-
sessionId,
|
|
508
|
-
threadId: response.thread.id,
|
|
509
|
-
cwd: params.cwd,
|
|
510
|
-
defaults: {
|
|
511
|
-
model,
|
|
512
|
-
approvalPolicy,
|
|
513
|
-
sandboxPolicy,
|
|
514
|
-
reasoningEffort,
|
|
515
|
-
collaborationMode,
|
|
516
|
-
},
|
|
517
|
-
activeTurn: null,
|
|
518
|
-
toolCallsByItemId: new Map(),
|
|
519
|
-
syntheticallyCompletedToolItemIds: new Set(),
|
|
520
|
-
reasoningDeltaItemIds: new Set(),
|
|
521
|
-
planTextByItemId: new Map(),
|
|
522
|
-
planApprovalRequestedByTurnId: new Set(),
|
|
523
|
-
pendingPlanApprovalsByTurnId: new Map(),
|
|
524
|
-
pendingTurnCompletionsByTurnId: new Map(),
|
|
525
|
-
commandApprovalScopes: new Set(),
|
|
526
|
-
replayedTurnItemKeys: new Set(),
|
|
527
|
-
};
|
|
528
|
-
this.sessions.set(sessionId, session);
|
|
529
|
-
this.sessionIdByThreadId.set(session.threadId, sessionId);
|
|
300
|
+
const session = this.stateContainer.createSession(negotiatedSession);
|
|
301
|
+
this.stateContainer.registerSession(session);
|
|
530
302
|
try {
|
|
531
303
|
await this.applyMcpServers(session.threadId, params.mcpServers);
|
|
532
304
|
}
|
|
533
305
|
catch (error) {
|
|
534
|
-
this.
|
|
535
|
-
this.sessionIdByThreadId.delete(session.threadId);
|
|
306
|
+
this.stateContainer.deleteSession(negotiatedSession.sessionId);
|
|
536
307
|
throw error;
|
|
537
308
|
}
|
|
538
309
|
return {
|
|
539
|
-
sessionId,
|
|
310
|
+
sessionId: negotiatedSession.sessionId,
|
|
540
311
|
configOptions: this.buildConfigOptions(session),
|
|
541
312
|
};
|
|
542
313
|
}
|
|
543
314
|
async loadSession(params) {
|
|
544
|
-
const
|
|
545
|
-
|
|
546
|
-
threadId,
|
|
547
|
-
cwd: params.cwd,
|
|
548
|
-
});
|
|
549
|
-
const response = threadResumeResponseSchema.parse(responseRaw);
|
|
550
|
-
const approvalPolicy = this.requireApprovalPolicy(response.approvalPolicy, 'thread/resume');
|
|
551
|
-
const model = this.resolveSessionModel(response.model, this.resolveDefaultModel());
|
|
552
|
-
const sandboxPolicy = this.resolveSandboxPolicy(response.sandbox, params.cwd);
|
|
553
|
-
const reasoningEffort = this.resolveReasoningEffortForModel(model, response.reasoningEffort);
|
|
554
|
-
const collaborationMode = this.resolveDefaultCollaborationMode();
|
|
555
|
-
const session = {
|
|
315
|
+
const negotiatedSession = await negotiateSessionResume({
|
|
316
|
+
codex: this.codex,
|
|
556
317
|
sessionId: params.sessionId,
|
|
557
|
-
threadId: response.thread.id,
|
|
558
318
|
cwd: params.cwd,
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
toolCallsByItemId: new Map(),
|
|
568
|
-
syntheticallyCompletedToolItemIds: new Set(),
|
|
569
|
-
reasoningDeltaItemIds: new Set(),
|
|
570
|
-
planTextByItemId: new Map(),
|
|
571
|
-
planApprovalRequestedByTurnId: new Set(),
|
|
572
|
-
pendingPlanApprovalsByTurnId: new Map(),
|
|
573
|
-
pendingTurnCompletionsByTurnId: new Map(),
|
|
574
|
-
commandApprovalScopes: new Set(),
|
|
575
|
-
replayedTurnItemKeys: new Set(),
|
|
576
|
-
};
|
|
577
|
-
this.sessions.set(session.sessionId, session);
|
|
578
|
-
this.sessionIdByThreadId.set(session.threadId, session.sessionId);
|
|
319
|
+
resolveDefaultModel: () => this.resolveDefaultModel(),
|
|
320
|
+
resolveSessionModel: (model, fallbackModel) => this.resolveSessionModel(model, fallbackModel),
|
|
321
|
+
resolveSandboxPolicy: (sandbox, cwd) => this.resolveSandboxPolicy(sandbox, cwd),
|
|
322
|
+
resolveReasoningEffortForModel: (modelId, candidateReasoningEffort) => this.resolveReasoningEffortForModel(modelId, candidateReasoningEffort),
|
|
323
|
+
resolveDefaultCollaborationMode: () => this.resolveDefaultCollaborationMode(),
|
|
324
|
+
});
|
|
325
|
+
const session = this.stateContainer.createSession(negotiatedSession);
|
|
326
|
+
this.stateContainer.registerSession(session);
|
|
579
327
|
try {
|
|
580
328
|
await this.applyMcpServers(session.threadId, params.mcpServers);
|
|
581
329
|
await this.replayThreadHistory(session.sessionId, session.threadId);
|
|
@@ -586,8 +334,7 @@ export class CodexAppServerAcpAdapter {
|
|
|
586
334
|
}
|
|
587
335
|
catch {
|
|
588
336
|
}
|
|
589
|
-
this.
|
|
590
|
-
this.sessionIdByThreadId.delete(session.threadId);
|
|
337
|
+
this.stateContainer.deleteSession(session.sessionId);
|
|
591
338
|
throw error;
|
|
592
339
|
}
|
|
593
340
|
return {
|
|
@@ -639,7 +386,7 @@ export class CodexAppServerAcpAdapter {
|
|
|
639
386
|
break;
|
|
640
387
|
}
|
|
641
388
|
case 'model': {
|
|
642
|
-
if (!this.modelCatalog
|
|
389
|
+
if (!isKnownModel(this.modelCatalog, params.value)) {
|
|
643
390
|
throw RequestError.invalidParams({
|
|
644
391
|
configId: params.configId,
|
|
645
392
|
value: params.value,
|
|
@@ -651,12 +398,7 @@ export class CodexAppServerAcpAdapter {
|
|
|
651
398
|
}
|
|
652
399
|
case 'reasoning_effort':
|
|
653
400
|
case 'thought_level': {
|
|
654
|
-
|
|
655
|
-
const supportedReasoningEfforts = modelEntry?.supportedReasoningEfforts ?? [];
|
|
656
|
-
const supportedValues = new Set(supportedReasoningEfforts
|
|
657
|
-
.map((entry) => entry.reasoningEffort)
|
|
658
|
-
.filter((effort) => isNonEmptyString(effort)));
|
|
659
|
-
if (!supportedValues.has(params.value)) {
|
|
401
|
+
if (!isReasoningEffortSupportedForModel(this.modelCatalog, session.defaults.model, params.value)) {
|
|
660
402
|
throw RequestError.invalidParams({
|
|
661
403
|
configId: params.configId,
|
|
662
404
|
value: params.value,
|
|
@@ -806,15 +548,7 @@ export class CodexAppServerAcpAdapter {
|
|
|
806
548
|
}
|
|
807
549
|
}
|
|
808
550
|
resolveDefaultModel() {
|
|
809
|
-
|
|
810
|
-
const fallback = this.modelCatalog[0]?.id;
|
|
811
|
-
if (preferred?.id) {
|
|
812
|
-
return preferred.id;
|
|
813
|
-
}
|
|
814
|
-
if (fallback) {
|
|
815
|
-
return fallback;
|
|
816
|
-
}
|
|
817
|
-
throw new Error('Codex app-server model/list returned no models');
|
|
551
|
+
return resolveDefaultModel(this.modelCatalog);
|
|
818
552
|
}
|
|
819
553
|
buildMergedMcpServersConfig() {
|
|
820
554
|
const merged = {};
|
|
@@ -887,256 +621,36 @@ export class CodexAppServerAcpAdapter {
|
|
|
887
621
|
}
|
|
888
622
|
}
|
|
889
623
|
buildConfigOptions(session) {
|
|
890
|
-
|
|
891
|
-
const currentExecutionPreset = this.resolveExecutionPresetId(session, executionPresets);
|
|
892
|
-
const configOptions = [
|
|
893
|
-
createModelConfigOption(session.defaults.model, this.modelCatalog),
|
|
894
|
-
createCollaborationModeConfigOption(session.defaults.collaborationMode, this.collaborationModes),
|
|
895
|
-
createExecutionModeConfigOption(currentExecutionPreset, executionPresets),
|
|
896
|
-
];
|
|
897
|
-
const reasoningOption = createReasoningEffortConfigOption(session.defaults.reasoningEffort, this.modelCatalog, session.defaults.model);
|
|
898
|
-
if (reasoningOption) {
|
|
899
|
-
configOptions.push(reasoningOption);
|
|
900
|
-
}
|
|
901
|
-
return configOptions;
|
|
902
|
-
}
|
|
903
|
-
requireApprovalPolicy(approvalPolicy, source) {
|
|
904
|
-
if (!isNonEmptyString(approvalPolicy)) {
|
|
905
|
-
throw new Error(`Codex ${source} response did not include approvalPolicy`);
|
|
906
|
-
}
|
|
907
|
-
return approvalPolicy;
|
|
624
|
+
return buildConfigOptions(session, this.modelCatalog, this.collaborationModes, this.allowedApprovalPolicies, this.allowedSandboxModes);
|
|
908
625
|
}
|
|
909
626
|
resolveSessionModel(model, fallbackModel) {
|
|
910
|
-
return
|
|
627
|
+
return resolveSessionModel(model, fallbackModel);
|
|
911
628
|
}
|
|
912
629
|
resolveSandboxPolicy(sandbox, cwd) {
|
|
913
|
-
return
|
|
630
|
+
return resolveSandboxPolicy(sandbox, cwd);
|
|
914
631
|
}
|
|
915
632
|
resolveDefaultCollaborationMode() {
|
|
916
|
-
|
|
917
|
-
throw new Error('Codex collaborationMode/list returned no modes');
|
|
918
|
-
}
|
|
919
|
-
const preferredDefault = this.collaborationModes.find((entry) => entry.mode === 'default');
|
|
920
|
-
const firstMode = this.collaborationModes[0]?.mode;
|
|
921
|
-
if (!firstMode) {
|
|
922
|
-
throw new Error('Codex collaborationMode/list returned an invalid mode entry');
|
|
923
|
-
}
|
|
924
|
-
return preferredDefault?.mode ?? firstMode;
|
|
633
|
+
return resolveDefaultCollaborationMode(this.collaborationModes);
|
|
925
634
|
}
|
|
926
635
|
resolveTurnCollaborationMode(session) {
|
|
927
|
-
|
|
928
|
-
return {
|
|
929
|
-
mode: modeEntry?.mode ?? session.defaults.collaborationMode,
|
|
930
|
-
settings: {
|
|
931
|
-
model: modeEntry?.model ?? session.defaults.model,
|
|
932
|
-
reasoning_effort: modeEntry?.reasoningEffort ?? session.defaults.reasoningEffort,
|
|
933
|
-
developer_instructions: modeEntry?.developerInstructions ?? null,
|
|
934
|
-
},
|
|
935
|
-
};
|
|
636
|
+
return resolveTurnCollaborationMode(this.collaborationModes, session);
|
|
936
637
|
}
|
|
937
638
|
resolveReasoningEffortForModel(modelId, candidateReasoningEffort) {
|
|
938
|
-
|
|
939
|
-
if (!modelEntry) {
|
|
940
|
-
return null;
|
|
941
|
-
}
|
|
942
|
-
const supportedEntries = modelEntry.supportedReasoningEfforts.filter((entry) => isNonEmptyString(entry.reasoningEffort));
|
|
943
|
-
if (supportedEntries.length === 0) {
|
|
944
|
-
return null;
|
|
945
|
-
}
|
|
946
|
-
const supportedValues = dedupeStrings(supportedEntries.map((entry) => entry.reasoningEffort));
|
|
947
|
-
if (isNonEmptyString(candidateReasoningEffort) &&
|
|
948
|
-
supportedValues.includes(candidateReasoningEffort)) {
|
|
949
|
-
return candidateReasoningEffort;
|
|
950
|
-
}
|
|
951
|
-
if (supportedValues.includes(modelEntry.defaultReasoningEffort)) {
|
|
952
|
-
return modelEntry.defaultReasoningEffort;
|
|
953
|
-
}
|
|
954
|
-
return supportedValues[0] ?? null;
|
|
639
|
+
return resolveReasoningEffortForModel(this.modelCatalog, modelId, candidateReasoningEffort);
|
|
955
640
|
}
|
|
956
641
|
getCollaborationModeValues(currentMode) {
|
|
957
|
-
|
|
958
|
-
.map((entry) => entry.mode)
|
|
959
|
-
.filter((mode) => isNonEmptyString(mode));
|
|
960
|
-
if (!values.includes(currentMode)) {
|
|
961
|
-
values.unshift(currentMode);
|
|
962
|
-
}
|
|
963
|
-
return dedupeStrings(values);
|
|
964
|
-
}
|
|
965
|
-
resolveCurrentSandboxMode(session) {
|
|
966
|
-
const currentSandboxMode = parseSandboxModeFromPolicy(session.defaults.sandboxPolicy);
|
|
967
|
-
if (currentSandboxMode) {
|
|
968
|
-
return currentSandboxMode;
|
|
969
|
-
}
|
|
970
|
-
const allowedSandboxMode = this.allowedSandboxModes[0];
|
|
971
|
-
if (allowedSandboxMode) {
|
|
972
|
-
return allowedSandboxMode;
|
|
973
|
-
}
|
|
974
|
-
throw new Error('Unable to resolve current sandbox mode for execution-mode options');
|
|
642
|
+
return getCollaborationModeValues(this.collaborationModes, currentMode);
|
|
975
643
|
}
|
|
976
644
|
getExecutionPresets(session) {
|
|
977
|
-
|
|
978
|
-
const policies = this.allowedApprovalPolicies.length > 0
|
|
979
|
-
? this.allowedApprovalPolicies
|
|
980
|
-
: [session.defaults.approvalPolicy];
|
|
981
|
-
const sandboxModes = this.allowedSandboxModes.length > 0 ? this.allowedSandboxModes : [currentSandboxMode];
|
|
982
|
-
const presets = [];
|
|
983
|
-
const seen = new Set();
|
|
984
|
-
const addPreset = (approvalPolicy, sandboxMode, description) => {
|
|
985
|
-
const id = toExecutionPresetId(approvalPolicy, sandboxMode);
|
|
986
|
-
if (seen.has(id)) {
|
|
987
|
-
return;
|
|
988
|
-
}
|
|
989
|
-
seen.add(id);
|
|
990
|
-
presets.push({
|
|
991
|
-
id,
|
|
992
|
-
name: formatExecutionPresetName(approvalPolicy, sandboxMode),
|
|
993
|
-
...(description ? { description } : {}),
|
|
994
|
-
approvalPolicy,
|
|
995
|
-
sandboxMode,
|
|
996
|
-
});
|
|
997
|
-
};
|
|
998
|
-
addPreset(session.defaults.approvalPolicy, currentSandboxMode, `Current session: ${formatExecutionPresetName(session.defaults.approvalPolicy, currentSandboxMode)}`);
|
|
999
|
-
for (const policy of policies) {
|
|
1000
|
-
for (const sandboxMode of sandboxModes) {
|
|
1001
|
-
addPreset(policy, sandboxMode);
|
|
1002
|
-
}
|
|
1003
|
-
}
|
|
1004
|
-
return presets;
|
|
1005
|
-
}
|
|
1006
|
-
resolveExecutionPresetId(session, presets) {
|
|
1007
|
-
const currentSandboxMode = this.resolveCurrentSandboxMode(session);
|
|
1008
|
-
const currentPresetId = toExecutionPresetId(session.defaults.approvalPolicy, currentSandboxMode);
|
|
1009
|
-
const fallbackPresetId = presets[0]?.id;
|
|
1010
|
-
if (!fallbackPresetId) {
|
|
1011
|
-
throw new Error('Execution-mode presets are unavailable for this session');
|
|
1012
|
-
}
|
|
1013
|
-
return presets.some((preset) => preset.id === currentPresetId)
|
|
1014
|
-
? currentPresetId
|
|
1015
|
-
: fallbackPresetId;
|
|
645
|
+
return getExecutionPresets(session, this.allowedApprovalPolicies, this.allowedSandboxModes);
|
|
1016
646
|
}
|
|
1017
647
|
requireSession(sessionId) {
|
|
1018
|
-
const session = this.
|
|
648
|
+
const session = this.stateContainer.getSession(sessionId);
|
|
1019
649
|
if (!session) {
|
|
1020
650
|
throw RequestError.invalidParams({ sessionId });
|
|
1021
651
|
}
|
|
1022
652
|
return session;
|
|
1023
653
|
}
|
|
1024
|
-
async loadConfigRequirements() {
|
|
1025
|
-
const raw = await this.codex.request('configRequirements/read', undefined);
|
|
1026
|
-
const parsed = configRequirementsReadResponseSchema.parse(raw);
|
|
1027
|
-
const requirements = parsed.requirements;
|
|
1028
|
-
const allowedApprovalPolicies = dedupeStrings((requirements?.allowedApprovalPolicies ?? []).filter(isNonEmptyString));
|
|
1029
|
-
const allowedSandboxModes = dedupeStrings((requirements?.allowedSandboxModes ?? []).filter((mode) => mode === 'read-only' || mode === 'workspace-write' || mode === 'danger-full-access'));
|
|
1030
|
-
const hasExplicitApprovalPolicies = Array.isArray(requirements?.allowedApprovalPolicies);
|
|
1031
|
-
const hasExplicitSandboxModes = Array.isArray(requirements?.allowedSandboxModes);
|
|
1032
|
-
return {
|
|
1033
|
-
allowedApprovalPolicies: allowedApprovalPolicies.length > 0
|
|
1034
|
-
? allowedApprovalPolicies
|
|
1035
|
-
: hasExplicitApprovalPolicies
|
|
1036
|
-
? []
|
|
1037
|
-
: DEFAULT_APPROVAL_POLICIES,
|
|
1038
|
-
allowedSandboxModes: allowedSandboxModes.length > 0
|
|
1039
|
-
? allowedSandboxModes
|
|
1040
|
-
: hasExplicitSandboxModes
|
|
1041
|
-
? []
|
|
1042
|
-
: DEFAULT_SANDBOX_MODES,
|
|
1043
|
-
};
|
|
1044
|
-
}
|
|
1045
|
-
async loadCollaborationModes() {
|
|
1046
|
-
const entries = [];
|
|
1047
|
-
let cursor = null;
|
|
1048
|
-
for (;;) {
|
|
1049
|
-
const response = await this.requestCollaborationModeListWithRetry(cursor);
|
|
1050
|
-
entries.push(...response.data.flatMap((entry) => isNonEmptyString(entry.mode)
|
|
1051
|
-
? [
|
|
1052
|
-
{
|
|
1053
|
-
mode: entry.mode,
|
|
1054
|
-
name: entry.name,
|
|
1055
|
-
model: entry.model ?? null,
|
|
1056
|
-
reasoningEffort: entry.reasoning_effort ?? null,
|
|
1057
|
-
developerInstructions: entry.developer_instructions ?? null,
|
|
1058
|
-
},
|
|
1059
|
-
]
|
|
1060
|
-
: []));
|
|
1061
|
-
cursor = response.nextCursor ?? null;
|
|
1062
|
-
if (!cursor) {
|
|
1063
|
-
break;
|
|
1064
|
-
}
|
|
1065
|
-
}
|
|
1066
|
-
if (entries.length === 0) {
|
|
1067
|
-
throw new Error('Codex collaborationMode/list returned no modes');
|
|
1068
|
-
}
|
|
1069
|
-
return entries;
|
|
1070
|
-
}
|
|
1071
|
-
async requestCollaborationModeListWithRetry(cursor, maxAttempts = 3) {
|
|
1072
|
-
let attempt = 0;
|
|
1073
|
-
let lastError;
|
|
1074
|
-
while (attempt < maxAttempts) {
|
|
1075
|
-
attempt += 1;
|
|
1076
|
-
try {
|
|
1077
|
-
const raw = await this.codex.request('collaborationMode/list', cursor ? { cursor } : {});
|
|
1078
|
-
return collaborationModeListResponseSchema.parse(raw);
|
|
1079
|
-
}
|
|
1080
|
-
catch (error) {
|
|
1081
|
-
lastError = error;
|
|
1082
|
-
if (!(error instanceof CodexRequestError) ||
|
|
1083
|
-
error.code !== -32_001 ||
|
|
1084
|
-
attempt >= maxAttempts) {
|
|
1085
|
-
throw error;
|
|
1086
|
-
}
|
|
1087
|
-
const delayMs = Math.round(2 ** attempt * 100 + Math.random() * 120);
|
|
1088
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
1089
|
-
}
|
|
1090
|
-
}
|
|
1091
|
-
throw lastError;
|
|
1092
|
-
}
|
|
1093
|
-
async loadModelCatalog() {
|
|
1094
|
-
const models = [];
|
|
1095
|
-
let cursor = null;
|
|
1096
|
-
for (;;) {
|
|
1097
|
-
const response = await this.requestModelListWithRetry(cursor);
|
|
1098
|
-
models.push(...response.data.map((model) => ({
|
|
1099
|
-
id: model.id,
|
|
1100
|
-
displayName: model.displayName,
|
|
1101
|
-
description: model.description,
|
|
1102
|
-
defaultReasoningEffort: model.defaultReasoningEffort,
|
|
1103
|
-
supportedReasoningEfforts: (model.supportedReasoningEfforts ?? [])
|
|
1104
|
-
.filter((entry) => isNonEmptyString(entry.reasoningEffort))
|
|
1105
|
-
.map((entry) => ({
|
|
1106
|
-
reasoningEffort: entry.reasoningEffort,
|
|
1107
|
-
description: entry.description,
|
|
1108
|
-
})),
|
|
1109
|
-
inputModalities: model.inputModalities ?? [],
|
|
1110
|
-
isDefault: model.isDefault ?? false,
|
|
1111
|
-
})));
|
|
1112
|
-
cursor = response.nextCursor ?? null;
|
|
1113
|
-
if (!cursor) {
|
|
1114
|
-
return models;
|
|
1115
|
-
}
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
async requestModelListWithRetry(cursor, maxAttempts = 3) {
|
|
1119
|
-
let attempt = 0;
|
|
1120
|
-
let lastError;
|
|
1121
|
-
while (attempt < maxAttempts) {
|
|
1122
|
-
attempt += 1;
|
|
1123
|
-
try {
|
|
1124
|
-
const raw = await this.codex.request('model/list', cursor ? { cursor } : {});
|
|
1125
|
-
return modelListResponseSchema.parse(raw);
|
|
1126
|
-
}
|
|
1127
|
-
catch (error) {
|
|
1128
|
-
lastError = error;
|
|
1129
|
-
if (!(error instanceof CodexRequestError) ||
|
|
1130
|
-
error.code !== -32_001 ||
|
|
1131
|
-
attempt >= maxAttempts) {
|
|
1132
|
-
throw error;
|
|
1133
|
-
}
|
|
1134
|
-
const delayMs = Math.round(2 ** attempt * 100 + Math.random() * 120);
|
|
1135
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
1136
|
-
}
|
|
1137
|
-
}
|
|
1138
|
-
throw lastError;
|
|
1139
|
-
}
|
|
1140
654
|
async replayThreadHistory(sessionId, threadId) {
|
|
1141
655
|
await this.streamEventHandler.replayThreadHistory(sessionId, threadId);
|
|
1142
656
|
}
|
|
@@ -1196,11 +710,7 @@ export class CodexAppServerAcpAdapter {
|
|
|
1196
710
|
return left.localeCompare(right);
|
|
1197
711
|
}
|
|
1198
712
|
resolveCollaborationModeLabel(modeId) {
|
|
1199
|
-
|
|
1200
|
-
if (entry?.name) {
|
|
1201
|
-
return entry.name;
|
|
1202
|
-
}
|
|
1203
|
-
return sanitizeModeName(modeId);
|
|
713
|
+
return resolveCollaborationModeLabel(this.collaborationModes, modeId);
|
|
1204
714
|
}
|
|
1205
715
|
buildPlanApprovalOptions(session) {
|
|
1206
716
|
const currentMode = session.defaults.collaborationMode;
|
|
@@ -1413,11 +923,7 @@ export class CodexAppServerAcpAdapter {
|
|
|
1413
923
|
session.pendingTurnCompletionsByTurnId.clear();
|
|
1414
924
|
}
|
|
1415
925
|
reportShapeDrift(event, details) {
|
|
1416
|
-
|
|
1417
|
-
this.shapeDriftCounts.set(event, count);
|
|
1418
|
-
const includeDetails = details !== undefined && (count <= 5 || count % 50 === 0);
|
|
1419
|
-
const detailsSuffix = includeDetails ? ` details=${toShapeDriftDetails(details)}` : '';
|
|
1420
|
-
process.stderr.write(`[codex-app-server-acp] shape-drift event=${event} count=${count}${detailsSuffix}\n`);
|
|
926
|
+
this.shapeDriftReporter.report(event, details);
|
|
1421
927
|
}
|
|
1422
928
|
async emitSessionUpdate(sessionId, update) {
|
|
1423
929
|
try {
|
|
@@ -1427,10 +933,10 @@ export class CodexAppServerAcpAdapter {
|
|
|
1427
933
|
}
|
|
1428
934
|
}
|
|
1429
935
|
}
|
|
1430
|
-
export function runCodexAppServerAcpAdapter() {
|
|
936
|
+
export function runCodexAppServerAcpAdapter(options) {
|
|
1431
937
|
const output = Writable.toWeb(process.stdout);
|
|
1432
938
|
const input = Readable.toWeb(process.stdin);
|
|
1433
939
|
const stream = ndJsonStream(output, input);
|
|
1434
|
-
new AgentSideConnection((connection) => new CodexAppServerAcpAdapter(connection), stream);
|
|
940
|
+
new AgentSideConnection((connection) => new CodexAppServerAcpAdapter(connection, undefined, options), stream);
|
|
1435
941
|
}
|
|
1436
942
|
//# sourceMappingURL=codex-app-server-acp-adapter.js.map
|