@a-company/paradigm 7.3.0 → 7.5.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-JA3A3TSU.js → accept-orchestration-NFNY5A4Q.js} +1 -1
- package/dist/{aggregate-H7SB2UYT.js → aggregate-647KIGV6.js} +1 -1
- package/dist/ambient-5TA5CD7Z.js +2 -0
- package/dist/{ambient-TFLZFV5Y.js → ambient-N24SR3BC.js} +1 -1
- package/dist/ambient-W3SPKLKC.js +2 -0
- package/dist/{arch-loader-YVOS3QRY.js → arch-loader-6TDQOSUE.js} +1 -1
- package/dist/arch-loader-NAGXLWUQ.js +2 -0
- package/dist/{beacon-WVN264OT.js → beacon-4XQSMTNN.js} +1 -1
- package/dist/captain-2MEKZKJS.js +2 -0
- package/dist/captain-V5XPN4UP.js +2 -0
- package/dist/{chunk-IBKCMLOW.js → chunk-43H6PB2A.js} +27 -27
- package/dist/chunk-54C2PETP.js +12 -0
- package/dist/{chunk-RGSFU2YW.js → chunk-5LIE2QMS.js} +1 -1
- package/dist/{chunk-ACJWUOMA.js → chunk-74NGU6YN.js} +1 -1
- package/dist/chunk-ABHILQLA.js +42 -0
- package/dist/{chunk-VR2LLUYE.js → chunk-AMZ3ESAK.js} +2 -2
- package/dist/chunk-BTMT4K73.js +93 -0
- package/dist/{chunk-MBKTVQS2.js → chunk-BXKFSYIN.js} +1 -1
- package/dist/chunk-CHFY3JSF.js +504 -0
- package/dist/chunk-D2T5AV5N.js +504 -0
- package/dist/{chunk-6VZSOQ7Y.js → chunk-DQ4MMMTP.js} +1 -1
- package/dist/chunk-F3OBFUOE.js +2 -0
- package/dist/chunk-GADXREYG.js +18 -0
- package/dist/{chunk-A5EEY6NO.js → chunk-HGT7RNOL.js} +1 -1
- package/dist/chunk-HLPYCWE5.js +6 -0
- package/dist/chunk-IGB2CIMK.js +93 -0
- package/dist/{chunk-27EK3OQZ.js → chunk-JJ3AUHQU.js} +1 -1
- package/dist/chunk-JOHPASZG.js +4 -0
- package/dist/{chunk-7BZPDOOQ.js → chunk-JOWT6J4C.js} +4 -4
- package/dist/chunk-L4MKNG56.js +42 -0
- package/dist/chunk-PRZZL57E.js +7 -0
- package/dist/{chunk-SD3KVW5Q.js → chunk-QBIME67A.js} +1 -1
- package/dist/{chunk-KA6QEI3C.js → chunk-QTMJVEEW.js} +1 -1
- package/dist/chunk-SGLIPRIC.js +3 -0
- package/dist/chunk-SOVBBLFK.js +6 -0
- package/dist/{chunk-VKVVIN6J.js → chunk-SPU3R5GW.js} +4 -4
- package/dist/{chunk-YNFF7XHV.js → chunk-T577TTVG.js} +2 -2
- package/dist/{chunk-3F4QP2Z5.js → chunk-VHVUJGZ2.js} +2 -2
- package/dist/chunk-WUSTIEYA.js +4 -0
- package/dist/{commands-4ENQMHFO.js → commands-RSHKXKXN.js} +1 -1
- package/dist/{compliance-3M6COUCO.js → compliance-EFNXWHDL.js} +1 -1
- package/dist/{constellation-TIKNCZWR.js → constellation-26225R5K.js} +1 -1
- package/dist/{diff-NZSJW3V3.js → diff-G52RYZNF.js} +1 -1
- package/dist/dist-N4NYCS3D.js +2 -0
- package/dist/dist-O7KGTIYK.js +4 -0
- package/dist/{docs-DWU3T2BV.js → docs-2O7HUSBX.js} +1 -1
- package/dist/doctor-KGQXLGOQ.js +2 -0
- package/dist/graph-slice-2WECDOEN.js +2 -0
- package/dist/index.js +5 -5
- package/dist/{init-QPMLEQWQ.js → init-JGYCABZZ.js} +1 -1
- package/dist/{integrity-FRGF5BFS.js → integrity-YUCXTQX3.js} +1 -1
- package/dist/mcp.js +2 -2
- package/dist/nomination-engine-3EYXJOZZ.js +2 -0
- package/dist/nomination-engine-BUPERVPR.js +2 -0
- package/dist/notebook-loader-QM4KUT4R.js +2 -0
- package/dist/{orchestrate-C7SI4J7C.js → orchestrate-RIKQB2DV.js} +1 -1
- package/dist/{orchestration-S2ESNKSA.js → orchestration-GFNPCEUU.js} +1 -1
- package/dist/orchestration-I62QXOWV.js +2 -0
- package/dist/{platform-server-IOWHNS7Q.js → platform-server-AAEDDBS3.js} +2 -2
- package/dist/{probe-G3TKOJYW.js → probe-GD3VDWGT.js} +1 -1
- package/dist/reindex-FNL4QRUZ.js +2 -0
- package/dist/reindex-N4NTDLJY.js +2 -0
- package/dist/{review-WHRNLW2W.js → review-YG4LWV22.js} +1 -1
- package/dist/{ripple-B6U7263T.js → ripple-S6VBP5C6.js} +1 -1
- package/dist/sentinel.js +1 -1
- package/dist/{serve-PWAFVYYC.js → serve-NPRYOGQX.js} +1 -1
- package/dist/session-tracker-HYN6ZYPH.js +2 -0
- package/dist/{session-work-log-T2IE4Y4T.js → session-work-log-KZX4PGUL.js} +1 -1
- package/dist/{setup-L5OP24US.js → setup-GPOTHS3N.js} +1 -1
- package/dist/{shift-HGXZ5THV.js → shift-ZIJTQ5SW.js} +2 -2
- package/dist/{snapshot-MT5L6XE4.js → snapshot-2ARNF3U2.js} +1 -1
- package/dist/{status-4QGKLOP6.js → status-NTWWESOR.js} +1 -1
- package/dist/{summary-6QNVQZJV.js → summary-4QXYLXAB.js} +1 -1
- package/dist/{sync-layer-C2PF273N.js → sync-layer-Z266WBWF.js} +1 -1
- package/dist/{task-PRLQ4VPK.js → task-6F527BNU.js} +1 -1
- package/dist/{task-loader-EIXPKHA3.js → task-loader-75NBBLRQ.js} +1 -1
- package/dist/{task-loader-LFEE6OU7.js → task-loader-INPLZRG5.js} +1 -1
- package/dist/{task-settlement-ZXOY4YGX.js → task-settlement-3ROAHAND.js} +2 -2
- package/dist/{task-settlement-A2T6EACG.js → task-settlement-F7CIKUG3.js} +2 -2
- package/dist/{team-KP4HMUB5.js → team-PFJTOCPM.js} +1 -1
- package/dist/tools-MAH6K5UL.js +142 -0
- package/dist/tools-Z354SXGS.js +2 -0
- package/dist/{workspace-4D4TQ637.js → workspace-HADUT5XT.js} +1 -1
- package/package.json +2 -1
- package/dist/ambient-OW5M5LVN.js +0 -2
- package/dist/ambient-VCTUHHIG.js +0 -2
- package/dist/arch-loader-G3AAM4E2.js +0 -2
- package/dist/captain-ILBN2IKJ.js +0 -2
- package/dist/captain-J4FZ5PRU.js +0 -2
- package/dist/chunk-33ERV2MW.js +0 -18
- package/dist/chunk-5VR7FKS5.js +0 -93
- package/dist/chunk-7HUPVOAY.js +0 -504
- package/dist/chunk-D6BSCELB.js +0 -2
- package/dist/chunk-FG3M6VVO.js +0 -30
- package/dist/chunk-HSY75GRR.js +0 -6
- package/dist/chunk-KAUGQMXU.js +0 -4
- package/dist/chunk-L3AOKDMU.js +0 -93
- package/dist/chunk-O4ADSTSY.js +0 -504
- package/dist/chunk-RVXQNS6K.js +0 -30
- package/dist/chunk-TMDPDIWA.js +0 -3
- package/dist/chunk-XBK244QR.js +0 -6
- package/dist/chunk-Y76OIMDO.js +0 -7
- package/dist/chunk-ZSWXLFN7.js +0 -12
- package/dist/dist-PW5YPGFF.js +0 -2
- package/dist/dist-RXYJK7AZ.js +0 -2
- package/dist/doctor-CBZYYQQH.js +0 -2
- package/dist/nomination-engine-EFXDEPZN.js +0 -2
- package/dist/nomination-engine-YRHZZZUN.js +0 -2
- package/dist/notebook-loader-TZVIMNDJ.js +0 -2
- package/dist/orchestration-4MJKBSGM.js +0 -2
- package/dist/reindex-G2JLIGOQ.js +0 -2
- package/dist/reindex-JR3PXYQE.js +0 -2
- package/dist/session-tracker-BZ7FU4AT.js +0 -2
- package/dist/tools-NOMEIBS7.js +0 -2
- package/dist/tools-YW3Q27UI.js +0 -142
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-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
|
|
2
|
+
import {a as a$1,b as b$1}from'./chunk-43H6PB2A.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-XROULIQN.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-D2T5AV5N.js';import {i,j as j$2,a as a$2,b as b$2,k as k$1,d}from'./chunk-SPU3R5GW.js';import {t}from'./chunk-IGB2CIMK.js';import {n,P}from'./chunk-VHVUJGZ2.js';import'./chunk-M4UMM6DC.js';import'./chunk-B5KLSBOZ.js';import'./chunk-SOVBBLFK.js';import'./chunk-F3OBFUOE.js';import'./chunk-ABHILQLA.js';import'./chunk-3KVVC4WV.js';import'./chunk-WUSTIEYA.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-5LIE2QMS.js';import {p,q as q$1,k,l as l$1}from'./chunk-SGLIPRIC.js';import'./chunk-KLBH26PA.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import {j as j$1}from'./chunk-74NGU6YN.js';import'./chunk-GADXREYG.js';import'./chunk-BXKFSYIN.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
|
|
|
@@ -414,4 +414,4 @@ components:
|
|
|
414
414
|
| When | Tool | Purpose |
|
|
415
415
|
|------|------|---------|
|
|
416
416
|
| Starting any task | \`paradigm_pm_preflight\` | Get compliance plan |
|
|
417
|
-
| Finishing any task | _(handled by stop hook)_ | Auto-checks compliance |`}};function ke(e){return Math.ceil(e.length/3.5)}function ne(){return [{uri:"paradigm://guidance",name:"Guidance Topics",description:"List all available on-demand guidance topics (logging, portal, flows, orchestration, etc.)",mimeType:"application/json"},{uri:"paradigm://guidance/{topic}",name:"Guidance Content",description:`Get guidance for a topic. Available: ${Object.keys(j).join(", ")}`,mimeType:"text/markdown"}]}async function ie(e,s){let n=`paradigm://${e}`;if(e==="guidance"){let t=Object.entries(j).map(([i,a])=>{let r=a.generate();return {name:i,description:a.description,tokens:ke(r)}}),o=JSON.stringify({count:t.length,totalTokens:t.reduce((i,a)=>i+a.tokens,0),note:"These guidance topics were previously baked into CLAUDE.md. Load on-demand to save context.",topics:t.map(i=>({...i,uri:`paradigm://guidance/${i.name}`}))},null,2);return P(o.length,n),{handled:true,text:o,mimeType:"application/json"}}if(e.startsWith("guidance/")&&e!=="guidance/"){let t=decodeURIComponent(e.replace("guidance/","")),o=j[t];if(!o){let a=Object.keys(j),r=JSON.stringify({error:`Unknown guidance topic: "${t}"`,available:a},null,2);return P(r.length,n),{handled:true,text:r,mimeType:"application/json"}}let i=o.generate();return P(i.length,n),{handled:true,text:i,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}function ae(e,s){e.setRequestHandler(ListResourcesRequestSchema,async()=>({resources:[{uri:"paradigm://symbols",name:"All Symbols",description:"Overview of all Paradigm symbols in the project",mimeType:"application/json"},{uri:"paradigm://symbols/type/feature",name:"Features",description:"All @feature symbols",mimeType:"application/json"},{uri:"paradigm://symbols/type/component",name:"Components",description:"All #component symbols",mimeType:"application/json"},{uri:"paradigm://symbols/type/gate",name:"Gates",description:"All ^gate symbols (authorization)",mimeType:"application/json"},{uri:"paradigm://symbols/type/flow",name:"Flows",description:"All $flow symbols (processes)",mimeType:"application/json"},{uri:"paradigm://symbols/type/signal",name:"Signals",description:"All !signal symbols (events)",mimeType:"application/json"},{uri:"paradigm://symbols/type/state",name:"States",description:"All %state symbols",mimeType:"application/json"},{uri:"paradigm://gates",name:"Gates (Detailed)",description:"All gates with locks, keys, and prizes from portal.yaml",mimeType:"application/json"},{uri:"paradigm://flows",name:"Flows (Detailed)",description:"All flows with gate sequences",mimeType:"application/json"},...U(),...G(),...H(),...Y(),...X(),...te(),...ne()]})),e.setRequestHandler(ReadResourceRequestSchema,async n=>{let t=n.params.uri;if(!t?.startsWith("paradigm://"))throw new Error(`Unknown URI scheme: ${t}`);let o=s(),i=t.replace("paradigm://","");if(i==="symbols"){let a=p(o.index),r=q$1(o.index),d=JSON.stringify({project:o.projectName,counts:a,total:Object.values(a).reduce((p,k)=>p+k,0),symbols:r.map(p=>({symbol:p.symbol,type:p.type,description:p.description}))},null,2);return P(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}if(i.startsWith("symbol/")){let a=decodeURIComponent(i.replace("symbol/","")),r=k(o.index,a);if(!r){let p=JSON.stringify({error:"Symbol not found",symbol:a,available:q$1(o.index).filter(k=>k.symbol.includes(a.slice(1))).slice(0,5).map(k=>k.symbol)},null,2);return P(p.length,t),{contents:[{uri:t,mimeType:"application/json",text:p}]}}let d=JSON.stringify({symbol:r.symbol,type:r.type,description:r.description,filePath:r.filePath,references:r.references,referencedBy:r.referencedBy,tags:r.tags,data:r.data},null,2);return P(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}if(i.startsWith("symbols/type/")){let a=i.replace("symbols/type/",""),r=l$1(o.index,a),d=JSON.stringify({type:a,count:r.length,symbols:r.map(p=>({symbol:p.symbol,description:p.description,filePath:p.filePath,referencesCount:p.references.length,referencedByCount:p.referencedBy.length}))},null,2);return P(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}if(i==="gates"){let a=F(o),r=JSON.stringify({count:a.length,gates:a},null,2);return P(r.length,t),{contents:[{uri:t,mimeType:"application/json",text:r}]}}if(i==="flows"){let a=z(o),r=JSON.stringify({count:a.length,flows:a},null,2);return P(r.length,t),{contents:[{uri:t,mimeType:"application/json",text:r}]}}if(i.startsWith("wisdom/")){let a=await $(i,o);if(a.handled)return P(a.text.length),{contents:[{uri:t,mimeType:"application/json",text:a.text}]}}if(i.startsWith("history/")){let a=await q(i,o);if(a.handled)return P(a.text.length),{contents:[{uri:t,mimeType:"application/json",text:a.text}]}}if(i.startsWith("context/")){let a=await J(i);if(a.handled)return P(a.text.length),{contents:[{uri:t,mimeType:a.text.startsWith("#")?"text/markdown":"application/json",text:a.text}]}}if(i==="prompts"||i.startsWith("prompts/")){let a=await Q(i,o);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}if(i==="specs"||i.startsWith("specs/")){let a=await Z(i,o);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}if(i==="docs"||i.startsWith("docs/")){let a=await oe(i,o);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}if(i==="guidance"||i.startsWith("guidance/")){let a=await ie(i);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}throw new Error(`Unknown resource: ${i}`)});}b();n({warn:(e,s)=>a.component("#university-loader").warn(e,s)});var v=process.argv[2]||process.cwd(),_=null;function re(){if(!_)throw new Error("Project context not loaded");return _}async function Te(){_=await i(v),
|
|
417
|
+
| Finishing any task | _(handled by stop hook)_ | Auto-checks compliance |`}};function ke(e){return Math.ceil(e.length/3.5)}function ne(){return [{uri:"paradigm://guidance",name:"Guidance Topics",description:"List all available on-demand guidance topics (logging, portal, flows, orchestration, etc.)",mimeType:"application/json"},{uri:"paradigm://guidance/{topic}",name:"Guidance Content",description:`Get guidance for a topic. Available: ${Object.keys(j).join(", ")}`,mimeType:"text/markdown"}]}async function ie(e,s){let n=`paradigm://${e}`;if(e==="guidance"){let t=Object.entries(j).map(([i,a])=>{let r=a.generate();return {name:i,description:a.description,tokens:ke(r)}}),o=JSON.stringify({count:t.length,totalTokens:t.reduce((i,a)=>i+a.tokens,0),note:"These guidance topics were previously baked into CLAUDE.md. Load on-demand to save context.",topics:t.map(i=>({...i,uri:`paradigm://guidance/${i.name}`}))},null,2);return P(o.length,n),{handled:true,text:o,mimeType:"application/json"}}if(e.startsWith("guidance/")&&e!=="guidance/"){let t=decodeURIComponent(e.replace("guidance/","")),o=j[t];if(!o){let a=Object.keys(j),r=JSON.stringify({error:`Unknown guidance topic: "${t}"`,available:a},null,2);return P(r.length,n),{handled:true,text:r,mimeType:"application/json"}}let i=o.generate();return P(i.length,n),{handled:true,text:i,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}function ae(e,s){e.setRequestHandler(ListResourcesRequestSchema,async()=>({resources:[{uri:"paradigm://symbols",name:"All Symbols",description:"Overview of all Paradigm symbols in the project",mimeType:"application/json"},{uri:"paradigm://symbols/type/feature",name:"Features",description:"All @feature symbols",mimeType:"application/json"},{uri:"paradigm://symbols/type/component",name:"Components",description:"All #component symbols",mimeType:"application/json"},{uri:"paradigm://symbols/type/gate",name:"Gates",description:"All ^gate symbols (authorization)",mimeType:"application/json"},{uri:"paradigm://symbols/type/flow",name:"Flows",description:"All $flow symbols (processes)",mimeType:"application/json"},{uri:"paradigm://symbols/type/signal",name:"Signals",description:"All !signal symbols (events)",mimeType:"application/json"},{uri:"paradigm://symbols/type/state",name:"States",description:"All %state symbols",mimeType:"application/json"},{uri:"paradigm://gates",name:"Gates (Detailed)",description:"All gates with locks, keys, and prizes from portal.yaml",mimeType:"application/json"},{uri:"paradigm://flows",name:"Flows (Detailed)",description:"All flows with gate sequences",mimeType:"application/json"},...U(),...G(),...H(),...Y(),...X(),...te(),...ne()]})),e.setRequestHandler(ReadResourceRequestSchema,async n=>{let t=n.params.uri;if(!t?.startsWith("paradigm://"))throw new Error(`Unknown URI scheme: ${t}`);let o=s(),i=t.replace("paradigm://","");if(i==="symbols"){let a=p(o.index),r=q$1(o.index),d=JSON.stringify({project:o.projectName,counts:a,total:Object.values(a).reduce((p,k)=>p+k,0),symbols:r.map(p=>({symbol:p.symbol,type:p.type,description:p.description}))},null,2);return P(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}if(i.startsWith("symbol/")){let a=decodeURIComponent(i.replace("symbol/","")),r=k(o.index,a);if(!r){let p=JSON.stringify({error:"Symbol not found",symbol:a,available:q$1(o.index).filter(k=>k.symbol.includes(a.slice(1))).slice(0,5).map(k=>k.symbol)},null,2);return P(p.length,t),{contents:[{uri:t,mimeType:"application/json",text:p}]}}let d=JSON.stringify({symbol:r.symbol,type:r.type,description:r.description,filePath:r.filePath,references:r.references,referencedBy:r.referencedBy,tags:r.tags,data:r.data},null,2);return P(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}if(i.startsWith("symbols/type/")){let a=i.replace("symbols/type/",""),r=l$1(o.index,a),d=JSON.stringify({type:a,count:r.length,symbols:r.map(p=>({symbol:p.symbol,description:p.description,filePath:p.filePath,referencesCount:p.references.length,referencedByCount:p.referencedBy.length}))},null,2);return P(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}if(i==="gates"){let a=F(o),r=JSON.stringify({count:a.length,gates:a},null,2);return P(r.length,t),{contents:[{uri:t,mimeType:"application/json",text:r}]}}if(i==="flows"){let a=z(o),r=JSON.stringify({count:a.length,flows:a},null,2);return P(r.length,t),{contents:[{uri:t,mimeType:"application/json",text:r}]}}if(i.startsWith("wisdom/")){let a=await $(i,o);if(a.handled)return P(a.text.length),{contents:[{uri:t,mimeType:"application/json",text:a.text}]}}if(i.startsWith("history/")){let a=await q(i,o);if(a.handled)return P(a.text.length),{contents:[{uri:t,mimeType:"application/json",text:a.text}]}}if(i.startsWith("context/")){let a=await J(i);if(a.handled)return P(a.text.length),{contents:[{uri:t,mimeType:a.text.startsWith("#")?"text/markdown":"application/json",text:a.text}]}}if(i==="prompts"||i.startsWith("prompts/")){let a=await Q(i,o);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}if(i==="specs"||i.startsWith("specs/")){let a=await Z(i,o);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}if(i==="docs"||i.startsWith("docs/")){let a=await oe(i,o);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}if(i==="guidance"||i.startsWith("guidance/")){let a=await ie(i);if(a.handled)return {contents:[{uri:t,mimeType:a.mimeType,text:a.text}]}}throw new Error(`Unknown resource: ${i}`)});}b();n({warn:(e,s)=>a.component("#university-loader").warn(e,s)});var v=process.argv[2]||process.cwd(),_=null;function re(){if(!_)throw new Error("Project context not loaded");return _}async function Te(){_=await i(v),t(v,_).catch(e=>{a.component("#paradigm-mcp").warn("Background reindex failed",{error:e.message});});}async function Se(){a.component("#paradigm-mcp").info("Loading project",{projectDir:v});try{_=await i(v),j$1().setRootDir(_.rootDir),a.component("#paradigm-mcp").info("Project loaded",{symbols:_.aggregation.symbols.length,project:_.projectName});}catch(n){a.component("#paradigm-mcp").error("Error loading project",{error:n.message}),process.exit(1);}a$1(v);let e=new Server({name:"paradigm",version:"0.1.0"},{capabilities:{resources:{},tools:{}}});ae(e,re),b$1(e,re,Te),e.onerror=n=>{a.component("#paradigm-mcp").error("Server error",{error:String(n)});};let s=new StdioServerTransport;await e.connect(s),a.component("#paradigm-mcp").info("Server running on stdio");}Se().catch(e=>{a.component("#paradigm-mcp").error("Fatal error",{error:e.message}),process.exit(1);});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {C}from'./chunk-L4MKNG56.js';export{v as adjustAttentionFromFeedback,B as applySurfacingRules,z as autoPromoteJournalEntries,n as detectDebates,u as emitAndProcess,r as engageNomination,y as forwardNominationsToRelay,x as getNeverlandMetrics,w as getNominationStats,q as loadDebates,p as loadNominations,A as loadSurfacingConfig,o as persistNominations,m as processEvent,t as processPendingEvents,s as resolveDebate}from'./chunk-L4MKNG56.js';import'./chunk-3KVVC4WV.js';import'./chunk-WUSTIEYA.js';import'./chunk-KAFQA7HV.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-ECO3LHCE.js';import'./chunk-5TAVYPOV.js';C();
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {C}from'./chunk-ABHILQLA.js';export{v as adjustAttentionFromFeedback,B as applySurfacingRules,z as autoPromoteJournalEntries,n as detectDebates,u as emitAndProcess,r as engageNomination,y as forwardNominationsToRelay,x as getNeverlandMetrics,w as getNominationStats,q as loadDebates,p as loadNominations,A as loadSurfacingConfig,o as persistNominations,m as processEvent,t as processPendingEvents,s as resolveDebate}from'./chunk-ABHILQLA.js';import'./chunk-3KVVC4WV.js';import'./chunk-WUSTIEYA.js';import'./chunk-KAFQA7HV.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-ECO3LHCE.js';import'./chunk-5TAVYPOV.js';C();
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {m}from'./chunk-WUSTIEYA.js';export{c as DEFAULT_PRIOR,g as addNotebookEntry,f as classifyNotebookScope,l as decayUnusedEntry,i as incrementApplied,k as listAllAgentNotebookEntries,b as loadNotebookEntries,a as normalizeConcept,d as notebookPrior,h as promoteFromLore,j as reviseDown,e as searchNotebooks}from'./chunk-WUSTIEYA.js';import'./chunk-5TAVYPOV.js';m();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a,b}from'./chunk-
|
|
2
|
+
import {a,b}from'./chunk-T577TTVG.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-QBIME67A.js';import'./chunk-EK4ZRIFJ.js';import {d,c}from'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-JOHPASZG.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}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
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-
|
|
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-D2T5AV5N.js';import'./chunk-SPU3R5GW.js';import'./chunk-VHVUJGZ2.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-5LIE2QMS.js';import'./chunk-SGLIPRIC.js';import'./chunk-KLBH26PA.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-74NGU6YN.js';import'./chunk-GADXREYG.js';import'./chunk-EK4ZRIFJ.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-CHFY3JSF.js';import'./chunk-JOWT6J4C.js';import'./chunk-4QADCWPU.js';import'./chunk-NKYNHSA5.js';import'./chunk-AMZ3ESAK.js';import'./chunk-M7JHVVDW.js';import'./chunk-74NGU6YN.js';import'./chunk-HGT7RNOL.js';import'./chunk-GADXREYG.js';import'./chunk-Q527BPUF.js';import'./chunk-VOPJ47QY.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -9,7 +9,7 @@ import {a,b}from'./chunk-Y6KXTQBG.js';import'./chunk-5TAVYPOV.js';import Q,{Rout
|
|
|
9
9
|
`);}catch{}}catch{}},1e3);c.write(`: connected
|
|
10
10
|
|
|
11
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(`
|
|
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-75NBBLRQ.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-I62QXOWV.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-V5XPN4UP.js'),e=await t(n,{proposeClaimants:!0}),{loadLearnedTokenTable:a,estimateForTask:i,classifyTaskLocal:c}=await import('./orchestration-I62QXOWV.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-I62QXOWV.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-6F527BNU.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-75NBBLRQ.js'),u=await l(n,{kind:a,ref:t},{status:c}),{loadLearnedTokenTable:d,estimateForTask:f,classifyTaskLocal:m}=await import('./orchestration-I62QXOWV.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-75NBBLRQ.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-I62QXOWV.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-75NBBLRQ.js'),t=(e,a,i)=>{import('./sync-layer-Z266WBWF.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-Z266WBWF.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
13
|
<html>
|
|
14
14
|
<head><title>Paradigm Platform</title></head>
|
|
15
15
|
<body style="background:#0d1117;color:#e6edf3;font-family:system-ui;display:flex;align-items:center;justify-content:center;height:100vh;margin:0">
|
|
@@ -21,5 +21,5 @@ import {a,b}from'./chunk-Y6KXTQBG.js';import'./chunk-5TAVYPOV.js';import Q,{Rout
|
|
|
21
21
|
</div>
|
|
22
22
|
</body>
|
|
23
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-
|
|
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-Z266WBWF.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
25
|
export{Se as createPlatformApp,ln as startPlatformServer};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$1,c}from'./chunk-
|
|
2
|
+
import {a as a$1,c}from'./chunk-PRZZL57E.js';import {a,b}from'./chunk-4TXOVRWD.js';import'./chunk-VCKKJDLP.js';import'./chunk-WR6D3SC6.js';import {m}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {e as e$1}from'./chunk-VIG5LSGZ.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as e from'path';import s from'chalk';import I from'ora';async function T(i,o){let a$2=i?e.resolve(i):process.cwd(),m$1=e.basename(a$2),g=I(),f=e.join(a$2,".paradigm"),F=n.existsSync(f)&&n.statSync(f).isFile(),p;o.output?p=e.resolve(o.output):F?p=e.join(a$2,".paradigm-scan-index.json"):(p=e.join(a$2,".paradigm","scan-index.json"),n.existsSync(e.dirname(p))||n.mkdirSync(e.dirname(p),{recursive:true})),o.quiet||console.log(s.blue(`
|
|
3
3
|
\u{1F52D} Generating Paradigm Scan Index
|
|
4
4
|
`));let y,k=[e.join(a$2,".paradigm"),e.join(a$2,".paradigm","config.yaml")];for(let c of k)if(n.existsSync(c)&&n.statSync(c).isFile())try{let t=n.readFileSync(c,"utf8");y=e$1(t).scan;break}catch{}g.start("Aggregating symbols from purpose and gate files...");let r;try{r=await m(a$2);}catch(c){g.fail(s.red("Failed to aggregate symbols")),console.error(s.gray(c.message)),process.exit(1);}if(g.succeed(`Found ${r.symbols.length} symbols`),!o.quiet){let c={components:r.symbols.filter(t=>t.type==="component").length,flows:r.symbols.filter(t=>t.type==="flow").length,gates:r.symbols.filter(t=>t.type==="gate").length,signals:r.symbols.filter(t=>t.type==="signal").length,aspects:r.symbols.filter(t=>t.type==="aspect").length};console.log(s.gray(" Breakdown:"));for(let[t,u]of Object.entries(c))u>0&&console.log(s.gray(` ${t}: ${u}`));console.log();}g.start("Generating scan index...");let l=a({symbols:r.symbols,purposeFiles:r.purposeFiles,portalFiles:r.portalFiles},{projectName:m$1,visualTagMappings:y?.visualTagMappings,screenDefinitions:y?.screens});try{n.writeFileSync(p,b(l),"utf8"),g.succeed(s.green("Scan index generated"));}catch(c){g.fail(s.red("Failed to write scan index")),console.error(s.gray(c.message)),process.exit(1);}await a$1(a$2,r,{quiet:o.quiet});let d=await c(a$2,r.purposeFiles,{quiet:o.quiet});if(d&&Object.keys(d.flows).length>0){let c=e.join(a$2,".paradigm","flow-index.json");if(n.writeFileSync(c,JSON.stringify(d,null,2),"utf8"),!o.quiet){let t=Object.keys(d.symbolToFlows).length;g.succeed(s.green(`Flow index generated (${Object.keys(d.flows).length} flows, ${t} symbol mappings)`));}}return o.quiet||(console.log(s.gray(`
|
|
5
5
|
Output: ${p}`)),console.log(s.gray(` Components: ${Object.keys(l.components).length}`)),console.log(s.gray(` Features: ${Object.keys(l.features).length}`)),console.log(s.gray(` Flows: ${Object.keys(l.flows).length}`)),console.log(s.gray(` State: ${Object.keys(l.state).length}`)),console.log(s.gray(` Gates: ${Object.keys(l.gates).length}`)),console.log(s.gray(` Signals: ${Object.keys(l.signals).length}`)),console.log(s.gray(` Aspects: ${Object.keys(l.aspects).length}`)),console.log(),console.log(s.blue('\u2728 Scan index ready for "paradigm scan" queries')),console.log(s.gray(` Attach an image and say "paradigm scan" to map UI to code
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{r as getReindexToolsList,s as handleReindexTool,t as rebuildStaticFiles}from'./chunk-IGB2CIMK.js';import'./chunk-VHVUJGZ2.js';import'./chunk-M4UMM6DC.js';import'./chunk-F3OBFUOE.js';import'./chunk-WUSTIEYA.js';import'./chunk-SGLIPRIC.js';import'./chunk-GRZQIKST.js';import'./chunk-74NGU6YN.js';import'./chunk-GADXREYG.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{r as getReindexToolsList,s as handleReindexTool,t as rebuildStaticFiles}from'./chunk-BTMT4K73.js';import'./chunk-AMZ3ESAK.js';import'./chunk-M7JHVVDW.js';import'./chunk-74NGU6YN.js';import'./chunk-M4UMM6DC.js';import'./chunk-F3OBFUOE.js';import'./chunk-WUSTIEYA.js';import'./chunk-GADXREYG.js';import'./chunk-GRZQIKST.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-4TXOVRWD.js';import'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {n,m,o,t as t$1,J}from'./chunk-
|
|
2
|
+
import {n,m,o,t as t$1,J}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as i from'fs';import*as l from'path';import t from'chalk';import {execSync}from'child_process';import*as j from'js-yaml';var O=/[@#$%^!?&~][a-zA-Z][a-zA-Z0-9_-]*/g,W=[/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi];async function z(r={}){let s=process.cwd(),$=a.command("review").start("Running review pipeline",{cwd:s}),f=[],c=[];try{if(r.pr)f=execSync(`gh pr diff ${r.pr} --name-only`,{cwd:s,encoding:"utf8",timeout:15e3}).trim().split(`
|
|
3
3
|
`).filter(Boolean);else {let e=execSync("git diff --cached --name-only",{cwd:s,encoding:"utf8",timeout:5e3}).trim(),o=execSync("git diff --name-only",{cwd:s,encoding:"utf8",timeout:5e3}).trim();f=[...new Set([...e.split(`
|
|
4
4
|
`).filter(Boolean),...o.split(`
|
|
5
5
|
`).filter(Boolean)])];}}catch(e){let o=e.message;r.json||a.command("review").error(`Failed to get changed files: ${o}`),$.error("Failed to get changed files"),r.ci&&process.exit(1);return}if(f.length===0){r.json?console.log(JSON.stringify({findings:[],summary:{total:0,blocking:0,improvements:0,notes:0}})):console.log(t.green(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {D as D$1,m,o,r,p,x,y}from'./chunk-
|
|
2
|
+
import {D as D$1,m,o,r,p,x,y}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as u from'path';import e from'chalk';import F from'ora';function I(s,t){let r$1=r(t,"flow"),a=[];for(let p of r$1){let l=p.data,i=l?.sequence||l?.gates||p.references,g=i.indexOf(s);g!==-1&&a.push({flow:p.symbol,position:g+1,total:i.length});}return a}function O(s){let t=u.dirname(s),r=`${t}/**/*.test.{ts,tsx}`,a=`npm test -- --testPathPattern="${t}"`;return {testPath:r,testCommand:a}}function C(s){return {components:s.filter(t=>t.type==="component").map(t=>t.symbol),gates:s.filter(t=>t.type==="gate").map(t=>t.symbol),signals:s.filter(t=>t.type==="signal").map(t=>t.symbol),flows:s.filter(t=>t.type==="flow").map(t=>t.symbol),aspects:s.filter(t=>t.type==="aspect").map(t=>t.symbol)}}function B(s,t){let r=p(t,s);if(!r)return null;let a=x(t,s),p$1=y(t,s),l=C(a),i=C(p$1),g=I(s,t),{testPath:m,testCommand:y$1}=O(r.filePath);return {symbol:r.symbol,type:r.type,path:r.filePath,description:r.description,requires:r.references,requiredBy:r.referencedBy,downstream:{components:l.components,signals:l.signals,aspects:l.aspects},upstream:{gates:i.gates,flows:i.flows},partOfFlows:g,testPath:m,testCommand:y$1}}async function D(s,t,r$1={}){let a$1=process.cwd(),p=t?u.resolve(a$1,t):a$1,l=D$1(s);l||(console.log(e.red(`
|
|
3
3
|
\u274C Invalid symbol format: ${s}`)),console.log(e.gray(" Symbols must start with @, #, ^, !, $, %, ~, or ?")),console.log(e.gray(` Example: paradigm ripple @checkout
|
|
4
4
|
`)),process.exit(1)),!r$1.quiet&&!r$1.json&&console.log(e.blue(`
|
|
5
5
|
\u{1F30A} Ripple Analysis for ${e.cyan(s)}
|
package/dist/sentinel.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {Command}from'commander';import {createRequire}from'module';var r=createRequire(import.meta.url),{version:c}=r("../package.json"),o=new Command;o.name("sentinel").description("Semantic error monitoring \u2014 errors that speak your language").version(c);o.command("defend",{isDefault:true}).description("Launch the Sentinel dashboard").option("-p, --port <port>","Port number","3838").option("--no-open","Don't open browser").action(async t=>{let{launchDashboard:i}=await import('./commands-
|
|
2
|
+
import {Command}from'commander';import {createRequire}from'module';var r=createRequire(import.meta.url),{version:c}=r("../package.json"),o=new Command;o.name("sentinel").description("Semantic error monitoring \u2014 errors that speak your language").version(c);o.command("defend",{isDefault:true}).description("Launch the Sentinel dashboard").option("-p, --port <port>","Port number","3838").option("--no-open","Don't open browser").action(async t=>{let{launchDashboard:i}=await import('./commands-RSHKXKXN.js');await i(t);});o.command("init").description("Initialize Sentinel in current project").option("--detect","Auto-detect symbols from codebase").action(async t=>{let{initProject:i}=await import('./commands-RSHKXKXN.js');await i(t);});var n=o.command("triage").description("Incident triage");n.command("list").description("List incidents").option("-s, --status <status>","Filter by status (open, investigating, resolved, wont-fix)").option("-e, --env <env>","Filter by environment").option("--symbol <symbol>","Filter by symbol").option("-n, --limit <n>","Max results","10").action(async t=>{let{triageList:i}=await import('./commands-RSHKXKXN.js');await i(t);});n.command("show <id>").description("Show incident details").option("--timeline","Include flow timeline").action(async(t,i)=>{let{triageShow:e}=await import('./commands-RSHKXKXN.js');await e(t,i);});n.command("resolve <id>").description("Resolve an incident").option("--pattern <id>","Pattern that resolved it").option("--commit <hash>","Fix commit").option("--notes <text>","Resolution notes").action(async(t,i)=>{let{triageResolve:e}=await import('./commands-RSHKXKXN.js');await e(t,i);});n.command("stats").description("Show incident statistics").option("-p, --period <period>","Period (7d, 30d, 90d)","7d").action(async t=>{let{triageStats:i}=await import('./commands-RSHKXKXN.js');await i(t);});o.parse();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
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
3
|
Starting Paradigm Platform...
|
|
4
|
-
`));let{startPlatformServer:d}=await import('./platform-server-
|
|
4
|
+
`));let{startPlatformServer:d}=await import('./platform-server-AAEDDBS3.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
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
6
|
Error: Port ${e} is already in use.`)),console.log(a?o.gray(` Try a different port: paradigm serve --port ${e+1}
|
|
7
7
|
`):o.gray(` Tried ports ${n}-${n+s-1}; all in use.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {s}from'./chunk-
|
|
2
|
+
import {s}from'./chunk-GADXREYG.js';export{a as appendSessionWorkEntry,d as appendVerdictEntry,n as clearActivityMetrics,c as clearSessionWorkLog,q as countNotebookReferences,j as getAgentEntries,k as getAgentVerdicts,i as getContributingAgents,p as getNotebookReferences,m as getSessionActivitySummary,h as markIterationRevisionsConsumed,f as markVerdictsConsumed,g as readPendingIterationRevisions,e as readPendingVerdicts,b as readSessionWorkLog,l as recordActivityMetric,o as recordNotebookReference}from'./chunk-GADXREYG.js';import'./chunk-5TAVYPOV.js';s();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b,c as c$1}from'./chunk-W7C6FFMO.js';import'./chunk-4TXOVRWD.js';import {g}from'./chunk-
|
|
2
|
+
import {b,c as c$1}from'./chunk-W7C6FFMO.js';import'./chunk-4TXOVRWD.js';import {g}from'./chunk-JOHPASZG.js';import {d as d$2}from'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {d as d$1,b as b$1,a}from'./chunk-VIG5LSGZ.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as c from'path';import*as D from'readline';import e from'chalk';function x(){return D.createInterface({input:process.stdin,output:process.stdout})}async function d(s,r){return new Promise(t=>{s.question(r,o=>{t(o.trim());});})}async function p(s,r,t){console.log(`
|
|
3
3
|
${e.cyan(r)}`),t.forEach((i,u)=>{console.log(e.gray(` ${u+1}) `)+i.name);});let o=await d(s,e.white(`Enter number (1-${t.length}): `)),a=parseInt(o,10)-1;return a>=0&&a<t.length?t[a].value:t[0].value}async function k(s,r,t){return console.log(`
|
|
4
4
|
${e.cyan(r)}`),t.forEach((i,u)=>{console.log(e.gray(` ${u+1}) `)+i.name);}),(await d(s,e.white("Enter numbers separated by commas (e.g., 1,2,3): "))).split(",").map(i=>parseInt(i.trim(),10)-1).filter(i=>i>=0&&i<t.length).map(i=>t[i].value)}function A(s){let r={};for(let t of ["src","app","lib","packages"])if(n.existsSync(c.join(s,t))){r.sourceDir=t;break}if(r.sourceDir){let t=c.join(s,r.sourceDir);try{let o=n.readdirSync(t,{withFileTypes:!0});r.directories=o.filter(a=>a.isDirectory()).map(a=>a.name).filter(a=>!a.startsWith(".")&&!a.startsWith("_"));}catch{}}return r}function I(s,r){let t={version:"1.0","agent-guidelines":{overview:`${r} uses Paradigm for structured AI context management.`,"how-to-use":["Check .purpose files in directories before making changes","Run `paradigm status` to see all symbols in the project","Run `paradigm visualize` to explore the Dreamscape","Reference symbols using @ # $ % ~ ^ ! ? prefixes"],"update-rules":["When adding a feature, create/update the nearest .purpose file","When adding authorization, update portal.yaml","When exploring ideas, add to .premise with ? prefix","Run `paradigm cursorrules` after updating .paradigm"]},"symbol-system":a,states:{},"purpose-required":[],conventions:b$1};if(t.states||(t.states={}),s.hasAuth&&s.hasAuth!=="none"&&(t.states.user={authenticated:{type:"boolean",default:false,description:"User is logged in"},role:{type:"enum",values:["guest","user","admin"],description:"User access level"}},s.hasAuth==="session"&&(t.states.user.sessionExpiry={type:"string",description:"Session expiration time"})),s.hasSubscription&&s.hasSubscription!=="none"&&(t.states.user||(t.states.user={}),s.hasSubscription==="tiers"?t.states.user.subscription={type:"enum",values:["free","trial","pro","enterprise"],description:"Subscription tier"}:t.states.user.isPremium={type:"boolean",default:false,description:"Has premium access"}),s.hasGates==="yes"&&t["agent-guidelines"]["how-to-use"].push("Check portal.yaml for authorization rules before modifying access control"),s.directories&&s.directories.length>0&&s.sourceDir&&(t["purpose-required"]=s.directories.map(o=>({pattern:`${s.sourceDir}/${o}/*`,depth:1}))),s.customStates){let o=s.customStates.split(",").map(a=>a.trim()).filter(Boolean);for(let a of o){let i=a.split(".");if(i.length>=2){let u=i[0],g=i.slice(1).join(".");t.states[u]||(t.states[u]={}),t.states[u][g]={type:"boolean",description:`Custom state: ${a}`};}}}return t}async function j(s){let r=x(),t={};console.log(e.blue(`
|
|
5
5
|
\u{1F305} Paradigm Setup Wizard
|
|
@@ -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-QTMJVEEW.js';import'./chunk-T577TTVG.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-DQ4MMMTP.js';import {a as a$4,b as b$1}from'./chunk-GE3GQALR.js';import'./chunk-QBIME67A.js';import'./chunk-EK4ZRIFJ.js';import {a as a$8}from'./chunk-54C2PETP.js';import'./chunk-EKZDFEJW.js';import {a as a$2}from'./chunk-JJ3AUHQU.js';import {b as b$3}from'./chunk-PRZZL57E.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-JOHPASZG.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
|
`)+`
|
|
@@ -57,4 +57,4 @@ workspace: "${u}"
|
|
|
57
57
|
workspace: "${j}"
|
|
58
58
|
`;a.writeFileSync(t,re,"utf8"),console.log(e.green(` \u2713 Found workspace: ${e.cyan(j)} (added to config.yaml)`));break}let y=d.dirname(p);if(y===p)break;p=y;}}}catch(s){a$1.operation("shift").debug("Workspace auto-detect failed",{error:s.message});}}if(!d$2(n)||o.force){console.log(e.cyan(" Step 2/6: Initializing team configuration..."));try{await b(n,{force:o.force,json:!1,configureModels:o.configureModels||!1,noConfigureModels:!o.configureModels}),console.log(e.green(` \u2713 Team configuration initialized
|
|
59
59
|
`));}catch(t){console.log(e.yellow(` \u26A0 Team init warning: ${t.message}
|
|
60
|
-
`));}}else i.succeed(e.gray("Step 2/6: Team already configured (use --force to reinit)"));if(o.force){let t=d.join(n,".paradigm",".compliance-nomination-skipped");if(a.existsSync(t))try{a.unlinkSync(t);}catch{}}let S=d.join(n,".paradigm","roster.yaml");if(!a.existsSync(S)||o.force)try{let t=a$4(n),s=b$1[t]||b$1.generic,c={version:"1.0",project:l,type:t,active:s.sort()};a.writeFileSync(S,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Agent roster set: ${e.cyan(s.length)} agents for ${e.cyan(t)}`));}catch(t){a$1.operation("shift").debug("Roster setup failed",{error:t.message});}else try{let s=h.load(a.readFileSync(S,"utf8"))?.active?.length??0;console.log(e.gray(` \u2713 Agent roster exists (${s} agents active)`));}catch{console.log(e.gray(" \u2713 Agent roster exists"));}await be(n,S,o);{let t=d.join(n,".paradigm","adoptions.yaml"),s=a.existsSync(t);try{let c=a$4(n),p=s?await a$5(n):null,u=p&&Object.keys(p.agents).length>0;if(!u&&a.existsSync(S))p=await d$3(n),await b$2(n,p),a$1.operation("shift").debug("Migrated roster to adoptions",{count:Object.keys(p.agents).length});else if(!u){p=e$1(c);let g=a.existsSync(S)?h.load(a.readFileSync(S,"utf8")):{active:[]},y=new Date().toISOString();for(let j of g.active||[])p.agents[j]={adopted:y,source:oe.has(j)?"core":"ecosystem",defaultsAccepted:!0};Object.keys(p.agents).length>0&&await b$2(n,p);}if(p&&Object.keys(p.agents).length>0){let g=ke(p),y=f(g,c);console.log(y),console.log(e.green(` \u2713 ${Object.keys(p.agents).length} agents adopted`));}if(p&&p.agents.compliance){let g=d.join(n,".paradigm","authority.yaml");if(!a.existsSync(g))try{let{writeArchetypeDefaults:y}=await import('./authority-GCMPX7RW.js');await y(n,"archetype-default"),a$1.operation("shift").debug("Wrote archetype-default authority.yaml",{source:"default-adoption"});}catch(y){a$1.operation("shift").debug("Authority defaults write failed",{error:y.message});}}}catch(c){a$1.operation("shift").debug("Adoption ceremony failed",{error:c.message});}}{let t=d.join(r,"config.yaml");if(a.existsSync(t))try{let s=a.readFileSync(t,"utf8"),c=h.load(s);if(!c["model-resolution"]||o.force){let{ModelDiscovery:p}=await import('./model-discovery-HMB3YI4L.js'),g=new p(n).detectEnvironment(),y;g==="claude-code"?y={"tier-1":"opus","tier-2":"sonnet","tier-3":"haiku"}:g==="cursor"?y={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"haiku"}:y={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"sonnet"},c["model-resolution"]=y,a.writeFileSync(t,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Model tiers configured for ${e.cyan(g)}: tier-1=${y["tier-1"]}, tier-2=${y["tier-2"]}, tier-3=${y["tier-3"]}`));}}catch(s){a$1.operation("shift").debug("Model tier config failed",{error:s.message});}}try{let{ensureEnforcementDefaults:t}=await import('./enforcement-VRE3WZOI.js');t(n)&&(console.log(e.green(` \u2713 Enforcement config initialized (${e.cyan("none")} preset)`)),console.log(e.dim(" Enforcement: none \u2014 symbol tracking available when you're ready. Rune will guide you.")));}catch(t){a$1.operation("shift").debug("Enforcement config setup failed",{error:t.message});}{i.start("Ensuring core files...");try{let{created:t,existed:s}=await Q(n);i.succeed(e.green(`Core files ensured: ${e.cyan(String(t.length))} created, ${e.cyan(String(s.length))} already existed`));}catch(t){i.warn(e.yellow(`Guaranteed files warning: ${t.message}`));}}if(o.quick)i.succeed(e.gray("Step 3/6: Skipped scan (--quick mode)"));else {i.start("Step 3/6: Scanning and indexing symbols...");try{await b$3(n,{quiet:!0}),i.succeed(e.green("Symbols indexed"));}catch(t){i.warn(e.yellow(`Scan warning: ${t.message}`));}}{let t=d.join(r,"config.yaml");if(a.existsSync(t))try{if(h.load(a.readFileSync(t,"utf8")).workspace){i.start("Step 3b/6: Reindexing workspace members...");try{let{workspaceReindexCommand:c}=await import('./workspace-
|
|
60
|
+
`));}}else i.succeed(e.gray("Step 2/6: Team already configured (use --force to reinit)"));if(o.force){let t=d.join(n,".paradigm",".compliance-nomination-skipped");if(a.existsSync(t))try{a.unlinkSync(t);}catch{}}let S=d.join(n,".paradigm","roster.yaml");if(!a.existsSync(S)||o.force)try{let t=a$4(n),s=b$1[t]||b$1.generic,c={version:"1.0",project:l,type:t,active:s.sort()};a.writeFileSync(S,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Agent roster set: ${e.cyan(s.length)} agents for ${e.cyan(t)}`));}catch(t){a$1.operation("shift").debug("Roster setup failed",{error:t.message});}else try{let s=h.load(a.readFileSync(S,"utf8"))?.active?.length??0;console.log(e.gray(` \u2713 Agent roster exists (${s} agents active)`));}catch{console.log(e.gray(" \u2713 Agent roster exists"));}await be(n,S,o);{let t=d.join(n,".paradigm","adoptions.yaml"),s=a.existsSync(t);try{let c=a$4(n),p=s?await a$5(n):null,u=p&&Object.keys(p.agents).length>0;if(!u&&a.existsSync(S))p=await d$3(n),await b$2(n,p),a$1.operation("shift").debug("Migrated roster to adoptions",{count:Object.keys(p.agents).length});else if(!u){p=e$1(c);let g=a.existsSync(S)?h.load(a.readFileSync(S,"utf8")):{active:[]},y=new Date().toISOString();for(let j of g.active||[])p.agents[j]={adopted:y,source:oe.has(j)?"core":"ecosystem",defaultsAccepted:!0};Object.keys(p.agents).length>0&&await b$2(n,p);}if(p&&Object.keys(p.agents).length>0){let g=ke(p),y=f(g,c);console.log(y),console.log(e.green(` \u2713 ${Object.keys(p.agents).length} agents adopted`));}if(p&&p.agents.compliance){let g=d.join(n,".paradigm","authority.yaml");if(!a.existsSync(g))try{let{writeArchetypeDefaults:y}=await import('./authority-GCMPX7RW.js');await y(n,"archetype-default"),a$1.operation("shift").debug("Wrote archetype-default authority.yaml",{source:"default-adoption"});}catch(y){a$1.operation("shift").debug("Authority defaults write failed",{error:y.message});}}}catch(c){a$1.operation("shift").debug("Adoption ceremony failed",{error:c.message});}}{let t=d.join(r,"config.yaml");if(a.existsSync(t))try{let s=a.readFileSync(t,"utf8"),c=h.load(s);if(!c["model-resolution"]||o.force){let{ModelDiscovery:p}=await import('./model-discovery-HMB3YI4L.js'),g=new p(n).detectEnvironment(),y;g==="claude-code"?y={"tier-1":"opus","tier-2":"sonnet","tier-3":"haiku"}:g==="cursor"?y={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"haiku"}:y={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"sonnet"},c["model-resolution"]=y,a.writeFileSync(t,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Model tiers configured for ${e.cyan(g)}: tier-1=${y["tier-1"]}, tier-2=${y["tier-2"]}, tier-3=${y["tier-3"]}`));}}catch(s){a$1.operation("shift").debug("Model tier config failed",{error:s.message});}}try{let{ensureEnforcementDefaults:t}=await import('./enforcement-VRE3WZOI.js');t(n)&&(console.log(e.green(` \u2713 Enforcement config initialized (${e.cyan("none")} preset)`)),console.log(e.dim(" Enforcement: none \u2014 symbol tracking available when you're ready. Rune will guide you.")));}catch(t){a$1.operation("shift").debug("Enforcement config setup failed",{error:t.message});}{i.start("Ensuring core files...");try{let{created:t,existed:s}=await Q(n);i.succeed(e.green(`Core files ensured: ${e.cyan(String(t.length))} created, ${e.cyan(String(s.length))} already existed`));}catch(t){i.warn(e.yellow(`Guaranteed files warning: ${t.message}`));}}if(o.quick)i.succeed(e.gray("Step 3/6: Skipped scan (--quick mode)"));else {i.start("Step 3/6: Scanning and indexing symbols...");try{await b$3(n,{quiet:!0}),i.succeed(e.green("Symbols indexed"));}catch(t){i.warn(e.yellow(`Scan warning: ${t.message}`));}}{let t=d.join(r,"config.yaml");if(a.existsSync(t))try{if(h.load(a.readFileSync(t,"utf8")).workspace){i.start("Step 3b/6: Reindexing workspace members...");try{let{workspaceReindexCommand:c}=await import('./workspace-HADUT5XT.js');await c({quiet:!0}),i.succeed(e.green("Workspace members reindexed"));}catch(c){i.warn(e.yellow(`Workspace reindex: ${c.message}`));}}}catch(s){a$1.operation("shift").debug("Workspace config read failed",{error:s.message});}}let v=d.join(n,"portal.yaml");a.existsSync(v)||a.writeFileSync(v,h.dump({version:"1.0.0",gates:{},routes:{}},{lineWidth:-1,noRefs:true}),"utf8");let E=d.join(n,".paradigm","lore");a.existsSync(E)||a.mkdirSync(E,{recursive:true});let R=d.join(n,".paradigm","university");for(let t of ["content/notes","content/policies","content/quizzes","content/paths","diplomas"]){let s=d.join(R,t);a.existsSync(s)||a.mkdirSync(s,{recursive:true});}let N=d.join(R,"config.yaml");if(!a.existsSync(N)){let t="Project";try{let c=d.join(n,".paradigm","config.yaml");if(a.existsSync(c)){let p=h.load(a.readFileSync(c,"utf8"));p.project&&typeof p.project=="string"&&(t=p.project);}}catch{}let s={branding:{name:`${t} University`,tagline:`Learn the ${t} codebase`,institution:t},theme:{primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true}};a.writeFileSync(N,h.dump(s,{lineWidth:-1,noRefs:true}),"utf8");}i.start("Step 4/6: Syncing IDE configurations...");try{let t=o.ide?[o.ide]:["claude","cursor","copilot","windsurf","agents"],s=[];for(let c of t)try{await a$6(c,{quiet:!0,force:!0}),s.push(c);}catch{}s.length>0?i.succeed(e.green(`IDE configs synced: ${s.join(", ")}`)):i.warn(e.yellow("No IDE configs to sync"));}catch(t){i.warn(e.yellow(`Sync warning: ${t.message}`));}i.start("Step 5/6: Installing hooks...");try{await a$7({force:o.force}),i.succeed(e.green("Hooks installed (git + Claude Code + Cursor)"));}catch(t){i.warn(e.yellow(`Hooks warning: ${t.message}`));}if(o.verify){i.start("Step 6/6: Running health checks...");try{await a$8({quiet:!0})?i.succeed(e.green("All health checks passed")):i.warn(e.yellow("Some health checks need attention"));}catch(t){i.warn(e.yellow(`Doctor warning: ${t.message}`));}}else i.succeed(e.gray("Step 6/6: Skipped verify (use --verify to check health)"));console.log(""),console.log(e.blue("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510")),console.log(e.blue("\u2502")+e.white.bold(" \u2728 Paradigm shift complete! ")+e.blue("\u2502")),console.log(e.blue("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518")),console.log(""),console.log(e.white(" Created/Updated:")),console.log(e.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));let O=[{path:".paradigm/config.yaml",desc:"Project configuration"},{path:".paradigm/navigator.yaml",desc:"Symbol navigation map"},{path:".paradigm/agents.yaml",desc:"Team agent configuration"},{path:".paradigm/adoptions.yaml",desc:"Agent adoption records"},{path:".purpose",desc:"Root feature definitions"},{path:".paradigm/lore/",desc:"Project lore timeline",isDir:true},{path:"portal.yaml",desc:"Authorization gates"},{path:".paradigm/roster.yaml",desc:"Agent roster for this project"},{path:"CLAUDE.md",desc:"Claude Code AI instructions"},{path:"AGENTS.md",desc:"Universal AI agent instructions"},{path:".cursor/rules/",desc:"Cursor AI instructions",isDir:true},{path:".claude/hooks/",desc:"Claude Code enforcement hooks",isDir:true,optional:true},{path:".cursor/hooks/",desc:"Cursor enforcement hooks",isDir:true,optional:true}],W=d.join(r,"config.yaml");if(a.existsSync(W))try{let t=h.load(a.readFileSync(W,"utf8"));if(typeof t.workspace=="string"){let s=d.resolve(n,t.workspace),c=d.relative(n,s);O.push({path:c,desc:"Multi-project workspace",optional:!0});}}catch(t){a$1.operation("shift").debug("Summary config read failed",{error:t.message});}for(let t of O){let s=d.join(n,t.path);a.existsSync(s)?console.log(e.green(" \u2713 ")+e.white(t.path.padEnd(28))+e.gray(t.desc)):t.optional||console.log(e.yellow(" \u25CB ")+e.gray(t.path.padEnd(28))+e.gray(`(${t.desc})`));}try{let t=await Z(n),s=ee(t);s&&console.log(s);}catch(t){a$1.operation("shift").debug("Recommendations engine failed",{error:t.message}),console.log(""),console.log(e.white(" Next steps:")),console.log(e.gray(" "+"\u2500".repeat(49))),console.log(e.white(" 1. ")+e.gray("Edit ")+e.cyan(".purpose")+e.gray(" to define your features")),console.log(e.white(" 2. ")+e.gray("Run ")+e.cyan("paradigm shift --verify")+e.gray(" to check health")),console.log("");}try{let{captureSnapshot:t,seedMetricsConsent:s}=await import('./metrics-UESGUHTA.js');s(n),t(n);}catch(t){a$1.operation("shift").debug("metrics snapshot failed",{error:t.message});}m.success("Paradigm shift complete",{project:l});}export{be as runComplianceNominationStep,Le as shiftCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {c,k,f as f$1}from'./chunk-
|
|
2
|
+
import {c,k,f as f$1}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as f from'path';import o from'chalk';import y from'ora';async function w(t,r){let m=process.cwd(),i=f.join(m,".premise");console.log(o.blue(`
|
|
3
3
|
\u{1F4F8} Creating Snapshot...
|
|
4
4
|
`));let e=y("Loading .premise file...").start();try{n.existsSync(i)||(e.fail(".premise file not found"),console.log(o.yellow(`
|
|
5
5
|
Run "paradigm init" first to create a .premise file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {m,o as o$1,B}from'./chunk-
|
|
2
|
+
import {m,o as o$1,B}from'./chunk-JOHPASZG.js';import {f}from'./chunk-K6TLYNRQ.js';import {e}from'./chunk-ZJQY5PPP.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as l from'fs';import*as a from'path';import o from'chalk';import G from'ora';async function D(){let t=process.cwd();console.log(o.blue(`
|
|
3
3
|
\u{1F4CA} Paradigm Status
|
|
4
4
|
`)),console.log(o.gray("\u2500".repeat(40)));let i=a$1.command("status").start("Getting project status"),r=G("Scanning project...").start(),p=l.existsSync(a.join(t,".premise")),m$1=l.existsSync(a.join(t,".purpose")),f$1=l.existsSync(a.join(t,"portal.yaml"));r.stop(),console.log(o.white(`
|
|
5
5
|
Configuration Files`)),console.log(o.gray("\u2500".repeat(40))),console.log(` .premise: ${p?o.green("\u2713 Found"):o.yellow("\u25CB Not found")}`),console.log(` .purpose: ${m$1?o.green("\u2713 Found"):o.yellow("\u25CB Not found")}`),console.log(` portal.yaml: ${f$1?o.green("\u2713 Found"):o.yellow("\u25CB Not found")}`),r.start("Counting files...");let u=await f(t),y=await e(t);if(r.stop(),console.log(o.white(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {m}from'./chunk-
|
|
2
|
+
import {m}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {c as c$1,a}from'./chunk-YNDPSWOE.js';import'./chunk-VIG5LSGZ.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as c from'path';import o from'chalk';import S from'ora';async function F(){let p=process.cwd(),x=c.basename(p),l=S();console.log(o.blue(`
|
|
3
3
|
\u{1F4CA} Paradigm Summary
|
|
4
4
|
`));let r=c.join(p,".paradigm");(!n.existsSync(r)||!n.statSync(r).isDirectory())&&(console.log(o.red("\u274C No .paradigm/ directory found.")),console.log(o.gray(" Run `paradigm init` first.\n")),process.exit(1)),l.start("Aggregating symbols...");let m$1;try{m$1=await m(p),l.succeed(`Found ${m$1.symbols.length} symbols`);}catch(e){l.fail(o.red("Failed to aggregate symbols")),console.error(o.gray(e.message)),process.exit(1);}let u={components:{count:0,examples:[]},flows:{count:0,examples:[]},gates:{count:0,examples:[]},signals:{count:0,examples:[]},aspects:{count:0,examples:[]}};for(let e of m$1.symbols){let t=e.type,i=t==="component"?"components":t==="flow"?"flows":t==="gate"?"gates":t==="signal"?"signals":t==="aspect"?"aspects":null;i&&u[i]&&(u[i].count++,u[i].examples.length<3&&u[i].examples.push(e.symbol));}let a$1=[];n.existsSync(c.join(r,"config.yaml"))?a$1.push({check:"Config",status:"ok"}):a$1.push({check:"Config",status:"missing"});let k=["logger.md","probe.md","symbols.md"].every(e=>n.existsSync(c.join(r,"specs",e)));a$1.push({check:"Specs",status:k?"ok":"warn"});let j=n.existsSync(c.join(r,"docs"));a$1.push({check:"Docs",status:j?"ok":"warn"});let g=c$1(p);if(g.detected){let e=a(g.detected);e&&n.existsSync(c.join(p,e.outputPath))?a$1.push({check:`IDE (${g.detected})`,status:"ok"}):a$1.push({check:`IDE (${g.detected})`,status:"warn"});}let w=n.existsSync(c.join(r,"scan-index.json"))||n.existsSync(c.join(p,".paradigm-scan-index.json"));a$1.push({check:"Scan index",status:w?"ok":"missing"});let s=[];s.push(`# Project: ${x}`),s.push(""),s.push(`**Generated:** ${new Date().toISOString()}`),s.push("**Paradigm Version:** 0.2.0"),s.push(""),s.push("## Symbol Counts"),s.push(""),s.push("| Type | Count | Examples |"),s.push("|------|-------|----------|");for(let[e,t]of Object.entries(u))if(t.count>0){let i=t.examples.join(", ");s.push(`| ${e} | ${t.count} | ${i} |`);}s.push(""),s.push("## Source Files"),s.push(""),s.push(`- Purpose files: ${m$1.purposeFiles.length}`),s.push(`- Gate files: ${m$1.portalFiles.length}`),s.push(""),s.push("## Health Status"),s.push("");for(let e of a$1){let t=e.status==="ok"?"\u2713":e.status==="warn"?"\u26A0":"\u25CB";s.push(`- ${t} ${e.check}`);}s.push(""),s.push("---"),s.push("*Generated by `paradigm summary`*");let h=c.join(r,"project.md");l.start("Writing project.md...");try{n.writeFileSync(h,s.join(`
|
|
5
5
|
`),"utf8"),l.succeed(o.green("project.md generated"));}catch(e){l.fail(o.red("Failed to write project.md")),console.error(o.gray(e.message)),process.exit(1);}console.log(o.gray(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
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-
|
|
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-QBIME67A.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};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
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{}}
|
|
2
|
+
import {d,h,i,c as c$1,j as j$1,k}from'./chunk-QBIME67A.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-V5XPN4UP.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-Z266WBWF.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-N4NYCS3D.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-Z266WBWF.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
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};
|