@code-insights/cli 3.6.0 → 4.0.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/CHANGELOG.md +53 -0
- package/README.md +40 -4
- package/dashboard-dist/assets/index-D1JDyyu5.js +660 -0
- package/dashboard-dist/assets/index-kwbCW1n2.css +1 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/commands/reflect.d.ts +3 -0
- package/dist/commands/reflect.d.ts.map +1 -0
- package/dist/commands/reflect.js +457 -0
- package/dist/commands/reflect.js.map +1 -0
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +3 -1
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/stats/actions/patterns.d.ts +3 -0
- package/dist/commands/stats/actions/patterns.d.ts.map +1 -0
- package/dist/commands/stats/actions/patterns.js +140 -0
- package/dist/commands/stats/actions/patterns.js.map +1 -0
- package/dist/commands/stats/data/aggregation-helpers.d.ts +23 -0
- package/dist/commands/stats/data/aggregation-helpers.d.ts.map +1 -0
- package/dist/commands/stats/data/aggregation-helpers.js +128 -0
- package/dist/commands/stats/data/aggregation-helpers.js.map +1 -0
- package/dist/commands/stats/data/aggregation.d.ts +3 -35
- package/dist/commands/stats/data/aggregation.d.ts.map +1 -1
- package/dist/commands/stats/data/aggregation.js +8 -290
- package/dist/commands/stats/data/aggregation.js.map +1 -1
- package/dist/commands/stats/data/time-series.d.ts +24 -0
- package/dist/commands/stats/data/time-series.d.ts.map +1 -0
- package/dist/commands/stats/data/time-series.js +162 -0
- package/dist/commands/stats/data/time-series.js.map +1 -0
- package/dist/commands/stats/index.d.ts.map +1 -1
- package/dist/commands/stats/index.js +7 -1
- package/dist/commands/stats/index.js.map +1 -1
- package/dist/commands/sync.d.ts +19 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +67 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/constants/llm-providers.js +1 -1
- package/dist/constants/llm-providers.js.map +1 -1
- package/dist/db/client.d.ts +7 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +11 -1
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +10 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +96 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/read.d.ts +5 -0
- package/dist/db/read.d.ts.map +1 -1
- package/dist/db/read.js +20 -3
- package/dist/db/read.js.map +1 -1
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/db/write.d.ts.map +1 -1
- package/dist/db/write.js +8 -2
- package/dist/db/write.js.map +1 -1
- package/dist/index.js +39 -3
- package/dist/index.js.map +1 -1
- package/dist/parser/jsonl.d.ts +19 -1
- package/dist/parser/jsonl.d.ts.map +1 -1
- package/dist/parser/jsonl.js +109 -3
- package/dist/parser/jsonl.js.map +1 -1
- package/dist/providers/codex.js +4 -1
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/copilot-cli.js +3 -0
- package/dist/providers/copilot-cli.js.map +1 -1
- package/dist/providers/copilot.js +3 -0
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/cursor.js +3 -0
- package/dist/providers/cursor.js.map +1 -1
- package/dist/types.d.ts +109 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/date-utils.d.ts +6 -0
- package/dist/utils/date-utils.d.ts.map +1 -0
- package/dist/utils/date-utils.js +26 -0
- package/dist/utils/date-utils.js.map +1 -0
- package/dist/utils/telemetry.d.ts +1 -1
- package/dist/utils/telemetry.d.ts.map +1 -1
- package/dist/utils/telemetry.js.map +1 -1
- package/package.json +2 -1
- package/server-dist/export/agent-rules.d.ts.map +1 -1
- package/server-dist/export/agent-rules.js +15 -4
- package/server-dist/export/agent-rules.js.map +1 -1
- package/server-dist/export/knowledge-base.d.ts.map +1 -1
- package/server-dist/export/knowledge-base.js +30 -4
- package/server-dist/export/knowledge-base.js.map +1 -1
- package/server-dist/index.d.ts.map +1 -1
- package/server-dist/index.js +4 -0
- package/server-dist/index.js.map +1 -1
- package/server-dist/llm/analysis-db.d.ts +51 -0
- package/server-dist/llm/analysis-db.d.ts.map +1 -0
- package/server-dist/llm/analysis-db.js +208 -0
- package/server-dist/llm/analysis-db.js.map +1 -0
- package/server-dist/llm/analysis-internal.d.ts +36 -0
- package/server-dist/llm/analysis-internal.d.ts.map +1 -0
- package/server-dist/llm/analysis-internal.js +23 -0
- package/server-dist/llm/analysis-internal.js.map +1 -0
- package/server-dist/llm/analysis-pricing.d.ts +25 -0
- package/server-dist/llm/analysis-pricing.d.ts.map +1 -0
- package/server-dist/llm/analysis-pricing.js +74 -0
- package/server-dist/llm/analysis-pricing.js.map +1 -0
- package/server-dist/llm/analysis-usage-db.d.ts +45 -0
- package/server-dist/llm/analysis-usage-db.d.ts.map +1 -0
- package/server-dist/llm/analysis-usage-db.js +35 -0
- package/server-dist/llm/analysis-usage-db.js.map +1 -0
- package/server-dist/llm/analysis.d.ts +9 -79
- package/server-dist/llm/analysis.d.ts.map +1 -1
- package/server-dist/llm/analysis.js +119 -375
- package/server-dist/llm/analysis.js.map +1 -1
- package/server-dist/llm/facet-extraction.d.ts +14 -0
- package/server-dist/llm/facet-extraction.d.ts.map +1 -0
- package/server-dist/llm/facet-extraction.js +91 -0
- package/server-dist/llm/facet-extraction.js.map +1 -0
- package/server-dist/llm/friction-normalize.d.ts +16 -0
- package/server-dist/llm/friction-normalize.d.ts.map +1 -0
- package/server-dist/llm/friction-normalize.js +54 -0
- package/server-dist/llm/friction-normalize.js.map +1 -0
- package/server-dist/llm/index.d.ts +3 -2
- package/server-dist/llm/index.d.ts.map +1 -1
- package/server-dist/llm/index.js +1 -1
- package/server-dist/llm/index.js.map +1 -1
- package/server-dist/llm/message-format.d.ts +32 -0
- package/server-dist/llm/message-format.d.ts.map +1 -0
- package/server-dist/llm/message-format.js +129 -0
- package/server-dist/llm/message-format.js.map +1 -0
- package/server-dist/llm/normalize-utils.d.ts +22 -0
- package/server-dist/llm/normalize-utils.d.ts.map +1 -0
- package/server-dist/llm/normalize-utils.js +71 -0
- package/server-dist/llm/normalize-utils.js.map +1 -0
- package/server-dist/llm/pattern-normalize.d.ts +19 -0
- package/server-dist/llm/pattern-normalize.d.ts.map +1 -0
- package/server-dist/llm/pattern-normalize.js +90 -0
- package/server-dist/llm/pattern-normalize.js.map +1 -0
- package/server-dist/llm/prompt-constants.d.ts +9 -0
- package/server-dist/llm/prompt-constants.d.ts.map +1 -0
- package/server-dist/llm/prompt-constants.js +169 -0
- package/server-dist/llm/prompt-constants.js.map +1 -0
- package/server-dist/llm/prompt-quality-analysis.d.ts +8 -0
- package/server-dist/llm/prompt-quality-analysis.d.ts.map +1 -0
- package/server-dist/llm/prompt-quality-analysis.js +133 -0
- package/server-dist/llm/prompt-quality-analysis.js.map +1 -0
- package/server-dist/llm/prompt-quality-normalize.d.ts +26 -0
- package/server-dist/llm/prompt-quality-normalize.d.ts.map +1 -0
- package/server-dist/llm/prompt-quality-normalize.js +116 -0
- package/server-dist/llm/prompt-quality-normalize.js.map +1 -0
- package/server-dist/llm/prompt-types.d.ts +124 -0
- package/server-dist/llm/prompt-types.d.ts.map +1 -0
- package/server-dist/llm/prompt-types.js +4 -0
- package/server-dist/llm/prompt-types.js.map +1 -0
- package/server-dist/llm/prompts.d.ts +57 -100
- package/server-dist/llm/prompts.d.ts.map +1 -1
- package/server-dist/llm/prompts.js +606 -232
- package/server-dist/llm/prompts.js.map +1 -1
- package/server-dist/llm/providers/anthropic.d.ts.map +1 -1
- package/server-dist/llm/providers/anthropic.js +12 -0
- package/server-dist/llm/providers/anthropic.js.map +1 -1
- package/server-dist/llm/providers/gemini.d.ts.map +1 -1
- package/server-dist/llm/providers/gemini.js +10 -2
- package/server-dist/llm/providers/gemini.js.map +1 -1
- package/server-dist/llm/providers/ollama.d.ts.map +1 -1
- package/server-dist/llm/providers/ollama.js +3 -1
- package/server-dist/llm/providers/ollama.js.map +1 -1
- package/server-dist/llm/providers/openai.d.ts.map +1 -1
- package/server-dist/llm/providers/openai.js +4 -1
- package/server-dist/llm/providers/openai.js.map +1 -1
- package/server-dist/llm/recurring-insights.d.ts +26 -0
- package/server-dist/llm/recurring-insights.d.ts.map +1 -0
- package/server-dist/llm/recurring-insights.js +119 -0
- package/server-dist/llm/recurring-insights.js.map +1 -0
- package/server-dist/llm/reflect-prompts.d.ts +55 -0
- package/server-dist/llm/reflect-prompts.d.ts.map +1 -0
- package/server-dist/llm/reflect-prompts.js +151 -0
- package/server-dist/llm/reflect-prompts.js.map +1 -0
- package/server-dist/llm/response-parsers.d.ts +8 -0
- package/server-dist/llm/response-parsers.d.ts.map +1 -0
- package/server-dist/llm/response-parsers.js +151 -0
- package/server-dist/llm/response-parsers.js.map +1 -0
- package/server-dist/llm/types.d.ts +23 -1
- package/server-dist/llm/types.d.ts.map +1 -1
- package/server-dist/llm/types.js +10 -1
- package/server-dist/llm/types.js.map +1 -1
- package/server-dist/routes/analysis.d.ts.map +1 -1
- package/server-dist/routes/analysis.js +107 -282
- package/server-dist/routes/analysis.js.map +1 -1
- package/server-dist/routes/analytics.d.ts.map +1 -1
- package/server-dist/routes/analytics.js +3 -1
- package/server-dist/routes/analytics.js.map +1 -1
- package/server-dist/routes/export.d.ts.map +1 -1
- package/server-dist/routes/export.js +19 -27
- package/server-dist/routes/export.js.map +1 -1
- package/server-dist/routes/facets.d.ts +4 -0
- package/server-dist/routes/facets.d.ts.map +1 -0
- package/server-dist/routes/facets.js +208 -0
- package/server-dist/routes/facets.js.map +1 -0
- package/server-dist/routes/insights.d.ts.map +1 -1
- package/server-dist/routes/insights.js +12 -11
- package/server-dist/routes/insights.js.map +1 -1
- package/server-dist/routes/reflect.d.ts +4 -0
- package/server-dist/routes/reflect.d.ts.map +1 -0
- package/server-dist/routes/reflect.js +332 -0
- package/server-dist/routes/reflect.js.map +1 -0
- package/server-dist/routes/route-helpers.d.ts +124 -0
- package/server-dist/routes/route-helpers.d.ts.map +1 -0
- package/server-dist/routes/route-helpers.js +242 -0
- package/server-dist/routes/route-helpers.js.map +1 -0
- package/server-dist/routes/sessions.d.ts.map +1 -1
- package/server-dist/routes/sessions.js +29 -5
- package/server-dist/routes/sessions.js.map +1 -1
- package/server-dist/routes/shared-aggregation.d.ts +82 -0
- package/server-dist/routes/shared-aggregation.d.ts.map +1 -0
- package/server-dist/routes/shared-aggregation.js +384 -0
- package/server-dist/routes/shared-aggregation.js.map +1 -0
- package/dashboard-dist/assets/index-C1mDRV7y.js +0 -607
- package/dashboard-dist/assets/index-_SWpRg6C.css +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// LLM response parsing utilities.
|
|
2
|
+
// Extracted from prompts.ts — handles JSON extraction, repair, and validation.
|
|
3
|
+
import { jsonrepair } from 'jsonrepair';
|
|
4
|
+
function buildResponsePreview(text, head = 200, tail = 200) {
|
|
5
|
+
if (text.length <= head + tail + 20)
|
|
6
|
+
return text;
|
|
7
|
+
return `${text.slice(0, head)}\n...[${text.length - head - tail} chars omitted]...\n${text.slice(-tail)}`;
|
|
8
|
+
}
|
|
9
|
+
export function extractJsonPayload(response) {
|
|
10
|
+
const tagged = response.match(/<json>\s*([\s\S]*?)\s*<\/json>/i);
|
|
11
|
+
if (tagged?.[1])
|
|
12
|
+
return tagged[1].trim();
|
|
13
|
+
const jsonMatch = response.match(/\{[\s\S]*\}/);
|
|
14
|
+
return jsonMatch ? jsonMatch[0] : null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse the LLM response into structured insights.
|
|
18
|
+
*/
|
|
19
|
+
export function parseAnalysisResponse(response) {
|
|
20
|
+
const response_length = response.length;
|
|
21
|
+
const preview = buildResponsePreview(response);
|
|
22
|
+
const jsonPayload = extractJsonPayload(response);
|
|
23
|
+
if (!jsonPayload) {
|
|
24
|
+
console.error('No JSON found in analysis response');
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
error: { error_type: 'no_json_found', error_message: 'No JSON found in analysis response', response_length, response_preview: preview },
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
let parsed;
|
|
31
|
+
try {
|
|
32
|
+
parsed = JSON.parse(jsonPayload);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Attempt repair — handles trailing commas, unclosed braces, truncated output
|
|
36
|
+
try {
|
|
37
|
+
parsed = JSON.parse(jsonrepair(jsonPayload));
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
41
|
+
console.error('Failed to parse analysis response (after jsonrepair):', err);
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
error: { error_type: 'json_parse_error', error_message: msg, response_length, response_preview: preview },
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (!parsed.summary || typeof parsed.summary.title !== 'string') {
|
|
49
|
+
console.error('Invalid analysis response structure');
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: { error_type: 'invalid_structure', error_message: 'Missing or invalid summary field', response_length, response_preview: preview },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
parsed.decisions = parsed.decisions || [];
|
|
56
|
+
parsed.learnings = parsed.learnings || [];
|
|
57
|
+
// Observability: warn when LLM still uses "tooling-limitation".
|
|
58
|
+
// Monitors whether FRICTION_CLASSIFICATION_GUIDANCE is working.
|
|
59
|
+
// Remove after confirming classification quality over ~20 new sessions.
|
|
60
|
+
if (parsed.facets?.friction_points?.some(fp => fp.category === 'tooling-limitation')) {
|
|
61
|
+
console.warn('[friction-monitor] LLM classified friction as "tooling-limitation" — verify this is a genuine tool limitation, not an agent/rate-limit/approach issue');
|
|
62
|
+
}
|
|
63
|
+
// Observability: warn when LLM returns effective_pattern without category or driver field,
|
|
64
|
+
// or with an unrecognized driver value.
|
|
65
|
+
// Catches models that ignore the classification instructions (especially smaller Ollama models).
|
|
66
|
+
// Remove after confirming classification quality over ~20 new sessions.
|
|
67
|
+
if (parsed.facets?.effective_patterns?.some(ep => !ep.category)) {
|
|
68
|
+
console.warn('[pattern-monitor] LLM returned effective_pattern without category field');
|
|
69
|
+
}
|
|
70
|
+
if (parsed.facets?.effective_patterns?.some(ep => !ep.driver)) {
|
|
71
|
+
console.warn('[pattern-monitor] LLM returned effective_pattern without driver field — driver classification may be incomplete');
|
|
72
|
+
}
|
|
73
|
+
const VALID_DRIVERS = new Set(['user-driven', 'ai-driven', 'collaborative']);
|
|
74
|
+
if (parsed.facets?.effective_patterns?.some(ep => ep.driver && !VALID_DRIVERS.has(ep.driver))) {
|
|
75
|
+
console.warn('[pattern-monitor] LLM returned unexpected driver value — check classification quality');
|
|
76
|
+
}
|
|
77
|
+
// Observability: warn when LLM omits _reasoning CoT scratchpad fields.
|
|
78
|
+
// These fields force the model to work through the attribution/driver decision trees
|
|
79
|
+
// before committing to values. Missing _reasoning suggests the model skipped the CoT step.
|
|
80
|
+
// Remove after confirming CoT compliance over ~20 new sessions.
|
|
81
|
+
if (parsed.facets?.friction_points?.some(fp => !fp._reasoning)) {
|
|
82
|
+
console.warn('[cot-monitor] LLM returned friction_point without _reasoning — classification may lack decision-tree rigor');
|
|
83
|
+
}
|
|
84
|
+
if (parsed.facets?.effective_patterns?.some(ep => !ep._reasoning)) {
|
|
85
|
+
console.warn('[cot-monitor] LLM returned effective_pattern without _reasoning — classification may lack decision-tree rigor');
|
|
86
|
+
}
|
|
87
|
+
return { success: true, data: parsed };
|
|
88
|
+
}
|
|
89
|
+
export function parsePromptQualityResponse(response) {
|
|
90
|
+
const response_length = response.length;
|
|
91
|
+
const preview = buildResponsePreview(response);
|
|
92
|
+
const jsonPayload = extractJsonPayload(response);
|
|
93
|
+
if (!jsonPayload) {
|
|
94
|
+
console.error('No JSON found in prompt quality response');
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
error: { error_type: 'no_json_found', error_message: 'No JSON found in prompt quality response', response_length, response_preview: preview },
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
let parsed;
|
|
101
|
+
try {
|
|
102
|
+
parsed = JSON.parse(jsonPayload);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
try {
|
|
106
|
+
parsed = JSON.parse(jsonrepair(jsonPayload));
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
110
|
+
console.error('Failed to parse prompt quality response (after jsonrepair):', msg);
|
|
111
|
+
return {
|
|
112
|
+
success: false,
|
|
113
|
+
error: { error_type: 'json_parse_error', error_message: msg, response_length, response_preview: preview },
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (typeof parsed.efficiency_score !== 'number') {
|
|
118
|
+
console.error('Invalid prompt quality response: missing efficiency_score');
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
error: { error_type: 'invalid_structure', error_message: 'Missing or invalid efficiency_score field', response_length, response_preview: preview },
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Clamp and default
|
|
125
|
+
parsed.efficiency_score = Math.max(0, Math.min(100, Math.round(parsed.efficiency_score)));
|
|
126
|
+
parsed.message_overhead = parsed.message_overhead ?? 0;
|
|
127
|
+
parsed.assessment = parsed.assessment || '';
|
|
128
|
+
parsed.takeaways = parsed.takeaways || [];
|
|
129
|
+
parsed.findings = parsed.findings || [];
|
|
130
|
+
parsed.dimension_scores = parsed.dimension_scores || {
|
|
131
|
+
context_provision: 50,
|
|
132
|
+
request_specificity: 50,
|
|
133
|
+
scope_management: 50,
|
|
134
|
+
information_timing: 50,
|
|
135
|
+
correction_quality: 50,
|
|
136
|
+
};
|
|
137
|
+
// Clamp dimension scores
|
|
138
|
+
for (const key of Object.keys(parsed.dimension_scores)) {
|
|
139
|
+
parsed.dimension_scores[key] = Math.max(0, Math.min(100, Math.round(parsed.dimension_scores[key] ?? 50)));
|
|
140
|
+
}
|
|
141
|
+
// Observability: warn when findings missing category
|
|
142
|
+
if (parsed.findings.some(f => !f.category)) {
|
|
143
|
+
console.warn('[pq-monitor] LLM returned finding without category field');
|
|
144
|
+
}
|
|
145
|
+
// Observability: warn when findings have unexpected type values
|
|
146
|
+
if (parsed.findings.some(f => f.type && f.type !== 'deficit' && f.type !== 'strength')) {
|
|
147
|
+
console.warn('[pq-monitor] LLM returned finding with unexpected type value — expected deficit or strength');
|
|
148
|
+
}
|
|
149
|
+
return { success: true, data: parsed };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=response-parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parsers.js","sourceRoot":"","sources":["../../src/llm/response-parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,35 @@
|
|
|
1
1
|
export type { LLMProvider, LLMProviderConfig, ProviderInfo, ProviderModelOption } from '@code-insights/cli/types';
|
|
2
|
+
/**
|
|
3
|
+
* A structured content block for LLM messages.
|
|
4
|
+
* Used to enable prompt caching (Anthropic ephemeral cache) and structured multi-part messages.
|
|
5
|
+
* The `cache_control` field instructs Anthropic to cache everything up to and including this block.
|
|
6
|
+
*/
|
|
7
|
+
export interface ContentBlock {
|
|
8
|
+
type: 'text';
|
|
9
|
+
text: string;
|
|
10
|
+
cache_control?: {
|
|
11
|
+
type: 'ephemeral';
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Flatten a ContentBlock array to a plain string by joining all block texts.
|
|
16
|
+
* Used by non-Anthropic providers (OpenAI, Gemini, Ollama) that don't support content blocks natively.
|
|
17
|
+
* If content is already a string, returns it unchanged.
|
|
18
|
+
*/
|
|
19
|
+
export declare function flattenContent(content: string | ContentBlock[]): string;
|
|
2
20
|
export interface LLMMessage {
|
|
3
21
|
role: 'system' | 'user' | 'assistant';
|
|
4
|
-
content: string;
|
|
22
|
+
content: string | ContentBlock[];
|
|
5
23
|
}
|
|
6
24
|
export interface LLMResponse {
|
|
7
25
|
content: string;
|
|
8
26
|
usage?: {
|
|
9
27
|
inputTokens: number;
|
|
10
28
|
outputTokens: number;
|
|
29
|
+
/** Anthropic: tokens written to the prompt cache (incurs 25% surcharge). */
|
|
30
|
+
cacheCreationTokens?: number;
|
|
31
|
+
/** Anthropic: tokens read from the prompt cache (90% discount vs normal input). */
|
|
32
|
+
cacheReadTokens?: number;
|
|
11
33
|
};
|
|
12
34
|
}
|
|
13
35
|
export interface ChatOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAElH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAElH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,MAAM,CAGvE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,4EAA4E;QAC5E,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,mFAAmF;QACnF,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB"}
|
package/server-dist/llm/types.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
// LLM abstraction types for the server-side LLM engine.
|
|
2
2
|
// Provider metadata (PROVIDERS constant) lives in cli/src/constants/llm-providers.ts.
|
|
3
3
|
// LLMProvider, LLMProviderConfig, ProviderInfo are imported from CLI types (single source of truth).
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Flatten a ContentBlock array to a plain string by joining all block texts.
|
|
6
|
+
* Used by non-Anthropic providers (OpenAI, Gemini, Ollama) that don't support content blocks natively.
|
|
7
|
+
* If content is already a string, returns it unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export function flattenContent(content) {
|
|
10
|
+
if (typeof content === 'string')
|
|
11
|
+
return content;
|
|
12
|
+
return content.map(b => b.text).join('');
|
|
13
|
+
}
|
|
5
14
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,sFAAsF;AACtF,qGAAqG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,sFAAsF;AACtF,qGAAqG;AAerG;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgC;IAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/routes/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/routes/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgB5B,QAAA,MAAM,GAAG,4EAAa,CAAC;AAoOvB,eAAe,GAAG,CAAC"}
|