@mndrk/agx 2.0.47 → 2.0.48
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/cloud-runtime/standalone/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents/[id]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/automations/create/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/automations/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/cycles/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/cycles/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js +2 -2
- package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/token/route.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/linear/token/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/participants/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/cancel/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/runs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/schedules/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/threads/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations/page/react-loadable-manifest.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/folders.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/folders.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/folders.segments/folders.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page/react-loadable-manifest.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/thread/[id]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__015d40a6._.js +67 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__067034dd._.js +67 -0
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__20a2cb22._.js +8 -8
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__37844df7._.js +67 -0
- package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d9f2041b._.js → [root-of-the-server]__3a93931b._.js} +4 -4
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__a3955224._.js +16 -16
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c8890cd6._.js +12 -12
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b2a2b86._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__32546242._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__5ff9ead4._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__f2c3b7ab._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__f59f0dc7._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d96bb3b5._.js → [root-of-the-server]__fbe1ab4a._.js} +2 -2
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_1e9b9b1e._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_24fe6213._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_36a0c486._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_3b21d3b2._.js +95 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_3eeac8f9._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_48db42b7._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_59f30a73._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_7d3b0032._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_916950b3._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_b598ae8a._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_cc8c8302._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_d972a4e1._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_dd7bb6fb._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_dd9880fb._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_f02d786a._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_fd8cafe9._.js +3 -0
- package/cloud-runtime/standalone/.next/server/chunks/ssr/app_projects_[slug]_linear_page_tsx_971a6ba7._.js +15 -12
- package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/ssr/components_thread_WorkspaceSidebar_tsx_e660301b._.js +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_54bf563f._.js +3 -0
- package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/04c135686161dbb1.js +40 -0
- package/cloud-runtime/standalone/.next/static/chunks/0d63db0c39c0a3b2.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/136ed07d84b14632.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/18866ed04ed3a063.css +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/{ccaf68956da192f8.js → 1bb38e61d891453c.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/2c7c8259c2b56bf5.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/2da1f13d50dc4e54.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/{fdadad2379039dce.js → 442eb8ef62bef9f9.js} +3 -3
- package/cloud-runtime/standalone/.next/static/chunks/{41c518743656a291.js → 5f33b52d582b0bb4.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/{97c11137cd6fc860.js → 64c2961edd3a3b13.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/{db131a0b6350e416.js → 692ce04abdbb3970.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/83be8569d298c6b0.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/87b3afe828c8cc52.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/{4343e7fe5bf5f34a.js → 9328740727c6456d.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/95d47e285ae9c031.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/b9bf5d3ee92a1313.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/ea35fb870141bcff.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/f59722264449b61c.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/f727d2c8f039511d.js +1 -0
- package/cloud-runtime/standalone/.next/static/chunks/{31fe4e36a00fd7b5.js → f8706212baa8ec67.js} +1 -1
- package/cloud-runtime/standalone/.next/static/chunks/fd823c9d1381335d.js +1 -0
- package/cloud-runtime/standalone/app/automations/page.tsx +11 -1
- package/cloud-runtime/standalone/app/projects/[slug]/layout.tsx +11 -1
- package/cloud-runtime/standalone/components/LinearBoard.tsx +118 -21
- package/cloud-runtime/standalone/components/chat-ui/ChatContainer.tsx +10 -0
- package/cloud-runtime/standalone/components/linear/RunScriptManager.tsx +356 -0
- package/cloud-runtime/standalone/components/thread/WorkspaceSidebar.tsx +35 -0
- package/cloud-runtime/standalone/hooks/useLinearRunScripts.ts +115 -0
- package/cloud-runtime/standalone/lib/linear-client.ts +33 -3
- package/cloud-runtime/standalone/lib/linear-execution-prompt.ts +92 -15
- package/cloud-runtime/standalone/state/automations/.state/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.json +8 -0
- package/cloud-runtime/standalone/state/automations/active/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.md +15 -0
- package/cloud-runtime/standalone/state/linearRunScripts.test.ts +99 -0
- package/cloud-runtime/standalone/state/linearRunScripts.ts +132 -0
- package/cloud-runtime/standalone/state/windowState.ts +21 -0
- package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__1154e5b3._.js +0 -67
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__76290829._.js +0 -67
- package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ad6d6402._.js +0 -67
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__21a9eaef._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__69887882._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__9ad05ace._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__bb149a22._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_11ce4c04._.js +0 -95
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_1d949e96._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_32a156b6._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_43c091dc._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_45175f47._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_4f0c544d._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_69164b06._.js +0 -95
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_7f7a828a._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_97f6a18e._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_a511a014._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_c3a3a829._.js +0 -3
- package/cloud-runtime/standalone/.next/server/chunks/ssr/_cee3cf86._.js +0 -95
- package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_e8bdedc5._.js +0 -3
- package/cloud-runtime/standalone/.next/static/chunks/14fff3c493ea9c54.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/2a9c83f8211196e0.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/5405540470146645.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/69f2db4b9996b9c1.js +0 -37
- package/cloud-runtime/standalone/.next/static/chunks/8aeb69ceb497ad85.css +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/a9da98f883ac833b.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/b2127dc67c5ade9f.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/baf5d39d089efb87.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/bf2a2fafb710e63c.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/c78969fde5798275.js +0 -1
- package/cloud-runtime/standalone/.next/static/chunks/d3dc6fadb96ab3a2.js +0 -1
- package/cloud-runtime/standalone/state/automations/.state/24a6a5db-3b14-49c4-841f-29f10f015fbb.json +0 -8
- package/cloud-runtime/standalone/state/automations/active/24a6a5db-3b14-49c4-841f-29f10f015fbb.md +0 -17
- /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → gty0FO80D_lbq3o9lSpQQ}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → gty0FO80D_lbq3o9lSpQQ}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → gty0FO80D_lbq3o9lSpQQ}/_ssgManifest.js +0 -0
|
@@ -29,6 +29,26 @@ export interface LinearExecutionPromptInput {
|
|
|
29
29
|
runtime?: LinearExecutionRuntimeContext | null;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
export interface ResolvedLinearExecutionContext {
|
|
33
|
+
issue: {
|
|
34
|
+
identifier: string;
|
|
35
|
+
title: string;
|
|
36
|
+
status: string;
|
|
37
|
+
assignee: string;
|
|
38
|
+
};
|
|
39
|
+
project: {
|
|
40
|
+
name: string;
|
|
41
|
+
slug: string;
|
|
42
|
+
label: string;
|
|
43
|
+
repos: LinearExecutionProjectRepoContext[];
|
|
44
|
+
};
|
|
45
|
+
runtime: {
|
|
46
|
+
knowledgeBaseRoot: string;
|
|
47
|
+
issueKnowledgePath: string;
|
|
48
|
+
isolatedWorktreePath: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
32
52
|
function slugifySegment(value: string, fallback: string): string {
|
|
33
53
|
const slug = value
|
|
34
54
|
.trim()
|
|
@@ -95,19 +115,14 @@ export function buildLinearExecutionPrompt(input: LinearExecutionPromptInput): {
|
|
|
95
115
|
prompt: string;
|
|
96
116
|
promptPrefix: string;
|
|
97
117
|
} {
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
const knowledgeBaseRoot =
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
String(input.runtime?.issueKnowledgePath ?? "").trim() ||
|
|
107
|
-
`${knowledgeBaseRoot}/issues/${issueIdentifier}/`;
|
|
108
|
-
const isolatedWorktreePath =
|
|
109
|
-
String(input.runtime?.isolatedWorktreePath ?? "").trim() ||
|
|
110
|
-
`/tmp/agx-${slugifySegment(issueIdentifier, "ticket")}`;
|
|
118
|
+
const context = resolveLinearExecutionContext(input);
|
|
119
|
+
const issueIdentifier = context.issue.identifier;
|
|
120
|
+
const issueTitle = context.issue.title;
|
|
121
|
+
const issueStatus = context.issue.status;
|
|
122
|
+
const issueAssignee = context.issue.assignee;
|
|
123
|
+
const knowledgeBaseRoot = context.runtime.knowledgeBaseRoot;
|
|
124
|
+
const issueKnowledgePath = context.runtime.issueKnowledgePath;
|
|
125
|
+
const isolatedWorktreePath = context.runtime.isolatedWorktreePath;
|
|
111
126
|
|
|
112
127
|
const promptPrefix = [
|
|
113
128
|
"LINEAR TASK EXECUTION",
|
|
@@ -118,13 +133,13 @@ export function buildLinearExecutionPrompt(input: LinearExecutionPromptInput): {
|
|
|
118
133
|
`- Title: ${issueTitle}`,
|
|
119
134
|
`- Current status: ${issueStatus}`,
|
|
120
135
|
`- Current assignee: ${issueAssignee}`,
|
|
121
|
-
`- Project: ${
|
|
136
|
+
`- Project: ${context.project.label}`,
|
|
122
137
|
`- Knowledge base root: ${knowledgeBaseRoot}`,
|
|
123
138
|
`- Issue knowledge path: ${issueKnowledgePath}`,
|
|
124
139
|
`- Suggested isolated worktree: ${isolatedWorktreePath}`,
|
|
125
140
|
"- Additional project resources such as repo knowledge, project memory, and project variables are injected separately by the active project context.",
|
|
126
141
|
].join("\n"),
|
|
127
|
-
`SOURCE REPOSITORIES\n${formatRepositories(
|
|
142
|
+
`SOURCE REPOSITORIES\n${formatRepositories(context.project.repos)}`,
|
|
128
143
|
[
|
|
129
144
|
"WORKFLOW",
|
|
130
145
|
"1. Read the full Linear issue and comment thread before acting. Use Linear MCP for issue details, comments, state changes, and follow-up.",
|
|
@@ -151,3 +166,65 @@ export function buildLinearExecutionPrompt(input: LinearExecutionPromptInput): {
|
|
|
151
166
|
promptPrefix,
|
|
152
167
|
};
|
|
153
168
|
}
|
|
169
|
+
|
|
170
|
+
export function resolveLinearExecutionContext(
|
|
171
|
+
input: LinearExecutionPromptInput
|
|
172
|
+
): ResolvedLinearExecutionContext {
|
|
173
|
+
const issueIdentifier = input.issue.identifier.trim() || "TICKET-ID";
|
|
174
|
+
const issueTitle = input.issue.title.trim() || "Untitled ticket";
|
|
175
|
+
const issueStatus = String(input.issue.status ?? "").trim() || "Unknown";
|
|
176
|
+
const issueAssignee = String(input.issue.assignee ?? "").trim() || "Unassigned";
|
|
177
|
+
const projectSlug = toProjectSlug(input.project);
|
|
178
|
+
const projectName = String(input.project?.name ?? "").trim() || projectSlug;
|
|
179
|
+
const knowledgeBaseRoot =
|
|
180
|
+
String(input.runtime?.knowledgeBaseRoot ?? "").trim() || `~/.agx/vault/${projectSlug}`;
|
|
181
|
+
const issueKnowledgePath =
|
|
182
|
+
String(input.runtime?.issueKnowledgePath ?? "").trim() ||
|
|
183
|
+
`${knowledgeBaseRoot}/issues/${issueIdentifier}/`;
|
|
184
|
+
const isolatedWorktreePath =
|
|
185
|
+
String(input.runtime?.isolatedWorktreePath ?? "").trim() ||
|
|
186
|
+
`/tmp/agx-${slugifySegment(issueIdentifier, "ticket")}`;
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
issue: {
|
|
190
|
+
identifier: issueIdentifier,
|
|
191
|
+
title: issueTitle,
|
|
192
|
+
status: issueStatus,
|
|
193
|
+
assignee: issueAssignee,
|
|
194
|
+
},
|
|
195
|
+
project: {
|
|
196
|
+
name: projectName,
|
|
197
|
+
slug: projectSlug,
|
|
198
|
+
label: toProjectLabel(input.project),
|
|
199
|
+
repos: input.project?.repos ? [...input.project.repos] : [],
|
|
200
|
+
},
|
|
201
|
+
runtime: {
|
|
202
|
+
knowledgeBaseRoot,
|
|
203
|
+
issueKnowledgePath,
|
|
204
|
+
isolatedWorktreePath,
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function renderLinearExecutionPromptTemplate(
|
|
210
|
+
template: string,
|
|
211
|
+
input: LinearExecutionPromptInput
|
|
212
|
+
): string {
|
|
213
|
+
const context = resolveLinearExecutionContext(input);
|
|
214
|
+
const values: Record<string, string> = {
|
|
215
|
+
"ticket.identifier": context.issue.identifier,
|
|
216
|
+
"ticket.title": context.issue.title,
|
|
217
|
+
"ticket.status": context.issue.status,
|
|
218
|
+
"ticket.assignee": context.issue.assignee,
|
|
219
|
+
"project.name": context.project.name,
|
|
220
|
+
"project.slug": context.project.slug,
|
|
221
|
+
"project.label": context.project.label,
|
|
222
|
+
"knowledge_base.root": context.runtime.knowledgeBaseRoot,
|
|
223
|
+
"knowledge_base.issue_path": context.runtime.issueKnowledgePath,
|
|
224
|
+
"worktree.path": context.runtime.isolatedWorktreePath,
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
return template.replace(/\{\{\s*([a-zA-Z0-9._-]+)\s*\}\}/g, (_match, key: string) => {
|
|
228
|
+
return values[key] ?? "";
|
|
229
|
+
});
|
|
230
|
+
}
|
package/cloud-runtime/standalone/state/automations/active/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc
|
|
3
|
+
name: 'Agx Agent: Work On Linear Tickets'
|
|
4
|
+
projectId: f354bbf2-cfed-473f-890c-e592209313da
|
|
5
|
+
state: active
|
|
6
|
+
trigger:
|
|
7
|
+
type: scheduled
|
|
8
|
+
cadence: 15 * * * *
|
|
9
|
+
cronExpr: 15 * * * *
|
|
10
|
+
target:
|
|
11
|
+
type: prompt_job
|
|
12
|
+
provider: claude
|
|
13
|
+
createdAt: '2026-04-08T09:50:53.793Z'
|
|
14
|
+
---
|
|
15
|
+
Execute `/Users/mendrika/Projects/Agents/agx-game-vault/agx-game-vault/scheduled-tasks/work-linear-tickets.md`
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getLinearRunScriptsStorageKey,
|
|
3
|
+
loadLinearRunScripts,
|
|
4
|
+
persistLinearRunScripts,
|
|
5
|
+
} from "./linearRunScripts";
|
|
6
|
+
|
|
7
|
+
type LocalStorageMap = Record<string, string>;
|
|
8
|
+
|
|
9
|
+
function withFakeLocalStorage<T>(callback: (storage: LocalStorageMap) => T): T {
|
|
10
|
+
const originalWindow = globalThis.window;
|
|
11
|
+
const storage: LocalStorageMap = {};
|
|
12
|
+
const fakeLocalStorage = {
|
|
13
|
+
getItem(key: string) {
|
|
14
|
+
return storage[key] ?? null;
|
|
15
|
+
},
|
|
16
|
+
setItem(key: string, value: string) {
|
|
17
|
+
storage[key] = value;
|
|
18
|
+
},
|
|
19
|
+
removeItem(key: string) {
|
|
20
|
+
delete storage[key];
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
globalThis.window = { localStorage: fakeLocalStorage } as unknown as Window;
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
return callback(storage);
|
|
27
|
+
} finally {
|
|
28
|
+
globalThis.window = originalWindow;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
describe("linearRunScripts", () => {
|
|
33
|
+
test("persists and restores scripts per project slug", () => {
|
|
34
|
+
withFakeLocalStorage((storage) => {
|
|
35
|
+
const key = getLinearRunScriptsStorageKey("agx-cloud");
|
|
36
|
+
expect(loadLinearRunScripts("agx-cloud")).toEqual({
|
|
37
|
+
activeScriptId: null,
|
|
38
|
+
scripts: [],
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
persistLinearRunScripts("agx-cloud", {
|
|
42
|
+
activeScriptId: "script-1",
|
|
43
|
+
scripts: [
|
|
44
|
+
{
|
|
45
|
+
id: "script-1",
|
|
46
|
+
name: "Investigation",
|
|
47
|
+
prompt: "Read {{ticket.identifier}} first.",
|
|
48
|
+
createdAt: "2026-04-08T01:00:00.000Z",
|
|
49
|
+
updatedAt: "2026-04-08T02:00:00.000Z",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
expect(storage[key]).toContain("Investigation");
|
|
55
|
+
expect(loadLinearRunScripts("agx-cloud")).toEqual({
|
|
56
|
+
activeScriptId: "script-1",
|
|
57
|
+
scripts: [
|
|
58
|
+
{
|
|
59
|
+
id: "script-1",
|
|
60
|
+
name: "Investigation",
|
|
61
|
+
prompt: "Read {{ticket.identifier}} first.",
|
|
62
|
+
createdAt: "2026-04-08T01:00:00.000Z",
|
|
63
|
+
updatedAt: "2026-04-08T02:00:00.000Z",
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("clears invalid active script ids while preserving valid scripts", () => {
|
|
71
|
+
withFakeLocalStorage((storage) => {
|
|
72
|
+
storage[getLinearRunScriptsStorageKey("agx-cloud")] = JSON.stringify({
|
|
73
|
+
activeScriptId: "missing-script",
|
|
74
|
+
scripts: [
|
|
75
|
+
{
|
|
76
|
+
id: "script-1",
|
|
77
|
+
name: "Implementation",
|
|
78
|
+
prompt: "Implement carefully.",
|
|
79
|
+
createdAt: "2026-04-08T01:00:00.000Z",
|
|
80
|
+
updatedAt: "2026-04-08T02:00:00.000Z",
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
expect(loadLinearRunScripts("agx-cloud")).toEqual({
|
|
86
|
+
activeScriptId: null,
|
|
87
|
+
scripts: [
|
|
88
|
+
{
|
|
89
|
+
id: "script-1",
|
|
90
|
+
name: "Implementation",
|
|
91
|
+
prompt: "Implement carefully.",
|
|
92
|
+
createdAt: "2026-04-08T01:00:00.000Z",
|
|
93
|
+
updatedAt: "2026-04-08T02:00:00.000Z",
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
const LINEAR_RUN_SCRIPTS_STORAGE_PREFIX = "agx-linear:runScripts";
|
|
2
|
+
|
|
3
|
+
export interface LinearRunScript {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
prompt: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
updatedAt: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface LinearRunScriptsState {
|
|
12
|
+
activeScriptId: string | null;
|
|
13
|
+
scripts: LinearRunScript[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const DEFAULT_LINEAR_RUN_SCRIPTS_STATE: LinearRunScriptsState = {
|
|
17
|
+
activeScriptId: null,
|
|
18
|
+
scripts: [],
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function isStorageAvailable(): boolean {
|
|
22
|
+
return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function normalizeProjectSlug(projectSlug?: string | null): string {
|
|
26
|
+
return String(projectSlug ?? "").trim().toLowerCase();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function normalizeScript(input: unknown): LinearRunScript | null {
|
|
30
|
+
if (!input || typeof input !== "object") {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const candidate = input as Partial<LinearRunScript>;
|
|
35
|
+
const id = typeof candidate.id === "string" ? candidate.id.trim() : "";
|
|
36
|
+
const name = typeof candidate.name === "string" ? candidate.name.trim() : "";
|
|
37
|
+
const prompt = typeof candidate.prompt === "string" ? candidate.prompt.trim() : "";
|
|
38
|
+
const createdAt =
|
|
39
|
+
typeof candidate.createdAt === "string" && candidate.createdAt.trim()
|
|
40
|
+
? candidate.createdAt.trim()
|
|
41
|
+
: "";
|
|
42
|
+
const updatedAt =
|
|
43
|
+
typeof candidate.updatedAt === "string" && candidate.updatedAt.trim()
|
|
44
|
+
? candidate.updatedAt.trim()
|
|
45
|
+
: createdAt;
|
|
46
|
+
|
|
47
|
+
if (!id || !name || !prompt || !createdAt || !updatedAt) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
id,
|
|
53
|
+
name,
|
|
54
|
+
prompt,
|
|
55
|
+
createdAt,
|
|
56
|
+
updatedAt,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function sortScripts(scripts: LinearRunScript[]): LinearRunScript[] {
|
|
61
|
+
return [...scripts].sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function normalizeState(value: unknown): LinearRunScriptsState {
|
|
65
|
+
if (!value || typeof value !== "object") {
|
|
66
|
+
return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const candidate = value as Partial<LinearRunScriptsState>;
|
|
70
|
+
const scripts = Array.isArray(candidate.scripts)
|
|
71
|
+
? sortScripts(
|
|
72
|
+
candidate.scripts
|
|
73
|
+
.map((script) => normalizeScript(script))
|
|
74
|
+
.filter((script): script is LinearRunScript => Boolean(script))
|
|
75
|
+
)
|
|
76
|
+
: [];
|
|
77
|
+
const activeScriptId =
|
|
78
|
+
typeof candidate.activeScriptId === "string" && candidate.activeScriptId.trim()
|
|
79
|
+
? candidate.activeScriptId.trim()
|
|
80
|
+
: null;
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
activeScriptId:
|
|
84
|
+
activeScriptId && scripts.some((script) => script.id === activeScriptId)
|
|
85
|
+
? activeScriptId
|
|
86
|
+
: null,
|
|
87
|
+
scripts,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function getLinearRunScriptsStorageKey(projectSlug?: string | null): string {
|
|
92
|
+
const normalizedProjectSlug = normalizeProjectSlug(projectSlug);
|
|
93
|
+
return normalizedProjectSlug
|
|
94
|
+
? `${LINEAR_RUN_SCRIPTS_STORAGE_PREFIX}:${normalizedProjectSlug}`
|
|
95
|
+
: `${LINEAR_RUN_SCRIPTS_STORAGE_PREFIX}:global`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function loadLinearRunScripts(projectSlug?: string | null): LinearRunScriptsState {
|
|
99
|
+
if (!isStorageAvailable()) {
|
|
100
|
+
return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const raw = window.localStorage.getItem(getLinearRunScriptsStorageKey(projectSlug));
|
|
104
|
+
if (!raw) {
|
|
105
|
+
return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
return normalizeState(JSON.parse(raw));
|
|
110
|
+
} catch {
|
|
111
|
+
return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function persistLinearRunScripts(
|
|
116
|
+
projectSlug: string | null | undefined,
|
|
117
|
+
state: LinearRunScriptsState
|
|
118
|
+
): void {
|
|
119
|
+
if (!isStorageAvailable()) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
const normalized = normalizeState(state);
|
|
125
|
+
window.localStorage.setItem(
|
|
126
|
+
getLinearRunScriptsStorageKey(projectSlug),
|
|
127
|
+
JSON.stringify(normalized)
|
|
128
|
+
);
|
|
129
|
+
} catch {
|
|
130
|
+
// ignore storage errors
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -18,6 +18,8 @@ export interface SidebarState {
|
|
|
18
18
|
logPanelHeight: number;
|
|
19
19
|
workspaceVisible: boolean;
|
|
20
20
|
logPanelVisible: boolean;
|
|
21
|
+
linearTicketPanelWidth: number;
|
|
22
|
+
linearRunsPanelWidth: number;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
export interface ScrollState {
|
|
@@ -36,6 +38,8 @@ const DEFAULT_SIDEBAR: SidebarState = {
|
|
|
36
38
|
logPanelHeight: 200,
|
|
37
39
|
workspaceVisible: true,
|
|
38
40
|
logPanelVisible: false,
|
|
41
|
+
linearTicketPanelWidth: 576,
|
|
42
|
+
linearRunsPanelWidth: 224,
|
|
39
43
|
};
|
|
40
44
|
|
|
41
45
|
const DEFAULT_SCROLL: ScrollState = {
|
|
@@ -172,6 +176,23 @@ export function persistLastWorkspaceId(workspaceId: string | null): void {
|
|
|
172
176
|
persistScrollState({ lastWorkspaceId: workspaceId });
|
|
173
177
|
}
|
|
174
178
|
|
|
179
|
+
// Linear panel widths
|
|
180
|
+
export function loadLinearTicketPanelWidth(): number {
|
|
181
|
+
return loadSidebarState().linearTicketPanelWidth;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function persistLinearTicketPanelWidth(width: number): void {
|
|
185
|
+
persistSidebarState({ linearTicketPanelWidth: width });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function loadLinearRunsPanelWidth(): number {
|
|
189
|
+
return loadSidebarState().linearRunsPanelWidth;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function persistLinearRunsPanelWidth(width: number): void {
|
|
193
|
+
persistSidebarState({ linearRunsPanelWidth: width });
|
|
194
|
+
}
|
|
195
|
+
|
|
175
196
|
// Clear all window state (for logout/reset)
|
|
176
197
|
export function clearWindowState(): void {
|
|
177
198
|
if (!isStorageAvailable()) return;
|