@smartmemory/compose 0.2.57-beta → 0.3.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 (104) hide show
  1. package/README.md +2 -2
  2. package/bin/compose.js +55 -54
  3. package/contracts/feature-json.schema.json +16 -0
  4. package/dist/assets/{App-BmhlHOXF.js → App-DJ5xk_Wx.js} +219 -219
  5. package/dist/assets/{abnfDiagram-VRR7QNED-CMOTYAnt.js → abnfDiagram-VRR7QNED-BPWGdCFx.js} +1 -1
  6. package/dist/assets/{arc-BJAv_6dL.js → arc-DX5jqmcO.js} +1 -1
  7. package/dist/assets/{architectureDiagram-ZJ3FMSHR-xa4DLUcp.js → architectureDiagram-ZJ3FMSHR-B6jmNVw7.js} +1 -1
  8. package/dist/assets/{blockDiagram-677ZJIJ3-BdkDqeQF.js → blockDiagram-677ZJIJ3-DAx2i-sB.js} +1 -1
  9. package/dist/assets/{c4Diagram-LMCZKHZV-DiNrLIuL.js → c4Diagram-LMCZKHZV-zmsZCplj.js} +1 -1
  10. package/dist/assets/channel-vsDnTvkh.js +1 -0
  11. package/dist/assets/{chunk-2Q5K7J3B-BsjtgrSL.js → chunk-2Q5K7J3B-3QSh6sI7.js} +1 -1
  12. package/dist/assets/{chunk-32BRIVSS-DpImULWy.js → chunk-32BRIVSS-BiH5Di_y.js} +1 -1
  13. package/dist/assets/{chunk-5VM5RSS4-DTdG5JnR.js → chunk-5VM5RSS4-C0EfjFLd.js} +1 -1
  14. package/dist/assets/{chunk-EX3LRPZG-Cj1jNuKY.js → chunk-EX3LRPZG-BGyfmVm-.js} +1 -1
  15. package/dist/assets/{chunk-JWPE2WC7-DwQ0wwWn.js → chunk-JWPE2WC7-Ba0mrNlg.js} +1 -1
  16. package/dist/assets/{chunk-MOJQB5TN-DZZa7unc.js → chunk-MOJQB5TN-D3QO9EzH.js} +1 -1
  17. package/dist/assets/{chunk-RYQCIY6F-CgdjqYQj.js → chunk-RYQCIY6F-D1uvNA6d.js} +1 -1
  18. package/dist/assets/{chunk-V7JOEXUC-DrPIj6XI.js → chunk-V7JOEXUC-fihlnodT.js} +1 -1
  19. package/dist/assets/{chunk-VR4S4FIN-BBUOVC5W.js → chunk-VR4S4FIN-nmRUEo1H.js} +1 -1
  20. package/dist/assets/{chunk-XXDRQBXY-BEIiZ6gS.js → chunk-XXDRQBXY-CM693yEg.js} +1 -1
  21. package/dist/assets/classDiagram-OUVF2IWQ-DO-wdSFZ.js +1 -0
  22. package/dist/assets/classDiagram-v2-EOCWNBFH-DO-wdSFZ.js +1 -0
  23. package/dist/assets/{cose-bilkent-JH36ORCC-ClFTQEyD.js → cose-bilkent-JH36ORCC-CkacPn8W.js} +1 -1
  24. package/dist/assets/{cynefin-VYW2F7L2-5Bp7xFO0.js → cynefin-VYW2F7L2-BiHaIptG.js} +1 -1
  25. package/dist/assets/{cynefinDiagram-TSTJHNR4-C-0QlSda.js → cynefinDiagram-TSTJHNR4-CdKxMmiy.js} +1 -1
  26. package/dist/assets/{dagre-VKFMJZFB-DLkqsfBy.js → dagre-VKFMJZFB-BQLY5y_W.js} +1 -1
  27. package/dist/assets/{diagram-FQU43EPY-Cwh_tJ_r.js → diagram-FQU43EPY-D7uMBHvq.js} +1 -1
  28. package/dist/assets/{diagram-G47NLZAW-CvvAjulf.js → diagram-G47NLZAW-B3Z1cuH7.js} +1 -1
  29. package/dist/assets/{diagram-NH7WQ7WH-CCoyx8_e.js → diagram-NH7WQ7WH-BZyRD45e.js} +1 -1
  30. package/dist/assets/{diagram-OA4YK3LP-DfjhKYCp.js → diagram-OA4YK3LP-DcThOTt7.js} +1 -1
  31. package/dist/assets/{diagram-WEI45ONY-Vjz0ygfB.js → diagram-WEI45ONY-BcgRAkqY.js} +1 -1
  32. package/dist/assets/{ebnfDiagram-CCIWWBDH-GsA8c6g2.js → ebnfDiagram-CCIWWBDH-CGwfO_xH.js} +1 -1
  33. package/dist/assets/{erDiagram-Q63AITRT-Cc0lJ9sQ.js → erDiagram-Q63AITRT-pV58-Ncc.js} +1 -1
  34. package/dist/assets/{flowDiagram-23GEKE2U-C_sotK-k.js → flowDiagram-23GEKE2U-DJ_SqE8h.js} +1 -1
  35. package/dist/assets/{ganttDiagram-NO4QXBWP-BBtu_WUe.js → ganttDiagram-NO4QXBWP-Dgy0Iyss.js} +1 -1
  36. package/dist/assets/{gitGraphDiagram-IHSO6WYX-BV_aSB8-.js → gitGraphDiagram-IHSO6WYX-CbiZw9fb.js} +1 -1
  37. package/dist/assets/{index-CKfOVv2N.js → index-DZTJEk-y.js} +2 -2
  38. package/dist/assets/{infoDiagram-FWYZ7A6U-DMAvNGtX.js → infoDiagram-FWYZ7A6U-CtsyyEc-.js} +1 -1
  39. package/dist/assets/{ishikawaDiagram-FXEZZL3T-DfQB91MZ.js → ishikawaDiagram-FXEZZL3T-BJilNFkK.js} +1 -1
  40. package/dist/assets/{journeyDiagram-5HDEW3XC-Bq4Llm9o.js → journeyDiagram-5HDEW3XC-C2UCMP4t.js} +1 -1
  41. package/dist/assets/{kanban-definition-HUTT4EX6-DTXHiDiE.js → kanban-definition-HUTT4EX6-DmLDJBRy.js} +1 -1
  42. package/dist/assets/{linear-BQSYZcVg.js → linear-C1paCqE7.js} +1 -1
  43. package/dist/assets/{mindmap-definition-LN4V7U3C-KuH2NIj0.js → mindmap-definition-LN4V7U3C-CX-RxKVn.js} +1 -1
  44. package/dist/assets/{pegDiagram-2B236MQR-BKoNGQFr.js → pegDiagram-2B236MQR-CTU32H2W.js} +1 -1
  45. package/dist/assets/{pieDiagram-ENE6RG2P-EpYv162Y.js → pieDiagram-ENE6RG2P-D8L1aYoo.js} +1 -1
  46. package/dist/assets/{quadrantDiagram-ABIIQ3AL-C9deUjQ2.js → quadrantDiagram-ABIIQ3AL-hQ3bXosy.js} +1 -1
  47. package/dist/assets/{railroadDiagram-RFXS5EU6-Csqw2hK9.js → railroadDiagram-RFXS5EU6--_vuYcda.js} +1 -1
  48. package/dist/assets/{requirementDiagram-TGXJPOKE-DCuz3emr.js → requirementDiagram-TGXJPOKE-C6h_m3Az.js} +1 -1
  49. package/dist/assets/{sankeyDiagram-HTMAVEWB-BTeTL24f.js → sankeyDiagram-HTMAVEWB-Dpc7CfIQ.js} +1 -1
  50. package/dist/assets/{sequenceDiagram-DBY2YBRQ-Cf1ZkTwO.js → sequenceDiagram-DBY2YBRQ-CK5ZzbvJ.js} +1 -1
  51. package/dist/assets/{sizeCapture-X5ZJPWSS-D3Lbewzg.js → sizeCapture-X5ZJPWSS-BAxVvM9G.js} +1 -1
  52. package/dist/assets/{stateDiagram-2N3HPSRC-O8l37yJI.js → stateDiagram-2N3HPSRC-7j33_2PY.js} +1 -1
  53. package/dist/assets/stateDiagram-v2-6OUMAXLB-GviN0FpJ.js +1 -0
  54. package/dist/assets/{swimlanes-5IMT3BWC-BikmTh8b.js → swimlanes-5IMT3BWC-CBG2yOob.js} +2 -2
  55. package/dist/assets/swimlanesDiagram-G3AALYLV-D0wMoxl1.js +8 -0
  56. package/dist/assets/{timeline-definition-FHXFAJF6-BOxSosG0.js → timeline-definition-FHXFAJF6-BOnZkQvc.js} +1 -1
  57. package/dist/assets/{vennDiagram-L72KCM5P-BSClOErZ.js → vennDiagram-L72KCM5P-D52NhIfj.js} +1 -1
  58. package/dist/assets/{wardleyDiagram-EHGQE667-DHFRjOK0.js → wardleyDiagram-EHGQE667-YoPY2ZU-.js} +1 -1
  59. package/dist/assets/{xychartDiagram-FW5EYKEG-Dh1v4x-O.js → xychartDiagram-FW5EYKEG-BanNfgtO.js} +1 -1
  60. package/dist/index.html +1 -1
  61. package/lib/build-all.js +0 -5
  62. package/lib/build-stream-schema.js +1 -1
  63. package/lib/build.js +1809 -2646
  64. package/lib/consumer-fanout.js +1317 -0
  65. package/lib/escalation.js +69 -0
  66. package/lib/feature-validator.js +6 -4
  67. package/lib/feature-writer.js +58 -3
  68. package/lib/flow-state.js +15 -14
  69. package/lib/gsd-budget.js +48 -10
  70. package/lib/gsd-prompt.js +3 -4
  71. package/lib/gsd-stuck.js +1 -1
  72. package/lib/gsd.js +303 -149
  73. package/lib/lane-gate.js +200 -0
  74. package/lib/local-claude-connector.js +149 -0
  75. package/lib/new.js +162 -307
  76. package/lib/result-normalizer.js +233 -18
  77. package/lib/review-lenses.js +1 -1
  78. package/lib/step-prompt.js +41 -119
  79. package/lib/stratum-engine.js +297 -0
  80. package/lib/stratum-mcp-client.js +224 -213
  81. package/lib/triage.js +144 -0
  82. package/lib/vocabulary-compliance.js +268 -0
  83. package/lib/vocabulary-inject.js +1 -36
  84. package/package.json +2 -1
  85. package/pipelines/build-quick.stratum.yaml +5 -17
  86. package/pipelines/build.profiles.json +11 -0
  87. package/pipelines/build.stratum.yaml +288 -467
  88. package/pipelines/gsd.stratum.yaml +73 -125
  89. package/pipelines/new.stratum.yaml +68 -149
  90. package/server/build-routes.js +4 -1
  91. package/server/design-routes.js +37 -21
  92. package/server/index.js +13 -21
  93. package/server/lifecycle-guard.js +1 -1
  94. package/server/pipeline-routes.js +113 -31
  95. package/server/stratum-client.js +33 -47
  96. package/server/stratum-sync.js +3 -4
  97. package/server/vision-server.js +1 -1
  98. package/dist/assets/channel-CYErfopw.js +0 -1
  99. package/dist/assets/classDiagram-OUVF2IWQ-qCC_hnXu.js +0 -1
  100. package/dist/assets/classDiagram-v2-EOCWNBFH-qCC_hnXu.js +0 -1
  101. package/dist/assets/stateDiagram-v2-6OUMAXLB-BWqk_9py.js +0 -1
  102. package/dist/assets/swimlanesDiagram-G3AALYLV-C60ICdks.js +0 -8
  103. package/lib/connector-factory-shim.js +0 -167
  104. package/server/agent-mcp.js +0 -10
