twining-mcp 1.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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/dist/config.d.ts +8 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +78 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/dashboard/api-routes.d.ts +21 -0
  8. package/dist/dashboard/api-routes.d.ts.map +1 -0
  9. package/dist/dashboard/api-routes.js +516 -0
  10. package/dist/dashboard/api-routes.js.map +1 -0
  11. package/dist/dashboard/dashboard-config.d.ts +19 -0
  12. package/dist/dashboard/dashboard-config.d.ts.map +1 -0
  13. package/dist/dashboard/dashboard-config.js +17 -0
  14. package/dist/dashboard/dashboard-config.js.map +1 -0
  15. package/dist/dashboard/http-server.d.ts +29 -0
  16. package/dist/dashboard/http-server.d.ts.map +1 -0
  17. package/dist/dashboard/http-server.js +177 -0
  18. package/dist/dashboard/http-server.js.map +1 -0
  19. package/dist/dashboard/public/app.js +2396 -0
  20. package/dist/dashboard/public/assets/favicon.svg +44 -0
  21. package/dist/dashboard/public/assets/icon-512.png +0 -0
  22. package/dist/dashboard/public/assets/logo.svg +45 -0
  23. package/dist/dashboard/public/favicon.ico +0 -0
  24. package/dist/dashboard/public/index.html +338 -0
  25. package/dist/dashboard/public/style.css +858 -0
  26. package/dist/dashboard/public/vendor/cytoscape.min.js +1 -0
  27. package/dist/dashboard/public/vendor/vis-timeline-graph2d.min.css +2 -0
  28. package/dist/dashboard/public/vendor/vis-timeline-graph2d.min.js +48 -0
  29. package/dist/embeddings/embedder.d.ts +24 -0
  30. package/dist/embeddings/embedder.d.ts.map +1 -0
  31. package/dist/embeddings/embedder.js +109 -0
  32. package/dist/embeddings/embedder.js.map +1 -0
  33. package/dist/embeddings/index-manager.d.ts +27 -0
  34. package/dist/embeddings/index-manager.d.ts.map +1 -0
  35. package/dist/embeddings/index-manager.js +115 -0
  36. package/dist/embeddings/index-manager.js.map +1 -0
  37. package/dist/embeddings/search.d.ts +52 -0
  38. package/dist/embeddings/search.d.ts.map +1 -0
  39. package/dist/embeddings/search.js +170 -0
  40. package/dist/embeddings/search.js.map +1 -0
  41. package/dist/engine/archiver.d.ts +28 -0
  42. package/dist/engine/archiver.d.ts.map +1 -0
  43. package/dist/engine/archiver.js +153 -0
  44. package/dist/engine/archiver.js.map +1 -0
  45. package/dist/engine/blackboard.d.ts +55 -0
  46. package/dist/engine/blackboard.d.ts.map +1 -0
  47. package/dist/engine/blackboard.js +90 -0
  48. package/dist/engine/blackboard.js.map +1 -0
  49. package/dist/engine/context-assembler.d.ts +50 -0
  50. package/dist/engine/context-assembler.d.ts.map +1 -0
  51. package/dist/engine/context-assembler.js +483 -0
  52. package/dist/engine/context-assembler.js.map +1 -0
  53. package/dist/engine/coordination.d.ts +53 -0
  54. package/dist/engine/coordination.d.ts.map +1 -0
  55. package/dist/engine/coordination.js +239 -0
  56. package/dist/engine/coordination.js.map +1 -0
  57. package/dist/engine/decisions.d.ts +147 -0
  58. package/dist/engine/decisions.d.ts.map +1 -0
  59. package/dist/engine/decisions.js +540 -0
  60. package/dist/engine/decisions.js.map +1 -0
  61. package/dist/engine/exporter.d.ts +30 -0
  62. package/dist/engine/exporter.d.ts.map +1 -0
  63. package/dist/engine/exporter.js +192 -0
  64. package/dist/engine/exporter.js.map +1 -0
  65. package/dist/engine/graph.d.ts +55 -0
  66. package/dist/engine/graph.d.ts.map +1 -0
  67. package/dist/engine/graph.js +119 -0
  68. package/dist/engine/graph.js.map +1 -0
  69. package/dist/engine/planning-bridge.d.ts +53 -0
  70. package/dist/engine/planning-bridge.d.ts.map +1 -0
  71. package/dist/engine/planning-bridge.js +170 -0
  72. package/dist/engine/planning-bridge.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +32 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/server.d.ts +7 -0
  78. package/dist/server.d.ts.map +1 -0
  79. package/dist/server.js +82 -0
  80. package/dist/server.js.map +1 -0
  81. package/dist/storage/agent-store.d.ts +36 -0
  82. package/dist/storage/agent-store.d.ts.map +1 -0
  83. package/dist/storage/agent-store.js +119 -0
  84. package/dist/storage/agent-store.js.map +1 -0
  85. package/dist/storage/blackboard-store.d.ts +21 -0
  86. package/dist/storage/blackboard-store.d.ts.map +1 -0
  87. package/dist/storage/blackboard-store.js +56 -0
  88. package/dist/storage/blackboard-store.js.map +1 -0
  89. package/dist/storage/decision-store.d.ts +23 -0
  90. package/dist/storage/decision-store.d.ts.map +1 -0
  91. package/dist/storage/decision-store.js +179 -0
  92. package/dist/storage/decision-store.js.map +1 -0
  93. package/dist/storage/file-store.d.ts +20 -0
  94. package/dist/storage/file-store.d.ts.map +1 -0
  95. package/dist/storage/file-store.js +108 -0
  96. package/dist/storage/file-store.js.map +1 -0
  97. package/dist/storage/graph-store.d.ts +39 -0
  98. package/dist/storage/graph-store.d.ts.map +1 -0
  99. package/dist/storage/graph-store.js +143 -0
  100. package/dist/storage/graph-store.js.map +1 -0
  101. package/dist/storage/handoff-store.d.ts +44 -0
  102. package/dist/storage/handoff-store.d.ts.map +1 -0
  103. package/dist/storage/handoff-store.js +136 -0
  104. package/dist/storage/handoff-store.js.map +1 -0
  105. package/dist/storage/init.d.ts +10 -0
  106. package/dist/storage/init.d.ts.map +1 -0
  107. package/dist/storage/init.js +48 -0
  108. package/dist/storage/init.js.map +1 -0
  109. package/dist/tools/blackboard-tools.d.ts +4 -0
  110. package/dist/tools/blackboard-tools.d.ts.map +1 -0
  111. package/dist/tools/blackboard-tools.js +131 -0
  112. package/dist/tools/blackboard-tools.js.map +1 -0
  113. package/dist/tools/context-tools.d.ts +4 -0
  114. package/dist/tools/context-tools.d.ts.map +1 -0
  115. package/dist/tools/context-tools.js +76 -0
  116. package/dist/tools/context-tools.js.map +1 -0
  117. package/dist/tools/coordination-tools.d.ts +6 -0
  118. package/dist/tools/coordination-tools.d.ts.map +1 -0
  119. package/dist/tools/coordination-tools.js +220 -0
  120. package/dist/tools/coordination-tools.js.map +1 -0
  121. package/dist/tools/decision-tools.d.ts +4 -0
  122. package/dist/tools/decision-tools.d.ts.map +1 -0
  123. package/dist/tools/decision-tools.js +265 -0
  124. package/dist/tools/decision-tools.js.map +1 -0
  125. package/dist/tools/export-tools.d.ts +4 -0
  126. package/dist/tools/export-tools.d.ts.map +1 -0
  127. package/dist/tools/export-tools.js +30 -0
  128. package/dist/tools/export-tools.js.map +1 -0
  129. package/dist/tools/graph-tools.d.ts +4 -0
  130. package/dist/tools/graph-tools.d.ts.map +1 -0
  131. package/dist/tools/graph-tools.js +127 -0
  132. package/dist/tools/graph-tools.js.map +1 -0
  133. package/dist/tools/lifecycle-tools.d.ts +9 -0
  134. package/dist/tools/lifecycle-tools.d.ts.map +1 -0
  135. package/dist/tools/lifecycle-tools.js +142 -0
  136. package/dist/tools/lifecycle-tools.js.map +1 -0
  137. package/dist/utils/errors.d.ts +24 -0
  138. package/dist/utils/errors.d.ts.map +1 -0
  139. package/dist/utils/errors.js +31 -0
  140. package/dist/utils/errors.js.map +1 -0
  141. package/dist/utils/ids.d.ts +2 -0
  142. package/dist/utils/ids.d.ts.map +1 -0
  143. package/dist/utils/ids.js +10 -0
  144. package/dist/utils/ids.js.map +1 -0
  145. package/dist/utils/liveness.d.ts +14 -0
  146. package/dist/utils/liveness.d.ts.map +1 -0
  147. package/dist/utils/liveness.js +19 -0
  148. package/dist/utils/liveness.js.map +1 -0
  149. package/dist/utils/tags.d.ts +9 -0
  150. package/dist/utils/tags.d.ts.map +1 -0
  151. package/dist/utils/tags.js +12 -0
  152. package/dist/utils/tags.js.map +1 -0
  153. package/dist/utils/tokens.d.ts +6 -0
  154. package/dist/utils/tokens.d.ts.map +1 -0
  155. package/dist/utils/tokens.js +8 -0
  156. package/dist/utils/tokens.js.map +1 -0
  157. package/dist/utils/types.d.ts +308 -0
  158. package/dist/utils/types.d.ts.map +1 -0
  159. package/dist/utils/types.js +18 -0
  160. package/dist/utils/types.js.map +1 -0
  161. package/package.json +60 -0
  162. package/src/dashboard/public/app.js +2396 -0
  163. package/src/dashboard/public/assets/favicon.svg +44 -0
  164. package/src/dashboard/public/assets/icon-512.png +0 -0
  165. package/src/dashboard/public/assets/logo.svg +45 -0
  166. package/src/dashboard/public/favicon.ico +0 -0
  167. package/src/dashboard/public/index.html +338 -0
  168. package/src/dashboard/public/style.css +858 -0
  169. package/src/dashboard/public/vendor/cytoscape.min.js +1 -0
  170. package/src/dashboard/public/vendor/vis-timeline-graph2d.min.css +2 -0
  171. package/src/dashboard/public/vendor/vis-timeline-graph2d.min.js +48 -0
