@4da/mcp-server 4.5.0 → 4.6.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.
- package/LICENSE +201 -21
- package/README.md +63 -83
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/db.d.ts +46 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +156 -36
- package/dist/db.js.map +1 -1
- package/dist/doctor.js +1 -1
- package/dist/doctor.js.map +1 -1
- package/dist/http-transport.js +1 -1
- package/dist/http-transport.js.map +1 -1
- package/dist/index.d.ts +9 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -35
- package/dist/index.js.map +1 -1
- package/dist/live/cache.js +1 -1
- package/dist/live/cache.js.map +1 -1
- package/dist/live/crates-registry.js +1 -1
- package/dist/live/crates-registry.js.map +1 -1
- package/dist/live/go-registry.js +1 -1
- package/dist/live/go-registry.js.map +1 -1
- package/dist/live/hn-fetcher.js +1 -1
- package/dist/live/hn-fetcher.js.map +1 -1
- package/dist/live/http-utils.js +1 -1
- package/dist/live/http-utils.js.map +1 -1
- package/dist/live/index.d.ts +28 -0
- package/dist/live/index.d.ts.map +1 -1
- package/dist/live/index.js +63 -4
- package/dist/live/index.js.map +1 -1
- package/dist/live/npm-registry.js +1 -1
- package/dist/live/npm-registry.js.map +1 -1
- package/dist/live/osv-scanner.d.ts +4 -0
- package/dist/live/osv-scanner.d.ts.map +1 -1
- package/dist/live/osv-scanner.js +45 -40
- package/dist/live/osv-scanner.js.map +1 -1
- package/dist/live/pypi-registry.js +1 -1
- package/dist/live/pypi-registry.js.map +1 -1
- package/dist/live/rate-limiter.js +1 -1
- package/dist/live/rate-limiter.js.map +1 -1
- package/dist/live/semver-utils.js +1 -1
- package/dist/live/semver-utils.js.map +1 -1
- package/dist/live/types.d.ts +4 -0
- package/dist/live/types.d.ts.map +1 -1
- package/dist/live/types.js +1 -1
- package/dist/live/types.js.map +1 -1
- package/dist/live/version-resolver.d.ts +5 -0
- package/dist/live/version-resolver.d.ts.map +1 -1
- package/dist/live/version-resolver.js +64 -14
- package/dist/live/version-resolver.js.map +1 -1
- package/dist/live-singleton.js +1 -1
- package/dist/live-singleton.js.map +1 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +13 -16
- package/dist/llm.js.map +1 -1
- package/dist/output-manager.js +1 -1
- package/dist/output-manager.js.map +1 -1
- package/dist/project-scanner.d.ts +5 -0
- package/dist/project-scanner.d.ts.map +1 -1
- package/dist/project-scanner.js +66 -10
- package/dist/project-scanner.js.map +1 -1
- package/dist/schema-registry.d.ts +4 -2
- package/dist/schema-registry.d.ts.map +1 -1
- package/dist/schema-registry.js +58 -238
- package/dist/schema-registry.js.map +1 -1
- package/dist/schemas/agent-memory.json +1 -1
- package/dist/schemas/decision-enforcement.json +1 -1
- package/dist/schemas/decision-memory.json +1 -1
- package/dist/schemas/dependency-health.json +1 -1
- package/dist/schemas/developer-dna.json +1 -1
- package/dist/schemas/ecosystem-pulse.json +1 -1
- package/dist/schemas/get-actionable-signals.json +1 -1
- package/dist/schemas/get-context.json +1 -1
- package/dist/schemas/get-relevant-content.json +1 -1
- package/dist/schemas/knowledge-gaps.json +1 -1
- package/dist/schemas/record-feedback.json +1 -1
- package/dist/schemas/upgrade-planner.json +1 -1
- package/dist/schemas/vulnerability-scan.json +2 -2
- package/dist/setup.js +1 -1
- package/dist/setup.js.map +1 -1
- package/dist/tool-dispatch.d.ts +1 -7
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +51 -50
- package/dist/tool-dispatch.js.map +1 -1
- package/dist/tools/agent-memory.js +1 -1
- package/dist/tools/agent-memory.js.map +1 -1
- package/dist/tools/decision-enforcement.js +1 -1
- package/dist/tools/decision-enforcement.js.map +1 -1
- package/dist/tools/decision-memory.d.ts +0 -2
- package/dist/tools/decision-memory.d.ts.map +1 -1
- package/dist/tools/decision-memory.js +1 -80
- package/dist/tools/decision-memory.js.map +1 -1
- package/dist/tools/dependency-health.js +1 -1
- package/dist/tools/dependency-health.js.map +1 -1
- package/dist/tools/developer-dna.js +1 -1
- package/dist/tools/developer-dna.js.map +1 -1
- package/dist/tools/ecosystem-pulse.js +1 -1
- package/dist/tools/ecosystem-pulse.js.map +1 -1
- package/dist/tools/get-actionable-signals.d.ts.map +1 -1
- package/dist/tools/get-actionable-signals.js +26 -1
- package/dist/tools/get-actionable-signals.js.map +1 -1
- package/dist/tools/get-context.js +1 -1
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/get-relevant-content.js +1 -1
- package/dist/tools/get-relevant-content.js.map +1 -1
- package/dist/tools/index.d.ts +13 -42
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +19 -55
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/knowledge-gaps.js +1 -1
- package/dist/tools/knowledge-gaps.js.map +1 -1
- package/dist/tools/record-feedback.js +1 -1
- package/dist/tools/record-feedback.js.map +1 -1
- package/dist/tools/upgrade-planner.js +1 -1
- package/dist/tools/upgrade-planner.js.map +1 -1
- package/dist/tools/vulnerability-scan.d.ts +7 -3
- package/dist/tools/vulnerability-scan.d.ts.map +1 -1
- package/dist/tools/vulnerability-scan.js +19 -6
- package/dist/tools/vulnerability-scan.js.map +1 -1
- package/dist/tools/what-should-i-know.d.ts +3 -12
- package/dist/tools/what-should-i-know.d.ts.map +1 -1
- package/dist/tools/what-should-i-know.js +11 -171
- package/dist/tools/what-should-i-know.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +12 -8
- package/dist/schemas/agent-feedback-stats.json +0 -14
- package/dist/schemas/agent-session-brief.json +0 -25
- package/dist/schemas/attention-report.json +0 -13
- package/dist/schemas/autophagy-status.json +0 -13
- package/dist/schemas/compound-advantage.json +0 -14
- package/dist/schemas/config-validator.json +0 -18
- package/dist/schemas/context-analysis.json +0 -25
- package/dist/schemas/daily-briefing.json +0 -34
- package/dist/schemas/decision-windows.json +0 -22
- package/dist/schemas/delegation-score.json +0 -18
- package/dist/schemas/explain-relevance.json +0 -19
- package/dist/schemas/export-context.json +0 -17
- package/dist/schemas/llm-status.json +0 -13
- package/dist/schemas/preemption-feed.json +0 -18
- package/dist/schemas/project-health.json +0 -13
- package/dist/schemas/record-agent-feedback.json +0 -28
- package/dist/schemas/reverse-mentions.json +0 -13
- package/dist/schemas/score-autopsy.json +0 -30
- package/dist/schemas/semantic-shifts.json +0 -17
- package/dist/schemas/signal-chains.json +0 -19
- package/dist/schemas/source-health.json +0 -17
- package/dist/schemas/tech-radar.json +0 -23
- package/dist/schemas/topic-connections.json +0 -34
- package/dist/schemas/trend-analysis.json +0 -29
- package/dist/schemas/trust-summary.json +0 -13
- package/dist/tools/agent-feedback-stats.d.ts +0 -30
- package/dist/tools/agent-feedback-stats.d.ts.map +0 -1
- package/dist/tools/agent-feedback-stats.js +0 -41
- package/dist/tools/agent-feedback-stats.js.map +0 -1
- package/dist/tools/agent-session-brief.d.ts +0 -44
- package/dist/tools/agent-session-brief.d.ts.map +0 -1
- package/dist/tools/agent-session-brief.js +0 -179
- package/dist/tools/agent-session-brief.js.map +0 -1
- package/dist/tools/attention-report.d.ts +0 -40
- package/dist/tools/attention-report.d.ts.map +0 -1
- package/dist/tools/attention-report.js +0 -73
- package/dist/tools/attention-report.js.map +0 -1
- package/dist/tools/autophagy-status.d.ts +0 -25
- package/dist/tools/autophagy-status.d.ts.map +0 -1
- package/dist/tools/autophagy-status.js +0 -56
- package/dist/tools/autophagy-status.js.map +0 -1
- package/dist/tools/compound-advantage.d.ts +0 -30
- package/dist/tools/compound-advantage.d.ts.map +0 -1
- package/dist/tools/compound-advantage.js +0 -133
- package/dist/tools/compound-advantage.js.map +0 -1
- package/dist/tools/config-validator.d.ts +0 -59
- package/dist/tools/config-validator.d.ts.map +0 -1
- package/dist/tools/config-validator.js +0 -417
- package/dist/tools/config-validator.js.map +0 -1
- package/dist/tools/context-analysis.d.ts +0 -108
- package/dist/tools/context-analysis.d.ts.map +0 -1
- package/dist/tools/context-analysis.js +0 -301
- package/dist/tools/context-analysis.js.map +0 -1
- package/dist/tools/daily-briefing.d.ts +0 -103
- package/dist/tools/daily-briefing.d.ts.map +0 -1
- package/dist/tools/daily-briefing.js +0 -294
- package/dist/tools/daily-briefing.js.map +0 -1
- package/dist/tools/decision-windows.d.ts +0 -37
- package/dist/tools/decision-windows.d.ts.map +0 -1
- package/dist/tools/decision-windows.js +0 -67
- package/dist/tools/decision-windows.js.map +0 -1
- package/dist/tools/delegation-score.d.ts +0 -34
- package/dist/tools/delegation-score.d.ts.map +0 -1
- package/dist/tools/delegation-score.js +0 -260
- package/dist/tools/delegation-score.js.map +0 -1
- package/dist/tools/explain-relevance.d.ts +0 -36
- package/dist/tools/explain-relevance.d.ts.map +0 -1
- package/dist/tools/explain-relevance.js +0 -51
- package/dist/tools/explain-relevance.js.map +0 -1
- package/dist/tools/export-context.d.ts +0 -60
- package/dist/tools/export-context.d.ts.map +0 -1
- package/dist/tools/export-context.js +0 -179
- package/dist/tools/export-context.js.map +0 -1
- package/dist/tools/llm-status.d.ts +0 -45
- package/dist/tools/llm-status.d.ts.map +0 -1
- package/dist/tools/llm-status.js +0 -93
- package/dist/tools/llm-status.js.map +0 -1
- package/dist/tools/muse-context.d.ts +0 -195
- package/dist/tools/muse-context.d.ts.map +0 -1
- package/dist/tools/muse-context.js +0 -284
- package/dist/tools/muse-context.js.map +0 -1
- package/dist/tools/preemption-feed.d.ts +0 -55
- package/dist/tools/preemption-feed.d.ts.map +0 -1
- package/dist/tools/preemption-feed.js +0 -124
- package/dist/tools/preemption-feed.js.map +0 -1
- package/dist/tools/project-health.d.ts +0 -53
- package/dist/tools/project-health.d.ts.map +0 -1
- package/dist/tools/project-health.js +0 -122
- package/dist/tools/project-health.js.map +0 -1
- package/dist/tools/record-agent-feedback.d.ts +0 -46
- package/dist/tools/record-agent-feedback.d.ts.map +0 -1
- package/dist/tools/record-agent-feedback.js +0 -71
- package/dist/tools/record-agent-feedback.js.map +0 -1
- package/dist/tools/reverse-mentions.d.ts +0 -38
- package/dist/tools/reverse-mentions.d.ts.map +0 -1
- package/dist/tools/reverse-mentions.js +0 -75
- package/dist/tools/reverse-mentions.js.map +0 -1
- package/dist/tools/score-autopsy.d.ts +0 -93
- package/dist/tools/score-autopsy.d.ts.map +0 -1
- package/dist/tools/score-autopsy.js +0 -295
- package/dist/tools/score-autopsy.js.map +0 -1
- package/dist/tools/semantic-shifts.d.ts +0 -53
- package/dist/tools/semantic-shifts.d.ts.map +0 -1
- package/dist/tools/semantic-shifts.js +0 -74
- package/dist/tools/semantic-shifts.js.map +0 -1
- package/dist/tools/signal-chains.d.ts +0 -52
- package/dist/tools/signal-chains.d.ts.map +0 -1
- package/dist/tools/signal-chains.js +0 -63
- package/dist/tools/signal-chains.js.map +0 -1
- package/dist/tools/source-health.d.ts +0 -64
- package/dist/tools/source-health.d.ts.map +0 -1
- package/dist/tools/source-health.js +0 -205
- package/dist/tools/source-health.js.map +0 -1
- package/dist/tools/tech-radar.d.ts +0 -38
- package/dist/tools/tech-radar.d.ts.map +0 -1
- package/dist/tools/tech-radar.js +0 -249
- package/dist/tools/tech-radar.js.map +0 -1
- package/dist/tools/topic-connections.d.ts +0 -112
- package/dist/tools/topic-connections.d.ts.map +0 -1
- package/dist/tools/topic-connections.js +0 -319
- package/dist/tools/topic-connections.js.map +0 -1
- package/dist/tools/trend-analysis.d.ts +0 -105
- package/dist/tools/trend-analysis.d.ts.map +0 -1
- package/dist/tools/trend-analysis.js +0 -296
- package/dist/tools/trend-analysis.js.map +0 -1
- package/dist/tools/trust-summary.d.ts +0 -38
- package/dist/tools/trust-summary.d.ts.map +0 -1
- package/dist/tools/trust-summary.js +0 -89
- package/dist/tools/trust-summary.js.map +0 -1
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
-
/**
|
|
3
|
-
* Score Autopsy Tool
|
|
4
|
-
*
|
|
5
|
-
* Deep forensic analysis of why content scored the way it did.
|
|
6
|
-
* This is a SUPERPOWER - it reveals the complete scoring breakdown.
|
|
7
|
-
*
|
|
8
|
-
* With synthesize=true, uses LLM to explain whether the score makes sense.
|
|
9
|
-
*/
|
|
10
|
-
import { getLLMConfig, canSynthesize, synthesize, SYNTHESIS_PROMPTS } from "../llm.js";
|
|
11
|
-
import { createScoreAutopsyCompact } from "../output-manager.js";
|
|
12
|
-
export const scoreAutopsyTool = {
|
|
13
|
-
name: "score_autopsy",
|
|
14
|
-
description: `Perform a complete forensic analysis of why an item scored the way it did.
|
|
15
|
-
|
|
16
|
-
With synthesize=true (recommended), uses AI to explain whether the score seems correct.
|
|
17
|
-
|
|
18
|
-
Returns:
|
|
19
|
-
- Component-by-component score breakdown
|
|
20
|
-
- Matching context (interests, tech, topics)
|
|
21
|
-
- Comparison with similar items
|
|
22
|
-
- Recommendations for improving relevance
|
|
23
|
-
- AI analysis (when enabled)
|
|
24
|
-
|
|
25
|
-
Use this when you need to understand or debug relevance scores.`,
|
|
26
|
-
inputSchema: {
|
|
27
|
-
type: "object",
|
|
28
|
-
properties: {
|
|
29
|
-
item_id: {
|
|
30
|
-
type: "number",
|
|
31
|
-
description: "The item ID to analyze",
|
|
32
|
-
},
|
|
33
|
-
source_type: {
|
|
34
|
-
type: "string",
|
|
35
|
-
description: "Source type (e.g., 'hackernews', 'arxiv')",
|
|
36
|
-
},
|
|
37
|
-
compare_count: {
|
|
38
|
-
type: "number",
|
|
39
|
-
description: "Number of similar items to compare (default: 5)",
|
|
40
|
-
},
|
|
41
|
-
synthesize: {
|
|
42
|
-
type: "boolean",
|
|
43
|
-
description: "Use AI to analyze if the score makes sense (default: true if LLM configured)",
|
|
44
|
-
},
|
|
45
|
-
compact: {
|
|
46
|
-
type: "boolean",
|
|
47
|
-
description: "Return compact result with file reference (default: true for ~80% token reduction)",
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
required: ["item_id", "source_type"],
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
export async function executeScoreAutopsy(db, params) {
|
|
54
|
-
const { item_id, source_type, compare_count = 5 } = params;
|
|
55
|
-
const useCompact = params.compact !== false; // Default to compact=true
|
|
56
|
-
// Check LLM availability
|
|
57
|
-
const dbInstance = db.db;
|
|
58
|
-
const llmConfig = getLLMConfig(dbInstance);
|
|
59
|
-
const shouldSynthesize = params.synthesize ?? canSynthesize(llmConfig);
|
|
60
|
-
// Get the item
|
|
61
|
-
const item = db.getSourceItem(item_id, source_type);
|
|
62
|
-
if (!item) {
|
|
63
|
-
return {
|
|
64
|
-
error: `Item ${item_id} of type ${source_type} not found`,
|
|
65
|
-
suggestion: "Use get_relevant_content to find valid item IDs first.",
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
// Get full context
|
|
69
|
-
const context = db.getUserContext(true, true);
|
|
70
|
-
// Get detailed explanation
|
|
71
|
-
const explanation = db.explainRelevance(item_id, source_type);
|
|
72
|
-
if (!explanation) {
|
|
73
|
-
return {
|
|
74
|
-
error: `Failed to compute relevance explanation for item ${item_id}`,
|
|
75
|
-
suggestion: "The item may not have been scored yet. Try a different item.",
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
// Calculate age
|
|
79
|
-
const createdAt = new Date(item.created_at.replace(" ", "T") + "Z");
|
|
80
|
-
const ageHours = Math.round((Date.now() - createdAt.getTime()) / (1000 * 60 * 60));
|
|
81
|
-
// Build component breakdown
|
|
82
|
-
const components = [
|
|
83
|
-
{
|
|
84
|
-
name: "Interest Match",
|
|
85
|
-
raw_value: explanation.matching_context.matching_interests.length > 0 ? 0.8 : 0,
|
|
86
|
-
weight: 0.30,
|
|
87
|
-
contribution: explanation.score_breakdown.static_match_score * 0.5,
|
|
88
|
-
explanation: explanation.matching_context.matching_interests.length > 0
|
|
89
|
-
? `Matches interests: ${explanation.matching_context.matching_interests.join(", ")}`
|
|
90
|
-
: "No direct interest matches",
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: "Tech Stack Match",
|
|
94
|
-
raw_value: explanation.matching_context.matching_tech.length > 0 ? 0.7 : 0,
|
|
95
|
-
weight: 0.20,
|
|
96
|
-
contribution: explanation.matching_context.matching_tech.length * 0.2,
|
|
97
|
-
explanation: explanation.matching_context.matching_tech.length > 0
|
|
98
|
-
? `Matches tech: ${explanation.matching_context.matching_tech.join(", ")}`
|
|
99
|
-
: "No tech stack matches",
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: "Active Topics (ACE)",
|
|
103
|
-
raw_value: explanation.score_breakdown.ace_match_score,
|
|
104
|
-
weight: 0.15,
|
|
105
|
-
contribution: explanation.score_breakdown.ace_match_score,
|
|
106
|
-
explanation: explanation.matching_context.matching_topics.length > 0
|
|
107
|
-
? `Recent work topics: ${explanation.matching_context.matching_topics.join(", ")}`
|
|
108
|
-
: "No active topic matches",
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
name: "Learned Affinities",
|
|
112
|
-
raw_value: explanation.score_breakdown.learned_affinity_score,
|
|
113
|
-
weight: 0.15,
|
|
114
|
-
contribution: explanation.score_breakdown.learned_affinity_score,
|
|
115
|
-
explanation: explanation.matching_context.matching_affinities.length > 0
|
|
116
|
-
? `Learned preferences: ${explanation.matching_context.matching_affinities.join(", ")}`
|
|
117
|
-
: "No learned affinity matches",
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
name: "Recency Boost",
|
|
121
|
-
raw_value: ageHours < 24 ? 0.9 : ageHours < 72 ? 0.6 : 0.3,
|
|
122
|
-
weight: 0.10,
|
|
123
|
-
contribution: ageHours < 24 ? 0.09 : ageHours < 72 ? 0.06 : 0.03,
|
|
124
|
-
explanation: ageHours < 24
|
|
125
|
-
? `Fresh content (${ageHours}h old)`
|
|
126
|
-
: `Older content (${Math.round(ageHours / 24)}d old)`,
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
name: "Anti-Penalty",
|
|
130
|
-
raw_value: -explanation.score_breakdown.anti_penalty,
|
|
131
|
-
weight: 1.0,
|
|
132
|
-
contribution: -explanation.score_breakdown.anti_penalty,
|
|
133
|
-
explanation: explanation.score_breakdown.anti_penalty > 0
|
|
134
|
-
? "Score reduced due to exclusions or anti-topics"
|
|
135
|
-
: "No penalties applied",
|
|
136
|
-
},
|
|
137
|
-
];
|
|
138
|
-
// Get similar items for comparison
|
|
139
|
-
const similarItems = getSimilarItems(db, item, source_type, compare_count);
|
|
140
|
-
// Generate recommendations
|
|
141
|
-
const recommendations = generateRecommendations(explanation.score_breakdown, explanation.matching_context, context, item);
|
|
142
|
-
// Generate narrative explanation
|
|
143
|
-
const narrative = generateNarrative(item, explanation.score_breakdown.final_score, explanation.matching_context, ageHours);
|
|
144
|
-
const result = {
|
|
145
|
-
item: {
|
|
146
|
-
id: item.id,
|
|
147
|
-
title: item.title,
|
|
148
|
-
url: item.url,
|
|
149
|
-
source_type: item.source_type,
|
|
150
|
-
created_at: item.created_at,
|
|
151
|
-
age_hours: ageHours,
|
|
152
|
-
},
|
|
153
|
-
final_score: explanation.score_breakdown.final_score,
|
|
154
|
-
components,
|
|
155
|
-
matching_context: {
|
|
156
|
-
interests: explanation.matching_context.matching_interests,
|
|
157
|
-
tech_stack: explanation.matching_context.matching_tech,
|
|
158
|
-
active_topics: explanation.matching_context.matching_topics,
|
|
159
|
-
learned_affinities: explanation.matching_context.matching_affinities,
|
|
160
|
-
exclusions_hit: explanation.score_breakdown.anti_penalty > 0
|
|
161
|
-
? ["Exclusion or anti-topic triggered"]
|
|
162
|
-
: [],
|
|
163
|
-
},
|
|
164
|
-
similar_items: similarItems,
|
|
165
|
-
recommendations,
|
|
166
|
-
narrative,
|
|
167
|
-
};
|
|
168
|
-
// AI Analysis - the actual superpower
|
|
169
|
-
if (shouldSynthesize && canSynthesize(llmConfig)) {
|
|
170
|
-
try {
|
|
171
|
-
const autopsyData = {
|
|
172
|
-
item: { title: item.title, content: item.content?.substring(0, 500) },
|
|
173
|
-
final_score: result.final_score,
|
|
174
|
-
components: result.components,
|
|
175
|
-
matching_context: result.matching_context,
|
|
176
|
-
};
|
|
177
|
-
const contextData = {
|
|
178
|
-
interests: context.interests.slice(0, 10),
|
|
179
|
-
tech_stack: context.tech_stack,
|
|
180
|
-
role: context.role,
|
|
181
|
-
};
|
|
182
|
-
const synthesis = await synthesize(llmConfig, {
|
|
183
|
-
system: SYNTHESIS_PROMPTS.scoreAutopsy.system,
|
|
184
|
-
prompt: SYNTHESIS_PROMPTS.scoreAutopsy.buildPrompt(autopsyData, contextData),
|
|
185
|
-
max_tokens: 350,
|
|
186
|
-
complexity: SYNTHESIS_PROMPTS.scoreAutopsy.complexity,
|
|
187
|
-
});
|
|
188
|
-
// Parse the synthesis to extract structured assessment
|
|
189
|
-
const text = synthesis.synthesis.toLowerCase();
|
|
190
|
-
let scoreAssessment = "uncertain";
|
|
191
|
-
if (text.includes("too high") || text.includes("overscored") || text.includes("inflated")) {
|
|
192
|
-
scoreAssessment = "too_high";
|
|
193
|
-
}
|
|
194
|
-
else if (text.includes("too low") || text.includes("underscored") || text.includes("should be higher")) {
|
|
195
|
-
scoreAssessment = "too_low";
|
|
196
|
-
}
|
|
197
|
-
else if (text.includes("makes sense") || text.includes("accurate") || text.includes("correct") || text.includes("appropriate")) {
|
|
198
|
-
scoreAssessment = "accurate";
|
|
199
|
-
}
|
|
200
|
-
result.ai_analysis = {
|
|
201
|
-
verdict: synthesis.synthesis,
|
|
202
|
-
score_assessment: scoreAssessment,
|
|
203
|
-
reasoning: synthesis.synthesis.split("\n")[0] || "",
|
|
204
|
-
suggested_action: recommendations[0] || "No specific action needed",
|
|
205
|
-
model_used: synthesis.model_used,
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
console.error("AI analysis failed:", error);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
// Return compact or full result based on parameter
|
|
213
|
-
if (useCompact) {
|
|
214
|
-
return createScoreAutopsyCompact(result);
|
|
215
|
-
}
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
|
-
function getSimilarItems(db, item, sourceType, count) {
|
|
219
|
-
// Get recent items from same source to compare
|
|
220
|
-
const recentItems = db.getRelevantContent(0, sourceType, count * 2, 168); // Last week
|
|
221
|
-
return recentItems
|
|
222
|
-
.filter((ri) => ri.id !== item.id)
|
|
223
|
-
.slice(0, count)
|
|
224
|
-
.map((ri) => {
|
|
225
|
-
const scoreDiff = ri.relevance_score - db.explainRelevance(item.id, sourceType).score_breakdown.final_score;
|
|
226
|
-
return {
|
|
227
|
-
id: ri.id,
|
|
228
|
-
title: ri.title,
|
|
229
|
-
score: ri.relevance_score,
|
|
230
|
-
score_difference: Math.round(scoreDiff * 100) / 100,
|
|
231
|
-
key_difference: scoreDiff > 0
|
|
232
|
-
? "Higher: likely more keyword matches"
|
|
233
|
-
: "Lower: fewer context matches",
|
|
234
|
-
};
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
function generateRecommendations(scores, matching, context, item) {
|
|
238
|
-
const recommendations = [];
|
|
239
|
-
// Low interest match
|
|
240
|
-
if (matching.matching_interests.length === 0 && scores.static_match_score < 0.2) {
|
|
241
|
-
// Extract potential keywords from item
|
|
242
|
-
const words = item.title.toLowerCase().split(/\s+/).filter(w => w.length > 4);
|
|
243
|
-
const topWord = words[0] || "this topic";
|
|
244
|
-
recommendations.push(`Add "${topWord}" as an explicit interest to boost similar content`);
|
|
245
|
-
}
|
|
246
|
-
// Low tech match
|
|
247
|
-
if (matching.matching_tech.length === 0 && context.tech_stack.length > 0) {
|
|
248
|
-
recommendations.push("Item doesn't mention your tech stack - relevance may improve if content aligns with: " +
|
|
249
|
-
context.tech_stack.slice(0, 3).join(", "));
|
|
250
|
-
}
|
|
251
|
-
// Low ACE match
|
|
252
|
-
if (scores.ace_match_score < 0.05) {
|
|
253
|
-
recommendations.push("No recent work context matches - ensure ACE is scanning your active projects");
|
|
254
|
-
}
|
|
255
|
-
// Low learned score
|
|
256
|
-
if (scores.learned_affinity_score < 0.05) {
|
|
257
|
-
recommendations.push("Give feedback on similar items to help 4DA learn your preferences");
|
|
258
|
-
}
|
|
259
|
-
// General recommendation if score is decent
|
|
260
|
-
if (recommendations.length === 0) {
|
|
261
|
-
recommendations.push("Score looks healthy - continue providing feedback to refine");
|
|
262
|
-
}
|
|
263
|
-
return recommendations;
|
|
264
|
-
}
|
|
265
|
-
function generateNarrative(item, score, matching, ageHours) {
|
|
266
|
-
const parts = [];
|
|
267
|
-
// Score assessment
|
|
268
|
-
if (score >= 0.8) {
|
|
269
|
-
parts.push(`"${item.title}" is highly relevant to you (${Math.round(score * 100)}% match).`);
|
|
270
|
-
}
|
|
271
|
-
else if (score >= 0.5) {
|
|
272
|
-
parts.push(`"${item.title}" has moderate relevance (${Math.round(score * 100)}% match).`);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
parts.push(`"${item.title}" has low relevance (${Math.round(score * 100)}% match).`);
|
|
276
|
-
}
|
|
277
|
-
// Why
|
|
278
|
-
const matches = [
|
|
279
|
-
...matching.matching_interests.map(i => `interest "${i}"`),
|
|
280
|
-
...matching.matching_tech.map(t => `tech "${t}"`),
|
|
281
|
-
...matching.matching_topics.map(t => `recent work on "${t}"`),
|
|
282
|
-
];
|
|
283
|
-
if (matches.length > 0) {
|
|
284
|
-
parts.push(`It matches your ${matches.slice(0, 2).join(" and ")}.`);
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
parts.push("No strong matches to your declared interests or recent work.");
|
|
288
|
-
}
|
|
289
|
-
// Recency
|
|
290
|
-
if (ageHours < 24) {
|
|
291
|
-
parts.push("The freshness boost helps (published within 24 hours).");
|
|
292
|
-
}
|
|
293
|
-
return parts.join(" ");
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=score-autopsy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"score-autopsy.js","sourceRoot":"","sources":["../../src/tools/score-autopsy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* semantic_shifts tool
|
|
3
|
-
*
|
|
4
|
-
* Detect how topic narratives shift over time.
|
|
5
|
-
*/
|
|
6
|
-
import type { FourDADatabase } from "../db.js";
|
|
7
|
-
export interface SemanticShiftsParams {
|
|
8
|
-
period_days?: number;
|
|
9
|
-
min_magnitude?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare const semanticShiftsTool: {
|
|
12
|
-
name: string;
|
|
13
|
-
description: string;
|
|
14
|
-
inputSchema: {
|
|
15
|
-
type: "object";
|
|
16
|
-
properties: {
|
|
17
|
-
period_days: {
|
|
18
|
-
type: string;
|
|
19
|
-
description: string;
|
|
20
|
-
default: number;
|
|
21
|
-
};
|
|
22
|
-
min_magnitude: {
|
|
23
|
-
type: string;
|
|
24
|
-
description: string;
|
|
25
|
-
default: number;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
export interface CentroidSnapshot {
|
|
31
|
-
data: {
|
|
32
|
-
drift_magnitude?: number;
|
|
33
|
-
direction?: string;
|
|
34
|
-
[key: string]: unknown;
|
|
35
|
-
};
|
|
36
|
-
created_at: string;
|
|
37
|
-
}
|
|
38
|
-
export interface SemanticShift {
|
|
39
|
-
topic: string;
|
|
40
|
-
drift_magnitude: number;
|
|
41
|
-
direction: string;
|
|
42
|
-
period: string;
|
|
43
|
-
snapshots: number;
|
|
44
|
-
detected_at: string;
|
|
45
|
-
}
|
|
46
|
-
export declare function executeSemanticShifts(db: FourDADatabase, params: SemanticShiftsParams): {
|
|
47
|
-
shifts: SemanticShift[];
|
|
48
|
-
total: number;
|
|
49
|
-
period_days: number;
|
|
50
|
-
topics_tracked: number;
|
|
51
|
-
summary: string;
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=semantic-shifts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-shifts.d.ts","sourceRoot":"","sources":["../../src/tools/semantic-shifts.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;CAkB9B,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC/E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,oBAAoB;;;;;;EAuD7B"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
-
/**
|
|
3
|
-
* semantic_shifts tool
|
|
4
|
-
*
|
|
5
|
-
* Detect how topic narratives shift over time.
|
|
6
|
-
*/
|
|
7
|
-
export const semanticShiftsTool = {
|
|
8
|
-
name: "semantic_shifts",
|
|
9
|
-
description: `Detect narrative shifts in topics you follow. Instead of "new post about X", see "the conversation about X shifted from A to B."`,
|
|
10
|
-
inputSchema: {
|
|
11
|
-
type: "object",
|
|
12
|
-
properties: {
|
|
13
|
-
period_days: {
|
|
14
|
-
type: "number",
|
|
15
|
-
description: "Look-back period in days. Default: 7",
|
|
16
|
-
default: 7,
|
|
17
|
-
},
|
|
18
|
-
min_magnitude: {
|
|
19
|
-
type: "number",
|
|
20
|
-
description: "Minimum drift magnitude (0-1). Default: 0.1",
|
|
21
|
-
default: 0.1,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
export function executeSemanticShifts(db, params) {
|
|
27
|
-
const rawDb = db.getRawDb();
|
|
28
|
-
const periodDays = params.period_days || 7;
|
|
29
|
-
const rows = rawDb
|
|
30
|
-
.prepare(`SELECT id, subject, data, created_at
|
|
31
|
-
FROM temporal_events
|
|
32
|
-
WHERE event_type = 'topic_centroid'
|
|
33
|
-
AND created_at >= datetime('now', '-' || ? || ' days')
|
|
34
|
-
ORDER BY created_at DESC`)
|
|
35
|
-
.all(periodDays);
|
|
36
|
-
// Group centroids by subject (topic)
|
|
37
|
-
const byTopic = new Map();
|
|
38
|
-
for (const row of rows) {
|
|
39
|
-
const existing = byTopic.get(row.subject) || [];
|
|
40
|
-
existing.push({
|
|
41
|
-
data: JSON.parse(row.data),
|
|
42
|
-
created_at: row.created_at,
|
|
43
|
-
});
|
|
44
|
-
byTopic.set(row.subject, existing);
|
|
45
|
-
}
|
|
46
|
-
// Detect shifts where we have at least 2 snapshots
|
|
47
|
-
const shifts = [];
|
|
48
|
-
for (const [topic, snapshots] of byTopic) {
|
|
49
|
-
if (snapshots.length < 2)
|
|
50
|
-
continue;
|
|
51
|
-
const latest = snapshots[0];
|
|
52
|
-
const earliest = snapshots[snapshots.length - 1];
|
|
53
|
-
const magnitude = latest.data.drift_magnitude || 0;
|
|
54
|
-
if (magnitude >= (params.min_magnitude || 0.1)) {
|
|
55
|
-
shifts.push({
|
|
56
|
-
topic,
|
|
57
|
-
drift_magnitude: magnitude,
|
|
58
|
-
direction: latest.data.direction || "unknown",
|
|
59
|
-
period: `last ${periodDays} days`,
|
|
60
|
-
snapshots: snapshots.length,
|
|
61
|
-
detected_at: latest.created_at,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
shifts.sort((a, b) => b.drift_magnitude - a.drift_magnitude);
|
|
66
|
-
return {
|
|
67
|
-
shifts,
|
|
68
|
-
total: shifts.length,
|
|
69
|
-
period_days: periodDays,
|
|
70
|
-
topics_tracked: byTopic.size,
|
|
71
|
-
summary: `${shifts.length} narrative shift${shifts.length !== 1 ? "s" : ""} detected across ${byTopic.size} topics`,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=semantic-shifts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-shifts.js","sourceRoot":"","sources":["../../src/tools/semantic-shifts.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;GAIG;AAUH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,kIAAkI;IAC/I,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;gBACnD,OAAO,EAAE,CAAC;aACX;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;gBAC1D,OAAO,EAAE,GAAG;aACb;SACF;KACF;CACF,CAAC;AAgBF,MAAM,UAAU,qBAAqB,CACnC,EAAkB,EAClB,MAA4B;IAE5B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,KAAK;SACf,OAAO,CACN;;;;gCAI0B,CAC3B;SACA,GAAG,CAAC,UAAU,CAAuB,CAAC;IAEzC,qCAAqC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,mDAAmD;IACnD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,eAAe,EAAE,SAAS;gBAC1B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS;gBAC7C,MAAM,EAAE,QAAQ,UAAU,OAAO;gBACjC,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,WAAW,EAAE,MAAM,CAAC,UAAU;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;IAE7D,OAAO;QACL,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,WAAW,EAAE,UAAU;QACvB,cAAc,EAAE,OAAO,CAAC,IAAI;QAC5B,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,mBAAmB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,oBAAoB,OAAO,CAAC,IAAI,SAAS;KACpH,CAAC;AACJ,CAAC"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* signal_chains tool
|
|
3
|
-
*
|
|
4
|
-
* Get active signal chains - connected signals that form causal narratives over time.
|
|
5
|
-
*/
|
|
6
|
-
import type { FourDADatabase } from "../db.js";
|
|
7
|
-
export interface SignalChainsParams {
|
|
8
|
-
resolution?: string;
|
|
9
|
-
min_priority?: string;
|
|
10
|
-
}
|
|
11
|
-
export declare const signalChainsTool: {
|
|
12
|
-
name: string;
|
|
13
|
-
description: string;
|
|
14
|
-
inputSchema: {
|
|
15
|
-
type: "object";
|
|
16
|
-
properties: {
|
|
17
|
-
resolution: {
|
|
18
|
-
type: string;
|
|
19
|
-
enum: string[];
|
|
20
|
-
description: string;
|
|
21
|
-
default: string;
|
|
22
|
-
};
|
|
23
|
-
min_priority: {
|
|
24
|
-
type: string;
|
|
25
|
-
enum: string[];
|
|
26
|
-
description: string;
|
|
27
|
-
default: string;
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
export interface ChainData {
|
|
33
|
-
chain_name?: string;
|
|
34
|
-
links?: unknown[];
|
|
35
|
-
overall_priority?: string;
|
|
36
|
-
resolution?: string;
|
|
37
|
-
suggested_action?: string;
|
|
38
|
-
}
|
|
39
|
-
export declare function executeSignalChains(db: FourDADatabase, params: SignalChainsParams): {
|
|
40
|
-
chains: {
|
|
41
|
-
id: number;
|
|
42
|
-
chain_name: string;
|
|
43
|
-
links: unknown[];
|
|
44
|
-
overall_priority: string;
|
|
45
|
-
resolution: string;
|
|
46
|
-
suggested_action: string;
|
|
47
|
-
created_at: string;
|
|
48
|
-
}[];
|
|
49
|
-
total: number;
|
|
50
|
-
summary: string;
|
|
51
|
-
};
|
|
52
|
-
//# sourceMappingURL=signal-chains.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signal-chains.d.ts","sourceRoot":"","sources":["../../src/tools/signal-chains.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;CAoB5B,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,kBAAkB;;;;;;;;;;;;EA2C3B"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
-
/**
|
|
3
|
-
* signal_chains tool
|
|
4
|
-
*
|
|
5
|
-
* Get active signal chains - connected signals that form causal narratives over time.
|
|
6
|
-
*/
|
|
7
|
-
export const signalChainsTool = {
|
|
8
|
-
name: "signal_chains",
|
|
9
|
-
description: `Get active signal chains - connected signals that form causal narratives over time. E.g., "CVE found Monday + your dep uses it Tuesday + patch released today = act now."`,
|
|
10
|
-
inputSchema: {
|
|
11
|
-
type: "object",
|
|
12
|
-
properties: {
|
|
13
|
-
resolution: {
|
|
14
|
-
type: "string",
|
|
15
|
-
enum: ["open", "resolved", "expired", "all"],
|
|
16
|
-
description: "Filter by chain resolution status. Default: open",
|
|
17
|
-
default: "open",
|
|
18
|
-
},
|
|
19
|
-
min_priority: {
|
|
20
|
-
type: "string",
|
|
21
|
-
enum: ["critical", "high", "medium", "low"],
|
|
22
|
-
description: "Minimum chain priority to include. Default: low",
|
|
23
|
-
default: "low",
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
export function executeSignalChains(db, params) {
|
|
29
|
-
const rawDb = db.getRawDb();
|
|
30
|
-
const resolution = params.resolution || "open";
|
|
31
|
-
let query = `SELECT id, event_type, subject, data, created_at
|
|
32
|
-
FROM temporal_events
|
|
33
|
-
WHERE event_type = 'signal_chain'`;
|
|
34
|
-
const queryParams = [];
|
|
35
|
-
if (resolution !== "all") {
|
|
36
|
-
query += ` AND json_extract(data, '$.resolution') = ?`;
|
|
37
|
-
queryParams.push(resolution);
|
|
38
|
-
}
|
|
39
|
-
query += " ORDER BY created_at DESC LIMIT 50";
|
|
40
|
-
const rows = rawDb.prepare(query).all(...queryParams);
|
|
41
|
-
const chains = rows.map((row) => {
|
|
42
|
-
const data = JSON.parse(row.data);
|
|
43
|
-
return {
|
|
44
|
-
id: row.id,
|
|
45
|
-
chain_name: data.chain_name || row.subject,
|
|
46
|
-
links: data.links || [],
|
|
47
|
-
overall_priority: data.overall_priority || "medium",
|
|
48
|
-
resolution: data.resolution || "open",
|
|
49
|
-
suggested_action: data.suggested_action || "",
|
|
50
|
-
created_at: row.created_at,
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
// Filter by priority
|
|
54
|
-
const priorityOrder = { critical: 4, high: 3, medium: 2, low: 1 };
|
|
55
|
-
const minLevel = priorityOrder[params.min_priority || "low"] || 1;
|
|
56
|
-
const filtered = chains.filter((c) => (priorityOrder[c.overall_priority] || 0) >= minLevel);
|
|
57
|
-
return {
|
|
58
|
-
chains: filtered,
|
|
59
|
-
total: filtered.length,
|
|
60
|
-
summary: `${filtered.length} signal chain${filtered.length !== 1 ? "s" : ""} (${resolution})`,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=signal-chains.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signal-chains.js","sourceRoot":"","sources":["../../src/tools/signal-chains.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;GAIG;AAUH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,2KAA2K;IACxL,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC;gBAC5C,WAAW,EAAE,kDAAkD;gBAC/D,OAAO,EAAE,MAAM;aAChB;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;gBAC3C,WAAW,EAAE,iDAAiD;gBAC9D,OAAO,EAAE,KAAK;aACf;SACF;KACF;CACF,CAAC;AAUF,MAAM,UAAU,mBAAmB,CACjC,EAAkB,EAClB,MAA0B;IAE1B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;IAE/C,IAAI,KAAK,GAAG;;sCAEwB,CAAC;IAErC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,KAAK,IAAI,6CAA6C,CAAC;QACvD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,IAAI,oCAAoC,CAAC;IAE9C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAqB,CAAC;IAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAc,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO;YAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,QAAQ;YACnD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,MAAM;YACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;YAC7C,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1F,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAC5D,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,GAAG;KAC9F,CAAC;AACJ,CAAC"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Source Health Tool
|
|
3
|
-
*
|
|
4
|
-
* Diagnose source fetching, parsing, and data flow issues.
|
|
5
|
-
* This is a SUPERPOWER - it reveals pipeline problems before they become mysteries.
|
|
6
|
-
*/
|
|
7
|
-
import type { FourDADatabase } from "../db.js";
|
|
8
|
-
export declare const sourceHealthTool: {
|
|
9
|
-
name: string;
|
|
10
|
-
description: string;
|
|
11
|
-
inputSchema: {
|
|
12
|
-
type: string;
|
|
13
|
-
properties: {
|
|
14
|
-
source: {
|
|
15
|
-
type: string;
|
|
16
|
-
description: string;
|
|
17
|
-
};
|
|
18
|
-
hours: {
|
|
19
|
-
type: string;
|
|
20
|
-
description: string;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
export interface SourceHealthParams {
|
|
26
|
-
source?: string;
|
|
27
|
-
hours?: number;
|
|
28
|
-
}
|
|
29
|
-
interface SourceStatus {
|
|
30
|
-
source: string;
|
|
31
|
-
status: "healthy" | "degraded" | "failing" | "unknown";
|
|
32
|
-
last_item_at: string | null;
|
|
33
|
-
hours_since_last: number | null;
|
|
34
|
-
items_24h: number;
|
|
35
|
-
items_7d: number;
|
|
36
|
-
avg_items_per_day: number;
|
|
37
|
-
quality_metrics: {
|
|
38
|
-
has_url_rate: number;
|
|
39
|
-
has_content_rate: number;
|
|
40
|
-
avg_content_length: number;
|
|
41
|
-
};
|
|
42
|
-
issues: string[];
|
|
43
|
-
recommendations: string[];
|
|
44
|
-
}
|
|
45
|
-
interface SourceHealthResult {
|
|
46
|
-
analysis_period: {
|
|
47
|
-
start: string;
|
|
48
|
-
end: string;
|
|
49
|
-
hours: number;
|
|
50
|
-
};
|
|
51
|
-
overall_status: "healthy" | "degraded" | "critical";
|
|
52
|
-
sources: SourceStatus[];
|
|
53
|
-
summary: {
|
|
54
|
-
total_sources: number;
|
|
55
|
-
healthy: number;
|
|
56
|
-
degraded: number;
|
|
57
|
-
failing: number;
|
|
58
|
-
total_items_24h: number;
|
|
59
|
-
};
|
|
60
|
-
global_recommendations: string[];
|
|
61
|
-
}
|
|
62
|
-
export declare function executeSourceHealth(db: FourDADatabase, params: SourceHealthParams): SourceHealthResult;
|
|
63
|
-
export {};
|
|
64
|
-
//# sourceMappingURL=source-health.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source-health.d.ts","sourceRoot":"","sources":["../../src/tools/source-health.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAwB5B,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACvD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC1B,eAAe,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,cAAc,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACpD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,kBAAkB,GACzB,kBAAkB,CA2FpB"}
|