@@ -1,167 +0,0 @@
1
- /**
2
- * connector-factory-shim.js — Backward-compatibility adapter for tests that
3
- * pass a legacy `connectorFactory(agentType, opts)` returning an object with
4
- * an async-generator `run(prompt)` that yields `{type: 'assistant'|'tool_use'
5
- * |'tool_use_summary'|'usage'|'error'|'result', ...}` events.
6
- *
7
- * After STRAT-DEDUP-AGENTRUN-V3 the consumer pipeline calls
8
- * `stratum.agentRun(...)` and consumes BuildStreamEvent envelopes via
9
- * `stratum.onEvent(correlationId, '_agent_run', handler)`. This shim adapts
10
- * the legacy factory to dispatch envelopes through the StratumMcpClient's
11
- * onEvent pathway so existing tests continue to assert wire-level behavior.
12
- *
13
- * Used only when `opts.stratum` is NOT injected directly. Production paths
14
- * never instantiate this shim.
15
- */
16
-
17
- /**
18
- * Install fake `agentRun`, `runAgentText`, `cancelAgentRun` methods on a
19
- * StratumMcpClient instance backed by a legacy connector factory.
20
- *
21
- * @param {object} stratum - StratumMcpClient (uses its #dispatchEvent path indirectly via internal subscribers).
22
- * @param {Function} factory - legacy `factory(agentType, opts)` returning {run(prompt), interrupt(), isRunning}
23
- * @param {string} defaultCwd
24
- */
25
- export function installFactoryShim(stratum, factory, defaultCwd) {
26
- // We dispatch via the public onEvent subscribers map. There's no public
27
- // emit method, so we synthesize the same JSON-string-via-progress path the
28
- // real client uses by directly invoking subscribed handlers.
29
- function emit(correlationId, kind, metadata, seq) {
30
- // Replicate the dispatch path: lookup `${flow}::${step}` subscribers and
31
- // hand them a parsed envelope. This mirrors `#dispatchEvent` (private)
32
- // but works against the public `onEvent` registry implicitly because we
33
- // only run inside a single tool-call lifecycle.
34
- const env = {
35
- schema_version: '0.2.5',
36
- flow_id: correlationId,
37
- step_id: '_agent_run',
38
- task_id: null,
39
- seq,
40
- ts: new Date().toISOString(),
41
- kind,
42
- metadata,
43
- };
44
- // Lean on the stratum client's existing #makeProgressHandler-style path:
45
- // re-encode and feed via a shadow handler is overkill — we instead reach
46
- // into the onEvent subscribers via a dispatch closure attached on first
47
- // install.
48
- if (!stratum._shimDispatch) {
49
- // Fallback: directly walk subscribers if dispatch closure not wired.
50
- // Here we expose a temporary dispatcher by hijacking onEvent's contract:
51
- // each subscribe call adds to a map; we mirror lookups via a private
52
- // tracker. The simpler approach is to wrap `onEvent` to also register
53
- // with our own map. Done at install time below.
54
- }
55
- stratum._shimDispatch(env);
56
- }
57
-
58
- // Wrap onEvent to keep a parallel registry we can dispatch into.
59
- if (!stratum._shimSubs) {
60
- const subs = new Map();
61
- stratum._shimSubs = subs;
62
- const realOnEvent = stratum.onEvent.bind(stratum);
63
- stratum.onEvent = (flowId, stepId, handler) => {
64
- const key = `${flowId}::${stepId}`;
65
- let set = subs.get(key);
66
- if (!set) { set = new Set(); subs.set(key, set); }
67
- set.add(handler);
68
- const realUnsub = realOnEvent(flowId, stepId, handler);
69
- return () => {
70
- const s = subs.get(key);
71
- if (s) { s.delete(handler); if (s.size === 0) subs.delete(key); }
72
- realUnsub();
73
- };
74
- };
75
- stratum._shimDispatch = (env) => {
76
- const set = subs.get(`${env.flow_id}::${env.step_id}`);
77
- if (!set) return;
78
- for (const h of set) {
79
- try { h(env); } catch (err) { console.error('[shim] handler threw:', err); }
80
- }
81
- };
82
- }
83
-
84
- stratum.agentRun = async (agentType, prompt, agentOpts = {}) => {
85
- const correlationId = agentOpts.correlationId ?? `mock-${Date.now()}-${Math.random().toString(36).slice(2)}`;
86
- const connector = factory(agentType, { cwd: agentOpts.cwd ?? defaultCwd });
87
- const parts = [];
88
- let seq = 0;
89
- let interruptHook = null;
90
- if (typeof connector.interrupt === 'function') {
91
- interruptHook = () => { try { connector.interrupt(); } catch { /* best-effort */ } };
92
- }
93
- // Hook for cancelAgentRun: stash the interrupt function under correlationId.
94
- if (!stratum._shimInterrupts) stratum._shimInterrupts = new Map();
95
- if (interruptHook) stratum._shimInterrupts.set(correlationId, interruptHook);
96
- try {
97
- for await (const ev of connector.run(prompt, {})) {
98
- if (ev.type === 'assistant' && ev.content) {
99
- parts.push(ev.content);
100
- stratum._shimDispatch({
101
- schema_version: '0.2.5',
102
- flow_id: correlationId, step_id: '_agent_run', task_id: null,
103
- seq: seq++, ts: new Date().toISOString(),
104
- kind: 'agent_relay',
105
- metadata: { role: 'assistant', text: ev.content },
106
- });
107
- } else if (ev.type === 'result' && ev.content && parts.length === 0) {
108
- parts.push(ev.content);
109
- stratum._shimDispatch({
110
- schema_version: '0.2.5',
111
- flow_id: correlationId, step_id: '_agent_run', task_id: null,
112
- seq: seq++, ts: new Date().toISOString(),
113
- kind: 'agent_relay',
114
- metadata: { role: 'assistant', text: ev.content },
115
- });
116
- } else if (ev.type === 'tool_use' && ev.tool) {
117
- stratum._shimDispatch({
118
- schema_version: '0.2.5',
119
- flow_id: correlationId, step_id: '_agent_run', task_id: null,
120
- seq: seq++, ts: new Date().toISOString(),
121
- kind: 'tool_use_summary',
122
- metadata: { tool: ev.tool, input: ev.input ?? {}, summary: '', output: '' },
123
- });
124
- } else if (ev.type === 'tool_use_summary') {
125
- stratum._shimDispatch({
126
- schema_version: '0.2.5',
127
- flow_id: correlationId, step_id: '_agent_run', task_id: null,
128
- seq: seq++, ts: new Date().toISOString(),
129
- kind: 'tool_use_summary',
130
- metadata: { tool: ev.tool ?? '', input: ev.input ?? {}, summary: ev.summary ?? '', output: ev.output ?? '' },
131
- });
132
- } else if (ev.type === 'usage') {
133
- stratum._shimDispatch({
134
- schema_version: '0.2.5',
135
- flow_id: correlationId, step_id: '_agent_run', task_id: null,
136
- seq: seq++, ts: new Date().toISOString(),
137
- kind: 'step_usage',
138
- metadata: {
139
- input_tokens: ev.input_tokens ?? 0,
140
- output_tokens: ev.output_tokens ?? 0,
141
- cache_creation_input_tokens: ev.cache_creation_input_tokens ?? 0,
142
- cache_read_input_tokens: ev.cache_read_input_tokens ?? 0,
143
- cost_usd: ev.cost_usd ?? null,
144
- model: ev.model ?? null,
145
- },
146
- });
147
- } else if (ev.type === 'error') {
148
- throw new Error(ev.message);
149
- }
150
- }
151
- } finally {
152
- stratum._shimInterrupts?.delete(correlationId);
153
- }
154
- return { text: parts.join(''), correlation_id: correlationId };
155
- };
156
-
157
- stratum.runAgentText = async (agentType, prompt, agentOpts = {}) => {
158
- const r = await stratum.agentRun(agentType, prompt, agentOpts);
159
- return r.text;
160
- };
161
-
162
- stratum.cancelAgentRun = async (correlationId) => {
163
- const hook = stratum._shimInterrupts?.get(correlationId);
164
- if (hook) hook();
165
- return { status: hook ? 'cancelled' : 'not_found', correlation_id: correlationId };
166
- };
167
- }
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env node
2
- // T2-F5 retirement shim. The agent_run capability moved to stratum-mcp's
3
- // stratum_agent_run tool. This file exists only to fail fast with a clear
4
- // message for users whose .mcp.json still references it. Re-running
5
- // `compose init` removes the stale entry.
6
- process.stderr.write(
7
- 'agent-mcp.js is retired (T2-F5). Use stratum_agent_run on the stratum MCP server.\n'
8
- + 'Re-run `compose init` to remove the legacy entry from .mcp.json.\n'
9
- );
10
- process.exit(1);