@alexjbarnes/cockpit 0.1.1 → 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 +28 -3
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +147 -3
- package/.next/react-loadable-manifest.json +19 -3
- package/.next/required-server-files.js +3 -0
- package/.next/required-server-files.json +3 -0
- package/.next/routes-manifest.json +162 -0
- 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)/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 +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)/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 -0
- package/.next/server/app/(app)/inbox/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/inbox/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/inbox/page.js +2 -0
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
- 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 +6 -6
- 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 -0
- package/.next/server/app/(app)/settings/notifications/page.js.nft.json +1 -0
- package/.next/server/app/(app)/settings/notifications/page_client-reference-manifest.js +1 -0
- 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 +5 -0
- package/.next/server/app/api/inbox/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/inbox/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/inbox/route.js +5 -0
- package/.next/server/app/api/inbox/route.js.nft.json +1 -0
- package/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/api/notifications/route.js.nft.json +1 -0
- package/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/notifications/test/route.js +5 -0
- package/.next/server/app/api/notifications/test/route.js.nft.json +1 -0
- package/.next/server/app/api/notifications/test/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/api/reviews/pinned/route.js.nft.json +1 -0
- package/.next/server/app/api/reviews/pinned/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/api/sessions/bulk-delete/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/bulk-delete/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sessions/by-ids/route.js +1 -0
- package/.next/server/app/api/sessions/by-ids/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/by-ids/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sessions/group/route.js +1 -0
- package/.next/server/app/api/sessions/group/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/group/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/api/sessions/search/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/inbox.meta +16 -0
- package/.next/server/app/inbox.rsc +23 -0
- package/.next/server/app/inbox.segments/!KGFwcCk/inbox/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/inbox.segments/!KGFwcCk/inbox.segment.rsc +5 -0
- package/.next/server/app/inbox.segments/!KGFwcCk.segment.rsc +7 -0
- package/.next/server/app/inbox.segments/_full.segment.rsc +23 -0
- package/.next/server/app/inbox.segments/_head.segment.rsc +6 -0
- package/.next/server/app/inbox.segments/_index.segment.rsc +5 -0
- package/.next/server/app/inbox.segments/_tree.segment.rsc +2 -0
- 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 -0
- package/.next/server/app/settings/notifications.meta +17 -0
- package/.next/server/app/settings/notifications.rsc +23 -0
- package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications.segment.rsc +5 -0
- package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings.segment.rsc +5 -0
- package/.next/server/app/settings/notifications.segments/!KGFwcCk.segment.rsc +7 -0
- package/.next/server/app/settings/notifications.segments/_full.segment.rsc +23 -0
- package/.next/server/app/settings/notifications.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings/notifications.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings/notifications.segments/_tree.segment.rsc +2 -0
- 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 +28 -3
- package/.next/server/chunks/1002.js +18 -0
- package/.next/server/chunks/1011.js +1 -0
- package/.next/server/chunks/1979.js +2 -2
- package/.next/server/chunks/{9012.js → 3006.js} +3 -3
- package/.next/server/chunks/3108.js +1 -0
- package/.next/server/chunks/3434.js +1 -0
- package/.next/server/chunks/{6142.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/5965.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/{22086-756d490e3320ad15.js → 31010-6e87f77b97544424.js} +1 -1
- package/.next/static/chunks/3765-d323c6675307a63e.js +20 -0
- package/.next/static/chunks/41487-d802643f4a8fad3c.js +199 -0
- package/.next/static/chunks/48273-bbd15bac6733dfc4.js +6 -0
- package/.next/static/chunks/{80392.bca860d8b5972706.js → 58011.3de5770e8b0d8759.js} +1 -1
- package/.next/static/chunks/63606.a387b0261d6523ab.js +1 -0
- package/.next/static/chunks/6935-f436a624267529fb.js +1 -0
- package/.next/static/chunks/{69427.755a0a4013596f7a.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-ce9e1be301c60fe5.js +1 -0
- 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-c5fd013309ab3eba.js +1 -0
- package/.next/static/chunks/app/(app)/reviews/page-47530d93bb9d4a76.js +1 -0
- 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-229f1db6beb1d19c.js +1 -0
- 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/README.md +14 -4
- package/bin/cockpit-hook-bridge.mjs +101 -0
- package/dist/server.js +49 -2
- 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 +18 -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 +136 -0
- package/dist/src/server/job-lock.js +103 -0
- package/dist/src/server/job-scheduler.js +170 -43
- package/dist/src/server/job-storage.js +32 -20
- package/dist/src/server/notification-settings.js +43 -0
- package/dist/src/server/notifications.js +125 -0
- 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 +838 -152
- 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 +444 -13
- package/dist/src/server/ws-handler.js +251 -74
- 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/server/chunks/8346.js +0 -1
- package/.next/static/V2EfPtTUC96VYyF12K0om/_buildManifest.js +0 -1
- package/.next/static/chunks/30120-1535e9064b17ce74.js +0 -20
- package/.next/static/chunks/66997-652baf5596173fea.js +0 -199
- package/.next/static/chunks/93273-c5cb6dcedef67c81.js +0 -6
- package/.next/static/chunks/app/(app)/agents/[name]/page-44c5691c80f17d38.js +0 -8
- package/.next/static/chunks/app/(app)/agents/page-4ce7a715bc0145dc.js +0 -1
- package/.next/static/chunks/app/(app)/changes/page-84cf4cd3ca347d98.js +0 -1
- package/.next/static/chunks/app/(app)/claude-md/edit/page-fb7117171d0f94d2.js +0 -1
- package/.next/static/chunks/app/(app)/claude-md/page-9503f1415e660911.js +0 -1
- package/.next/static/chunks/app/(app)/commands/[name]/page-6ef571e73b105248.js +0 -6
- package/.next/static/chunks/app/(app)/commands/page-e8a506da73d1c280.js +0 -1
- package/.next/static/chunks/app/(app)/files/page-67a95d351a685d79.js +0 -1
- package/.next/static/chunks/app/(app)/hooks/[event]/page-03f85595561b068a.js +0 -6
- package/.next/static/chunks/app/(app)/hooks/page-5578c83ad353e307.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-51d784c59737778c.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/page-7d00e7a01c70a261.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-665191da233fde19.js +0 -1
- package/.next/static/chunks/app/(app)/jobs/page-8b4ee1166a53d5e1.js +0 -1
- package/.next/static/chunks/app/(app)/layout-8dad55d6ce637a01.js +0 -1
- package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-c30f0d78daf7719e.js +0 -1
- package/.next/static/chunks/app/(app)/mcp-servers/page-737b87d338afdb49.js +0 -1
- package/.next/static/chunks/app/(app)/page-40052655d2a9a84f.js +0 -1
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-1d9179bf5a4de7a4.js +0 -13
- package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/page-d8a9ee39e7cc056a.js +0 -1
- package/.next/static/chunks/app/(app)/reviews/page-098e6e6fe3123e02.js +0 -1
- package/.next/static/chunks/app/(app)/sessions/[id]/page-a74f7fe8322678ba.js +0 -1
- package/.next/static/chunks/app/(app)/settings/page-1fa46b8ac8e22927.js +0 -1
- package/.next/static/chunks/app/(app)/skills/[name]/page-e6572062a6ad90df.js +0 -6
- package/.next/static/chunks/app/(app)/skills/page-8fca8814aa818ae6.js +0 -1
- package/.next/static/chunks/app/_global-error/page-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/agents/[name]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/agents/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/auth/check/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/auth/setup/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/auth/ws-token/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/btw/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/claude-md/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/commands/[name]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/commands/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/defaults/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/filesystem/browse/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/filesystem/files/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/filesystem/mkdir/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/filesystem/read/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/clone/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/commit/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/discard/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/generate-message/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/push/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/file-content/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/orgs/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/prs/checks/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/prs/diff/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/prs/review/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/prs/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/prs/view/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/repos/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/github/review-session/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/health/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/hooks/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/runs/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/[id]/trigger/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/mcp-discover/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/jobs/status/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/[name]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/mcp-servers/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/mcp/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/search/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/sessions/pinned/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/skills/[name]/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/skills/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/usage/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/version/cockpit/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/app/api/version/route-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b277aba73f9e0212.js +0 -1
- package/.next/static/chunks/webpack-2a5835e108df6f34.js +0 -1
- package/.next/static/css/1e1239c76b265910.css +0 -1
- /package/.next/static/{V2EfPtTUC96VYyF12K0om → zr8XZzqb74eHitdlkpo-C}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.translateHookEvent = translateHookEvent;
|
|
4
|
+
exports.newPermissionRequestId = newPermissionRequestId;
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
/**
|
|
7
|
+
* Convert a single hook payload from claude into ParsedEvent objects that
|
|
8
|
+
* the existing stream-processor / session emitter pipeline can consume.
|
|
9
|
+
*
|
|
10
|
+
* Pure function: no state, no side effects. The session manager owns
|
|
11
|
+
* status tracking, permission request bookkeeping, and emission.
|
|
12
|
+
*
|
|
13
|
+
* Returns an empty array for events that don't map to a ParsedEvent
|
|
14
|
+
* (e.g. UserPromptSubmit, which only affects status).
|
|
15
|
+
*/
|
|
16
|
+
function translateHookEvent(eventName, payload) {
|
|
17
|
+
switch (eventName) {
|
|
18
|
+
case "PreToolUse":
|
|
19
|
+
return translatePreToolUse(payload);
|
|
20
|
+
case "PostToolUse":
|
|
21
|
+
return translatePostToolUse(payload);
|
|
22
|
+
case "Stop":
|
|
23
|
+
return translateStop(payload);
|
|
24
|
+
case "StopFailure":
|
|
25
|
+
return translateStopFailure(payload);
|
|
26
|
+
case "PermissionRequest":
|
|
27
|
+
return translatePermissionRequest(payload);
|
|
28
|
+
case "Notification":
|
|
29
|
+
return translateNotification(payload);
|
|
30
|
+
case "SubagentStart":
|
|
31
|
+
return translateSubagentStart(payload);
|
|
32
|
+
case "SubagentStop":
|
|
33
|
+
return translateSubagentStop(payload);
|
|
34
|
+
case "PreCompact":
|
|
35
|
+
return translatePreCompact(payload);
|
|
36
|
+
case "PostCompact":
|
|
37
|
+
return translatePostCompact(payload);
|
|
38
|
+
case "UserPromptSubmit":
|
|
39
|
+
case "UserPromptExpansion":
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** PermissionRequest payloads don't carry a request ID; cockpit synthesises one. */
|
|
44
|
+
function newPermissionRequestId() {
|
|
45
|
+
return (0, uuid_1.v4)();
|
|
46
|
+
}
|
|
47
|
+
function translatePreToolUse(payload) {
|
|
48
|
+
const toolName = stringOr(payload.tool_name, "unknown");
|
|
49
|
+
const toolInput = payload.tool_input;
|
|
50
|
+
const toolId = stringOr(payload.tool_use_id, "");
|
|
51
|
+
const events = [
|
|
52
|
+
{
|
|
53
|
+
type: "system_message",
|
|
54
|
+
text: "__tool_use_start",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: "tool_use_start",
|
|
58
|
+
toolName,
|
|
59
|
+
toolId: toolId || undefined,
|
|
60
|
+
toolInput: toolInput ? JSON.stringify(toolInput) : "",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
if (toolName === "EnterPlanMode") {
|
|
64
|
+
events.push({ type: "system_message", text: "__permission_mode::plan" });
|
|
65
|
+
}
|
|
66
|
+
return events;
|
|
67
|
+
}
|
|
68
|
+
function translatePostToolUse(payload) {
|
|
69
|
+
const toolName = stringOr(payload.tool_name, "unknown");
|
|
70
|
+
const toolId = stringOr(payload.tool_use_id, "");
|
|
71
|
+
const toolInput = payload.tool_input;
|
|
72
|
+
const response = payload.tool_response;
|
|
73
|
+
const output = extractToolOutput(response);
|
|
74
|
+
const filePath = extractFilePath(toolInput);
|
|
75
|
+
const events = [
|
|
76
|
+
{
|
|
77
|
+
type: "tool_result",
|
|
78
|
+
toolId: toolId || undefined,
|
|
79
|
+
toolOutput: output,
|
|
80
|
+
filePath,
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
if (toolName === "ExitPlanMode") {
|
|
84
|
+
events.push({ type: "system_message", text: "__permission_mode::standard" });
|
|
85
|
+
}
|
|
86
|
+
return events;
|
|
87
|
+
}
|
|
88
|
+
function translateStop(payload) {
|
|
89
|
+
const text = stringOr(payload.last_assistant_message, "");
|
|
90
|
+
const message = {
|
|
91
|
+
id: (0, uuid_1.v4)(),
|
|
92
|
+
role: "assistant",
|
|
93
|
+
content: text,
|
|
94
|
+
toolUses: [],
|
|
95
|
+
blocks: [],
|
|
96
|
+
timestamp: Date.now(),
|
|
97
|
+
};
|
|
98
|
+
return [{ type: "message_done", message }];
|
|
99
|
+
}
|
|
100
|
+
function translateStopFailure(payload) {
|
|
101
|
+
const errorType = stringOr(payload.error_type, "unknown");
|
|
102
|
+
const errorMessage = stringOr(payload.error_message, "Unknown error");
|
|
103
|
+
const message = {
|
|
104
|
+
id: (0, uuid_1.v4)(),
|
|
105
|
+
role: "assistant",
|
|
106
|
+
content: "",
|
|
107
|
+
toolUses: [],
|
|
108
|
+
blocks: [],
|
|
109
|
+
timestamp: Date.now(),
|
|
110
|
+
};
|
|
111
|
+
return [
|
|
112
|
+
{ type: "message_done", message },
|
|
113
|
+
{ type: "system_message", text: `__stop_failure::${errorType}::${errorMessage}` },
|
|
114
|
+
];
|
|
115
|
+
}
|
|
116
|
+
function translatePermissionRequest(payload) {
|
|
117
|
+
const toolName = stringOr(payload.tool_name, "unknown");
|
|
118
|
+
const toolInput = payload.tool_input;
|
|
119
|
+
return [
|
|
120
|
+
{
|
|
121
|
+
type: "permission_request",
|
|
122
|
+
requestId: newPermissionRequestId(),
|
|
123
|
+
toolName,
|
|
124
|
+
toolInput: toolInput ? JSON.stringify(toolInput) : "",
|
|
125
|
+
rawToolInput: toolInput,
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
function translateSubagentStart(payload) {
|
|
130
|
+
const sessionId = stringOr(payload.session_id, (0, uuid_1.v4)());
|
|
131
|
+
const agentId = stringOr(payload.agent_id, "");
|
|
132
|
+
const agentType = stringOr(payload.agent_type, "");
|
|
133
|
+
const description = stringOr(payload.description, "");
|
|
134
|
+
return [
|
|
135
|
+
{
|
|
136
|
+
type: "task_update",
|
|
137
|
+
taskInfo: {
|
|
138
|
+
taskId: sessionId,
|
|
139
|
+
toolUseId: agentId,
|
|
140
|
+
status: "running",
|
|
141
|
+
title: agentType || "Agent",
|
|
142
|
+
description: description || agentType || "Subagent running",
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
function translateSubagentStop(payload) {
|
|
148
|
+
const sessionId = stringOr(payload.session_id, "");
|
|
149
|
+
const agentId = stringOr(payload.agent_id, "");
|
|
150
|
+
const agentType = stringOr(payload.agent_type, "");
|
|
151
|
+
const lastMessage = stringOr(payload.last_assistant_message, "");
|
|
152
|
+
const description = stringOr(payload.description, "");
|
|
153
|
+
return [
|
|
154
|
+
{
|
|
155
|
+
type: "task_update",
|
|
156
|
+
taskInfo: {
|
|
157
|
+
taskId: sessionId,
|
|
158
|
+
toolUseId: agentId,
|
|
159
|
+
status: "completed",
|
|
160
|
+
title: agentType || "Agent",
|
|
161
|
+
description: description || agentType || "Subagent completed",
|
|
162
|
+
summary: lastMessage.slice(0, 500) || undefined,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
function translatePreCompact(_payload) {
|
|
168
|
+
return [{ type: "system_message", text: "__compact::hook_start" }];
|
|
169
|
+
}
|
|
170
|
+
function translatePostCompact(_payload) {
|
|
171
|
+
return [{ type: "system_message", text: "__compact::hook_done" }];
|
|
172
|
+
}
|
|
173
|
+
function translateNotification(payload) {
|
|
174
|
+
const message = stringOr(payload.message, "");
|
|
175
|
+
if (!message)
|
|
176
|
+
return [];
|
|
177
|
+
return [{ type: "system_message", text: `__notification::${message}` }];
|
|
178
|
+
}
|
|
179
|
+
function stringOr(value, fallback) {
|
|
180
|
+
return typeof value === "string" ? value : fallback;
|
|
181
|
+
}
|
|
182
|
+
function extractToolOutput(response) {
|
|
183
|
+
if (response == null)
|
|
184
|
+
return "";
|
|
185
|
+
if (typeof response === "string")
|
|
186
|
+
return response;
|
|
187
|
+
if (typeof response === "object") {
|
|
188
|
+
const obj = response;
|
|
189
|
+
if (typeof obj.stdout === "string") {
|
|
190
|
+
let out = obj.stdout;
|
|
191
|
+
if (typeof obj.stderr === "string" && obj.stderr.length > 0)
|
|
192
|
+
out += `\n${obj.stderr}`;
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
if (typeof obj.content === "string")
|
|
196
|
+
return obj.content;
|
|
197
|
+
return JSON.stringify(response);
|
|
198
|
+
}
|
|
199
|
+
return String(response);
|
|
200
|
+
}
|
|
201
|
+
function extractFilePath(toolInput) {
|
|
202
|
+
if (!toolInput)
|
|
203
|
+
return undefined;
|
|
204
|
+
if (typeof toolInput.file_path === "string")
|
|
205
|
+
return toolInput.file_path;
|
|
206
|
+
if (typeof toolInput.filePath === "string")
|
|
207
|
+
return toolInput.filePath;
|
|
208
|
+
if (typeof toolInput.path === "string")
|
|
209
|
+
return toolInput.path;
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HookRouter = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const node_http_1 = require("node:http");
|
|
6
|
+
class HookRouter {
|
|
7
|
+
server = null;
|
|
8
|
+
port = 0;
|
|
9
|
+
sessions = new Map();
|
|
10
|
+
async start(host = "127.0.0.1", port = 0) {
|
|
11
|
+
this.server = (0, node_http_1.createServer)((req, res) => this.handle(req, res));
|
|
12
|
+
await new Promise((resolve, reject) => {
|
|
13
|
+
this.server.once("error", reject);
|
|
14
|
+
this.server.listen(port, host, () => {
|
|
15
|
+
const addr = this.server.address();
|
|
16
|
+
if (addr && typeof addr === "object")
|
|
17
|
+
this.port = addr.port;
|
|
18
|
+
resolve();
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
return { host, port: this.port };
|
|
22
|
+
}
|
|
23
|
+
async stop() {
|
|
24
|
+
if (!this.server)
|
|
25
|
+
return;
|
|
26
|
+
await new Promise((resolve) => this.server.close(() => resolve()));
|
|
27
|
+
this.server = null;
|
|
28
|
+
}
|
|
29
|
+
getUrl(host = "127.0.0.1") {
|
|
30
|
+
return `http://${host}:${this.port}`;
|
|
31
|
+
}
|
|
32
|
+
register(sessionId, handler) {
|
|
33
|
+
const token = (0, node_crypto_1.randomBytes)(24).toString("hex");
|
|
34
|
+
this.sessions.set(sessionId, { token, handler, pendingResponses: new Set() });
|
|
35
|
+
return token;
|
|
36
|
+
}
|
|
37
|
+
unregister(sessionId) {
|
|
38
|
+
const registered = this.sessions.get(sessionId);
|
|
39
|
+
if (registered) {
|
|
40
|
+
for (const res of registered.pendingResponses) {
|
|
41
|
+
if (!res.writableEnded) {
|
|
42
|
+
res.statusCode = 503;
|
|
43
|
+
res.setHeader("Content-Type", "application/json");
|
|
44
|
+
res.end(JSON.stringify({ exitCode: 0, stderr: "session restarted" }));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
registered.pendingResponses.clear();
|
|
48
|
+
}
|
|
49
|
+
this.sessions.delete(sessionId);
|
|
50
|
+
}
|
|
51
|
+
async handle(req, res) {
|
|
52
|
+
if (req.method !== "POST") {
|
|
53
|
+
res.statusCode = 405;
|
|
54
|
+
res.end();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const url = req.url || "";
|
|
58
|
+
const match = url.match(/^\/hook\/([A-Za-z]+)(?:\?.*)?$/);
|
|
59
|
+
if (!match) {
|
|
60
|
+
res.statusCode = 404;
|
|
61
|
+
res.end();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const eventName = match[1];
|
|
65
|
+
const sessionId = req.headers["x-cockpit-session"];
|
|
66
|
+
const token = req.headers["x-cockpit-token"];
|
|
67
|
+
if (typeof sessionId !== "string" || typeof token !== "string") {
|
|
68
|
+
res.statusCode = 400;
|
|
69
|
+
res.end("missing session or token header");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const registered = this.sessions.get(sessionId);
|
|
73
|
+
if (!registered || registered.token !== token) {
|
|
74
|
+
res.statusCode = 403;
|
|
75
|
+
res.end("unauthorized");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
let body = "";
|
|
79
|
+
req.setEncoding("utf8");
|
|
80
|
+
for await (const chunk of req)
|
|
81
|
+
body += chunk;
|
|
82
|
+
let payload;
|
|
83
|
+
try {
|
|
84
|
+
payload = body ? JSON.parse(body) : {};
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
res.statusCode = 400;
|
|
88
|
+
res.end("invalid json");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
console.log(`[hook-router] received ${eventName} for session ${sessionId.slice(0, 8)}`);
|
|
92
|
+
registered.pendingResponses.add(res);
|
|
93
|
+
try {
|
|
94
|
+
const response = await this.dispatch(registered.handler, eventName, payload);
|
|
95
|
+
if (!res.writableEnded) {
|
|
96
|
+
res.statusCode = 200;
|
|
97
|
+
res.setHeader("Content-Type", "application/json");
|
|
98
|
+
res.end(JSON.stringify(response));
|
|
99
|
+
}
|
|
100
|
+
console.log(`[hook-router] dispatched ${eventName} for session ${sessionId.slice(0, 8)} ok`);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
console.error(`[hook-router] dispatch ${eventName} for session ${sessionId.slice(0, 8)} THREW:`, err);
|
|
104
|
+
if (!res.writableEnded) {
|
|
105
|
+
res.statusCode = 500;
|
|
106
|
+
res.setHeader("Content-Type", "application/json");
|
|
107
|
+
res.end(JSON.stringify({ exitCode: 1, stderr: String(err) }));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
registered.pendingResponses.delete(res);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async dispatch(handler, eventName, payload) {
|
|
115
|
+
if (eventName === "PermissionRequest") {
|
|
116
|
+
if (!handler.onPermissionRequest) {
|
|
117
|
+
return { stdout: permissionAllowJson(), exitCode: 0 };
|
|
118
|
+
}
|
|
119
|
+
const decision = await handler.onPermissionRequest(payload);
|
|
120
|
+
return { stdout: permissionDecisionJson(decision), exitCode: 0 };
|
|
121
|
+
}
|
|
122
|
+
const handlerMap = {
|
|
123
|
+
PreToolUse: handler.onPreToolUse,
|
|
124
|
+
PostToolUse: handler.onPostToolUse,
|
|
125
|
+
Stop: handler.onStop,
|
|
126
|
+
StopFailure: handler.onStopFailure,
|
|
127
|
+
UserPromptSubmit: handler.onUserPromptSubmit,
|
|
128
|
+
UserPromptExpansion: handler.onUserPromptExpansion,
|
|
129
|
+
SubagentStart: handler.onSubagentStart,
|
|
130
|
+
SubagentStop: handler.onSubagentStop,
|
|
131
|
+
Notification: handler.onNotification,
|
|
132
|
+
PreCompact: handler.onPreCompact,
|
|
133
|
+
PostCompact: handler.onPostCompact,
|
|
134
|
+
};
|
|
135
|
+
const fn = handlerMap[eventName];
|
|
136
|
+
if (!fn) {
|
|
137
|
+
console.log(`[hook-router] no handler for ${eventName}, returning empty response`);
|
|
138
|
+
return {};
|
|
139
|
+
}
|
|
140
|
+
const result = await fn(payload);
|
|
141
|
+
return result || {};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.HookRouter = HookRouter;
|
|
145
|
+
function permissionAllowJson() {
|
|
146
|
+
return JSON.stringify({ hookSpecificOutput: { hookEventName: "PermissionRequest", decision: { behavior: "allow" } } });
|
|
147
|
+
}
|
|
148
|
+
function permissionDecisionJson(decision) {
|
|
149
|
+
return JSON.stringify({ hookSpecificOutput: { hookEventName: "PermissionRequest", decision } });
|
|
150
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getInboxMessages = getInboxMessages;
|
|
7
|
+
exports.getUnreadCount = getUnreadCount;
|
|
8
|
+
exports.addInboxMessage = addInboxMessage;
|
|
9
|
+
exports.markRead = markRead;
|
|
10
|
+
exports.markAllRead = markAllRead;
|
|
11
|
+
exports.deleteInboxMessage = deleteInboxMessage;
|
|
12
|
+
exports.clearInbox = clearInbox;
|
|
13
|
+
exports.parseInboxBlock = parseInboxBlock;
|
|
14
|
+
exports.parseErrorBlock = parseErrorBlock;
|
|
15
|
+
const node_fs_1 = require("node:fs");
|
|
16
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
17
|
+
const uuid_1 = require("uuid");
|
|
18
|
+
const paths_1 = require("../server/paths");
|
|
19
|
+
const notifications_1 = require("./notifications");
|
|
20
|
+
function inboxDir() {
|
|
21
|
+
return (0, paths_1.getCockpitDir)();
|
|
22
|
+
}
|
|
23
|
+
function inboxFile() {
|
|
24
|
+
return node_path_1.default.join(inboxDir(), "inbox.jsonl");
|
|
25
|
+
}
|
|
26
|
+
function ensureDir() {
|
|
27
|
+
if (!(0, node_fs_1.existsSync)(inboxDir()))
|
|
28
|
+
(0, node_fs_1.mkdirSync)(inboxDir(), { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
function readAll() {
|
|
31
|
+
if (!(0, node_fs_1.existsSync)(inboxFile()))
|
|
32
|
+
return [];
|
|
33
|
+
const raw = (0, node_fs_1.readFileSync)(inboxFile(), "utf-8");
|
|
34
|
+
const messages = [];
|
|
35
|
+
for (const line of raw.split("\n")) {
|
|
36
|
+
if (!line.trim())
|
|
37
|
+
continue;
|
|
38
|
+
try {
|
|
39
|
+
messages.push(JSON.parse(line));
|
|
40
|
+
}
|
|
41
|
+
catch { }
|
|
42
|
+
}
|
|
43
|
+
return messages;
|
|
44
|
+
}
|
|
45
|
+
function writeAll(messages) {
|
|
46
|
+
ensureDir();
|
|
47
|
+
(0, node_fs_1.writeFileSync)(inboxFile(), messages.map((m) => JSON.stringify(m)).join("\n") + "\n");
|
|
48
|
+
}
|
|
49
|
+
function getInboxMessages() {
|
|
50
|
+
return readAll().sort((a, b) => b.createdAt - a.createdAt);
|
|
51
|
+
}
|
|
52
|
+
function getUnreadCount() {
|
|
53
|
+
return readAll().filter((m) => !m.read).length;
|
|
54
|
+
}
|
|
55
|
+
function addInboxMessage(msg) {
|
|
56
|
+
const messages = readAll();
|
|
57
|
+
const entry = {
|
|
58
|
+
id: (0, uuid_1.v4)(),
|
|
59
|
+
title: msg.title,
|
|
60
|
+
body: msg.body,
|
|
61
|
+
priority: msg.priority || "info",
|
|
62
|
+
jobId: msg.jobId,
|
|
63
|
+
jobName: msg.jobName,
|
|
64
|
+
runId: msg.runId,
|
|
65
|
+
createdAt: Date.now(),
|
|
66
|
+
read: false,
|
|
67
|
+
};
|
|
68
|
+
messages.push(entry);
|
|
69
|
+
writeAll(messages);
|
|
70
|
+
(0, notifications_1.dispatchNotification)({
|
|
71
|
+
title: entry.title,
|
|
72
|
+
body: entry.body,
|
|
73
|
+
priority: entry.priority,
|
|
74
|
+
source: "inbox",
|
|
75
|
+
url: `/inbox/${entry.id}`,
|
|
76
|
+
providerIds: msg.notifyProviders,
|
|
77
|
+
});
|
|
78
|
+
return entry;
|
|
79
|
+
}
|
|
80
|
+
function markRead(id, read = true) {
|
|
81
|
+
const messages = readAll();
|
|
82
|
+
const msg = messages.find((m) => m.id === id);
|
|
83
|
+
if (!msg)
|
|
84
|
+
return false;
|
|
85
|
+
msg.read = read;
|
|
86
|
+
writeAll(messages);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
function markAllRead() {
|
|
90
|
+
const messages = readAll();
|
|
91
|
+
for (const m of messages)
|
|
92
|
+
m.read = true;
|
|
93
|
+
writeAll(messages);
|
|
94
|
+
}
|
|
95
|
+
function deleteInboxMessage(id) {
|
|
96
|
+
const messages = readAll();
|
|
97
|
+
const idx = messages.findIndex((m) => m.id === id);
|
|
98
|
+
if (idx === -1)
|
|
99
|
+
return false;
|
|
100
|
+
messages.splice(idx, 1);
|
|
101
|
+
writeAll(messages);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
function clearInbox() {
|
|
105
|
+
writeAll([]);
|
|
106
|
+
}
|
|
107
|
+
const INBOX_BLOCK_RE = /```cockpit-inbox\s*\n([\s\S]*?)\n```/;
|
|
108
|
+
function parseInboxBlock(text) {
|
|
109
|
+
const match = INBOX_BLOCK_RE.exec(text);
|
|
110
|
+
if (!match)
|
|
111
|
+
return null;
|
|
112
|
+
try {
|
|
113
|
+
const parsed = JSON.parse(match[1]);
|
|
114
|
+
if (typeof parsed.title !== "string" || typeof parsed.body !== "string")
|
|
115
|
+
return null;
|
|
116
|
+
return { title: parsed.title, body: parsed.body, priority: parsed.priority };
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const ERROR_BLOCK_RE = /```cockpit-error\s*\n([\s\S]*?)\n```/;
|
|
123
|
+
function parseErrorBlock(text) {
|
|
124
|
+
const match = ERROR_BLOCK_RE.exec(text);
|
|
125
|
+
if (!match)
|
|
126
|
+
return null;
|
|
127
|
+
try {
|
|
128
|
+
const parsed = JSON.parse(match[1]);
|
|
129
|
+
if (typeof parsed.error !== "string")
|
|
130
|
+
return null;
|
|
131
|
+
return { error: parsed.error, details: parsed.details };
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.acquireJobLock = acquireJobLock;
|
|
4
|
+
exports.releaseJobLock = releaseJobLock;
|
|
5
|
+
exports.forceReleaseJobLock = forceReleaseJobLock;
|
|
6
|
+
exports.clearStaleLocks = clearStaleLocks;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const paths_1 = require("../server/paths");
|
|
10
|
+
function locksDir() {
|
|
11
|
+
return (0, node_path_1.join)((0, paths_1.getCockpitDir)(), "job-locks");
|
|
12
|
+
}
|
|
13
|
+
function lockPath(jobId) {
|
|
14
|
+
return (0, node_path_1.join)(locksDir(), `${jobId}.lock`);
|
|
15
|
+
}
|
|
16
|
+
function isPidAlive(pid) {
|
|
17
|
+
try {
|
|
18
|
+
process.kill(pid, 0);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function readLock(jobId) {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse((0, node_fs_1.readFileSync)(lockPath(jobId), "utf-8"));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function acquireJobLock(jobId, runId) {
|
|
34
|
+
(0, node_fs_1.mkdirSync)(locksDir(), { recursive: true });
|
|
35
|
+
const fp = lockPath(jobId);
|
|
36
|
+
const data = { pid: process.pid, runId, acquiredAt: Date.now() };
|
|
37
|
+
try {
|
|
38
|
+
(0, node_fs_1.writeFileSync)(fp, JSON.stringify(data) + "\n", { flag: "wx" });
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (err.code !== "EEXIST")
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const existing = readLock(jobId);
|
|
46
|
+
if (!existing) {
|
|
47
|
+
try {
|
|
48
|
+
(0, node_fs_1.writeFileSync)(fp, JSON.stringify(data) + "\n", { flag: "wx" });
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (isPidAlive(existing.pid)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
console.log(`[scheduler] clearing stale lock for job ${jobId} (pid ${existing.pid} is dead)`);
|
|
59
|
+
try {
|
|
60
|
+
(0, node_fs_1.unlinkSync)(fp);
|
|
61
|
+
}
|
|
62
|
+
catch { }
|
|
63
|
+
try {
|
|
64
|
+
(0, node_fs_1.writeFileSync)(fp, JSON.stringify(data) + "\n", { flag: "wx" });
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function releaseJobLock(jobId) {
|
|
72
|
+
try {
|
|
73
|
+
const existing = readLock(jobId);
|
|
74
|
+
if (existing && existing.pid === process.pid) {
|
|
75
|
+
(0, node_fs_1.unlinkSync)(lockPath(jobId));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
79
|
+
}
|
|
80
|
+
function forceReleaseJobLock(jobId) {
|
|
81
|
+
try {
|
|
82
|
+
(0, node_fs_1.unlinkSync)(lockPath(jobId));
|
|
83
|
+
}
|
|
84
|
+
catch { }
|
|
85
|
+
}
|
|
86
|
+
function clearStaleLocks() {
|
|
87
|
+
if (!(0, node_fs_1.existsSync)(locksDir()))
|
|
88
|
+
return;
|
|
89
|
+
const { readdirSync } = require("node:fs");
|
|
90
|
+
for (const file of readdirSync(locksDir())) {
|
|
91
|
+
if (!file.endsWith(".lock"))
|
|
92
|
+
continue;
|
|
93
|
+
const jobId = file.slice(0, -5);
|
|
94
|
+
const lock = readLock(jobId);
|
|
95
|
+
if (lock && !isPidAlive(lock.pid)) {
|
|
96
|
+
console.log(`[scheduler] removing stale lock for job ${jobId} (pid ${lock.pid})`);
|
|
97
|
+
try {
|
|
98
|
+
(0, node_fs_1.unlinkSync)(lockPath(jobId));
|
|
99
|
+
}
|
|
100
|
+
catch { }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|