@mndrk/agx 2.0.39 → 2.0.41

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.
Files changed (135) hide show
  1. package/cloud-runtime/standalone/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/.next/build-manifest.json +2 -2
  3. package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
  4. package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
  5. package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
  12. package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +1 -1
  13. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  14. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  15. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  17. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  19. package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
  20. package/cloud-runtime/standalone/.next/server/app/agents.rsc +1 -1
  21. package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
  22. package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  23. package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
  24. package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
  25. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
  26. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  27. package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
  28. package/cloud-runtime/standalone/.next/server/app/automations.rsc +1 -1
  29. package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
  31. package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +1 -1
  32. package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +1 -1
  33. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +1 -1
  34. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
  35. package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
  36. package/cloud-runtime/standalone/.next/server/app/board.rsc +1 -1
  37. package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +1 -1
  38. package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
  39. package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +1 -1
  40. package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +1 -1
  41. package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  42. package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
  43. package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
  44. package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +1 -1
  45. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +1 -1
  46. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  47. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +1 -1
  48. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +1 -1
  49. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +1 -1
  50. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  51. package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
  52. package/cloud-runtime/standalone/.next/server/app/index.rsc +1 -1
  53. package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  54. package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  55. package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  56. package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  57. package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  58. package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
  59. package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +1 -1
  60. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +1 -1
  61. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  62. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +1 -1
  63. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +1 -1
  64. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
  65. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  66. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  67. package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
  68. package/cloud-runtime/standalone/.next/server/app/projects.rsc +1 -1
  69. package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +1 -1
  70. package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  71. package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +1 -1
  72. package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
  73. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  74. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  75. package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
  76. package/cloud-runtime/standalone/.next/server/app/settings.rsc +1 -1
  77. package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  78. package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  79. package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  80. package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  81. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  82. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  83. package/cloud-runtime/standalone/.next/server/app/skills.html +2 -2
  84. package/cloud-runtime/standalone/.next/server/app/skills.rsc +1 -1
  85. package/cloud-runtime/standalone/.next/server/app/skills.segments/_full.segment.rsc +1 -1
  86. package/cloud-runtime/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  87. package/cloud-runtime/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
  88. package/cloud-runtime/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
  89. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
  90. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  91. package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
  92. package/cloud-runtime/standalone/.next/server/app/status.rsc +1 -1
  93. package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +1 -1
  94. package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
  95. package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +1 -1
  96. package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +1 -1
  97. package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  98. package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
  99. package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
  100. package/cloud-runtime/standalone/.next/server/app/welcome.rsc +1 -1
  101. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +1 -1
  102. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
  103. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +1 -1
  104. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +1 -1
  105. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +1 -1
  106. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
  107. package/cloud-runtime/standalone/.next/server/chunks/{[externals]__986fcdb7._.js → [externals]__bc6c7111._.js} +1 -1
  108. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__4bce7db7._.js → [root-of-the-server]__09ca81e1._.js} +24 -24
  109. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__f9cff4b0._.js → [root-of-the-server]__1017e012._.js} +2 -2
  110. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__1ac3236d._.js +25 -0
  111. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__762ab29c._.js → [root-of-the-server]__236c35bb._.js} +2 -2
  112. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ab7343c8._.js → [root-of-the-server]__a1e62918._.js} +1 -1
  113. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__da3a1ce7._.js → [root-of-the-server]__dc542063._.js} +2 -2
  114. package/cloud-runtime/standalone/.next/server/chunks/_22fe5fd2._.js +3 -0
  115. package/cloud-runtime/standalone/.next/server/chunks/lib_2492d514._.js +81 -0
  116. package/cloud-runtime/standalone/.next/server/chunks/lib_281e5787._.js +16 -0
  117. package/cloud-runtime/standalone/.next/server/chunks/lib_63067e21._.js +16 -0
  118. package/cloud-runtime/standalone/.next/server/chunks/lib_orchestrator_chat-processor_ts_4c335719._.js +134 -0
  119. package/cloud-runtime/standalone/.next/server/chunks/lib_sqlite-query-adapter_ts_3ea4d849._.js +82 -21
  120. package/cloud-runtime/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_def8bfbe.js +11 -5
  121. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_next_dist_61a87db9._.js +1 -1
  122. package/cloud-runtime/standalone/.next/server/instrumentation.js +1 -1
  123. package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
  124. package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
  125. package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
  126. package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
  127. package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
  128. package/cloud-runtime/standalone/app/api/prompt-jobs/poll/route.ts +2 -2
  129. package/cloud-runtime/standalone/instrumentation.ts +2 -0
  130. package/package.json +1 -1
  131. package/cloud-runtime/standalone/.next/server/chunks/_17e53c87._.js +0 -3
  132. package/cloud-runtime/standalone/.next/server/chunks/lib_ea45fe73._.js +0 -94
  133. /package/cloud-runtime/standalone/.next/static/{9PXl40CrFxI8nirdJ1A-T → uSe1ovd3mKmeJLdjjWIQA}/_buildManifest.js +0 -0
  134. /package/cloud-runtime/standalone/.next/static/{9PXl40CrFxI8nirdJ1A-T → uSe1ovd3mKmeJLdjjWIQA}/_clientMiddlewareManifest.json +0 -0
  135. /package/cloud-runtime/standalone/.next/static/{9PXl40CrFxI8nirdJ1A-T → uSe1ovd3mKmeJLdjjWIQA}/_ssgManifest.js +0 -0
