@a-company/paradigm 5.37.11 → 6.0.2
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-SBZVK3H4.js → accept-orchestration-QQISPINV.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-2WJHD46U.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-YKS2PQWO.js} +1 -1
- package/dist/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.js} +1 -1
- package/dist/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
- package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/chunk-6SKSV5B2.js +24 -0
- package/dist/{chunk-KFNHCQ4R.js → chunk-FEYOQMZ5.js} +1 -1
- package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/chunk-LPBCQM5Y.js +6 -0
- package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
- package/dist/chunk-PHEX6LU4.js +111 -0
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/chunk-R5ECMBIV.js +11 -0
- package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
- package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
- package/dist/{chunk-SUU6M4JH.js → chunk-TOYQ2QCB.js} +1 -1
- package/dist/chunk-TZDYIPVU.js +521 -0
- package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
- package/dist/chunk-VIG5LSGZ.js +2 -0
- package/dist/chunk-VNIX5KBT.js +3 -0
- package/dist/{chunk-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
- package/dist/{chunk-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/chunk-ZJQY5PPP.js +7 -0
- package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
- package/dist/compliance-BNFWQPKM.js +6 -0
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
- package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.js} +1 -1
- package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
- package/dist/decision-loader-HELL2AMX.js +2 -0
- package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
- package/dist/{diff-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/dist-JZZJLVMR.js +2 -0
- package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
- package/dist/dist-SE67SOXB.js +2 -0
- package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
- package/dist/doctor-IG5XM4C4.js +2 -0
- package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
- package/dist/{flow-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/init-V4KSEKPK.js +2 -0
- package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.js} +1 -1
- package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
- package/dist/list-CFHINXIS.js +12 -0
- package/dist/lore-loader-D2ISOASW.js +2 -0
- package/dist/lore-loader-PXFKMKAN.js +2 -0
- package/dist/mcp.js +19 -11
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.js} +1 -1
- package/dist/migrate-assessments-YSITX7KM.js +4 -0
- package/dist/migrate-decisions-NPLQOEEH.js +6 -0
- package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
- package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
- package/dist/portal-check-DV2VSJ5E.js +8 -0
- package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
- package/dist/{probe-B22G2JKF.js → probe-5HAXULAD.js} +1 -1
- package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/reindex-FWPD2VGM.js +2 -0
- package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
- package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
- package/dist/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
- package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.js} +1 -1
- package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
- package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
- package/dist/sentinel.js +1 -1
- package/dist/{serve-U47GULB6.js → serve-MO35XIZE.js} +1 -1
- package/dist/serve-OQYUO7CR.js +12 -0
- package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
- package/dist/server-FGUL2FWQ.js +7 -0
- package/dist/session-tracker-KGORN6B5.js +2 -0
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
- package/dist/{setup-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
- package/dist/{shift-FDADESC4.js → shift-TVNY2CQF.js} +6 -6
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
- package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
- package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-LXLHFRN7.js → summary-WLI3NF4G.js} +2 -2
- package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
- package/dist/sync-55U6QPIA.js +2 -0
- package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
- package/dist/team-MGT66HZQ.js +2 -0
- package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-QJHAVYI6.js +2 -0
- package/dist/university-content/notes/N-para-001-build-something.md +126 -0
- package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
- package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
- package/dist/university-content/notes/N-para-101-component-types.md +99 -0
- package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
- package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
- package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
- package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
- package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
- package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
- package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
- package/dist/university-content/notes/N-para-101-welcome.md +51 -0
- package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
- package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
- package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
- package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
- package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
- package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
- package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
- package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
- package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
- package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
- package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
- package/dist/university-content/notes/N-para-301-context-management.md +53 -0
- package/dist/university-content/notes/N-para-301-decisions.md +99 -0
- package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
- package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
- package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
- package/dist/university-content/notes/N-para-301-history-system.md +42 -0
- package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
- package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
- package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
- package/dist/university-content/notes/N-para-301-protocols.md +113 -0
- package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
- package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
- package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
- package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
- package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
- package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
- package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
- package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
- package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
- package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
- package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
- package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
- package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
- package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
- package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
- package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
- package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
- package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
- package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
- package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
- package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
- package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
- package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
- package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
- package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
- package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
- package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
- package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
- package/dist/university-content/notes/N-para-501-task-management.md +100 -0
- package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
- package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
- package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
- package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
- package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
- package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
- package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
- package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
- package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
- package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
- package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
- package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
- package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
- package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
- package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
- package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
- package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
- package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
- package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
- package/dist/university-content/paths/LP-para-001.yaml +29 -0
- package/dist/university-content/paths/LP-para-101.yaml +59 -0
- package/dist/university-content/paths/LP-para-201.yaml +69 -0
- package/dist/university-content/paths/LP-para-301.yaml +84 -0
- package/dist/university-content/paths/LP-para-401.yaml +74 -0
- package/dist/university-content/paths/LP-para-501.yaml +89 -0
- package/dist/university-content/paths/LP-para-601.yaml +59 -0
- package/dist/university-content/paths/LP-para-701.yaml +64 -0
- package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
- package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
- package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
- package/dist/university-content/reference.json +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
- package/dist/{validate-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
- package/dist/validate-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- package/dist/workspace-VMSPYIBV.js +2 -0
- package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
- package/lore-ui/dist/index.html +1 -1
- package/package.json +3 -2
- package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
- package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
- package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
- package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
- package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
- package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
- package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
- package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
- package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
- package/platform-ui/dist/index.html +1 -1
- package/templates/paradigm/specs/symbols.md +4 -2
- package/dist/add-P76GEMGF.js +0 -8
- package/dist/chunk-3TR6LLXP.js +0 -111
- package/dist/chunk-G7XFK2GI.js +0 -11
- package/dist/chunk-J6KWGCHN.js +0 -24
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-QT2LKB3P.js +0 -7
- package/dist/chunk-SHD27BQX.js +0 -6
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/chunk-YT52WLBF.js +0 -521
- package/dist/compliance-WJINB5DM.js +0 -6
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/dist-R3RWD35F.js +0 -2
- package/dist/dist-VXCZWVVJ.js +0 -2
- package/dist/doctor-QJ47XAUP.js +0 -2
- package/dist/init-HIBRSVUB.js +0 -2
- package/dist/list-5IUGP3ZB.js +0 -7
- package/dist/lore-loader-RVQI5GXL.js +0 -2
- package/dist/lore-loader-XY5MZRR2.js +0 -2
- package/dist/migrate-assessments-GEI5WMI2.js +0 -4
- package/dist/portal-check-Z3OCQEQR.js +0 -8
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/reindex-FO5VMZVQ.js +0 -2
- package/dist/serve-OY6XYL7F.js +0 -12
- package/dist/server-2MNROHF6.js +0 -7
- package/dist/session-tracker-MWJAJA6Z.js +0 -2
- package/dist/show-BOAVWZPZ.js +0 -7
- package/dist/status-A37ECYNJ.js +0 -6
- package/dist/sync-DLUBV5HQ.js +0 -2
- package/dist/team-NSP6PMPS.js +0 -2
- package/dist/tools-CERDNVCG.js +0 -2
- package/dist/university-content/courses/.purpose +0 -492
- package/dist/university-content/courses/para-001.json +0 -166
- package/dist/university-content/courses/para-101.json +0 -615
- package/dist/university-content/courses/para-201.json +0 -794
- package/dist/university-content/courses/para-301.json +0 -830
- package/dist/university-content/courses/para-401.json +0 -868
- package/dist/university-content/courses/para-501.json +0 -1166
- package/dist/university-content/courses/para-601.json +0 -719
- package/dist/university-content/courses/para-701.json +0 -807
- package/dist/university-content/plsat/.purpose +0 -162
- package/dist/university-content/plsat/v2.0.json +0 -760
- package/dist/university-content/plsat/v3.0.json +0 -3453
- package/dist/validate-C6SMKGYD.js +0 -9
- package/dist/workspace-MKSQN7B2.js +0 -2
- package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
- /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
package/dist/mcp.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {d,g,h,e,a as a$1,b as b$1,f,c}from'./chunk-
|
|
2
|
+
import {d,g,h,e,a as a$1,b as b$1,f,c}from'./chunk-TZDYIPVU.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-M3PPXJU4.js';import'./chunk-Q527BPUF.js';import'./chunk-KLBH26PA.js';import'./chunk-JNSJVCTU.js';import'./chunk-XROULIQN.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-3KVVC4WV.js';import {m as m$1,n,p,h as h$1,i,sa}from'./chunk-PHEX6LU4.js';import'./chunk-M4UMM6DC.js';import'./chunk-GRZQIKST.js';import'./chunk-M2HKWR25.js';import {j as j$1}from'./chunk-TNVWGPCE.js';import {b,a}from'./chunk-EK4ZRIFJ.js';import'./chunk-GAFKOFAV.js';import'./chunk-DVZWCXB6.js';import'./chunk-QGZRM6ZB.js';import'./chunk-K7X3Z3GL.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 m from'path';function se(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=i(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,{...se(o),source:"portal.yaml"});return Array.from(t.values())}function I(e){let s=e.gateConfig?.flows||[],n=i(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 z(e$1,s){if(e$1==="wisdom/preferences"){let n=await e(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$1.startsWith("wisdom/preferences/")){let n=decodeURIComponent(e$1.replace("wisdom/preferences/","")),t=await e(s),o=a$1(t,n);return {handled:true,text:JSON.stringify({symbol:n,preferences:o.preferences,global:t.preferences?.global||{}},null,2)}}if(e$1==="wisdom/antipatterns"){let n=await e(s);return {handled:true,text:JSON.stringify({count:n.antipatterns.length,antipatterns:n.antipatterns},null,2)}}if(e$1.startsWith("wisdom/antipatterns/")){let n=decodeURIComponent(e$1.replace("wisdom/antipatterns/","")),t=await e(s),o=a$1(t,n);return {handled:true,text:JSON.stringify({symbol:n,count:o.antipatterns.length,antipatterns:o.antipatterns},null,2)}}if(e$1==="wisdom/decisions"){let n=await e(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$1.startsWith("wisdom/decision/")){let n=e$1.replace("wisdom/decision/",""),t=await e(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$1.startsWith("wisdom/expertise/")){let n=decodeURIComponent(e$1.replace("wisdom/expertise/","")),t=await e(s),o=b$1(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 $(e,s){if(e.startsWith("history/symbol/")&&!e.endsWith("/recent")){let n=decodeURIComponent(e.replace("history/symbol/","")),t=await f(s),o=c(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 f(s),o=c(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 f(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 f(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(r=>r!==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 f(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 q(){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 H(e,s){if(e==="context/agent-protocol")return {handled:true,text:`# Agent Protocol for Paradigm MCP Tools
|
|
3
3
|
|
|
4
4
|
## Query Before Modify
|
|
5
5
|
|
|
@@ -97,7 +97,7 @@ Call the \`paradigm_session_health\` tool to get:
|
|
|
97
97
|
- List specific file paths modified
|
|
98
98
|
- Include any blockers or decisions needed
|
|
99
99
|
- Reference relevant symbols (@feature, #component, etc.)
|
|
100
|
-
`}:{handled:false,text:""}}var ce={"add-feature":"Pathway for adding a new user-facing feature with proper symbol definitions","add-gate":"Add a new gate (portal) for authorization control","debug-auth":"Debug authentication and authorization issues","implement-ftux":"Implement First-Time User Experience (FTUX) flow","implement-sandbox":"Set up a sandbox environment for testing","read-docs":"Read and understand existing documentation",refactor:"Refactor existing code with proper planning","run-e2e-tests":"Run and debug end-to-end tests","trace-flow":"Trace a flow through the system","validate-portals":"Validate portal.yaml configuration"};function le(e,s){let n=[m.join(__dirname,"../../../../paradigm/templates/paradigm",e),m.join(s.rootDir,"node_modules/@a-company/paradigm/templates/paradigm",e),m.join(s.rootDir,"../../packages/paradigm/templates/paradigm",e),m.join(process.env.HOME||"",".paradigm/templates",e),m.resolve(__dirname,"../../../paradigm/templates/paradigm",e)];for(let t of n)try{if(p.existsSync(t))return t}catch{}return null}function J(e){return le("prompts",e)}function de(e){return Math.ceil(e.length/3.5)}function B(e){let s=J(e);if(!s)return [];try{return p.readdirSync(s).filter(t=>t.endsWith(".md")).map(t=>{let o=t.replace(".md",""),r=m.join(s,t),i=p.statSync(r),a=p.readFileSync(r,"utf8");return {name:o,description:ce[o]||`Prompt template: ${o}`,filename:t,size:i.size,tokens:de(a)}})}catch{return []}}function pe(e,s){let n=J(s);if(!n)return {found:false,content:"",error:"Prompts directory not found. Ensure @a-company/paradigm is installed."};let t=m.join(n,`${e}.md`);try{if(!p.existsSync(t)){let r=B(s).map(i=>i.name);return {found:!1,content:"",error:`Prompt "${e}" not found. Available prompts: ${r.join(", ")}`}}return {content:p.readFileSync(t,"utf8"),found:!0}}catch(o){return {found:false,content:"",error:`Error reading prompt: ${o.message}`}}}function V(){return [{uri:"paradigm://prompts",name:"Prompts",description:"List all available prompt templates with metadata (name, description, size)",mimeType:"application/json"},{uri:"paradigm://prompts/{name}",name:"Prompt Content",description:"Get a specific prompt template content. Replace {name} with prompt name (e.g., add-feature)",mimeType:"text/markdown"}]}async function Q(e,s){let n=`paradigm://${e}`;if(e==="prompts"){let t=B(s),o=t.reduce((a,l)=>a+l.size,0),r=t.reduce((a,l)=>a+l.tokens,0),i=JSON.stringify({count:t.length,totalSize:o,totalTokens:r,prompts:t.map(a=>({name:a.name,description:a.description,size:a.size,tokens:a.tokens,uri:`paradigm://prompts/${a.name}`})),usage:"Read a specific prompt with paradigm://prompts/{name}"},null,2);return p$1(i.length,n),{handled:true,text:i,mimeType:"application/json"}}if(e.startsWith("prompts/")){let t=decodeURIComponent(e.replace("prompts/","")),{content:o,found:r,error:i}=pe(t,s);if(!r){let a=JSON.stringify({error:i,name:t},null,2);return p$1(a.length,n),{handled:true,text:a,mimeType:"application/json"}}return p$1(o.length,n),{handled:true,text:o,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}var A={disciplines:"Language and discipline-agnostic symbol mappings for different domains",scan:"Paradigm Probe protocol for visual discovery and UI-to-code mapping","context-tracking":"Context tracking system for session monitoring and handoffs"};function me(e,s){let n=[m.join(__dirname,"../../../../paradigm/templates/paradigm",e),m.join(s.rootDir,"node_modules/@a-company/paradigm/templates/paradigm",e),m.join(s.rootDir,"../../packages/paradigm/templates/paradigm",e),m.join(process.env.HOME||"",".paradigm/templates",e),m.resolve(__dirname,"../../../paradigm/templates/paradigm",e)];for(let t of n)try{if(p.existsSync(t))return t}catch{}return null}function Y(e){return me("specs",e)}function ge(e){return Math.ceil(e.length/3.5)}function ue(e){let s=Y(e);if(!s)return [];let n=[];for(let[t,o]of Object.entries(A)){let r=`${t}.md`,i=m.join(s,r);try{if(p.existsSync(i)){let a=p.statSync(i),l=p.readFileSync(i,"utf8");n.push({name:t,description:o,filename:r,size:a.size,tokens:ge(l)});}}catch{}}return n}function fe(e,s){if(!A[e]){let o=Object.keys(A);return {found:false,content:"",error:`"${e}" is not a reference spec. Reference specs available via MCP: ${o.join(", ")}. Project-specific specs should be read from .paradigm/specs/ directly.`}}let n=Y(s);if(!n)return {found:false,content:"",error:"Specs directory not found. Ensure @a-company/paradigm is installed."};let t=m.join(n,`${e}.md`);try{return p.existsSync(t)?{content:p.readFileSync(t,"utf8"),found:!0}:{found:!1,content:"",error:`Spec "${e}" file not found at expected location.`}}catch(o){return {found:false,content:"",error:`Error reading spec: ${o.message}`}}}function K(){return [{uri:"paradigm://specs",name:"Reference Specs",description:"List reference specifications (disciplines, scan, context-tracking)",mimeType:"application/json"},{uri:"paradigm://specs/{name}",name:"Spec Content",description:"Get a reference spec. Available: disciplines, scan, context-tracking",mimeType:"text/markdown"}]}async function X(e,s){let n=`paradigm://${e}`;if(e==="specs"){let t=ue(s),o=t.reduce((a,l)=>a+l.size,0),r=t.reduce((a,l)=>a+l.tokens,0),i=JSON.stringify({count:t.length,totalSize:o,totalTokens:r,note:"These are reference specs served via MCP. Project-specific specs (logger, symbols, etc.) should be read from .paradigm/specs/ directly.",specs:t.map(a=>({name:a.name,description:a.description,size:a.size,tokens:a.tokens,uri:`paradigm://specs/${a.name}`}))},null,2);return p$1(i.length,n),{handled:true,text:i,mimeType:"application/json"}}if(e.startsWith("specs/")&&e!=="specs/"){let t=decodeURIComponent(e.replace("specs/","")),{content:o,found:r,error:i}=fe(t,s);if(!r){let a=JSON.stringify({error:i,name:t},null,2);return p$1(a.length,n),{handled:true,text:a,mimeType:"application/json"}}return p$1(o.length,n),{handled:true,text:o,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}var M={commands:"Complete CLI command reference with examples and usage guidance",queries:"jq query examples for querying the constellation symbol graph"};function he(e,s){let n=[m.join(__dirname,"../../../../paradigm/templates/paradigm",e),m.join(s.rootDir,"node_modules/@a-company/paradigm/templates/paradigm",e),m.join(s.rootDir,"../../packages/paradigm/templates/paradigm",e),m.join(process.env.HOME||"",".paradigm/templates",e),m.resolve(__dirname,"../../../paradigm/templates/paradigm",e)];for(let t of n)try{if(p.existsSync(t))return t}catch{}return null}function Z(e){return he("docs",e)}function ye(e){return Math.ceil(e.length/3.5)}function be(e){let s=Z(e);if(!s)return [];let n=[];for(let[t,o]of Object.entries(M)){let r=`${t}.md`,i=m.join(s,r);try{if(p.existsSync(i)){let a=p.statSync(i),l=p.readFileSync(i,"utf8");n.push({name:t,description:o,filename:r,size:a.size,tokens:ye(l)});}}catch{}}return n}function we(e,s){if(!M[e]){let o=Object.keys(M);return {found:false,content:"",error:`"${e}" is not a reference doc. Reference docs available via MCP: ${o.join(", ")}. Project-specific docs (patterns, troubleshooting, etc.) should be read from .paradigm/docs/ directly.`}}let n=Z(s);if(!n)return {found:false,content:"",error:"Docs directory not found. Ensure @a-company/paradigm is installed."};let t=m.join(n,`${e}.md`);try{return p.existsSync(t)?{content:p.readFileSync(t,"utf8"),found:!0}:{found:!1,content:"",error:`Doc "${e}" file not found at expected location.`}}catch(o){return {found:false,content:"",error:`Error reading doc: ${o.message}`}}}function ee(){return [{uri:"paradigm://docs",name:"Reference Docs",description:"List reference documentation (commands, queries)",mimeType:"application/json"},{uri:"paradigm://docs/{name}",name:"Doc Content",description:"Get a reference doc. Available: commands, queries",mimeType:"text/markdown"}]}async function te(e,s){let n=`paradigm://${e}`;if(e==="docs"){let t=be(s),o=t.reduce((a,l)=>a+l.size,0),r=t.reduce((a,l)=>a+l.tokens,0),i=JSON.stringify({count:t.length,totalSize:o,totalTokens:r,note:"These are reference docs served via MCP. Project-specific docs (patterns, troubleshooting, etc.) should be read from .paradigm/docs/ directly.",docs:t.map(a=>({name:a.name,description:a.description,size:a.size,tokens:a.tokens,uri:`paradigm://docs/${a.name}`}))},null,2);return p$1(i.length,n),{handled:true,text:i,mimeType:"application/json"}}if(e.startsWith("docs/")&&e!=="docs/"){let t=decodeURIComponent(e.replace("docs/","")),{content:o,found:r,error:i}=we(t,s);if(!r){let a=JSON.stringify({error:i,name:t},null,2);return p$1(a.length,n),{handled:true,text:a,mimeType:"application/json"}}return p$1(o.length,n),{handled:true,text:o,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}var j={logging:{description:"Paradigm logger usage, symbol-to-method mapping by directory",generate:()=>"# Paradigm Logging Guide\n\n**IMPORTANT:** Use the Paradigm logger instead of raw console.log/print.\n\n## Usage Pattern\n\n```typescript\nlog.component('#login-handler').info('Starting login', { email });\nlog.component('#database').debug('Query executed', { duration });\nlog.gate('^authenticated').warn('Access denied', { userId });\nlog.signal('!login-success').info('User authenticated');\nlog.flow('$checkout').info('Flow step reached');\nlog.aspect('~audit-required').info('Audit triggered');\n```\n\n## Symbol Mapping by Directory\n\n| Directory | Symbol | Logger Method |\n|-----------|--------|---------------|\n| `features/**` | `#` | `log.component()` |\n| `routes/**` | `#` | `log.component()` |\n| `api/**` | `#` | `log.component()` |\n| `endpoints/**` | `#` | `log.component()` |\n| `commands/**` | `#` | `log.component()` |\n| `models/**` | `#` | `log.component()` |\n| `components/**` | `#` | `log.component()` |\n| `lib/**` | `#` | `log.component()` |\n| `utils/**` | `#` | `log.component()` |\n| `services/**` | `#` | `log.component()` |\n| `core/**` | `#` | `log.component()` |\n| `drivers/**` | `#` | `log.component()` |\n| `systems/**` | `#` | `log.component()` |\n| `integrations/**` | `#` | `log.component()` |\n| `external/**` | `#` | `log.component()` |\n| `vendors/**` | `#` | `log.component()` |\n| `stores/**` | `#` | `log.component()` |\n| `state/**` | `#` | `log.component()` |\n| `reducers/**` | `#` | `log.component()` |\n| `config/**` | `#` | `log.component()` |\n| `middleware/**` | `^` | `log.gate()` |\n| `auth/**` | `^` | `log.gate()` |\n| `guards/**` | `^` | `log.gate()` |\n| `policies/**` | `^` | `log.gate()` |\n| `events/**` | `!` | `log.signal()` |\n| `handlers/**` | `!` | `log.signal()` |\n| `listeners/**` | `!` | `log.signal()` |\n| `hooks/**` | `!` | `log.signal()` |\n| `flows/**` | `$` | `log.flow()` |\n| `sagas/**` | `$` | `log.flow()` |\n| `workflows/**` | `$` | `log.flow()` |\n| `pipelines/**` | `$` | `log.flow()` |\n| `aspects/**` | `~` | `log.aspect()` |\n| `rules/**` | `~` | `log.aspect()` |\n| `constraints/**` | `~` | `log.aspect()` |\n\nSee `.paradigm/specs/logger.md` for full specification."},portal:{description:"Portal protocol \u2014 authorization, gates, portal.yaml structure and workflow",generate:()=>`# Portal Protocol (Authorization)
|
|
100
|
+
`}:{handled:false,text:""}}var ce={"add-feature":"Pathway for adding a new user-facing feature with proper symbol definitions","add-gate":"Add a new gate (portal) for authorization control","debug-auth":"Debug authentication and authorization issues","implement-ftux":"Implement First-Time User Experience (FTUX) flow","implement-sandbox":"Set up a sandbox environment for testing","read-docs":"Read and understand existing documentation",refactor:"Refactor existing code with proper planning","run-e2e-tests":"Run and debug end-to-end tests","trace-flow":"Trace a flow through the system","validate-portals":"Validate portal.yaml configuration"};function pe(e,s){let n=[m.join(__dirname,"../../../../paradigm/templates/paradigm",e),m.join(s.rootDir,"node_modules/@a-company/paradigm/templates/paradigm",e),m.join(s.rootDir,"../../packages/paradigm/templates/paradigm",e),m.join(process.env.HOME||"",".paradigm/templates",e),m.resolve(__dirname,"../../../paradigm/templates/paradigm",e)];for(let t of n)try{if(l.existsSync(t))return t}catch{}return null}function J(e){return pe("prompts",e)}function de(e){return Math.ceil(e.length/3.5)}function B(e){let s=J(e);if(!s)return [];try{return l.readdirSync(s).filter(t=>t.endsWith(".md")).map(t=>{let o=t.replace(".md",""),i=m.join(s,t),r=l.statSync(i),a=l.readFileSync(i,"utf8");return {name:o,description:ce[o]||`Prompt template: ${o}`,filename:t,size:r.size,tokens:de(a)}})}catch{return []}}function le(e,s){let n=J(s);if(!n)return {found:false,content:"",error:"Prompts directory not found. Ensure @a-company/paradigm is installed."};let t=m.join(n,`${e}.md`);try{if(!l.existsSync(t)){let i=B(s).map(r=>r.name);return {found:!1,content:"",error:`Prompt "${e}" not found. Available prompts: ${i.join(", ")}`}}return {content:l.readFileSync(t,"utf8"),found:!0}}catch(o){return {found:false,content:"",error:`Error reading prompt: ${o.message}`}}}function V(){return [{uri:"paradigm://prompts",name:"Prompts",description:"List all available prompt templates with metadata (name, description, size)",mimeType:"application/json"},{uri:"paradigm://prompts/{name}",name:"Prompt Content",description:"Get a specific prompt template content. Replace {name} with prompt name (e.g., add-feature)",mimeType:"text/markdown"}]}async function Y(e,s){let n=`paradigm://${e}`;if(e==="prompts"){let t=B(s),o=t.reduce((a,p)=>a+p.size,0),i=t.reduce((a,p)=>a+p.tokens,0),r=JSON.stringify({count:t.length,totalSize:o,totalTokens:i,prompts:t.map(a=>({name:a.name,description:a.description,size:a.size,tokens:a.tokens,uri:`paradigm://prompts/${a.name}`})),usage:"Read a specific prompt with paradigm://prompts/{name}"},null,2);return p(r.length,n),{handled:true,text:r,mimeType:"application/json"}}if(e.startsWith("prompts/")){let t=decodeURIComponent(e.replace("prompts/","")),{content:o,found:i,error:r}=le(t,s);if(!i){let a=JSON.stringify({error:r,name:t},null,2);return p(a.length,n),{handled:true,text:a,mimeType:"application/json"}}return p(o.length,n),{handled:true,text:o,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}var A={disciplines:"Language and discipline-agnostic symbol mappings for different domains",scan:"Paradigm Probe protocol for visual discovery and UI-to-code mapping","context-tracking":"Context tracking system for session monitoring and handoffs"};function me(e,s){let n=[m.join(__dirname,"../../../../paradigm/templates/paradigm",e),m.join(s.rootDir,"node_modules/@a-company/paradigm/templates/paradigm",e),m.join(s.rootDir,"../../packages/paradigm/templates/paradigm",e),m.join(process.env.HOME||"",".paradigm/templates",e),m.resolve(__dirname,"../../../paradigm/templates/paradigm",e)];for(let t of n)try{if(l.existsSync(t))return t}catch{}return null}function Q(e){return me("specs",e)}function ge(e){return Math.ceil(e.length/3.5)}function ue(e){let s=Q(e);if(!s)return [];let n=[];for(let[t,o]of Object.entries(A)){let i=`${t}.md`,r=m.join(s,i);try{if(l.existsSync(r)){let a=l.statSync(r),p=l.readFileSync(r,"utf8");n.push({name:t,description:o,filename:i,size:a.size,tokens:ge(p)});}}catch{}}return n}function fe(e,s){if(!A[e]){let o=Object.keys(A);return {found:false,content:"",error:`"${e}" is not a reference spec. Reference specs available via MCP: ${o.join(", ")}. Project-specific specs should be read from .paradigm/specs/ directly.`}}let n=Q(s);if(!n)return {found:false,content:"",error:"Specs directory not found. Ensure @a-company/paradigm is installed."};let t=m.join(n,`${e}.md`);try{return l.existsSync(t)?{content:l.readFileSync(t,"utf8"),found:!0}:{found:!1,content:"",error:`Spec "${e}" file not found at expected location.`}}catch(o){return {found:false,content:"",error:`Error reading spec: ${o.message}`}}}function K(){return [{uri:"paradigm://specs",name:"Reference Specs",description:"List reference specifications (disciplines, scan, context-tracking)",mimeType:"application/json"},{uri:"paradigm://specs/{name}",name:"Spec Content",description:"Get a reference spec. Available: disciplines, scan, context-tracking",mimeType:"text/markdown"}]}async function X(e,s){let n=`paradigm://${e}`;if(e==="specs"){let t=ue(s),o=t.reduce((a,p)=>a+p.size,0),i=t.reduce((a,p)=>a+p.tokens,0),r=JSON.stringify({count:t.length,totalSize:o,totalTokens:i,note:"These are reference specs served via MCP. Project-specific specs (logger, symbols, etc.) should be read from .paradigm/specs/ directly.",specs:t.map(a=>({name:a.name,description:a.description,size:a.size,tokens:a.tokens,uri:`paradigm://specs/${a.name}`}))},null,2);return p(r.length,n),{handled:true,text:r,mimeType:"application/json"}}if(e.startsWith("specs/")&&e!=="specs/"){let t=decodeURIComponent(e.replace("specs/","")),{content:o,found:i,error:r}=fe(t,s);if(!i){let a=JSON.stringify({error:r,name:t},null,2);return p(a.length,n),{handled:true,text:a,mimeType:"application/json"}}return p(o.length,n),{handled:true,text:o,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}var M={commands:"Complete CLI command reference with examples and usage guidance",queries:"jq query examples for querying the constellation symbol graph"};function he(e,s){let n=[m.join(__dirname,"../../../../paradigm/templates/paradigm",e),m.join(s.rootDir,"node_modules/@a-company/paradigm/templates/paradigm",e),m.join(s.rootDir,"../../packages/paradigm/templates/paradigm",e),m.join(process.env.HOME||"",".paradigm/templates",e),m.resolve(__dirname,"../../../paradigm/templates/paradigm",e)];for(let t of n)try{if(l.existsSync(t))return t}catch{}return null}function Z(e){return he("docs",e)}function ye(e){return Math.ceil(e.length/3.5)}function be(e){let s=Z(e);if(!s)return [];let n=[];for(let[t,o]of Object.entries(M)){let i=`${t}.md`,r=m.join(s,i);try{if(l.existsSync(r)){let a=l.statSync(r),p=l.readFileSync(r,"utf8");n.push({name:t,description:o,filename:i,size:a.size,tokens:ye(p)});}}catch{}}return n}function we(e,s){if(!M[e]){let o=Object.keys(M);return {found:false,content:"",error:`"${e}" is not a reference doc. Reference docs available via MCP: ${o.join(", ")}. Project-specific docs (patterns, troubleshooting, etc.) should be read from .paradigm/docs/ directly.`}}let n=Z(s);if(!n)return {found:false,content:"",error:"Docs directory not found. Ensure @a-company/paradigm is installed."};let t=m.join(n,`${e}.md`);try{return l.existsSync(t)?{content:l.readFileSync(t,"utf8"),found:!0}:{found:!1,content:"",error:`Doc "${e}" file not found at expected location.`}}catch(o){return {found:false,content:"",error:`Error reading doc: ${o.message}`}}}function ee(){return [{uri:"paradigm://docs",name:"Reference Docs",description:"List reference documentation (commands, queries)",mimeType:"application/json"},{uri:"paradigm://docs/{name}",name:"Doc Content",description:"Get a reference doc. Available: commands, queries",mimeType:"text/markdown"}]}async function te(e,s){let n=`paradigm://${e}`;if(e==="docs"){let t=be(s),o=t.reduce((a,p)=>a+p.size,0),i=t.reduce((a,p)=>a+p.tokens,0),r=JSON.stringify({count:t.length,totalSize:o,totalTokens:i,note:"These are reference docs served via MCP. Project-specific docs (patterns, troubleshooting, etc.) should be read from .paradigm/docs/ directly.",docs:t.map(a=>({name:a.name,description:a.description,size:a.size,tokens:a.tokens,uri:`paradigm://docs/${a.name}`}))},null,2);return p(r.length,n),{handled:true,text:r,mimeType:"application/json"}}if(e.startsWith("docs/")&&e!=="docs/"){let t=decodeURIComponent(e.replace("docs/","")),{content:o,found:i,error:r}=we(t,s);if(!i){let a=JSON.stringify({error:r,name:t},null,2);return p(a.length,n),{handled:true,text:a,mimeType:"application/json"}}return p(o.length,n),{handled:true,text:o,mimeType:"text/markdown"}}return {handled:false,text:"",mimeType:"application/json"}}var j={logging:{description:"Paradigm logger usage, symbol-to-method mapping by directory",generate:()=>"# Paradigm Logging Guide\n\n**IMPORTANT:** Use the Paradigm logger instead of raw console.log/print.\n\n## Usage Pattern\n\n```typescript\nlog.component('#login-handler').info('Starting login', { email });\nlog.component('#database').debug('Query executed', { duration });\nlog.gate('^authenticated').warn('Access denied', { userId });\nlog.signal('!login-success').info('User authenticated');\nlog.flow('$checkout').info('Flow step reached');\nlog.aspect('~audit-required').info('Audit triggered');\n```\n\n## Symbol Mapping by Directory\n\n| Directory | Symbol | Logger Method |\n|-----------|--------|---------------|\n| `features/**` | `#` | `log.component()` |\n| `routes/**` | `#` | `log.component()` |\n| `api/**` | `#` | `log.component()` |\n| `endpoints/**` | `#` | `log.component()` |\n| `commands/**` | `#` | `log.component()` |\n| `models/**` | `#` | `log.component()` |\n| `components/**` | `#` | `log.component()` |\n| `lib/**` | `#` | `log.component()` |\n| `utils/**` | `#` | `log.component()` |\n| `services/**` | `#` | `log.component()` |\n| `core/**` | `#` | `log.component()` |\n| `drivers/**` | `#` | `log.component()` |\n| `systems/**` | `#` | `log.component()` |\n| `integrations/**` | `#` | `log.component()` |\n| `external/**` | `#` | `log.component()` |\n| `vendors/**` | `#` | `log.component()` |\n| `stores/**` | `#` | `log.component()` |\n| `state/**` | `#` | `log.component()` |\n| `reducers/**` | `#` | `log.component()` |\n| `config/**` | `#` | `log.component()` |\n| `middleware/**` | `^` | `log.gate()` |\n| `auth/**` | `^` | `log.gate()` |\n| `guards/**` | `^` | `log.gate()` |\n| `policies/**` | `^` | `log.gate()` |\n| `events/**` | `!` | `log.signal()` |\n| `handlers/**` | `!` | `log.signal()` |\n| `listeners/**` | `!` | `log.signal()` |\n| `hooks/**` | `!` | `log.signal()` |\n| `flows/**` | `$` | `log.flow()` |\n| `sagas/**` | `$` | `log.flow()` |\n| `workflows/**` | `$` | `log.flow()` |\n| `pipelines/**` | `$` | `log.flow()` |\n| `aspects/**` | `~` | `log.aspect()` |\n| `rules/**` | `~` | `log.aspect()` |\n| `constraints/**` | `~` | `log.aspect()` |\n\nSee `.paradigm/specs/logger.md` for full specification."},portal:{description:"Portal protocol \u2014 authorization, gates, portal.yaml structure and workflow",generate:()=>`# Portal Protocol (Authorization)
|
|
101
101
|
|
|
102
102
|
**Portal.yaml is REQUIRED when the project has protected routes.**
|
|
103
103
|
|
|
@@ -111,22 +111,30 @@ Create \`portal.yaml\` in project root when:
|
|
|
111
111
|
## portal.yaml Structure
|
|
112
112
|
|
|
113
113
|
\`\`\`yaml
|
|
114
|
-
|
|
114
|
+
# Gate keys are bare ids (no ^ prefix). The ^ prefix is for gate
|
|
115
|
+
# *references* \u2014 in routes, flow steps, code, and prose.
|
|
116
|
+
version: "2.0"
|
|
115
117
|
gates:
|
|
116
|
-
|
|
118
|
+
authenticated:
|
|
117
119
|
description: User must be logged in
|
|
118
120
|
check: req.user != null
|
|
119
|
-
|
|
121
|
+
project-admin:
|
|
120
122
|
description: User must be admin of the project
|
|
121
123
|
check: project.admins.includes(req.user.id)
|
|
122
|
-
|
|
124
|
+
comment-author:
|
|
123
125
|
description: User must be the comment author
|
|
124
126
|
check: comment.authorId === req.user.id
|
|
125
127
|
|
|
126
128
|
routes:
|
|
127
|
-
"GET /api/projects/:id":
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
"GET /api/projects/:id":
|
|
130
|
+
gates: [^authenticated, ^project-member]
|
|
131
|
+
prizes: []
|
|
132
|
+
"PUT /api/projects/:id":
|
|
133
|
+
gates: [^authenticated, ^project-admin]
|
|
134
|
+
prizes: []
|
|
135
|
+
"DELETE /api/comments/:id":
|
|
136
|
+
gates: [^authenticated, ^comment-author]
|
|
137
|
+
prizes: []
|
|
130
138
|
\`\`\`
|
|
131
139
|
|
|
132
140
|
## When Adding New Endpoints
|
|
@@ -331,7 +339,7 @@ members:
|
|
|
331
339
|
| \`paradigm_ripple\` | \`includeWorkspace: true\` | Cross-project impact analysis |
|
|
332
340
|
| \`paradigm_navigate\` | Automatic | Falls back to siblings |
|
|
333
341
|
| \`paradigm_gates_for_route\` | Automatic | Learns from sibling portal.yaml |
|
|
334
|
-
| \`paradigm_workspace_reindex\` | N/A | Rebuild all member indices |`},university:{description:"
|
|
342
|
+
| \`paradigm_workspace_reindex\` | N/A | Rebuild all member indices |`},university:{description:"University \u2014 multi-tenant content-pack framework (v5.39.0 / v6.0)",generate:()=>'# Paradigm University (v5.39.0 / v6.0)\n\nMulti-tenant content framework for onboarding, policies, quizzes, and\ncompliance material. Packs live in one of three places:\n\n1. **First-party** \u2014 `node_modules/@a-company/university/` (the default).\n2. **Project** \u2014 `.paradigm/university/` (your team\'s content).\n3. **External npm** \u2014 any package with `paradigm.universityPack` in its package.json.\n\n## When to use it\n\n- Agent needs to add onboarding content to a project (`paradigm_university_create`).\n- User is authoring compliance policies or PLSAT-style quizzes.\n- Agent needs the recommended onboarding sequence for a student\n (`paradigm_university_onboard`).\n- Agent needs to search existing content across packs\n (`paradigm_university_search` / `paradigm_university_pack_list`).\n\nSkip for: one-off code docs (use `.purpose`), decisions\n(`paradigm_decision_record`), session history (`paradigm_lore_record`).\n\n## Content types\n\n| Type | Prefix | Format |\n|------|--------|--------|\n| Note | `N-` | Markdown + YAML frontmatter |\n| Policy | `P-` | Markdown + YAML frontmatter (optional compliance fields) |\n| Quiz | `Q-` | YAML (PLSAT-style scenarios supported) |\n| Learning Path | `LP-` | YAML \u2014 ordered/unordered steps |\n| Diploma | `D-` | YAML (auto-generated on quiz completion) |\n\n## MCP tools\n\n| Tool | Input | Output |\n|------|-------|--------|\n| `paradigm_university_search` | `{ type?, tag?, difficulty?, symbol?, query?, category?, track?, pack?, discipline?, limit? }` | `{ count, pack, results: [{ id: "<pack-id>:<entry-id>", title, type, difficulty, tags, symbols }] }` |\n| `paradigm_university_get` | `{ id: "<bare>" | "<pack-id>:<entry-id>", pack? }` | Full entry (frontmatter + body for notes/policies; full quiz/path object) |\n| `paradigm_university_create` | `{ type, title, body?, tags?, symbols?, difficulty?, estimatedMinutes?, prerequisites?, category?, pack?, passThreshold?, questions?, ordered?, steps? }` | `{ created, type, file }` |\n| `paradigm_university_update` | `{ id, pack?, title?, body?, tags?, symbols?, difficulty?, estimatedMinutes?, category? }` | `{ updated, type }` |\n| `paradigm_university_onboard` | `{ student?, pack? }` | `{ university, pack, student, recommended, completed, remaining }` |\n| `paradigm_university_validate` | `{ id?, pack?, deep? }` | `{ pack, status, totalContent, checked, issues: [{ contentId, severity, check, message, fix? }] }` |\n| `paradigm_university_pack_list` | `{ tenant_kind? }` | `{ packs: [{ id, name, version, tenant_kind, discipline?, entry_count, path }] }` |\n\nAll tools accept an optional `pack` argument. Default resolution: project\npack if `.paradigm/university/pack.yaml` exists, else first-party.\n\n## Pack conventions\n\nA pack is a directory containing `pack.yaml` with required fields\n`id`, `name`, `version`, `schema_version: "1"`, `tenant_kind`\n(`first-party | project | external`). Optional fields: `description`,\n`authors`, `license`, `origin_hint`, `content_types`, `disciplines`,\n`branding`, `theme`, `categories`, `compliance`, `dependencies`.\n\nEntry IDs are pack-scoped. The canonical cross-pack address is\n`<pack-id>:<entry-id>` (e.g., `paradigm:N-symbol-basics`). Bare entry\nIDs resolve against the current pack context (`pack` arg or active\nproject pack). Cross-pack references inside entry YAML **must** use the\nqualified form \u2014 the validator rejects bare cross-pack refs.\n\n## CLI surface (v5.39.0)\n\n```\nparadigm university # default teaching app\nparadigm university init # scaffold .paradigm/university/pack.yaml\nparadigm university init --discipline <name> # scaffold sub-pack\nparadigm university list # list discovered packs\nparadigm university list --project # list entries in project pack\nparadigm university add <type> --title "..." [--pack | --project | --discipline]\nparadigm university show <id> [--pack | --project | --discipline]\nparadigm university quiz <id>\nparadigm university status\nparadigm university validate [--deep]\nparadigm university serve --pack <id> # launch specific pack\'s UI\n```\n\n`--pack` / `--project` / `--discipline` selectors live on the\nsubcommands (not on bare `paradigm university`).\n\n## Metrics (v5.39.0 / v6.0)\n\nLocal-only count snapshots at `.paradigm/university/.metrics/`. Privacy\nrule: no titles, no bodies, no user identifiers \u2014 only counts + a\n`sha256(projectRootPath + random_salt)` project hash. Retention 90 days.\nNo remote send; `metrics.remote_consent: pending` is seeded in\n`.paradigm/config.yaml` for v6.1 opt-in.\n\n## Compliance fields (optional, schema-only)\n\nPolicies and diplomas accept `policy_version`, `policy_hash`,\n`policy_versions[]`, `content_hashes[]`. Schema is stable but **no\nenforcement tooling ships at v5.39.0 / v6.0** \u2014 no audit worker, no\ndiploma invalidation, no retention enforcement. Enforcement is v6.x.\n\n## Full guide\n\nSee `docs/guides/university.md` for narrative, examples, audience\ntracks, migration notes, and the v6.3 sunset contract.'},calibration:{description:"Confidence calibration \u2014 recording confidence, assessing correctness, querying stats",generate:()=>`# Confidence Calibration
|
|
335
343
|
|
|
336
344
|
Lore entries support a confidence-assessment loop for building reliability maps.
|
|
337
345
|
|
|
@@ -455,4 +463,4 @@ components:
|
|
|
455
463
|
| When | Tool | Purpose |
|
|
456
464
|
|------|------|---------|
|
|
457
465
|
| Starting any task | \`paradigm_pm_preflight\` | Get compliance plan |
|
|
458
|
-
| Finishing any task | _(handled by stop hook)_ | Auto-checks compliance |`}};function xe(e){return Math.ceil(e.length/3.5)}function oe(){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 ne(e,s){let n=`paradigm://${e}`;if(e==="guidance"){let t=Object.entries(j).map(([r
|
|
466
|
+
| Finishing any task | _(handled by stop hook)_ | Auto-checks compliance |`}};function xe(e){return Math.ceil(e.length/3.5)}function oe(){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 ne(e,s){let n=`paradigm://${e}`;if(e==="guidance"){let t=Object.entries(j).map(([i,r])=>{let a=r.generate();return {name:i,description:r.description,tokens:xe(a)}}),o=JSON.stringify({count:t.length,totalTokens:t.reduce((i,r)=>i+r.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 r=Object.keys(j),a=JSON.stringify({error:`Unknown guidance topic: "${t}"`,available:r},null,2);return p(a.length,n),{handled:true,text:a,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 ie(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(),...q(),...V(),...K(),...ee(),...oe()]})),e.setRequestHandler(ReadResourceRequestSchema,async n$1=>{let t=n$1.params.uri;if(!t?.startsWith("paradigm://"))throw new Error(`Unknown URI scheme: ${t}`);let o=s(),i$1=t.replace("paradigm://","");if(i$1==="symbols"){let r=m$1(o.index),a=n(o.index),p$1=JSON.stringify({project:o.projectName,counts:r,total:Object.values(r).reduce((d,k)=>d+k,0),symbols:a.map(d=>({symbol:d.symbol,type:d.type,description:d.description}))},null,2);return p(p$1.length,t),{contents:[{uri:t,mimeType:"application/json",text:p$1}]}}if(i$1.startsWith("symbol/")){let r=decodeURIComponent(i$1.replace("symbol/","")),a=h$1(o.index,r);if(!a){let d=JSON.stringify({error:"Symbol not found",symbol:r,available:n(o.index).filter(k=>k.symbol.includes(r.slice(1))).slice(0,5).map(k=>k.symbol)},null,2);return p(d.length,t),{contents:[{uri:t,mimeType:"application/json",text:d}]}}let p$1=JSON.stringify({symbol:a.symbol,type:a.type,description:a.description,filePath:a.filePath,references:a.references,referencedBy:a.referencedBy,tags:a.tags,data:a.data},null,2);return p(p$1.length,t),{contents:[{uri:t,mimeType:"application/json",text:p$1}]}}if(i$1.startsWith("symbols/type/")){let r=i$1.replace("symbols/type/",""),a=i(o.index,r),p$1=JSON.stringify({type:r,count:a.length,symbols:a.map(d=>({symbol:d.symbol,description:d.description,filePath:d.filePath,referencesCount:d.references.length,referencedByCount:d.referencedBy.length}))},null,2);return p(p$1.length,t),{contents:[{uri:t,mimeType:"application/json",text:p$1}]}}if(i$1==="gates"){let r=F(o),a=JSON.stringify({count:r.length,gates:r},null,2);return p(a.length,t),{contents:[{uri:t,mimeType:"application/json",text:a}]}}if(i$1==="flows"){let r=I(o),a=JSON.stringify({count:r.length,flows:r},null,2);return p(a.length,t),{contents:[{uri:t,mimeType:"application/json",text:a}]}}if(i$1.startsWith("wisdom/")){let r=await z(i$1,o);if(r.handled)return p(r.text.length),{contents:[{uri:t,mimeType:"application/json",text:r.text}]}}if(i$1.startsWith("history/")){let r=await $(i$1,o);if(r.handled)return p(r.text.length),{contents:[{uri:t,mimeType:"application/json",text:r.text}]}}if(i$1.startsWith("context/")){let r=await H(i$1);if(r.handled)return p(r.text.length),{contents:[{uri:t,mimeType:r.text.startsWith("#")?"text/markdown":"application/json",text:r.text}]}}if(i$1==="prompts"||i$1.startsWith("prompts/")){let r=await Y(i$1,o);if(r.handled)return {contents:[{uri:t,mimeType:r.mimeType,text:r.text}]}}if(i$1==="specs"||i$1.startsWith("specs/")){let r=await X(i$1,o);if(r.handled)return {contents:[{uri:t,mimeType:r.mimeType,text:r.text}]}}if(i$1==="docs"||i$1.startsWith("docs/")){let r=await te(i$1,o);if(r.handled)return {contents:[{uri:t,mimeType:r.mimeType,text:r.text}]}}if(i$1==="guidance"||i$1.startsWith("guidance/")){let r=await ne(i$1);if(r.handled)return {contents:[{uri:t,mimeType:r.mimeType,text:r.text}]}}throw new Error(`Unknown resource: ${i$1}`)});}b();var _=process.argv[2]||process.cwd(),w=null;function re(){if(!w)throw new Error("Project context not loaded");return w}async function je(){w=await d(_),sa(_,w).catch(e=>{a.component("#paradigm-mcp").warn("Background reindex failed",{error:e.message});});}async function Te(){a.component("#paradigm-mcp").info("Loading project",{projectDir:_});try{w=await d(_),j$1().setRootDir(w.rootDir),a.component("#paradigm-mcp").info("Project loaded",{symbols:w.aggregation.symbols.length,project:w.projectName});}catch(n){a.component("#paradigm-mcp").error("Error loading project",{error:n.message}),process.exit(1);}g(_);let e=new Server({name:"paradigm",version:"0.1.0"},{capabilities:{resources:{},tools:{}}});ie(e,re),h(e,re,je),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");}Te().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'./chunk-5TAVYPOV.js';import*as g from'crypto';import*as t from'fs';import*as s from'path';import*as d from'js-yaml';var b=".paradigm/university",k=".paradigm/university/.metrics",v=".paradigm/.metrics-salt",x=".paradigm/config.yaml",_="pack.yaml",M="1",R=90,j=1440*60*1e3;function D(e){let n=s.join(e,v),i;if(t.existsSync(n))try{i=t.readFileSync(n,"utf8").trim(),i||(i=S(n));}catch{i=S(n);}else i=S(n);return g.createHash("sha256").update(s.resolve(e)+i).digest("hex")}function S(e){let n=g.randomBytes(32).toString("hex");try{t.mkdirSync(s.dirname(e),{recursive:!0}),t.writeFileSync(e,n,{mode:384,encoding:"utf8"});try{t.chmodSync(e,384);}catch{}}catch{}return n}function T(e){let n=s.join(e,x);if(!t.existsSync(n))return true;try{let i=t.readFileSync(n,"utf8"),r=d.load(i);return !r||!r.metrics?!0:r.metrics.local_snapshots_enabled!==!1}catch{return true}}function A(e){let n=[],i=s.join(e,"node_modules","@a-company","university");if(t.existsSync(s.join(i,_)))try{let o=d.load(t.readFileSync(s.join(i,_),"utf8"));o?.tenant_kind&&n.push({tenantKind:o.tenant_kind});}catch{}let r=s.join(e,b);if(t.existsSync(r)){let o=s.join(r,_),a;if(t.existsSync(o))try{let c=d.load(t.readFileSync(o,"utf8"));c?.tenant_kind&&(n.push({tenantKind:c.tenant_kind}),a=c.id);}catch{}try{let c=t.readdirSync(r,{withFileTypes:!0});for(let l of c){if(!l.isDirectory()||l.name.startsWith("."))continue;let y=s.join(r,l.name,_);if(t.existsSync(y))try{let h=d.load(t.readFileSync(y,"utf8"));h?.tenant_kind&&n.push({tenantKind:h.tenant_kind,parentPackId:a});}catch{}}}catch{}}return n}function p(e,n){if(!t.existsSync(e))return 0;try{return t.readdirSync(e).filter(i=>i.endsWith(n)).length}catch{return 0}}function m(e,n,i){if(!t.existsSync(e))return 0;let r=0;try{for(let o of t.readdirSync(e).filter(a=>a.endsWith(n)))try{t.statSync(s.join(e,o)).mtime.getTime()>=i&&(r+=1);}catch{}}catch{}return r}function E(e){if(!t.existsSync(e))return Date.now();let n=0,i=r=>{let o;try{o=t.readdirSync(r,{withFileTypes:!0});}catch{return}for(let a of o){let c=s.join(r,a.name);try{if(a.isDirectory())i(c);else {let l=t.statSync(c).mtime.getTime();l>n&&(n=l);}}catch{}}};return i(e),n||Date.now()}function z(e){if(!T(e))return;let n=s.join(e,k);try{t.mkdirSync(n,{recursive:!0});}catch{return}let i=A(e),r={first_party:0,project:0,external:0};for(let f of i)f.tenantKind==="first-party"?r.first_party+=1:f.tenantKind==="project"?r.project+=1:f.tenantKind==="external"&&(r.external+=1);let o=s.join(e,b),a=s.join(o,"content"),c=t.existsSync(o),l={notes:p(s.join(a,"notes"),".md"),policies:p(s.join(a,"policies"),".md"),quizzes:p(s.join(a,"quizzes"),".yaml"),paths:p(s.join(a,"paths"),".yaml"),diplomas:p(s.join(o,"diplomas"),".yaml")},y=i.filter(f=>f.parentPackId).length,h=c?Math.max(0,Math.floor((Date.now()-E(a))/j)):0,u=Date.now()-30*j,w={schema_version:M,captured_at:new Date().toISOString(),project_salt_hash:D(e),packs:{count:i.length,by_tenant_kind:r},project_pack:{exists:i.some(f=>f.tenantKind==="project"&&!f.parentPackId),entry_counts:l,disciplines:y,last_modified_days_ago:h},activity:{quiz_completions_last_30d:m(s.join(o,"diplomas"),".yaml",u),entries_created_last_30d:m(s.join(a,"notes"),".md",u)+m(s.join(a,"policies"),".md",u)+m(s.join(a,"quizzes"),".yaml",u)+m(s.join(a,"paths"),".yaml",u)}},I=new Date().toISOString().slice(0,10),F=s.join(n,`snapshot-${I}.json`);try{t.writeFileSync(F,JSON.stringify(w,null,2),"utf8");}catch{return}try{P(e);}catch{}}function P(e,n=R){let i=s.join(e,k);if(!t.existsSync(i))return;let r;try{r=t.readdirSync(i).filter(a=>a.startsWith("snapshot-")&&a.endsWith(".json"));}catch{return}let o=Date.now()-n*j;for(let a of r){let c=a.match(/^snapshot-(\d{4}-\d{2}-\d{2})\.json$/);if(!c)continue;let l=Date.parse(c[1]);if(!isNaN(l)&&l<o)try{t.unlinkSync(s.join(i,a));}catch{}}}function N(e){let n=s.join(e,x);if(!t.existsSync(n))return;let i;try{i=t.readFileSync(n,"utf8");}catch{return}let r;try{r=d.load(i)??{};}catch{return}let o=r.metrics;if(o&&"remote_consent"in o)return;let a={...r};a.metrics={...o||{},remote_consent:"pending",local_snapshots_enabled:o?.local_snapshots_enabled??true};try{t.writeFileSync(n,d.dump(a,{lineWidth:-1,quotingType:'"'}),"utf8");}catch{}}export{z as captureSnapshot,P as pruneOldSnapshots,N as seedMetricsConsent};
|
|
@@ -48,7 +48,7 @@ component_types:
|
|
|
48
48
|
`),{status:"applied",message:"Added component_types glossary to config.yaml",filesModified:[".paradigm/config.yaml"]}):{status:"error",message:"Cannot read config.yaml"}}},ue={id:"add-discipline-config",introducedIn:"3.4.0",description:"Add discipline field to config.yaml",category:"config",auto:true,async check(e){let t=A(e);return t?D(t,"discipline")?{needed:false,reason:"discipline already set"}:{needed:true,reason:"Missing discipline field"}:{needed:false,reason:"No config.yaml found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would add discipline to config.yaml"};let n=I(e);if(!n)return {status:"error",message:"Cannot read config.yaml"};let i=n.replace(/^(project:\s*.+)$/m,`$1
|
|
49
49
|
discipline: auto`);return i===n?x(e,n.trimEnd()+`
|
|
50
50
|
discipline: auto
|
|
51
|
-
`):x(e,i),{status:"applied",message:"Added discipline: auto to config.yaml",filesModified:[".paradigm/config.yaml"]}}},fe={id:"sync-templates",introducedIn:"evergreen",description:"Update specs/ and docs/ from installed CLI templates",category:"template",auto:true,async check(e){let t=$();if(!t)return {needed:false,reason:"Templates directory not found"};let n=[],i=["specs","docs","prompts"];for(let r of i){let a=p.join(t,r),d=p.join(e,".paradigm",r);if(o.existsSync(a))try{let g=o.readdirSync(a).filter(m=>o.statSync(p.join(a,m)).isFile());for(let m of g)o.existsSync(p.join(d,m))||n.push(`${r}/${m}`);}catch{}}return n.length===0?{needed:false,reason:"All templates are up to date"}:{needed:true,reason:`${n.length} new template file(s) available`,details:n.map(r=>`New: ${r}`)}},async apply(e,t){let n=$();if(!n)return {status:"error",message:"Templates directory not found"};let i=p.basename(e),r=[],a=["specs","docs","prompts"];for(let d of a){let g=p.join(n,d),m=p.join(e,".paradigm",d);if(o.existsSync(g)){t.dryRun||o.mkdirSync(m,{recursive:true});try{let S=o.readdirSync(g,{withFileTypes:!0});for(let k of S){if(k.isDirectory())continue;let M=p.join(m,k.name);if(!o.existsSync(M)){if(t.dryRun){r.push(`${d}/${k.name}`);continue}let c=o.readFileSync(p.join(g,k.name),"utf8");c=c.replace(/\{\{PROJECT_NAME\}\}/g,i),o.writeFileSync(M,c,"utf8"),r.push(`${d}/${k.name}`);}}}catch{}}}return t.dryRun?{status:"skipped",message:`Would copy ${r.length} template file(s)`}:r.length===0?{status:"skipped",message:"No new templates to sync"}:{status:"applied",message:`Synced ${r.length} template file(s)`,filesCreated:r.map(d=>`.paradigm/${d}`)}}},me={id:"refresh-hooks",introducedIn:"evergreen",description:"Reinstall hook scripts from plugin",category:"hook",auto:true,async check(e){let t=[p.join(e,".claude","hooks"),p.join(e,".cursor","hooks")];for(let i of t)if(o.existsSync(i))try{if(o.readdirSync(i).some(a=>a.includes("paradigm")))return {needed:!1,reason:"Hooks are installed"}}catch{}let n=p.join(e,".claude","settings.local.json");if(o.existsSync(n))try{if(JSON.parse(o.readFileSync(n,"utf8")).hooks)return {needed:!1,reason:"Plugin-managed hooks are configured"}}catch{}return {needed:true,reason:"No paradigm hooks found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would reinstall hooks"};try{let{hooksInstallCommand:n}=await import('./hooks-
|
|
51
|
+
`):x(e,i),{status:"applied",message:"Added discipline: auto to config.yaml",filesModified:[".paradigm/config.yaml"]}}},fe={id:"sync-templates",introducedIn:"evergreen",description:"Update specs/ and docs/ from installed CLI templates",category:"template",auto:true,async check(e){let t=$();if(!t)return {needed:false,reason:"Templates directory not found"};let n=[],i=["specs","docs","prompts"];for(let r of i){let a=p.join(t,r),d=p.join(e,".paradigm",r);if(o.existsSync(a))try{let g=o.readdirSync(a).filter(m=>o.statSync(p.join(a,m)).isFile());for(let m of g)o.existsSync(p.join(d,m))||n.push(`${r}/${m}`);}catch{}}return n.length===0?{needed:false,reason:"All templates are up to date"}:{needed:true,reason:`${n.length} new template file(s) available`,details:n.map(r=>`New: ${r}`)}},async apply(e,t){let n=$();if(!n)return {status:"error",message:"Templates directory not found"};let i=p.basename(e),r=[],a=["specs","docs","prompts"];for(let d of a){let g=p.join(n,d),m=p.join(e,".paradigm",d);if(o.existsSync(g)){t.dryRun||o.mkdirSync(m,{recursive:true});try{let S=o.readdirSync(g,{withFileTypes:!0});for(let k of S){if(k.isDirectory())continue;let M=p.join(m,k.name);if(!o.existsSync(M)){if(t.dryRun){r.push(`${d}/${k.name}`);continue}let c=o.readFileSync(p.join(g,k.name),"utf8");c=c.replace(/\{\{PROJECT_NAME\}\}/g,i),o.writeFileSync(M,c,"utf8"),r.push(`${d}/${k.name}`);}}}catch{}}}return t.dryRun?{status:"skipped",message:`Would copy ${r.length} template file(s)`}:r.length===0?{status:"skipped",message:"No new templates to sync"}:{status:"applied",message:`Synced ${r.length} template file(s)`,filesCreated:r.map(d=>`.paradigm/${d}`)}}},me={id:"refresh-hooks",introducedIn:"evergreen",description:"Reinstall hook scripts from plugin",category:"hook",auto:true,async check(e){let t=[p.join(e,".claude","hooks"),p.join(e,".cursor","hooks")];for(let i of t)if(o.existsSync(i))try{if(o.readdirSync(i).some(a=>a.includes("paradigm")))return {needed:!1,reason:"Hooks are installed"}}catch{}let n=p.join(e,".claude","settings.local.json");if(o.existsSync(n))try{if(JSON.parse(o.readFileSync(n,"utf8")).hooks)return {needed:!1,reason:"Plugin-managed hooks are configured"}}catch{}return {needed:true,reason:"No paradigm hooks found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would reinstall hooks"};try{let{hooksInstallCommand:n}=await import('./hooks-TFMMMB2H.js');return await n({force:!0}),{status:"applied",message:"Hooks reinstalled"}}catch(n){return {status:"error",message:`Hook install failed: ${n.message}`}}}},b=[Q,X,Z,ee,te,ne,se,ue,de,le,re,oe,ie,ae,ce,pe,ge,fe,me];var he=createRequire(import.meta.url),{version:W}=he("../package.json");function C(e){let t=p.join(e,".paradigm","migrate.yaml");if(!o.existsSync(t))return null;try{let n=o.readFileSync(t,"utf8");return F.load(n)}catch{return null}}async function V(e){let t=p.join(e,".paradigm"),n=C(e),i=n?.applied.map(l=>l.id)??[],r="unknown",a=p.join(t,"config.yaml");if(o.existsSync(a))try{let l=F.load(o.readFileSync(a,"utf8"));r=String(l.version??"unknown");}catch{}let g=["specs","docs","prompts","lore","tasks","protocols","personas"].filter(l=>!o.existsSync(p.join(t,l))),m=["discipline","tag-bank","purpose-required","component_types"],S=[];if(o.existsSync(a))try{let l=F.load(o.readFileSync(a,"utf8"));S=m.filter(h=>{let j=h.replace(/-/g,"_");return !(h in l)&&!(j in l)&&!(h.replace(/_/g,"-")in l)});}catch{}let k=[],M=$();if(M){let l=["specs","docs"];for(let h of l){let j=p.join(M,h),L=p.join(t,h);if(o.existsSync(j)&&o.existsSync(L)){let J=o.readdirSync(j).filter(R=>!o.statSync(p.join(j,R)).isDirectory());for(let R of J){let Y=p.join(L,R);o.existsSync(Y)||k.push(`${h}/${R}`);}}}}let c=!o.existsSync(p.join(e,".claude","hooks")),u=[];for(let l of b){let h=l.introducedIn==="evergreen";if(i.includes(l.id)&&!h)continue;(await l.check(e)).needed&&u.push(l);}return {configVersion:r,cliVersion:W,pendingMigrations:u,appliedIds:i,health:{missingDirectories:g,missingConfigFields:S,staleTemplates:k,hooksOutdated:c}}}async function U(e){let t=[],n=new Date().toISOString();for(let i of b){if(i.introducedIn==="evergreen")continue;(await i.check(e)).needed||t.push({id:i.id,appliedAt:n,cliVersion:W});}return t}function $(){let e=new URL(import.meta.url).pathname,t=p.dirname(e),n=[p.join(t,"..","..","..","templates","paradigm"),p.join(t,"..","..","templates","paradigm"),p.join(t,"..","templates","paradigm")];for(let i of n)if(o.existsSync(i))return i;return null}var ke=createRequire(import.meta.url),{version:N}=ke("../package.json");async function B(e){let t=C(e);if(t)return t;let n=await U(e);return {version:"1.0",cliVersion:N,lastMigrated:new Date().toISOString(),applied:n}}function _(e,t){let n=p.join(e,".paradigm","migrate.yaml");o.mkdirSync(p.dirname(n),{recursive:true}),t.cliVersion=N,t.lastMigrated=new Date().toISOString(),o.writeFileSync(n,F.dump(t,{indent:2,lineWidth:120,noRefs:true,sortKeys:false,quotingType:'"'}),"utf8");}async function E(e,t,n,i){let r={applied:0,skipped:0,errors:0,manual:0,results:[]},a=new Date().toISOString();for(let d of t){if(!d.auto){r.manual++,r.results.push({id:d.id,result:{status:"skipped",message:"Manual review recommended"}});continue}try{let g=await d.apply(e,n);r.results.push({id:d.id,result:g}),g.status==="applied"?(r.applied++,i.applied.push({id:d.id,appliedAt:a,cliVersion:N})):g.status==="skipped"?r.skipped++:r.errors++;}catch(g){r.errors++,r.results.push({id:d.id,result:{status:"error",message:g.message}});}}return r}async function _e(e={}){let t=process.cwd(),n=p.join(t,".paradigm");if((!o.existsSync(n)||!o.statSync(n).isDirectory())&&!(o.existsSync(n)&&o.statSync(n).isFile())){e.quiet||console.log(s.yellow("\n No .paradigm/ directory found. Run `paradigm init` or `paradigm shift` first.\n"));return}let i=we();e.quiet||i.start("Detecting project state...");let r=await V(t);e.quiet||i.stop();let a=await B(t),d=r.pendingMigrations;if(e.only&&e.only.length>0&&(d=d.filter(c=>e.only.includes(c.id))),e.category&&(d=d.filter(c=>c.category===e.category)),e.force){let c=e.only?b.filter(u=>e.only.includes(u.id)):e.category?b.filter(u=>u.category===e.category):b;d=[];for(let u of c)((await u.check(t)).needed||e.force)&&d.push(u);}let g=d.filter(c=>c.auto),m=d.filter(c=>!c.auto);if(e.list){Me(a,r,e);return}if(e.quiet){if(g.length===0)return;let c=await E(t,g,e,a);return _(t,a),c}let S=C(t);if(console.log(s.blue(`
|
|
52
52
|
\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(s.blue("\u2502")+s.white.bold(" paradigm migrate ")+s.blue("\u2502")),console.log(s.blue("\u2502")+s.gray(" Bring your project up to date ")+s.blue("\u2502")),console.log(s.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
|
|
53
53
|
`)),console.log(s.white(` Project: ${s.cyan(p.basename(t))}`)),console.log(s.white(` Config version: ${s.cyan(r.configVersion)}`)),console.log(s.white(` CLI version: ${s.cyan(r.cliVersion)}`)),console.log(s.white(` Last migrated: ${s.cyan(S?.lastMigrated??"never")}`)),console.log(""),d.length===0){console.log(s.green(` All migrations are up to date.
|
|
54
54
|
`)),S||(_(t,a),e.verbose&&console.log(s.gray(` Created .paradigm/migrate.yaml with bootstrap state.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a,c}from'./chunk-VNIX5KBT.js';import'./chunk-5TAVYPOV.js';import r from'chalk';import*as e from'fs';import*as i from'path';import*as k from'js-yaml';var D=".paradigm/assessments";async function j(_){let y=process.cwd(),a$1=i.join(y,D,"arcs"),p=!!_.dryRun;if(!e.existsSync(a$1)){console.log(r.yellow(`
|
|
3
|
+
No assessments found at .paradigm/assessments/arcs/
|
|
4
|
+
`));return}let $=e.readdirSync(a$1).filter(o=>e.statSync(i.join(a$1,o)).isDirectory()),l=0,d=0,t=[];for(let o of $){let c$1=i.join(a$1,o,"entries");if(!e.existsSync(c$1))continue;let S=e.readdirSync(c$1).filter(n=>n.endsWith(".yaml")&&!n.endsWith(".migrated"));for(let n of S){let m=i.join(c$1,n);try{let g=e.readFileSync(m,"utf8"),s=k.load(g),w=[`arc:${s.arc_id}`,`assessment:${s.type}`,...s.tags||[],"migrated-from-assessment"],A={id:"",type:s.type==="decision"?"insight":s.type,timestamp:s.date,author:s.author,title:s.title,summary:s.summary,body:s.body,symbols_touched:s.symbols||[],tags:w,linked_lore:s.linked_lore,linked_tasks:s.linked_tasks,linked_commits:s.linked_commits},f={...a(A),id:""};p?console.log(r.gray(` [dry-run] Would migrate: ${s.id} \u2192 lore (arc:${s.arc_id})`)):(await c(y,f),e.renameSync(m,m.replace(".yaml",".migrated")),console.log(r.green(` Migrated: ${s.id} \u2192 ${f.id} (arc:${s.arc_id})`))),l++,t.includes(s.arc_id)||t.push(s.arc_id);}catch(g){console.error(r.red(` Failed to migrate ${n}: ${g}`)),d++;}}}console.log(),console.log(p?r.yellow(` Dry run complete: ${l} entries would be migrated from ${t.length} arcs`):r.green(` Migration complete: ${l} entries migrated from ${t.length} arcs`)),d>0&&console.log(r.yellow(` ${d} entries skipped due to errors`)),console.log(r.gray(` Arcs preserved as tags: ${t.map(o=>`arc:${o}`).join(", ")}`)),console.log();}export{j as loreMigrateAssessmentsCommand};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {f,e,a,c,b as b$1}from'./chunk-WR6D3SC6.js';import'./chunk-5TAVYPOV.js';import*as s from'fs';import*as g from'path';import*as u from'js-yaml';var D=".paradigm/decisions",k=".paradigm/wisdom/decisions",b=".paradigm/lore/entries";async function j(n={}){let d=process.cwd(),a$1=g.join(d,D);f("paradigm migrate decisions"),e(" target: .paradigm/decisions/"),n.dryRun&&e(" mode: dry-run (no writes)"),a("");let t={wisdomConverted:0,wisdomSkipped:0,loreConverted:0,loreSkipped:0,loreRewrittenToInsight:0,warnings:[]};n.dryRun||s.mkdirSync(a$1,{recursive:true});let e$1=W(a$1);if(_(d,a$1,e$1,n,t),C(d,a$1,e$1,n,t),a(""),f("Migration summary"),a(` wisdom decisions converted: ${t.wisdomConverted}`),t.wisdomSkipped>0&&e(` wisdom decisions skipped: ${t.wisdomSkipped}`),a(` lore decisions converted: ${t.loreConverted}`),t.loreSkipped>0&&e(` lore decisions skipped: ${t.loreSkipped}`),t.loreRewrittenToInsight>0&&a(` lore entries rewritten \u2192 insight: ${t.loreRewrittenToInsight}`),t.warnings.length>0){a(""),c("Warnings:");for(let o of t.warnings)e(` - ${o}`);}a(""),n.json&&a(JSON.stringify(t,null,2)),b$1("migrate decisions complete");}function W(n){let d=new Set,a=new Set;if(!s.existsSync(n))return {wisdomIds:d,loreIds:a};try{let t=s.readdirSync(n).filter(e=>e.endsWith(".yaml"));for(let e of t)try{let o=s.readFileSync(g.join(n,e),"utf-8"),l=u.load(o);if(!l)continue;let c=l.tags||[];for(let i of c)i.startsWith("wisdom-decision:")&&d.add(i.slice(16)),i.startsWith("lore-decision:")&&a.add(i.slice(14));}catch{}}catch{}return {wisdomIds:d,loreIds:a}}function _(n,d,a,t,e$1){let o=g.join(n,k);if(!s.existsSync(o)){e(" no .paradigm/wisdom/decisions/ dir \u2014 skipping wisdom migration");return}let l;try{l=s.readdirSync(o).filter(c=>c.endsWith(".yaml"));}catch(c){e$1.warnings.push(`wisdom dir read failed: ${c.message}`);return}for(let c of l){let i=g.join(o,c),r;try{r=u.load(s.readFileSync(i,"utf-8"));}catch(m){e$1.warnings.push(`wisdom parse failed: ${c} \u2014 ${m.message}`);continue}if(!r||!r.id){e$1.warnings.push(`wisdom file missing id: ${c}`);continue}if(a.wisdomIds.has(r.id)){e$1.wisdomSkipped++;continue}let y=r.date||new Date().toISOString().slice(0,10),h=$(y,d,e$1),w=typeof r.rationale=="string"?r.rationale:r.rationale?{factors:r.rationale.factors??[],conclusion:r.rationale.conclusion??""}:void 0,S={id:h,timestamp:new Date().toISOString(),title:r.title||r.id,decision:r.decision||"",...w!==void 0?{rationale:w}:{},participants:[{id:"wisdom-migration",role:"agent",stance:"proposed"}],symbols_affected:r.symbols||[],status:T(r.status),...r.context?{context:r.context}:{},...r.consequences?{consequences:r.consequences}:{},date:y,migrated_from:"wisdom-decision",tags:[`wisdom-decision:${r.id}`,"migrated"]};if(t.dryRun){e$1.wisdomConverted++;continue}try{s.writeFileSync(g.join(d,`${h}.yaml`),u.dump(S,{lineWidth:120,noRefs:!0}),"utf-8"),s.unlinkSync(i),e$1.wisdomConverted++;}catch(m){e$1.warnings.push(`wisdom convert failed: ${c} \u2014 ${m.message}`);}}if(!t.dryRun)try{s.existsSync(o)&&s.readdirSync(o).length===0&&s.rmdirSync(o);}catch{}}function C(n,d,a,t,e$1){let o=g.join(n,b);if(!s.existsSync(o)){e(" no .paradigm/lore/entries/ dir \u2014 skipping lore migration");return}let l=O(o);for(let c of l){let i;try{i=u.load(s.readFileSync(c,"utf-8"));}catch(m){e$1.warnings.push(`lore parse failed: ${g.relative(n,c)} \u2014 ${m.message}`);continue}if(!i||i.type!=="decision"||!i.id)continue;if(a.loreIds.has(i.id)){e$1.loreSkipped++;continue}let r=(i.timestamp||new Date().toISOString()).slice(0,10),y=$(r,d,e$1),h=i.decisions?.[0]?.decision??i.summary??i.title??"",w=i.decisions?.[0]?.rationale??"",S={id:y,timestamp:i.timestamp||new Date().toISOString(),title:i.title||`Migrated lore decision ${i.id}`,decision:h,...w?{rationale:w}:{},participants:[{id:i.author||"lore-migration",role:"human",stance:"proposed"}],symbols_affected:i.symbols_touched||[],status:"active",date:r,migrated_from:"lore-decision",linked_lore:i.id,tags:[`lore-decision:${i.id}`,"migrated"]};if(t.dryRun){e$1.loreConverted++,e$1.loreRewrittenToInsight++;continue}try{s.writeFileSync(g.join(d,`${y}.yaml`),u.dump(S,{lineWidth:120,noRefs:!0}),"utf-8"),e$1.loreConverted++;let m={...i,type:"insight",references:{...i.references||{},decision_id:y},body:`${i.body?i.body+`
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`:""}Original type was 'decision'; migrated to ${y} on ${new Date().toISOString().slice(0,10)}.`};s.writeFileSync(c,u.dump(m,{lineWidth:120,noRefs:!0}),"utf-8"),e$1.loreRewrittenToInsight++;}catch(m){e$1.warnings.push(`lore convert failed: ${g.relative(n,c)} \u2014 ${m.message}`);}}}function O(n){let d=[],a=t=>{let e;try{e=s.readdirSync(t,{withFileTypes:!0});}catch{return}for(let o of e){let l=g.join(t,o.name);o.isDirectory()?a(l):o.isFile()&&(o.name.endsWith(".yaml")||o.name.endsWith(".lore"))&&d.push(l);}};return a(n),d}function T(n){switch((n||"").toLowerCase()){case "accepted":return "active";case "active":case "proposed":case "deprecated":case "superseded":case "rejected":return n.toLowerCase();default:return "active"}}function $(n,d,a){let t=new Set;try{for(let e of s.readdirSync(d))e.startsWith(`TD-${n}-`)&&e.endsWith(".yaml")&&t.add(e.replace(".yaml",""));}catch{}for(let e=1;e<=999;e++){let o=String(e).padStart(3,"0"),l=`TD-${n}-${o}`;if(!t.has(l))return t.add(l),l}return a.warnings.push(`TD-id counter exhausted for ${n}`),`TD-${n}-999`}export{j as migrateDecisionsCommand};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {d,f,e,a,b,c}from'./chunk-WR6D3SC6.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import'chalk';import*as t from'fs';import*as s from'path';import*as q from'js-yaml';function R(e){return Array.isArray(e.options)}function M(e){let a=e.choices;return typeof a=="object"&&a!==null&&!Array.isArray(a)}async function E(e$1){let a$1=process.cwd(),p=e$1.contentDir?s.resolve(a$1,e$1.contentDir):s.resolve(a$1,"packages/university/src/content");t.existsSync(p)||(d(`content dir not found: ${p}`),process.exit(1)),f("paradigm university migrate-plsat"),e(` source: ${s.relative(a$1,p)||p}`),e(` mode: ${e$1.force?"force (overwrite existing)":"idempotent (skip existing)"}`),a("");let i={coursesProcessed:0,notesWritten:0,quizzesWritten:0,pathsWritten:0,plsatQuizzesWritten:0,skipped:[],warnings:[]},y=s.join(p,"courses");if(t.existsSync(y)){let l=t.readdirSync(y).filter(o=>o.endsWith(".json"));for(let o of l){let m=s.join(y,o);try{let n=JSON.parse(t.readFileSync(m,"utf-8"));C(n,p,e$1.force===!0,i),i.coursesProcessed++;}catch(n){i.warnings.push(`courses/${o}: ${n.message}`);}}}else i.warnings.push("courses/ dir not present; skipping course migration");let u=s.join(p,"plsat");if(t.existsSync(u)){let l=t.readdirSync(u).filter(o=>o.endsWith(".json"));for(let o of l){let m=s.join(u,o);try{let n=JSON.parse(t.readFileSync(m,"utf-8"));I(n,o,p,e$1.force===!0,i);}catch(n){i.warnings.push(`plsat/${o}: ${n.message}`);}}}else i.warnings.push("plsat/ dir not present; skipping PLSAT migration");let S=s.resolve(p,"..",".."),g=s.join(S,"pack.yaml");if(t.existsSync(g))e(` pack.yaml already present at ${s.relative(a$1,g)||g}`);else try{O(g),b(`wrote ${s.relative(a$1,g)||g}`);}catch(l){i.warnings.push(`pack.yaml write failed: ${l.message}`);}if(e$1.deleteSources&&(c("--delete-sources: removing source JSON files"),L(p,i)),a(""),f("Migration summary"),a(` courses processed: ${i.coursesProcessed}`),a(` notes written: ${i.notesWritten}`),a(` quizzes written: ${i.quizzesWritten}`),a(` paths written: ${i.pathsWritten}`),a(` PLSAT quizzes written: ${i.plsatQuizzesWritten}`),i.skipped.length>0&&e(` skipped (exists): ${i.skipped.length}`),i.warnings.length>0){a(""),c("Warnings:");for(let l of i.warnings)e(` - ${l}`);}a(""),e$1.json&&a(JSON.stringify(i,null,2)),b("migrate-plsat complete");}function C(e,a,p,i){let y=s.join(a,"notes"),u=s.join(a,"quizzes"),S=s.join(a,"paths");t.mkdirSync(y,{recursive:true}),t.mkdirSync(u,{recursive:true}),t.mkdirSync(S,{recursive:true});let g=new Date().toISOString().slice(0,10),l=[];for(let n of e.lessons||[]){let $=`N-${e.id}-${n.id}`,c=s.join(y,`${$}.md`);if(!t.existsSync(c)||p){let h=["course",e.id,...(n.keyConcepts||[]).slice(0,3).map(V=>V.toLowerCase().split(/\s+/).slice(0,3).join("-").replace(/[^a-z0-9-]/g,"")).filter(Boolean)],f=(n.content||"").split(/\s+/).length,d=Math.max(1,Math.ceil(f/200)),r={id:$,title:n.title,type:"note",author:"paradigm",created:g,updated:g,tags:h,symbols:[],difficulty:"beginner",estimatedMinutes:d,prerequisites:[],category:"paradigm-core",origin:"imported",source:`courses/${e.id}.json`},b=q.dump(r,{lineWidth:-1,noRefs:true,sortKeys:false}),P=n.content||"";t.writeFileSync(c,`---
|
|
3
|
+
${b}---
|
|
4
|
+
|
|
5
|
+
${P}
|
|
6
|
+
`,"utf8"),i.notesWritten++;}else i.skipped.push(`notes/${$}.md`);if(l.push({content:$,required:true}),n.quiz&&n.quiz.length>0){let h=`Q-${e.id}-${n.id}`,f=s.join(u,`${h}.yaml`);if(!t.existsSync(f)||p){let d={id:h,title:`${e.title} \u2014 ${n.title}`,description:`Quiz for lesson: ${n.title}`,author:"paradigm",created:g,updated:g,tags:["course",e.id],symbols:[],difficulty:"beginner",passThreshold:.7,category:"paradigm-core",origin:"imported",source:`courses/${e.id}.json`,questions:n.quiz.map(r=>{if(M(r))return {id:r.id,question:r.question,choices:r.choices,correct:r.correct,...r.explanation?{explanation:r.explanation}:{}};if(R(r))return {id:r.id,question:r.question,options:r.options,correct:r.correct,...r.explanation?{explanation:r.explanation}:{}};throw new Error(`lesson ${n.id}: quiz question ${r.id??"<no-id>"} has neither 'choices' (object) nor 'options' (array) \u2014 cannot migrate.`)})};t.writeFileSync(f,q.dump(d,{lineWidth:-1,noRefs:true,sortKeys:false}),"utf8"),i.quizzesWritten++;}else i.skipped.push(`quizzes/${h}.yaml`);l.push({content:`Q-${e.id}-${n.id}`,required:true,passRequired:true});}}let o=`LP-${e.id}`,m=s.join(S,`${o}.yaml`);if(!t.existsSync(m)||p){let n={id:o,title:e.title,description:e.description,author:"paradigm",created:g,updated:g,tags:["course",e.id],ordered:true,category:"paradigm-core",origin:"imported",source:`courses/${e.id}.json`,steps:l};t.writeFileSync(m,q.dump(n,{lineWidth:-1,noRefs:true,sortKeys:false}),"utf8"),i.pathsWritten++;}else i.skipped.push(`paths/${o}.yaml`);}function I(e,a,p,i,y){let u=s.join(p,"quizzes");t.mkdirSync(u,{recursive:true});let S=a.match(/^v(\d+)/),l=`Q-plsat-v${S?S[1]:String(e.version||"2").split(".")[0]}`,o=s.join(u,`${l}.yaml`);if(t.existsSync(o)&&!i){y.skipped.push(`quizzes/${l}.yaml`);return}let m=new Date().toISOString().slice(0,10),n=[];if("items"in e)for(let c of e.items)if(c.type==="passage")for(let h of c.questions){let f=h.variants.map(r=>({id:r.id,scenario:r.scenario,question:r.question,choices:r.choices,correct:r.correct,explanation:r.explanation})),d=f[0];d&&n.push({id:d.id,scenario:d.scenario,question:d.question,choices:d.choices,correct:d.correct,explanation:d.explanation,slot:h.slot,section:c.course,passageId:c.slot,passage:c.passage,...f.length>1?{variants:f.slice(1)}:{}});}else {let h=c.variants.map(d=>({id:d.id,scenario:d.scenario,question:d.question,choices:d.choices,correct:d.correct,explanation:d.explanation})),f=h[0];if(!f)continue;n.push({id:f.id,scenario:f.scenario,question:f.question,choices:f.choices,correct:f.correct,explanation:f.explanation,slot:c.slot,section:c.course,...h.length>1?{variants:h.slice(1)}:{}});}else for(let c of e.questions)n.push({id:c.id,scenario:c.scenario,question:c.question,choices:c.choices,correct:c.correct,...c.explanation?{explanation:c.explanation}:{},section:c.course});let $={id:l,title:e.title,description:e.description,author:"paradigm",created:m,updated:m,tags:["plsat","certification"],symbols:[],difficulty:"advanced",passThreshold:e.passThreshold,timeLimit:e.timeLimit,..."totalSlots"in e&&e.totalSlots?{totalSlots:e.totalSlots}:{},exam:{kind:"proctored"},category:"paradigm-core",origin:"imported",source:`plsat/${a}`,questions:n};t.writeFileSync(o,q.dump($,{lineWidth:-1,noRefs:true,sortKeys:false}),"utf8"),y.plsatQuizzesWritten++;}function O(e){let a={id:"paradigm",name:"Paradigm University",version:"6.0.0",schema_version:"1",tenant_kind:"first-party",description:"Official Paradigm learning content \u2014 PARA 001-701 courses + PLSAT certification.",authors:["Paradigm team"],license:"MIT",origin_hint:"authored",content_types:["note","quiz","path"],disciplines:["engineering"],branding:{tagline:"Learn Paradigm",institution:"a-company"},theme:{primary:"#6366f1"}};t.mkdirSync(s.dirname(e),{recursive:true}),t.writeFileSync(e,q.dump(a,{lineWidth:-1,noRefs:true,sortKeys:false}),"utf8");}function L(e,a){let p=s.join(e,"courses"),i=s.join(e,"plsat"),y=a$1.component("migrate-plsat");for(let u of [p,i])if(t.existsSync(u))try{let S=t.readdirSync(u).filter(o=>o.endsWith(".json"));for(let o of S)t.unlinkSync(s.join(u,o));let g=s.join(u,".purpose");t.existsSync(g)&&t.unlinkSync(g);let l=t.readdirSync(u);if(l.length===0)t.rmdirSync(u);else {let o=l.join(", "),m=`not removing ${s.relative(process.cwd(),u)||u} \u2014 unexpected leftover files: ${o}`;y.warn(m),a.warnings.push(m);}}catch(S){a.warnings.push(`delete ${u}: ${S.message}`);}}export{E as universityMigratePlsatCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {v}from'./chunk-
|
|
2
|
+
import {v}from'./chunk-M3PPXJU4.js';export{o as adjustAttentionFromFeedback,u as applySurfacingRules,s as autoPromoteJournalEntries,g as detectDebates,n as emitAndProcess,k as engageNomination,r as forwardNominationsToRelay,q as getNeverlandMetrics,p as getNominationStats,j as loadDebates,i as loadNominations,t as loadSurfacingConfig,h as persistNominations,f as processEvent,m as processPendingEvents,l as resolveDebate}from'./chunk-M3PPXJU4.js';import'./chunk-3KVVC4WV.js';import'./chunk-M2HKWR25.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-QGZRM6ZB.js';import'./chunk-K7X3Z3GL.js';import'./chunk-5TAVYPOV.js';v();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {h}from'./chunk-
|
|
2
|
+
import {h}from'./chunk-K7X3Z3GL.js';export{d as addNotebookEntry,c as classifyNotebookScope,f as incrementApplied,a as loadNotebookEntries,e as promoteFromLore,b as searchNotebooks}from'./chunk-K7X3Z3GL.js';import'./chunk-5TAVYPOV.js';h();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a,b}from'./chunk-
|
|
2
|
+
import {a,b}from'./chunk-6SKSV5B2.js';import'./chunk-TYWB5IQJ.js';import'./chunk-WESTEMIM.js';import'./chunk-FYDRENK7.js';import'./chunk-IZSBGW6E.js';import {e as e$1}from'./chunk-AO7ZSRME.js';import {d,c}from'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-LWAIVOSF.js';import'./chunk-JIXHEBGK.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';import*as S from'path';import e from'chalk';import O from'ora';async function I(o,n,t){let i=n?S.resolve(n):process.cwd();if(!o){t.json?console.log(JSON.stringify({error:"Task is required"})):(console.log(e.red(`
|
|
3
3
|
Task is required.`)),console.log(e.gray(`Example: paradigm team orchestrate "Build @payment-system with Stripe"
|
|
4
4
|
`)));return}if(!e$1(i)){t.json?console.log(JSON.stringify({error:"Team not configured"})):console.log(e.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 s=t.budget.split(",");g={};for(let l of s){let[a,r]=l.split("=");a==="tokens"&&(g.maxTokens=parseInt(r)),a==="cost"&&(g.maxCostUsd=parseFloat(r)),a==="warn"&&(g.warnAtPercent=parseInt(r));}}let c=O({text:"Initializing orchestrator...",isSilent:t.quiet||t.json}).start(),y=new a(i);try{await y.initialize();}catch(s){c.fail("Failed to initialize orchestrator"),t.json?console.log(JSON.stringify({error:s instanceof Error?s.message:String(s)})):console.log(e.red(`
|
|
5
5
|
Error: ${s instanceof Error?s.message:s}
|
|
@@ -21,5 +21,5 @@ import {a,b as b$1,c}from'./chunk-XMAV5AG6.js';import {a as a$1,b as b$2}from'./
|
|
|
21
21
|
</div>
|
|
22
22
|
</body>
|
|
23
23
|
</html>
|
|
24
|
-
`);}),n}async function Pe(r){let n=Gt(r),o=mt(r);b.component("platform-server").info("Starting Paradigm Platform",{port:r.port}),b.component("platform-server").info("Project directory",{path:r.projectDir}),b.component("platform-server").info("Sections",{enabled:Array.from(o).join(", ")});let s=ut.createServer(n),t=Q(s);if(n.use("/api/platform/agent-command",V(t)),n.use("/api/ambient",rt(r.projectDir,t)),n.use("/api/team",ot(r.projectDir)),o.has("sentinel"))try{let{createSentinelBridge:e}=await import('./sentinel-bridge-
|
|
24
|
+
`);}),n}async function Pe(r){let n=Gt(r),o=mt(r);b.component("platform-server").info("Starting Paradigm Platform",{port:r.port}),b.component("platform-server").info("Project directory",{path:r.projectDir}),b.component("platform-server").info("Sections",{enabled:Array.from(o).join(", ")});let s=ut.createServer(n),t=Q(s);if(n.use("/api/platform/agent-command",V(t)),n.use("/api/ambient",rt(r.projectDir,t)),n.use("/api/team",ot(r.projectDir)),o.has("sentinel"))try{let{createSentinelBridge:e}=await import('./sentinel-bridge-UR2MKARY.js'),a=await e(r.projectDir,t.broadcast);a&&(n.use("/api/sentinel",a),b.component("platform-server").success("Sentinel routes mounted"));}catch{b.component("platform-server").warn("Sentinel not available");}if(o.has("symphony"))try{let{createSymphonyRouter:e}=await import('./symphony-G6IENE4K.js');n.use("/api/symphony",e(r.projectDir,t.broadcast)),b.component("platform-server").success("Symphony routes mounted");}catch{b.component("platform-server").warn("Symphony routes failed to mount");}if(o.has("docs"))try{let{createDocsRouter:e}=await import('./docs-EDQ2STFK.js');n.use("/api/docs",e(r.projectDir)),b.component("platform-server").success("Docs routes mounted");}catch{b.component("platform-server").warn("Docs routes failed to mount");}if(o.has("university"))try{let{createUniversityRouter:e}=await import('./university-FJ7OCOA3.js');n.use("/api/university",e(r.projectDir)),b.component("platform-server").success("University routes mounted");}catch{b.component("platform-server").warn("University routes failed to mount");}return new Promise((e,a)=>{s.listen(r.port,()=>{b.component("platform-server").success("Platform running",{url:`http://localhost:${r.port}`}),b.component("platform-ws").success("WebSocket ready",{url:`ws://localhost:${r.port}/ws`}),console.log(""),console.log(A.gray(" Sections:"));for(let c of o)console.log(A.gray(` ${A.cyan("\u25CF")} ${c}`));console.log(""),r.open&&import('open').then(c=>{c.default(`http://localhost:${r.port}`),b.component("platform-server").info("Opened browser");}).catch(()=>{b.component("platform-server").warn("Could not open browser automatically");}),e();}),s.on("error",c=>{c.code==="EADDRINUSE"?b.component("platform-server").error("Port already in use",{port:r.port}):b.component("platform-server").error("Server error",{error:c.message}),a(c);});})}
|
|
25
25
|
export{Gt as createPlatformApp,Pe as startPlatformServer};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {d,e}from'./chunk-LPBCQM5Y.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';import r from'chalk';async function p(n){let a=process.cwd(),e$1=await d(a);if(n.json){let o=e$1.usedButUndeclared.filter(s=>s!=="__portal_unparseable__");console.log(JSON.stringify({status:e$1.status,declaredButUnusedCount:e$1.declaredButUnused.length,usedButUndeclaredCount:o.length,properlyDeclaredCount:e$1.properlyDeclared.length,declaredButUnused:e$1.declaredButUnused,usedButUndeclared:o,properlyDeclared:e$1.properlyDeclared,...e$1.portalError?{portalError:e$1.portalError}:{}}));}else {let o=e(e$1);e$1.status==="compliant"?console.log(r.green(`
|
|
3
|
+
${o}
|
|
4
|
+
`)):e$1.status==="warnings"?console.log(r.yellow(`
|
|
5
|
+
${o}
|
|
6
|
+
`)):console.log(r.red(`
|
|
7
|
+
${o}
|
|
8
|
+
`));}}export{p as portalCheckCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export{d as checkPortalCompliance,b as extractDeclaredGates,c as findGateReferences,e as formatComplianceReport,f as getComplianceSummary,a as loadPortalConfig}from'./chunk-
|
|
2
|
+
export{d as checkPortalCompliance,b as extractDeclaredGates,c as findGateReferences,e as formatComplianceReport,f as getComplianceSummary,a as loadPortalConfig}from'./chunk-LPBCQM5Y.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -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-Y4P4SGZV.js';import {a,b}from'./chunk-4TXOVRWD.js';import'./chunk-VCKKJDLP.js';import'./chunk-WR6D3SC6.js';import {m}from'./chunk-LWAIVOSF.js';import'./chunk-JIXHEBGK.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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {c,e as e$1,b as b$1,d}from'./chunk-
|
|
2
|
+
import {c,e as e$1,b as b$1,d}from'./chunk-IZSBGW6E.js';import'./chunk-5TAVYPOV.js';import*as f from'path';import e from'chalk';async function b(t,r){let s=t?f.resolve(t):process.cwd();if(r.set){try{await c(r.set,s),r.json?console.log(JSON.stringify({success:!0,provider:r.set})):(console.log(e.green(`
|
|
3
3
|
\u2713 Provider set to: ${r.set}
|
|
4
4
|
`)),r.set==="auto"?console.log(e.gray(`Will auto-detect best available provider.
|
|
5
5
|
`)):console.log(e.gray(`Will use ${r.set} if available, otherwise fall back.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {c,h}from'./chunk-D34YFK4M.js';import {b}from'./chunk-Z5QW6USC.js';import'./chunk-5TAVYPOV.js';import o from'chalk';import*as q from'readline';import {execSync}from'child_process';import*as S from'os';function x(){try{return execSync("git config user.name",{encoding:"utf-8",timeout:3e3}).trim().toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").slice(0,20)||"unknown"}catch{try{return S.userInfo().username}catch{return "unknown"}}}function P(e,n){return new Promise(r=>e.question(n,r))}function v(e){let n=e.indexOf(":");return n===-1?{entryId:e}:{packId:e.slice(0,n),entryId:e.slice(n+1)}}async function T(e,n={}){let r=process.cwd(),{packId:g,entryId:D}=v(e),d={...n};g&&(d.pack=g),b(r,d);let t=c(r,D);if(t||(console.error(o.red(`
|
|
3
|
+
Quiz "${e}" not found
|
|
4
|
+
`)),process.exit(1)),t.questions.length===0){console.log(o.yellow(`
|
|
5
|
+
Quiz "${e}" has no questions.
|
|
6
|
+
`));return}let m=q.createInterface({input:process.stdin,output:process.stdout});console.log(o.blue(`
|
|
7
|
+
${t.title}`)),t.description&&console.log(o.gray(` ${t.description}`)),console.log(o.gray(` ${t.questions.length} questions \xB7 Pass: ${t.passThreshold*100}%
|
|
8
|
+
`));let i=0;for(let l=0;l<t.questions.length;l++){let s=t.questions[l];console.log(o.white(` ${l+1}. ${s.question}`));let u=Object.keys(s.choices).sort();for(let $ of u)console.log(` ${o.cyan($)}: ${s.choices[$]}`);let c="";for(;!u.includes(c.toUpperCase());)c=await P(m,o.gray(` Your answer (${u.join("/")}): `)),c=c.trim().toUpperCase();c===s.correct?(i++,console.log(o.green(" Correct!"))):console.log(o.red(` Wrong \u2014 correct answer: ${s.correct}`)),s.explanation&&console.log(o.gray(` \u2192 ${s.explanation}`)),console.log();}m.close();let a=t.questions.length,p=Math.round(i/a*1e4)/100,f=p/100>=t.passThreshold,y=x();console.log(o.blue(" \u2500\u2500\u2500 Results \u2500\u2500\u2500")),console.log(` Score: ${i}/${a} (${p}%)`),console.log(` Pass threshold: ${t.passThreshold*100}%`),console.log(f?o.green(" PASSED"):o.red(" FAILED"));let h$1=`D-${new Date().toISOString().slice(0,10)}-${y}-${e.replace(/^Q-/,"")}`,O={id:h$1,type:"quiz",student:y,earnedAt:new Date().toISOString(),source:e,score:i,total:a,percentage:p,passed:f};h(r,O),console.log(o.gray(`
|
|
9
|
+
Diploma saved: ${h$1}
|
|
10
|
+
`));}export{T as universityQuizCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b,c}from'./chunk-
|
|
2
|
+
import {b,c}from'./chunk-VNIX5KBT.js';import'./chunk-5TAVYPOV.js';import d from'chalk';async function f(e){let s=process.cwd(),n;e.confidence!=null&&(n=parseFloat(e.confidence),(isNaN(n)||n<0||n>1)&&(console.error(d.red(`
|
|
3
3
|
Error: --confidence must be a number between 0.0 and 1.0
|
|
4
4
|
`)),process.exit(1)));let i={id:"",type:e.type||"human-note",timestamp:new Date().toISOString(),duration_minutes:e.duration?parseInt(e.duration,10):void 0,author:e.author||b(),title:e.title||"Untitled",summary:e.summary||"",symbols_touched:e.symbols?e.symbols.split(",").map(r=>r.trim()):[],files_modified:e.filesModified?e.filesModified.split(",").map(r=>r.trim()):void 0,files_created:e.filesCreated?e.filesCreated.split(",").map(r=>r.trim()):void 0,commit:e.commit||void 0,learnings:e.learnings?e.learnings.split(",").map(r=>r.trim()):void 0,tags:e.tags?e.tags.split(",").map(r=>r.trim()):void 0,meta:e.meta?JSON.parse(e.meta):void 0,body:e.body||void 0,linked_lore:e.linkLore?e.linkLore.split(",").map(r=>r.trim()):void 0,linked_commits:e.linkCommits?e.linkCommits.split(",").map(r=>r.trim()):void 0,confidence:n};await c(s,i),console.log(d.green(`
|
|
5
5
|
Lore entry recorded: ${i.id}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{qa as getReindexToolsList,ra as handleReindexTool,sa as rebuildStaticFiles}from'./chunk-PHEX6LU4.js';import'./chunk-M4UMM6DC.js';import'./chunk-GRZQIKST.js';import'./chunk-TNVWGPCE.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-GAFKOFAV.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {d,h}from'./chunk-
|
|
2
|
+
import {d,h}from'./chunk-VNIX5KBT.js';import'./chunk-5TAVYPOV.js';import r from'chalk';async function w(e){let c=process.cwd(),t=e.add,s=e.remove;!t&&!s&&(console.error(r.red(`
|
|
3
3
|
Must specify --add <tag> or --remove <tag>
|
|
4
4
|
`)),process.exit(1));let n={};e.type&&(n.type=e.type),e.symbol&&(n.symbol=e.symbol),e.author&&(n.author=e.author),e.from&&(n.dateFrom=e.from),e.to&&(n.dateTo=e.to),e.tags&&(n.tags=e.tags.split(",").map(o=>o.trim()));let g=await d(c,n);if(g.length===0){console.log(r.yellow(`
|
|
5
5
|
No matching entries found
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {e}from'./chunk-
|
|
2
|
+
import {e}from'./chunk-VNIX5KBT.js';import'./chunk-5TAVYPOV.js';import r from'chalk';async function d(s,e$1){let o=process.cwd(),t=parseInt(e$1.completeness||"3",10),a=parseInt(e$1.quality||"3",10);await e(o,s,{reviewer:e$1.reviewer||"unknown",completeness:t,quality:a,notes:e$1.notes,reviewed_at:new Date().toISOString()})?console.log(r.green(`
|
|
3
3
|
\u2713 Review added to ${s}
|
|
4
4
|
`)):(console.error(r.red(`
|
|
5
5
|
Entry not found: ${s}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {n,m,o as o$1,t,r as r$1}from'./chunk-
|
|
2
|
+
import {n,m,o as o$1,t,r as r$1}from'./chunk-LWAIVOSF.js';import'./chunk-JIXHEBGK.js';import'./chunk-ZJQY5PPP.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as a from'fs';import*as r from'path';import o from'chalk';import {execSync}from'child_process';import*as F from'js-yaml';var W=/[@#$%^!?&~][a-zA-Z][a-zA-Z0-9_-]*/g,_=[/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi];async function G(n$1={}){let i=process.cwd(),b=a$1.command("review").start("Running review pipeline",{cwd:i}),u=[],m$1=[];try{if(n$1.pr)u=execSync(`gh pr diff ${n$1.pr} --name-only`,{cwd:i,encoding:"utf8",timeout:15e3}).trim().split(`
|
|
3
3
|
`).filter(Boolean);else {let e=execSync("git diff --cached --name-only",{cwd:i,encoding:"utf8",timeout:5e3}).trim(),t=execSync("git diff --name-only",{cwd:i,encoding:"utf8",timeout:5e3}).trim();u=[...new Set([...e.split(`
|
|
4
4
|
`).filter(Boolean),...t.split(`
|
|
5
5
|
`).filter(Boolean)])];}}catch(e){let t=e.message;n$1.json||a$1.command("review").error(`Failed to get changed files: ${t}`),b.error("Failed to get changed files"),n$1.ci&&process.exit(1);return}if(u.length===0){n$1.json?console.log(JSON.stringify({findings:[],summary:{total:0,blocking:0,improvements:0,notes:0}})):console.log(o.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-LWAIVOSF.js';import'./chunk-JIXHEBGK.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)}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import'./chunk-5TAVYPOV.js';import o from'chalk';async function g(i,l){let t=i||process.cwd(),r=parseInt(l.port||"3838",10),a=l.open!==false;console.log(o.cyan(`
|
|
3
3
|
Starting Sentinel...
|
|
4
|
-
`));try{let{startServer:n}=await import('./server-
|
|
4
|
+
`));try{let{startServer:n}=await import('./server-4D77LCST.js');console.log(o.gray(`Project: ${t}`)),console.log(o.gray(`Port: ${r}`)),console.log(),await n({port:r,projectDir:t,open:a}),console.log(o.green(`
|
|
5
5
|
Sentinel is running at http://localhost:${r}`)),console.log(o.gray(`
|
|
6
6
|
Press Ctrl+C to stop
|
|
7
7
|
`)),await new Promise(()=>{});}catch(n){let e=n.code,s=n.message||"";e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"?(console.error(o.red(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-5TAVYPOV.js';import {Router}from'express';import c from'chalk';var m={component(s){let o=c.magenta(`#${s}`);return {info:r=>console.log(`${c.blue("i")} ${o} ${r}`),success:r=>console.log(`${c.green("+")} ${o} ${r}`),warn:r=>console.log(`${c.yellow("!")} ${o} ${r}`),error:r=>console.error(`${c.red("x")} ${o} ${r}`)}}};async function O(s,o){try{let w=function(t,u){let b={type:"sentinel:log",entry:t};u&&!u.known&&(b.validation=u),o(b),(t.symbolType==="signal"||t.symbolType==="gate"||t.symbolType==="flow")&&o({type:"sentinel:flow_event",flowId:t.symbolType==="flow"?t.symbol:void 0,nodeSymbol:t.symbol,event:t.symbolType,timestamp:t.timestamp,service:t.service});},y=function(t){o({type:"sentinel:event",event:t});};var r=w,B=y;let g=await import('./server-
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import {Router}from'express';import c from'chalk';var m={component(s){let o=c.magenta(`#${s}`);return {info:r=>console.log(`${c.blue("i")} ${o} ${r}`),success:r=>console.log(`${c.green("+")} ${o} ${r}`),warn:r=>console.log(`${c.yellow("!")} ${o} ${r}`),error:r=>console.error(`${c.red("x")} ${o} ${r}`)}}};async function O(s,o){try{let w=function(t,u){let b={type:"sentinel:log",entry:t};u&&!u.known&&(b.validation=u),o(b),(t.symbolType==="signal"||t.symbolType==="gate"||t.symbolType==="flow")&&o({type:"sentinel:flow_event",flowId:t.symbolType==="flow"?t.symbol:void 0,nodeSymbol:t.symbol,event:t.symbolType,timestamp:t.timestamp,service:t.service});},y=function(t){o({type:"sentinel:event",event:t});};var r=w,B=y;let g=await import('./server-4D77LCST.js'),{SentinelStorage:R,loadServerConfig:f,loadSymbolIndex:p,PARADIGM_SCHEMA:S,SYMPHONY_SCHEMA:v,createLogsRouter:$,createServicesRouter:h,createStateRouter:k,createMetricsRouter:A,createTracesRouter:C,createSchemasRouter:I,createEventsRouter:M,createSymbolsRouter:T,createInfoRouter:x,createCommitsRouter:P,createIncidentsRouter:L,createPatternsRouter:E,createAuthMiddleware:H,createRateLimiter:_}=g,n=new R;await n.ensureReady(),n.registerSchema(S),n.registerSchema(v),m.component("sentinel-bridge").info("Registered builtin schemas");let l=f(s),d=[];try{d=await p(s);}catch{m.component("sentinel-bridge").warn("Could not load symbol index");}let e=Router(),i=H(l.auth),a=_(l.rateLimit);return e.use("/logs",a,i("write"),$({storage:n,serverConfig:l,onLogReceived:w,symbolIndex:d})),e.use("/services",a,i("write"),h({storage:n})),e.use("/state",a,i("write"),k({storage:n})),e.use("/metrics",a,i("write"),A({storage:n,serverConfig:l})),e.use("/traces",a,i("write"),C({storage:n})),e.use("/schemas",a,i("write"),I({storage:n})),e.use("/events",a,i("write"),M({storage:n,serverConfig:l,onEventReceived:y})),e.use("/symbols",T(s)),e.use("/info",x(s)),e.use("/commits",P(s)),e.use("/incidents",L(s)),e.use("/patterns",E(s)),e}catch{return m.component("sentinel-bridge").warn("Sentinel package not available \u2014 skipping"),null}}export{O as createSentinelBridge};
|
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-ANRJNG2W.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-ANRJNG2W.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-ANRJNG2W.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-ANRJNG2W.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-ANRJNG2W.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-ANRJNG2W.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';async function i(e){let n=process.cwd(),t=parseInt(e.port||"3850",10),s=e.open!==false,a=e.sections?e.sections.split(",").map(r=>r.trim()):void 0;console.log(o.cyan(`
|
|
3
3
|
Starting Paradigm Platform...
|
|
4
|
-
`));try{let{startPlatformServer:r}=await import('./platform-server-
|
|
4
|
+
`));try{let{startPlatformServer:r}=await import('./platform-server-UD45NTGV.js');await r({port:t,projectDir:n,open:s,sections:a}),console.log(o.green(` Platform running at ${o.bold(`http://localhost:${t}`)}`)),console.log(o.gray(` Press Ctrl+C to stop
|
|
5
5
|
`)),await new Promise(()=>{});}catch(r){r.code==="EADDRINUSE"?(console.error(o.red(`
|
|
6
6
|
Error: Port ${t} is already in use.`)),console.log(o.gray(` Try: paradigm serve --port ${t+1}
|
|
7
7
|
`))):console.error(o.red(`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b}from'./chunk-Z5QW6USC.js';import'./chunk-5TAVYPOV.js';import e from'chalk';import*as o from'path';import {fileURLToPath}from'url';var y=fileURLToPath(import.meta.url),c=o.dirname(y);async function E(g,t){let i=parseInt(t.port||"3839",10),l=t.open!==false,p=process.cwd(),r=!!(t.pack||t.project||t.discipline)?b(p,t):null;console.log(e.cyan(`
|
|
3
|
+
Opening the campus gates...
|
|
4
|
+
`));try{let{startServer:n}=await import('./server-FGUL2FWQ.js'),s=o.resolve(c,"university-content");r&&(s=o.join(r.subPackRoot??r.packRoot,"content"));let d=o.resolve(c,"university-ui");console.log(e.gray(`Port: ${i}`)),r&&console.log(e.gray(`Pack: ${r.subPackId??r.packId}`)),console.log(),await n({port:i,open:l,contentDir:s,uiDistPath:d,projectDir:process.cwd()}),console.log(e.green(`
|
|
5
|
+
Paradigm University is running at http://localhost:${i}`)),console.log(e.gray(`
|
|
6
|
+
Press Ctrl+C to stop
|
|
7
|
+
`)),await new Promise(()=>{});}catch(n){n.code==="ERR_MODULE_NOT_FOUND"||n.code==="MODULE_NOT_FOUND"?(console.error(e.red(`
|
|
8
|
+
@a-company/university is not installed.`)),console.log(e.gray(`Install it with: npm install @a-company/university
|
|
9
|
+
`))):n.code==="EADDRINUSE"?(console.error(e.red(`
|
|
10
|
+
Error: Port ${i} is already in use.`)),console.log(e.gray(`Try a different port with: paradigm university serve --port ${i+1}
|
|
11
|
+
`))):console.error(e.red(`
|
|
12
|
+
Failed to start Paradigm University:`),n),process.exit(1);}}export{E as universityServeCommand};
|