@alexjbarnes/cockpit 0.3.1 → 0.4.0
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/5292.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 +1 -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/chunks/12644.84908edd1bec8b5a.js +1 -0
- package/.next/static/chunks/1550-9a32fa02f6722fc7.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/25781-c77dc5d11fb85d82.js +201 -0
- 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-51ae17d3d12c0310.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-6954a12623e4bdcf.js +8 -0
- package/.next/static/chunks/app/(app)/agents/{page-6fcfd7ab6781814e.js → page-b984c01f39aed22e.js} +1 -1
- package/.next/static/chunks/app/(app)/claude-md/edit/page-575c5ccdc585516c.js +1 -0
- package/.next/static/chunks/app/(app)/claude-md/{page-cd9e2176a12ba241.js → page-aab6df0c14c657f3.js} +1 -1
- package/.next/static/chunks/app/(app)/commands/[name]/page-ea86a4400fd29210.js +6 -0
- package/.next/static/chunks/app/(app)/commands/{page-f126b608b04747ac.js → page-3867a45c1378c6fe.js} +1 -1
- package/.next/static/chunks/app/(app)/hooks/[event]/{page-28038323fd29adfa.js → page-2c41e810c15a1149.js} +2 -2
- package/.next/static/chunks/app/(app)/hooks/{page-f1f39284e53c0344.js → page-49f9dbb78a3f97df.js} +1 -1
- package/.next/static/chunks/app/(app)/inbox/[id]/page-885a258b67e47b00.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-592249fc155b9fe4.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-121bf977a839488c.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/page-ba516fa01db89ea0.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-0650e6f678fae5b8.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/page-da3fe23a43277e67.js +1 -0
- package/.next/static/chunks/app/(app)/{layout-ce9e1be301c60fe5.js → layout-3cd80708648e0723.js} +1 -1
- package/.next/static/chunks/app/(app)/mcp-servers/[name]/{page-d6d805a27ec0b0c0.js → page-9290a7940a32d9ac.js} +1 -1
- package/.next/static/chunks/app/(app)/mcp-servers/page-1e828264f81ee08c.js +1 -0
- package/.next/static/chunks/app/(app)/{page-027a5382da30ddb9.js → page-2d171ffc3e1945e1.js} +1 -1
- package/.next/static/chunks/app/(app)/plugins/page-7e70e0b3ead44a99.js +1 -0
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-4396e9d6df189336.js +13 -0
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/{page-c5fd013309ab3eba.js → page-76a072cbfe3d9f0e.js} +1 -1
- package/.next/static/chunks/app/(app)/reviews/{page-47530d93bb9d4a76.js → page-deaa44f0ce253da8.js} +1 -1
- package/.next/static/chunks/app/(app)/sessions/[id]/page-95bcce2e0b9f827a.js +1 -0
- package/.next/static/chunks/app/(app)/settings/appearance/{page-95902da748ac5f1e.js → page-433fcfb9b95fb22e.js} +1 -1
- package/.next/static/chunks/app/(app)/settings/notifications/page-e5309337f125a059.js +1 -0
- package/.next/static/chunks/app/(app)/settings/{page-8ed16a66fdde10cd.js → page-353ef8c508418af1.js} +1 -1
- package/.next/static/chunks/app/(app)/settings/providers/[id]/page-2cacea2e60ba435c.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/new/page-d40acef3abfc7c19.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/page-098d8f399c663944.js +1 -0
- package/.next/static/chunks/app/(app)/settings/session/page-706118ba33c2b99f.js +1 -0
- package/.next/static/chunks/app/(app)/skills/[name]/page-7dd7c0f316742c01.js +6 -0
- package/.next/static/chunks/app/(app)/skills/{page-c52773eacb27c04e.js → page-48d0bbe201180fc8.js} +1 -1
- 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/483101dd9c42fb97.css +1 -0
- package/.next/static/mmHo0MmzQHWjZATtI-VbH/_buildManifest.js +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 +8 -0
- 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 +21 -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 +112 -3
- package/dist/src/server/pty-session.js +7 -4
- package/dist/src/server/session-manager.js +338 -100
- 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 +39 -22
- package/dist/src/server/ws-handler.js +18 -6
- 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)/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)/files/page-f526eb95821e000e.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)/reviews/[owner]/[repo]/[number]/page-9ab2955c455bb5fa.js +0 -13
- 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/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/_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 → mmHo0MmzQHWjZATtI-VbH}/_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,
|
|
@@ -47,6 +53,7 @@ class PtyRuntime {
|
|
|
47
53
|
denyList: this.opts.denyList,
|
|
48
54
|
});
|
|
49
55
|
this.settingsPath = settingsPath;
|
|
56
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:hooks-ready", { elapsedMs: Date.now() - startAt });
|
|
50
57
|
this.pty = new pty_session_1.PtySession({
|
|
51
58
|
cwd,
|
|
52
59
|
settingsPath,
|
|
@@ -67,29 +74,103 @@ class PtyRuntime {
|
|
|
67
74
|
await this.pty.start();
|
|
68
75
|
}
|
|
69
76
|
catch (err) {
|
|
77
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:process-start-failed", {
|
|
78
|
+
elapsedMs: Date.now() - startAt,
|
|
79
|
+
error: err instanceof Error ? err.message : String(err),
|
|
80
|
+
});
|
|
70
81
|
await this.cleanup();
|
|
71
82
|
throw err;
|
|
72
83
|
}
|
|
84
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:process-started", { pid: this.pid, elapsedMs: Date.now() - startAt });
|
|
73
85
|
if (initialText) {
|
|
74
|
-
await this.
|
|
86
|
+
await this.deliverInitialPrompt(initialText);
|
|
75
87
|
}
|
|
88
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:start-complete", { elapsedMs: Date.now() - startAt });
|
|
76
89
|
this.fetchInitData();
|
|
77
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Type the first prompt into the freshly spawned TUI and confirm the CLI
|
|
93
|
+
* accepted it. waitForReplReady is only a heuristic (first 100 bytes plus a
|
|
94
|
+
* 2s settle), so on a slow or quiet machine the input box may not be live
|
|
95
|
+
* when the keystrokes land and they are swallowed with no error. Without a
|
|
96
|
+
* check the turn never starts and the only backstop is the caller's watchdog,
|
|
97
|
+
* which for scheduled jobs is a silent 30-60 minute timeout with an empty
|
|
98
|
+
* transcript. Resend until the UserPromptSubmit hook confirms acceptance,
|
|
99
|
+
* then fail fast so the job reports an error instead of hanging.
|
|
100
|
+
*/
|
|
101
|
+
async deliverInitialPrompt(text) {
|
|
102
|
+
const { sessionId } = this.opts;
|
|
103
|
+
const MAX_ATTEMPTS = 4;
|
|
104
|
+
const CONFIRM_TIMEOUT_MS = 8000;
|
|
105
|
+
// A submitted prompt writes a user turn to the JSONL transcript. Growth past
|
|
106
|
+
// this baseline proves the CLI accepted the prompt even when the
|
|
107
|
+
// UserPromptSubmit hook never arrives — that hook is the only other
|
|
108
|
+
// acceptance signal, and its loss used to fail an actively-working run (it
|
|
109
|
+
// resent the 7KB prompt into a live turn, then killed the process). The
|
|
110
|
+
// transcript is hook- and echo-independent, so we check it at the end of
|
|
111
|
+
// each attempt's window before resending or failing.
|
|
112
|
+
const baselineMsgs = (0, transcript_1.countTranscriptMessages)(this.opts.cliSessionId, this.opts.cwd);
|
|
113
|
+
const turnStarted = () => (0, transcript_1.countTranscriptMessages)(this.opts.cliSessionId, this.opts.cwd) > baselineMsgs;
|
|
114
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-begin", { textLen: text.length, maxAttempts: MAX_ATTEMPTS, baselineMsgs });
|
|
115
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
116
|
+
const pty = this.pty;
|
|
117
|
+
if (this.exited || !pty) {
|
|
118
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-aborted", { attempt, exited: this.exited, hasPty: !!pty });
|
|
119
|
+
throw new Error("claude exited before the initial prompt was delivered");
|
|
120
|
+
}
|
|
121
|
+
let timer = null;
|
|
122
|
+
const accepted = new Promise((resolve) => {
|
|
123
|
+
this.promptAccepted = () => resolve(true);
|
|
124
|
+
timer = setTimeout(() => resolve(false), CONFIRM_TIMEOUT_MS);
|
|
125
|
+
});
|
|
126
|
+
const attemptAt = Date.now();
|
|
127
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-attempt", { attempt, screenBefore: this.recentScreen() });
|
|
128
|
+
await pty.sendText(text);
|
|
129
|
+
const ok = await accepted;
|
|
130
|
+
if (timer)
|
|
131
|
+
clearTimeout(timer);
|
|
132
|
+
this.promptAccepted = null;
|
|
133
|
+
if (ok) {
|
|
134
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-accepted", { attempt, waitedMs: Date.now() - attemptAt });
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// The hook did not fire in this window. It can be lost even though the CLI
|
|
138
|
+
// accepted the prompt and started working, so before resending or failing,
|
|
139
|
+
// check whether a turn has actually started. If it has, the prompt landed;
|
|
140
|
+
// do not resend into a live turn or kill a working run.
|
|
141
|
+
if (turnStarted()) {
|
|
142
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-accepted-via-transcript", { attempt, waitedMs: Date.now() - attemptAt });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-timeout", { attempt, waitedMs: Date.now() - attemptAt, screenAfter: this.recentScreen() });
|
|
146
|
+
console.log(`[pty-runtime] initial prompt not confirmed for ${sessionId.slice(0, 8)} (attempt ${attempt}/${MAX_ATTEMPTS}), resending`);
|
|
147
|
+
}
|
|
148
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:deliver-failed", { attempts: MAX_ATTEMPTS });
|
|
149
|
+
throw new Error(`claude did not accept the initial prompt after ${MAX_ATTEMPTS} attempts`);
|
|
150
|
+
}
|
|
78
151
|
fetchInitData() {
|
|
79
|
-
const
|
|
152
|
+
const { sessionId } = this.opts;
|
|
153
|
+
const sid = sessionId.slice(0, 8);
|
|
80
154
|
console.log(`[pty-runtime] fetching CLI init data for session ${sid}`);
|
|
155
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-begin");
|
|
81
156
|
(0, cli_init_fetch_1.fetchCliInitData)({ cwd: this.opts.cwd, bin: this.opts.claudeBin })
|
|
82
157
|
.then((initData) => {
|
|
83
158
|
if (initData && !this.exited) {
|
|
84
159
|
console.log(`[pty-runtime] emitting init event for session ${sid}: ${initData.slashCommands.length} commands`);
|
|
160
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-done", {
|
|
161
|
+
slashCommands: initData.slashCommands.length,
|
|
162
|
+
mcpServers: initData.mcpServers?.length ?? 0,
|
|
163
|
+
});
|
|
85
164
|
this.emit([{ type: "init", initData }]);
|
|
86
165
|
}
|
|
87
166
|
else {
|
|
88
167
|
console.log(`[pty-runtime] init fetch returned ${initData ? "data but session exited" : "null"} for session ${sid}`);
|
|
168
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-empty", { exited: this.exited, hadData: !!initData });
|
|
89
169
|
}
|
|
90
170
|
})
|
|
91
171
|
.catch((err) => {
|
|
92
172
|
console.log(`[pty-runtime] init fetch failed for session ${sid}: ${err}`);
|
|
173
|
+
(0, debug_logger_1.logDiag)(sessionId, "pty:init-fetch-failed", { error: err instanceof Error ? err.message : String(err) });
|
|
93
174
|
});
|
|
94
175
|
}
|
|
95
176
|
async sendText(text) {
|
|
@@ -136,9 +217,16 @@ class PtyRuntime {
|
|
|
136
217
|
/** Called by SessionManager.respondToPermission when this session is on the pty runtime. */
|
|
137
218
|
notifyPermissionDecision(requestId, decision) {
|
|
138
219
|
const resolver = this.pendingPermissions.get(requestId);
|
|
139
|
-
if (!resolver)
|
|
220
|
+
if (!resolver) {
|
|
221
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-decision-unmatched", { requestId, behavior: decision.behavior });
|
|
140
222
|
return false;
|
|
223
|
+
}
|
|
141
224
|
this.pendingPermissions.delete(requestId);
|
|
225
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-decision", {
|
|
226
|
+
requestId,
|
|
227
|
+
behavior: decision.behavior,
|
|
228
|
+
pending: this.pendingPermissions.size,
|
|
229
|
+
});
|
|
142
230
|
resolver(decision);
|
|
143
231
|
return true;
|
|
144
232
|
}
|
|
@@ -182,11 +270,14 @@ class PtyRuntime {
|
|
|
182
270
|
onUserPromptSubmit: (payload) => {
|
|
183
271
|
this.cancelErrorDebounce();
|
|
184
272
|
this.ptyOutputBuffer = "";
|
|
273
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:hook-user-prompt-submit", { armed: !!this.promptAccepted });
|
|
274
|
+
this.promptAccepted?.();
|
|
185
275
|
this.emit((0, hook_event_translator_1.translateHookEvent)("UserPromptSubmit", payload));
|
|
186
276
|
},
|
|
187
277
|
onUserPromptExpansion: (payload) => {
|
|
188
278
|
this.cancelErrorDebounce();
|
|
189
279
|
this.ptyOutputBuffer = "";
|
|
280
|
+
this.promptAccepted?.();
|
|
190
281
|
const cmd = typeof payload.command_name === "string" ? payload.command_name : "unknown";
|
|
191
282
|
const sid = this.opts.sessionId.slice(0, 8);
|
|
192
283
|
console.log(`[pty-runtime] UserPromptExpansion: command=${cmd}, session=${sid}`);
|
|
@@ -243,6 +334,7 @@ class PtyRuntime {
|
|
|
243
334
|
toolInput: toolInput ? JSON.stringify(toolInput) : "",
|
|
244
335
|
rawToolInput: toolInput,
|
|
245
336
|
};
|
|
337
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-request", { requestId, toolName });
|
|
246
338
|
return new Promise((resolve) => {
|
|
247
339
|
this.pendingPermissions.set(requestId, resolve);
|
|
248
340
|
try {
|
|
@@ -250,6 +342,7 @@ class PtyRuntime {
|
|
|
250
342
|
}
|
|
251
343
|
catch (err) {
|
|
252
344
|
this.pendingPermissions.delete(requestId);
|
|
345
|
+
(0, debug_logger_1.logDiag)(this.opts.sessionId, "pty:permission-handler-error", { requestId, toolName, error: String(err) });
|
|
253
346
|
resolve({ behavior: "deny", message: `cockpit handler error: ${String(err)}` });
|
|
254
347
|
}
|
|
255
348
|
});
|
|
@@ -271,6 +364,22 @@ class PtyRuntime {
|
|
|
271
364
|
this.errorDebounce = null;
|
|
272
365
|
}
|
|
273
366
|
}
|
|
367
|
+
/**
|
|
368
|
+
* ANSI/control-stripped, whitespace-collapsed tail of the recent PTY output.
|
|
369
|
+
* Debug aid for diagnosing why an initial prompt isn't accepted — shows what
|
|
370
|
+
* the TUI is actually displaying (input box, a startup interstitial, a stuck
|
|
371
|
+
* dialog) at the moment we type or time out.
|
|
372
|
+
*/
|
|
373
|
+
recentScreen(maxChars = 600) {
|
|
374
|
+
const clean = this.ptyOutputBuffer
|
|
375
|
+
.replace(ANSI_RE, "")
|
|
376
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: strip terminal control chars
|
|
377
|
+
.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, "")
|
|
378
|
+
.replace(/[ \t]+/g, " ")
|
|
379
|
+
.replace(/\n{2,}/g, "\n")
|
|
380
|
+
.trim();
|
|
381
|
+
return clean.length > maxChars ? clean.slice(-maxChars) : clean;
|
|
382
|
+
}
|
|
274
383
|
scanForErrors(chunk) {
|
|
275
384
|
this.ptyOutputBuffer += chunk;
|
|
276
385
|
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}`;
|