@alexjbarnes/cockpit 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +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/I-rxZaJEzhe3ZUTjSqB11/_buildManifest.js +1 -0
- 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-fb393846bb4333c0.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/README.md +12 -3
- package/bin/cockpit-hook-bridge.mjs +170 -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 → I-rxZaJEzhe3ZUTjSqB11}/_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
|
+
}
|
package/dist/src/server/inbox.js
CHANGED
|
@@ -13,20 +13,24 @@ exports.clearInbox = clearInbox;
|
|
|
13
13
|
exports.parseInboxBlock = parseInboxBlock;
|
|
14
14
|
exports.parseErrorBlock = parseErrorBlock;
|
|
15
15
|
const node_fs_1 = require("node:fs");
|
|
16
|
-
const node_os_1 = require("node:os");
|
|
17
16
|
const node_path_1 = __importDefault(require("node:path"));
|
|
18
17
|
const uuid_1 = require("uuid");
|
|
18
|
+
const paths_1 = require("../server/paths");
|
|
19
19
|
const notifications_1 = require("./notifications");
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
function inboxDir() {
|
|
21
|
+
return (0, paths_1.getCockpitDir)();
|
|
22
|
+
}
|
|
23
|
+
function inboxFile() {
|
|
24
|
+
return node_path_1.default.join(inboxDir(), "inbox.jsonl");
|
|
25
|
+
}
|
|
22
26
|
function ensureDir() {
|
|
23
|
-
if (!(0, node_fs_1.existsSync)(
|
|
24
|
-
(0, node_fs_1.mkdirSync)(
|
|
27
|
+
if (!(0, node_fs_1.existsSync)(inboxDir()))
|
|
28
|
+
(0, node_fs_1.mkdirSync)(inboxDir(), { recursive: true });
|
|
25
29
|
}
|
|
26
30
|
function readAll() {
|
|
27
|
-
if (!(0, node_fs_1.existsSync)(
|
|
31
|
+
if (!(0, node_fs_1.existsSync)(inboxFile()))
|
|
28
32
|
return [];
|
|
29
|
-
const raw = (0, node_fs_1.readFileSync)(
|
|
33
|
+
const raw = (0, node_fs_1.readFileSync)(inboxFile(), "utf-8");
|
|
30
34
|
const messages = [];
|
|
31
35
|
for (const line of raw.split("\n")) {
|
|
32
36
|
if (!line.trim())
|
|
@@ -40,7 +44,7 @@ function readAll() {
|
|
|
40
44
|
}
|
|
41
45
|
function writeAll(messages) {
|
|
42
46
|
ensureDir();
|
|
43
|
-
(0, node_fs_1.writeFileSync)(
|
|
47
|
+
(0, node_fs_1.writeFileSync)(inboxFile(), messages.map((m) => JSON.stringify(m)).join("\n") + "\n");
|
|
44
48
|
}
|
|
45
49
|
function getInboxMessages() {
|
|
46
50
|
return readAll().sort((a, b) => b.createdAt - a.createdAt);
|
|
@@ -73,12 +77,12 @@ function addInboxMessage(msg) {
|
|
|
73
77
|
});
|
|
74
78
|
return entry;
|
|
75
79
|
}
|
|
76
|
-
function markRead(id) {
|
|
80
|
+
function markRead(id, read = true) {
|
|
77
81
|
const messages = readAll();
|
|
78
82
|
const msg = messages.find((m) => m.id === id);
|
|
79
83
|
if (!msg)
|
|
80
84
|
return false;
|
|
81
|
-
msg.read =
|
|
85
|
+
msg.read = read;
|
|
82
86
|
writeAll(messages);
|
|
83
87
|
return true;
|
|
84
88
|
}
|
|
@@ -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
|
+
}
|
|
@@ -5,14 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.JobScheduler = void 0;
|
|
7
7
|
const node_fs_1 = require("node:fs");
|
|
8
|
-
const node_os_1 = require("node:os");
|
|
9
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
9
|
const uuid_1 = require("uuid");
|
|
10
|
+
const paths_1 = require("../server/paths");
|
|
11
11
|
const cron_utils_1 = require("./cron-utils");
|
|
12
12
|
const inbox_1 = require("./inbox");
|
|
13
|
+
const job_lock_1 = require("./job-lock");
|
|
13
14
|
const job_storage_1 = require("./job-storage");
|
|
14
15
|
const transcript_1 = require("./transcript");
|
|
15
|
-
|
|
16
|
+
function scratchpadDir() {
|
|
17
|
+
return node_path_1.default.join((0, paths_1.getCockpitDir)(), "jobs");
|
|
18
|
+
}
|
|
16
19
|
const JOB_PROMPT_HEADER = [
|
|
17
20
|
"You are running as an autonomous scheduled job. There is no human operator in this session.",
|
|
18
21
|
"Do not ask clarifying questions. Do not wait for user input. Make reasonable assumptions and proceed.",
|
|
@@ -43,7 +46,7 @@ function buildJobPrompt(job) {
|
|
|
43
46
|
parts.push("No tools or MCP servers are allowed.");
|
|
44
47
|
}
|
|
45
48
|
if (job.cwd) {
|
|
46
|
-
const storageDir = node_path_1.default.join(
|
|
49
|
+
const storageDir = node_path_1.default.join(scratchpadDir(), job.id);
|
|
47
50
|
parts.push("");
|
|
48
51
|
parts.push(`Storage: If you need to persist any files between runs (state, cache, data), save them in ${storageDir}`);
|
|
49
52
|
parts.push("Do not store persistent files in the working directory as it is a git repository.");
|
|
@@ -155,6 +158,9 @@ class JobScheduler {
|
|
|
155
158
|
clearInterval(this.timer);
|
|
156
159
|
this.timer = null;
|
|
157
160
|
}
|
|
161
|
+
for (const jobId of this.runningJobs.keys()) {
|
|
162
|
+
(0, job_lock_1.releaseJobLock)(jobId);
|
|
163
|
+
}
|
|
158
164
|
console.log("[scheduler] stopped");
|
|
159
165
|
}
|
|
160
166
|
reloadJobs() {
|
|
@@ -171,6 +177,7 @@ class JobScheduler {
|
|
|
171
177
|
return this.executeJob(job);
|
|
172
178
|
}
|
|
173
179
|
recoverState() {
|
|
180
|
+
(0, job_lock_1.clearStaleLocks)();
|
|
174
181
|
(0, job_storage_1.pruneAllRuns)();
|
|
175
182
|
const now = Date.now();
|
|
176
183
|
const jobs = (0, job_storage_1.loadJobs)();
|
|
@@ -186,6 +193,7 @@ class JobScheduler {
|
|
|
186
193
|
run.completedAt = now;
|
|
187
194
|
run.durationMs = now - run.startedAt;
|
|
188
195
|
(0, job_storage_1.saveRun)(run);
|
|
196
|
+
(0, job_lock_1.forceReleaseJobLock)(job.id);
|
|
189
197
|
}
|
|
190
198
|
}
|
|
191
199
|
}
|
|
@@ -209,6 +217,7 @@ class JobScheduler {
|
|
|
209
217
|
run.messageCount = (0, transcript_1.countTranscriptMessages)(run.sessionId, run.cwd);
|
|
210
218
|
(0, job_storage_1.saveRun)(run);
|
|
211
219
|
this.runningJobs.delete(jobId);
|
|
220
|
+
(0, job_lock_1.releaseJobLock)(jobId);
|
|
212
221
|
}
|
|
213
222
|
}
|
|
214
223
|
const jobs = (0, job_storage_1.loadJobs)();
|
|
@@ -244,10 +253,15 @@ class JobScheduler {
|
|
|
244
253
|
}
|
|
245
254
|
async executeJob(job) {
|
|
246
255
|
const runId = (0, uuid_1.v4)();
|
|
247
|
-
|
|
248
|
-
|
|
256
|
+
if (!(0, job_lock_1.acquireJobLock)(job.id, runId)) {
|
|
257
|
+
console.log(`[scheduler] skipping job ${job.name}: another process holds the lock`);
|
|
258
|
+
throw new Error("Could not acquire job lock - another process is running this job");
|
|
259
|
+
}
|
|
260
|
+
const jobCwd = job.cwd || node_path_1.default.join(scratchpadDir(), job.id);
|
|
261
|
+
(0, node_fs_1.mkdirSync)(node_path_1.default.join(scratchpadDir(), job.id), { recursive: true });
|
|
249
262
|
const sessionInfo = this.sessionManager.createSession(jobCwd, `[job] ${job.name}`, {
|
|
250
263
|
bypassPermissions: !!job.bypassPermissions,
|
|
264
|
+
runtime: job.runtime,
|
|
251
265
|
});
|
|
252
266
|
const sessionId = sessionInfo.id;
|
|
253
267
|
const run = {
|
|
@@ -265,6 +279,7 @@ class JobScheduler {
|
|
|
265
279
|
this.runningJobs.set(job.id, run);
|
|
266
280
|
const toolTracker = new Map();
|
|
267
281
|
let lastAssistantText = "";
|
|
282
|
+
const enabledServers = new Set(job.mcpServers || []);
|
|
268
283
|
const unsubEvent = this.sessionManager.subscribe(sessionId, (event) => {
|
|
269
284
|
if (event.type === "tool_use_start" && event.toolId) {
|
|
270
285
|
toolTracker.set(event.toolId, {
|
|
@@ -319,7 +334,6 @@ class JobScheduler {
|
|
|
319
334
|
}
|
|
320
335
|
}
|
|
321
336
|
});
|
|
322
|
-
const enabledServers = new Set(job.mcpServers || []);
|
|
323
337
|
const initCleanup = this.sessionManager.onInit(sessionId, (initData) => {
|
|
324
338
|
for (const server of initData.mcpServers) {
|
|
325
339
|
if (!enabledServers.has(server.name)) {
|
|
@@ -328,7 +342,7 @@ class JobScheduler {
|
|
|
328
342
|
}
|
|
329
343
|
});
|
|
330
344
|
if (job.model) {
|
|
331
|
-
this.sessionManager.setModel(sessionId, job.model);
|
|
345
|
+
this.sessionManager.setModel(sessionId, job.model, job.contextSize);
|
|
332
346
|
}
|
|
333
347
|
if (job.thinkingLevel) {
|
|
334
348
|
this.sessionManager.setThinkingLevel(sessionId, job.thinkingLevel);
|
|
@@ -375,7 +389,7 @@ class JobScheduler {
|
|
|
375
389
|
if (transcriptCount > run.messageCount)
|
|
376
390
|
run.messageCount = transcriptCount;
|
|
377
391
|
(0, job_storage_1.saveRun)(run);
|
|
378
|
-
if (job.inboxOutput && lastAssistantText) {
|
|
392
|
+
if (job.inboxOutput && lastAssistantText && finalStatus === "success") {
|
|
379
393
|
const inbox = (0, inbox_1.parseInboxBlock)(lastAssistantText);
|
|
380
394
|
if (inbox) {
|
|
381
395
|
(0, inbox_1.addInboxMessage)({ ...inbox, jobId: job.id, jobName: job.name, runId: run.id, notifyProviders: job.notifyProviders });
|
|
@@ -393,6 +407,7 @@ class JobScheduler {
|
|
|
393
407
|
});
|
|
394
408
|
}
|
|
395
409
|
this.runningJobs.delete(job.id);
|
|
410
|
+
(0, job_lock_1.releaseJobLock)(job.id);
|
|
396
411
|
resolve(run);
|
|
397
412
|
};
|
|
398
413
|
this.sessionManager.sendMessage(sessionId, buildJobPrompt(job));
|