iaip-mcp-pde 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +187 -0
  2. package/dist/cli.d.ts +18 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +385 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +15 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +34 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/mcp-server.d.ts +59 -0
  11. package/dist/mcp-server.d.ts.map +1 -0
  12. package/dist/mcp-server.js +293 -0
  13. package/dist/mcp-server.js.map +1 -0
  14. package/dist/parser.d.ts +19 -0
  15. package/dist/parser.d.ts.map +1 -0
  16. package/dist/parser.js +89 -0
  17. package/dist/parser.js.map +1 -0
  18. package/dist/pde-engine.d.ts +54 -0
  19. package/dist/pde-engine.d.ts.map +1 -0
  20. package/dist/pde-engine.js +85 -0
  21. package/dist/pde-engine.js.map +1 -0
  22. package/dist/prompts.d.ts +10 -0
  23. package/dist/prompts.d.ts.map +1 -0
  24. package/dist/prompts.js +93 -0
  25. package/dist/prompts.js.map +1 -0
  26. package/dist/storage.d.ts +44 -0
  27. package/dist/storage.d.ts.map +1 -0
  28. package/dist/storage.js +369 -0
  29. package/dist/storage.js.map +1 -0
  30. package/dist/types.d.ts +108 -0
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/types.js +24 -0
  33. package/dist/types.js.map +1 -0
  34. package/package.json +63 -0
  35. package/rispecs/pde-data-models.rispec.md +182 -0
  36. package/rispecs/pde-overview.rispec.md +157 -0
  37. package/rispecs/pde-parent-child-schema.rispec.md +525 -0
  38. package/rispecs/pde-prompts.rispec.md +144 -0
  39. package/rispecs/pde-resources.rispec.md +101 -0
  40. package/rispecs/pde-tools.rispec.md +179 -0
  41. package/rispecs/relation-to-mcp-structural-thinking.kin.md +66 -0
  42. package/scenarios/01-simple-decomposition.md +88 -0
  43. package/scenarios/02-multi-intent-workflow.md +112 -0
  44. package/scenarios/03-ceremonial-alignment.md +155 -0
  45. package/scenarios/04-dependency-resolution.md +163 -0
  46. package/scenarios/05-checkpoint-recovery.md +171 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * PDE Engine v2
