@surething/cockpit 1.0.257 → 1.0.259
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 -3
- package/.next-prod/build-manifest.json +3 -3
- package/.next-prod/cockpit-build.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 +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.nft.json +1 -1
- package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/health/route.js.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/prompts/config/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +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.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.nft.json +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/settings/route.js.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/skills/route.js.nft.json +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.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/apps/[...path]/route.js.nft.json +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.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 -3
- package/.next-prod/server/chunks/151.js +1 -0
- package/.next-prod/server/chunks/3286.js +47 -29
- package/.next-prod/server/chunks/5750.js +13 -12
- package/.next-prod/server/chunks/6495.js +1 -1
- package/.next-prod/server/chunks/6548.js +1 -1
- package/.next-prod/server/chunks/7270.js +3 -3
- package/.next-prod/server/chunks/{8557.js → 9004.js} +5 -5
- package/.next-prod/server/middleware-build-manifest.js +1 -1
- package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
- package/.next-prod/server/pages/404.html +2 -2
- package/.next-prod/server/pages/500.html +1 -1
- package/.next-prod/server/server-reference-manifest.json +1 -1
- package/.next-prod/static/chunks/{1372-cc9afa045dc4eb5e.js → 1372-d94b8f9ed5cd2713.js} +1 -1
- package/.next-prod/static/chunks/{9592-a657fb9eb995b64d.js → 2653-3f8bfa49727caa72.js} +4 -4
- package/.next-prod/static/chunks/6784-ec12c61b77c64dc0.js +381 -0
- package/.next-prod/static/chunks/7482-3ffe7da02d3e7f45.js +26 -0
- package/.next-prod/static/chunks/9b0008ae.d0c8feea26186989.js +45 -0
- package/.next-prod/static/chunks/app/{layout-0bbc63707f5e01ad.js → layout-fef0d44c94fcb415.js} +1 -1
- package/.next-prod/static/chunks/app/{page-1cbf8dcf1693be8e.js → page-824be00a023f34d7.js} +1 -1
- package/.next-prod/static/chunks/app/project/{page-1cbf8dcf1693be8e.js → page-824be00a023f34d7.js} +1 -1
- package/.next-prod/static/chunks/{webpack-37498a2c8333d458.js → webpack-ce60587570394496.js} +1 -1
- package/.next-prod/static/css/a82580b2376d7cae.css +1 -0
- package/.next-prod/trace +14 -14
- package/.next-prod/trace-build +1 -1
- package/dist/scheduledTasks.mjs +66 -32
- package/dist/wsServer.mjs +62 -8
- package/package.json +2 -2
- package/public/html-lib/pdf-viewer.js +12 -12
- package/public/pdfjs/pdf.worker.min.mjs +4 -4
- package/.next-prod/static/chunks/6626-ff5f196a882eb10d.js +0 -25
- package/.next-prod/static/chunks/6784-d8d3cdd1f9772760.js +0 -381
- package/.next-prod/static/chunks/9b0008ae.295c31138a16177d.js +0 -45
- package/.next-prod/static/css/2334aed02a409f57.css +0 -1
- /package/.next-prod/static/{T5LH07mcmVVJLxAn03pYJ → F9dxCcbBY_bNPY4fxWaWe}/_buildManifest.js +0 -0
- /package/.next-prod/static/{T5LH07mcmVVJLxAn03pYJ → F9dxCcbBY_bNPY4fxWaWe}/_ssgManifest.js +0 -0
package/.next-prod/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":15323183,"timestamp":201131876,"id":14,"parentId":1,"tags":{},"startTime":1786422449404,"traceId":"7cadf068a6784d3c"},{"name":"run-typescript","duration":4992664,"timestamp":216458882,"id":1452,"parentId":1,"tags":{},"startTime":1786422464731,"traceId":"7cadf068a6784d3c"},{"name":"static-check","duration":1327287,"timestamp":221492054,"id":1455,"parentId":1,"tags":{},"startTime":1786422469764,"traceId":"7cadf068a6784d3c"},{"name":"static-generation","duration":5965954,"timestamp":222991251,"id":1759,"parentId":1,"tags":{},"startTime":1786422471263,"traceId":"7cadf068a6784d3c"},{"name":"collect-build-traces","duration":23666069,"timestamp":222819965,"id":1756,"parentId":1,"tags":{},"startTime":1786422471092,"traceId":"7cadf068a6784d3c"},{"name":"telemetry-flush","duration":48,"timestamp":246489921,"id":1768,"parentId":1,"tags":{},"startTime":1786422494762,"traceId":"7cadf068a6784d3c"},{"name":"next-build","duration":45537601,"timestamp":200952379,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1786422449225,"traceId":"7cadf068a6784d3c"}]
|
package/dist/scheduledTasks.mjs
CHANGED
|
@@ -535,7 +535,7 @@ description: "\u5B8C\u6574\u4EE3\u7801\u5BA1\u67E5:\u9759\u6001 + \u52A8\u6001\u
|
|
|
535
535
|
|
|
536
536
|
subagent prompt \u6A21\u677F:\`\u8BFB\u672C skill (cr/SKILL.md),\u53EA\u5BF9 <\u4F60\u90A3\u5757(Part A \u5168\u90E8 / \u67D0\u4E2A\u52A8\u6001\u5207\u7247)> \u5E94\u7528\u5BF9\u5E94 Part,\u81EA\u884C triage,\u6309\u7EDF\u4E00\u683C\u5F0F\u8F93\u51FA findings\`\u3002
|
|
537
537
|
|
|
538
|
-
**Synthesis(\u4E3B\u4F1A\u8BDD,\u53EA\u6574\u7406\u4E0D\u91CD\u5224)**:\u6C47\u603B\u5404 subagent \u7684 findings \u2192 \u53BB\u91CD(\u540C\u6839\u56E0\u6807"\u5171\u72AF")\u2192 \u5F71\u54CD \xD7 \u6982\u7387\u6392\u5E8F \u2192 \u4E00\u4EFD\u62A5\u544A + \u68AF\u5EA6\u56FE\u3002**\u7981\u6B62\u7528\u4E3B\u4F1A\u8BDD\u7684\u5F00\u53D1\u4E0A\u4E0B\u6587\u7ED9\u4EFB\u4F55 finding \u6D17\u767D / \u964D\u7EA7**\u2014\u2014subagent \u600E\u4E48\u5224\u5C31\u600E\u4E48\u6536\u3002\u8981\u8D28\u7591\u67D0\u6761,**\u91CD\u65B0 spawn \u4E00\u4E2A\u5E72\u51C0 subagent \u590D\u6838**,\u800C\u4E0D\u662F\u4E3B\u4F1A\u8BDD\u81EA\u5DF1\u62CD\u3002
|
|
538
|
+
**Synthesis(\u4E3B\u4F1A\u8BDD,\u53EA\u6574\u7406\u4E0D\u91CD\u5224)**:\u6C47\u603B\u5404 subagent \u7684 findings \u2192 \u53BB\u91CD(\u540C\u6839\u56E0\u6807"\u5171\u72AF")\u2192 \u5F71\u54CD \xD7 \u6982\u7387\u6392\u5E8F \u2192 \u4E00\u4EFD\u62A5\u544A + \u68AF\u5EA6\u56FE\u3002**\u7981\u6B62\u7528\u4E3B\u4F1A\u8BDD\u7684\u5F00\u53D1\u4E0A\u4E0B\u6587\u7ED9\u4EFB\u4F55 finding \u6D17\u767D / \u964D\u7EA7**\u2014\u2014subagent \u600E\u4E48\u5224\u5C31\u600E\u4E48\u6536\u3002\u8981\u8D28\u7591\u67D0\u6761,**\u91CD\u65B0 spawn \u4E00\u4E2A\u5E72\u51C0 subagent \u590D\u6838**,\u800C\u4E0D\u662F\u4E3B\u4F1A\u8BDD\u81EA\u5DF1\u62CD\u3002\u4E3B\u4F1A\u8BDD\u53EF\u4EE5\u628A\u7ED3\u679C\u6574\u7406\u6210\u77ED\u8868,\u4F46**\u5C55\u5F00\u8BE6\u60C5\u5FC5\u987B\u4FDD\u7559 subagent \u7684\u5173\u952E\u8BC1\u636E\u5BC6\u5EA6**:\u52A8\u6001 finding \u7684\u72B6\u6001\u56FE / \u65F6\u95F4\u7EBF / \u53D8\u66F4\u8F68\u8FF9 / \u53CD\u4F8B\u8DEF\u5F84,\u9759\u6001 finding \u7684\u4E09\u89D2\u6821\u9A8C\u8BC1\u636E,\u90FD\u8981\u642C\u5230\u5BF9\u5E94\u7F16\u53F7\u8BE6\u60C5\u91CC\u3002\u5141\u8BB8\u53BB\u91CD\u548C\u5220\u6389\u91CD\u590D\u63AA\u8F9E,\u4E0D\u5141\u8BB8\u628A subagent \u7684\u8BE6\u7EC6\u6A21\u578B\u538B\u6210\u4E00\u53E5\u6458\u8981\u3002
|
|
539
539
|
|
|
540
540
|
> \u53D6\u820D:\u9ED8\u8BA4 2-subagent \u65E2\u9694\u79BB\u5F00\u53D1\u6C61\u67D3\u3001\u53C8\u6D88\u6389\u9759\u6001\u644A\u8584\u52A8\u6001;hard \u7684 per-slice fan-out \u662F\u989D\u5916\u6DF1\u5EA6(\u5B9E\u6D4B\u628A image/video \u6316\u5230 \u{1F534} + \u591A subagent \u72EC\u7ACB\u6536\u655B\u63D0\u7F6E\u4FE1\u5EA6),\u8D35\u4E14\u6162,\u7531\u7528\u6237\u663E\u5F0F\u9009\u7528(\u4E0D\u81EA\u52A8\u5347\u6863)\u3002
|
|
541
541
|
|
|
@@ -625,22 +625,31 @@ correctness \u8FD9\u4E2A"\u672A\u77E5\u70B9",\u9760 **\u610F\u56FE / \u8F93\u516
|
|
|
625
625
|
|
|
626
626
|
---
|
|
627
627
|
|
|
628
|
-
## \u4EA7\u51FA findings(\
|
|
628
|
+
## \u4EA7\u51FA findings(\u7B80\u8868 + \u8BE6\u60C5)
|
|
629
629
|
|
|
630
|
-
\u4E25\u91CD\u5EA6 = **\u5F71\u54CD \xD7 \u6982\u7387**,\u76F4\u63A5\u7ED9\u4E58\u79EF\u7ED3\u8BBA,\u522B\u8BA9\u8BFB\u8005\u81EA\u5DF1\u6362\u7B97\u3002\u4E24\u8DEF findings \u5408\u5E76\u53BB\u91CD,\
|
|
630
|
+
\u4E25\u91CD\u5EA6 = **\u5F71\u54CD \xD7 \u6982\u7387**,\u76F4\u63A5\u7ED9\u4E58\u79EF\u7ED3\u8BBA,\u522B\u8BA9\u8BFB\u8005\u81EA\u5DF1\u6362\u7B97\u3002\u4E24\u8DEF findings \u5408\u5E76\u53BB\u91CD\u540E,\u5148\u8F93\u51FA\u4E00\u5F20**\u77ED\u5217\u8868\u683C**\u7528\u4E8E\u5FEB\u901F\u626B\u63CF,\u518D\u6309\u7F16\u53F7\u5C55\u5F00\u8BC1\u636E\u3002\u4E0D\u8981\u628A\u957F\u8BC1\u636E\u585E\u8FDB\u8868\u683C cell,\u5426\u5219\u804A\u5929\u7A97\u53E3\u4F1A\u628A\u5217\u6324\u6210\u96BE\u8BFB\u7684\u7A84\u5217\u3002
|
|
631
|
+
|
|
632
|
+
| # | \u4E25\u91CD\u5EA6 | \u4F4D\u7F6E | \u95EE\u9898\u540E\u679C | \u5904\u7406\u65B9\u5411 |
|
|
633
|
+
|---|---|---|---|---|
|
|
634
|
+
| 1 | \u{1F534}/\u{1F7E1}/\u26AA | \`file:line\` | \u4E0D\u4FEE\u4F1A\u53D1\u751F\u4EC0\u4E48(\u4E00\u53E5\u5927\u767D\u8BDD\u540E\u679C,\u4E0D\u5E26\u672F\u8BED) | \u4E00\u53E5\u8BDD\u8BF4\u660E\u4FEE\u590D\u65B9\u5411 |
|
|
635
|
+
|
|
636
|
+
\u7136\u540E\u6309\u8868\u683C\u7F16\u53F7\u5C55\u5F00:
|
|
631
637
|
|
|
632
638
|
\`\`\`
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
639
|
+
### #1 <\u4E00\u53E5\u8BDD\u540E\u679C>
|
|
640
|
+
\u5F71\u54CD: \u574F\u5230\u4EC0\u4E48\u7A0B\u5EA6 + \u574F\u7ED9\u8C01(\u5177\u4F53:\u54EA\u7C7B\u7528\u6237 / \u79DF\u6237 / \u8C03\u7528\u65B9,\u800C\u975E\u6CDB\u6307"\u7528\u6237")
|
|
641
|
+
\u6982\u7387: \u591A\u5927\u6982\u7387\u53D1\u751F + \u53D6\u51B3\u4E8E\u4EC0\u4E48;\u82E5\u5F85\u9A8C\u8BC1,\u5199\u660E\u5982\u4F55\u5347\u964D\u6863
|
|
642
|
+
\u8BC1\u636E: \u9759\u6001 \u2192 \u4E09\u89D2\u6821\u9A8C\u91CC\u54EA\u4E2A\u53C2\u7167\u5BF9\u4E0D\u4E0A(\u610F\u56FE / \u8F93\u5165\u57DF / \u5468\u906D);\u52A8\u6001 \u2192 \u4FDD\u7559 subagent \u7ED9\u51FA\u7684\u72B6\u6001\u56FE / \u65F6\u95F4\u7EBF / \u53D8\u66F4\u8F68\u8FF9 / \u53CD\u4F8B\u8DEF\u5F84,\u4E0D\u8981\u53EA\u6458\u8981\u6210\u4E00\u53E5
|
|
643
|
+
\u6B63\u89E3: \u5E94\u8BE5\u662F\u4EC0\u4E48 / \u88AB\u7834\u574F\u7684\u4E0D\u53D8\u91CF(\u672F\u8BED\u653E\u8FD9\u91CC)
|
|
638
644
|
\`\`\`
|
|
639
645
|
|
|
640
|
-
- \u{1F534} \u9AD8\u6982\u7387 \xD7 \u5927\u5F71\u54CD(\u5361\u53D1\u5E03) | \u{1F7E1} \u8BE5\u4FEE\u4F46\u4E0D\u6D41\u8840 | \u26AA \u987A\u624B\u3002\u964D\u5E8F\u8F93\u51FA\u3002
|
|
641
|
-
- \
|
|
642
|
-
- \
|
|
643
|
-
- \
|
|
646
|
+
- \u{1F534} \u9AD8\u6982\u7387 \xD7 \u5927\u5F71\u54CD(\u5361\u53D1\u5E03) | \u{1F7E1} \u8BE5\u4FEE\u4F46\u4E0D\u6D41\u8840 | \u26AA \u987A\u624B\u3002\u77ED\u5217\u8868\u683C\u6309\u4E25\u91CD\u5EA6\u964D\u5E8F\u8F93\u51FA\u3002
|
|
647
|
+
- \`\u95EE\u9898\u540E\u679C\` \u53EA\u5199**\u540E\u679C**,\u4E0D\u5199\u6280\u672F\u539F\u56E0(\u539F\u56E0\u653E\u5C55\u5F00\u8BE6\u60C5\u7684 \`\u8BC1\u636E\` / \`\u6B63\u89E3\`)\u3002
|
|
648
|
+
- \`\u4F4D\u7F6E\` \u7528\u53EF\u5B9A\u4F4D\u7684 \`file:line\`;\u5982\u679C\u662F\u5408\u5E76\u540E\u7684\u5171\u72AF finding,\u8868\u683C\u7528\u6700\u6838\u5FC3\u4F4D\u7F6E,\u5728\u5C55\u5F00\u8BE6\u60C5\u7684 \`\u8BC1\u636E\` \u4E2D\u8865\u5145\u5176\u5B83\u4F4D\u7F6E\u3002
|
|
649
|
+
- \`\u5904\u7406\u65B9\u5411\` \u5728\u77ED\u8868\u91CC\u53EA\u5199\u4E00\u53E5,\u5B8C\u6574 \`\u6B63\u89E3\` \u653E\u5C55\u5F00\u8BE6\u60C5\u3002
|
|
650
|
+
- \u5C55\u5F00\u8BE6\u60C5\u662F\u4FE1\u606F\u5B8C\u6574\u9762:\u5982\u679C subagent \u5DF2\u7ED9\u51FA\u52A8\u6001\u6A21\u578B\u3001\u65F6\u95F4\u7EBF\u3001\u8DEF\u5F84\u7F16\u53F7\u6216\u5173\u952E\u4EE3\u7801\u4F4D\u7F6E,\u6700\u7EC8\u62A5\u544A\u5FC5\u987B\u4FDD\u7559\u8FD9\u4E9B\u7EC6\u8282;\u77ED\u8868\u53EF\u4EE5\u7B80,\u8BE6\u60C5\u4E0D\u80FD\u628A\u8BC1\u636E\u538B\u6CA1\u3002
|
|
651
|
+
- \u591A\u6761\u540C\u6839\u56E0 \u2192 \u5728 \`\u95EE\u9898\u540E\u679C\` \u6216\u5C55\u5F00\u8BE6\u60C5\u7684 \`\u8BC1\u636E\` \u6807 **"\u5171\u72AF"** \u5E76\u5408\u5E76\u6210\u4E00\u6761,\u522B\u540C\u4E00\u95EE\u9898\u62A5\u4E24\u904D(\u5C24\u5176\u9759\u6001/\u52A8\u6001\u5BF9\u540C\u4E00\u884C\u5404\u770B\u4E00\u9762\u65F6)\u3002
|
|
652
|
+
- \u8868\u683C\u540E\u53EA\u5C55\u5F00\u6BCF\u6761 finding \u4E00\u6B21;\u4E0D\u8981\u518D\u91CD\u590D\u4E00\u5F20 7 \u5217\u957F\u8868\u3002
|
|
644
653
|
- \u6536\u5C3E\u7ED9\u4E00\u5F20 **\u5F71\u54CD \xD7 \u6982\u7387** \u68AF\u5EA6\u56FE:
|
|
645
654
|
|
|
646
655
|
\`\`\`
|
|
@@ -681,7 +690,7 @@ Three tiers by scale (**all enter at least one clean subagent**). **You pick bet
|
|
|
681
690
|
|
|
682
691
|
Subagent prompt template: \`Read this skill (cr/SKILL.md); apply only the matching Part to <your chunk (all of Part A / one dynamic slice)>, triage it yourself, and output findings in the unified format\`.
|
|
683
692
|
|
|
684
|
-
**Synthesis (main session, organize only \u2014 never re-judge)**: gather each subagent's findings \u2192 dedup (mark same-root-cause as "accomplices") \u2192 sort by impact \xD7 probability \u2192 one report + gradient chart. **It is forbidden to use the main session's dev context to whitewash / downgrade any finding** \u2014 take what the subagent judged as-is. To dispute one, **spawn a fresh clean subagent to re-check**, not the main session deciding on its own.
|
|
693
|
+
**Synthesis (main session, organize only \u2014 never re-judge)**: gather each subagent's findings \u2192 dedup (mark same-root-cause as "accomplices") \u2192 sort by impact \xD7 probability \u2192 one report + gradient chart. **It is forbidden to use the main session's dev context to whitewash / downgrade any finding** \u2014 take what the subagent judged as-is. To dispute one, **spawn a fresh clean subagent to re-check**, not the main session deciding on its own. The main session may organize the result into a short summary table, but the **expanded details must preserve the subagent's key evidence density**: for dynamic findings, carry over the state diagram / timeline / change trajectory / counterexample path; for static findings, carry over the triangulation evidence. Deduplication and wording cleanup are allowed; compressing a detailed subagent model into a one-line summary is not.
|
|
685
694
|
|
|
686
695
|
> Trade-off: the default 2-subagent both isolates dev pollution and removes static-dilutes-dynamic; hard's per-slice fan-out is extra depth (in practice it dug image/video up to \u{1F534}, and multiple independently-converging subagents raised confidence), expensive and slow, selected explicitly by the user (never auto-escalated).
|
|
687
696
|
|
|
@@ -771,22 +780,31 @@ These two diagrams are the evidence \u2014 many bugs (a 6-second gap, a key crea
|
|
|
771
780
|
|
|
772
781
|
---
|
|
773
782
|
|
|
774
|
-
## Produce findings (
|
|
783
|
+
## Produce findings (summary table + details)
|
|
775
784
|
|
|
776
|
-
Severity = **impact \xD7 probability**; give the product conclusion directly, don't make the reader do the math. Merge and dedup findings from both tracks,
|
|
785
|
+
Severity = **impact \xD7 probability**; give the product conclusion directly, don't make the reader do the math. Merge and dedup findings from both tracks. First output a **short summary table** for scanning, then expand each finding by number. Do not put long evidence into table cells; chat windows squeeze wide Markdown tables into unreadable narrow columns.
|
|
786
|
+
|
|
787
|
+
| # | Severity | Location | Consequence | Direction |
|
|
788
|
+
|---|---|---|---|---|
|
|
789
|
+
| 1 | \u{1F534}/\u{1F7E1}/\u26AA | \`file:line\` | What happens if unfixed (one plain-language consequence, no jargon) | One-sentence repair direction |
|
|
790
|
+
|
|
791
|
+
Then expand by table number:
|
|
777
792
|
|
|
778
793
|
\`\`\`
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
794
|
+
### #1 <one-line consequence>
|
|
795
|
+
Impact: how bad + to whom (specific: which users / tenants / callers, not a vague "users")
|
|
796
|
+
Probability: how likely + what it depends on; if uncertain, say how to raise/lower the tier
|
|
797
|
+
Evidence: static \u2192 which triangulation reference fails (intent / input domain / surroundings); dynamic \u2192 preserve the subagent's state diagram / timeline / change trajectory / counterexample path, not a one-line summary
|
|
798
|
+
Fix: what it should be / the broken invariant (jargon goes here)
|
|
784
799
|
\`\`\`
|
|
785
800
|
|
|
786
|
-
- \u{1F534} high probability \xD7 big impact (blocks release) | \u{1F7E1} should fix but not bleeding | \u26AA nice-to-have.
|
|
787
|
-
-
|
|
788
|
-
-
|
|
789
|
-
-
|
|
801
|
+
- \u{1F534} high probability \xD7 big impact (blocks release) | \u{1F7E1} should fix but not bleeding | \u26AA nice-to-have. Sort summary table rows in descending severity.
|
|
802
|
+
- \`Consequence\` states the **outcome**, not the technical cause (cause goes in the expanded \`Evidence\` / \`Fix\`).
|
|
803
|
+
- \`Location\` must be a precise \`file:line\`; for a merged accomplice finding, use the core location in the table and mention other locations in the expanded \`Evidence\`.
|
|
804
|
+
- Keep \`Direction\` in the summary table to one sentence; put the complete \`Fix\` in the expanded detail.
|
|
805
|
+
- Expanded details are the complete information surface: if a subagent provided a dynamic model, timeline, path labels, or key code locations, the final report must carry those details forward; the summary table may be short, the detail must not erase evidence.
|
|
806
|
+
- Multiple same-root-cause \u2192 mark as **"accomplices"** in \`Consequence\` or expanded \`Evidence\` and merge into one finding; don't report the same problem twice (especially when static/dynamic each see one side of the same line).
|
|
807
|
+
- Expand each finding only once after the table; don't also emit a 7-column long table.
|
|
790
808
|
- Close with an **impact \xD7 probability** gradient chart:
|
|
791
809
|
|
|
792
810
|
\`\`\`
|
|
@@ -1170,13 +1188,13 @@ Finally emit [Overall recap: end-to-end interaction verification + total deliver
|
|
|
1170
1188
|
// packages/feature/agent/src/server/lib/htmlPrompt.ts
|
|
1171
1189
|
var HTML_PROMPT_ZH = `---
|
|
1172
1190
|
name: html
|
|
1173
|
-
description: "\u751F\u6210\u53EF\u4EA4\u4E92\u7684\
|
|
1174
|
-
argument-hint: "\u63CF\u8FF0\u4F60\u60F3\u8981\u7684\
|
|
1191
|
+
description: "\u751F\u6210\u53EF\u4EA4\u4E92\u7684 HTML \u5E94\u7528\uFF1A\u5185\u7F6E cockpit bash SDK\uFF0C\u6267\u884C\u547D\u4EE4\u53D6/\u6539\u6570\u636E"
|
|
1192
|
+
argument-hint: "\u63CF\u8FF0\u4F60\u60F3\u8981\u7684 HTML \u5E94\u7528"
|
|
1175
1193
|
---
|
|
1176
1194
|
|
|
1177
|
-
# \u751F\u6210 Cockpit \
|
|
1195
|
+
# \u751F\u6210 Cockpit HTML \u5E94\u7528
|
|
1178
1196
|
|
|
1179
|
-
\u4E00\u4E2A\u80FD\u53D6/\u6539\u6570\u636E\u7684\
|
|
1197
|
+
\u4E00\u4E2A\u80FD\u53D6/\u6539\u6570\u636E\u7684 HTML \u5E94\u7528\uFF1A\u9884\u89C8\u65F6\u6CE8\u5165\u4E86\u5168\u5C40 \`window.cockpit\` SDK \u2014\u2014 \u672C\u8D28\u5C31\u662F Bash
|
|
1180
1198
|
\u5DE5\u5177\u66B4\u9732\u7ED9\u9875\u9762\uFF0C\u9875\u9762\u6309\u94AE\u80FD \`curl\`\u3001\u8BFB\u5199\u6587\u4EF6\u3001\u8DD1\u811A\u672C\u3002
|
|
1181
1199
|
|
|
1182
1200
|
**\u9ED8\u8BA4\u7528 React \u5199**\uFF08\u4E0B\u9762\u7684\u672C\u5730\u96F6\u6784\u5EFA\u6808\uFF0Cproductized\u3001AI \u6700\u719F\uFF0C\u9002\u5408\u6709\u72B6\u6001 / \u591A\u89C6\u56FE /
|
|
@@ -1187,7 +1205,7 @@ argument-hint: "\u63CF\u8FF0\u4F60\u60F3\u8981\u7684\u5C0F\u5E94\u7528"
|
|
|
1187
1205
|
|
|
1188
1206
|
**\u522B\u4E00\u4E0A\u6765\u5C31\u5199\u6587\u4EF6**\uFF0C\u5206\u4E09\u6B65\uFF1A
|
|
1189
1207
|
|
|
1190
|
-
1. **\u5BF9\u9F50\u9700\u6C42** \u2014\u2014 \u5148\u590D\u8FF0\u4F60\u5BF9\u8FD9\u4E2A\
|
|
1208
|
+
1. **\u5BF9\u9F50\u9700\u6C42** \u2014\u2014 \u5148\u590D\u8FF0\u4F60\u5BF9\u8FD9\u4E2A HTML \u5E94\u7528\u7684\u7406\u89E3\uFF08\u505A\u4EC0\u4E48\u3001\u7528 React \u8FD8\u662F\u5355\u6587\u4EF6\u3001\u6570\u636E\u4ECE\u54EA\u6765\u3001
|
|
1191
1209
|
\u5173\u952E\u529F\u80FD\u4E0E\u4EA4\u4E92\uFF09\u3002\u4EC5\u5F53\u9700\u6C42\u6709\u6B67\u4E49\u6216\u5B58\u5728\u591A\u79CD\u5408\u7406\u89E3\u8BFB\u65F6\u624D\u56DE\u95EE\uFF1B\u5DF2\u7ECF\u6E05\u695A\u5C31\u76F4\u63A5\u7ED9\u4E00\u6BB5\u7B80\u77ED
|
|
1192
1210
|
\u7684\u7406\u89E3\u6458\u8981\uFF0C\u4E0D\u5FC5\u9010\u6761\u8FFD\u95EE\u3002
|
|
1193
1211
|
2. **\u544A\u77E5\u5B58\u653E\u76EE\u5F55** \u2014\u2014 \u6309\u4E0B\u9762\u300C\u5B58\u653E\u4F4D\u7F6E\u300D\u89C4\u5219\u5B9A\u51FA \`<\u76EE\u5F55>/<name>/\`\uFF0C\u660E\u786E\u544A\u8BC9\u7528\u6237\u51C6\u5907\u5B58\u54EA\u3001
|
|
@@ -18023,6 +18041,7 @@ var en_default2 = {
|
|
|
18023
18041
|
cancel: "Cancel",
|
|
18024
18042
|
delete: "Delete",
|
|
18025
18043
|
close: "Close",
|
|
18044
|
+
minimize: "Minimize",
|
|
18026
18045
|
copy: "Copy",
|
|
18027
18046
|
edit: "Edit",
|
|
18028
18047
|
file: "File",
|
|
@@ -18085,6 +18104,13 @@ var en_default2 = {
|
|
|
18085
18104
|
added: "Added to HTML panel",
|
|
18086
18105
|
alreadyAdded: "Already added",
|
|
18087
18106
|
addFailed: "Failed to add",
|
|
18107
|
+
add: "Add",
|
|
18108
|
+
adding: "Adding...",
|
|
18109
|
+
addHtmlApp: "Add HTML app",
|
|
18110
|
+
searchPlaceholder: "Search HTML apps...",
|
|
18111
|
+
pathLabel: "Absolute path to the .html file",
|
|
18112
|
+
invalid: "Invalid",
|
|
18113
|
+
noDescription: "No description",
|
|
18088
18114
|
emptyNoApps: "No HTML apps yet.",
|
|
18089
18115
|
emptyCreatePrefix: "Use",
|
|
18090
18116
|
emptyCreateSuffix: "in chat to create a new app.",
|
|
@@ -18562,7 +18588,7 @@ var en_default2 = {
|
|
|
18562
18588
|
singleColumn: "Single column",
|
|
18563
18589
|
dualColumn: "Dual column",
|
|
18564
18590
|
envVars: "Environment Variables",
|
|
18565
|
-
|
|
18591
|
+
launchShell: "Launch interactive shell",
|
|
18566
18592
|
htmlApps: "HTML apps",
|
|
18567
18593
|
inputPlaceholder: "Enter command or URL and press Enter... (\u2191\u2193 history, Tab complete)",
|
|
18568
18594
|
scopeProject: "Project",
|
|
@@ -19218,6 +19244,7 @@ var zh_default = {
|
|
|
19218
19244
|
cancel: "\u53D6\u6D88",
|
|
19219
19245
|
delete: "\u5220\u9664",
|
|
19220
19246
|
close: "\u5173\u95ED",
|
|
19247
|
+
minimize: "\u6700\u5C0F\u5316",
|
|
19221
19248
|
copy: "\u590D\u5236",
|
|
19222
19249
|
edit: "\u7F16\u8F91",
|
|
19223
19250
|
file: "\u6587\u4EF6",
|
|
@@ -19275,11 +19302,18 @@ var zh_default = {
|
|
|
19275
19302
|
current: "\u5F53\u524D"
|
|
19276
19303
|
},
|
|
19277
19304
|
htmlApps: {
|
|
19278
|
-
title: "HTML \
|
|
19305
|
+
title: "HTML \u5E94\u7528",
|
|
19279
19306
|
addTooltip: "\u6DFB\u52A0\u5230 HTML \u9762\u677F",
|
|
19280
19307
|
added: "\u5DF2\u6DFB\u52A0\u5230 HTML \u9762\u677F",
|
|
19281
19308
|
alreadyAdded: "\u5DF2\u6DFB\u52A0\u8FC7",
|
|
19282
19309
|
addFailed: "\u6DFB\u52A0\u5931\u8D25",
|
|
19310
|
+
add: "\u6DFB\u52A0",
|
|
19311
|
+
adding: "\u6DFB\u52A0\u4E2D...",
|
|
19312
|
+
addHtmlApp: "\u6DFB\u52A0 HTML \u5E94\u7528",
|
|
19313
|
+
searchPlaceholder: "\u641C\u7D22 HTML \u5E94\u7528...",
|
|
19314
|
+
pathLabel: ".html \u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84",
|
|
19315
|
+
invalid: "\u65E0\u6548",
|
|
19316
|
+
noDescription: "\u65E0\u63CF\u8FF0",
|
|
19283
19317
|
emptyNoApps: "\u8FD8\u6CA1\u6709 HTML \u5E94\u7528\u3002",
|
|
19284
19318
|
emptyCreatePrefix: "\u5728\u804A\u5929\u91CC\u4F7F\u7528",
|
|
19285
19319
|
emptyCreateSuffix: "\u521B\u5EFA\u65B0\u5E94\u7528\u3002",
|
|
@@ -19757,7 +19791,7 @@ var zh_default = {
|
|
|
19757
19791
|
singleColumn: "\u5355\u5217\u5E03\u5C40",
|
|
19758
19792
|
dualColumn: "\u53CC\u5217\u5E03\u5C40",
|
|
19759
19793
|
envVars: "\u73AF\u5883\u53D8\u91CF",
|
|
19760
|
-
|
|
19794
|
+
launchShell: "\u542F\u52A8\u4EA4\u4E92\u7EC8\u7AEF",
|
|
19761
19795
|
htmlApps: "HTML \u5E94\u7528",
|
|
19762
19796
|
inputPlaceholder: "\u8F93\u5165\u547D\u4EE4\u6216\u7F51\u5740\u5E76\u6309 Enter... (\u2191\u2193 \u5386\u53F2, Tab \u8865\u5168)",
|
|
19763
19797
|
scopeProject: "\u9879\u76EE",
|
package/dist/wsServer.mjs
CHANGED
|
@@ -844,9 +844,62 @@ var runJupyterHandler = (ws, bubbleId, cwd) => {
|
|
|
844
844
|
};
|
|
845
845
|
|
|
846
846
|
// src/lib/effect/terminalHandler.ts
|
|
847
|
-
import { spawn, execSync } from "child_process";
|
|
847
|
+
import { spawn, execFileSync, execSync } from "child_process";
|
|
848
848
|
import * as nodePty from "node-pty";
|
|
849
849
|
var HEARTBEAT5 = Schedule_exports.spaced("30 seconds");
|
|
850
|
+
var OPEN_PREFERRED_SHELL_COMMAND = "__cockpit_open_preferred_shell__";
|
|
851
|
+
function commandPath(command) {
|
|
852
|
+
try {
|
|
853
|
+
const found = execSync(`command -v ${command}`, {
|
|
854
|
+
encoding: "utf-8",
|
|
855
|
+
timeout: 3e3
|
|
856
|
+
}).trim().split(/\r?\n/)[0];
|
|
857
|
+
return found || null;
|
|
858
|
+
} catch {
|
|
859
|
+
return null;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
function loginShellArgs(shell) {
|
|
863
|
+
if (shell === "bash") return ["--login"];
|
|
864
|
+
return ["-l"];
|
|
865
|
+
}
|
|
866
|
+
function resolvePreferredPtyShell(cwd) {
|
|
867
|
+
if (isWindows) {
|
|
868
|
+
try {
|
|
869
|
+
const wslShell = execFileSync(
|
|
870
|
+
"wsl.exe",
|
|
871
|
+
[
|
|
872
|
+
"sh",
|
|
873
|
+
"-lc",
|
|
874
|
+
"command -v zsh >/dev/null 2>&1 && printf zsh || { command -v bash >/dev/null 2>&1 && printf bash; }"
|
|
875
|
+
],
|
|
876
|
+
{ encoding: "utf-8", timeout: 3e3 }
|
|
877
|
+
).trim();
|
|
878
|
+
if (wslShell === "zsh" || wslShell === "bash") {
|
|
879
|
+
return {
|
|
880
|
+
file: "wsl.exe",
|
|
881
|
+
args: ["--cd", cwd, "--exec", wslShell, ...loginShellArgs(wslShell)],
|
|
882
|
+
cwd: process.cwd(),
|
|
883
|
+
name: wslShell
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
} catch {
|
|
887
|
+
}
|
|
888
|
+
} else {
|
|
889
|
+
for (const shell of ["zsh", "bash", "sh"]) {
|
|
890
|
+
const file = commandPath(shell);
|
|
891
|
+
if (file) return { file, args: loginShellArgs(shell), cwd, name: shell };
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
const fallback = getDefaultShell();
|
|
895
|
+
const fallbackName = fallback.split(/[\\/]/).pop() || fallback;
|
|
896
|
+
return {
|
|
897
|
+
file: fallback,
|
|
898
|
+
args: isWindows ? [] : loginShellArgs(fallbackName),
|
|
899
|
+
cwd,
|
|
900
|
+
name: fallbackName
|
|
901
|
+
};
|
|
902
|
+
}
|
|
850
903
|
function getDescendantPids(pid) {
|
|
851
904
|
const descendants = [];
|
|
852
905
|
function collect(parentPid) {
|
|
@@ -1015,21 +1068,22 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
|
|
|
1015
1068
|
for (const [k, v] of Object.entries(childEnv)) {
|
|
1016
1069
|
if (v !== void 0) ptyEnv[k] = v;
|
|
1017
1070
|
}
|
|
1071
|
+
const ptyTarget = command === OPEN_PREFERRED_SHELL_COMMAND ? resolvePreferredPtyShell(cwd) : { file: userShell, args: ["--login", "-c", command], cwd, name: command };
|
|
1018
1072
|
const ptyProcess = nodePty.spawn(
|
|
1019
|
-
|
|
1020
|
-
|
|
1073
|
+
ptyTarget.file,
|
|
1074
|
+
ptyTarget.args,
|
|
1021
1075
|
{
|
|
1022
1076
|
name: "xterm-256color",
|
|
1023
1077
|
cols: cols || 120,
|
|
1024
1078
|
rows: rows || 30,
|
|
1025
|
-
cwd,
|
|
1079
|
+
cwd: ptyTarget.cwd,
|
|
1026
1080
|
env: ptyEnv
|
|
1027
1081
|
}
|
|
1028
1082
|
);
|
|
1029
1083
|
const dummyChild = spawn("true", [], { stdio: "ignore" });
|
|
1030
1084
|
registerCommand({
|
|
1031
1085
|
commandId,
|
|
1032
|
-
command,
|
|
1086
|
+
command: ptyTarget.name,
|
|
1033
1087
|
cwd,
|
|
1034
1088
|
projectCwd,
|
|
1035
1089
|
tabId,
|
|
@@ -1040,7 +1094,7 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
|
|
|
1040
1094
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1041
1095
|
sourceId
|
|
1042
1096
|
});
|
|
1043
|
-
Effect_exports.runFork(send({ type: "pid", commandId, pid: ptyProcess.pid }));
|
|
1097
|
+
Effect_exports.runFork(send({ type: "pid", commandId, pid: ptyProcess.pid, command: ptyTarget.name }));
|
|
1044
1098
|
Effect_exports.runFork(
|
|
1045
1099
|
attachPtyListeners(registry, send, commandId, ptyProcess)
|
|
1046
1100
|
);
|
|
@@ -1063,7 +1117,7 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
|
|
|
1063
1117
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1064
1118
|
sourceId
|
|
1065
1119
|
});
|
|
1066
|
-
Effect_exports.runFork(send({ type: "pid", commandId, pid: child.pid }));
|
|
1120
|
+
Effect_exports.runFork(send({ type: "pid", commandId, pid: child.pid, command }));
|
|
1067
1121
|
Effect_exports.runFork(
|
|
1068
1122
|
attachPipeListeners(registry, send, commandId, child)
|
|
1069
1123
|
);
|
|
@@ -1096,7 +1150,7 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
|
|
|
1096
1150
|
);
|
|
1097
1151
|
return;
|
|
1098
1152
|
}
|
|
1099
|
-
Effect_exports.runFork(send({ type: "pid", commandId, pid: cmd.pid }));
|
|
1153
|
+
Effect_exports.runFork(send({ type: "pid", commandId, pid: cmd.pid, command: cmd.command }));
|
|
1100
1154
|
if (cmd.usePty && cmd.ptyRingBuffer) {
|
|
1101
1155
|
const snap = cmd.ptyRingBuffer.snapshot();
|
|
1102
1156
|
if (snap) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@surething/cockpit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.259",
|
|
4
4
|
"description": "The open-source Claude Code GUI — an IDE-like workbench for parallel AI coding. Drive Claude (default), Codex, DeepSeek, Kimi, or local Ollama in tabs. Terminal, browser & DB bubbles, code review. Self-host on a shared dev box — a seat for every teammate. Local-first, MIT.",
|
|
5
5
|
"author": "Robert",
|
|
6
6
|
"license": "MIT",
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"neo4j-driver": "^6.0.1",
|
|
139
139
|
"next": "16.3.0",
|
|
140
140
|
"node-pty": "^1.1.0",
|
|
141
|
-
"pdfjs-dist": "
|
|
141
|
+
"pdfjs-dist": "6.2.108",
|
|
142
142
|
"pg": "^8.20.0",
|
|
143
143
|
"react": "19.2.3",
|
|
144
144
|
"react-dom": "19.2.3",
|