@surething/cockpit 1.0.185 → 1.0.187
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 +26 -26
- package/.next-prod/build-manifest.json +3 -3
- package/.next-prod/next-minimal-server.js.nft.json +1 -1
- package/.next-prod/next-server.js.nft.json +1 -1
- package/.next-prod/prerender-manifest.json +3 -3
- package/.next-prod/react-loadable-manifest.json +1 -1
- package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
- package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/_global-error.html +2 -2
- 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/_global-error.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_index.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.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 +2 -2
- package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/bash/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js +18 -7
- package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/codex/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/chat/kimi/route.js +21 -10
- package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/kimi/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/chat/ollama/route.js +154 -6
- package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/ollama/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/chat/route.js +14 -3
- package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/route_client-reference-manifest.js +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/claude-stats/route_client-reference-manifest.js +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/commands/route_client-reference-manifest.js +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/comments/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/columns/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/connect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/disconnect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/export/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/query/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/schemas/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/extension/version/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/blame/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/clipboard/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/copy/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/delete/route_client-reference-manifest.js +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/expanded/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/index/route_client-reference-manifest.js +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/init/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/paste/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/read/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/readdir/route_client-reference-manifest.js +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/recent/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/save/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/search/route_client-reference-manifest.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/branch-diff/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branches/route_client-reference-manifest.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/commit-diff/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commits/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/diff/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/discard/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/stage/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/status/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/worktree/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/global-state/route.js +1 -1
- package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/global-state/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/load/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/save/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/definition/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/hover/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/references/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/status/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/columns/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/connect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/export/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/query/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/schemas/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/query/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route_client-reference-manifest.js +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/note/route_client-reference-manifest.js +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/models/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/start/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-cursor/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-vscode/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pick-folder/route_client-reference-manifest.js +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/pinned-sessions/route_client-reference-manifest.js +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-settings/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/project-state/route.js +1 -1
- package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-state/route_client-reference-manifest.js +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/projects/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/command/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/connect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/delete/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/get/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/keys/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/set/route_client-reference-manifest.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]/comments/route_client-reference-manifest.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]/replies/route_client-reference-manifest.js +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/[id]/route_client-reference-manifest.js +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/identify/route_client-reference-manifest.js +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/order/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/route_client-reference-manifest.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/share-info/route_client-reference-manifest.js +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/review/users/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route_client-reference-manifest.js +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/config/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/scripts/route_client-reference-manifest.js +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]/fork/route_client-reference-manifest.js +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]/history/route_client-reference-manifest.js +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/session-by-path/route_client-reference-manifest.js +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/[encodedPath]/route_client-reference-manifest.js +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/projects/route_client-reference-manifest.js +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/route_client-reference-manifest.js +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/settings/route_client-reference-manifest.js +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/aliases/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route_client-reference-manifest.js +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/bubble-order/route_client-reference-manifest.js +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/env/route_client-reference-manifest.js +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/terminal/history/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/version/route_client-reference-manifest.js +1 -1
- package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next-prod/server/app/manifest.webmanifest/route_client-reference-manifest.js +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 +11 -11
- 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.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 +26 -26
- package/.next-prod/server/chunks/3269.js +1 -0
- package/.next-prod/server/chunks/4098.js +1 -1
- package/.next-prod/server/chunks/4490.js +1 -1
- package/.next-prod/server/chunks/4741.js +4 -4
- package/.next-prod/server/chunks/5394.js +1 -0
- package/.next-prod/server/chunks/6062.js +1 -1
- package/.next-prod/server/chunks/700.js +1 -0
- package/.next-prod/server/chunks/7284.js +1 -1
- package/.next-prod/server/functions-config-manifest.json +0 -1
- package/.next-prod/server/middleware-build-manifest.js +1 -1
- package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
- package/.next-prod/server/pages/404.html +2 -2
- package/.next-prod/server/pages/500.html +2 -2
- package/.next-prod/server/server-reference-manifest.json +1 -1
- package/.next-prod/static/chunks/{1593-7902218f5b10761f.js → 1593-d845ec6e5c8de67e.js} +1 -1
- package/.next-prod/static/chunks/5493-83d6a5ec42d6cbb3.js +1 -0
- package/.next-prod/static/chunks/{700.65a02f6a597083dc.js → 700.0aaec5a3a570d182.js} +1 -1
- package/.next-prod/static/chunks/app/page-cc2b332242bc2c93.js +1 -0
- package/.next-prod/static/chunks/app/project/page-95039285184e0c74.js +25 -0
- package/.next-prod/static/chunks/{webpack-67d02a2a41508d41.js → webpack-0f527ee7ab644d02.js} +1 -1
- package/.next-prod/static/css/bbd65867698c479b.css +3 -0
- package/.next-prod/trace +12 -12
- package/.next-prod/trace-build +1 -1
- package/bin/postinstall.mjs +20 -0
- package/dist/{JupyterKernelManager-475VNVA5.mjs → JupyterKernelManager-VBKKSRVJ.mjs} +23 -2
- package/dist/chunk-KLV3PBIZ.mjs +427 -0
- package/dist/scheduledTasks.mjs +7 -2
- package/dist/wsServer.mjs +3 -3
- package/kernels/jupyter_bridge.py +162 -0
- package/package.json +5 -2
- package/server.mjs +5 -1
- package/.next-prod/static/chunks/5493-9f80ad2c7c9cf840.js +0 -1
- package/.next-prod/static/chunks/app/page-cc2bf3ca4c337090.js +0 -1
- package/.next-prod/static/chunks/app/project/page-b73536c67304e489.js +0 -25
- package/.next-prod/static/css/786ec7ade22e6269.css +0 -3
- package/dist/chunk-SWMKAZSL.mjs +0 -250
- /package/.next-prod/static/{ZA65Kd3f2tNa-NfgtOil4 → Avd2f2SegjGOElSYvrTlK}/_buildManifest.js +0 -0
- /package/.next-prod/static/{ZA65Kd3f2tNa-NfgtOil4 → Avd2f2SegjGOElSYvrTlK}/_ssgManifest.js +0 -0
package/.next-prod/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":12420537,"timestamp":501859389,"id":17,"parentId":1,"tags":{},"startTime":1776839973569,"traceId":"4bfc0cde73c5d18d"},{"name":"run-typescript","duration":14652216,"timestamp":514284927,"id":1489,"parentId":1,"tags":{},"startTime":1776839985994,"traceId":"4bfc0cde73c5d18d"},{"name":"static-check","duration":819642,"timestamp":528952587,"id":1492,"parentId":1,"tags":{},"startTime":1776840000662,"traceId":"4bfc0cde73c5d18d"},{"name":"static-generation","duration":6351022,"timestamp":529963320,"id":1710,"parentId":1,"tags":{},"startTime":1776840001672,"traceId":"4bfc0cde73c5d18d"},{"name":"collect-build-traces","duration":18951972,"timestamp":529772937,"id":1707,"parentId":1,"tags":{},"startTime":1776840001482,"traceId":"4bfc0cde73c5d18d"},{"name":"telemetry-flush","duration":64,"timestamp":548728240,"id":1719,"parentId":1,"tags":{},"startTime":1776840020437,"traceId":"4bfc0cde73c5d18d"},{"name":"next-build","duration":47033463,"timestamp":501694857,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"webpack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1776839973404,"traceId":"4bfc0cde73c5d18d"}]
|
package/bin/postinstall.mjs
CHANGED
|
@@ -47,4 +47,24 @@ if (isNpmInstall) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
} catch {}
|
|
50
|
+
|
|
51
|
+
// jupyter_bridge.py → ~/.cockpit/kernels/jupyter_bridge.py
|
|
52
|
+
try {
|
|
53
|
+
const kernelSrc = join(projectRoot, 'kernels', 'jupyter_bridge.py');
|
|
54
|
+
const cockpitDir = join(homedir(), '.cockpit');
|
|
55
|
+
const kernelDestDir = join(cockpitDir, 'kernels');
|
|
56
|
+
accessSync(kernelSrc);
|
|
57
|
+
mkdirSync(kernelDestDir, { recursive: true });
|
|
58
|
+
cpSync(kernelSrc, join(kernelDestDir, 'jupyter_bridge.py'), { force: true });
|
|
59
|
+
|
|
60
|
+
if (process.platform !== 'win32') {
|
|
61
|
+
const realUser = process.env.SUDO_USER;
|
|
62
|
+
if (realUser) {
|
|
63
|
+
try { execSync(`chown -R "${realUser}" "${cockpitDir}"`); } catch {}
|
|
64
|
+
}
|
|
65
|
+
if (process.platform === 'darwin') {
|
|
66
|
+
try { execSync(`xattr -cr "${kernelDestDir}"`); } catch {}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} catch {}
|
|
50
70
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
// src/lib/
|
|
1
|
+
// src/lib/bubbles/jupyter/JupyterKernelManager.ts
|
|
2
2
|
import { spawn } from "child_process";
|
|
3
3
|
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
import { existsSync } from "fs";
|
|
4
6
|
import { createInterface } from "readline";
|
|
5
7
|
var GLOBAL_KEY = /* @__PURE__ */ Symbol.for("jupyter_kernel_manager");
|
|
6
8
|
var IDLE_TIMEOUT = 10 * 60 * 1e3;
|
|
@@ -19,6 +21,25 @@ var JupyterKernelManager = class {
|
|
|
19
21
|
findPython() {
|
|
20
22
|
return "python3";
|
|
21
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve jupyter_bridge.py path.
|
|
26
|
+
* Production: ~/.cockpit/kernels/jupyter_bridge.py (copied by postinstall)
|
|
27
|
+
* Dev: COCKPIT_ROOT/kernels/jupyter_bridge.py or legacy src path
|
|
28
|
+
*/
|
|
29
|
+
resolveBridgePath() {
|
|
30
|
+
const installedPath = join(homedir(), ".cockpit", "kernels", "jupyter_bridge.py");
|
|
31
|
+
if (existsSync(installedPath)) {
|
|
32
|
+
return installedPath;
|
|
33
|
+
}
|
|
34
|
+
const root = process.env.COCKPIT_ROOT;
|
|
35
|
+
if (root) {
|
|
36
|
+
const devPath = join(root, "kernels", "jupyter_bridge.py");
|
|
37
|
+
if (existsSync(devPath)) {
|
|
38
|
+
return devPath;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return join(__dirname, "jupyter_bridge.py");
|
|
42
|
+
}
|
|
22
43
|
/**
|
|
23
44
|
* Get or create a kernel for a bubble
|
|
24
45
|
*/
|
|
@@ -30,7 +51,7 @@ var JupyterKernelManager = class {
|
|
|
30
51
|
return existing;
|
|
31
52
|
}
|
|
32
53
|
const python = this.findPython();
|
|
33
|
-
const bridgePath =
|
|
54
|
+
const bridgePath = this.resolveBridgePath();
|
|
34
55
|
const bridge = spawn(python, ["-u", bridgePath], {
|
|
35
56
|
cwd,
|
|
36
57
|
env: {
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
// src/lib/paths.ts
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
5
|
+
import { existsSync, writeFileSync, mkdirSync, readdirSync } from "fs";
|
|
6
|
+
import { execSync } from "child_process";
|
|
7
|
+
var HOME_DIR = homedir();
|
|
8
|
+
var COCKPIT_DIR = join(HOME_DIR, ".cockpit");
|
|
9
|
+
var COCKPIT_PROJECTS_DIR = join(COCKPIT_DIR, "projects");
|
|
10
|
+
var GLOBAL_STATE_FILE = join(COCKPIT_DIR, "state.json");
|
|
11
|
+
var PINNED_SESSIONS_FILE = join(COCKPIT_DIR, "pinned-sessions.json");
|
|
12
|
+
var NOTE_FILE = join(COCKPIT_DIR, "note.md");
|
|
13
|
+
var SCHEDULED_TASKS_FILE = join(COCKPIT_DIR, "scheduled-tasks.json");
|
|
14
|
+
var SETTINGS_FILE = join(COCKPIT_DIR, "settings.json");
|
|
15
|
+
var REVIEW_DIR = join(COCKPIT_DIR, "review");
|
|
16
|
+
var REVIEW_SIGNAL_FILE = join(REVIEW_DIR, "_signal");
|
|
17
|
+
var CLAUDE_DIR = join(HOME_DIR, ".claude");
|
|
18
|
+
var CLAUDE_PROJECTS_DIR = join(CLAUDE_DIR, "projects");
|
|
19
|
+
var CLAUDE2_DIR = join(HOME_DIR, ".claude2");
|
|
20
|
+
var CLAUDE2_PROJECTS_DIR = join(CLAUDE2_DIR, "projects");
|
|
21
|
+
function encodePath(path) {
|
|
22
|
+
return path.replace(/[/.]/g, "-");
|
|
23
|
+
}
|
|
24
|
+
function getCockpitProjectDir(cwd) {
|
|
25
|
+
return join(COCKPIT_PROJECTS_DIR, encodePath(cwd));
|
|
26
|
+
}
|
|
27
|
+
function getTerminalHistoryPath(cwd, tabId) {
|
|
28
|
+
return join(getCockpitProjectDir(cwd), `terminal-history-${tabId}.jsonl`);
|
|
29
|
+
}
|
|
30
|
+
function getTerminalOutputPath(cwd, commandId) {
|
|
31
|
+
return join(getCockpitProjectDir(cwd), `terminal-output-${commandId}.txt`);
|
|
32
|
+
}
|
|
33
|
+
function getClaudeProjectDir(cwd) {
|
|
34
|
+
return join(CLAUDE_PROJECTS_DIR, encodePath(cwd));
|
|
35
|
+
}
|
|
36
|
+
function getClaudeSessionPath(cwd, sessionId) {
|
|
37
|
+
return join(getClaudeProjectDir(cwd), `${sessionId}.jsonl`);
|
|
38
|
+
}
|
|
39
|
+
function getClaude2ProjectDir(cwd) {
|
|
40
|
+
return join(CLAUDE2_PROJECTS_DIR, encodePath(cwd));
|
|
41
|
+
}
|
|
42
|
+
function getClaude2SessionPath(cwd, sessionId) {
|
|
43
|
+
return join(getClaude2ProjectDir(cwd), `${sessionId}.jsonl`);
|
|
44
|
+
}
|
|
45
|
+
function getOllamaSessionsDir(cwd) {
|
|
46
|
+
return join(COCKPIT_DIR, "ollama-sessions", encodePath(cwd));
|
|
47
|
+
}
|
|
48
|
+
function getOllamaSessionPath(cwd, sessionId) {
|
|
49
|
+
return join(getOllamaSessionsDir(cwd), `${sessionId}.jsonl`);
|
|
50
|
+
}
|
|
51
|
+
function findCodexSessionPath(threadId) {
|
|
52
|
+
const codexSessionsDir = join(HOME_DIR, ".codex", "sessions");
|
|
53
|
+
if (!existsSync(codexSessionsDir)) return null;
|
|
54
|
+
const suffix = `-${threadId}.jsonl`;
|
|
55
|
+
try {
|
|
56
|
+
const result = execSync(
|
|
57
|
+
`find ${JSON.stringify(codexSessionsDir)} -name "*${threadId}.jsonl" -type f 2>/dev/null`,
|
|
58
|
+
{ encoding: "utf8", timeout: 3e3 }
|
|
59
|
+
).trim();
|
|
60
|
+
if (result) {
|
|
61
|
+
return result.split("\n")[0];
|
|
62
|
+
}
|
|
63
|
+
} catch {
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
function findKimiSessionPath(sessionId) {
|
|
68
|
+
const sessionsDir = join(HOME_DIR, ".kimi", "sessions");
|
|
69
|
+
if (!existsSync(sessionsDir)) return null;
|
|
70
|
+
try {
|
|
71
|
+
for (const hash of readdirSync(sessionsDir)) {
|
|
72
|
+
const candidate = join(sessionsDir, hash, sessionId, "context.jsonl");
|
|
73
|
+
if (existsSync(candidate)) return candidate;
|
|
74
|
+
}
|
|
75
|
+
} catch {
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
async function ensureDir(dirPath) {
|
|
80
|
+
if (!existsSync(dirPath)) {
|
|
81
|
+
await mkdir(dirPath, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function ensureParentDir(filePath) {
|
|
85
|
+
const dir = join(filePath, "..");
|
|
86
|
+
await ensureDir(dir);
|
|
87
|
+
}
|
|
88
|
+
async function readJsonFile(filePath, defaultValue) {
|
|
89
|
+
try {
|
|
90
|
+
const content = await readFile(filePath, "utf-8");
|
|
91
|
+
return JSON.parse(content);
|
|
92
|
+
} catch {
|
|
93
|
+
return defaultValue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function writeJsonFile(filePath, data) {
|
|
97
|
+
await ensureParentDir(filePath);
|
|
98
|
+
await writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
99
|
+
}
|
|
100
|
+
var fileLocks = /* @__PURE__ */ new Map();
|
|
101
|
+
function withFileLock(filePath, fn) {
|
|
102
|
+
const prev = fileLocks.get(filePath) ?? Promise.resolve();
|
|
103
|
+
const run = prev.then(fn);
|
|
104
|
+
const chain = run.then(() => {
|
|
105
|
+
}, () => {
|
|
106
|
+
});
|
|
107
|
+
fileLocks.set(filePath, chain);
|
|
108
|
+
chain.then(() => {
|
|
109
|
+
if (fileLocks.get(filePath) === chain) {
|
|
110
|
+
fileLocks.delete(filePath);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return run;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// src/lib/global-state.ts
|
|
117
|
+
import { createReadStream, existsSync as existsSync2 } from "fs";
|
|
118
|
+
import { createInterface } from "readline";
|
|
119
|
+
var MAX_SESSIONS = 15;
|
|
120
|
+
var MAX_TEXT_LEN = 50;
|
|
121
|
+
function truncate(s) {
|
|
122
|
+
if (!s) return s;
|
|
123
|
+
const chars = [...s];
|
|
124
|
+
return chars.length <= MAX_TEXT_LEN ? s : chars.slice(0, MAX_TEXT_LEN).join("") + "\u2026";
|
|
125
|
+
}
|
|
126
|
+
async function updateGlobalState(cwd, sessionId, status, title, lastUserMessage) {
|
|
127
|
+
if (!existsSync2(cwd)) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
return withFileLock(GLOBAL_STATE_FILE, async () => {
|
|
131
|
+
const state = await readJsonFile(GLOBAL_STATE_FILE, { sessions: [] });
|
|
132
|
+
for (const s of state.sessions) {
|
|
133
|
+
if (!s.status) {
|
|
134
|
+
const legacy = s;
|
|
135
|
+
s.status = legacy.isLoading ? "loading" : "normal";
|
|
136
|
+
delete legacy.isLoading;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const existingIndex = state.sessions.findIndex(
|
|
140
|
+
(s) => s.cwd === cwd && s.sessionId === sessionId
|
|
141
|
+
);
|
|
142
|
+
const existed = existingIndex >= 0;
|
|
143
|
+
const existing = existed ? state.sessions[existingIndex] : void 0;
|
|
144
|
+
const newSession = {
|
|
145
|
+
cwd,
|
|
146
|
+
sessionId,
|
|
147
|
+
lastActive: Date.now(),
|
|
148
|
+
status,
|
|
149
|
+
title: truncate(title || existing?.title),
|
|
150
|
+
lastUserMessage: truncate(lastUserMessage || existing?.lastUserMessage)
|
|
151
|
+
};
|
|
152
|
+
if (existingIndex >= 0) {
|
|
153
|
+
state.sessions[existingIndex] = newSession;
|
|
154
|
+
} else {
|
|
155
|
+
state.sessions.push(newSession);
|
|
156
|
+
}
|
|
157
|
+
state.sessions.sort((a, b) => b.lastActive - a.lastActive);
|
|
158
|
+
state.sessions = state.sessions.slice(0, MAX_SESSIONS);
|
|
159
|
+
await writeJsonFile(GLOBAL_STATE_FILE, state);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
async function getSessionTitle(cwd, sessionId) {
|
|
163
|
+
const claudePath = getClaudeSessionPath(cwd, sessionId);
|
|
164
|
+
if (existsSync2(claudePath)) {
|
|
165
|
+
return getClaudeStyleTitle(claudePath);
|
|
166
|
+
}
|
|
167
|
+
const claude2Path = getClaude2SessionPath(cwd, sessionId);
|
|
168
|
+
if (existsSync2(claude2Path)) {
|
|
169
|
+
return getClaudeStyleTitle(claude2Path);
|
|
170
|
+
}
|
|
171
|
+
const ollamaPath = getOllamaSessionPath(cwd, sessionId);
|
|
172
|
+
if (existsSync2(ollamaPath)) {
|
|
173
|
+
return getClaudeStyleTitle(ollamaPath);
|
|
174
|
+
}
|
|
175
|
+
const codexPath = findCodexSessionPath(sessionId);
|
|
176
|
+
if (codexPath && existsSync2(codexPath)) {
|
|
177
|
+
const title = await getCodexTitle(codexPath);
|
|
178
|
+
return title || "Untitled Session";
|
|
179
|
+
}
|
|
180
|
+
const kimiPath = findKimiSessionPath(sessionId);
|
|
181
|
+
if (kimiPath && existsSync2(kimiPath)) {
|
|
182
|
+
const title = await getKimiTitle(kimiPath);
|
|
183
|
+
return title || "Untitled Session";
|
|
184
|
+
}
|
|
185
|
+
return "Untitled Session";
|
|
186
|
+
}
|
|
187
|
+
async function getLastUserMessage(cwd, sessionId) {
|
|
188
|
+
const claudePath = getClaudeSessionPath(cwd, sessionId);
|
|
189
|
+
if (existsSync2(claudePath)) {
|
|
190
|
+
return await getClaudeStyleLastUserMessage(claudePath);
|
|
191
|
+
}
|
|
192
|
+
const claude2Path = getClaude2SessionPath(cwd, sessionId);
|
|
193
|
+
if (existsSync2(claude2Path)) {
|
|
194
|
+
return await getClaudeStyleLastUserMessage(claude2Path);
|
|
195
|
+
}
|
|
196
|
+
const ollamaPath = getOllamaSessionPath(cwd, sessionId);
|
|
197
|
+
if (existsSync2(ollamaPath)) {
|
|
198
|
+
return await getClaudeStyleLastUserMessage(ollamaPath);
|
|
199
|
+
}
|
|
200
|
+
const codexPath = findCodexSessionPath(sessionId);
|
|
201
|
+
if (codexPath && existsSync2(codexPath)) {
|
|
202
|
+
return await getCodexLastUserMessage(codexPath);
|
|
203
|
+
}
|
|
204
|
+
const kimiPath = findKimiSessionPath(sessionId);
|
|
205
|
+
if (kimiPath && existsSync2(kimiPath)) {
|
|
206
|
+
return await getKimiLastUserMessage(kimiPath);
|
|
207
|
+
}
|
|
208
|
+
return void 0;
|
|
209
|
+
}
|
|
210
|
+
function filterCommandTags(text) {
|
|
211
|
+
let filtered = text.replace(/<command-[^>]*>[\s\S]*?<\/command-[^>]*>/g, "");
|
|
212
|
+
filtered = filtered.replace(/<local-command-[^>]*>[\s\S]*?<\/local-command-[^>]*>/g, "");
|
|
213
|
+
filtered = filtered.trim();
|
|
214
|
+
return filtered;
|
|
215
|
+
}
|
|
216
|
+
function isValidUserMessage(text) {
|
|
217
|
+
if (text.startsWith("This session is being continued")) return false;
|
|
218
|
+
if (text.startsWith("Caveat: The messages below")) return false;
|
|
219
|
+
if (!text.trim()) return false;
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
async function getClaudeStyleTitle(filePath) {
|
|
223
|
+
try {
|
|
224
|
+
const fileStream = createReadStream(filePath);
|
|
225
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
226
|
+
let summary = "";
|
|
227
|
+
const userMessages = [];
|
|
228
|
+
for await (const line of rl) {
|
|
229
|
+
if (!line.trim()) continue;
|
|
230
|
+
try {
|
|
231
|
+
const entry = JSON.parse(line);
|
|
232
|
+
if (entry.type === "summary" && entry.summary) {
|
|
233
|
+
summary = entry.summary;
|
|
234
|
+
}
|
|
235
|
+
if (entry.type === "user") {
|
|
236
|
+
const message = entry.message;
|
|
237
|
+
if (!message?.content) continue;
|
|
238
|
+
if (typeof message.content === "string") {
|
|
239
|
+
userMessages.push(message.content);
|
|
240
|
+
} else if (Array.isArray(message.content)) {
|
|
241
|
+
for (const block of message.content) {
|
|
242
|
+
if (block.type === "text" && block.text) userMessages.push(block.text);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
} catch {
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return generateTitle(summary, userMessages);
|
|
250
|
+
} catch {
|
|
251
|
+
return "Untitled Session";
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async function getClaudeStyleLastUserMessage(filePath) {
|
|
255
|
+
try {
|
|
256
|
+
const fileStream = createReadStream(filePath);
|
|
257
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
258
|
+
let lastUserMessage;
|
|
259
|
+
for await (const line of rl) {
|
|
260
|
+
if (!line.trim()) continue;
|
|
261
|
+
try {
|
|
262
|
+
const entry = JSON.parse(line);
|
|
263
|
+
if (entry.type !== "user") continue;
|
|
264
|
+
const message = entry.message;
|
|
265
|
+
if (!message?.content) continue;
|
|
266
|
+
let text = "";
|
|
267
|
+
if (typeof message.content === "string") {
|
|
268
|
+
text = message.content;
|
|
269
|
+
} else if (Array.isArray(message.content)) {
|
|
270
|
+
for (const block of message.content) {
|
|
271
|
+
if (block.type === "text" && block.text) {
|
|
272
|
+
text = block.text;
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (!text) continue;
|
|
278
|
+
const filtered = filterCommandTags(text);
|
|
279
|
+
if (filtered && isValidUserMessage(filtered)) {
|
|
280
|
+
lastUserMessage = filtered;
|
|
281
|
+
}
|
|
282
|
+
} catch {
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return lastUserMessage;
|
|
286
|
+
} catch {
|
|
287
|
+
return void 0;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async function getCodexLastUserMessage(filePath) {
|
|
291
|
+
try {
|
|
292
|
+
const fileStream = createReadStream(filePath);
|
|
293
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
294
|
+
let last;
|
|
295
|
+
for await (const line of rl) {
|
|
296
|
+
if (!line.trim()) continue;
|
|
297
|
+
let entry;
|
|
298
|
+
try {
|
|
299
|
+
entry = JSON.parse(line);
|
|
300
|
+
} catch {
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
if (entry.type !== "response_item") continue;
|
|
304
|
+
const payload = entry.payload;
|
|
305
|
+
if (!payload || payload.type !== "message" || payload.role !== "user") continue;
|
|
306
|
+
const text = payload.content?.filter((c) => c.type === "input_text" && c.text).map((c) => c.text).join("") || "";
|
|
307
|
+
if (!text || text.startsWith("<") || text.startsWith("#")) continue;
|
|
308
|
+
const filtered = filterCommandTags(text);
|
|
309
|
+
if (filtered && isValidUserMessage(filtered)) {
|
|
310
|
+
last = filtered;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return last;
|
|
314
|
+
} catch {
|
|
315
|
+
return void 0;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
async function getCodexTitle(filePath) {
|
|
319
|
+
try {
|
|
320
|
+
const fileStream = createReadStream(filePath);
|
|
321
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
322
|
+
for await (const line of rl) {
|
|
323
|
+
if (!line.trim()) continue;
|
|
324
|
+
let entry;
|
|
325
|
+
try {
|
|
326
|
+
entry = JSON.parse(line);
|
|
327
|
+
} catch {
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
if (entry.type !== "response_item") continue;
|
|
331
|
+
const payload = entry.payload;
|
|
332
|
+
if (!payload || payload.type !== "message" || payload.role !== "user") continue;
|
|
333
|
+
const text = payload.content?.filter((c) => c.type === "input_text" && c.text).map((c) => c.text).join("") || "";
|
|
334
|
+
if (!text || text.startsWith("<") || text.startsWith("#")) continue;
|
|
335
|
+
return text.slice(0, 80);
|
|
336
|
+
}
|
|
337
|
+
return void 0;
|
|
338
|
+
} catch {
|
|
339
|
+
return void 0;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
async function getKimiLastUserMessage(filePath) {
|
|
343
|
+
try {
|
|
344
|
+
const fileStream = createReadStream(filePath);
|
|
345
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
346
|
+
let last;
|
|
347
|
+
for await (const line of rl) {
|
|
348
|
+
if (!line.trim()) continue;
|
|
349
|
+
let entry;
|
|
350
|
+
try {
|
|
351
|
+
entry = JSON.parse(line);
|
|
352
|
+
} catch {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
if (entry.role !== "user") continue;
|
|
356
|
+
const text = typeof entry.content === "string" ? entry.content : Array.isArray(entry.content) ? entry.content.filter((c) => (c.type === "input_text" || c.type === "text") && c.text).map((c) => c.text).join("") : "";
|
|
357
|
+
if (!text || text.startsWith("<system") || text.startsWith("<environment") || text.startsWith("# AGENTS.md") || text.startsWith("<permissions")) {
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
const filtered = filterCommandTags(text);
|
|
361
|
+
if (filtered && isValidUserMessage(filtered)) {
|
|
362
|
+
last = filtered;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return last;
|
|
366
|
+
} catch {
|
|
367
|
+
return void 0;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
async function getKimiTitle(filePath) {
|
|
371
|
+
try {
|
|
372
|
+
const fileStream = createReadStream(filePath);
|
|
373
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
374
|
+
for await (const line of rl) {
|
|
375
|
+
if (!line.trim()) continue;
|
|
376
|
+
let entry;
|
|
377
|
+
try {
|
|
378
|
+
entry = JSON.parse(line);
|
|
379
|
+
} catch {
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
if (entry.role !== "user") continue;
|
|
383
|
+
const text = typeof entry.content === "string" ? entry.content : Array.isArray(entry.content) ? entry.content.filter((c) => (c.type === "input_text" || c.type === "text") && c.text).map((c) => c.text).join("") : "";
|
|
384
|
+
if (!text || text.startsWith("<system") || text.startsWith("<environment") || text.startsWith("# AGENTS.md") || text.startsWith("<permissions")) {
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
return text.slice(0, 80);
|
|
388
|
+
}
|
|
389
|
+
return void 0;
|
|
390
|
+
} catch {
|
|
391
|
+
return void 0;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function generateTitle(summary, userMessages) {
|
|
395
|
+
if (summary) return summary;
|
|
396
|
+
let commandName = "";
|
|
397
|
+
for (const msg of userMessages) {
|
|
398
|
+
const filtered = filterCommandTags(msg);
|
|
399
|
+
if (!filtered) continue;
|
|
400
|
+
if (filtered.startsWith("/") && !commandName) {
|
|
401
|
+
commandName = filtered;
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
if (commandName) {
|
|
405
|
+
return `${commandName} ${filtered}`;
|
|
406
|
+
}
|
|
407
|
+
return filtered;
|
|
408
|
+
}
|
|
409
|
+
if (commandName) return commandName;
|
|
410
|
+
return "Untitled Session";
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
export {
|
|
414
|
+
GLOBAL_STATE_FILE,
|
|
415
|
+
SCHEDULED_TASKS_FILE,
|
|
416
|
+
REVIEW_DIR,
|
|
417
|
+
REVIEW_SIGNAL_FILE,
|
|
418
|
+
CLAUDE2_DIR,
|
|
419
|
+
getTerminalHistoryPath,
|
|
420
|
+
getTerminalOutputPath,
|
|
421
|
+
ensureParentDir,
|
|
422
|
+
readJsonFile,
|
|
423
|
+
writeJsonFile,
|
|
424
|
+
updateGlobalState,
|
|
425
|
+
getSessionTitle,
|
|
426
|
+
getLastUserMessage
|
|
427
|
+
};
|
package/dist/scheduledTasks.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
CLAUDE2_DIR,
|
|
2
3
|
SCHEDULED_TASKS_FILE,
|
|
3
4
|
getSessionTitle,
|
|
4
5
|
readJsonFile,
|
|
5
6
|
updateGlobalState,
|
|
6
7
|
writeJsonFile
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KLV3PBIZ.mjs";
|
|
8
9
|
|
|
9
10
|
// src/lib/scheduledTasks.ts
|
|
10
11
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
@@ -72,7 +73,11 @@ async function sendChatMessage(task) {
|
|
|
72
73
|
"mcp__*"
|
|
73
74
|
],
|
|
74
75
|
permissionMode: "bypassPermissions",
|
|
75
|
-
allowDangerouslySkipPermissions: true
|
|
76
|
+
allowDangerouslySkipPermissions: true,
|
|
77
|
+
// For claude2 engine, override config directory to ~/.claude2
|
|
78
|
+
...task.engine === "claude2" && {
|
|
79
|
+
env: { ...process.env, CLAUDE_CONFIG_DIR: CLAUDE2_DIR }
|
|
80
|
+
}
|
|
76
81
|
};
|
|
77
82
|
await updateGlobalState(task.cwd, task.sessionId, "loading", void 0, task.message).catch(() => {
|
|
78
83
|
});
|
package/dist/wsServer.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getTerminalHistoryPath,
|
|
8
8
|
getTerminalOutputPath,
|
|
9
9
|
readJsonFile
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KLV3PBIZ.mjs";
|
|
11
11
|
|
|
12
12
|
// src/lib/wsServer.ts
|
|
13
13
|
import { WebSocketServer, WebSocket as WebSocket2 } from "ws";
|
|
@@ -426,7 +426,7 @@ function registerCommand(cmd) {
|
|
|
426
426
|
if (cmd.ptyProcess) {
|
|
427
427
|
const pty = cmd.ptyProcess;
|
|
428
428
|
pty.onData((data) => {
|
|
429
|
-
|
|
429
|
+
notifyOutputListeners(cmd.commandId, data);
|
|
430
430
|
});
|
|
431
431
|
const ptyPid = cmd.pid;
|
|
432
432
|
pty.onExit(async ({ exitCode }) => {
|
|
@@ -1385,7 +1385,7 @@ async function handleJupyter(ws, bubbleId, cwd) {
|
|
|
1385
1385
|
ws.send(JSON.stringify({ type: "ping" }));
|
|
1386
1386
|
}
|
|
1387
1387
|
}, HEARTBEAT_INTERVAL);
|
|
1388
|
-
const { kernelManager } = await import("./JupyterKernelManager-
|
|
1388
|
+
const { kernelManager } = await import("./JupyterKernelManager-VBKKSRVJ.mjs");
|
|
1389
1389
|
try {
|
|
1390
1390
|
const instance = await kernelManager.getOrCreate(bubbleId, cwd);
|
|
1391
1391
|
if (instance.errorMessage) {
|