@@ -0,0 +1,239 @@
1
+ import { computeLiveness, DEFAULT_LIVENESS_THRESHOLDS, } from "../utils/liveness.js";
2
+ import { normalizeTags } from "../utils/tags.js";
3
+ /** Map liveness state to a numeric score. */
4
+ function livenessToScore(liveness) {
5
+ switch (liveness) {
6
+ case "active":
7
+ return 1.0;
8
+ case "idle":
9
+ return 0.5;
10
+ case "gone":
11
+ return 0.1;
12
+ }
13
+ }
14
+ /**
15
+ * Score an agent against required capabilities and liveness.
16
+ * Pure function — no side effects, fully testable in isolation.
17
+ *
18
+ * Weighting: 70% capability overlap + 30% liveness score.
19
+ */
20
+ export function scoreAgent(agent, requiredCapabilities, livenessThresholds, now = new Date()) {
21
+ // Normalize required capabilities for case-insensitive matching
22
+ const normalizedRequired = normalizeTags(requiredCapabilities);
23
+ // Find matched capabilities
24
+ const matched = agent.capabilities.filter((cap) => normalizedRequired.includes(cap));
25
+ // Compute capability overlap: matched / required, or 0 if no requirements
26
+ const capability_overlap = normalizedRequired.length > 0 ? matched.length / normalizedRequired.length : 0;
27
+ // Compute liveness
28
+ const liveness = computeLiveness(agent.last_active, now, livenessThresholds);
29
+ const liveness_score = livenessToScore(liveness);
30
+ // Weighted total: 70% capability + 30% liveness
31
+ const total_score = capability_overlap * 0.7 + liveness_score * 0.3;
32
+ return {
33
+ agent_id: agent.agent_id,
34
+ capabilities: agent.capabilities,
35
+ role: agent.role,
36
+ description: agent.description,
37
+ liveness,
38
+ capability_overlap,
39
+ liveness_score,
40
+ total_score,
41
+ matched_capabilities: matched,
42
+ };
43
+ }
44
+ /** Default timeout durations per urgency level. */
45
+ export const DELEGATION_TIMEOUTS = {
46
+ high: 300000, // 5 minutes
47
+ normal: 1800000, // 30 minutes
48
+ low: 14400000, // 4 hours
49
+ };
50
+ /**
51
+ * Parse delegation metadata from a blackboard entry's detail field.
52
+ * Returns null for non-delegation entries or malformed JSON.
53
+ */
54
+ export function parseDelegationMetadata(entry) {
55
+ if (!entry.detail)
56
+ return null;
57
+ try {
58
+ const parsed = JSON.parse(entry.detail);
59
+ if (parsed && parsed.type === "delegation") {
60
+ return parsed;
61
+ }
62
+ return null;
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ /**
69
+ * Check if a delegation has expired.
70
+ * Returns true when now >= expires_at (boundary inclusive).
71
+ */
72
+ export function isDelegationExpired(metadata, now = new Date()) {
73
+ return now.getTime() >= new Date(metadata.expires_at).getTime();
74
+ }
75
+ export class CoordinationEngine {
76
+ agentStore;
77
+ handoffStore;
78
+ blackboardEngine;
79
+ decisionStore;
80
+ blackboardStore;
81
+ config;
82
+ constructor(agentStore, handoffStore, blackboardEngine, decisionStore, blackboardStore, config) {
83
+ this.agentStore = agentStore;
84
+ this.handoffStore = handoffStore;
85
+ this.blackboardEngine = blackboardEngine;
86
+ this.decisionStore = decisionStore;
87
+ this.blackboardStore = blackboardStore;
88
+ this.config = config;
89
+ }
90
+ /** Discover and rank agents by capability match and liveness. */
91
+ async discover(input) {
92
+ const agents = await this.agentStore.getAll();
93
+ const thresholds = this.config.agents?.liveness ?? DEFAULT_LIVENESS_THRESHOLDS;
94
+ const now = new Date();
95
+ // Score each agent
96
+ let scores = agents.map((agent) => scoreAgent(agent, input.required_capabilities, thresholds, now));
97
+ // Filter: exclude gone agents if include_gone === false
98
+ if (input.include_gone === false) {
99
+ scores = scores.filter((s) => s.liveness !== "gone");
100
+ }
101
+ // Filter: exclude agents below min_score threshold
102
+ if (input.min_score !== undefined) {
103
+ scores = scores.filter((s) => s.total_score >= input.min_score);
104
+ }
105
+ // Sort by total_score descending
106
+ scores.sort((a, b) => b.total_score - a.total_score);
107
+ return {
108
+ agents: scores,
109
+ total_registered: agents.length,
110
+ };
111
+ }
112
+ /** Post a delegation request to the blackboard. */
113
+ async postDelegation(input) {
114
+ const now = new Date();
115
+ const urgency = input.urgency ?? "normal";
116
+ // Compute timeout: custom override > config > default constant
117
+ const urgencyKey = `${urgency}_ms`;
118
+ const configTimeout = this.config.delegations?.timeouts?.[urgencyKey];
119
+ const timeoutMs = input.timeout_ms ?? configTimeout ?? DELEGATION_TIMEOUTS[urgency];
120
+ // Compute expiry
121
+ const expiresAt = new Date(now.getTime() + timeoutMs).toISOString();
122
+ // Normalize capabilities
123
+ const normalizedCapabilities = normalizeTags(input.required_capabilities);
124
+ // Build delegation metadata
125
+ const metadata = {
126
+ type: "delegation",
127
+ required_capabilities: normalizedCapabilities,
128
+ urgency,
129
+ expires_at: expiresAt,
130
+ timeout_ms: timeoutMs,
131
+ };
132
+ // Build tags: user tags + delegation + urgency
133
+ const tags = [...(input.tags ?? []), "delegation", urgency];
134
+ // Post to blackboard as a "need" entry
135
+ const { id, timestamp } = await this.blackboardEngine.post({
136
+ entry_type: "need",
137
+ summary: input.summary,
138
+ detail: JSON.stringify(metadata),
139
+ tags,
140
+ scope: input.scope ?? "project",
141
+ agent_id: input.agent_id ?? "main",
142
+ });
143
+ // Get suggested agents via discover (exclude gone agents)
144
+ const discovery = await this.discover({
145
+ required_capabilities: input.required_capabilities,
146
+ include_gone: false,
147
+ });
148
+ return {
149
+ entry_id: id,
150
+ timestamp,
151
+ expires_at: expiresAt,
152
+ suggested_agents: discovery.agents,
153
+ };
154
+ }
155
+ /**
156
+ * Assemble a context snapshot from active decisions and blackboard
157
+ * warnings/findings. Used by createHandoff when auto_snapshot is true.
158
+ */
159
+ async assembleContextSnapshot(scope) {
160
+ // 1. Get decision index and filter to active decisions
161
+ const decisionIndex = await this.decisionStore.getIndex();
162
+ let activeDecisions = decisionIndex.filter((d) => d.status === "active");
163
+ // If scope provided, use bidirectional prefix matching
164
+ if (scope) {
165
+ activeDecisions = activeDecisions.filter((d) => d.scope.startsWith(scope) || scope.startsWith(d.scope));
166
+ }
167
+ // 2. Read blackboard entries for warnings and findings
168
+ const { entries: bbEntries } = await this.blackboardStore.read({
169
+ entry_types: ["warning", "finding"],
170
+ scope,
171
+ });
172
+ const warnings = bbEntries.filter((e) => e.entry_type === "warning");
173
+ const findings = bbEntries.filter((e) => e.entry_type === "finding");
174
+ // 3. Build context snapshot
175
+ const decision_ids = activeDecisions.map((d) => d.id);
176
+ const warning_ids = warnings.map((e) => e.id);
177
+ const finding_ids = findings.map((e) => e.id);
178
+ // 4. Build capped summaries
179
+ const summaries = [];
180
+ for (const d of activeDecisions.slice(0, 5)) {
181
+ summaries.push(`Decision: ${d.summary}`);
182
+ }
183
+ for (const w of warnings.slice(0, 3)) {
184
+ summaries.push(`Warning: ${w.summary}`);
185
+ }
186
+ for (const f of findings.slice(0, 3)) {
187
+ summaries.push(`Finding: ${f.summary}`);
188
+ }
189
+ return { decision_ids, warning_ids, finding_ids, summaries };
190
+ }
191
+ /** Create a handoff record between agents. */
192
+ async createHandoff(input) {
193
+ // 1. Determine context_snapshot
194
+ let context_snapshot;
195
+ if (input.context_snapshot) {
196
+ // Manual override
197
+ context_snapshot = input.context_snapshot;
198
+ }
199
+ else if (input.auto_snapshot !== false) {
200
+ // Auto-assemble (default)
201
+ context_snapshot = await this.assembleContextSnapshot(input.scope);
202
+ }
203
+ else {
204
+ // Explicitly disabled
205
+ context_snapshot = {
206
+ decision_ids: [],
207
+ warning_ids: [],
208
+ finding_ids: [],
209
+ summaries: [],
210
+ };
211
+ }
212
+ // 2. Create via HandoffStore
213
+ const record = await this.handoffStore.create({
214
+ source_agent: input.source_agent,
215
+ target_agent: input.target_agent,
216
+ scope: input.scope,
217
+ summary: input.summary,
218
+ results: input.results,
219
+ context_snapshot,
220
+ });
221
+ // 3. Post status entry to blackboard
222
+ const statusSummary = `Handoff created: ${input.summary}`.slice(0, 200);
223
+ const statusDetail = `From ${input.source_agent} to ${input.target_agent ?? "any agent"}. ${input.results.length} result(s).`;
224
+ await this.blackboardEngine.post({
225
+ entry_type: "status",
226
+ summary: statusSummary,
227
+ detail: statusDetail,
228
+ tags: ["handoff"],
229
+ scope: input.scope ?? "project",
230
+ agent_id: input.source_agent,
231
+ });
232
+ return record;
233
+ }
234
+ /** Acknowledge receipt of a handoff. */
235
+ async acknowledgeHandoff(handoffId, agentId) {
236
+ return this.handoffStore.acknowledge(handoffId, agentId);
237
+ }
238
+ }
239
+ //# sourceMappingURL=coordination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.js","sourceRoot":"","sources":["../../src/engine/coordination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { DecisionStore } from "../storage/decision-store.js";
2
+ import { BlackboardEngine } from "./blackboard.js";
3
+ import type { DecisionConfidence, DecisionStatus } from "../utils/types.js";
4
+ import type { Embedder } from "../embeddings/embedder.js";
5
+ import type { IndexManager } from "../embeddings/index-manager.js";
6
+ import type { SearchEngine } from "../embeddings/search.js";
7
+ import type { GraphEngine } from "./graph.js";
8
+ /** Entry in a dependency trace chain. */
9
+ export interface TraceEntry {
10
+ id: string;
11
+ summary: string;
12
+ depends_on: string[];
13
+ dependents: string[];
14
+ status: string;
15
+ }
16
+ export declare class DecisionEngine {
17
+ private readonly decisionStore;
18
+ private readonly blackboardEngine;
19
+ private readonly embedder;
20
+ private readonly indexManager;
21
+ private readonly projectRoot;
22
+ private readonly searchEngine;
23
+ private readonly graphEngine;
24
+ constructor(decisionStore: DecisionStore, blackboardEngine: BlackboardEngine, embedder?: Embedder | null, indexManager?: IndexManager | null, projectRoot?: string | null, searchEngine?: SearchEngine | null, graphEngine?: GraphEngine | null);
25
+ /**
26
+ * Sync a decision summary to .planning/STATE.md.
27
+ * Appends to the "### Decisions" section under "## Accumulated Context".
28
+ * Never throws — planning sync failure must not prevent decide().
29
+ * Uses direct fs calls because STATE.md is a GSD planning file, not Twining data.
30
+ */
31
+ private syncToPlanning;
32
+ /** Record a decision with full rationale and conflict detection. */
33
+ decide(input: {
34
+ domain: string;
35
+ scope: string;
36
+ summary: string;
37
+ context: string;
38
+ rationale: string;
39
+ constraints?: string[];
40
+ alternatives?: Array<{
41
+ option: string;
42
+ pros?: string[];
43
+ cons?: string[];
44
+ reason_rejected: string;
45
+ }>;
46
+ depends_on?: string[];
47
+ supersedes?: string;
48
+ confidence?: "high" | "medium" | "low";
49
+ reversible?: boolean;
50
+ affected_files?: string[];
51
+ affected_symbols?: string[];
52
+ agent_id?: string;
53
+ commit_hash?: string;
54
+ }): Promise<{
55
+ id: string;
56
+ timestamp: string;
57
+ conflicts?: {
58
+ id: string;
59
+ summary: string;
60
+ }[];
61
+ }>;
62
+ /** Retrieve decision chain for a scope or file. */
63
+ why(scope: string): Promise<{
64
+ decisions: Array<{
65
+ id: string;
66
+ summary: string;
67
+ rationale: string;
68
+ confidence: string;
69
+ status: string;
70
+ timestamp: string;
71
+ alternatives_count: number;
72
+ commit_hashes: string[];
73
+ }>;
74
+ active_count: number;
75
+ provisional_count: number;
76
+ }>;
77
+ /**
78
+ * Link a commit hash to an existing decision.
79
+ * Posts a status entry to the blackboard for traceability.
80
+ */
81
+ linkCommit(decisionId: string, commitHash: string, agentId?: string): Promise<{
82
+ linked: boolean;
83
+ decision_summary: string;
84
+ }>;
85
+ /**
86
+ * Get decisions linked to a specific commit hash.
87
+ */
88
+ getByCommitHash(commitHash: string): Promise<{
89
+ decisions: Array<{
90
+ id: string;
91
+ summary: string;
92
+ domain: string;
93
+ scope: string;
94
+ confidence: string;
95
+ timestamp: string;
96
+ commit_hashes: string[];
97
+ }>;
98
+ }>;
99
+ /**
100
+ * Trace a decision's dependency chain upstream and/or downstream.
101
+ * Uses BFS with a visited set to prevent infinite loops from circular dependencies.
102
+ */
103
+ trace(decisionId: string, direction?: "upstream" | "downstream" | "both"): Promise<{
104
+ chain: TraceEntry[];
105
+ }>;
106
+ /**
107
+ * Flag a decision for reconsideration.
108
+ * Sets active decisions to provisional and posts a warning.
109
+ */
110
+ reconsider(decisionId: string, newContext: string, agentId?: string): Promise<{
111
+ flagged: boolean;
112
+ decision_summary: string;
113
+ }>;
114
+ /**
115
+ * Override a decision with a reason, optionally creating a replacement.
116
+ */
117
+ override(decisionId: string, reason: string, newDecision?: string, overriddenBy?: string): Promise<{
118
+ overridden: boolean;
119
+ old_summary: string;
120
+ new_decision_id?: string;
121
+ }>;
122
+ /**
123
+ * Search decisions across all scopes by keyword or semantic similarity.
124
+ * Supports filtering by domain, status, and confidence.
125
+ * Never throws — returns empty results on error.
126
+ */
127
+ searchDecisions(query: string, filters?: {
128
+ domain?: string;
129
+ status?: DecisionStatus;
130
+ confidence?: DecisionConfidence;
131
+ }, limit?: number): Promise<{
132
+ results: Array<{
133
+ id: string;
134
+ summary: string;
135
+ domain: string;
136
+ scope: string;
137
+ confidence: string;
138
+ status: string;
139
+ timestamp: string;
140
+ relevance: number;
141
+ commit_hashes: string[];
142
+ }>;
143
+ total_matched: number;
144
+ fallback_mode: boolean;
145
+ }>;
146
+ }
147
+ //# sourceMappingURL=decisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../src/engine/decisions.ts"],"names":[],"mappings":"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"}