@smartmemory/compose 0.1.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.
Files changed (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1014 -0
  3. package/bin/compose.js +1515 -0
  4. package/dist/assets/_baseUniq-CQwX6VLz.js +1 -0
  5. package/dist/assets/arc-SxJ2J1sh.js +1 -0
  6. package/dist/assets/architectureDiagram-Q4EWVU46-BykunY1F.js +36 -0
  7. package/dist/assets/blockDiagram-DXYQGD6D-ohAKBOUw.js +132 -0
  8. package/dist/assets/c4Diagram-AHTNJAMY-DBDC3ENB.js +10 -0
  9. package/dist/assets/channel-DGElom1e.js +1 -0
  10. package/dist/assets/chunk-4BX2VUAB-Cv93Z7uM.js +1 -0
  11. package/dist/assets/chunk-4TB4RGXK-DE0WBDkj.js +206 -0
  12. package/dist/assets/chunk-55IACEB6-CE1EXenG.js +1 -0
  13. package/dist/assets/chunk-EDXVE4YY-DA7Ana6H.js +1 -0
  14. package/dist/assets/chunk-FMBD7UC4-CTDIPA3p.js +15 -0
  15. package/dist/assets/chunk-OYMX7WX6-uGBaPaTX.js +231 -0
  16. package/dist/assets/chunk-QZHKN3VN-CYlnXuUO.js +1 -0
  17. package/dist/assets/chunk-YZCP3GAM-ojGkzcZK.js +1 -0
  18. package/dist/assets/classDiagram-6PBFFD2Q-KqWP9wWZ.js +1 -0
  19. package/dist/assets/classDiagram-v2-HSJHXN6E-KqWP9wWZ.js +1 -0
  20. package/dist/assets/clone-DUJKJXd7.js +1 -0
  21. package/dist/assets/cose-bilkent-S5V4N54A-Bktn9hL-.js +1 -0
  22. package/dist/assets/dagre-KV5264BT-DFaSzuRF.js +4 -0
  23. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  24. package/dist/assets/diagram-5BDNPKRD-DnfmDzEm.js +10 -0
  25. package/dist/assets/diagram-G4DWMVQ6-Bm8W9YnG.js +24 -0
  26. package/dist/assets/diagram-MMDJMWI5-B5-TSKvp.js +43 -0
  27. package/dist/assets/diagram-TYMM5635-ls4rqlky.js +24 -0
  28. package/dist/assets/erDiagram-SMLLAGMA-giG6WO-r.js +85 -0
  29. package/dist/assets/flowDiagram-DWJPFMVM-XvlUuz-7.js +162 -0
  30. package/dist/assets/ganttDiagram-T4ZO3ILL-hLBV57oV.js +292 -0
  31. package/dist/assets/gitGraphDiagram-UUTBAWPF-BHu3s_Gn.js +106 -0
  32. package/dist/assets/graph-D0Cfv00Y.js +1 -0
  33. package/dist/assets/index-CUd6pFGF.css +1 -0
  34. package/dist/assets/index-DReRlzZI.js +1144 -0
  35. package/dist/assets/infoDiagram-42DDH7IO-DbqRsOo3.js +2 -0
  36. package/dist/assets/init-Gi6I4Gst.js +1 -0
  37. package/dist/assets/ishikawaDiagram-UXIWVN3A-DnCdx7zb.js +70 -0
  38. package/dist/assets/journeyDiagram-VCZTEJTY-CfD7eNcP.js +139 -0
  39. package/dist/assets/kanban-definition-6JOO6SKY-BYaO9-mK.js +89 -0
  40. package/dist/assets/katex-DkKDou_j.js +257 -0
  41. package/dist/assets/layout-Bj72wOEB.js +1 -0
  42. package/dist/assets/linear-BRFo114D.js +1 -0
  43. package/dist/assets/min-GCHnKlJS.js +1 -0
  44. package/dist/assets/mindmap-definition-QFDTVHPH-n0PMebY4.js +96 -0
  45. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  46. package/dist/assets/pieDiagram-DEJITSTG-pN4CljHF.js +30 -0
  47. package/dist/assets/quadrantDiagram-34T5L4WZ-DNoAy8-D.js +7 -0
  48. package/dist/assets/requirementDiagram-MS252O5E-BhtY05PT.js +84 -0
  49. package/dist/assets/sankeyDiagram-XADWPNL6-B6AD-16A.js +10 -0
  50. package/dist/assets/sequenceDiagram-FGHM5R23-DShHM-uk.js +157 -0
  51. package/dist/assets/stateDiagram-FHFEXIEX-DMxn7HTo.js +1 -0
  52. package/dist/assets/stateDiagram-v2-QKLJ7IA2-o6PnCs4e.js +1 -0
  53. package/dist/assets/timeline-definition-GMOUNBTQ-Cdu6uq52.js +120 -0
  54. package/dist/assets/vennDiagram-DHZGUBPP-CpK29iRe.js +34 -0
  55. package/dist/assets/wardley-RL74JXVD-BQgSkdcO.js +162 -0
  56. package/dist/assets/wardleyDiagram-NUSXRM2D-DJHYev6O.js +20 -0
  57. package/dist/assets/xychartDiagram-5P7HB3ND-1d75pbaO.js +7 -0
  58. package/dist/index.html +30 -0
  59. package/lib/agent-chains.js +65 -0
  60. package/lib/agent-string.js +86 -0
  61. package/lib/budget-ledger.js +86 -0
  62. package/lib/build-all.js +162 -0
  63. package/lib/build-dag.js +120 -0
  64. package/lib/build-stream-writer.js +190 -0
  65. package/lib/build.js +2997 -0
  66. package/lib/capability-checker.js +53 -0
  67. package/lib/cert-inject.js +38 -0
  68. package/lib/cli-progress.js +483 -0
  69. package/lib/constants.js +69 -0
  70. package/lib/cross-layer-audit.js +84 -0
  71. package/lib/debug-discipline.js +173 -0
  72. package/lib/feature-json.js +106 -0
  73. package/lib/gate-prompt.js +291 -0
  74. package/lib/gate-tiers.js +194 -0
  75. package/lib/health-history.js +119 -0
  76. package/lib/health-score.js +227 -0
  77. package/lib/ideabox.js +570 -0
  78. package/lib/import.js +244 -0
  79. package/lib/migrate-roadmap.js +94 -0
  80. package/lib/model-pricing.js +67 -0
  81. package/lib/new.js +413 -0
  82. package/lib/pipeline-cli.js +489 -0
  83. package/lib/plan-parser.js +103 -0
  84. package/lib/qa-scoping.js +474 -0
  85. package/lib/questionnaire.js +200 -0
  86. package/lib/resolve-port.js +7 -0
  87. package/lib/result-normalizer.js +349 -0
  88. package/lib/review-lenses.js +166 -0
  89. package/lib/roadmap-gen.js +210 -0
  90. package/lib/roadmap-parser.js +176 -0
  91. package/lib/server-probe.js +23 -0
  92. package/lib/staleness.js +87 -0
  93. package/lib/step-prompt.js +260 -0
  94. package/lib/step-validator.js +49 -0
  95. package/lib/stratum-mcp-client.js +365 -0
  96. package/lib/team-flag.js +46 -0
  97. package/lib/test-bootstrap.js +401 -0
  98. package/lib/triage.js +274 -0
  99. package/lib/vision-writer.js +391 -0
  100. package/package.json +111 -0
  101. package/pipelines/bug-fix.stratum.yaml +230 -0
  102. package/pipelines/build.stratum.yaml +498 -0
  103. package/pipelines/content.stratum.yaml +112 -0
  104. package/pipelines/coverage-sweep.stratum.yaml +52 -0
  105. package/pipelines/refactor.stratum.yaml +169 -0
  106. package/pipelines/research.stratum.yaml +88 -0
  107. package/pipelines/review-fix.stratum.yaml +109 -0
  108. package/presets/team-feature.stratum.yaml +105 -0
  109. package/presets/team-research.stratum.yaml +108 -0
  110. package/presets/team-review.stratum.yaml +106 -0
  111. package/scripts/agent-activity-hook.sh +31 -0
  112. package/scripts/agent-error-hook.sh +28 -0
  113. package/scripts/analyze-orphans.mjs +50 -0
  114. package/scripts/find-orphans.mjs +26 -0
  115. package/scripts/fix-phases.mjs +49 -0
  116. package/scripts/generate-stratum-spec.mjs +137 -0
  117. package/scripts/import-roadmap.mjs +116 -0
  118. package/scripts/phase-audit.mjs +33 -0
  119. package/scripts/run-pipeline.mjs +314 -0
  120. package/scripts/session-end-hook.sh +18 -0
  121. package/scripts/session-start-hook.sh +38 -0
  122. package/scripts/vision-hook.sh +104 -0
  123. package/scripts/vision-track.mjs +554 -0
  124. package/scripts/wire-all-orphans.mjs +108 -0
  125. package/scripts/wire-orphans.mjs +164 -0
  126. package/server/activity-routes.js +123 -0
  127. package/server/agent-health.js +197 -0
  128. package/server/agent-hooks.js +102 -0
  129. package/server/agent-mcp.js +10 -0
  130. package/server/agent-registry.js +95 -0
  131. package/server/agent-server.js +290 -0
  132. package/server/agent-spawn.js +251 -0
  133. package/server/agent-templates.js +77 -0
  134. package/server/artifact-manager.js +247 -0
  135. package/server/artifact-templates/architecture.md +28 -0
  136. package/server/artifact-templates/blueprint.md +21 -0
  137. package/server/artifact-templates/design.md +36 -0
  138. package/server/artifact-templates/plan.md +25 -0
  139. package/server/artifact-templates/prd.md +43 -0
  140. package/server/artifact-templates/report.md +40 -0
  141. package/server/block-tracker.js +90 -0
  142. package/server/build-stream-bridge.js +502 -0
  143. package/server/coalescing-buffer.js +46 -0
  144. package/server/compose-mcp-tools.js +479 -0
  145. package/server/compose-mcp.js +324 -0
  146. package/server/connectors/agent-connector.js +78 -0
  147. package/server/connectors/claude-sdk-connector.js +198 -0
  148. package/server/connectors/codex-connector.js +240 -0
  149. package/server/connectors/connector-discovery.js +18 -0
  150. package/server/connectors/connector-runtime.js +13 -0
  151. package/server/connectors/opencode-connector.js +200 -0
  152. package/server/design-routes.js +540 -0
  153. package/server/design-session.js +161 -0
  154. package/server/feature-scan.js +593 -0
  155. package/server/file-watcher.js +284 -0
  156. package/server/find-root.js +29 -0
  157. package/server/graph-export.js +343 -0
  158. package/server/ideabox-cache.js +77 -0
  159. package/server/ideabox-routes.js +294 -0
  160. package/server/index.js +156 -0
  161. package/server/model-tiers.js +49 -0
  162. package/server/pipeline-routes.js +288 -0
  163. package/server/policy-evaluator.js +36 -0
  164. package/server/project-root.js +122 -0
  165. package/server/security.js +23 -0
  166. package/server/session-manager.js +403 -0
  167. package/server/session-routes.js +190 -0
  168. package/server/session-store.js +107 -0
  169. package/server/settings-routes.js +35 -0
  170. package/server/settings-store.js +234 -0
  171. package/server/stratum-api.js +102 -0
  172. package/server/stratum-client.js +192 -0
  173. package/server/stratum-sync.js +193 -0
  174. package/server/summarizer.js +139 -0
  175. package/server/supervisor.js +196 -0
  176. package/server/vision-routes.js +668 -0
  177. package/server/vision-server.js +393 -0
  178. package/server/vision-store.js +360 -0
  179. package/server/vision-utils.js +179 -0
  180. package/server/worktree-gc.js +137 -0
  181. package/templates/ROADMAP.md +46 -0
package/package.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "@smartmemory/compose",
3
+ "version": "0.1.0",
4
+ "description": "Structured AI dev pipeline — goal-to-product orchestration with gates, iteration loops, and feature lifecycle management.",
5
+ "author": "SmartMemory",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "bin": {
9
+ "compose": "./bin/compose.js"
10
+ },
11
+ "scripts": {
12
+ "dev": "node server/supervisor.js 2>&1 | tee /tmp/compose-server.log",
13
+ "dev:server": "node server/supervisor.js",
14
+ "dev:server:bare": "node server/index.js",
15
+ "dev:client": "vite",
16
+ "build": "vite build",
17
+ "preview": "vite preview",
18
+ "test": "node --test test/*.test.js",
19
+ "test:integration": "node --test test/integration/*.test.js",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "compose",
24
+ "smartmemory",
25
+ "ai",
26
+ "orchestration",
27
+ "agent",
28
+ "pipeline",
29
+ "stratum",
30
+ "claude",
31
+ "codex",
32
+ "cli"
33
+ ],
34
+ "engines": {
35
+ "node": ">=18.0.0"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/smartmemory/compose.git"
40
+ },
41
+ "bugs": {
42
+ "url": "https://github.com/smartmemory/compose/issues"
43
+ },
44
+ "homepage": "https://github.com/smartmemory/compose#readme",
45
+ "publishConfig": {
46
+ "access": "public"
47
+ },
48
+ "files": [
49
+ "bin/**",
50
+ "server/**",
51
+ "lib/**",
52
+ "dist/**",
53
+ "templates/**",
54
+ "presets/**",
55
+ "pipelines/**",
56
+ "contracts/**",
57
+ "scripts/**",
58
+ "README.md",
59
+ "LICENSE"
60
+ ],
61
+ "dependencies": {
62
+ "@anthropic-ai/claude-agent-sdk": "^0.2.47",
63
+ "@dagrejs/dagre": "^2.0.4",
64
+ "@hello-pangea/dnd": "^18.0.1",
65
+ "@modelcontextprotocol/sdk": "^1.26.0",
66
+ "@opencode-ai/sdk": "^1.2.17",
67
+ "@radix-ui/react-collapsible": "^1.1.12",
68
+ "@radix-ui/react-dialog": "^1.1.15",
69
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
70
+ "@radix-ui/react-scroll-area": "^1.2.10",
71
+ "@radix-ui/react-select": "^2.2.6",
72
+ "@radix-ui/react-separator": "^1.1.8",
73
+ "@radix-ui/react-slot": "^1.2.4",
74
+ "@radix-ui/react-toggle": "^1.1.10",
75
+ "@radix-ui/react-toggle-group": "^1.1.11",
76
+ "@radix-ui/react-tooltip": "^1.2.8",
77
+ "@tanstack/react-virtual": "^3.13.23",
78
+ "class-variance-authority": "^0.7.1",
79
+ "clsx": "^2.1.1",
80
+ "cors": "^2.8.5",
81
+ "cytoscape": "^3.33.1",
82
+ "cytoscape-dagre": "^2.5.0",
83
+ "cytoscape-fcose": "^2.2.0",
84
+ "date-fns": "^3.6.0",
85
+ "diff": "^8.0.4",
86
+ "express": "^4.21.0",
87
+ "ink": "^5.2.1",
88
+ "lucide-react": "^0.563.0",
89
+ "mermaid": "^11.13.0",
90
+ "react": "^19.2.5",
91
+ "react-dom": "^19.2.5",
92
+ "react-markdown": "^10.1.0",
93
+ "remark-gfm": "^4.0.1",
94
+ "tailwind-merge": "^3.4.0",
95
+ "tailwindcss-animate": "^1.0.7",
96
+ "uuid": "^11.0.0",
97
+ "ws": "^8.18.0",
98
+ "yaml": "^2.8.2",
99
+ "zustand": "^5.0.11"
100
+ },
101
+ "devDependencies": {
102
+ "@vitejs/plugin-react": "^4.3.4",
103
+ "autoprefixer": "^10.4.20",
104
+ "postcss": "^8.5.3",
105
+ "tailwindcss": "^3.4.17",
106
+ "vite": "^6.1.0"
107
+ },
108
+ "overrides": {
109
+ "zod": "^4.0.0"
110
+ }
111
+ }
@@ -0,0 +1,230 @@
1
+ # metadata:
2
+ # id: bug-fix
3
+ # label: "Bug Fix"
4
+ # description: "Diagnose and fix a bug — reproduce, trace root cause, scope audit, fix, test, verify, ship"
5
+ # category: maintenance
6
+ # steps: 8
7
+ # estimated_minutes: 40
8
+
9
+ version: "0.1"
10
+
11
+ # bug-fix pipeline
12
+ #
13
+ # Eight-step flow for disciplined bug resolution:
14
+ # 1. reproduce — confirm the bug exists with a failing test
15
+ # 2. diagnose — trace root cause by OBSERVING actual data (not assuming)
16
+ # 3. scope_check — grep audit if change spans multiple layers/repos
17
+ # 4. fix — implement the minimal correct fix across ALL affected layers
18
+ # 5. test — run full test suite, ensure no regressions
19
+ # 6. verify — confirm original reproduction case now passes
20
+ # 7. retro_check — detect fix chains and log discipline signals
21
+ # 8. ship — commit and report
22
+ #
23
+ # Debug Discipline (COMP-DEBUG-1):
24
+ # - diagnose requires trace_evidence (actual command output, not prose assumptions)
25
+ # - scope_check prevents incremental multi-layer discovery
26
+ # - retro_check detects fix chains and feeds iteration ledger
27
+ #
28
+ # Inputs:
29
+ # task — bug description (symptoms, steps to reproduce, affected files)
30
+ #
31
+ # Usage:
32
+ # stratum_plan <this yaml> "bug_fix" {"task": "..."}
33
+
34
+ contracts:
35
+ BugFixResult:
36
+ phase: {type: string}
37
+ summary: {type: string}
38
+ outcome: {type: string, values: [complete, failed]}
39
+ references_addressed: {type: string} # stringified int
40
+
41
+ TestResult:
42
+ passing: {type: boolean}
43
+ summary: {type: string}
44
+ failures: {type: array}
45
+
46
+ TraceEvidence:
47
+ command: {type: string}
48
+ actual_output: {type: string}
49
+ conclusion: {type: string}
50
+
51
+ DiagnoseResult:
52
+ root_cause: {type: string}
53
+ affected_layers: {type: array}
54
+ trace_evidence: {type: array, items: TraceEvidence}
55
+ summary: {type: string}
56
+ scope_hint: {type: string} # single | cross-layer | unknown
57
+
58
+ ScopeResult:
59
+ scope: {type: string, values: [single, cross_layer]}
60
+ references_found: {type: array}
61
+ repos_scanned: {type: number}
62
+ summary: {type: string}
63
+ references_count: {type: string} # stringified int for Stratum compat
64
+
65
+ RetroCheckResult:
66
+ fix_chains: {type: array}
67
+ attempt_count: {type: number}
68
+ escalation: {type: boolean}
69
+ discipline_score: {type: number}
70
+ summary: {type: string}
71
+
72
+ functions:
73
+ reproduce:
74
+ mode: compute
75
+ intent: >
76
+ Write a failing test that demonstrates the bug. The test must fail
77
+ before any fix is applied. Return a summary of the reproduction.
78
+ input:
79
+ task: {type: string}
80
+ output: BugFixResult
81
+ retries: 2
82
+
83
+ diagnose:
84
+ mode: compute
85
+ intent: >
86
+ Trace the root cause by OBSERVING actual data, not assuming.
87
+ You MUST run at least one command that prints a real value at the
88
+ failure point (docker exec, curl, python -c "print(type(x))").
89
+ Return trace_evidence: a list of {command, actual_output, conclusion}.
90
+ Also identify which layers are affected (core, service, frontend, infra).
91
+ "Import OK" and "build passed" are NOT trace evidence.
92
+ input:
93
+ task: {type: string}
94
+ output: DiagnoseResult
95
+ ensure:
96
+ - "result.trace_evidence != null"
97
+ - "result.trace_evidence.length >= 2"
98
+ - "result.root_cause != null"
99
+ - "result.scope_hint in ('single', 'cross-layer', 'unknown')"
100
+ retries: 2
101
+
102
+ scope_check:
103
+ mode: compute
104
+ intent: >
105
+ If the diagnosis shows the root cause involves a provider switch,
106
+ field rename, config key change, or anything spanning multiple
107
+ repos or layers: grep ALL configured project repos for every reference
108
+ to the affected term. Return the full reference list grouped by repo.
109
+ If the change is single-layer, return scope: 'single' and skip.
110
+ This prevents incremental multi-layer discovery (fixing one layer,
111
+ deploying, discovering the next layer is broken, repeat).
112
+ input:
113
+ task: {type: string}
114
+ diagnosis: {type: object}
115
+ output: ScopeResult
116
+ retries: 1
117
+
118
+ fix:
119
+ mode: compute
120
+ intent: >
121
+ Implement the minimal correct fix for the diagnosed root cause.
122
+ If scope_check found cross-layer references, address ALL of them
123
+ in coordinated commits — do not leave any reference unaddressed.
124
+ Change only what is necessary. Return a summary of changes made.
125
+ input:
126
+ task: {type: string}
127
+ scope: {type: object}
128
+ output: BugFixResult
129
+ retries: 2
130
+
131
+ test:
132
+ mode: compute
133
+ intent: >
134
+ Run the full test suite. Return structured JSON:
135
+ { "passing": boolean, "summary": string, "failures": string[] }.
136
+ input:
137
+ task: {type: string}
138
+ output: TestResult
139
+ ensure:
140
+ - "result.passing == true"
141
+ retries: 5
142
+
143
+ verify:
144
+ mode: compute
145
+ intent: >
146
+ Re-run the reproduction test from step 1. Confirm it now passes.
147
+ Return a summary confirming the fix resolves the original bug.
148
+ input:
149
+ task: {type: string}
150
+ output: BugFixResult
151
+ retries: 1
152
+
153
+ retro_check:
154
+ mode: compute
155
+ intent: >
156
+ Analyze git history for this session. Detect fix chains: 2+ commits
157
+ modifying the same file or function. Count total fix attempts on
158
+ the target bug. For visual/CSS/layout bugs, enforce hard stop at
159
+ attempt 2 and flag for cross-agent escalation.
160
+ Return fix_chains (list of repeated files), attempt_count, whether
161
+ escalation was triggered, and a discipline_score (0-100).
162
+ input:
163
+ task: {type: string}
164
+ output: RetroCheckResult
165
+ retries: 1
166
+
167
+ ship:
168
+ mode: compute
169
+ intent: >
170
+ Commit all changes with a descriptive message. Update CHANGELOG.md
171
+ if appropriate. Return a summary of what was shipped.
172
+ input:
173
+ task: {type: string}
174
+ output: BugFixResult
175
+ retries: 1
176
+
177
+ flows:
178
+ bug_fix:
179
+ input:
180
+ task: {type: string}
181
+ output: BugFixResult
182
+ steps:
183
+ - id: reproduce
184
+ function: reproduce
185
+ inputs:
186
+ task: "$.input.task"
187
+
188
+ - id: diagnose
189
+ function: diagnose
190
+ inputs:
191
+ task: "$.input.task"
192
+ depends_on: [reproduce]
193
+
194
+ - id: scope_check
195
+ function: scope_check
196
+ inputs:
197
+ task: "$.input.task"
198
+ diagnosis: "$.steps.diagnose.output"
199
+ depends_on: [diagnose]
200
+
201
+ - id: fix
202
+ function: fix
203
+ inputs:
204
+ task: "$.input.task"
205
+ scope: "$.steps.scope_check.output"
206
+ depends_on: [scope_check]
207
+
208
+ - id: test
209
+ function: test
210
+ inputs:
211
+ task: "$.input.task"
212
+ depends_on: [fix]
213
+
214
+ - id: verify
215
+ function: verify
216
+ inputs:
217
+ task: "$.input.task"
218
+ depends_on: [test]
219
+
220
+ - id: retro_check
221
+ function: retro_check
222
+ inputs:
223
+ task: "$.input.task"
224
+ depends_on: [verify]
225
+
226
+ - id: ship
227
+ function: ship
228
+ inputs:
229
+ task: "$.input.task"
230
+ depends_on: [retro_check]