@a-company/paradigm 5.38.0 → 6.0.4
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-OATWIRHP.js → accept-orchestration-TIXUQQGR.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/agent-MB3H5EZA.js +33 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-VGBPL3TH.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-W3RQJVW7.js} +1 -1
- package/dist/{agents-suggest-HYTFMQD3.js → agents-suggest-IKY6VD2R.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-AI42BOM5.js} +12 -12
- package/dist/{ambient-76YMUA5Q.js → ambient-FNNFB4AP.js} +1 -1
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/authority-FA3HLEOA.js +2 -0
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/chunk-23T6UG73.js +605 -0
- package/dist/{chunk-4L7665QV.js → chunk-2AU5L333.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-4N56FRNE.js} +1 -1
- package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/{chunk-MQIG6SMF.js → chunk-6QXBXZF6.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-AMLD7IYC.js} +1 -1
- package/dist/{chunk-3DZK54RU.js → chunk-DBEWOKD6.js} +32 -7
- package/dist/{chunk-AGFPVSX5.js → chunk-F6E3HW45.js} +1 -1
- package/dist/{chunk-X3U3IGYT.js → chunk-GD4F2HC6.js} +2 -2
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-HOBHJPTL.js → chunk-IOVHF4SR.js} +1 -1
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-KAFQA7HV.js} +2 -2
- package/dist/{chunk-NEJ4ZLCY.js → chunk-LAYBUKMB.js} +1 -1
- package/dist/{chunk-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/{chunk-AO7ZSRME.js → chunk-TQOT2LBO.js} +2 -2
- 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-WXF5VFB4.js +111 -0
- package/dist/chunk-XQLO5URP.js +11 -0
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/{compliance-D7GD6ZYC.js → compliance-J3VOV445.js} +1 -1
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.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-YGHBIJY5.js → diff-75MABOSL.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/{docs-USDAF26F.js → docs-TSAAS4W3.js} +1 -1
- package/dist/doctor-L5XZENCF.js +2 -0
- package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
- package/dist/{flow-FVZR3YJ4.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-TFMMMB2H.js → hooks-KUEE5KMM.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/{init-XYB62Q3X.js → init-V4KSEKPK.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 +4 -4
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-Z5UQN57G.js → migrate-ZPNYDNM4.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/migration-notices-BHLEYC4T.js +4 -0
- package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-NCLTGMAK.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-M5PBZBJQ.js → orchestrate-K4KBTBYK.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-ANOALDPL.js} +1 -1
- package/dist/{portal-check-ZMLVBIGW.js → portal-check-DV2VSJ5E.js} +1 -1
- package/dist/portal-compliance-JONQ4SOP.js +2 -0
- package/dist/{probe-3FTG6LYO.js → probe-5HAXULAD.js} +1 -1
- package/dist/{providers-AWA7WLLM.js → providers-TBPOE4DI.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/registry-OUTA3DXW.js +20 -0
- package/dist/reindex-IZCD2JGD.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/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
- package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
- package/dist/{serve-U47GULB6.js → serve-3FMUWW5K.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-HHNY6J4I.js +2 -0
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-MEJ33TYD.js} +1 -1
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-ZVVJGO7X.js} +1 -1
- package/dist/{setup-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
- package/dist/shift-WGMZGWOC.js +60 -0
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{spawn-M5BAV252.js → spawn-KKDDR6UR.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-PYTEIJ4U.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-PDK64JXI.js → team-2LGZQRP4.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-4RRFTU5H.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-451-agent-routing.md +117 -0
- package/dist/university-content/notes/N-para-451-archetypes-vs-instances.md +82 -0
- package/dist/university-content/notes/N-para-451-identity-layers.md +76 -0
- package/dist/university-content/notes/N-para-451-orchestration-modes.md +85 -0
- package/dist/university-content/notes/N-para-451-paradigm-shift.md +95 -0
- package/dist/university-content/notes/N-para-451-partners-primitive.md +107 -0
- package/dist/university-content/notes/N-para-451-roster-management.md +132 -0
- package/dist/university-content/notes/N-para-451-roster-reference.md +106 -0
- package/dist/university-content/notes/N-para-451-the-team-pattern.md +87 -0
- package/dist/university-content/notes/N-para-451-tiers.md +81 -0
- package/dist/university-content/notes/N-para-451-welcome.md +55 -0
- package/dist/university-content/notes/N-para-451-what-is-an-agent.md +73 -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-451.yaml +69 -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-451-foundations.yaml +154 -0
- package/dist/university-content/quizzes/Q-para-451-when-to-invoke.yaml +182 -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-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- 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 +2 -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/dist/add-P76GEMGF.js +0 -8
- package/dist/agent-X6I2YWOB.js +0 -33
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-NQ47TA6C.js +0 -111
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-RBLK34IA.js +0 -11
- package/dist/chunk-RN4VE6P3.js +0 -521
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/doctor-WMVULMQD.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-compliance-6YR27IQU.js +0 -2
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/registry-KOOKFUWD.js +0 -20
- package/dist/reindex-I6LPAKCC.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/shift-PC6C7NUX.js +0 -60
- package/dist/show-BOAVWZPZ.js +0 -7
- package/dist/status-A37ECYNJ.js +0 -6
- package/dist/sync-DLUBV5HQ.js +0 -2
- package/dist/tools-5ITPEPSV.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/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
- /package/dist/{chunk-BV5PRPLB.js → chunk-HXGYVS2N.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-platform-agent-ui
|
|
3
|
+
title: Platform & Agent-Driven UI
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- paradigm-serve-unifies
|
|
12
|
+
- agent-driven-ui-5
|
|
13
|
+
- pipeline-mcp-
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Unified Platform
|
|
24
|
+
|
|
25
|
+
`paradigm serve` launches the Paradigm Platform — a unified development management interface on port 3850 that absorbs every Paradigm tool (Lore, Graph, Sentinel, University, Symphony) into one browser tab.
|
|
26
|
+
|
|
27
|
+
The Platform is built on Express + WebSocket on the server, React 18 + Zustand on the client. Sections are lazy-loaded. A shared design system provides consistent theming and symbol colors.
|
|
28
|
+
|
|
29
|
+
### Architecture
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
localhost:3850 (Express + WebSocket)
|
|
33
|
+
├── /api/lore/* ← LoreRouter
|
|
34
|
+
├── /api/symbols/* ← SymbolsRouter
|
|
35
|
+
├── /api/graphs/* ← GraphsRouter
|
|
36
|
+
├── /api/platform/* ← PlatformRouter (health, sections, agent-command)
|
|
37
|
+
├── /ws ← WebSocket (agent commands + user activity)
|
|
38
|
+
└── / ← Platform UI SPA
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Agent-Driven UI
|
|
42
|
+
|
|
43
|
+
The breakthrough: **the AI agent can drive the browser in real-time.** Five MCP tools let the agent navigate, highlight, annotate, observe, and clear — turning the Platform from a passive viewer into a shared workspace.
|
|
44
|
+
|
|
45
|
+
### The Pipeline: MCP → HTTP → WebSocket → Browser
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Agent (Claude Code) Platform Server Browser
|
|
49
|
+
│ │ │
|
|
50
|
+
│ paradigm_platform_* │ │
|
|
51
|
+
│ POST /api/platform/cmd │ │
|
|
52
|
+
│ ─────────────────────────►│ │
|
|
53
|
+
│ ◄── { ok: true } ──────│ │
|
|
54
|
+
│ │ ws: agent:* │
|
|
55
|
+
│ │──────────────────►│
|
|
56
|
+
│ │ │ UI updates
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Why HTTP not file-based: the <500ms latency requirement rules out file-watching. Why not direct WebSocket from MCP: MCP tools are stdio-based with no event loop for persistent WS connections.
|
|
60
|
+
|
|
61
|
+
### The Five Tools
|
|
62
|
+
|
|
63
|
+
| Tool | Purpose |
|
|
64
|
+
|------|---------|
|
|
65
|
+
| `paradigm_platform_navigate` | Switch sections, select symbols, open lore entries |
|
|
66
|
+
| `paradigm_platform_highlight` | Pulsing glow on symbols with color + label, auto-expires |
|
|
67
|
+
| `paradigm_platform_annotate` | Toasts (notifications), callouts (on graph nodes), badges |
|
|
68
|
+
| `paradigm_platform_observe` | Read user's current section, selected symbol, theme, mute state |
|
|
69
|
+
| `paradigm_platform_clear` | Remove all agent highlights and annotations |
|
|
70
|
+
|
|
71
|
+
### Conflict Resolution: User Always Wins
|
|
72
|
+
|
|
73
|
+
The agent must never hijack the user's attention:
|
|
74
|
+
|
|
75
|
+
- **User idle (>5s):** Agent navigation executes immediately
|
|
76
|
+
- **User active (<5s):** A prompt appears: "Agent wants to show you #X — [Go there] [Dismiss]"
|
|
77
|
+
- **User muted:** All agent effects are silently discarded; `observe` returns `{ muted: true }`
|
|
78
|
+
|
|
79
|
+
### Agent Presence
|
|
80
|
+
|
|
81
|
+
The `#AgentPresenceManager` tracks connected agents by their Symphony identity (`{project}/{role}`). Each agent gets a deterministic color from its ID hash. Presence dots appear in the Platform header with a mute toggle.
|
|
82
|
+
|
|
83
|
+
Stale agents are auto-pruned after 2 minutes of inactivity.
|
|
84
|
+
|
|
85
|
+
### User State Tracking
|
|
86
|
+
|
|
87
|
+
The `#UserStateTracker` accumulates user activity — what section they're viewing, what symbol is selected, theme preference. This state is served to `paradigm_platform_observe` so the agent can reason about what the user is looking at.
|
|
88
|
+
|
|
89
|
+
Browser clients report activity via WebSocket messages: `user:navigate`, `user:select`, `user:theme`, `user:mute`.
|
|
90
|
+
|
|
91
|
+
### Visual Treatment
|
|
92
|
+
|
|
93
|
+
| Element | Human | Agent |
|
|
94
|
+
|---------|-------|-------|
|
|
95
|
+
| Selection ring | Solid 2px blue | Dashed 2px agent-color |
|
|
96
|
+
| Highlight | N/A | Pulsing glow animation |
|
|
97
|
+
| Toast | N/A | Left border + robot icon |
|
|
98
|
+
| Navigation | Instant | 300ms ease + toast notification |
|
|
99
|
+
|
|
100
|
+
### Browser Architecture
|
|
101
|
+
|
|
102
|
+
The agent UI layer sits alongside existing stores:
|
|
103
|
+
|
|
104
|
+
- `agentStore.ts` — Zustand store managing presence, highlights, annotations, toasts, mute, pending navigation
|
|
105
|
+
- `useAgentEffects` — Hook connecting WebSocket `agent:*` messages to store actions, with auto-reconnect
|
|
106
|
+
- `useActivityReporter` — Hook reporting section/theme changes back to server
|
|
107
|
+
- `AgentToast` — Severity-colored toast component
|
|
108
|
+
- `AgentCallout` — Floating callout overlay + navigation conflict prompt
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-review-compliance
|
|
3
|
+
title: Automated Review Pipeline & Compliance Checking
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
symbols: []
|
|
12
|
+
difficulty: beginner
|
|
13
|
+
estimatedMinutes: 2
|
|
14
|
+
prerequisites: []
|
|
15
|
+
category: paradigm-core
|
|
16
|
+
origin: imported
|
|
17
|
+
source: courses/para-501.json
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## paradigm review
|
|
21
|
+
|
|
22
|
+
The automated review pipeline uses a two-stage protocol:
|
|
23
|
+
|
|
24
|
+
### Stage 1: Spec Compliance (always runs)
|
|
25
|
+
|
|
26
|
+
- **Purpose coverage**: All touched symbols registered in .purpose files
|
|
27
|
+
- **Portal gate compliance**: Routes declared in portal.yaml with gates
|
|
28
|
+
- **Aspect anchors**: Anchor files still exist, no drift
|
|
29
|
+
- **Broken references**: Parent symbols exist
|
|
30
|
+
- **Route coverage**: New routes have portal.yaml entries
|
|
31
|
+
|
|
32
|
+
### Stage 2: Code Quality (--deep only)
|
|
33
|
+
|
|
34
|
+
- **Security**: eval() detection, hardcoded secrets
|
|
35
|
+
- **Convention**: console.log usage (use Paradigm logger)
|
|
36
|
+
- **Test coverage**: Gaps in test files
|
|
37
|
+
|
|
38
|
+
### ReviewFinding Format
|
|
39
|
+
|
|
40
|
+
Each finding has:
|
|
41
|
+
- **type**: blocking (must fix), improvement (should fix), note (informational)
|
|
42
|
+
- **category**: purpose-coverage, portal-compliance, aspect-anchors, security, convention
|
|
43
|
+
- **message**: Human-readable description
|
|
44
|
+
- **suggestion**: How to fix it
|
|
45
|
+
|
|
46
|
+
### Usage
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
paradigm review # Staged changes
|
|
50
|
+
paradigm review --pr 123 # PR via gh CLI
|
|
51
|
+
paradigm review --ci # Exit 1 on blocking
|
|
52
|
+
paradigm review --deep # Include code quality
|
|
53
|
+
paradigm review --json # JSON output
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Dynamic Tool Loading
|
|
57
|
+
|
|
58
|
+
Tools are organized in three tiers:
|
|
59
|
+
- **Core** (~15 tools): Always loaded (search, ripple, status, navigate, etc.)
|
|
60
|
+
- **Feature**: Auto-detected from filesystem (lore → .paradigm/lore/, etc.)
|
|
61
|
+
- **Advanced**: On-demand via `paradigm_tool_activate`
|
|
62
|
+
|
|
63
|
+
## Response Format
|
|
64
|
+
|
|
65
|
+
`response_format: 'concise'` on high-traffic tools strips secondary data:
|
|
66
|
+
- paradigm_search: returns only { symbol, type }
|
|
67
|
+
- paradigm_ripple: returns only { symbol, impact, summary }
|
|
68
|
+
- paradigm_status: returns only { project, counts, total }
|
|
69
|
+
|
|
70
|
+
## compliance-checker.ts
|
|
71
|
+
|
|
72
|
+
Shared logic extracted from pm.ts postflight. Both `paradigm_pm_postflight` and `paradigm review` use the same compliance checks.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-sentinel-deep-dive
|
|
3
|
+
title: Sentinel Deep Dive
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- symbolic-incident-records
|
|
12
|
+
- flow-position-tracking
|
|
13
|
+
- automatic-incident-grouping
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Beyond Stack Traces
|
|
24
|
+
|
|
25
|
+
Traditional error tracking gives you a stack trace and a count. Paradigm Sentinel gives you *symbolic context* — which component failed, where in a flow it failed, what gate was being evaluated, and which known pattern matches the failure. This transforms incident response from "read the stack trace and hope" to "match against institutional knowledge and follow a resolution strategy."
|
|
26
|
+
|
|
27
|
+
## Symbolic Incident Records
|
|
28
|
+
|
|
29
|
+
When Sentinel records an incident, it captures both technical and symbolic context:
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
id: INC-042
|
|
33
|
+
timestamp: "2026-02-21T02:15:00Z"
|
|
34
|
+
status: open
|
|
35
|
+
error:
|
|
36
|
+
message: "Cannot read property 'id' of null"
|
|
37
|
+
stack: "at PaymentProcessor.processRefund (payment-processor.ts:142)"
|
|
38
|
+
type: TypeError
|
|
39
|
+
symbols:
|
|
40
|
+
component: "#payment-processor"
|
|
41
|
+
flow: "$refund-flow"
|
|
42
|
+
gate: "^authenticated"
|
|
43
|
+
flowPosition:
|
|
44
|
+
flowId: "$refund-flow"
|
|
45
|
+
expected: ["^authenticated", "^refund-eligible", "#process-refund", "!refund-completed"]
|
|
46
|
+
actual: ["^authenticated", "^refund-eligible", "#process-refund"]
|
|
47
|
+
missing: ["!refund-completed"]
|
|
48
|
+
failedAt: "#process-refund"
|
|
49
|
+
environment: production
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The `flowPosition` field is critical — it tells you exactly where in the defined flow the failure occurred. The refund flow expected 4 steps; only 3 completed. The failure happened at `#process-refund`, and the `!refund-completed` signal never fired. This immediately narrows the investigation to the refund processing logic.
|
|
53
|
+
|
|
54
|
+
## Incident Grouping
|
|
55
|
+
|
|
56
|
+
Sentinel automatically groups related incidents using symbolic similarity. When two incidents share the same component, flow, and error pattern, they form a group. The grouping algorithm uses a similarity threshold of 0.6 — incidents must share at least 60% of their symbolic context to cluster.
|
|
57
|
+
|
|
58
|
+
An `IncidentGroup` tracks the common symbols, error patterns, occurrence count, first/last seen timestamps, and which environments are affected. If a group matches a known failure pattern, Sentinel attaches it as a `suggestedPattern`.
|
|
59
|
+
|
|
60
|
+
## Failure Patterns
|
|
61
|
+
|
|
62
|
+
Patterns are the institutional knowledge of your error handling. Each pattern defines matching criteria and a resolution strategy:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
id: payment-null-ref-001
|
|
66
|
+
name: "Null reference in payment processing"
|
|
67
|
+
pattern:
|
|
68
|
+
symbols:
|
|
69
|
+
component: "#payment-processor"
|
|
70
|
+
errorType: [TypeError]
|
|
71
|
+
errorContains: ["Cannot read property", "null"]
|
|
72
|
+
resolution:
|
|
73
|
+
description: "Add null check before accessing refund object properties"
|
|
74
|
+
strategy: fix-code
|
|
75
|
+
priority: high
|
|
76
|
+
symbolsToModify: ["#payment-processor"]
|
|
77
|
+
filesLikelyInvolved: ["src/services/payment-processor.ts"]
|
|
78
|
+
confidence:
|
|
79
|
+
score: 85
|
|
80
|
+
timesMatched: 12
|
|
81
|
+
timesResolved: 10
|
|
82
|
+
timesRecurred: 2
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Six resolution strategies exist: `retry` (transient failure), `fallback` (use alternative path), `fix-data` (data issue), `fix-code` (bug), `ignore` (known harmless), and `escalate` (needs human decision). Pattern priority ranges from `low` through `medium` and `high` to `critical`.
|
|
86
|
+
|
|
87
|
+
Patterns come from four sources: `manual` (team-created), `suggested` (Sentinel auto-generated from groups), `imported` (from another project), and `community` (shared patterns). Paradigm ships 26 seed patterns covering common failures like incomplete flows, gate bypasses, state race conditions, and unhandled signals.
|
|
88
|
+
|
|
89
|
+
## The Triage Workflow
|
|
90
|
+
|
|
91
|
+
Sentinel follows a defined lifecycle for incidents:
|
|
92
|
+
|
|
93
|
+
1. **Record** — `paradigm_sentinel_record` creates the incident with error details, symbolic context, and optional flow position. The incident starts as `open`.
|
|
94
|
+
|
|
95
|
+
2. **Triage** — `paradigm_sentinel_triage` lists incidents filtered by status, symbol, environment, or error text. The matcher automatically suggests patterns that fit each incident.
|
|
96
|
+
|
|
97
|
+
3. **Investigate** — `paradigm_sentinel_show` with `includeTimeline: true` shows the full flow timeline — every gate passed, signal emitted, and state change leading up to the failure. With `includeSimilar: true`, it surfaces related incidents that may share a root cause.
|
|
98
|
+
|
|
99
|
+
4. **Resolve** — `paradigm_sentinel_resolve` closes the incident with a resolution: which pattern applied (if any), the fix commit hash, PR URL, and notes. Resolved incidents feed back into pattern confidence scores.
|
|
100
|
+
|
|
101
|
+
5. **Pattern** — `paradigm_sentinel_add_pattern` creates new patterns from resolved incidents. When you fix a novel failure, capture the fix as a pattern so the next occurrence resolves faster.
|
|
102
|
+
|
|
103
|
+
The sequence is: **record → triage → show → resolve → add pattern**. This cycle builds institutional knowledge with every incident.
|
|
104
|
+
|
|
105
|
+
## Stats and Health Metrics
|
|
106
|
+
|
|
107
|
+
`paradigm_sentinel_stats` provides operational intelligence for a given time period: total incidents, open vs resolved counts, incidents by environment and day, pattern effectiveness (which patterns resolve most incidents vs which recur), symbol hotspots (components with the highest incident rates), and resolution metrics (average time to resolve, pattern vs manual resolution rates).
|
|
108
|
+
|
|
109
|
+
The `symbolHealth` view shows per-symbol incident history — use it to identify which components need hardening or refactoring.
|
|
110
|
+
|
|
111
|
+
## Logger Transports
|
|
112
|
+
|
|
113
|
+
Sentinel integrates with the Paradigm logger through a transport layer. The `LogTransport` interface defines a simple contract: a transport receives structured log entries and delivers them somewhere — a file, a remote API, a database, or Sentinel's ingestion endpoint.
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
interface LogTransport {
|
|
117
|
+
name: string;
|
|
118
|
+
send(entry: LogEntry): void | Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The logger supports multiple transports simultaneously via `addTransport(transport)` and `removeTransport(name)`. By default, logs go to the console. Adding a `SentinelTransport` sends them to Sentinel's server as well, without changing any of your existing logging calls.
|
|
123
|
+
|
|
124
|
+
## The SentinelTransport Bridge
|
|
125
|
+
|
|
126
|
+
Connecting the Paradigm logger to Sentinel is a one-liner:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { enableSentinel } from '@a-company/sentinel';
|
|
130
|
+
|
|
131
|
+
enableSentinel({ endpoint: 'http://localhost:3001' });
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
This call creates a `SentinelTransport` instance and registers it with the logger via `addTransport`. From that point forward, every `log.component(...)`, `log.gate(...)`, and `log.signal(...)` call is forwarded to Sentinel as a structured log entry. Error-level logs are automatically promoted to incident candidates.
|
|
135
|
+
|
|
136
|
+
The beauty of this design is zero code changes to your application. Your existing logger calls remain unchanged — the transport layer silently bridges them to Sentinel's observability pipeline.
|
|
137
|
+
|
|
138
|
+
## Metrics API
|
|
139
|
+
|
|
140
|
+
Sentinel's server exposes a metrics API for recording and querying application metrics:
|
|
141
|
+
|
|
142
|
+
**POST /api/metrics** — Record a metric data point. Supports three metric types:
|
|
143
|
+
- `counter` — Monotonically increasing values (e.g., request count, error count)
|
|
144
|
+
- `gauge` — Point-in-time values that can go up or down (e.g., active connections, queue depth)
|
|
145
|
+
- `histogram` — Distribution of values over time (e.g., response latency, payload size)
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"name": "api.requests.total",
|
|
150
|
+
"type": "counter",
|
|
151
|
+
"value": 1,
|
|
152
|
+
"labels": { "method": "POST", "route": "/api/payments" },
|
|
153
|
+
"timestamp": "2026-02-21T14:30:00Z"
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**GET /api/metrics** — Query metrics with optional filters by name, type, labels, and time range. Returns aggregated data suitable for dashboards and alerting.
|
|
158
|
+
|
|
159
|
+
## Traces API
|
|
160
|
+
|
|
161
|
+
Sentinel supports distributed tracing through span trees:
|
|
162
|
+
|
|
163
|
+
**POST /api/traces** — Record a trace span. Each span has a `traceId`, `spanId`, optional `parentSpanId`, `operationName`, `startTime`, `endTime`, and `tags`. Spans with the same `traceId` form a tree — the root span has no parent, and child spans reference their parent via `parentSpanId`.
|
|
164
|
+
|
|
165
|
+
**GET /api/traces** — Query traces by operation name, service, time range, or minimum duration. Returns full span trees with timing breakdowns.
|
|
166
|
+
|
|
167
|
+
## Service Registry
|
|
168
|
+
|
|
169
|
+
Sentinel maintains a live registry of services reporting data:
|
|
170
|
+
|
|
171
|
+
**POST /api/services** — Register or update a service. Each service entry includes name, version, environment, health status, and last-seen timestamp.
|
|
172
|
+
|
|
173
|
+
**GET /api/services** — List all registered services with their current health status and metadata. This provides a real-time view of what is running and where.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-session-intelligence
|
|
3
|
+
title: Session Intelligence
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- four-checkpoint-phases
|
|
12
|
+
- breadcrumbs-auto-track-every
|
|
13
|
+
- paradigmsessionrecover-restores-last
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 4
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Session Problem
|
|
24
|
+
|
|
25
|
+
AI agent sessions are ephemeral. When a session ends — whether by completion, crash, context exhaustion, or human interruption — everything the agent knew vanishes. The next session starts blank, with no memory of what was explored, decided, or partially implemented. Session Intelligence solves this with checkpoints, breadcrumbs, and a global brain that persists knowledge across sessions and even across projects.
|
|
26
|
+
|
|
27
|
+
## Session Checkpoints
|
|
28
|
+
|
|
29
|
+
Checkpoints are deliberate snapshots saved at phase transitions. There are four phases:
|
|
30
|
+
|
|
31
|
+
| Phase | When to Checkpoint | What to Capture |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `planning` | After reading requirements, before coding | Plan, approach, key decisions |
|
|
34
|
+
| `implementing` | After starting code changes | Modified files, symbols touched, decisions made |
|
|
35
|
+
| `validating` | After implementation, before tests | All modified files, test plan |
|
|
36
|
+
| `complete` | Task finished | Summary, final file list |
|
|
37
|
+
|
|
38
|
+
Create a checkpoint with `paradigm_session_checkpoint`:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
paradigm_session_checkpoint({
|
|
42
|
+
phase: "implementing",
|
|
43
|
+
context: "Adding JWT auth middleware — RS256 signing, httpOnly refresh tokens",
|
|
44
|
+
modifiedFiles: ["src/middleware/auth.ts", "src/handlers/refresh.ts"],
|
|
45
|
+
symbolsTouched: ["#auth-middleware", "^authenticated"],
|
|
46
|
+
decisions: ["RS256 over HS256 for public key verification"]
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Only `phase` and `context` are required — everything else is optional. The context field should be a concise 1-3 sentence summary of your current state of mind. Think of it as answering "if I were teleported into this session right now, what would I need to know?"
|
|
51
|
+
|
|
52
|
+
Checkpoints are stored in `.paradigm/session-checkpoint.json` and auto-expire after 7 days.
|
|
53
|
+
|
|
54
|
+
## Breadcrumb Tracking
|
|
55
|
+
|
|
56
|
+
While checkpoints are deliberate, breadcrumbs are automatic. Every MCP tool call generates a breadcrumb recording the timestamp, tool name, symbol being modified (if applicable), and a human-readable summary. Breadcrumbs are stored in `.paradigm/session-breadcrumbs.json` with a maximum of 50 entries (auto-rotating — oldest dropped when full).
|
|
57
|
+
|
|
58
|
+
Breadcrumbs capture the narrative of a session: "searched for payment symbols → checked ripple on #payment-service → read auth middleware → modified #auth-handler → created ^refund-eligible gate." This trail lets the next session understand not just what was done but the reasoning path.
|
|
59
|
+
|
|
60
|
+
## Session Recovery
|
|
61
|
+
|
|
62
|
+
Recovery is the payoff. Call `paradigm_session_recover` (or let it happen automatically — recovery data is surfaced on your first Paradigm tool call in a new session) to get:
|
|
63
|
+
|
|
64
|
+
- **breadcrumbs** — The last session's tool call trail
|
|
65
|
+
- **lastCheckpoint** — The most recent checkpoint with phase, context, and details
|
|
66
|
+
- **symbolsModified** — All symbols that were changed
|
|
67
|
+
- **recentActivity** — A human-readable summary of what happened
|
|
68
|
+
|
|
69
|
+
This is crash recovery for AI agents. If a session dies at 87% context with half-finished auth middleware, the next session immediately knows: phase was `implementing`, auth middleware was being added, RS256 was chosen, these files were modified, and tests still need to be written.
|
|
70
|
+
|
|
71
|
+
## The Global Brain
|
|
72
|
+
|
|
73
|
+
Session Intelligence extends beyond individual projects through the Global Brain at `~/.paradigm/`. This user-level directory stores:
|
|
74
|
+
|
|
75
|
+
- **Global wisdom** — Antipatterns and decisions that apply everywhere (e.g., "never use HS256 for JWT signing in production")
|
|
76
|
+
- **Global habits** — Behavioral overrides that apply to all projects
|
|
77
|
+
- **Cross-project practice events** — Compliance data aggregated across projects
|
|
78
|
+
|
|
79
|
+
The distinction between project scope and global scope is important:
|
|
80
|
+
|
|
81
|
+
| Scope | Location | Applies To | Example |
|
|
82
|
+
|---|---|---|---|
|
|
83
|
+
| Project | `.paradigm/` | This project only | "Use Redis for caching in this app" |
|
|
84
|
+
| Global | `~/.paradigm/` | All projects | "Always check fragility before modifying critical symbols" |
|
|
85
|
+
|
|
86
|
+
## Wisdom Promotion
|
|
87
|
+
|
|
88
|
+
When a project-local wisdom entry proves universally valuable, promote it to global scope with `paradigm_wisdom_promote`. This copies the entry from `.paradigm/wisdom/` to `~/.paradigm/wisdom/`, making it available in every project.
|
|
89
|
+
|
|
90
|
+
For example, if a team discovers that "always wrap Express v5 async middleware in try-catch" prevents errors across multiple projects, promoting this wisdom means every future project session gets this advice automatically when touching Express middleware.
|
|
91
|
+
|
|
92
|
+
## Handoff Persistence
|
|
93
|
+
|
|
94
|
+
When context usage exceeds 80-85%, `paradigm_session_health` recommends a handoff. `paradigm_handoff_prepare` creates a structured handoff document with: summary of work done, modified files, symbols touched, next steps, and open questions. This document is stored alongside session data so the receiving session can `paradigm_session_recover` and pick up exactly where the previous session left off.
|
|
95
|
+
|
|
96
|
+
The handoff is not just a note — it is a contract between sessions. The outgoing session declares what was done and what remains. The incoming session validates against the actual file state and continues.
|
|
97
|
+
|
|
98
|
+
## Best Practices
|
|
99
|
+
|
|
100
|
+
- Checkpoint at every phase transition — the cost is ~100 tokens, the value is crash recovery
|
|
101
|
+
- Write `context` as if briefing a stranger with no prior knowledge
|
|
102
|
+
- Promote wisdom that survives 3+ projects to global scope
|
|
103
|
+
- Use handoffs proactively at 80% context, not reactively at 95%
|
|
104
|
+
- Let breadcrumbs accumulate naturally — don't try to manage them manually
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-symphony-a-mail
|
|
3
|
+
title: 'Symphony: Multi-Agent Messaging with The Score'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- the-score-is
|
|
12
|
+
- agent-identity-is
|
|
13
|
+
- mailbox-protocol-uses
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 7
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Agents Need to Talk
|
|
24
|
+
|
|
25
|
+
Until now, every Paradigm agent has worked in isolation. A Claude Code session modifying the backend has no awareness of what the session working on the frontend is doing. Two developers on the same team, each with their own AI assistant, have no way for those assistants to coordinate — even when they are working on the same project at the same time.
|
|
26
|
+
|
|
27
|
+
Symphony changes this. It is Paradigm's multi-agent, multi-human collaborative intelligence layer. And its foundation is The Score: a lightweight, file-based messaging protocol that gives every Claude Code session its own mailbox.
|
|
28
|
+
|
|
29
|
+
## The Metaphor: Email for AI Agents
|
|
30
|
+
|
|
31
|
+
The Score works exactly like email. Each agent has an identity, an inbox, and an outbox. Messages are delivered as JSONL files on the filesystem. Agents poll for new messages on a timer. There is no persistent server, no WebSocket connection, and no cloud dependency. If two agents are running on the same machine, they can message each other through nothing more than file reads and writes.
|
|
32
|
+
|
|
33
|
+
This simplicity is deliberate. The Score is the CLI-only foundation of Symphony — it works with zero dependencies beyond the Paradigm CLI. No Conductor, no Sentinel, no network configuration. The only requirement is that agents are running on the same machine (or connected via a lightweight TCP relay for cross-machine scenarios).
|
|
34
|
+
|
|
35
|
+
## Agent Identity and Discovery
|
|
36
|
+
|
|
37
|
+
Every Claude Code session that participates in The Score has a stable identity. The identity is derived from the project directory and the agent's role — for example, `a-paradigm/backend` or `a-kamiki/frontend`. This deterministic naming means the same project opened in the same context always gets the same identity, even across session restarts.
|
|
38
|
+
|
|
39
|
+
When you run `paradigm symphony join`, the CLI discovers all Claude Code sessions on the current machine and connects them into a mail network. Each session gets a mailbox directory at `~/.paradigm/score/agents/{agent-id}/` containing four files:
|
|
40
|
+
|
|
41
|
+
- **`inbox.jsonl`** — Messages waiting for this agent, one per line, append-only
|
|
42
|
+
- **`outbox.jsonl`** — Replies from this agent, append-only
|
|
43
|
+
- **`ack.json`** — The ID of the last acknowledged message (for garbage collection)
|
|
44
|
+
- **`identity.json`** — Agent ID, project, role, PID, and session start time
|
|
45
|
+
|
|
46
|
+
The JSONL format — one JSON object per line — makes appending atomic and parsing trivial. No file locking, no corruption risk from concurrent writes, no binary format to decode.
|
|
47
|
+
|
|
48
|
+
## Messaging and Threading
|
|
49
|
+
|
|
50
|
+
Messages in The Score carry structured metadata beyond plain text. Every message has an **intent** that classifies its purpose:
|
|
51
|
+
|
|
52
|
+
| Intent | Meaning |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `question` | Asking for information from other agents |
|
|
55
|
+
| `context` | Providing background or context |
|
|
56
|
+
| `proposal` | Proposing an action or fix |
|
|
57
|
+
| `action` | Announcing an action the agent took |
|
|
58
|
+
| `decision` | Recording a decision |
|
|
59
|
+
| `alert` | Forwarding a Sentinel alert |
|
|
60
|
+
| `approval` / `rejection` | Responding to a proposal |
|
|
61
|
+
| `handoff` | Transferring responsibility to another agent |
|
|
62
|
+
| `fileRequest` | Requesting a file from another agent |
|
|
63
|
+
| `fileDelivery` | Delivering a requested file |
|
|
64
|
+
|
|
65
|
+
Intents serve two purposes. First, they give the receiving agent structured context about what kind of response is expected — a question needs an answer, a proposal needs approval or rejection, a decision needs acknowledgment. Second, they feed into Lore: when a message has `intent: decision`, Symphony can automatically record it as a lore entry.
|
|
66
|
+
|
|
67
|
+
Messages belong to **threads**. A thread starts when the first message on a topic is sent (with no `parentId`). Subsequent replies reference the thread root, building a conversation tree. Thread state is tracked in `~/.paradigm/score/threads/{thread-id}.json`, which records the topic, participants, message count, and last activity timestamp.
|
|
68
|
+
|
|
69
|
+
## The File Pipeline
|
|
70
|
+
|
|
71
|
+
Agents often need to share files — a type definition, an API contract, a configuration file. The Score's file pipeline enables this with a critical security constraint: **every file transfer requires explicit human approval**.
|
|
72
|
+
|
|
73
|
+
The flow works like this: Agent A sends a `fileRequest` message specifying the file path, a reason, and the target agent. The request appears in the owning human's terminal (via `paradigm symphony requests`). The human reviews and either approves, denies, or approves with redaction (stripping sensitive lines). Only after human approval does the file content get written to the requester's inbox.
|
|
74
|
+
|
|
75
|
+
Trust configuration lives in `~/.paradigm/score/trust.yaml`. You can define auto-approve patterns for trusted users (`docs/**`, `*.md`) and never-approve patterns for sensitive files (`.env*`, `*.key`, `*.pem`, `**/secrets/**`). The never-approve list is enforced absolutely — even clicking approve on a `.env` file will be denied by the system. File requests expire after one hour without action, and all transfers are logged.
|
|
76
|
+
|
|
77
|
+
## /loop: The Agent Heartbeat
|
|
78
|
+
|
|
79
|
+
The glue that makes The Score work is `/loop`. Each Claude Code session runs `/loop 10s paradigm_symphony_poll`, which polls the inbox every 10 seconds for new messages. The `paradigm_symphony_poll` MCP tool reads `inbox.jsonl`, formats messages as structured prompts the agent can reason about, and suggests actions.
|
|
80
|
+
|
|
81
|
+
Without `/loop`, messages would accumulate in the inbox with nobody reading them. The loop is the heartbeat — it keeps agents responsive. When an agent processes a message and replies via `paradigm_symphony_send`, the reply goes to `outbox.jsonl`. A mail router (or Conductor, in later phases) picks up outbox messages and delivers them to the appropriate inbox files.
|
|
82
|
+
|
|
83
|
+
The convenience command `paradigm symphony join` combines registration and loop setup in one step — it registers the session's identity and starts the polling loop automatically.
|
|
84
|
+
|
|
85
|
+
## Thread Resolution and Lore Integration
|
|
86
|
+
|
|
87
|
+
Conversation threads are not meant to live forever. When a thread reaches a conclusion, any participant (human or agent) can resolve it with `paradigm symphony resolve <thread-id>`. Resolution triggers an automatic lore entry that captures the full conversation: topic, participants, decisions made, actions taken, and symbols discussed.
|
|
88
|
+
|
|
89
|
+
This is the bridge between ephemeral conversation and permanent project memory. A 15-minute exchange between three agents about a serialization bug becomes a searchable lore entry tagged with the relevant symbols and arc. The next developer encountering a similar issue can find the conversation, the decision, and the fix — all linked together.
|
|
90
|
+
|
|
91
|
+
## CLI Commands
|
|
92
|
+
|
|
93
|
+
The `paradigm symphony` command group provides the complete human interface:
|
|
94
|
+
|
|
95
|
+
- `paradigm symphony whoami` — Show this agent's identity and linked peers
|
|
96
|
+
- `paradigm symphony list` — List all known agents with status (awake/asleep) and location
|
|
97
|
+
- `paradigm symphony join` — Discover and connect Claude Code sessions on this machine
|
|
98
|
+
- `paradigm symphony join --remote <ip>` — Connect to a remote machine's mail server
|
|
99
|
+
- `paradigm symphony send "message"` — Broadcast to all linked agents
|
|
100
|
+
- `paradigm symphony send --to <agent> "message"` — Direct message to a specific agent
|
|
101
|
+
- `paradigm symphony send --thread <id> "message"` — Reply to an existing thread
|
|
102
|
+
- `paradigm symphony read` — Show unread messages
|
|
103
|
+
- `paradigm symphony threads` — List active threads
|
|
104
|
+
- `paradigm symphony resolve <id>` — Resolve a thread, creating a lore entry
|
|
105
|
+
- `paradigm symphony status` — Network overview (agents, threads, unread count)
|
|
106
|
+
|
|
107
|
+
For the file pipeline: `paradigm symphony request`, `paradigm symphony requests`, `paradigm symphony approve`, and `paradigm symphony deny`.
|
|
108
|
+
|
|
109
|
+
## MCP Tools for Agent Participation
|
|
110
|
+
|
|
111
|
+
Six MCP tools power agent-side Symphony participation:
|
|
112
|
+
|
|
113
|
+
- **`paradigm_symphony_poll`** — The heartbeat. Reads inbox, returns formatted messages and thread summaries. Called by `/loop`.
|
|
114
|
+
- **`paradigm_symphony_send`** — Send a message with intent, text, optional symbols, diff, or decision. Writes to outbox.
|
|
115
|
+
- **`paradigm_symphony_status`** — Overview of the local network: agents, threads, Sentinel endpoint.
|
|
116
|
+
- **`paradigm_symphony_thread`** — Get full context of a conversation thread with messages, participants, and extracted decisions.
|
|
117
|
+
- **`paradigm_symphony_request_file`** — Request a file from another agent. Returns immediately with `pending` status; delivery arrives via future poll.
|
|
118
|
+
- **`paradigm_symphony_approve_file`** — Approve or deny a pending file request after human confirmation.
|
|
119
|
+
|
|
120
|
+
These tools compose naturally with existing Paradigm workflows. An agent can poll for messages, discover a question about `#payment-serializer`, call `paradigm_ripple` to check impact, and respond with full context — all within a single `/loop` cycle.
|