@alexjbarnes/cockpit 0.2.0 → 0.3.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 +16 -3
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +99 -3
- package/.next/react-loadable-manifest.json +18 -2
- package/.next/required-server-files.js +3 -0
- package/.next/required-server-files.json +3 -0
- package/.next/routes-manifest.json +86 -0
- package/.next/server/app/(app)/agents/[name]/page.js +2 -2
- 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)/changes/page.js +2 -2
- package/.next/server/app/(app)/changes/page.js.nft.json +1 -1
- package/.next/server/app/(app)/changes/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 +2 -2
- 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)/files/page.js +2 -2
- package/.next/server/app/(app)/files/page.js.nft.json +1 -1
- package/.next/server/app/(app)/files/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)/reviews/[owner]/[repo]/[number]/page.js +10 -10
- 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 -0
- package/.next/server/app/(app)/settings/appearance/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/appearance/page_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/(app)/settings/providers/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/providers/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/settings/providers/new/page.js +2 -0
- package/.next/server/app/(app)/settings/providers/new/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/providers/new/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/settings/providers/page.js +2 -0
- package/.next/server/app/(app)/settings/providers/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/providers/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/settings/session/page.js +2 -0
- package/.next/server/app/(app)/settings/session/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/session/page_client-reference-manifest.js +1 -0
- 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_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_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/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/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 +2 -2
- package/.next/server/app/api/inbox/route.js +2 -2
- 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/route.js +1 -1
- 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/route.js +1 -1
- package/.next/server/app/api/notifications/route.js +1 -1
- package/.next/server/app/api/notifications/test/route.js +1 -1
- package/.next/server/app/api/providers/[id]/route.js +1 -0
- package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/providers/route.js +1 -0
- package/.next/server/app/api/providers/route.js.nft.json +1 -0
- package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
- 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]/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]/tabs/route.js +1 -0
- package/.next/server/app/api/sessions/[id]/tabs/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/[id]/tabs/route_client-reference-manifest.js +1 -0
- 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/thinking/route.js +1 -0
- package/.next/server/app/api/sessions/thinking/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/thinking/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/api/terminal/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/terminal/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/terminal/route.js +1 -0
- package/.next/server/app/api/terminal/route.js.nft.json +1 -0
- package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/usage/route.js +1 -1
- package/.next/server/app/api/version/changelog/route.js +1 -0
- package/.next/server/app/api/version/changelog/route.js.nft.json +1 -0
- package/.next/server/app/api/version/changelog/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/version/cockpit/changelog/route.js +1 -0
- package/.next/server/app/api/version/cockpit/changelog/route.js.nft.json +1 -0
- package/.next/server/app/api/version/cockpit/changelog/route_client-reference-manifest.js +1 -0
- 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/changes.html +1 -1
- package/.next/server/app/changes.rsc +4 -4
- package/.next/server/app/changes.segments/!KGFwcCk/changes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/changes.segments/!KGFwcCk/changes.segment.rsc +1 -1
- package/.next/server/app/changes.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/changes.segments/_full.segment.rsc +4 -4
- package/.next/server/app/changes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/changes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/changes.segments/_tree.segment.rsc +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/files.html +1 -1
- package/.next/server/app/files.rsc +4 -4
- package/.next/server/app/files.segments/!KGFwcCk/files/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/files.segments/!KGFwcCk/files.segment.rsc +1 -1
- package/.next/server/app/files.segments/!KGFwcCk.segment.rsc +2 -2
- package/.next/server/app/files.segments/_full.segment.rsc +4 -4
- package/.next/server/app/files.segments/_head.segment.rsc +1 -1
- package/.next/server/app/files.segments/_index.segment.rsc +2 -2
- package/.next/server/app/files.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_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- 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 +1 -1
- 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/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 -0
- package/.next/server/app/settings/appearance.meta +17 -0
- package/.next/server/app/settings/appearance.rsc +23 -0
- package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings/appearance.segment.rsc +5 -0
- package/.next/server/app/settings/appearance.segments/!KGFwcCk/settings.segment.rsc +5 -0
- package/.next/server/app/settings/appearance.segments/!KGFwcCk.segment.rsc +7 -0
- package/.next/server/app/settings/appearance.segments/_full.segment.rsc +23 -0
- package/.next/server/app/settings/appearance.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/appearance.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings/appearance.segments/_tree.segment.rsc +2 -0
- 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 -0
- package/.next/server/app/settings/providers/new.meta +18 -0
- package/.next/server/app/settings/providers/new.rsc +23 -0
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers/new.segment.rsc +5 -0
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings/providers.segment.rsc +5 -0
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk/settings.segment.rsc +5 -0
- package/.next/server/app/settings/providers/new.segments/!KGFwcCk.segment.rsc +7 -0
- package/.next/server/app/settings/providers/new.segments/_full.segment.rsc +23 -0
- package/.next/server/app/settings/providers/new.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/providers/new.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings/providers/new.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/providers.html +1 -0
- package/.next/server/app/settings/providers.meta +17 -0
- package/.next/server/app/settings/providers.rsc +23 -0
- package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/providers.segments/!KGFwcCk/settings/providers.segment.rsc +5 -0
- package/.next/server/app/settings/providers.segments/!KGFwcCk/settings.segment.rsc +5 -0
- package/.next/server/app/settings/providers.segments/!KGFwcCk.segment.rsc +7 -0
- package/.next/server/app/settings/providers.segments/_full.segment.rsc +23 -0
- package/.next/server/app/settings/providers.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/providers.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings/providers.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/settings/session.html +1 -0
- package/.next/server/app/settings/session.meta +17 -0
- package/.next/server/app/settings/session.rsc +23 -0
- package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/session.segments/!KGFwcCk/settings/session.segment.rsc +5 -0
- package/.next/server/app/settings/session.segments/!KGFwcCk/settings.segment.rsc +5 -0
- package/.next/server/app/settings/session.segments/!KGFwcCk.segment.rsc +7 -0
- package/.next/server/app/settings/session.segments/_full.segment.rsc +23 -0
- package/.next/server/app/settings/session.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/session.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings/session.segments/_tree.segment.rsc +2 -0
- 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 +16 -3
- package/.next/server/chunks/1002.js +18 -0
- package/.next/server/chunks/1011.js +1 -0
- package/.next/server/chunks/1659.js +1 -1
- package/.next/server/chunks/1979.js +2 -2
- package/.next/server/chunks/2408.js +1 -1
- package/.next/server/chunks/{7627.js → 3006.js} +3 -3
- package/.next/server/chunks/3434.js +1 -0
- package/.next/server/chunks/{5920.js → 4342.js} +1 -1
- package/.next/server/chunks/4352.js +1 -0
- package/.next/server/chunks/4445.js +1 -1
- package/.next/server/chunks/7782.js +6 -0
- package/.next/server/chunks/8148.js +1 -0
- package/.next/server/chunks/9599.js +11 -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/{35922.5bdf78a760129504.js → 13541.056c34ca7fde6869.js} +1 -1
- package/.next/static/chunks/26126-97874904b42befb8.js +1 -0
- package/.next/static/chunks/31010-6e87f77b97544424.js +1 -0
- package/.next/static/chunks/3765-d323c6675307a63e.js +20 -0
- package/.next/static/chunks/{11242-d240a18d4e59390b.js → 41487-d802643f4a8fad3c.js} +5 -5
- package/.next/static/chunks/48273-bbd15bac6733dfc4.js +6 -0
- package/.next/static/chunks/63606.a387b0261d6523ab.js +1 -0
- package/.next/static/chunks/6935-f436a624267529fb.js +1 -0
- package/.next/static/chunks/{69427.0f379c6bdea95405.js → 69427.a0b463c808aa54c8.js} +1 -1
- package/.next/static/chunks/86939-dfc6f8eb395caa89.js +1 -0
- package/.next/static/chunks/app/(app)/agents/[name]/page-8bdd0359043537d4.js +8 -0
- package/.next/static/chunks/app/(app)/agents/page-6fcfd7ab6781814e.js +1 -0
- package/.next/static/chunks/app/(app)/changes/page-4549a5bd72d77e3e.js +1 -0
- package/.next/static/chunks/app/(app)/claude-md/edit/page-08e6e120e71979f4.js +1 -0
- package/.next/static/chunks/app/(app)/claude-md/page-cd9e2176a12ba241.js +1 -0
- package/.next/static/chunks/app/(app)/commands/[name]/page-7cdfdef29ded0aa0.js +6 -0
- package/.next/static/chunks/app/(app)/commands/page-f126b608b04747ac.js +1 -0
- package/.next/static/chunks/app/(app)/files/page-f526eb95821e000e.js +1 -0
- package/.next/static/chunks/app/(app)/hooks/[event]/page-28038323fd29adfa.js +6 -0
- package/.next/static/chunks/app/(app)/hooks/page-f1f39284e53c0344.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/[id]/page-bc1ff3a0db0114a4.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-82e03870103ce9bd.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-7fb788f772ff2129.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/page-a5856b9ae967ff59.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-b7c513402db11db6.js +1 -0
- package/.next/static/chunks/app/(app)/jobs/page-e9bbd6c116b9699f.js +1 -0
- package/.next/static/chunks/app/(app)/{layout-81c1899969de11e6.js → layout-ce9e1be301c60fe5.js} +1 -1
- package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-d6d805a27ec0b0c0.js +1 -0
- package/.next/static/chunks/app/(app)/mcp-servers/page-4b7276d43451cd43.js +1 -0
- package/.next/static/chunks/app/(app)/page-027a5382da30ddb9.js +1 -0
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-9ab2955c455bb5fa.js +13 -0
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/{page-c7473a899c7c59c3.js → page-c5fd013309ab3eba.js} +1 -1
- package/.next/static/chunks/app/(app)/reviews/{page-0e6e7395a4f62b50.js → page-47530d93bb9d4a76.js} +1 -1
- package/.next/static/chunks/app/(app)/sessions/[id]/page-94f891e1b54fd05f.js +1 -0
- package/.next/static/chunks/app/(app)/settings/appearance/page-95902da748ac5f1e.js +1 -0
- package/.next/static/chunks/app/(app)/settings/notifications/{page-a28db2ebc9fd0de8.js → page-229f1db6beb1d19c.js} +1 -1
- package/.next/static/chunks/app/(app)/settings/page-8ed16a66fdde10cd.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/[id]/page-13654263246617b3.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/new/page-e1798e321ccbc6df.js +1 -0
- package/.next/static/chunks/app/(app)/settings/providers/page-0bb4c1db2ee35b3d.js +1 -0
- package/.next/static/chunks/app/(app)/settings/session/page-ab216a8fa37a0f76.js +1 -0
- package/.next/static/chunks/app/(app)/skills/[name]/page-8ab85d5090967ee4.js +6 -0
- package/.next/static/chunks/app/(app)/skills/page-c52773eacb27c04e.js +1 -0
- package/.next/static/chunks/app/_global-error/page-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/agents/[name]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/agents/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/auth/check/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/auth/setup/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/auth/ws-token/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/btw/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/claude-md/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/commands/[name]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/commands/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/defaults/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/filesystem/browse/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/filesystem/files/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/filesystem/mkdir/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/filesystem/read/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/clone/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/commit/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/diff/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/discard/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/generate-message/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/push/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/git/status/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/file-content/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/orgs/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/prs/checks/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/prs/diff/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/prs/review/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/prs/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/prs/view/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/repos/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/github/review-session/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/health/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/hooks/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/inbox/[id]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/inbox/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/runs/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/[id]/trigger/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/mcp-discover/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/jobs/status/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/[name]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/mcp-servers/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/notifications/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/notifications/test/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/providers/[id]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/providers/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/reviews/pinned/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/mcp/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/search/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/tabs/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/bulk-delete/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/by-ids/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/group/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/pinned/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/search/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/sessions/thinking/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/skills/[name]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/skills/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/terminal/[id]/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/terminal/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/usage/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/version/changelog/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/version/cockpit/changelog/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/version/cockpit/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/app/api/version/route-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/e868780c.f24b6da08e62c7b2.js +18 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fc747760bd4c8a4b.js +1 -0
- package/.next/static/chunks/webpack-e31bb45fa59caed8.js +1 -0
- package/.next/static/css/3f8af4ae6f812d5c.css +1 -0
- package/.next/static/zr8XZzqb74eHitdlkpo-C/_buildManifest.js +1 -0
- package/bin/cockpit-hook-bridge.mjs +101 -0
- package/dist/server.js +11 -1
- package/dist/src/lib/models.js +48 -7
- package/dist/src/server/auth.js +32 -10
- package/dist/src/server/claude-settings.js +153 -0
- package/dist/src/server/cli-init-fetch.js +86 -0
- package/dist/src/server/cron-utils.js +16 -5
- package/dist/src/server/debug-logger.js +2 -2
- package/dist/src/server/defaults.js +16 -7
- package/dist/src/server/fs-watcher.js +50 -0
- package/dist/src/server/hook-bridge-path.js +34 -0
- package/dist/src/server/hook-event-translator.js +211 -0
- package/dist/src/server/hook-router.js +150 -0
- package/dist/src/server/inbox.js +14 -10
- package/dist/src/server/job-lock.js +103 -0
- package/dist/src/server/job-scheduler.js +23 -8
- package/dist/src/server/job-storage.js +28 -13
- package/dist/src/server/notification-settings.js +13 -9
- package/dist/src/server/paths.js +23 -0
- package/dist/src/server/plans.js +8 -5
- package/dist/src/server/providers.js +128 -0
- package/dist/src/server/pty-runtime.js +324 -0
- package/dist/src/server/pty-session.js +178 -0
- package/dist/src/server/session-manager.js +727 -144
- package/dist/src/server/session-prefs.js +33 -8
- package/dist/src/server/singleton.js +18 -0
- package/dist/src/server/stream-processor.js +61 -48
- package/dist/src/server/terminal-manager.js +153 -0
- package/dist/src/server/todo-watcher.js +178 -0
- package/dist/src/server/transcript-watcher.js +91 -0
- package/dist/src/server/transcript.js +177 -11
- package/dist/src/server/ws-handler.js +235 -61
- package/next.config.ts +1 -0
- package/package.json +10 -3
- package/public/fonts/symbols-nerd-font-mono.woff2 +0 -0
- package/.next/server/chunks/1941.js +0 -9
- package/.next/server/chunks/2444.js +0 -6
- package/.next/static/brzairTqHmHwvfgKpdkYX/_buildManifest.js +0 -1
- package/.next/static/chunks/3765-a4c7a493ec83f918.js +0 -20
- package/.next/static/chunks/75866-76a3987dda1295ae.js +0 -1
- package/.next/static/chunks/93273-87110c1449e1e7fd.js +0 -6
- package/.next/static/chunks/app/(app)/agents/[name]/page-3ec9a3460e8e9006.js +0 -8
- package/.next/static/chunks/app/(app)/agents/page-d6d504e7d7757ea2.js +0 -1
- package/.next/static/chunks/app/(app)/changes/page-a09bf4742aa8b5ce.js +0 -1
- package/.next/static/chunks/app/(app)/claude-md/edit/page-ab42921ba2618dc3.js +0 -1
- package/.next/static/chunks/app/(app)/claude-md/page-c4c8b20aa002a94a.js +0 -1
- package/.next/static/chunks/app/(app)/commands/[name]/page-2124ffed9a4e95a3.js +0 -6
- package/.next/static/chunks/app/(app)/commands/page-d5bf1bddd17e31dd.js +0 -1
- package/.next/static/chunks/app/(app)/files/page-04e4e5bf1ca89945.js +0 -1
- package/.next/static/chunks/app/(app)/hooks/[event]/page-d988623e739973b5.js +0 -6
- package/.next/static/chunks/app/(app)/hooks/page-818242d7db432578.js +0 -1
- package/.next/static/chunks/app/(app)/inbox/[id]/page-c33dc94e309ff117.js +0 -1
- package/.next/static/chunks/app/(app)/inbox/page-ca3e1724b5072734.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-3a1c927d76333bf0.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/page-8e698e00b90968b0.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-f942df0b7c1d280b.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/page-7a88cc6ac34550c2.js +0 -1
- package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-3541bf3ccdef9145.js +0 -1
- package/.next/static/chunks/app/(app)/mcp-servers/page-3927dfd03d921040.js +0 -1
- package/.next/static/chunks/app/(app)/page-594120e0ea1df527.js +0 -1
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-74c23b04f5c3ff88.js +0 -13
- package/.next/static/chunks/app/(app)/sessions/[id]/page-435e9fb4dd34007d.js +0 -1
- package/.next/static/chunks/app/(app)/settings/page-f8ada7997c0d5b03.js +0 -1
- package/.next/static/chunks/app/(app)/skills/[name]/page-5dbe1e7682880145.js +0 -6
- package/.next/static/chunks/app/(app)/skills/page-fd1986ad7e060f4d.js +0 -1
- package/.next/static/chunks/app/_global-error/page-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/agents/[name]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/agents/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/auth/check/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/auth/setup/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/auth/ws-token/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/btw/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/claude-md/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/commands/[name]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/commands/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/defaults/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/browse/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/files/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/mkdir/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/filesystem/read/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/clone/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/commit/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/discard/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/generate-message/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/push/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/file-content/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/orgs/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/checks/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/diff/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/review/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/prs/view/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/repos/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/github/review-session/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/health/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/hooks/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/inbox/[id]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/inbox/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/trigger/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/mcp-discover/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/jobs/status/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/[name]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/notifications/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/notifications/test/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/reviews/pinned/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/mcp/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/search/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/bulk-delete/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/by-ids/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/group/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/pinned/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/sessions/search/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/skills/[name]/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/skills/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/usage/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/version/cockpit/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/app/api/version/route-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-65c661eddfc65f5b.js +0 -1
- package/.next/static/chunks/webpack-3461a05957b13f46.js +0 -1
- package/.next/static/css/f04f303b5708dd90.css +0 -1
- /package/.next/static/{brzairTqHmHwvfgKpdkYX → zr8XZzqb74eHitdlkpo-C}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getProviders = getProviders;
|
|
4
|
+
exports.getProvider = getProvider;
|
|
5
|
+
exports.addProvider = addProvider;
|
|
6
|
+
exports.updateProvider = updateProvider;
|
|
7
|
+
exports.deleteProvider = deleteProvider;
|
|
8
|
+
exports.setProviders = setProviders;
|
|
9
|
+
exports.resolveProviderModel = resolveProviderModel;
|
|
10
|
+
const node_fs_1 = require("node:fs");
|
|
11
|
+
const node_path_1 = require("node:path");
|
|
12
|
+
const uuid_1 = require("uuid");
|
|
13
|
+
const models_1 = require("../lib/models");
|
|
14
|
+
const paths_1 = require("../server/paths");
|
|
15
|
+
function prefsDir() {
|
|
16
|
+
return (0, paths_1.getCockpitDir)();
|
|
17
|
+
}
|
|
18
|
+
function providersFile() {
|
|
19
|
+
return (0, node_path_1.join)(prefsDir(), "providers.json");
|
|
20
|
+
}
|
|
21
|
+
function validateProvider(p) {
|
|
22
|
+
for (const m of p.models) {
|
|
23
|
+
if (!Array.isArray(m.contextSizes) || m.contextSizes.length === 0) {
|
|
24
|
+
throw new Error(`provider${p.id ? ` ${p.id}` : ""}: model ${m.modelId} has empty contextSizes`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function buildAnthropicProvider() {
|
|
29
|
+
return {
|
|
30
|
+
id: "anthropic",
|
|
31
|
+
name: "Anthropic",
|
|
32
|
+
envVars: {},
|
|
33
|
+
models: (0, models_1.toProviderModels)(),
|
|
34
|
+
isBuiltin: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
let cache = null;
|
|
38
|
+
function loadCustom() {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse((0, node_fs_1.readFileSync)(providersFile(), "utf-8"));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function saveCustom(providers) {
|
|
47
|
+
try {
|
|
48
|
+
(0, node_fs_1.mkdirSync)(prefsDir(), { recursive: true });
|
|
49
|
+
(0, node_fs_1.writeFileSync)(providersFile(), JSON.stringify(providers, null, 2) + "\n");
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// best effort
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function getProviders() {
|
|
56
|
+
if (!cache) {
|
|
57
|
+
cache = [buildAnthropicProvider(), ...loadCustom()];
|
|
58
|
+
}
|
|
59
|
+
return cache;
|
|
60
|
+
}
|
|
61
|
+
function getProvider(id) {
|
|
62
|
+
return getProviders().find((p) => p.id === id);
|
|
63
|
+
}
|
|
64
|
+
function addProvider(provider) {
|
|
65
|
+
const newProvider = { ...provider, id: (0, uuid_1.v4)() };
|
|
66
|
+
validateProvider(newProvider);
|
|
67
|
+
const all = getProviders();
|
|
68
|
+
const custom = all.filter((p) => !p.isBuiltin);
|
|
69
|
+
custom.push(newProvider);
|
|
70
|
+
saveCustom(custom);
|
|
71
|
+
cache = [buildAnthropicProvider(), ...custom];
|
|
72
|
+
return newProvider;
|
|
73
|
+
}
|
|
74
|
+
function updateProvider(id, partial) {
|
|
75
|
+
if (id === "anthropic")
|
|
76
|
+
throw new Error("Cannot modify built-in provider");
|
|
77
|
+
const all = getProviders();
|
|
78
|
+
const custom = all.filter((p) => !p.isBuiltin);
|
|
79
|
+
const idx = custom.findIndex((p) => p.id === id);
|
|
80
|
+
if (idx === -1)
|
|
81
|
+
throw new Error(`Provider not found: ${id}`);
|
|
82
|
+
const merged = { ...custom[idx], ...partial, id };
|
|
83
|
+
validateProvider(merged);
|
|
84
|
+
custom[idx] = merged;
|
|
85
|
+
saveCustom(custom);
|
|
86
|
+
cache = [buildAnthropicProvider(), ...custom];
|
|
87
|
+
return custom[idx];
|
|
88
|
+
}
|
|
89
|
+
function deleteProvider(id) {
|
|
90
|
+
if (id === "anthropic")
|
|
91
|
+
throw new Error("Cannot delete built-in provider");
|
|
92
|
+
const all = getProviders();
|
|
93
|
+
const custom = all.filter((p) => !p.isBuiltin && p.id !== id);
|
|
94
|
+
if (custom.length === all.filter((p) => !p.isBuiltin).length) {
|
|
95
|
+
throw new Error(`Provider not found: ${id}`);
|
|
96
|
+
}
|
|
97
|
+
saveCustom(custom);
|
|
98
|
+
cache = [buildAnthropicProvider(), ...custom];
|
|
99
|
+
}
|
|
100
|
+
function setProviders(providers) {
|
|
101
|
+
const custom = providers.filter((p) => !p.isBuiltin);
|
|
102
|
+
for (const p of custom)
|
|
103
|
+
validateProvider(p);
|
|
104
|
+
saveCustom(custom);
|
|
105
|
+
cache = [buildAnthropicProvider(), ...custom];
|
|
106
|
+
}
|
|
107
|
+
function resolveProviderModel(modelId) {
|
|
108
|
+
if (!modelId)
|
|
109
|
+
return null;
|
|
110
|
+
const colon = modelId.indexOf(":");
|
|
111
|
+
if (colon > 0) {
|
|
112
|
+
const providerId = modelId.slice(0, colon);
|
|
113
|
+
const bareModel = modelId.slice(colon + 1);
|
|
114
|
+
const provider = getProvider(providerId);
|
|
115
|
+
if (provider) {
|
|
116
|
+
const model = provider.models.find((m) => m.modelId === bareModel);
|
|
117
|
+
if (model)
|
|
118
|
+
return { provider, model };
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
for (const provider of getProviders()) {
|
|
123
|
+
const model = provider.models.find((m) => m.modelId === modelId);
|
|
124
|
+
if (model)
|
|
125
|
+
return { provider, model };
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PtyRuntime = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
const claude_settings_1 = require("./claude-settings");
|
|
6
|
+
const cli_init_fetch_1 = require("./cli-init-fetch");
|
|
7
|
+
const hook_event_translator_1 = require("./hook-event-translator");
|
|
8
|
+
const pty_session_1 = require("./pty-session");
|
|
9
|
+
/**
|
|
10
|
+
* Owns a claude PTY process plus its HookRouter registration. Translates
|
|
11
|
+
* hook payloads into ParsedEvents and pumps them through opts.onEvents so
|
|
12
|
+
* SessionManager's existing stream-processor pipeline drives status, todos,
|
|
13
|
+
* pending permissions, etc.
|
|
14
|
+
*
|
|
15
|
+
* PermissionRequest hooks block the PTY until cockpit responds. We hold the
|
|
16
|
+
* resolver in `pendingPermissions` and the caller calls
|
|
17
|
+
* `notifyPermissionDecision` from its UI-facing respondToPermission path.
|
|
18
|
+
*/
|
|
19
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: strip ANSI escape sequences
|
|
20
|
+
const ANSI_RE = /\x1b\[[0-9;]*[a-zA-Z]/g;
|
|
21
|
+
class PtyRuntime {
|
|
22
|
+
opts;
|
|
23
|
+
pty = null;
|
|
24
|
+
settingsPath = null;
|
|
25
|
+
pendingPermissions = new Map();
|
|
26
|
+
exited = false;
|
|
27
|
+
cleaned = false;
|
|
28
|
+
ptyOutputBuffer = "";
|
|
29
|
+
errorDebounce = null;
|
|
30
|
+
constructor(opts) {
|
|
31
|
+
this.opts = opts;
|
|
32
|
+
}
|
|
33
|
+
get pid() {
|
|
34
|
+
return this.pty?.pid ?? -1;
|
|
35
|
+
}
|
|
36
|
+
get isAlive() {
|
|
37
|
+
return !!this.pty && !this.exited;
|
|
38
|
+
}
|
|
39
|
+
async start(initialText) {
|
|
40
|
+
const { sessionId, cwd, hookRouter } = this.opts;
|
|
41
|
+
const token = hookRouter.register(sessionId, this.buildHandler());
|
|
42
|
+
const { settingsPath, env } = await (0, claude_settings_1.prepareHookSettings)({
|
|
43
|
+
sessionId,
|
|
44
|
+
hookUrl: hookRouter.getUrl(),
|
|
45
|
+
hookToken: token,
|
|
46
|
+
allowList: this.opts.allowList,
|
|
47
|
+
denyList: this.opts.denyList,
|
|
48
|
+
});
|
|
49
|
+
this.settingsPath = settingsPath;
|
|
50
|
+
this.pty = new pty_session_1.PtySession({
|
|
51
|
+
cwd,
|
|
52
|
+
settingsPath,
|
|
53
|
+
env: { ...env, ...(this.opts.extraEnv ?? {}) },
|
|
54
|
+
extraArgs: this.opts.extraArgs,
|
|
55
|
+
bin: this.opts.claudeBin,
|
|
56
|
+
onData: (chunk) => {
|
|
57
|
+
this.scanForErrors(chunk);
|
|
58
|
+
this.opts.onPtyData?.(chunk);
|
|
59
|
+
},
|
|
60
|
+
onExit: (info) => {
|
|
61
|
+
this.exited = true;
|
|
62
|
+
this.opts.onExit(info);
|
|
63
|
+
this.cleanup().catch(() => { });
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
try {
|
|
67
|
+
await this.pty.start();
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
await this.cleanup();
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
if (initialText) {
|
|
74
|
+
await this.pty.sendText(initialText);
|
|
75
|
+
}
|
|
76
|
+
this.fetchInitData();
|
|
77
|
+
}
|
|
78
|
+
fetchInitData() {
|
|
79
|
+
const sid = this.opts.sessionId.slice(0, 8);
|
|
80
|
+
console.log(`[pty-runtime] fetching CLI init data for session ${sid}`);
|
|
81
|
+
(0, cli_init_fetch_1.fetchCliInitData)({ cwd: this.opts.cwd, bin: this.opts.claudeBin })
|
|
82
|
+
.then((initData) => {
|
|
83
|
+
if (initData && !this.exited) {
|
|
84
|
+
console.log(`[pty-runtime] emitting init event for session ${sid}: ${initData.slashCommands.length} commands`);
|
|
85
|
+
this.emit([{ type: "init", initData }]);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(`[pty-runtime] init fetch returned ${initData ? "data but session exited" : "null"} for session ${sid}`);
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
.catch((err) => {
|
|
92
|
+
console.log(`[pty-runtime] init fetch failed for session ${sid}: ${err}`);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async sendText(text) {
|
|
96
|
+
if (!this.pty)
|
|
97
|
+
throw new Error("PtyRuntime not started");
|
|
98
|
+
await this.pty.sendText(text);
|
|
99
|
+
}
|
|
100
|
+
sendSlash(command) {
|
|
101
|
+
if (!this.pty)
|
|
102
|
+
throw new Error("PtyRuntime not started");
|
|
103
|
+
this.pty.sendSlash(command);
|
|
104
|
+
}
|
|
105
|
+
sendKey(key) {
|
|
106
|
+
if (!this.pty)
|
|
107
|
+
throw new Error("PtyRuntime not started");
|
|
108
|
+
this.pty.sendKey(key);
|
|
109
|
+
}
|
|
110
|
+
/** Sends Esc to claude — the interactive REPL treats it as interrupt. */
|
|
111
|
+
interrupt() {
|
|
112
|
+
if (!this.pty)
|
|
113
|
+
return;
|
|
114
|
+
this.pty.sendKey("\x1b");
|
|
115
|
+
for (const [, resolve] of this.pendingPermissions) {
|
|
116
|
+
resolve({ behavior: "deny", message: "interrupted" });
|
|
117
|
+
}
|
|
118
|
+
this.pendingPermissions.clear();
|
|
119
|
+
}
|
|
120
|
+
resize(cols, rows) {
|
|
121
|
+
this.pty?.resize(cols, rows);
|
|
122
|
+
}
|
|
123
|
+
async kill(signal) {
|
|
124
|
+
this.cancelErrorDebounce();
|
|
125
|
+
if (this.pty) {
|
|
126
|
+
this.pty.kill(signal);
|
|
127
|
+
this.pty = null;
|
|
128
|
+
}
|
|
129
|
+
// Resolve any in-flight permission promises so the bridge subprocess can exit.
|
|
130
|
+
for (const [, resolve] of this.pendingPermissions) {
|
|
131
|
+
resolve({ behavior: "deny", message: "session ended" });
|
|
132
|
+
}
|
|
133
|
+
this.pendingPermissions.clear();
|
|
134
|
+
await this.cleanup();
|
|
135
|
+
}
|
|
136
|
+
/** Called by SessionManager.respondToPermission when this session is on the pty runtime. */
|
|
137
|
+
notifyPermissionDecision(requestId, decision) {
|
|
138
|
+
const resolver = this.pendingPermissions.get(requestId);
|
|
139
|
+
if (!resolver)
|
|
140
|
+
return false;
|
|
141
|
+
this.pendingPermissions.delete(requestId);
|
|
142
|
+
resolver(decision);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
buildHandler() {
|
|
146
|
+
return {
|
|
147
|
+
onPreToolUse: (payload) => {
|
|
148
|
+
this.cancelErrorDebounce();
|
|
149
|
+
this.ptyOutputBuffer = "";
|
|
150
|
+
const toolName = typeof payload.tool_name === "string" ? payload.tool_name : "unknown";
|
|
151
|
+
const cliSession = typeof payload.session_id === "string" ? payload.session_id.slice(0, 8) : "none";
|
|
152
|
+
const toolUseId = typeof payload.tool_use_id === "string" ? payload.tool_use_id.slice(0, 12) : "none";
|
|
153
|
+
console.log(`[pty-runtime] PreToolUse: tool=${toolName} cli_session=${cliSession} tool_use_id=${toolUseId}`);
|
|
154
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("PreToolUse", payload));
|
|
155
|
+
},
|
|
156
|
+
onPostToolUse: (payload) => {
|
|
157
|
+
this.cancelErrorDebounce();
|
|
158
|
+
this.ptyOutputBuffer = "";
|
|
159
|
+
const toolName = typeof payload.tool_name === "string" ? payload.tool_name : "unknown";
|
|
160
|
+
const cliSession = typeof payload.session_id === "string" ? payload.session_id.slice(0, 8) : "none";
|
|
161
|
+
const toolUseId = typeof payload.tool_use_id === "string" ? payload.tool_use_id.slice(0, 12) : "none";
|
|
162
|
+
console.log(`[pty-runtime] PostToolUse: tool=${toolName} cli_session=${cliSession} tool_use_id=${toolUseId}`);
|
|
163
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("PostToolUse", payload));
|
|
164
|
+
},
|
|
165
|
+
onStop: (payload) => {
|
|
166
|
+
this.cancelErrorDebounce();
|
|
167
|
+
this.ptyOutputBuffer = "";
|
|
168
|
+
console.log(`[pty-runtime] Stop hook received for session ${this.opts.sessionId.slice(0, 8)}`);
|
|
169
|
+
const events = (0, hook_event_translator_1.translateHookEvent)("Stop", payload);
|
|
170
|
+
console.log(`[pty-runtime] Stop translated to ${events.length} events: [${events.map((e) => e.type).join(", ")}]`);
|
|
171
|
+
this.emit(events);
|
|
172
|
+
},
|
|
173
|
+
onStopFailure: (payload) => {
|
|
174
|
+
this.cancelErrorDebounce();
|
|
175
|
+
this.ptyOutputBuffer = "";
|
|
176
|
+
const errorType = typeof payload.error_type === "string" ? payload.error_type : "unknown";
|
|
177
|
+
const errorMessage = typeof payload.error_message === "string" ? payload.error_message : "Unknown error";
|
|
178
|
+
console.log(`[pty-runtime] StopFailure hook for session ${this.opts.sessionId.slice(0, 8)}: ${errorType} - ${errorMessage}`);
|
|
179
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("StopFailure", payload));
|
|
180
|
+
this.opts.onError(`${errorMessage} (${errorType})`);
|
|
181
|
+
},
|
|
182
|
+
onUserPromptSubmit: (payload) => {
|
|
183
|
+
this.cancelErrorDebounce();
|
|
184
|
+
this.ptyOutputBuffer = "";
|
|
185
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("UserPromptSubmit", payload));
|
|
186
|
+
},
|
|
187
|
+
onUserPromptExpansion: (payload) => {
|
|
188
|
+
this.cancelErrorDebounce();
|
|
189
|
+
this.ptyOutputBuffer = "";
|
|
190
|
+
const cmd = typeof payload.command_name === "string" ? payload.command_name : "unknown";
|
|
191
|
+
const sid = this.opts.sessionId.slice(0, 8);
|
|
192
|
+
console.log(`[pty-runtime] UserPromptExpansion: command=${cmd}, session=${sid}`);
|
|
193
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("UserPromptExpansion", payload));
|
|
194
|
+
},
|
|
195
|
+
onSubagentStart: (payload) => {
|
|
196
|
+
this.cancelErrorDebounce();
|
|
197
|
+
this.ptyOutputBuffer = "";
|
|
198
|
+
const cliSession = typeof payload.session_id === "string" ? payload.session_id.slice(0, 8) : "none";
|
|
199
|
+
const toolUseId = typeof payload.tool_use_id === "string" ? payload.tool_use_id.slice(0, 12) : "none";
|
|
200
|
+
const agentType = typeof payload.agent_type === "string" ? payload.agent_type : "unknown";
|
|
201
|
+
const desc = typeof payload.description === "string" ? payload.description.slice(0, 80) : "";
|
|
202
|
+
console.log(`[pty-runtime] SubagentStart: cli_session=${cliSession} tool_use_id=${toolUseId} type=${agentType} desc="${desc}"`);
|
|
203
|
+
console.log(`[pty-runtime] SubagentStart full payload keys: ${Object.keys(payload).join(", ")}`);
|
|
204
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("SubagentStart", payload));
|
|
205
|
+
},
|
|
206
|
+
onSubagentStop: (payload) => {
|
|
207
|
+
this.cancelErrorDebounce();
|
|
208
|
+
this.ptyOutputBuffer = "";
|
|
209
|
+
const cliSession = typeof payload.session_id === "string" ? payload.session_id.slice(0, 8) : "none";
|
|
210
|
+
const toolUseId = typeof payload.tool_use_id === "string" ? payload.tool_use_id.slice(0, 12) : "none";
|
|
211
|
+
const agentType = typeof payload.agent_type === "string" ? payload.agent_type : "unknown";
|
|
212
|
+
console.log(`[pty-runtime] SubagentStop: cli_session=${cliSession} tool_use_id=${toolUseId} type=${agentType}`);
|
|
213
|
+
console.log(`[pty-runtime] SubagentStop full payload keys: ${Object.keys(payload).join(", ")}`);
|
|
214
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("SubagentStop", payload));
|
|
215
|
+
},
|
|
216
|
+
onPreCompact: (payload) => {
|
|
217
|
+
this.cancelErrorDebounce();
|
|
218
|
+
this.ptyOutputBuffer = "";
|
|
219
|
+
console.log(`[pty-runtime] PreCompact for session ${this.opts.sessionId.slice(0, 8)}`);
|
|
220
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("PreCompact", payload));
|
|
221
|
+
},
|
|
222
|
+
onPostCompact: (payload) => {
|
|
223
|
+
this.cancelErrorDebounce();
|
|
224
|
+
this.ptyOutputBuffer = "";
|
|
225
|
+
console.log(`[pty-runtime] PostCompact for session ${this.opts.sessionId.slice(0, 8)}`);
|
|
226
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("PostCompact", payload));
|
|
227
|
+
},
|
|
228
|
+
onNotification: (payload) => {
|
|
229
|
+
this.cancelErrorDebounce();
|
|
230
|
+
this.emit((0, hook_event_translator_1.translateHookEvent)("Notification", payload));
|
|
231
|
+
},
|
|
232
|
+
onPermissionRequest: (payload) => this.handlePermissionRequest(payload),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
handlePermissionRequest(payload) {
|
|
236
|
+
const requestId = (0, hook_event_translator_1.newPermissionRequestId)();
|
|
237
|
+
const toolName = typeof payload.tool_name === "string" ? payload.tool_name : "unknown";
|
|
238
|
+
const toolInput = payload.tool_input;
|
|
239
|
+
const event = {
|
|
240
|
+
type: "permission_request",
|
|
241
|
+
requestId,
|
|
242
|
+
toolName,
|
|
243
|
+
toolInput: toolInput ? JSON.stringify(toolInput) : "",
|
|
244
|
+
rawToolInput: toolInput,
|
|
245
|
+
};
|
|
246
|
+
return new Promise((resolve) => {
|
|
247
|
+
this.pendingPermissions.set(requestId, resolve);
|
|
248
|
+
try {
|
|
249
|
+
this.opts.onEvents([event]);
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
this.pendingPermissions.delete(requestId);
|
|
253
|
+
resolve({ behavior: "deny", message: `cockpit handler error: ${String(err)}` });
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
emit(events) {
|
|
258
|
+
if (events.length === 0)
|
|
259
|
+
return;
|
|
260
|
+
try {
|
|
261
|
+
this.opts.onEvents(events);
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
console.error(`[pty-runtime] onEvents threw for session ${this.opts.sessionId.slice(0, 8)}:`, err);
|
|
265
|
+
this.opts.onError(err instanceof Error ? err.message : String(err));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
cancelErrorDebounce() {
|
|
269
|
+
if (this.errorDebounce) {
|
|
270
|
+
clearTimeout(this.errorDebounce);
|
|
271
|
+
this.errorDebounce = null;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
scanForErrors(chunk) {
|
|
275
|
+
this.ptyOutputBuffer += chunk;
|
|
276
|
+
if (this.ptyOutputBuffer.length > 8 * 1024) {
|
|
277
|
+
this.ptyOutputBuffer = this.ptyOutputBuffer.slice(-4 * 1024);
|
|
278
|
+
}
|
|
279
|
+
if (this.errorDebounce)
|
|
280
|
+
return;
|
|
281
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: strip terminal control chars
|
|
282
|
+
const clean = this.ptyOutputBuffer.replace(ANSI_RE, "").replace(/[\x00-\x1f]/g, "");
|
|
283
|
+
const match = clean.match(/API\s*Error:\s*(\d+)\s*([^✓✗❯]*)/) || clean.match(/APIError:\s*(\d+)\s*(.*)/);
|
|
284
|
+
if (!match)
|
|
285
|
+
return;
|
|
286
|
+
const httpCode = match[1];
|
|
287
|
+
const detail = match[2].trim().slice(0, 200);
|
|
288
|
+
const errMsg = detail ? `${detail} (HTTP ${httpCode})` : `API Error (HTTP ${httpCode})`;
|
|
289
|
+
this.errorDebounce = setTimeout(() => {
|
|
290
|
+
this.errorDebounce = null;
|
|
291
|
+
this.ptyOutputBuffer = "";
|
|
292
|
+
console.log(`[pty-runtime] API error detected for session ${this.opts.sessionId.slice(0, 8)}: ${errMsg}`);
|
|
293
|
+
const doneEvent = {
|
|
294
|
+
type: "message_done",
|
|
295
|
+
message: {
|
|
296
|
+
id: (0, uuid_1.v4)(),
|
|
297
|
+
role: "assistant",
|
|
298
|
+
content: "",
|
|
299
|
+
toolUses: [],
|
|
300
|
+
blocks: [],
|
|
301
|
+
timestamp: Date.now(),
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
try {
|
|
305
|
+
this.opts.onEvents([doneEvent]);
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
// best-effort
|
|
309
|
+
}
|
|
310
|
+
this.opts.onError(errMsg);
|
|
311
|
+
}, 10_000);
|
|
312
|
+
}
|
|
313
|
+
async cleanup() {
|
|
314
|
+
if (this.cleaned)
|
|
315
|
+
return;
|
|
316
|
+
this.cleaned = true;
|
|
317
|
+
this.opts.hookRouter.unregister(this.opts.sessionId);
|
|
318
|
+
if (this.settingsPath) {
|
|
319
|
+
await (0, claude_settings_1.cleanupHookSettings)(this.opts.sessionId).catch(() => { });
|
|
320
|
+
this.settingsPath = null;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
exports.PtyRuntime = PtyRuntime;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PtySession = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_pty_1 = require("node-pty");
|
|
6
|
+
const TEXT_TO_ENTER_DELAY_MS = 300;
|
|
7
|
+
const TRUST_DIALOG_WINDOW_MS = 5000;
|
|
8
|
+
const REPL_READY_MIN_BYTES = 100;
|
|
9
|
+
const REPL_READY_TIMEOUT_MS = 60_000;
|
|
10
|
+
const REPL_SETTLE_MS = 2000;
|
|
11
|
+
class PtySession {
|
|
12
|
+
pty = null;
|
|
13
|
+
buffer = "";
|
|
14
|
+
cols;
|
|
15
|
+
rows;
|
|
16
|
+
exited = false;
|
|
17
|
+
exitCode = null;
|
|
18
|
+
opts;
|
|
19
|
+
constructor(opts) {
|
|
20
|
+
this.opts = opts;
|
|
21
|
+
this.cols = opts.cols ?? 160;
|
|
22
|
+
this.rows = opts.rows ?? 50;
|
|
23
|
+
}
|
|
24
|
+
get pid() {
|
|
25
|
+
return this.pty?.pid ?? -1;
|
|
26
|
+
}
|
|
27
|
+
async start() {
|
|
28
|
+
if (this.pty)
|
|
29
|
+
throw new Error("PtySession already started");
|
|
30
|
+
const bin = this.opts.bin ?? "claude";
|
|
31
|
+
const args = ["--verbose", "--settings", this.opts.settingsPath, ...(this.opts.extraArgs ?? [])];
|
|
32
|
+
const env = {
|
|
33
|
+
...process.env,
|
|
34
|
+
...(this.opts.env ?? {}),
|
|
35
|
+
};
|
|
36
|
+
delete env.CLAUDECODE;
|
|
37
|
+
delete env.CLAUDE_CODE_ENTRYPOINT;
|
|
38
|
+
const spawnFile = process.platform === "darwin" ? "/bin/zsh" : bin;
|
|
39
|
+
const spawnArgs = process.platform === "darwin" ? ["-l", "-c", `exec ${[bin, ...args].map(shellQuote).join(" ")}`] : args;
|
|
40
|
+
let diagInfo = `platform=${process.platform}, file=${spawnFile}, cwd=${this.opts.cwd}`;
|
|
41
|
+
try {
|
|
42
|
+
const exists = (0, node_fs_1.existsSync)(spawnFile);
|
|
43
|
+
diagInfo += `, exists=${exists}`;
|
|
44
|
+
if (exists) {
|
|
45
|
+
const real = (0, node_fs_1.realpathSync)(spawnFile);
|
|
46
|
+
const stat = (0, node_fs_1.statSync)(real);
|
|
47
|
+
const mode = `0${(stat.mode & 0o7777).toString(8)}`;
|
|
48
|
+
diagInfo += `, realpath=${real}, mode=${mode}, size=${stat.size}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
diagInfo += `, diagError=${e instanceof Error ? e.message : String(e)}`;
|
|
53
|
+
}
|
|
54
|
+
console.log(`[pty-session] spawn diagnostic: ${diagInfo}`);
|
|
55
|
+
console.log(`[pty-session] spawn args: ${JSON.stringify(spawnArgs).slice(0, 500)}`);
|
|
56
|
+
console.log(`[pty-session] PATH: ${env.PATH?.split(":").slice(0, 10).join(":")}`);
|
|
57
|
+
try {
|
|
58
|
+
this.pty = (0, node_pty_1.spawn)(spawnFile, spawnArgs, {
|
|
59
|
+
name: "xterm-256color",
|
|
60
|
+
cols: this.cols,
|
|
61
|
+
rows: this.rows,
|
|
62
|
+
cwd: this.opts.cwd,
|
|
63
|
+
env,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error(`[pty-session] spawn failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
68
|
+
console.error(`[pty-session] full diagnostic: ${diagInfo}`);
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
this.pty.onData((data) => {
|
|
72
|
+
this.buffer += data;
|
|
73
|
+
if (this.buffer.length > 64 * 1024)
|
|
74
|
+
this.buffer = this.buffer.slice(-32 * 1024);
|
|
75
|
+
this.opts.onData?.(data);
|
|
76
|
+
});
|
|
77
|
+
this.pty.onExit((info) => {
|
|
78
|
+
this.exited = true;
|
|
79
|
+
this.exitCode = info.exitCode;
|
|
80
|
+
this.opts.onExit?.(info);
|
|
81
|
+
this.pty = null;
|
|
82
|
+
});
|
|
83
|
+
await this.handleTrustDialog();
|
|
84
|
+
await this.waitForReplReady();
|
|
85
|
+
}
|
|
86
|
+
async sendText(text) {
|
|
87
|
+
const pty = this.requirePty();
|
|
88
|
+
pty.write("\x15");
|
|
89
|
+
pty.write(text);
|
|
90
|
+
await sleep(TEXT_TO_ENTER_DELAY_MS);
|
|
91
|
+
pty.write("\r");
|
|
92
|
+
}
|
|
93
|
+
sendSlash(command) {
|
|
94
|
+
const c = command.startsWith("/") ? command : `/${command}`;
|
|
95
|
+
this.requirePty().write(`${c}\r`);
|
|
96
|
+
}
|
|
97
|
+
sendKey(key) {
|
|
98
|
+
this.requirePty().write(key);
|
|
99
|
+
}
|
|
100
|
+
resize(cols, rows) {
|
|
101
|
+
if (!this.pty)
|
|
102
|
+
return;
|
|
103
|
+
if (cols === this.cols && rows === this.rows)
|
|
104
|
+
return;
|
|
105
|
+
this.cols = cols;
|
|
106
|
+
this.rows = rows;
|
|
107
|
+
this.pty.resize(cols, rows);
|
|
108
|
+
}
|
|
109
|
+
kill(signal) {
|
|
110
|
+
if (!this.pty)
|
|
111
|
+
return;
|
|
112
|
+
try {
|
|
113
|
+
this.pty.kill(signal);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// already dead
|
|
117
|
+
}
|
|
118
|
+
this.pty = null;
|
|
119
|
+
}
|
|
120
|
+
requirePty() {
|
|
121
|
+
if (!this.pty)
|
|
122
|
+
throw new Error("PtySession not started or already exited");
|
|
123
|
+
return this.pty;
|
|
124
|
+
}
|
|
125
|
+
cleanOutput() {
|
|
126
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequences
|
|
127
|
+
const ansi = /\x1b\[[0-9;]*[a-zA-Z]/g;
|
|
128
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI extras
|
|
129
|
+
const extras = /\x1b[>=?][^\x1b]*/g;
|
|
130
|
+
return this.buffer.replace(ansi, "").replace(extras, "");
|
|
131
|
+
}
|
|
132
|
+
async handleTrustDialog() {
|
|
133
|
+
const deadline = Date.now() + TRUST_DIALOG_WINDOW_MS;
|
|
134
|
+
let accepted = false;
|
|
135
|
+
while (Date.now() < deadline) {
|
|
136
|
+
if (this.exited)
|
|
137
|
+
return;
|
|
138
|
+
const clean = this.cleanOutput();
|
|
139
|
+
if (clean.includes("trust") || clean.includes("Yes,")) {
|
|
140
|
+
this.requirePty().write("\r");
|
|
141
|
+
accepted = true;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
if (clean.length > REPL_READY_MIN_BYTES)
|
|
145
|
+
break;
|
|
146
|
+
await sleep(200);
|
|
147
|
+
}
|
|
148
|
+
if (accepted)
|
|
149
|
+
await sleep(2000);
|
|
150
|
+
}
|
|
151
|
+
async waitForReplReady() {
|
|
152
|
+
const deadline = Date.now() + REPL_READY_TIMEOUT_MS;
|
|
153
|
+
while (Date.now() < deadline) {
|
|
154
|
+
if (this.exited) {
|
|
155
|
+
throw new Error(`claude exited during startup (code=${this.exitCode}, output=${this.cleanOutput().slice(0, 200)})`);
|
|
156
|
+
}
|
|
157
|
+
if (this.cleanOutput().length >= REPL_READY_MIN_BYTES) {
|
|
158
|
+
await sleep(REPL_SETTLE_MS);
|
|
159
|
+
if (this.exited) {
|
|
160
|
+
throw new Error(`claude exited during startup (code=${this.exitCode}, output=${this.cleanOutput().slice(0, 200)})`);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
await sleep(200);
|
|
165
|
+
}
|
|
166
|
+
const clean = this.cleanOutput();
|
|
167
|
+
throw new Error(`Timed out after ${REPL_READY_TIMEOUT_MS}ms waiting for claude REPL (got ${clean.length} bytes: ${clean.slice(0, 200)})`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.PtySession = PtySession;
|
|
171
|
+
function sleep(ms) {
|
|
172
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
173
|
+
}
|
|
174
|
+
function shellQuote(s) {
|
|
175
|
+
if (!/[\s"'\\$`!#&|;()<>]/.test(s))
|
|
176
|
+
return s;
|
|
177
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
178
|
+
}
|