@a-company/paradigm 3.18.0 → 3.19.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/chunk-3DYYXGDC.js +403 -0
- package/dist/{chunk-YHRRJM6J.js → chunk-BRILIG7Z.js} +53 -34
- package/dist/{chunk-TUW27EIC.js → chunk-EZ6XW6FB.js} +141 -500
- package/dist/{delete-2PX6DDAY.js → delete-YTASL4SM.js} +1 -1
- package/dist/{edit-GJYLJYDU.js → edit-S7NZD7H7.js} +1 -1
- package/dist/index.js +18 -10
- package/dist/{list-RHYZPKG3.js → list-CAL7KS7B.js} +1 -1
- package/dist/lore-loader-S5BXMH27.js +21 -0
- package/dist/{lore-server-XEW7EG62.js → lore-server-2NYDLGCJ.js} +25 -1
- package/dist/mcp.js +458 -136
- package/dist/migrate-assessments-FPR6C35Z.js +97 -0
- package/dist/{record-PGVYYZFU.js → record-UGN75GTB.js} +5 -2
- package/dist/{reindex-UAYAEF7M.js → reindex-CMZARW5K.js} +2 -1
- package/dist/retag-URLJLMSK.js +62 -0
- package/dist/{review-BRY5R45L.js → review-725ZKA7U.js} +1 -1
- package/dist/{serve-KBMKF4KG.js → serve-GUJ3L3IG.js} +1 -1
- package/dist/{show-6CHTSR33.js → show-GEVVQWWG.js} +37 -3
- package/dist/{timeline-HC527YXE.js → timeline-B6TMGWRU.js} +1 -1
- package/dist/university-content/courses/para-501.json +30 -30
- package/dist/university-content/plsat/v3.0.json +26 -26
- package/package.json +1 -1
- package/dist/assessment-loader-C5EOUM47.js +0 -23
- package/dist/chunk-DSXS42FY.js +0 -283
package/dist/index.js
CHANGED
|
@@ -620,36 +620,44 @@ triageCmd.option("-l, --limit <number>", "Maximum incidents to show", "10").opti
|
|
|
620
620
|
await triageListCommand(options);
|
|
621
621
|
});
|
|
622
622
|
var loreCmd = program.command("lore").description("Project lore - timeline of everything that happened to this project");
|
|
623
|
-
loreCmd.command("list").alias("ls").description("List recent lore entries").option("--author <author>", "Filter by author").option("--type <type>", "Filter by type: agent-session, human-note, decision, review, incident, milestone").option("--symbol <symbol>", "Filter by symbol").option("--tags <tags>", "Filter by tags (comma-separated)").option("--from <date>", "Filter from date (ISO format, e.g., 2026-02-20)").option("--to <date>", "Filter to date (ISO format)").option("-l, --limit <number>", "Number of entries", "20").option("--json", "Output as JSON").action(async (options) => {
|
|
624
|
-
const { loreListCommand } = await import("./list-
|
|
623
|
+
loreCmd.command("list").alias("ls").description("List recent lore entries").option("--author <author>", "Filter by author").option("--type <type>", "Filter by type: agent-session, human-note, decision, review, incident, milestone, retro, insight").option("--symbol <symbol>", "Filter by symbol").option("--tags <tags>", "Filter by tags (comma-separated)").option("--from <date>", "Filter from date (ISO format, e.g., 2026-02-20)").option("--to <date>", "Filter to date (ISO format)").option("-l, --limit <number>", "Number of entries", "20").option("--json", "Output as JSON").action(async (options) => {
|
|
624
|
+
const { loreListCommand } = await import("./list-CAL7KS7B.js");
|
|
625
625
|
await loreListCommand(options);
|
|
626
626
|
});
|
|
627
627
|
loreCmd.command("show <id>").description("Show full detail for a lore entry").option("--json", "Output as JSON").action(async (id, options) => {
|
|
628
|
-
const { loreShowCommand } = await import("./show-
|
|
628
|
+
const { loreShowCommand } = await import("./show-GEVVQWWG.js");
|
|
629
629
|
await loreShowCommand(id, options);
|
|
630
630
|
});
|
|
631
|
-
loreCmd.command("record").description("Record a new lore entry (human note, milestone, etc.)").option("--type <type>", "Entry type: human-note, decision, milestone", "human-note").option("--author <author>", "Author name").option("--title <title>", "Entry title").option("--summary <summary>", "Entry summary").option("--symbols <symbols>", "Comma-separated symbols").option("--tags <tags>", "Comma-separated tags").option("--files-modified <files>", "Comma-separated files modified").option("--files-created <files>", "Comma-separated files created").option("--commit <hash>", "Git commit hash").option("--learnings <items>", "Comma-separated learnings").option("--duration <minutes>", "Duration in minutes").option("--meta <json>", `Project-defined metadata as JSON (e.g., '{"sprint": 12}')`).action(async (options) => {
|
|
632
|
-
const { loreRecordCommand } = await import("./record-
|
|
631
|
+
loreCmd.command("record").description("Record a new lore entry (human note, milestone, etc.)").option("--type <type>", "Entry type: human-note, decision, milestone, retro, insight", "human-note").option("--author <author>", "Author name").option("--title <title>", "Entry title").option("--summary <summary>", "Entry summary").option("--symbols <symbols>", "Comma-separated symbols").option("--tags <tags>", "Comma-separated tags").option("--files-modified <files>", "Comma-separated files modified").option("--files-created <files>", "Comma-separated files created").option("--commit <hash>", "Git commit hash").option("--learnings <items>", "Comma-separated learnings").option("--duration <minutes>", "Duration in minutes").option("--meta <json>", `Project-defined metadata as JSON (e.g., '{"sprint": 12}')`).option("--body <text>", "Long-form content (detailed notes, rationale, etc.)").option("--link-lore <ids>", "Comma-separated lore entry IDs to link").option("--link-commits <shas>", "Comma-separated git commit SHAs to link").action(async (options) => {
|
|
632
|
+
const { loreRecordCommand } = await import("./record-UGN75GTB.js");
|
|
633
633
|
await loreRecordCommand(options);
|
|
634
634
|
});
|
|
635
635
|
loreCmd.command("review <id>").description("Add a review to a lore entry").option("--reviewer <name>", "Reviewer name").option("--completeness <n>", "Completeness score (1-5)", "3").option("--quality <n>", "Quality score (1-5)", "3").option("--notes <text>", "Review notes").action(async (id, options) => {
|
|
636
|
-
const { loreReviewCommand } = await import("./review-
|
|
636
|
+
const { loreReviewCommand } = await import("./review-725ZKA7U.js");
|
|
637
637
|
await loreReviewCommand(id, options);
|
|
638
638
|
});
|
|
639
639
|
loreCmd.command("edit <id>").description("Edit an existing lore entry").option("--title <title>", "New title").option("--summary <summary>", "New summary").option("--type <type>", "New type: agent-session, human-note, decision, review, incident, milestone").option("--symbols <symbols>", "Comma-separated symbols").option("--tags <tags>", "Comma-separated tags").option("--learnings <items>", "Comma-separated learnings").action(async (id, options) => {
|
|
640
|
-
const { loreEditCommand } = await import("./edit-
|
|
640
|
+
const { loreEditCommand } = await import("./edit-S7NZD7H7.js");
|
|
641
641
|
await loreEditCommand(id, options);
|
|
642
642
|
});
|
|
643
643
|
loreCmd.command("delete <id>").description("Delete a lore entry").option("-y, --yes", "Skip confirmation").option("--dry-run", "Show what would be deleted without making changes").action(async (id, options) => {
|
|
644
|
-
const { loreDeleteCommand } = await import("./delete-
|
|
644
|
+
const { loreDeleteCommand } = await import("./delete-YTASL4SM.js");
|
|
645
645
|
await loreDeleteCommand(id, options);
|
|
646
646
|
});
|
|
647
|
+
loreCmd.command("migrate-assessments").description("Migrate assessment entries to lore with arc: tags").option("--dry-run", "Show what would be migrated without making changes").action(async (options) => {
|
|
648
|
+
const { loreMigrateAssessmentsCommand } = await import("./migrate-assessments-FPR6C35Z.js");
|
|
649
|
+
await loreMigrateAssessmentsCommand(options);
|
|
650
|
+
});
|
|
651
|
+
loreCmd.command("retag").description("Add or remove tags from matching lore entries").option("--add <tag>", "Tag to add").option("--remove <tag>", "Tag to remove").option("--type <type>", "Filter by entry type").option("--symbol <symbol>", "Filter by symbol").option("--author <author>", "Filter by author").option("--from <date>", "Filter from date").option("--to <date>", "Filter to date").option("--tags <tags>", "Filter by existing tags (comma-separated)").option("--dry-run", "Show what would change without making changes").action(async (options) => {
|
|
652
|
+
const { loreRetagCommand } = await import("./retag-URLJLMSK.js");
|
|
653
|
+
await loreRetagCommand(options);
|
|
654
|
+
});
|
|
647
655
|
loreCmd.command("timeline").description("Show lore timeline grouped by date with hot symbols and authors").option("-l, --limit <number>", "Number of entries", "20").option("--json", "Output as JSON").action(async (options) => {
|
|
648
|
-
const { loreTimelineCommand } = await import("./timeline-
|
|
656
|
+
const { loreTimelineCommand } = await import("./timeline-B6TMGWRU.js");
|
|
649
657
|
await loreTimelineCommand(options);
|
|
650
658
|
});
|
|
651
659
|
loreCmd.option("-p, --port <port>", "Port to run on", "3840").option("--no-open", "Don't open browser automatically").action(async (options) => {
|
|
652
|
-
const { loreServeCommand } = await import("./serve-
|
|
660
|
+
const { loreServeCommand } = await import("./serve-GUJ3L3IG.js");
|
|
653
661
|
await loreServeCommand(void 0, options);
|
|
654
662
|
});
|
|
655
663
|
var habitsCmd = program.command("habits").description("Behavioral habits - practice tracking and compliance");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
addLoreReview,
|
|
4
|
+
deleteLoreEntry,
|
|
5
|
+
loadLoreEntries,
|
|
6
|
+
loadLoreEntry,
|
|
7
|
+
loadLoreTimeline,
|
|
8
|
+
rebuildTimeline,
|
|
9
|
+
recordLoreEntry,
|
|
10
|
+
updateLoreEntry
|
|
11
|
+
} from "./chunk-3DYYXGDC.js";
|
|
12
|
+
export {
|
|
13
|
+
addLoreReview,
|
|
14
|
+
deleteLoreEntry,
|
|
15
|
+
loadLoreEntries,
|
|
16
|
+
loadLoreEntry,
|
|
17
|
+
loadLoreTimeline,
|
|
18
|
+
rebuildTimeline,
|
|
19
|
+
recordLoreEntry,
|
|
20
|
+
updateLoreEntry
|
|
21
|
+
};
|
|
@@ -70,7 +70,7 @@ function createLoreRouter(projectDir) {
|
|
|
70
70
|
const router = Router();
|
|
71
71
|
router.get("/", (req, res) => {
|
|
72
72
|
let entries = loadAllEntries(projectDir);
|
|
73
|
-
const { author, authorType, hasAgent, symbol, type, from, to, tags, hasReview, limit, offset } = req.query;
|
|
73
|
+
const { author, authorType, hasAgent, symbol, type, tag, from, to, tags, hasReview, hasBody, limit, offset } = req.query;
|
|
74
74
|
if (author) {
|
|
75
75
|
entries = entries.filter((e) => e.author === author);
|
|
76
76
|
}
|
|
@@ -91,6 +91,17 @@ function createLoreRouter(projectDir) {
|
|
|
91
91
|
if (type) {
|
|
92
92
|
entries = entries.filter((e) => e.type === type);
|
|
93
93
|
}
|
|
94
|
+
if (tag) {
|
|
95
|
+
const prefix = tag;
|
|
96
|
+
entries = entries.filter(
|
|
97
|
+
(e) => e.tags?.some((t) => t === prefix || t.startsWith(prefix + ":") || prefix.includes(":") && t === prefix)
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
if (hasBody === "true") {
|
|
101
|
+
entries = entries.filter((e) => e.body != null && e.body.length > 0);
|
|
102
|
+
} else if (hasBody === "false") {
|
|
103
|
+
entries = entries.filter((e) => !e.body || e.body.length === 0);
|
|
104
|
+
}
|
|
94
105
|
if (from) {
|
|
95
106
|
const fromDate = new Date(from).getTime();
|
|
96
107
|
entries = entries.filter((e) => new Date(e.timestamp).getTime() >= fromDate);
|
|
@@ -146,6 +157,19 @@ function createLoreRouter(projectDir) {
|
|
|
146
157
|
const symbols = Object.entries(symbolCounts).map(([symbol, count]) => ({ symbol, count })).sort((a, b) => b.count - a.count);
|
|
147
158
|
res.json({ symbols });
|
|
148
159
|
});
|
|
160
|
+
router.get("/tags", (_req, res) => {
|
|
161
|
+
const entries = loadAllEntries(projectDir);
|
|
162
|
+
const tagCounts = {};
|
|
163
|
+
for (const entry of entries) {
|
|
164
|
+
if (entry.tags) {
|
|
165
|
+
for (const tag of entry.tags) {
|
|
166
|
+
tagCounts[tag] = (tagCounts[tag] || 0) + 1;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const tags = Object.entries(tagCounts).map(([tag, count]) => ({ tag, count })).sort((a, b) => b.count - a.count);
|
|
171
|
+
res.json({ tags });
|
|
172
|
+
});
|
|
149
173
|
router.get("/authors", (_req, res) => {
|
|
150
174
|
const entries = loadAllEntries(projectDir);
|
|
151
175
|
const authorMap = {};
|