project-iris 0.0.11 → 0.0.13

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 (40) hide show
  1. package/README.md +84 -360
  2. package/dist/cli.js +4 -2
  3. package/dist/commands/create.js +25 -0
  4. package/dist/iris/bundle.js +1 -1
  5. package/dist/iris_bundle/frameworks/iris-core/framework.yaml +9 -0
  6. package/dist/iris_bundle/frameworks/iris-core/memory/memory-bank.yaml +1 -0
  7. package/dist/iris_bundle/frameworks/iris-core/policy.yaml +7 -0
  8. package/dist/iris_bundle/frameworks/iris-core/templates/config/memory-bank.yaml +1 -0
  9. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-template.md +226 -0
  10. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/ddd-construction-bolt/adr-template.md +49 -0
  11. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/ddd-construction-bolt/ddd-01-domain-model-template.md +55 -0
  12. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/ddd-construction-bolt/ddd-02-technical-design-template.md +67 -0
  13. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/ddd-construction-bolt/ddd-03-test-report-template.md +62 -0
  14. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/ddd-construction-bolt.md +528 -0
  15. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/simple-construction-bolt.md +347 -0
  16. package/dist/iris_bundle/frameworks/iris-core/templates/construction/bolt-types/spike-bolt.md +240 -0
  17. package/dist/iris_bundle/frameworks/iris-core/templates/inception/requirements-template.md +144 -0
  18. package/dist/iris_bundle/frameworks/iris-core/templates/inception/stories-template.md +38 -0
  19. package/dist/iris_bundle/frameworks/iris-core/templates/inception/story-template.md +147 -0
  20. package/dist/iris_bundle/frameworks/iris-core/templates/inception/system-context-template.md +29 -0
  21. package/dist/iris_bundle/frameworks/iris-core/templates/inception/unit-brief-template.md +177 -0
  22. package/dist/iris_bundle/frameworks/iris-core/templates/inception/units-template.md +52 -0
  23. package/dist/templates/construction/bolt-template.md +226 -0
  24. package/dist/templates/construction/bolt-types/ddd-construction-bolt/adr-template.md +49 -0
  25. package/dist/templates/construction/bolt-types/ddd-construction-bolt/ddd-01-domain-model-template.md +55 -0
  26. package/dist/templates/construction/bolt-types/ddd-construction-bolt/ddd-02-technical-design-template.md +67 -0
  27. package/dist/templates/construction/bolt-types/ddd-construction-bolt/ddd-03-test-report-template.md +62 -0
  28. package/dist/templates/construction/bolt-types/ddd-construction-bolt.md +528 -0
  29. package/dist/templates/construction/bolt-types/simple-construction-bolt.md +347 -0
  30. package/dist/templates/construction/bolt-types/spike-bolt.md +240 -0
  31. package/dist/templates/inception/requirements-template.md +144 -0
  32. package/dist/templates/inception/stories-template.md +38 -0
  33. package/dist/templates/inception/story-template.md +147 -0
  34. package/dist/templates/inception/system-context-template.md +29 -0
  35. package/dist/templates/inception/unit-brief-template.md +177 -0
  36. package/dist/templates/inception/units-template.md +52 -0
  37. package/dist/workflows/bolt-plan.js +57 -28
  38. package/dist/workflows/intent-inception.js +82 -7
  39. package/dist/workflows/memory-bank-generator.js +180 -0
  40. package/package.json +3 -2
