@surething/cockpit 1.0.273 → 1.0.274
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/.next-prod/BUILD_ID +1 -1
- package/.next-prod/app-path-routes-manifest.json +5 -4
- package/.next-prod/build-manifest.json +3 -3
- package/.next-prod/cockpit-build.json +1 -1
- package/.next-prod/prerender-manifest.json +4 -4
- package/.next-prod/react-loadable-manifest.json +0 -12
- package/.next-prod/routes-manifest.json +14 -6
- package/.next-prod/server/app/_global-error/page.js +1 -1
- package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
- package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/_global-error.html +1 -1
- package/.next-prod/server/app/_global-error.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found/page.js +1 -1
- package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
- package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/_not-found.html +2 -2
- package/.next-prod/server/app/_not-found.rsc +3 -3
- package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next-prod/server/app/api/agent/test/route.js +1 -1
- package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/bash/route.js +1 -1
- package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/deepseek/route.js +1 -1
- package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/glm/route.js +1 -1
- package/.next-prod/server/app/api/chat/glm/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/kimi/route.js +1 -1
- package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/ollama/route.js +1 -1
- package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/route.js +1 -1
- package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/stop/route.js +1 -1
- package/.next-prod/server/app/api/chat/stop/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/claude-stats/route.js +1 -1
- package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/commands/route.js +1 -1
- package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/comments/route.js +1 -1
- package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/columns/route.js +1 -1
- package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/connect/route.js +2 -2
- package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/export/route.js +1 -1
- package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/query/route.js +1 -1
- package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/schemas/route.js +2 -2
- package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/deepseek/balance/route.js +1 -1
- package/.next-prod/server/app/api/deepseek/balance/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/deepseek/credentials/route.js +1 -1
- package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/deepseek/models/route.js +1 -1
- package/.next-prod/server/app/api/deepseek/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/dev/spans/route.js +1 -1
- package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/extension/version/route.js +1 -1
- package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/file/route.js +1 -1
- package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/blame/route.js +1 -1
- package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
- package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/copy/route.js +1 -1
- package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/delete/route.js +1 -1
- package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/expanded/route.js +1 -1
- package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/index/route.js +1 -1
- package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/init/route.js +1 -1
- package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/paste/route.js +1 -1
- package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/read/route.js +1 -1
- package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/readdir/route.js +1 -1
- package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/recent/route.js +1 -1
- package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/save/route.js +1 -1
- package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/search/route.js +1 -1
- package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/stat/route.js +1 -1
- package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/text/route.js +1 -1
- package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/blob/route.js +1 -1
- package/.next-prod/server/app/api/git/blob/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
- package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branches/route.js +1 -1
- package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
- package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commits/route.js +1 -1
- package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/current-branch/route.js +1 -1
- package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/diff/route.js +1 -1
- package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/discard/route.js +1 -1
- package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/stage/route.js +1 -1
- package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/status/route.js +1 -1
- package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/unstage/route.js +1 -1
- package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/worktree/route.js +1 -1
- package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/glm/credentials/route.js +1 -1
- package/.next-prod/server/app/api/glm/credentials/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/glm/models/route.js +1 -1
- package/.next-prod/server/app/api/glm/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/glm/usage/route.js +1 -1
- package/.next-prod/server/app/api/glm/usage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/global-state/route.js +1 -1
- package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/health/route.js +1 -1
- package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/html-apps/[id]/route.js +1 -1
- package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/html-apps/route.js +1 -1
- package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/instructions/config/route.js +1 -0
- package/.next-prod/server/app/api/{prompts → instructions}/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/instructions/config/route_client-reference-manifest.js +1 -0
- package/.next-prod/server/app/api/kimi/credentials/route.js +1 -1
- package/.next-prod/server/app/api/kimi/credentials/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/kimi/models/route.js +1 -1
- package/.next-prod/server/app/api/kimi/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/kimi/usage/route.js +1 -1
- package/.next-prod/server/app/api/kimi/usage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
- package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
- package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/references/route.js +1 -1
- package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/status/route.js +1 -1
- package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/columns/route.js +2 -2
- package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
- package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/export/route.js +1 -1
- package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/query/route.js +1 -1
- package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/schemas/route.js +2 -2
- package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/note/route.js +1 -1
- package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/config/route.js +1 -1
- package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/models/route.js +1 -1
- package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/start/route.js +1 -1
- package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-cursor/route.js +1 -1
- package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-vscode/route.js +1 -1
- package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pick-folder/route.js +1 -1
- package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
- package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-settings/route.js +1 -1
- package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-state/route.js +2 -2
- package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/affected/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/callees/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/callers/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/coedit/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/context/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/impact/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/related/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/risk/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
- package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projects/route.js +1 -1
- package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/push/public-key/route.js +1 -1
- package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/push/subscribe/route.js +1 -1
- package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/push/unsubscribe/route.js +1 -1
- package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/command/route.js +1 -1
- package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/connect/route.js +1 -1
- package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/delete/route.js +1 -1
- package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/get/route.js +1 -1
- package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/keys/route.js +1 -1
- package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/set/route.js +1 -1
- package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/restart/route.js +1 -1
- package/.next-prod/server/app/api/restart/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
- package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
- package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/route.js +1 -1
- package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/identify/route.js +1 -1
- package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/order/route.js +1 -1
- package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/route.js +1 -1
- package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/share-info/route.js +1 -1
- package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/users/route.js +1 -1
- package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js +2 -2
- package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/config/route.js +1 -1
- package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/scripts/route.js +1 -1
- package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/turn/route.js +2 -0
- package/.next-prod/server/app/api/session/[sessionId]/turn/route.js.nft.json +1 -0
- package/.next-prod/server/app/api/session/[sessionId]/turn/route_client-reference-manifest.js +1 -0
- package/.next-prod/server/app/api/session/user-messages/route.js +1 -1
- package/.next-prod/server/app/api/session/user-messages/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
- package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/route.js +1 -1
- package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/settings/route.js +1 -1
- package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/shutdown/route.js +1 -1
- package/.next-prod/server/app/api/shutdown/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
- package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/content/route.js +1 -1
- package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/route.js +1 -1
- package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/snapshots/blob/route.js +1 -1
- package/.next-prod/server/app/api/snapshots/blob/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/snapshots/diff/route.js +1 -1
- package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/snapshots/route.js +1 -1
- package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
- package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
- package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/env/route.js +1 -1
- package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/history/route.js +1 -1
- package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/update/route.js +1 -1
- package/.next-prod/server/app/api/update/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/update-state/route.js +1 -1
- package/.next-prod/server/app/api/update-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/version/route.js +1 -1
- package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/apps/[...path]/route.js +1 -1
- package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -1
- package/.next-prod/server/app/favicon.ico/route.js +1 -1
- package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next-prod/server/app/m/page.js +1 -1
- package/.next-prod/server/app/m/page.js.nft.json +1 -1
- package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
- package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next-prod/server/app/page.js +1 -1
- package/.next-prod/server/app/page.js.nft.json +1 -1
- package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/project/page.js +1 -1
- package/.next-prod/server/app/project/page.js.nft.json +1 -1
- package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/review/[id]/page.js +1 -1
- package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
- package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app-paths-manifest.json +5 -4
- package/.next-prod/server/chunks/2493.js +3 -3
- package/.next-prod/server/chunks/3286.js +1 -1
- package/.next-prod/server/chunks/516.js +1 -1
- package/.next-prod/server/chunks/5750.js +19 -19
- package/.next-prod/server/chunks/6495.js +1 -1
- package/.next-prod/server/chunks/6548.js +1 -1
- package/.next-prod/server/chunks/{5433.js → 7956.js} +9 -10
- package/.next-prod/server/chunks/8616.js +1 -1
- package/.next-prod/server/chunks/9830.js +1 -1
- package/.next-prod/server/chunks/9891.js +7 -0
- package/.next-prod/server/functions-config-manifest.json +1 -1
- package/.next-prod/server/middleware-build-manifest.js +1 -1
- package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
- package/.next-prod/server/pages/404.html +2 -2
- package/.next-prod/server/pages/500.html +1 -1
- package/.next-prod/server/server-reference-manifest.json +1 -1
- package/.next-prod/static/{qoIca6xp2OKAJtDEvMaXC → Ltfbusd381Du6etTab1ug}/_buildManifest.js +1 -1
- package/.next-prod/static/chunks/{4137-7d6f2498d03b184d.js → 103-1788abe4fb625136.js} +7 -7
- package/.next-prod/static/chunks/{1332-e26fddaef359ce51.js → 1332-e51496c0bf36be06.js} +5 -5
- package/.next-prod/static/chunks/{2032-8326efdf5830d58c.js → 2032-c4d080bb65101d4c.js} +1 -1
- package/.next-prod/static/chunks/2539-52ea8019220fc163.js +17 -0
- package/.next-prod/static/chunks/{7570-ebe01cce6f28a79f.js → 8707-60c93d98f9ca9be7.js} +2 -2
- package/.next-prod/static/chunks/9092-9c01b3ae176018c5.js +716 -0
- package/.next-prod/static/chunks/9656-da407fc0921ddc52.js +32 -0
- package/.next-prod/static/chunks/96c8525a-b50f9758924ea57d.js +1 -0
- package/.next-prod/static/chunks/app/_global-error/page-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/agent/test/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/bash/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/codex/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/deepseek/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/glm/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/kimi/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/ollama/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/stop/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/claude-stats/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/commands/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/comments/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/db/columns/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/db/connect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/db/disconnect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/db/export/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/db/query/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/db/schemas/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/deepseek/balance/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/deepseek/credentials/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/deepseek/models/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/dev/spans/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/extension/version/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/file/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/blame/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/clipboard/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/copy/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/delete/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/expanded/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/index/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/init/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/paste/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/read/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/readdir/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/recent/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/save/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/search/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/stat/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/files/text/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/blob/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/branch-diff/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/branches/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/commit-diff/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/commits/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/current-branch/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/diff/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/discard/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/stage/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/status/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/unstage/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/git/worktree/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/glm/credentials/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/glm/models/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/glm/usage/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/global-state/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/health/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/html-apps/[id]/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/html-apps/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/instructions/config/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/kimi/credentials/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/kimi/models/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/kimi/usage/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/definition/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/hover/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/references/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/status/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/warmup/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/columns/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/connect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/disconnect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/export/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/query/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/schemas/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/connect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/query/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/schema/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/note/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/config/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/models/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/start/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/open-cursor/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/open-vscode/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/pick-folder/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/pinned-sessions/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/project-settings/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/project-state/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/affected/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/callees/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/callers/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/context/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/file/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/impact/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/related/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/risk/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/search/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/projects/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/push/public-key/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/push/subscribe/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/push/unsubscribe/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/command/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/connect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/delete/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/disconnect/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/get/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/keys/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/set/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/restart/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/comments/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/replies/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/identify/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/order/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/share-info/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/review/users/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/scheduled-tasks/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/services/config/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/services/scripts/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/turn/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/session/user-messages/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/session-by-path/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/projects/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/settings/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/shutdown/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/[id]/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/content/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/snapshots/blob/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/snapshots/diff/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/snapshots/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/aliases/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/env/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/history/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/update/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/update-state/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/api/version/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/apps/[...path]/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/{layout-915635f208cba4b3.js → layout-c78a23d9fb720698.js} +1 -1
- package/.next-prod/static/chunks/app/m/page-54ed2c27ba82b757.js +1 -0
- package/.next-prod/static/chunks/app/manifest.webmanifest/route-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/app/{page-48dc2d6146301fd7.js → page-7219de792c309861.js} +1 -1
- package/.next-prod/static/chunks/app/project/{page-48dc2d6146301fd7.js → page-7219de792c309861.js} +1 -1
- package/.next-prod/static/chunks/app/review/[id]/{page-1fe42d46b22c6482.js → page-70fc17b48dfdf8d3.js} +1 -1
- package/.next-prod/static/chunks/bc21e3dd-86c39ec41fe6001c.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-dd925381ab99e37b.js +1 -0
- package/.next-prod/static/chunks/{webpack-82f9e372d672c6bc.js → webpack-9a02cd12ee150c50.js} +1 -1
- package/.next-prod/static/css/08c892de6d5e2335.css +1 -0
- package/.next-prod/trace +14 -14
- package/.next-prod/trace-build +1 -1
- package/.next-prod/types/app/api/{prompts → instructions}/config/route.ts +3 -3
- package/.next-prod/types/app/api/session/[sessionId]/turn/route.ts +353 -0
- package/.next-prod/types/routes.d.ts +3 -2
- package/.next-prod/types/validator.ts +18 -9
- package/dist/{chunk-TOA52B2X.mjs → chunk-OFFSCRWY.mjs} +18 -13
- package/dist/{chunk-PB4GBZQO.mjs → chunk-OO4ODUAC.mjs} +1 -1
- package/dist/{chunk-4EU4KZIO.mjs → chunk-SJ7VM26B.mjs} +4 -14
- package/dist/httpApi.mjs +2 -2
- package/dist/scheduledTasks.mjs +834 -508
- package/dist/wsServer.mjs +3 -3
- package/package.json +3 -3
- package/.next-prod/server/app/api/prompts/config/route.js +0 -1
- package/.next-prod/server/app/api/prompts/config/route_client-reference-manifest.js +0 -1
- package/.next-prod/server/chunks/2728.js +0 -1
- package/.next-prod/server/chunks/3718.js +0 -1
- package/.next-prod/server/chunks/9312.js +0 -1
- package/.next-prod/server/chunks/9352.js +0 -6
- package/.next-prod/static/chunks/5390-e2c2386e8288a254.js +0 -32
- package/.next-prod/static/chunks/7184-8b7ad4ccea8b15a3.js +0 -17
- package/.next-prod/static/chunks/7562.8fdc3abdd45c77ab.js +0 -1
- package/.next-prod/static/chunks/9012.6ed079104670001d.js +0 -1
- package/.next-prod/static/chunks/9092-a942df8114966b59.js +0 -716
- package/.next-prod/static/chunks/96c8525a-f1e0653013503d49.js +0 -2
- package/.next-prod/static/chunks/app/_global-error/page-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/agent/test/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/bash/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/codex/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/deepseek/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/glm/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/kimi/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/ollama/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/stop/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/claude-stats/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/commands/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/comments/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/db/columns/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/db/connect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/db/disconnect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/db/export/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/db/query/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/db/schemas/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/deepseek/balance/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/deepseek/credentials/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/deepseek/models/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/dev/spans/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/extension/version/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/file/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/blame/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/clipboard/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/copy/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/delete/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/expanded/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/index/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/init/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/paste/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/read/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/readdir/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/recent/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/save/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/search/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/stat/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/files/text/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/blob/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/branch-diff/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/branches/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/commit-diff/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/commits/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/current-branch/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/diff/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/discard/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/stage/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/status/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/unstage/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/git/worktree/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/glm/credentials/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/glm/models/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/glm/usage/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/global-state/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/health/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/html-apps/[id]/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/html-apps/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/kimi/credentials/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/kimi/models/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/kimi/usage/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/definition/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/hover/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/references/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/status/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/warmup/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/columns/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/connect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/disconnect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/export/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/query/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/schemas/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/connect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/query/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/schema/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/note/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/config/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/models/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/start/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/open-cursor/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/open-vscode/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/pick-folder/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/pinned-sessions/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/project-settings/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/project-state/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/affected/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/callees/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/callers/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/context/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/file/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/impact/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/related/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/risk/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/search/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/projects/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/prompts/config/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/push/public-key/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/push/subscribe/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/push/unsubscribe/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/command/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/connect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/delete/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/disconnect/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/get/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/keys/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/set/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/restart/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/comments/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/replies/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/identify/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/order/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/share-info/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/review/users/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/scheduled-tasks/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/services/config/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/services/scripts/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/session/user-messages/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/session-by-path/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/projects/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/settings/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/shutdown/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/[id]/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/content/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/snapshots/blob/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/snapshots/diff/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/snapshots/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/aliases/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/env/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/history/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/update/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/update-state/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/api/version/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/apps/[...path]/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/app/m/page-8442a2605d0feb3f.js +0 -1
- package/.next-prod/static/chunks/app/manifest.webmanifest/route-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/bc21e3dd-a78364524623b9b0.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-0bc5d188dc4650ab.js +0 -1
- package/.next-prod/static/css/ec2765469545dfce.css +0 -1
- /package/.next-prod/static/{qoIca6xp2OKAJtDEvMaXC → Ltfbusd381Du6etTab1ug}/_ssgManifest.js +0 -0
package/dist/scheduledTasks.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
stashCodexRollout,
|
|
16
16
|
stashTranscript,
|
|
17
17
|
updateGlobalState
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-OFFSCRWY.mjs";
|
|
19
19
|
import {
|
|
20
20
|
AgentError,
|
|
21
21
|
AppRuntime,
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
settlePendingRecord,
|
|
47
47
|
withFileLock,
|
|
48
48
|
writeJsonFile
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-SJ7VM26B.mjs";
|
|
50
50
|
import {
|
|
51
51
|
__export
|
|
52
52
|
} from "./chunk-7P6ASYW6.mjs";
|
|
@@ -124,13 +124,13 @@ var forkSnapshot = (effect) => {
|
|
|
124
124
|
)
|
|
125
125
|
);
|
|
126
126
|
};
|
|
127
|
-
function snapshotOnRunStart(cwd, sessionKey, provider
|
|
127
|
+
function snapshotOnRunStart(cwd, sessionKey, provider) {
|
|
128
128
|
if (!cwd) return;
|
|
129
129
|
forkSnapshot(
|
|
130
|
-
Effect_exports.flatMap(SnapshotService, (svc) => svc.baseline(cwd, sessionKey, provider
|
|
130
|
+
Effect_exports.flatMap(SnapshotService, (svc) => svc.baseline(cwd, sessionKey, provider))
|
|
131
131
|
);
|
|
132
132
|
}
|
|
133
|
-
function snapshotOnRunEvent(cwd, sessionKey, provider, event
|
|
133
|
+
function snapshotOnRunEvent(cwd, sessionKey, provider, event) {
|
|
134
134
|
if (!cwd) return;
|
|
135
135
|
if (event.type === "assistant") {
|
|
136
136
|
for (const b of contentBlocks(event)) {
|
|
@@ -160,7 +160,6 @@ function snapshotOnRunEvent(cwd, sessionKey, provider, event, runId) {
|
|
|
160
160
|
(svc) => svc.record({
|
|
161
161
|
cwd,
|
|
162
162
|
sessionKey,
|
|
163
|
-
runId,
|
|
164
163
|
provider,
|
|
165
164
|
toolId,
|
|
166
165
|
toolName: meta3?.name ?? "tool",
|
|
@@ -410,7 +409,7 @@ async function dispatchChat(spec, body, request) {
|
|
|
410
409
|
updateGlobalState(cwd, sessionId, "loading", void 0, promptText, spec.name).catch(() => {
|
|
411
410
|
});
|
|
412
411
|
}
|
|
413
|
-
snapshotOnRunStart(cwd || "", currentKey, spec.name
|
|
412
|
+
snapshotOnRunStart(cwd || "", currentKey, spec.name);
|
|
414
413
|
const ctx = {
|
|
415
414
|
prompt: promptText,
|
|
416
415
|
images,
|
|
@@ -421,7 +420,7 @@ async function dispatchChat(spec, body, request) {
|
|
|
421
420
|
emit(event) {
|
|
422
421
|
if (isClosed) return;
|
|
423
422
|
appendRun(currentKey, event);
|
|
424
|
-
snapshotOnRunEvent(cwd || "", currentKey, spec.name, event
|
|
423
|
+
snapshotOnRunEvent(cwd || "", currentKey, spec.name, event);
|
|
425
424
|
},
|
|
426
425
|
rekey(realSessionId) {
|
|
427
426
|
if (!realSessionId) return;
|
|
@@ -2501,8 +2500,8 @@ function emoji() {
|
|
|
2501
2500
|
}
|
|
2502
2501
|
var ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
|
|
2503
2502
|
var ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;
|
|
2504
|
-
var mac = (
|
|
2505
|
-
const escapedDelim = escapeRegex(
|
|
2503
|
+
var mac = (delimiter2) => {
|
|
2504
|
+
const escapedDelim = escapeRegex(delimiter2 ?? ":");
|
|
2506
2505
|
return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);
|
|
2507
2506
|
};
|
|
2508
2507
|
var cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/;
|
|
@@ -15426,11 +15425,454 @@ var glmProvider = {
|
|
|
15426
15425
|
};
|
|
15427
15426
|
var glmSpec = makeAnthropicCompatSpec(glmProvider);
|
|
15428
15427
|
|
|
15428
|
+
// packages/feature/agent/src/server/engines/codexAppServer/client.ts
|
|
15429
|
+
import { spawn } from "child_process";
|
|
15430
|
+
import { StringDecoder } from "string_decoder";
|
|
15431
|
+
|
|
15432
|
+
// packages/feature/agent/src/server/engines/codexAppServer/binary.ts
|
|
15433
|
+
import { statSync as statSync2 } from "fs";
|
|
15434
|
+
import { join as join5, delimiter } from "path";
|
|
15435
|
+
var CODEX_NPM_NAME = "@openai/codex";
|
|
15436
|
+
var PLATFORM_PACKAGE_BY_TARGET = {
|
|
15437
|
+
"x86_64-unknown-linux-musl": "@openai/codex-linux-x64",
|
|
15438
|
+
"aarch64-unknown-linux-musl": "@openai/codex-linux-arm64",
|
|
15439
|
+
"x86_64-apple-darwin": "@openai/codex-darwin-x64",
|
|
15440
|
+
"aarch64-apple-darwin": "@openai/codex-darwin-arm64",
|
|
15441
|
+
"x86_64-pc-windows-msvc": "@openai/codex-win32-x64",
|
|
15442
|
+
"aarch64-pc-windows-msvc": "@openai/codex-win32-arm64"
|
|
15443
|
+
};
|
|
15444
|
+
function codexTargetTriple(platform = process.platform, arch = process.arch) {
|
|
15445
|
+
switch (platform) {
|
|
15446
|
+
// Android ships the musl build, matching the upstream launcher.
|
|
15447
|
+
case "linux":
|
|
15448
|
+
case "android":
|
|
15449
|
+
if (arch === "x64") return "x86_64-unknown-linux-musl";
|
|
15450
|
+
if (arch === "arm64") return "aarch64-unknown-linux-musl";
|
|
15451
|
+
return null;
|
|
15452
|
+
case "darwin":
|
|
15453
|
+
if (arch === "x64") return "x86_64-apple-darwin";
|
|
15454
|
+
if (arch === "arm64") return "aarch64-apple-darwin";
|
|
15455
|
+
return null;
|
|
15456
|
+
case "win32":
|
|
15457
|
+
if (arch === "x64") return "x86_64-pc-windows-msvc";
|
|
15458
|
+
if (arch === "arm64") return "aarch64-pc-windows-msvc";
|
|
15459
|
+
return null;
|
|
15460
|
+
default:
|
|
15461
|
+
return null;
|
|
15462
|
+
}
|
|
15463
|
+
}
|
|
15464
|
+
var isFile = (p) => {
|
|
15465
|
+
try {
|
|
15466
|
+
return statSync2(p).isFile();
|
|
15467
|
+
} catch {
|
|
15468
|
+
return false;
|
|
15469
|
+
}
|
|
15470
|
+
};
|
|
15471
|
+
function platformPackageRoots(cockpitRoot, platformPackage) {
|
|
15472
|
+
const parts = platformPackage.split("/");
|
|
15473
|
+
return [
|
|
15474
|
+
join5(cockpitRoot, "node_modules", ...parts),
|
|
15475
|
+
join5(cockpitRoot, "node_modules", CODEX_NPM_NAME, "node_modules", ...parts)
|
|
15476
|
+
];
|
|
15477
|
+
}
|
|
15478
|
+
function resolveCodexBinary() {
|
|
15479
|
+
const triple = codexTargetTriple();
|
|
15480
|
+
if (!triple) {
|
|
15481
|
+
throw new Error(`Codex: unsupported platform ${process.platform} (${process.arch})`);
|
|
15482
|
+
}
|
|
15483
|
+
const platformPackage = PLATFORM_PACKAGE_BY_TARGET[triple];
|
|
15484
|
+
const cockpitRoot = process.env.COCKPIT_ROOT || process.cwd();
|
|
15485
|
+
const binaryName = process.platform === "win32" ? "codex.exe" : "codex";
|
|
15486
|
+
for (const packageRootBase of platformPackageRoots(cockpitRoot, platformPackage)) {
|
|
15487
|
+
const packageRoot = join5(packageRootBase, "vendor", triple);
|
|
15488
|
+
const current = join5(packageRoot, "bin", binaryName);
|
|
15489
|
+
if (isFile(current) && isFile(join5(packageRoot, "codex-package.json"))) {
|
|
15490
|
+
return { executablePath: current, pathDirs: existingDirs(join5(packageRoot, "codex-path")) };
|
|
15491
|
+
}
|
|
15492
|
+
const legacy = join5(packageRoot, "codex", binaryName);
|
|
15493
|
+
if (isFile(legacy)) {
|
|
15494
|
+
return { executablePath: legacy, pathDirs: existingDirs(join5(packageRoot, "path")) };
|
|
15495
|
+
}
|
|
15496
|
+
}
|
|
15497
|
+
throw new Error(
|
|
15498
|
+
`Codex: cannot locate ${platformPackage} under ${cockpitRoot}. Reinstall so npm fetches optional dependencies, or run: cockpit update`
|
|
15499
|
+
);
|
|
15500
|
+
}
|
|
15501
|
+
function existingDirs(...dirs) {
|
|
15502
|
+
return dirs.filter((d) => {
|
|
15503
|
+
try {
|
|
15504
|
+
return statSync2(d).isDirectory();
|
|
15505
|
+
} catch {
|
|
15506
|
+
return false;
|
|
15507
|
+
}
|
|
15508
|
+
});
|
|
15509
|
+
}
|
|
15510
|
+
function codexPathEnvKey(env, platform = process.platform) {
|
|
15511
|
+
if (platform !== "win32") return "PATH";
|
|
15512
|
+
const matching = Object.keys(env).filter((k) => k.toLowerCase() === "path");
|
|
15513
|
+
if (matching.includes("Path")) return "Path";
|
|
15514
|
+
return matching[matching.length - 1] ?? "PATH";
|
|
15515
|
+
}
|
|
15516
|
+
function applyCodexPathDirs(env, pathDirs, platform = process.platform) {
|
|
15517
|
+
if (pathDirs.length === 0) return;
|
|
15518
|
+
const key = codexPathEnvKey(env, platform);
|
|
15519
|
+
if (platform === "win32") {
|
|
15520
|
+
for (const k of Object.keys(env)) {
|
|
15521
|
+
if (k.toLowerCase() === "path" && k !== key) delete env[k];
|
|
15522
|
+
}
|
|
15523
|
+
}
|
|
15524
|
+
const existing = (env[key] ?? "").split(delimiter).filter((entry) => entry.length > 0 && !pathDirs.includes(entry));
|
|
15525
|
+
env[key] = [...pathDirs, ...existing].join(delimiter);
|
|
15526
|
+
}
|
|
15527
|
+
|
|
15528
|
+
// packages/feature/agent/src/server/engines/codexAppServer/client.ts
|
|
15529
|
+
var CodexAppServerAborted = class extends Error {
|
|
15530
|
+
constructor(message) {
|
|
15531
|
+
super(message);
|
|
15532
|
+
this.name = "CodexAppServerAborted";
|
|
15533
|
+
}
|
|
15534
|
+
};
|
|
15535
|
+
var CodexAppServerError = class extends Error {
|
|
15536
|
+
constructor(message, code, data) {
|
|
15537
|
+
super(message);
|
|
15538
|
+
this.code = code;
|
|
15539
|
+
this.data = data;
|
|
15540
|
+
this.name = "CodexAppServerError";
|
|
15541
|
+
}
|
|
15542
|
+
};
|
|
15543
|
+
var CodexAppServerClient = class _CodexAppServerClient {
|
|
15544
|
+
constructor(child, opts) {
|
|
15545
|
+
this.opts = opts;
|
|
15546
|
+
this.pending = /* @__PURE__ */ new Map();
|
|
15547
|
+
this.nextId = 1;
|
|
15548
|
+
this.closed = false;
|
|
15549
|
+
this.exitReason = null;
|
|
15550
|
+
this.child = child;
|
|
15551
|
+
readLines(child.stdout, (line) => this.onLine(line));
|
|
15552
|
+
readLines(child.stderr, (line) => {
|
|
15553
|
+
if (line.trim()) opts.onStderr?.(line);
|
|
15554
|
+
});
|
|
15555
|
+
child.on("error", (err) => this.fail(err));
|
|
15556
|
+
for (const pipe2 of [child.stdin, child.stdout, child.stderr]) {
|
|
15557
|
+
pipe2.on("error", (err) => this.fail(err));
|
|
15558
|
+
}
|
|
15559
|
+
child.on("exit", (code, signal) => {
|
|
15560
|
+
this.fail(
|
|
15561
|
+
new CodexAppServerError(
|
|
15562
|
+
`codex app-server exited (${signal ? `signal ${signal}` : `code ${code ?? "null"}`})`
|
|
15563
|
+
)
|
|
15564
|
+
);
|
|
15565
|
+
});
|
|
15566
|
+
}
|
|
15567
|
+
static start(opts) {
|
|
15568
|
+
const bin = resolveCodexBinary();
|
|
15569
|
+
const env = { ...opts.env };
|
|
15570
|
+
applyCodexPathDirs(env, bin.pathDirs);
|
|
15571
|
+
const child = spawn(bin.executablePath, ["app-server"], {
|
|
15572
|
+
cwd: opts.cwd,
|
|
15573
|
+
env,
|
|
15574
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
15575
|
+
});
|
|
15576
|
+
return new _CodexAppServerClient(child, opts);
|
|
15577
|
+
}
|
|
15578
|
+
/**
|
|
15579
|
+
* Settle every in-flight request when the transport dies. Without this a
|
|
15580
|
+
* crashed child leaves the turn awaiting a reply that can never arrive, and
|
|
15581
|
+
* the run hangs rather than reporting an error.
|
|
15582
|
+
*/
|
|
15583
|
+
fail(err) {
|
|
15584
|
+
if (this.exitReason) return;
|
|
15585
|
+
this.exitReason = err;
|
|
15586
|
+
for (const [, p] of this.pending) p.reject(err);
|
|
15587
|
+
this.pending.clear();
|
|
15588
|
+
this.opts.onClosed?.(err);
|
|
15589
|
+
}
|
|
15590
|
+
onLine(line) {
|
|
15591
|
+
if (!line.trim()) return;
|
|
15592
|
+
let msg;
|
|
15593
|
+
try {
|
|
15594
|
+
msg = JSON.parse(line);
|
|
15595
|
+
} catch {
|
|
15596
|
+
return;
|
|
15597
|
+
}
|
|
15598
|
+
const id = msg.id;
|
|
15599
|
+
if (typeof id === "number" && typeof msg.method === "string") {
|
|
15600
|
+
this.write({ id, error: { code: -32601, message: `Unhandled server request: ${msg.method}` } });
|
|
15601
|
+
return;
|
|
15602
|
+
}
|
|
15603
|
+
if (typeof id === "number") {
|
|
15604
|
+
const p = this.pending.get(id);
|
|
15605
|
+
if (!p) return;
|
|
15606
|
+
this.pending.delete(id);
|
|
15607
|
+
const err = msg.error;
|
|
15608
|
+
if (err) p.reject(new CodexAppServerError(err.message ?? "codex app-server error", err.code, err.data));
|
|
15609
|
+
else p.resolve(msg.result ?? {});
|
|
15610
|
+
return;
|
|
15611
|
+
}
|
|
15612
|
+
if (typeof msg.method === "string") {
|
|
15613
|
+
try {
|
|
15614
|
+
this.opts.onNotification({
|
|
15615
|
+
method: msg.method,
|
|
15616
|
+
params: msg.params ?? {}
|
|
15617
|
+
});
|
|
15618
|
+
} catch (cause) {
|
|
15619
|
+
this.fail(cause instanceof Error ? cause : new CodexAppServerError(String(cause)));
|
|
15620
|
+
}
|
|
15621
|
+
}
|
|
15622
|
+
}
|
|
15623
|
+
write(payload) {
|
|
15624
|
+
if (this.closed) return;
|
|
15625
|
+
this.child.stdin.write(`${JSON.stringify(payload)}
|
|
15626
|
+
`);
|
|
15627
|
+
}
|
|
15628
|
+
request(method, params) {
|
|
15629
|
+
if (this.exitReason) return Promise.reject(this.exitReason);
|
|
15630
|
+
const id = this.nextId++;
|
|
15631
|
+
return new Promise((resolve, reject) => {
|
|
15632
|
+
this.pending.set(id, { resolve, reject });
|
|
15633
|
+
this.write({ id, method, ...params !== void 0 ? { params } : {} });
|
|
15634
|
+
});
|
|
15635
|
+
}
|
|
15636
|
+
notify(method, params) {
|
|
15637
|
+
this.write({ method, ...params !== void 0 ? { params } : {} });
|
|
15638
|
+
}
|
|
15639
|
+
dispose(aborted2 = false) {
|
|
15640
|
+
if (this.closed) return;
|
|
15641
|
+
this.closed = true;
|
|
15642
|
+
this.fail(new CodexAppServerAborted(aborted2 ? "codex run aborted" : "codex app-server client disposed"));
|
|
15643
|
+
killTree(this.child);
|
|
15644
|
+
}
|
|
15645
|
+
};
|
|
15646
|
+
function readLines(stream, onLine) {
|
|
15647
|
+
const decoder = new StringDecoder("utf8");
|
|
15648
|
+
let carry = "";
|
|
15649
|
+
stream.on("data", (chunk) => {
|
|
15650
|
+
carry += decoder.write(chunk);
|
|
15651
|
+
let index = carry.indexOf("\n");
|
|
15652
|
+
while (index !== -1) {
|
|
15653
|
+
onLine(carry.slice(0, index).replace(/\r$/, ""));
|
|
15654
|
+
carry = carry.slice(index + 1);
|
|
15655
|
+
index = carry.indexOf("\n");
|
|
15656
|
+
}
|
|
15657
|
+
});
|
|
15658
|
+
stream.on("end", () => {
|
|
15659
|
+
carry += decoder.end();
|
|
15660
|
+
if (carry) onLine(carry.replace(/\r$/, ""));
|
|
15661
|
+
carry = "";
|
|
15662
|
+
});
|
|
15663
|
+
}
|
|
15664
|
+
function killTree(child) {
|
|
15665
|
+
if (child.pid === void 0) return;
|
|
15666
|
+
if (process.platform === "win32") {
|
|
15667
|
+
try {
|
|
15668
|
+
spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
|
|
15669
|
+
return;
|
|
15670
|
+
} catch {
|
|
15671
|
+
}
|
|
15672
|
+
}
|
|
15673
|
+
try {
|
|
15674
|
+
child.kill();
|
|
15675
|
+
} catch {
|
|
15676
|
+
}
|
|
15677
|
+
}
|
|
15678
|
+
|
|
15679
|
+
// packages/feature/agent/src/server/engines/codexAppServer/events.ts
|
|
15680
|
+
var camelToSnake = (key) => key.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toLowerCase();
|
|
15681
|
+
var OPAQUE_VALUE_KEYS = /* @__PURE__ */ new Set([
|
|
15682
|
+
"arguments",
|
|
15683
|
+
// an MCP tool's own input object
|
|
15684
|
+
"structuredContent",
|
|
15685
|
+
// an MCP tool's own result payload
|
|
15686
|
+
"result",
|
|
15687
|
+
"agentsStates",
|
|
15688
|
+
// keyed by agent thread id
|
|
15689
|
+
"input"
|
|
15690
|
+
]);
|
|
15691
|
+
function snakeCaseKeys(value) {
|
|
15692
|
+
if (Array.isArray(value)) return value.map(snakeCaseKeys);
|
|
15693
|
+
if (value === null || typeof value !== "object") return value;
|
|
15694
|
+
const out = {};
|
|
15695
|
+
for (const [k, v] of Object.entries(value)) {
|
|
15696
|
+
out[camelToSnake(k)] = OPAQUE_VALUE_KEYS.has(k) ? v : snakeCaseKeys(v);
|
|
15697
|
+
}
|
|
15698
|
+
return out;
|
|
15699
|
+
}
|
|
15700
|
+
function normalizeItem(raw) {
|
|
15701
|
+
if (!raw || typeof raw !== "object") return void 0;
|
|
15702
|
+
const item = snakeCaseKeys(raw);
|
|
15703
|
+
if (typeof item.type === "string") item.type = camelToSnake(item.type);
|
|
15704
|
+
if (item.type === "collab_agent_tool_call") item.type = "collab_tool_call";
|
|
15705
|
+
if (item.type === "collab_tool_call" && typeof item.tool === "string") {
|
|
15706
|
+
item.tool = camelToSnake(item.tool);
|
|
15707
|
+
}
|
|
15708
|
+
if (item.type === "file_change" && Array.isArray(item.changes)) {
|
|
15709
|
+
item.changes = item.changes.map((change) => {
|
|
15710
|
+
const kind = change.kind;
|
|
15711
|
+
if (kind && typeof kind === "object" && typeof kind.type === "string") {
|
|
15712
|
+
return { ...change, kind: kind.type };
|
|
15713
|
+
}
|
|
15714
|
+
return change;
|
|
15715
|
+
});
|
|
15716
|
+
}
|
|
15717
|
+
return item;
|
|
15718
|
+
}
|
|
15719
|
+
var CodexEventShim = class {
|
|
15720
|
+
constructor() {
|
|
15721
|
+
this.threadId = null;
|
|
15722
|
+
this.planSeq = 0;
|
|
15723
|
+
/**
|
|
15724
|
+
* Turns in flight, by thread. Recorded for EVERY thread including the
|
|
15725
|
+
* sub-agents this shim otherwise filters out, because interrupting a run
|
|
15726
|
+
* needs their ids: a parent's `turn/interrupt` does not cascade — measured,
|
|
15727
|
+
* the children kept working for the twelve seconds the probe watched.
|
|
15728
|
+
*/
|
|
15729
|
+
this.liveTurns = /* @__PURE__ */ new Map();
|
|
15730
|
+
}
|
|
15731
|
+
/** The turn this connection started. Its own `turn/started` arrives too, but
|
|
15732
|
+
* a stop must work even if it has not yet. */
|
|
15733
|
+
noteOwnTurn(threadId, turnId) {
|
|
15734
|
+
this.liveTurns.set(threadId, turnId);
|
|
15735
|
+
}
|
|
15736
|
+
/** Threads with a turn in flight, children first: a parent interrupted while
|
|
15737
|
+
* its children still run leaves them orphaned. */
|
|
15738
|
+
activeTurns() {
|
|
15739
|
+
const out = [];
|
|
15740
|
+
for (const [threadId, turnId] of this.liveTurns) {
|
|
15741
|
+
if (threadId !== this.threadId) out.push({ threadId, turnId });
|
|
15742
|
+
}
|
|
15743
|
+
const own = this.threadId && this.liveTurns.get(this.threadId);
|
|
15744
|
+
if (this.threadId && own) out.push({ threadId: this.threadId, turnId: own });
|
|
15745
|
+
return out;
|
|
15746
|
+
}
|
|
15747
|
+
/**
|
|
15748
|
+
* Name the thread this turn belongs to. Everything from any other thread is
|
|
15749
|
+
* dropped — see `handle`.
|
|
15750
|
+
*/
|
|
15751
|
+
bindThread(threadId) {
|
|
15752
|
+
this.threadId = threadId;
|
|
15753
|
+
}
|
|
15754
|
+
handle(n) {
|
|
15755
|
+
const from = n.params.threadId;
|
|
15756
|
+
if (typeof from === "string") {
|
|
15757
|
+
if (n.method === "turn/started") {
|
|
15758
|
+
const turnId = n.params.turn?.id;
|
|
15759
|
+
if (turnId) this.liveTurns.set(from, turnId);
|
|
15760
|
+
} else if (n.method === "turn/completed") {
|
|
15761
|
+
this.liveTurns.delete(from);
|
|
15762
|
+
}
|
|
15763
|
+
}
|
|
15764
|
+
if (this.threadId !== null && typeof from === "string" && from !== this.threadId) return [];
|
|
15765
|
+
switch (n.method) {
|
|
15766
|
+
case "item/agentMessage/delta": {
|
|
15767
|
+
const text = typeof n.params.delta === "string" ? n.params.delta : "";
|
|
15768
|
+
return text ? [{ kind: "text-delta", text }] : [];
|
|
15769
|
+
}
|
|
15770
|
+
case "item/started":
|
|
15771
|
+
case "item/completed": {
|
|
15772
|
+
const item = normalizeItem(n.params.item);
|
|
15773
|
+
if (!item) return [];
|
|
15774
|
+
if (item.type === "user_message") return [];
|
|
15775
|
+
if (item.type === "agent_message") return [];
|
|
15776
|
+
return [
|
|
15777
|
+
{
|
|
15778
|
+
kind: "event",
|
|
15779
|
+
event: {
|
|
15780
|
+
type: n.method === "item/started" ? "item.started" : "item.completed",
|
|
15781
|
+
...typeof n.params.threadId === "string" ? { thread_id: n.params.threadId } : {},
|
|
15782
|
+
item
|
|
15783
|
+
}
|
|
15784
|
+
}
|
|
15785
|
+
];
|
|
15786
|
+
}
|
|
15787
|
+
/**
|
|
15788
|
+
* The plan. There is no `todoList` item type in this protocol — the
|
|
15789
|
+
* bubble the adapter still knows how to draw is fed by a notification
|
|
15790
|
+
* instead, so without this a Codex turn simply loses its todo list.
|
|
15791
|
+
*
|
|
15792
|
+
* A fresh id per update mirrors what the exec transport did (one item per
|
|
15793
|
+
* plan revision, one bubble each) rather than inventing an update-in-place
|
|
15794
|
+
* the renderer has no path for.
|
|
15795
|
+
*/
|
|
15796
|
+
case "turn/plan/updated": {
|
|
15797
|
+
const plan = n.params.plan;
|
|
15798
|
+
if (!plan?.length) return [];
|
|
15799
|
+
this.planSeq += 1;
|
|
15800
|
+
const turnId = typeof n.params.turnId === "string" ? n.params.turnId : "turn";
|
|
15801
|
+
return [
|
|
15802
|
+
{
|
|
15803
|
+
kind: "event",
|
|
15804
|
+
event: {
|
|
15805
|
+
type: "item.completed",
|
|
15806
|
+
item: {
|
|
15807
|
+
type: "todo_list",
|
|
15808
|
+
id: `plan-${turnId}-${this.planSeq}`,
|
|
15809
|
+
// Three states, carried through: the checklist renders
|
|
15810
|
+
// in-progress differently from not-yet-started.
|
|
15811
|
+
items: plan.map((s) => ({
|
|
15812
|
+
text: s.step ?? "",
|
|
15813
|
+
status: camelToSnake(s.status ?? "pending")
|
|
15814
|
+
}))
|
|
15815
|
+
}
|
|
15816
|
+
}
|
|
15817
|
+
}
|
|
15818
|
+
];
|
|
15819
|
+
}
|
|
15820
|
+
case "thread/tokenUsage/updated": {
|
|
15821
|
+
const usage = n.params.tokenUsage?.total;
|
|
15822
|
+
if (usage) {
|
|
15823
|
+
this.lastUsage = {
|
|
15824
|
+
input_tokens: usage.inputTokens ?? 0,
|
|
15825
|
+
output_tokens: usage.outputTokens ?? 0,
|
|
15826
|
+
cached_input_tokens: usage.cachedInputTokens ?? 0,
|
|
15827
|
+
cache_write_input_tokens: usage.cacheWriteInputTokens ?? 0
|
|
15828
|
+
};
|
|
15829
|
+
}
|
|
15830
|
+
return [];
|
|
15831
|
+
}
|
|
15832
|
+
/**
|
|
15833
|
+
* There is no `turn/failed` notification — the protocol has exactly one
|
|
15834
|
+
* terminal, and failure rides on it as `turn.status`. Reading only the
|
|
15835
|
+
* method name (as this did) reports a failed or interrupted turn as a
|
|
15836
|
+
* clean success: the run ends, the spinner stops, and nothing anywhere
|
|
15837
|
+
* says why.
|
|
15838
|
+
*/
|
|
15839
|
+
case "turn/completed": {
|
|
15840
|
+
const turn = n.params.turn;
|
|
15841
|
+
const status = turn?.status;
|
|
15842
|
+
if (status === "failed") {
|
|
15843
|
+
const detail = turn?.error?.additionalDetails;
|
|
15844
|
+
const message = [turn?.error?.message, detail].filter(Boolean).join(" \u2014 ") || "Codex turn failed";
|
|
15845
|
+
return [{ kind: "event", event: { type: "turn.failed", error: { message } } }];
|
|
15846
|
+
}
|
|
15847
|
+
return [{ kind: "event", event: { type: "turn.completed", ...this.lastUsage ? { usage: this.lastUsage } : {} } }];
|
|
15848
|
+
}
|
|
15849
|
+
/**
|
|
15850
|
+
* `{ error: { message, additionalDetails }, willRetry }` — the message is
|
|
15851
|
+
* NESTED, and reading a top-level `message` (as this did) always fell
|
|
15852
|
+
* through to a generic string.
|
|
15853
|
+
*
|
|
15854
|
+
* `willRetry` is the load-bearing half: the server is about to try again,
|
|
15855
|
+
* so surfacing this as an error would both lie to the user and — because
|
|
15856
|
+
* the adapter latches `terminated` on an error — go deaf to the retry's
|
|
15857
|
+
* events, leaving the turn to hang until it is aborted by hand.
|
|
15858
|
+
*/
|
|
15859
|
+
case "error": {
|
|
15860
|
+
if (n.params.willRetry === true) return [];
|
|
15861
|
+
const error48 = n.params.error;
|
|
15862
|
+
const message = [error48?.message, error48?.additionalDetails].filter(Boolean).join(" \u2014 ") || "Codex error";
|
|
15863
|
+
return [{ kind: "event", event: { type: "error", message } }];
|
|
15864
|
+
}
|
|
15865
|
+
default:
|
|
15866
|
+
return [];
|
|
15867
|
+
}
|
|
15868
|
+
}
|
|
15869
|
+
};
|
|
15870
|
+
|
|
15429
15871
|
// packages/feature/agent/src/server/engines/codex.ts
|
|
15430
15872
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
15431
|
-
import { writeFileSync as writeFileSync3, unlinkSync, mkdirSync as mkdirSync3, existsSync as existsSync2, statSync as
|
|
15432
|
-
import { StringDecoder } from "string_decoder";
|
|
15433
|
-
import { join as
|
|
15873
|
+
import { writeFileSync as writeFileSync3, unlinkSync, mkdirSync as mkdirSync3, existsSync as existsSync2, statSync as statSync3, openSync, readSync, closeSync } from "fs";
|
|
15874
|
+
import { StringDecoder as StringDecoder2 } from "string_decoder";
|
|
15875
|
+
import { join as join6 } from "path";
|
|
15434
15876
|
import { tmpdir as tmpdir2 } from "os";
|
|
15435
15877
|
|
|
15436
15878
|
// packages/feature/agent/src/server/api/session/codexTools.ts
|
|
@@ -15445,7 +15887,9 @@ var CODEX_TOOL_NAMES = {
|
|
|
15445
15887
|
/** `update_plan` / live `todo_list` → the checklist MessageBubble already renders. */
|
|
15446
15888
|
todo: "TodoWrite",
|
|
15447
15889
|
webSearch: "WebSearch",
|
|
15448
|
-
webFetch: "WebFetch"
|
|
15890
|
+
webFetch: "WebFetch",
|
|
15891
|
+
/** `image_generation` writes a file, so it reads as a Write in the timeline. */
|
|
15892
|
+
imageGeneration: "Write"
|
|
15449
15893
|
};
|
|
15450
15894
|
var CODEX_MCP_NAMESPACE_PREFIX = "mcp__";
|
|
15451
15895
|
var codexMcpToolName = (server, tool2) => `${CODEX_MCP_NAMESPACE_PREFIX}${server}__${tool2}`;
|
|
@@ -15453,12 +15897,10 @@ var CODEX_SPAWN_FN_NAME = "spawn_agent";
|
|
|
15453
15897
|
var CODEX_SUB_AGENT_ACTIVITY_TYPE = "sub_agent_activity";
|
|
15454
15898
|
var CODEX_SUB_AGENT_ACTIVITY_ITEM_TYPE = "SubAgentActivity";
|
|
15455
15899
|
var CODEX_AGENT_MESSAGE_TYPE = "agent_message";
|
|
15456
|
-
var CODEX_PATCH_FN_NAME = "apply_patch";
|
|
15457
|
-
var CODEX_EXEC_SCRIPT_FN_NAME = "exec";
|
|
15458
15900
|
function codexTodoInput(items) {
|
|
15459
15901
|
return {
|
|
15460
15902
|
todos: (items ?? []).flatMap(
|
|
15461
|
-
(i) => typeof i?.text === "string" ? [{ content: i.text, status: i.completed ? "completed" : "pending" }] : []
|
|
15903
|
+
(i) => typeof i?.text === "string" ? [{ content: i.text, status: i.status || (i.completed ? "completed" : "pending") }] : []
|
|
15462
15904
|
)
|
|
15463
15905
|
};
|
|
15464
15906
|
}
|
|
@@ -15475,196 +15917,32 @@ function codexWebSearchCall(query2, action) {
|
|
|
15475
15917
|
return {
|
|
15476
15918
|
name: CODEX_TOOL_NAMES.webSearch,
|
|
15477
15919
|
input: { query: q },
|
|
15478
|
-
|
|
15479
|
-
|
|
15920
|
+
/**
|
|
15921
|
+
* The queries, not the hits — deliberately.
|
|
15922
|
+
*
|
|
15923
|
+
* A web_search item does carry `results`, but the protocol types it as
|
|
15924
|
+
* `Array<Unknown>` and says why: "These stay as opaque JSON at the
|
|
15925
|
+
* extension/app-server boundary so new result fields and result types can
|
|
15926
|
+
* pass through without a Codex release." Rendering it would mean inventing
|
|
15927
|
+
* a shape upstream has explicitly refused to fix, and finding out it moved
|
|
15928
|
+
* the way every other spelling mismatch here has been found — by a bubble
|
|
15929
|
+
* silently going blank.
|
|
15930
|
+
*
|
|
15931
|
+
* Showing the queries beats an empty result, which reads as unfinished.
|
|
15932
|
+
*/
|
|
15480
15933
|
result: queries.join("\n")
|
|
15481
15934
|
};
|
|
15482
15935
|
}
|
|
15483
15936
|
function codexMcpResultText(item) {
|
|
15484
15937
|
if (item.error?.message) return item.error.message;
|
|
15485
15938
|
if (item.result === null || item.result === void 0) return "";
|
|
15486
|
-
|
|
15487
|
-
|
|
15488
|
-
|
|
15489
|
-
|
|
15490
|
-
|
|
15491
|
-
r: "\r",
|
|
15492
|
-
t: " ",
|
|
15493
|
-
b: "\b",
|
|
15494
|
-
f: "\f",
|
|
15495
|
-
v: "\v",
|
|
15496
|
-
"0": "\0"
|
|
15497
|
-
};
|
|
15498
|
-
function decodeJsStringLiteral(literal2) {
|
|
15499
|
-
if (literal2.startsWith('"')) {
|
|
15500
|
-
try {
|
|
15501
|
-
return JSON.parse(literal2);
|
|
15502
|
-
} catch {
|
|
15503
|
-
}
|
|
15939
|
+
if (typeof item.result === "string") return item.result;
|
|
15940
|
+
const content = item.result.content;
|
|
15941
|
+
if (Array.isArray(content)) {
|
|
15942
|
+
const text = content.filter((b) => !!b && typeof b === "object").filter((b) => typeof b.text === "string").map((b) => b.text).join("");
|
|
15943
|
+
if (text) return text;
|
|
15504
15944
|
}
|
|
15505
|
-
return
|
|
15506
|
-
/\\(u\{[0-9a-fA-F]+\}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2}|[\s\S])/g,
|
|
15507
|
-
(_full, esc2) => {
|
|
15508
|
-
if (esc2.startsWith("u{")) return String.fromCodePoint(parseInt(esc2.slice(2, -1), 16));
|
|
15509
|
-
if (esc2.startsWith("u") || esc2.startsWith("x")) return String.fromCharCode(parseInt(esc2.slice(1), 16));
|
|
15510
|
-
return JS_SIMPLE_ESCAPES[esc2] ?? esc2;
|
|
15511
|
-
}
|
|
15512
|
-
);
|
|
15513
|
-
}
|
|
15514
|
-
function extractPatchLiteral(script) {
|
|
15515
|
-
JS_STRING_LITERAL_RE.lastIndex = 0;
|
|
15516
|
-
let m;
|
|
15517
|
-
while (m = JS_STRING_LITERAL_RE.exec(script)) {
|
|
15518
|
-
const value = decodeJsStringLiteral(m[0]);
|
|
15519
|
-
if (value.includes("*** Begin Patch")) return value;
|
|
15520
|
-
}
|
|
15521
|
-
return null;
|
|
15522
|
-
}
|
|
15523
|
-
var JS_IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*/;
|
|
15524
|
-
var JS_SCALAR_RE = /^(-?\d[\d_]*(?:\.\d*)?(?:[eE][+-]?\d+)?|true|false|null|undefined)/;
|
|
15525
|
-
var skipJsWs = (c) => {
|
|
15526
|
-
while (c.i < c.s.length && /\s/.test(c.s[c.i])) c.i++;
|
|
15527
|
-
};
|
|
15528
|
-
function readJsString(c) {
|
|
15529
|
-
const q = c.s[c.i];
|
|
15530
|
-
if (q !== '"' && q !== "'" && q !== "`") return null;
|
|
15531
|
-
const start = c.i;
|
|
15532
|
-
c.i++;
|
|
15533
|
-
while (c.i < c.s.length) {
|
|
15534
|
-
const ch = c.s[c.i];
|
|
15535
|
-
if (ch === "\\") {
|
|
15536
|
-
c.i += 2;
|
|
15537
|
-
continue;
|
|
15538
|
-
}
|
|
15539
|
-
if (ch === q) {
|
|
15540
|
-
c.i++;
|
|
15541
|
-
return decodeJsStringLiteral(c.s.slice(start, c.i));
|
|
15542
|
-
}
|
|
15543
|
-
c.i++;
|
|
15544
|
-
}
|
|
15545
|
-
return null;
|
|
15546
|
-
}
|
|
15547
|
-
function readJsValue(c) {
|
|
15548
|
-
skipJsWs(c);
|
|
15549
|
-
const ch = c.s[c.i];
|
|
15550
|
-
if (ch === void 0) return null;
|
|
15551
|
-
if (ch === '"' || ch === "'" || ch === "`") {
|
|
15552
|
-
const str = readJsString(c);
|
|
15553
|
-
return str === null ? null : { v: str };
|
|
15554
|
-
}
|
|
15555
|
-
if (ch === "{") return readJsObject(c);
|
|
15556
|
-
if (ch === "[") return readJsArray(c);
|
|
15557
|
-
const m = JS_SCALAR_RE.exec(c.s.slice(c.i));
|
|
15558
|
-
if (!m) return null;
|
|
15559
|
-
c.i += m[0].length;
|
|
15560
|
-
const raw = m[0];
|
|
15561
|
-
if (raw === "true") return { v: true };
|
|
15562
|
-
if (raw === "false") return { v: false };
|
|
15563
|
-
if (raw === "null" || raw === "undefined") return { v: null };
|
|
15564
|
-
const n = Number(raw.replace(/_/g, ""));
|
|
15565
|
-
return Number.isNaN(n) ? null : { v: n };
|
|
15566
|
-
}
|
|
15567
|
-
function readJsArray(c) {
|
|
15568
|
-
if (c.s[c.i] !== "[") return null;
|
|
15569
|
-
c.i++;
|
|
15570
|
-
const out = [];
|
|
15571
|
-
for (; ; ) {
|
|
15572
|
-
skipJsWs(c);
|
|
15573
|
-
if (c.s[c.i] === "]") {
|
|
15574
|
-
c.i++;
|
|
15575
|
-
return { v: out };
|
|
15576
|
-
}
|
|
15577
|
-
if (c.i >= c.s.length) return null;
|
|
15578
|
-
const item = readJsValue(c);
|
|
15579
|
-
if (!item) return null;
|
|
15580
|
-
out.push(item.v);
|
|
15581
|
-
skipJsWs(c);
|
|
15582
|
-
if (c.s[c.i] === ",") {
|
|
15583
|
-
c.i++;
|
|
15584
|
-
continue;
|
|
15585
|
-
}
|
|
15586
|
-
if (c.s[c.i] === "]") {
|
|
15587
|
-
c.i++;
|
|
15588
|
-
return { v: out };
|
|
15589
|
-
}
|
|
15590
|
-
return null;
|
|
15591
|
-
}
|
|
15592
|
-
}
|
|
15593
|
-
function readJsObject(c) {
|
|
15594
|
-
if (c.s[c.i] !== "{") return null;
|
|
15595
|
-
c.i++;
|
|
15596
|
-
const out = {};
|
|
15597
|
-
for (; ; ) {
|
|
15598
|
-
skipJsWs(c);
|
|
15599
|
-
if (c.s[c.i] === "}") {
|
|
15600
|
-
c.i++;
|
|
15601
|
-
return { v: out };
|
|
15602
|
-
}
|
|
15603
|
-
if (c.i >= c.s.length) return null;
|
|
15604
|
-
let key = null;
|
|
15605
|
-
const ch = c.s[c.i];
|
|
15606
|
-
if (ch === '"' || ch === "'" || ch === "`") {
|
|
15607
|
-
key = readJsString(c);
|
|
15608
|
-
} else {
|
|
15609
|
-
const m = JS_IDENT_RE.exec(c.s.slice(c.i));
|
|
15610
|
-
if (m) {
|
|
15611
|
-
key = m[0];
|
|
15612
|
-
c.i += m[0].length;
|
|
15613
|
-
}
|
|
15614
|
-
}
|
|
15615
|
-
if (key === null) return null;
|
|
15616
|
-
skipJsWs(c);
|
|
15617
|
-
if (c.s[c.i] !== ":") return null;
|
|
15618
|
-
c.i++;
|
|
15619
|
-
const val = readJsValue(c);
|
|
15620
|
-
if (!val) return null;
|
|
15621
|
-
out[key] = val.v;
|
|
15622
|
-
skipJsWs(c);
|
|
15623
|
-
if (c.s[c.i] === ",") {
|
|
15624
|
-
c.i++;
|
|
15625
|
-
continue;
|
|
15626
|
-
}
|
|
15627
|
-
if (c.s[c.i] === "}") {
|
|
15628
|
-
c.i++;
|
|
15629
|
-
return { v: out };
|
|
15630
|
-
}
|
|
15631
|
-
return null;
|
|
15632
|
-
}
|
|
15633
|
-
}
|
|
15634
|
-
function readToolArgsAt(script, from) {
|
|
15635
|
-
const open = script.indexOf("{", from);
|
|
15636
|
-
if (open === -1) return null;
|
|
15637
|
-
const read = readJsObject({ s: script, i: open });
|
|
15638
|
-
if (!read || !read.v || typeof read.v !== "object") return null;
|
|
15639
|
-
return read.v;
|
|
15640
|
-
}
|
|
15641
|
-
function extractExecArgs(script) {
|
|
15642
|
-
const call = script.indexOf("tools.exec_command(");
|
|
15643
|
-
if (call === -1) return null;
|
|
15644
|
-
return readToolArgsAt(script, call);
|
|
15645
|
-
}
|
|
15646
|
-
var TOOL_CALL_RE = /tools\.([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/g;
|
|
15647
|
-
function extractOtherToolCall(script) {
|
|
15648
|
-
TOOL_CALL_RE.lastIndex = 0;
|
|
15649
|
-
let m;
|
|
15650
|
-
while (m = TOOL_CALL_RE.exec(script)) {
|
|
15651
|
-
const tool2 = m[1];
|
|
15652
|
-
if (tool2 === "exec_command" || tool2 === "apply_patch") continue;
|
|
15653
|
-
const args = readToolArgsAt(script, m.index);
|
|
15654
|
-
if (args) return { tool: tool2, args };
|
|
15655
|
-
}
|
|
15656
|
-
return null;
|
|
15657
|
-
}
|
|
15658
|
-
function parseCodexExecScript(script) {
|
|
15659
|
-
const patch = extractPatchLiteral(script);
|
|
15660
|
-
if (patch) return { kind: "patch", patch };
|
|
15661
|
-
const args = extractExecArgs(script);
|
|
15662
|
-
if (args) {
|
|
15663
|
-
return { kind: "exec", command: typeof args.cmd === "string" ? args.cmd : "", args };
|
|
15664
|
-
}
|
|
15665
|
-
const other = extractOtherToolCall(script);
|
|
15666
|
-
if (other) return { kind: "other", tool: other.tool, args: other.args };
|
|
15667
|
-
return { kind: "unknown" };
|
|
15945
|
+
return JSON.stringify(item.result, null, 2);
|
|
15668
15946
|
}
|
|
15669
15947
|
var CODEX_AGENT_DONE = /* @__PURE__ */ new Set(["completed", "errored", "interrupted", "not_found", "failed"]);
|
|
15670
15948
|
function parseCodexSpawnInput(args, extra) {
|
|
@@ -15755,6 +16033,110 @@ function parseCodexAgentsStates(states) {
|
|
|
15755
16033
|
function codexAgentResultText(state) {
|
|
15756
16034
|
return state.message || `(agent ${state.status})`;
|
|
15757
16035
|
}
|
|
16036
|
+
function codexItemToolUseId(item) {
|
|
16037
|
+
return item.call_id || item.id || "";
|
|
16038
|
+
}
|
|
16039
|
+
function codexItemKind(type) {
|
|
16040
|
+
if (!type) return "";
|
|
16041
|
+
return type.replace(/^([A-Z])/, (c) => c.toLowerCase()).replace(/([a-z0-9])([A-Z])/g, "$1_$2").toLowerCase();
|
|
16042
|
+
}
|
|
16043
|
+
function codexCommandText(command) {
|
|
16044
|
+
if (typeof command === "string") return command;
|
|
16045
|
+
if (!Array.isArray(command)) return "";
|
|
16046
|
+
return command.map((a) => {
|
|
16047
|
+
const arg = String(a);
|
|
16048
|
+
return /[\s"'$`\\|&;<>()]/.test(arg) ? `'${arg.replace(/'/g, `'\\''`)}'` : arg;
|
|
16049
|
+
}).join(" ");
|
|
16050
|
+
}
|
|
16051
|
+
var patchChanges = (item) => {
|
|
16052
|
+
const raw = item.changes;
|
|
16053
|
+
if (!raw) return [];
|
|
16054
|
+
const kindOf = (v) => {
|
|
16055
|
+
if (typeof v === "string") return v;
|
|
16056
|
+
const o = v;
|
|
16057
|
+
const tag = (o?.kind && typeof o.kind === "object" ? o.kind.type : o?.kind) ?? o?.type;
|
|
16058
|
+
return typeof tag === "string" ? tag : "update";
|
|
16059
|
+
};
|
|
16060
|
+
if (Array.isArray(raw)) {
|
|
16061
|
+
return raw.map((c) => ({ path: c?.path || "", kind: kindOf(c) }));
|
|
16062
|
+
}
|
|
16063
|
+
return Object.entries(raw).map(([path, v]) => ({ path, kind: kindOf(v) }));
|
|
16064
|
+
};
|
|
16065
|
+
var patchResultText = (item) => {
|
|
16066
|
+
const cs = patchChanges(item);
|
|
16067
|
+
if (cs.length === 0) return "apply_patch";
|
|
16068
|
+
return cs.map((c) => `${c.kind} ${c.path}`.trim()).join("\n");
|
|
16069
|
+
};
|
|
16070
|
+
function codexItemBubble(item) {
|
|
16071
|
+
const id = codexItemToolUseId(item);
|
|
16072
|
+
if (!id) return null;
|
|
16073
|
+
switch (codexItemKind(item.type)) {
|
|
16074
|
+
case "command_execution":
|
|
16075
|
+
return {
|
|
16076
|
+
id,
|
|
16077
|
+
name: CODEX_TOOL_NAMES.bash,
|
|
16078
|
+
input: { command: codexCommandText(item.command) },
|
|
16079
|
+
// An empty result spins forever in the UI, so a bare exit code stands
|
|
16080
|
+
// in for a command that printed nothing.
|
|
16081
|
+
result: item.aggregated_output || `(exit code: ${item.exit_code ?? "unknown"})`
|
|
16082
|
+
};
|
|
16083
|
+
case "file_change":
|
|
16084
|
+
return {
|
|
16085
|
+
id,
|
|
16086
|
+
name: CODEX_TOOL_NAMES.applyPatch,
|
|
16087
|
+
input: { changes: patchChanges(item) },
|
|
16088
|
+
result: patchResultText(item)
|
|
16089
|
+
};
|
|
16090
|
+
case "mcp_tool_call":
|
|
16091
|
+
return {
|
|
16092
|
+
id,
|
|
16093
|
+
name: codexMcpToolName(item.server || "mcp", item.tool || "tool"),
|
|
16094
|
+
input: item.arguments || {},
|
|
16095
|
+
result: codexMcpResultText(item) || `(${item.status || "completed"})`
|
|
16096
|
+
};
|
|
16097
|
+
case "web_search": {
|
|
16098
|
+
const { name, input, result } = codexWebSearchCall(item.query, item.action);
|
|
16099
|
+
return { id, name, input, result };
|
|
16100
|
+
}
|
|
16101
|
+
case "todo_list": {
|
|
16102
|
+
const input = codexTodoInput(item.items);
|
|
16103
|
+
return { id, name: CODEX_TOOL_NAMES.todo, input, result: codexTodoResultText(input.todos) };
|
|
16104
|
+
}
|
|
16105
|
+
// Reading an image back. The result is deliberately the placeholder and not
|
|
16106
|
+
// the image: inlining a screenshot's data URL used to push ~600KB of base64
|
|
16107
|
+
// through the API, React state and the DOM for one bubble.
|
|
16108
|
+
case "image_view":
|
|
16109
|
+
return {
|
|
16110
|
+
id,
|
|
16111
|
+
name: CODEX_TOOL_NAMES.read,
|
|
16112
|
+
input: { file_path: item.path || "" },
|
|
16113
|
+
result: CODEX_IMAGE_ONLY_TEXT
|
|
16114
|
+
};
|
|
16115
|
+
/**
|
|
16116
|
+
* Generating an image. It writes a file, so it belongs in the timeline like
|
|
16117
|
+
* any other write — it was grouped with `sleep` and the review-mode markers
|
|
16118
|
+
* by mistake, which left a generated image invisible on both sides.
|
|
16119
|
+
*/
|
|
16120
|
+
case "image_generation":
|
|
16121
|
+
return {
|
|
16122
|
+
id,
|
|
16123
|
+
name: CODEX_TOOL_NAMES.imageGeneration,
|
|
16124
|
+
input: { file_path: item.savedPath || "", ...item.revisedPrompt ? { prompt: item.revisedPrompt } : {} },
|
|
16125
|
+
result: item.savedPath || `(${item.status || "completed"})`
|
|
16126
|
+
};
|
|
16127
|
+
// A tool reached through codex's dynamic namespace rather than a fixed one.
|
|
16128
|
+
// Named like an MCP call because that is what it is from the reader's side.
|
|
16129
|
+
case "dynamic_tool_call":
|
|
16130
|
+
return {
|
|
16131
|
+
id,
|
|
16132
|
+
name: codexMcpToolName(item.namespace || "tool", item.tool || "call"),
|
|
16133
|
+
input: item.arguments || {},
|
|
16134
|
+
result: codexMcpResultText(item) || `(${item.status || "completed"})`
|
|
16135
|
+
};
|
|
16136
|
+
default:
|
|
16137
|
+
return null;
|
|
16138
|
+
}
|
|
16139
|
+
}
|
|
15758
16140
|
|
|
15759
16141
|
// packages/feature/agent/src/server/engines/codex.ts
|
|
15760
16142
|
var MEDIA_EXT = {
|
|
@@ -15764,11 +16146,11 @@ var MEDIA_EXT = {
|
|
|
15764
16146
|
"image/gif": ".gif"
|
|
15765
16147
|
};
|
|
15766
16148
|
function writeImagesToTemp(images) {
|
|
15767
|
-
const dir =
|
|
16149
|
+
const dir = join6(tmpdir2(), "cockpit-codex-images");
|
|
15768
16150
|
if (!existsSync2(dir)) mkdirSync3(dir, { recursive: true });
|
|
15769
16151
|
return images.map((img, i) => {
|
|
15770
16152
|
const ext = MEDIA_EXT[img.media_type] || ".png";
|
|
15771
|
-
const filePath =
|
|
16153
|
+
const filePath = join6(dir, `img-${Date.now()}-${i}${ext}`);
|
|
15772
16154
|
writeFileSync3(filePath, Buffer.from(img.data, "base64"));
|
|
15773
16155
|
return filePath;
|
|
15774
16156
|
});
|
|
@@ -15776,15 +16158,7 @@ function writeImagesToTemp(images) {
|
|
|
15776
16158
|
function codexToolUseId(item) {
|
|
15777
16159
|
return item.call_id || item.id || `tool-${randomUUID3()}`;
|
|
15778
16160
|
}
|
|
15779
|
-
|
|
15780
|
-
function parsePatchFiles(input) {
|
|
15781
|
-
const files = [];
|
|
15782
|
-
const re = /^\*\*\* (?:Add|Update|Delete) File: (.+)$/gm;
|
|
15783
|
-
let m;
|
|
15784
|
-
while (m = re.exec(input)) files.push(m[1].trim());
|
|
15785
|
-
return files;
|
|
15786
|
-
}
|
|
15787
|
-
function parseCallLines(text, exec2, patch, spawns, mcps, reports) {
|
|
16161
|
+
function parseCallLines(text, spawns, reports) {
|
|
15788
16162
|
for (const line of text.split("\n")) {
|
|
15789
16163
|
if (!line.trim()) continue;
|
|
15790
16164
|
let entry;
|
|
@@ -15795,26 +16169,7 @@ function parseCallLines(text, exec2, patch, spawns, mcps, reports) {
|
|
|
15795
16169
|
}
|
|
15796
16170
|
const p = entry.payload;
|
|
15797
16171
|
if (!p) continue;
|
|
15798
|
-
if (p.type === "function_call" && p.name
|
|
15799
|
-
let cmd = "";
|
|
15800
|
-
try {
|
|
15801
|
-
cmd = String(JSON.parse(p.arguments || "{}").cmd || "");
|
|
15802
|
-
} catch {
|
|
15803
|
-
}
|
|
15804
|
-
exec2.push({ callId: p.call_id, cmd });
|
|
15805
|
-
} else if (p.type === "custom_tool_call" && p.name === CODEX_PATCH_FN_NAME) {
|
|
15806
|
-
patch.push({ callId: p.call_id, files: parsePatchFiles(p.input || "") });
|
|
15807
|
-
} else if (p.type === "custom_tool_call" && p.name === CODEX_EXEC_SCRIPT_FN_NAME) {
|
|
15808
|
-
const script = parseCodexExecScript(p.input || "");
|
|
15809
|
-
if (script.kind === "exec") exec2.push({ callId: p.call_id, cmd: script.command });
|
|
15810
|
-
else if (script.kind === "patch") patch.push({ callId: p.call_id, files: parsePatchFiles(script.patch) });
|
|
15811
|
-
} else if (p.type === "function_call" && p.name && p.namespace?.startsWith(CODEX_MCP_NAMESPACE_PREFIX)) {
|
|
15812
|
-
mcps.push({
|
|
15813
|
-
callId: p.call_id,
|
|
15814
|
-
server: p.namespace.slice(CODEX_MCP_NAMESPACE_PREFIX.length),
|
|
15815
|
-
tool: p.name
|
|
15816
|
-
});
|
|
15817
|
-
} else if (p.type === "function_call" && p.name === CODEX_SPAWN_FN_NAME) {
|
|
16172
|
+
if (p.type === "function_call" && p.name === CODEX_SPAWN_FN_NAME) {
|
|
15818
16173
|
let args = {};
|
|
15819
16174
|
try {
|
|
15820
16175
|
args = JSON.parse(p.arguments || "{}");
|
|
@@ -15849,29 +16204,23 @@ function createRolloutCallReader() {
|
|
|
15849
16204
|
let boundPath = null;
|
|
15850
16205
|
let offset = 0;
|
|
15851
16206
|
let carry = "";
|
|
15852
|
-
let decoder = new
|
|
15853
|
-
const exec2 = [];
|
|
15854
|
-
const patch = [];
|
|
16207
|
+
let decoder = new StringDecoder2("utf8");
|
|
15855
16208
|
const spawns = [];
|
|
15856
|
-
const mcps = [];
|
|
15857
16209
|
const reports = [];
|
|
15858
|
-
const snapshot = () => ({
|
|
16210
|
+
const snapshot = () => ({ spawn: spawns, reports });
|
|
15859
16211
|
const reset = (p) => {
|
|
15860
16212
|
boundPath = p;
|
|
15861
16213
|
offset = 0;
|
|
15862
16214
|
carry = "";
|
|
15863
|
-
decoder = new
|
|
15864
|
-
exec2.length = 0;
|
|
15865
|
-
patch.length = 0;
|
|
16215
|
+
decoder = new StringDecoder2("utf8");
|
|
15866
16216
|
spawns.length = 0;
|
|
15867
|
-
mcps.length = 0;
|
|
15868
16217
|
reports.length = 0;
|
|
15869
16218
|
};
|
|
15870
16219
|
return (rolloutPath) => {
|
|
15871
16220
|
if (rolloutPath !== boundPath) reset(rolloutPath);
|
|
15872
16221
|
let size = 0;
|
|
15873
16222
|
try {
|
|
15874
|
-
size =
|
|
16223
|
+
size = statSync3(rolloutPath).size;
|
|
15875
16224
|
} catch {
|
|
15876
16225
|
return snapshot();
|
|
15877
16226
|
}
|
|
@@ -15899,38 +16248,10 @@ function createRolloutCallReader() {
|
|
|
15899
16248
|
return snapshot();
|
|
15900
16249
|
}
|
|
15901
16250
|
carry = data.slice(lastNl + 1);
|
|
15902
|
-
parseCallLines(data.slice(0, lastNl),
|
|
16251
|
+
parseCallLines(data.slice(0, lastNl), spawns, reports);
|
|
15903
16252
|
return snapshot();
|
|
15904
16253
|
};
|
|
15905
16254
|
}
|
|
15906
|
-
var basename = (p) => p.replace(/[/\\]+$/, "").split(/[/\\]/).pop() || p;
|
|
15907
|
-
function unwrapShellCommand(command) {
|
|
15908
|
-
const m = command.match(/^\/bin\/\S+ -lc (['"])([\s\S]*)\1\s*$/);
|
|
15909
|
-
return m ? m[2] : command;
|
|
15910
|
-
}
|
|
15911
|
-
function normalizeCmd(s) {
|
|
15912
|
-
return s.replace(/\s+/g, " ").trim();
|
|
15913
|
-
}
|
|
15914
|
-
var SHELL_WRAPPER_SLACK = 32;
|
|
15915
|
-
function resolveCodexCallId(execCalls, index, liveCommand) {
|
|
15916
|
-
const target = execCalls[index];
|
|
15917
|
-
if (!target?.callId) return null;
|
|
15918
|
-
const persisted = normalizeCmd(target.cmd);
|
|
15919
|
-
const live = normalizeCmd(unwrapShellCommand(liveCommand || ""));
|
|
15920
|
-
const liveRaw = normalizeCmd(liveCommand || "");
|
|
15921
|
-
if (!live || live === persisted || persisted.startsWith(live) || live.startsWith(persisted) || !!persisted && liveRaw.includes(persisted) && liveRaw.length - persisted.length <= SHELL_WRAPPER_SLACK) {
|
|
15922
|
-
return target.callId;
|
|
15923
|
-
}
|
|
15924
|
-
return null;
|
|
15925
|
-
}
|
|
15926
|
-
function resolveCodexPatchCallId(patchCalls, index, changePaths) {
|
|
15927
|
-
const target = patchCalls[index];
|
|
15928
|
-
if (!target?.callId) return null;
|
|
15929
|
-
if (target.files.length === 0 || changePaths.length === 0) return target.callId;
|
|
15930
|
-
const wanted = new Set(target.files.map(basename));
|
|
15931
|
-
if (changePaths.some((p) => wanted.has(basename(p)))) return target.callId;
|
|
15932
|
-
return null;
|
|
15933
|
-
}
|
|
15934
16255
|
function resolveCodexSpawnCall(spawnCalls, index, agentId) {
|
|
15935
16256
|
if (agentId) {
|
|
15936
16257
|
const exact = spawnCalls.find((s) => s.agentId === agentId);
|
|
@@ -15939,12 +16260,6 @@ function resolveCodexSpawnCall(spawnCalls, index, agentId) {
|
|
|
15939
16260
|
const byOrder = spawnCalls[index];
|
|
15940
16261
|
return byOrder?.callId ? byOrder : null;
|
|
15941
16262
|
}
|
|
15942
|
-
function resolveCodexMcpCallId(mcpCalls, index, server, tool2) {
|
|
15943
|
-
const target = mcpCalls[index];
|
|
15944
|
-
if (!target?.callId) return null;
|
|
15945
|
-
if (server && tool2 && (target.server !== server || target.tool !== tool2)) return null;
|
|
15946
|
-
return target.callId;
|
|
15947
|
-
}
|
|
15948
16263
|
function createCodexEventAdapter(ctx) {
|
|
15949
16264
|
const { sessionId } = ctx;
|
|
15950
16265
|
let terminated = false;
|
|
@@ -15953,30 +16268,17 @@ function createCodexEventAdapter(ctx) {
|
|
|
15953
16268
|
const pendingToolCalls = /* @__PURE__ */ new Map();
|
|
15954
16269
|
const progressItems = /* @__PURE__ */ new Set();
|
|
15955
16270
|
let rolloutPath = null;
|
|
15956
|
-
let execBase = 0;
|
|
15957
|
-
let patchBase = 0;
|
|
15958
|
-
let execSeen = 0;
|
|
15959
|
-
let patchSeen = 0;
|
|
15960
16271
|
let spawnBase = 0;
|
|
15961
16272
|
let spawnSeen = 0;
|
|
15962
|
-
let mcpBase = 0;
|
|
15963
|
-
let mcpSeen = 0;
|
|
15964
16273
|
let reportBase = 0;
|
|
15965
16274
|
const agentToolUseIds = /* @__PURE__ */ new Map();
|
|
15966
|
-
let codexThreadId = sessionId || null;
|
|
15967
|
-
let rolloutLookups = 0;
|
|
15968
|
-
const MAX_ROLLOUT_LOOKUPS = 8;
|
|
15969
|
-
const resolvedToolUseIds = /* @__PURE__ */ new Map();
|
|
15970
16275
|
const readRollout = createRolloutCallReader();
|
|
15971
16276
|
let basesReady = false;
|
|
15972
16277
|
const initBases = () => {
|
|
15973
16278
|
if (basesReady || !rolloutPath) return;
|
|
15974
16279
|
basesReady = true;
|
|
15975
16280
|
const c = readRollout(rolloutPath);
|
|
15976
|
-
execBase = c.exec.length;
|
|
15977
|
-
patchBase = c.patch.length;
|
|
15978
16281
|
spawnBase = c.spawn.length;
|
|
15979
|
-
mcpBase = c.mcp.length;
|
|
15980
16282
|
reportBase = c.reports.length;
|
|
15981
16283
|
};
|
|
15982
16284
|
if (sessionId) {
|
|
@@ -15987,53 +16289,13 @@ function createCodexEventAdapter(ctx) {
|
|
|
15987
16289
|
rolloutPath = null;
|
|
15988
16290
|
}
|
|
15989
16291
|
}
|
|
15990
|
-
const
|
|
15991
|
-
if (
|
|
15992
|
-
|
|
15993
|
-
|
|
15994
|
-
|
|
15995
|
-
} catch {
|
|
15996
|
-
rolloutPath = null;
|
|
15997
|
-
}
|
|
15998
|
-
return rolloutPath;
|
|
15999
|
-
};
|
|
16000
|
-
const resolveExecToolUseId = (item) => {
|
|
16001
|
-
const key = item.id || item.call_id || `codex-${randomUUID3()}`;
|
|
16002
|
-
const cached2 = resolvedToolUseIds.get(key);
|
|
16003
|
-
if (cached2) return cached2;
|
|
16004
|
-
let toolUseId = codexToolUseId(item);
|
|
16005
|
-
const path = ensureRolloutPath();
|
|
16006
|
-
if (!item.call_id && path) {
|
|
16007
|
-
const callId = resolveCodexCallId(readRollout(path).exec, execBase + execSeen, item.command || "");
|
|
16008
|
-
if (callId) toolUseId = callId;
|
|
16009
|
-
}
|
|
16010
|
-
resolvedToolUseIds.set(key, toolUseId);
|
|
16011
|
-
execSeen += 1;
|
|
16012
|
-
return toolUseId;
|
|
16013
|
-
};
|
|
16014
|
-
const resolvePatchToolUseId = (item) => {
|
|
16015
|
-
const key = item.id || item.call_id || `codex-${randomUUID3()}`;
|
|
16016
|
-
const cached2 = resolvedToolUseIds.get(key);
|
|
16017
|
-
if (cached2) return cached2;
|
|
16018
|
-
let toolUseId = codexToolUseId(item);
|
|
16019
|
-
const path = ensureRolloutPath();
|
|
16020
|
-
if (!item.call_id && path) {
|
|
16021
|
-
const paths = (item.changes || []).map((c) => c.path || "").filter(Boolean);
|
|
16022
|
-
const callId = resolveCodexPatchCallId(readRollout(path).patch, patchBase + patchSeen, paths);
|
|
16023
|
-
if (callId) toolUseId = callId;
|
|
16024
|
-
}
|
|
16025
|
-
resolvedToolUseIds.set(key, toolUseId);
|
|
16026
|
-
patchSeen += 1;
|
|
16027
|
-
return toolUseId;
|
|
16028
|
-
};
|
|
16029
|
-
const patchInput = (item) => ({
|
|
16030
|
-
changes: (item.changes || []).map((c) => ({ path: c.path || "", kind: c.kind || "update" }))
|
|
16031
|
-
});
|
|
16032
|
-
const patchResultText = (item) => {
|
|
16033
|
-
const cs = item.changes || [];
|
|
16034
|
-
if (cs.length === 0) return "apply_patch";
|
|
16035
|
-
return cs.map((c) => `${c.kind || "update"} ${c.path || ""}`.trim()).join("\n");
|
|
16292
|
+
const bindRollout = (path) => {
|
|
16293
|
+
if (!path || path === rolloutPath) return;
|
|
16294
|
+
rolloutPath = path;
|
|
16295
|
+
basesReady = false;
|
|
16296
|
+
initBases();
|
|
16036
16297
|
};
|
|
16298
|
+
const toolUseIdFor = codexToolUseId;
|
|
16037
16299
|
const spawnEmitted = /* @__PURE__ */ new Set();
|
|
16038
16300
|
const agentPathToolUseIds = /* @__PURE__ */ new Map();
|
|
16039
16301
|
const emitSpawnBubble = (toolUseId, input, agentPath) => {
|
|
@@ -16047,10 +16309,10 @@ function createCodexEventAdapter(ctx) {
|
|
|
16047
16309
|
};
|
|
16048
16310
|
const emitSpawn = (item) => {
|
|
16049
16311
|
const agentIds = item.receiver_thread_ids ?? [];
|
|
16050
|
-
const path =
|
|
16312
|
+
const path = rolloutPath;
|
|
16051
16313
|
const entry = path ? resolveCodexSpawnCall(readRollout(path).spawn, spawnBase + spawnSeen, agentIds[0]) : null;
|
|
16052
16314
|
spawnSeen += 1;
|
|
16053
|
-
const toolUseId =
|
|
16315
|
+
const toolUseId = toolUseIdFor(item);
|
|
16054
16316
|
if (spawnEmitted.has(toolUseId)) return;
|
|
16055
16317
|
const args = entry?.args && Object.keys(entry.args).length > 0 ? entry.args : { message: item.prompt || "" };
|
|
16056
16318
|
const input = parseCodexSpawnInput(args, {
|
|
@@ -16061,11 +16323,11 @@ function createCodexEventAdapter(ctx) {
|
|
|
16061
16323
|
emitSpawnBubble(toolUseId, input, entry?.agentPath);
|
|
16062
16324
|
};
|
|
16063
16325
|
const syncSubAgents = (flushPending = false) => {
|
|
16064
|
-
const path =
|
|
16326
|
+
const path = rolloutPath;
|
|
16065
16327
|
if (!path) return;
|
|
16066
|
-
const { spawn, reports } = readRollout(path);
|
|
16067
|
-
for (let i = spawnBase; i <
|
|
16068
|
-
const s =
|
|
16328
|
+
const { spawn: spawn2, reports } = readRollout(path);
|
|
16329
|
+
for (let i = spawnBase; i < spawn2.length; i += 1) {
|
|
16330
|
+
const s = spawn2[i];
|
|
16069
16331
|
if (!s.callId || spawnEmitted.has(s.callId)) continue;
|
|
16070
16332
|
if (!s.agentId && !flushPending) continue;
|
|
16071
16333
|
emitSpawnBubble(
|
|
@@ -16096,58 +16358,6 @@ function createCodexEventAdapter(ctx) {
|
|
|
16096
16358
|
agentToolUseIds.delete(state.agentId);
|
|
16097
16359
|
}
|
|
16098
16360
|
};
|
|
16099
|
-
const resolveMcpToolUseId = (item) => {
|
|
16100
|
-
const key = item.id || `codex-${randomUUID3()}`;
|
|
16101
|
-
const cached2 = resolvedToolUseIds.get(key);
|
|
16102
|
-
if (cached2) return cached2;
|
|
16103
|
-
let toolUseId = codexToolUseId(item);
|
|
16104
|
-
const path = ensureRolloutPath();
|
|
16105
|
-
if (!item.call_id && path) {
|
|
16106
|
-
const callId = resolveCodexMcpCallId(readRollout(path).mcp, mcpBase + mcpSeen, item.server, item.tool);
|
|
16107
|
-
if (callId) toolUseId = callId;
|
|
16108
|
-
}
|
|
16109
|
-
resolvedToolUseIds.set(key, toolUseId);
|
|
16110
|
-
mcpSeen += 1;
|
|
16111
|
-
return toolUseId;
|
|
16112
|
-
};
|
|
16113
|
-
const emitMcpCall = (item, done) => {
|
|
16114
|
-
const toolUseId = resolveMcpToolUseId(item);
|
|
16115
|
-
const name = codexMcpToolName(item.server || "mcp", item.tool || "tool");
|
|
16116
|
-
if (!pendingToolCalls.has(toolUseId)) {
|
|
16117
|
-
pendingToolCalls.set(toolUseId, toolUseId);
|
|
16118
|
-
ctx.emit({
|
|
16119
|
-
type: "assistant",
|
|
16120
|
-
message: { content: [{ type: "tool_use", id: toolUseId, name, input: item.arguments || {} }] }
|
|
16121
|
-
});
|
|
16122
|
-
}
|
|
16123
|
-
if (!done) return;
|
|
16124
|
-
ctx.emit({
|
|
16125
|
-
type: "user",
|
|
16126
|
-
message: { content: [{ tool_use_id: toolUseId, content: codexMcpResultText(item) || `(${item.status || "completed"})` }] }
|
|
16127
|
-
});
|
|
16128
|
-
pendingToolCalls.delete(toolUseId);
|
|
16129
|
-
};
|
|
16130
|
-
const emitWebSearch = (item) => {
|
|
16131
|
-
const toolUseId = codexToolUseId(item);
|
|
16132
|
-
const { name, input, result } = codexWebSearchCall(item.query, item.action);
|
|
16133
|
-
ctx.emit({
|
|
16134
|
-
type: "assistant",
|
|
16135
|
-
message: { content: [{ type: "tool_use", id: toolUseId, name, input }] }
|
|
16136
|
-
});
|
|
16137
|
-
ctx.emit({ type: "user", message: { content: [{ tool_use_id: toolUseId, content: result }] } });
|
|
16138
|
-
};
|
|
16139
|
-
const emitTodoList = (item) => {
|
|
16140
|
-
const toolUseId = codexToolUseId(item);
|
|
16141
|
-
const input = codexTodoInput(item.items);
|
|
16142
|
-
ctx.emit({
|
|
16143
|
-
type: "assistant",
|
|
16144
|
-
message: { content: [{ type: "tool_use", id: toolUseId, name: CODEX_TOOL_NAMES.todo, input }] }
|
|
16145
|
-
});
|
|
16146
|
-
ctx.emit({
|
|
16147
|
-
type: "user",
|
|
16148
|
-
message: { content: [{ tool_use_id: toolUseId, content: codexTodoResultText(input.todos) }] }
|
|
16149
|
-
});
|
|
16150
|
-
};
|
|
16151
16361
|
const handleCollabItem = (item) => {
|
|
16152
16362
|
if (item.tool === CODEX_SPAWN_FN_NAME) {
|
|
16153
16363
|
emitSpawn(item);
|
|
@@ -16169,24 +16379,13 @@ function createCodexEventAdapter(ctx) {
|
|
|
16169
16379
|
switch (event.type) {
|
|
16170
16380
|
case "thread.started": {
|
|
16171
16381
|
const threadId = event.thread_id || `codex-${randomUUID3()}`;
|
|
16172
|
-
if (event.thread_id) codexThreadId = event.thread_id;
|
|
16173
16382
|
ctx.rekey(threadId);
|
|
16174
16383
|
ctx.emit({ type: "system", subtype: "init", session_id: threadId });
|
|
16175
|
-
ensureRolloutPath();
|
|
16176
|
-
if (sessionId) initBases();
|
|
16177
16384
|
break;
|
|
16178
16385
|
}
|
|
16179
16386
|
case "item.completed": {
|
|
16180
16387
|
const item = event.item;
|
|
16181
16388
|
if (!item) break;
|
|
16182
|
-
if (item.type === "agent_message" && item.text) {
|
|
16183
|
-
emitOutputProgress(item.text);
|
|
16184
|
-
ctx.emit({ type: "assistant", message: { content: [{ type: "text", text: item.text }] } });
|
|
16185
|
-
}
|
|
16186
|
-
if (item.type === "error" && (item.message || item.text)) {
|
|
16187
|
-
emitOutputProgress(item.message || item.text || "");
|
|
16188
|
-
ctx.emit({ type: "error", error: item.message || item.text });
|
|
16189
|
-
}
|
|
16190
16389
|
if (item.type === "reasoning" && item.text) {
|
|
16191
16390
|
emitOutputProgress(item.text);
|
|
16192
16391
|
ctx.emit({
|
|
@@ -16198,73 +16397,37 @@ ${item.text}
|
|
|
16198
16397
|
</details>` }] }
|
|
16199
16398
|
});
|
|
16200
16399
|
}
|
|
16201
|
-
|
|
16202
|
-
|
|
16203
|
-
if (!pendingToolCalls.has(
|
|
16204
|
-
emitOutputProgress(
|
|
16400
|
+
const bubble = codexItemBubble(item);
|
|
16401
|
+
if (bubble) {
|
|
16402
|
+
if (!pendingToolCalls.has(bubble.id)) {
|
|
16403
|
+
emitOutputProgress(bubble.input.command || bubble.name, `tool-start:${bubble.id}`);
|
|
16205
16404
|
ctx.emit({
|
|
16206
16405
|
type: "assistant",
|
|
16207
|
-
message: { content: [{ type: "tool_use", id:
|
|
16406
|
+
message: { content: [{ type: "tool_use", id: bubble.id, name: bubble.name, input: bubble.input }] }
|
|
16208
16407
|
});
|
|
16209
16408
|
}
|
|
16210
|
-
emitOutputProgress(
|
|
16409
|
+
emitOutputProgress(bubble.result, `tool-result:${bubble.id}`);
|
|
16211
16410
|
ctx.emit({
|
|
16212
16411
|
type: "user",
|
|
16213
|
-
message: { content: [{ tool_use_id:
|
|
16412
|
+
message: { content: [{ tool_use_id: bubble.id, content: bubble.result }] }
|
|
16214
16413
|
});
|
|
16215
|
-
pendingToolCalls.delete(
|
|
16414
|
+
pendingToolCalls.delete(bubble.id);
|
|
16216
16415
|
}
|
|
16217
16416
|
if (item.type === "collab_tool_call") handleCollabItem(item);
|
|
16218
|
-
if (item.type === "mcp_tool_call") {
|
|
16219
|
-
emitOutputProgress(`${item.server || "mcp"} ${item.tool || ""} ${JSON.stringify(item.result ?? item.error ?? "")}`);
|
|
16220
|
-
emitMcpCall(item, true);
|
|
16221
|
-
}
|
|
16222
|
-
if (item.type === "web_search") {
|
|
16223
|
-
emitOutputProgress(JSON.stringify(item.action || item.query || "web_search"));
|
|
16224
|
-
emitWebSearch(item);
|
|
16225
|
-
}
|
|
16226
|
-
if (item.type === "todo_list") {
|
|
16227
|
-
emitOutputProgress(JSON.stringify(item.items || []));
|
|
16228
|
-
emitTodoList(item);
|
|
16229
|
-
}
|
|
16230
|
-
if (item.type === "file_change") {
|
|
16231
|
-
const toolUseId = resolvePatchToolUseId(item);
|
|
16232
|
-
if (!pendingToolCalls.has(toolUseId)) {
|
|
16233
|
-
emitOutputProgress(patchResultText(item), `patch-start:${toolUseId}`);
|
|
16234
|
-
ctx.emit({
|
|
16235
|
-
type: "assistant",
|
|
16236
|
-
message: { content: [{ type: "tool_use", id: toolUseId, name: CODEX_TOOL_NAMES.applyPatch, input: patchInput(item) }] }
|
|
16237
|
-
});
|
|
16238
|
-
}
|
|
16239
|
-
emitOutputProgress(patchResultText(item), `patch-result:${toolUseId}`);
|
|
16240
|
-
ctx.emit({
|
|
16241
|
-
type: "user",
|
|
16242
|
-
message: { content: [{ tool_use_id: toolUseId, content: patchResultText(item) }] }
|
|
16243
|
-
});
|
|
16244
|
-
pendingToolCalls.delete(toolUseId);
|
|
16245
|
-
}
|
|
16246
16417
|
break;
|
|
16247
16418
|
}
|
|
16248
16419
|
case "item.started": {
|
|
16249
16420
|
const item = event.item;
|
|
16250
|
-
if (item
|
|
16251
|
-
|
|
16252
|
-
|
|
16253
|
-
|
|
16254
|
-
|
|
16255
|
-
|
|
16256
|
-
|
|
16257
|
-
|
|
16258
|
-
|
|
16259
|
-
|
|
16260
|
-
if (item?.type === "file_change" && (item.changes?.length ?? 0) > 0) {
|
|
16261
|
-
const toolUseId = resolvePatchToolUseId(item);
|
|
16262
|
-
pendingToolCalls.set(toolUseId, toolUseId);
|
|
16263
|
-
emitOutputProgress(patchResultText(item), `patch-start:${toolUseId}`);
|
|
16264
|
-
ctx.emit({
|
|
16265
|
-
type: "assistant",
|
|
16266
|
-
message: { content: [{ type: "tool_use", id: toolUseId, name: CODEX_TOOL_NAMES.applyPatch, input: patchInput(item) }] }
|
|
16267
|
-
});
|
|
16421
|
+
if (item) {
|
|
16422
|
+
const started = codexItemBubble(item);
|
|
16423
|
+
if (started && !pendingToolCalls.has(started.id)) {
|
|
16424
|
+
pendingToolCalls.set(started.id, started.id);
|
|
16425
|
+
emitOutputProgress(started.input.command || started.name, `tool-start:${started.id}`);
|
|
16426
|
+
ctx.emit({
|
|
16427
|
+
type: "assistant",
|
|
16428
|
+
message: { content: [{ type: "tool_use", id: started.id, name: started.name, input: started.input }] }
|
|
16429
|
+
});
|
|
16430
|
+
}
|
|
16268
16431
|
}
|
|
16269
16432
|
break;
|
|
16270
16433
|
}
|
|
@@ -16298,6 +16461,11 @@ ${item.text}
|
|
|
16298
16461
|
};
|
|
16299
16462
|
return {
|
|
16300
16463
|
handle,
|
|
16464
|
+
bindRollout,
|
|
16465
|
+
noteAssistantText(text) {
|
|
16466
|
+
if (terminated) return;
|
|
16467
|
+
emitOutputProgress(text);
|
|
16468
|
+
},
|
|
16301
16469
|
assertSuccess() {
|
|
16302
16470
|
if (failure) throw failure;
|
|
16303
16471
|
}
|
|
@@ -16311,22 +16479,20 @@ function cleanupImageFiles(imageFiles) {
|
|
|
16311
16479
|
}
|
|
16312
16480
|
}
|
|
16313
16481
|
}
|
|
16314
|
-
function
|
|
16315
|
-
if (imageFiles.length === 0) return prompt;
|
|
16482
|
+
function codexTurnInput(prompt, imageFiles) {
|
|
16316
16483
|
return [
|
|
16317
|
-
{ type: "text", text: prompt || CODEX_IMAGE_ONLY_TEXT },
|
|
16318
|
-
...imageFiles.map((path) => ({ type: "
|
|
16484
|
+
{ type: "text", text: imageFiles.length > 0 ? prompt || CODEX_IMAGE_ONLY_TEXT : prompt },
|
|
16485
|
+
...imageFiles.map((path) => ({ type: "localImage", path }))
|
|
16319
16486
|
];
|
|
16320
16487
|
}
|
|
16321
|
-
function
|
|
16488
|
+
function codexThreadParams(ctx) {
|
|
16322
16489
|
const effort = resolveCodexReasoningEffort(ctx.params.codexReasoningEffort);
|
|
16323
16490
|
return {
|
|
16324
16491
|
...ctx.params.model ? { model: ctx.params.model } : {},
|
|
16325
|
-
...effort ? {
|
|
16326
|
-
...ctx.cwd ? {
|
|
16327
|
-
|
|
16328
|
-
approvalPolicy: "never"
|
|
16329
|
-
skipGitRepoCheck: true
|
|
16492
|
+
...effort ? { effort } : {},
|
|
16493
|
+
...ctx.cwd ? { cwd: ctx.cwd } : {},
|
|
16494
|
+
sandbox: "danger-full-access",
|
|
16495
|
+
approvalPolicy: "never"
|
|
16330
16496
|
};
|
|
16331
16497
|
}
|
|
16332
16498
|
function resolveCodexReasoningEffort(value) {
|
|
@@ -16343,28 +16509,116 @@ function resolveCodexReasoningEffort(value) {
|
|
|
16343
16509
|
return void 0;
|
|
16344
16510
|
}
|
|
16345
16511
|
}
|
|
16346
|
-
|
|
16512
|
+
var INTERRUPT_TIMEOUT_MS = 3e3;
|
|
16513
|
+
async function interruptTurns(client, shim) {
|
|
16514
|
+
const turns = shim.activeTurns();
|
|
16515
|
+
if (turns.length === 0) return;
|
|
16516
|
+
await Promise.race([
|
|
16517
|
+
Promise.allSettled(
|
|
16518
|
+
turns.map((t) => client.request("turn/interrupt", { threadId: t.threadId, turnId: t.turnId }))
|
|
16519
|
+
),
|
|
16520
|
+
new Promise((resolve) => setTimeout(resolve, INTERRUPT_TIMEOUT_MS))
|
|
16521
|
+
]);
|
|
16522
|
+
}
|
|
16523
|
+
async function runCodexAppServer(ctx) {
|
|
16347
16524
|
const imageFiles = ctx.images && ctx.images.length > 0 ? writeImagesToTemp(ctx.images) : [];
|
|
16348
16525
|
const adapter = createCodexEventAdapter(ctx);
|
|
16526
|
+
const shim = new CodexEventShim();
|
|
16527
|
+
let terminal = null;
|
|
16528
|
+
let settle = null;
|
|
16529
|
+
const finished = new Promise((resolve) => {
|
|
16530
|
+
settle = resolve;
|
|
16531
|
+
});
|
|
16532
|
+
const onNotification = (n) => {
|
|
16533
|
+
for (const out of shim.handle(n)) {
|
|
16534
|
+
if (out.kind === "text-delta") {
|
|
16535
|
+
adapter.noteAssistantText(out.text);
|
|
16536
|
+
ctx.emit({
|
|
16537
|
+
type: "stream_event",
|
|
16538
|
+
event: { type: "content_block_delta", delta: { type: "text_delta", text: out.text } }
|
|
16539
|
+
});
|
|
16540
|
+
continue;
|
|
16541
|
+
}
|
|
16542
|
+
adapter.handle(out.event);
|
|
16543
|
+
if (out.event.type === "turn.completed") terminal = "completed";
|
|
16544
|
+
if (out.event.type === "turn.failed") terminal = "failed";
|
|
16545
|
+
}
|
|
16546
|
+
if (terminal) settle?.();
|
|
16547
|
+
};
|
|
16548
|
+
let closedReason = null;
|
|
16549
|
+
let client;
|
|
16349
16550
|
try {
|
|
16350
|
-
|
|
16351
|
-
|
|
16352
|
-
|
|
16353
|
-
|
|
16354
|
-
|
|
16355
|
-
|
|
16356
|
-
|
|
16357
|
-
|
|
16358
|
-
|
|
16359
|
-
|
|
16360
|
-
|
|
16361
|
-
|
|
16551
|
+
client = CodexAppServerClient.start({
|
|
16552
|
+
env: sanitizedSpawnEnv({}),
|
|
16553
|
+
...ctx.cwd ? { cwd: ctx.cwd } : {},
|
|
16554
|
+
onNotification,
|
|
16555
|
+
// Permitted `console.error` under EFFECT.md §0 (subprocess IPC adapter gateway).
|
|
16556
|
+
onStderr: (line) => console.error(`[codex app-server] ${line}`),
|
|
16557
|
+
onClosed: (err) => {
|
|
16558
|
+
closedReason = err;
|
|
16559
|
+
settle?.();
|
|
16560
|
+
}
|
|
16561
|
+
});
|
|
16562
|
+
} catch (error48) {
|
|
16563
|
+
cleanupImageFiles(imageFiles);
|
|
16564
|
+
throw error48;
|
|
16565
|
+
}
|
|
16566
|
+
try {
|
|
16567
|
+
await client.request("initialize", {
|
|
16568
|
+
clientInfo: { name: "cockpit", title: "Cockpit", version: "1" },
|
|
16569
|
+
capabilities: { experimentalApi: true }
|
|
16570
|
+
});
|
|
16571
|
+
client.notify("initialized");
|
|
16572
|
+
const params = codexThreadParams(ctx);
|
|
16573
|
+
let opened;
|
|
16574
|
+
let resumeFailure = null;
|
|
16575
|
+
if (ctx.sessionId) {
|
|
16576
|
+
try {
|
|
16577
|
+
opened = await client.request("thread/resume", { threadId: ctx.sessionId, ...params });
|
|
16578
|
+
} catch (error48) {
|
|
16579
|
+
resumeFailure = error48 instanceof Error ? error48.message : String(error48);
|
|
16580
|
+
console.error(
|
|
16581
|
+
`[codex app-server] thread/resume failed for ${ctx.sessionId} \u2014 starting a fresh thread (history not carried over): ${resumeFailure}`
|
|
16582
|
+
);
|
|
16583
|
+
opened = await client.request("thread/start", params);
|
|
16584
|
+
}
|
|
16585
|
+
} else {
|
|
16586
|
+
opened = await client.request("thread/start", params);
|
|
16587
|
+
}
|
|
16588
|
+
const thread = opened.thread;
|
|
16589
|
+
const threadId = thread?.id;
|
|
16590
|
+
if (!threadId) throw new Error("codex app-server returned no thread id");
|
|
16591
|
+
adapter.bindRollout(thread?.path);
|
|
16592
|
+
shim.bindThread(threadId);
|
|
16593
|
+
adapter.handle({ type: "thread.started", thread_id: threadId });
|
|
16594
|
+
if (resumeFailure) {
|
|
16595
|
+
ctx.emit({
|
|
16596
|
+
type: "system",
|
|
16597
|
+
subtype: "notice",
|
|
16598
|
+
notice: "codex_resume_failed",
|
|
16599
|
+
previous_session_id: ctx.sessionId,
|
|
16600
|
+
session_id: threadId,
|
|
16601
|
+
error: resumeFailure
|
|
16602
|
+
});
|
|
16362
16603
|
}
|
|
16363
|
-
const
|
|
16364
|
-
|
|
16365
|
-
|
|
16604
|
+
const startedTurn = await client.request("turn/start", {
|
|
16605
|
+
threadId,
|
|
16606
|
+
input: codexTurnInput(ctx.prompt ?? "", imageFiles)
|
|
16607
|
+
});
|
|
16608
|
+
const turnId = startedTurn.turn?.id;
|
|
16609
|
+
if (turnId) shim.noteOwnTurn(threadId, turnId);
|
|
16610
|
+
await Promise.race([
|
|
16611
|
+
finished,
|
|
16612
|
+
new Promise((resolve) => {
|
|
16613
|
+
if (ctx.signal.aborted) return resolve();
|
|
16614
|
+
ctx.signal.addEventListener("abort", () => resolve(), { once: true });
|
|
16615
|
+
})
|
|
16616
|
+
]);
|
|
16617
|
+
if (ctx.signal.aborted) await interruptTurns(client, shim);
|
|
16366
16618
|
adapter.assertSuccess();
|
|
16619
|
+
if (closedReason && !ctx.signal.aborted && !terminal) throw closedReason;
|
|
16367
16620
|
} finally {
|
|
16621
|
+
client.dispose();
|
|
16368
16622
|
cleanupImageFiles(imageFiles);
|
|
16369
16623
|
}
|
|
16370
16624
|
}
|
|
@@ -16374,13 +16628,13 @@ var codexSpec = {
|
|
|
16374
16628
|
runner: {
|
|
16375
16629
|
async run(ctx) {
|
|
16376
16630
|
if (ctx.params.noHistory !== true || !ctx.sessionId) {
|
|
16377
|
-
await
|
|
16631
|
+
await runCodexAppServer(ctx);
|
|
16378
16632
|
return;
|
|
16379
16633
|
}
|
|
16380
16634
|
const sessionPath = findCodexSessionPath(ctx.sessionId);
|
|
16381
16635
|
const stashed = sessionPath ? stashCodexRollout(sessionPath) : false;
|
|
16382
16636
|
try {
|
|
16383
|
-
await
|
|
16637
|
+
await runCodexAppServer(ctx);
|
|
16384
16638
|
} finally {
|
|
16385
16639
|
if (stashed && sessionPath) mergeStashedCodexRollout(sessionPath);
|
|
16386
16640
|
}
|
|
@@ -16550,6 +16804,8 @@ var en_default2 = {
|
|
|
16550
16804
|
sendToPeerFailed: "Failed to send to the other pane",
|
|
16551
16805
|
forkFailed: "Failed to fork session",
|
|
16552
16806
|
excerptFailed: "Failed to excerpt this turn",
|
|
16807
|
+
turnDeleted: "Turn deleted",
|
|
16808
|
+
deleteTurnFailed: "Failed to delete this turn",
|
|
16553
16809
|
copiedUrl: "URL copied",
|
|
16554
16810
|
copiedOutput: "Output copied",
|
|
16555
16811
|
copiedCmd: "Command copied",
|
|
@@ -16929,17 +17185,34 @@ var en_default2 = {
|
|
|
16929
17185
|
jumpToLatest: "Jump to latest",
|
|
16930
17186
|
jumpToPrevUserMessage: "Previous user message",
|
|
16931
17187
|
jumpToNextUserMessage: "Next user message",
|
|
17188
|
+
recentUserMessages: "Recent user messages",
|
|
17189
|
+
moreUserMessages: "More",
|
|
17190
|
+
userMessage: "User message",
|
|
17191
|
+
recentUserMessageNumber: "Recent user message {{index}} of {{total}}",
|
|
17192
|
+
imageMessage: "Image message",
|
|
16932
17193
|
copyMessage: "Copy message",
|
|
16933
17194
|
copyImage: "Copy image",
|
|
16934
17195
|
copiedImage: "Image copied",
|
|
16935
17196
|
forkSession: "Fork session from here",
|
|
16936
17197
|
excerptTurn: "Excerpt this turn to a new session",
|
|
17198
|
+
newSession: "New session",
|
|
17199
|
+
continueFromHere: "Continue from here",
|
|
17200
|
+
continueFromHereDesc: "Keep all context through this turn",
|
|
17201
|
+
onlyThisTurn: "Only this turn",
|
|
17202
|
+
onlyThisTurnDesc: "Keep only this question and answer",
|
|
17203
|
+
deleteTurn: "Delete turn",
|
|
17204
|
+
deletingTurn: "Deleting\u2026",
|
|
17205
|
+
deleteTurnConfirm: "Delete this question, answer, and its tool records? This cannot be undone.",
|
|
17206
|
+
deleteTurnConfirmAction: "Delete turn",
|
|
17207
|
+
deleteTurnWhileRunning: "A turn cannot be deleted while the session is running",
|
|
16937
17208
|
sendToPeerPane: "Send this message to the other pane",
|
|
16938
17209
|
imageN: "Image {{index}}",
|
|
16939
17210
|
imagePreview: "Image preview",
|
|
16940
17211
|
toolCalls: "{{count}} tool calls",
|
|
16941
17212
|
collapse: "\u25B2 Collapse",
|
|
16942
17213
|
expand: "\u25BC Expand",
|
|
17214
|
+
showMore: "Show more",
|
|
17215
|
+
showLess: "Show less",
|
|
16943
17216
|
subagent: "Subagent",
|
|
16944
17217
|
subagentEmpty: "No subagent transcript found",
|
|
16945
17218
|
subagentViewTitle: "View subagent transcript",
|
|
@@ -16954,6 +17227,9 @@ var en_default2 = {
|
|
|
16954
17227
|
requestFailed: "Request failed",
|
|
16955
17228
|
cannotReadStream: "Cannot read response stream",
|
|
16956
17229
|
errorRetry: "An error occurred, please retry",
|
|
17230
|
+
codexResumeFailed: "Previous session is in use by another Codex client \u2014 started a new session; history was not carried over",
|
|
17231
|
+
codexResumeFailedPrevious: "Previous session",
|
|
17232
|
+
codexResumeFailedNew: "New session",
|
|
16957
17233
|
placeholder: "Type a message, Enter to send (Shift+Enter for new line, paste images; start a line with / (main session) or @ (subagent) for commands, multiple allowed)",
|
|
16958
17234
|
placeholderDisabled: "Generating... you can keep typing (ESC to cancel; if stuck, cancel and resend 'continue')",
|
|
16959
17235
|
imageSizeLimit: "Image size exceeds limit (max 5MB), current: {{size}}MB",
|
|
@@ -16962,13 +17238,25 @@ var en_default2 = {
|
|
|
16962
17238
|
userMessages: "User messages",
|
|
16963
17239
|
projectNotes: "Project Notes",
|
|
16964
17240
|
scheduledTasks: "Scheduled Tasks",
|
|
16965
|
-
|
|
16966
|
-
|
|
16967
|
-
|
|
16968
|
-
|
|
16969
|
-
|
|
16970
|
-
|
|
16971
|
-
|
|
17241
|
+
quickInstructions: "Quick Instructions",
|
|
17242
|
+
globalInstructions: "Global Instructions",
|
|
17243
|
+
projectInstructions: "Project Instructions",
|
|
17244
|
+
noQuickInstructions: "No quick instructions yet",
|
|
17245
|
+
addQuickInstruction: "Add quick instruction",
|
|
17246
|
+
quickInstructionPlaceholder: "One-line instruction \u2014 Enter to save, Esc to cancel",
|
|
17247
|
+
insertQuickInstruction: "Insert into input (without sending)",
|
|
17248
|
+
addInstructionGroup: "New group",
|
|
17249
|
+
instructionGroupNamePlaceholder: "Group name \u2014 Enter to save, Esc to cancel",
|
|
17250
|
+
instructionGroupLabel: "Group",
|
|
17251
|
+
instructionGroupNone: "No group",
|
|
17252
|
+
deleteInstructionGroupConfirm: 'Deleting "{{name}}" also deletes the {{count}} instruction(s) inside it. Continue?',
|
|
17253
|
+
editGlobalInstructions: "Edit global instructions",
|
|
17254
|
+
editProjectInstructions: "Edit project instructions",
|
|
17255
|
+
quickInstructionsMarkdownHint: "One top-level entry per line. Add lines beginning with \u201C- \u201D after a group name for its instructions.",
|
|
17256
|
+
quickInstructionsMarkdownPlaceholder: "Continue\nDraw with text\n- Draw a login flow\n- Draw a system architecture",
|
|
17257
|
+
quickInstructionsMarkdownError: "Invalid format on line {{line}}.",
|
|
17258
|
+
savingQuickInstructions: "Saving...",
|
|
17259
|
+
saveQuickInstructionsFailed: "Could not save. Your edits are still here; please try again.",
|
|
16972
17260
|
context: "Context",
|
|
16973
17261
|
output: "Output",
|
|
16974
17262
|
copiedCommandTooltip: "Copied!",
|
|
@@ -16989,17 +17277,19 @@ var en_default2 = {
|
|
|
16989
17277
|
quotaResetAt: "Resets {{time}}",
|
|
16990
17278
|
openProviderConsole: "Open the provider console",
|
|
16991
17279
|
planMode: "Plan mode",
|
|
16992
|
-
planModeDesc: "read-only
|
|
17280
|
+
planModeDesc: "read-only, plans first without edits",
|
|
16993
17281
|
planModeOn: "Plan mode on \u2014 read-only; send a task to get a plan",
|
|
16994
17282
|
planModeOff: "Plan mode off",
|
|
16995
17283
|
planModeHint: "Plan mode: read-only exploration that produces a plan without editing. Uncheck and resend to implement.",
|
|
16996
|
-
noHistory: "
|
|
16997
|
-
noHistoryDesc: "
|
|
16998
|
-
noHistoryHint: "
|
|
17284
|
+
noHistory: "No history context",
|
|
17285
|
+
noHistoryDesc: "each prompt is independent",
|
|
17286
|
+
noHistoryHint: "No history context: each message is sent to the model on its own, with no prior conversation. The transcript above still records everything.",
|
|
16999
17287
|
planTitle: "Plan (awaiting your review)",
|
|
17000
17288
|
approvePlan: "Approve & run",
|
|
17001
17289
|
planApproveHint: "No approval dialog here \u2014 click to exit plan mode and execute",
|
|
17002
17290
|
approvePlanPrompt: "Approved \u2014 proceed with the plan above.",
|
|
17291
|
+
maximizePane: "Maximize this pane",
|
|
17292
|
+
restorePane: "Restore both panes",
|
|
17003
17293
|
closePane: "Close this pane",
|
|
17004
17294
|
singlePane: "Single pane",
|
|
17005
17295
|
splitPane: "Split into two panes"
|
|
@@ -17829,6 +18119,8 @@ var zh_default = {
|
|
|
17829
18119
|
sendToPeerFailed: "\u53D1\u9001\u5230\u53E6\u4E00\u680F\u5931\u8D25",
|
|
17830
18120
|
forkFailed: "\u5206\u53C9\u4F1A\u8BDD\u5931\u8D25",
|
|
17831
18121
|
excerptFailed: "\u6458\u5F55\u672C\u8F6E\u5931\u8D25",
|
|
18122
|
+
turnDeleted: "\u5DF2\u5220\u9664\u672C\u8F6E",
|
|
18123
|
+
deleteTurnFailed: "\u5220\u9664\u672C\u8F6E\u5931\u8D25",
|
|
17832
18124
|
copiedUrl: "\u5DF2\u590D\u5236\u7F51\u5740",
|
|
17833
18125
|
copiedOutput: "\u5DF2\u590D\u5236\u8F93\u51FA",
|
|
17834
18126
|
copiedCmd: "\u5DF2\u590D\u5236\u547D\u4EE4",
|
|
@@ -18208,17 +18500,34 @@ var zh_default = {
|
|
|
18208
18500
|
jumpToLatest: "\u8DF3\u8F6C\u5230\u6700\u65B0",
|
|
18209
18501
|
jumpToPrevUserMessage: "\u4E0A\u4E00\u6761\u7528\u6237\u6D88\u606F",
|
|
18210
18502
|
jumpToNextUserMessage: "\u4E0B\u4E00\u6761\u7528\u6237\u6D88\u606F",
|
|
18503
|
+
recentUserMessages: "\u6700\u8FD1\u7684\u7528\u6237\u6D88\u606F",
|
|
18504
|
+
moreUserMessages: "\u66F4\u591A",
|
|
18505
|
+
userMessage: "\u7528\u6237\u6D88\u606F",
|
|
18506
|
+
recentUserMessageNumber: "\u6700\u8FD1\u7528\u6237\u6D88\u606F {{index}}/{{total}}",
|
|
18507
|
+
imageMessage: "\u56FE\u7247\u6D88\u606F",
|
|
18211
18508
|
copyMessage: "\u590D\u5236\u6D88\u606F",
|
|
18212
18509
|
copyImage: "\u590D\u5236\u56FE\u7247",
|
|
18213
18510
|
copiedImage: "\u5DF2\u590D\u5236\u56FE\u7247",
|
|
18214
18511
|
forkSession: "\u4ECE\u6B64\u5904\u5206\u53C9\u4F1A\u8BDD",
|
|
18215
18512
|
excerptTurn: "\u6458\u5F55\u672C\u8F6E\u5230\u65B0\u4F1A\u8BDD",
|
|
18513
|
+
newSession: "\u65B0\u5EFA\u4F1A\u8BDD",
|
|
18514
|
+
continueFromHere: "\u5EF6\u7EED\u5230\u6B64\u5904",
|
|
18515
|
+
continueFromHereDesc: "\u4FDD\u7559\u622A\u81F3\u672C\u8F6E\u7684\u5168\u90E8\u4E0A\u4E0B\u6587",
|
|
18516
|
+
onlyThisTurn: "\u4EC5\u63D0\u53D6\u672C\u8F6E",
|
|
18517
|
+
onlyThisTurnDesc: "\u53EA\u5E26\u8FD9\u4E00\u8F6E\u95EE\u7B54",
|
|
18518
|
+
deleteTurn: "\u5220\u9664\u672C\u8F6E",
|
|
18519
|
+
deletingTurn: "\u6B63\u5728\u5220\u9664\u2026",
|
|
18520
|
+
deleteTurnConfirm: "\u786E\u5B9A\u5220\u9664\u8FD9\u4E00\u8F6E\u7684\u95EE\u9898\u3001\u56DE\u7B54\u53CA\u5DE5\u5177\u8BB0\u5F55\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
|
|
18521
|
+
deleteTurnConfirmAction: "\u5220\u9664\u672C\u8F6E",
|
|
18522
|
+
deleteTurnWhileRunning: "\u4F1A\u8BDD\u8FD0\u884C\u671F\u95F4\u4E0D\u80FD\u5220\u9664",
|
|
18216
18523
|
sendToPeerPane: "\u53D1\u9001\u672C\u6761\u6D88\u606F\u5230\u53E6\u4E00\u680F",
|
|
18217
18524
|
imageN: "\u56FE\u7247 {{index}}",
|
|
18218
18525
|
imagePreview: "\u56FE\u7247\u9884\u89C8",
|
|
18219
18526
|
toolCalls: "{{count}} \u4E2A\u5DE5\u5177\u8C03\u7528",
|
|
18220
18527
|
collapse: "\u25B2 \u6536\u8D77",
|
|
18221
18528
|
expand: "\u25BC \u5C55\u5F00",
|
|
18529
|
+
showMore: "\u663E\u793A\u66F4\u591A",
|
|
18530
|
+
showLess: "\u6536\u8D77",
|
|
18222
18531
|
subagent: "\u5B50\u4EE3\u7406",
|
|
18223
18532
|
subagentEmpty: "\u672A\u627E\u5230\u5B50\u4EE3\u7406\u6D88\u606F\u8BB0\u5F55",
|
|
18224
18533
|
subagentViewTitle: "\u67E5\u770B\u5B50\u4EE3\u7406\u6267\u884C\u8FC7\u7A0B",
|
|
@@ -18233,6 +18542,9 @@ var zh_default = {
|
|
|
18233
18542
|
requestFailed: "\u8BF7\u6C42\u5931\u8D25",
|
|
18234
18543
|
cannotReadStream: "\u65E0\u6CD5\u8BFB\u53D6\u54CD\u5E94\u6D41",
|
|
18235
18544
|
errorRetry: "\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5",
|
|
18545
|
+
codexResumeFailed: "\u539F\u4F1A\u8BDD\u88AB\u5176\u4ED6 Codex \u5BA2\u6237\u7AEF\u5360\u7528\uFF0C\u5DF2\u65B0\u5EFA\u4F1A\u8BDD\uFF0C\u5386\u53F2\u672A\u7EE7\u627F",
|
|
18546
|
+
codexResumeFailedPrevious: "\u539F\u4F1A\u8BDD",
|
|
18547
|
+
codexResumeFailedNew: "\u65B0\u4F1A\u8BDD",
|
|
18236
18548
|
placeholder: "\u8F93\u5165\u6D88\u606F\uFF0CEnter \u53D1\u9001\uFF08Shift+Enter \u6362\u884C\uFF0C\u53EF\u7C98\u8D34\u56FE\u7247\uFF1B\u884C\u9996 /\uFF08\u4E3B\u4F1A\u8BDD\uFF09\u6216 @\uFF08\u5B50\u4EE3\u7406\uFF09\u5524\u8D77\u547D\u4EE4\uFF0C\u652F\u6301\u591A\u884C\u591A\u547D\u4EE4\uFF09",
|
|
18237
18549
|
placeholderDisabled: "\u751F\u6210\u4E2D... \u53EF\u7EE7\u7EED\u8F93\u5165 (ESC \u53D6\u6D88;\u5361\u4F4F\u592A\u4E45\u53EF\u53D6\u6D88\u540E\u91CD\u53D1\u300C\u7EE7\u7EED\u300D)",
|
|
18238
18550
|
imageSizeLimit: "\u56FE\u7247\u5927\u5C0F\u8D85\u8FC7\u9650\u5236\uFF08\u6700\u5927 5MB\uFF09\uFF0C\u5F53\u524D\u5927\u5C0F: {{size}}MB",
|
|
@@ -18241,13 +18553,25 @@ var zh_default = {
|
|
|
18241
18553
|
userMessages: "\u7528\u6237\u6D88\u606F\u5217\u8868",
|
|
18242
18554
|
projectNotes: "\u9879\u76EE\u7B14\u8BB0",
|
|
18243
18555
|
scheduledTasks: "\u5B9A\u65F6\u4EFB\u52A1",
|
|
18244
|
-
|
|
18245
|
-
|
|
18246
|
-
|
|
18247
|
-
|
|
18248
|
-
|
|
18249
|
-
|
|
18250
|
-
|
|
18556
|
+
quickInstructions: "\u5FEB\u6377\u6307\u4EE4",
|
|
18557
|
+
globalInstructions: "\u5168\u5C40\u6307\u4EE4",
|
|
18558
|
+
projectInstructions: "\u9879\u76EE\u6307\u4EE4",
|
|
18559
|
+
noQuickInstructions: "\u6682\u65E0\u5FEB\u6377\u6307\u4EE4",
|
|
18560
|
+
addQuickInstruction: "\u65B0\u589E\u5FEB\u6377\u6307\u4EE4",
|
|
18561
|
+
quickInstructionPlaceholder: "\u8F93\u5165\u4E00\u53E5\u8BDD\u6307\u4EE4\uFF0CEnter \u4FDD\u5B58\uFF0CEsc \u53D6\u6D88",
|
|
18562
|
+
insertQuickInstruction: "\u586B\u5165\u8F93\u5165\u6846\uFF08\u4E0D\u53D1\u9001\uFF09",
|
|
18563
|
+
addInstructionGroup: "\u65B0\u589E\u5206\u7EC4",
|
|
18564
|
+
instructionGroupNamePlaceholder: "\u8F93\u5165\u5206\u7EC4\u540D\uFF0CEnter \u4FDD\u5B58\uFF0CEsc \u53D6\u6D88",
|
|
18565
|
+
instructionGroupLabel: "\u6240\u5C5E\u5206\u7EC4",
|
|
18566
|
+
instructionGroupNone: "\u4E0D\u5206\u7EC4",
|
|
18567
|
+
deleteInstructionGroupConfirm: "\u5220\u9664\u5206\u7EC4\u300C{{name}}\u300D\u4F1A\u540C\u65F6\u5220\u9664\u7EC4\u5185 {{count}} \u6761\u6307\u4EE4\uFF0C\u786E\u5B9A\u7EE7\u7EED\uFF1F",
|
|
18568
|
+
editGlobalInstructions: "\u7F16\u8F91\u5168\u5C40\u6307\u4EE4",
|
|
18569
|
+
editProjectInstructions: "\u7F16\u8F91\u9879\u76EE\u6307\u4EE4",
|
|
18570
|
+
quickInstructionsMarkdownHint: "\u4E00\u7EA7\u5185\u5BB9\u6BCF\u884C\u4E00\u6761\uFF1B\u5206\u7EC4\u540D\u79F0\u540E\u7684\u300C- \u300D\u5F00\u5934\u884C\u662F\u8BE5\u5206\u7EC4\u7684\u5B50\u547D\u4EE4\u3002",
|
|
18571
|
+
quickInstructionsMarkdownPlaceholder: "\u6309\u63A8\u8350\u5B9E\u65BD\n\u7528\u6587\u672C\u753B\u56FE\n- \u753B\u4E00\u4E2A\u767B\u5F55\u6D41\u7A0B\n- \u753B\u4E00\u4E2A\u7CFB\u7EDF\u67B6\u6784",
|
|
18572
|
+
quickInstructionsMarkdownError: "\u7B2C {{line}} \u884C\u683C\u5F0F\u4E0D\u6B63\u786E\u3002",
|
|
18573
|
+
savingQuickInstructions: "\u4FDD\u5B58\u4E2D...",
|
|
18574
|
+
saveQuickInstructionsFailed: "\u4FDD\u5B58\u5931\u8D25\uFF0C\u4FEE\u6539\u4ECD\u7136\u4FDD\u7559\uFF0C\u8BF7\u91CD\u8BD5\u3002",
|
|
18251
18575
|
context: "\u4E0A\u4E0B\u6587",
|
|
18252
18576
|
output: "\u8F93\u51FA",
|
|
18253
18577
|
copiedCommandTooltip: "\u5DF2\u590D\u5236!",
|
|
@@ -18268,17 +18592,19 @@ var zh_default = {
|
|
|
18268
18592
|
quotaResetAt: "{{time}} \u91CD\u7F6E",
|
|
18269
18593
|
openProviderConsole: "\u6253\u5F00\u670D\u52A1\u5546\u63A7\u5236\u53F0",
|
|
18270
18594
|
planMode: "\u8BA1\u5212\u6A21\u5F0F",
|
|
18271
|
-
planModeDesc: "\u53EA\u8BFB\
|
|
18595
|
+
planModeDesc: "\u53EA\u8BFB\uFF0C\u5148\u51FA\u8BA1\u5212\u4E0D\u6539\u4EE3\u7801",
|
|
18272
18596
|
planModeOn: "\u5DF2\u5F00\u542F\u8BA1\u5212\u6A21\u5F0F\u2014\u2014\u53EA\u8BFB;\u53D1\u4E00\u4E2A\u4EFB\u52A1\u5373\u53EF\u62FF\u5230\u8BA1\u5212",
|
|
18273
18597
|
planModeOff: "\u5DF2\u5173\u95ED\u8BA1\u5212\u6A21\u5F0F",
|
|
18274
18598
|
planModeHint: "\u8BA1\u5212\u6A21\u5F0F\uFF1A\u53EA\u8BFB\u63A2\u7D22\u3001\u4EA7\u51FA\u8BA1\u5212\u4F46\u4E0D\u6539\u6587\u4EF6\u3002\u53D6\u6D88\u52FE\u9009\u540E\u91CD\u53D1\u624D\u4F1A\u5B9E\u73B0\u3002",
|
|
18275
|
-
noHistory: "\
|
|
18276
|
-
noHistoryDesc: "\
|
|
18277
|
-
noHistoryHint: "\
|
|
18599
|
+
noHistory: "\u4E0D\u5E26\u5386\u53F2\u4E0A\u4E0B\u6587",
|
|
18600
|
+
noHistoryDesc: "\u6BCF\u6B21\u63D0\u95EE\u5747\u72EC\u7ACB",
|
|
18601
|
+
noHistoryHint: "\u4E0D\u5E26\u5386\u53F2\u4E0A\u4E0B\u6587\uFF1A\u6BCF\u6761\u6D88\u606F\u5355\u72EC\u53D1\u7ED9\u6A21\u578B\uFF0C\u4E0D\u5E26\u4E4B\u524D\u7684\u5BF9\u8BDD\u3002\u4E0A\u65B9\u7684\u4F1A\u8BDD\u8BB0\u5F55\u7167\u5E38\u4FDD\u7559\u3002",
|
|
18278
18602
|
planTitle: "\u8BA1\u5212\uFF08\u5F85\u4F60\u786E\u8BA4\uFF09",
|
|
18279
18603
|
approvePlan: "\u6279\u51C6\u5E76\u6267\u884C",
|
|
18280
18604
|
planApproveHint: "\u672C\u73AF\u5883\u65E0\u5BA1\u6279\u5F39\u7A97\uFF0C\u70B9\u6B64\u9000\u51FA\u8BA1\u5212\u6A21\u5F0F\u5E76\u6267\u884C",
|
|
18281
18605
|
approvePlanPrompt: "\u5DF2\u6279\u51C6\uFF0C\u6309\u4E0A\u8FF0\u8BA1\u5212\u5F00\u59CB\u6267\u884C\u3002",
|
|
18606
|
+
maximizePane: "\u653E\u5927\u672C\u680F",
|
|
18607
|
+
restorePane: "\u8FD8\u539F\u53CC\u680F",
|
|
18282
18608
|
closePane: "\u5173\u95ED\u672C\u680F",
|
|
18283
18609
|
singlePane: "\u5207\u56DE\u5355\u680F",
|
|
18284
18610
|
splitPane: "\u5E76\u6392\u53CC\u680F"
|