@curie-agent/core 0.4.2 → 0.4.4
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/dist/.tsbuildinfo +1 -1
- package/dist/src/compaction.d.ts +76 -0
- package/dist/src/compaction.d.ts.map +1 -0
- package/dist/src/compaction.js +229 -0
- package/dist/src/compaction.js.map +1 -0
- package/dist/src/context-budget.d.ts +72 -0
- package/dist/src/context-budget.d.ts.map +1 -0
- package/dist/src/context-budget.js +132 -0
- package/dist/src/context-budget.js.map +1 -0
- package/dist/src/event-bus.d.ts +20 -0
- package/dist/src/event-bus.d.ts.map +1 -1
- package/dist/src/event-bus.js.map +1 -1
- package/dist/src/index.d.ts +8 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/reminder-parser.d.ts +6 -0
- package/dist/src/reminder-parser.d.ts.map +1 -1
- package/dist/src/reminder-parser.js +85 -105
- package/dist/src/reminder-parser.js.map +1 -1
- package/dist/src/settings.d.ts +13 -0
- package/dist/src/settings.d.ts.map +1 -1
- package/dist/src/settings.js +37 -12
- package/dist/src/settings.js.map +1 -1
- package/dist/src/subagent-executor.d.ts +8 -0
- package/dist/src/subagent-executor.d.ts.map +1 -1
- package/dist/src/subagent-executor.js +20 -6
- package/dist/src/subagent-executor.js.map +1 -1
- package/dist/src/task-manager.d.ts +53 -12
- package/dist/src/task-manager.d.ts.map +1 -1
- package/dist/src/task-manager.js +225 -124
- package/dist/src/task-manager.js.map +1 -1
- package/dist/src/task-migration.d.ts +29 -2
- package/dist/src/task-migration.d.ts.map +1 -1
- package/dist/src/task-migration.js +115 -7
- package/dist/src/task-migration.js.map +1 -1
- package/dist/src/turn-loop.d.ts +22 -2
- package/dist/src/turn-loop.d.ts.map +1 -1
- package/dist/src/turn-loop.js +222 -95
- package/dist/src/turn-loop.js.map +1 -1
- package/package.json +1 -1
- package/templates/settings.json +100 -91
- package/dist/src/cron-manager.d.ts +0 -92
- package/dist/src/cron-manager.d.ts.map +0 -1
- package/dist/src/cron-manager.js +0 -410
- package/dist/src/cron-manager.js.map +0 -1
- package/dist/src/task-executor.d.ts +0 -31
- package/dist/src/task-executor.d.ts.map +0 -1
- package/dist/src/task-executor.js +0 -91
- package/dist/src/task-executor.js.map +0 -1
- package/dist/src/token-monitor.d.ts +0 -50
- package/dist/src/token-monitor.d.ts.map +0 -1
- package/dist/src/token-monitor.js +0 -119
- package/dist/src/token-monitor.js.map +0 -1
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { summarizeToolInput } from './safety/tool-digest.js';
|
|
2
|
+
import { withMessageTimestamp } from './context.js';
|
|
3
|
+
import { estimateRequestTokens, clampCalibration, DEFAULT_CALIBRATION } from './context-budget.js';
|
|
4
|
+
/** Recent messages kept verbatim so the model retains its immediate working state. */
|
|
5
|
+
export const DEFAULT_MIN_TAIL_MESSAGES = 4;
|
|
6
|
+
/** Per-tool-result budget in the rendered transcript. */
|
|
7
|
+
const RESULT_SAMPLE_CHARS = 4000;
|
|
8
|
+
/** Output cap for the summarizer. The old 2048 could not hold a long research session. */
|
|
9
|
+
export const SUMMARY_MAX_TOKENS = 8192;
|
|
10
|
+
/**
|
|
11
|
+
* Share of the usable window a single summarizer prompt may occupy. Above this
|
|
12
|
+
* the transcript is summarized in chunks, then the chunk summaries are merged.
|
|
13
|
+
*/
|
|
14
|
+
const TRANSCRIPT_BUDGET_FRACTION = 0.6;
|
|
15
|
+
/**
|
|
16
|
+
* Share of the usable window the kept tail may occupy. Leaves room for the
|
|
17
|
+
* summary, the system prompt, tool schemas and the next few tool results —
|
|
18
|
+
* otherwise compaction "succeeds" while leaving the history still over budget.
|
|
19
|
+
*/
|
|
20
|
+
const TAIL_BUDGET_FRACTION = 0.3;
|
|
21
|
+
const SUMMARY_PREFIX = '[Summary of prior conversation]';
|
|
22
|
+
const SYSTEM_PROMPT = [
|
|
23
|
+
'You are a conversation summarizer for a coding agent.',
|
|
24
|
+
'Produce a dense, high-fidelity summary of the transcript below.',
|
|
25
|
+
'Preserve: the original goals, what was accomplished, findings and conclusions reached,',
|
|
26
|
+
'every file path / URL / command / identifier mentioned, decisions made and why,',
|
|
27
|
+
'current configuration state, and the pending next steps.',
|
|
28
|
+
'Tool results are the bulk of this transcript — carry their substance forward, not just',
|
|
29
|
+
'the fact that a tool ran. Prefer concrete detail over narration.',
|
|
30
|
+
'Output ONLY the summary text: no preamble, no sign-off, no meta-commentary.',
|
|
31
|
+
].join(' ');
|
|
32
|
+
const MERGE_PROMPT = [
|
|
33
|
+
'You are merging sequential partial summaries of one long conversation into a single summary.',
|
|
34
|
+
'Preserve every concrete detail: file paths, URLs, commands, identifiers, findings, decisions,',
|
|
35
|
+
'and pending next steps. Remove only redundancy between the parts.',
|
|
36
|
+
'Output ONLY the merged summary text.',
|
|
37
|
+
].join(' ');
|
|
38
|
+
function truncate(text, budget) {
|
|
39
|
+
if (text.length <= budget)
|
|
40
|
+
return text;
|
|
41
|
+
return `${text.slice(0, budget)}…[${String(text.length)} chars total]`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Render the message history as readable dialogue, including tool calls and
|
|
45
|
+
* results. Tool inputs go through `summarizeToolInput`, which keeps
|
|
46
|
+
* safety-relevant fields (url, command, file_path, pattern) intact and reduces
|
|
47
|
+
* bulk fields to a head sample.
|
|
48
|
+
*/
|
|
49
|
+
export function renderTranscript(messages) {
|
|
50
|
+
const parts = [];
|
|
51
|
+
const toolNameById = new Map();
|
|
52
|
+
for (const m of messages) {
|
|
53
|
+
if (m.role === 'user') {
|
|
54
|
+
parts.push(`User: ${m.content}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (m.role === 'assistant') {
|
|
58
|
+
for (const block of m.content) {
|
|
59
|
+
if (block.type === 'text') {
|
|
60
|
+
if (block.text.trim())
|
|
61
|
+
parts.push(`Assistant: ${block.text}`);
|
|
62
|
+
}
|
|
63
|
+
else if (block.type === 'tool-use') {
|
|
64
|
+
toolNameById.set(block.id, block.name);
|
|
65
|
+
parts.push(`Assistant calls ${block.name}\n${summarizeToolInput(block.name, block.input)}`);
|
|
66
|
+
}
|
|
67
|
+
// Thinking blocks are deliberately omitted — they are the model's scratch
|
|
68
|
+
// space, already superseded by the text and tool calls they produced.
|
|
69
|
+
}
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const name = m.toolName ?? toolNameById.get(m.toolUseId) ?? 'tool';
|
|
73
|
+
parts.push(`Result of ${name}: ${truncate(m.content, RESULT_SAMPLE_CHARS)}`);
|
|
74
|
+
}
|
|
75
|
+
return parts.join('\n\n');
|
|
76
|
+
}
|
|
77
|
+
/** Every tool-use id produced by the assistant messages in `slice`. */
|
|
78
|
+
function toolUseIds(slice) {
|
|
79
|
+
const ids = new Set();
|
|
80
|
+
for (const m of slice) {
|
|
81
|
+
if (m.role !== 'assistant')
|
|
82
|
+
continue;
|
|
83
|
+
for (const block of m.content) {
|
|
84
|
+
if (block.type === 'tool-use')
|
|
85
|
+
ids.add(block.id);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return ids;
|
|
89
|
+
}
|
|
90
|
+
/** Every tool-result id present in `slice`. */
|
|
91
|
+
function toolResultIds(slice) {
|
|
92
|
+
const ids = new Set();
|
|
93
|
+
for (const m of slice) {
|
|
94
|
+
if (m.role === 'tool')
|
|
95
|
+
ids.add(m.toolUseId);
|
|
96
|
+
}
|
|
97
|
+
return ids;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Is cutting before index `i` valid for the provider APIs?
|
|
101
|
+
*
|
|
102
|
+
* Anthropic and OpenAI both reject a `tool` message with no preceding
|
|
103
|
+
* `tool_use`, and a `tool_use` with no following result. Splitting mid-turn
|
|
104
|
+
* without this check turns a context overflow into a hard 400.
|
|
105
|
+
*/
|
|
106
|
+
export function isSafeCut(messages, i) {
|
|
107
|
+
if (messages[i]?.role === 'tool')
|
|
108
|
+
return false;
|
|
109
|
+
const head = messages.slice(0, i);
|
|
110
|
+
const results = toolResultIds(head);
|
|
111
|
+
for (const id of toolUseIds(head)) {
|
|
112
|
+
if (!results.has(id))
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Split into a head to summarize and a tail to keep verbatim, cutting only
|
|
119
|
+
* where the remaining history is still a valid request.
|
|
120
|
+
*
|
|
121
|
+
* Prefers keeping `minTailMessages`, but shrinks the tail — down to empty if
|
|
122
|
+
* necessary — to stay under `maxTailTokens`.
|
|
123
|
+
*
|
|
124
|
+
* Returns `[messages, []]` when no safe cut exists: everything is summarized.
|
|
125
|
+
*/
|
|
126
|
+
export function splitAtSafeBoundary(messages, minTailMessages = DEFAULT_MIN_TAIL_MESSAGES, options = {}) {
|
|
127
|
+
const preferred = Math.max(1, messages.length - Math.max(0, minTailMessages));
|
|
128
|
+
const cut = (i) => [messages.slice(0, i), messages.slice(i)];
|
|
129
|
+
if (options.maxTailTokens !== undefined) {
|
|
130
|
+
// Walk forward from the preferred cut, shrinking the tail until it fits.
|
|
131
|
+
for (let i = preferred; i <= messages.length; i++) {
|
|
132
|
+
if (!isSafeCut(messages, i))
|
|
133
|
+
continue;
|
|
134
|
+
const tokens = estimateRequestTokens({ messages: messages.slice(i), calibration: options.calibration });
|
|
135
|
+
if (tokens <= options.maxTailTokens)
|
|
136
|
+
return cut(i);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (let i = preferred; i >= 1; i--) {
|
|
140
|
+
if (isSafeCut(messages, i))
|
|
141
|
+
return cut(i);
|
|
142
|
+
}
|
|
143
|
+
return [[...messages], []];
|
|
144
|
+
}
|
|
145
|
+
/** The synthetic user message that carries a summary back into the history. */
|
|
146
|
+
export function buildSummaryMessage(summary, timestampMs) {
|
|
147
|
+
// Routed through withMessageTimestamp so live and reconstructed histories are
|
|
148
|
+
// byte-identical — that equality is what keeps the provider prompt cache warm.
|
|
149
|
+
return { role: 'user', content: withMessageTimestamp(`${SUMMARY_PREFIX}\n\n${summary}`, timestampMs) };
|
|
150
|
+
}
|
|
151
|
+
/** Split a transcript into chunks that each fit the summarizer's own budget. */
|
|
152
|
+
function chunkTranscript(transcript, maxChars) {
|
|
153
|
+
if (transcript.length <= maxChars)
|
|
154
|
+
return [transcript];
|
|
155
|
+
const chunks = [];
|
|
156
|
+
const paragraphs = transcript.split('\n\n');
|
|
157
|
+
let current = '';
|
|
158
|
+
for (const p of paragraphs) {
|
|
159
|
+
if (current && current.length + p.length + 2 > maxChars) {
|
|
160
|
+
chunks.push(current);
|
|
161
|
+
current = '';
|
|
162
|
+
}
|
|
163
|
+
// A single paragraph over budget (one huge tool result) is hard-split.
|
|
164
|
+
if (p.length > maxChars) {
|
|
165
|
+
if (current) {
|
|
166
|
+
chunks.push(current);
|
|
167
|
+
current = '';
|
|
168
|
+
}
|
|
169
|
+
for (let i = 0; i < p.length; i += maxChars)
|
|
170
|
+
chunks.push(p.slice(i, i + maxChars));
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
current = current ? `${current}\n\n${p}` : p;
|
|
174
|
+
}
|
|
175
|
+
if (current)
|
|
176
|
+
chunks.push(current);
|
|
177
|
+
return chunks;
|
|
178
|
+
}
|
|
179
|
+
export async function compactMessages(args) {
|
|
180
|
+
const { messages, provider, model, budget, signal } = args;
|
|
181
|
+
const estimatedTokensBefore = estimateRequestTokens({ messages, calibration: args.calibration });
|
|
182
|
+
const [head, tail] = splitAtSafeBoundary(messages, args.minTailMessages ?? DEFAULT_MIN_TAIL_MESSAGES, {
|
|
183
|
+
maxTailTokens: Math.floor(budget.usableTokens * TAIL_BUDGET_FRACTION),
|
|
184
|
+
calibration: args.calibration,
|
|
185
|
+
});
|
|
186
|
+
if (head.length === 0) {
|
|
187
|
+
throw new Error('Nothing to compact: no messages precede the protected tail.');
|
|
188
|
+
}
|
|
189
|
+
const transcript = renderTranscript(head);
|
|
190
|
+
if (!transcript.trim()) {
|
|
191
|
+
throw new Error('Nothing to compact: no conversational content found.');
|
|
192
|
+
}
|
|
193
|
+
// Budget the summarizer prompt in characters, using the same calibration the
|
|
194
|
+
// caller estimates with, so a huge transcript cannot itself overflow.
|
|
195
|
+
const maxPromptTokens = Math.floor(budget.usableTokens * TRANSCRIPT_BUDGET_FRACTION);
|
|
196
|
+
const charsPerToken = clampCalibration(args.calibration ?? DEFAULT_CALIBRATION);
|
|
197
|
+
const maxPromptChars = Math.max(4000, Math.floor(maxPromptTokens * charsPerToken));
|
|
198
|
+
const chunks = chunkTranscript(transcript, maxPromptChars);
|
|
199
|
+
const partials = [];
|
|
200
|
+
for (const [i, chunk] of chunks.entries()) {
|
|
201
|
+
const label = chunks.length > 1 ? ` (part ${String(i + 1)} of ${String(chunks.length)})` : '';
|
|
202
|
+
const text = await provider.check(`Summarize this conversation history${label}:\n\n${chunk}`, {
|
|
203
|
+
model, system: SYSTEM_PROMPT, signal, maxTokens: SUMMARY_MAX_TOKENS,
|
|
204
|
+
});
|
|
205
|
+
partials.push(text.trim());
|
|
206
|
+
}
|
|
207
|
+
let summary = partials.join('\n\n');
|
|
208
|
+
if (partials.length > 1) {
|
|
209
|
+
const merged = await provider.check(`Merge these ${String(partials.length)} partial summaries into one:\n\n${partials.map((p, i) => `--- Part ${String(i + 1)} ---\n${p}`).join('\n\n')}`, { model, system: MERGE_PROMPT, signal, maxTokens: SUMMARY_MAX_TOKENS });
|
|
210
|
+
if (merged.trim())
|
|
211
|
+
summary = merged.trim();
|
|
212
|
+
}
|
|
213
|
+
if (!summary) {
|
|
214
|
+
throw new Error('Compaction failed: the summarizer returned no text.');
|
|
215
|
+
}
|
|
216
|
+
const keptMessages = [...tail];
|
|
217
|
+
const estimatedTokensAfter = estimateRequestTokens({
|
|
218
|
+
messages: [buildSummaryMessage(summary, 0), ...keptMessages],
|
|
219
|
+
calibration: args.calibration,
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
summary,
|
|
223
|
+
keptMessages,
|
|
224
|
+
summarizedMessageCount: head.length,
|
|
225
|
+
estimatedTokensBefore,
|
|
226
|
+
estimatedTokensAfter,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type AutoCompactConfig, type CurieSettings } from './settings.js';
|
|
2
|
+
import type { Message } from './turn-loop.js';
|
|
3
|
+
/**
|
|
4
|
+
* The single context accountant.
|
|
5
|
+
*
|
|
6
|
+
* Before this module there were three unconnected implementations: an inline
|
|
7
|
+
* chars/4 pre-flight gate in the turn loop that could only hard-abort, a
|
|
8
|
+
* post-run threshold check in the daemon that only ran between user prompts,
|
|
9
|
+
* and a fully-implemented `TokenMonitor` that was never instantiated outside
|
|
10
|
+
* its own test. They disagreed on every default. This is the only one now.
|
|
11
|
+
*/
|
|
12
|
+
export interface ContextBudget {
|
|
13
|
+
/** Total context window for the active provider's model. */
|
|
14
|
+
windowTokens: number;
|
|
15
|
+
/** Headroom held back for the model's reply. */
|
|
16
|
+
reservedOutput: number;
|
|
17
|
+
/** windowTokens - reservedOutput. What the prompt may actually occupy. */
|
|
18
|
+
usableTokens: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ToolDefinitionLike {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
inputSchema: unknown;
|
|
24
|
+
}
|
|
25
|
+
/** Seed chars-per-token. Roughly right for English; corrected by `calibrate()`. */
|
|
26
|
+
export declare const DEFAULT_CALIBRATION = 4;
|
|
27
|
+
export type ContextStatus = 'ok' | 'warn' | 'suggest' | 'forced';
|
|
28
|
+
export declare function resolveBudget(settings: CurieSettings): ContextBudget;
|
|
29
|
+
export declare function messageChars(message: Message): number;
|
|
30
|
+
/**
|
|
31
|
+
* Character weight of the tool schemas. The previous estimator omitted these
|
|
32
|
+
* entirely — with ~15 built-ins plus MCP servers that is thousands of tokens
|
|
33
|
+
* the gate could not see.
|
|
34
|
+
*/
|
|
35
|
+
export declare function toolDefinitionChars(tools: readonly ToolDefinitionLike[]): number;
|
|
36
|
+
/** Per-component character counts, so callers can attribute where context went. */
|
|
37
|
+
export interface ContextBreakdown {
|
|
38
|
+
system: number;
|
|
39
|
+
toolDefinitions: number;
|
|
40
|
+
conversation: number;
|
|
41
|
+
toolResults: number;
|
|
42
|
+
}
|
|
43
|
+
export declare function breakdownChars(args: {
|
|
44
|
+
system?: string;
|
|
45
|
+
messages: readonly Message[];
|
|
46
|
+
toolDefinitions?: readonly ToolDefinitionLike[];
|
|
47
|
+
}): ContextBreakdown;
|
|
48
|
+
export declare function clampCalibration(ratio: number): number;
|
|
49
|
+
/**
|
|
50
|
+
* Learn chars-per-token from a real usage report. A single hardcoded 4 is an
|
|
51
|
+
* English heuristic; Polish, CJK and code-heavy transcripts land well below it,
|
|
52
|
+
* which is how a run can be estimated at half its true size.
|
|
53
|
+
*/
|
|
54
|
+
export declare function calibrate(charsSent: number, actualInputTokens: number): number;
|
|
55
|
+
export declare function estimateRequestTokens(args: {
|
|
56
|
+
system?: string;
|
|
57
|
+
messages: readonly Message[];
|
|
58
|
+
toolDefinitions?: readonly ToolDefinitionLike[];
|
|
59
|
+
calibration?: number;
|
|
60
|
+
}): number;
|
|
61
|
+
export declare function fillPct(estimatedTokens: number, budget: ContextBudget): number;
|
|
62
|
+
/**
|
|
63
|
+
* Map a fill percentage onto an action.
|
|
64
|
+
*
|
|
65
|
+
* `enabled: 'off'` silences everything, not just the forced tier. Previously it
|
|
66
|
+
* gated only forced compaction, so disabling auto-compaction still produced a
|
|
67
|
+
* stream of warnings the user had explicitly opted out of.
|
|
68
|
+
*/
|
|
69
|
+
export declare function classify(pct: number, cfg?: Partial<AutoCompactConfig>): ContextStatus;
|
|
70
|
+
/** Human-readable token count: 900 → "900", 12400 → "12.4k", 1200000 → "1.2m". */
|
|
71
|
+
export declare function formatTokens(n: number): string;
|
|
72
|
+
//# sourceMappingURL=context-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-budget.d.ts","sourceRoot":"","sources":["../../src/context-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,KAAK,EAAkB,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9D;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAoBrC,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAUpE;AAcD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CASrD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,CAOhF;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACjD,GAAG,gBAAgB,CAanB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAIT;AAED,wBAAgB,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAG9E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,aAAa,CAOrF;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { DEFAULT_SETTINGS } from './settings.js';
|
|
2
|
+
/** Seed chars-per-token. Roughly right for English; corrected by `calibrate()`. */
|
|
3
|
+
export const DEFAULT_CALIBRATION = 4;
|
|
4
|
+
/**
|
|
5
|
+
* Bounds on the learned chars-per-token ratio. Below 2 is denser than any real
|
|
6
|
+
* tokenizer; above 6 is sparser. Clamping keeps one anomalous `usage` event
|
|
7
|
+
* from poisoning every subsequent estimate.
|
|
8
|
+
*/
|
|
9
|
+
const MIN_CALIBRATION = 2;
|
|
10
|
+
const MAX_CALIBRATION = 6;
|
|
11
|
+
/**
|
|
12
|
+
* The reserve may never exceed this share of the window. Without the clamp a
|
|
13
|
+
* default `max_output_tokens` of 65536 against the default 131072 window made
|
|
14
|
+
* half the context unusable and invisible.
|
|
15
|
+
*/
|
|
16
|
+
const MAX_RESERVE_FRACTION = 0.25;
|
|
17
|
+
/** Fallback when a provider has no `max_output_tokens` configured. */
|
|
18
|
+
const FALLBACK_RESERVED_OUTPUT = 32768;
|
|
19
|
+
export function resolveBudget(settings) {
|
|
20
|
+
const provider = settings.providers[settings.current_provider];
|
|
21
|
+
const windowTokens = provider?.model_context_window
|
|
22
|
+
?? DEFAULT_SETTINGS.providers[settings.current_provider]?.model_context_window
|
|
23
|
+
?? DEFAULT_SETTINGS.providers.anthropic.model_context_window;
|
|
24
|
+
const requested = provider?.max_output_tokens ?? FALLBACK_RESERVED_OUTPUT;
|
|
25
|
+
const reservedOutput = Math.min(requested, Math.floor(windowTokens * MAX_RESERVE_FRACTION));
|
|
26
|
+
return { windowTokens, reservedOutput, usableTokens: windowTokens - reservedOutput };
|
|
27
|
+
}
|
|
28
|
+
/** Character weight of one assistant content block, counting only what is sent. */
|
|
29
|
+
function blockChars(block) {
|
|
30
|
+
switch (block.type) {
|
|
31
|
+
case 'text':
|
|
32
|
+
return block.text.length;
|
|
33
|
+
case 'thinking':
|
|
34
|
+
return block.thinking.length + block.signature.length;
|
|
35
|
+
case 'tool-use':
|
|
36
|
+
return block.name.length + JSON.stringify(block.input).length;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function messageChars(message) {
|
|
40
|
+
switch (message.role) {
|
|
41
|
+
case 'user':
|
|
42
|
+
return message.content.length;
|
|
43
|
+
case 'tool':
|
|
44
|
+
return message.content.length + (message.toolName?.length ?? 0);
|
|
45
|
+
case 'assistant':
|
|
46
|
+
return message.content.reduce((sum, b) => sum + blockChars(b), 0);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Character weight of the tool schemas. The previous estimator omitted these
|
|
51
|
+
* entirely — with ~15 built-ins plus MCP servers that is thousands of tokens
|
|
52
|
+
* the gate could not see.
|
|
53
|
+
*/
|
|
54
|
+
export function toolDefinitionChars(tools) {
|
|
55
|
+
let chars = 0;
|
|
56
|
+
for (const t of tools) {
|
|
57
|
+
chars += t.name.length + t.description.length;
|
|
58
|
+
chars += typeof t.inputSchema === 'string' ? t.inputSchema.length : JSON.stringify(t.inputSchema).length;
|
|
59
|
+
}
|
|
60
|
+
return chars;
|
|
61
|
+
}
|
|
62
|
+
/** Fixed overhead for request envelope, role markers and JSON structure. */
|
|
63
|
+
const ENVELOPE_CHARS = 200;
|
|
64
|
+
export function breakdownChars(args) {
|
|
65
|
+
let conversation = 0;
|
|
66
|
+
let toolResults = 0;
|
|
67
|
+
for (const m of args.messages) {
|
|
68
|
+
if (m.role === 'tool')
|
|
69
|
+
toolResults += messageChars(m);
|
|
70
|
+
else
|
|
71
|
+
conversation += messageChars(m);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
system: (args.system?.length ?? 0) + ENVELOPE_CHARS,
|
|
75
|
+
toolDefinitions: toolDefinitionChars(args.toolDefinitions ?? []),
|
|
76
|
+
conversation,
|
|
77
|
+
toolResults,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function clampCalibration(ratio) {
|
|
81
|
+
if (!Number.isFinite(ratio) || ratio <= 0)
|
|
82
|
+
return DEFAULT_CALIBRATION;
|
|
83
|
+
return Math.min(MAX_CALIBRATION, Math.max(MIN_CALIBRATION, ratio));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Learn chars-per-token from a real usage report. A single hardcoded 4 is an
|
|
87
|
+
* English heuristic; Polish, CJK and code-heavy transcripts land well below it,
|
|
88
|
+
* which is how a run can be estimated at half its true size.
|
|
89
|
+
*/
|
|
90
|
+
export function calibrate(charsSent, actualInputTokens) {
|
|
91
|
+
if (charsSent <= 0 || actualInputTokens <= 0)
|
|
92
|
+
return DEFAULT_CALIBRATION;
|
|
93
|
+
return clampCalibration(charsSent / actualInputTokens);
|
|
94
|
+
}
|
|
95
|
+
export function estimateRequestTokens(args) {
|
|
96
|
+
const b = breakdownChars(args);
|
|
97
|
+
const chars = b.system + b.toolDefinitions + b.conversation + b.toolResults;
|
|
98
|
+
return Math.ceil(chars / clampCalibration(args.calibration ?? DEFAULT_CALIBRATION));
|
|
99
|
+
}
|
|
100
|
+
export function fillPct(estimatedTokens, budget) {
|
|
101
|
+
if (budget.usableTokens <= 0)
|
|
102
|
+
return 100;
|
|
103
|
+
return Math.min(100, Math.round((estimatedTokens / budget.usableTokens) * 100));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Map a fill percentage onto an action.
|
|
107
|
+
*
|
|
108
|
+
* `enabled: 'off'` silences everything, not just the forced tier. Previously it
|
|
109
|
+
* gated only forced compaction, so disabling auto-compaction still produced a
|
|
110
|
+
* stream of warnings the user had explicitly opted out of.
|
|
111
|
+
*/
|
|
112
|
+
export function classify(pct, cfg) {
|
|
113
|
+
const d = DEFAULT_SETTINGS.auto_compact;
|
|
114
|
+
if ((cfg?.enabled ?? d.enabled) === 'off')
|
|
115
|
+
return 'ok';
|
|
116
|
+
if (pct >= (cfg?.forced_threshold ?? d.forced_threshold))
|
|
117
|
+
return 'forced';
|
|
118
|
+
if (pct >= (cfg?.threshold ?? d.threshold))
|
|
119
|
+
return 'suggest';
|
|
120
|
+
if (pct >= (cfg?.warn_threshold ?? d.warn_threshold))
|
|
121
|
+
return 'warn';
|
|
122
|
+
return 'ok';
|
|
123
|
+
}
|
|
124
|
+
/** Human-readable token count: 900 → "900", 12400 → "12.4k", 1200000 → "1.2m". */
|
|
125
|
+
export function formatTokens(n) {
|
|
126
|
+
if (n >= 1_000_000)
|
|
127
|
+
return `${(n / 1_000_000).toFixed(1)}m`;
|
|
128
|
+
if (n >= 1_000)
|
|
129
|
+
return `${(n / 1_000).toFixed(1)}k`;
|
|
130
|
+
return String(Math.round(n));
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=context-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-budget.js","sourceRoot":"","sources":["../../src/context-budget.ts"],"names":[],"mappings":"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"}
|
package/dist/src/event-bus.d.ts
CHANGED
|
@@ -99,6 +99,26 @@ export type Event = {
|
|
|
99
99
|
id: string;
|
|
100
100
|
message: string;
|
|
101
101
|
timestamp: number;
|
|
102
|
+
} | {
|
|
103
|
+
type: 'compaction';
|
|
104
|
+
id: string;
|
|
105
|
+
summary: string;
|
|
106
|
+
summarizedMessageCount: number;
|
|
107
|
+
tokensBefore: number;
|
|
108
|
+
tokensAfter: number;
|
|
109
|
+
timestamp: number;
|
|
110
|
+
} | {
|
|
111
|
+
type: 'context-report';
|
|
112
|
+
id: string;
|
|
113
|
+
model: string;
|
|
114
|
+
windowTokens: number;
|
|
115
|
+
usedTokens: number;
|
|
116
|
+
reservedOutput: number;
|
|
117
|
+
breakdown: Array<{
|
|
118
|
+
label: string;
|
|
119
|
+
tokens: number;
|
|
120
|
+
}>;
|
|
121
|
+
timestamp: number;
|
|
102
122
|
} | {
|
|
103
123
|
type: 'agent-start';
|
|
104
124
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/event-bus.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/event-bus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/event-bus.ts"],"names":[],"mappings":"AAsCA,SAAS,WAAW,CAAkB,MAAwB,EAAE,IAAe;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,CAAe,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC,CAAiB,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,QAAQ;IACX,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IACtD,aAAa,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC1D,QAAQ,GAAY,EAAE,CAAC;IAE/B,SAAS,CAAkB,IAAe,EAAE,EAAsB;QAChE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,EAAoB,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAoB,CAAC,CAAC;IAC5D,CAAC;IAED,WAAW,CAAkB,IAAe,EAAE,EAAsB;QAClE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAoB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAkB,IAAe,EAAE,EAAsB;QAC3D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,EAAoB,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAoB,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,CAAkB,KAAQ;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,EAAE,CAAC,KAAK,CAAC,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,EAAE,CAAC,KAAK,CAAC,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAe;QACrB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,15 +4,15 @@ export { SessionStore, ulid } from './session-store.js';
|
|
|
4
4
|
export type { SessionInfo, SessionFile } from './session-store.js';
|
|
5
5
|
export { PermissionEngine, PURE_TOOLS } from './permission.js';
|
|
6
6
|
export type { ApprovalMode, PermissionRule, PermissionResult, PermissionDecision } from './permission.js';
|
|
7
|
-
export { TurnLoop } from './turn-loop.js';
|
|
7
|
+
export { TurnLoop, reconstructMessagesFromEvents } from './turn-loop.js';
|
|
8
8
|
export type { TurnLoopConfig, TurnLoopResult, ReasoningEffort, Message, AssistantBlock, ProviderStream, Tool, ProviderEvent } from './turn-loop.js';
|
|
9
9
|
export { SettingsManager } from './settings.js';
|
|
10
10
|
export type { CurieSettings } from './settings.js';
|
|
11
11
|
export { DEFAULT_SETTINGS } from './settings.js';
|
|
12
|
-
export { TaskManager } from './task-manager.js';
|
|
12
|
+
export { TaskManager, getTaskManager, resetTaskManagers } from './task-manager.js';
|
|
13
13
|
export type { UnifiedTask, TasksFile, ScheduleType, TaskMode, TaskStatus, TaskPriority, TaskScope } from './unified-task.js';
|
|
14
14
|
export { scheduleLabel, createTaskDefaults, generateTaskId, taskTimestamp } from './unified-task.js';
|
|
15
|
-
export { migrateTasks } from './task-migration.js';
|
|
15
|
+
export { migrateTasks, repairTaskShapes } from './task-migration.js';
|
|
16
16
|
export { readTaskSummary } from './task-summary.js';
|
|
17
17
|
export { parseReminderTime } from './reminder-parser.js';
|
|
18
18
|
export { TelegramGateway } from './telegram-gateway.js';
|
|
@@ -30,8 +30,11 @@ export { BatchTurnLoop } from './heartbeat-executor.js';
|
|
|
30
30
|
export type { BatchResult } from './heartbeat-executor.js';
|
|
31
31
|
export { SubagentExecutor } from './subagent-executor.js';
|
|
32
32
|
export type { SubagentConfig, SubagentHandle } from './subagent-executor.js';
|
|
33
|
-
export {
|
|
34
|
-
export
|
|
33
|
+
export { parseTieredPricing, selectTier, estimateCost, type PriceTier } from './pricing.js';
|
|
34
|
+
export { resolveBudget, estimateRequestTokens, breakdownChars, toolDefinitionChars, messageChars, fillPct, classify, calibrate, clampCalibration, formatTokens, DEFAULT_CALIBRATION, } from './context-budget.js';
|
|
35
|
+
export type { ContextBudget, ContextBreakdown, ContextStatus, ToolDefinitionLike } from './context-budget.js';
|
|
36
|
+
export { compactMessages, renderTranscript, splitAtSafeBoundary, isSafeCut, buildSummaryMessage, DEFAULT_MIN_TAIL_MESSAGES, SUMMARY_MAX_TOKENS, } from './compaction.js';
|
|
37
|
+
export type { CompactionResult, CompactMessagesArgs } from './compaction.js';
|
|
35
38
|
export { withOsContext, withMessageTimestamp, formatDate } from './context.js';
|
|
36
39
|
export { buildBaseSystemPrompt } from './identity-context.js';
|
|
37
40
|
export { listSnapshots, revertTo, createSnapshot } from './safety/snapshot.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export { EventBus } from './event-bus.js';
|
|
2
2
|
export { SessionStore, ulid } from './session-store.js';
|
|
3
3
|
export { PermissionEngine, PURE_TOOLS } from './permission.js';
|
|
4
|
-
export { TurnLoop } from './turn-loop.js';
|
|
4
|
+
export { TurnLoop, reconstructMessagesFromEvents } from './turn-loop.js';
|
|
5
5
|
export { SettingsManager } from './settings.js';
|
|
6
6
|
export { DEFAULT_SETTINGS } from './settings.js';
|
|
7
|
-
export { TaskManager } from './task-manager.js';
|
|
7
|
+
export { TaskManager, getTaskManager, resetTaskManagers } from './task-manager.js';
|
|
8
8
|
export { scheduleLabel, createTaskDefaults, generateTaskId, taskTimestamp } from './unified-task.js';
|
|
9
|
-
export { migrateTasks } from './task-migration.js';
|
|
9
|
+
export { migrateTasks, repairTaskShapes } from './task-migration.js';
|
|
10
10
|
export { readTaskSummary } from './task-summary.js';
|
|
11
11
|
export { parseReminderTime } from './reminder-parser.js';
|
|
12
12
|
export { TelegramGateway } from './telegram-gateway.js';
|
|
@@ -17,7 +17,9 @@ export { pickNextSchedule, computeNextFire } from './unified-task.js';
|
|
|
17
17
|
export { HeartbeatDelivery } from './heartbeat-delivery.js';
|
|
18
18
|
export { BatchTurnLoop } from './heartbeat-executor.js';
|
|
19
19
|
export { SubagentExecutor } from './subagent-executor.js';
|
|
20
|
-
export {
|
|
20
|
+
export { parseTieredPricing, selectTier, estimateCost } from './pricing.js';
|
|
21
|
+
export { resolveBudget, estimateRequestTokens, breakdownChars, toolDefinitionChars, messageChars, fillPct, classify, calibrate, clampCalibration, formatTokens, DEFAULT_CALIBRATION, } from './context-budget.js';
|
|
22
|
+
export { compactMessages, renderTranscript, splitAtSafeBoundary, isSafeCut, buildSummaryMessage, DEFAULT_MIN_TAIL_MESSAGES, SUMMARY_MAX_TOKENS, } from './compaction.js';
|
|
21
23
|
export { withOsContext, withMessageTimestamp, formatDate } from './context.js';
|
|
22
24
|
export { buildBaseSystemPrompt } from './identity-context.js';
|
|
23
25
|
export { listSnapshots, revertTo, createSnapshot } from './safety/snapshot.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAkB,MAAM,cAAc,CAAC;AAC5F,OAAO,EACL,aAAa,EAAE,qBAAqB,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EACvF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,GAClF,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,EACtF,yBAAyB,EAAE,kBAAkB,GAC9C,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAErH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Zero-dependency natural language time parser for reminders.
|
|
3
3
|
* Parses patterns like "in 30 minutes", "tomorrow at 7am", "today at 19:00",
|
|
4
4
|
* "next monday at 9am", etc.
|
|
5
|
+
*
|
|
6
|
+
* Two rules the callers depend on:
|
|
7
|
+
* - A parsed time is never in the past. A reminder that fires the instant it
|
|
8
|
+
* is created is worse than no reminder.
|
|
9
|
+
* - An unrecognised input returns null rather than guessing. Silently
|
|
10
|
+
* defaulting produces reminders at times the user never asked for.
|
|
5
11
|
*/
|
|
6
12
|
interface ParsedReminder {
|
|
7
13
|
message: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-parser.d.ts","sourceRoot":"","sources":["../../src/reminder-parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reminder-parser.d.ts","sourceRoot":"","sources":["../../src/reminder-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AA+DD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA+EtE"}
|