@@ -0,0 +1,180 @@
1
+ import { randomUUID } from "crypto";
2
+ import { WorkflowStage } from "../bridge/types.js";
3
+ import path from "path";
4
+ import fs from "fs";
5
+ import { fileURLToPath } from "url";
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ /**
9
+ * Orchestrate the full memory bank structure generation
10
+ */
11
+ export async function generateMemoryBankStructure(options) {
12
+ const { intent, answers, connector } = options;
13
+ const intentSlug = intent.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
14
+ // Use a timestamp based ID for now or fetch next ID if available in context
15
+ const intentId = "001"; // Placeholder, would need state to know next ID
16
+ const intentPath = `memory-bank/intents/${intentId}-${intentSlug}`;
17
+ // Create base directory
18
+ fs.mkdirSync(intentPath, { recursive: true });
19
+ // Load templats
20
+ const templates = loadTemplates();
21
+ // 1. Generate Requirements & System Context (Batched to save prompt tokens/time)
22
+ console.log("-> Generating Requirements & Context...");
23
+ await generateInitialArtifacts(intent, intentId, intentSlug, answers, connector, templates);
24
+ // 2. Decompose into Units
25
+ console.log("-> Decomposing into Units...");
26
+ const units = await decomposeIntoUnits(intent, intentSlug, connector, templates);
27
+ // 3. Generate Unit Briefs & Stories
28
+ console.log(`-> Generating details for ${units.length} units...`);
29
+ for (const unit of units) {
30
+ console.log(` -> Processing Unit: ${unit.name}`);
31
+ // Create unit directory
32
+ const unitDir = path.join(intentPath, "units", unit.name);
33
+ fs.mkdirSync(unitDir, { recursive: true });
34
+ await generateUnitBrief(unit, intent, intentSlug, connector, templates);
35
+ const stories = await generateStoriesForUnit(unit, intent, connector, templates);
36
+ // Save stories
37
+ const storiesDir = path.join(unitDir, "stories");
38
+ fs.mkdirSync(storiesDir, { recursive: true });
39
+ // This would typically involve another AI pass to write content for each story
40
+ // For efficiency in this script we might batch or generate placeholders
41
+ // But the user requested "full automation", so we should ideally generate them.
42
+ // For V1, we will list them in the unit brief or stories.md and create stub files
43
+ }
44
+ // 4. Generate Bolt Plan & Bolts
45
+ console.log("-> Generating Bolt Plan...");
46
+ // This re-uses the logic we improved in bolt-plan.ts, essentially calling the agent
47
+ // We can construct a packet similar to bolt-plan instructions
48
+ await generateBolts(intent, intentSlug, units, connector);
49
+ }
50
+ function loadTemplates() {
51
+ const templateDir = path.join(__dirname, "../templates/inception");
52
+ return {
53
+ requirements: fs.readFileSync(path.join(templateDir, "requirements-template.md"), "utf-8"),
54
+ systemContext: fs.readFileSync(path.join(templateDir, "system-context-template.md"), "utf-8"),
55
+ units: fs.readFileSync(path.join(templateDir, "units-template.md"), "utf-8"),
56
+ unitBrief: fs.readFileSync(path.join(templateDir, "unit-brief-template.md"), "utf-8"),
57
+ story: fs.readFileSync(path.join(templateDir, "story-template.md"), "utf-8"),
58
+ stories: fs.readFileSync(path.join(templateDir, "stories-template.md"), "utf-8"),
59
+ };
60
+ }
61
+ async function generateInitialArtifacts(intent, intentId, slug, answers, connector, templates) {
62
+ const taskId = randomUUID();
63
+ const packet = {
64
+ taskId,
65
+ intent,
66
+ stage: WorkflowStage.INTENT_INCEPTION,
67
+ agent: "iris-inception-agent",
68
+ instructions: `Generate detailed requirements and system context for intent: "${intent}".
69
+
70
+ User Answers:
71
+ ${Object.entries(answers).map(([q, a]) => `Q: ${q}\nA: ${a}`).join("\n\n")}
72
+
73
+ Files to create in memory-bank/intents/${intentId}-${slug}/:
74
+ 1. requirements.md
75
+ 2. system-context.md
76
+
77
+ Use these templates EXACTLY:
78
+
79
+ --- TEMPLATE: requirements.md ---
80
+ ${templates.requirements}
81
+ --------------------------------
82
+
83
+ --- TEMPLATE: system-context.md ---
84
+ ${templates.systemContext}
85
+ ----------------------------------
86
+ `,
87
+ inputs: [],
88
+ expectedOutputs: [
89
+ `memory-bank/intents/${intentId}-${slug}/requirements.md`,
90
+ `memory-bank/intents/${intentId}-${slug}/system-context.md`
91
+ ],
92
+ metadata: { step: "initial_artifacts" }
93
+ };
94
+ const result = await connector.sendTask(packet);
95
+ const taskResult = await connector.waitResult(taskId);
96
+ if (taskResult.status === 'error')
97
+ throw new Error(taskResult.error || "Unknown error");
98
+ }
99
+ async function decomposeIntoUnits(intent, slug, connector, templates) {
100
+ const taskId = randomUUID();
101
+ const packet = {
102
+ taskId,
103
+ intent,
104
+ stage: WorkflowStage.INTENT_INCEPTION,
105
+ agent: "iris-inception-agent",
106
+ instructions: `Analyze the intent "${intent}" and decompose it into 3-8 logical units.
107
+
108
+ Return a JSON object with the units list.
109
+ Do NOT write files yet, just return the JSON analysis.
110
+
111
+ Format:
112
+ {
113
+ "units": [
114
+ {
115
+ "name": "001-unit-name",
116
+ "purpose": "Brief purpose",
117
+ "description": "Longer description"
118
+ }
119
+ ]
120
+ }
121
+ `,
122
+ inputs: [],
123
+ expectedOutputs: [], // We expect JSON in text response for this internal step
124
+ metadata: { step: "decompose_units" }
125
+ };
126
+ // In a real implementation we might want to have the agent write to a file or parse the output
127
+ // For this implementation, we'll assume the agent writes a 'units.json' or we'd parse the completion.
128
+ // Since our bridge is file-based in many cases, we can ask it to write memory-bank/intents/{slug}/units-analysis.json
129
+ // We will update instructions to write to a file we can read
130
+ packet.instructions += `\nWrite the JSON to memory-bank/intents/temp-units-analysis.json`;
131
+ packet.expectedOutputs = [`memory-bank/intents/temp-units-analysis.json`];
132
+ await connector.sendTask(packet);
133
+ const result = await connector.waitResult(taskId);
134
+ // Read the file
135
+ // Note: In a real app we'd handle paths more robustly
136
+ const analysisPath = path.resolve(process.cwd(), "memory-bank/intents/temp-units-analysis.json");
137
+ if (fs.existsSync(analysisPath)) {
138
+ try {
139
+ const data = JSON.parse(fs.readFileSync(analysisPath, 'utf8'));
140
+ return data.units || [];
141
+ }
142
+ catch (e) {
143
+ console.error("Failed to parse units analysis", e);
144
+ return [];
145
+ }
146
+ }
147
+ return [];
148
+ }
149
+ async function generateUnitBrief(unit, intent, intentSlug, connector, templates) {
150
+ const taskId = randomUUID();
151
+ const packet = {
152
+ taskId,
153
+ intent,
154
+ stage: WorkflowStage.INTENT_INCEPTION,
155
+ agent: "iris-inception-agent",
156
+ instructions: `Generate unit brief for unit: ${unit.name}
157
+
158
+ Intent: ${intent}
159
+ Unit Purpose: ${unit.purpose}
160
+
161
+ File to create: memory-bank/intents/${intentSlug}/units/${unit.name}/unit-brief.md
162
+
163
+ Use TEMPLATE:
164
+ ${templates.unitBrief}
165
+ `,
166
+ inputs: [],
167
+ expectedOutputs: [`memory-bank/intents/${intentSlug}/units/${unit.name}/unit-brief.md`],
168
+ metadata: { step: "unit_brief", unit: unit.name }
169
+ };
170
+ await connector.sendTask(packet);
171
+ await connector.waitResult(taskId);
172
+ }
173
+ async function generateStoriesForUnit(unit, intent, connector, templates) {
174
+ // Similar implementation to generate unit brief, but for stories
175
+ return []; // Placeholder for brevity in this first pass
176
+ }
177
+ async function generateBolts(intent, intentSlug, units, connector) {
178
+ // Reuse the logic from bolt-plan.ts but orchestrated here
179
+ // This would send a task to the Master Agent to create the bolt plan and bolt files
180
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-iris",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "iris": "dist/cli.js",
@@ -10,7 +10,8 @@
10
10
  "dist/**"
11
11
  ],
12
12
  "scripts": {
13
- "build": "tsc -p tsconfig.json",
13
+ "bundle": "mkdir -p dist/iris_bundle/frameworks/iris-core/memory && cp -r src/templates dist/iris_bundle/frameworks/iris-core/ && cp src/config/memory-bank.yaml dist/iris_bundle/frameworks/iris-core/memory/ && cp src/assets/framework.yaml dist/iris_bundle/frameworks/iris-core/ && cp src/assets/policy.yaml dist/iris_bundle/frameworks/iris-core/",
14
+ "build": "tsc -p tsconfig.json && npm run bundle",
14
15
  "start": "node dist/cli.js",
15
16
  "iris": "node dist/cli.js",
16
17
  "dev": "node --loader ts-node/esm src/cli.ts",