@surething/cockpit 1.0.275 → 1.0.276
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 +3 -1
- package/.next-prod/build-manifest.json +2 -2
- package/.next-prod/cockpit-build.json +1 -1
- package/.next-prod/prerender-manifest.json +4 -4
- package/.next-prod/routes-manifest.json +14 -0
- package/.next-prod/server/app/_global-error/page.js +2 -2
- 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/bots/[id]/route.js +1 -0
- package/.next-prod/server/app/api/bots/[id]/route.js.nft.json +1 -0
- package/.next-prod/server/app/api/bots/[id]/route_client-reference-manifest.js +1 -0
- package/.next-prod/server/app/api/bots/route.js +1 -0
- package/.next-prod/server/app/api/bots/route.js.nft.json +1 -0
- package/.next-prod/server/app/api/bots/route_client-reference-manifest.js +1 -0
- 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 +2 -2
- package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/connect/route.js +1 -1
- 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 +1 -1
- 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 +2 -2
- 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 -1
- package/.next-prod/server/app/api/instructions/config/route.js.nft.json +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 -2
- package/.next-prod/server/app/api/session/[sessionId]/turn/route.js.nft.json +1 -1
- 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/delegate/route.js +1 -1
- package/.next-prod/server/app/api/sessions/delegate/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/sessions/search/route.js +1 -1
- package/.next-prod/server/app/api/sessions/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/status/route.js +1 -1
- package/.next-prod/server/app/api/sessions/status/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 +3 -1
- package/.next-prod/server/chunks/2493.js +13 -9
- package/.next-prod/server/chunks/{7956.js → 3354.js} +2 -2
- package/.next-prod/server/chunks/6495.js +1 -1
- package/.next-prod/server/chunks/6548.js +1 -1
- package/.next-prod/server/chunks/7438.js +764 -0
- package/.next-prod/server/chunks/{1653.js → 8022.js} +2 -2
- package/.next-prod/server/middleware-build-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/O8neHUIr3dQhe1jcOUsQ8/_buildManifest.js +1 -0
- package/.next-prod/static/chunks/{103-1f50be74a00f89af.js → 50015-b81552adf20a6a33.js} +2 -2
- package/.next-prod/static/chunks/72539-049ac78fc767d177.js +17 -0
- package/.next-prod/static/chunks/89656-d9dd3a8559041236.js +34 -0
- package/.next-prod/static/chunks/99092-5b836813f4b1d4b3.js +716 -0
- package/.next-prod/static/chunks/app/_global-error/{page-b56c0b18a3b4d026.js → page-e2f146f38bb4df42.js} +1 -1
- package/.next-prod/static/chunks/app/api/agent/test/{route-b56c0b18a3b4d026.js → route-e2f146f38bb4df42.js} +1 -1
- package/.next-prod/static/chunks/app/api/bash/{route-b56c0b18a3b4d026.js → route-e2f146f38bb4df42.js} +1 -1
- package/.next-prod/static/chunks/app/api/{chat/codex/route-b56c0b18a3b4d026.js → bots/[id]/route-e2f146f38bb4df42.js} +1 -1
- package/.next-prod/static/chunks/app/api/bots/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/codex/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/deepseek/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/glm/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/kimi/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/ollama/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/chat/stop/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/claude-stats/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/commands/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/comments/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/db/columns/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/db/connect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/db/disconnect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/db/export/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/db/query/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/db/schemas/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/deepseek/balance/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/deepseek/credentials/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/deepseek/models/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/dev/spans/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/extension/version/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/file/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/blame/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/clipboard/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/copy/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/delete/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/expanded/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/index/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/init/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/paste/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/read/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/readdir/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/recent/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/save/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/search/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/stat/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/files/text/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/blob/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/branch-diff/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/branches/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/commit-diff/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/commits/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/current-branch/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/diff/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/discard/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/stage/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/status/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/unstage/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/git/worktree/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/glm/credentials/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/glm/models/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/glm/usage/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/global-state/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/health/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/html-apps/[id]/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/html-apps/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/instructions/config/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/kimi/credentials/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/kimi/models/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/kimi/usage/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/definition/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/hover/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/references/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/status/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/lsp/warmup/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/columns/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/connect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/disconnect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/export/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/query/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/mysql/schemas/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/connect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/query/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/neo4j/schema/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/note/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/config/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/models/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/ollama/start/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/open-cursor/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/open-vscode/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/pick-folder/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/pinned-sessions/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/project-settings/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/project-state/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/affected/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/callees/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/callers/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/context/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/file/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/impact/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/related/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/risk/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projectGraph/search/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/projects/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/push/public-key/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/push/subscribe/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/push/unsubscribe/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/command/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/connect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/delete/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/disconnect/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/get/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/keys/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/redis/set/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/restart/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/comments/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/replies/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/[id]/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/identify/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/order/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/share-info/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/review/users/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/scheduled-tasks/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/services/config/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/services/scripts/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/session/[sessionId]/turn/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/session/user-messages/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/session-by-path/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/delegate/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/projects/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/search/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/sessions/status/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/settings/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/shutdown/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/[id]/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/content/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/skills/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/snapshots/blob/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/snapshots/diff/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/snapshots/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/aliases/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/env/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/terminal/history/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/update/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/update-state/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/api/version/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/apps/[...path]/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/layout-347ca1b3228d5b23.js +1 -0
- package/.next-prod/static/chunks/app/manifest.webmanifest/route-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/app/page-2ade7ecd21636624.js +1 -0
- package/.next-prod/static/chunks/app/project/page-2ade7ecd21636624.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-e2f146f38bb4df42.js +1 -0
- package/.next-prod/static/css/7a02a222d1299650.css +1 -0
- package/.next-prod/trace +15 -15
- package/.next-prod/trace-build +1 -1
- package/.next-prod/types/app/api/bots/[id]/route.ts +353 -0
- package/.next-prod/types/app/api/bots/route.ts +353 -0
- package/.next-prod/types/routes.d.ts +3 -1
- package/.next-prod/types/validator.ts +18 -0
- package/README.md +13 -0
- package/README.zh.md +13 -0
- package/bots/README.md +86 -0
- package/bots/cockpit-helper/BOT.md +95 -0
- package/bots/cockpit-helper/commitments/active.md +3 -0
- package/bots/cockpit-helper/evidence/refs.md +3 -0
- package/bots/cockpit-helper/identity/persona.md +25 -0
- package/bots/cockpit-helper/identity/principles.md +49 -0
- package/bots/cockpit-helper/memory/facts.md +3 -0
- package/bots/cockpit-helper/relationships/user.md +3 -0
- package/dist/{chunk-JJWVBF6H.mjs → chunk-BCWVTDEZ.mjs} +648 -140
- package/dist/{chunk-6R4AHIIV.mjs → chunk-QY2K7YIF.mjs} +1 -1
- package/dist/httpApi.mjs +2 -2
- package/dist/scheduledTasks.mjs +80 -14
- package/dist/wsServer.mjs +2 -2
- package/package.json +2 -1
- package/skills/README.md +18 -2
- package/skills/bot/SKILL.md +155 -0
- package/skills/bot-run/SKILL.md +214 -0
- package/skills/bot-turn/SKILL.md +99 -0
- package/skills/bot-turn/attach.md +45 -0
- package/skills/bot-turn/export.md +113 -0
- package/skills/bot-turn/review.md +101 -0
- package/skills/bot-turn/writing.md +110 -0
- package/.next-prod/server/chunks/5750.js +0 -762
- package/.next-prod/static/chunks/72539-7e4ca2de5c9f3f90.js +0 -17
- package/.next-prod/static/chunks/89656-bc48af1f9ee9c312.js +0 -32
- package/.next-prod/static/chunks/99092-36ee2c49e4c4c059.js +0 -716
- package/.next-prod/static/chunks/app/api/chat/deepseek/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/glm/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/kimi/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/ollama/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/chat/stop/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/claude-stats/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/commands/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/comments/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/db/columns/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/db/connect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/db/disconnect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/db/export/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/db/query/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/db/schemas/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/deepseek/balance/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/deepseek/credentials/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/deepseek/models/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/dev/spans/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/extension/version/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/file/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/blame/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/clipboard/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/copy/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/delete/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/expanded/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/index/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/init/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/paste/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/read/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/readdir/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/recent/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/save/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/search/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/stat/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/files/text/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/blob/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/branch-diff/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/branches/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/commit-diff/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/commits/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/current-branch/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/diff/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/discard/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/stage/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/status/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/unstage/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/git/worktree/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/glm/credentials/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/glm/models/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/glm/usage/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/global-state/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/health/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/html-apps/[id]/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/html-apps/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/instructions/config/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/kimi/credentials/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/kimi/models/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/kimi/usage/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/definition/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/hover/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/references/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/status/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/lsp/warmup/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/columns/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/connect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/disconnect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/export/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/query/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/mysql/schemas/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/connect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/query/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/neo4j/schema/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/note/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/config/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/models/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/ollama/start/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/open-cursor/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/open-vscode/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/pick-folder/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/pinned-sessions/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/project-settings/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/project-state/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/affected/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/callees/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/callers/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/context/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/file/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/impact/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/related/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/risk/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projectGraph/search/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/projects/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/push/public-key/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/push/subscribe/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/push/unsubscribe/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/command/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/connect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/delete/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/disconnect/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/get/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/keys/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/redis/set/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/restart/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/comments/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/replies/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/[id]/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/identify/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/order/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/share-info/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/review/users/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/scheduled-tasks/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/services/config/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/services/scripts/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/session/[sessionId]/turn/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/session/user-messages/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/session-by-path/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/delegate/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/projects/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/search/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/sessions/status/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/settings/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/shutdown/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/[id]/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/content/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/skills/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/snapshots/blob/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/snapshots/diff/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/snapshots/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/aliases/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/env/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/terminal/history/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/update/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/update-state/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/api/version/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/apps/[...path]/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/layout-5e8ca15dabb4d8c2.js +0 -1
- package/.next-prod/static/chunks/app/manifest.webmanifest/route-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/app/page-eb7a11e6dd6a9e94.js +0 -1
- package/.next-prod/static/chunks/app/project/page-eb7a11e6dd6a9e94.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-b56c0b18a3b4d026.js +0 -1
- package/.next-prod/static/css/08c892de6d5e2335.css +0 -1
- package/.next-prod/static/mTTTlFslhC7zzHMDXGNOW/_buildManifest.js +0 -1
- /package/.next-prod/static/{mTTTlFslhC7zzHMDXGNOW → O8neHUIr3dQhe1jcOUsQ8}/_ssgManifest.js +0 -0
|
@@ -6912,67 +6912,67 @@ var Or = (self, that) => {
|
|
|
6912
6912
|
});
|
|
6913
6913
|
return error48;
|
|
6914
6914
|
};
|
|
6915
|
-
var InvalidData = (
|
|
6915
|
+
var InvalidData = (path5, message, options = {
|
|
6916
6916
|
pathDelim: "."
|
|
6917
6917
|
}) => {
|
|
6918
6918
|
const error48 = Object.create(proto2);
|
|
6919
6919
|
error48._op = OP_INVALID_DATA;
|
|
6920
|
-
error48.path =
|
|
6920
|
+
error48.path = path5;
|
|
6921
6921
|
error48.message = message;
|
|
6922
6922
|
Object.defineProperty(error48, "toString", {
|
|
6923
6923
|
enumerable: false,
|
|
6924
6924
|
value() {
|
|
6925
|
-
const
|
|
6926
|
-
return `(Invalid data at ${
|
|
6925
|
+
const path6 = pipe(this.path, join(options.pathDelim));
|
|
6926
|
+
return `(Invalid data at ${path6}: "${this.message}")`;
|
|
6927
6927
|
}
|
|
6928
6928
|
});
|
|
6929
6929
|
return error48;
|
|
6930
6930
|
};
|
|
6931
|
-
var MissingData = (
|
|
6931
|
+
var MissingData = (path5, message, options = {
|
|
6932
6932
|
pathDelim: "."
|
|
6933
6933
|
}) => {
|
|
6934
6934
|
const error48 = Object.create(proto2);
|
|
6935
6935
|
error48._op = OP_MISSING_DATA;
|
|
6936
|
-
error48.path =
|
|
6936
|
+
error48.path = path5;
|
|
6937
6937
|
error48.message = message;
|
|
6938
6938
|
Object.defineProperty(error48, "toString", {
|
|
6939
6939
|
enumerable: false,
|
|
6940
6940
|
value() {
|
|
6941
|
-
const
|
|
6942
|
-
return `(Missing data at ${
|
|
6941
|
+
const path6 = pipe(this.path, join(options.pathDelim));
|
|
6942
|
+
return `(Missing data at ${path6}: "${this.message}")`;
|
|
6943
6943
|
}
|
|
6944
6944
|
});
|
|
6945
6945
|
return error48;
|
|
6946
6946
|
};
|
|
6947
|
-
var SourceUnavailable = (
|
|
6947
|
+
var SourceUnavailable = (path5, message, cause3, options = {
|
|
6948
6948
|
pathDelim: "."
|
|
6949
6949
|
}) => {
|
|
6950
6950
|
const error48 = Object.create(proto2);
|
|
6951
6951
|
error48._op = OP_SOURCE_UNAVAILABLE;
|
|
6952
|
-
error48.path =
|
|
6952
|
+
error48.path = path5;
|
|
6953
6953
|
error48.message = message;
|
|
6954
6954
|
error48.cause = cause3;
|
|
6955
6955
|
Object.defineProperty(error48, "toString", {
|
|
6956
6956
|
enumerable: false,
|
|
6957
6957
|
value() {
|
|
6958
|
-
const
|
|
6959
|
-
return `(Source unavailable at ${
|
|
6958
|
+
const path6 = pipe(this.path, join(options.pathDelim));
|
|
6959
|
+
return `(Source unavailable at ${path6}: "${this.message}")`;
|
|
6960
6960
|
}
|
|
6961
6961
|
});
|
|
6962
6962
|
return error48;
|
|
6963
6963
|
};
|
|
6964
|
-
var Unsupported = (
|
|
6964
|
+
var Unsupported = (path5, message, options = {
|
|
6965
6965
|
pathDelim: "."
|
|
6966
6966
|
}) => {
|
|
6967
6967
|
const error48 = Object.create(proto2);
|
|
6968
6968
|
error48._op = OP_UNSUPPORTED;
|
|
6969
|
-
error48.path =
|
|
6969
|
+
error48.path = path5;
|
|
6970
6970
|
error48.message = message;
|
|
6971
6971
|
Object.defineProperty(error48, "toString", {
|
|
6972
6972
|
enumerable: false,
|
|
6973
6973
|
value() {
|
|
6974
|
-
const
|
|
6975
|
-
return `(Unsupported operation at ${
|
|
6974
|
+
const path6 = pipe(this.path, join(options.pathDelim));
|
|
6975
|
+
return `(Unsupported operation at ${path6}: "${this.message}")`;
|
|
6976
6976
|
}
|
|
6977
6977
|
});
|
|
6978
6978
|
return error48;
|
|
@@ -7087,9 +7087,9 @@ var isMissingDataOnly = (self) => reduceWithContext2(self, void 0, IsMissingData
|
|
|
7087
7087
|
var empty17 = {
|
|
7088
7088
|
_tag: "Empty"
|
|
7089
7089
|
};
|
|
7090
|
-
var patch5 = /* @__PURE__ */ dual(2, (
|
|
7090
|
+
var patch5 = /* @__PURE__ */ dual(2, (path5, patch9) => {
|
|
7091
7091
|
let input = of3(patch9);
|
|
7092
|
-
let output =
|
|
7092
|
+
let output = path5;
|
|
7093
7093
|
while (isCons(input)) {
|
|
7094
7094
|
const patch10 = input.head;
|
|
7095
7095
|
switch (patch10._tag) {
|
|
@@ -7156,7 +7156,7 @@ var make20 = (options) => ({
|
|
|
7156
7156
|
var makeFlat = (options) => ({
|
|
7157
7157
|
[FlatConfigProviderTypeId]: FlatConfigProviderTypeId,
|
|
7158
7158
|
patch: options.patch,
|
|
7159
|
-
load: (
|
|
7159
|
+
load: (path5, config3, split3 = true) => options.load(path5, config3, split3),
|
|
7160
7160
|
enumerateChildren: options.enumerateChildren
|
|
7161
7161
|
});
|
|
7162
7162
|
var fromFlat = (flat) => make20({
|
|
@@ -7174,29 +7174,29 @@ var fromEnv = (options) => {
|
|
|
7174
7174
|
pathDelim: "_",
|
|
7175
7175
|
seqDelim: ","
|
|
7176
7176
|
}, options);
|
|
7177
|
-
const makePathString = (
|
|
7177
|
+
const makePathString = (path5) => pipe(path5, join(pathDelim));
|
|
7178
7178
|
const unmakePathString = (pathString) => pathString.split(pathDelim);
|
|
7179
7179
|
const getEnv = () => typeof process !== "undefined" && "env" in process && typeof process.env === "object" ? process.env : {};
|
|
7180
|
-
const load = (
|
|
7181
|
-
const pathString = makePathString(
|
|
7180
|
+
const load = (path5, primitive3, split3 = true) => {
|
|
7181
|
+
const pathString = makePathString(path5);
|
|
7182
7182
|
const current2 = getEnv();
|
|
7183
7183
|
const valueOpt = pathString in current2 ? some2(current2[pathString]) : none2();
|
|
7184
|
-
return pipe(valueOpt, mapError(() => MissingData(
|
|
7184
|
+
return pipe(valueOpt, mapError(() => MissingData(path5, `Expected ${pathString} to exist in the process context`)), flatMap9((value) => parsePrimitive(value, path5, primitive3, seqDelim, split3)));
|
|
7185
7185
|
};
|
|
7186
|
-
const enumerateChildren = (
|
|
7186
|
+
const enumerateChildren = (path5) => sync(() => {
|
|
7187
7187
|
const current2 = getEnv();
|
|
7188
7188
|
const keys5 = Object.keys(current2);
|
|
7189
7189
|
const keyPaths = keys5.map((value) => unmakePathString(value.toUpperCase()));
|
|
7190
7190
|
const filteredKeyPaths = keyPaths.filter((keyPath) => {
|
|
7191
|
-
for (let i = 0; i <
|
|
7192
|
-
const pathComponent = pipe(
|
|
7191
|
+
for (let i = 0; i < path5.length; i++) {
|
|
7192
|
+
const pathComponent = pipe(path5, unsafeGet(i));
|
|
7193
7193
|
const currentElement = keyPath[i];
|
|
7194
7194
|
if (currentElement === void 0 || pathComponent !== currentElement) {
|
|
7195
7195
|
return false;
|
|
7196
7196
|
}
|
|
7197
7197
|
}
|
|
7198
7198
|
return true;
|
|
7199
|
-
}).flatMap((keyPath) => keyPath.slice(
|
|
7199
|
+
}).flatMap((keyPath) => keyPath.slice(path5.length, path5.length + 1));
|
|
7200
7200
|
return fromIterable6(filteredKeyPaths);
|
|
7201
7201
|
});
|
|
7202
7202
|
return fromFlat(makeFlat({
|
|
@@ -7212,17 +7212,17 @@ var extend = (leftDef, rightDef, left3, right3) => {
|
|
|
7212
7212
|
const rightExtension = concat(right3, rightPad);
|
|
7213
7213
|
return [leftExtension, rightExtension];
|
|
7214
7214
|
};
|
|
7215
|
-
var appendConfigPath = (
|
|
7215
|
+
var appendConfigPath = (path5, config3) => {
|
|
7216
7216
|
let op = config3;
|
|
7217
7217
|
if (op._tag === "Nested") {
|
|
7218
|
-
const out =
|
|
7218
|
+
const out = path5.slice();
|
|
7219
7219
|
while (op._tag === "Nested") {
|
|
7220
7220
|
out.push(op.name);
|
|
7221
7221
|
op = op.config;
|
|
7222
7222
|
}
|
|
7223
7223
|
return out;
|
|
7224
7224
|
}
|
|
7225
|
-
return
|
|
7225
|
+
return path5;
|
|
7226
7226
|
};
|
|
7227
7227
|
var fromFlatLoop = (flat, prefix, config3, split3) => {
|
|
7228
7228
|
const op = config3;
|
|
@@ -7298,8 +7298,8 @@ var fromFlatLoop = (flat, prefix, config3, split3) => {
|
|
|
7298
7298
|
return fail2(right3.left);
|
|
7299
7299
|
}
|
|
7300
7300
|
if (isRight2(left3) && isRight2(right3)) {
|
|
7301
|
-
const
|
|
7302
|
-
const fail20 = fromFlatLoopFail(prefix,
|
|
7301
|
+
const path5 = pipe(prefix, join("."));
|
|
7302
|
+
const fail20 = fromFlatLoopFail(prefix, path5);
|
|
7303
7303
|
const [lefts, rights] = extend(fail20, fail20, pipe(left3.right, map3(right2)), pipe(right3.right, map3(right2)));
|
|
7304
7304
|
return pipe(lefts, zip(rights), forEachSequential(([left4, right4]) => pipe(zip2(left4, right4), map10(([left5, right5]) => op.zip(left5, right5)))));
|
|
7305
7305
|
}
|
|
@@ -7308,19 +7308,19 @@ var fromFlatLoop = (flat, prefix, config3, split3) => {
|
|
|
7308
7308
|
}
|
|
7309
7309
|
}
|
|
7310
7310
|
};
|
|
7311
|
-
var fromFlatLoopFail = (prefix,
|
|
7311
|
+
var fromFlatLoopFail = (prefix, path5) => (index) => left2(MissingData(prefix, `The element at index ${index} in a sequence at path "${path5}" was missing`));
|
|
7312
7312
|
var splitPathString = (text, delim) => {
|
|
7313
7313
|
const split3 = text.split(new RegExp(`\\s*${escape(delim)}\\s*`));
|
|
7314
7314
|
return split3;
|
|
7315
7315
|
};
|
|
7316
|
-
var parsePrimitive = (text,
|
|
7316
|
+
var parsePrimitive = (text, path5, primitive3, delimiter2, split3) => {
|
|
7317
7317
|
if (!split3) {
|
|
7318
7318
|
return pipe(primitive3.parse(text), mapBoth2({
|
|
7319
|
-
onFailure: prefixed(
|
|
7319
|
+
onFailure: prefixed(path5),
|
|
7320
7320
|
onSuccess: of
|
|
7321
7321
|
}));
|
|
7322
7322
|
}
|
|
7323
|
-
return pipe(splitPathString(text, delimiter2), forEachSequential((char) => primitive3.parse(char.trim())), mapError(prefixed(
|
|
7323
|
+
return pipe(splitPathString(text, delimiter2), forEachSequential((char) => primitive3.parse(char.trim())), mapError(prefixed(path5)));
|
|
7324
7324
|
};
|
|
7325
7325
|
var transpose = (array7) => {
|
|
7326
7326
|
return Object.keys(array7[0]).map((column) => array7.map((row) => row[column]));
|
|
@@ -28645,14 +28645,14 @@ import { execSync } from "child_process";
|
|
|
28645
28645
|
|
|
28646
28646
|
// packages/shared/utils/src/encodePath.ts
|
|
28647
28647
|
var CLAUDE_ENCODED_MAX_LEN = 200;
|
|
28648
|
-
function claudePathHash(
|
|
28648
|
+
function claudePathHash(path5) {
|
|
28649
28649
|
let h = 0;
|
|
28650
|
-
for (let i = 0; i <
|
|
28650
|
+
for (let i = 0; i < path5.length; i++) h = (h << 5) - h + path5.charCodeAt(i) | 0;
|
|
28651
28651
|
return Math.abs(h).toString(36);
|
|
28652
28652
|
}
|
|
28653
|
-
function encodePath(
|
|
28654
|
-
const encoded =
|
|
28655
|
-
return encoded.length <= CLAUDE_ENCODED_MAX_LEN ? encoded : `${encoded.slice(0, CLAUDE_ENCODED_MAX_LEN)}-${claudePathHash(
|
|
28653
|
+
function encodePath(path5) {
|
|
28654
|
+
const encoded = path5.replace(/[^a-zA-Z0-9]/g, "-");
|
|
28655
|
+
return encoded.length <= CLAUDE_ENCODED_MAX_LEN ? encoded : `${encoded.slice(0, CLAUDE_ENCODED_MAX_LEN)}-${claudePathHash(path5)}`;
|
|
28656
28656
|
}
|
|
28657
28657
|
|
|
28658
28658
|
// packages/shared/utils/src/homePath.ts
|
|
@@ -28675,12 +28675,15 @@ var NOTE_FILE = join4(COCKPIT_DIR, "note.md");
|
|
|
28675
28675
|
var SCHEDULED_TASKS_FILE = join4(COCKPIT_DIR, "scheduled-tasks.json");
|
|
28676
28676
|
var SETTINGS_FILE = join4(COCKPIT_DIR, "settings.json");
|
|
28677
28677
|
var SKILLS_FILE = join4(COCKPIT_DIR, "skills.json");
|
|
28678
|
+
var BOTS_FILE = join4(COCKPIT_DIR, "bot.json");
|
|
28679
|
+
var BOTS_DIR = join4(COCKPIT_DIR, "bots");
|
|
28678
28680
|
var CODEX_SESSION_INDEX_FILE = join4(COCKPIT_DIR, "codex-session-index.json");
|
|
28679
28681
|
var HTML_APPS_FILE = join4(COCKPIT_DIR, "html.json");
|
|
28680
28682
|
var REVIEW_DIR = join4(COCKPIT_DIR, "review");
|
|
28681
28683
|
var REVIEW_SIGNAL_FILE = join4(REVIEW_DIR, "_signal");
|
|
28682
28684
|
var APPS_DIR = join4(process.env.COCKPIT_ROOT || process.cwd(), "apps");
|
|
28683
28685
|
var BUILTIN_SKILLS_SRC_DIR = join4(process.env.COCKPIT_ROOT || process.cwd(), "skills");
|
|
28686
|
+
var BUILTIN_BOTS_SRC_DIR = join4(process.env.COCKPIT_ROOT || process.cwd(), "bots");
|
|
28684
28687
|
var CLAUDE_DIR = join4(HOME_DIR, ".claude");
|
|
28685
28688
|
var CLAUDE_PROJECTS_DIR = join4(CLAUDE_DIR, "projects");
|
|
28686
28689
|
var DEEPSEEK_DIR = join4(COCKPIT_DIR, "deepseek");
|
|
@@ -28938,6 +28941,22 @@ async function readJsonFile(filePath, defaultValue) {
|
|
|
28938
28941
|
return defaultValue;
|
|
28939
28942
|
}
|
|
28940
28943
|
}
|
|
28944
|
+
async function readJsonFileForUpdate(filePath, defaultValue) {
|
|
28945
|
+
let content;
|
|
28946
|
+
try {
|
|
28947
|
+
content = await readFile(filePath, "utf-8");
|
|
28948
|
+
} catch (err) {
|
|
28949
|
+
if (err?.code === "ENOENT") return defaultValue;
|
|
28950
|
+
throw err;
|
|
28951
|
+
}
|
|
28952
|
+
try {
|
|
28953
|
+
return JSON.parse(content);
|
|
28954
|
+
} catch (err) {
|
|
28955
|
+
throw new Error(
|
|
28956
|
+
`${filePath} is not valid JSON, refusing to overwrite it: ${err instanceof Error ? err.message : String(err)}`
|
|
28957
|
+
);
|
|
28958
|
+
}
|
|
28959
|
+
}
|
|
28941
28960
|
async function writeJsonFile(filePath, data) {
|
|
28942
28961
|
await ensureParentDir(filePath);
|
|
28943
28962
|
await writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
@@ -28960,7 +28979,7 @@ function withFileLock(filePath, fn2) {
|
|
|
28960
28979
|
}
|
|
28961
28980
|
function mutateJsonFile(filePath, defaultValue, mutate5) {
|
|
28962
28981
|
return withFileLock(filePath, async () => {
|
|
28963
|
-
const current2 = await
|
|
28982
|
+
const current2 = await readJsonFileForUpdate(filePath, defaultValue);
|
|
28964
28983
|
const next4 = await mutate5(current2);
|
|
28965
28984
|
await writeJsonFile(filePath, next4);
|
|
28966
28985
|
return next4;
|
|
@@ -29145,12 +29164,16 @@ var NEXT_INJECTED_ENV_KEYS = [
|
|
|
29145
29164
|
"NEXT_DEPLOYMENT_ID",
|
|
29146
29165
|
"TURBOPACK"
|
|
29147
29166
|
];
|
|
29167
|
+
var HOST_ONLY_ENV_KEYS = [
|
|
29168
|
+
...NEXT_INJECTED_ENV_KEYS,
|
|
29169
|
+
"PORT"
|
|
29170
|
+
];
|
|
29148
29171
|
function sanitizedSpawnEnv(overrides = {}, base = process.env) {
|
|
29149
29172
|
const out = {};
|
|
29150
29173
|
for (const [key, value] of Object.entries(base)) {
|
|
29151
29174
|
if (value !== void 0) out[key] = value;
|
|
29152
29175
|
}
|
|
29153
|
-
for (const key of
|
|
29176
|
+
for (const key of HOST_ONLY_ENV_KEYS) delete out[key];
|
|
29154
29177
|
for (const [key, value] of Object.entries(overrides)) {
|
|
29155
29178
|
if (value === void 0) delete out[key];
|
|
29156
29179
|
else out[key] = value;
|
|
@@ -29305,8 +29328,8 @@ var CLAUDE_STYLE_PATHS = [
|
|
|
29305
29328
|
];
|
|
29306
29329
|
function findClaudeStylePath(cwd, sessionId) {
|
|
29307
29330
|
for (const resolve3 of CLAUDE_STYLE_PATHS) {
|
|
29308
|
-
const
|
|
29309
|
-
if (existsSync2(
|
|
29331
|
+
const path5 = resolve3(cwd, sessionId);
|
|
29332
|
+
if (existsSync2(path5)) return path5;
|
|
29310
29333
|
}
|
|
29311
29334
|
return null;
|
|
29312
29335
|
}
|
|
@@ -30084,6 +30107,11 @@ var DelegationService = Context_exports.GenericTag(
|
|
|
30084
30107
|
"@cockpit/DelegationService"
|
|
30085
30108
|
);
|
|
30086
30109
|
|
|
30110
|
+
// packages/shared/effect-services/src/botRegistry.ts
|
|
30111
|
+
var BotRegistryService = Context_exports.GenericTag(
|
|
30112
|
+
"@cockpit/BotRegistryService"
|
|
30113
|
+
);
|
|
30114
|
+
|
|
30087
30115
|
// packages/feature/console/src/effect/pgLive.ts
|
|
30088
30116
|
var { Pool } = pg;
|
|
30089
30117
|
var handleAsync = (op, f) => Effect_exports.tryPromise({
|
|
@@ -30526,10 +30554,10 @@ function serializeValue(val) {
|
|
|
30526
30554
|
};
|
|
30527
30555
|
}
|
|
30528
30556
|
if (val && typeof val === "object" && "segments" in val) {
|
|
30529
|
-
const
|
|
30557
|
+
const path5 = val;
|
|
30530
30558
|
return {
|
|
30531
30559
|
_type: "path",
|
|
30532
|
-
segments:
|
|
30560
|
+
segments: path5.segments.map((s) => ({
|
|
30533
30561
|
start: serializeValue(s.start),
|
|
30534
30562
|
relationship: serializeValue(s.relationship),
|
|
30535
30563
|
end: serializeValue(s.end)
|
|
@@ -31281,10 +31309,10 @@ var snapshotOnce = (snapshotsRoot, maxFileBytes, trigger, kind) => Effect_export
|
|
|
31281
31309
|
const addPaths = [];
|
|
31282
31310
|
const rmPaths = [];
|
|
31283
31311
|
for (const e of entries2) {
|
|
31284
|
-
const
|
|
31285
|
-
if (!
|
|
31286
|
-
if (e[0] === "D" || e[1] === "D") rmPaths.push(
|
|
31287
|
-
else addPaths.push(
|
|
31312
|
+
const path5 = e.slice(3);
|
|
31313
|
+
if (!path5) continue;
|
|
31314
|
+
if (e[0] === "D" || e[1] === "D") rmPaths.push(path5);
|
|
31315
|
+
else addPaths.push(path5);
|
|
31288
31316
|
}
|
|
31289
31317
|
const sizes = yield* Effect_exports.all(
|
|
31290
31318
|
addPaths.map(
|
|
@@ -31386,15 +31414,15 @@ var listByToolIdsImpl = (snapshotsRoot, cwd, toolIds, sessionKey) => Effect_expo
|
|
|
31386
31414
|
(c) => !!c && !!c.toolId && wanted.has(c.toolId) && (!sessionKey || c.sessionKey === sessionKey)
|
|
31387
31415
|
);
|
|
31388
31416
|
}).pipe(Effect_exports.withSpan("snapshot.listByToolIds", { attributes: { cwd } }));
|
|
31389
|
-
var showFile = (repoDir, cwd, rev,
|
|
31417
|
+
var showFile = (repoDir, cwd, rev, path5) => runGit(repoDir, cwd, ["show", `${rev}:${path5}`]).pipe(
|
|
31390
31418
|
Effect_exports.map((r) => r.code === 0 ? r.stdout : null),
|
|
31391
31419
|
Effect_exports.orElseSucceed(() => null)
|
|
31392
31420
|
);
|
|
31393
|
-
var gitShowBytes = (repoDir, cwd, rev,
|
|
31421
|
+
var gitShowBytes = (repoDir, cwd, rev, path5) => Effect_exports.tryPromise({
|
|
31394
31422
|
try: () => new Promise((resolve3, reject) => {
|
|
31395
31423
|
execFile(
|
|
31396
31424
|
"git",
|
|
31397
|
-
["show", `${rev}:${
|
|
31425
|
+
["show", `${rev}:${path5}`],
|
|
31398
31426
|
{
|
|
31399
31427
|
env: {
|
|
31400
31428
|
...process.env,
|
|
@@ -31414,7 +31442,7 @@ var gitShowBytes = (repoDir, cwd, rev, path2) => Effect_exports.tryPromise({
|
|
|
31414
31442
|
);
|
|
31415
31443
|
}),
|
|
31416
31444
|
// A miss is ordinary: the path simply doesn't exist at that revision.
|
|
31417
|
-
catch: () => new NotFoundError({ resource: "snapshot-blob", id: `${rev}:${
|
|
31445
|
+
catch: () => new NotFoundError({ resource: "snapshot-blob", id: `${rev}:${path5}` })
|
|
31418
31446
|
});
|
|
31419
31447
|
var blobImpl = (snapshotsRoot, cwd, rev, file2) => Effect_exports.gen(function* () {
|
|
31420
31448
|
if (!/^[0-9a-f]{6,40}$/i.test(rev)) {
|
|
@@ -31486,23 +31514,23 @@ var diffImpl = (snapshotsRoot, cwd, commitHash) => Effect_exports.gen(function*
|
|
|
31486
31514
|
const files = [];
|
|
31487
31515
|
for (let i = 0; i + 1 < tokens.length && files.length < MAX_DIFF_FILES; i += 2) {
|
|
31488
31516
|
const st = tokens[i];
|
|
31489
|
-
const
|
|
31517
|
+
const path5 = tokens[i + 1];
|
|
31490
31518
|
const status3 = st === "A" ? "added" : st === "D" ? "deleted" : "modified";
|
|
31491
|
-
const binary = binarySet.has(
|
|
31519
|
+
const binary = binarySet.has(path5);
|
|
31492
31520
|
let oldContent = null;
|
|
31493
31521
|
let newContent = null;
|
|
31494
31522
|
if (!binary) {
|
|
31495
|
-
if (status3 !== "added") oldContent = yield* showFile(repoDir, cwd, base,
|
|
31496
|
-
if (status3 !== "deleted") newContent = yield* showFile(repoDir, cwd, commit3.hash,
|
|
31523
|
+
if (status3 !== "added") oldContent = yield* showFile(repoDir, cwd, base, path5);
|
|
31524
|
+
if (status3 !== "deleted") newContent = yield* showFile(repoDir, cwd, commit3.hash, path5);
|
|
31497
31525
|
if ((oldContent?.length ?? 0) > MAX_DIFF_CONTENT_BYTES || (newContent?.length ?? 0) > MAX_DIFF_CONTENT_BYTES) {
|
|
31498
31526
|
oldContent = null;
|
|
31499
31527
|
newContent = null;
|
|
31500
31528
|
}
|
|
31501
31529
|
}
|
|
31502
|
-
const stats = lineStats.get(
|
|
31503
|
-
const isImage = binary && isImagePath(
|
|
31530
|
+
const stats = lineStats.get(path5);
|
|
31531
|
+
const isImage = binary && isImagePath(path5);
|
|
31504
31532
|
files.push({
|
|
31505
|
-
path:
|
|
31533
|
+
path: path5,
|
|
31506
31534
|
status: status3,
|
|
31507
31535
|
binary,
|
|
31508
31536
|
additions: stats?.additions ?? 0,
|
|
@@ -32410,7 +32438,7 @@ var patchChanges = (item) => {
|
|
|
32410
32438
|
if (Array.isArray(raw)) {
|
|
32411
32439
|
return raw.map((c) => ({ path: c?.path || "", kind: kindOf(c) }));
|
|
32412
32440
|
}
|
|
32413
|
-
return Object.entries(raw).map(([
|
|
32441
|
+
return Object.entries(raw).map(([path5, v]) => ({ path: path5, kind: kindOf(v) }));
|
|
32414
32442
|
};
|
|
32415
32443
|
var patchResultText = (item) => {
|
|
32416
32444
|
const cs = patchChanges(item);
|
|
@@ -33064,7 +33092,7 @@ var groupMatches = (matches, terms) => {
|
|
|
33064
33092
|
}
|
|
33065
33093
|
return byFile;
|
|
33066
33094
|
};
|
|
33067
|
-
var fsTry3 = (
|
|
33095
|
+
var fsTry3 = (path5, op, fn2) => Effect_exports.tryPromise({ try: fn2, catch: (cause3) => new FSError({ path: path5, op, cause: cause3 }) });
|
|
33068
33096
|
var readJsonOr = (file2, fallback) => fsTry3(file2, "read", () => readFile4(file2, "utf8")).pipe(
|
|
33069
33097
|
Effect_exports.flatMap((raw) => Effect_exports.try(() => JSON.parse(raw))),
|
|
33070
33098
|
Effect_exports.orElseSucceed(() => fallback)
|
|
@@ -33568,16 +33596,16 @@ function planPermission(toolName, input, opts) {
|
|
|
33568
33596
|
};
|
|
33569
33597
|
}
|
|
33570
33598
|
if (PLAN_EDIT_TOOLS.has(toolName)) {
|
|
33571
|
-
const
|
|
33599
|
+
const path5 = [input.file_path, input.notebook_path, input.path, opts?.blockedPath].find(
|
|
33572
33600
|
(v) => typeof v === "string"
|
|
33573
33601
|
);
|
|
33574
|
-
if (
|
|
33602
|
+
if (path5 && isPlanFilePath(path5)) {
|
|
33575
33603
|
return { behavior: "allow", updatedInput: input };
|
|
33576
33604
|
}
|
|
33577
33605
|
return {
|
|
33578
33606
|
behavior: "deny",
|
|
33579
33607
|
// (C) read-only plan mode, no dialog → feedback instead of silent drop
|
|
33580
|
-
message: `Plan mode is read-only and this environment has no approval dialog, so "${toolName}"${
|
|
33608
|
+
message: `Plan mode is read-only and this environment has no approval dialog, so "${toolName}"${path5 ? ` on ${path5}` : ""} can't run. Only writes under .claude/plans/ are allowed. Capture the intended changes in your plan instead of editing files now.`
|
|
33581
33609
|
};
|
|
33582
33610
|
}
|
|
33583
33611
|
return { behavior: "allow", updatedInput: input };
|
|
@@ -33614,8 +33642,10 @@ function buildClaudeOptions(ctx, independent) {
|
|
|
33614
33642
|
abortController: abort,
|
|
33615
33643
|
// env is ALWAYS passed: without it the SDK inherits process.env verbatim,
|
|
33616
33644
|
// handing the agent this server's NODE_ENV=production. See sanitizedSpawnEnv.
|
|
33617
|
-
// COCKPIT_RUN_ID lets a skill's curl identify the session it runs in (delegation parent)
|
|
33618
|
-
|
|
33645
|
+
// COCKPIT_RUN_ID lets a skill's curl identify the session it runs in (delegation parent);
|
|
33646
|
+
// COCKPIT_CWD is the session's own working directory, which `pwd` stops being the moment
|
|
33647
|
+
// the agent cd's somewhere (see spawnEnv.ts).
|
|
33648
|
+
env: sanitizedSpawnEnv({ COCKPIT_RUN_ID: ctx.currentKey(), COCKPIT_CWD: ctx.cwd || void 0 })
|
|
33619
33649
|
});
|
|
33620
33650
|
}
|
|
33621
33651
|
var claudeSpec = {
|
|
@@ -33732,9 +33762,9 @@ function getSessionPath(root, cwd, sessionId) {
|
|
|
33732
33762
|
return join9(getSessionDir(root, cwd), `${sessionId}.jsonl`);
|
|
33733
33763
|
}
|
|
33734
33764
|
function readSessionMessages(root, cwd, sessionId) {
|
|
33735
|
-
const
|
|
33736
|
-
if (!existsSync4(
|
|
33737
|
-
const lines = readFileSync3(
|
|
33765
|
+
const path5 = getSessionPath(root, cwd, sessionId);
|
|
33766
|
+
if (!existsSync4(path5)) return [];
|
|
33767
|
+
const lines = readFileSync3(path5, "utf-8").split("\n").filter(Boolean);
|
|
33738
33768
|
const transcriptEntries = [];
|
|
33739
33769
|
for (const line of lines) {
|
|
33740
33770
|
try {
|
|
@@ -33834,8 +33864,8 @@ function readSessionMessages(root, cwd, sessionId) {
|
|
|
33834
33864
|
function appendSessionLine(root, cwd, sessionId, line) {
|
|
33835
33865
|
const dir = getSessionDir(root, cwd);
|
|
33836
33866
|
mkdirSync3(dir, { recursive: true });
|
|
33837
|
-
const
|
|
33838
|
-
appendFileSync(
|
|
33867
|
+
const path5 = getSessionPath(root, cwd, sessionId);
|
|
33868
|
+
appendFileSync(path5, JSON.stringify(line) + "\n", "utf-8");
|
|
33839
33869
|
}
|
|
33840
33870
|
function appendUserText(root, cwd, sessionId, text, opts) {
|
|
33841
33871
|
appendSessionLine(root, cwd, sessionId, {
|
|
@@ -34644,10 +34674,10 @@ function mergeDefs(...defs) {
|
|
|
34644
34674
|
function cloneDef(schema) {
|
|
34645
34675
|
return mergeDefs(schema._zod.def);
|
|
34646
34676
|
}
|
|
34647
|
-
function getElementAtPath(obj,
|
|
34648
|
-
if (!
|
|
34677
|
+
function getElementAtPath(obj, path5) {
|
|
34678
|
+
if (!path5)
|
|
34649
34679
|
return obj;
|
|
34650
|
-
return
|
|
34680
|
+
return path5.reduce((acc, key) => acc?.[key], obj);
|
|
34651
34681
|
}
|
|
34652
34682
|
function promiseAllObject(promisesObj) {
|
|
34653
34683
|
const keys5 = Object.keys(promisesObj);
|
|
@@ -35030,11 +35060,11 @@ function aborted(x, startIndex = 0) {
|
|
|
35030
35060
|
}
|
|
35031
35061
|
return false;
|
|
35032
35062
|
}
|
|
35033
|
-
function prefixIssues(
|
|
35063
|
+
function prefixIssues(path5, issues) {
|
|
35034
35064
|
return issues.map((iss) => {
|
|
35035
35065
|
var _a2;
|
|
35036
35066
|
(_a2 = iss).path ?? (_a2.path = []);
|
|
35037
|
-
iss.path.unshift(
|
|
35067
|
+
iss.path.unshift(path5);
|
|
35038
35068
|
return iss;
|
|
35039
35069
|
});
|
|
35040
35070
|
}
|
|
@@ -35217,7 +35247,7 @@ function formatError(error48, mapper = (issue2) => issue2.message) {
|
|
|
35217
35247
|
}
|
|
35218
35248
|
function treeifyError(error48, mapper = (issue2) => issue2.message) {
|
|
35219
35249
|
const result = { errors: [] };
|
|
35220
|
-
const processError = (error49,
|
|
35250
|
+
const processError = (error49, path5 = []) => {
|
|
35221
35251
|
var _a2, _b;
|
|
35222
35252
|
for (const issue2 of error49.issues) {
|
|
35223
35253
|
if (issue2.code === "invalid_union" && issue2.errors.length) {
|
|
@@ -35227,7 +35257,7 @@ function treeifyError(error48, mapper = (issue2) => issue2.message) {
|
|
|
35227
35257
|
} else if (issue2.code === "invalid_element") {
|
|
35228
35258
|
processError({ issues: issue2.issues }, issue2.path);
|
|
35229
35259
|
} else {
|
|
35230
|
-
const fullpath = [...
|
|
35260
|
+
const fullpath = [...path5, ...issue2.path];
|
|
35231
35261
|
if (fullpath.length === 0) {
|
|
35232
35262
|
result.errors.push(mapper(issue2));
|
|
35233
35263
|
continue;
|
|
@@ -35259,8 +35289,8 @@ function treeifyError(error48, mapper = (issue2) => issue2.message) {
|
|
|
35259
35289
|
}
|
|
35260
35290
|
function toDotPath(_path) {
|
|
35261
35291
|
const segs = [];
|
|
35262
|
-
const
|
|
35263
|
-
for (const seg of
|
|
35292
|
+
const path5 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
|
|
35293
|
+
for (const seg of path5) {
|
|
35264
35294
|
if (typeof seg === "number")
|
|
35265
35295
|
segs.push(`[${seg}]`);
|
|
35266
35296
|
else if (typeof seg === "symbol")
|
|
@@ -47237,13 +47267,13 @@ function resolveRef(ref, ctx) {
|
|
|
47237
47267
|
if (!ref.startsWith("#")) {
|
|
47238
47268
|
throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
|
|
47239
47269
|
}
|
|
47240
|
-
const
|
|
47241
|
-
if (
|
|
47270
|
+
const path5 = ref.slice(1).split("/").filter(Boolean);
|
|
47271
|
+
if (path5.length === 0) {
|
|
47242
47272
|
return ctx.rootSchema;
|
|
47243
47273
|
}
|
|
47244
47274
|
const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
|
|
47245
|
-
if (
|
|
47246
|
-
const key =
|
|
47275
|
+
if (path5[0] === defsKey) {
|
|
47276
|
+
const key = path5[1];
|
|
47247
47277
|
if (!key || !ctx.defs[key]) {
|
|
47248
47278
|
throw new Error(`Reference not found: ${ref}`);
|
|
47249
47279
|
}
|
|
@@ -47824,7 +47854,14 @@ function createTools(context7) {
|
|
|
47824
47854
|
encoding: "utf-8",
|
|
47825
47855
|
timeout: timeout5 ?? 6e4,
|
|
47826
47856
|
maxBuffer: 10 * 1024 * 1024,
|
|
47827
|
-
env: sanitizedSpawnEnv({
|
|
47857
|
+
env: sanitizedSpawnEnv({
|
|
47858
|
+
FORCE_COLOR: "0",
|
|
47859
|
+
CI: "1",
|
|
47860
|
+
COCKPIT_RUN_ID: context7.runId,
|
|
47861
|
+
// The session's own cwd, which survives a `cd` in an earlier command
|
|
47862
|
+
// the way `pwd` does not (see spawnEnv.ts).
|
|
47863
|
+
COCKPIT_CWD: context7.cwd || void 0
|
|
47864
|
+
})
|
|
47828
47865
|
});
|
|
47829
47866
|
if (stdout.length === 0) {
|
|
47830
47867
|
if (stderr.length === 0) {
|
|
@@ -47890,14 +47927,14 @@ ${stderrCapped}`;
|
|
|
47890
47927
|
),
|
|
47891
47928
|
execute: async ({
|
|
47892
47929
|
pattern,
|
|
47893
|
-
path:
|
|
47930
|
+
path: path5,
|
|
47894
47931
|
ignore_case,
|
|
47895
47932
|
output_mode,
|
|
47896
47933
|
"-n": showLineNumbers
|
|
47897
47934
|
}) => {
|
|
47898
47935
|
try {
|
|
47899
|
-
if (
|
|
47900
|
-
const target =
|
|
47936
|
+
if (path5 && !isAbsolute2(path5)) return "Error: path must be an absolute path.";
|
|
47937
|
+
const target = path5 || context7.cwd;
|
|
47901
47938
|
const args2 = [
|
|
47902
47939
|
"--no-heading",
|
|
47903
47940
|
"--color",
|
|
@@ -49133,9 +49170,9 @@ function createCodexEventAdapter(ctx) {
|
|
|
49133
49170
|
rolloutPath = null;
|
|
49134
49171
|
}
|
|
49135
49172
|
}
|
|
49136
|
-
const bindRollout = (
|
|
49137
|
-
if (!
|
|
49138
|
-
rolloutPath =
|
|
49173
|
+
const bindRollout = (path5) => {
|
|
49174
|
+
if (!path5 || path5 === rolloutPath) return;
|
|
49175
|
+
rolloutPath = path5;
|
|
49139
49176
|
basesReady = false;
|
|
49140
49177
|
initBases();
|
|
49141
49178
|
};
|
|
@@ -49153,8 +49190,8 @@ function createCodexEventAdapter(ctx) {
|
|
|
49153
49190
|
};
|
|
49154
49191
|
const emitSpawn = (item) => {
|
|
49155
49192
|
const agentIds = item.receiver_thread_ids ?? [];
|
|
49156
|
-
const
|
|
49157
|
-
const entry =
|
|
49193
|
+
const path5 = rolloutPath;
|
|
49194
|
+
const entry = path5 ? resolveCodexSpawnCall(readRollout(path5).spawn, spawnBase + spawnSeen, agentIds[0]) : null;
|
|
49158
49195
|
spawnSeen += 1;
|
|
49159
49196
|
const toolUseId = toolUseIdFor(item);
|
|
49160
49197
|
if (spawnEmitted.has(toolUseId)) return;
|
|
@@ -49167,9 +49204,9 @@ function createCodexEventAdapter(ctx) {
|
|
|
49167
49204
|
emitSpawnBubble(toolUseId, input, entry?.agentPath);
|
|
49168
49205
|
};
|
|
49169
49206
|
const syncSubAgents = (flushPending = false) => {
|
|
49170
|
-
const
|
|
49171
|
-
if (!
|
|
49172
|
-
const { spawn: spawn2, reports } = readRollout(
|
|
49207
|
+
const path5 = rolloutPath;
|
|
49208
|
+
if (!path5) return;
|
|
49209
|
+
const { spawn: spawn2, reports } = readRollout(path5);
|
|
49173
49210
|
for (let i = spawnBase; i < spawn2.length; i += 1) {
|
|
49174
49211
|
const s = spawn2[i];
|
|
49175
49212
|
if (!s.callId || spawnEmitted.has(s.callId)) continue;
|
|
@@ -49326,7 +49363,7 @@ function cleanupImageFiles(imageFiles) {
|
|
|
49326
49363
|
function codexTurnInput(prompt, imageFiles) {
|
|
49327
49364
|
return [
|
|
49328
49365
|
{ type: "text", text: imageFiles.length > 0 ? prompt || CODEX_IMAGE_ONLY_TEXT : prompt },
|
|
49329
|
-
...imageFiles.map((
|
|
49366
|
+
...imageFiles.map((path5) => ({ type: "localImage", path: path5 }))
|
|
49330
49367
|
];
|
|
49331
49368
|
}
|
|
49332
49369
|
function codexThreadParams(ctx) {
|
|
@@ -49393,8 +49430,9 @@ async function runCodexAppServer(ctx) {
|
|
|
49393
49430
|
let client;
|
|
49394
49431
|
try {
|
|
49395
49432
|
client = CodexAppServerClient.start({
|
|
49396
|
-
// COCKPIT_RUN_ID lets a skill's curl identify the session it runs in (delegation parent)
|
|
49397
|
-
|
|
49433
|
+
// COCKPIT_RUN_ID lets a skill's curl identify the session it runs in (delegation parent);
|
|
49434
|
+
// COCKPIT_CWD is the session's own working directory (see spawnEnv.ts).
|
|
49435
|
+
env: sanitizedSpawnEnv({ COCKPIT_RUN_ID: ctx.currentKey(), COCKPIT_CWD: ctx.cwd || void 0 }),
|
|
49398
49436
|
...ctx.cwd ? { cwd: ctx.cwd } : {},
|
|
49399
49437
|
onNotification,
|
|
49400
49438
|
// Permitted `console.error` under EFFECT.md §0 (subprocess IPC adapter gateway).
|
|
@@ -49811,6 +49849,388 @@ var DelegationServiceLive = Layer_exports.effect(
|
|
|
49811
49849
|
})
|
|
49812
49850
|
);
|
|
49813
49851
|
|
|
49852
|
+
// packages/feature/agent/src/effect/botRegistryLive.ts
|
|
49853
|
+
import { randomUUID as randomUUID5 } from "crypto";
|
|
49854
|
+
import { readFileSync as readFileSync7, realpathSync as realpathSync3 } from "fs";
|
|
49855
|
+
import path3 from "path";
|
|
49856
|
+
|
|
49857
|
+
// packages/feature/agent/src/shared/bots.ts
|
|
49858
|
+
import yaml from "js-yaml";
|
|
49859
|
+
var BOT_MANIFEST_FILE = "BOT.md";
|
|
49860
|
+
var BOT_NAME = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
49861
|
+
var isBotName = (name) => BOT_NAME.test(name);
|
|
49862
|
+
var isManifestPath = (path5, target) => path5.basename(target).toLowerCase() === BOT_MANIFEST_FILE.toLowerCase();
|
|
49863
|
+
var botPaths = (path5, target) => {
|
|
49864
|
+
const dir = isManifestPath(path5, target) ? path5.dirname(target) : path5.join(target);
|
|
49865
|
+
return { dir, manifest: path5.join(dir, BOT_MANIFEST_FILE) };
|
|
49866
|
+
};
|
|
49867
|
+
var parseBotDocument = (path5, content, dir) => {
|
|
49868
|
+
const match21 = content.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
|
|
49869
|
+
let fields = {};
|
|
49870
|
+
if (match21) {
|
|
49871
|
+
const raw = yaml.load(match21[1]);
|
|
49872
|
+
if (raw !== void 0 && raw !== null) {
|
|
49873
|
+
if (typeof raw !== "object" || Array.isArray(raw)) throw new Error("BOT.md frontmatter must be a mapping");
|
|
49874
|
+
fields = raw;
|
|
49875
|
+
}
|
|
49876
|
+
}
|
|
49877
|
+
const fallback = path5.basename(dir).toLowerCase();
|
|
49878
|
+
const name = typeof fields.name === "string" && fields.name.trim() ? fields.name.trim() : fallback;
|
|
49879
|
+
if (!isBotName(name)) throw new Error(`Bot name "${name}" must match [a-z0-9][a-z0-9-]*`);
|
|
49880
|
+
const description = typeof fields.description === "string" ? fields.description.trim() : "";
|
|
49881
|
+
return { name, description };
|
|
49882
|
+
};
|
|
49883
|
+
var messageOf = (cause3) => cause3 instanceof Error ? cause3.message : String(cause3);
|
|
49884
|
+
var resolveBot = (path5, record2, read) => {
|
|
49885
|
+
const { dir, manifest } = botPaths(path5, record2.path);
|
|
49886
|
+
try {
|
|
49887
|
+
return { ...record2, valid: true, ...parseBotDocument(path5, read(manifest), dir) };
|
|
49888
|
+
} catch (cause3) {
|
|
49889
|
+
return { ...record2, valid: false, name: path5.basename(dir), error: messageOf(cause3) };
|
|
49890
|
+
}
|
|
49891
|
+
};
|
|
49892
|
+
var mentionableBots = (path5, bots) => {
|
|
49893
|
+
const out = /* @__PURE__ */ new Map();
|
|
49894
|
+
for (const bot of bots) {
|
|
49895
|
+
if (bot.valid && !out.has(bot.name)) out.set(bot.name, botPaths(path5, bot.path).manifest);
|
|
49896
|
+
}
|
|
49897
|
+
return out;
|
|
49898
|
+
};
|
|
49899
|
+
var findNameClash = (bots, name, dir) => bots.find((bot) => bot.valid && bot.name === name && bot.path !== dir);
|
|
49900
|
+
|
|
49901
|
+
// packages/feature/agent/src/server/lib/builtinBots.ts
|
|
49902
|
+
import { createHash as createHash2 } from "crypto";
|
|
49903
|
+
import {
|
|
49904
|
+
cpSync,
|
|
49905
|
+
existsSync as existsSync8,
|
|
49906
|
+
mkdirSync as mkdirSync6,
|
|
49907
|
+
readFileSync as readFileSync6,
|
|
49908
|
+
readdirSync as readdirSync4,
|
|
49909
|
+
realpathSync as realpathSync2,
|
|
49910
|
+
renameSync as renameSync4,
|
|
49911
|
+
rmdirSync,
|
|
49912
|
+
rmSync,
|
|
49913
|
+
statSync as statSync5,
|
|
49914
|
+
writeFileSync as writeFileSync6
|
|
49915
|
+
} from "fs";
|
|
49916
|
+
import path2, { join as join14 } from "path";
|
|
49917
|
+
var BUILTIN_BOT_ID_PREFIX = "builtin:";
|
|
49918
|
+
var isBuiltinBotId = (id3) => id3.startsWith(BUILTIN_BOT_ID_PREFIX);
|
|
49919
|
+
var builtinBotNameFromId = (id3) => isBuiltinBotId(id3) ? id3.slice(BUILTIN_BOT_ID_PREFIX.length) : "";
|
|
49920
|
+
var builtinBotSeedDir = (name) => join14(BUILTIN_BOTS_SRC_DIR, name);
|
|
49921
|
+
var builtinBotUserDir = (name) => join14(BOTS_DIR, name);
|
|
49922
|
+
var hasManifest = (dir) => {
|
|
49923
|
+
try {
|
|
49924
|
+
return statSync5(join14(dir, BOT_MANIFEST_FILE)).isFile();
|
|
49925
|
+
} catch {
|
|
49926
|
+
return false;
|
|
49927
|
+
}
|
|
49928
|
+
};
|
|
49929
|
+
var INSTALL_STATE_FILE = join14(BOTS_DIR, ".builtin-installs.json");
|
|
49930
|
+
var readInstallState = () => {
|
|
49931
|
+
try {
|
|
49932
|
+
const raw = JSON.parse(readFileSync6(INSTALL_STATE_FILE, "utf-8"));
|
|
49933
|
+
return raw && typeof raw === "object" && !Array.isArray(raw) ? raw : {};
|
|
49934
|
+
} catch {
|
|
49935
|
+
return {};
|
|
49936
|
+
}
|
|
49937
|
+
};
|
|
49938
|
+
var writeInstallState = (state) => {
|
|
49939
|
+
try {
|
|
49940
|
+
mkdirSync6(BOTS_DIR, { recursive: true });
|
|
49941
|
+
const tmp = `${INSTALL_STATE_FILE}.${process.pid}.tmp`;
|
|
49942
|
+
writeFileSync6(tmp, `${JSON.stringify(state, null, 2)}
|
|
49943
|
+
`);
|
|
49944
|
+
renameSync4(tmp, INSTALL_STATE_FILE);
|
|
49945
|
+
} catch (err) {
|
|
49946
|
+
console.error(`[bots] cannot record builtin Bot installs in ${INSTALL_STATE_FILE}:`, err);
|
|
49947
|
+
}
|
|
49948
|
+
};
|
|
49949
|
+
var hashFile = (file2) => createHash2("sha256").update(readFileSync6(file2)).digest("hex");
|
|
49950
|
+
function fileHashes(dir) {
|
|
49951
|
+
const out = /* @__PURE__ */ new Map();
|
|
49952
|
+
const walk = (rel) => {
|
|
49953
|
+
for (const entry of readdirSync4(join14(dir, rel), { withFileTypes: true })) {
|
|
49954
|
+
const child = rel ? `${rel}/${entry.name}` : entry.name;
|
|
49955
|
+
if (entry.isDirectory()) walk(child);
|
|
49956
|
+
else if (entry.isFile()) out.set(child, hashFile(join14(dir, child)));
|
|
49957
|
+
}
|
|
49958
|
+
};
|
|
49959
|
+
walk("");
|
|
49960
|
+
return out;
|
|
49961
|
+
}
|
|
49962
|
+
var treeHash = (files) => {
|
|
49963
|
+
const hash3 = createHash2("sha256");
|
|
49964
|
+
for (const rel of [...files.keys()].sort()) hash3.update(`${rel}\0${files.get(rel)}\0`);
|
|
49965
|
+
return hash3.digest("hex");
|
|
49966
|
+
};
|
|
49967
|
+
function swapIn(staging, dest) {
|
|
49968
|
+
const retired = `${staging}.old`;
|
|
49969
|
+
let moved = false;
|
|
49970
|
+
try {
|
|
49971
|
+
try {
|
|
49972
|
+
renameSync4(dest, retired);
|
|
49973
|
+
moved = true;
|
|
49974
|
+
} catch (err) {
|
|
49975
|
+
if (err?.code !== "ENOENT") throw err;
|
|
49976
|
+
}
|
|
49977
|
+
renameSync4(staging, dest);
|
|
49978
|
+
if (moved) rmSync(retired, { recursive: true, force: true });
|
|
49979
|
+
} catch (err) {
|
|
49980
|
+
if (moved && !existsSync8(dest)) renameSync4(retired, dest);
|
|
49981
|
+
throw err;
|
|
49982
|
+
} finally {
|
|
49983
|
+
rmSync(staging, { recursive: true, force: true });
|
|
49984
|
+
}
|
|
49985
|
+
}
|
|
49986
|
+
var stagingDir = (label) => {
|
|
49987
|
+
const staging = join14(BOTS_DIR, `.${label}.installing-${process.pid}-${Date.now()}`);
|
|
49988
|
+
mkdirSync6(BOTS_DIR, { recursive: true });
|
|
49989
|
+
rmSync(staging, { recursive: true, force: true });
|
|
49990
|
+
return staging;
|
|
49991
|
+
};
|
|
49992
|
+
function removeAndPrune(root, rel) {
|
|
49993
|
+
rmSync(join14(root, rel), { force: true });
|
|
49994
|
+
for (let dir = path2.dirname(rel); dir && dir !== "."; dir = path2.dirname(dir)) {
|
|
49995
|
+
try {
|
|
49996
|
+
if (readdirSync4(join14(root, dir)).length > 0) return;
|
|
49997
|
+
rmdirSync(join14(root, dir));
|
|
49998
|
+
} catch {
|
|
49999
|
+
return;
|
|
50000
|
+
}
|
|
50001
|
+
}
|
|
50002
|
+
}
|
|
50003
|
+
function refreshInstalled(name, dest, installed) {
|
|
50004
|
+
const seed = builtinBotSeedDir(name);
|
|
50005
|
+
const seedFiles = fileHashes(seed);
|
|
50006
|
+
const copyFiles = fileHashes(dest);
|
|
50007
|
+
const next4 = { ...installed };
|
|
50008
|
+
const writes = [];
|
|
50009
|
+
const deletes = [];
|
|
50010
|
+
for (const rel of /* @__PURE__ */ new Set([...Object.keys(installed), ...seedFiles.keys()])) {
|
|
50011
|
+
const ours = installed[rel];
|
|
50012
|
+
const shipped = seedFiles.get(rel);
|
|
50013
|
+
const current2 = copyFiles.get(rel);
|
|
50014
|
+
if (ours === void 0) {
|
|
50015
|
+
if (shipped !== void 0 && current2 === void 0) {
|
|
50016
|
+
writes.push(rel);
|
|
50017
|
+
next4[rel] = shipped;
|
|
50018
|
+
}
|
|
50019
|
+
continue;
|
|
50020
|
+
}
|
|
50021
|
+
if (current2 !== ours) continue;
|
|
50022
|
+
if (shipped === void 0) {
|
|
50023
|
+
deletes.push(rel);
|
|
50024
|
+
delete next4[rel];
|
|
50025
|
+
} else if (shipped !== ours) {
|
|
50026
|
+
writes.push(rel);
|
|
50027
|
+
next4[rel] = shipped;
|
|
50028
|
+
}
|
|
50029
|
+
}
|
|
50030
|
+
if (writes.length === 0 && deletes.length === 0) return next4;
|
|
50031
|
+
const staging = stagingDir(name);
|
|
50032
|
+
try {
|
|
50033
|
+
cpSync(dest, staging, { recursive: true });
|
|
50034
|
+
for (const rel of deletes) removeAndPrune(staging, rel);
|
|
50035
|
+
for (const rel of writes) {
|
|
50036
|
+
mkdirSync6(join14(staging, path2.dirname(rel)), { recursive: true });
|
|
50037
|
+
cpSync(join14(seed, rel), join14(staging, rel));
|
|
50038
|
+
}
|
|
50039
|
+
swapIn(staging, dest);
|
|
50040
|
+
} catch (err) {
|
|
50041
|
+
rmSync(staging, { recursive: true, force: true });
|
|
50042
|
+
throw err;
|
|
50043
|
+
}
|
|
50044
|
+
return next4;
|
|
50045
|
+
}
|
|
50046
|
+
function syncBuiltinBot(name, state) {
|
|
50047
|
+
if (!isBotName(name)) throw new Error(`"${name}" is not a valid built-in Bot name`);
|
|
50048
|
+
const dest = builtinBotUserDir(name);
|
|
50049
|
+
const seed = builtinBotSeedDir(name);
|
|
50050
|
+
if (!hasManifest(seed)) throw new Error(`no built-in Bot named "${name}"`);
|
|
50051
|
+
if (!hasManifest(dest)) {
|
|
50052
|
+
const seedFiles = fileHashes(seed);
|
|
50053
|
+
const staging = stagingDir(name);
|
|
50054
|
+
try {
|
|
50055
|
+
cpSync(seed, staging, { recursive: true });
|
|
50056
|
+
swapIn(staging, dest);
|
|
50057
|
+
} catch (err) {
|
|
50058
|
+
if (!hasManifest(dest)) throw err;
|
|
50059
|
+
}
|
|
50060
|
+
state[name] = { seed: treeHash(seedFiles), files: Object.fromEntries(seedFiles) };
|
|
50061
|
+
return { dir: dest, changed: true };
|
|
50062
|
+
}
|
|
50063
|
+
const record2 = state[name];
|
|
50064
|
+
if (!record2?.files) return { dir: dest, changed: false };
|
|
50065
|
+
const seedHash = treeHash(fileHashes(seed));
|
|
50066
|
+
if (record2.seed === seedHash) return { dir: dest, changed: false };
|
|
50067
|
+
if (existsSync8(join14(dest, ".locks", "write"))) return { dir: dest, changed: false };
|
|
50068
|
+
state[name] = { seed: seedHash, files: refreshInstalled(name, dest, record2.files) };
|
|
50069
|
+
return { dir: dest, changed: true };
|
|
50070
|
+
}
|
|
50071
|
+
var messageOf2 = (cause3) => cause3 instanceof Error ? cause3.message : String(cause3);
|
|
50072
|
+
function parseManifestIn(dir) {
|
|
50073
|
+
try {
|
|
50074
|
+
const content = readFileSync6(join14(dir, BOT_MANIFEST_FILE), "utf-8");
|
|
50075
|
+
return { ok: true, ...parseBotDocument(path2, content, dir) };
|
|
50076
|
+
} catch (err) {
|
|
50077
|
+
return { ok: false, error: messageOf2(err) };
|
|
50078
|
+
}
|
|
50079
|
+
}
|
|
50080
|
+
function builtinBotHome(name, state) {
|
|
50081
|
+
try {
|
|
50082
|
+
return { ...syncBuiltinBot(name, state), installed: true };
|
|
50083
|
+
} catch (err) {
|
|
50084
|
+
console.error(`[bots] cannot install builtin Bot "${name}" into ${BOTS_DIR} \u2014 using the read-only copy:`, err);
|
|
50085
|
+
return { dir: builtinBotSeedDir(name), installed: false, changed: false };
|
|
50086
|
+
}
|
|
50087
|
+
}
|
|
50088
|
+
function listBuiltinBots() {
|
|
50089
|
+
let dirs;
|
|
50090
|
+
try {
|
|
50091
|
+
dirs = readdirSync4(BUILTIN_BOTS_SRC_DIR, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
50092
|
+
} catch (err) {
|
|
50093
|
+
const code = err?.code;
|
|
50094
|
+
if (code !== "ENOENT") {
|
|
50095
|
+
console.error(
|
|
50096
|
+
`[bots] cannot read builtin bots dir ${BUILTIN_BOTS_SRC_DIR} \u2014 all builtin Bots are unavailable:`,
|
|
50097
|
+
err
|
|
50098
|
+
);
|
|
50099
|
+
}
|
|
50100
|
+
return [];
|
|
50101
|
+
}
|
|
50102
|
+
const state = readInstallState();
|
|
50103
|
+
let stateChanged = false;
|
|
50104
|
+
const bots = [];
|
|
50105
|
+
for (const dir of dirs) {
|
|
50106
|
+
if (!hasManifest(builtinBotSeedDir(dir))) continue;
|
|
50107
|
+
if (!isBotName(dir)) {
|
|
50108
|
+
console.error(`[bots] builtin Bot directory "${dir}" is not a usable Bot name and was skipped`);
|
|
50109
|
+
continue;
|
|
50110
|
+
}
|
|
50111
|
+
if (!hasManifest(builtinBotUserDir(dir))) {
|
|
50112
|
+
const seed = parseManifestIn(builtinBotSeedDir(dir));
|
|
50113
|
+
if (!seed.ok) {
|
|
50114
|
+
console.error(`[bots] builtin Bot "${dir}" is not usable and was skipped: ${seed.error}`);
|
|
50115
|
+
continue;
|
|
50116
|
+
}
|
|
50117
|
+
}
|
|
50118
|
+
const { dir: home, installed, changed } = builtinBotHome(dir, state);
|
|
50119
|
+
stateChanged ||= changed;
|
|
50120
|
+
const manifest = parseManifestIn(home);
|
|
50121
|
+
const base = { id: `${BUILTIN_BOT_ID_PREFIX}${dir}`, path: home, addedAt: "", builtin: true };
|
|
50122
|
+
if (manifest.ok) {
|
|
50123
|
+
bots.push({ ...base, valid: true, name: manifest.name, description: manifest.description });
|
|
50124
|
+
} else if (installed) {
|
|
50125
|
+
bots.push({ ...base, valid: false, name: dir, error: manifest.error });
|
|
50126
|
+
} else {
|
|
50127
|
+
console.error(`[bots] builtin Bot "${dir}" became unreadable and was skipped: ${manifest.error}`);
|
|
50128
|
+
}
|
|
50129
|
+
}
|
|
50130
|
+
if (stateChanged) writeInstallState(state);
|
|
50131
|
+
return bots;
|
|
50132
|
+
}
|
|
50133
|
+
var realpathOr = (target) => {
|
|
50134
|
+
try {
|
|
50135
|
+
return realpathSync2.native(target);
|
|
50136
|
+
} catch {
|
|
50137
|
+
return target;
|
|
50138
|
+
}
|
|
50139
|
+
};
|
|
50140
|
+
function findBuiltinBotByPath(dir) {
|
|
50141
|
+
const target = realpathOr(dir);
|
|
50142
|
+
return listBuiltinBots().find((bot) => {
|
|
50143
|
+
const candidates = [bot.path, builtinBotSeedDir(builtinBotNameFromId(bot.id))];
|
|
50144
|
+
return candidates.some((candidate) => candidate === dir || realpathOr(candidate) === target);
|
|
50145
|
+
});
|
|
50146
|
+
}
|
|
50147
|
+
|
|
50148
|
+
// packages/feature/agent/src/effect/botRegistryLive.ts
|
|
50149
|
+
var EMPTY_REGISTRY = { bots: [] };
|
|
50150
|
+
var readRegistry = () => readJsonFileForUpdate(BOTS_FILE, EMPTY_REGISTRY);
|
|
50151
|
+
var readManifest = (manifestPath) => readFileSync7(manifestPath, "utf8");
|
|
50152
|
+
var resolveRegisteredBots = (registry3) => registry3.bots.map((record2) => resolveBot(path3, record2, readManifest));
|
|
50153
|
+
var invalidPath = (reason) => new ValidationError({ field: "path", reason });
|
|
50154
|
+
var fsReason = (what, target, cause3) => {
|
|
50155
|
+
const code = cause3?.code;
|
|
50156
|
+
if (!code || code === "ENOENT") return invalidPath(`${what} not found: ${target}`);
|
|
50157
|
+
const detail = cause3 instanceof Error ? cause3.message : String(cause3);
|
|
50158
|
+
return invalidPath(`cannot read ${target} (${code}): ${detail}`);
|
|
50159
|
+
};
|
|
50160
|
+
var mergeBuiltins = (registered) => {
|
|
50161
|
+
const builtins = listBuiltinBots();
|
|
50162
|
+
const builtinPaths = new Set(
|
|
50163
|
+
builtins.flatMap((bot) => [bot.path, builtinBotSeedDir(builtinBotNameFromId(bot.id))])
|
|
50164
|
+
);
|
|
50165
|
+
return [...builtins, ...registered.filter((bot) => !builtinPaths.has(bot.path))];
|
|
50166
|
+
};
|
|
50167
|
+
var listBots = Effect_exports.tryPromise({
|
|
50168
|
+
try: async () => mergeBuiltins(resolveRegisteredBots(await readRegistry())),
|
|
50169
|
+
catch: (cause3) => new FSError({ path: BOTS_FILE, op: "read", cause: cause3 })
|
|
50170
|
+
});
|
|
50171
|
+
var addBot = (inputPath) => Effect_exports.gen(function* () {
|
|
50172
|
+
const trimmed = inputPath.trim();
|
|
50173
|
+
if (!trimmed) return yield* Effect_exports.fail(invalidPath("missing"));
|
|
50174
|
+
if (!path3.isAbsolute(trimmed)) return yield* Effect_exports.fail(invalidPath("must be absolute"));
|
|
50175
|
+
const requested = botPaths(path3, trimmed).dir;
|
|
50176
|
+
const dir = yield* Effect_exports.try({
|
|
50177
|
+
try: () => realpathSync3.native(requested),
|
|
50178
|
+
catch: (cause3) => fsReason("directory", requested, cause3)
|
|
50179
|
+
});
|
|
50180
|
+
const builtin = findBuiltinBotByPath(dir);
|
|
50181
|
+
if (builtin) return { ...builtin, alreadyExists: true };
|
|
50182
|
+
const manifestPath = botPaths(path3, dir).manifest;
|
|
50183
|
+
const content = yield* Effect_exports.try({
|
|
50184
|
+
try: () => readManifest(manifestPath),
|
|
50185
|
+
catch: (cause3) => fsReason("BOT.md", manifestPath, cause3)
|
|
50186
|
+
});
|
|
50187
|
+
const manifest = yield* Effect_exports.try({
|
|
50188
|
+
try: () => parseBotDocument(path3, content, dir),
|
|
50189
|
+
catch: (cause3) => invalidPath(cause3 instanceof Error ? cause3.message : String(cause3))
|
|
50190
|
+
});
|
|
50191
|
+
const outcome = yield* Effect_exports.tryPromise({
|
|
50192
|
+
try: () => withFileLock(BOTS_FILE, async () => {
|
|
50193
|
+
const registry3 = await readRegistry();
|
|
50194
|
+
const existing = registry3.bots.find((bot) => bot.path === dir);
|
|
50195
|
+
if (existing) return { kind: "existing", bot: resolveBot(path3, existing, readManifest) };
|
|
50196
|
+
const clash = findNameClash(mergeBuiltins(resolveRegisteredBots(registry3)), manifest.name, dir);
|
|
50197
|
+
if (clash) return { kind: "clash", bot: clash };
|
|
50198
|
+
const record2 = { id: `bot-${randomUUID5()}`, path: dir, addedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
50199
|
+
await writeJsonFile(BOTS_FILE, { bots: [...registry3.bots, record2] });
|
|
50200
|
+
return { kind: "added", record: record2 };
|
|
50201
|
+
}),
|
|
50202
|
+
catch: (cause3) => new FSError({ path: BOTS_FILE, op: "write", cause: cause3 })
|
|
50203
|
+
});
|
|
50204
|
+
switch (outcome.kind) {
|
|
50205
|
+
case "existing":
|
|
50206
|
+
return { ...outcome.bot, alreadyExists: true };
|
|
50207
|
+
case "clash":
|
|
50208
|
+
return yield* Effect_exports.fail(invalidPath(`@${manifest.name} is already registered at ${outcome.bot.path}`));
|
|
50209
|
+
case "added":
|
|
50210
|
+
return { ...outcome.record, valid: true, ...manifest, alreadyExists: false };
|
|
50211
|
+
}
|
|
50212
|
+
});
|
|
50213
|
+
var removeBot = (id3) => Effect_exports.gen(function* () {
|
|
50214
|
+
if (isBuiltinBotId(id3)) {
|
|
50215
|
+
return yield* Effect_exports.fail(new ValidationError({ field: "id", reason: "built-in Bots cannot be removed" }));
|
|
50216
|
+
}
|
|
50217
|
+
const removed = yield* Effect_exports.tryPromise({
|
|
50218
|
+
try: () => withFileLock(BOTS_FILE, async () => {
|
|
50219
|
+
const registry3 = await readRegistry();
|
|
50220
|
+
if (!registry3.bots.some((bot) => bot.id === id3)) return false;
|
|
50221
|
+
await writeJsonFile(BOTS_FILE, { bots: registry3.bots.filter((bot) => bot.id !== id3) });
|
|
50222
|
+
return true;
|
|
50223
|
+
}),
|
|
50224
|
+
catch: (cause3) => new FSError({ path: BOTS_FILE, op: "write", cause: cause3 })
|
|
50225
|
+
});
|
|
50226
|
+
if (!removed) return yield* Effect_exports.fail(new NotFoundError({ resource: "bot", id: id3 }));
|
|
50227
|
+
});
|
|
50228
|
+
var BotRegistryServiceLive = Layer_exports.succeed(BotRegistryService, {
|
|
50229
|
+
list: listBots,
|
|
50230
|
+
add: addBot,
|
|
50231
|
+
remove: removeBot
|
|
50232
|
+
});
|
|
50233
|
+
|
|
49814
50234
|
// packages/shared/effect-runtime/src/server/runtime.ts
|
|
49815
50235
|
var isDev = process.env.COCKPIT_ENV === "dev";
|
|
49816
50236
|
var ServerBaseLayer = Layer_exports.unwrapEffect(
|
|
@@ -49840,7 +50260,9 @@ var AppLayer = Layer_exports.mergeAll(
|
|
|
49840
50260
|
// Cross-project session search (/api/sessions/search)
|
|
49841
50261
|
SessionSearchServiceLive,
|
|
49842
50262
|
// Fire-and-forget sub-task sessions + session status (/api/sessions/delegate, /status)
|
|
49843
|
-
DelegationServiceLive
|
|
50263
|
+
DelegationServiceLive,
|
|
50264
|
+
// User-registered Bot directories (bot.json)
|
|
50265
|
+
BotRegistryServiceLive
|
|
49844
50266
|
);
|
|
49845
50267
|
var AppRuntime = ManagedRuntime_exports.make(AppLayer);
|
|
49846
50268
|
|
|
@@ -49947,16 +50369,16 @@ function snapshotOnRunEvent(cwd, sessionKey, provider, event) {
|
|
|
49947
50369
|
}
|
|
49948
50370
|
|
|
49949
50371
|
// packages/feature/agent/src/server/lib/slashCommands.ts
|
|
49950
|
-
import { mkdirSync as
|
|
49951
|
-
import { join as
|
|
50372
|
+
import { mkdirSync as mkdirSync7, writeFileSync as writeFileSync7, readFileSync as readFileSync9 } from "fs";
|
|
50373
|
+
import path4, { join as join16 } from "path";
|
|
49952
50374
|
|
|
49953
50375
|
// packages/feature/agent/src/server/lib/builtinSkills.ts
|
|
49954
|
-
import { readFileSync as
|
|
49955
|
-
import { join as
|
|
50376
|
+
import { readFileSync as readFileSync8, readdirSync as readdirSync5, statSync as statSync6 } from "fs";
|
|
50377
|
+
import { join as join15 } from "path";
|
|
49956
50378
|
function listBuiltinSkillNames() {
|
|
49957
50379
|
let entries2;
|
|
49958
50380
|
try {
|
|
49959
|
-
entries2 =
|
|
50381
|
+
entries2 = readdirSync5(BUILTIN_SKILLS_SRC_DIR, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name);
|
|
49960
50382
|
} catch (err) {
|
|
49961
50383
|
console.error(
|
|
49962
50384
|
`[skills] cannot read builtin skills dir ${BUILTIN_SKILLS_SRC_DIR} \u2014 all builtin slash commands are unavailable:`,
|
|
@@ -49966,18 +50388,32 @@ function listBuiltinSkillNames() {
|
|
|
49966
50388
|
}
|
|
49967
50389
|
return entries2.filter((name) => {
|
|
49968
50390
|
try {
|
|
49969
|
-
return
|
|
50391
|
+
return statSync6(builtinSkillPath(name)).isFile();
|
|
49970
50392
|
} catch {
|
|
49971
50393
|
return false;
|
|
49972
50394
|
}
|
|
49973
50395
|
}).sort();
|
|
49974
50396
|
}
|
|
49975
50397
|
function builtinSkillPath(name) {
|
|
49976
|
-
return
|
|
50398
|
+
return join15(BUILTIN_SKILLS_SRC_DIR, name, "SKILL.md");
|
|
50399
|
+
}
|
|
50400
|
+
function listBuiltinSkillExtras(name) {
|
|
50401
|
+
try {
|
|
50402
|
+
return readdirSync5(join15(BUILTIN_SKILLS_SRC_DIR, name), { withFileTypes: true }).filter((e) => e.isFile() && e.name.endsWith(".md") && e.name !== "SKILL.md").map((e) => e.name).sort();
|
|
50403
|
+
} catch {
|
|
50404
|
+
return [];
|
|
50405
|
+
}
|
|
50406
|
+
}
|
|
50407
|
+
function readBuiltinSkillExtra(name, file2) {
|
|
50408
|
+
try {
|
|
50409
|
+
return readFileSync8(join15(BUILTIN_SKILLS_SRC_DIR, name, file2), "utf-8");
|
|
50410
|
+
} catch {
|
|
50411
|
+
return null;
|
|
50412
|
+
}
|
|
49977
50413
|
}
|
|
49978
50414
|
function readBuiltinSkill(name) {
|
|
49979
50415
|
try {
|
|
49980
|
-
return
|
|
50416
|
+
return readFileSync8(builtinSkillPath(name), "utf-8");
|
|
49981
50417
|
} catch {
|
|
49982
50418
|
return null;
|
|
49983
50419
|
}
|
|
@@ -49990,27 +50426,39 @@ function readFrontmatterField(text, field) {
|
|
|
49990
50426
|
}
|
|
49991
50427
|
|
|
49992
50428
|
// packages/feature/agent/src/server/lib/slashCommands.ts
|
|
49993
|
-
var BUILTIN_SKILLS_OUT_DIR =
|
|
50429
|
+
var BUILTIN_SKILLS_OUT_DIR = join16(COCKPIT_DIR, "skills");
|
|
49994
50430
|
function deriveBaseUrl() {
|
|
49995
50431
|
const port3 = process.env.COCKPIT_PORT || process.env.PORT || "3457";
|
|
49996
50432
|
return `http://localhost:${port3}`;
|
|
49997
50433
|
}
|
|
49998
|
-
var COMMAND_LINE_RE = /^\s*(
|
|
50434
|
+
var COMMAND_LINE_RE = /^\s*(\/@|\/|@)(\S+?)(?:\s+|$)/;
|
|
49999
50435
|
function resolveCommandPrompt(prompt, language = "en", _req) {
|
|
50000
50436
|
const lang = language.startsWith("zh") ? "zh" : "en";
|
|
50001
50437
|
const userSkills = listUserSkills();
|
|
50002
50438
|
const builtins = new Set(listBuiltinSkillNames());
|
|
50003
|
-
const
|
|
50439
|
+
const { bots, corrupt: registryCorrupt } = listRegisteredBots();
|
|
50440
|
+
const isKnown = (marker, cmd) => marker === "@" ? bots.has(cmd) : builtins.has(cmd) || userSkills.some((s) => s.name === cmd);
|
|
50441
|
+
const unresolved = [];
|
|
50004
50442
|
const lines = prompt.split("\n");
|
|
50005
50443
|
const cmds = [];
|
|
50006
50444
|
lines.forEach((line, i) => {
|
|
50007
50445
|
const m = line.match(COMMAND_LINE_RE);
|
|
50008
|
-
if (m
|
|
50009
|
-
|
|
50446
|
+
if (!m) return;
|
|
50447
|
+
const marker = m[1];
|
|
50448
|
+
if (isKnown(marker, m[2])) {
|
|
50449
|
+
cmds.push({ i, marker, cmd: m[2], rest: line.slice(m[0].length).trim() });
|
|
50450
|
+
return;
|
|
50451
|
+
}
|
|
50452
|
+
if (marker !== "@") return;
|
|
50453
|
+
if (builtins.has(m[2]) || userSkills.some((s) => s.name === m[2])) {
|
|
50454
|
+
console.warn(`[skills] "@${m[2]}" is not a registered Bot; the subagent form is now "/@${m[2]}" \u2014 left as plain text`);
|
|
50455
|
+
unresolved.push(`@${m[2]} \u2192 the subagent form for a skill is now /@${m[2]}`);
|
|
50456
|
+
} else if (registryCorrupt) {
|
|
50457
|
+
unresolved.push(`@${m[2]} \u2192 could not be resolved: ${BOTS_FILE} does not parse`);
|
|
50010
50458
|
}
|
|
50011
50459
|
});
|
|
50012
|
-
if (cmds.length === 0) return prompt;
|
|
50013
|
-
const showLocus = cmds.length >= 2 || cmds.some((c) => c.marker
|
|
50460
|
+
if (cmds.length === 0) return appendUnresolvedNote(prompt, unresolved, lang);
|
|
50461
|
+
const showLocus = cmds.length >= 2 || cmds.some((c) => c.marker !== "/");
|
|
50014
50462
|
const baseUrl = deriveBaseUrl();
|
|
50015
50463
|
const rendered = /* @__PURE__ */ new Map();
|
|
50016
50464
|
const consumed = /* @__PURE__ */ new Set();
|
|
@@ -50025,29 +50473,58 @@ function resolveCommandPrompt(prompt, language = "en", _req) {
|
|
|
50025
50473
|
bodyLines.push(lines[j].trim());
|
|
50026
50474
|
consumed.add(j);
|
|
50027
50475
|
}
|
|
50028
|
-
const ref = resolveSkillRef(c.cmd, baseUrl, userSkills);
|
|
50476
|
+
const ref = c.marker === "@" ? { name: `@${c.cmd}`, path: bots.get(c.cmd), content: null } : resolveSkillRef(c.cmd, baseUrl, userSkills);
|
|
50029
50477
|
rendered.set(c.i, renderCommandLine(c.marker, ref, bodyLines.join("\n"), lang, showLocus));
|
|
50030
50478
|
if (ref.path && !seen.has(ref.name)) {
|
|
50031
50479
|
seen.add(ref.name);
|
|
50032
|
-
listed.push({ name: ref.name, path: ref.path });
|
|
50480
|
+
listed.push({ name: ref.name, path: ref.path, kind: c.marker === "@" ? "handoff" : "read" });
|
|
50033
50481
|
}
|
|
50034
50482
|
});
|
|
50483
|
+
let botRunInline = null;
|
|
50484
|
+
if (cmds.some((c) => c.marker === "@")) {
|
|
50485
|
+
const run6 = resolveSkillRef("bot-run", baseUrl, userSkills);
|
|
50486
|
+
if (run6.path && !seen.has(run6.name)) {
|
|
50487
|
+
seen.add(run6.name);
|
|
50488
|
+
listed.push({ name: run6.name, path: run6.path, kind: "read" });
|
|
50489
|
+
} else if (!run6.path) {
|
|
50490
|
+
botRunInline = run6.content;
|
|
50491
|
+
}
|
|
50492
|
+
const turn = resolveSkillRef("bot-turn", baseUrl, userSkills);
|
|
50493
|
+
if (turn.path && !seen.has(turn.name)) {
|
|
50494
|
+
seen.add(turn.name);
|
|
50495
|
+
listed.unshift({ name: turn.name, path: turn.path, kind: "handoff" });
|
|
50496
|
+
}
|
|
50497
|
+
}
|
|
50035
50498
|
const out = [];
|
|
50036
50499
|
for (let i = 0; i < lines.length; i++) {
|
|
50037
50500
|
if (consumed.has(i)) continue;
|
|
50038
50501
|
out.push(rendered.get(i) ?? lines[i]);
|
|
50039
50502
|
}
|
|
50040
50503
|
let result = out.join("\n");
|
|
50041
|
-
|
|
50042
|
-
const
|
|
50504
|
+
const block = (kind, header) => {
|
|
50505
|
+
const items = listed.filter((s) => s.kind === kind);
|
|
50506
|
+
if (items.length === 0) return null;
|
|
50043
50507
|
const sep2 = lang === "zh" ? "\uFF1A" : ": ";
|
|
50044
|
-
|
|
50045
|
-
|
|
50508
|
+
return `${header}
|
|
50509
|
+
${items.map((s) => `- ${s.name}${sep2}${s.path}`).join("\n")}`;
|
|
50510
|
+
};
|
|
50511
|
+
const blocks = [
|
|
50512
|
+
block("read", lang === "zh" ? "\u8BF7\u5148\u8BFB\u53D6\u4EE5\u4E0B skill \u6587\u4EF6\uFF0C\u518D\u636E\u6B64\u6267\u884C\uFF1A" : "Read these skill files first, then act accordingly:"),
|
|
50513
|
+
block("handoff", lang === "zh" ? "\u4EE5\u4E0B\u6587\u4EF6\u4EA4\u7ED9\u4F60\u6D3E\u53D1\u7684\u5B50\u4F1A\u8BDD\u53BB\u8BFB\uFF0C\u4F60\u53EA\u8F6C\u4EA4\u8DEF\u5F84\uFF0C\u4E0D\u8981\u81EA\u5DF1\u6253\u5F00\uFF1A" : "These files are for the session you delegate to. Pass the paths along; do not open them yourself:"),
|
|
50514
|
+
botRunInline
|
|
50515
|
+
].filter((b) => b !== null);
|
|
50516
|
+
if (blocks.length > 0) result = `${result}
|
|
50517
|
+
|
|
50518
|
+
${blocks.join("\n\n")}`;
|
|
50519
|
+
return appendUnresolvedNote(result, unresolved, lang);
|
|
50520
|
+
}
|
|
50521
|
+
function appendUnresolvedNote(result, unresolved, lang) {
|
|
50522
|
+
if (unresolved.length === 0) return result;
|
|
50523
|
+
const header = lang === "zh" ? "\u4EE5\u4E0B @ \u5F00\u5934\u7684\u884C\u6CA1\u6709\u88AB\u8BC6\u522B\uFF0C\u5DF2\u6309\u666E\u901A\u6587\u672C\u5904\u7406\uFF0C\u8BF7\u544A\u77E5\u7528\u6237\uFF1A" : "These @ lines were not recognised and were left as plain text. Tell the user:";
|
|
50524
|
+
return `${result}
|
|
50046
50525
|
|
|
50047
50526
|
${header}
|
|
50048
|
-
${
|
|
50049
|
-
}
|
|
50050
|
-
return result;
|
|
50527
|
+
${unresolved.map((u) => `- ${u}`).join("\n")}`;
|
|
50051
50528
|
}
|
|
50052
50529
|
function renderCommandLine(marker, ref, body, lang, showLocus) {
|
|
50053
50530
|
if (ref.path) {
|
|
@@ -50059,7 +50536,7 @@ function renderCommandLine(marker, ref, body, lang, showLocus) {
|
|
|
50059
50536
|
return `${locus}${ref.content ?? ""}${then}`;
|
|
50060
50537
|
}
|
|
50061
50538
|
function locusWord(marker, lang) {
|
|
50062
|
-
if (marker
|
|
50539
|
+
if (marker !== "/") return "subagent";
|
|
50063
50540
|
return lang === "zh" ? "\u4E3B\u4F1A\u8BDD" : "main session";
|
|
50064
50541
|
}
|
|
50065
50542
|
function resolveSkillRef(cmd, baseUrl, userSkills) {
|
|
@@ -50070,13 +50547,13 @@ function resolveSkillRef(cmd, baseUrl, userSkills) {
|
|
|
50070
50547
|
console.error(`[skills] builtin "${cmd}" disappeared while resolving it`);
|
|
50071
50548
|
return { name: cmd, path: null, content: null };
|
|
50072
50549
|
}
|
|
50073
|
-
const content = source
|
|
50074
|
-
const skillPath = writeBuiltinSkill(cmd, content);
|
|
50550
|
+
const content = substitute(source, baseUrl);
|
|
50551
|
+
const skillPath = writeBuiltinSkill(cmd, content, baseUrl);
|
|
50075
50552
|
return skillPath ? { name: cmd, path: skillPath, content: null } : { name: cmd, path: null, content };
|
|
50076
50553
|
}
|
|
50077
50554
|
function listUserSkills() {
|
|
50078
50555
|
try {
|
|
50079
|
-
const data = JSON.parse(
|
|
50556
|
+
const data = JSON.parse(readFileSync9(SKILLS_FILE, "utf-8"));
|
|
50080
50557
|
const out = [];
|
|
50081
50558
|
for (const s of data.skills ?? []) {
|
|
50082
50559
|
const name = readSkillName(s.path);
|
|
@@ -50087,28 +50564,58 @@ function listUserSkills() {
|
|
|
50087
50564
|
return [];
|
|
50088
50565
|
}
|
|
50089
50566
|
}
|
|
50090
|
-
function
|
|
50567
|
+
function listRegisteredBots() {
|
|
50568
|
+
const builtins = listBuiltinBots();
|
|
50569
|
+
const withBuiltins = (registered) => mentionableBots(path4, [...builtins, ...registered]);
|
|
50570
|
+
let raw;
|
|
50091
50571
|
try {
|
|
50092
|
-
|
|
50572
|
+
raw = readFileSync9(BOTS_FILE, "utf-8");
|
|
50573
|
+
} catch {
|
|
50574
|
+
return { bots: withBuiltins([]), corrupt: false };
|
|
50575
|
+
}
|
|
50576
|
+
try {
|
|
50577
|
+
const data = JSON.parse(raw);
|
|
50578
|
+
const read = (manifest) => readFileSync9(manifest, "utf-8");
|
|
50579
|
+
return { bots: withBuiltins((data.bots ?? []).map((r) => resolveBot(path4, r, read))), corrupt: false };
|
|
50580
|
+
} catch (err) {
|
|
50581
|
+
console.error(`[skills] ${BOTS_FILE} does not parse \u2014 every registered @bot line is left as plain text:`, err);
|
|
50582
|
+
return { bots: withBuiltins([]), corrupt: true };
|
|
50583
|
+
}
|
|
50584
|
+
}
|
|
50585
|
+
function readSkillName(path5) {
|
|
50586
|
+
try {
|
|
50587
|
+
return readFrontmatterField(readFileSync9(path5, "utf-8"), "name");
|
|
50093
50588
|
} catch {
|
|
50094
50589
|
return null;
|
|
50095
50590
|
}
|
|
50096
50591
|
}
|
|
50097
|
-
function writeBuiltinSkill(cmd, content) {
|
|
50592
|
+
function writeBuiltinSkill(cmd, content, baseUrl) {
|
|
50098
50593
|
try {
|
|
50099
|
-
const dir =
|
|
50100
|
-
|
|
50101
|
-
const filePath =
|
|
50102
|
-
|
|
50594
|
+
const dir = join16(BUILTIN_SKILLS_OUT_DIR, cmd);
|
|
50595
|
+
mkdirSync7(dir, { recursive: true });
|
|
50596
|
+
const filePath = join16(dir, "SKILL.md");
|
|
50597
|
+
writeFileSync7(filePath, content.endsWith("\n") ? content : `${content}
|
|
50103
50598
|
`, "utf-8");
|
|
50599
|
+
for (const file2 of listBuiltinSkillExtras(cmd)) {
|
|
50600
|
+
const extra = readBuiltinSkillExtra(cmd, file2);
|
|
50601
|
+
if (extra === null) continue;
|
|
50602
|
+
try {
|
|
50603
|
+
writeFileSync7(join16(dir, file2), substitute(extra, baseUrl), "utf-8");
|
|
50604
|
+
} catch (err) {
|
|
50605
|
+
console.error(`[skills] builtin "${cmd}": cannot write reference file ${file2}:`, err);
|
|
50606
|
+
}
|
|
50607
|
+
}
|
|
50104
50608
|
return filePath;
|
|
50105
50609
|
} catch {
|
|
50106
50610
|
return null;
|
|
50107
50611
|
}
|
|
50108
50612
|
}
|
|
50613
|
+
function substitute(text, baseUrl) {
|
|
50614
|
+
return text.replaceAll("{{BASE_URL}}", baseUrl).replaceAll("{{COCKPIT_DIR}}", COCKPIT_DIR);
|
|
50615
|
+
}
|
|
50109
50616
|
|
|
50110
50617
|
// packages/feature/agent/src/server/engines/orchestrator.ts
|
|
50111
|
-
import { randomUUID as
|
|
50618
|
+
import { randomUUID as randomUUID6 } from "crypto";
|
|
50112
50619
|
async function dispatchChat2(spec, body, request2) {
|
|
50113
50620
|
const { sessionId, images, cwd, language } = body;
|
|
50114
50621
|
if (sessionId && isRunActive(sessionId)) {
|
|
@@ -50126,7 +50633,7 @@ async function dispatchChat2(spec, body, request2) {
|
|
|
50126
50633
|
}
|
|
50127
50634
|
const promptText = typeof prompt === "string" ? prompt : void 0;
|
|
50128
50635
|
const abort = new AbortController();
|
|
50129
|
-
const runId = typeof body.runId === "string" && body.runId ||
|
|
50636
|
+
const runId = typeof body.runId === "string" && body.runId || randomUUID6();
|
|
50130
50637
|
let currentKey = sessionId || runId;
|
|
50131
50638
|
let actualSessionId = sessionId;
|
|
50132
50639
|
let isClosed = false;
|
|
@@ -50231,6 +50738,7 @@ export {
|
|
|
50231
50738
|
findCodexSessionPath,
|
|
50232
50739
|
ensureParentDir,
|
|
50233
50740
|
readJsonFile,
|
|
50741
|
+
readJsonFileForUpdate,
|
|
50234
50742
|
writeJsonFile,
|
|
50235
50743
|
withFileLock,
|
|
50236
50744
|
mutateJsonFile,
|