@4da/mcp-server 3.2.0 → 4.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.
- package/LICENSE +21 -0
- package/README.md +234 -62
- package/dist/auth.d.ts +36 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +82 -0
- package/dist/auth.js.map +1 -0
- package/dist/db.d.ts +100 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +707 -1
- package/dist/db.js.map +1 -1
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +124 -0
- package/dist/doctor.js.map +1 -0
- package/dist/http-transport.d.ts +25 -0
- package/dist/http-transport.d.ts.map +1 -0
- package/dist/http-transport.js +143 -0
- package/dist/http-transport.js.map +1 -0
- package/dist/index.d.ts +15 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +195 -250
- package/dist/index.js.map +1 -1
- package/dist/live/cache.d.ts +16 -0
- package/dist/live/cache.d.ts.map +1 -0
- package/dist/live/cache.js +61 -0
- package/dist/live/cache.js.map +1 -0
- package/dist/live/hn-fetcher.d.ts +19 -0
- package/dist/live/hn-fetcher.d.ts.map +1 -0
- package/dist/live/hn-fetcher.js +123 -0
- package/dist/live/hn-fetcher.js.map +1 -0
- package/dist/live/index.d.ts +55 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +131 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/osv-scanner.d.ts +19 -0
- package/dist/live/osv-scanner.d.ts.map +1 -0
- package/dist/live/osv-scanner.js +197 -0
- package/dist/live/osv-scanner.js.map +1 -0
- package/dist/live/rate-limiter.d.ts +19 -0
- package/dist/live/rate-limiter.d.ts.map +1 -0
- package/dist/live/rate-limiter.js +52 -0
- package/dist/live/rate-limiter.js.map +1 -0
- package/dist/live/types.d.ts +89 -0
- package/dist/live/types.d.ts.map +1 -0
- package/dist/live/types.js +3 -0
- package/dist/live/types.js.map +1 -0
- package/dist/live/version-resolver.d.ts +11 -0
- package/dist/live/version-resolver.d.ts.map +1 -0
- package/dist/live/version-resolver.js +321 -0
- package/dist/live/version-resolver.js.map +1 -0
- package/dist/live-singleton.d.ts +9 -0
- package/dist/live-singleton.d.ts.map +1 -0
- package/dist/live-singleton.js +14 -0
- package/dist/live-singleton.js.map +1 -0
- package/dist/llm.d.ts +20 -2
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +80 -22
- package/dist/llm.js.map +1 -1
- package/dist/output-manager.d.ts.map +1 -1
- package/dist/output-manager.js +1 -0
- package/dist/output-manager.js.map +1 -1
- package/dist/project-scanner.d.ts +27 -0
- package/dist/project-scanner.d.ts.map +1 -0
- package/dist/project-scanner.js +366 -0
- package/dist/project-scanner.js.map +1 -0
- package/dist/schema-registry.d.ts +31 -13
- package/dist/schema-registry.d.ts.map +1 -1
- package/dist/schema-registry.js +208 -32
- package/dist/schema-registry.js.map +1 -1
- package/dist/schemas/agent-feedback-stats.json +14 -0
- package/dist/schemas/agent-memory.json +49 -0
- package/dist/schemas/agent-session-brief.json +25 -0
- package/dist/schemas/attention-report.json +13 -0
- package/dist/schemas/autophagy-status.json +13 -0
- package/dist/schemas/compound-advantage.json +14 -0
- package/dist/schemas/decision-enforcement.json +22 -0
- package/dist/schemas/decision-memory.json +54 -0
- package/dist/schemas/decision-windows.json +22 -0
- package/dist/schemas/delegation-score.json +18 -0
- package/dist/schemas/developer-dna.json +219 -0
- package/dist/schemas/export-context.json +17 -0
- package/dist/schemas/knowledge-gaps.json +14 -0
- package/dist/schemas/preemption-feed.json +18 -0
- package/dist/schemas/project-health.json +13 -0
- package/dist/schemas/record-agent-feedback.json +28 -0
- package/dist/schemas/reverse-mentions.json +13 -0
- package/dist/schemas/semantic-shifts.json +17 -0
- package/dist/schemas/signal-chains.json +19 -0
- package/dist/schemas/tech-radar.json +23 -0
- package/dist/schemas/trust-summary.json +13 -0
- package/dist/schemas/vulnerability-scan.json +26 -0
- package/dist/schemas/what-should-i-know.json +19 -0
- package/dist/setup.d.ts +18 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +171 -0
- package/dist/setup.js.map +1 -0
- package/dist/tool-dispatch.d.ts +33 -0
- package/dist/tool-dispatch.d.ts.map +1 -0
- package/dist/tool-dispatch.js +87 -0
- package/dist/tool-dispatch.js.map +1 -0
- package/dist/tools/agent-feedback-stats.d.ts +30 -0
- package/dist/tools/agent-feedback-stats.d.ts.map +1 -0
- package/dist/tools/agent-feedback-stats.js +41 -0
- package/dist/tools/agent-feedback-stats.js.map +1 -0
- package/dist/tools/agent-memory.d.ts +94 -0
- package/dist/tools/agent-memory.d.ts.map +1 -0
- package/dist/tools/agent-memory.js +262 -0
- package/dist/tools/agent-memory.js.map +1 -0
- package/dist/tools/agent-session-brief.d.ts +44 -0
- package/dist/tools/agent-session-brief.d.ts.map +1 -0
- package/dist/tools/agent-session-brief.js +179 -0
- package/dist/tools/agent-session-brief.js.map +1 -0
- package/dist/tools/attention-report.d.ts +6 -5
- package/dist/tools/attention-report.d.ts.map +1 -1
- package/dist/tools/attention-report.js +1 -0
- package/dist/tools/attention-report.js.map +1 -1
- package/dist/tools/autophagy-status.d.ts +25 -0
- package/dist/tools/autophagy-status.d.ts.map +1 -0
- package/dist/tools/autophagy-status.js +56 -0
- package/dist/tools/autophagy-status.js.map +1 -0
- package/dist/tools/compound-advantage.d.ts +30 -0
- package/dist/tools/compound-advantage.d.ts.map +1 -0
- package/dist/tools/compound-advantage.js +133 -0
- package/dist/tools/compound-advantage.js.map +1 -0
- package/dist/tools/config-validator.d.ts.map +1 -1
- package/dist/tools/config-validator.js +31 -0
- package/dist/tools/config-validator.js.map +1 -1
- package/dist/tools/context-analysis.d.ts.map +1 -1
- package/dist/tools/context-analysis.js +1 -0
- package/dist/tools/context-analysis.js.map +1 -1
- package/dist/tools/daily-briefing.d.ts.map +1 -1
- package/dist/tools/daily-briefing.js +17 -1
- package/dist/tools/daily-briefing.js.map +1 -1
- package/dist/tools/decision-enforcement.d.ts +59 -0
- package/dist/tools/decision-enforcement.d.ts.map +1 -0
- package/dist/tools/decision-enforcement.js +185 -0
- package/dist/tools/decision-enforcement.js.map +1 -0
- package/dist/tools/decision-memory.d.ts +132 -0
- package/dist/tools/decision-memory.d.ts.map +1 -0
- package/dist/tools/decision-memory.js +345 -0
- package/dist/tools/decision-memory.js.map +1 -0
- package/dist/tools/decision-windows.d.ts +37 -0
- package/dist/tools/decision-windows.d.ts.map +1 -0
- package/dist/tools/decision-windows.js +67 -0
- package/dist/tools/decision-windows.js.map +1 -0
- package/dist/tools/delegation-score.d.ts +34 -0
- package/dist/tools/delegation-score.d.ts.map +1 -0
- package/dist/tools/delegation-score.js +251 -0
- package/dist/tools/delegation-score.js.map +1 -0
- package/dist/tools/developer-dna.d.ts +79 -0
- package/dist/tools/developer-dna.d.ts.map +1 -0
- package/dist/tools/developer-dna.js +378 -0
- package/dist/tools/developer-dna.js.map +1 -0
- package/dist/tools/explain-relevance.d.ts.map +1 -1
- package/dist/tools/explain-relevance.js +1 -0
- package/dist/tools/explain-relevance.js.map +1 -1
- package/dist/tools/export-context.d.ts +23 -6
- package/dist/tools/export-context.d.ts.map +1 -1
- package/dist/tools/export-context.js +58 -14
- package/dist/tools/export-context.js.map +1 -1
- package/dist/tools/get-actionable-signals.d.ts.map +1 -1
- package/dist/tools/get-actionable-signals.js +60 -9
- package/dist/tools/get-actionable-signals.js.map +1 -1
- package/dist/tools/get-context.d.ts.map +1 -1
- package/dist/tools/get-context.js +1 -0
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/get-relevant-content.d.ts.map +1 -1
- package/dist/tools/get-relevant-content.js +3 -0
- package/dist/tools/get-relevant-content.js.map +1 -1
- package/dist/tools/index.d.ts +26 -16
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +35 -16
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/knowledge-gaps.d.ts +11 -1
- package/dist/tools/knowledge-gaps.d.ts.map +1 -1
- package/dist/tools/knowledge-gaps.js +9 -3
- package/dist/tools/knowledge-gaps.js.map +1 -1
- package/dist/tools/llm-status.d.ts.map +1 -1
- package/dist/tools/llm-status.js +1 -0
- package/dist/tools/llm-status.js.map +1 -1
- package/dist/tools/muse-context.d.ts +195 -0
- package/dist/tools/muse-context.d.ts.map +1 -0
- package/dist/tools/muse-context.js +284 -0
- package/dist/tools/muse-context.js.map +1 -0
- package/dist/tools/preemption-feed.d.ts +55 -0
- package/dist/tools/preemption-feed.d.ts.map +1 -0
- package/dist/tools/preemption-feed.js +124 -0
- package/dist/tools/preemption-feed.js.map +1 -0
- package/dist/tools/project-health.d.ts +12 -6
- package/dist/tools/project-health.d.ts.map +1 -1
- package/dist/tools/project-health.js +49 -10
- package/dist/tools/project-health.js.map +1 -1
- package/dist/tools/record-agent-feedback.d.ts +46 -0
- package/dist/tools/record-agent-feedback.d.ts.map +1 -0
- package/dist/tools/record-agent-feedback.js +71 -0
- package/dist/tools/record-agent-feedback.js.map +1 -0
- package/dist/tools/record-feedback.d.ts.map +1 -1
- package/dist/tools/record-feedback.js +1 -0
- package/dist/tools/record-feedback.js.map +1 -1
- package/dist/tools/reverse-mentions.d.ts +8 -8
- package/dist/tools/reverse-mentions.d.ts.map +1 -1
- package/dist/tools/reverse-mentions.js +1 -0
- package/dist/tools/reverse-mentions.js.map +1 -1
- package/dist/tools/score-autopsy.d.ts.map +1 -1
- package/dist/tools/score-autopsy.js +1 -0
- package/dist/tools/score-autopsy.js.map +1 -1
- package/dist/tools/semantic-shifts.d.ts +17 -1
- package/dist/tools/semantic-shifts.d.ts.map +1 -1
- package/dist/tools/semantic-shifts.js +1 -0
- package/dist/tools/semantic-shifts.js.map +1 -1
- package/dist/tools/signal-chains.d.ts +14 -7
- package/dist/tools/signal-chains.d.ts.map +1 -1
- package/dist/tools/signal-chains.js +5 -2
- package/dist/tools/signal-chains.js.map +1 -1
- package/dist/tools/source-health.d.ts.map +1 -1
- package/dist/tools/source-health.js +1 -0
- package/dist/tools/source-health.js.map +1 -1
- package/dist/tools/tech-radar.d.ts +38 -0
- package/dist/tools/tech-radar.d.ts.map +1 -0
- package/dist/tools/tech-radar.js +249 -0
- package/dist/tools/tech-radar.js.map +1 -0
- package/dist/tools/topic-connections.d.ts.map +1 -1
- package/dist/tools/topic-connections.js +1 -0
- package/dist/tools/topic-connections.js.map +1 -1
- package/dist/tools/trend-analysis.d.ts.map +1 -1
- package/dist/tools/trend-analysis.js +1 -0
- package/dist/tools/trend-analysis.js.map +1 -1
- package/dist/tools/trust-summary.d.ts +38 -0
- package/dist/tools/trust-summary.d.ts.map +1 -0
- package/dist/tools/trust-summary.js +89 -0
- package/dist/tools/trust-summary.js.map +1 -0
- package/dist/tools/vulnerability-scan.d.ts +89 -0
- package/dist/tools/vulnerability-scan.d.ts.map +1 -0
- package/dist/tools/vulnerability-scan.js +127 -0
- package/dist/tools/vulnerability-scan.js.map +1 -0
- package/dist/tools/what-should-i-know.d.ts +79 -0
- package/dist/tools/what-should-i-know.d.ts.map +1 -0
- package/dist/tools/what-should-i-know.js +376 -0
- package/dist/tools/what-should-i-know.js.map +1 -0
- package/dist/types.d.ts +221 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +53 -24
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* decision_memory tool
|
|
4
|
+
*
|
|
5
|
+
* Manage developer decisions - record, list, check alignment, update, and supersede.
|
|
6
|
+
* Decisions persist and inform signal classification, tech radar, and agent context.
|
|
7
|
+
*/
|
|
8
|
+
import { execFile } from "node:child_process";
|
|
9
|
+
import { existsSync } from "node:fs";
|
|
10
|
+
import { homedir, platform } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Tool Definition
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export const decisionMemoryTool = {
|
|
16
|
+
name: "decision_memory",
|
|
17
|
+
description: "Manage developer decisions. Actions: record (create new decision), list (query decisions), check_alignment (check if tech/pattern conflicts with decisions), update (modify a decision), supersede (replace old decision with new one).",
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: "object",
|
|
20
|
+
properties: {
|
|
21
|
+
action: {
|
|
22
|
+
type: "string",
|
|
23
|
+
enum: ["record", "list", "check_alignment", "update", "supersede"],
|
|
24
|
+
description: "Action to perform",
|
|
25
|
+
},
|
|
26
|
+
decision_type: {
|
|
27
|
+
type: "string",
|
|
28
|
+
enum: [
|
|
29
|
+
"tech_choice",
|
|
30
|
+
"architecture",
|
|
31
|
+
"workflow",
|
|
32
|
+
"pattern",
|
|
33
|
+
"dependency",
|
|
34
|
+
],
|
|
35
|
+
description: "Type of decision (for record)",
|
|
36
|
+
},
|
|
37
|
+
subject: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: "Subject of the decision (for record, check_alignment)",
|
|
40
|
+
},
|
|
41
|
+
decision: {
|
|
42
|
+
type: "string",
|
|
43
|
+
description: "The decision text (for record)",
|
|
44
|
+
},
|
|
45
|
+
rationale: {
|
|
46
|
+
type: "string",
|
|
47
|
+
description: "Why this decision was made (for record)",
|
|
48
|
+
},
|
|
49
|
+
alternatives_rejected: {
|
|
50
|
+
type: "array",
|
|
51
|
+
items: { type: "string" },
|
|
52
|
+
description: "Alternatives that were considered and rejected (for record)",
|
|
53
|
+
},
|
|
54
|
+
context_tags: {
|
|
55
|
+
type: "array",
|
|
56
|
+
items: { type: "string" },
|
|
57
|
+
description: "Tags for categorization (for record)",
|
|
58
|
+
},
|
|
59
|
+
confidence: {
|
|
60
|
+
type: "number",
|
|
61
|
+
description: "Confidence level 0-1 (for record)",
|
|
62
|
+
},
|
|
63
|
+
filter_type: {
|
|
64
|
+
type: "string",
|
|
65
|
+
description: "Filter by decision type (for list)",
|
|
66
|
+
},
|
|
67
|
+
filter_status: {
|
|
68
|
+
type: "string",
|
|
69
|
+
description: "Filter by status: active, superseded, reconsidering (for list)",
|
|
70
|
+
},
|
|
71
|
+
limit: {
|
|
72
|
+
type: "number",
|
|
73
|
+
description: "Max results to return (for list)",
|
|
74
|
+
},
|
|
75
|
+
technology: {
|
|
76
|
+
type: "string",
|
|
77
|
+
description: "Technology to check alignment for",
|
|
78
|
+
},
|
|
79
|
+
pattern: {
|
|
80
|
+
type: "string",
|
|
81
|
+
description: "Pattern to check alignment for",
|
|
82
|
+
},
|
|
83
|
+
id: {
|
|
84
|
+
type: "number",
|
|
85
|
+
description: "Decision ID (for update)",
|
|
86
|
+
},
|
|
87
|
+
new_decision: {
|
|
88
|
+
type: "string",
|
|
89
|
+
description: "Updated decision text (for update)",
|
|
90
|
+
},
|
|
91
|
+
new_rationale: {
|
|
92
|
+
type: "string",
|
|
93
|
+
description: "Updated rationale (for update)",
|
|
94
|
+
},
|
|
95
|
+
new_status: {
|
|
96
|
+
type: "string",
|
|
97
|
+
enum: ["active", "superseded", "reconsidering"],
|
|
98
|
+
description: "Updated status (for update)",
|
|
99
|
+
},
|
|
100
|
+
new_confidence: {
|
|
101
|
+
type: "number",
|
|
102
|
+
description: "Updated confidence (for update)",
|
|
103
|
+
},
|
|
104
|
+
old_id: {
|
|
105
|
+
type: "number",
|
|
106
|
+
description: "ID of decision to supersede (for supersede)",
|
|
107
|
+
},
|
|
108
|
+
new_id: {
|
|
109
|
+
type: "number",
|
|
110
|
+
description: "ID of new decision that replaces old (for supersede)",
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
required: ["action"],
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// Helpers
|
|
118
|
+
// ============================================================================
|
|
119
|
+
function parseDecisionRow(row) {
|
|
120
|
+
return {
|
|
121
|
+
...row,
|
|
122
|
+
alternatives_rejected: JSON.parse(row.alternatives_rejected || "[]"),
|
|
123
|
+
context_tags: JSON.parse(row.context_tags || "[]"),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// Execute
|
|
128
|
+
// ============================================================================
|
|
129
|
+
export function executeDecisionMemory(db, params) {
|
|
130
|
+
const rawDb = db.getRawDb();
|
|
131
|
+
switch (params.action) {
|
|
132
|
+
case "record": {
|
|
133
|
+
if (!params.subject || !params.decision) {
|
|
134
|
+
return {
|
|
135
|
+
error: "subject and decision are required for record action",
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const stmt = rawDb.prepare(`INSERT INTO developer_decisions
|
|
139
|
+
(decision_type, subject, decision, rationale,
|
|
140
|
+
alternatives_rejected, context_tags, confidence, status)
|
|
141
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 'active')`);
|
|
142
|
+
const result = stmt.run(params.decision_type || "tech_choice", params.subject, params.decision, params.rationale || null, JSON.stringify(params.alternatives_rejected || []), JSON.stringify(params.context_tags || []), params.confidence ?? 0.8);
|
|
143
|
+
// Bridge to AWE Wisdom Graph: forward decision for wisdom tracking.
|
|
144
|
+
// Non-blocking — AWE sync is best-effort, doesn't affect 4DA recording.
|
|
145
|
+
try {
|
|
146
|
+
const aweBin = findAweBinary();
|
|
147
|
+
if (aweBin) {
|
|
148
|
+
// Sanitize inputs before passing to external process
|
|
149
|
+
const safeSubject = (params.subject || "").slice(0, 500).replace(/\0/g, '');
|
|
150
|
+
const safeDecision = (params.decision || "").slice(0, 2000).replace(/\0/g, '');
|
|
151
|
+
const query = `${safeSubject}: ${safeDecision}`;
|
|
152
|
+
const domain = mapDecisionTypeToDomain(params.decision_type || "tech_choice");
|
|
153
|
+
// AWE bridge: persist decisions to Wisdom Graph for compounding
|
|
154
|
+
// Context file auto-assembled by AWE MCP server's buildContextFile()
|
|
155
|
+
const contextFile = process.platform === "win32"
|
|
156
|
+
? `${process.env.APPDATA || ""}\\awe\\identity.json`
|
|
157
|
+
: `${process.env.HOME || ""}/.local/share/awe/identity.json`;
|
|
158
|
+
const contextArgs = existsSync(contextFile) ? ["--context_file", contextFile] : [];
|
|
159
|
+
const child = execFile(aweBin, [
|
|
160
|
+
"transmute", query,
|
|
161
|
+
"--domain", domain,
|
|
162
|
+
"--json",
|
|
163
|
+
...contextArgs,
|
|
164
|
+
], { timeout: 30_000 }, () => {
|
|
165
|
+
// Callback required — ignore result (fire-and-forget)
|
|
166
|
+
});
|
|
167
|
+
child.unref();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// AWE bridge is optional
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
success: true,
|
|
175
|
+
id: result.lastInsertRowid,
|
|
176
|
+
message: `Decision recorded: ${params.subject}`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
case "list": {
|
|
180
|
+
let sql = `SELECT id, decision_type, subject, decision, rationale,
|
|
181
|
+
alternatives_rejected, context_tags, confidence,
|
|
182
|
+
status, superseded_by, created_at, updated_at
|
|
183
|
+
FROM developer_decisions WHERE 1=1`;
|
|
184
|
+
const sqlParams = [];
|
|
185
|
+
if (params.filter_type) {
|
|
186
|
+
sql += ` AND decision_type = ?`;
|
|
187
|
+
sqlParams.push(params.filter_type);
|
|
188
|
+
}
|
|
189
|
+
if (params.filter_status) {
|
|
190
|
+
sql += ` AND status = ?`;
|
|
191
|
+
sqlParams.push(params.filter_status);
|
|
192
|
+
}
|
|
193
|
+
sql += ` ORDER BY updated_at DESC LIMIT ?`;
|
|
194
|
+
sqlParams.push(params.limit || 20);
|
|
195
|
+
const rows = rawDb
|
|
196
|
+
.prepare(sql)
|
|
197
|
+
.all(...sqlParams);
|
|
198
|
+
return {
|
|
199
|
+
decisions: rows.map(parseDecisionRow),
|
|
200
|
+
count: rows.length,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
case "check_alignment": {
|
|
204
|
+
if (!params.technology) {
|
|
205
|
+
return {
|
|
206
|
+
error: "technology is required for check_alignment action",
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
const search = `%${params.technology.toLowerCase()}%`;
|
|
210
|
+
const rows = rawDb
|
|
211
|
+
.prepare(`SELECT id, decision_type, subject, decision, rationale,
|
|
212
|
+
alternatives_rejected, context_tags, confidence,
|
|
213
|
+
status, created_at
|
|
214
|
+
FROM developer_decisions
|
|
215
|
+
WHERE status = 'active'
|
|
216
|
+
AND (LOWER(subject) LIKE ?
|
|
217
|
+
OR LOWER(context_tags) LIKE ?
|
|
218
|
+
OR LOWER(alternatives_rejected) LIKE ?)`)
|
|
219
|
+
.all(search, search, search);
|
|
220
|
+
const conflicts = [];
|
|
221
|
+
const relevant = [];
|
|
222
|
+
for (const row of rows) {
|
|
223
|
+
const alts = JSON.parse(row.alternatives_rejected || "[]");
|
|
224
|
+
const isRejected = alts.some((alt) => alt.toLowerCase().includes(params.technology.toLowerCase()));
|
|
225
|
+
if (isRejected) {
|
|
226
|
+
conflicts.push({
|
|
227
|
+
decision_id: row.id,
|
|
228
|
+
subject: row.subject,
|
|
229
|
+
reason: `'${params.technology}' was rejected in favor of '${row.decision}' (rationale: ${row.rationale || "none"})`,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
relevant.push(parseDecisionRow(row));
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
aligned: conflicts.length === 0,
|
|
236
|
+
relevant_decisions: relevant,
|
|
237
|
+
conflicts,
|
|
238
|
+
confidence: relevant.length > 0
|
|
239
|
+
? Math.max(...relevant.map((r) => r.confidence))
|
|
240
|
+
: 0.5,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
case "update": {
|
|
244
|
+
if (!params.id) {
|
|
245
|
+
return { error: "id is required for update action" };
|
|
246
|
+
}
|
|
247
|
+
const sets = [];
|
|
248
|
+
const values = [];
|
|
249
|
+
if (params.new_decision) {
|
|
250
|
+
sets.push("decision = ?");
|
|
251
|
+
values.push(params.new_decision);
|
|
252
|
+
}
|
|
253
|
+
if (params.new_rationale) {
|
|
254
|
+
sets.push("rationale = ?");
|
|
255
|
+
values.push(params.new_rationale);
|
|
256
|
+
}
|
|
257
|
+
if (params.new_status) {
|
|
258
|
+
sets.push("status = ?");
|
|
259
|
+
values.push(params.new_status);
|
|
260
|
+
}
|
|
261
|
+
if (params.new_confidence !== undefined) {
|
|
262
|
+
sets.push("confidence = ?");
|
|
263
|
+
values.push(params.new_confidence);
|
|
264
|
+
}
|
|
265
|
+
if (sets.length === 0) {
|
|
266
|
+
return { error: "No fields to update" };
|
|
267
|
+
}
|
|
268
|
+
sets.push("updated_at = datetime('now')");
|
|
269
|
+
values.push(params.id);
|
|
270
|
+
rawDb
|
|
271
|
+
.prepare(`UPDATE developer_decisions SET ${sets.join(", ")} WHERE id = ?`)
|
|
272
|
+
.run(...values);
|
|
273
|
+
return {
|
|
274
|
+
success: true,
|
|
275
|
+
message: `Decision ${params.id} updated`,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
case "supersede": {
|
|
279
|
+
if (!params.old_id || !params.new_id) {
|
|
280
|
+
return {
|
|
281
|
+
error: "old_id and new_id are required for supersede action",
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
rawDb
|
|
285
|
+
.prepare(`UPDATE developer_decisions
|
|
286
|
+
SET status = 'superseded',
|
|
287
|
+
superseded_by = ?,
|
|
288
|
+
updated_at = datetime('now')
|
|
289
|
+
WHERE id = ?`)
|
|
290
|
+
.run(params.new_id, params.old_id);
|
|
291
|
+
return {
|
|
292
|
+
success: true,
|
|
293
|
+
message: `Decision ${params.old_id} superseded by ${params.new_id}`,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
default:
|
|
297
|
+
return { error: `Unknown action: ${params.action}` };
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// ============================================================================
|
|
301
|
+
// AWE Bridge Helpers
|
|
302
|
+
// ============================================================================
|
|
303
|
+
/** Map 4DA decision types to AWE domains. */
|
|
304
|
+
function mapDecisionTypeToDomain(type) {
|
|
305
|
+
switch (type) {
|
|
306
|
+
case "architecture":
|
|
307
|
+
case "pattern":
|
|
308
|
+
return "software-engineering";
|
|
309
|
+
case "dependency":
|
|
310
|
+
return "software-engineering";
|
|
311
|
+
case "workflow":
|
|
312
|
+
return "workflow";
|
|
313
|
+
default:
|
|
314
|
+
return "software-engineering";
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/** Find AWE binary — checks env var, platform defaults, then PATH fallback. */
|
|
318
|
+
export function findAweBinary() {
|
|
319
|
+
// 1. Explicit env var takes priority
|
|
320
|
+
const envPath = process.env.FOURDA_AWE_PATH || process.env.AWE_BIN;
|
|
321
|
+
if (envPath && existsSync(envPath))
|
|
322
|
+
return envPath;
|
|
323
|
+
// 2. Platform-specific default install locations
|
|
324
|
+
const home = homedir();
|
|
325
|
+
const os = platform();
|
|
326
|
+
const candidates = [];
|
|
327
|
+
if (os === "win32") {
|
|
328
|
+
const appData = process.env.APPDATA || join(home, "AppData", "Roaming");
|
|
329
|
+
candidates.push(join(appData, "awe", "awe.exe"));
|
|
330
|
+
}
|
|
331
|
+
else if (os === "darwin") {
|
|
332
|
+
candidates.push(join(home, "Library", "Application Support", "awe", "awe"));
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
// Linux and other Unix
|
|
336
|
+
candidates.push(join(home, ".local", "share", "awe", "awe"));
|
|
337
|
+
}
|
|
338
|
+
for (const p of candidates) {
|
|
339
|
+
if (existsSync(p))
|
|
340
|
+
return p;
|
|
341
|
+
}
|
|
342
|
+
// 3. Fall back to bare command name (relies on PATH)
|
|
343
|
+
return "awe";
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=decision-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-memory.js","sourceRoot":"","sources":["../../src/tools/decision-memory.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAuDjC,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,yOAAyO;IAC3O,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,CAAC;gBAClE,WAAW,EAAE,mBAAmB;aACjC;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE;oBACJ,aAAa;oBACb,cAAc;oBACd,UAAU;oBACV,SAAS;oBACT,YAAY;iBACb;gBACD,WAAW,EAAE,+BAA+B;aAC7C;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uDAAuD;aAC1D;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;aAC9C;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,6DAA6D;aAChE;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,sCAAsC;aACpD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,gEAAgE;aACnE;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;aAC9C;YACD,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;aAC9C;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC;gBAC/C,WAAW,EAAE,6BAA6B;aAC3C;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,sDAAsD;aACzD;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;CACF,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,gBAAgB,CAAC,GAAgB;IACxC,OAAO;QACL,GAAG,GAAG;QACN,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAC/B,GAAG,CAAC,qBAAqB,IAAI,IAAI,CACtB;QACb,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAa;KAC/D,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,UAAU,qBAAqB,CACnC,EAAkB,EAClB,MAA4B;IAE5B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE5B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO;oBACL,KAAK,EAAE,qDAAqD;iBAC7D,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CACxB;;;gDAGwC,CACzC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,MAAM,CAAC,aAAa,IAAI,aAAa,EACrC,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,SAAS,IAAI,IAAI,EACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC,EAClD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,EACzC,MAAM,CAAC,UAAU,IAAI,GAAG,CACzB,CAAC;YAEF,oEAAoE;YACpE,wEAAwE;YACxE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;gBAC/B,IAAI,MAAM,EAAE,CAAC;oBACX,qDAAqD;oBACrD,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC5E,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC/E,MAAM,KAAK,GAAG,GAAG,WAAW,KAAK,YAAY,EAAE,CAAC;oBAChD,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;oBAC9E,gEAAgE;oBAChE,qEAAqE;oBACrE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;wBAC9C,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,sBAAsB;wBACpD,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,iCAAiC,CAAC;oBAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE;wBAC7B,WAAW,EAAE,KAAK;wBAClB,UAAU,EAAE,MAAM;wBAClB,QAAQ;wBACR,GAAG,WAAW;qBACf,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;wBAC3B,sDAAsD;oBACxD,CAAC,CAAC,CAAC;oBACH,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,EAAE,EAAE,MAAM,CAAC,eAAe;gBAC1B,OAAO,EAAE,sBAAsB,MAAM,CAAC,OAAO,EAAE;aAChD,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,GAAG,GAAG;;;oDAGoC,CAAC;YAC/C,MAAM,SAAS,GAAwB,EAAE,CAAC;YAE1C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,GAAG,IAAI,wBAAwB,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,GAAG,IAAI,iBAAiB,CAAC;gBACzB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACvC,CAAC;YAED,GAAG,IAAI,mCAAmC,CAAC;YAC3C,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAEnC,MAAM,IAAI,GAAG,KAAK;iBACf,OAAO,CAAC,GAAG,CAAC;iBACZ,GAAG,CAAC,GAAG,SAAS,CAAkB,CAAC;YAEtC,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,MAAM;aACnB,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO;oBACL,KAAK,EAAE,mDAAmD;iBAC3D,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC;YACtD,MAAM,IAAI,GAAG,KAAK;iBACf,OAAO,CACN;;;;;;;uDAO6C,CAC9C;iBACA,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAkB,CAAC;YAEhD,MAAM,SAAS,GAIT,EAAE,CAAC;YACT,MAAM,QAAQ,GAA0C,EAAE,CAAC;YAE3D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAa,IAAI,CAAC,KAAK,CAC/B,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAClC,CAAC;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACnC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAW,CAAC,WAAW,EAAE,CAAC,CAC7D,CAAC;gBAEF,IAAI,UAAU,EAAE,CAAC;oBACf,SAAS,CAAC,IAAI,CAAC;wBACb,WAAW,EAAE,GAAG,CAAC,EAAE;wBACnB,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,+BAA+B,GAAG,CAAC,QAAQ,iBAAiB,GAAG,CAAC,SAAS,IAAI,MAAM,GAAG;qBACpH,CAAC,CAAC;gBACL,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC/B,kBAAkB,EAAE,QAAQ;gBAC5B,SAAS;gBACT,UAAU,EACR,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACjB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBAChD,CAAC,CAAC,GAAG;aACV,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;YACvD,CAAC;YAED,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAwB,EAAE,CAAC;YAEvC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAEvB,KAAK;iBACF,OAAO,CACN,kCAAkC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CACjE;iBACA,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YAElB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,YAAY,MAAM,CAAC,EAAE,UAAU;aACzC,CAAC;QACJ,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrC,OAAO;oBACL,KAAK,EAAE,qDAAqD;iBAC7D,CAAC;YACJ,CAAC;YAED,KAAK;iBACF,OAAO,CACN;;;;wBAIc,CACf;iBACA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAErC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,YAAY,MAAM,CAAC,MAAM,kBAAkB,MAAM,CAAC,MAAM,EAAE;aACpE,CAAC;QACJ,CAAC;QAED;YACE,OAAO,EAAE,KAAK,EAAE,mBAAmB,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IACzD,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,6CAA6C;AAC7C,SAAS,uBAAuB,CAAC,IAAY;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,sBAAsB,CAAC;QAChC,KAAK,YAAY;YACf,OAAO,sBAAsB,CAAC;QAChC,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,sBAAsB,CAAC;IAClC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa;IAC3B,qCAAqC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACnE,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAEnD,iDAAiD;IACjD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,qDAAqD;IACrD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* decision_windows tool
|
|
3
|
+
*
|
|
4
|
+
* View and manage decision windows — time-bounded opportunities
|
|
5
|
+
* detected from content intelligence requiring attention.
|
|
6
|
+
*/
|
|
7
|
+
import type { FourDADatabase } from "../db.js";
|
|
8
|
+
export interface DecisionWindowsParams {
|
|
9
|
+
action?: string;
|
|
10
|
+
window_id?: number;
|
|
11
|
+
outcome?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const decisionWindowsTool: {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: "object";
|
|
18
|
+
properties: {
|
|
19
|
+
action: {
|
|
20
|
+
type: string;
|
|
21
|
+
enum: string[];
|
|
22
|
+
description: string;
|
|
23
|
+
default: string;
|
|
24
|
+
};
|
|
25
|
+
window_id: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
outcome: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare function executeDecisionWindows(db: FourDADatabase, params: DecisionWindowsParams): object;
|
|
37
|
+
//# sourceMappingURL=decision-windows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-windows.d.ts","sourceRoot":"","sources":["../../src/tools/decision-windows.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;CAuB/B,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,GAAG,MAAM,CA8ChG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export const decisionWindowsTool = {
|
|
2
|
+
name: "decision_windows",
|
|
3
|
+
description: "View and manage decision windows — time-bounded opportunities detected from content intelligence. List open windows, mark as acted on, or close.",
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: "object",
|
|
6
|
+
properties: {
|
|
7
|
+
action: {
|
|
8
|
+
type: "string",
|
|
9
|
+
enum: ["list", "act", "close"],
|
|
10
|
+
description: "Action to perform. Default: list",
|
|
11
|
+
default: "list",
|
|
12
|
+
},
|
|
13
|
+
window_id: {
|
|
14
|
+
type: "number",
|
|
15
|
+
description: "Window ID (required for 'act' or 'close' actions)",
|
|
16
|
+
},
|
|
17
|
+
outcome: {
|
|
18
|
+
type: "string",
|
|
19
|
+
description: "Outcome description when acting on a window",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export function executeDecisionWindows(db, params) {
|
|
25
|
+
const rawDb = db.getRawDb();
|
|
26
|
+
const action = params.action ?? "list";
|
|
27
|
+
if (action === "act") {
|
|
28
|
+
if (!params.window_id)
|
|
29
|
+
return { error: "window_id is required for 'act' action" };
|
|
30
|
+
try {
|
|
31
|
+
rawDb.prepare(`UPDATE decision_windows SET status = 'acted', acted_at = datetime('now'), outcome = ? WHERE id = ?`).run(params.outcome ?? null, params.window_id);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return { error: `Failed to act on window: ${err instanceof Error ? err.message : String(err)}` };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (action === "close") {
|
|
38
|
+
if (!params.window_id)
|
|
39
|
+
return { error: "window_id is required for 'close' action" };
|
|
40
|
+
try {
|
|
41
|
+
rawDb.prepare(`UPDATE decision_windows SET status = 'closed', closed_at = datetime('now') WHERE id = ?`).run(params.window_id);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return { error: `Failed to close window: ${err instanceof Error ? err.message : String(err)}` };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Always return open windows after any action
|
|
48
|
+
let openWindows = [];
|
|
49
|
+
try {
|
|
50
|
+
openWindows = rawDb.prepare(`SELECT id, title, description, urgency, source_item_id, status,
|
|
51
|
+
opens_at, closes_at, acted_at, closed_at, outcome, created_at
|
|
52
|
+
FROM decision_windows WHERE status = 'open'
|
|
53
|
+
ORDER BY urgency DESC, created_at DESC`).all();
|
|
54
|
+
}
|
|
55
|
+
catch { /* Table may not exist yet */ }
|
|
56
|
+
const actionMsg = action === "act" ? `Window ${params.window_id} marked as acted`
|
|
57
|
+
: action === "close" ? `Window ${params.window_id} closed` : null;
|
|
58
|
+
return {
|
|
59
|
+
...(actionMsg ? { action_result: actionMsg } : {}),
|
|
60
|
+
open_windows: openWindows,
|
|
61
|
+
count: openWindows.length,
|
|
62
|
+
summary: openWindows.length === 0
|
|
63
|
+
? "No open decision windows. The system will surface time-sensitive opportunities as they are detected."
|
|
64
|
+
: `${openWindows.length} open decision window${openWindows.length !== 1 ? "s" : ""} requiring attention`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=decision-windows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-windows.js","sourceRoot":"","sources":["../../src/tools/decision-windows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* delegation_score tool
|
|
3
|
+
*
|
|
4
|
+
* AI-delegatability assessment. AI agents use this to self-assess:
|
|
5
|
+
* "Should I proceed autonomously or ask the human?"
|
|
6
|
+
*
|
|
7
|
+
* Computes a composite score from pattern stability, security sensitivity,
|
|
8
|
+
* decision density, and AI track record to produce a delegation recommendation.
|
|
9
|
+
*/
|
|
10
|
+
import type { FourDADatabase } from "../db.js";
|
|
11
|
+
export interface DelegationScoreParams {
|
|
12
|
+
subject: string;
|
|
13
|
+
task_description?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const delegationScoreTool: {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: "object";
|
|
20
|
+
properties: {
|
|
21
|
+
subject: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
task_description: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
required: string[];
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export declare function executeDelegationScore(db: FourDADatabase, params: DelegationScoreParams): object;
|
|
34
|
+
//# sourceMappingURL=delegation-score.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-score.d.ts","sourceRoot":"","sources":["../../src/tools/delegation-score.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAkCD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAoB/B,CAAC;AAiLF,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAgFR"}
|