@@ -6,9 +6,11 @@ export async function register() {
6
6
  await import("./lib/check-node-version");
7
7
  const { getQueue, QUEUE_NAMES } = await import('@/lib/queue/boss');
8
8
  const { taskProcessor } = await import('@/lib/orchestrator/processor');
9
+ const { chatProcessor } = await import('@/lib/orchestrator/chat-processor');
9
10
 
10
11
  const queue = await getQueue();
11
12
  await queue.work(QUEUE_NAMES.TASK_PROCESS, taskProcessor, { batchSize: 5 });
13
+ await queue.work(QUEUE_NAMES.CHAT_RUN_PROCESS, chatProcessor, { batchSize: 2 });
12
14
  console.log('[worker] queue worker started (embedded)');
13
15
 
14
16
  // Schedule poller — drives recurring graph ticks
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mndrk/agx",
3
- "version": "2.0.39",
3
+ "version": "2.0.41",
4
4
  "description": "Autonomous AI Agent Orchestrator for Claude, Gemini, and Ollama",
5
5
  "engines": {
6
6
  "node": ">=22.16.0"
@@ -1,3 +0,0 @@
1
- module.exports=[69449,e=>{"use strict";async function s(){{await e.A(77510);let{getQueue:s,QUEUE_NAMES:r}=await e.A(80001),{taskProcessor:t}=await e.A(32984),o=await s();await o.work(r.TASK_PROCESS,t,{batchSize:5}),console.log("[worker] queue worker started (embedded)");let{pollSchedules:a}=await e.A(57063),{createDispatchFunction:l}=await e.A(73171),{createDispatchWork:c}=await e.A(73045),{executeNode:h}=await e.A(9072),{completeScheduleTick:n,isScheduleTickComplete:d}=await e.A(24865),{GraphStore:i}=await e.A(2224),p=process.env.PORT||"3000",_=`http://localhost:${p}`,u=!1;setTimeout(()=>{u=!0},5e3),setInterval(async()=>{if(u)try{let e=await fetch(`${_}/api/prompt-jobs/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:"{}"});if(e.ok){let s=await e.json();s.queued?.length>0&&console.log(`[prompt-jobs] dispatched ${s.queued.length} run(s)`),s.skipped?.length>0&&console.log(`[prompt-jobs] skipped ${s.skipped.length} job(s):`,s.skipped.map(e=>e.reason))}}catch{}},15e3),console.log("[prompt-jobs] poller started (every 15s)"),setInterval(async()=>{try{let e=l(),s=c(),r=await a({dispatchFunction:e,dispatchWork:s});if(r.tickedGraphIds.length>0&&console.log(`[schedules] ticked ${r.tickedGraphIds.length} graph(s)`),r.errors.length>0&&console.error(`[schedules] ${r.errors.length} error(s):`,r.errors.map(e=>e.error.message)),r.pendingWork.length>0){let t=new i;for(let o of r.pendingWork){let r=o.graph;for(let t of o.nodeIds)try{r=(await h(r,t,{dispatchFunction:e,dispatchWork:s})).graph,console.log(`[schedules] dispatched work node "${t}" for graph ${o.taskId}`)}catch(e){console.error(`[schedules] work dispatch failed for node "${t}":`,e)}if(t.updateGraphStructure(r.id,{nodes:r.nodes}),d(r)){let e=n(r);t.updateGraphStructure(e.id,{schedule:e.schedule}),console.log(`[schedules] tick complete for graph ${o.taskId}`)}}}}catch(e){console.error("[schedules] poll failed:",e)}},15e3),console.log("[schedules] poller started (every 15s)")}}e.s(["register",()=>s])},77510,e=>{e.v(s=>Promise.all(["server/chunks/lib_check-node-version_ts_ef89bf83._.js"].map(s=>e.l(s))).then(()=>s(4799)))},80001,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__529a6e1c._.js"].map(s=>e.l(s))).then(()=>s(40793)))},32984,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__4bce7db7._.js","server/chunks/lib_ea45fe73._.js","server/chunks/lib_sqlite-query-adapter_ts_3ea4d849._.js"].map(s=>e.l(s))).then(()=>s(69324)))},57063,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__762ab29c._.js","server/chunks/lib_sqlite-query-adapter_ts_3ea4d849._.js","server/chunks/_6519418b._.js","server/chunks/src_graph_executor_ts_a8bc8d58._.js"].map(s=>e.l(s))).then(()=>s(76109)))},73171,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__f9cff4b0._.js"].map(s=>e.l(s))).then(()=>s(58898)))},73045,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__da3a1ce7._.js"].map(s=>e.l(s))).then(()=>s(80469)))},9072,e=>{e.v(s=>Promise.all(["server/chunks/[externals]__986fcdb7._.js","server/chunks/_6bc1b3e1._.js","server/chunks/src_graph_executor_ts_a8bc8d58._.js"].map(s=>e.l(s))).then(()=>s(88840)))},24865,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__6db132e9._.js","server/chunks/_6519418b._.js"].map(s=>e.l(s))).then(()=>s(9662)))},2224,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__8f5cac13._.js","server/chunks/lib_sqlite-query-adapter_ts_3ea4d849._.js"].map(s=>e.l(s))).then(()=>s(91329)))}];
2
-
3
- //# sourceMappingURL=_17e53c87._.js.map
@@ -1,94 +0,0 @@
1
- module.exports=[99904,45491,29264,e=>{"use strict";function t(){let{createAdminDbClientSQLite:t}=e.r(65196);return t()}e.i(86213),e.s(["createAdminDbClient",()=>t],45491);let r="Waiting on dependencies",n=[{value:"task.created",label:"Task created",description:"Fires immediately when a new task is added to the queue."},{value:"task.stage_complete",label:"Stage completed",description:"Emitted whenever a stage finishes and the task advances."},{value:"task.completed",label:"Task completed",description:"When the task reaches a completed status (done)."},{value:"task.failed",label:"Task failed",description:"When the task may have errored, including cancellations."},{value:"task.blocked",label:"Task blocked",description:"When the agent raises the task as blocked awaiting manual input."}].map(e=>e.value);class o extends Error{}function a(e){let t=Array.isArray(e.events)?e.events.filter(e=>"string"==typeof e).map(e=>e.trim()).filter(e=>n.includes(e)):[];return{id:String(e.id),user_id:String(e.user_id),url:String(e.url),name:null!=e.name?String(e.name):null,events:t,enabled:!1!==e.enabled,created_at:String(e.created_at),updated_at:String(e.updated_at)}}async function i(e,t){if(function(e,t){if(!e||"object"!=typeof e)return!1;let r=e.code,n="string"==typeof e.message?e.message:"";return"42P01"===r||"PGRST205"===r||n.includes(`relation "${t}" does not exist`)||n.includes(`Could not find the table 'agx.${t}'`)||n.includes(`Could not find the table 'public.${t}'`)}(t,e))throw new o(`Missing relation: ${e}`);throw t}async function s(e){let r=t(),{data:n,error:o}=await r.from("notification_webhooks").select("*").eq("user_id",e).order("created_at",{ascending:!1});return(o&&await i("notification_webhooks",o),n)?(Array.isArray(n)?n:[n]).map(a):[]}async function l(e){if(!e.userId)return;let t=[];try{t=await s(e.userId)}catch(e){if(e instanceof o)return void console.debug("[notifications] notification_webhooks schema not ready, skipping");console.error("[notifications] failed to load webhooks",e);return}let r=t.filter(t=>t.enabled&&t.events.includes(e.eventType));if(!r.length)return;let n=e.timestamp||new Date().toISOString(),a={eventType:e.eventType,taskId:e.taskId,userId:e.userId,title:e.title||null,slug:e.slug||null,stage:e.stage||null,previousStage:e.previousStage||null,nextStage:e.nextStage||null,status:e.status||null,error:e.error||null,timestamp:n,details:e.details||{}};await Promise.all(r.map(async e=>{try{let t=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});t.ok||console.error(`[notifications] webhook ${e.url} responded with ${t.status}`)}catch(t){console.error(`[notifications] failed to send to ${e.url}`,t)}}))}e.s(["notifyTaskEvent",()=>l],29264);var d=e.i(54799);function c(e,t){if(!e)return!1;let r="string"==typeof e.message?e.message:"";return"42P01"===e.code||"PGRST205"===e.code||r.includes(`relation "${t}" does not exist`)||r.includes(`Could not find the table 'agx.${t}'`)||r.includes(`Could not find the table 'public.${t}'`)}async function u(e){let r=t(),{data:n,error:o}=await r.from("user_settings").select("*").eq("user_id",e).maybeSingle();if(o){if(c(o,"user_settings"))return null;throw o}return n||null}async function p(e,r,n){let o=n?.onlyIfNewer!==!1,a=function(e){if("string"==typeof e){let t=Date.parse(e);if(Number.isFinite(t))return new Date(t).toISOString()}return new Date().toISOString()}(r.changed_at),i=await u(e);if(o&&i?.changed_at){let e=Date.parse(i.changed_at),t=Date.parse(a);if(Number.isFinite(e)&&Number.isFinite(t)&&t<=e)return{settings:i,updated:!1}}let s={user_id:e,default_provider:r.default_provider??i?.default_provider??null,models:r.models??i?.models??{},provenance:r.provenance,changed_at:a},l=t(),{error:d}=await l.from("user_settings").upsert(s,{onConflict:"user_id"});if(d)throw d;let c=await u(e);if(!c)throw Error("Failed to load user_settings after upsert");return{settings:c,updated:!0}}function f(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)||"task"}async function g(e,t){let r=f(e);for(let n=0;n<5;n++){let{data:n,error:o}=await t.from("tasks").select("id").eq("slug",r).limit(1);if(o)throw o;if(!n||0===n.length)return r;let a=Math.random().toString(36).slice(2,6);r=`${f(e)}-${a}`.slice(0,48)}return`${f(e)}-${Date.now().toString(36).slice(-4)}`.slice(0,48)}async function m(e,t,r,n){let o=f(e);for(let a=0;a<5;a++){let a=r.from("projects").select("id").eq("slug",o).eq("user_id",t);n&&(a=a.neq("id",n));let{data:i,error:s}=await a.limit(1);if(s)throw s;if(!i||0===i.length)return o;let l=Math.random().toString(36).slice(2,6);o=`${f(e)}-${l}`.slice(0,48)}return`${f(e)}-${Date.now().toString(36).slice(-4)}`.slice(0,48)}function w(e){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(e=>String(e||"").trim()).filter(Boolean)}catch{}return t.split(",").map(e=>e.trim()).filter(Boolean)}function _(e){let t;if(!e)return[];if(Array.isArray(e))t=e.map(e=>"string"==typeof e?e:null==e?"":String(e)).filter(Boolean);else{if("string"!=typeof e)return[];t=w(e)}return Array.from(new Set(t.map(e=>e.trim()).filter(Boolean)))}function y(e){let t=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!t)return{frontmatter:{},body:e};let r={};for(let e of t[1].split("\n")){let t=e.indexOf(":");if(t>0){let n=e.slice(0,t).trim(),o=e.slice(t+1).trim();if("depends_on"===n){r[n]=w(o);continue}"true"===o?r[n]=!0:"false"===o?r[n]=!1:/^\d+$/.test(o)?r[n]=parseInt(o):r[n]=o}}return{frontmatter:r,body:t[2]}}async function k(e,r,n){if(!e||!r?.length)return;let o=n??t(),a=new Set,i=[...r];for(;i.length;){let t=i.pop();if(!t)continue;if(t===e)throw Error("Circular dependency detected");if(a.has(t))continue;a.add(t);let{data:r,error:n}=await o.from("tasks").select("depends_on").eq("id",t).maybeSingle();if(n){if("PGRST116"===n.code||"42703"===n.code)continue;throw n}if(r)for(let e of Array.isArray(r.depends_on)?r.depends_on:[])e&&!a.has(e)&&i.push(e)}}function h(e){let{body:t}=y(e),r=t.match(/^#\s+(.+)$/m);return r?r[1]:void 0}function S(e){return String(e||"").replace(/^#\s+.+(\r?\n|$)/,"").trim()}async function j(e,n){var o;let a=Array.isArray(e.depends_on)?e.depends_on:[];if(!a.length)return;let i=t(),{data:s,error:l}=await i.from("tasks").select("id, title, slug, status, stage").in("id",a);if(l)return;let d=(Array.isArray(s)?s:[]).filter(e=>"completed"!==(e?.status||""));if(d.length){let t=function(e){if(!e||0===e.length)return"";let t=e.slice(0,3).map(e=>`${e.title?e.title:e.slug?e.slug:e.id?e.id:"(unknown)"}${(e.stage?.toLowerCase()==="intake"?" (awaiting approval)":e.status?` (${e.status})`:null)??""}`),n=`${r}: ${t.join(", ")}`;return e.length>3&&(n+=` +${e.length-3} more`),n}(d),o=i.from("tasks").update({status:"blocked",blocked_reason:t}).eq("id",e.id);n&&(o=o.eq("user_id",n));let{error:a}=await o;if(a&&"42703"!==a.code)throw a;return}if("blocked"===e.status&&"string"==typeof(o=e.blocked_reason)&&o.startsWith(r)){let t=i.from("tasks").update({status:"queued",blocked_reason:null}).eq("id",e.id);n&&(t=t.eq("user_id",n));let{error:r}=await t;if(r&&"42703"!==r.code)throw r}}async function T(e,r){console.log("getTasks called with userId:",e);let n=t().from("tasks").select("*").order("priority",{ascending:!0,nullsFirst:!1}).order("created_at",{ascending:!1});if(e&&(n=n.eq("user_id",e)),r?.project&&(n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(r.project)?n.eq("project_id",r.project):n.eq("project",r.project)),r?.orphan&&(n=n.is("project_id",null)),r?.status&&(n=n.eq("status",r.status)),r?.search){let e=r.search;n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)?n.or(`id.eq.${e},slug.ilike.%${e}%,title.ilike.%${e}%`):n.or(`id.ilike.%${e}%,slug.ilike.%${e}%,title.ilike.%${e}%`)}let{data:o,error:a}=await n;if(a)throw a;let i=o||[];return r?.orphan?i.filter(e=>{let t=String(e.project||"").trim().toLowerCase();return!t||"none"===t}):i}async function v(e,r){let n=t().from("tasks").select("*").eq("id",e);r&&(n=n.eq("user_id",r));let{data:o,error:a}=await n.single();if(a){if("PGRST116"===a.code)return null;throw a}return o}async function b(e,r){let n=t().from("tasks").select("*").eq("slug",e);r&&(n=n.eq("user_id",r));let{data:o,error:a}=await n.single();if(a){if("PGRST116"===a.code)return null;throw a}return o}async function I(e,r,n){let o=t(),{frontmatter:a,body:i}=y(e),s="boolean"==typeof a.swarm?a.swarm:void 0,c=n?.title||h(e),u=String(a.slug||c||"task"),p=await g(u,o),f=n?.projectId||("string"==typeof a.project_id?a.project_id:void 0),m="string"==typeof a.workflow_id?a.workflow_id:void 0,w="string"==typeof a.project?a.project:void 0;if(!w&&f){let{data:e}=await o.from("projects").select("slug").eq("id",f).single();e?.slug&&(w=e.slug)}/^---\n/.test(e);let T="string"==typeof a.provider?a.provider:null,b="string"==typeof a.model?a.model:null,I="string"==typeof a.engine?a.engine:null,q="ai"===a.created_by?"ai":"user",E=_(a.depends_on),$=_(n?.dependsOn),A=$.length>0?$:E,P={id:(0,d.randomUUID)(),content:e,description:S(i),title:c,slug:p,status:a.status||"queued",stage:a.stage||"intake",project:w||null,...void 0!==f?{project_id:f}:{},...void 0!==m?{workflow_id:m}:{},priority:a.priority,engine:I,provider:T,model:b,swarm:s,swarm_models:n?.swarmModels??null,depends_on:A.length?A:null,created_by:q,user_id:r,current_plan:n?.currentPlan||null,open_blockers:n?.openBlockers||[],next_action:n?.nextAction||null,version:1};await k(P.id,A,o);let{data:x,error:N}=await o.from("tasks").insert(P).select().single();if(N&&"42703"===N.code){let{swarm_models:e,swarm:t,workflow_id:r,current_plan:n,open_blockers:a,next_action:i,version:s,depends_on:l,...d}=P;({data:x,error:N}=await o.from("tasks").insert(d).select().single())}if(N)throw N;if(!x)throw Error("Failed to create task");await j(x,r);let C=await v(x.id,r)||x,O=r||C.user_id;if(O){let e=C.created_at||new Date().toISOString(),t={dependsOn:Array.isArray(C.depends_on)?C.depends_on:[],project:C.project||null,projectId:C.project_id||null,workflowId:C.workflow_id||null,createdBy:C.created_by||null};l({taskId:C.id,userId:O,eventType:"task.created",title:C.title||null,slug:C.slug||null,stage:C.stage||null,status:C.status||null,timestamp:e,details:t})}return C}async function q(e,r,n,o){let a=t(),{frontmatter:i,body:s}=y(r),d="boolean"==typeof i.swarm?i.swarm:void 0,c=h(r),u="string"==typeof i.project_id?i.project_id:void 0,p=Object.prototype.hasOwnProperty.call(i,"provider"),f=Object.prototype.hasOwnProperty.call(i,"model"),g=Object.prototype.hasOwnProperty.call(i,"workflow_id"),m=Object.prototype.hasOwnProperty.call(i,"depends_on"),w=_(i.depends_on),T=_(o?.dependsOn),b=o?.dependsOn!==void 0||m,I=o?.dependsOn!==void 0?T:w,q={content:r,description:S(s),title:c,status:i.status,stage:i.stage,project:i.project,...void 0!==u?{project_id:u}:{},workflow_id:g?i.workflow_id:void 0,priority:i.priority,engine:i.engine,provider:p?i.provider:null,model:f?i.model:null,swarm:d,swarm_models:o?.swarmModels??void 0,...b?{depends_on:I.length?I:null}:{},updated_at:new Date().toISOString(),current_plan:o?.currentPlan??void 0,open_blockers:o?.openBlockers??void 0,next_action:o?.nextAction??void 0};Object.keys(q).forEach(e=>{void 0===q[e]&&delete q[e]}),b&&await k(e,I,a);let E=a.from("tasks").update({...q,version:a.rpc("increment_version")}).eq("id",e);n&&(E=E.eq("user_id",n)),o?.expectedVersion!==void 0&&(E=E.eq("version",o.expectedVersion));let{data:$,error:A}=await a.from("tasks").update({...q}).eq("id",e).select().maybeSingle();if(A&&console.error(`[db.updateTask] error updating task ${e}:`,A),$||A||console.warn(`[db.updateTask] UPDATE returned 0 rows for task ${e}, payload keys:`,Object.keys(q)),A&&"42703"===A.code){let{swarm_models:t,swarm:r,workflow_id:o,current_plan:i,open_blockers:s,next_action:l,version:d,depends_on:c,...u}=q,p=a.from("tasks").update(u).eq("id",e);n&&(p=p.eq("user_id",n)),{data:$,error:A}=await p.select().maybeSingle()}if(A)throw A;if(!$){let t=await v(e,n);if(!t)throw Error(`Task ${e} not found`);return t}await j($,n);let P=await v($.id,n)||$,x=n||P.user_id;if(x){let e=P.created_at||new Date().toISOString(),t={dependsOn:Array.isArray(P.depends_on)?P.depends_on:[],project:P.project||null,projectId:P.project_id||null,workflowId:P.workflow_id||null,createdBy:P.created_by||null};l({taskId:P.id,userId:x,eventType:"task.created",title:P.title||null,slug:P.slug||null,stage:P.stage||null,status:P.status||null,timestamp:e,details:t})}return P}async function E(e,r,n=25){let o=t(),{data:a,error:i}=await o.from("tasks").select("run_index").eq("id",e).single();if(i){if(i?.code==="42703")return;throw i}let s=[r,...Array.isArray(a.run_index)?a.run_index:[]].slice(0,n),{error:l}=await o.from("tasks").update({run_index:s}).eq("id",e);if(l){if(l?.code==="42703")return;throw l}}async function $(e,r){let n=t().from("tasks").delete().eq("id",e);r&&(n=n.eq("user_id",r));let{error:o}=await n;if(o)throw o}async function A(e){let r=t().from("tasks").select("*").eq("status","queued").order("priority",{ascending:!0,nullsFirst:!1}).order("created_at",{ascending:!0}).limit(1);e&&(r=r.eq("engine",e));let{data:n,error:o}=await r.single();if(o){if("PGRST116"===o.code)return null;throw o}return n}async function P(e){let r=t().from("projects").select("*, project_repos(*)");e&&(r=r.eq("user_id",e));let{data:n,error:o}=await r;if(o){if(c(o,"projects"))return[];throw o}return(n||[]).map(e=>({...e,repos:e.project_repos??[]}))}async function x(e,r){let n=t().from("projects").select("*").eq("slug",e);r&&(n=n.eq("user_id",r));let{data:o,error:a}=await n.maybeSingle();if(a){if(c(a,"projects"))return null;throw a}return o||null}async function N(e){let r=t(),{data:n,error:o}=await r.from("project_repos").select("*").eq("project_id",e);if(o){if(c(o,"project_repos"))return[];throw o}return n||[]}let C=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function O(e,r){let n=t(),o=C.test(e),a=n.from("projects").select("*");a=o?a.eq("id",e):a.eq("slug",e),r&&(a=a.eq("user_id",r));let i=await a.maybeSingle();if(i.error){if(c(i.error,"projects"))return null;throw i.error}let s=i.data;if(!s)return null;let l=await N(s.id);return{...s,repos:l}}async function L(e,t,r){if(!t.length)return[];let n=t.map(t=>({...t.id?{id:t.id}:{},project_id:e,name:t.name,path:t.path??null,git_url:t.git_url??null,notes:t.notes??null})),{data:o,error:a}=await r.from("project_repos").insert(n).select("*");if(a){if(c(a,"project_repos"))return[];throw a}return o||[]}async function R(e,r,n){if(!r.name?.trim())throw Error("Project name is required");let o=n??t(),a=r.name.trim()||"project",i=await m(a,e,o),s={user_id:e,name:r.name.trim(),slug:i,description:r.description??null,workflow_id:r.workflow_id??null},{data:l,error:d}=await o.from("projects").insert(s).select("*").single();if(d)throw d;let c=await L(l.id,r.repos??[],o);return{...l,repos:c}}async function D(e,r,n,o){let a=o??t(),i=C.test(e),s=e;if(!i){let t=await x(e,r);if(!t)return null;s=t.id}let l={};if(void 0!==n.name){let e=n.name?.trim();if(!e)throw Error("Project name cannot be empty");l.name=e}if(void 0!==n.slug){let e=n.slug?.trim();e&&(l.slug=e)}if(void 0!==n.description&&(l.description=n.description),void 0!==n.metadata&&(l.metadata=n.metadata),void 0!==n.ci_cd_info&&(l.ci_cd_info=n.ci_cd_info),void 0!==n.workflow_id&&(l.workflow_id=n.workflow_id),Object.keys(l).length){let{error:e}=await a.from("projects").update(l).eq("id",s).eq("user_id",r);if(e)throw e}if(n.repos){let{data:e,error:t}=await a.from("project_repos").select("*").eq("project_id",s);if(t&&!c(t,"project_repos"))throw t;let r=e||[],o=new Set(r.map(e=>e.id)),i=new Set(n.repos.map(e=>e.id).filter(e=>!!e));for(let e of r){if(i.has(e.id))continue;let{error:t}=await a.from("project_repos").delete().eq("id",e.id).eq("project_id",s);if(t&&!c(t,"project_repos"))throw t}for(let e of n.repos){let t={name:e.name,path:e.path??null,git_url:e.git_url??null,notes:e.notes??null,project_id:s};if(e.id&&o.has(e.id)){let{error:r}=await a.from("project_repos").update(t).eq("id",e.id).eq("project_id",s);if(r&&!c(r,"project_repos"))throw r;continue}let{error:r}=await a.from("project_repos").insert({...e.id?{id:e.id}:{},...t});if(r&&!c(r,"project_repos"))throw r}}return O(s,r)}async function W(e,r,n){let o=n??t(),{error:a}=await o.from("projects").delete().eq("id",e).eq("user_id",r);if(a)throw a}async function M(e,r,n){let o=n??t(),{data:a,error:i}=await o.from("projects").select("id, slug").eq("id",e).eq("user_id",r).maybeSingle();if(i)throw i;if(!a)throw Error("Project not found");let{data:s,error:l}=await o.from("tasks").select("id, project").eq("user_id",r).is("project_id",null);if(l)throw l;let d=String(a.slug||"").trim().toLowerCase(),c=(s||[]).filter(e=>{let t=String(e.project||"").trim().toLowerCase();return!t||"none"===t||t===d}).map(e=>e.id);if(!c.length)return{updatedCount:0,taskIds:[]};let{error:u}=await o.from("tasks").update({project:a.slug,project_id:a.id,updated_at:new Date().toISOString()}).eq("user_id",r).is("project_id",null).in("id",c);if(u)throw u;return{updatedCount:c.length,taskIds:c}}let U="00000000-0000-0000-0000-000000000001",B=[{id:"00000000-0000-0000-0001-000000000001",name:"INTAKE",label:"Intake",prompt:"New task. Triage, scope, and prepare for work.",position:0,node_type:"step"},{id:"00000000-0000-0000-0001-000000000002",name:"PROGRESS",label:"Progress",prompt:"Task is actively being worked on.",position:1,node_type:"step"},{id:"00000000-0000-0000-0001-000000000003",name:"DONE",label:"Done",prompt:"Task completed.",position:2,node_type:"terminal"}],F=new Map(B.map(e=>[e.id,e]));async function Q(e){let r=t(),{error:n}=await r.from("workflows").upsert({id:U,user_id:e||"00000000-0000-0000-0000-000000000000",name:"Default Workflow",definition:{}},{onConflict:"id"});if(n)throw n;let{error:o}=await r.from("workflow_nodes").upsert(B.map(e=>({...e,workflow_id:U,metadata:{}})),{onConflict:"id"});if(o)throw o;let{error:a}=await r.from("workflow_transitions").upsert([{workflow_id:U,from_node_id:"00000000-0000-0000-0001-000000000001",to_node_id:"00000000-0000-0000-0001-000000000002",condition:"done",priority:0,metadata:{}},{workflow_id:U,from_node_id:"00000000-0000-0000-0001-000000000002",to_node_id:"00000000-0000-0000-0001-000000000003",condition:"done",priority:0,metadata:{}}],{onConflict:"workflow_id,from_node_id,condition"});if(a)throw a}async function G(e){let r=t(),{data:n,error:o}=await r.from("workflows").select("*").or(`user_id.eq.${e},user_id.eq.00000000-0000-0000-0000-000000000000`).order("created_at",{ascending:!1});if(o){if(c(o,"workflows"))return[];throw o}return n||[]}async function V(e,r){let n=t().from("workflows").select("*").eq("id",e),{data:o,error:a}=await n.maybeSingle();if(a){if(c(a,"workflows"))return null;throw a}return o}async function J(e,r,n){let o=t(),a={updated_at:new Date().toISOString()};void 0!==n.definition&&(a.definition=n.definition),void 0!==n.name&&(a.name=n.name),void 0!==n.description&&(a.description=n.description);let{data:i,error:s}=await o.from("workflows").update(a).eq("id",e).select().single();if(s)throw s;return i}async function Y(e){let r=t(),{data:n,error:o}=await r.from("workflow_nodes").select("*").eq("workflow_id",e).order("position",{ascending:!0});if(o){if(c(o,"workflow_nodes"))return[];throw o}return n||[]}async function H(e,r,n){let o=t();if(e===U&&await Q(r),!await V(e,r))throw Error("Workflow not found");if(e===U){let t=n.map(t=>{let r=F.get(t.id);return r?{id:t.id,workflow_id:e,name:r.name,label:r.label,position:r.position,node_type:r.node_type,prompt:t.prompt??r.prompt,provider:t.provider??null,model:t.model??null,metadata:t.metadata??{}}:null}).filter(e=>!!e);if(t.length>0){let{error:e}=await o.from("workflow_nodes").upsert(t,{onConflict:"id"});if(e)throw e}return Y(e)}return await Promise.all(n.map(async t=>{let r={};if(void 0!==t.prompt&&(r.prompt=t.prompt),void 0!==t.provider&&(r.provider=t.provider),void 0!==t.model&&(r.model=t.model),void 0!==t.metadata&&(r.metadata=t.metadata),0===Object.keys(r).length)return;let{error:n}=await o.from("workflow_nodes").update(r).eq("workflow_id",e).eq("id",t.id);if(n)throw n})),Y(e)}async function K(e,r){let n=t(),{data:o,error:a}=await n.from("workflow_nodes").select("*").eq("workflow_id",e).eq("name",r).maybeSingle();if(a){if(c(a,"workflow_nodes"))return null;throw a}return o}async function z(e){let r=t(),{data:n,error:o}=await r.from("workflow_transitions").select("*").eq("workflow_id",e).order("priority",{ascending:!0});if(o){if(c(o,"workflow_transitions"))return[];throw o}return n||[]}async function X(e,r){let n=t(),{data:o,error:a}=await n.from("workflow_transitions").select("*").eq("workflow_id",e).eq("from_node_id",r).order("priority",{ascending:!0});if(a){if(c(a,"workflow_transitions"))return[];throw a}return o||[]}async function Z(e,t){let r=await V(e,t);if(!r)return null;let[n,o]=await Promise.all([Y(e),z(e)]);return{...r,nodes:n,transitions:o}}async function ee(e,r={}){let n=t(),o=Math.max(1,Math.min(2e3,Number(r.limit??r.tail??500))),a="string"==typeof r.after&&r.after.trim()?r.after.trim():null,i=a?null:void 0===r.tail?o:Number(r.tail),s=null!==i&&Number.isFinite(i)&&i>0,l=n.from("task_logs").select("*").eq("task_id",e);r.nodeId&&(l=l.eq("node_id",r.nodeId)),l=a?l.gt("created_at",a).order("created_at",{ascending:!0}).order("id",{ascending:!0}).limit(o):s?l.order("created_at",{ascending:!1}).order("id",{ascending:!1}).limit(o):l.order("created_at",{ascending:!0}).order("id",{ascending:!0}).limit(o);let{data:d,error:c}=await l;if(c)throw c;let u=d||[];return a?u:s?u.slice().reverse():u}async function et(e,r,n,o){let a=t(),{data:i,error:s}=await a.from("task_logs").insert({task_id:e,content:r,log_type:n,...o?{node_id:o}:{}}).select().single();if(s)throw s;return i}function er(e){let t=Number(e??0);return Number.isFinite(t)?Math.max(0,Math.round(t)):0}function en(e){let t=Number(e??0);return Number.isFinite(t)?Math.max(0,t):0}async function eo(e){let r=t(),n={task_id:e.taskId,stage:e.stage,provider:e.provider??null,model:e.model??null,input_tokens:er(e.inputTokens),output_tokens:er(e.outputTokens),estimated_cost:en(e.estimatedCost)},{data:o,error:a}=await r.from("task_costs").insert(n).select().single();if(a)throw a;return o}async function ea(e){let r=t(),{data:n,error:o}=await r.from("task_costs").select("*").eq("task_id",e).order("created_at",{ascending:!0});if(o)throw o;return n||[]}async function ei(e){return function(e){let t={},r=0,n=0,o=0;for(let a of e){let e=a.stage||"unknown",i=er(a.input_tokens),s=er(a.output_tokens),l=en(a.estimated_cost??0);r+=i,n+=s,o+=l;let d=t[e]||{stage:e,input_tokens:0,output_tokens:0,estimated_cost:0,entries:0};d.input_tokens+=i,d.output_tokens+=s,d.estimated_cost+=l,d.entries+=1,t[e]=d}return{total_input_tokens:r,total_output_tokens:n,total_cost:o,per_stage:Object.values(t).sort((e,t)=>e.stage.localeCompare(t.stage))}}(await ea(e))}async function es(e){let r=t(),{data:n,error:o}=await r.from("task_comments").select("*").eq("task_id",e).is("deleted_at",null).order("created_at",{ascending:!0}).order("id",{ascending:!0});if(o)throw o;return n||[]}async function el(e,r,n,o){let a=t(),{data:i,error:s}=await a.from("task_comments").insert({task_id:e,content:r,author_type:n,author_id:o??null}).select().single();if(s)throw s;return i}async function ed(e,r){let n=t(),{data:o,error:a}=await n.from("task_comments").select("author_id, author_type").eq("id",e).single();if(a)throw a;if(!o)throw Error("Comment not found");if("user"!==o.author_type||o.author_id!==r)throw Error("Unauthorized");let{error:i}=await n.from("task_comments").update({deleted_at:new Date().toISOString()}).eq("id",e).is("deleted_at",null);if(i)throw i}async function ec(e,r,n){let o=t().from("learnings").select("*").eq("scope",e).order("created_at",{ascending:!1});r&&(o=o.eq("scope_id",r)),n&&(o=o.eq("user_id",n));let{data:a,error:i}=await o;if(i)throw i;return a||[]}async function eu(e,r,n,o){let a=t(),{data:i,error:s}=await a.from("learnings").insert({scope:e,scope_id:n,content:r,user_id:o}).select().single();if(s)throw s;return i}async function ep(e,r){let n=t().from("learnings").delete().eq("id",e);r&&(n=n.eq("user_id",r));let{error:o}=await n;if(o)throw o}async function ef(e,r){let n=t().from("stage_prompts").select("*").eq("workflow_id",r).order("stage",{ascending:!0});n=e?n.or(`user_id.eq.${e},is_default.eq.true`):n.eq("is_default",!0);let{data:o,error:a}=await n;if(a)throw a;return o||[]}async function eg(e,r,n){let o=t();if(r){let{data:t}=await o.from("stage_prompts").select("*").eq("workflow_id",n).eq("stage",e).eq("user_id",r).single();if(t)return t}let{data:a}=await o.from("stage_prompts").select("*").eq("workflow_id",n).eq("stage",e).eq("is_default",!0).single();return a||null}async function em(e,r,n=[],o,a,i){let s=t(),l={stage:e,prompt:r,outputs:n,user_id:o,is_default:!o,workflow_id:i};a&&(void 0!==a.swarm&&(l.swarm=a.swarm),void 0!==a.provider&&(l.provider=a.provider),void 0!==a.model&&(l.model=a.model),void 0!==a.swarm_models&&(l.swarm_models=a.swarm_models));let{data:d,error:c}=await s.from("stage_prompts").upsert(l,{onConflict:o?"workflow_id,stage,user_id":"workflow_id,stage,is_default"}).select().single();if(c)throw c;return d}async function ew(e,r){let n=t().from("stage_prompts").delete().eq("id",e);r&&(n=n.eq("user_id",r));let{error:o}=await n;if(o)throw o}async function e_(e){let r=t(),{data:n,error:o}=await r.from("agents").select("*").eq("user_id",e).order("created_at",{ascending:!1});if(o){if(c(o,"agents"))return[];throw o}return n||[]}async function ey(e,r){let n=t(),{data:o,error:a}=await n.from("agents").select("*").eq("id",e).eq("user_id",r).maybeSingle();if(a){if("PGRST116"===a.code||c(a,"agents"))return null;throw a}return o}async function ek(e,r){let n=t(),o={user_id:e,name:r.name,style:r.style,description:r.description??null};void 0!==r.id&&(o.id=r.id),void 0!==r.title&&(o.title=r.title),void 0!==r.voice&&(o.voice=r.voice),void 0!==r.seed&&(o.seed=r.seed),void 0!==r.model&&(o.model=r.model),void 0!==r.provider&&(o.provider=r.provider),void 0!==r.color&&(o.color=r.color);let{data:a,error:i}=await n.from("agents").insert(o).select().single();if(i){if(c(i,"agents"))throw Error("Agents table does not exist");throw i}return a}async function eh(e,r,n){let o=t(),a={updated_at:new Date().toISOString()};if(void 0!==n.name&&(a.name=n.name),void 0!==n.title&&(a.title=n.title),void 0!==n.style&&(a.style=n.style),void 0!==n.description&&(a.description=n.description),void 0!==n.voice&&(a.voice=n.voice),void 0!==n.seed&&(a.seed=n.seed),void 0!==n.model&&(a.model=n.model),void 0!==n.provider&&(a.provider=n.provider),void 0!==n.color&&(a.color=n.color),1===Object.keys(a).length)return ey(e,r);let{data:i,error:s}=await o.from("agents").update(a).eq("id",e).eq("user_id",r).select().single();if(s){if("PGRST116"===s.code||c(s,"agents"))return null;throw s}return i}async function eS(e,r){let n=t(),{error:o}=await n.from("agents").delete().eq("id",e).eq("user_id",r);if(o&&!c(o,"agents"))throw o}async function ej(e){let r=t(),{data:n,error:o}=await r.from("project_agents").select("*").eq("project_id",e).order("routing_order",{ascending:!0});if(o){if(c(o,"project_agents"))return[];throw o}return n||[]}async function eT(e,r,n){let o=t();if(void 0===n){let{data:t}=await o.from("project_agents").select("routing_order").eq("project_id",e).order("routing_order",{ascending:!1}).limit(1);n=(t?.[0]?.routing_order??-1)+1}let{data:a,error:i}=await o.from("project_agents").upsert({project_id:e,agent_id:r,routing_order:n}).select().single();if(i)throw i;return a}async function ev(e,r){let n=t(),{error:o}=await n.from("project_agents").delete().eq("project_id",e).eq("agent_id",r);if(o)throw o}async function eb(e,r){let n=t();for(let t=0;t<r.length;t++)await n.from("project_agents").update({routing_order:t}).eq("project_id",e).eq("agent_id",r[t]);return ej(e)}async function eI(e){let r=t(),{data:n,error:o}=await r.from("project_skills").select("*").eq("project_id",e).order("created_at",{ascending:!0});if(o){if(c(o,"project_skills"))return[];throw o}return n||[]}async function eq(e,r,n){let o=t(),{data:a,error:i}=await o.from("project_skills").insert({project_id:e,file:r,condition:n??null}).select().single();if(i)throw i;return a}async function eE(e){let r=t(),{error:n}=await r.from("project_skills").delete().eq("id",e);if(n)throw n}async function e$(e){let r=t(),{data:n,error:o}=await r.from("project_variables").select("*").eq("project_id",e);if(o){if(c(o,"project_variables"))return[];throw o}return n||[]}async function eA(e,r,n){let o=t(),{data:a,error:i}=await o.from("project_variables").upsert({project_id:e,key:r,value:n}).select().single();if(i)throw i;return a}async function eP(e,r){let n=t(),{error:o}=await n.from("project_variables").delete().eq("project_id",e).eq("key",r);if(o)throw o}async function ex(e,r){let n=t().from("project_memory").select("*").eq("project_id",e).order("created_at",{ascending:!1});r&&(n=n.eq("producer",r));let{data:o,error:a}=await n;if(a){if(c(a,"project_memory"))return[];throw a}return o||[]}async function eN(e,r,n,o="human"){let a=t(),{data:i,error:s}=await a.from("project_memory").insert({project_id:e,content:r,source:n??null,producer:o}).select().single();if(s)throw s;return i}async function eC(e){let r=t(),{error:n}=await r.from("project_memory").delete().eq("id",e);if(n)throw n}async function eO(e){let r=t(),{data:n,error:o}=await r.from("project_threads").select("*").eq("project_id",e).order("created_at",{ascending:!0});if(o){if(c(o,"project_threads"))return[];throw o}return n||[]}async function eL(e,r){let n=t(),{data:o,error:a}=await n.from("project_threads").insert({project_id:e,thread_id:r}).select().single();if(a)throw a;return o}async function eR(e,r){let n=t(),{error:o}=await n.from("project_threads").delete().eq("project_id",e).eq("thread_id",r);if(o)throw o}async function eD(e){let r=t(),{data:n,error:o}=await r.from("project_threads").select("project_id").eq("thread_id",e).maybeSingle();return o?(c(o,"project_threads"),null):n?.project_id??null}e.s(["addLearning",()=>eu,"addProjectAgent",()=>eT,"addProjectMemory",()=>eN,"addProjectSkill",()=>eq,"addProjectThread",()=>eL,"addTaskComment",()=>el,"addTaskCostEntry",()=>eo,"addTaskLog",()=>et,"appendRunToIndex",()=>E,"assignOrphanTasksToProject",()=>M,"createAgent",()=>ek,"createProject",()=>R,"createTask",()=>I,"deleteAgent",()=>eS,"deleteLearning",()=>ep,"deleteProject",()=>W,"deleteProjectMemory",()=>eC,"deleteProjectVariable",()=>eP,"deleteStagePrompt",()=>ew,"deleteTask",()=>$,"deleteTaskComment",()=>ed,"ensureNoCircularDependency",()=>k,"getAgent",()=>ey,"getAgents",()=>e_,"getLearnings",()=>ec,"getNextQueuedTask",()=>A,"getProjectAgents",()=>ej,"getProjectBySlug",()=>x,"getProjectForThread",()=>eD,"getProjectMemory",()=>ex,"getProjectRepos",()=>N,"getProjectSkills",()=>eI,"getProjectThreads",()=>eO,"getProjectVariables",()=>e$,"getProjectWithRepos",()=>O,"getProjects",()=>P,"getStagePrompt",()=>eg,"getStagePrompts",()=>ef,"getTask",()=>v,"getTaskBySlug",()=>b,"getTaskComments",()=>es,"getTaskCostEntries",()=>ea,"getTaskCostSummary",()=>ei,"getTaskLogs",()=>ee,"getTasks",()=>T,"getUserSettings",()=>u,"getWorkflow",()=>V,"getWorkflowNodeByName",()=>K,"getWorkflowNodes",()=>Y,"getWorkflowTransitions",()=>z,"getWorkflowTransitionsFromNode",()=>X,"getWorkflowWithGraph",()=>Z,"getWorkflows",()=>G,"parseFrontmatter",()=>y,"removeProjectAgent",()=>ev,"removeProjectSkill",()=>eE,"removeProjectThread",()=>eR,"reorderProjectAgents",()=>eb,"setProjectVariable",()=>eA,"updateAgent",()=>eh,"updateProject",()=>D,"updateTask",()=>q,"updateWorkflow",()=>J,"updateWorkflowNodes",()=>H,"upsertStagePrompt",()=>em,"upsertUserSettings",()=>p],99904)},87575,e=>{"use strict";var t=e.i(99904),r=e.i(65196);class n extends Error{constraint;detail;constructor(e,t){super(e),this.name="ConflictError",this.constraint=t?.constraint,this.detail=t?.detail}}class o extends Error{code;constructor(e,t){super(e),this.name="RetryableError",this.code=t}}class a extends Error{expectedVersion;actualVersion;entityId;entityType;constructor(e,t,r,n){super(void 0!==n?`Concurrent modification on ${e} ${t}: expected version ${r}, found ${n}`:`Concurrent modification on ${e} ${t}: expected version ${r}, row not updated`),this.name="ConcurrentModificationError",this.entityType=e,this.entityId=t,this.expectedVersion=r,this.actualVersion=n}}function i(e){if(!(e instanceof Error))throw e;let t=e.code??"",r=e.message??"";if("SQLITE_CONSTRAINT_UNIQUE"===t||"SQLITE_CONSTRAINT_PRIMARYKEY"===t||"SQLITE_CONSTRAINT"===t&&(r.includes("UNIQUE")||r.includes("PRIMARY KEY"))||r.includes("UNIQUE constraint failed")||r.includes("PRIMARY KEY constraint failed")){let e=r.match(/(?:UNIQUE|PRIMARY KEY) constraint failed: (.+)/);throw new n(r,{constraint:e?.[1],detail:r})}if("SQLITE_BUSY"===t||"SQLITE_LOCKED"===t||r.includes("database is locked"))throw new o(r,t||"SQLITE_BUSY");throw e}async function s(e){try{return await e()}catch(e){if(e instanceof n||e instanceof o||e instanceof a)throw e;i(e)}}class l{async transaction(e){let t=(0,r.getSQLiteDb)();t.exec("BEGIN IMMEDIATE");try{let r=await e(t);return t.exec("COMMIT"),r}catch(e){try{t.exec("ROLLBACK")}catch{}if(e instanceof n||e instanceof o||e instanceof a)throw e;i(e)}}getTasks(e,r){return t.getTasks(e,r)}getTask(e,r){return t.getTask(e,r)}getTaskBySlug(e,r){return t.getTaskBySlug(e,r)}createTask(e,r,n){return s(()=>t.createTask(e,r,n))}async updateTask(e,n,o,i){let l=i?.expectedVersion;if(void 0!==l){let d=(0,r.getSQLiteDb)();if(0===d.prepare("UPDATE tasks SET version = version + 1 WHERE id = ? AND version = ?").run(e,l).changes){let t=d.prepare("SELECT version FROM tasks WHERE id = ?").get(e);throw new a("task",e,l,t?.version)}let{expectedVersion:c,...u}=i??{};return s(()=>t.updateTask(e,n,o,u))}return(0,r.getSQLiteDb)().prepare("UPDATE tasks SET version = version + 1 WHERE id = ?").run(e),s(()=>t.updateTask(e,n,o,i))}appendRunToIndex(e,r,n){return t.appendRunToIndex(e,r,n)}deleteTask(e,r){return s(()=>t.deleteTask(e,r))}getNextQueuedTask(e){return t.getNextQueuedTask(e)}ensureNoCircularDependency(e,r,n){return t.ensureNoCircularDependency(e,r,n)}getProjects(e){return t.getProjects(e)}getProjectBySlug(e,r){return t.getProjectBySlug(e,r)}getProjectRepos(e){return t.getProjectRepos(e)}getProjectWithRepos(e,r){return t.getProjectWithRepos(e,r)}createProject(e,r,n){return s(()=>t.createProject(e,r,n))}updateProject(e,r,n,o){return t.updateProject(e,r,n,o)}deleteProject(e,r,n){return s(()=>t.deleteProject(e,r,n))}assignOrphanTasksToProject(e,r,n){return t.assignOrphanTasksToProject(e,r,n)}getWorkflows(e){return t.getWorkflows(e)}getWorkflow(e,r){return t.getWorkflow(e,r)}updateWorkflow(e,r,n){return t.updateWorkflow(e,r,n)}getWorkflowNodes(e){return t.getWorkflowNodes(e)}updateWorkflowNodes(e,r,n){return t.updateWorkflowNodes(e,r,n)}getWorkflowNodeByName(e,r){return t.getWorkflowNodeByName(e,r)}getWorkflowTransitions(e){return t.getWorkflowTransitions(e)}getWorkflowTransitionsFromNode(e,r){return t.getWorkflowTransitionsFromNode(e,r)}getWorkflowWithGraph(e,r){return t.getWorkflowWithGraph(e,r)}getTaskLogs(e,r){return t.getTaskLogs(e,r)}addTaskLog(e,r,n,o){return s(()=>t.addTaskLog(e,r,n,o))}addTaskCostEntry(e){return s(()=>t.addTaskCostEntry(e))}getTaskCostEntries(e){return t.getTaskCostEntries(e)}getTaskCostSummary(e){return t.getTaskCostSummary(e)}getTaskComments(e){return t.getTaskComments(e)}addTaskComment(e,r,n,o){return s(()=>t.addTaskComment(e,r,n,o))}deleteTaskComment(e,r){return s(()=>t.deleteTaskComment(e,r))}getLearnings(e,r,n){return t.getLearnings(e,r,n)}addLearning(e,r,n,o){return s(()=>t.addLearning(e,r,n,o))}deleteLearning(e,r){return s(()=>t.deleteLearning(e,r))}getStagePrompts(e,r){return t.getStagePrompts(e,r)}getStagePrompt(e,r,n){return t.getStagePrompt(e,r,n)}upsertStagePrompt(e,r,n,o,a,i){return s(()=>t.upsertStagePrompt(e,r,n,o,a,i))}deleteStagePrompt(e,r){return t.deleteStagePrompt(e,r)}getAgents(e){return t.getAgents(e)}getAgent(e,r){return t.getAgent(e,r)}createAgent(e,r){return s(()=>t.createAgent(e,r))}updateAgent(e,r,n){return t.updateAgent(e,r,n)}deleteAgent(e,r){return t.deleteAgent(e,r)}getProjectAgents(e){return t.getProjectAgents(e)}addProjectAgent(e,r,n){return s(()=>t.addProjectAgent(e,r,n))}removeProjectAgent(e,r){return t.removeProjectAgent(e,r)}reorderProjectAgents(e,r){return t.reorderProjectAgents(e,r)}getProjectSkills(e){return t.getProjectSkills(e)}addProjectSkill(e,r,n){return s(()=>t.addProjectSkill(e,r,n))}removeProjectSkill(e){return t.removeProjectSkill(e)}getProjectVariables(e){return t.getProjectVariables(e)}setProjectVariable(e,r,n){return s(()=>t.setProjectVariable(e,r,n))}deleteProjectVariable(e,r){return t.deleteProjectVariable(e,r)}getProjectMemory(e,r){return t.getProjectMemory(e,r)}addProjectMemory(e,r,n,o){return s(()=>t.addProjectMemory(e,r,n,o))}deleteProjectMemory(e){return t.deleteProjectMemory(e)}getProjectThreads(e){return t.getProjectThreads(e)}addProjectThread(e,r){return s(()=>t.addProjectThread(e,r))}removeProjectThread(e,r){return t.removeProjectThread(e,r)}getProjectForThread(e){return t.getProjectForThread(e)}getUserSettings(e){return t.getUserSettings(e)}upsertUserSettings(e,r,n){return s(()=>t.upsertUserSettings(e,r,n))}async healthCheck(){let e=performance.now();try{return(0,r.getSQLiteDb)().prepare("SELECT 1").get(),{adapter:"sqlite",connected:!0,latencyMs:Math.round(performance.now()-e)}}catch{return{adapter:"sqlite",connected:!1,latencyMs:Math.round(performance.now()-e)}}}}e.s(["SQLiteAdapter",()=>l],87575)},69324,e=>{"use strict";let t=function(){let{SQLiteAdapter:t}=e.r(87575);return new t}();var r=e.i(99904);let n=[["INTAKE","PROGRESS","DONE"]];async function o({workflowId:e,currentNodeName:t,decision:n,retryCount:o,maxRetries:a=3}){if("done"===String(t).trim().toLowerCase())return{nextNodeName:"done",nextStatus:"completed",retryCount:0,error:null,appendLog:{content:"Task completed at done",logType:"checkpoint"},nodeConfig:null};let i=await (0,r.getWorkflowNodeByName)(e,t);if(!i)return{nextNodeName:t,nextStatus:"blocked",retryCount:o,error:`Node '${t}' not found in workflow`,appendLog:{content:`Workflow error: node '${t}' not found`,logType:"error"},nodeConfig:null};if("terminal"===i.node_type)return{nextNodeName:t,nextStatus:"completed",retryCount:0,error:null,appendLog:{content:`Task completed at ${i.label||t}`,logType:"checkpoint"},nodeConfig:i};if("blocked"===n)return{nextNodeName:t,nextStatus:"blocked",retryCount:o,error:null,appendLog:{content:"Blocked: additional input required.",logType:"system"},nodeConfig:i};let s=await (0,r.getWorkflowTransitionsFromNode)(e,i.id),l=function(e){switch(e){case"done":default:return"done";case"blocked":return"blocked";case"failed":case"not_done":return"failed"}}(n),d=s.find(e=>e.condition===l);if(d){let o=(await (0,r.getWorkflowNodes)(e)).find(e=>e.id===d.to_node_id);if(o){let e="terminal"===o.node_type;return{nextNodeName:o.name,nextStatus:e?"completed":"queued",retryCount:0,error:null,appendLog:{content:"done"===n?`Stage completed: ${i.label||t}`:`Transition to ${o.label||o.name}`,logType:"done"===n?"checkpoint":"system"},nodeConfig:o}}}if("done"===n)return{nextNodeName:t,nextStatus:"completed",retryCount:0,error:null,appendLog:{content:`Task completed at ${i.label||t}`,logType:"checkpoint"},nodeConfig:i};let c=o+1;return c<=a?{nextNodeName:t,nextStatus:"queued",retryCount:c,error:null,appendLog:{content:`Retrying (${c}/${a}) for ${i.label||t}`,logType:"system"},nodeConfig:i}:{nextNodeName:t,nextStatus:"failed",retryCount:c,error:"Task failed after max retries.",appendLog:{content:"Task failed after max retries.",logType:"error"},nodeConfig:i}}var a=e.i(54799),i=e.i(90107),s=e.i(65196),l=e.i(42969);function d(e){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.min(1,e)):null}function c(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function u(e){return{id:e.id,scope:e.scope,subjectId:e.subject_id,sourceType:e.source_type,sourceId:e.source_id,kind:e.kind,title:e.title,body:e.body,confidence:d(e.confidence),durability:d(e.durability),tags:c(e.tags),evidence:c(e.evidence),metadata:function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}(e.metadata),createdAt:e.created_at,updatedAt:e.updated_at}}function p(e){return(0,s.getSQLiteDb)().prepare(`SELECT id, scope, subject_id, source_type, source_id, kind, title, body,
2
- confidence, durability, tags, evidence, metadata, created_at, updated_at
3
- FROM knowledge_entries
4
- WHERE scope = ? AND subject_id = ?
5
- ORDER BY updated_at DESC, created_at DESC
6
- LIMIT ?`).all(e.scope,e.subjectId,e.limit??50).map(u)}function f(e){return e.replace(/\r\n/g,"\n").split("\n").map(e=>e.replace(/\s+$/g,"")).join("\n").trim()}function g(e){return{id:e.id,scope:e.scope,subjectId:e.subject_id,content:e.content,changeSummary:e.change_summary??null,sourceType:e.source_type,sourceId:e.source_id,metadata:function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}(e.metadata),version:Number(e.version??1),createdAt:e.created_at,updatedAt:e.updated_at}}function m(e,t){return(0,s.getSQLiteDb)().prepare(`SELECT id, scope, subject_id, content, change_summary, source_type, source_id,
7
- metadata, version, created_at, updated_at
8
- FROM knowledge_notes
9
- WHERE scope = ? AND subject_id = ?
10
- LIMIT 1`).get(e,t)}function w(e,t){let r,n=m(e,t);if(n)return g(n);let o=0===(r=Array.from(new Set(function(e,t){let r=(0,s.getSQLiteDb)();if("repo"===e){let e=r.prepare(`SELECT content
11
- FROM repo_knowledge
12
- WHERE repo_id = ? AND producer = 'system'
13
- ORDER BY created_at ASC`).all(t),n=p({scope:"repo",subjectId:t,limit:100}).map(e=>e.body.trim());return[...e.map(e=>e.content.trim()),...n].filter(Boolean)}if("project"===e){let e=r.prepare(`SELECT content
14
- FROM project_memory
15
- WHERE project_id = ? AND producer = 'system'
16
- ORDER BY created_at ASC`).all(t),n=p({scope:"project",subjectId:t,limit:100}).map(e=>e.body.trim());return[...e.map(e=>e.content.trim()),...n].filter(Boolean)}let n=r.prepare(`SELECT content
17
- FROM agent_memory
18
- WHERE agent_id = ?
19
- ORDER BY created_at ASC
20
- LIMIT 100`).all(t),o=p({scope:"agent",subjectId:t,limit:100}).map(e=>e.body.trim());return[...n.map(e=>e.content.trim()),...o].filter(Boolean)}(e,t)))).length?"":r.map(e=>`- ${e.replace(/^\-\s*/,"")}`).join("\n");if(!o)return null;let i=(0,s.getSQLiteDb)(),l=new Date().toISOString(),d=(0,a.randomUUID)();i.prepare(`INSERT INTO knowledge_notes (
21
- id, scope, subject_id, content, change_summary, source_type, source_id, metadata, version, created_at, updated_at
22
- ) VALUES (?, ?, ?, ?, ?, 'task_completion', 'legacy-synthesis', ?, 1, ?, ?)`).run(d,e,t,o,"Initial note synthesized from existing system knowledge",JSON.stringify({synthesized_from_legacy:!0}),l,l),i.prepare(`INSERT INTO knowledge_note_versions (
23
- id, note_id, version, content, change_summary, source_type, source_id, metadata, created_at
24
- ) VALUES (?, ?, 1, ?, ?, 'task_completion', 'legacy-synthesis', ?, ?)`).run((0,a.randomUUID)(),d,o,"Initial note synthesized from existing system knowledge",JSON.stringify({synthesized_from_legacy:!0}),l);let c=m(e,t);return c?g(c):null}function _(e,t){let r=t.trim();return r?w(e,r):null}let y=new Set(["outcome","decision","pattern","gotcha"]),k=`You are a memory extractor for a task execution system.
25
- Given a completed task, extract 0-3 memories worth remembering for future tasks.
26
-
27
- Each memory must be:
28
- { "memory_type": "outcome" | "decision" | "pattern" | "gotcha", "content": "one concise sentence" }
29
-
30
- - outcome: what happened (success/failure result)
31
- - decision: a choice that was made and why
32
- - pattern: a reusable approach or technique discovered
33
- - gotcha: a surprising pitfall or edge case encountered
34
-
35
- Return ONLY a JSON array. Return [] if nothing worth remembering.
36
- Do not wrap in markdown code blocks. Just raw JSON.`,h=`You are maintaining a living project knowledge note for a task execution system.
37
- Given the current project note and a completed or failed task, decide whether the note should change.
38
-
39
- Return ONLY a JSON object:
40
- {
41
- "updated_note": "full revised note in concise markdown",
42
- "change_summary": "short summary of what changed",
43
- "no_change": false
44
- }
45
-
46
- Rules:
47
- - Revise the current note instead of appending isolated bullets.
48
- - Write like a person's living project notes, not an extracted fact list.
49
- - The note should help someone understand what the project is, what it does, what has been decided, and what lessons now shape future work.
50
- - Prefer short sections and narrative paragraphs in markdown. Bullets are fine only when they genuinely improve clarity.
51
- - Preserve strong existing content when still valid.
52
- - Merge duplicate ideas, sharpen wording, and remove stale or unsupported claims.
53
- - Only include project-scoped knowledge likely useful across future work in the same project.
54
- - Do not include repo-specific durable truths that belong in repo knowledge.
55
- - Avoid generic filler and avoid sounding like an audit log.
56
- - If nothing project-scoped changed, return {"no_change": true}.
57
- - Do not wrap in markdown code blocks. Just raw JSON.`;async function S(e){let t=[`Goal: ${e.goal}`,`Status: ${e.status}`,e.nodeOutputs?`Node outputs: ${JSON.stringify(e.nodeOutputs).slice(0,2e3)}`:null].filter(Boolean).join("\n"),r=`${k}
58
-
59
- Task:
60
- ${t}`,n="";try{await (0,i.runCliResponse)({provider:"claude",model:"claude-haiku-4-5-20251001",prompt:r,onDelta:e=>{n+=e}})}catch(e){return console.warn("[memory-extractor] LLM call failed:",e),[]}var o=n;let a=o.trim().replace(/^```(?:json)?\s*/i,"").replace(/\s*```\s*$/,"").trim();try{let e=JSON.parse(a);if(!Array.isArray(e))return[];return e.filter(e=>"object"==typeof e&&null!==e&&y.has(e.memory_type)&&"string"==typeof e.content&&e.content.trim().length>0).slice(0,3)}catch{return console.warn("[memory-extractor] Failed to parse LLM response:",a.slice(0,200)),[]}}let j=new Set(["outcome","decision","pattern","gotcha"]),T=["agent_id","agentId","agent","participant_id","participantId","assigned_agent","assignedAgent"];function v(e){return"string"!=typeof e?null:e.trim()||null}function b(e){let t=v(e.explicitAgentId);if(t)return t;let r=e.frontmatter||{};for(let e of T){let t=v(r[e]);if(t)return t}return v(e.defaultUserId)||"system"}async function I(e,t,r){let n=(0,s.getSQLiteDb)().prepare(`INSERT OR IGNORE INTO agent_memory (id, agent_id, task_id, memory_type, content, content_hash, created_at)
61
- VALUES (?, ?, ?, ?, ?, ?, ?)`),o=0,i=Date.now();for(let s of r){if(!j.has(s.memory_type)||!s.content?.trim())continue;let r=(0,a.createHash)("sha256").update(s.content.trim()).digest("hex");n.run((0,a.randomUUID)(),t,e,s.memory_type,s.content.trim(),r,i).changes>0&&o++}return o>0&&function(e){if(0===e.length)return;let t=(0,s.getSQLiteDb)(),r=new Date().toISOString(),n=t.prepare(`SELECT id
62
- FROM knowledge_entries
63
- WHERE scope = ? AND subject_id = ? AND content_hash = ?
64
- LIMIT 1`),o=t.prepare(`INSERT INTO knowledge_entries (
65
- id, scope, subject_id, source_type, source_id, kind, title, body,
66
- confidence, durability, tags, evidence, metadata, content_hash, created_at, updated_at
67
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`),i=0;(0,l.transactionFn)(t,e=>{for(let t of e){let e=t.subjectId.trim(),s=t.title.trim(),l=t.body.trim(),c=t.sourceId.trim();if(!e||!s||!l||!c)continue;let u=(0,a.createHash)("sha256").update(`${t.scope}
68
- ${e}
69
- ${l}`).digest("hex");n.get(t.scope,e,u)||(o.run((0,a.randomUUID)(),t.scope,e,t.sourceType,c,t.kind,s,l,d(t.confidence),d(t.durability),JSON.stringify(function(e){let t=new Set,r=[];for(let n of e??[]){let e=String(n??"").trim().toLowerCase();!e||t.has(e)||(t.add(e),r.push(e))}return r}(t.tags)),JSON.stringify(function(e){let t=[];for(let r of e??[]){let e=String(r?.note??"").trim(),n="string"==typeof r?.id?r.id.trim():"";e&&t.push(n?{id:n,note:e}:{note:e})}return t}(t.evidence)),JSON.stringify(t.metadata??{}),u,r,r),i+=1)}})(e)}(r.map(r=>({scope:"agent",subjectId:t,sourceType:"task_completion",sourceId:e,kind:r.memory_type,title:r.content.trim().slice(0,80),body:r.content.trim(),confidence:.7,durability:.6,metadata:{task_id:e}}))),o}async function q(e,t,r){let n=await S(r);if(0===n.length)return;let o=await I(e,t,n);o>0&&console.log(`[memory-extractor] Stored ${o} memories for task ${e}`)}async function E(e){let t=v(e);if(!t)return null;if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t))return t;let r=(0,s.getSQLiteDb)().prepare("SELECT id FROM projects WHERE slug = ? LIMIT 1").get(t);return r?.id??null}async function $(e,t){let r=[`Goal: ${e.goal}`,`Status: ${e.status}`,e.nodeOutputs?`Node outputs: ${JSON.stringify(e.nodeOutputs).slice(0,2e3)}`:null].filter(Boolean).join("\n"),n=`${h}
70
-
71
- Current note:
72
- ${t||"(empty)"}
73
-
74
- Task:
75
- ${r}`,o="";try{await (0,i.runCliResponse)({provider:"claude",model:"claude-haiku-4-5-20251001",prompt:n,onDelta:e=>{o+=e}})}catch(e){return console.warn("[project-knowledge] LLM call failed:",e),[]}let a=o.trim().replace(/^```(?:json)?\s*/i,"").replace(/\s*```\s*$/,"").trim();try{let e=JSON.parse(a);if(!e||"object"!=typeof e||Array.isArray(e))return[];let t="string"==typeof e.updated_note?e.updated_note.trim():"";if(e.no_change||!t)return[];return[{updated_note:t,change_summary:"string"==typeof e.change_summary?e.change_summary.trim():void 0,no_change:!1}]}catch{return console.warn("[project-knowledge] Failed to parse LLM response:",a.slice(0,200)),[]}}async function A(e,t,r){if(0===r.length)return 0;let n=r[0];return n&&n.updated_note?.trim()?+!!function(e){let t=(0,s.getSQLiteDb)(),r=e.subjectId.trim(),n=e.sourceId.trim(),o=f(e.content),i=e.changeSummary?.trim()||null;if(!r||!n)throw Error("subjectId and sourceId are required");let l=w(e.scope,r);if(l&&f(l.content)===o)return{note:l,changed:!1};let d=new Date().toISOString(),c=JSON.stringify(e.metadata??{});if(!l){let s=(0,a.randomUUID)();t.prepare(`INSERT INTO knowledge_notes (
76
- id, scope, subject_id, content, change_summary, source_type, source_id, metadata, version, created_at, updated_at
77
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)`).run(s,e.scope,r,o,i,e.sourceType,n,c,d,d),t.prepare(`INSERT INTO knowledge_note_versions (
78
- id, note_id, version, content, change_summary, source_type, source_id, metadata, created_at
79
- ) VALUES (?, ?, 1, ?, ?, ?, ?, ?, ?)`).run((0,a.randomUUID)(),s,o,i,e.sourceType,n,c,d);let l=_(e.scope,r);if(!l)throw Error("Failed to read created knowledge note");return{note:l,changed:!0}}let u=l.version+1;t.prepare(`UPDATE knowledge_notes
80
- SET content = ?, change_summary = ?, source_type = ?, source_id = ?, metadata = ?, version = ?, updated_at = ?
81
- WHERE id = ?`).run(o,i,e.sourceType,n,c,u,d,l.id),t.prepare(`INSERT INTO knowledge_note_versions (
82
- id, note_id, version, content, change_summary, source_type, source_id, metadata, created_at
83
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run((0,a.randomUUID)(),l.id,u,o,i,e.sourceType,n,c,d);let p=_(e.scope,r);if(!p)throw Error("Failed to read updated knowledge note");return{note:p,changed:!0}}({scope:"project",subjectId:e,content:n.updated_note.trim(),changeSummary:n.change_summary,sourceType:"task_completion",sourceId:t,metadata:{task_id:t}}).changed:0}async function P(e,t,r){let n=await E(t);if(!n)return;let o=await $(r,_("project",n)?.content??"");if(0===o.length)return;let a=await A(n,e,o);a>0&&console.log(`[project-knowledge] Stored ${a} project knowledge entries for task ${e}`)}var x=e.i(45491);function N(e,t){return`---
84
- ${Object.entries(e).map(([e,t])=>`${e}: ${null==t?"":String(t)}`).join("\n")}
85
- ---
86
- ${t}`}var C=e.i(40793),O=e.i(86213);function L(e){if(!e)return[];if(Array.isArray(e))return Array.from(new Set(e.map(e=>String(e||"").trim()).filter(Boolean)));if("string"==typeof e){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return Array.from(new Set(e.map(e=>String(e||"").trim()).filter(Boolean)))}catch{}return Array.from(new Set(t.split(",").map(e=>e.trim()).filter(Boolean)))}return[]}function R(e){if(!e)return[];let t=L(e.depends_on);if(t.length)return t;if("string"==typeof e.content){let{frontmatter:t}=(0,r.parseFrontmatter)(e.content||"");return L(t.depends_on)}return[]}async function D(e,t){if(!e.length)return[];let r=(0,x.createAdminDbClient)().from("tasks").select("id, title, slug, status, stage").in("id",e);t&&(r=r.eq("user_id",t));let{data:n}=await r,o=new Map;if(Array.isArray(n))for(let e of n){var a;e&&e.id&&o.set(e.id,(a=e.id,e?{id:e.id||a||"",title:e.title||void 0,slug:e.slug||void 0,status:e.status,stage:e.stage}:{id:a||""}))}return e.map(e=>o.get(e)).filter(e=>!!e)}async function W(e,t){let r=R(e);return r.length?(await D(r,t)).filter(e=>"completed"!==(e.status||"")):[]}async function M(e,n,o){let a=n||O.LOCAL_USER.id,i=await t.getTask(e,a);if(!i)throw Error(`Task not found: ${e}`);let s=await W(i,a);if(s.length){let t=function(e){if(!e.length)return"";let t=e.slice(0,3).map(e=>{let t=e.title||e.slug||e.id||"(unknown)",r="INTAKE"===e.stage?"awaiting approval":e.status||"",n=r?` (${r})`:"";return`${t}${n}`}),r=`Waiting on dependencies: ${t.join(", ")}`;return e.length>3&&(r+=` +${e.length-3} more`),r}(s),r=(0,x.createAdminDbClient)(),{error:n}=await r.from("tasks").update({status:"blocked",blocked_reason:t,updated_at:new Date().toISOString()}).eq("id",e);if(n&&"42703"!==n.code)throw n;return{started:!1,missingDependencies:s,blockedReason:t}}if(!o?.force&&"queued"===i.status&&!i.blocked_reason)return{started:!1,missingDependencies:[],alreadyQueued:!0};let{frontmatter:l,body:d}=(0,r.parseFrontmatter)(i.content||""),c=o?.ticketType??function(e,t){for(let t of["ticket_type","type","issue_type","kind"])if("spike"===function(e){if("string"!=typeof e)return"task";let t=e.trim().toLowerCase();return"spike"===t||"spikes"===t?"spike":"task"}(e[t]))return"spike";let r=t.match(/^#\s+(.+)$/m),n=r?.[1]?.trim().toLowerCase()||"";return n.startsWith("spike:")||n.startsWith("[spike]")?"spike":"task"}(l,d),u=await (0,C.getQueue)(),p=await u.send(C.QUEUE_NAMES.TASK_PROCESS,{taskId:e,userId:a,signal:"start",ticketType:c}),f=(0,x.createAdminDbClient)(),{error:g}=await f.from("tasks").update({status:"queued",blocked_reason:null,updated_at:new Date().toISOString()}).eq("id",e);if(g&&"42703"!==g.code)throw g;return{started:!!p,jobId:p,missingDependencies:[],ticketType:c}}async function U(e,t){let r=t||O.LOCAL_USER.id,n=(0,x.createAdminDbClient)(),o=n.from("tasks").select("id").contains("depends_on",[e]);t&&(o=o.eq("user_id",t));let{data:a,error:i}=await o,s=Array.isArray(a)?a.map(e=>e?.id).filter(Boolean):[];if(i&&"42703"===i.code){let r=n.from("tasks").select("id, content");t&&(r=r.eq("user_id",t));let{data:o}=await r;s=(Array.isArray(o)?o:[]).filter(t=>R(t).includes(e)).map(e=>e?.id).filter(Boolean)}s.length&&await Promise.all(s.map(e=>M(e,r)))}var B=e.i(29264);async function F(e){let t=(0,x.createAdminDbClient)();await t.from("tasks").update({stage:e.stage,status:"queued",updated_at:new Date().toISOString()}).eq("id",e.taskId).eq("user_id",e.userId)}async function Q(e){let t=(0,x.createAdminDbClient)(),{data:r}=await t.from("tasks").select("stage_decisions").eq("id",e.taskId).eq("user_id",e.userId).maybeSingle(),n={...r?.stage_decisions&&"object"==typeof r.stage_decisions?r.stage_decisions:{},[e.stage]:{decision:e.decision.decision,rationale:e.decision.explanation,final_result:e.decision.final_result,decided_at:new Date().toISOString()}},{error:o}=await t.from("tasks").update({stage_decisions:n,updated_at:new Date().toISOString()}).eq("id",e.taskId).eq("user_id",e.userId);if(o&&!function(e){if(!e||"object"!=typeof e)return!1;let t="code"in e?String(e.code):"",r="message"in e?String(e.message).toLowerCase():"";return("PGRST204"===t||"42703"===t)&&r.includes("stage_decisions")}(o))throw o}async function G(e){let n=await t.getTask(e.taskId,e.userId);if(!n)throw Error(`Task ${e.taskId} not found`);let o=n.stage||null,a=new Date().toISOString(),i={taskId:e.taskId,userId:e.userId,title:n.title||null,slug:n.slug||null,timestamp:a},{frontmatter:s,body:l}=(0,r.parseFrontmatter)(n.content),d=b({defaultUserId:e.userId,frontmatter:s});s.stage=e.nextStage,s.status=e.nextStatus,e.error?s.error=e.error:"error"in s&&delete s.error;let c=N(s,l);await t.updateTask(e.taskId,c,e.userId);let u=(0,x.createAdminDbClient)(),{error:p}=await u.from("tasks").update({stage:e.nextStage,status:e.nextStatus,retry_count:e.retryCount,error:e.error,updated_at:new Date().toISOString()}).eq("id",e.taskId).eq("user_id",e.userId);p?console.error(`[applyStageTransition] direct update failed for ${e.taskId}:`,p):console.log(`[applyStageTransition] set ${e.taskId} to status=${e.nextStatus}, stage=${e.nextStage}`),"completed"===e.nextStatus&&(await u.from("tasks").update({completed_at:new Date().toISOString()}).eq("id",e.taskId).eq("user_id",e.userId),await U(e.taskId,e.userId)),("completed"===e.nextStatus||"failed"===e.nextStatus)&&(q(e.taskId,d,{goal:String(n.content||n.title||""),status:String(e.nextStatus)}).catch(e=>console.warn("[applyStageTransition] Memory extraction failed:",e)),P(e.taskId,n.project_id||n.project,{goal:String(n.content||n.title||""),status:String(e.nextStatus)}).catch(e=>console.warn("[applyStageTransition] Project knowledge extraction failed:",e))),"blocked"!==e.nextStatus&&"failed"!==e.nextStatus&&(0,B.notifyTaskEvent)({...i,eventType:"task.stage_complete",stage:o,previousStage:o,nextStage:e.nextStage,status:e.nextStatus,details:{nextStatus:e.nextStatus}}),"completed"===e.nextStatus&&(0,B.notifyTaskEvent)({...i,eventType:"task.completed",stage:e.nextStage,status:e.nextStatus,details:{previousStage:o,nextStage:e.nextStage}}),"failed"===e.nextStatus&&(0,B.notifyTaskEvent)({...i,eventType:"task.failed",stage:e.nextStage,status:e.nextStatus,error:e.error,details:{previousStage:o}})}async function V(e){await t.addTaskLog(e.taskId,e.content,e.logType)}async function J(e){await t.addTaskComment(e.taskId,e.content,e.authorType||"agent")}async function Y(e){let n=await t.getTask(e.taskId,e.userId);if(!n)return;let{frontmatter:o,body:a}=(0,r.parseFrontmatter)(n.content),i=b({defaultUserId:e.userId,frontmatter:o});o.status="failed",o.error=e.reason||"Cancelled";let s=N(o,a);await t.updateTask(e.taskId,s,e.userId),await t.addTaskLog(e.taskId,e.reason||"Task cancelled","error"),q(e.taskId,i,{goal:String(n.content||n.title||""),status:"failed"}).catch(e=>console.warn("[markCancelled] Memory extraction failed:",e)),P(e.taskId,n.project_id||n.project,{goal:String(n.content||n.title||""),status:"failed"}).catch(e=>console.warn("[markCancelled] Project knowledge extraction failed:",e));let l=(0,x.createAdminDbClient)();await l.from("tasks").update({status:"failed",error:e.reason||"Cancelled",updated_at:new Date().toISOString()}).eq("id",e.taskId).eq("user_id",e.userId),(0,B.notifyTaskEvent)({taskId:e.taskId,userId:e.userId,eventType:"task.failed",title:n.title||null,slug:n.slug||null,stage:n.stage||null,status:"failed",error:e.reason||"Cancelled",timestamp:new Date().toISOString(),details:{previousStage:n.stage||null}})}async function H(e){let{taskId:r,userId:n,signal:o,payload:a,ticketType:i="task"}=e.data,s=await t.getTask(r,n);if(!s)return void console.log(`[processor] Task ${r} not found, skipping`);if("completed"===s.status||"failed"===s.status)return void console.log(`[processor] Task ${r} is ${s.status}, skipping`);let l=s.stage;switch(o){case"start":await z(r,l,n);break;case"agentResult":await X(r,l,n,a,i,s.retry_count||0,s.workflow_id&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s.workflow_id)?s.workflow_id:null);break;case"humanInput":await Z(r,a);break;case"daemonStep":await ee(r,a);break;case"cancel":await et(r,n,a?.reason);break;default:console.warn(`[processor] Unknown signal: ${o}`)}}async function K(e){for(let t of e)try{await H(t)}catch(e){throw console.error(`[processor] Error processing job ${t.id}:`,e),e}}async function z(e,t,r){console.log(`[processor] Starting task ${e} at stage ${t}`),await F({taskId:e,stage:t,userId:r}),await V({taskId:e,content:`Task started at stage: ${t}`,logType:"system"})}async function X(e,t,r,a,i,s,l=null){let d,c,u;console.log(`[processor] Processing agent result for ${e}: ${a.decision}`),await Q({taskId:e,stage:t,decision:a,userId:r});let p=Array.isArray(a.comments)?a.comments.map(e=>String(e||"").trim()).filter(Boolean):[],f=String(a.comment||a.log||a.final_result||"").trim();for(let t of p.length>0?p:f.split("\n").map(e=>e.trim()).filter(Boolean))await J({taskId:e,content:t,authorType:"agent"});let g=null,m=null;if(l){let e=await o({workflowId:l,currentNodeName:t,decision:a.decision,retryCount:s,maxRetries:3});d=e.nextNodeName,c=e.nextStatus,u=e.retryCount,g=e.error,m=e.appendLog,console.log(`[processor] Workflow transition: ${t} -> ${d} (workflow: ${l})`)}else{let e=function({currentStage:e,decision:t,ticketType:r,retryCount:o,maxRetries:a=3}){let i=function(e,t){if("spike"===t)return"INTAKE"===e?"PROGRESS":"DONE"===e?null:"DONE";for(let t of n){let r=t.indexOf(e);if(-1!==r){if(r>=t.length-1)return null;return t[r+1]}}return null}(e,r);if("done"===t)return i?{nextStage:i,nextStatus:"queued",retryCount:0,error:null,appendLog:{content:`Stage completed: ${e}`,logType:"checkpoint"}}:{nextStage:"DONE",nextStatus:"completed",retryCount:0,error:null,appendLog:{content:`Task completed at stage ${e}.`,logType:"checkpoint"}};if("blocked"===t)return{nextStage:e,nextStatus:"blocked",retryCount:o,error:null,appendLog:{content:"Blocked: additional input required.",logType:"system"}};if("PROGRESS"===e)return{nextStage:"PROGRESS",nextStatus:"queued",retryCount:0,error:null,appendLog:{content:"Stage not done. Retrying in PROGRESS.",logType:"system"}};let s=o+1;return s<=a?{nextStage:e,nextStatus:"queued",retryCount:s,error:null,appendLog:{content:`Retrying (${s}/${a}) for stage ${e}.`,logType:"system"}}:{nextStage:e,nextStatus:"failed",retryCount:s,error:"Task failed.",appendLog:{content:"Task failed.",logType:"error"}}}({currentStage:t,decision:a.decision,ticketType:i,retryCount:s,maxRetries:3});d=e.nextStage,c=e.nextStatus,u=e.retryCount,g=e.error,m=e.appendLog}if(await G({taskId:e,nextStage:d,nextStatus:c,retryCount:u,error:g?a.explanation||g:null,userId:r}),m){let t="error"===m.logType&&a.explanation||"system"===m.logType&&a.explanation?a.explanation:m.content;await V({taskId:e,content:t,logType:m.logType})}console.log(`[processor] Task ${e} transitioned: ${t} -> ${d}`)}async function Z(e,t){console.log(`[processor] Recording human input for ${e}`),await J({taskId:e,content:t.content,authorType:t.authorType||"user"})}async function ee(e,t){let r=t.provider?` provider=${t.provider}`:"",n=t.model?` model=${t.model}`:"",o=t.role?` role=${t.role}`:"",a="number"==typeof t.iteration?` iter=${t.iteration}`:"",i="exit"===t.phase?` exit=${t.exit_code}`:"",s=t.error?` error=${t.error}`:"",l=Array.isArray(t.args)?t.args.join(" "):"",d=t.stdout_tail?`
87
- stdout_tail:
88
- ${t.stdout_tail}`:"",c=t.stderr_tail?`
89
- stderr_tail:
90
- ${t.stderr_tail}`:"",u=`[execution/${t.kind||"daemon"}] ${t.phase||"event"} ${t.label||""}${r}${n}${o}${a}${i}${s}`.trim()+(l?`
91
- args: ${l}`:"")+(t.duration_ms?`
92
- duration_ms: ${t.duration_ms}`:"")+d+c;await V({taskId:e,content:u,logType:"system"})}async function et(e,t,r){console.log(`[processor] Cancelling task ${e}: ${r||"No reason"}`),await Y({taskId:e,reason:r,userId:t})}e.s(["taskProcessor",()=>K],69324)}];
93
-
94
- //# sourceMappingURL=lib_ea45fe73._.js.map