4
+ *
5
+ * LLM-driven Prompt Decomposition Engine.
6
+ * Uses system prompts (from IAIP/lib/pde lineage) to instruct an LLM to produce
7
+ * structured DecompositionResult JSON, then parses and stores the result.
8
+ *
9
+ * The LLM call itself is NOT embedded here — the MCP tool receives the prompt,
10
+ * builds the system prompt, and the calling agent (Copilot, Gemini, mia-code)
11
+ * feeds it to their LLM. The engine then parses the LLM response.
12
+ *
13
+ * For direct decomposition without external LLM, use decomposeWithResponse()
14
+ * after getting the LLM response yourself.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.PDEParseError = exports.PdeEngine = void 0;
18
+ const uuid_1 = require("uuid");
19
+ const types_js_1 = require("./types.js");
20
+ const prompts_js_1 = require("./prompts.js");
21
+ const parser_js_1 = require("./parser.js");
22
+ Object.defineProperty(exports, "PDEParseError", { enumerable: true, get: function () { return parser_js_1.PDEParseError; } });
23
+ const storage_js_1 = require("./storage.js");
24
+ class PdeEngine {
25
+ defaultWorkdir;
26
+ constructor(workdir) {
27
+ this.defaultWorkdir = workdir || process.cwd();
28
+ }
29
+ /**
30
+ * Build the system prompt + user message for the calling LLM.
31
+ * The caller sends these to their LLM provider, then calls parseAndStore() with the response.
32
+ */
33
+ buildPrompt(prompt, options) {
34
+ const opts = { ...types_js_1.DEFAULT_OPTIONS, ...options };
35
+ return {
36
+ systemPrompt: (0, prompts_js_1.buildSystemPrompt)(opts),
37
+ userMessage: (0, prompts_js_1.formatUserMessage)(prompt),
38
+ };
39
+ }
40
+ /**
41
+ * Parse an LLM response text into DecompositionResult and persist it.
42
+ */
43
+ parseAndStore(llmResponse, originalPrompt, options, workdir, parentPdeId) {
44
+ const opts = { ...types_js_1.DEFAULT_OPTIONS, ...options };
45
+ const result = (0, parser_js_1.parseDecompositionResponse)(llmResponse);
46
+ const id = (0, uuid_1.v4)();
47
+ const dir = workdir || this.defaultWorkdir;
48
+ return (0, storage_js_1.saveDecomposition)(dir, id, originalPrompt, result, opts, parentPdeId);
49
+ }
50
+ /**
51
+ * Parse an LLM response text into DecompositionResult without storing.
52
+ */
53
+ parse(llmResponse) {
54
+ return (0, parser_js_1.parseDecompositionResponse)(llmResponse);
55
+ }
56
+ /**
57
+ * Get a stored decomposition by ID.
58
+ */
59
+ get(id, workdir) {
60
+ return (0, storage_js_1.loadDecomposition)(workdir || this.defaultWorkdir, id);
61
+ }
62
+ /**
63
+ * List stored decompositions.
64
+ */
65
+ list(workdir, limit) {
66
+ return (0, storage_js_1.listDecompositions)(workdir || this.defaultWorkdir, limit);
67
+ }
68
+ /**
69
+ * List children of a specific parent PDE.
70
+ */
71
+ listChildren(parentId, workdir) {
72
+ return (0, storage_js_1.listChildren)(workdir || this.defaultWorkdir, parentId);
73
+ }
74
+ /**
75
+ * Export a decomposition to markdown.
76
+ */
77
+ exportMarkdown(id, workdir) {
78
+ const stored = this.get(id, workdir);
79
+ if (!stored)
80
+ return null;
81
+ return (0, storage_js_1.decompositionToMarkdown)(stored.result, stored.prompt, stored.parent_pde_id);
82
+ }
83
+ }
84
+ exports.PdeEngine = PdeEngine;
85
+ //# sourceMappingURL=pde-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pde-engine.js","sourceRoot":"","sources":["../src/pde-engine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,+BAAoC;AACpC,yCAKoB;AACpB,6CAAoE;AACpE,2CAAwE;AAgF/D,8FAhF4B,yBAAa,OAgF5B;AA/EtB,6CAA+H;AAE/H,MAAa,SAAS;IACZ,cAAc,CAAS;IAE/B,YAAY,OAAgB;QAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,WAAW,CACT,MAAc,EACd,OAAuC;QAEvC,MAAM,IAAI,GAAyB,EAAE,GAAG,0BAAe,EAAE,GAAG,OAAO,EAAE,CAAC;QACtE,OAAO;YACL,YAAY,EAAE,IAAA,8BAAiB,EAAC,IAAI,CAAC;YACrC,WAAW,EAAE,IAAA,8BAAiB,EAAC,MAAM,CAAC;SACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa,CACX,WAAmB,EACnB,cAAsB,EACtB,OAAuC,EACvC,OAAgB,EAChB,WAAoB;QAEpB,MAAM,IAAI,GAAyB,EAAE,GAAG,0BAAe,EAAE,GAAG,OAAO,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,IAAA,sCAA0B,EAAC,WAAW,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;QACpB,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC;QAC3C,OAAO,IAAA,8BAAiB,EAAC,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAmB;QACvB,OAAO,IAAA,sCAA0B,EAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU,EAAE,OAAgB;QAC9B,OAAO,IAAA,8BAAiB,EAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAgB,EAAE,KAAc;QACnC,OAAO,IAAA,+BAAkB,EAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB,EAAE,OAAgB;QAC7C,OAAO,IAAA,yBAAY,EAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,EAAU,EAAE,OAAgB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,IAAA,oCAAuB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACrF,CAAC;CACF;AA3ED,8BA2EC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * PDE Prompts - System Prompt Builder for LLM-driven decomposition
3
+ *
4
+ * Lineage: IAIP/lib/pde/prompts.ts → mcp-pde/src/prompts.ts
5
+ * Constructs the system prompt that instructs the LLM to produce DecompositionResult JSON.
6
+ */
7
+ import type { DecompositionOptions } from "./types.js";
8
+ export declare function buildSystemPrompt(options: DecompositionOptions): string;
9
+ export declare function formatUserMessage(prompt: string): string;
10
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAgDvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAoCvE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * PDE Prompts - System Prompt Builder for LLM-driven decomposition
4
+ *
5
+ * Lineage: IAIP/lib/pde/prompts.ts → mcp-pde/src/prompts.ts
6
+ * Constructs the system prompt that instructs the LLM to produce DecompositionResult JSON.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.buildSystemPrompt = buildSystemPrompt;
10
+ exports.formatUserMessage = formatUserMessage;
11
+ const JSON_SCHEMA_EXAMPLE = `{
12
+ "primary": {
13
+ "action": "main action verb",
14
+ "target": "what the action applies to",
15
+ "urgency": "immediate|session|persistent",
16
+ "confidence": 0.0-1.0
17
+ },
18
+ "secondary": [
19
+ {
20
+ "action": "action verb",
21
+ "target": "target",
22
+ "implicit": true/false,
23
+ "dependency": "what this depends on or null",
24
+ "confidence": 0.0-1.0
25
+ }
26
+ ],
27
+ "context": {
28
+ "files_needed": ["list of files"],
29
+ "tools_required": ["list of tools"],
30
+ "assumptions": ["list of assumptions found in prompt"]
31
+ },
32
+ "outputs": {
33
+ "artifacts": ["new files to create"],
34
+ "updates": ["existing files to update"],
35
+ "communications": ["PRs, issues, docs to create"]
36
+ },
37
+ "directions": {
38
+ "east": [{"text": "vision items", "confidence": 0.0-1.0, "implicit": false}],
39
+ "south": [{"text": "analysis items", "confidence": 0.0-1.0, "implicit": false}],
40
+ "west": [{"text": "validation items", "confidence": 0.0-1.0, "implicit": false}],
41
+ "north": [{"text": "action items", "confidence": 0.0-1.0, "implicit": false}]
42
+ },
43
+ "actionStack": [
44
+ {"text": "task description", "direction": "east|south|west|north", "dependency": "or null", "completed": false}
45
+ ],
46
+ "ambiguities": [
47
+ {"text": "ambiguous part", "suggestion": "how to clarify"}
48
+ ]
49
+ }`;
50
+ const DIRECTIONS_LEGEND = `Directions mapping (Medicine Wheel / Four Directions):
51
+ - EAST (🌅 Vision): Understanding what is being asked, clarifying requirements, envisioning desired outcomes
52
+ - SOUTH (🔥 Analysis): Research, learning, investigation, growth tasks
53
+ - WEST (🌊 Validation): Testing, reflection, review, accountability tasks
54
+ - NORTH (❄️ Action): Implementation, execution, delivery, wisdom tasks`;
55
+ function buildSystemPrompt(options) {
56
+ const implicitRule = options.extractImplicit
57
+ ? 'Extract implicit intents from phrases like "which I assume", "you will need", "somehow", "I expect", "probably", "should". Mark them with "implicit": true.'
58
+ : "Only extract explicit intents. Set implicit to false for all.";
59
+ const dependencyRule = options.mapDependencies
60
+ ? "Map dependencies between actions - which tasks must complete before others can start. Use the dependency field in secondary intents and actionStack."
61
+ : "Do not map dependencies. Set all dependency fields to null.";
62
+ return `You are a Prompt Decomposition Engine (PDE).
63
+
64
+ CRITICAL: Your response must be ONLY a valid JSON object. Do not include:
65
+ - Markdown code fences (no \`\`\`json)
66
+ - Explanatory text before or after the JSON
67
+ - Any commentary or notes
68
+
69
+ Just output the raw JSON object starting with { and ending with }.
70
+
71
+ Analyze the user's prompt and output with this exact structure:
72
+
73
+ ${JSON_SCHEMA_EXAMPLE}
74
+
75
+ ${DIRECTIONS_LEGEND}
76
+
77
+ ${implicitRule}
78
+ ${dependencyRule}
79
+
80
+ Rules:
81
+ - Assign confidence scores (0.0-1.0) based on how clearly the intent is stated.
82
+ - Flag ambiguities where the prompt is vague, uses "somehow", "probably", "maybe", or leaves storage/method unspecified.
83
+ - Generate actionStack as an ordered list respecting dependencies, with each item mapped to a direction.
84
+ - For secondary intents, distinguish explicit (stated directly) from implicit (inferred from context, hedging language, assumptions).
85
+ - The primary intent is the single most important action. Everything else goes in secondary.
86
+ - context.assumptions should capture statements the user makes that are assumed true but not verified.
87
+
88
+ REMEMBER: Output ONLY the JSON object, nothing else.`;
89
+ }
90
+ function formatUserMessage(prompt) {
91
+ return `Prompt to decompose:\n"${prompt}"`;
92
+ }
93
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkDH,8CAoCC;AAED,8CAEC;AAtFD,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsC1B,CAAC;AAEH,MAAM,iBAAiB,GAAG;;;;uEAI6C,CAAC;AAExE,SAAgB,iBAAiB,CAAC,OAA6B;IAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe;QAC1C,CAAC,CAAC,6JAA6J;QAC/J,CAAC,CAAC,+DAA+D,CAAC;IAEpE,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe;QAC5C,CAAC,CAAC,sJAAsJ;QACxJ,CAAC,CAAC,6DAA6D,CAAC;IAElE,OAAO;;;;;;;;;;;EAWP,mBAAmB;;EAEnB,iBAAiB;;EAEjB,YAAY;EACZ,cAAc;;;;;;;;;;qDAUqC,CAAC;AACtD,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,0BAA0B,MAAM,GAAG,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * PDE Storage - .pde/ dot folder persistence
3
+ *
4
+ * Stores decompositions as JSON + Markdown in .pde/ directory.
5
+ *
6
+ * New folder-based layout (v2.1):
7
+ * .pde/
8
+ * <yyMMddHHmm>--<uuid>/
9
+ * pde-<uuid>.json - StoredDecomposition (full JSON)
10
+ * pde-<uuid>.md - Markdown export (human-editable, git-diffable)
11
+ * <child-timestamp>--<child-uuid>/ - nested children
12
+ * pde-<child-uuid>.json
13
+ * pde-<child-uuid>.md
14
+ *
15
+ * Legacy flat layout (still readable):
16
+ * .pde/
17
+ * <id>.json
18
+ * <id>.md
19
+ */
20
+ import type { DecompositionResult, DecompositionOptions, StoredDecomposition } from "./types.js";
21
+ /**
22
+ * Save a decomposition to .pde/ as JSON + Markdown using folder-based layout.
23
+ */
24
+ export declare function saveDecomposition(workdir: string, id: string, prompt: string, result: DecompositionResult, options: DecompositionOptions, parentPdeId?: string): StoredDecomposition;
25
+ /**
26
+ * Load a decomposition from .pde/ by ID.
27
+ * Checks both new folder-based layout and legacy flat format.
28
+ */
29
+ export declare function loadDecomposition(workdir: string, id: string): StoredDecomposition | null;
30
+ /**
31
+ * List all decompositions in .pde/ (flat list regardless of nesting).
32
+ */
33
+ export declare function listDecompositions(workdir: string, limit?: number): StoredDecomposition[];
34
+ /**
35
+ * List children of a specific parent PDE.
36
+ */
37
+ export declare function listChildren(workdir: string, parentId: string): StoredDecomposition[];
38
+ /**
39
+ * Convert a DecompositionResult to a git-diffable Markdown document.
40
+ * IAIP canonical format: Four Directions as first section after title,
41
+ * centering relational/directional knowing before reductive intent extraction.
42
+ */
43
+ export declare function decompositionToMarkdown(result: DecompositionResult, prompt?: string, parentPdeId?: string): string;
44
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAwDpB;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,oBAAoB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,mBAAmB,CA+CrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAqBzF;AAoCD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAoBzF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAqCrF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CA0HlH"}
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ /**
3
+ * PDE Storage - .pde/ dot folder persistence
4
+ *
5
+ * Stores decompositions as JSON + Markdown in .pde/ directory.
6
+ *
7
+ * New folder-based layout (v2.1):
8
+ * .pde/
9
+ * <yyMMddHHmm>--<uuid>/
10
+ * pde-<uuid>.json - StoredDecomposition (full JSON)
11
+ * pde-<uuid>.md - Markdown export (human-editable, git-diffable)
12
+ * <child-timestamp>--<child-uuid>/ - nested children
13
+ * pde-<child-uuid>.json
14
+ * pde-<child-uuid>.md
15
+ *
16
+ * Legacy flat layout (still readable):
17
+ * .pde/
18
+ * <id>.json
19
+ * <id>.md
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.saveDecomposition = saveDecomposition;
23
+ exports.loadDecomposition = loadDecomposition;
24
+ exports.listDecompositions = listDecompositions;
25
+ exports.listChildren = listChildren;
26
+ exports.decompositionToMarkdown = decompositionToMarkdown;
27
+ const fs_1 = require("fs");
28
+ const path_1 = require("path");
29
+ const types_js_1 = require("./types.js");
30
+ const parser_js_1 = require("./parser.js");
31
+ const PDE_DIR = ".pde";
32
+ function ensureDir(dirPath) {
33
+ if (!(0, fs_1.existsSync)(dirPath))
34
+ (0, fs_1.mkdirSync)(dirPath, { recursive: true });
35
+ }
36
+ /** Generate timestamp in yyMMddHHmm format */
37
+ function generateTimestamp() {
38
+ const now = new Date();
39
+ const yy = String(now.getFullYear()).slice(2);
40
+ const MM = String(now.getMonth() + 1).padStart(2, "0");
41
+ const dd = String(now.getDate()).padStart(2, "0");
42
+ const HH = String(now.getHours()).padStart(2, "0");
43
+ const mm = String(now.getMinutes()).padStart(2, "0");
44
+ return `${yy}${MM}${dd}${HH}${mm}`;
45
+ }
46
+ /**
47
+ * Find a PDE folder by UUID, searching recursively within .pde/.
48
+ * Returns the folder path containing the PDE files, or null.
49
+ */
50
+ function findFolderByUuid(pdeRoot, uuid) {
51
+ if (!(0, fs_1.existsSync)(pdeRoot))
52
+ return null;
53
+ // Search for folder ending with --<uuid>
54
+ const suffix = `--${uuid}`;
55
+ function searchDir(dir) {
56
+ let entries;
57
+ try {
58
+ entries = (0, fs_1.readdirSync)(dir);
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ for (const entry of entries) {
64
+ const fullPath = (0, path_1.join)(dir, entry);
65
+ try {
66
+ if (!(0, fs_1.statSync)(fullPath).isDirectory())
67
+ continue;
68
+ }
69
+ catch {
70
+ continue;
71
+ }
72
+ if (entry.endsWith(suffix))
73
+ return fullPath;
74
+ // Recurse into subdirectories (parent folders may contain children)
75
+ const found = searchDir(fullPath);
76
+ if (found)
77
+ return found;
78
+ }
79
+ return null;
80
+ }
81
+ return searchDir(pdeRoot);
82
+ }
83
+ /**
84
+ * Save a decomposition to .pde/ as JSON + Markdown using folder-based layout.
85
+ */
86
+ function saveDecomposition(workdir, id, prompt, result, options, parentPdeId) {
87
+ const pdeRoot = (0, path_1.join)(workdir, PDE_DIR);
88
+ ensureDir(pdeRoot);
89
+ const ts = generateTimestamp();
90
+ const folderName = `${ts}--${id}`;
91
+ let targetDir;
92
+ if (parentPdeId) {
93
+ // Find parent folder and nest inside it
94
+ const parentFolder = findFolderByUuid(pdeRoot, parentPdeId);
95
+ if (parentFolder) {
96
+ targetDir = (0, path_1.join)(parentFolder, folderName);
97
+ }
98
+ else {
99
+ // Parent not found — store at top level (graceful fallback)
100
+ targetDir = (0, path_1.join)(pdeRoot, folderName);
101
+ }
102
+ }
103
+ else {
104
+ targetDir = (0, path_1.join)(pdeRoot, folderName);
105
+ }
106
+ ensureDir(targetDir);
107
+ const stored = {
108
+ id,
109
+ timestamp: new Date().toISOString(),
110
+ prompt,
111
+ result,
112
+ options,
113
+ folder_name: folderName,
114
+ };
115
+ if (parentPdeId) {
116
+ stored.parent_pde_id = parentPdeId;
117
+ }
118
+ // Save JSON
119
+ const jsonPath = (0, path_1.join)(targetDir, `pde-${id}.json`);
120
+ (0, fs_1.writeFileSync)(jsonPath, JSON.stringify(stored, null, 2), "utf-8");
121
+ // Save Markdown
122
+ const mdPath = (0, path_1.join)(targetDir, `pde-${id}.md`);
123
+ const md = decompositionToMarkdown(result, prompt, parentPdeId);
124
+ (0, fs_1.writeFileSync)(mdPath, md, "utf-8");
125
+ stored.markdownPath = mdPath;
126
+ return stored;
127
+ }
128
+ /**
129
+ * Load a decomposition from .pde/ by ID.
130
+ * Checks both new folder-based layout and legacy flat format.
131
+ */
132
+ function loadDecomposition(workdir, id) {
133
+ const pdeRoot = (0, path_1.join)(workdir, PDE_DIR);
134
+ // 1. Try new folder-based format: .pde/*--<uuid>/pde-<uuid>.json (recursive)
135
+ const folder = findFolderByUuid(pdeRoot, id);
136
+ if (folder) {
137
+ const jsonPath = (0, path_1.join)(folder, `pde-${id}.json`);
138
+ if ((0, fs_1.existsSync)(jsonPath)) {
139
+ const raw = (0, fs_1.readFileSync)(jsonPath, "utf-8");
140
+ return JSON.parse(raw);
141
+ }
142
+ }
143
+ // 2. Try legacy flat format: .pde/<id>.json
144
+ const legacyPath = (0, path_1.join)(pdeRoot, `${id}.json`);
145
+ if ((0, fs_1.existsSync)(legacyPath)) {
146
+ const raw = (0, fs_1.readFileSync)(legacyPath, "utf-8");
147
+ return JSON.parse(raw);
148
+ }
149
+ return null;
150
+ }
151
+ /**
152
+ * Recursively collect all PDE JSON files from a directory.
153
+ */
154
+ function collectPdeFiles(dir) {
155
+ const results = [];
156
+ if (!(0, fs_1.existsSync)(dir))
157
+ return results;
158
+ let entries;
159
+ try {
160
+ entries = (0, fs_1.readdirSync)(dir);
161
+ }
162
+ catch {
163
+ return results;
164
+ }
165
+ for (const entry of entries) {
166
+ const fullPath = (0, path_1.join)(dir, entry);
167
+ try {
168
+ const stat = (0, fs_1.statSync)(fullPath);
169
+ if (stat.isFile() && entry.endsWith(".json")) {
170
+ // Match both pde-<uuid>.json (new) and <uuid>.json (legacy)
171
+ if (entry.startsWith("pde-") || !entry.startsWith(".")) {
172
+ results.push(fullPath);
173
+ }
174
+ }
175
+ else if (stat.isDirectory() && !entry.startsWith(".")) {
176
+ results.push(...collectPdeFiles(fullPath));
177
+ }
178
+ }
179
+ catch {
180
+ continue;
181
+ }
182
+ }
183
+ return results;
184
+ }
185
+ /**
186
+ * List all decompositions in .pde/ (flat list regardless of nesting).
187
+ */
188
+ function listDecompositions(workdir, limit) {
189
+ const pdeRoot = (0, path_1.join)(workdir, PDE_DIR);
190
+ if (!(0, fs_1.existsSync)(pdeRoot))
191
+ return [];
192
+ const jsonFiles = collectPdeFiles(pdeRoot);
193
+ const items = [];
194
+ for (const filePath of jsonFiles) {
195
+ try {
196
+ const raw = (0, fs_1.readFileSync)(filePath, "utf-8");
197
+ items.push(JSON.parse(raw));
198
+ }
199
+ catch {
200
+ // Skip malformed files
201
+ }
202
+ }
203
+ // Sort by timestamp descending
204
+ items.sort((a, b) => (b.timestamp || "").localeCompare(a.timestamp || ""));
205
+ return limit ? items.slice(0, limit) : items;
206
+ }
207
+ /**
208
+ * List children of a specific parent PDE.
209
+ */
210
+ function listChildren(workdir, parentId) {
211
+ const pdeRoot = (0, path_1.join)(workdir, PDE_DIR);
212
+ const parentFolder = findFolderByUuid(pdeRoot, parentId);
213
+ if (!parentFolder)
214
+ return [];
215
+ const children = [];
216
+ let entries;
217
+ try {
218
+ entries = (0, fs_1.readdirSync)(parentFolder);
219
+ }
220
+ catch {
221
+ return [];
222
+ }
223
+ for (const entry of entries) {
224
+ const childDir = (0, path_1.join)(parentFolder, entry);
225
+ try {
226
+ if (!(0, fs_1.statSync)(childDir).isDirectory())
227
+ continue;
228
+ }
229
+ catch {
230
+ continue;
231
+ }
232
+ // Look for pde-*.json inside the child folder
233
+ const childFiles = collectPdeFiles(childDir);
234
+ for (const filePath of childFiles) {
235
+ try {
236
+ const raw = (0, fs_1.readFileSync)(filePath, "utf-8");
237
+ const stored = JSON.parse(raw);
238
+ if (stored.parent_pde_id === parentId) {
239
+ children.push(stored);
240
+ }
241
+ }
242
+ catch {
243
+ continue;
244
+ }
245
+ }
246
+ }
247
+ children.sort((a, b) => (b.timestamp || "").localeCompare(a.timestamp || ""));
248
+ return children;
249
+ }
250
+ /**
251
+ * Convert a DecompositionResult to a git-diffable Markdown document.
252
+ * IAIP canonical format: Four Directions as first section after title,
253
+ * centering relational/directional knowing before reductive intent extraction.
254
+ */
255
+ function decompositionToMarkdown(result, prompt, parentPdeId) {
256
+ const lines = [];
257
+ lines.push("# Prompt Decomposition");
258
+ lines.push("");
259
+ // Parent reference (when present)
260
+ if (parentPdeId) {
261
+ lines.push(`**Parent PDE:** \`${parentPdeId}\``);
262
+ lines.push("");
263
+ }
264
+ // Four Directions (IAIP canonical: first section — relational knowing before intent)
265
+ lines.push("## Four Directions");
266
+ lines.push("");
267
+ for (const dir of types_js_1.DIRECTIONS) {
268
+ const meta = types_js_1.DIRECTION_META[dir];
269
+ const items = result.directions[dir];
270
+ if (items.length === 0)
271
+ continue;
272
+ const subtitle = meta.name.charAt(0) + meta.name.slice(1).toLowerCase();
273
+ lines.push(`### ${meta.emoji} ${dir.toUpperCase()} — ${subtitle}`);
274
+ lines.push("");
275
+ for (const item of items) {
276
+ const tag = item.implicit ? " _(implicit)_" : "";
277
+ lines.push(`- ${item.text} [${Math.round(item.confidence * 100)}%]${tag}`);
278
+ }
279
+ lines.push("");
280
+ }
281
+ // Original prompt (if provided)
282
+ if (prompt) {
283
+ lines.push("## Original Prompt");
284
+ lines.push("");
285
+ lines.push(`> ${prompt.replace(/\n/g, "\n> ")}`);
286
+ lines.push("");
287
+ }
288
+ // Primary Intent
289
+ lines.push("## Primary Intent");
290
+ lines.push("");
291
+ lines.push(`**Action:** ${result.primary.action}`);
292
+ lines.push(`**Target:** ${result.primary.target}`);
293
+ lines.push(`**Urgency:** ${result.primary.urgency}`);
294
+ lines.push(`**Confidence:** ${Math.round(result.primary.confidence * 100)}%`);
295
+ lines.push("");
296
+ // Secondary Intents
297
+ if (result.secondary.length > 0) {
298
+ lines.push("## Secondary Intents");
299
+ lines.push("");
300
+ for (let i = 0; i < result.secondary.length; i++) {
301
+ const s = result.secondary[i];
302
+ lines.push(`${i + 1}. **${s.action}** — ${s.target} _(${s.implicit ? "implicit" : "explicit"})_`);
303
+ if (s.dependency)
304
+ lines.push(` - depends on: ${s.dependency}`);
305
+ }
306
+ lines.push("");
307
+ }
308
+ // Context Requirements
309
+ const ctx = result.context;
310
+ if (ctx.files_needed.length || ctx.tools_required.length || ctx.assumptions.length) {
311
+ lines.push("## Context Requirements");
312
+ lines.push("");
313
+ if (ctx.files_needed.length) {
314
+ lines.push("### Files Needed");
315
+ ctx.files_needed.forEach((f) => lines.push(`- ${f}`));
316
+ lines.push("");
317
+ }
318
+ if (ctx.tools_required.length) {
319
+ lines.push("### Tools Required");
320
+ ctx.tools_required.forEach((t) => lines.push(`- ${t}`));
321
+ lines.push("");
322
+ }
323
+ if (ctx.assumptions.length) {
324
+ lines.push("### Assumptions");
325
+ ctx.assumptions.forEach((a) => lines.push(`- ${a}`));
326
+ lines.push("");
327
+ }
328
+ }
329
+ // Expected Outputs (IAIP canonical: before Action Stack)
330
+ const out = result.outputs;
331
+ if (out.artifacts.length || out.updates.length || out.communications.length) {
332
+ lines.push("## Expected Outputs");
333
+ lines.push("");
334
+ if (out.artifacts.length) {
335
+ lines.push("### Artifacts");
336
+ out.artifacts.forEach((a) => lines.push(`- ${a}`));
337
+ lines.push("");
338
+ }
339
+ if (out.updates.length) {
340
+ lines.push("### Updates");
341
+ out.updates.forEach((u) => lines.push(`- ${u}`));
342
+ lines.push("");
343
+ }
344
+ if (out.communications.length) {
345
+ lines.push("### Communications");
346
+ out.communications.forEach((c) => lines.push(`- ${c}`));
347
+ lines.push("");
348
+ }
349
+ }
350
+ // Action Stack
351
+ if (result.actionStack.length > 0) {
352
+ lines.push("## Action Stack");
353
+ lines.push("");
354
+ lines.push((0, parser_js_1.actionStackToMarkdown)(result.actionStack));
355
+ lines.push("");
356
+ }
357
+ // Ambiguity Flags
358
+ if (result.ambiguities.length > 0) {
359
+ lines.push("## Ambiguity Flags");
360
+ lines.push("");
361
+ for (const a of result.ambiguities) {
362
+ lines.push(`- **"${a.text}"**`);
363
+ lines.push(` - Suggestion: ${a.suggestion}`);
364
+ }
365
+ lines.push("");
366
+ }
367
+ return lines.join("\n");
368
+ }
369
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}