@contorium/mcp 0.8.1

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 (187) hide show
  1. package/README.md +97 -0
  2. package/bin/contorium-mcp.js +34 -0
  3. package/dist/autoContext.d.ts +2 -0
  4. package/dist/autoContext.js +2 -0
  5. package/dist/bootstrapCli.d.ts +2 -0
  6. package/dist/bootstrapCli.js +21 -0
  7. package/dist/conflicts.d.ts +19 -0
  8. package/dist/conflicts.js +49 -0
  9. package/dist/dashboardEnsure.d.ts +10 -0
  10. package/dist/dashboardEnsure.js +41 -0
  11. package/dist/intelligence.d.ts +16 -0
  12. package/dist/intelligence.js +38 -0
  13. package/dist/intentGraph.d.ts +20 -0
  14. package/dist/intentGraph.js +51 -0
  15. package/dist/mcpBootstrap.d.ts +8 -0
  16. package/dist/mcpBootstrap.js +81 -0
  17. package/dist/memoryStore.d.ts +18 -0
  18. package/dist/memoryStore.js +57 -0
  19. package/dist/paths.d.ts +12 -0
  20. package/dist/paths.js +66 -0
  21. package/dist/runtimeState.d.ts +14 -0
  22. package/dist/runtimeState.js +36 -0
  23. package/dist/server.d.ts +3 -0
  24. package/dist/server.js +567 -0
  25. package/dist/stateBuilder.d.ts +16 -0
  26. package/dist/stateBuilder.js +40 -0
  27. package/dist/understanding.d.ts +1 -0
  28. package/dist/understanding.js +1 -0
  29. package/dist/workspace.d.ts +12 -0
  30. package/dist/workspace.js +40 -0
  31. package/dist/workspaceConfig.d.ts +14 -0
  32. package/dist/workspaceConfig.js +80 -0
  33. package/node_modules/@contora/state-core/dist/adapterSync.d.ts +29 -0
  34. package/node_modules/@contora/state-core/dist/adapterSync.d.ts.map +1 -0
  35. package/node_modules/@contora/state-core/dist/adapterSync.js +142 -0
  36. package/node_modules/@contora/state-core/dist/adapters.d.ts +20 -0
  37. package/node_modules/@contora/state-core/dist/adapters.d.ts.map +1 -0
  38. package/node_modules/@contora/state-core/dist/adapters.js +24 -0
  39. package/node_modules/@contora/state-core/dist/bootstrap/bootstrapState.d.ts +6 -0
  40. package/node_modules/@contora/state-core/dist/bootstrap/bootstrapState.d.ts.map +1 -0
  41. package/node_modules/@contora/state-core/dist/bootstrap/bootstrapState.js +116 -0
  42. package/node_modules/@contora/state-core/dist/bootstrapArtifacts.d.ts +18 -0
  43. package/node_modules/@contora/state-core/dist/bootstrapArtifacts.d.ts.map +1 -0
  44. package/node_modules/@contora/state-core/dist/bootstrapArtifacts.js +43 -0
  45. package/node_modules/@contora/state-core/dist/bootstrapState.d.ts +6 -0
  46. package/node_modules/@contora/state-core/dist/bootstrapState.d.ts.map +1 -0
  47. package/node_modules/@contora/state-core/dist/bootstrapState.js +60 -0
  48. package/node_modules/@contora/state-core/dist/dashboardActivity.d.ts +12 -0
  49. package/node_modules/@contora/state-core/dist/dashboardActivity.d.ts.map +1 -0
  50. package/node_modules/@contora/state-core/dist/dashboardActivity.js +58 -0
  51. package/node_modules/@contora/state-core/dist/dualMode.d.ts +11 -0
  52. package/node_modules/@contora/state-core/dist/dualMode.d.ts.map +1 -0
  53. package/node_modules/@contora/state-core/dist/dualMode.js +38 -0
  54. package/node_modules/@contora/state-core/dist/gitScan.d.ts +7 -0
  55. package/node_modules/@contora/state-core/dist/gitScan.d.ts.map +1 -0
  56. package/node_modules/@contora/state-core/dist/gitScan.js +39 -0
  57. package/node_modules/@contora/state-core/dist/index.d.ts +44 -0
  58. package/node_modules/@contora/state-core/dist/index.d.ts.map +1 -0
  59. package/node_modules/@contora/state-core/dist/index.js +141 -0
  60. package/node_modules/@contora/state-core/dist/minimalSnapshot.d.ts +4 -0
  61. package/node_modules/@contora/state-core/dist/minimalSnapshot.d.ts.map +1 -0
  62. package/node_modules/@contora/state-core/dist/minimalSnapshot.js +60 -0
  63. package/node_modules/@contora/state-core/dist/scanner/gitScan.d.ts +7 -0
  64. package/node_modules/@contora/state-core/dist/scanner/gitScan.d.ts.map +1 -0
  65. package/node_modules/@contora/state-core/dist/scanner/gitScan.js +42 -0
  66. package/node_modules/@contora/state-core/dist/scanner/workspaceScanner.d.ts +4 -0
  67. package/node_modules/@contora/state-core/dist/scanner/workspaceScanner.d.ts.map +1 -0
  68. package/node_modules/@contora/state-core/dist/scanner/workspaceScanner.js +148 -0
  69. package/node_modules/@contora/state-core/dist/semiAutoHandoff.d.ts +46 -0
  70. package/node_modules/@contora/state-core/dist/semiAutoHandoff.d.ts.map +1 -0
  71. package/node_modules/@contora/state-core/dist/semiAutoHandoff.js +227 -0
  72. package/node_modules/@contora/state-core/dist/sourceMetadata.d.ts +4 -0
  73. package/node_modules/@contora/state-core/dist/sourceMetadata.d.ts.map +1 -0
  74. package/node_modules/@contora/state-core/dist/sourceMetadata.js +27 -0
  75. package/node_modules/@contora/state-core/dist/state-builder/buildFromScan.d.ts +5 -0
  76. package/node_modules/@contora/state-core/dist/state-builder/buildFromScan.d.ts.map +1 -0
  77. package/node_modules/@contora/state-core/dist/state-builder/buildFromScan.js +33 -0
  78. package/node_modules/@contora/state-core/dist/state-builder/normalization.d.ts +5 -0
  79. package/node_modules/@contora/state-core/dist/state-builder/normalization.d.ts.map +1 -0
  80. package/node_modules/@contora/state-core/dist/state-builder/normalization.js +107 -0
  81. package/node_modules/@contora/state-core/dist/state-builder/rebuildFromScan.d.ts +4 -0
  82. package/node_modules/@contora/state-core/dist/state-builder/rebuildFromScan.d.ts.map +1 -0
  83. package/node_modules/@contora/state-core/dist/state-builder/rebuildFromScan.js +22 -0
  84. package/node_modules/@contora/state-core/dist/state-builder/snapshot.d.ts +5 -0
  85. package/node_modules/@contora/state-core/dist/state-builder/snapshot.d.ts.map +1 -0
  86. package/node_modules/@contora/state-core/dist/state-builder/snapshot.js +53 -0
  87. package/node_modules/@contora/state-core/dist/state-builder/store.d.ts +7 -0
  88. package/node_modules/@contora/state-core/dist/state-builder/store.d.ts.map +1 -0
  89. package/node_modules/@contora/state-core/dist/state-builder/store.js +99 -0
  90. package/node_modules/@contora/state-core/dist/state-builder/types.d.ts +18 -0
  91. package/node_modules/@contora/state-core/dist/state-builder/types.d.ts.map +1 -0
  92. package/node_modules/@contora/state-core/dist/state-builder/types.js +20 -0
  93. package/node_modules/@contora/state-core/dist/types.d.ts +42 -0
  94. package/node_modules/@contora/state-core/dist/types.d.ts.map +1 -0
  95. package/node_modules/@contora/state-core/dist/types.js +3 -0
  96. package/node_modules/@contora/state-core/dist/understanding/buildUnderstanding.d.ts +22 -0
  97. package/node_modules/@contora/state-core/dist/understanding/buildUnderstanding.d.ts.map +1 -0
  98. package/node_modules/@contora/state-core/dist/understanding/buildUnderstanding.js +87 -0
  99. package/node_modules/@contora/state-core/dist/understanding/changeDetector.d.ts +7 -0
  100. package/node_modules/@contora/state-core/dist/understanding/changeDetector.d.ts.map +1 -0
  101. package/node_modules/@contora/state-core/dist/understanding/changeDetector.js +68 -0
  102. package/node_modules/@contora/state-core/dist/understanding/chpHandoff.d.ts +49 -0
  103. package/node_modules/@contora/state-core/dist/understanding/chpHandoff.d.ts.map +1 -0
  104. package/node_modules/@contora/state-core/dist/understanding/chpHandoff.js +214 -0
  105. package/node_modules/@contora/state-core/dist/understanding/extractor.d.ts +21 -0
  106. package/node_modules/@contora/state-core/dist/understanding/extractor.d.ts.map +1 -0
  107. package/node_modules/@contora/state-core/dist/understanding/extractor.js +173 -0
  108. package/node_modules/@contora/state-core/dist/understanding/formatCanonicalExport.d.ts +30 -0
  109. package/node_modules/@contora/state-core/dist/understanding/formatCanonicalExport.d.ts.map +1 -0
  110. package/node_modules/@contora/state-core/dist/understanding/formatCanonicalExport.js +363 -0
  111. package/node_modules/@contora/state-core/dist/understanding/formatHandoff.d.ts +20 -0
  112. package/node_modules/@contora/state-core/dist/understanding/formatHandoff.d.ts.map +1 -0
  113. package/node_modules/@contora/state-core/dist/understanding/formatHandoff.js +57 -0
  114. package/node_modules/@contora/state-core/dist/understanding/graphBuilder.d.ts +9 -0
  115. package/node_modules/@contora/state-core/dist/understanding/graphBuilder.d.ts.map +1 -0
  116. package/node_modules/@contora/state-core/dist/understanding/graphBuilder.js +107 -0
  117. package/node_modules/@contora/state-core/dist/understanding/handoffBuilder.d.ts +12 -0
  118. package/node_modules/@contora/state-core/dist/understanding/handoffBuilder.d.ts.map +1 -0
  119. package/node_modules/@contora/state-core/dist/understanding/handoffBuilder.js +101 -0
  120. package/node_modules/@contora/state-core/dist/understanding/impactAnalyzer.d.ts +5 -0
  121. package/node_modules/@contora/state-core/dist/understanding/impactAnalyzer.d.ts.map +1 -0
  122. package/node_modules/@contora/state-core/dist/understanding/impactAnalyzer.js +58 -0
  123. package/node_modules/@contora/state-core/dist/understanding/intentFusion.d.ts +9 -0
  124. package/node_modules/@contora/state-core/dist/understanding/intentFusion.d.ts.map +1 -0
  125. package/node_modules/@contora/state-core/dist/understanding/intentFusion.js +54 -0
  126. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/closureConstants.d.ts +24 -0
  127. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/closureConstants.d.ts.map +1 -0
  128. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/closureConstants.js +33 -0
  129. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/confidence.d.ts +20 -0
  130. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/confidence.d.ts.map +1 -0
  131. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/confidence.js +53 -0
  132. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/gitFrequency.d.ts +5 -0
  133. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/gitFrequency.d.ts.map +1 -0
  134. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/gitFrequency.js +19 -0
  135. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/hotspotBuilder.d.ts +13 -0
  136. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/hotspotBuilder.d.ts.map +1 -0
  137. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/hotspotBuilder.js +101 -0
  138. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/intentFunctionMapper.d.ts +22 -0
  139. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/intentFunctionMapper.d.ts.map +1 -0
  140. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/intentFunctionMapper.js +106 -0
  141. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/knowledgeGraphBuilder.d.ts +23 -0
  142. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/knowledgeGraphBuilder.d.ts.map +1 -0
  143. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/knowledgeGraphBuilder.js +415 -0
  144. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/normalize.d.ts +11 -0
  145. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/normalize.d.ts.map +1 -0
  146. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/normalize.js +136 -0
  147. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/rebuildTrigger.d.ts +13 -0
  148. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/rebuildTrigger.d.ts.map +1 -0
  149. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/rebuildTrigger.js +34 -0
  150. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/snapshotBuilder.d.ts +17 -0
  151. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/snapshotBuilder.d.ts.map +1 -0
  152. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/snapshotBuilder.js +73 -0
  153. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/store.d.ts +7 -0
  154. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/store.d.ts.map +1 -0
  155. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/store.js +127 -0
  156. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/types.d.ts +116 -0
  157. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/types.d.ts.map +1 -0
  158. package/node_modules/@contora/state-core/dist/understanding/knowledgeGraph/types.js +6 -0
  159. package/node_modules/@contora/state-core/dist/understanding/miniGraph.d.ts +4 -0
  160. package/node_modules/@contora/state-core/dist/understanding/miniGraph.d.ts.map +1 -0
  161. package/node_modules/@contora/state-core/dist/understanding/miniGraph.js +18 -0
  162. package/node_modules/@contora/state-core/dist/understanding/store.d.ts +24 -0
  163. package/node_modules/@contora/state-core/dist/understanding/store.d.ts.map +1 -0
  164. package/node_modules/@contora/state-core/dist/understanding/store.js +243 -0
  165. package/node_modules/@contora/state-core/dist/understanding/symbolValidator.d.ts +9 -0
  166. package/node_modules/@contora/state-core/dist/understanding/symbolValidator.d.ts.map +1 -0
  167. package/node_modules/@contora/state-core/dist/understanding/symbolValidator.js +51 -0
  168. package/node_modules/@contora/state-core/dist/understanding/timelineTracker.d.ts +3 -0
  169. package/node_modules/@contora/state-core/dist/understanding/timelineTracker.d.ts.map +1 -0
  170. package/node_modules/@contora/state-core/dist/understanding/timelineTracker.js +129 -0
  171. package/node_modules/@contora/state-core/dist/understanding/treeSitterParser.d.ts +24 -0
  172. package/node_modules/@contora/state-core/dist/understanding/treeSitterParser.d.ts.map +1 -0
  173. package/node_modules/@contora/state-core/dist/understanding/treeSitterParser.js +56 -0
  174. package/node_modules/@contora/state-core/dist/understanding/types.d.ts +136 -0
  175. package/node_modules/@contora/state-core/dist/understanding/types.d.ts.map +1 -0
  176. package/node_modules/@contora/state-core/dist/understanding/types.js +5 -0
  177. package/node_modules/@contora/state-core/dist/understanding/understandingGraphBuilder.d.ts +23 -0
  178. package/node_modules/@contora/state-core/dist/understanding/understandingGraphBuilder.d.ts.map +1 -0
  179. package/node_modules/@contora/state-core/dist/understanding/understandingGraphBuilder.js +67 -0
  180. package/node_modules/@contora/state-core/dist/version.d.ts +3 -0
  181. package/node_modules/@contora/state-core/dist/version.d.ts.map +1 -0
  182. package/node_modules/@contora/state-core/dist/version.js +21 -0
  183. package/node_modules/@contora/state-core/dist/workspaceScanner.d.ts +4 -0
  184. package/node_modules/@contora/state-core/dist/workspaceScanner.d.ts.map +1 -0
  185. package/node_modules/@contora/state-core/dist/workspaceScanner.js +112 -0
  186. package/node_modules/@contora/state-core/package.json +49 -0
  187. package/package.json +61 -0
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatProjectSnapshotMarkdown = formatProjectSnapshotMarkdown;
4
+ exports.projectSnapshotBulletLines = projectSnapshotBulletLines;
5
+ function section(title, items, empty = '(none yet)') {
6
+ const lines = [title + ':'];
7
+ if (!items.length) {
8
+ lines.push(empty);
9
+ return lines;
10
+ }
11
+ for (const item of items) {
12
+ lines.push(`- ${item}`);
13
+ }
14
+ return lines;
15
+ }
16
+ /** Human-readable PROJECT SNAPSHOT — shared by IDE, MCP, and CLI. */
17
+ function formatProjectSnapshotMarkdown(state) {
18
+ const lines = ['PROJECT SNAPSHOT', ''];
19
+ lines.push('Goal:');
20
+ lines.push(state.project_goal.trim() ||
21
+ '(not inferred from events yet — add README or continue editing)');
22
+ lines.push('');
23
+ lines.push('Current Stage:');
24
+ lines.push(state.current_stage.trim() || '(undetermined)');
25
+ lines.push('');
26
+ lines.push(...section('Active Modules', state.active_modules));
27
+ lines.push('');
28
+ lines.push(...section('Recent Decisions', state.recent_decisions));
29
+ lines.push('');
30
+ lines.push(...section('Open Problems', state.open_problems));
31
+ lines.push('');
32
+ lines.push(...section('Completed Milestones', state.completed_milestones));
33
+ lines.push('');
34
+ lines.push(...section('Next Actions', state.next_actions));
35
+ lines.push('');
36
+ return lines.join('\n');
37
+ }
38
+ function projectSnapshotBulletLines(state) {
39
+ const out = [];
40
+ if (state.project_goal) {
41
+ out.push(`Goal: ${state.project_goal}`);
42
+ }
43
+ if (state.current_stage) {
44
+ out.push(`Stage: ${state.current_stage}`);
45
+ }
46
+ for (const p of state.open_problems.slice(0, 2)) {
47
+ out.push(`Problem: ${p}`);
48
+ }
49
+ for (const a of state.next_actions.slice(0, 2)) {
50
+ out.push(`Next: ${a}`);
51
+ }
52
+ return out;
53
+ }
@@ -0,0 +1,7 @@
1
+ import { type ProjectBuiltState } from './types.js';
2
+ export declare function builderDir(workspaceRoot: string): string;
3
+ export declare function parseProjectBuiltState(raw: unknown): ProjectBuiltState | undefined;
4
+ export declare function readProjectBuiltState(workspaceRoot: string): Promise<ProjectBuiltState | undefined>;
5
+ export declare function readProjectSnapshotMarkdown(workspaceRoot: string): Promise<string | undefined>;
6
+ export declare function writeProjectBuiltState(workspaceRoot: string, built: ProjectBuiltState, snapshotMarkdown?: string): Promise<void>;
7
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state-builder/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+B,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIjF,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAwBlF;AAED,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAOzG;AAED,wBAAsB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAOpG;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,iBAAiB,EACxB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.builderDir = builderDir;
37
+ exports.parseProjectBuiltState = parseProjectBuiltState;
38
+ exports.readProjectBuiltState = readProjectBuiltState;
39
+ exports.readProjectSnapshotMarkdown = readProjectSnapshotMarkdown;
40
+ exports.writeProjectBuiltState = writeProjectBuiltState;
41
+ const fs = __importStar(require("node:fs/promises"));
42
+ const path = __importStar(require("node:path"));
43
+ const snapshot_js_1 = require("./snapshot.js");
44
+ const types_js_1 = require("./types.js");
45
+ const BUILDER_REL = ['.contora', 'state-builder'];
46
+ function builderDir(workspaceRoot) {
47
+ return path.join(workspaceRoot, ...BUILDER_REL);
48
+ }
49
+ function parseProjectBuiltState(raw) {
50
+ if (!raw || typeof raw !== 'object') {
51
+ return undefined;
52
+ }
53
+ const o = raw;
54
+ if (o.version !== types_js_1.PROJECT_BUILT_STATE_VERSION) {
55
+ return undefined;
56
+ }
57
+ const strList = (v) => Array.isArray(v) ? v.filter((x) => typeof x === 'string') : [];
58
+ return {
59
+ version: types_js_1.PROJECT_BUILT_STATE_VERSION,
60
+ generatedAt: typeof o.generatedAt === 'number' ? o.generatedAt : Date.now(),
61
+ task_anchor: typeof o.task_anchor === 'string' ? o.task_anchor : undefined,
62
+ engine_version: typeof o.engine_version === 'number' ? o.engine_version : undefined,
63
+ project_goal: typeof o.project_goal === 'string' ? o.project_goal : '',
64
+ current_stage: typeof o.current_stage === 'string' ? o.current_stage : '',
65
+ active_modules: strList(o.active_modules),
66
+ recent_decisions: strList(o.recent_decisions),
67
+ open_problems: strList(o.open_problems),
68
+ completed_milestones: strList(o.completed_milestones),
69
+ next_actions: strList(o.next_actions),
70
+ confidence: typeof o.confidence === 'number' ? o.confidence : 0,
71
+ };
72
+ }
73
+ async function readProjectBuiltState(workspaceRoot) {
74
+ try {
75
+ const text = await fs.readFile(path.join(builderDir(workspaceRoot), 'project-state.json'), 'utf8');
76
+ return parseProjectBuiltState(JSON.parse(text));
77
+ }
78
+ catch {
79
+ return undefined;
80
+ }
81
+ }
82
+ async function readProjectSnapshotMarkdown(workspaceRoot) {
83
+ try {
84
+ const text = (await fs.readFile(path.join(builderDir(workspaceRoot), 'project-snapshot.md'), 'utf8')).trim();
85
+ return text.length ? text : undefined;
86
+ }
87
+ catch {
88
+ return undefined;
89
+ }
90
+ }
91
+ async function writeProjectBuiltState(workspaceRoot, built, snapshotMarkdown) {
92
+ const dir = builderDir(workspaceRoot);
93
+ await fs.mkdir(dir, { recursive: true });
94
+ const md = snapshotMarkdown ?? (0, snapshot_js_1.formatProjectSnapshotMarkdown)(built);
95
+ await Promise.all([
96
+ fs.writeFile(path.join(dir, 'project-state.json'), JSON.stringify(built, null, 2), 'utf8'),
97
+ fs.writeFile(path.join(dir, 'project-snapshot.md'), md, 'utf8'),
98
+ ]);
99
+ }
@@ -0,0 +1,18 @@
1
+ /** State Builder — AI-agnostic project state (`.contora/state-builder/project-state.json`). */
2
+ export interface ProjectBuiltState {
3
+ version: 1;
4
+ engine_version?: number;
5
+ generatedAt: number;
6
+ task_anchor?: string;
7
+ project_goal: string;
8
+ current_stage: string;
9
+ active_modules: string[];
10
+ recent_decisions: string[];
11
+ open_problems: string[];
12
+ completed_milestones: string[];
13
+ next_actions: string[];
14
+ confidence: number;
15
+ }
16
+ export declare const PROJECT_BUILT_STATE_VERSION: 1;
17
+ export declare function emptyProjectBuiltState(now?: number): ProjectBuiltState;
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/state-builder/types.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAE/F,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,2BAA2B,EAAG,CAAU,CAAC;AAEtD,wBAAgB,sBAAsB,CAAC,GAAG,SAAa,GAAG,iBAAiB,CAa1E"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /** State Builder — AI-agnostic project state (`.contora/state-builder/project-state.json`). */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PROJECT_BUILT_STATE_VERSION = void 0;
5
+ exports.emptyProjectBuiltState = emptyProjectBuiltState;
6
+ exports.PROJECT_BUILT_STATE_VERSION = 1;
7
+ function emptyProjectBuiltState(now = Date.now()) {
8
+ return {
9
+ version: exports.PROJECT_BUILT_STATE_VERSION,
10
+ generatedAt: now,
11
+ project_goal: '',
12
+ current_stage: '',
13
+ active_modules: [],
14
+ recent_decisions: [],
15
+ open_problems: [],
16
+ completed_milestones: [],
17
+ next_actions: [],
18
+ confidence: 0,
19
+ };
20
+ }
@@ -0,0 +1,42 @@
1
+ /** Tool-agnostic workspace facts (filesystem is source of truth). */
2
+ export type StateEngineMode = 'event-driven' | 'scan-driven' | 'merged';
3
+ export type AdapterKind = 'ide' | 'mcp' | 'cli';
4
+ export interface StateSourceMetadata {
5
+ mode: StateEngineMode;
6
+ lastWriter: AdapterKind;
7
+ /** ISO-8601 timestamp */
8
+ lastUpdated: string;
9
+ }
10
+ export interface WorkspaceScanFacts {
11
+ workspaceRoot: string;
12
+ scannedAt: number;
13
+ topLevelModules: string[];
14
+ recentFiles: string[];
15
+ gitStaged: string[];
16
+ gitWorking: string[];
17
+ readmeHint?: string;
18
+ isGitRepo: boolean;
19
+ }
20
+ /** Minimal state.json shape — backward compatible; `source` is v2.2 additive. */
21
+ export interface BootstrapStateJson {
22
+ sessionId: string;
23
+ currentTask: string;
24
+ openFiles: string[];
25
+ recentFiles: string[];
26
+ gitStaged: string[];
27
+ gitWorking: string[];
28
+ notes: string;
29
+ lastUpdated: number;
30
+ source?: StateSourceMetadata;
31
+ }
32
+ export interface DualModeInput {
33
+ mode: StateEngineMode;
34
+ state: BootstrapStateJson;
35
+ eventCount: number;
36
+ scan?: WorkspaceScanFacts;
37
+ }
38
+ export interface WriteStateOptions {
39
+ mode: StateEngineMode;
40
+ writer: AdapterKind;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,QAAQ,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,WAAW,CAAC;IACxB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ /** Tool-agnostic workspace facts (filesystem is source of truth). */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,22 @@
1
+ import type { BootstrapStateJson, WorkspaceScanFacts } from '../types.js';
2
+ import type { ProjectBuiltState } from '../state-builder/types.js';
3
+ import type { ProjectKnowledgeGraph } from './knowledgeGraph/types.js';
4
+ import type { ChangeArtifact, HandoffArtifact, ProjectGraph, ProjectTimeline } from './types.js';
5
+ export interface UnderstandingBuildInput {
6
+ workspaceRoot: string;
7
+ state?: BootstrapStateJson;
8
+ built?: ProjectBuiltState | null;
9
+ scan?: WorkspaceScanFacts;
10
+ extraChangedPaths?: string[];
11
+ }
12
+ export interface UnderstandingBuildResult {
13
+ graph: ProjectGraph;
14
+ change: ChangeArtifact;
15
+ handoff: HandoffArtifact;
16
+ timeline: ProjectTimeline;
17
+ knowledge: ProjectKnowledgeGraph;
18
+ }
19
+ export declare function buildUnderstandingArtifacts(input: UnderstandingBuildInput): Promise<UnderstandingBuildResult | undefined>;
20
+ /** Build and persist V3.1 understanding artifacts (graph + change + handoff + timeline). */
21
+ export declare function buildAndWriteUnderstandingArtifacts(input: UnderstandingBuildInput): Promise<UnderstandingBuildResult | undefined>;
22
+ //# sourceMappingURL=buildUnderstanding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildUnderstanding.d.ts","sourceRoot":"","sources":["../../src/understanding/buildUnderstanding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAWnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAMvE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CA2D/C;AAED,4FAA4F;AAC5F,wBAAsB,mCAAmC,CACvD,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAe/C"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildUnderstandingArtifacts = buildUnderstandingArtifacts;
4
+ exports.buildAndWriteUnderstandingArtifacts = buildAndWriteUnderstandingArtifacts;
5
+ const store_js_1 = require("../state-builder/store.js");
6
+ const bootstrapState_js_1 = require("../bootstrap/bootstrapState.js");
7
+ const changeDetector_js_1 = require("./changeDetector.js");
8
+ const graphBuilder_js_1 = require("./graphBuilder.js");
9
+ const impactAnalyzer_js_1 = require("./impactAnalyzer.js");
10
+ const intentFusion_js_1 = require("./intentFusion.js");
11
+ const handoffBuilder_js_1 = require("./handoffBuilder.js");
12
+ const timelineTracker_js_1 = require("./timelineTracker.js");
13
+ const gitFrequency_js_1 = require("./knowledgeGraph/gitFrequency.js");
14
+ const knowledgeGraphBuilder_js_1 = require("./knowledgeGraph/knowledgeGraphBuilder.js");
15
+ const store_js_2 = require("./knowledgeGraph/store.js");
16
+ const rebuildTrigger_js_1 = require("./knowledgeGraph/rebuildTrigger.js");
17
+ const understandingGraphBuilder_js_1 = require("./understandingGraphBuilder.js");
18
+ const store_js_3 = require("./store.js");
19
+ const version_js_1 = require("../version.js");
20
+ async function buildUnderstandingArtifacts(input) {
21
+ const root = input.workspaceRoot;
22
+ const state = input.state ?? (await (0, bootstrapState_js_1.readStateJson)(root));
23
+ if (!state) {
24
+ return undefined;
25
+ }
26
+ const changedFiles = await (0, changeDetector_js_1.resolveChangedFiles)(root, state, input.scan, input.extraChangedPaths ?? []);
27
+ if (!changedFiles.length) {
28
+ return undefined;
29
+ }
30
+ const now = Date.now();
31
+ const built = input.built ?? (await (0, store_js_1.readProjectBuiltState)(root));
32
+ const { graph, extractions } = await (0, graphBuilder_js_1.buildChangeNeighborhoodGraph)(root, changedFiles, now);
33
+ const change = (0, graphBuilder_js_1.deriveChangeArtifact)(changedFiles, extractions, now);
34
+ const impact = (0, impactAnalyzer_js_1.analyzeImpact)(graph, change);
35
+ const intent = (0, intentFusion_js_1.fuseIntent)({ state, change, built });
36
+ const goal = built?.project_goal?.trim() || state.currentTask.trim();
37
+ const handoff = (0, handoffBuilder_js_1.buildHandoff)({ goal, intent, change, impact, graph, built, now });
38
+ const timeline = await (0, timelineTracker_js_1.buildProjectTimeline)(root, changedFiles, change, graph, now);
39
+ const editCounts = new Map();
40
+ for (const p of [...changedFiles, ...(input.extraChangedPaths ?? [])]) {
41
+ const k = p.replace(/\\/g, '/');
42
+ editCounts.set(k, (editCounts.get(k) ?? 0) + 1);
43
+ }
44
+ const gitFrequency = (0, gitFrequency_js_1.buildGitFrequency)(timeline, state);
45
+ const existing = await (0, store_js_2.readProjectKnowledgeGraph)(root);
46
+ const latestCommit = timeline.recent[0]?.commit;
47
+ const rebuildTrigger = (0, rebuildTrigger_js_1.resolveKnowledgeRebuildTrigger)({
48
+ changedFileCount: changedFiles.length,
49
+ intentChanged: goal !== (existing?.nodes.find((n) => n.type === 'intent')?.name ?? ''),
50
+ lastBuildAt: existing?.meta.generatedAt,
51
+ now,
52
+ hasNewCommit: !!latestCommit && latestCommit !== existing?.meta.lastCommitHash,
53
+ isInitial: !existing,
54
+ });
55
+ const knowledge = (0, knowledgeGraphBuilder_js_1.buildProjectKnowledgeGraph)({
56
+ graph,
57
+ change,
58
+ intent,
59
+ built,
60
+ goal,
61
+ workspaceRoot: root,
62
+ sourceVersion: (0, version_js_1.getContoriumPackageVersion)(),
63
+ now,
64
+ editCounts,
65
+ gitFrequency,
66
+ rebuildTrigger,
67
+ lastCommitHash: latestCommit,
68
+ });
69
+ return { graph, change, handoff, timeline, knowledge };
70
+ }
71
+ /** Build and persist V3.1 understanding artifacts (graph + change + handoff + timeline). */
72
+ async function buildAndWriteUnderstandingArtifacts(input) {
73
+ const result = await buildUnderstandingArtifacts(input);
74
+ if (!result) {
75
+ return undefined;
76
+ }
77
+ const understandingGraph = (0, understandingGraphBuilder_js_1.buildUnderstandingGraph)({
78
+ graph: result.graph,
79
+ change: result.change,
80
+ handoff: result.handoff,
81
+ agent: input.state?.source?.lastWriter ?? 'runtime',
82
+ now: Date.now(),
83
+ });
84
+ await (0, store_js_3.writeUnderstandingArtifacts)(input.workspaceRoot, { ...result, understandingGraph });
85
+ await (0, store_js_2.writeProjectKnowledgeGraph)(input.workspaceRoot, result.knowledge);
86
+ return result;
87
+ }
@@ -0,0 +1,7 @@
1
+ import type { BootstrapStateJson, WorkspaceScanFacts } from '../types.js';
2
+ /** Collect candidate changed files from state + optional scan facts. */
3
+ export declare function collectChangedFiles(state: BootstrapStateJson, extraPaths?: string[], max?: number): string[];
4
+ /** Git diff names (staged + unstaged vs HEAD) — best-effort. */
5
+ export declare function gitDiffChangedFiles(workspaceRoot: string, max?: number): Promise<string[]>;
6
+ export declare function resolveChangedFiles(workspaceRoot: string, state: BootstrapStateJson, scan?: WorkspaceScanFacts, extraPaths?: string[]): Promise<string[]>;
7
+ //# sourceMappingURL=changeDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeDetector.d.ts","sourceRoot":"","sources":["../../src/understanding/changeDetector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAuB1E,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,UAAU,GAAE,MAAM,EAAO,EACzB,GAAG,SAAK,GACP,MAAM,EAAE,CAQV;AAED,gEAAgE;AAChE,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB5F;AAED,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,kBAAkB,EACzB,IAAI,CAAC,EAAE,kBAAkB,EACzB,UAAU,GAAE,MAAM,EAAO,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectChangedFiles = collectChangedFiles;
4
+ exports.gitDiffChangedFiles = gitDiffChangedFiles;
5
+ exports.resolveChangedFiles = resolveChangedFiles;
6
+ const node_child_process_1 = require("node:child_process");
7
+ const node_util_1 = require("node:util");
8
+ const extractor_js_1 = require("./extractor.js");
9
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
10
+ function norm(p) {
11
+ return p.replace(/\\/g, '/');
12
+ }
13
+ function uniqueCodeFiles(paths) {
14
+ const out = [];
15
+ const seen = new Set();
16
+ for (const p of paths) {
17
+ const n = norm(p);
18
+ if (!n || seen.has(n) || !(0, extractor_js_1.isCodeFile)(n)) {
19
+ continue;
20
+ }
21
+ seen.add(n);
22
+ out.push(n);
23
+ }
24
+ return out;
25
+ }
26
+ /** Collect candidate changed files from state + optional scan facts. */
27
+ function collectChangedFiles(state, extraPaths = [], max = 32) {
28
+ const merged = [
29
+ ...state.gitStaged,
30
+ ...state.gitWorking,
31
+ ...state.recentFiles.slice(0, 16),
32
+ ...extraPaths,
33
+ ];
34
+ return uniqueCodeFiles(merged).slice(0, max);
35
+ }
36
+ /** Git diff names (staged + unstaged vs HEAD) — best-effort. */
37
+ async function gitDiffChangedFiles(workspaceRoot, max = 32) {
38
+ try {
39
+ const { stdout: unstaged } = await execFileAsync('git', ['-C', workspaceRoot, 'diff', '--name-only', 'HEAD'], { timeout: 12_000, maxBuffer: 2 * 1024 * 1024 });
40
+ const { stdout: staged } = await execFileAsync('git', ['-C', workspaceRoot, 'diff', '--name-only', '--cached', 'HEAD'], { timeout: 12_000, maxBuffer: 2 * 1024 * 1024 });
41
+ const all = [...unstaged.split('\n'), ...staged.split('\n')].map((l) => l.trim()).filter(Boolean);
42
+ return uniqueCodeFiles(all).slice(0, max);
43
+ }
44
+ catch {
45
+ return [];
46
+ }
47
+ }
48
+ async function resolveChangedFiles(workspaceRoot, state, scan, extraPaths = []) {
49
+ const fromGit = await gitDiffChangedFiles(workspaceRoot);
50
+ const fromState = collectChangedFiles(state, extraPaths);
51
+ const fromScan = scan
52
+ ? uniqueCodeFiles([...scan.gitStaged, ...scan.gitWorking, ...scan.recentFiles.slice(0, 12)])
53
+ : [];
54
+ const merged = [...fromGit, ...fromState, ...fromScan];
55
+ const seen = new Set();
56
+ const out = [];
57
+ for (const f of merged) {
58
+ if (seen.has(f)) {
59
+ continue;
60
+ }
61
+ seen.add(f);
62
+ out.push(f);
63
+ if (out.length >= 32) {
64
+ break;
65
+ }
66
+ }
67
+ return out;
68
+ }
@@ -0,0 +1,49 @@
1
+ import type { AdapterKind } from '../types.js';
2
+ import type { ChangeArtifact, HandoffArtifact, KeyChange, ProjectTimeline } from './types.js';
3
+ /** Contorium Handoff Protocol v1 — shared AI state shape. */
4
+ export declare const CHP_VERSION: 1;
5
+ export interface ChpRecentChange {
6
+ type: 'function_update' | 'class_update' | 'file_update';
7
+ name: string;
8
+ file?: string;
9
+ timestamp?: string;
10
+ change_type?: KeyChange['change_type'];
11
+ }
12
+ export interface ChpAgentContext {
13
+ active_agent: string;
14
+ last_action: string;
15
+ }
16
+ export interface ChpHandoffState {
17
+ version: typeof CHP_VERSION;
18
+ project: string;
19
+ workspace_root: string;
20
+ current_task: string;
21
+ goal: string;
22
+ recent_changes: ChpRecentChange[];
23
+ agent_context: ChpAgentContext;
24
+ summary: string;
25
+ last_updated: string;
26
+ }
27
+ export type ChpHandoffFormat = 'json' | 'markdown' | 'compact';
28
+ export interface BuildChpHandoffInput {
29
+ workspaceRoot: string;
30
+ handoff?: HandoffArtifact | null;
31
+ change?: ChangeArtifact | null;
32
+ currentTask?: string;
33
+ lastWriter?: AdapterKind | string;
34
+ }
35
+ /** Build CHP v1 from in-memory runtime slices (sync — dashboard / IDE status bar). */
36
+ export declare function buildChpHandoffStateSync(input: BuildChpHandoffInput): ChpHandoffState | null;
37
+ /** Build CHP v1 state from runtime artifacts (single read model). */
38
+ export declare function buildChpHandoffState(input: BuildChpHandoffInput): Promise<ChpHandoffState | null>;
39
+ /** CHP compact one-liner for Passive CLI / IDE status bar. */
40
+ export declare function formatChpCompact(state: ChpHandoffState, filter?: string): string;
41
+ /** CHP markdown — AI chat injection (wraps V3.1 handoff block when available). */
42
+ export declare function formatChpMarkdown(chp: ChpHandoffState, handoff?: HandoffArtifact | null, timeline?: ProjectTimeline): string;
43
+ /** Unified get_handoff — read runtime artifacts and format. */
44
+ export declare function getProjectHandoff(workspaceRoot: string, format?: ChpHandoffFormat, filter?: string): Promise<{
45
+ found: boolean;
46
+ text?: string;
47
+ state?: ChpHandoffState;
48
+ }>;
49
+ //# sourceMappingURL=chpHandoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chpHandoff.d.ts","sourceRoot":"","sources":["../../src/understanding/chpHandoff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9F,6DAA6D;AAC7D,eAAO,MAAM,WAAW,EAAG,CAAU,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,WAAW,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,aAAa,EAAE,eAAe,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CACnC;AA6CD,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,GAAG,IAAI,CAmC5F;AAED,qEAAqE;AACrE,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAejC;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhF;AASD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,EACpB,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,eAAe,GACzB,MAAM,CAoCR;AAED,+DAA+D;AAC/D,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,gBAA4B,EACpC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CAiCrE"}