@a-company/paradigm 3.46.0 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accept-orchestration-ZUWQUHSK.js → accept-orchestration-GX2YRWM4.js} +5 -5
- package/dist/{add-VSPZ6FM4.js → add-FZRKEGH4.js} +1 -1
- package/dist/agent-WERIO2XV.js +523 -0
- package/dist/agent-loader-SJPJJS33.js +36 -0
- package/dist/{agents-suggest-65SER5IS.js → agents-suggest-DNSYJ6IA.js} +1 -1
- package/dist/{aggregate-SV3VGEIL.js → aggregate-H57K7PNV.js} +1 -1
- package/dist/{assess-UHBDYIK7.js → assess-4WVXZLZQ.js} +2 -2
- package/dist/{auto-24ICVUH4.js → auto-QFS5NHQU.js} +1 -1
- package/dist/{beacon-3SJV4DAP.js → beacon-KXZXYQHX.js} +1 -1
- package/dist/{calibration-WWHK73WU.js → calibration-V46G7JTY.js} +2 -2
- package/dist/{check-OLI6AUS6.js → check-OWAIWV23.js} +1 -1
- package/dist/{chunk-RP6TZYGE.js → chunk-2IO7JAG2.js} +1 -1
- package/dist/chunk-2T6BTYBN.js +712 -0
- package/dist/{chunk-CDMAMDSG.js → chunk-5VKJBNJL.js} +13 -5
- package/dist/{chunk-KB4XJWE3.js → chunk-6N3JTACN.js} +98 -437
- package/dist/{chunk-ZMQA6SCO.js → chunk-7HRBT23N.js} +631 -231
- package/dist/chunk-7N7GSU6K.js +34 -0
- package/dist/chunk-A2L4TSLZ.js +526 -0
- package/dist/{chunk-P7XSBJE3.js → chunk-ABVQGRF7.js} +1 -1
- package/dist/{chunk-HIKKOCXY.js → chunk-EI32ZBE6.js} +1 -1
- package/dist/{chunk-QIOCFXDQ.js → chunk-EKGMAM62.js} +1 -1
- package/dist/chunk-EZ3GOCYC.js +132 -0
- package/dist/{chunk-DS5QY37M.js → chunk-GTR2TBIJ.js} +247 -15
- package/dist/chunk-ICSLIPUS.js +1128 -0
- package/dist/{chunk-QDXI2DHR.js → chunk-J2JEQRT3.js} +1 -1
- package/dist/{chunk-AKIMFN6I.js → chunk-JASGXLK3.js} +2 -2
- package/dist/{chunk-J4E6K5MG.js → chunk-LSRABQIY.js} +25 -1
- package/dist/chunk-MCMOGQMU.js +145 -0
- package/dist/{chunk-ZXMDA7VB.js → chunk-PDX44BCA.js} +1 -6
- package/dist/{chunk-2SKXFXIT.js → chunk-S3ORKP3V.js} +10 -15
- package/dist/chunk-TAIJOFOE.js +124 -0
- package/dist/{chunk-FS3WTUHY.js → chunk-TXESEO7Y.js} +6 -6
- package/dist/{chunk-7COU5S2Z.js → chunk-VL67H5IC.js} +1 -1
- package/dist/{chunk-QWA26UNO.js → chunk-WQITYKHM.js} +7 -7
- package/dist/{chunk-MW5DMGBB.js → chunk-YMDLDELF.js} +114 -55
- package/dist/{claude-63ISJAZK.js → claude-FRRWJSTJ.js} +1 -1
- package/dist/{claude-cli-ABML5RHX.js → claude-cli-XJLK2X4L.js} +1 -1
- package/dist/{claude-code-JRLMRPTO.js → claude-code-HTBA4XRB.js} +1 -1
- package/dist/{claude-code-teams-CAJBEFIZ.js → claude-code-teams-T4SP24MD.js} +1 -1
- package/dist/{conductor-HLWYWUVH.js → conductor-PGPDVIVE.js} +1 -1
- package/dist/{config-schema-3YNIFJCJ.js → config-schema-EA4XALGG.js} +4 -2
- package/dist/{constellation-FAGT45TU.js → constellation-A26CCGQS.js} +1 -1
- package/dist/{context-audit-557EO6PK.js → context-audit-RLO3ETRP.js} +8 -5
- package/dist/{cost-XEBADYFT.js → cost-BGM32XJU.js} +1 -1
- package/dist/{cost-UD3WPEKZ.js → cost-VI46A4XL.js} +1 -1
- package/dist/{cursor-cli-QUOOF2N4.js → cursor-cli-JVEZGHWQ.js} +1 -1
- package/dist/{cursorrules-3TKZ4E4R.js → cursorrules-HLIKJJZT.js} +1 -1
- package/dist/decision-loader-WWCLIQPJ.js +20 -0
- package/dist/{delete-RRK4RL6Y.js → delete-KBRPQLPC.js} +2 -2
- package/dist/{diff-IP5CIARP.js → diff-RQLLNAFI.js} +5 -5
- package/dist/{discipline-5F5OVTXB.js → discipline-FA4OZXIS.js} +1 -1
- package/dist/{dist-UXWV4OKX.js → dist-34NA5RS5.js} +1 -1
- package/dist/{dist-5QE2BB2B-X6DYVSUL.js → dist-5QE2BB2B-5S3T6Y3T.js} +1 -1
- package/dist/{dist-CM3MVWWW.js → dist-77JDTVAY.js} +1 -0
- package/dist/{dist-POMVY6WP.js → dist-QK4SQAK7.js} +1 -1
- package/dist/{dist-3RVKEJRT.js → dist-TA6LSC2Q.js} +1 -1
- package/dist/docs-J2BTKRVU.js +155 -0
- package/dist/docs-PBZB7LYP.js +89 -0
- package/dist/{doctor-GKZJU7QG.js → doctor-ULBOHEIC.js} +3 -3
- package/dist/{drift-YGT4LJ7Q.js → drift-R5NRKFHI.js} +1 -1
- package/dist/{echo-A6HD5UP7.js → echo-O2LY7CC2.js} +1 -1
- package/dist/{edit-4CLNN5JG.js → edit-R2HNLMOG.js} +2 -2
- package/dist/event-25OJKDCE.js +31 -0
- package/dist/{export-T7CMMJIB.js → export-IWVL7XLF.js} +1 -1
- package/dist/{flow-UFMPVOEM.js → flow-CRRVV3O3.js} +2 -2
- package/dist/{global-HHUJSBG5.js → global-3NG5JXUB.js} +1 -1
- package/dist/graduate-USAWGBJM.js +160 -0
- package/dist/{graph-YYUXI3F7.js → graph-VHUMAAS6.js} +2 -2
- package/dist/{graph-server-ZPXRSGCW.js → graph-server-YL22VBBN.js} +1 -1
- package/dist/{habits-RG5SVKXP.js → habits-OL5NGPXO.js} +3 -3
- package/dist/{history-CETCSUCP.js → history-WOWC573W.js} +1 -1
- package/dist/{hooks-TCUHQMPF.js → hooks-HFWSCGPV.js} +2 -2
- package/dist/index.js +302 -188
- package/dist/{integrity-MK2OP5TA.js → integrity-IHO4FZTS.js} +1 -1
- package/dist/{integrity-checker-J7YXRTBT.js → integrity-checker-PSKJA5SB.js} +1 -0
- package/dist/journal-loader-5EYSBFFY.js +18 -0
- package/dist/{lint-HYWGS3JJ.js → lint-K6CJGGPH.js} +1 -1
- package/dist/{list-IUCYPGMK.js → list-4YK7QKFF.js} +1 -1
- package/dist/{list-BTLFHSRC.js → list-ENR7Q4CR.js} +2 -2
- package/dist/{lore-loader-VTEEZDX3.js → lore-loader-7NO6N6FT.js} +4 -1
- package/dist/{lore-server-NOOAHKJX.js → lore-server-UNJY5KC3.js} +1 -1
- package/dist/{manual-AFJ2J2V3.js → manual-G6FISID5.js} +1 -1
- package/dist/mcp.js +3917 -356
- package/dist/{migrate-FQVGQNXZ.js → migrate-LS45DNEV.js} +2 -2
- package/dist/{migrate-assessments-JP6Q5KME.js → migrate-assessments-RGH4O6IX.js} +2 -2
- package/dist/nomination-engine-HDWMN4IO.js +42 -0
- package/dist/notebook-YWIYGEHV.js +155 -0
- package/dist/{orchestrate-A226N6FC.js → orchestrate-XZA33TJC.js} +5 -5
- package/dist/{peers-RFQCWVLV.js → peers-DEOUIZM6.js} +1 -1
- package/dist/persona-UHAHIVST.js +390 -0
- package/dist/{pipeline-3G2FRAKM.js → pipeline-L4HCSBGN.js} +1 -1
- package/dist/{platform-server-H7Y6Q7O4.js → platform-server-2D6S6YTK.js} +412 -18
- package/dist/{plugin-update-checker-HMRPGY5Z.js → plugin-update-checker-ELOEEQYS.js} +1 -0
- package/dist/{portal-check-FF5EKZE5.js → portal-check-NPYGII2D.js} +2 -2
- package/dist/{portal-compliance-VU4NIFEN.js → portal-compliance-J7DGAPFX.js} +2 -2
- package/dist/{probe-7JK7IDNI.js → probe-MHL5HQZ2.js} +3 -3
- package/dist/{promote-XO63XMAN.js → promote-F6ZYZZAL.js} +2 -2
- package/dist/{providers-YNFSL6HK.js → providers-GK7PB2OL.js} +2 -2
- package/dist/{quiz-I75NU2QQ.js → quiz-M66SC7F7.js} +1 -1
- package/dist/{record-46CLR4OG.js → record-RA4WR2BO.js} +2 -2
- package/dist/{reindex-WIJMCJ4A.js → reindex-65H4WULU.js} +3 -2
- package/dist/{remember-4EUZKIIB.js → remember-HBWJ655S.js} +1 -1
- package/dist/{retag-KC4JVRLE.js → retag-3OLCVDEQ.js} +2 -2
- package/dist/{review-Q7M4CRB5.js → review-27ATYTD2.js} +2 -2
- package/dist/review-57QMURZV.js +334 -0
- package/dist/{ripple-RI3LOT6R.js → ripple-JPBXP5I3.js} +1 -1
- package/dist/{sentinel-UOIGJWHH.js → sentinel-4XIG4STA.js} +2 -2
- package/dist/{sentinel-bridge-APDXYAZS.js → sentinel-bridge-MDUXTQRL.js} +2 -2
- package/dist/{serve-KKEHE44G.js → serve-EFVRS4GA.js} +2 -2
- package/dist/{serve-22A4XOIG.js → serve-INL7SNBK.js} +2 -2
- package/dist/{serve-2YJ6D2Y6.js → serve-KBSE36PL.js} +4 -4
- package/dist/{server-JV6UFGWZ.js → server-54SKYFFY.js} +2 -2
- package/dist/{server-RDLQ3DK7.js → server-XUOIO7E6.js} +1 -1
- package/dist/{setup-YNZJQLW7.js → setup-EDS27WUR.js} +1 -1
- package/dist/{setup-M2ZKLKNN.js → setup-KO5AFC4K.js} +2 -2
- package/dist/{shift-LNMKFYLR.js → shift-VFG23DLA.js} +16 -16
- package/dist/{show-P7GYO43X.js → show-5PV5KFJE.js} +2 -2
- package/dist/{show-PKZMYKRN.js → show-NQKYX6WQ.js} +1 -1
- package/dist/{snapshot-Y3COXK4T.js → snapshot-BK4RBPCG.js} +1 -1
- package/dist/{spawn-SSXZX45U.js → spawn-AW6GDECS.js} +3 -3
- package/dist/{status-KLHALGW4.js → status-WGIAQODY.js} +1 -1
- package/dist/{summary-5NQNOD3F.js → summary-NIRABMF5.js} +2 -2
- package/dist/{sweep-EZU3GU6S.js → sweep-QMHNSIY5.js} +2 -2
- package/dist/{switch-WYUMVNA5.js → switch-6EJPZDIA.js} +1 -1
- package/dist/{symphony-6K3HD7AW.js → symphony-4OCY36AI.js} +5 -5
- package/dist/{symphony-YCHBYN3E.js → symphony-B75X2MME.js} +2 -2
- package/dist/{symphony-peers-HSY3RI3S.js → symphony-peers-2ZQYLRNI.js} +1 -1
- package/dist/{symphony-peers-APOGJPF4.js → symphony-peers-OL7F6M5S.js} +1 -0
- package/dist/{symphony-relay-GTAJRCVF.js → symphony-relay-UJYUXN65.js} +28 -1
- package/dist/{sync-ZM4Q3R4U.js → sync-VEHUH4OA.js} +3 -3
- package/dist/{sync-llms-JIPP3XX4.js → sync-llms-YHCFIE6X.js} +2 -2
- package/dist/{task-loader-7M2FCBX6.js → task-loader-LDYWQSLM.js} +1 -0
- package/dist/{team-HGLJXWQG.js → team-7HG7XK5C.js} +6 -6
- package/dist/{test-WTR5Q33E.js → test-566CP5KC.js} +1 -1
- package/dist/{thread-3WM7KKID.js → thread-N754I4D5.js} +1 -1
- package/dist/{timeline-ANC7LVDL.js → timeline-M3CICQFE.js} +2 -2
- package/dist/{triage-IZ4MDYNB.js → triage-HHYGT3HY.js} +1 -1
- package/dist/{tutorial-GC6QL4US.js → tutorial-KD22SUNO.js} +1 -1
- package/dist/university-content/courses/.purpose +66 -0
- package/dist/university-content/courses/para-401.json +146 -0
- package/dist/university-content/courses/para-501.json +67 -0
- package/dist/university-content/courses/para-601.json +690 -0
- package/dist/university-content/plsat/.purpose +6 -0
- package/dist/university-content/plsat/v2.0.json +2 -2
- package/dist/university-content/plsat/v3.0.json +563 -3
- package/dist/university-content/reference.json +91 -0
- package/dist/university-ui/assets/{index-tfi5xN4Q.js → index-C6bH_6xu.js} +2 -2
- package/dist/university-ui/assets/{index-tfi5xN4Q.js.map → index-C6bH_6xu.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/{upgrade-ANX3LVSA.js → upgrade-H5PF32BW.js} +2 -2
- package/dist/{validate-GD5XWILV.js → validate-CNKEKO6A.js} +1 -1
- package/dist/{validate-ITC5D6QG.js → validate-MB5ULIHS.js} +1 -1
- package/dist/{validate-ZVPNN4FL.js → validate-QH3LADM6.js} +1 -1
- package/dist/{watch-X64UK7K4.js → watch-2TKP5PVL.js} +3 -3
- package/dist/{watch-ERBEJUJW.js → watch-ZF4ML6CD.js} +2 -2
- package/dist/{wisdom-L2WC7J62.js → wisdom-AATMGNFA.js} +1 -1
- package/dist/work-log-loader-5L45XNYZ.js +14 -0
- package/dist/{workspace-UIUTHZTD.js → workspace-6E6OSRNU.js} +4 -4
- package/package.json +1 -1
- package/platform-ui/dist/assets/DocsSection-ByAgPzWV.js +1 -0
- package/platform-ui/dist/assets/DocsSection-CjdO6R-u.css +1 -0
- package/platform-ui/dist/assets/{GitSection-BD3Ze06e.js → GitSection-BLovj9yT.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-SglITfSs.js → GraphSection-C5PCPUFl.js} +1 -1
- package/platform-ui/dist/assets/{LoreSection-bR5Km4Fd.js → LoreSection-BftejTla.js} +1 -1
- package/platform-ui/dist/assets/{SentinelSection-QSpAZArG.js → SentinelSection-CnYcasN7.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-CobYJgvg.js → SymphonySection-BpmqCHeK.js} +1 -1
- package/platform-ui/dist/assets/{index-DbxeSMkV.js → index-G9JnWEs_.js} +10 -10
- package/platform-ui/dist/index.html +1 -1
- package/dist/dist-PSF5CP4I.js +0 -7294
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
routeMessage,
|
|
27
27
|
unregisterAgent
|
|
28
28
|
} from "./chunk-S2HO5MLR.js";
|
|
29
|
-
import "./chunk-
|
|
29
|
+
import "./chunk-PDX44BCA.js";
|
|
30
30
|
|
|
31
31
|
// src/commands/symphony/index.ts
|
|
32
32
|
import chalk from "chalk";
|
|
@@ -57,7 +57,7 @@ async function symphonyJoinCommand(options) {
|
|
|
57
57
|
Tip: Set up polling with: /loop 10s paradigm_symphony_poll`));
|
|
58
58
|
}
|
|
59
59
|
async function symphonyJoinRemote(rootDir, remote) {
|
|
60
|
-
const { SymphonyRelay } = await import("./symphony-relay-
|
|
60
|
+
const { SymphonyRelay } = await import("./symphony-relay-UJYUXN65.js");
|
|
61
61
|
let address;
|
|
62
62
|
let embeddedCode;
|
|
63
63
|
if (remote.includes("#")) {
|
|
@@ -174,7 +174,7 @@ async function symphonyWhoamiCommand() {
|
|
|
174
174
|
async function symphonyListCommand(options) {
|
|
175
175
|
cleanStaleAgents();
|
|
176
176
|
const agents = listAgents();
|
|
177
|
-
const { loadPeers } = await import("./symphony-peers-
|
|
177
|
+
const { loadPeers } = await import("./symphony-peers-2ZQYLRNI.js");
|
|
178
178
|
const peers = loadPeers();
|
|
179
179
|
const remoteAgents = [];
|
|
180
180
|
for (const peer of peers) {
|
|
@@ -398,7 +398,7 @@ async function symphonyStatusCommand(options) {
|
|
|
398
398
|
const threads = listThreads("active");
|
|
399
399
|
const pendingRequests = listFileRequests("pending");
|
|
400
400
|
const unread = identity ? readInbox(identity.id) : [];
|
|
401
|
-
const { loadPeers } = await import("./symphony-peers-
|
|
401
|
+
const { loadPeers } = await import("./symphony-peers-2ZQYLRNI.js");
|
|
402
402
|
const peers = loadPeers();
|
|
403
403
|
const activePeers = peers.filter((p) => !p.revoked);
|
|
404
404
|
if (options.json) {
|
|
@@ -443,7 +443,7 @@ async function symphonyStatusCommand(options) {
|
|
|
443
443
|
async function symphonyServeCommand(options) {
|
|
444
444
|
const port = parseInt(options.port || "3939", 10);
|
|
445
445
|
const rootDir = process.cwd();
|
|
446
|
-
const { SymphonyRelay } = await import("./symphony-relay-
|
|
446
|
+
const { SymphonyRelay } = await import("./symphony-relay-UJYUXN65.js");
|
|
447
447
|
let identity = getMyIdentity(rootDir);
|
|
448
448
|
if (!identity) {
|
|
449
449
|
identity = registerAgent(rootDir);
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
resolveThread,
|
|
20
20
|
routeMessage
|
|
21
21
|
} from "./chunk-S2HO5MLR.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-PDX44BCA.js";
|
|
23
23
|
|
|
24
24
|
// src/platform-server/routes/symphony.ts
|
|
25
25
|
import { Router } from "express";
|
|
@@ -59,7 +59,7 @@ function createSymphonyRouter(projectDir, broadcast) {
|
|
|
59
59
|
});
|
|
60
60
|
router.get("/peers", async (_req, res) => {
|
|
61
61
|
try {
|
|
62
|
-
const { loadPeers } = await import("./symphony-peers-
|
|
62
|
+
const { loadPeers } = await import("./symphony-peers-2ZQYLRNI.js");
|
|
63
63
|
const peers = loadPeers();
|
|
64
64
|
const result = peers.map((p) => ({
|
|
65
65
|
id: p.id,
|
|
@@ -15,9 +15,10 @@ import {
|
|
|
15
15
|
listAgents,
|
|
16
16
|
readOutbox
|
|
17
17
|
} from "./chunk-S2HO5MLR.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-PDX44BCA.js";
|
|
19
19
|
|
|
20
20
|
// ../paradigm-mcp/src/utils/symphony-relay.ts
|
|
21
|
+
import * as fs from "fs";
|
|
21
22
|
import * as path from "path";
|
|
22
23
|
import * as os from "os";
|
|
23
24
|
import * as crypto from "crypto";
|
|
@@ -309,6 +310,9 @@ var SymphonyRelay = class _SymphonyRelay {
|
|
|
309
310
|
break;
|
|
310
311
|
case "message_ack":
|
|
311
312
|
break;
|
|
313
|
+
case "nomination_forward":
|
|
314
|
+
this.handleNominationForward(ws, frame.nomination, frame.origin);
|
|
315
|
+
break;
|
|
312
316
|
case "agents_sync":
|
|
313
317
|
this.handleAgentsSync(ws, frame.agents);
|
|
314
318
|
break;
|
|
@@ -392,6 +396,29 @@ var SymphonyRelay = class _SymphonyRelay {
|
|
|
392
396
|
}
|
|
393
397
|
sendFrame(senderWs, { type: "message_ack", messageId: message.id });
|
|
394
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* Forward a nomination from a remote agent to local nomination storage.
|
|
401
|
+
* Remote nominations are stored in the same nominations.jsonl but tagged with origin.
|
|
402
|
+
*/
|
|
403
|
+
handleNominationForward(senderWs, nomination, origin) {
|
|
404
|
+
if (!nomination?.id) return;
|
|
405
|
+
const tagged = { ...nomination, remote_origin: origin, forwarded_at: (/* @__PURE__ */ new Date()).toISOString() };
|
|
406
|
+
try {
|
|
407
|
+
const eventsDir = path.join(os.homedir(), ".paradigm", "events");
|
|
408
|
+
fs.mkdirSync(eventsDir, { recursive: true });
|
|
409
|
+
const nomPath = path.join(eventsDir, "nominations.jsonl");
|
|
410
|
+
fs.appendFileSync(nomPath, JSON.stringify(tagged) + "\n", "utf8");
|
|
411
|
+
} catch {
|
|
412
|
+
}
|
|
413
|
+
if (this.mode === "server") {
|
|
414
|
+
for (const [peerId, peerWs] of this.connectedPeers) {
|
|
415
|
+
if (peerWs !== senderWs && peerWs.readyState === WebSocket.OPEN) {
|
|
416
|
+
sendFrame(peerWs, { type: "nomination_forward", nomination: tagged, origin });
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
sendFrame(senderWs, { type: "nomination_ack", nominationId: nomination.id });
|
|
421
|
+
}
|
|
395
422
|
/**
|
|
396
423
|
* Update stored agent list for a peer after receiving agents_sync.
|
|
397
424
|
*/
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
syncCommand
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-2IO7JAG2.js";
|
|
5
|
+
import "./chunk-6N3JTACN.js";
|
|
6
6
|
import "./chunk-YO6DVTL7.js";
|
|
7
7
|
import "./chunk-4NCFWYGG.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PDX44BCA.js";
|
|
9
9
|
export {
|
|
10
10
|
syncCommand
|
|
11
11
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
loadParadigmFiles
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6N3JTACN.js";
|
|
5
5
|
import "./chunk-YO6DVTL7.js";
|
|
6
6
|
import {
|
|
7
7
|
log
|
|
8
8
|
} from "./chunk-4NCFWYGG.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-PDX44BCA.js";
|
|
10
10
|
|
|
11
11
|
// src/commands/sync-llms.ts
|
|
12
12
|
import * as fs from "fs";
|
|
@@ -8,19 +8,19 @@ import {
|
|
|
8
8
|
teamModelsCommand,
|
|
9
9
|
teamResetCommand,
|
|
10
10
|
teamStatusCommand
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-EI32ZBE6.js";
|
|
12
|
+
import "./chunk-WQITYKHM.js";
|
|
13
|
+
import "./chunk-LSRABQIY.js";
|
|
14
14
|
import "./chunk-PBHIFAL4.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-TXESEO7Y.js";
|
|
16
16
|
import "./chunk-6QC3YGB6.js";
|
|
17
17
|
import "./chunk-PMXRGPRQ.js";
|
|
18
|
-
import "./chunk-MW5DMGBB.js";
|
|
19
18
|
import "./chunk-5JGJACDU.js";
|
|
20
19
|
import "./chunk-ZGUAAVMA.js";
|
|
21
20
|
import "./chunk-EDOAWN7J.js";
|
|
22
21
|
import "./chunk-IRKUEJVW.js";
|
|
23
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-YMDLDELF.js";
|
|
23
|
+
import "./chunk-PDX44BCA.js";
|
|
24
24
|
export {
|
|
25
25
|
teamAcceptCommand,
|
|
26
26
|
teamCheckCommand,
|
|
@@ -244,6 +244,17 @@ components:
|
|
|
244
244
|
tags: [course-content, para-401]
|
|
245
245
|
references: ["#orchestration", "#mcp-tools", "#paradigm-sync"]
|
|
246
246
|
|
|
247
|
+
para-401-agent-identity:
|
|
248
|
+
description: "Agent Identity & Expertise — .agent files, personality, expertise auto-population, symbol-to-agent routing, orchestration enrichment"
|
|
249
|
+
file: para-401.json
|
|
250
|
+
tags: [course-content, para-401]
|
|
251
|
+
references: ["#agent-loader", "#agent-tools", "#orchestration"]
|
|
252
|
+
|
|
253
|
+
para-401-notebooks-permissions:
|
|
254
|
+
description: "University lesson: Agent Notebooks & Permission Scoping — notebooks, permissions, integrity hashing"
|
|
255
|
+
type: lesson
|
|
256
|
+
tags: [university, notebooks, agent-identity, permissions]
|
|
257
|
+
|
|
247
258
|
# PARA 501: Advanced Systems (10 lessons)
|
|
248
259
|
|
|
249
260
|
para-501-lore-system:
|
|
@@ -311,3 +322,58 @@ components:
|
|
|
311
322
|
file: para-501.json
|
|
312
323
|
tags: [course-content, para-501]
|
|
313
324
|
references: ["#PlatformServer", "#PlatformWebSocket", "#AgentPresenceManager", "#UserStateTracker", "#AgentCommandRoute", "#PlatformTools", "#AgentStore", "#AgentToast", "#AgentCallout"]
|
|
325
|
+
|
|
326
|
+
para-501-review-compliance:
|
|
327
|
+
description: "University lesson: Automated Review Pipeline — paradigm review, compliance-checker, dynamic tool loading, response format"
|
|
328
|
+
type: lesson
|
|
329
|
+
tags: [university, review, compliance, tool-loading]
|
|
330
|
+
|
|
331
|
+
# PARA 601: Ambient Coordination (8 lessons)
|
|
332
|
+
|
|
333
|
+
para-601-event-stream:
|
|
334
|
+
description: "Event Stream — append-only JSONL activity log, event types, automatic emission from MCP tools and hooks"
|
|
335
|
+
file: para-601.json
|
|
336
|
+
tags: [course-content, para-601]
|
|
337
|
+
references: ["#event-stream"]
|
|
338
|
+
|
|
339
|
+
para-601-attention-scoring:
|
|
340
|
+
description: "Attention Scoring — four-dimension relevance scoring (symbol, path, concept, signal), max-based scoring, configurable thresholds"
|
|
341
|
+
file: para-601.json
|
|
342
|
+
tags: [course-content, para-601]
|
|
343
|
+
references: ["#agent-loader", "#event-stream"]
|
|
344
|
+
|
|
345
|
+
para-601-nominations:
|
|
346
|
+
description: "Nominations — self-nominated agent contributions, brief/urgency/type/evidence, surfacing and engagement workflow"
|
|
347
|
+
file: para-601.json
|
|
348
|
+
tags: [course-content, para-601]
|
|
349
|
+
references: ["#nomination-engine", "#agent-loader"]
|
|
350
|
+
|
|
351
|
+
para-601-knowledge-streams:
|
|
352
|
+
description: "Knowledge Streams — Work Log, Learning Journal, Team Decisions; different audiences, lifecycles, and storage"
|
|
353
|
+
file: para-601.json
|
|
354
|
+
tags: [course-content, para-601]
|
|
355
|
+
references: ["#event-stream"]
|
|
356
|
+
|
|
357
|
+
para-601-trust-rings:
|
|
358
|
+
description: "Trust Rings — four concentric data sovereignty levels, project-locked default, enforcement boundaries"
|
|
359
|
+
file: para-601.json
|
|
360
|
+
tags: [course-content, para-601]
|
|
361
|
+
references: ["#data-policy"]
|
|
362
|
+
|
|
363
|
+
para-601-data-policy:
|
|
364
|
+
description: "Data Policy — YAML-configured rules, observation control, stream filtering, per-agent overrides, DEFAULT_DATA_POLICY"
|
|
365
|
+
file: para-601.json
|
|
366
|
+
tags: [course-content, para-601]
|
|
367
|
+
references: ["#data-policy"]
|
|
368
|
+
|
|
369
|
+
para-601-context-composition:
|
|
370
|
+
description: "Context Composition — paradigm_context_compose, profile enrichment, decisions, journal insights, nominations into session context"
|
|
371
|
+
file: para-601.json
|
|
372
|
+
tags: [course-content, para-601]
|
|
373
|
+
references: ["#agent-loader", "#nomination-engine"]
|
|
374
|
+
|
|
375
|
+
para-601-ambient-review:
|
|
376
|
+
description: "Ambient Review — comprehensive review of PARA 601 ambient coordination concepts"
|
|
377
|
+
file: para-601.json
|
|
378
|
+
tags: [course-content, para-601]
|
|
379
|
+
references: ["#event-stream", "#nomination-engine", "#data-policy", "#agent-loader"]
|
|
@@ -689,6 +689,152 @@
|
|
|
689
689
|
"explanation": "Token cost estimates enable agents to evaluate tool selection before calling. An agent deciding between paradigm_search (~150 tokens) and reading 5 files (~2500 tokens) can make an informed cost/benefit decision. The goal is efficiency, not restriction."
|
|
690
690
|
}
|
|
691
691
|
]
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"id": "agent-identity",
|
|
695
|
+
"title": "Agent Identity & Expertise Profiles",
|
|
696
|
+
"content": "## Agent Identity & Expertise Profiles\n\nEvery Claude session starts blank. The project remembers — via lore, protocols, aspects — but the agent doesn't. An architect that has successfully designed auth systems 14 times has no memory of that expertise. The orchestrator cannot route tasks to the most qualified agent because qualification is not tracked.\n\nAgent identity files (`.agent`) solve this with persistent YAML profiles that track expertise, personality, and cross-project patterns. They **overlay** the existing `agents.yaml` system and are fully backward compatible — when no `.agent` files exist, everything works exactly as before.\n\n### Storage & Merge Priority\n\nProfiles live in two locations:\n\n- **Global** (`~/.paradigm/agents/architect.agent`) — travels across projects\n- **Project** (`.paradigm/agents/builder.agent`) — project-level overrides\n\nMerge priority: **project `.agent` > global `.agent` > `agents.yaml`**. This means a project can override a global agent's default model or focus areas without modifying the shared identity.\n\n### Profile Structure\n\nEach `.agent` file contains:\n\n- **`id`** — Agent identifier (e.g., \"architect\")\n- **`personality`** — Style (deliberate/rapid/exploratory/methodical), risk tolerance (conservative/balanced/aggressive), and verbosity (minimal/concise/detailed)\n- **`expertise`** — Per-symbol entries with confidence (0.0-1.0), session count, and last touch date\n- **`transferable`** — Cross-project patterns with success rates and linked protocols/lore\n- **`contexts`** — Per-project adaptations: focus areas, preferred model, session count\n\n### Expertise Auto-Population\n\nWhen lore is recorded with `paradigm_lore_record`, the relevant agent's expertise scores update automatically via exponential moving average:\n\n```\nFor each symbol in symbols_touched:\n if existing entry:\n sessions++\n confidence = 0.7 * old_confidence + 0.3 * lore_confidence\n else:\n create entry with confidence = lore_confidence (or 0.5 default)\n```\n\nAssessment verdicts from `paradigm_lore_assess` also feed into expertise. A verdict of `correct` nudges confidence up, `incorrect` nudges it down.\n\n### Querying Expertise\n\n`paradigm_agent_expertise` takes a symbol and returns agents ranked by confidence:\n\n```\nparadigm_agent_expertise({ symbol: \"#payment-service\" })\n// Returns: [{ agentId: \"architect\", confidence: 0.92, sessions: 14 }, ...]\n```\n\nThis enables **symbol-to-agent routing** — the orchestrator can prefer the agent most experienced with the symbols a task touches.\n\n### Orchestration Enrichment\n\nWhen `paradigm_orchestrate_inline` builds agent prompts, agents with `.agent` profiles receive a preamble:\n\n```markdown\n## Agent Identity: architect\n**Style:** deliberate | **Risk:** conservative | **Verbosity:** concise\n\n## Your Expertise on Relevant Symbols\n- #auth-middleware: confidence 0.92 (14 sessions)\n- $checkout-flow: confidence 0.88 (8 sessions)\n\n## Transferable Patterns\n- portal-gate-pattern: 95% success (learned in a-paradigm, applied in 2 projects)\n```\n\nThis goes BEFORE the role-specific prompt, giving the agent self-awareness about its strengths.\n\n### CLI Commands\n\n- `paradigm agent list` — Show all profiles with top expertise\n- `paradigm agent show <id>` — Full profile with expertise table\n- `paradigm agent create <id> --global` — Create new identity file\n- `paradigm agent sync <id>` — Bootstrap expertise from existing project lore\n\nAgent identities are a foundation for future capabilities: curated notebooks, model cascading, and knowledge graduation across projects.",
|
|
697
|
+
"keyConcepts": [
|
|
698
|
+
".agent files are persistent YAML profiles that overlay agents.yaml — backward compatible",
|
|
699
|
+
"Two storage scopes: global (~/.paradigm/agents/) and project (.paradigm/agents/), project wins on merge",
|
|
700
|
+
"Expertise auto-updates via exponential moving average (70/30) from lore recording",
|
|
701
|
+
"paradigm_agent_expertise enables symbol-to-agent routing for orchestration",
|
|
702
|
+
"Orchestration enrichment prepends personality and expertise context to agent prompts"
|
|
703
|
+
],
|
|
704
|
+
"quiz": [
|
|
705
|
+
{
|
|
706
|
+
"id": "q1",
|
|
707
|
+
"question": "You run `paradigm agent create architect --global`. Where is the file stored?",
|
|
708
|
+
"choices": {
|
|
709
|
+
"A": "In the project's .paradigm/agents/architect.agent",
|
|
710
|
+
"B": "In ~/.paradigm/agents/architect.agent",
|
|
711
|
+
"C": "In .paradigm/agents.yaml as a new entry",
|
|
712
|
+
"D": "In ~/.paradigm/score/agents/architect.agent",
|
|
713
|
+
"E": "In the project's .paradigm/config.yaml under agents section"
|
|
714
|
+
},
|
|
715
|
+
"correct": "B",
|
|
716
|
+
"explanation": "The --global flag stores the .agent file in ~/.paradigm/agents/, the global scope that travels across projects. Without --global, it would go in the project's .paradigm/agents/ directory."
|
|
717
|
+
},
|
|
718
|
+
{
|
|
719
|
+
"id": "q2",
|
|
720
|
+
"question": "Both ~/.paradigm/agents/builder.agent and .paradigm/agents/builder.agent exist with different defaultModel. Which one wins?",
|
|
721
|
+
"choices": {
|
|
722
|
+
"A": "The global one (~/.paradigm/agents/) always takes priority",
|
|
723
|
+
"B": "The one with the newer 'updated' timestamp wins",
|
|
724
|
+
"C": "Project-level .paradigm/agents/builder.agent takes priority",
|
|
725
|
+
"D": "agents.yaml overrides both .agent files",
|
|
726
|
+
"E": "An error is raised for the conflict"
|
|
727
|
+
},
|
|
728
|
+
"correct": "C",
|
|
729
|
+
"explanation": "Merge priority is: project .agent > global .agent > agents.yaml. Project-level overrides exist specifically so a project can customize model preferences or focus areas without changing the global identity."
|
|
730
|
+
},
|
|
731
|
+
{
|
|
732
|
+
"id": "q3",
|
|
733
|
+
"question": "An agent records lore with confidence: 0.8 touching #auth-middleware. The agent's existing expertise on that symbol is confidence: 0.9, sessions: 10. What's the new confidence?",
|
|
734
|
+
"choices": {
|
|
735
|
+
"A": "0.85 (simple average)",
|
|
736
|
+
"B": "0.87 (exponential moving average: 0.7 * 0.9 + 0.3 * 0.8)",
|
|
737
|
+
"C": "0.80 (new value replaces old)",
|
|
738
|
+
"D": "0.90 (existing value preserved)",
|
|
739
|
+
"E": "0.88 (weighted by session count)"
|
|
740
|
+
},
|
|
741
|
+
"correct": "B",
|
|
742
|
+
"explanation": "Expertise uses exponential moving average with alpha=0.3: new = 0.7 * old + 0.3 * new_observation. So 0.7 * 0.9 + 0.3 * 0.8 = 0.63 + 0.24 = 0.87. This balances stability (70% old) with responsiveness to new data (30% new)."
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
"id": "q4",
|
|
746
|
+
"question": "You want to find which agent is best qualified to modify #payment-service. Which MCP tool do you call?",
|
|
747
|
+
"choices": {
|
|
748
|
+
"A": "paradigm_agent_list and manually compare expertise arrays",
|
|
749
|
+
"B": "paradigm_agent_get with the symbol name",
|
|
750
|
+
"C": "paradigm_agent_expertise with symbol: \"#payment-service\"",
|
|
751
|
+
"D": "paradigm_search with query: \"payment-service agents\"",
|
|
752
|
+
"E": "paradigm_orchestrate_inline with the task description"
|
|
753
|
+
},
|
|
754
|
+
"correct": "C",
|
|
755
|
+
"explanation": "paradigm_agent_expertise takes a symbol and returns all agents with expertise on that symbol, ranked by confidence score. This is the purpose-built tool for symbol-to-agent routing, costing only ~100 tokens."
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"id": "q5",
|
|
759
|
+
"question": "A project has agents.yaml with 5 agents but no .agent files. What happens during orchestration?",
|
|
760
|
+
"choices": {
|
|
761
|
+
"A": "An error: .agent files are required for orchestration",
|
|
762
|
+
"B": "agents.yaml is ignored and default agents are used",
|
|
763
|
+
"C": "Empty .agent files are auto-created for each agent",
|
|
764
|
+
"D": "Everything works exactly as before — .agent files are a pure overlay",
|
|
765
|
+
"E": "Orchestration runs but warns about missing profiles"
|
|
766
|
+
},
|
|
767
|
+
"correct": "D",
|
|
768
|
+
"explanation": ".agent files are a pure overlay. No files = no enrichment, same behavior as pre-3.47.0. The system is fully backward compatible — agents.yaml continues to work unchanged, and .agent profiles only add capabilities when present."
|
|
769
|
+
}
|
|
770
|
+
]
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
"id": "notebooks-permissions",
|
|
774
|
+
"title": "Agent Notebooks & Permission Scoping",
|
|
775
|
+
"content": "## Agent Notebooks\n\nAgent notebooks are curated snippet libraries distilled from lore entries. They provide reusable knowledge that agents can apply across sessions and projects.\n\n### NotebookEntry Format\n\nEach entry contains:\n- **context**: When to apply this snippet (retrieval key)\n- **snippet**: The reusable code/knowledge\n- **provenance**: Where it came from (lore, manual, transfer)\n- **concepts[]**: Concept tags for retrieval (e.g., [\"auth\", \"middleware\"])\n- **appliedCount**: How many times used in orchestration\n- **confidence**: 0.0-1.0 reliability score\n\n### Storage\n\n- Global: `~/.paradigm/notebooks/{agent-id}/` — travels across projects\n- Project: `.paradigm/notebooks/{agent-id}/` — project-specific\n\n### MCP Tools\n\n- `paradigm_notebook_search` — find entries by concept, tag, or keyword\n- `paradigm_notebook_add` — create a new curated entry\n- `paradigm_notebook_promote` — extract from lore entry with provenance linking\n\n### Orchestration Integration\n\n`buildProfileEnrichment()` appends a \"Relevant Notebook Entries\" section with context + snippet for matching entries. This enriches the orchestration prompt with reusable patterns.\n\n## Agent Permissions\n\nPermission scoping controls what agents can access:\n\n### Permission Fields\n\n- **paths.read/write**: Glob patterns for file access\n- **paths.deny**: Always-deny patterns (overrides read/write)\n- **tools.allow/deny**: Tool name patterns\n- **dangerous_actions**: Actions requiring explicit approval\n\n### Integrity Hashing\n\nSHA-256 hash of `{id, role, permissions}` stored as `integrityHash`. `verifyIntegrity()` detects tampering — agents must never modify their own config.\n\n### In Orchestration\n\nPermissions appear as constraints in orchestration prompts, informing agents of their boundaries.",
|
|
776
|
+
"quiz": [
|
|
777
|
+
{
|
|
778
|
+
"id": "Q-401-NP-001",
|
|
779
|
+
"question": "Where are global notebook entries stored for the architect agent?",
|
|
780
|
+
"options": [
|
|
781
|
+
"~/.paradigm/notebooks/architect/",
|
|
782
|
+
".paradigm/notebooks/architect/",
|
|
783
|
+
"~/.paradigm/agents/architect/notebooks/",
|
|
784
|
+
".paradigm/agents/architect.notebooks"
|
|
785
|
+
],
|
|
786
|
+
"correct": 0,
|
|
787
|
+
"explanation": "Global notebook entries are stored at ~/.paradigm/notebooks/{agent-id}/ and travel across projects."
|
|
788
|
+
},
|
|
789
|
+
{
|
|
790
|
+
"id": "Q-401-NP-002",
|
|
791
|
+
"question": "An agent has permissions.paths.deny: [\".paradigm/agents/*\"]. What happens if it tries to write to .paradigm/agents/builder.agent?",
|
|
792
|
+
"options": [
|
|
793
|
+
"The write succeeds if there's also a write pattern matching it",
|
|
794
|
+
"The write is flagged as denied — deny patterns always override allow patterns",
|
|
795
|
+
"The write succeeds but triggers an advisory",
|
|
796
|
+
"The agent profile is deleted"
|
|
797
|
+
],
|
|
798
|
+
"correct": 1,
|
|
799
|
+
"explanation": "Deny patterns always override allow patterns. checkPathPermission() checks deny first."
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"id": "Q-401-NP-003",
|
|
803
|
+
"question": "You want to extract a reusable pattern from lore entry L-2026-03-10-001 into the architect's notebook. Which MCP tool?",
|
|
804
|
+
"options": [
|
|
805
|
+
"paradigm_notebook_add with loreEntryId parameter",
|
|
806
|
+
"paradigm_lore_promote with agentId parameter",
|
|
807
|
+
"paradigm_notebook_promote with agentId + loreEntryId",
|
|
808
|
+
"paradigm_agent_notebook with action: 'promote'"
|
|
809
|
+
],
|
|
810
|
+
"correct": 2,
|
|
811
|
+
"explanation": "paradigm_notebook_promote takes agentId + loreEntryId and creates a distilled notebook entry with provenance link."
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
"id": "Q-401-NP-004",
|
|
815
|
+
"question": "An architect agent has 3 notebook entries matching #auth-middleware. How does orchestration use them?",
|
|
816
|
+
"options": [
|
|
817
|
+
"They replace the agent's expertise section in the prompt",
|
|
818
|
+
"buildProfileEnrichment() appends a 'Relevant Notebook Entries' section with context + snippet",
|
|
819
|
+
"They are sent as separate tool calls before the main prompt",
|
|
820
|
+
"They override the agent's personality settings"
|
|
821
|
+
],
|
|
822
|
+
"correct": 1,
|
|
823
|
+
"explanation": "buildProfileEnrichment() appends notebook entries (up to 5) with context + truncated snippet to the orchestration prompt."
|
|
824
|
+
},
|
|
825
|
+
{
|
|
826
|
+
"id": "Q-401-NP-005",
|
|
827
|
+
"question": "A .agent file's integrityHash doesn't match the computed hash. What does this indicate?",
|
|
828
|
+
"options": [
|
|
829
|
+
"The file was created before v4.0 and needs migration",
|
|
830
|
+
"The file was modified without going through saveAgentProfile() — possible tampering",
|
|
831
|
+
"The agent's expertise has been updated since the hash was computed",
|
|
832
|
+
"The hash algorithm has changed between versions"
|
|
833
|
+
],
|
|
834
|
+
"correct": 1,
|
|
835
|
+
"explanation": "verifyIntegrity() returns false when the stored hash doesn't match. The hash covers id+role+permissions, so changes to those fields without saveAgentProfile() indicate tampering."
|
|
836
|
+
}
|
|
837
|
+
]
|
|
692
838
|
}
|
|
693
839
|
]
|
|
694
840
|
}
|
|
@@ -1039,6 +1039,73 @@
|
|
|
1039
1039
|
"explanation": "Internet direct connect uses the connection string format: address:port#code. The --public flag on the hub displays this connection string. The spoke parses the embedded code from after the # character and uses it automatically — no interactive prompt needed. Port 3939 must be reachable from the internet (port forward, VPN, or SSH tunnel)."
|
|
1040
1040
|
}
|
|
1041
1041
|
]
|
|
1042
|
+
},
|
|
1043
|
+
{
|
|
1044
|
+
"id": "review-compliance",
|
|
1045
|
+
"title": "Automated Review Pipeline & Compliance Checking",
|
|
1046
|
+
"content": "## paradigm review\n\nThe automated review pipeline uses a two-stage protocol:\n\n### Stage 1: Spec Compliance (always runs)\n\n- **Purpose coverage**: All touched symbols registered in .purpose files\n- **Portal gate compliance**: Routes declared in portal.yaml with gates\n- **Aspect anchors**: Anchor files still exist, no drift\n- **Broken references**: Parent symbols exist\n- **Route coverage**: New routes have portal.yaml entries\n\n### Stage 2: Code Quality (--deep only)\n\n- **Security**: eval() detection, hardcoded secrets\n- **Convention**: console.log usage (use Paradigm logger)\n- **Test coverage**: Gaps in test files\n\n### ReviewFinding Format\n\nEach finding has:\n- **type**: blocking (must fix), improvement (should fix), note (informational)\n- **category**: purpose-coverage, portal-compliance, aspect-anchors, security, convention\n- **message**: Human-readable description\n- **suggestion**: How to fix it\n\n### Usage\n\n```bash\nparadigm review # Staged changes\nparadigm review --pr 123 # PR via gh CLI\nparadigm review --ci # Exit 1 on blocking\nparadigm review --deep # Include code quality\nparadigm review --json # JSON output\n```\n\n## Dynamic Tool Loading\n\nTools are organized in three tiers:\n- **Core** (~15 tools): Always loaded (search, ripple, status, navigate, etc.)\n- **Feature**: Auto-detected from filesystem (lore → .paradigm/lore/, etc.)\n- **Advanced**: On-demand via `paradigm_tool_activate`\n\n## Response Format\n\n`response_format: 'concise'` on high-traffic tools strips secondary data:\n- paradigm_search: returns only { symbol, type }\n- paradigm_ripple: returns only { symbol, impact, summary }\n- paradigm_status: returns only { project, counts, total }\n\n## compliance-checker.ts\n\nShared logic extracted from pm.ts postflight. Both `paradigm_pm_postflight` and `paradigm review` use the same compliance checks.",
|
|
1047
|
+
"quiz": [
|
|
1048
|
+
{
|
|
1049
|
+
"id": "Q-501-RC-001",
|
|
1050
|
+
"question": "paradigm review --ci finds 2 blocking and 3 improvement findings. What's the exit code?",
|
|
1051
|
+
"options": [
|
|
1052
|
+
"Exit code 0 — improvements are non-blocking",
|
|
1053
|
+
"Exit code 1 — any blocking findings cause non-zero exit in CI mode",
|
|
1054
|
+
"Exit code 2 — one per blocking finding",
|
|
1055
|
+
"Exit code 5 — total findings count"
|
|
1056
|
+
],
|
|
1057
|
+
"correct": 1,
|
|
1058
|
+
"explanation": "In CI mode, any blocking findings cause exit code 1. Improvements and notes do not affect the exit code."
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"id": "Q-501-RC-002",
|
|
1062
|
+
"question": "A project has no features: section in config.yaml. How many MCP tools are loaded?",
|
|
1063
|
+
"options": [
|
|
1064
|
+
"Only core tools (~15)",
|
|
1065
|
+
"Core + explicitly enabled features",
|
|
1066
|
+
"All of them — auto-detection is generous, defaulting to current behavior",
|
|
1067
|
+
"None — features must be explicitly configured"
|
|
1068
|
+
],
|
|
1069
|
+
"correct": 2,
|
|
1070
|
+
"explanation": "No features config + generous auto-detection = all tools loaded, matching pre-4.0 behavior for backward compat."
|
|
1071
|
+
},
|
|
1072
|
+
{
|
|
1073
|
+
"id": "Q-501-RC-003",
|
|
1074
|
+
"question": "You call paradigm_search with response_format: 'concise'. What fields are returned?",
|
|
1075
|
+
"options": [
|
|
1076
|
+
"Full results with descriptions, paths, and fuzzy matches",
|
|
1077
|
+
"Only { symbol, type } per result — descriptions and secondary data stripped",
|
|
1078
|
+
"Only symbol names as a flat array",
|
|
1079
|
+
"Compressed binary format"
|
|
1080
|
+
],
|
|
1081
|
+
"correct": 1,
|
|
1082
|
+
"explanation": "Concise mode strips results to { symbol, type } per entry and removes fuzzyMatched, fuzzyNote, suggestions, workspace data."
|
|
1083
|
+
},
|
|
1084
|
+
{
|
|
1085
|
+
"id": "Q-501-RC-004",
|
|
1086
|
+
"question": "An agent needs the graph generation tool but it's in the advanced tier. What does it do?",
|
|
1087
|
+
"options": [
|
|
1088
|
+
"Request an admin to enable it in config.yaml",
|
|
1089
|
+
"Call paradigm_tool_activate with feature: 'graph'",
|
|
1090
|
+
"Modify the agent's permissions to include graph tools",
|
|
1091
|
+
"Restart the session with --enable-graph flag"
|
|
1092
|
+
],
|
|
1093
|
+
"correct": 1,
|
|
1094
|
+
"explanation": "paradigm_tool_activate enables advanced-tier modules for the current session. The tools become available immediately."
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
"id": "Q-501-RC-005",
|
|
1098
|
+
"question": "What's the relationship between paradigm review Stage 1 and paradigm_pm_postflight?",
|
|
1099
|
+
"options": [
|
|
1100
|
+
"They are completely independent with different checks",
|
|
1101
|
+
"paradigm review calls paradigm_pm_postflight internally",
|
|
1102
|
+
"They share the same compliance logic extracted into compliance-checker.ts",
|
|
1103
|
+
"paradigm_pm_postflight is deprecated in favor of paradigm review"
|
|
1104
|
+
],
|
|
1105
|
+
"correct": 2,
|
|
1106
|
+
"explanation": "Both use compliance-checker.ts for shared compliance logic — purpose coverage, portal gates, aspect anchors, and broken refs."
|
|
1107
|
+
}
|
|
1108
|
+
]
|
|
1042
1109
|
}
|
|
1043
1110
|
]
|
|
1044
1111
|
}
|