@a-company/paradigm 7.2.0 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accept-orchestration-XW44LF5Y.js → accept-orchestration-JA3A3TSU.js} +1 -1
- package/dist/calibrate-SH6PRZFD.js +2 -0
- package/dist/calibration-aggregate-5IVXSBDP.js +2 -0
- package/dist/calibration-aggregate-DUEE3LL2.js +4 -0
- package/dist/{captain-CAXGHC2V.js → captain-ILBN2IKJ.js} +1 -1
- package/dist/{captain-CWCLFOXV.js → captain-J4FZ5PRU.js} +1 -1
- package/dist/{chunk-W3VWORQZ.js → chunk-3F4QP2Z5.js} +1 -1
- package/dist/{chunk-QPQBXRXX.js → chunk-5VR7FKS5.js} +1 -1
- package/dist/chunk-7BZPDOOQ.js +25 -0
- package/dist/{chunk-XSKIXXFW.js → chunk-7HUPVOAY.js} +12 -12
- package/dist/{chunk-ASBK55FU.js → chunk-DLMDHS2X.js} +1 -1
- package/dist/{chunk-6HYRS3PH.js → chunk-IBKCMLOW.js} +8 -8
- package/dist/{chunk-USYV5QYU.js → chunk-KA6QEI3C.js} +1 -1
- package/dist/{chunk-UNSI6DVD.js → chunk-L3AOKDMU.js} +1 -1
- package/dist/chunk-MBKTVQS2.js +2 -0
- package/dist/{chunk-RZRFYGND.js → chunk-O4ADSTSY.js} +12 -12
- package/dist/chunk-RPGSQQTS.js +2 -0
- package/dist/chunk-RQHZUPLO.js +4 -0
- package/dist/chunk-SD3KVW5Q.js +2 -0
- package/dist/chunk-VKVVIN6J.js +25 -0
- package/dist/{chunk-2KK4JQ55.js → chunk-VR2LLUYE.js} +1 -1
- package/dist/{chunk-NRP2KJ6I.js → chunk-YNFF7XHV.js} +2 -2
- package/dist/{diff-Z2YSIRC4.js → diff-NZSJW3V3.js} +1 -1
- package/dist/dist-6TDAY6TQ-HMSTBL57.js +39 -0
- package/dist/{docs-OWJ7EPD7.js → docs-DWU3T2BV.js} +1 -1
- package/dist/github-GI3HX3N5.js +4 -0
- package/dist/index.js +6 -6
- package/dist/mcp.js +1 -1
- package/dist/{orchestrate-C5NM5MFN.js → orchestrate-C7SI4J7C.js} +1 -1
- package/dist/orchestration-4MJKBSGM.js +2 -0
- package/dist/orchestration-S2ESNKSA.js +2 -0
- package/dist/platform-server-IOWHNS7Q.js +25 -0
- package/dist/{reindex-W67B2LQP.js → reindex-G2JLIGOQ.js} +1 -1
- package/dist/reindex-JR3PXYQE.js +2 -0
- package/dist/{sentinel-EFPEX246.js → sentinel-RIEQWALQ.js} +1 -1
- package/dist/{sentinel-bridge-UR2MKARY.js → sentinel-bridge-D4LFDFCH.js} +1 -1
- package/dist/serve-PWAFVYYC.js +9 -0
- package/dist/{server-4D77LCST.js → server-K7G3IHR3.js} +1 -1
- package/dist/{shift-UDKXCIW7.js → shift-HGXZ5THV.js} +1 -1
- package/dist/{spawn-I6XG57S2.js → spawn-PHA2SVQ3.js} +1 -1
- package/dist/sync-layer-C2PF273N.js +2 -0
- package/dist/task-PRLQ4VPK.js +3 -0
- package/dist/task-loader-EIXPKHA3.js +2 -0
- package/dist/task-loader-LFEE6OU7.js +2 -0
- package/dist/task-settlement-A2T6EACG.js +3 -0
- package/dist/task-settlement-ZXOY4YGX.js +3 -0
- package/dist/{team-6WNNLBAO.js → team-KP4HMUB5.js} +1 -1
- package/dist/tools-NOMEIBS7.js +2 -0
- package/dist/{tools-SDWAFQMQ.js → tools-YW3Q27UI.js} +11 -11
- package/package.json +2 -6
- package/platform-ui/dist/assets/{AmbientSection-CwatqcBD.js → AmbientSection-xoxr3DQg.js} +1 -1
- package/platform-ui/dist/assets/{DocsSection-BZ2SFJBZ.js → DocsSection-Us2qksna.js} +1 -1
- package/platform-ui/dist/assets/{GitSection-MNNYU1tO.js → GitSection-DIHZyadf.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-COYjb4Pt.js → GraphSection-9TO0L1IO.js} +1 -1
- package/platform-ui/dist/assets/{LoreSection-B0hUbfsJ.js → LoreSection-DVDit8Aw.js} +1 -1
- package/platform-ui/dist/assets/{SentinelSection-BCxW1DCp.js → SentinelSection-a5_VNYcx.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-BsucZRqy.js → SymphonySection-cRHEoJ9t.js} +1 -1
- package/platform-ui/dist/assets/TasksSection-44_gDO3L.css +1 -0
- package/platform-ui/dist/assets/TasksSection-h8x3qRIj.js +1 -0
- package/platform-ui/dist/assets/{TeamSection-C0QNTudW.js → TeamSection-mFoDyNic.js} +1 -1
- package/platform-ui/dist/assets/{UniversitySection-DN1-g9pw.js → UniversitySection-D99YRjmC.js} +1 -1
- package/platform-ui/dist/assets/{index-DwUT8pju.js → index-D_wB2S_2.js} +11 -11
- package/platform-ui/dist/index.html +1 -1
- package/dist/calibrate-PHVP7RPH.js +0 -4
- package/dist/chunk-3I3TITBA.js +0 -25
- package/dist/chunk-3YM5ABNX.js +0 -2
- package/dist/chunk-727PXENG.js +0 -2
- package/dist/chunk-K7KT6FL3.js +0 -25
- package/dist/chunk-XMAV5AG6.js +0 -2
- package/dist/dist-GQ42YS5N-4HIJZVBB.js +0 -39
- package/dist/github-4X4MYINS.js +0 -4
- package/dist/lore-server-FC2GMDLT.js +0 -14
- package/dist/orchestration-EVWQWTOV.js +0 -2
- package/dist/orchestration-UP3KFUJT.js +0 -2
- package/dist/platform-server-FXF3XFHM.js +0 -25
- package/dist/reindex-QZYOD5K4.js +0 -2
- package/dist/serve-L52ZUTU6.js +0 -10
- package/dist/serve-ZT2Z54NK.js +0 -8
- package/dist/task-KFND4HLF.js +0 -3
- package/dist/task-loader-HBZ3KRH2.js +0 -2
- package/dist/task-loader-IO4UVFUD.js +0 -2
- package/dist/task-settlement-NF7PFSNE.js +0 -3
- package/dist/task-settlement-TATNPY6L.js +0 -3
- package/dist/tools-GDWT74O6.js +0 -2
- package/graph-ui/dist/assets/index-BlgXTl53.css +0 -1
- package/graph-ui/dist/assets/index-Bq5nXK8p.js +0 -63
- package/graph-ui/dist/index.html +0 -13
- package/lore-ui/dist/assets/index-C3EixkjW.css +0 -1
- package/lore-ui/dist/assets/index-DKhNxgtW.js +0 -56
- package/lore-ui/dist/index.html +0 -13
- package/platform-ui/dist/assets/CanvasSection-dFAthehN.js +0 -9
- package/platform-ui/dist/assets/CanvasSection-flMXU19z.css +0 -1
package/dist/mcp.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$1,b as b$1}from'./chunk-6HYRS3PH.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-XSKIXXFW.js';import {i,j as j$2,a as a$2,b as b$2,k as k$1,d}from'./chunk-K7KT6FL3.js';import {p as p$1}from'./chunk-QPQBXRXX.js';import {n,P}from'./chunk-W3VWORQZ.js';import'./chunk-M4UMM6DC.js';import'./chunk-B5KLSBOZ.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-HSY75GRR.js';import'./chunk-RVXQNS6K.js';import'./chunk-3KVVC4WV.js';import'./chunk-KAUGQMXU.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-RGSFU2YW.js';import {p,q as q$1,k,l as l$1}from'./chunk-TMDPDIWA.js';import'./chunk-KLBH26PA.js';import'./chunk-XROULIQN.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import {j as j$1}from'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-727PXENG.js';import {b,a}from'./chunk-EK4ZRIFJ.js';import'./chunk-JNSJVCTU.js';import'./chunk-ECO3LHCE.js';import'./chunk-5TAVYPOV.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {ListResourcesRequestSchema,ReadResourceRequestSchema}from'@modelcontextprotocol/sdk/types.js';import*as l from'fs';import*as g from'path';function ce(e){return {id:e.id,symbol:`^${e.id}`,description:e.description,locks:e.locks?.map(s=>({id:s.id,description:s.description,keys:s.keys?.map(n=>n.expression||n),mode:s.mode||"all"})),prizes:e.prizes?.map(s=>({id:s.id,oneTime:s.oneTime}))}}function F(e){let s=e.gateConfig?.gates||[],n=l$1(e.index,"gate"),t=new Map;for(let o of n){let i=o.symbol.replace(/^\^/,"");t.set(i,{id:i,symbol:o.symbol,description:o.description,source:"purpose",filePath:o.filePath,data:o.data});}for(let o of s)t.set(o.id,{...ce(o),source:"portal.yaml"});return Array.from(t.values())}function z(e){let s=e.gateConfig?.flows||[],n=l$1(e.index,"flow"),t=new Map;for(let o of n){let i=o.symbol.replace(/^\$/,"");t.set(i,{id:i,symbol:o.symbol,description:o.description,source:"purpose",filePath:o.filePath,data:o.data});}for(let o of s)t.set(o.id,{id:o.id,symbol:`$${o.id}`,description:o.description,gates:o.gates,source:"portal.yaml"});return Array.from(t.values())}function U(){return [{uri:"paradigm://wisdom/preferences",name:"Wisdom - Preferences",description:"Team preferences for patterns, testing, and code style",mimeType:"application/json"},{uri:"paradigm://wisdom/antipatterns",name:"Wisdom - Antipatterns",description:"What NOT to do, with reasons and alternatives",mimeType:"application/json"},{uri:"paradigm://wisdom/decisions",name:"Wisdom - Decisions",description:"Architectural Decision Records (ADRs) index",mimeType:"application/json"}]}async function $(e,s){if(e==="wisdom/preferences"){let n=await j$2(s);return {handled:true,text:JSON.stringify({version:n.preferences?.version||"1.0",global:n.preferences?.global||{},by_symbol:n.preferences?.by_symbol||{},symbol_count:Object.keys(n.preferences?.by_symbol||{}).length},null,2)}}if(e.startsWith("wisdom/preferences/")){let n=decodeURIComponent(e.replace("wisdom/preferences/","")),t=await j$2(s),o=a$2(t,n);return {handled:true,text:JSON.stringify({symbol:n,preferences:o.preferences,global:t.preferences?.global||{}},null,2)}}if(e==="wisdom/antipatterns"){let n=await j$2(s);return {handled:true,text:JSON.stringify({count:n.antipatterns.length,antipatterns:n.antipatterns},null,2)}}if(e.startsWith("wisdom/antipatterns/")){let n=decodeURIComponent(e.replace("wisdom/antipatterns/","")),t=await j$2(s),o=a$2(t,n);return {handled:true,text:JSON.stringify({symbol:n,count:o.antipatterns.length,antipatterns:o.antipatterns},null,2)}}if(e==="wisdom/decisions"){let n=await j$2(s);return {handled:true,text:JSON.stringify({count:n.decisions.length,decisions:n.decisions.map(t=>({id:t.id,title:t.title,status:t.status,date:t.date,symbols:t.symbols}))},null,2)}}if(e.startsWith("wisdom/decision/")){let n=e.replace("wisdom/decision/",""),t=await j$2(s),o=t.decisions.find(i=>i.id===n);return o?{handled:true,text:JSON.stringify(o,null,2)}:{handled:true,text:JSON.stringify({error:"Decision not found",id:n,available:t.decisions.map(i=>i.id)},null,2)}}if(e.startsWith("wisdom/expertise/")){let n=decodeURIComponent(e.replace("wisdom/expertise/","")),t=await j$2(s),o=b$2(t,{symbol:n});return {handled:true,text:JSON.stringify({symbol:n,count:o.length,experts:o.map(i=>({name:i.name,symbols:i.symbols,areas:i.areas,contact:i.contact}))},null,2)}}return {handled:false,text:""}}function G(){return [{uri:"paradigm://history/fragile",name:"History - Fragile Symbols",description:"Symbols with high fragility that need extra care when modifying",mimeType:"application/json"},{uri:"paradigm://history/validation/summary",name:"History - Validation Summary",description:"Overall validation statistics and pass rates",mimeType:"application/json"}]}async function q(e,s){if(e.startsWith("history/symbol/")&&!e.endsWith("/recent")){let n=decodeURIComponent(e.replace("history/symbol/","")),t=await k$1(s),o=d(t,n);return {handled:true,text:JSON.stringify({symbol:n,summary:o.summary?{total_changes:o.summary.total_changes,last_modified:o.summary.last_modified,stability_score:o.summary.stability_score,fragility:o.summary.fragility,contributors:o.summary.contributors}:null,recent:o.recent,co_changes:o.co_changes,validation:o.validation},null,2)}}if(e.startsWith("history/symbol/")&&e.endsWith("/recent")){let n=decodeURIComponent(e.replace("history/symbol/","").replace("/recent","")),t=await k$1(s),o=d(t,n);return {handled:true,text:JSON.stringify({symbol:n,fragility:o.summary?.fragility||"unknown",stability_score:o.summary?.stability_score,recent:o.recent.slice(0,5)},null,2)}}if(e==="history/fragile"){let n=await k$1(s);return {handled:true,text:JSON.stringify({count:n.index?.fragile_symbols?.length||0,fragile_symbols:n.index?.fragile_symbols||[],recommendation:"Consider adding extra test coverage and reviewing recent changes before modifying these symbols"},null,2)}}if(e.startsWith("history/cochanges/")){let n=decodeURIComponent(e.replace("history/cochanges/","")),o=(await k$1(s)).index?.co_changes?.filter(i=>i.symbols.includes(n))||[];return {handled:true,text:JSON.stringify({symbol:n,count:o.length,co_changes:o.map(i=>({with:i.symbols.filter(a=>a!==n),frequency:i.frequency,correlation:i.correlation})),recommendation:o.length>0?"These symbols often change together - consider if they need updates too":"No strong co-change patterns detected"},null,2)}}if(e==="history/validation/summary"){let n=await k$1(s);return {handled:true,text:JSON.stringify({last_run:n.validation?.last_run,total_validations:n.validation?.total_validations||0,pass_rate:n.validation?.pass_rate||0,by_symbol:n.validation?.by_symbol||{}},null,2)}}return {handled:false,text:""}}function H(){return [{uri:"paradigm://context/agent-protocol",name:"Agent Protocol",description:"IMPORTANT: Read this first. Workflow instructions for using Paradigm MCP tools effectively.",mimeType:"text/markdown"},{uri:"paradigm://context/session",name:"Session Info",description:"Current MCP session statistics and context usage estimate",mimeType:"application/json"},{uri:"paradigm://context/handoff-guide",name:"Handoff Guide",description:"When and how to perform context handoffs",mimeType:"text/markdown"}]}async function J(e,s){if(e==="context/agent-protocol")return {handled:true,text:'# Agent Protocol for Paradigm MCP Tools\n\n## What Paradigm Is\n\nParadigm adds a metadata layer (`.purpose` files + `portal.yaml`) to any codebase so AI agents can query architecture context via MCP instead of reading source files directly.\n\n**What it does**\n- Tracks codebase symbols: `#components`, `$flows`, `^gates`, `!signals`, `~aspects`\n- Answers queries about structure, dependencies, authorization, and history without file reads\n- Enforces coverage: hooks block sessions that modify code without updating `.purpose` files\n\n**Tool surface (50+ tools)**\n- Navigation: `paradigm_status`, `paradigm_search`, `paradigm_navigate`, `paradigm_related`\n- Impact: `paradigm_ripple`, `paradigm_flows_affected`\n- Authorization: `paradigm_gates_for_route`, `paradigm_portal_add_gate`\n- History: `paradigm_history_context`, `paradigm_lore_record`, `paradigm_lore_search`\n- Agents: `paradigm_agent_list`, `paradigm_orchestrate_inline`, `paradigm_ambient_events`\n- Compliance: `paradigm_aspect_check`, `paradigm_protocol_search`\n- Session: `paradigm_session_health`, `paradigm_handoff_prepare`\n\n**Setup** (if not already initialized)\nRun `paradigm shift` \u2014 auto-detects language/framework, creates `.paradigm/` config, scaffolds `.purpose` and `portal.yaml`, installs hooks.\n\n---\n\n## Query Before Modify\n\n**Always query before making changes** - this ensures you understand impact and dependencies.\n\n| Before doing this... | Call this MCP tool |\n|---------------------|-------------------|\n| Modifying a symbol | `paradigm_ripple` with the symbol |\n| Starting a session | `paradigm_status` for project overview |\n| Understanding code | `paradigm_navigate` with explore intent |\n| Checking dependencies | `paradigm_related` for connections |\n\n## Example Workflow\n\n1. **Get oriented**: Call `paradigm_status` to see project symbols and health\n2. **Find relevant code**: Call `paradigm_navigate` with intent "find" or "explore"\n3. **Before editing**: Call `paradigm_ripple` on symbols you\'ll modify\n4. **Check context**: Call `paradigm_session_health` every 10-15 tool calls\n\n## Benefits\n\n- **Fresh data**: Always current from live project index\n- **Precise**: Only get the data you need\n- **Token-efficient**: ~100 tokens per query vs ~2000 for reading files\n\n## Context Monitoring\n\nCall `paradigm_session_health` periodically to monitor session health:\n- **<50%**: Continue working\n- **50-70%**: Plan a stopping point\n- **70-85%**: Prepare handoff soon\n- **>85%**: Handoff after current task\n\n## Tool Surface by Category\n\n| Category | Tools |\n|----------|-------|\n| Navigation | `paradigm_status`, `paradigm_search`, `paradigm_navigate`, `paradigm_related` |\n| Impact analysis | `paradigm_ripple`, `paradigm_flows_affected` |\n| Authorization | `paradigm_gates_for_route`, `paradigm_portal_add_gate` |\n| History & lore | `paradigm_history_context`, `paradigm_lore_record`, `paradigm_lore_search` |\n| Agent team | `paradigm_agent_list`, `paradigm_orchestrate_inline`, `paradigm_captain_brief` |\n| Compliance | `paradigm_aspect_check`, `paradigm_protocol_search`, `paradigm_aspect_drift` |\n| Session | `paradigm_session_health`, `paradigm_handoff_prepare`, `paradigm_session_recover` |\n| Architecture | `paradigm_arch_status`, `paradigm_arch_diagram` |\n\n---\n\n*This protocol ensures efficient, safe modifications to the codebase.*\n'};if(e==="context/session"){let n=j$1(),t=n.getStats(),o=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{durationMinutes:o,startTime:new Date(t.startTime).toISOString(),lastActivity:new Date(t.lastActivity).toISOString()},interactions:{toolCalls:t.totals.toolCallCount,resourceReads:t.totals.resourceReadCount,totalInteractions:t.totals.toolCallCount+t.totals.resourceReadCount},tokens:{estimatedMcpContribution:t.totals.totalTokens,note:"Use paradigm_session_health tool for full analysis with handoff recommendations"}},null,2)}}return e==="context/handoff-guide"?{handled:true,text:`# Context Handoff Guide
|
|
2
|
+
import {a as a$1,b as b$1}from'./chunk-IBKCMLOW.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-XROULIQN.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-7HUPVOAY.js';import {i,j as j$2,a as a$2,b as b$2,k as k$1,d}from'./chunk-VKVVIN6J.js';import {p as p$1}from'./chunk-5VR7FKS5.js';import {n,P}from'./chunk-3F4QP2Z5.js';import'./chunk-M4UMM6DC.js';import'./chunk-B5KLSBOZ.js';import'./chunk-HSY75GRR.js';import'./chunk-RVXQNS6K.js';import'./chunk-3KVVC4WV.js';import'./chunk-KAUGQMXU.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-RGSFU2YW.js';import {p,q as q$1,k,l as l$1}from'./chunk-TMDPDIWA.js';import'./chunk-KLBH26PA.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import {j as j$1}from'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-SD3KVW5Q.js';import {b,a}from'./chunk-EK4ZRIFJ.js';import'./chunk-JNSJVCTU.js';import'./chunk-ECO3LHCE.js';import'./chunk-5TAVYPOV.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {ListResourcesRequestSchema,ReadResourceRequestSchema}from'@modelcontextprotocol/sdk/types.js';import*as l from'fs';import*as g from'path';function ce(e){return {id:e.id,symbol:`^${e.id}`,description:e.description,locks:e.locks?.map(s=>({id:s.id,description:s.description,keys:s.keys?.map(n=>n.expression||n),mode:s.mode||"all"})),prizes:e.prizes?.map(s=>({id:s.id,oneTime:s.oneTime}))}}function F(e){let s=e.gateConfig?.gates||[],n=l$1(e.index,"gate"),t=new Map;for(let o of n){let i=o.symbol.replace(/^\^/,"");t.set(i,{id:i,symbol:o.symbol,description:o.description,source:"purpose",filePath:o.filePath,data:o.data});}for(let o of s)t.set(o.id,{...ce(o),source:"portal.yaml"});return Array.from(t.values())}function z(e){let s=e.gateConfig?.flows||[],n=l$1(e.index,"flow"),t=new Map;for(let o of n){let i=o.symbol.replace(/^\$/,"");t.set(i,{id:i,symbol:o.symbol,description:o.description,source:"purpose",filePath:o.filePath,data:o.data});}for(let o of s)t.set(o.id,{id:o.id,symbol:`$${o.id}`,description:o.description,gates:o.gates,source:"portal.yaml"});return Array.from(t.values())}function U(){return [{uri:"paradigm://wisdom/preferences",name:"Wisdom - Preferences",description:"Team preferences for patterns, testing, and code style",mimeType:"application/json"},{uri:"paradigm://wisdom/antipatterns",name:"Wisdom - Antipatterns",description:"What NOT to do, with reasons and alternatives",mimeType:"application/json"},{uri:"paradigm://wisdom/decisions",name:"Wisdom - Decisions",description:"Architectural Decision Records (ADRs) index",mimeType:"application/json"}]}async function $(e,s){if(e==="wisdom/preferences"){let n=await j$2(s);return {handled:true,text:JSON.stringify({version:n.preferences?.version||"1.0",global:n.preferences?.global||{},by_symbol:n.preferences?.by_symbol||{},symbol_count:Object.keys(n.preferences?.by_symbol||{}).length},null,2)}}if(e.startsWith("wisdom/preferences/")){let n=decodeURIComponent(e.replace("wisdom/preferences/","")),t=await j$2(s),o=a$2(t,n);return {handled:true,text:JSON.stringify({symbol:n,preferences:o.preferences,global:t.preferences?.global||{}},null,2)}}if(e==="wisdom/antipatterns"){let n=await j$2(s);return {handled:true,text:JSON.stringify({count:n.antipatterns.length,antipatterns:n.antipatterns},null,2)}}if(e.startsWith("wisdom/antipatterns/")){let n=decodeURIComponent(e.replace("wisdom/antipatterns/","")),t=await j$2(s),o=a$2(t,n);return {handled:true,text:JSON.stringify({symbol:n,count:o.antipatterns.length,antipatterns:o.antipatterns},null,2)}}if(e==="wisdom/decisions"){let n=await j$2(s);return {handled:true,text:JSON.stringify({count:n.decisions.length,decisions:n.decisions.map(t=>({id:t.id,title:t.title,status:t.status,date:t.date,symbols:t.symbols}))},null,2)}}if(e.startsWith("wisdom/decision/")){let n=e.replace("wisdom/decision/",""),t=await j$2(s),o=t.decisions.find(i=>i.id===n);return o?{handled:true,text:JSON.stringify(o,null,2)}:{handled:true,text:JSON.stringify({error:"Decision not found",id:n,available:t.decisions.map(i=>i.id)},null,2)}}if(e.startsWith("wisdom/expertise/")){let n=decodeURIComponent(e.replace("wisdom/expertise/","")),t=await j$2(s),o=b$2(t,{symbol:n});return {handled:true,text:JSON.stringify({symbol:n,count:o.length,experts:o.map(i=>({name:i.name,symbols:i.symbols,areas:i.areas,contact:i.contact}))},null,2)}}return {handled:false,text:""}}function G(){return [{uri:"paradigm://history/fragile",name:"History - Fragile Symbols",description:"Symbols with high fragility that need extra care when modifying",mimeType:"application/json"},{uri:"paradigm://history/validation/summary",name:"History - Validation Summary",description:"Overall validation statistics and pass rates",mimeType:"application/json"}]}async function q(e,s){if(e.startsWith("history/symbol/")&&!e.endsWith("/recent")){let n=decodeURIComponent(e.replace("history/symbol/","")),t=await k$1(s),o=d(t,n);return {handled:true,text:JSON.stringify({symbol:n,summary:o.summary?{total_changes:o.summary.total_changes,last_modified:o.summary.last_modified,stability_score:o.summary.stability_score,fragility:o.summary.fragility,contributors:o.summary.contributors}:null,recent:o.recent,co_changes:o.co_changes,validation:o.validation},null,2)}}if(e.startsWith("history/symbol/")&&e.endsWith("/recent")){let n=decodeURIComponent(e.replace("history/symbol/","").replace("/recent","")),t=await k$1(s),o=d(t,n);return {handled:true,text:JSON.stringify({symbol:n,fragility:o.summary?.fragility||"unknown",stability_score:o.summary?.stability_score,recent:o.recent.slice(0,5)},null,2)}}if(e==="history/fragile"){let n=await k$1(s);return {handled:true,text:JSON.stringify({count:n.index?.fragile_symbols?.length||0,fragile_symbols:n.index?.fragile_symbols||[],recommendation:"Consider adding extra test coverage and reviewing recent changes before modifying these symbols"},null,2)}}if(e.startsWith("history/cochanges/")){let n=decodeURIComponent(e.replace("history/cochanges/","")),o=(await k$1(s)).index?.co_changes?.filter(i=>i.symbols.includes(n))||[];return {handled:true,text:JSON.stringify({symbol:n,count:o.length,co_changes:o.map(i=>({with:i.symbols.filter(a=>a!==n),frequency:i.frequency,correlation:i.correlation})),recommendation:o.length>0?"These symbols often change together - consider if they need updates too":"No strong co-change patterns detected"},null,2)}}if(e==="history/validation/summary"){let n=await k$1(s);return {handled:true,text:JSON.stringify({last_run:n.validation?.last_run,total_validations:n.validation?.total_validations||0,pass_rate:n.validation?.pass_rate||0,by_symbol:n.validation?.by_symbol||{}},null,2)}}return {handled:false,text:""}}function H(){return [{uri:"paradigm://context/agent-protocol",name:"Agent Protocol",description:"IMPORTANT: Read this first. Workflow instructions for using Paradigm MCP tools effectively.",mimeType:"text/markdown"},{uri:"paradigm://context/session",name:"Session Info",description:"Current MCP session statistics and context usage estimate",mimeType:"application/json"},{uri:"paradigm://context/handoff-guide",name:"Handoff Guide",description:"When and how to perform context handoffs",mimeType:"text/markdown"}]}async function J(e,s){if(e==="context/agent-protocol")return {handled:true,text:'# Agent Protocol for Paradigm MCP Tools\n\n## What Paradigm Is\n\nParadigm adds a metadata layer (`.purpose` files + `portal.yaml`) to any codebase so AI agents can query architecture context via MCP instead of reading source files directly.\n\n**What it does**\n- Tracks codebase symbols: `#components`, `$flows`, `^gates`, `!signals`, `~aspects`\n- Answers queries about structure, dependencies, authorization, and history without file reads\n- Enforces coverage: hooks block sessions that modify code without updating `.purpose` files\n\n**Tool surface (50+ tools)**\n- Navigation: `paradigm_status`, `paradigm_search`, `paradigm_navigate`, `paradigm_related`\n- Impact: `paradigm_ripple`, `paradigm_flows_affected`\n- Authorization: `paradigm_gates_for_route`, `paradigm_portal_add_gate`\n- History: `paradigm_history_context`, `paradigm_lore_record`, `paradigm_lore_search`\n- Agents: `paradigm_agent_list`, `paradigm_orchestrate_inline`, `paradigm_ambient_events`\n- Compliance: `paradigm_aspect_check`, `paradigm_protocol_search`\n- Session: `paradigm_session_health`, `paradigm_handoff_prepare`\n\n**Setup** (if not already initialized)\nRun `paradigm shift` \u2014 auto-detects language/framework, creates `.paradigm/` config, scaffolds `.purpose` and `portal.yaml`, installs hooks.\n\n---\n\n## Query Before Modify\n\n**Always query before making changes** - this ensures you understand impact and dependencies.\n\n| Before doing this... | Call this MCP tool |\n|---------------------|-------------------|\n| Modifying a symbol | `paradigm_ripple` with the symbol |\n| Starting a session | `paradigm_status` for project overview |\n| Understanding code | `paradigm_navigate` with explore intent |\n| Checking dependencies | `paradigm_related` for connections |\n\n## Example Workflow\n\n1. **Get oriented**: Call `paradigm_status` to see project symbols and health\n2. **Find relevant code**: Call `paradigm_navigate` with intent "find" or "explore"\n3. **Before editing**: Call `paradigm_ripple` on symbols you\'ll modify\n4. **Check context**: Call `paradigm_session_health` every 10-15 tool calls\n\n## Benefits\n\n- **Fresh data**: Always current from live project index\n- **Precise**: Only get the data you need\n- **Token-efficient**: ~100 tokens per query vs ~2000 for reading files\n\n## Context Monitoring\n\nCall `paradigm_session_health` periodically to monitor session health:\n- **<50%**: Continue working\n- **50-70%**: Plan a stopping point\n- **70-85%**: Prepare handoff soon\n- **>85%**: Handoff after current task\n\n## Tool Surface by Category\n\n| Category | Tools |\n|----------|-------|\n| Navigation | `paradigm_status`, `paradigm_search`, `paradigm_navigate`, `paradigm_related` |\n| Impact analysis | `paradigm_ripple`, `paradigm_flows_affected` |\n| Authorization | `paradigm_gates_for_route`, `paradigm_portal_add_gate` |\n| History & lore | `paradigm_history_context`, `paradigm_lore_record`, `paradigm_lore_search` |\n| Agent team | `paradigm_agent_list`, `paradigm_orchestrate_inline`, `paradigm_captain_brief` |\n| Compliance | `paradigm_aspect_check`, `paradigm_protocol_search`, `paradigm_aspect_drift` |\n| Session | `paradigm_session_health`, `paradigm_handoff_prepare`, `paradigm_session_recover` |\n| Architecture | `paradigm_arch_status`, `paradigm_arch_diagram` |\n\n---\n\n*This protocol ensures efficient, safe modifications to the codebase.*\n'};if(e==="context/session"){let n=j$1(),t=n.getStats(),o=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{durationMinutes:o,startTime:new Date(t.startTime).toISOString(),lastActivity:new Date(t.lastActivity).toISOString()},interactions:{toolCalls:t.totals.toolCallCount,resourceReads:t.totals.resourceReadCount,totalInteractions:t.totals.toolCallCount+t.totals.resourceReadCount},tokens:{estimatedMcpContribution:t.totals.totalTokens,note:"Use paradigm_session_health tool for full analysis with handoff recommendations"}},null,2)}}return e==="context/handoff-guide"?{handled:true,text:`# Context Handoff Guide
|
|
3
3
|
|
|
4
4
|
## When to Handoff
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a,b}from'./chunk-
|
|
2
|
+
import {a,b}from'./chunk-YNFF7XHV.js';import'./chunk-TYWB5IQJ.js';import'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import'./chunk-ECLUYHAR.js';import {e}from'./chunk-YXLGVOZO.js';import'./chunk-MBKTVQS2.js';import'./chunk-EK4ZRIFJ.js';import {d,c}from'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-D6BSCELB.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';import*as S from'path';import o from'chalk';import O from'ora';async function I(e$1,s,t){let i=s?S.resolve(s):process.cwd();if(!e$1){t.json?console.log(JSON.stringify({error:"Task is required"})):(console.log(o.red(`
|
|
3
3
|
Task is required.`)),console.log(o.gray(`Example: paradigm team orchestrate "Build @payment-system with Stripe"
|
|
4
4
|
`)));return}if(!e(i)){t.json?console.log(JSON.stringify({error:"Team not configured"})):console.log(o.yellow("\nTeam not configured. Run `paradigm team init` first.\n"));return}let f="faceted";t.solo&&(f="solo"),t.faceted&&(f="faceted");let g;if(t.budget){let n=t.budget.split(",");g={};for(let l of n){let[r,a]=l.split("=");r==="tokens"&&(g.maxTokens=parseInt(a)),r==="cost"&&(g.maxCostUsd=parseFloat(a)),r==="warn"&&(g.warnAtPercent=parseInt(a));}}let c=O({text:"Initializing orchestrator...",isSilent:t.quiet||t.json}).start(),y=new a(i);try{await y.initialize();}catch(n){c.fail("Failed to initialize orchestrator"),t.json?console.log(JSON.stringify({error:n instanceof Error?n.message:String(n)})):console.log(o.red(`
|
|
5
5
|
Error: ${n instanceof Error?n.message:n}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{d as TASK_TYPE_FAMILIES,e as assembleCalibrationGrid,h as classifyTaskLocal,k as emitTaskDag,c as estimateForTask,f as getOrchestrationToolsList,g as handleOrchestrationTool,j as loadAgentsManifest,a as loadLearnedTokenTable,l as planBuilderStages,b as resolveAgentEstimate,i as suggestAgentsForTask}from'./chunk-O4ADSTSY.js';import'./chunk-7BZPDOOQ.js';import'./chunk-4QADCWPU.js';import'./chunk-NKYNHSA5.js';import'./chunk-VR2LLUYE.js';import'./chunk-M7JHVVDW.js';import'./chunk-ACJWUOMA.js';import'./chunk-A5EEY6NO.js';import'./chunk-Q527BPUF.js';import'./chunk-33ERV2MW.js';import'./chunk-VOPJ47QY.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-D6BSCELB.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{d as TASK_TYPE_FAMILIES,e as assembleCalibrationGrid,h as classifyTaskLocal,k as emitTaskDag,c as estimateForTask,f as getOrchestrationToolsList,g as handleOrchestrationTool,j as loadAgentsManifest,a as loadLearnedTokenTable,l as planBuilderStages,b as resolveAgentEstimate,i as suggestAgentsForTask}from'./chunk-7HUPVOAY.js';import'./chunk-VKVVIN6J.js';import'./chunk-3F4QP2Z5.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-RGSFU2YW.js';import'./chunk-TMDPDIWA.js';import'./chunk-KLBH26PA.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a,b}from'./chunk-Y6KXTQBG.js';import'./chunk-5TAVYPOV.js';import Q,{Router}from'express';import*as Pt from'http';import*as v from'path';import*as k from'fs';import {fileURLToPath}from'url';import x from'chalk';import*as L from'js-yaml';import*as Y from'os';import {WebSocketServer,WebSocket}from'ws';import pt from'simple-git';var V=".paradigm/lore",et="entries";function Ft(n){return n.endsWith(".yaml")||n.endsWith(".lore")}function It(n){let s=n.author;if(typeof s=="object"&&s&&!Array.isArray(s)){let o=s;if(o.type==="agent"){n.author=o.id||"unknown";let r=o.model||o.id||"unknown",t=r.toLowerCase(),e="unknown";t.includes("claude")||t.includes("anthropic")?e="anthropic":(t.includes("gpt")||t.includes("openai"))&&(e="openai"),n.agent={provider:e,model:r};}else n.author=o.id||"unknown";delete n.assistedBy;}else typeof s!="string"&&(n.author="unknown");return n.symbols_touched&&!Array.isArray(n.symbols_touched)&&(n.symbols_touched=[String(n.symbols_touched)]),n.symbols_created&&!Array.isArray(n.symbols_created)&&(n.symbols_created=[String(n.symbols_created)]),n}function tt(n,s,o){let r=v.join(n,V,et,s),t=v.join(r,`${o}.lore`);if(k.existsSync(t))return t;let e=v.join(r,`${o}.yaml`);return k.existsSync(e)?e:null}function q(n){let s=v.join(n,V,et);if(!k.existsSync(s))return [];let o=[],r=k.readdirSync(s).filter(t=>/^\d{4}-\d{2}-\d{2}$/.test(t)).sort().reverse();for(let t of r){let e=v.join(s,t),a=k.readdirSync(e).filter(Ft).sort();for(let i of a)try{let c=k.readFileSync(v.join(e,i),"utf8"),l=L.load(c);o.push(It(l));}catch{}}return o}function nt(n){let s=Router();return s.get("/",(o,r)=>{let t=q(n),{author:e,authorType:a,hasAgent:i,symbol:c,type:l,tag:u,from:d,to:f,tags:m,hasReview:g,hasBody:h,hasConfidence:b,hasAssessment:y,limit:_,offset:w}=o.query;if(e&&(t=t.filter(p=>p.author===e)),i!==void 0?t=t.filter(p=>i==="true"?p.agent!=null:p.agent==null):a&&(t=t.filter(p=>a==="agent"?p.agent!=null:p.agent==null)),c&&(t=t.filter(p=>p.symbols_touched?.includes(c)||p.symbols_created?.includes(c))),l&&(t=t.filter(p=>p.type===l)),u){let p=u;t=t.filter(I=>I.tags?.some(M=>M===p||M.startsWith(p+":")||p.includes(":")&&M===p));}if(h==="true"?t=t.filter(p=>p.body!=null&&p.body.length>0):h==="false"&&(t=t.filter(p=>!p.body||p.body.length===0)),d){let p=new Date(d).getTime();t=t.filter(I=>new Date(I.timestamp).getTime()>=p);}if(f){let p=new Date(f).getTime();t=t.filter(I=>new Date(I.timestamp).getTime()<=p);}if(m){let p=m.split(",");t=t.filter(I=>p.some(M=>I.tags?.includes(M)));}g==="true"?t=t.filter(p=>p.review!=null):g==="false"&&(t=t.filter(p=>p.review==null)),b==="true"?t=t.filter(p=>p.confidence!=null):b==="false"&&(t=t.filter(p=>p.confidence==null)),y==="true"?t=t.filter(p=>p.assessment!=null):y==="false"&&(t=t.filter(p=>p.assessment==null)),t.sort((p,I)=>new Date(I.timestamp).getTime()-new Date(p.timestamp).getTime());let j=parseInt(w||"0",10),F=parseInt(_||"100",10),J=t.length;t=t.slice(j,j+F),r.json({total:J,offset:j,limit:F,entries:t});}),s.get("/timeline",(o,r)=>{let t=v.join(n,V,"timeline.yaml");if(!k.existsSync(t)){r.json({version:"1.0",project:"unknown",entries:0,last_updated:"",authors:[]});return}try{let e=k.readFileSync(t,"utf8");r.json(L.load(e));}catch{r.status(500).json({error:"Failed to load timeline"});}}),s.get("/symbols",(o,r)=>{let t=q(n),e={};for(let i of t){if(i.symbols_touched)for(let c of i.symbols_touched)e[c]=(e[c]||0)+1;if(i.symbols_created)for(let c of i.symbols_created)e[c]=(e[c]||0)+1;}let a=Object.entries(e).map(([i,c])=>({symbol:i,count:c})).sort((i,c)=>c.count-i.count);r.json({symbols:a});}),s.get("/tags",(o,r)=>{let t=q(n),e={};for(let i of t)if(i.tags)for(let c of i.tags)e[c]=(e[c]||0)+1;let a=Object.entries(e).map(([i,c])=>({tag:i,count:c})).sort((i,c)=>c.count-i.count);r.json({tags:a});}),s.get("/authors",(o,r)=>{let t=q(n),e={};for(let i of t){let c=i.author;e[c]||(e[c]={hasAgent:i.agent!=null,count:0,lastActive:i.timestamp}),e[c].count++,i.agent!=null&&(e[c].hasAgent=true),i.timestamp>e[c].lastActive&&(e[c].lastActive=i.timestamp);}let a=Object.entries(e).map(([i,c])=>({id:i,...c})).sort((i,c)=>c.count-i.count);r.json({authors:a});}),s.get("/calibration",(o,r)=>{let t=q(n).filter(h=>h.assessment!=null),e=t.filter(h=>h.confidence!=null),a=t.length,i=e.length,c={correct:0,partial:0,incorrect:0},l=0,u=0,d=0;for(let h of t){let b=h.assessment.verdict;c[b]++;let y=b==="correct"?1:b==="partial"?.5:0;l+=y,h.confidence!=null&&(u+=h.confidence,d+=Math.abs(y-h.confidence));}let f=a>0?l/a:0,m=i>0?u/i:null,g=i>0?1-d/i:null;r.json({totalAssessed:a,totalWithConfidence:i,accuracyRate:Math.round(f*1e3)/1e3,avgConfidence:m!=null?Math.round(m*1e3)/1e3:null,calibrationScore:g!=null?Math.round(g*1e3)/1e3:null,verdictBreakdown:c});}),s.get("/:id",(o,r)=>{let e=q(n).find(a=>a.id===o.params.id);if(!e){r.status(404).json({error:"Entry not found"});return}r.json(e);}),s.put("/:id/assess",(o,r)=>{let t=o.params.id,a=q(n).find(u=>u.id===t);if(!a){r.status(404).json({error:"Entry not found"});return}let i=a.timestamp.slice(0,10),c=tt(n,i,t);if(!c){r.status(404).json({error:"Entry file not found"});return}let l=o.body.verdict;if(!["correct","partial","incorrect"].includes(l)){r.status(400).json({error:"Invalid verdict. Must be: correct, partial, incorrect"});return}if(a.assessment={verdict:l,assessed_by:o.body.assessed_by||"anonymous",assessed_at:new Date().toISOString(),notes:o.body.notes},a.confidence!=null){let u=l==="correct"?1:l==="partial"?.5:0;a.assessment_delta=u-a.confidence;}k.writeFileSync(c,L.dump(a,{lineWidth:-1,noRefs:true})),r.json({success:true,entry:a});}),s.put("/:id/review",(o,r)=>{let t=o.params.id,a=q(n).find(l=>l.id===t);if(!a){r.status(404).json({error:"Entry not found"});return}let i=a.timestamp.slice(0,10),c=tt(n,i,t);if(!c){r.status(404).json({error:"Entry file not found"});return}a.review={reviewer:o.body.reviewer||"anonymous",completeness:o.body.completeness||3,quality:o.body.quality||3,notes:o.body.notes,reviewed_at:new Date().toISOString()},k.writeFileSync(c,L.dump(a,{lineWidth:-1,noRefs:true})),r.json({success:true,entry:a});}),s}function rt(n){let s=Router();return s.get("/",(o,r)=>{let t=v.join(n,".paradigm","config.yaml"),e=v.basename(n);if(k.existsSync(t))try{let a=L.load(k.readFileSync(t,"utf8"));e=a.project||a.name||e;}catch{}r.json({project:e,projectDir:n,paradigmVersion:"2.0"});}),s}var $t=".paradigm/lore",Et="entries",Ot=14400*1e3;function Ct(n){return n.endsWith(".yaml")||n.endsWith(".lore")}function Lt(n){let s=n.author;if(typeof s=="object"&&s&&!Array.isArray(s)){let o=s;if(o.type==="agent"){n.author=o.id||"unknown";let r=o.model||o.id||"unknown",t=r.toLowerCase(),e="unknown";t.includes("claude")||t.includes("anthropic")?e="anthropic":(t.includes("gpt")||t.includes("openai"))&&(e="openai"),n.agent={provider:e,model:r};}else n.author=o.id||"unknown";delete n.assistedBy;}else typeof s!="string"&&(n.author="unknown");return n.symbols_touched&&!Array.isArray(n.symbols_touched)&&(n.symbols_touched=[String(n.symbols_touched)]),n.symbols_created&&!Array.isArray(n.symbols_created)&&(n.symbols_created=[String(n.symbols_created)]),n}function ot(n){let s=v.join(n,$t,Et);if(!k.existsSync(s))return [];let o=[],r=k.readdirSync(s).filter(t=>/^\d{4}-\d{2}-\d{2}$/.test(t)).sort().reverse();for(let t of r){let e=v.join(s,t),a=k.readdirSync(e).filter(Ct).sort();for(let i of a)try{let c=k.readFileSync(v.join(e,i),"utf8"),l=L.load(c);o.push(Lt(l));}catch{}}return o}function at(n){let s=v.join(n,".paradigm","session-breadcrumbs.json");if(k.existsSync(s))try{return JSON.parse(k.readFileSync(s,"utf8"))}catch{}let o=v.join(Y.homedir(),".paradigm","sessions");if(k.existsSync(o))try{let r=k.readdirSync(o).sort().reverse();for(let t of r.slice(0,5)){let e=v.join(o,t,"breadcrumbs.json");if(k.existsSync(e))return JSON.parse(k.readFileSync(e,"utf8"))}}catch{}return []}function it(n,s){if(n.length===0)return [];let o=[...n].sort((e,a)=>new Date(e.timestamp).getTime()-new Date(a.timestamp).getTime()),r=[],t=[o[0]];for(let e=1;e<o.length;e++){let a=o[e-1],i=o[e],c=new Date(i.timestamp).getTime()-new Date(a.timestamp).getTime(),l=i.author===a.author;c<=Ot&&l?t.push(i):(r.push(ct(t)),t=[i]);}return r.push(ct(t)),s.length>0&&r.length>0&&(r[r.length-1].breadcrumbs=s),r.sort((e,a)=>new Date(a.startTime).getTime()-new Date(e.startTime).getTime()),r}function ct(n){let s=new Set,o=false;for(let a of n){if(a.symbols_touched)for(let i of a.symbols_touched)s.add(i);if(a.symbols_created)for(let i of a.symbols_created)s.add(i);a.agent&&(o=true);}let r=n[0].timestamp,t=n[n.length-1].timestamp,e=r.slice(0,10);return {id:`session-${e}-${n[0].author}-${n[0].id.slice(0,8)}`,date:e,author:{name:n[0].author,hasAgent:o},startTime:r,endTime:t,entryCount:n.length,symbolsTouched:Array.from(s),entryIds:n.map(a=>a.id)}}function dt(n){let s=Router();return s.get("/",(o,r)=>{let t=ot(n),e=at(n),a=it(t,e);r.json({sessions:a});}),s.get("/:id",(o,r)=>{let t=ot(n),e=at(n),i=it(t,e).find(l=>l.id===o.params.id);if(!i){r.status(404).json({error:"Session not found"});return}let c=t.filter(l=>i.entryIds.includes(l.id));r.json({...i,entries:c});}),s}function Mt(n){let s=["#58a6ff","#3fb950","#f85149","#d29922","#bc8cff","#f778ba","#79c0ff","#56d364"],o=0;for(let r=0;r<n.length;r++)o=(o<<5)-o+n.charCodeAt(r)|0;return s[Math.abs(o)%s.length]}var Wt=0,U=class{agents=new Map;staleTimeout=120*1e3;join(s){let o=new Date().toISOString(),r={agentId:s,color:Mt(s),connectedAt:o,lastActivity:o};return this.agents.set(s,r),r}touch(s){let o=this.agents.get(s);o&&(o.lastActivity=new Date().toISOString());}leave(s){this.agents.delete(s);}getAll(){return Array.from(this.agents.values())}pruneStale(){let s=Date.now(),o=[];for(let[r,t]of this.agents)s-new Date(t.lastActivity).getTime()>this.staleTimeout&&(this.agents.delete(r),o.push(r));return o}},B=class{state={section:"overview",selectedSymbol:null,theme:"dark",lastInteraction:Date.now()};highlights=[];annotations=[];muted=false;updateSection(s){this.state.section=s,this.state.lastInteraction=Date.now();}updateSelectedSymbol(s){this.state.selectedSymbol=s,this.state.lastInteraction=Date.now();}updateTheme(s){this.state.theme=s;}setMuted(s){this.muted=s;}isMuted(){return this.muted}isUserActive(s=5e3){return Date.now()-this.state.lastInteraction<s}getState(){return {...this.state,muted:this.muted}}addHighlight(s){this.highlights.push(s),s.duration>0&&setTimeout(()=>{this.highlights=this.highlights.filter(o=>o!==s);},s.duration);}addAnnotation(s){let o={...s,id:`ann-${++Wt}`,createdAt:Date.now()};return this.annotations.push(o),o.duration>0&&setTimeout(()=>{this.annotations=this.annotations.filter(r=>r!==o);},o.duration),o}clearHighlights(){this.highlights=[];}clearAnnotations(){this.annotations=[];}clearAll(){this.highlights=[],this.annotations=[];}getHighlights(){return [...this.highlights]}getAnnotations(){return [...this.annotations]}};function Jt(n){let s=typeof n.type=="string"?n.type:"",o=s.indexOf(":");return o>0?s.slice(0,o):s}function mt(n){let s=new Map,o=new U,r=new B;function t(a){let i=JSON.stringify(a),c=Jt(a);for(let[l,u]of s)l.readyState===WebSocket.OPEN&&(u===null||u.has(c))&&l.send(i);}return new WebSocketServer({server:n,path:"/ws"}).on("connection",a=>{s.set(a,null),a.on("message",i=>{try{let c=JSON.parse(i.toString());c.type==="subscribe"?(s.set(a,Array.isArray(c.channels)?new Set(c.channels.map(String)):null),a.send(JSON.stringify({type:"subscribed",channels:c.channels??null}))):c.type==="user:navigate"?r.updateSection(c.section):c.type==="user:select"?r.updateSelectedSymbol(c.symbol??null):c.type==="user:theme"?r.updateTheme(c.theme):c.type==="user:mute"?(r.setMuted(c.muted),t({type:"agent:mute_changed",muted:c.muted})):c.type==="ping"&&a.send(JSON.stringify({type:"pong",timestamp:new Date().toISOString()}));}catch{}}),a.on("close",()=>{s.delete(a);}),a.on("error",()=>{s.delete(a);});}),setInterval(()=>{let a=o.pruneStale();for(let i of a)t({type:"agent:leave",agentId:i});},3e4),{broadcast:t,agentPresence:o,userState:r,clientCount:()=>s.size}}function ft(n){let s=Router();return s.post("/",(o,r)=>{let{command:t,agentId:e,payload:a}=o.body;if(!t||!e){r.status(400).json({error:"Missing command or agentId"});return}switch(n.agentPresence.getAll().find(c=>c.agentId===e)||(n.agentPresence.join(e),n.broadcast({type:"agent:join",agent:n.agentPresence.getAll().find(c=>c.agentId===e)})),n.agentPresence.touch(e),t){case "navigate":{let{section:c,symbol:l,loreId:u}=a,d=n.userState.isUserActive();if(n.userState.isMuted()){r.json({navigated:false,reason:"Agent actions are muted by user"});return}n.broadcast({type:"agent:navigate",agentId:e,section:c,symbol:l,loreId:u,userActive:d}),c&&n.userState.updateSection(c),l&&n.userState.updateSelectedSymbol(l),r.json({navigated:true,section:c,symbol:l,userActive:d});return}case "highlight":{let{symbols:c,color:l,duration:u,pulse:d,label:f}=a;if(n.userState.isMuted()){r.json({highlighted:false,reason:"Agent actions are muted by user"});return}let g=c||[];n.userState.addHighlight({symbols:g,color:l||n.agentPresence.getAll().find(h=>h.agentId===e)?.color||"#58a6ff",duration:u||5e3,pulse:d??true,label:f,createdAt:Date.now()}),n.broadcast({type:"agent:highlight",agentId:e,symbols:g,color:l||"#58a6ff",duration:u||5e3,pulse:d??true,label:f}),r.json({highlighted:true,count:g.length});return}case "annotate":{let{type:c,message:l,symbol:u,severity:d,duration:f}=a;if(n.userState.isMuted()){r.json({annotated:false,reason:"Agent actions are muted by user"});return}let g=n.userState.addAnnotation({type:c||"toast",message:l||"",symbol:u,severity:d||"info",duration:f||6e3});n.broadcast({type:"agent:annotate",agentId:e,annotation:g}),r.json({annotated:true,id:g.id});return}case "observe":{let c=n.userState.getState(),l=n.agentPresence.getAll(),u=n.clientCount()>0;r.json({connected:u,users:n.clientCount(),agents:l,state:{section:c.section,selectedSymbol:c.selectedSymbol,theme:c.theme,muted:c.muted},highlights:n.userState.getHighlights(),annotations:n.userState.getAnnotations()});return}case "clear":{let{target:c}=a,l=c||"all";(l==="highlights"||l==="all")&&n.userState.clearHighlights(),(l==="annotations"||l==="all")&&n.userState.clearAnnotations(),n.broadcast({type:"agent:clear",agentId:e,target:l}),r.json({cleared:true,target:l});return}default:r.status(400).json({error:`Unknown command: ${t}`});return}}),s}function Kt(n){try{return JSON.parse(k.readFileSync(n,"utf-8"))}catch{return null}}function W(n){try{return L.load(k.readFileSync(n,"utf-8"))}catch{return null}}function Ut(n){let s=v.join(n,".paradigm","scan-index.json"),o=Kt(s);if(!o?.symbols)return {total:0,byType:{}};let r={};for(let t of o.symbols){let e=t.category||"unknown";r[e]=(r[e]||0)+1;}return {total:o.symbols.length,byType:r}}function Bt(n){let s=v.join(n,".paradigm","lore","entries");if(!k.existsSync(s))return {total:0,thisWeek:0,lastEntry:null,calibrationScore:null,assessed:0};let o=k.readdirSync(s).filter(f=>f.endsWith(".yaml")||f.endsWith(".yml")),t=Date.now()-10080*60*1e3,e=null,a=0,i=0,c=0,l=0,u=0;for(let f of o)try{let m=W(v.join(s,f));if(!m)continue;let g=m.timestamp;if(g){let h=new Date(g).getTime();(!e||h>new Date(e).getTime())&&(e=g),h>=t&&a++;}m.assessment&&(i++,typeof m.confidence=="number"&&typeof m.assessment_delta=="number"&&(c+=m.confidence,l+=Math.abs(m.assessment_delta),u++));}catch{}let d=u>0?Math.max(0,1-l/u):null;return {total:o.length,thisWeek:a,lastEntry:e,calibrationScore:d,assessed:i}}function zt(n){let s=v.join(n,".paradigm","tasks");if(!k.existsSync(s))return {total:0,inProgress:0,completed:0};let o=k.readdirSync(s).filter(e=>e.endsWith(".yaml")||e.endsWith(".yml")),r=0,t=0;for(let e of o)try{let a=W(v.join(s,e));if(!a)continue;let i=a.status;i==="in-progress"||i==="in_progress"?r++:(i==="completed"||i==="done")&&t++;}catch{}return {total:o.length,inProgress:r,completed:t}}function Yt(n){let s=["src","lib","packages"],o=0,r=0;for(let t of s){let e=v.join(n,t);k.existsSync(e)&&yt(e,{},a=>{o+=a.withPurpose,r+=a.total;});}return k.existsSync(v.join(n,".purpose"))&&(o++,r++),r===0?1:o/r}function yt(n,s,o){let r={withPurpose:0,total:0};try{let t=k.readdirSync(n,{withFileTypes:!0});t.some(a=>a.isFile()&&/\.(ts|tsx|js|jsx|rs|py|go|swift)$/.test(a.name))&&(r.total++,t.some(a=>a.isFile()&&a.name===".purpose")&&r.withPurpose++);for(let a of t)a.isDirectory()&&!a.name.startsWith(".")&&a.name!=="node_modules"&&a.name!=="dist"&&yt(v.join(n,a.name),r,i=>{r.withPurpose+=i.withPurpose,r.total+=i.total;});}catch{}o(r);}function Vt(n){let s=v.join(n,"portal.yaml");if(!k.existsSync(s))return 1;let o=W(s);return o?.routes?Object.keys(o.routes).length>0?1:.5:1}function Qt(n){let s=v.join(n,".paradigm","aspect-graph.db");return k.existsSync(s),1}function Xt(n){let s=v.join(n,".paradigm","config.yaml"),o=W(s);return {name:o?.project||v.basename(n),discipline:o?.discipline||"general"}}async function Zt(n,s){try{return (await pt(n).log({maxCount:s})).all.map(t=>({timestamp:t.date,type:"commit",summary:t.message.split(`
|
|
3
|
+
`)[0],symbol:te(t.message),link:t.hash.substring(0,7)}))}catch{return []}}function te(n){let s=n.match(/[#$^!~][\w-]+/);return s?s[0]:void 0}function ee(n,s){let o=v.join(n,".paradigm","lore","entries");if(!k.existsSync(o))return [];let r=k.readdirSync(o).filter(e=>e.endsWith(".yaml")||e.endsWith(".yml")),t=[];for(let e of r)try{let a=W(v.join(o,e));if(!a)continue;t.push({timestamp:a.timestamp||"",type:"lore",summary:a.title||e,symbol:Array.isArray(a.symbols_touched)?a.symbols_touched[0]:void 0,link:a.id});}catch{}return t.sort((e,a)=>new Date(a.timestamp).getTime()-new Date(e.timestamp).getTime()).slice(0,s)}function ht(n){return async(s,o)=>{try{let r=Xt(n),t=Ut(n),e=Bt(n),a=zt(n),i=Yt(n),c=Vt(n),l=Qt(n),u="unknown";try{u=(await pt(n).branch()).current;}catch{}let[d,f]=await Promise.all([Zt(n,20),Promise.resolve(ee(n,20))]),m=[...d,...f].sort((b,y)=>new Date(y.timestamp).getTime()-new Date(b.timestamp).getTime()).slice(0,20),g=e.lastEntry?Math.floor((Date.now()-new Date(e.lastEntry).getTime())/(1e3*60*60*24)):0,h={project:{name:r.name,branch:u,discipline:r.discipline},symbols:t,lore:{total:e.total,thisWeek:e.thisWeek,lastEntry:e.lastEntry},calibration:{score:e.calibrationScore,assessed:e.assessed},tasks:a,health:{purposeCoverage:i,aspectAnchors:l,gateCompliance:c,calibration:e.calibrationScore??1,loreFreshnessDays:g},recentActivity:m};o.json(h);}catch(r){o.status(500).json({error:"Failed to aggregate overview",detail:String(r)});}}}var re=/[#$^!~][\w-]+/g;function oe(n){let s=n.match(re);return s?[...new Set(s)]:[]}function bt(n){let s=Router(),o=pt(n);return s.get("/status",async(r,t)=>{try{let[e,a]=await Promise.all([o.status(),o.branch()]);t.json({branch:a.current,ahead:e.ahead,behind:e.behind,staged:e.staged,unstaged:e.modified.filter(i=>!e.staged.includes(i)),untracked:e.not_added});}catch(e){t.status(500).json({error:"Failed to get git status",detail:String(e)});}}),s.get("/branches",async(r,t)=>{try{let e=await o.branch(),a=Object.values(e.branches).map(i=>({name:i.name,current:i.current,commit:i.commit,label:i.label}));t.json({current:e.current,branches:a});}catch(e){t.status(500).json({error:"Failed to get branches",detail:String(e)});}}),s.get("/log",async(r,t)=>{try{let e=Math.min(parseInt(r.query.limit)||20,100),a=parseInt(r.query.offset)||0,i=await o.log({maxCount:e,"--skip":a}),c=i.all.map(l=>({hash:l.hash,shortHash:l.hash.substring(0,7),message:l.message,author:l.author_name,date:l.date,symbols:oe(l.message)}));t.json({commits:c,total:i.total});}catch(e){t.status(500).json({error:"Failed to get git log",detail:String(e)});}}),s.get("/diff",async(r,t)=>{try{let e=r.query.path,a=r.query.staged==="true",i=[];a&&i.push("--cached"),e&&i.push("--",e);let c=await o.diff(i);t.json({diff:c});}catch(e){t.status(500).json({error:"Failed to get diff",detail:String(e)});}}),s.post("/stage",async(r,t)=>{try{let{paths:e}=r.body;if(!e?.length){t.status(400).json({error:"paths is required"});return}await o.add(e),t.json({staged:e});}catch(e){t.status(500).json({error:"Failed to stage files",detail:String(e)});}}),s.post("/unstage",async(r,t)=>{try{let{paths:e}=r.body;if(!e?.length){t.status(400).json({error:"paths is required"});return}await o.reset(["HEAD","--",...e]),t.json({unstaged:e});}catch(e){t.status(500).json({error:"Failed to unstage files",detail:String(e)});}}),s.post("/commit",async(r,t)=>{try{let{message:e}=r.body;if(!e?.trim()){t.status(400).json({error:"message is required"});return}let a=await o.commit(e);t.json({hash:a.commit,summary:a.summary});}catch(e){t.status(500).json({error:"Failed to commit",detail:String(e)});}}),s.post("/push",async(r,t)=>{try{let e=await o.push();t.json({pushed:!0,branch:e.branch,remoteMessages:e.remoteMessages});}catch(e){t.status(500).json({error:"Failed to push",detail:String(e)});}}),s}function z(n){if(!k.existsSync(n))return [];try{let o=k.readFileSync(n,"utf-8").split(`
|
|
4
|
+
`).filter(t=>t.trim()),r=[];for(let t of o)try{r.push(JSON.parse(t));}catch{}return r}catch{return []}}function ie(n,s){let o=v.dirname(n);k.existsSync(o)||k.mkdirSync(o,{recursive:true});let r=s.map(t=>JSON.stringify(t)).join(`
|
|
5
|
+
`)+`
|
|
6
|
+
`;k.writeFileSync(n,r,"utf-8");}function ce(n){let s=n.match(/^(\d+)(m|h|d)$/);if(!s)return null;let o=parseInt(s[1],10),r=s[2],t=Date.now();switch(r){case "m":return new Date(t-o*60*1e3);case "h":return new Date(t-o*60*60*1e3);case "d":return new Date(t-o*24*60*60*1e3);default:return null}}function Rt(n,s){let o=Router(),r=v.join(n,".paradigm","events","stream.jsonl"),t=v.join(n,".paradigm","events","nominations.jsonl"),e=v.join(n,".paradigm","events","debates.jsonl"),a=v.join(n,".paradigm","data-policy.yaml");return o.get("/events",(i,c)=>{try{let{type:l,source:u,symbol:d,agent:f,since:m,limit:g}=i.query,h=g?parseInt(g,10):50,b=m?ce(m):null,y=z(r);l&&(y=y.filter(w=>w.type===l)),u&&(y=y.filter(w=>w.source===u)),d&&(y=y.filter(w=>w.symbol===d)),f&&(y=y.filter(w=>w.agent===f)),b&&(y=y.filter(w=>w.timestamp?new Date(w.timestamp).getTime()>=b.getTime():!1));let _=y.slice(-h);s.broadcast({type:"ambient:event",action:"query",count:_.length}),c.json(_);}catch(l){c.status(500).json({error:"Failed to query events",detail:String(l)});}}),o.get("/nominations",(i,c)=>{try{let{agent:l,urgency:u,pending_only:d,include_debates:f,limit:m}=i.query,g=m?parseInt(m,10):20,h=d!=="false",b=f==="true",y=z(t);l&&(y=y.filter(j=>j.agent===l)),u&&(y=y.filter(j=>j.urgency===u)),h&&(y=y.filter(j=>!j.engaged)),y=y.slice(-g);let _;if(b){let j=z(e);_=new Map;for(let F of j)if(F.nominationId){let J=_.get(F.nominationId)||[];J.push(F),_.set(F.nominationId,J);}}let w=y.map(j=>{let F={...j};return b&&_&&j.id&&(F.debates=_.get(j.id)||[]),F});c.json(w);}catch(l){c.status(500).json({error:"Failed to query nominations",detail:String(l)});}}),o.post("/nominations/:id/engage",(i,c)=>{try{let{id:l}=i.params,{response:u}=i.body;if(!u||!["accepted","dismissed","deferred"].includes(u)){c.status(400).json({error:"response must be one of: accepted, dismissed, deferred"});return}let d=z(t),f=d.findIndex(m=>m.id===l);if(f===-1){c.status(404).json({error:`Nomination not found: ${l}`});return}d[f]={...d[f],engaged:!0,response:u},ie(t,d),s.broadcast({type:"ambient:nomination",action:"engaged",nominationId:l,response:u}),c.json(d[f]);}catch(l){c.status(500).json({error:"Failed to engage nomination",detail:String(l)});}}),o.get("/stream",(i,c)=>{c.setHeader("Content-Type","text/event-stream"),c.setHeader("Cache-Control","no-cache"),c.setHeader("Connection","keep-alive"),c.flushHeaders();let l=0;try{l=k.statSync(r).size;}catch{}let d=setInterval(()=>{try{if(!k.existsSync(r))return;let f=k.statSync(r);if(f.size<=l)if(f.size<l)l=0;else return;let m=k.openSync(r,"r"),g=Buffer.alloc(f.size-l);k.readSync(m,g,0,g.length,l),k.closeSync(m),l=f.size;let b=g.toString("utf-8").split(`
|
|
7
|
+
`).filter(y=>y.trim());for(let y of b)try{let _=JSON.parse(y);c.write(`data: ${JSON.stringify(_)}
|
|
8
|
+
|
|
9
|
+
`);}catch{}}catch{}},1e3);c.write(`: connected
|
|
10
|
+
|
|
11
|
+
`),i.on("close",()=>{clearInterval(d);});}),o.get("/policy",(i,c)=>{try{if(k.existsSync(a)){let l=k.readFileSync(a,"utf-8"),u=L.load(l);c.json(u);}else c.json({version:"1.0",retention:{events:"30d",nominations:"90d",debates:"90d"},collection:{telemetry:!1,usage:!1},sharing:{external:!1}});}catch(l){c.status(500).json({error:"Failed to read data policy",detail:String(l)});}}),o}function ue(n){if(!k.existsSync(n))return [];try{return k.readFileSync(n,"utf-8").trim().split(`
|
|
12
|
+
`).filter(s=>s.trim()).map(s=>{try{return JSON.parse(s)}catch{return null}}).filter(s=>s!==null)}catch{return []}}function de(){let n=v.join(Y.homedir(),".paradigm","agents"),s=[];if(!k.existsSync(n))return s;for(let o of k.readdirSync(n).filter(r=>r.endsWith(".agent")))try{let r=k.readFileSync(v.join(n,o),"utf-8"),t=L.load(r);if(!t?.id)continue;let e=t.expertise||[];e.sort((a,i)=>i.confidence-a.confidence),s.push({id:t.id,role:t.role||t.id,nickname:t.nickname,benched:t.benched||!1,expertiseCount:e.length,topExpertise:e.slice(0,3).map(a=>({symbol:a.symbol,confidence:parseFloat(a.confidence.toFixed(2))})),threshold:t.attention?.threshold});}catch{}return s}function me(){let n=v.join(Y.homedir(),".paradigm","mail","agents");if(!k.existsSync(n))return [];let s=[];try{for(let t of k.readdirSync(n,{withFileTypes:!0})){if(!t.isDirectory())continue;let e=v.join(n,t.name);for(let a of ["inbox.jsonl","outbox.jsonl"]){let i=v.join(e,a),c=ue(i);for(let l of c)l.threadRoot?.startsWith("thr-orch-")&&(s.some(u=>u.id===l.id)||s.push({id:l.id,threadRoot:l.threadRoot,timestamp:l.timestamp,sender:{name:l.sender?.name||"unknown",role:l.sender?.role,project:l.sender?.project},intent:l.intent||"context",text:l.content?.text||"",symbols:l.symbols||[],diff:l.content?.diff,decision:l.content?.decision}));}}}catch{}let o=new Map;for(let t of s){let e=t.threadRoot;o.has(e)||o.set(e,[]),o.get(e).push(t);}let r=[];for(let[t,e]of o){e.sort((l,u)=>l.timestamp.localeCompare(u.timestamp));let i=t.replace("thr-orch-","").split("-"),c=i[0]?`Team ${i[0]}`:t;r.push({id:t,displayName:c,messages:e,lastActivity:e[e.length-1]?.timestamp||""});}return r.sort((t,e)=>e.lastActivity.localeCompare(t.lastActivity)),r}function kt(n){let s=Router();return s.get("/roster",(o,r)=>{try{let t=de(),e=t.filter(i=>!i.benched),a=t.filter(i=>i.benched);r.json({active:e,benched:a,total:t.length});}catch(t){r.status(500).json({error:"Failed to load roster",detail:String(t)});}}),s.get("/threads",(o,r)=>{try{let t=me();r.json({threads:t,count:t.length});}catch(t){r.status(500).json({error:"Failed to load threads",detail:String(t)});}}),s.patch("/agents/:id/bench",(o,r)=>{try{let{id:t}=o.params,{benched:e}=o.body,a=v.join(Y.homedir(),".paradigm","agents"),i=v.join(a,`${t}.agent`);if(!k.existsSync(i)){r.status(404).json({error:`Agent "${t}" not found`});return}let c=k.readFileSync(i,"utf-8"),l=L.load(c);l.benched=e,l.updated=new Date().toISOString(),k.writeFileSync(i,L.dump(l,{lineWidth:120,noRefs:!0,sortKeys:!1}),"utf-8"),r.json({id:t,benched:e,updated:l.updated});}catch(t){r.status(500).json({error:"Failed to update agent",detail:String(t)});}}),s}var vt=["open","in-progress","done","shelved","active","all"],jt=["archetype","human","peer"];function pe(n){if(typeof n!="string")return;let s=parseInt(n,10);return Number.isFinite(s)&&s>0?s:void 0}function wt(n){let s=Router();return s.get("/",async(o,r)=>{try{let{loadTasks:t}=await import('./task-loader-EIXPKHA3.js'),e=typeof o.query.status=="string"?o.query.status:void 0,a=typeof o.query.priority=="string"?o.query.priority:void 0,i=typeof o.query.claimantRef=="string"?o.query.claimantRef:void 0,c=typeof o.query.claimantKind=="string"?o.query.claimantKind:void 0,l={status:vt.includes(e)?e:"active",limit:pe(o.query.limit)??100};(a==="high"||a==="medium"||a==="low")&&(l.priority=a),typeof o.query.tag=="string"&&(l.tag=o.query.tag),i&&(l.claimant={ref:i,kind:jt.includes(c)?c:void 0});let u=await t(n,l),{loadLearnedTokenTable:d,estimateForTask:f,classifyTaskLocal:m}=await import('./orchestration-4MJKBSGM.js'),g=d(n),h=u.map(b=>({...b,estimate:f(g,b),taskType:m(b.blurb).type}));r.json({tasks:h,count:h.length,filter:l});}catch(t){r.status(500).json({error:"Failed to load tasks",detail:String(t)});}}),s.get("/board",async(o,r)=>{try{let{assembleCaptainBoard:t}=await import('./captain-J4FZ5PRU.js'),e=await t(n,{proposeClaimants:!0}),{loadLearnedTokenTable:a,estimateForTask:i,classifyTaskLocal:c}=await import('./orchestration-4MJKBSGM.js'),l=a(n);for(let u of e.runs??[])for(let d of u.nodes??[])d.estimate=i(l,{blurb:d.blurb,claimant:d.claimant}),d.taskType=c(d.blurb).type;for(let u of e.unclaimed??[]){let d=u.proposedClaimant?.kind==="archetype"?u.proposedClaimant.ref:void 0;u.estimate=i(l,{blurb:u.blurb},d),u.taskType=c(u.blurb).type;}for(let u of e.loose??[])u.estimate=i(l,{blurb:u.blurb,claimant:u.claimant}),u.taskType=c(u.blurb).type;r.json(e);}catch(t){r.status(500).json({error:"Failed to assemble board",detail:String(t)});}}),s.get("/calibration",async(o,r)=>{try{let{assembleCalibrationGrid:t}=await import('./orchestration-4MJKBSGM.js');r.json(t(n));}catch(t){r.status(500).json({error:"Failed to assemble calibration grid",detail:String(t)});}}),s.get("/whoami",async(o,r)=>{try{let{currentHumanRef:t}=await import('./task-PRLQ4VPK.js');r.json({kind:"human",ref:t()});}catch(t){r.status(500).json({error:"Failed to resolve identity",detail:String(t)});}}),s.get("/inbox",async(o,r)=>{try{let t=typeof o.query.ref=="string"?o.query.ref:void 0;if(!t){r.status(400).json({error:"inbox requires a `ref` query param (the claimant ref)"});return}let e=typeof o.query.kind=="string"?o.query.kind:void 0,a=jt.includes(e)?e:void 0,i=typeof o.query.status=="string"?o.query.status:void 0,c=vt.includes(i)?i:void 0,{tasksForClaimant:l}=await import('./task-loader-EIXPKHA3.js'),u=await l(n,{kind:a,ref:t},{status:c}),{loadLearnedTokenTable:d,estimateForTask:f,classifyTaskLocal:m}=await import('./orchestration-4MJKBSGM.js'),g=d(n),h=u.map(b=>({...b,estimate:f(g,b),taskType:m(b.blurb).type}));r.json({claimant:{kind:a,ref:t},tasks:h,count:h.length});}catch(t){r.status(500).json({error:"Failed to load inbox",detail:String(t)});}}),s.get("/:id",async(o,r)=>{try{let{loadTask:t}=await import('./task-loader-EIXPKHA3.js'),e=await t(n,o.params.id);if(!e){r.status(404).json({error:`Task "${o.params.id}" not found`});return}let{loadLearnedTokenTable:a,estimateForTask:i,classifyTaskLocal:c}=await import('./orchestration-4MJKBSGM.js'),l=a(n);r.json({...e,estimate:i(l,e),taskType:c(e.blurb).type});}catch(t){r.status(500).json({error:"Failed to load task",detail:String(t)});}}),s}function ye(n){return (n??[]).find(s=>/^[#$^!~]/.test(s))??(n??[])[0]}function Tt(n,s){let o=Router(),r=()=>import('./task-loader-EIXPKHA3.js'),t=(e,a,i)=>{import('./sync-layer-C2PF273N.js').then(({projectTransition:c})=>c(n,e,a,{reason:i})).catch(()=>{});};return o.post("/:id/claim",async(e,a)=>{try{let{loadTask:i,updateTask:c}=await r(),l=await i(n,e.params.id);if(!l){a.status(404).json({error:`Task "${e.params.id}" not found`});return}let{ref:u,kind:d,force:f}=e.body;if(!u){a.status(400).json({error:"claim requires a `ref`"});return}let m=d??"archetype",g=l.claimant;if(g&&(g.kind==="human"||g.kind==="peer")&&m==="archetype"&&!f){a.status(409).json({error:`Task is claimed by ${g.kind} ${g.ref}; an archetype claim cannot displace it`,claimant:g});return}if(!await c(n,e.params.id,{claimant:{kind:m,ref:u}})){a.status(500).json({error:"claim write failed"});return}t(e.params.id,"claim"),a.json({claimed:!0,id:e.params.id,claimant:{kind:m,ref:u}});}catch(i){a.status(500).json({error:"Failed to claim task",detail:String(i)});}}),o.post("/:id/start",async(e,a)=>{try{let{updateTask:i}=await r();if(!await i(n,e.params.id,{status:"in-progress"})){a.status(409).json({error:"start rejected \u2014 task not found or illegal transition (must be open)"});return}t(e.params.id,"start"),a.json({started:!0,id:e.params.id});}catch(i){a.status(500).json({error:"Failed to start task",detail:String(i)});}}),o.post("/:id/done",async(e,a)=>{try{let{loadTask:i,completeTask:c}=await r(),l=await i(n,e.params.id);if(!l){a.status(404).json({error:`Task "${e.params.id}" not found`});return}if(!await c(n,e.params.id)){a.status(409).json({error:"done rejected \u2014 illegal transition (already terminal?)"});return}let d=ye(l.tags);d&&!s.userState.isMuted()&&s.broadcast({type:"agent:annotate",annotation:{type:"badge",message:"done",symbol:d,severity:"success",id:`settle-${e.params.id}`}}),t(e.params.id,"done"),a.json({done:!0,id:e.params.id,annotated:!!d});}catch(i){a.status(500).json({error:"Failed to complete task",detail:String(i)});}}),o.post("/:id/block",async(e,a)=>{try{let{updateTask:i}=await r(),{reason:c}=e.body;if(!c){a.status(400).json({error:"block requires a `reason`"});return}if(!await i(n,e.params.id,{blocked_on:c})){a.status(404).json({error:`Task "${e.params.id}" not found`});return}t(e.params.id,"block",c),a.json({blocked:!0,id:e.params.id,reason:c});}catch(i){a.status(500).json({error:"Failed to block task",detail:String(i)});}}),o.post("/:id/unblock",async(e,a)=>{try{let{updateTask:i}=await r();if(!await i(n,e.params.id,{blocked_on:void 0})){a.status(404).json({error:`Task "${e.params.id}" not found`});return}t(e.params.id,"unblock"),a.json({unblocked:!0,id:e.params.id});}catch(i){a.status(500).json({error:"Failed to unblock task",detail:String(i)});}}),o.post("/sync",async(e,a)=>{try{let{syncTask:i,syncAllLinked:c}=await import('./sync-layer-C2PF273N.js'),{ids:l}=e.body??{},u=Array.isArray(l)&&l.length>0?await Promise.all(l.map(m=>i(n,m))):await c(n),d=u.filter(m=>m.status==="synced");d.length>0&&!s.userState.isMuted()&&s.broadcast({type:"tasks:synced",count:d.length,ids:d.map(m=>m.taskId)});let f={synced:u.filter(m=>m.status==="synced").length,conflict:u.filter(m=>m.status==="conflict").length,agree:u.filter(m=>m.status==="agree").length,skipped:u.filter(m=>["offline","remote-error","unlinked","no-pull"].includes(m.status)).length};a.json({summary:f,verdicts:u});}catch(i){a.status(500).json({error:"Failed to sync",detail:String(i)});}}),o}var be=fileURLToPath(import.meta.url),At=v.dirname(be),R={component(n){let s=x.magenta(`#${n}`);return {info:(o,r)=>{let t=r?x.gray(` ${Object.entries(r).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.log(`${x.blue("i")} ${s} ${o}${t}`);},success:(o,r)=>{let t=r?x.gray(` ${Object.entries(r).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.log(`${x.green("+")} ${s} ${o}${t}`);},warn:(o,r)=>{let t=r?x.gray(` ${Object.entries(r).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.log(`${x.yellow("!")} ${s} ${o}${t}`);},error:(o,r)=>{let t=r?x.gray(` ${Object.entries(r).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.error(`${x.red("x")} ${s} ${o}${t}`);}}}};function _t(n){let s=["overview","tasks","lore","graph","git","ambient","team"],o=n.sections??[...s,"sentinel","university","symphony","docs"],r=new Set;for(let t of o){if(s.includes(t)){r.add(t);continue}if(t==="sentinel"){let e=v.join(n.projectDir,".paradigm");k.existsSync(e)&&r.add(t);}else if(t==="university")r.add(t);else if(t==="symphony"){let e=v.join(process.env.HOME||"~",".paradigm","score");k.existsSync(e)&&r.add(t);}else r.add(t);}return r}function Se(n){let s=Q(),o=_t(n);s.use(Q.json()),s.use((t,e,a)=>{if(e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),t.method==="OPTIONS"){e.sendStatus(204);return}a();}),s.use("/api/lore",nt(n.projectDir)),s.use("/api/info",rt(n.projectDir)),s.use("/api/sessions",dt(n.projectDir)),s.use("/api/symbols",a(n.projectDir)),s.use("/api/graphs",b(n.projectDir)),s.get("/api/platform/overview",ht(n.projectDir)),s.use("/api/git",bt(n.projectDir)),s.get("/api/platform/health",(t,e)=>{e.json({status:"ok",timestamp:new Date().toISOString(),sections:Array.from(o)});}),s.get("/api/platform/sections",(t,e)=>{e.json({sections:Array.from(o)});}),s.get("/api/health",(t,e)=>{e.json({status:"ok",timestamp:new Date().toISOString()});}),s.set("agentRouterSlot",true);let r=v.join(At,"..","platform-ui","dist");return k.existsSync(r)||(r=v.join(At,"..","..","platform-ui","dist")),k.existsSync(r)?(s.use(Q.static(r)),s.get("{*path}",(t,e,a)=>{t.path.startsWith("/api")?a():e.sendFile(v.join(r,"index.html"));})):s.get("/",(t,e)=>{e.send(`
|
|
13
|
+
<html>
|
|
14
|
+
<head><title>Paradigm Platform</title></head>
|
|
15
|
+
<body style="background:#0d1117;color:#e6edf3;font-family:system-ui;display:flex;align-items:center;justify-content:center;height:100vh;margin:0">
|
|
16
|
+
<div style="text-align:center">
|
|
17
|
+
<h1 style="font-size:2rem;margin-bottom:8px">Paradigm Platform</h1>
|
|
18
|
+
<p style="color:#8b949e">UI not built yet. Run <code style="background:#21262d;padding:4px 8px;border-radius:4px">cd platform-ui && npx vite build</code></p>
|
|
19
|
+
<p style="color:#8b949e;margin-top:16px">APIs available:</p>
|
|
20
|
+
<p><a href="/api/lore" style="color:#58a6ff">/api/lore</a> · <a href="/api/symbols" style="color:#58a6ff">/api/symbols</a> · <a href="/api/platform/health" style="color:#58a6ff">/api/platform/health</a></p>
|
|
21
|
+
</div>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
|
24
|
+
`);}),s}async function ln(n){let s=Se(n),o=_t(n);R.component("platform-server").info("Starting Paradigm Platform",{port:n.port}),R.component("platform-server").info("Project directory",{path:n.projectDir}),R.component("platform-server").info("Sections",{enabled:Array.from(o).join(", ")});let r=Pt.createServer(s),t=mt(r);if(s.use("/api/platform/agent-command",ft(t)),s.use("/api/ambient",Rt(n.projectDir,t)),s.use("/api/team",kt(n.projectDir)),s.use("/api/tasks",wt(n.projectDir)),s.use("/api/tasks",Tt(n.projectDir,t)),process.env.PARADIGM_SYNC_POLL!=="off"){let e=Math.max(3e4,parseInt(process.env.PARADIGM_SYNC_POLL_MS||"120000",10)||12e4),a=false;setInterval(async()=>{if(!a){a=true;try{let{syncAllLinked:c}=await import('./sync-layer-C2PF273N.js'),l=await c(n.projectDir),u=l.filter(f=>f.status==="synced"),d=l.filter(f=>f.status==="conflict");u.length>0&&(t.broadcast({type:"tasks:synced",count:u.length,ids:u.map(f=>f.taskId),source:"poll"}),R.component("platform-server").info("GitHub sync poll applied changes",{changed:u.length})),d.length>0&&t.broadcast({type:"tasks:sync-conflict",count:d.length,ids:d.map(f=>f.taskId)});}catch{}finally{a=false;}}},e).unref?.();}if(o.has("sentinel"))try{let{createSentinelBridge:e}=await import('./sentinel-bridge-D4LFDFCH.js'),a=await e(n.projectDir,t.broadcast);a&&(s.use("/api/sentinel",a),R.component("platform-server").success("Sentinel routes mounted"));}catch{R.component("platform-server").warn("Sentinel not available");}if(o.has("symphony"))try{let{createSymphonyRouter:e}=await import('./symphony-VDNDFK7H.js');s.use("/api/symphony",e(n.projectDir,t.broadcast)),R.component("platform-server").success("Symphony routes mounted");}catch{R.component("platform-server").warn("Symphony routes failed to mount");}if(o.has("docs"))try{let{createDocsRouter:e}=await import('./docs-EDQ2STFK.js');s.use("/api/docs",e(n.projectDir)),R.component("platform-server").success("Docs routes mounted");}catch{R.component("platform-server").warn("Docs routes failed to mount");}if(o.has("university"))try{let{createUniversityRouter:e}=await import('./university-FJ7OCOA3.js');s.use("/api/university",e(n.projectDir)),R.component("platform-server").success("University routes mounted");}catch{R.component("platform-server").warn("University routes failed to mount");}return new Promise((e,a)=>{r.listen(n.port,()=>{R.component("platform-server").success("Platform running",{url:`http://localhost:${n.port}`}),R.component("platform-ws").success("WebSocket ready",{url:`ws://localhost:${n.port}/ws`}),console.log(""),console.log(x.gray(" Sections:"));for(let i of o)console.log(x.gray(` ${x.cyan("\u25CF")} ${i}`));console.log(""),n.open&&import('open').then(i=>{i.default(`http://localhost:${n.port}`),R.component("platform-server").info("Opened browser");}).catch(()=>{R.component("platform-server").warn("Could not open browser automatically");}),e();}),r.on("error",i=>{i.code==="EADDRINUSE"?R.component("platform-server").error("Port already in use",{port:n.port}):R.component("platform-server").error("Server error",{error:i.message}),a(i);});})}
|
|
25
|
+
export{Se as createPlatformApp,ln as startPlatformServer};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export{n as getReindexToolsList,o as handleReindexTool,p as rebuildStaticFiles}from'./chunk-
|
|
2
|
+
export{n as getReindexToolsList,o as handleReindexTool,p as rebuildStaticFiles}from'./chunk-5VR7FKS5.js';import'./chunk-3F4QP2Z5.js';import'./chunk-M4UMM6DC.js';import'./chunk-TMDPDIWA.js';import'./chunk-GRZQIKST.js';import'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{n as getReindexToolsList,o as handleReindexTool,p as rebuildStaticFiles}from'./chunk-L3AOKDMU.js';import'./chunk-VR2LLUYE.js';import'./chunk-M7JHVVDW.js';import'./chunk-ACJWUOMA.js';import'./chunk-M4UMM6DC.js';import'./chunk-33ERV2MW.js';import'./chunk-GRZQIKST.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-4TXOVRWD.js';import'./chunk-D6BSCELB.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import'./chunk-5TAVYPOV.js';import o from'chalk';async function g(i,l){let t=i||process.cwd(),r=parseInt(l.port||"3838",10),a=l.open!==false;console.log(o.cyan(`
|
|
3
3
|
Starting Sentinel...
|
|
4
|
-
`));try{let{startServer:n}=await import('./server-
|
|
4
|
+
`));try{let{startServer:n}=await import('./server-K7G3IHR3.js');console.log(o.gray(`Project: ${t}`)),console.log(o.gray(`Port: ${r}`)),console.log(),await n({port:r,projectDir:t,open:a}),console.log(o.green(`
|
|
5
5
|
Sentinel is running at http://localhost:${r}`)),console.log(o.gray(`
|
|
6
6
|
Press Ctrl+C to stop
|
|
7
7
|
`)),await new Promise(()=>{});}catch(n){let e=n.code,s=n.message||"";e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"?(console.error(o.red(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-5TAVYPOV.js';import {Router}from'express';import c from'chalk';var m={component(s){let o=c.magenta(`#${s}`);return {info:r=>console.log(`${c.blue("i")} ${o} ${r}`),success:r=>console.log(`${c.green("+")} ${o} ${r}`),warn:r=>console.log(`${c.yellow("!")} ${o} ${r}`),error:r=>console.error(`${c.red("x")} ${o} ${r}`)}}};async function O(s,o){try{let w=function(t,u){let b={type:"sentinel:log",entry:t};u&&!u.known&&(b.validation=u),o(b),(t.symbolType==="signal"||t.symbolType==="gate"||t.symbolType==="flow")&&o({type:"sentinel:flow_event",flowId:t.symbolType==="flow"?t.symbol:void 0,nodeSymbol:t.symbol,event:t.symbolType,timestamp:t.timestamp,service:t.service});},y=function(t){o({type:"sentinel:event",event:t});};var r=w,B=y;let g=await import('./server-
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import {Router}from'express';import c from'chalk';var m={component(s){let o=c.magenta(`#${s}`);return {info:r=>console.log(`${c.blue("i")} ${o} ${r}`),success:r=>console.log(`${c.green("+")} ${o} ${r}`),warn:r=>console.log(`${c.yellow("!")} ${o} ${r}`),error:r=>console.error(`${c.red("x")} ${o} ${r}`)}}};async function O(s,o){try{let w=function(t,u){let b={type:"sentinel:log",entry:t};u&&!u.known&&(b.validation=u),o(b),(t.symbolType==="signal"||t.symbolType==="gate"||t.symbolType==="flow")&&o({type:"sentinel:flow_event",flowId:t.symbolType==="flow"?t.symbol:void 0,nodeSymbol:t.symbol,event:t.symbolType,timestamp:t.timestamp,service:t.service});},y=function(t){o({type:"sentinel:event",event:t});};var r=w,B=y;let g=await import('./server-K7G3IHR3.js'),{SentinelStorage:R,loadServerConfig:f,loadSymbolIndex:p,PARADIGM_SCHEMA:S,SYMPHONY_SCHEMA:v,createLogsRouter:$,createServicesRouter:h,createStateRouter:k,createMetricsRouter:A,createTracesRouter:C,createSchemasRouter:I,createEventsRouter:M,createSymbolsRouter:T,createInfoRouter:x,createCommitsRouter:P,createIncidentsRouter:L,createPatternsRouter:E,createAuthMiddleware:H,createRateLimiter:_}=g,n=new R;await n.ensureReady(),n.registerSchema(S),n.registerSchema(v),m.component("sentinel-bridge").info("Registered builtin schemas");let l=f(s),d=[];try{d=await p(s);}catch{m.component("sentinel-bridge").warn("Could not load symbol index");}let e=Router(),i=H(l.auth),a=_(l.rateLimit);return e.use("/logs",a,i("write"),$({storage:n,serverConfig:l,onLogReceived:w,symbolIndex:d})),e.use("/services",a,i("write"),h({storage:n})),e.use("/state",a,i("write"),k({storage:n})),e.use("/metrics",a,i("write"),A({storage:n,serverConfig:l})),e.use("/traces",a,i("write"),C({storage:n})),e.use("/schemas",a,i("write"),I({storage:n})),e.use("/events",a,i("write"),M({storage:n,serverConfig:l,onEventReceived:y})),e.use("/symbols",T(s)),e.use("/info",x(s)),e.use("/commits",P(s)),e.use("/incidents",L(s)),e.use("/patterns",E(s)),e}catch{return m.component("sentinel-bridge").warn("Sentinel package not available \u2014 skipping"),null}}export{O as createSentinelBridge};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import o from'chalk';var g=10;async function f(t){let c=process.cwd(),n=parseInt(t.port||"3850",10),l=t.open!==false,p=t.sections?t.sections.split(",").map(r=>r.trim()):void 0,a=t.port!==void 0;console.log(o.cyan(`
|
|
3
|
+
Starting Paradigm Platform...
|
|
4
|
+
`));let{startPlatformServer:d}=await import('./platform-server-IOWHNS7Q.js'),s=a?1:g;for(let r=0;r<s;r++){let e=n+r;try{await d({port:e,projectDir:c,open:l,sections:p}),console.log(o.green(` Platform running at ${o.bold(`http://localhost:${e}`)}`)),console.log(o.gray(` Press Ctrl+C to stop
|
|
5
|
+
`)),await new Promise(()=>{});return}catch(i){if(i.code==="EADDRINUSE"){if(r<s-1){console.log(o.gray(` Port ${e} in use, trying ${e+1}...`));continue}console.error(o.red(`
|
|
6
|
+
Error: Port ${e} is already in use.`)),console.log(a?o.gray(` Try a different port: paradigm serve --port ${e+1}
|
|
7
|
+
`):o.gray(` Tried ports ${n}-${n+s-1}; all in use.
|
|
8
|
+
`));}else console.error(o.red(`
|
|
9
|
+
Failed to start Platform:`),i);process.exit(1);}}}export{f as serveCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a,g as g$1,h,i}from'./chunk-NKYNHSA5.js';export{h as PARADIGM_SCHEMA,i as SYMPHONY_SCHEMA,a as SentinelStorage,g as loadServerConfig}from'./chunk-NKYNHSA5.js';import'./chunk-5TAVYPOV.js';import L,{Router}from'express';import*as D from'http';import*as p from'path';import*as g from'fs';import {fileURLToPath}from'url';import y from'chalk';import {WebSocketServer,WebSocket}from'ws';import z from'simple-git';import {v4}from'uuid';var K=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",M={debug:0,info:1,warn:2,error:3};function w(n){return M[n]>=M[K]}function S(n){if(!n)return "";let o=Object.entries(n).map(([s,t])=>`${s}=${typeof t=="string"?t:JSON.stringify(t)}`).join(" ");return y.gray(` ${o}`)}var f={component(n){let o=y.magenta(`#${n}`);return {debug:(s,t)=>{w("debug")&&console.log(`${y.gray("\u25CB")} ${o} ${s}${S(t)}`);},info:(s,t)=>{w("info")&&console.log(`${y.blue("\u2139")} ${o} ${s}${S(t)}`);},warn:(s,t)=>{w("warn")&&console.log(`${y.yellow("\u26A0")} ${o} ${s}${S(t)}`);},error:(s,t)=>{w("error")&&console.error(`${y.red("\u2716")} ${o} ${s}${S(t)}`);}}},flow(n){let o=y.yellow(`$${n}`);return {debug:(s,t)=>{w("debug")&&console.log(`${y.gray("\u25CB")} ${o} ${s}${S(t)}`);},info:(s,t)=>{w("info")&&console.log(`${y.blue("\u2139")} ${o} ${s}${S(t)}`);},warn:(s,t)=>{w("warn")&&console.log(`${y.yellow("\u26A0")} ${o} ${s}${S(t)}`);},error:(s,t)=>{w("error")&&console.error(`${y.red("\u2716")} ${o} ${s}${S(t)}`);}}}},N=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);async function Q(n){let o=p.join(n,".paradigm","config.yaml");if(!g.existsSync(o)){let s=p.join(n,"package.json");if(g.existsSync(s))try{return {name:JSON.parse(g.readFileSync(s,"utf-8")).name}}catch{}return {}}try{let s=g.readFileSync(o,"utf-8"),t={},e=s.match(/^name:\s*(.+)$/m);e&&(t.name=e[1].trim().replace(/^["']|["']$/g,""));let r=s.match(/^discipline:\s*(.+)$/m);r&&(t.discipline=r[1].trim());let a=s.match(/^version:\s*(.+)$/m);return a&&(t.version=a[1].trim()),t}catch(s){return f.component("config-loader").error("Failed to load Paradigm config",{error:String(s)}),{}}}async function X(n){try{let{aggregateFromDirectory:o}=await import('./dist-
|
|
2
|
+
import {a,g as g$1,h,i}from'./chunk-NKYNHSA5.js';export{h as PARADIGM_SCHEMA,i as SYMPHONY_SCHEMA,a as SentinelStorage,g as loadServerConfig}from'./chunk-NKYNHSA5.js';import'./chunk-5TAVYPOV.js';import L,{Router}from'express';import*as D from'http';import*as p from'path';import*as g from'fs';import {fileURLToPath}from'url';import y from'chalk';import {WebSocketServer,WebSocket}from'ws';import z from'simple-git';import {v4}from'uuid';var K=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",M={debug:0,info:1,warn:2,error:3};function w(n){return M[n]>=M[K]}function S(n){if(!n)return "";let o=Object.entries(n).map(([s,t])=>`${s}=${typeof t=="string"?t:JSON.stringify(t)}`).join(" ");return y.gray(` ${o}`)}var f={component(n){let o=y.magenta(`#${n}`);return {debug:(s,t)=>{w("debug")&&console.log(`${y.gray("\u25CB")} ${o} ${s}${S(t)}`);},info:(s,t)=>{w("info")&&console.log(`${y.blue("\u2139")} ${o} ${s}${S(t)}`);},warn:(s,t)=>{w("warn")&&console.log(`${y.yellow("\u26A0")} ${o} ${s}${S(t)}`);},error:(s,t)=>{w("error")&&console.error(`${y.red("\u2716")} ${o} ${s}${S(t)}`);}}},flow(n){let o=y.yellow(`$${n}`);return {debug:(s,t)=>{w("debug")&&console.log(`${y.gray("\u25CB")} ${o} ${s}${S(t)}`);},info:(s,t)=>{w("info")&&console.log(`${y.blue("\u2139")} ${o} ${s}${S(t)}`);},warn:(s,t)=>{w("warn")&&console.log(`${y.yellow("\u26A0")} ${o} ${s}${S(t)}`);},error:(s,t)=>{w("error")&&console.error(`${y.red("\u2716")} ${o} ${s}${S(t)}`);}}}},N=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);async function Q(n){let o=p.join(n,".paradigm","config.yaml");if(!g.existsSync(o)){let s=p.join(n,"package.json");if(g.existsSync(s))try{return {name:JSON.parse(g.readFileSync(s,"utf-8")).name}}catch{}return {}}try{let s=g.readFileSync(o,"utf-8"),t={},e=s.match(/^name:\s*(.+)$/m);e&&(t.name=e[1].trim().replace(/^["']|["']$/g,""));let r=s.match(/^discipline:\s*(.+)$/m);r&&(t.discipline=r[1].trim());let a=s.match(/^version:\s*(.+)$/m);return a&&(t.version=a[1].trim()),t}catch(s){return f.component("config-loader").error("Failed to load Paradigm config",{error:String(s)}),{}}}async function X(n){try{let{aggregateFromDirectory:o}=await import('./dist-6TDAY6TQ-HMSTBL57.js');f.flow("load-symbols").info("Using premise-core aggregator",{path:n});let s=await o(n),t={};for(let e of s.symbols)t[e.type]=(t[e.type]||0)+1;if(f.flow("load-symbols").info("Aggregation complete",{total:s.symbols.length,...t,purposeFiles:s.purposeFiles.length,portalFiles:s.portalFiles.length}),s.errors.length>0)for(let e of s.errors)f.component("aggregator").warn("Aggregation error",{source:e.source,file:e.filePath,message:e.message});for(let e of s.purposeFiles)f.component("purpose-loader").info("Loaded .purpose file",{file:p.relative(n,e)});for(let e of s.portalFiles)f.component("gate-loader").info("Loaded portal.yaml",{file:p.relative(n,e)});return s.symbols}catch(o){return f.component("premise-core").warn("premise-core not available, using fallback scanner",{error:o instanceof Error?o.message:String(o)}),null}}async function F(n){f.flow("load-symbols").info("Loading symbols",{projectDir:n});let o=p.join(n,".paradigm","index.json");if(g.existsSync(o))try{f.component("index-loader").info("Found cached index",{path:o});let t=g.readFileSync(o,"utf-8"),e=JSON.parse(t),r=Array.isArray(e.entries)?e.entries:Array.isArray(e)?e:null;if(r)return f.flow("load-symbols").info("Loaded from cached index",{count:r.length}),r}catch(t){f.component("index-loader").error("Failed to load cached index",{error:String(t)});}return await X(n)||(f.flow("load-symbols").info("Using fallback scanner"),Z(n))}async function Z(n){let o=[],s=new Set,t=["src","lib","packages","apps","."];for(let r of t){let a=p.join(n,r);g.existsSync(a)&&await _(a,o,s,n);}let e=p.join(n,"portal.yaml");if(g.existsSync(e)){f.component("gate-loader").debug("Found portal.yaml",{path:"portal.yaml"});try{let r=g.readFileSync(e,"utf-8").match(/^gates:\s*\n((?: .+\n)*)/m);if(r){let a=r[1].matchAll(/^ ([a-z][a-z0-9-]*):/gm);for(let i of a){let c=i[1],l=`gate-${c}`;s.has(l)||(s.add(l),o.push({id:l,symbol:`^${c}`,type:"gate",source:"portal",filePath:"portal.yaml",data:{},references:[],referencedBy:[]}),f.component("gate-loader").debug("Extracted gate",{symbol:`^${c}`}));}}}catch(r){f.component("gate-loader").error("Failed to parse portal.yaml",{error:String(r)});}}return f.flow("load-symbols").info("Fallback scan complete",{count:o.length}),o}async function _(n,o,s,t){let e=["node_modules",".git","dist","build",".paradigm","coverage",".next",".svelte-kit"],r;try{r=g.readdirSync(n,{withFileTypes:!0});}catch{return}for(let a of r){let i=p.join(n,a.name);if(a.isDirectory())e.includes(a.name)||await _(i,o,s,t);else if(a.name===".purpose"){let c=p.relative(t,i);f.component("purpose-loader").debug("Scanning .purpose file",{path:c});try{let l=g.readFileSync(i,"utf-8"),d=ee(l,i,t);for(let u of d)s.has(u.id)||(s.add(u.id),o.push(u),f.component("purpose-loader").debug("Extracted symbol",{symbol:u.symbol,type:u.type,file:c}));}catch(l){f.component("purpose-loader").error("Failed to parse .purpose file",{path:c,error:String(l)});}}}}function ee(n,o,s){let t=[],e=p.relative(s,o),r=n.matchAll(/(?:^|\s)#([a-z][a-z0-9-]*)/gm);for(let d of r){let u=d[1];t.push({id:`component-${u}`,symbol:`#${u}`,type:"component",source:"purpose",filePath:e,data:{},description:te(n,`#${u}`),references:re(n),referencedBy:[],tags:se(n)});}let a=n.matchAll(/\$([a-z][a-z0-9-]*)/gm);for(let d of a){let u=d[1],m=`$${u}`;if(N.has(m)){f.component("purpose-loader").debug("Skipping blocklisted symbol",{symbol:m});continue}t.find(j=>j.symbol===m)||t.push({id:`flow-${u}`,symbol:m,type:"flow",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}let i=n.matchAll(/!([a-z][a-z0-9-]*)/gm);for(let d of i){let u=d[1];t.find(m=>m.symbol===`!${u}`)||t.push({id:`signal-${u}`,symbol:`!${u}`,type:"signal",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}let c=n.matchAll(/\^([a-z][a-z0-9-]*)/gm);for(let d of c){let u=d[1];t.find(m=>m.symbol===`^${u}`)||t.push({id:`gate-${u}`,symbol:`^${u}`,type:"gate",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}let l=n.matchAll(/~([a-z][a-z0-9-]*)/gm);for(let d of l){let u=d[1];t.find(m=>m.symbol===`~${u}`)||t.push({id:`aspect-${u}`,symbol:`~${u}`,type:"aspect",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}return t}function te(n,o){let s=new RegExp(`${o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*[-:]?\\s*(.+)`,"m"),t=n.match(s);if(t&&t[1])return t[1].trim()}function re(n){let o=new Set,s=n.matchAll(/[@#$!^~]([a-z][a-z0-9-]*)/g);for(let t of s){let e=t[0];N.has(e)||o.add(e);}return Array.from(o)}function se(n){let o=n.match(/tags:\s*\[([^\]]+)\]/);return o?o[1].split(",").map(s=>s.trim().replace(/^["']|["']$/g,"")):[]}async function oe(n){return (await F(n)).length}async function ne(n,o,s){let t=(await F(n)).find(r=>r.id===o);if(!t)return {success:false,error:"Symbol not found"};let e=p.join(n,t.filePath);if(!g.existsSync(e))return {success:false,error:"Source file not found"};try{let r=g.readFileSync(e,"utf-8"),a=!1;if(s.description!==void 0){let i=t.symbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=new RegExp(`(${i})\\s*[-:]?\\s*(.*)`,"m");if(r.match(c)){let l=s.description?`${t.symbol}: ${s.description}`:t.symbol;r=r.replace(c,l),a=!0;}}if(s.tags!==void 0){let i=s.tags.length>0?`tags: [${s.tags.map(l=>`"${l}"`).join(", ")}]`:"",c=/^tags:\s*\[[^\]]*\]\s*$/m;if(c.test(r))i?r=r.replace(c,i):r=r.replace(c,""),a=!0;else if(i){let l=t.symbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(`(${l}[^\\n]*\\n)`,"m");r.match(d)&&(r=r.replace(d,`$1${i}
|
|
3
3
|
`),a=!0);}}if(a){r=r.replace(/\n{3,}/g,`
|
|
4
4
|
|
|
5
5
|
`),g.writeFileSync(e,r,"utf-8"),f.component("symbol-updater").info("Updated symbol",{symbol:t.symbol,file:t.filePath});let i=p.join(n,".paradigm","index.json");if(g.existsSync(i))try{let c=g.readFileSync(i,"utf-8"),l=JSON.parse(c),d=Array.isArray(l.entries)?l.entries:l,u=d.findIndex(m=>m.id===o);u>=0&&(s.description!==void 0&&(d[u].description=s.description),s.tags!==void 0&&(d[u].tags=s.tags),Array.isArray(l.entries)?(l.entries=d,g.writeFileSync(i,JSON.stringify(l,null,2),"utf-8")):g.writeFileSync(i,JSON.stringify(d,null,2),"utf-8"));}catch{}return {success:!0}}return {success:!0}}catch(r){return f.component("symbol-updater").error("Failed to update symbol",{error:String(r)}),{success:false,error:"Failed to write file"}}}var ae=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",k=n=>{let o={debug:0,info:1,warn:2,error:3};return o[n]>=o[ae]},q={gate(n){let o=y.cyan(`^${n}`);return {info:(s,t)=>{if(k("info")){let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.log(`${y.blue("\u2139")} ${o} ${s}${e}`);}},error:(s,t)=>{if(k("error")){let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.error(`${y.red("\u2716")} ${o} ${s}${e}`);}}}}};function ie(n){let o=Router();return o.get("/",async(s,t)=>{try{let e=await F(n);q.gate("api-symbols").info("Symbols loaded",{count:e.length}),t.json({symbols:e});}catch(e){q.gate("api-symbols").error("Failed to load symbols",{error:String(e)}),t.status(500).json({error:"Failed to load symbols"});}}),o.put("/:id",async(s,t)=>{try{let{id:e}=s.params,r=s.body;if(q.gate("api-symbols").info("Update requested",{id:e,updates:JSON.stringify(r)}),r.tags&&!Array.isArray(r.tags)){t.status(400).json({error:"Tags must be an array"});return}let a=await ne(n,e,r);if(a.success){let i=(await F(n)).find(c=>c.id===e);q.gate("api-symbols").info("Symbol updated",{id:e}),t.json({success:!0,symbol:i});}else q.gate("api-symbols").error("Update failed",{id:e,error:a.error}),t.status(400).json({success:!1,error:a.error});}catch(e){q.gate("api-symbols").error("Failed to update symbol",{error:String(e)}),t.status(500).json({error:"Failed to update symbol"});}}),o}function le(n){let o=Router();return o.get("/",async(s,t)=>{try{let e=await Q(n),r=await oe(n);t.json({projectName:e.name||null,discipline:e.discipline||null,symbolCount:r,projectDir:n});}catch(e){console.error("Failed to load project info:",e),t.status(500).json({error:"Failed to load project info"});}}),o}function J(n){let o=new Set;for(let s of n){if(s.endsWith(".purpose")){let r=p.dirname(s),a=p.basename(r);r.includes("features/")||r.includes("routes/")||r.includes("api/")?o.add(`@${a}`):r.includes("components/")||r.includes("lib/")||r.includes("utils/")?o.add(`#${a}`):r.includes("middleware/")||r.includes("auth/")||r.includes("guards/")?o.add(`^${a}`):(r.includes("flows/")||r.includes("workflows/"))&&o.add(`$${a}`);}s.includes("portal.yaml")&&o.add("^portal");let t=s.match(/features\/([^/]+)/);t&&o.add(`@${t[1]}`);let e=s.match(/components\/([^/]+)/);e&&o.add(`#${e[1]}`);}return Array.from(o)}async function ce(n,o={}){let s=z(n);if(!await s.checkIsRepo())return [];try{let t={maxCount:o.limit||100};o.since&&(t["--since"]=o.since);let e=await s.log(t),r=[];for(let a of e.all){let i=[],c=[];try{i=(await s.diffSummary([`${a.hash}^`,a.hash])).files.map(l=>l.file),c=J(i);}catch{}r.push({hash:a.hash,shortHash:a.hash.slice(0,7),date:a.date,author:a.author_name,message:a.message.split(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$5,d as d$3,b as b$2,e as e$1,f}from'./chunk-Z72SDTBJ.js';import {b}from'./chunk-
|
|
2
|
+
import {a as a$5,d as d$3,b as b$2,e as e$1,f}from'./chunk-Z72SDTBJ.js';import {b}from'./chunk-KA6QEI3C.js';import'./chunk-YNFF7XHV.js';import'./chunk-TYWB5IQJ.js';import'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import'./chunk-ECLUYHAR.js';import {d as d$2}from'./chunk-YXLGVOZO.js';import'./chunk-Y4XFVDZC.js';import {a as a$7}from'./chunk-DH7QVZDI.js';import {d as d$1}from'./chunk-6VZSOQ7Y.js';import {a as a$4,b as b$1}from'./chunk-GE3GQALR.js';import'./chunk-MBKTVQS2.js';import'./chunk-EK4ZRIFJ.js';import {a as a$8}from'./chunk-ZSWXLFN7.js';import'./chunk-EKZDFEJW.js';import {a as a$2}from'./chunk-27EK3OQZ.js';import {b as b$3}from'./chunk-Y76OIMDO.js';import'./chunk-4TXOVRWD.js';import'./chunk-VCKKJDLP.js';import'./chunk-WR6D3SC6.js';import {a as a$3}from'./chunk-UIKLE3WD.js';import {a as a$6}from'./chunk-UZ5H7K6Q.js';import'./chunk-LPBCQM5Y.js';import'./chunk-D6BSCELB.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-YNDPSWOE.js';import'./chunk-VIG5LSGZ.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as a from'fs';import*as ne from'os';import*as d from'path';import e from'chalk';import Se from'ora';import*as h from'js-yaml';import*as C from'fs/promises';var ae=[{path:".paradigm/config.yaml",defaultContent:['version: "2.0"','project: ""','description: ""','initialized: ""'].join(`
|
|
3
3
|
`)+`
|
|
4
4
|
`},{path:".paradigm/agents.yaml",defaultContent:['version: "1.0"',"agents: []"].join(`
|
|
5
5
|
`)+`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b as b$1}from'./chunk-
|
|
2
|
+
import {b as b$1}from'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import {d}from'./chunk-ECLUYHAR.js';import {e}from'./chunk-YXLGVOZO.js';import {d as d$1}from'./chunk-EKZDFEJW.js';import'./chunk-5TAVYPOV.js';import*as b from'path';import r from'chalk';import x from'ora';async function J(t,m,o){let f=m?b.resolve(m):process.cwd();if(!o.task){o.json?console.log(JSON.stringify({error:'Task is required. Use --task "..."'})):(console.log(r.red(`
|
|
3
3
|
Task is required. Use --task "..."`)),console.log(r.gray(`Example: paradigm team spawn architect --task "Design the payment API"
|
|
4
4
|
`)));return}let a=e(f);if(!a){o.json?console.log(JSON.stringify({error:"Team not configured"})):console.log(r.yellow("\nTeam not configured. Run `paradigm team init` first.\n"));return}if(!a.agents[t]){o.json?console.log(JSON.stringify({error:`Unknown agent: ${t}`,available:Object.keys(a.agents)})):(console.log(r.red(`
|
|
5
5
|
Unknown agent: ${t}`)),console.log(r.gray(`Available agents: ${Object.keys(a.agents).join(", ")}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a}from'./chunk-RPGSQQTS.js';import {b as b$1}from'./chunk-NFN5UUJB.js';import {f,d,c,j,k,i}from'./chunk-MBKTVQS2.js';import {b,a as a$1}from'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';b();var v="(blocked on GitHub)";function S(a,e){let t={taskId:a.id,kind:"agree",drift:[]},n=e.labels.map(r=>r.toLowerCase()),i;e.status==="closed"?i=e.closedReason==="not-planned"?"shelved":"done":(a.status==="done"||a.status==="shelved")&&(i="open"),i&&i!==a.status&&(c(a.status,i)?(t.kind="apply",t.targetStatus=i):(t.kind="conflict",t.drift.push(`GitHub implies "${i}" but the task is "${a.status}" \u2014 illegal transition, local wins. `+(i==="done"?"Reopen the task first, or close the issue once the work is really done.":"Resolve manually."))));let s=n.includes("blocked");return s&&!a.blocked_on?(t.blocked={set:v},t.kind==="agree"&&(t.kind="apply")):!s&&a.blocked_on===v&&(t.blocked={clear:true},t.kind==="agree"&&(t.kind="apply")),e.assignees.length>0&&!a.claimant?t.drift.push(`GitHub assignee ${e.assignees.join(", ")} \u2014 not reflected locally (assignee\u2192claimant is advisory; claim it locally to own it).`):e.assignees.length===0&&a.claimant?.kind==="human"&&t.drift.push(`Local claimant ${a.claimant.ref} has no GitHub assignee.`),t}var u="in progress",h="blocked";async function P(a){if(a==="github")try{await import('./github-GI3HX3N5.js');}catch{}return b$1(a)}async function o(a,e,t){try{await t();}catch(n){a$1.component("#task-sync").warn(`sync action failed: ${a}`,{taskId:e,error:n instanceof Error?n.message:String(n)});}}async function G(a$2,e,t,n={}){try{let i=await f(a$2,e),s=i?.external_ref;if(!i||!s?.provider)return;let r=await P(s.provider);if(!r||!r.capabilities().push||!await r.isAvailable())return;switch(t){case "claim":{a(i.claimant).assignee?await o("assignee",e,()=>r.edit?.(s,{addAssignee:"@me"})):i.claimant&&await o("agent-label",e,()=>r.edit?.(s,{addLabels:[`paradigm:${i.claimant.kind}/${i.claimant.ref}`]}));break}case "start":await o("label:in-progress",e,()=>r.edit?.(s,{addLabels:[u]}));break;case "done":await o("label:rm-in-progress",e,()=>r.edit?.(s,{removeLabels:[u]})),await o("close:completed",e,()=>r.close?.(s));break;case "shelved":await o("close:not-planned",e,()=>r.close?.(s,"not-planned"));break;case "reopen":await o("reopen",e,()=>r.reopen?.(s)),await o("label:rm-in-progress",e,()=>r.edit?.(s,{removeLabels:[u]}));break;case "block":await o("label:blocked",e,()=>r.edit?.(s,{addLabels:[h]})),n.reason&&await o("comment:blocked",e,()=>r.comment?.(s,`Blocked: ${n.reason}`));break;case "unblock":await o("label:rm-blocked",e,()=>r.edit?.(s,{removeLabels:[h]}));break}}catch(i){a$1.component("#task-sync").warn("projectTransition failed (non-fatal)",{taskId:e,error:i instanceof Error?i.message:String(i)});}}async function L(a,e,t){let n=false;if(t.targetStatus&&t.targetStatus!==e.status&&(t.targetStatus==="done"?n=await j(a,e.id):t.targetStatus==="shelved"?n=await k(a,e.id):n=await i(a,e.id,{status:t.targetStatus})),t.blocked){let i$1=await i(a,e.id,{blocked_on:t.blocked.clear?void 0:t.blocked.set});n=n||i$1;}return n}async function R(a,e){let t=await f(a,e),n=t?.external_ref;if(!t||!n?.provider)return {taskId:e,status:"unlinked",drift:[]};let i=await P(n.provider);if(!i?.capabilities().pull||!i.pull)return {taskId:e,status:"no-pull",drift:[]};if(!await i.isAvailable())return {taskId:e,status:"offline",drift:[]};let s;try{s=await i.pull(n);}catch(l){return a$1.component("#task-sync").warn("pull failed",{taskId:e,error:l instanceof Error?l.message:String(l)}),{taskId:e,status:"remote-error",drift:[]}}let r=S(t,s);if(r.kind==="conflict")return {taskId:e,status:"conflict",drift:r.drift};if(r.kind==="agree")return {taskId:e,status:"agree",drift:r.drift};let p=await L(a,t,r);return {taskId:e,status:p?"synced":"agree",targetStatus:r.targetStatus,drift:r.drift}}async function O(a){let t=(await d(a,{status:"all",limit:9999})).filter(i=>i.external_ref?.provider==="github"),n=[];for(let i of t)try{n.push(await R(a,i.id));}catch(s){n.push({taskId:i.id,status:"remote-error",drift:[String(s)]});}return n}export{G as projectTransition,O as syncAllLinked,R as syncTask};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {d,h,i,c as c$1,j as j$1,k}from'./chunk-MBKTVQS2.js';import'./chunk-EK4ZRIFJ.js';import {d as d$1,h as h$1,b,e,c,a,f,g}from'./chunk-WR6D3SC6.js';import'./chunk-5TAVYPOV.js';import {execSync}from'child_process';import*as P from'fs';import*as N from'os';import*as O from'path';import*as M from'js-yaml';function y(r){return r.project?O.resolve(r.project):process.cwd()}function j(){try{let r=execSync("git config user.email",{encoding:"utf-8",timeout:3e3}).trim();if(r)return r}catch{}try{let r=N.userInfo().username;if(r)return r}catch{}return "unknown"}function R(){return {kind:"human",ref:j()}}function m(r){let e=r.match(/-(\d+)$/);return e?e[1]:r}function G(r){return r.status==="done"||r.status==="shelved"}function U(r,e){if(!r.claimant)return "";let{kind:n,ref:t}=r.claimant;return n==="human"&&t===e?"you":t}function z(r,e){if(r.blocked_on)return true;for(let n of r.dependsOn||[]){let t=e.get(n);if(t&&!G(t))return true}return false}function H(r){return r.status==="in-progress"?"\u25B8":r.priority==="low"?"\u25CB":"\u25CF"}function E(r){let e=(r.tags||[]).join(", ");return `[${e?`${r.priority} \xB7 ${e}`:r.priority}]`}async function W(r,e){let n=await d(e,{status:"all",limit:9999});if(r==="@last"){let i=j(),c=n.filter(d=>d.claimant?.kind==="human"&&d.claimant.ref===i).sort((d,a)=>(a.created||"").localeCompare(d.created||""));return c.length===0?{errorMessage:"No tasks created by you yet \u2014 `@last` has nothing to resolve."}:{task:c[0]}}if(/^T-\d{4}-\d{2}-\d{2}-\d+$/.test(r)){let i=n.find(c=>c.id===r);return i?{task:i}:{errorMessage:`No task with id ${r}.`}}let t=n.filter(i=>i.status==="open"||i.status==="in-progress");if(/^\d+$/.test(r)){let i=parseInt(r,10),c=t.filter(d=>{let a=d.id.match(/-(\d+)$/);return a&&parseInt(a[1],10)===i});if(c.length===1)return {task:c[0]};if(c.length>1)return {errorMessage:`Suffix "${r}" is ambiguous across dates \u2014 use a full id:`,candidates:c.map(d=>` ${d.id} ${d.blurb}`)}}let o=r.toLowerCase(),s=t.filter(i=>i.blurb.toLowerCase().includes(o));return s.length===1?{task:s[0]}:s.length>1?{errorMessage:`"${r}" matches ${s.length} active tasks \u2014 be more specific:`,candidates:s.map(i=>` ${m(i.id)} ${i.blurb}`)}:{errorMessage:`No active task matches "${r}".`}}async function v(r,e){let n=await W(r,e);if(!n.task){d$1(n.errorMessage||`Could not resolve "${r}".`);for(let t of n.candidates||[])a(t);process.exit(1);}return n.task}async function nt(r,e$1){let n=y(e$1);if(e$1.fromThread){await K(n,e$1);return}let t=r.join(" ").trim();t||(d$1("Nothing to add \u2014 provide a blurb: `paradigm task add fix the parser`"),process.exit(1));let o=F(e$1.priority),s=e$1.tag||[],i$1=await h(n,{blurb:t,priority:o,tags:s,claimant:R()});if(e$1.start&&await i(n,i$1,{status:"in-progress"}),e$1.json){h$1({id:i$1});return}b(`${i$1} added`),e(`${t} ${E({priority:o,tags:s})}`),e$1.start&&e("\u2192 in-progress");}function F(r){return r==="high"||r==="low"?r:"medium"}async function K(r,e$1){let n=await import('fs'),{parseThread:t}=await import('./thread-2A7QKU72.js'),o=O.join(r,".paradigm","thread.md");if(!n.existsSync(o)){c("No thread.md found \u2014 nothing to import.");return}let i=t(n.readFileSync(o,"utf8")).looseEnds||[];if(i.length===0){a("No loose ends in thread.md.");return}let c$1=[];for(let d of i){let a=await h(r,{blurb:d,priority:"medium",tags:["from-thread"],claimant:R()});c$1.push({id:a,blurb:d});}if(e$1.json){h$1({created:c$1.map(d=>d.id)});return}f(`Imported ${c$1.length} loose end${c$1.length===1?"":"s"} as tasks`);for(let d of c$1)b(`${d.id} ${d.blurb}`);e("Thread.md was NOT cleared. Run `paradigm thread clear` once you have verified these.");}var V={active:"active",open:"open",done:"done",shelved:"shelved",all:"all"};async function st(r,e$1){let n=y(e$1);if(e$1.board){await q(n,e$1);return}let t=V[r||"active"];t||(d$1(`Unknown status "${r}" \u2014 use active | open | done | shelved | all.`),process.exit(1));let o=e$1.limit?parseInt(e$1.limit,10):20,s=j(),i=await d(n,{status:t,priority:e$1.priority,tag:e$1.tag,limit:9999});e$1.mine&&(i=i.filter(a=>a.claimant?.kind==="human"&&a.claimant.ref===s));let c=new Map,d$2=await d(n,{status:"all",limit:9999});for(let a of d$2)c.set(a.id,a);if(i=i.slice(0,o),e$1.json){h$1(i);return}if(i.length===0){e("No tasks.");return}if(t==="active"){let a$1=i.filter(l=>l.status==="in-progress"),f$1=i.filter(l=>l.status==="open");if(a$1.length>0){f("IN PROGRESS");for(let l of a$1)a(A(l,s,c));}if(f$1.length>0){f("OPEN");for(let l of f$1)a(A(l,s,c));}return}f(t.toUpperCase());for(let a$1 of i)a(A(a$1,s,c));}function A(r,e,n){let t=H(r),o=m(r.id).padStart(3," "),s=U(r,e),i=s?` (${s})`:"",c=z(r,n)?" \u26D4 blocked":"";return ` ${t} ${o} ${r.blurb}${i} ${E(r)}${c}`}async function q(r,e){let{assembleCaptainBoard:n}=await import('./captain-J4FZ5PRU.js'),t=await n(r,{proposeClaimants:true});if(e.json){h$1(t);return}let o=j();f(`BOARD \u2014 ${t.summary.runs} run(s), ${t.summary.open} open, ${t.summary.inFlight} in flight, ${t.summary.unclaimed} unclaimed`);for(let s of t.runs){f(`\u25B6 ${s.blurb} [${s.runStatus}]`);for(let i of s.nodes){let c=i.stage!==void 0?`s${i.stage} `:"",d=i.claimant?` (${i.claimant.kind==="human"&&i.claimant.ref===o?"you":i.claimant.ref})`:"",a$1=i.fragileSymbols.length>0?` \u26A0 ${i.fragileSymbols.join(", ")}`:"";a(` ${c}${m(i.taskId)} ${i.blurb} [${i.status}]${d}${a$1}`);}}if(t.unclaimed.length>0){f("UNCLAIMED");for(let s of t.unclaimed){let i=s.proposedClaimant?` \u2192 ${s.proposedClaimant.ref}?`:"";a(` ${m(s.taskId)} ${s.blurb} [${s.priority}]${i}`);}}}async function _(r,e,n,t){try{let{projectTransition:o}=await import('./sync-layer-C2PF273N.js');await o(r,e,n,{reason:t});}catch{}}async function it(r,e$1){let n=y(e$1),t=await v(r,n);if(c$1(t.status,"in-progress")||(d$1(`Cannot start ${m(t.id)} \u2014 it is ${t.status}.`),process.exit(1)),await i(n,t.id,{status:"in-progress"}),await _(n,t.id,"start"),e$1.json){h$1({id:t.id,status:"in-progress"});return}b(`${m(t.id)} \u2192 in-progress`),e(t.blurb);}async function ot(r,e$1){let n=y(e$1),t=await v(r,n);c$1(t.status,"done")||(d$1(`Cannot complete ${m(t.id)} \u2014 it is ${t.status}.`),process.exit(1)),await j$1(n,t.id),await _(n,t.id,"done");let o=[];if(e$1.ripple!==false&&(o=await J(t,n)),e$1.json){h$1({id:t.id,status:"done",...o.length?{ripple:o}:{}});return}b(`${m(t.id)} \u2713 done`),e(t.blurb),o.length>0&&e(`\u21AF touches: ${o.join(", ")}`),t.related_lore&&t.related_lore.length>0&&e(`lore: ${t.related_lore.join(", ")}`);}async function J(r,e){let n=(r.tags||[]).filter(t=>/^[#$^!~]/.test(t));if(n.length===0)return [];try{let{aggregateFromDirectory:t,buildSymbolIndex:o,getSymbol:s}=await import('./dist-PW5YPGFF.js'),i=await t(e),c=o(i),d=new Set;for(let a of n){let f=s(c,a);if(f)for(let l of f.referencedBy||[])d.add(l);}return Array.from(d).sort()}catch{return []}}async function at(r,e$1){let n=y(e$1),t=await v(r,n);if(c$1(t.status,"shelved")||(d$1(`Cannot shelve ${m(t.id)} \u2014 it is ${t.status}.`),process.exit(1)),await k(n,t.id),await _(n,t.id,"shelved"),e$1.json){h$1({id:t.id,status:"shelved"});return}b(`${m(t.id)} shelved`),e(t.blurb);}async function ct(r,e$1){let n=y(e$1),{syncTask:t,syncAllLinked:o}=await import('./sync-layer-C2PF273N.js'),s=r?[await t(n,(await v(r,n)).id)]:await o(n);if(e$1.json){h$1({verdicts:s});return}if(s.length===0){e("No GitHub-linked tasks to sync.");return}let i=s.filter(a=>a.status==="synced"),c$1=s.filter(a=>a.status==="conflict");for(let a of i)b(`${m(a.taskId)} synced${a.targetStatus?` \u2192 ${a.targetStatus}`:""}`);for(let a of c$1){c(`${m(a.taskId)} conflict (local wins)`);for(let f of a.drift)e(` ${f}`);}let d=s.filter(a=>["offline","remote-error","unlinked","no-pull"].includes(a.status));d.some(a=>a.status==="offline")&&e("GitHub unavailable for some tasks \u2014 `gh auth login` to enable."),a(""),e(`${i.length} synced \xB7 ${c$1.length} conflict \xB7 ${s.filter(a=>a.status==="agree").length} unchanged \xB7 ${d.length} skipped`);}async function dt(r,e){let n=y(e),t=await v(r,n);if(e.json){h$1(t);return}if(f(t.id),g("blurb",t.blurb),g("status",t.status),g("priority",t.priority),t.tags&&t.tags.length>0&&g("tags",t.tags.join(", ")),t.claimant&&g("claimant",`${t.claimant.kind}:${t.claimant.ref}`),g("created",t.created),t.started_at&&g("started",t.started_at),t.completed&&g("completed",t.completed),t.shelved&&g("shelved",t.shelved),t.parentTaskId&&g("parent",t.parentTaskId),t.dependsOn&&t.dependsOn.length>0&&g("depends",t.dependsOn.join(", ")),t.blocked_on&&g("blocked_on",t.blocked_on),t.related_lore&&t.related_lore.length>0&&g("lore",t.related_lore.join(", ")),t.external_ref){let o=t.external_ref;g("external",`${o.provider}:${o.ref}${o.url?` (${o.url})`:""}`);}}async function lt(r,e$1){let n=y(e$1),t=await v(r,n),o={},s=[];if(e$1.blurb!==void 0&&(o.blurb=e$1.blurb,s.push(`blurb \u2192 "${e$1.blurb}"`)),e$1.priority!==void 0&&(o.priority=F(e$1.priority),s.push(`priority \u2192 ${o.priority}`)),e$1.tag!==void 0&&(o.tags=e$1.tag,s.push(`tags \u2192 [${o.tags.join(", ")}]`)),e$1.addTag!==void 0&&e$1.addTag.length>0){let c=o.tags??t.tags??[],d=Array.from(new Set([...c,...e$1.addTag]));o.tags=d,s.push(`+tags [${e$1.addTag.join(", ")}]`);}if(e$1.reopen&&(c$1(t.status,"open")||(d$1(`Cannot reopen ${m(t.id)} \u2014 it is ${t.status}.`),process.exit(1)),o.status="open",s.push("status \u2192 open")),s.length===0){c("Nothing to edit \u2014 pass -b/-p/-t/--add-tag/--reopen.");return}if(await i(n,t.id,o)||(d$1(`Edit rejected for ${m(t.id)} (illegal transition or task not found).`),process.exit(1)),e$1.reopen&&await _(n,t.id,"reopen"),e$1.json){h$1({id:t.id,changed:s});return}b(`${m(t.id)} edited`);for(let c of s)e(` ${c}`);}function Q(r){let e=r.toLowerCase();return e.includes("github.com")||/^[^/\s]+\/[^/#\s]+#\d+$/.test(r)?"github":(e.startsWith("http://")||e.startsWith("https://"),"url")}async function ut(r,e$1,n){let t=y(n),o=await v(r,t),s=n.provider||Q(e$1),i$1=/^https?:\/\//i.test(e$1),c={provider:s,ref:e$1,...i$1?{url:e$1}:{}};if(await i(t,o.id,{external_ref:c})||(d$1(`Link rejected for ${m(o.id)} (task not found).`),process.exit(1)),n.json){h$1({id:o.id,external_ref:c});return}b(`${m(o.id)} linked`),e(`${s}: ${e$1}`);}function X(r){try{let e=O.join(r,".paradigm","config.yaml");if(!P.existsSync(e))return {};let t=M.load(P.readFileSync(e,"utf8"))?.sync;return t?{provider:t.provider,repo:t.github?.repo}:{}}catch{return {}}}async function ft(r,e$1){let n=y(e$1),t=await v(r,n),o=X(n),s=e$1.provider||o.provider;if(!s){c("No sync provider configured \u2014 task left local-only."),e("Add a `sync:` block to .paradigm/config.yaml (e.g. provider: github, github: { repo: owner/repo }) or pass --provider.");return}let{getProvider:i$1}=await import('./registry-NEW4OJ44.js');s==="github"&&await import('./github-GI3HX3N5.js');let c$1=i$1(s);if(!c$1){c(`No provider registered for "${s}" \u2014 task left local-only.`),e("Known provider at this phase: github.");return}let d=c$1,a=e$1.repo||o.repo;if(s==="github"&&a){let{GithubProvider:l}=await import('./github-GI3HX3N5.js');d=new l({repo:a});}let f=false;try{f=await d.isAvailable();}catch{f=false;}if(!f){c(`${s} is not available \u2014 task left local-only.`),s==="github"&&e("Authenticate with `gh auth login`, then retry.");return}try{let l=await d.push(t),C={provider:s,ref:l.ref,...l.url?{url:l.url}:{},syncedAt:new Date().toISOString()};if(await i(n,t.id,{external_ref:C}),e$1.json){h$1({id:t.id,external_ref:C});return}b(`${m(t.id)} pushed \u2192 ${l.ref}`),l.url&&e(l.url);}catch(l){d$1(`Push to ${s} failed \u2014 task left untouched locally.`),e(l instanceof Error?l.message:String(l)),process.exitCode=1;}}function Y(r){let e=new Set;for(let n of (r||"").split(",")){let t=n.trim();t&&e.add(t);}return e}async function mt(r){try{let e=y(r),n=Y(r.symbols);if(n.size===0)return;let o=(await d(e,{status:"all",limit:9999})).filter(f=>f.external_ref?.provider?(f.tags||[]).some(l=>n.has(l)):!1);if(o.length===0)return;let{getProvider:s}=await import('./registry-NEW4OJ44.js');new Set(o.map(f=>f.external_ref.provider)).has("github")&&await import('./github-GI3HX3N5.js');let c=(r.hash||"").slice(0,7)||"(unknown)",d$1=Array.from(n).join(", "),a=`Commit ${c}: touched ${d$1}`;for(let f of o){let l=f.external_ref;try{let C=s(l.provider);if(!C||!C.capabilities().comment)continue;await C.comment(l,a);}catch{}}}catch{}}
|
|
3
|
+
export{j as currentHumanRef,W as resolveRef,nt as taskAddCommand,ot as taskDoneCommand,lt as taskEditCommand,ut as taskLinkCommand,st as taskLsCommand,ft as taskPushCommand,at as taskShelveCommand,dt as taskShowCommand,it as taskStartCommand,ct as taskSyncCommand,mt as taskSyncCommitCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{c as assertTransition,j as completeTask,h as createTask,b as generateTaskId,f as loadTask,d as loadTasks,a as normalizeTask,l as rebuildTaskIndex,k as shelveTask,e as tasksForClaimant,i as updateTask,g as validateTaskDag}from'./chunk-MBKTVQS2.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{c as assertTransition,j as completeTask,h as createTask,b as generateTaskId,f as loadTask,d as loadTasks,a as normalizeTask,l as rebuildTaskIndex,k as shelveTask,e as tasksForClaimant,i as updateTask,g as validateTaskDag}from'./chunk-SD3KVW5Q.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a as a$1}from'./chunk-VOPJ47QY.js';import {d,f as f$1}from'./chunk-SD3KVW5Q.js';import {b as b$1,a}from'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';import*as f from'fs';import*as h from'path';b$1();var E=".paradigm/events/settlement-liveness.jsonl",b=30,P=new Set(["done","shelved","crashed"]);function _(t){return P.has(t)}function A(t){return _(t.status)||!!t.crashed_at}function T(t,n){try{let s=h.join(t,E);f.mkdirSync(h.dirname(s),{recursive:!0}),f.appendFileSync(s,JSON.stringify(n)+`
|
|
3
|
+
`,"utf8");}catch(s){a.component("#task-settlement").warn("Failed to append liveness record",{parentTaskId:n.parentTaskId,error:s instanceof Error?s.message:String(s)});}}function N(t){return Object.values(t).every(n=>n==="skipped"||n==="ok")}function R(){let t=process.env.PARADIGM_REAPER_STALE_MINUTES;return (t&&!Number.isNaN(Number(t))?Number(t):b)*60*1e3}async function O(t){let n=Date.now(),s=R(),a$1=[],d$1;try{d$1=await d(t,{status:"in-progress",limit:9999});}catch{return a$1}let{updateTask:o}=await import('./task-loader-LFEE6OU7.js');for(let i of d$1){if(i.status!=="in-progress"||i.crashed_at)continue;let u=i.started_at?new Date(i.started_at).getTime():NaN;if(Number.isNaN(u)||n-u<s)continue;let r=new Date().toISOString();await o(t,i.id,{status:"shelved",crashed_at:r,crash_reason:"reaper:stale-in-progress",shelved:r})&&(a$1.push(i.id),a.component("#task-settlement").warn("Reaped stale in-progress task",{taskId:i.id,startedAt:i.started_at,reason:"reaper:stale-in-progress"}));}return a$1}async function M(t,n,s){if(!n)return;try{await O(t);}catch(r){a.component("#task-settlement").warn("Reaper pass failed (non-fatal)",{error:r instanceof Error?r.message:String(r)});}let a$1=await f$1(t,n);if(!a$1){a.component("#task-settlement").warn("Orphan task: parent failed to load",{parentTaskId:n,orphanChildId:s,reason:"orphan:missing-parent"});let r=s?await f$1(t,s):null;if(r&&r.settledAt)return;await v(t,n,"orphan",r??void 0,true);return}if(a$1.settledAt)return;let d$1=(await d(t,{status:"all",limit:9999})).filter(r=>r.parentTaskId===a$1.id);if(d$1.length===0||!d$1.every(A))return;let o=d$1.some(r=>r.crashed_at),i=d$1.some(r=>r.status==="shelved"&&!r.crashed_at),u=o?"crashed":i?"shelved":"done";await v(t,a$1.id,u,a$1);}async function v(t,n,s,a$2,d=false){let o={recordWorkLog:"skipped",runPostflightLearning:"skipped",autoPromoteJournalEntries:"skipped"},i=0,u=0,r=a$2?.claimant?.ref;if(!r||r==="orchestrator")try{let{loadTasks:e}=await import('./task-loader-LFEE6OU7.js'),l=(await e(t,{status:"all",limit:9999})).filter(p=>p.parentTaskId===n&&p.claimant?.kind==="archetype"),c=new Map;for(let p of l)c.set(p.claimant.ref,(c.get(p.claimant.ref)??0)+1);let g=[...c.entries()].sort((p,y)=>y[1]-p[1])[0];g&&(r=g[0]);}catch{}r=r??"orchestrator";try{try{let{recordWorkLog:e}=await import('./work-log-loader-DL5GZ2BQ.js');e(t,{agent:r,task_ref:n,summary:`Settlement of task DAG ${n} (${s})`,outcome:s==="done"?"pass":"partial",symbols_touched:[]}),o.recordWorkLog="ok";}catch(e){o.recordWorkLog="threw",a.component("#task-settlement").warn("Settlement stage threw: recordWorkLog",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}try{let{runPostflightLearning:e}=await import('./ambient-OW5M5LVN.js'),l=await e(t,{claimant:r});i=l.journalsWritten??0,u=l.promoted??0,o.runPostflightLearning="ok";}catch(e){o.runPostflightLearning="threw",a.component("#task-settlement").warn("Settlement stage threw: runPostflightLearning",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}try{let{autoPromoteJournalEntries:e}=await import('./nomination-engine-YRHZZZUN.js'),l=e(t,r);u+=l.promoted??0,o.autoPromoteJournalEntries="ok";}catch(e){o.autoPromoteJournalEntries="threw",a.component("#task-settlement").warn("Settlement stage threw: autoPromoteJournalEntries",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}try{let{rebuildLearnedTable:e}=await import('./calibration-aggregate-DUEE3LL2.js'),l=e(t);l&&a.component("#calibration").info("Calibration refreshed on settle",{parentTaskId:n,samplesRead:l.samplesRead,learnedCells:l.groups.filter(c=>c.learned).length});}catch(e){a.component("#calibration").warn("Aggregate-on-settle failed (non-fatal)",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}}finally{let e=N(o),l={ts:new Date().toISOString(),parentTaskId:n,settledAs:s,stages:o,journalsWritten:i,promoted:u,chainLive:e};if(T(t,l),e){let c=Object.values(o).filter(g=>g==="ok").length;a$1(t,{verdicts:c,source:"settlement"});}if(a$2)try{let{updateTask:c}=await import('./task-loader-LFEE6OU7.js'),g={settledAt:new Date().toISOString()};s==="crashed"&&(g.crash_reason=a$2.crash_reason??"reaper:stale-in-progress"),d&&(g.orphaned=!0),await c(t,a$2.id,g);}catch(c){a.component("#task-settlement").warn("Failed to stamp settledAt",{parentTaskId:n,error:c instanceof Error?c.message:String(c)});}}}export{_ as isTerminal,O as reapStaleInProgress,M as settleParentIfComplete};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a as a$1}from'./chunk-VOPJ47QY.js';import {d,f as f$1}from'./chunk-MBKTVQS2.js';import {b as b$1,a}from'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';import*as f from'fs';import*as h from'path';b$1();var E=".paradigm/events/settlement-liveness.jsonl",b=30,P=new Set(["done","shelved","crashed"]);function _(t){return P.has(t)}function A(t){return _(t.status)||!!t.crashed_at}function T(t,n){try{let s=h.join(t,E);f.mkdirSync(h.dirname(s),{recursive:!0}),f.appendFileSync(s,JSON.stringify(n)+`
|
|
3
|
+
`,"utf8");}catch(s){a.component("#task-settlement").warn("Failed to append liveness record",{parentTaskId:n.parentTaskId,error:s instanceof Error?s.message:String(s)});}}function N(t){return Object.values(t).every(n=>n==="skipped"||n==="ok")}function R(){let t=process.env.PARADIGM_REAPER_STALE_MINUTES;return (t&&!Number.isNaN(Number(t))?Number(t):b)*60*1e3}async function O(t){let n=Date.now(),s=R(),a$1=[],d$1;try{d$1=await d(t,{status:"in-progress",limit:9999});}catch{return a$1}let{updateTask:o}=await import('./task-loader-EIXPKHA3.js');for(let i of d$1){if(i.status!=="in-progress"||i.crashed_at)continue;let u=i.started_at?new Date(i.started_at).getTime():NaN;if(Number.isNaN(u)||n-u<s)continue;let r=new Date().toISOString();await o(t,i.id,{status:"shelved",crashed_at:r,crash_reason:"reaper:stale-in-progress",shelved:r})&&(a$1.push(i.id),a.component("#task-settlement").warn("Reaped stale in-progress task",{taskId:i.id,startedAt:i.started_at,reason:"reaper:stale-in-progress"}));}return a$1}async function M(t,n,s){if(!n)return;try{await O(t);}catch(r){a.component("#task-settlement").warn("Reaper pass failed (non-fatal)",{error:r instanceof Error?r.message:String(r)});}let a$1=await f$1(t,n);if(!a$1){a.component("#task-settlement").warn("Orphan task: parent failed to load",{parentTaskId:n,orphanChildId:s,reason:"orphan:missing-parent"});let r=s?await f$1(t,s):null;if(r&&r.settledAt)return;await v(t,n,"orphan",r??void 0,true);return}if(a$1.settledAt)return;let d$1=(await d(t,{status:"all",limit:9999})).filter(r=>r.parentTaskId===a$1.id);if(d$1.length===0||!d$1.every(A))return;let o=d$1.some(r=>r.crashed_at),i=d$1.some(r=>r.status==="shelved"&&!r.crashed_at),u=o?"crashed":i?"shelved":"done";await v(t,a$1.id,u,a$1);}async function v(t,n,s,a$2,d=false){let o={recordWorkLog:"skipped",runPostflightLearning:"skipped",autoPromoteJournalEntries:"skipped"},i=0,u=0,r=a$2?.claimant?.ref;if(!r||r==="orchestrator")try{let{loadTasks:e}=await import('./task-loader-EIXPKHA3.js'),l=(await e(t,{status:"all",limit:9999})).filter(p=>p.parentTaskId===n&&p.claimant?.kind==="archetype"),c=new Map;for(let p of l)c.set(p.claimant.ref,(c.get(p.claimant.ref)??0)+1);let g=[...c.entries()].sort((p,y)=>y[1]-p[1])[0];g&&(r=g[0]);}catch{}r=r??"orchestrator";try{try{let{recordWorkLog:e}=await import('./work-log-loader-DL5GZ2BQ.js');e(t,{agent:r,task_ref:n,summary:`Settlement of task DAG ${n} (${s})`,outcome:s==="done"?"pass":"partial",symbols_touched:[]}),o.recordWorkLog="ok";}catch(e){o.recordWorkLog="threw",a.component("#task-settlement").warn("Settlement stage threw: recordWorkLog",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}try{let{runPostflightLearning:e}=await import('./ambient-VCTUHHIG.js'),l=await e(t,{claimant:r});i=l.journalsWritten??0,u=l.promoted??0,o.runPostflightLearning="ok";}catch(e){o.runPostflightLearning="threw",a.component("#task-settlement").warn("Settlement stage threw: runPostflightLearning",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}try{let{autoPromoteJournalEntries:e}=await import('./nomination-engine-EFXDEPZN.js'),l=e(t,r);u+=l.promoted??0,o.autoPromoteJournalEntries="ok";}catch(e){o.autoPromoteJournalEntries="threw",a.component("#task-settlement").warn("Settlement stage threw: autoPromoteJournalEntries",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}try{let{rebuildLearnedTable:e}=await import('./calibration-aggregate-5IVXSBDP.js'),l=e(t);l&&a.component("#calibration").info("Calibration refreshed on settle",{parentTaskId:n,samplesRead:l.samplesRead,learnedCells:l.groups.filter(c=>c.learned).length});}catch(e){a.component("#calibration").warn("Aggregate-on-settle failed (non-fatal)",{parentTaskId:n,error:e instanceof Error?e.message:String(e)});}}finally{let e=N(o),l={ts:new Date().toISOString(),parentTaskId:n,settledAs:s,stages:o,journalsWritten:i,promoted:u,chainLive:e};if(T(t,l),e){let c=Object.values(o).filter(g=>g==="ok").length;a$1(t,{verdicts:c,source:"settlement"});}if(a$2)try{let{updateTask:c}=await import('./task-loader-EIXPKHA3.js'),g={settledAt:new Date().toISOString()};s==="crashed"&&(g.crash_reason=a$2.crash_reason??"reaper:stale-in-progress"),d&&(g.orphaned=!0),await c(t,a$2.id,g);}catch(c){a.component("#task-settlement").warn("Failed to stamp settledAt",{parentTaskId:n,error:c instanceof Error?c.message:String(c)});}}}export{_ as isTerminal,O as reapStaleInProgress,M as settleParentIfComplete};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export{e as teamAcceptCommand,f as teamCheckCommand,d as teamHandoffCommand,g as teamHistoryCommand,b as teamInitCommand,a as teamModelsCommand,h as teamResetCommand,c as teamStatusCommand}from'./chunk-
|
|
2
|
+
export{e as teamAcceptCommand,f as teamCheckCommand,d as teamHandoffCommand,g as teamHistoryCommand,b as teamInitCommand,a as teamModelsCommand,h as teamResetCommand,c as teamStatusCommand}from'./chunk-KA6QEI3C.js';import'./chunk-YNFF7XHV.js';import'./chunk-TYWB5IQJ.js';import'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import'./chunk-ECLUYHAR.js';import'./chunk-YXLGVOZO.js';import'./chunk-Y4XFVDZC.js';import'./chunk-MBKTVQS2.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-D6BSCELB.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{b as registerTools}from'./chunk-IBKCMLOW.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-XROULIQN.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-7HUPVOAY.js';import'./chunk-VKVVIN6J.js';import'./chunk-5VR7FKS5.js';import'./chunk-3F4QP2Z5.js';import'./chunk-M4UMM6DC.js';import'./chunk-B5KLSBOZ.js';import'./chunk-HSY75GRR.js';import'./chunk-RVXQNS6K.js';import'./chunk-3KVVC4WV.js';import'./chunk-KAUGQMXU.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-RGSFU2YW.js';import'./chunk-TMDPDIWA.js';import'./chunk-KLBH26PA.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-SD3KVW5Q.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-JNSJVCTU.js';import'./chunk-ECO3LHCE.js';import'./chunk-5TAVYPOV.js';
|