@alexjbarnes/cockpit 0.3.1 → 0.4.1
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/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +10 -2
- package/.next/build-manifest.json +4 -4
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +21 -45
- package/.next/react-loadable-manifest.json +279 -267
- package/.next/routes-manifest.json +68 -12
- package/.next/server/app/(app)/agents/[name]/page.js +3 -3
- package/.next/server/app/(app)/agents/[name]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/agents/[name]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/agents/page.js +2 -2
- package/.next/server/app/(app)/agents/page.js.nft.json +1 -1
- package/.next/server/app/(app)/agents/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/claude-md/edit/page.js +2 -2
- package/.next/server/app/(app)/claude-md/edit/page.js.nft.json +1 -1
- package/.next/server/app/(app)/claude-md/edit/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/claude-md/page.js +2 -2
- package/.next/server/app/(app)/claude-md/page.js.nft.json +1 -1
- package/.next/server/app/(app)/claude-md/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/commands/[name]/page.js +3 -3
- package/.next/server/app/(app)/commands/[name]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/commands/[name]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/commands/page.js +2 -2
- package/.next/server/app/(app)/commands/page.js.nft.json +1 -1
- package/.next/server/app/(app)/commands/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/hooks/[event]/page.js +3 -3
- package/.next/server/app/(app)/hooks/[event]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/hooks/[event]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/hooks/page.js +2 -2
- package/.next/server/app/(app)/hooks/page.js.nft.json +1 -1
- package/.next/server/app/(app)/hooks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/inbox/[id]/page.js +2 -2
- package/.next/server/app/(app)/inbox/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/inbox/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/inbox/page.js +2 -2
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/jobs/[id]/edit/page.js +2 -2
- package/.next/server/app/(app)/jobs/[id]/edit/page.js.nft.json +1 -1
- package/.next/server/app/(app)/jobs/[id]/edit/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/jobs/[id]/page.js +2 -2
- package/.next/server/app/(app)/jobs/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/jobs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js +2 -2
- package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/jobs/page.js +2 -2
- package/.next/server/app/(app)/jobs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/jobs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/mcp-servers/[name]/page.js +2 -2
- package/.next/server/app/(app)/mcp-servers/[name]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/mcp-servers/[name]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/mcp-servers/page.js +2 -2
- package/.next/server/app/(app)/mcp-servers/page.js.nft.json +1 -1
- package/.next/server/app/(app)/mcp-servers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/page.js +2 -2
- package/.next/server/app/(app)/page.js.nft.json +1 -1
- package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/plugins/page.js +2 -0
- package/.next/server/app/(app)/{files → plugins}/page.js.nft.json +1 -1
- package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js +4 -4
- package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js +2 -2
- package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reviews/[owner]/[repo]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/reviews/page.js +2 -2
- package/.next/server/app/(app)/reviews/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reviews/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/sessions/[id]/page.js +2 -2
- package/.next/server/app/(app)/sessions/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/appearance/page.js +2 -2
- package/.next/server/app/(app)/settings/appearance/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/appearance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/notifications/page.js +2 -2
- package/.next/server/app/(app)/settings/notifications/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/notifications/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/page.js +2 -2
- package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/providers/[id]/page.js +2 -2
- package/.next/server/app/(app)/settings/providers/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/providers/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/providers/new/page.js +2 -2
- package/.next/server/app/(app)/settings/providers/new/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/providers/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/providers/page.js +2 -2
- package/.next/server/app/(app)/settings/providers/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/providers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/session/page.js +2 -2
- package/.next/server/app/(app)/settings/session/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/session/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/skills/[name]/page.js +3 -3
- package/.next/server/app/(app)/skills/[name]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/skills/[name]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/skills/page.js +2 -2
- package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
- package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page.js +3 -3
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/agents.html +1 -1
- package/.next/server/app/agents.rsc +4 -4
- package/.next/server/app/agents.segments/!KGFwcCk/agents/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/agents.segments/!KGFwcCk/agents.segment.rsc +1 -1
- package/.next/server/app/agents.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/agents.segments/_full.segment.rsc +4 -4
- package/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agents/[name]/route.js +1 -1
- package/.next/server/app/api/agents/route.js +1 -1
- package/.next/server/app/api/assistant-session/route.js +1 -0
- package/.next/server/app/api/assistant-session/route.js.nft.json +1 -0
- package/.next/server/app/api/assistant-session/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/check/route.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/setup/route.js +1 -1
- package/.next/server/app/api/auth/ws-token/route.js +1 -1
- package/.next/server/app/api/btw/route.js +2 -2
- package/.next/server/app/api/claude-md/route.js +1 -1
- package/.next/server/app/api/commands/[name]/route.js +1 -1
- package/.next/server/app/api/commands/route.js +1 -1
- package/.next/server/app/api/config/cwd/route.js +1 -0
- package/.next/server/app/api/config/cwd/route.js.nft.json +1 -0
- package/.next/server/app/api/config/cwd/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/defaults/route.js +1 -1
- package/.next/server/app/api/filesystem/browse/route.js +1 -1
- package/.next/server/app/api/filesystem/files/route.js +1 -1
- package/.next/server/app/api/filesystem/mkdir/route.js +1 -1
- package/.next/server/app/api/filesystem/read/route.js +1 -1
- package/.next/server/app/api/git/clone/route.js +1 -1
- package/.next/server/app/api/git/commit/route.js +1 -1
- package/.next/server/app/api/git/diff/route.js +1 -1
- package/.next/server/app/api/git/discard/route.js +1 -1
- package/.next/server/app/api/git/generate-message/route.js +2 -2
- package/.next/server/app/api/git/push/route.js +1 -1
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/github/file-content/route.js +1 -1
- package/.next/server/app/api/github/orgs/route.js +1 -1
- package/.next/server/app/api/github/prs/checks/route.js +1 -1
- package/.next/server/app/api/github/prs/diff/route.js +1 -1
- package/.next/server/app/api/github/prs/review/route.js +1 -1
- package/.next/server/app/api/github/prs/route.js +1 -1
- package/.next/server/app/api/github/prs/view/route.js +1 -1
- package/.next/server/app/api/github/repos/route.js +1 -1
- package/.next/server/app/api/github/review-session/route.js +1 -1
- package/.next/server/app/api/github/review-session/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/hooks/route.js +1 -1
- package/.next/server/app/api/inbox/[id]/route.js +1 -5
- package/.next/server/app/api/inbox/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/inbox/route.js +1 -5
- package/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/[id]/route.js +1 -1
- package/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/[id]/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/jobs/[id]/runs/[runId]/transcript/route.js +1 -1
- package/.next/server/app/api/jobs/[id]/runs/[runId]/transcript/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/[id]/runs/route.js +1 -1
- package/.next/server/app/api/jobs/[id]/stop/route.js +1 -0
- package/.next/server/app/api/jobs/[id]/stop/route.js.nft.json +1 -0
- package/.next/server/app/api/jobs/[id]/stop/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/jobs/[id]/trigger/route.js +1 -1
- package/.next/server/app/api/jobs/[id]/trigger/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/mcp-discover/route.js +1 -1
- package/.next/server/app/api/jobs/mcp-discover/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/route.js +1 -1
- package/.next/server/app/api/jobs/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/status/route.js +1 -1
- package/.next/server/app/api/mcp-servers/[name]/route.js +1 -1
- package/.next/server/app/api/mcp-servers/[name]/test/route.js +1 -1
- package/.next/server/app/api/mcp-servers/[name]/tools/route.js +1 -0
- package/.next/server/app/api/mcp-servers/[name]/tools/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp-servers/[name]/tools/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp-servers/route.js +1 -1
- package/.next/server/app/api/notifications/route.js +1 -1
- package/.next/server/app/api/notifications/test/route.js +3 -3
- package/.next/server/app/api/plugins/[id]/route.js +1 -0
- package/.next/server/app/api/plugins/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/plugins/install/route.js +1 -0
- package/.next/server/app/api/plugins/install/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/install/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/plugins/marketplaces/[name]/route.js +1 -0
- package/.next/server/app/api/plugins/marketplaces/[name]/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/marketplaces/[name]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/plugins/marketplaces/route.js +1 -0
- package/.next/server/app/api/plugins/marketplaces/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/marketplaces/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/plugins/route.js +1 -0
- package/.next/server/app/api/plugins/route.js.nft.json +1 -0
- package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/[id]/route.js +1 -1
- package/.next/server/app/api/providers/route.js +1 -1
- package/.next/server/app/api/reviews/pinned/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/mcp/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/search/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/tabs/route.js +1 -1
- package/.next/server/app/api/sessions/bulk-delete/route.js +1 -1
- package/.next/server/app/api/sessions/bulk-delete/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/by-ids/route.js +1 -1
- package/.next/server/app/api/sessions/by-ids/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/group/route.js +1 -1
- package/.next/server/app/api/sessions/group/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/pinned/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/search/route.js +1 -1
- package/.next/server/app/api/sessions/search/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/thinking/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[name]/route.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/terminal/[id]/route.js +1 -1
- package/.next/server/app/api/terminal/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/terminal/route.js +1 -1
- package/.next/server/app/api/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/route.js +1 -1
- package/.next/server/app/api/version/changelog/route.js +1 -1
- package/.next/server/app/api/version/cockpit/changelog/route.js +1 -1
- package/.next/server/app/api/version/cockpit/route.js +1 -1
- package/.next/server/app/api/version/route.js +2 -2
- package/.next/server/app/claude-md/edit.html +1 -1
- package/.next/server/app/claude-md/edit.rsc +4 -4
- package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit.segment.rsc +1 -1
- package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
- package/.next/server/app/claude-md/edit.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/claude-md/edit.segments/_full.segment.rsc +4 -4
- package/.next/server/app/claude-md/edit.segments/_head.segment.rsc +1 -1
- package/.next/server/app/claude-md/edit.segments/_index.segment.rsc +2 -2
- package/.next/server/app/claude-md/edit.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/claude-md.html +1 -1
- package/.next/server/app/claude-md.rsc +4 -4
- package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
- package/.next/server/app/claude-md.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/claude-md.segments/_full.segment.rsc +4 -4
- package/.next/server/app/claude-md.segments/_head.segment.rsc +1 -1
- package/.next/server/app/claude-md.segments/_index.segment.rsc +2 -2
- package/.next/server/app/claude-md.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/commands.html +1 -1
- package/.next/server/app/commands.rsc +4 -4
- package/.next/server/app/commands.segments/!KGFwcCk/commands/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/commands.segments/!KGFwcCk/commands.segment.rsc +1 -1
- package/.next/server/app/commands.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/commands.segments/_full.segment.rsc +4 -4
- package/.next/server/app/commands.segments/_head.segment.rsc +1 -1
- package/.next/server/app/commands.segments/_index.segment.rsc +2 -2
- package/.next/server/app/commands.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/hooks.html +1 -1
- package/.next/server/app/hooks.rsc +4 -4
- package/.next/server/app/hooks.segments/!KGFwcCk/hooks/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/hooks.segments/!KGFwcCk/hooks.segment.rsc +1 -1
- package/.next/server/app/hooks.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/hooks.segments/_full.segment.rsc +4 -4
- package/.next/server/app/hooks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/hooks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/hooks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/inbox.html +1 -1
- package/.next/server/app/inbox.rsc +4 -4
- package/.next/server/app/inbox.segments/!KGFwcCk/inbox/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/inbox.segments/!KGFwcCk/inbox.segment.rsc +1 -1
- package/.next/server/app/inbox.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/inbox.segments/_full.segment.rsc +4 -4
- package/.next/server/app/inbox.segments/_head.segment.rsc +1 -1
- package/.next/server/app/inbox.segments/_index.segment.rsc +2 -2
- package/.next/server/app/inbox.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/!KGFwcCk/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/jobs.html +1 -1
- package/.next/server/app/jobs.rsc +4 -4
- package/.next/server/app/jobs.segments/!KGFwcCk/jobs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/jobs.segments/!KGFwcCk/jobs.segment.rsc +1 -1
- package/.next/server/app/jobs.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/jobs.segments/_full.segment.rsc +4 -4
- package/.next/server/app/jobs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/jobs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/jobs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/mcp-servers.html +1 -1
- package/.next/server/app/mcp-servers.rsc +4 -4
- package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers.segment.rsc +1 -1
- package/.next/server/app/mcp-servers.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/mcp-servers.segments/_full.segment.rsc +4 -4
- package/.next/server/app/mcp-servers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/mcp-servers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/mcp-servers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/plugins.html +1 -0
- package/.next/server/app/{changes.meta → plugins.meta} +3 -3
- package/.next/server/app/{changes.rsc → plugins.rsc} +4 -4
- package/.next/server/app/{files.segments/!KGFwcCk/files → plugins.segments/!KGFwcCk/plugins}/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/{changes.segments/!KGFwcCk/changes.segment.rsc → plugins.segments/!KGFwcCk/plugins.segment.rsc} +1 -1
- package/.next/server/app/{changes.segments → plugins.segments}/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/{changes.segments → plugins.segments}/_full.segment.rsc +4 -4
- package/.next/server/app/{changes.segments → plugins.segments}/_head.segment.rsc +1 -1
- package/.next/server/app/{files.segments → plugins.segments}/_index.segment.rsc +2 -2
- package/.next/server/app/{changes.segments → plugins.segments}/_tree.segment.rsc +2 -2
- package/.next/server/app/reviews.html +1 -1
- package/.next/server/app/reviews.rsc +4 -4
- package/.next/server/app/reviews.segments/!KGFwcCk/reviews/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/reviews.segments/!KGFwcCk/reviews.segment.rsc +1 -1
- package/.next/server/app/reviews.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/reviews.segments/_full.segment.rsc +4 -4
- package/.next/server/app/reviews.segments/_head.segment.rsc +1 -1
- package/.next/server/app/reviews.segments/_index.segment.rsc +2 -2
- package/.next/server/app/reviews.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/appearance.html +1 -1
- package/.next/server/app/settings/appearance.rsc +4 -4
- package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance.segment.rsc +1 -1
- package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/appearance.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/settings/appearance.segments/_full.segment.rsc +4 -4
- package/.next/server/app/settings/appearance.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/appearance.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/appearance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/notifications.html +1 -1
- package/.next/server/app/settings/notifications.rsc +4 -4
- package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications.segment.rsc +1 -1
- package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/notifications.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/settings/notifications.segments/_full.segment.rsc +4 -4
- package/.next/server/app/settings/notifications.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/notifications.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/notifications.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/providers/new.html +1 -1
- package/.next/server/app/settings/providers/new.rsc +4 -4
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new.segment.rsc +1 -1
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers.segment.rsc +1 -1
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/settings/providers/new.segments/_full.segment.rsc +4 -4
- package/.next/server/app/settings/providers/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/providers/new.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/providers/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/providers.html +1 -1
- package/.next/server/app/settings/providers.rsc +4 -4
- package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers.segment.rsc +1 -1
- package/.next/server/app/settings/providers.segments/!KGFwcCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/providers.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/settings/providers.segments/_full.segment.rsc +4 -4
- package/.next/server/app/settings/providers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/providers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/providers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/session.html +1 -1
- package/.next/server/app/settings/session.rsc +4 -4
- package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session.segment.rsc +1 -1
- package/.next/server/app/settings/session.segments/!KGFwcCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/session.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/settings/session.segments/_full.segment.rsc +4 -4
- package/.next/server/app/settings/session.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/session.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/session.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +4 -4
- package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/!KGFwcCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/skills.html +1 -1
- package/.next/server/app/skills.rsc +4 -4
- package/.next/server/app/skills.segments/!KGFwcCk/skills/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/skills.segments/!KGFwcCk/skills.segment.rsc +1 -1
- package/.next/server/app/skills.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/skills.segments/_full.segment.rsc +4 -4
- package/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/.next/server/app/skills.segments/_index.segment.rsc +2 -2
- package/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
- package/.next/server/app-paths-manifest.json +10 -2
- package/.next/server/chunks/1011.js +1 -1
- package/.next/server/chunks/1327.js +1 -1
- package/.next/server/chunks/1979.js +7 -2
- package/.next/server/chunks/2666.js +1 -0
- package/.next/server/chunks/3136.js +11 -0
- package/.next/server/chunks/319.js +45 -0
- package/.next/server/chunks/3445.js +2 -2
- package/.next/server/chunks/3764.js +1 -1
- package/.next/server/chunks/4053.js +4971 -0
- package/.next/server/chunks/4734.js +201 -0
- package/.next/server/chunks/5318.js +1 -1
- package/.next/server/chunks/5472.js +1 -1
- package/.next/server/chunks/6304.js +1 -1
- package/.next/server/chunks/6705.js +1 -1
- package/.next/server/chunks/7539.js +5 -0
- package/.next/server/chunks/7891.js +3 -0
- package/.next/server/chunks/8578.js +1 -1
- package/.next/server/chunks/8728.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/NTa6G91R3HtKCLYuQqdR0/_buildManifest.js +1 -0
- package/.next/static/chunks/12644.84908edd1bec8b5a.js +1 -0
- package/.next/static/chunks/14371-46bd93e838a73082.js +201 -0
- package/.next/static/chunks/1550-2b61396833da3dec.js +25 -0
- package/.next/static/chunks/18977.393a8bc1bef44fc4.js +1 -0
- package/.next/static/chunks/{2503.bb9d3528c3c7ccae.js → 2503.68e12779c4b14adb.js} +1 -1
- package/.next/static/chunks/{27455.1bce740b63d7c3cc.js → 27455.8f2189c777c63368.js} +1 -1
- package/.next/static/chunks/33072.3d32bb7b2a85ca9b.js +1 -0
- package/.next/static/chunks/39267.0c93a6bed8e46ac0.js +1 -0
- package/.next/static/chunks/52333.ff3bf0753b68875e.js +1 -0
- package/.next/static/chunks/69940.42e1ca99efc62caf.js +1 -0
- package/.next/static/chunks/70400.ffe0412efe741888.js +1 -0
- package/.next/static/chunks/7113.336a2a8deabe2aa5.js +1 -0
- package/.next/static/chunks/{71642.852436e8f0287b89.js → 71642.e11bcaa30efbf1f2.js} +1 -1
- package/.next/static/chunks/{72839.a5325a99f8c12fed.js → 72839.225c36dd5e767a20.js} +1 -1
- package/.next/static/chunks/{69427.a0b463c808aa54c8.js → 81272.b0027c9bc80050aa.js} +1 -1
- package/.next/static/chunks/85853.421f0c913b3d332b.js +1 -0
- package/.next/static/chunks/86155.3c5c1468fa2f446e.js +1 -0
- package/.next/static/chunks/86339.ba009abde9765665.js +1 -0
- package/.next/static/chunks/86939-ba1fb2321ef9cd80.js +1 -0
- package/.next/static/chunks/93794-b87eef7d177fe7b3.js +32 -0
- package/.next/static/chunks/989-6074551b2b54a168.js +3 -0
- package/.next/static/chunks/app/(app)/agents/[name]/page-2b04446e17990f1a.js +8 -0
- package/.next/static/chunks/app/(app)/agents/page-ba23fc2296a7be83.js +1 -0
- package/.next/static/chunks/app/(app)/claude-md/edit/page-a281913e0b8add64.js +1 -0
- package/.next/static/chunks/app/(app)/claude-md/{page-cd9e2176a12ba241.js → page-2d96e3554ef23d18.js} +1 -1
- package/.next/static/chunks/app/(app)/commands/[name]/page-fb34a46c0c086dab.js +6 -0
- package/.next/static/chunks/app/(app)/commands/page-3802984c62d8ac69.js +1 -0
- package/.next/static/chunks/app/(app)/hooks/[event]/{page-28038323fd29adfa.js → page-9481839e736408cb.js} +2 -2
- package/.next/static/chunks/app/(app)/hooks/page-f430735f702c7219.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/[id]/page-aadeab885f4845b0.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-b95594cb0a1a5cac.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-cc5a314765daff0b.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/page-5890d22a832830ae.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-0b99d3ca8a0db5a4.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/page-3112e52c1cf2a1c6.js +1 -0
- package/.next/static/chunks/app/(app)/{layout-ce9e1be301c60fe5.js → layout-62bd7715bd974abb.js} +1 -1
- package/.next/static/chunks/app/(app)/mcp-servers/[name]/{page-d6d805a27ec0b0c0.js → page-c8586b1dc6f9824d.js} +1 -1
- package/.next/static/chunks/app/(app)/mcp-servers/page-bfc2a6ca8f7968c9.js +1 -0
- package/.next/static/chunks/app/(app)/page-7fa2e1ffac49c78b.js +1 -0
- package/.next/static/chunks/app/(app)/plugins/page-f37a96c5d3bd20a1.js +1 -0
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-9bdb676f496d53bd.js +13 -0
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/{page-c5fd013309ab3eba.js → page-200fefe31b935564.js} +1 -1
- package/.next/static/chunks/app/(app)/reviews/page-2b8118a506454063.js +1 -0
- package/.next/static/chunks/app/(app)/sessions/[id]/page-428e74d62712abe2.js +1 -0
- package/.next/static/chunks/app/(app)/settings/appearance/{page-95902da748ac5f1e.js → page-e2b21c857330b047.js} +1 -1
- package/.next/static/chunks/app/(app)/settings/notifications/page-4c4e5802b3993e7f.js +1 -0
- package/.next/static/chunks/app/(app)/settings/page-3c1d956c719f0160.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/[id]/page-020f2eab5c3a93ee.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/new/page-9010d32aeca78d7f.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/page-d86ebcd6d1cb033d.js +1 -0
- package/.next/static/chunks/app/(app)/settings/session/page-174370077dbb9079.js +1 -0
- package/.next/static/chunks/app/(app)/skills/[name]/page-dfea5f58b95c01b6.js +6 -0
- package/.next/static/chunks/app/(app)/skills/page-c33dbb722dbdf826.js +1 -0
- package/.next/static/chunks/app/_global-error/page-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/agents/[name]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/agents/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/assistant-session/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/auth/check/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/auth/setup/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/auth/ws-token/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/btw/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/claude-md/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/commands/[name]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/commands/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/config/cwd/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/defaults/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/filesystem/browse/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/filesystem/files/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/filesystem/mkdir/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/filesystem/read/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/clone/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/commit/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/diff/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/discard/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/generate-message/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/push/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/git/status/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/file-content/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/orgs/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/prs/checks/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/prs/diff/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/prs/review/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/prs/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/prs/view/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/repos/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/github/review-session/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/health/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/hooks/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/inbox/[id]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/inbox/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/runs/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/stop/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/trigger/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/mcp-discover/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/jobs/status/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/[name]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/[name]/tools/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/notifications/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/notifications/test/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/plugins/[id]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/plugins/install/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/plugins/marketplaces/[name]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/plugins/marketplaces/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/providers/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/reviews/pinned/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/mcp/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/search/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/tabs/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/bulk-delete/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/by-ids/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/group/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/pinned/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/search/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/sessions/thinking/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/skills/[name]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/skills/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/terminal/[id]/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/terminal/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/usage/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/version/changelog/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/version/cockpit/changelog/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/version/cockpit/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/app/api/version/route-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/{framework-6fd9f138158c42e0.js → framework-45a1aae1a0f575fd.js} +1 -1
- package/.next/static/chunks/{main-5dac9bfffcc23702.js → main-eb9ff0b73c75808a.js} +3 -3
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-bf8153dffcb47d46.js +1 -0
- package/.next/static/chunks/webpack-76a545b642140725.js +1 -0
- package/.next/static/css/4cc7360c7e3ca504.css +1 -0
- package/README.md +2 -2
- package/dist/server.js +10 -0
- package/dist/src/lib/cli-commands.js +147 -0
- package/dist/src/lib/models.js +57 -1
- package/dist/src/lib/paste-detect.js +161 -0
- package/dist/src/server/assistant-settings.js +35 -0
- package/dist/src/server/claude-bin.js +32 -0
- package/dist/src/server/claude-settings.js +3 -0
- package/dist/src/server/cli-init-fetch.js +6 -1
- package/dist/src/server/inbox.js +2 -2
- package/dist/src/server/job-scheduler.js +146 -4
- package/dist/src/server/job-storage.js +33 -0
- package/dist/src/server/mcp/cockpit-agent-prompt.js +5 -0
- package/dist/src/server/mcp/cockpit-config-server.js +632 -0
- package/dist/src/server/mcp/run-context.js +23 -0
- package/dist/src/server/notifications.js +51 -10
- package/dist/src/server/plugins.js +103 -0
- package/dist/src/server/providers.js +25 -2
- package/dist/src/server/pty-runtime.js +113 -3
- package/dist/src/server/pty-session.js +7 -4
- package/dist/src/server/session-manager.js +394 -116
- package/dist/src/server/singleton.js +9 -0
- package/dist/src/server/terminal-buffer.js +17 -0
- package/dist/src/server/terminal-manager.js +9 -13
- package/dist/src/server/transcript.js +65 -27
- package/dist/src/server/ws-handler.js +19 -7
- package/next.config.ts +1 -0
- package/package.json +3 -2
- package/.next/server/app/(app)/changes/page.js +0 -2
- package/.next/server/app/(app)/changes/page.js.nft.json +0 -1
- package/.next/server/app/(app)/changes/page_client-reference-manifest.js +0 -1
- package/.next/server/app/(app)/files/page.js +0 -2
- package/.next/server/app/(app)/files/page_client-reference-manifest.js +0 -1
- package/.next/server/app/changes.html +0 -1
- package/.next/server/app/changes.segments/!KGFwcCk/changes/__PAGE__.segment.rsc +0 -9
- package/.next/server/app/changes.segments/_index.segment.rsc +0 -5
- package/.next/server/app/files.html +0 -1
- package/.next/server/app/files.meta +0 -16
- package/.next/server/app/files.rsc +0 -23
- package/.next/server/app/files.segments/!KGFwcCk/files.segment.rsc +0 -5
- package/.next/server/app/files.segments/!KGFwcCk.segment.rsc +0 -7
- package/.next/server/app/files.segments/_full.segment.rsc +0 -23
- package/.next/server/app/files.segments/_head.segment.rsc +0 -6
- package/.next/server/app/files.segments/_tree.segment.rsc +0 -2
- package/.next/server/chunks/3006.js +0 -199
- package/.next/server/chunks/4342.js +0 -1
- package/.next/server/chunks/4352.js +0 -1
- package/.next/server/chunks/4445.js +0 -1
- package/.next/server/chunks/63.js +0 -45
- package/.next/server/chunks/7782.js +0 -6
- package/.next/server/chunks/8148.js +0 -1
- package/.next/server/chunks/9599.js +0 -11
- package/.next/static/I-rxZaJEzhe3ZUTjSqB11/_buildManifest.js +0 -1
- package/.next/static/chunks/18977.a98edaf19c6df2d4.js +0 -1
- package/.next/static/chunks/26126-97874904b42befb8.js +0 -1
- package/.next/static/chunks/31010-6e87f77b97544424.js +0 -1
- package/.next/static/chunks/33072.9c3cd19e8d515dea.js +0 -1
- package/.next/static/chunks/3765-d323c6675307a63e.js +0 -20
- package/.next/static/chunks/39267.ef60669ade47cf4c.js +0 -1
- package/.next/static/chunks/41487-d802643f4a8fad3c.js +0 -199
- package/.next/static/chunks/48273-fb393846bb4333c0.js +0 -6
- package/.next/static/chunks/52333.f98d1cca9a127b34.js +0 -1
- package/.next/static/chunks/6935-f436a624267529fb.js +0 -1
- package/.next/static/chunks/70400.1816c247ad90f9bc.js +0 -1
- package/.next/static/chunks/7113.39704408fef3d26e.js +0 -1
- package/.next/static/chunks/85853.39872899093b140a.js +0 -1
- package/.next/static/chunks/86155.40f687f9aaa13854.js +0 -1
- package/.next/static/chunks/86339.4dbd51a9b9871f65.js +0 -1
- package/.next/static/chunks/86939-dfc6f8eb395caa89.js +0 -1
- package/.next/static/chunks/93794-5f89a674d8cefcff.js +0 -32
- package/.next/static/chunks/989-94bf2b9d242776c3.js +0 -3
- package/.next/static/chunks/app/(app)/agents/[name]/page-8bdd0359043537d4.js +0 -8
- package/.next/static/chunks/app/(app)/agents/page-6fcfd7ab6781814e.js +0 -1
- package/.next/static/chunks/app/(app)/changes/page-4549a5bd72d77e3e.js +0 -1
- package/.next/static/chunks/app/(app)/claude-md/edit/page-08e6e120e71979f4.js +0 -1
- package/.next/static/chunks/app/(app)/commands/[name]/page-7cdfdef29ded0aa0.js +0 -6
- package/.next/static/chunks/app/(app)/commands/page-f126b608b04747ac.js +0 -1
- package/.next/static/chunks/app/(app)/files/page-f526eb95821e000e.js +0 -1
- package/.next/static/chunks/app/(app)/hooks/page-f1f39284e53c0344.js +0 -1
- package/.next/static/chunks/app/(app)/inbox/[id]/page-bc1ff3a0db0114a4.js +0 -1
- package/.next/static/chunks/app/(app)/inbox/page-82e03870103ce9bd.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-7fb788f772ff2129.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/page-a5856b9ae967ff59.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-b7c513402db11db6.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/page-e9bbd6c116b9699f.js +0 -1
- package/.next/static/chunks/app/(app)/mcp-servers/page-4b7276d43451cd43.js +0 -1
- package/.next/static/chunks/app/(app)/page-027a5382da30ddb9.js +0 -1
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-9ab2955c455bb5fa.js +0 -13
- package/.next/static/chunks/app/(app)/reviews/page-47530d93bb9d4a76.js +0 -1
- package/.next/static/chunks/app/(app)/sessions/[id]/page-94f891e1b54fd05f.js +0 -1
- package/.next/static/chunks/app/(app)/settings/notifications/page-229f1db6beb1d19c.js +0 -1
- package/.next/static/chunks/app/(app)/settings/page-8ed16a66fdde10cd.js +0 -1
- package/.next/static/chunks/app/(app)/settings/providers/[id]/page-13654263246617b3.js +0 -1
- package/.next/static/chunks/app/(app)/settings/providers/new/page-e1798e321ccbc6df.js +0 -1
- package/.next/static/chunks/app/(app)/settings/providers/page-0bb4c1db2ee35b3d.js +0 -1
- package/.next/static/chunks/app/(app)/settings/session/page-ab216a8fa37a0f76.js +0 -1
- package/.next/static/chunks/app/(app)/skills/[name]/page-8ab85d5090967ee4.js +0 -6
- package/.next/static/chunks/app/(app)/skills/page-c52773eacb27c04e.js +0 -1
- package/.next/static/chunks/app/_global-error/page-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/agents/[name]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/agents/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/auth/check/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/auth/setup/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/auth/ws-token/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/btw/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/claude-md/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/commands/[name]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/commands/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/defaults/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/browse/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/files/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/mkdir/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/read/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/clone/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/commit/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/discard/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/generate-message/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/push/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/file-content/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/orgs/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/checks/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/diff/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/review/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/view/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/repos/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/github/review-session/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/health/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/hooks/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/inbox/[id]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/inbox/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/trigger/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/mcp-discover/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/jobs/status/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/[name]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/notifications/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/notifications/test/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/providers/[id]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/providers/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/reviews/pinned/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/mcp/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/search/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/tabs/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/bulk-delete/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/by-ids/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/group/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/pinned/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/search/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/sessions/thinking/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/skills/[name]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/terminal/[id]/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/terminal/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/usage/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/version/changelog/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/version/cockpit/changelog/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/version/cockpit/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/app/api/version/route-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fc747760bd4c8a4b.js +0 -1
- package/.next/static/chunks/webpack-e31bb45fa59caed8.js +0 -1
- package/.next/static/css/3f8af4ae6f812d5c.css +0 -1
- /package/.next/static/{I-rxZaJEzhe3ZUTjSqB11 → NTa6G91R3HtKCLYuQqdR0}/_ssgManifest.js +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.dispatchNotification = dispatchNotification;
|
|
4
4
|
exports.sendTestNotification = sendTestNotification;
|
|
5
|
+
const debug_logger_1 = require("./debug-logger");
|
|
5
6
|
const notification_settings_1 = require("./notification-settings");
|
|
6
7
|
function buildFullUrl(path, baseUrl) {
|
|
7
8
|
if (!path)
|
|
@@ -17,11 +18,57 @@ function formatPlainMessage(payload, baseUrl) {
|
|
|
17
18
|
const link = url ? `\n\n${url}` : "";
|
|
18
19
|
return `${prefix}${payload.title}\n\n${payload.body}${link}`;
|
|
19
20
|
}
|
|
21
|
+
const MAX_NOTIFY_ATTEMPTS = 3;
|
|
22
|
+
const NOTIFY_TIMEOUT_MS = 10_000;
|
|
23
|
+
function notifyBackoffMs(attempt) {
|
|
24
|
+
// No backoff under vitest so retry tests stay fast.
|
|
25
|
+
if (process.env.VITEST || process.env.NODE_ENV === "test")
|
|
26
|
+
return 0;
|
|
27
|
+
return 300 * 2 ** (attempt - 1);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* POST a notification with a per-attempt timeout and bounded retry.
|
|
31
|
+
* dispatchNotification fires this without awaiting, so without it a single
|
|
32
|
+
* transient failure — a hung keep-alive socket (no timeout means it hangs
|
|
33
|
+
* forever and never even logs), an ntfy rate-limit, a network blip — silently
|
|
34
|
+
* drops the push while the inbox entry has already persisted. Retries network
|
|
35
|
+
* and timeout errors plus 429/5xx; fails fast on other 4xx (config errors that
|
|
36
|
+
* will not recover by retrying).
|
|
37
|
+
*/
|
|
38
|
+
async function postWithRetry(label, url, init) {
|
|
39
|
+
let lastErr;
|
|
40
|
+
for (let attempt = 1; attempt <= MAX_NOTIFY_ATTEMPTS; attempt++) {
|
|
41
|
+
const controller = new AbortController();
|
|
42
|
+
const timer = setTimeout(() => controller.abort(), NOTIFY_TIMEOUT_MS);
|
|
43
|
+
let permanent = false;
|
|
44
|
+
try {
|
|
45
|
+
const res = await fetch(url, { ...init, signal: controller.signal });
|
|
46
|
+
if (res.ok)
|
|
47
|
+
return;
|
|
48
|
+
const body = await res.text().catch(() => "");
|
|
49
|
+
lastErr = new Error(`${label} ${res.status}: ${body}`);
|
|
50
|
+
permanent = res.status < 500 && res.status !== 429;
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
lastErr = err; // network error or timeout abort — retryable
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
}
|
|
58
|
+
if (permanent)
|
|
59
|
+
break;
|
|
60
|
+
if (attempt < MAX_NOTIFY_ATTEMPTS) {
|
|
61
|
+
(0, debug_logger_1.debugLog)(`[notifications] ${label} attempt ${attempt}/${MAX_NOTIFY_ATTEMPTS} failed, retrying: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`);
|
|
62
|
+
await new Promise((r) => setTimeout(r, notifyBackoffMs(attempt)));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
throw lastErr instanceof Error ? lastErr : new Error(`${label}: ${String(lastErr)}`);
|
|
66
|
+
}
|
|
20
67
|
const telegramProvider = {
|
|
21
68
|
async send(payload, config, baseUrl) {
|
|
22
69
|
const text = formatPlainMessage(payload, baseUrl);
|
|
23
70
|
const url = `https://api.telegram.org/bot${config.botToken}/sendMessage`;
|
|
24
|
-
|
|
71
|
+
await postWithRetry("Telegram API", url, {
|
|
25
72
|
method: "POST",
|
|
26
73
|
headers: { "Content-Type": "application/json" },
|
|
27
74
|
body: JSON.stringify({
|
|
@@ -30,10 +77,6 @@ const telegramProvider = {
|
|
|
30
77
|
disable_web_page_preview: true,
|
|
31
78
|
}),
|
|
32
79
|
});
|
|
33
|
-
if (!res.ok) {
|
|
34
|
-
const body = await res.text();
|
|
35
|
-
throw new Error(`Telegram API ${res.status}: ${body}`);
|
|
36
|
-
}
|
|
37
80
|
},
|
|
38
81
|
};
|
|
39
82
|
const ntfyProvider = {
|
|
@@ -51,15 +94,11 @@ const ntfyProvider = {
|
|
|
51
94
|
if (fullUrl) {
|
|
52
95
|
headers.Click = fullUrl;
|
|
53
96
|
}
|
|
54
|
-
|
|
97
|
+
await postWithRetry("ntfy", url, {
|
|
55
98
|
method: "POST",
|
|
56
99
|
headers,
|
|
57
100
|
body: payload.body,
|
|
58
101
|
});
|
|
59
|
-
if (!res.ok) {
|
|
60
|
-
const body = await res.text();
|
|
61
|
-
throw new Error(`ntfy ${res.status}: ${body}`);
|
|
62
|
-
}
|
|
63
102
|
},
|
|
64
103
|
};
|
|
65
104
|
function getProvider(type) {
|
|
@@ -100,7 +139,9 @@ function dispatchNotification(payload) {
|
|
|
100
139
|
if (!provider)
|
|
101
140
|
continue;
|
|
102
141
|
provider.send(payload, entry.config, settings.baseUrl).catch((err) => {
|
|
142
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
103
143
|
console.error(`[notifications] ${entry.type}/${entry.name} failed:`, err);
|
|
144
|
+
(0, debug_logger_1.debugLog)(`[notifications] ${entry.type}/${entry.name} failed after retries: ${message}`);
|
|
104
145
|
});
|
|
105
146
|
}
|
|
106
147
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.coercePluginScope = coercePluginScope;
|
|
4
|
+
exports.runClaudePlugin = runClaudePlugin;
|
|
5
|
+
exports.listPlugins = listPlugins;
|
|
6
|
+
exports.listMarketplaces = listMarketplaces;
|
|
7
|
+
exports.setPluginEnabled = setPluginEnabled;
|
|
8
|
+
exports.uninstallPlugin = uninstallPlugin;
|
|
9
|
+
exports.installPlugin = installPlugin;
|
|
10
|
+
exports.updatePlugin = updatePlugin;
|
|
11
|
+
exports.addMarketplace = addMarketplace;
|
|
12
|
+
exports.removeMarketplace = removeMarketplace;
|
|
13
|
+
exports.updateMarketplace = updateMarketplace;
|
|
14
|
+
const node_child_process_1 = require("node:child_process");
|
|
15
|
+
const node_util_1 = require("node:util");
|
|
16
|
+
const claude_bin_1 = require("../server/claude-bin");
|
|
17
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
18
|
+
// Marketplace refresh and `install`/`update` shell out to git, which can be slow
|
|
19
|
+
// on a cold cache. Read commands are sub-second, but share the same ceiling.
|
|
20
|
+
const PLUGIN_CMD_TIMEOUT_MS = 120_000;
|
|
21
|
+
// The `--available` catalog JSON is ~110KB today (200+ plugins); leave headroom.
|
|
22
|
+
const PLUGIN_CMD_MAX_BUFFER = 32 * 1024 * 1024;
|
|
23
|
+
const PLUGIN_SCOPES = new Set(["user", "project", "local"]);
|
|
24
|
+
/** Narrow an arbitrary string to a PluginScope, or undefined to let the CLI decide. */
|
|
25
|
+
function coercePluginScope(value) {
|
|
26
|
+
return value && PLUGIN_SCOPES.has(value) ? value : undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Run `claude plugin <args...>` non-interactively and capture its output.
|
|
30
|
+
* Never throws on a non-zero exit -- the caller inspects `ok` and `stderr` so
|
|
31
|
+
* CLI errors surface to the UI instead of crashing the route.
|
|
32
|
+
*/
|
|
33
|
+
async function runClaudePlugin(args) {
|
|
34
|
+
try {
|
|
35
|
+
const { stdout, stderr } = await execFileAsync((0, claude_bin_1.getClaudeBin)(), ["plugin", ...args], {
|
|
36
|
+
encoding: "utf-8",
|
|
37
|
+
timeout: PLUGIN_CMD_TIMEOUT_MS,
|
|
38
|
+
maxBuffer: PLUGIN_CMD_MAX_BUFFER,
|
|
39
|
+
});
|
|
40
|
+
return { ok: true, stdout, stderr };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
const e = err;
|
|
44
|
+
return { ok: false, stdout: e.stdout ?? "", stderr: e.stderr || e.message || "plugin command failed" };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Installed plugins plus the full marketplace catalog, in one CLI call. */
|
|
48
|
+
async function listPlugins() {
|
|
49
|
+
const res = await runClaudePlugin(["list", "--available", "--json"]);
|
|
50
|
+
if (!res.ok)
|
|
51
|
+
throw new Error(res.stderr);
|
|
52
|
+
const parsed = JSON.parse(res.stdout);
|
|
53
|
+
return { installed: parsed.installed ?? [], available: parsed.available ?? [] };
|
|
54
|
+
}
|
|
55
|
+
async function listMarketplaces() {
|
|
56
|
+
const res = await runClaudePlugin(["marketplace", "list", "--json"]);
|
|
57
|
+
if (!res.ok)
|
|
58
|
+
throw new Error(res.stderr);
|
|
59
|
+
return JSON.parse(res.stdout);
|
|
60
|
+
}
|
|
61
|
+
/** Enable or disable an installed plugin. Scope defaults to the CLI's auto-detect. */
|
|
62
|
+
async function setPluginEnabled(id, enabled, scope) {
|
|
63
|
+
const args = [enabled ? "enable" : "disable", id];
|
|
64
|
+
if (scope)
|
|
65
|
+
args.push("-s", scope);
|
|
66
|
+
return runClaudePlugin(args);
|
|
67
|
+
}
|
|
68
|
+
/** Uninstall a plugin. `-y` is required because cockpit runs the CLI without a TTY. */
|
|
69
|
+
async function uninstallPlugin(id, scope) {
|
|
70
|
+
const args = ["uninstall", id, "-y"];
|
|
71
|
+
if (scope)
|
|
72
|
+
args.push("-s", scope);
|
|
73
|
+
return runClaudePlugin(args);
|
|
74
|
+
}
|
|
75
|
+
/** Install a plugin (id is "name@marketplace"). Clones from the marketplace source, so it can be slow. */
|
|
76
|
+
async function installPlugin(id, scope = "user") {
|
|
77
|
+
return runClaudePlugin(["install", id, "-s", scope]);
|
|
78
|
+
}
|
|
79
|
+
/** Update an installed plugin from its marketplace source. Runs git pull on the plugin's source. */
|
|
80
|
+
async function updatePlugin(id) {
|
|
81
|
+
return runClaudePlugin(["update", id]);
|
|
82
|
+
}
|
|
83
|
+
/** Add a marketplace from a URL, path, or GitHub repo. Clones from the source, so it can be slow. Scope defaults to user. */
|
|
84
|
+
async function addMarketplace(source, scope) {
|
|
85
|
+
const args = ["marketplace", "add", source];
|
|
86
|
+
if (scope)
|
|
87
|
+
args.push("--scope", scope);
|
|
88
|
+
return runClaudePlugin(args);
|
|
89
|
+
}
|
|
90
|
+
/** Remove a configured marketplace. Omitting scope removes its declaration from every settings scope. */
|
|
91
|
+
async function removeMarketplace(name, scope) {
|
|
92
|
+
const args = ["marketplace", "remove", name];
|
|
93
|
+
if (scope)
|
|
94
|
+
args.push("--scope", scope);
|
|
95
|
+
return runClaudePlugin(args);
|
|
96
|
+
}
|
|
97
|
+
/** Update one marketplace from its source, or all when name is omitted. Hits git, so it can be slow. */
|
|
98
|
+
async function updateMarketplace(name) {
|
|
99
|
+
const args = ["marketplace", "update"];
|
|
100
|
+
if (name)
|
|
101
|
+
args.push(name);
|
|
102
|
+
return runClaudePlugin(args);
|
|
103
|
+
}
|
|
@@ -35,6 +35,21 @@ function buildAnthropicProvider() {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
let cache = null;
|
|
38
|
+
// mtime of providers.json at the last load. Cockpit runs as two separate module
|
|
39
|
+
// graphs — the custom server (dist/, which spawns sessions) and the Next.js API
|
|
40
|
+
// routes (settings CRUD) — so a provider added/edited via settings only resets
|
|
41
|
+
// that graph's `cache`, never the spawner's, leaving new sessions on a stale list
|
|
42
|
+
// until restart. Gating the cache on the file mtime makes either graph (and a
|
|
43
|
+
// hand-edit of the file) reload when the file changes.
|
|
44
|
+
let cacheMtimeMs = 0;
|
|
45
|
+
function providersMtimeMs() {
|
|
46
|
+
try {
|
|
47
|
+
return (0, node_fs_1.statSync)(providersFile()).mtimeMs;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return 0; // file absent — no custom providers yet
|
|
51
|
+
}
|
|
52
|
+
}
|
|
38
53
|
function loadCustom() {
|
|
39
54
|
try {
|
|
40
55
|
return JSON.parse((0, node_fs_1.readFileSync)(providersFile(), "utf-8"));
|
|
@@ -53,8 +68,10 @@ function saveCustom(providers) {
|
|
|
53
68
|
}
|
|
54
69
|
}
|
|
55
70
|
function getProviders() {
|
|
56
|
-
|
|
71
|
+
const mtime = providersMtimeMs();
|
|
72
|
+
if (cache === null || mtime !== cacheMtimeMs) {
|
|
57
73
|
cache = [buildAnthropicProvider(), ...loadCustom()];
|
|
74
|
+
cacheMtimeMs = mtime;
|
|
58
75
|
}
|
|
59
76
|
return cache;
|
|
60
77
|
}
|
|
@@ -69,6 +86,7 @@ function addProvider(provider) {
|
|
|
69
86
|
custom.push(newProvider);
|
|
70
87
|
saveCustom(custom);
|
|
71
88
|
cache = [buildAnthropicProvider(), ...custom];
|
|
89
|
+
cacheMtimeMs = providersMtimeMs();
|
|
72
90
|
return newProvider;
|
|
73
91
|
}
|
|
74
92
|
function updateProvider(id, partial) {
|
|
@@ -84,6 +102,7 @@ function updateProvider(id, partial) {
|
|
|
84
102
|
custom[idx] = merged;
|
|
85
103
|
saveCustom(custom);
|
|
86
104
|
cache = [buildAnthropicProvider(), ...custom];
|
|
105
|
+
cacheMtimeMs = providersMtimeMs();
|
|
87
106
|
return custom[idx];
|
|
88
107
|
}
|
|
89
108
|
function deleteProvider(id) {
|
|
@@ -96,6 +115,7 @@ function deleteProvider(id) {
|
|
|
96
115
|
}
|
|
97
116
|
saveCustom(custom);
|
|
98
117
|
cache = [buildAnthropicProvider(), ...custom];
|
|
118
|
+
cacheMtimeMs = providersMtimeMs();
|
|
99
119
|
}
|
|
100
120
|
function setProviders(providers) {
|
|
101
121
|
const custom = providers.filter((p) => !p.isBuiltin);
|
|
@@ -103,6 +123,7 @@ function setProviders(providers) {
|
|
|
103
123
|
validateProvider(p);
|
|
104
124
|
saveCustom(custom);
|
|
105
125
|
cache = [buildAnthropicProvider(), ...custom];
|
|
126
|
+
cacheMtimeMs = providersMtimeMs();
|
|
106
127
|
}
|
|
107
128
|
function resolveProviderModel(modelId) {
|
|
108
129
|
if (!modelId)
|
|
@@ -110,7 +131,9 @@ function resolveProviderModel(modelId) {
|
|
|
110
131
|
const colon = modelId.indexOf(":");
|
|
111
132
|
if (colon > 0) {
|
|
112
133
|
const providerId = modelId.slice(0, colon);
|
|
113
|
-
|
|
134
|
+
// Strip a legacy context suffix (e.g. "deepseek-v4-pro[1m]") so a job whose
|
|
135
|
+
// stored model still carries one resolves to the cleaned provider model.
|
|
136
|
+
const bareModel = modelId.slice(colon + 1).replace(/\[.*\]$/, "");
|
|
114
137
|
const provider = getProvider(providerId);
|
|
115
138
|
if (provider) {
|
|
116
139
|
const model = provider.models.find((m) => m.modelId === bareModel);
|
|
@@ -4,8 +4,10 @@ exports.PtyRuntime = void 0;
|
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const claude_settings_1 = require("./claude-settings");
|
|
6
6
|
const cli_init_fetch_1 = require("./cli-init-fetch");
|
|
7
|
+
const debug_logger_1 = require("./debug-logger");
|
|
7
8
|
const hook_event_translator_1 = require("./hook-event-translator");
|
|
8
9
|
const pty_session_1 = require("./pty-session");
|
|
10
|
+
const transcript_1 = require("./transcript");
|
|
9
11
|
/**
|
|
10
12
|
* Owns a claude PTY process plus its HookRouter registration. Translates
|
|
11
13
|
* hook payloads into ParsedEvents and pumps them through opts.onEvents so
|
|
@@ -25,6 +27,8 @@ class PtyRuntime {
|
|
|
25
27
|
pendingPermissions = new Map();
|
|
26
28
|
exited = false;
|
|
27
29
|
cleaned = false;
|
|
30
|
+
/** Resolver armed by deliverInitialPrompt; fired when UserPromptSubmit confirms the first prompt landed. */
|
|
31
|
+
promptAccepted = null;
|
|
28
32
|
ptyOutputBuffer = "";
|
|
29
33
|
errorDebounce = null;
|
|
30
34
|
constructor(opts) {
|
|
@@ -38,6 +42,8 @@ class PtyRuntime {
|
|
|
38
42
|
}
|
|
39
43
|
async start(initialText) {
|
|
40
44
|
const { sessionId, cwd, hookRouter } = this.opts;
|
|
45
|
+
const startAt = Date.now();
|
|
46
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:start-enter", { hasInitialText: !!initialText });
|
|
41
47
|
const token = hookRouter.register(sessionId, this.buildHandler());
|
|
42
48
|
const { settingsPath, env } = await (0, claude_settings_1.prepareHookSettings)({
|
|
43
49
|
sessionId,
|
|
@@ -45,8 +51,10 @@ class PtyRuntime {
|
|
|
45
51
|
hookToken: token,
|
|
46
52
|
allowList: this.opts.allowList,
|
|
47
53
|
denyList: this.opts.denyList,
|
|
54
|
+
thinkingEnabled: this.opts.thinkingEnabled,
|
|
48
55
|
});
|
|
49
56
|
this.settingsPath = settingsPath;
|
|
57
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:hooks-ready", { elapsedMs: Date.now() - startAt });
|
|
50
58
|
this.pty = new pty_session_1.PtySession({
|
|
51
59
|
cwd,
|
|
52
60
|
settingsPath,
|
|
@@ -67,29 +75,103 @@ class PtyRuntime {
|
|
|
67
75
|
await this.pty.start();
|
|
68
76
|
}
|
|
69
77
|
catch (err) {
|
|
78
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:process-start-failed", {
|
|
79
|
+
elapsedMs: Date.now() - startAt,
|
|
80
|
+
error: err instanceof Error ? err.message : String(err),
|
|
81
|
+
});
|
|
70
82
|
await this.cleanup();
|
|
71
83
|
throw err;
|
|
72
84
|
}
|
|
85
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:process-started", { pid: this.pid, elapsedMs: Date.now() - startAt });
|
|
73
86
|
if (initialText) {
|
|
74
|
-
await this.
|
|
87
|
+
await this.deliverInitialPrompt(initialText);
|
|
75
88
|
}
|
|
89
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:start-complete", { elapsedMs: Date.now() - startAt });
|
|
76
90
|
this.fetchInitData();
|
|
77
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Type the first prompt into the freshly spawned TUI and confirm the CLI
|
|
94
|
+
* accepted it. waitForReplReady is only a heuristic (first 100 bytes plus a
|
|
95
|
+
* 2s settle), so on a slow or quiet machine the input box may not be live
|
|
96
|
+
* when the keystrokes land and they are swallowed with no error. Without a
|
|
97
|
+
* check the turn never starts and the only backstop is the caller's watchdog,
|
|
98
|
+
* which for scheduled jobs is a silent 30-60 minute timeout with an empty
|
|
99
|
+
* transcript. Resend until the UserPromptSubmit hook confirms acceptance,
|
|
100
|
+
* then fail fast so the job reports an error instead of hanging.
|
|
101
|
+
*/
|
|
102
|
+
async deliverInitialPrompt(text) {
|
|
103
|
+
const { sessionId } = this.opts;
|
|
104
|
+
const MAX_ATTEMPTS = 4;
|
|
105
|
+
const CONFIRM_TIMEOUT_MS = 8000;
|
|
106
|
+
// A submitted prompt writes a user turn to the JSONL transcript. Growth past
|
|
107
|
+
// this baseline proves the CLI accepted the prompt even when the
|
|
108
|
+
// UserPromptSubmit hook never arrives — that hook is the only other
|
|
109
|
+
// acceptance signal, and its loss used to fail an actively-working run (it
|
|
110
|
+
// resent the 7KB prompt into a live turn, then killed the process). The
|
|
111
|
+
// transcript is hook- and echo-independent, so we check it at the end of
|
|
112
|
+
// each attempt's window before resending or failing.
|
|
113
|
+
const baselineMsgs = (0, transcript_1.countTranscriptMessages)(this.opts.cliSessionId, this.opts.cwd);
|
|
114
|
+
const turnStarted = () => (0, transcript_1.countTranscriptMessages)(this.opts.cliSessionId, this.opts.cwd) > baselineMsgs;
|
|
115
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-begin", { textLen: text.length, maxAttempts: MAX_ATTEMPTS, baselineMsgs });
|
|
116
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
117
|
+
const pty = this.pty;
|
|
118
|
+
if (this.exited || !pty) {
|
|
119
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-aborted", { attempt, exited: this.exited, hasPty: !!pty });
|
|
120
|
+
throw new Error("claude exited before the initial prompt was delivered");
|
|
121
|
+
}
|
|
122
|
+
let timer = null;
|
|
123
|
+
const accepted = new Promise((resolve) => {
|
|
124
|
+
this.promptAccepted = () => resolve(true);
|
|
125
|
+
timer = setTimeout(() => resolve(false), CONFIRM_TIMEOUT_MS);
|
|
126
|
+
});
|
|
127
|
+
const attemptAt = Date.now();
|
|
128
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-attempt", { attempt, screenBefore: this.recentScreen() });
|
|
129
|
+
await pty.sendText(text);
|
|
130
|
+
const ok = await accepted;
|
|
131
|
+
if (timer)
|
|
132
|
+
clearTimeout(timer);
|
|
133
|
+
this.promptAccepted = null;
|
|
134
|
+
if (ok) {
|
|
135
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-accepted", { attempt, waitedMs: Date.now() - attemptAt });
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// The hook did not fire in this window. It can be lost even though the CLI
|
|
139
|
+
// accepted the prompt and started working, so before resending or failing,
|
|
140
|
+
// check whether a turn has actually started. If it has, the prompt landed;
|
|
141
|
+
// do not resend into a live turn or kill a working run.
|
|
142
|
+
if (turnStarted()) {
|
|
143
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-accepted-via-transcript", { attempt, waitedMs: Date.now() - attemptAt });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-timeout", { attempt, waitedMs: Date.now() - attemptAt, screenAfter: this.recentScreen() });
|
|
147
|
+
console.log(`[pty-runtime] initial prompt not confirmed for ${sessionId.slice(0, 8)} (attempt ${attempt}/${MAX_ATTEMPTS}), resending`);
|
|
148
|
+
}
|
|
149
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-failed", { attempts: MAX_ATTEMPTS });
|
|
150
|
+
throw new Error(`claude did not accept the initial prompt after ${MAX_ATTEMPTS} attempts`);
|
|
151
|
+
}
|
|
78
152
|
fetchInitData() {
|
|
79
|
-
const
|
|
153
|
+
const { sessionId } = this.opts;
|
|
154
|
+
const sid = sessionId.slice(0, 8);
|
|
80
155
|
console.log(`[pty-runtime] fetching CLI init data for session ${sid}`);
|
|
156
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-begin");
|
|
81
157
|
(0, cli_init_fetch_1.fetchCliInitData)({ cwd: this.opts.cwd, bin: this.opts.claudeBin })
|
|
82
158
|
.then((initData) => {
|
|
83
159
|
if (initData && !this.exited) {
|
|
84
160
|
console.log(`[pty-runtime] emitting init event for session ${sid}: ${initData.slashCommands.length} commands`);
|
|
161
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-done", {
|
|
162
|
+
slashCommands: initData.slashCommands.length,
|
|
163
|
+
mcpServers: initData.mcpServers?.length ?? 0,
|
|
164
|
+
});
|
|
85
165
|
this.emit([{ type: "init", initData }]);
|
|
86
166
|
}
|
|
87
167
|
else {
|
|
88
168
|
console.log(`[pty-runtime] init fetch returned ${initData ? "data but session exited" : "null"} for session ${sid}`);
|
|
169
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-empty", { exited: this.exited, hadData: !!initData });
|
|
89
170
|
}
|
|
90
171
|
})
|
|
91
172
|
.catch((err) => {
|
|
92
173
|
console.log(`[pty-runtime] init fetch failed for session ${sid}: ${err}`);
|
|
174
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-failed", { error: err instanceof Error ? err.message : String(err) });
|
|
93
175
|
});
|
|
94
176
|
}
|
|
95
177
|
async sendText(text) {
|
|
@@ -136,9 +218,16 @@ class PtyRuntime {
|
|
|
136
218
|
/** Called by SessionManager.respondToPermission when this session is on the pty runtime. */
|
|
137
219
|
notifyPermissionDecision(requestId, decision) {
|
|
138
220
|
const resolver = this.pendingPermissions.get(requestId);
|
|
139
|
-
if (!resolver)
|
|
221
|
+
if (!resolver) {
|
|
222
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-decision-unmatched", { requestId, behavior: decision.behavior });
|
|
140
223
|
return false;
|
|
224
|
+
}
|
|
141
225
|
this.pendingPermissions.delete(requestId);
|
|
226
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-decision", {
|
|
227
|
+
requestId,
|
|
228
|
+
behavior: decision.behavior,
|
|
229
|
+
pending: this.pendingPermissions.size,
|
|
230
|
+
});
|
|
142
231
|
resolver(decision);
|
|
143
232
|
return true;
|
|
144
233
|
}
|
|
@@ -182,11 +271,14 @@ class PtyRuntime {
|
|
|
182
271
|
onUserPromptSubmit: (payload) => {
|
|
183
272
|
this.cancelErrorDebounce();
|
|
184
273
|
this.ptyOutputBuffer = "";
|
|
274
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:hook-user-prompt-submit", { armed: !!this.promptAccepted });
|
|
275
|
+
this.promptAccepted?.();
|
|
185
276
|
this.emit((0, hook_event_translator_1.translateHookEvent)("UserPromptSubmit", payload));
|
|
186
277
|
},
|
|
187
278
|
onUserPromptExpansion: (payload) => {
|
|
188
279
|
this.cancelErrorDebounce();
|
|
189
280
|
this.ptyOutputBuffer = "";
|
|
281
|
+
this.promptAccepted?.();
|
|
190
282
|
const cmd = typeof payload.command_name === "string" ? payload.command_name : "unknown";
|
|
191
283
|
const sid = this.opts.sessionId.slice(0, 8);
|
|
192
284
|
console.log(`[pty-runtime] UserPromptExpansion: command=${cmd}, session=${sid}`);
|
|
@@ -243,6 +335,7 @@ class PtyRuntime {
|
|
|
243
335
|
toolInput: toolInput ? JSON.stringify(toolInput) : "",
|
|
244
336
|
rawToolInput: toolInput,
|
|
245
337
|
};
|
|
338
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-request", { requestId, toolName });
|
|
246
339
|
return new Promise((resolve) => {
|
|
247
340
|
this.pendingPermissions.set(requestId, resolve);
|
|
248
341
|
try {
|
|
@@ -250,6 +343,7 @@ class PtyRuntime {
|
|
|
250
343
|
}
|
|
251
344
|
catch (err) {
|
|
252
345
|
this.pendingPermissions.delete(requestId);
|
|
346
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-handler-error", { requestId, toolName, error: String(err) });
|
|
253
347
|
resolve({ behavior: "deny", message: `cockpit handler error: ${String(err)}` });
|
|
254
348
|
}
|
|
255
349
|
});
|
|
@@ -271,6 +365,22 @@ class PtyRuntime {
|
|
|
271
365
|
this.errorDebounce = null;
|
|
272
366
|
}
|
|
273
367
|
}
|
|
368
|
+
/**
|
|
369
|
+
* ANSI/control-stripped, whitespace-collapsed tail of the recent PTY output.
|
|
370
|
+
* Debug aid for diagnosing why an initial prompt isn't accepted — shows what
|
|
371
|
+
* the TUI is actually displaying (input box, a startup interstitial, a stuck
|
|
372
|
+
* dialog) at the moment we type or time out.
|
|
373
|
+
*/
|
|
374
|
+
recentScreen(maxChars = 600) {
|
|
375
|
+
const clean = this.ptyOutputBuffer
|
|
376
|
+
.replace(ANSI_RE, "")
|
|
377
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: strip terminal control chars
|
|
378
|
+
.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, "")
|
|
379
|
+
.replace(/[ \t]+/g, " ")
|
|
380
|
+
.replace(/\n{2,}/g, "\n")
|
|
381
|
+
.trim();
|
|
382
|
+
return clean.length > maxChars ? clean.slice(-maxChars) : clean;
|
|
383
|
+
}
|
|
274
384
|
scanForErrors(chunk) {
|
|
275
385
|
this.ptyOutputBuffer += chunk;
|
|
276
386
|
if (this.ptyOutputBuffer.length > 8 * 1024) {
|
|
@@ -29,12 +29,15 @@ class PtySession {
|
|
|
29
29
|
throw new Error("PtySession already started");
|
|
30
30
|
const bin = this.opts.bin ?? "claude";
|
|
31
31
|
const args = ["--verbose", "--settings", this.opts.settingsPath, ...(this.opts.extraArgs ?? [])];
|
|
32
|
-
const env = {
|
|
33
|
-
...process.env,
|
|
34
|
-
...(this.opts.env ?? {}),
|
|
35
|
-
};
|
|
32
|
+
const env = { ...process.env };
|
|
36
33
|
delete env.CLAUDECODE;
|
|
37
34
|
delete env.CLAUDE_CODE_ENTRYPOINT;
|
|
35
|
+
// Drop any inherited 1M-context override BEFORE applying the caller's env, so a
|
|
36
|
+
// CLAUDE_CODE_DISABLE_1M_CONTEXT sitting in cockpit's own environment can't pin
|
|
37
|
+
// every session to 200k and defeat a 1m pick. The caller sets it per-session
|
|
38
|
+
// via opts.env (200k → "1"; 1m → absent), which is applied on top here.
|
|
39
|
+
delete env.CLAUDE_CODE_DISABLE_1M_CONTEXT;
|
|
40
|
+
Object.assign(env, this.opts.env ?? {});
|
|
38
41
|
const spawnFile = process.platform === "darwin" ? "/bin/zsh" : bin;
|
|
39
42
|
const spawnArgs = process.platform === "darwin" ? ["-l", "-c", `exec ${[bin, ...args].map(shellQuote).join(" ")}`] : args;
|
|
40
43
|
let diagInfo = `platform=${process.platform}, file=${spawnFile}, cwd=${this.opts.cwd}`;
|