omniharness-cli 0.1.28 → 0.1.30
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/agent/mastraEngine.d.ts +41 -2
- package/dist/agent/mastraEngine.js +273 -43
- package/dist/agent/mastraEngine.js.map +1 -1
- package/dist/cli.js +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/config/omniRoute.d.ts +37 -5
- package/dist/config/omniRoute.js +138 -3
- package/dist/config/omniRoute.js.map +1 -1
- package/dist/config/settings.d.ts +4 -0
- package/dist/config/settings.js +45 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/skills.d.ts +29 -0
- package/dist/skills.js +84 -0
- package/dist/skills.js.map +1 -0
- package/dist/types/index.d.ts +34 -1
- package/dist/ui/editor.d.ts +49 -0
- package/dist/ui/editor.js +140 -0
- package/dist/ui/editor.js.map +1 -0
- package/dist/ui/markdown.d.ts +26 -0
- package/dist/ui/markdown.js +279 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/terminalInterface.js +105 -14
- package/dist/ui/terminalInterface.js.map +1 -1
- package/package.json +1 -1
package/dist/config/omniRoute.js
CHANGED
|
@@ -38,12 +38,118 @@ export class OmniRouteClient {
|
|
|
38
38
|
return payload.data;
|
|
39
39
|
throw new OmniRouteError(response.status, 'invalid combos response');
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
/** Stream a completion, surfacing deltas as they arrive and returning the accumulated result. */
|
|
42
|
+
async chatStream(model, messages, options = {}) {
|
|
42
43
|
const response = await this.request('/chat/completions', {
|
|
43
44
|
method: 'POST',
|
|
44
|
-
signal,
|
|
45
|
+
signal: options.signal,
|
|
45
46
|
headers: { 'content-type': 'application/json' },
|
|
46
|
-
body: JSON.stringify({ model, messages, stream:
|
|
47
|
+
body: JSON.stringify({ model, messages, stream: true, tools: options.tools }),
|
|
48
|
+
});
|
|
49
|
+
const usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
|
|
50
|
+
let finishReason = 'stop';
|
|
51
|
+
let content = '';
|
|
52
|
+
let reasoning = '';
|
|
53
|
+
let answered = model;
|
|
54
|
+
let lineBuffer = '';
|
|
55
|
+
// Partially-accumulated tool calls keyed by stream index.
|
|
56
|
+
const toolStreams = new Map();
|
|
57
|
+
const flushData = (line) => {
|
|
58
|
+
const sep = line.indexOf(':');
|
|
59
|
+
if (sep === -1)
|
|
60
|
+
return;
|
|
61
|
+
if (line.slice(0, sep) !== 'data')
|
|
62
|
+
return;
|
|
63
|
+
const payload = line.slice(sep + 1).trim();
|
|
64
|
+
if (payload === '[DONE]')
|
|
65
|
+
return;
|
|
66
|
+
const chunk = this.safeParse(payload);
|
|
67
|
+
if (!chunk || !Array.isArray(chunk.choices))
|
|
68
|
+
return;
|
|
69
|
+
if (typeof chunk.model === 'string' && chunk.model !== '' && chunk.model !== 'omniroute')
|
|
70
|
+
answered = chunk.model;
|
|
71
|
+
if (this.isRecord(chunk.usage)) {
|
|
72
|
+
usage.inputTokens = this.number(chunk.usage.prompt_tokens);
|
|
73
|
+
usage.outputTokens = this.number(chunk.usage.completion_tokens);
|
|
74
|
+
usage.totalTokens = this.number(chunk.usage.total_tokens);
|
|
75
|
+
}
|
|
76
|
+
for (const choice of chunk.choices) {
|
|
77
|
+
if (!this.isRecord(choice))
|
|
78
|
+
continue;
|
|
79
|
+
if (typeof choice.finish_reason === 'string' && choice.finish_reason !== '')
|
|
80
|
+
finishReason = choice.finish_reason;
|
|
81
|
+
const delta = this.isRecord(choice.delta) ? choice.delta : {};
|
|
82
|
+
if (typeof delta.reasoning === 'string' && delta.reasoning !== '') {
|
|
83
|
+
reasoning += delta.reasoning;
|
|
84
|
+
options.onDelta?.({ type: 'reasoning', delta: delta.reasoning });
|
|
85
|
+
}
|
|
86
|
+
if (typeof delta.content === 'string' && delta.content !== '') {
|
|
87
|
+
content += delta.content;
|
|
88
|
+
options.onDelta?.({ type: 'text', delta: delta.content });
|
|
89
|
+
}
|
|
90
|
+
if (Array.isArray(delta.tool_calls)) {
|
|
91
|
+
for (const raw of delta.tool_calls) {
|
|
92
|
+
if (!this.isRecord(raw))
|
|
93
|
+
continue;
|
|
94
|
+
const idx = typeof raw.index === 'number' ? raw.index : 0;
|
|
95
|
+
const existing = toolStreams.get(idx) ?? { id: '', name: '', argsFragments: [] };
|
|
96
|
+
const fn = this.isRecord(raw.function) ? raw.function : {};
|
|
97
|
+
if (typeof raw.id === 'string' && raw.id !== '')
|
|
98
|
+
existing.id = raw.id;
|
|
99
|
+
if (typeof fn.name === 'string' && fn.name !== '')
|
|
100
|
+
existing.name = fn.name;
|
|
101
|
+
if (typeof fn.arguments === 'string' && fn.arguments !== '')
|
|
102
|
+
existing.argsFragments.push(fn.arguments);
|
|
103
|
+
toolStreams.set(idx, existing);
|
|
104
|
+
// Whole-argument chunks (as produced by OmniRoute) complete a call immediately.
|
|
105
|
+
if (existing.id !== '' && existing.name !== '' && existing.argsFragments.some((frag) => this.isValidJson(frag))) {
|
|
106
|
+
const call = { id: existing.id, type: 'function', function: { name: existing.name, arguments: existing.argsFragments.join('') } };
|
|
107
|
+
options.onDelta?.({ type: 'tool_call', call });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const body = response.body;
|
|
114
|
+
if (body) {
|
|
115
|
+
const reader = body.getReader();
|
|
116
|
+
const decoder = new TextDecoder();
|
|
117
|
+
try {
|
|
118
|
+
for (;;) {
|
|
119
|
+
const { done, value } = await reader.read();
|
|
120
|
+
if (done)
|
|
121
|
+
break;
|
|
122
|
+
lineBuffer += decoder.decode(value, { stream: true });
|
|
123
|
+
let newline;
|
|
124
|
+
while ((newline = lineBuffer.indexOf('\n')) !== -1) {
|
|
125
|
+
const line = lineBuffer.slice(0, newline);
|
|
126
|
+
lineBuffer = lineBuffer.slice(newline + 1);
|
|
127
|
+
const trimmed = line.replace(/\r$/, '');
|
|
128
|
+
if (trimmed.trim() !== '')
|
|
129
|
+
flushData(trimmed);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
reader.releaseLock();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Non-streaming fallback when no body stream is exposed.
|
|
139
|
+
const fallback = await this.chat(model, messages, options);
|
|
140
|
+
return fallback;
|
|
141
|
+
}
|
|
142
|
+
const toolCalls = [...toolStreams.values()]
|
|
143
|
+
.filter((entry) => entry.id !== '' && entry.name !== '')
|
|
144
|
+
.map((entry) => ({ id: entry.id, type: 'function', function: { name: entry.name, arguments: entry.argsFragments.join('') } }));
|
|
145
|
+
return { content, model: answered, finishReason, reasoning: reasoning || undefined, toolCalls, usage, headers: response.headers };
|
|
146
|
+
}
|
|
147
|
+
async chat(model, messages, options = {}) {
|
|
148
|
+
const response = await this.request('/chat/completions', {
|
|
149
|
+
method: 'POST',
|
|
150
|
+
signal: options.signal,
|
|
151
|
+
headers: { 'content-type': 'application/json' },
|
|
152
|
+
body: JSON.stringify({ model, messages, stream: false, tools: options.tools }),
|
|
47
153
|
});
|
|
48
154
|
const payload = await response.json();
|
|
49
155
|
if (!this.isRecord(payload) || !Array.isArray(payload.choices) || payload.choices.length === 0) {
|
|
@@ -55,9 +161,13 @@ export class OmniRouteClient {
|
|
|
55
161
|
// OpenAI-compatible responses report the model that actually answered
|
|
56
162
|
// (the combo may have routed anywhere); fall back to the requested id.
|
|
57
163
|
const answered = typeof payload.model === 'string' && payload.model.trim() !== '' ? payload.model : model;
|
|
164
|
+
const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls.map((call) => this.asToolCall(call)).filter((call) => call !== null) : undefined;
|
|
58
165
|
return {
|
|
59
166
|
content: typeof message.content === 'string' ? message.content : '',
|
|
60
167
|
model: answered,
|
|
168
|
+
finishReason: typeof choice.finish_reason === 'string' ? choice.finish_reason : 'stop',
|
|
169
|
+
reasoning: typeof message.reasoning === 'string' ? message.reasoning : undefined,
|
|
170
|
+
toolCalls,
|
|
61
171
|
usage: usage ? {
|
|
62
172
|
inputTokens: this.number(usage.prompt_tokens),
|
|
63
173
|
outputTokens: this.number(usage.completion_tokens),
|
|
@@ -125,6 +235,31 @@ export class OmniRouteClient {
|
|
|
125
235
|
number(value) {
|
|
126
236
|
return typeof value === 'number' && Number.isFinite(value) ? value : 0;
|
|
127
237
|
}
|
|
238
|
+
safeParse(text) {
|
|
239
|
+
try {
|
|
240
|
+
return JSON.parse(text);
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
isValidJson(text) {
|
|
247
|
+
try {
|
|
248
|
+
JSON.parse(text);
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
asToolCall(value) {
|
|
256
|
+
if (!this.isRecord(value) || typeof value.id !== 'string' || value.type !== 'function')
|
|
257
|
+
return null;
|
|
258
|
+
const fn = this.isRecord(value.function) ? value.function : {};
|
|
259
|
+
if (typeof fn.name !== 'string' || typeof fn.arguments !== 'string')
|
|
260
|
+
return null;
|
|
261
|
+
return { id: value.id, type: 'function', function: { name: fn.name, arguments: fn.arguments } };
|
|
262
|
+
}
|
|
128
263
|
isRecord(value) {
|
|
129
264
|
return typeof value === 'object' && value !== null;
|
|
130
265
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omniRoute.js","sourceRoot":"","sources":["../../src/config/omniRoute.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACJ;IAAnC,YAAmC,MAAc,EAAE,OAAe;QAChE,KAAK,CAAC,aAAa,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QADR,WAAM,GAAN,MAAM,CAAQ;QAE/C,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,OAAO,eAAe;IACV,QAAQ,CAAS;IAChB,SAAS,CAAS;IAC3B,MAAM,CAAS;IACN,OAAO,GAAqB;QAC3C,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QACrH,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;QACzB,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,YAAmB,SAA0B,EAAE;QAC7C,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;IAC/C,CAAC;IAEM,SAAS,CAAC,MAAc;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAEM,eAAe;QACpB,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAoB;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,OAA2B,CAAC;QAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC,MAA0B,CAAC;QACvG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,IAAwB,CAAC;QACnG,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACvE,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,QAAgC,EAAE,MAAoB;QACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,MAAM;YACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/F,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1G,OAAO;YACL,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACb,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC7C,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAClD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;aAC7C,CAAC,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,IAAiB;QACnD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QACrG,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,mCAAmC,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3F,OAAO,QAAQ,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAgB;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;QAC/E,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACjE,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;YAChC,WAAW,CAAC,gBAAgB,GAAG,UAAU,CAAC;YAC1C,WAAW,CAAC,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;YACvC,WAAW,CAAC,QAAQ,GAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAA2C,IAAI,MAAM,CAAC;YACnH,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC;QACzF,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;QAC7E,IAAI,QAAQ,KAAK,SAAS;YAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC3D,IAAI,QAAQ;YAAE,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QACxE,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAkB;QACvC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IAEO,YAAY,CAAC,OAAgB,EAAE,IAAY;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC;IAEO,MAAM,CAAC,KAAc;QAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,QAAQ,CAAC,KAAc;QAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;IACrD,CAAC;IAEO,cAAc,CAAC,KAAkB,EAAE,MAAmB;QAC5D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"omniRoute.js","sourceRoot":"","sources":["../../src/config/omniRoute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The last combo the user selected, for use as the startup default. */
|
|
2
|
+
export declare function readActiveCombo(): Promise<string | undefined>;
|
|
3
|
+
/** Persist the combo the user chose so future sessions default to it. */
|
|
4
|
+
export declare function saveActiveCombo(combo: string): Promise<void>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
function configDir() {
|
|
5
|
+
const override = process.env.OMNIHARNESS_CONFIG_DIR;
|
|
6
|
+
if (override && override.trim() !== '')
|
|
7
|
+
return override;
|
|
8
|
+
const base = process.platform === 'win32'
|
|
9
|
+
? (process.env.APPDATA ?? path.join(os.homedir(), 'AppData', 'Roaming'))
|
|
10
|
+
: (process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), '.config'));
|
|
11
|
+
return path.join(base, 'omniharness');
|
|
12
|
+
}
|
|
13
|
+
function configPath() {
|
|
14
|
+
return path.join(configDir(), 'config.json');
|
|
15
|
+
}
|
|
16
|
+
async function readSettings() {
|
|
17
|
+
try {
|
|
18
|
+
const raw = await fs.readFile(configPath(), 'utf8');
|
|
19
|
+
const parsed = JSON.parse(raw);
|
|
20
|
+
if (parsed && typeof parsed === 'object') {
|
|
21
|
+
const value = parsed.activeCombo;
|
|
22
|
+
return { activeCombo: typeof value === 'string' && value.trim() !== '' ? value : undefined };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// missing or invalid config -> no saved combo
|
|
27
|
+
}
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
/** The last combo the user selected, for use as the startup default. */
|
|
31
|
+
export async function readActiveCombo() {
|
|
32
|
+
return (await readSettings()).activeCombo;
|
|
33
|
+
}
|
|
34
|
+
/** Persist the combo the user chose so future sessions default to it. */
|
|
35
|
+
export async function saveActiveCombo(combo) {
|
|
36
|
+
const trimmed = combo.trim();
|
|
37
|
+
if (trimmed === '')
|
|
38
|
+
return;
|
|
39
|
+
const settings = await readSettings();
|
|
40
|
+
settings.activeCombo = trimmed;
|
|
41
|
+
const dir = configDir();
|
|
42
|
+
await fs.mkdir(dir, { recursive: true });
|
|
43
|
+
await fs.writeFile(configPath(), JSON.stringify(settings, null, 2), 'utf8');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,SAAS,SAAS;IAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACvC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,KAAK,GAAI,MAAkC,CAAC,WAAW,CAAC;YAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/F,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC;AAC5C,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAa;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO;IAC3B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC;IAC/B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface SkillParam {
|
|
2
|
+
name: string;
|
|
3
|
+
type: 'string' | 'number' | 'boolean';
|
|
4
|
+
}
|
|
5
|
+
export interface Skill {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
command: string;
|
|
9
|
+
parameters: readonly SkillParam[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse an OMNIHARNESS.md skills definition. Blocks start with `## <name>`
|
|
13
|
+
* and contain `description:`, `command:`, and `param: <name> <type>` fields.
|
|
14
|
+
* Command placeholders `{name}` are filled from the tool arguments at run time.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseSkills(text: string): Skill[];
|
|
17
|
+
/** Load and parse OMNIHARNESS.md from the workspace root, if present. */
|
|
18
|
+
export declare function loadSkills(workspaceRoot: string): Promise<Skill[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Render the shell command for a skill call by substituting `{param}` tokens
|
|
21
|
+
* with the typed argument values.
|
|
22
|
+
*/
|
|
23
|
+
export declare function renderSkillCommand(command: string, parameters: readonly SkillParam[], input: Record<string, unknown>): string;
|
|
24
|
+
/** Build an OpenAI `function` parameters schema for a skill. */
|
|
25
|
+
export declare function skillSchema(skill: Skill): {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
parameters: unknown;
|
|
29
|
+
};
|
package/dist/skills.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Parse an OMNIHARNESS.md skills definition. Blocks start with `## <name>`
|
|
5
|
+
* and contain `description:`, `command:`, and `param: <name> <type>` fields.
|
|
6
|
+
* Command placeholders `{name}` are filled from the tool arguments at run time.
|
|
7
|
+
*/
|
|
8
|
+
export function parseSkills(text) {
|
|
9
|
+
const lines = text.split(/\r?\n/);
|
|
10
|
+
const skills = [];
|
|
11
|
+
let current = null;
|
|
12
|
+
for (const raw of lines) {
|
|
13
|
+
const line = raw.trimEnd();
|
|
14
|
+
if (line.startsWith('## ')) {
|
|
15
|
+
if (current?.name)
|
|
16
|
+
skills.push(current);
|
|
17
|
+
current = { name: line.slice(3).trim(), description: '', command: '', parameters: [] };
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (!current)
|
|
21
|
+
continue;
|
|
22
|
+
const desc = /^description:\s*(.+)$/i.exec(line);
|
|
23
|
+
if (desc) {
|
|
24
|
+
current.description = desc[1].trim();
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const cmd = /^command:\s*(.+)$/i.exec(line);
|
|
28
|
+
if (cmd) {
|
|
29
|
+
current.command = cmd[1].trim();
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const param = /^param:\s+(\S+)\s+(string|number|boolean)$/i.exec(line);
|
|
33
|
+
if (param) {
|
|
34
|
+
current.parameters.push({ name: param[1], type: param[2].toLowerCase() });
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (current?.name)
|
|
39
|
+
skills.push(current);
|
|
40
|
+
return skills.filter((skill) => skill.command !== '').map((skill) => skill);
|
|
41
|
+
}
|
|
42
|
+
/** Load and parse OMNIHARNESS.md from the workspace root, if present. */
|
|
43
|
+
export async function loadSkills(workspaceRoot) {
|
|
44
|
+
try {
|
|
45
|
+
const raw = await fs.readFile(path.join(workspaceRoot, 'OMNIHARNESS.md'), 'utf8');
|
|
46
|
+
return parseSkills(raw);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function jsonTypeOf(value, type) {
|
|
53
|
+
switch (type) {
|
|
54
|
+
case 'number': {
|
|
55
|
+
const n = Number(value);
|
|
56
|
+
return Number.isFinite(n) ? n : 0;
|
|
57
|
+
}
|
|
58
|
+
case 'boolean': return value === true || value === 'true' || value === 1 || value === '1';
|
|
59
|
+
default: return String(value ?? '');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Render the shell command for a skill call by substituting `{param}` tokens
|
|
64
|
+
* with the typed argument values.
|
|
65
|
+
*/
|
|
66
|
+
export function renderSkillCommand(command, parameters, input) {
|
|
67
|
+
let rendered = command;
|
|
68
|
+
for (const param of parameters) {
|
|
69
|
+
const value = jsonTypeOf(input[param.name], param.type);
|
|
70
|
+
rendered = rendered.split(`{${param.name}}`).join(typeof value === 'string' ? value : String(value));
|
|
71
|
+
}
|
|
72
|
+
return rendered.trim();
|
|
73
|
+
}
|
|
74
|
+
/** Build an OpenAI `function` parameters schema for a skill. */
|
|
75
|
+
export function skillSchema(skill) {
|
|
76
|
+
const properties = {};
|
|
77
|
+
const required = [];
|
|
78
|
+
for (const param of skill.parameters) {
|
|
79
|
+
properties[param.name] = { type: param.type };
|
|
80
|
+
required.push(param.name);
|
|
81
|
+
}
|
|
82
|
+
return { name: skill.name, description: skill.description, parameters: { type: 'object', properties, required } };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export type TaskStatus = 'idle' | 'planning' | 'running' | 'waiting' | 'completed' | 'failed' | 'cancelled';
|
|
2
2
|
export type ToolRisk = 'low' | 'medium' | 'high' | 'critical';
|
|
3
|
+
/** High-level working modes that shape the system prompt and allowed skills. */
|
|
4
|
+
export type AgentMode = 'plan' | 'build' | 'research';
|
|
3
5
|
export interface WorkspaceFile {
|
|
4
6
|
path: string;
|
|
5
7
|
bytes: number;
|
|
@@ -14,6 +16,12 @@ export interface WorkspaceState {
|
|
|
14
16
|
gitDiffStat?: string;
|
|
15
17
|
contextLocked: boolean;
|
|
16
18
|
}
|
|
19
|
+
export interface PreviewServer {
|
|
20
|
+
url: string;
|
|
21
|
+
pid?: number;
|
|
22
|
+
startedAt: string;
|
|
23
|
+
command: string;
|
|
24
|
+
}
|
|
17
25
|
export interface CompressionTracker {
|
|
18
26
|
inputTokens: number;
|
|
19
27
|
compressedTokens: number;
|
|
@@ -40,16 +48,41 @@ export interface AgentToolDeclaration<TInput = unknown, TOutput = unknown> {
|
|
|
40
48
|
inputSchema: unknown;
|
|
41
49
|
execute(input: TInput, signal?: AbortSignal): Promise<TOutput>;
|
|
42
50
|
}
|
|
51
|
+
/** A single OpenAI function-call request emitted by the model. */
|
|
52
|
+
export interface ToolCallRequest {
|
|
53
|
+
id: string;
|
|
54
|
+
type: 'function';
|
|
55
|
+
function: {
|
|
56
|
+
name: string;
|
|
57
|
+
arguments: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Wire message shapes accepted by OmniRoute /chat/completions. */
|
|
61
|
+
export interface ChatWireMessage {
|
|
62
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
63
|
+
content: string;
|
|
64
|
+
tool_calls?: readonly ToolCallRequest[];
|
|
65
|
+
tool_call_id?: string;
|
|
66
|
+
}
|
|
67
|
+
/** A tool call in flight plus its rendered result for the model. */
|
|
68
|
+
export interface ToolCallResult {
|
|
69
|
+
call: ToolCallRequest;
|
|
70
|
+
output: string;
|
|
71
|
+
}
|
|
43
72
|
export interface HarnessState {
|
|
44
73
|
taskStatus: TaskStatus;
|
|
45
74
|
prompt: string;
|
|
75
|
+
mode: AgentMode;
|
|
46
76
|
workspace: WorkspaceState;
|
|
47
77
|
metrics: OmniRouteMetrics;
|
|
48
78
|
activeModel: string;
|
|
49
79
|
messages: readonly HarnessMessage[];
|
|
80
|
+
preview: PreviewServer | null;
|
|
50
81
|
}
|
|
51
82
|
export interface HarnessMessage {
|
|
52
|
-
role: 'user' | 'assistant' | 'thought' | 'action' | 'error';
|
|
83
|
+
role: 'user' | 'assistant' | 'thought' | 'action' | 'tool' | 'command' | 'error';
|
|
53
84
|
content: string;
|
|
54
85
|
createdAt: string;
|
|
86
|
+
toolName?: string;
|
|
87
|
+
model?: string;
|
|
55
88
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Normalize terminal paste to \n line endings before inserting. */
|
|
2
|
+
export declare function normalizePaste(value: string): string;
|
|
3
|
+
/** Insert `text` into `value` at 0-based `cursor`, returning the new value and cursor. */
|
|
4
|
+
export declare function insertAt(value: string, cursor: number, text: string): {
|
|
5
|
+
value: string;
|
|
6
|
+
cursor: number;
|
|
7
|
+
};
|
|
8
|
+
/** Delete the character just before `cursor` (backspace). */
|
|
9
|
+
export declare function deleteBefore(value: string, cursor: number): {
|
|
10
|
+
value: string;
|
|
11
|
+
cursor: number;
|
|
12
|
+
};
|
|
13
|
+
/** Delete the character at `cursor` (delete/forward). */
|
|
14
|
+
export declare function deleteAt(value: string, cursor: number): {
|
|
15
|
+
value: string;
|
|
16
|
+
cursor: number;
|
|
17
|
+
};
|
|
18
|
+
/** Move the cursor left/right by `delta` (-1 or +1), clamped to bounds. */
|
|
19
|
+
export declare function moveHorizontal(value: string, cursor: number, delta: number): number;
|
|
20
|
+
/** Move the cursor to the same visual column on an adjacent line. Returns clamped index. */
|
|
21
|
+
export declare function moveVertical(value: string, cursor: number, delta: number): number;
|
|
22
|
+
/** True when a key-value carries a terminal paste (multi-line or multi-char run). */
|
|
23
|
+
export declare function isPaste(value: string): boolean;
|
|
24
|
+
export interface SlashCommand {
|
|
25
|
+
command: string;
|
|
26
|
+
arg: string;
|
|
27
|
+
}
|
|
28
|
+
/** Distinguish a leading slash command (e.g. `/attach file.txt`) from plain text. */
|
|
29
|
+
export declare function parseSlashCommand(text: string): SlashCommand | null;
|
|
30
|
+
export type AttachKind = 'file' | 'image' | 'video';
|
|
31
|
+
export interface AttachmentInput {
|
|
32
|
+
name: string;
|
|
33
|
+
size: number;
|
|
34
|
+
kind: AttachKind;
|
|
35
|
+
}
|
|
36
|
+
export declare function kindFromName(name: string): AttachKind;
|
|
37
|
+
/** Format the attachments block prepended to a prompt so the agent knows what was attached. */
|
|
38
|
+
export declare function attachmentBlock(attachments: readonly AttachmentInput[]): string;
|
|
39
|
+
export interface EditorLayout {
|
|
40
|
+
lines: readonly string[];
|
|
41
|
+
cursorLine: number;
|
|
42
|
+
cursorCol: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Lay a multi-line string out across `width` characters per row (char-wrapping
|
|
46
|
+
* exactly so the caret lands on the correct column) and place a `cursorChar`
|
|
47
|
+
* caret at the given cursor offset.
|
|
48
|
+
*/
|
|
49
|
+
export declare function layoutEditor(text: string, cursor: number, width: number): EditorLayout;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/** Normalize terminal paste to \n line endings before inserting. */
|
|
2
|
+
export function normalizePaste(value) {
|
|
3
|
+
return value.replace(/\r\n?/g, '\n');
|
|
4
|
+
}
|
|
5
|
+
/** Insert `text` into `value` at 0-based `cursor`, returning the new value and cursor. */
|
|
6
|
+
export function insertAt(value, cursor, text) {
|
|
7
|
+
const at = clampIndex(cursor, value);
|
|
8
|
+
return { value: value.slice(0, at) + text + value.slice(at), cursor: at + text.length };
|
|
9
|
+
}
|
|
10
|
+
/** Delete the character just before `cursor` (backspace). */
|
|
11
|
+
export function deleteBefore(value, cursor) {
|
|
12
|
+
const at = clampIndex(cursor, value);
|
|
13
|
+
if (at === 0)
|
|
14
|
+
return { value, cursor: at };
|
|
15
|
+
if (value.charCodeAt(at - 1) === 0x0a)
|
|
16
|
+
return { value: value.slice(0, at - 1) + value.slice(at), cursor: at - 1 };
|
|
17
|
+
return { value: value.slice(0, at - 1) + value.slice(at), cursor: at - 1 };
|
|
18
|
+
}
|
|
19
|
+
/** Delete the character at `cursor` (delete/forward). */
|
|
20
|
+
export function deleteAt(value, cursor) {
|
|
21
|
+
const at = clampIndex(cursor, value);
|
|
22
|
+
if (at >= value.length)
|
|
23
|
+
return { value, cursor: at };
|
|
24
|
+
return { value: value.slice(0, at) + value.slice(at + 1), cursor: at };
|
|
25
|
+
}
|
|
26
|
+
/** Move the cursor left/right by `delta` (-1 or +1), clamped to bounds. */
|
|
27
|
+
export function moveHorizontal(value, cursor, delta) {
|
|
28
|
+
return clamp(cursor + delta, 0, value.length);
|
|
29
|
+
}
|
|
30
|
+
/** Visual index of the caret on the current line (0-based). */
|
|
31
|
+
function columnAt(value, cursor) {
|
|
32
|
+
const at = clampIndex(cursor, value);
|
|
33
|
+
const lineStart = value.lastIndexOf('\n', at - 1) + 1;
|
|
34
|
+
return at - lineStart;
|
|
35
|
+
}
|
|
36
|
+
/** Move the cursor to the same visual column on an adjacent line. Returns clamped index. */
|
|
37
|
+
export function moveVertical(value, cursor, delta) {
|
|
38
|
+
const at = clampIndex(cursor, value);
|
|
39
|
+
const target = columnAt(value, at);
|
|
40
|
+
if (delta < 0) {
|
|
41
|
+
const lineStart = value.lastIndexOf('\n', at - 1);
|
|
42
|
+
if (lineStart === -1)
|
|
43
|
+
return 0;
|
|
44
|
+
const prevStart = value.lastIndexOf('\n', lineStart - 1) + 1;
|
|
45
|
+
const upTo = lineStart + 1;
|
|
46
|
+
return prevStart + Math.min(target, upTo - prevStart - 1);
|
|
47
|
+
}
|
|
48
|
+
const nextNl = value.indexOf('\n', at);
|
|
49
|
+
if (nextNl === -1)
|
|
50
|
+
return value.length;
|
|
51
|
+
const nextStart = nextNl + 1;
|
|
52
|
+
const nextEnd = value.indexOf('\n', nextStart);
|
|
53
|
+
const lineEnd = nextEnd === -1 ? value.length : nextEnd;
|
|
54
|
+
return nextStart + Math.min(target, lineEnd - nextStart);
|
|
55
|
+
}
|
|
56
|
+
function clampIndex(cursor, value) {
|
|
57
|
+
return clamp(cursor, 0, value.length);
|
|
58
|
+
}
|
|
59
|
+
function clamp(n, min, max) {
|
|
60
|
+
return Math.min(max, Math.max(min, n));
|
|
61
|
+
}
|
|
62
|
+
/** True when a key-value carries a terminal paste (multi-line or multi-char run). */
|
|
63
|
+
export function isPaste(value) {
|
|
64
|
+
return value.length > 1 || value.includes('\n');
|
|
65
|
+
}
|
|
66
|
+
/** Distinguish a leading slash command (e.g. `/attach file.txt`) from plain text. */
|
|
67
|
+
export function parseSlashCommand(text) {
|
|
68
|
+
const trimmed = text.trim();
|
|
69
|
+
const match = /^\/([a-z][a-z0-9_-]*)(?:\s+(.*))?$/i.exec(trimmed);
|
|
70
|
+
if (!match)
|
|
71
|
+
return null;
|
|
72
|
+
return { command: match[1].toLowerCase(), arg: (match[2] ?? '').trim() };
|
|
73
|
+
}
|
|
74
|
+
const IMAGE_EXT = /^\.(png|jpe?g|gif|webp|bmp|svg|avif)$/i;
|
|
75
|
+
const VIDEO_EXT = /^\.(mp4|webm|mov|mkv|avi)$/i;
|
|
76
|
+
export function kindFromName(name) {
|
|
77
|
+
if (IMAGE_EXT.test(name))
|
|
78
|
+
return 'image';
|
|
79
|
+
if (VIDEO_EXT.test(name))
|
|
80
|
+
return 'video';
|
|
81
|
+
return 'file';
|
|
82
|
+
}
|
|
83
|
+
/** Format the attachments block prepended to a prompt so the agent knows what was attached. */
|
|
84
|
+
export function attachmentBlock(attachments) {
|
|
85
|
+
if (attachments.length === 0)
|
|
86
|
+
return '';
|
|
87
|
+
const rows = attachments.map((a) => `- ${a.name} (${a.kind}, ${a.size} bytes)`).join('\n');
|
|
88
|
+
return `The user attached these files to this request:\n${rows}\nYou may read_file them from the workspace or user path as needed.\n---\n`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Lay a multi-line string out across `width` characters per row (char-wrapping
|
|
92
|
+
* exactly so the caret lands on the correct column) and place a `cursorChar`
|
|
93
|
+
* caret at the given cursor offset.
|
|
94
|
+
*/
|
|
95
|
+
export function layoutEditor(text, cursor, width) {
|
|
96
|
+
const w = Math.max(1, width);
|
|
97
|
+
const at = clamp(cursor, 0, text.length);
|
|
98
|
+
const lines = [];
|
|
99
|
+
let cursorLine = 0;
|
|
100
|
+
let cursorCol = 0;
|
|
101
|
+
let placed = false;
|
|
102
|
+
const paragraphs = text.split('\n');
|
|
103
|
+
let offset = 0;
|
|
104
|
+
for (let p = 0; p < paragraphs.length; p += 1) {
|
|
105
|
+
const para = paragraphs[p];
|
|
106
|
+
for (let start = 0; start <= para.length; start += w) {
|
|
107
|
+
const chunk = para.slice(start, start + w);
|
|
108
|
+
const chunkStart = offset + start;
|
|
109
|
+
const chunkEnd = chunkStart + chunk.length;
|
|
110
|
+
if (!placed && at >= chunkStart && at <= chunkEnd && !(at === chunkEnd && para.length > chunkEnd)) {
|
|
111
|
+
lines.push(chunk.slice(0, at - chunkStart) + CURSOR + chunk.slice(at - chunkStart));
|
|
112
|
+
placed = true;
|
|
113
|
+
cursorLine = lines.length - 1;
|
|
114
|
+
cursorCol = at - chunkStart;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
lines.push(chunk);
|
|
118
|
+
}
|
|
119
|
+
offset += para.length + 1; // + newline
|
|
120
|
+
if (p < paragraphs.length - 1) {
|
|
121
|
+
// place caret on an empty trailing row when it sits exactly at a newline
|
|
122
|
+
if (!placed && at === offset - 1) {
|
|
123
|
+
if (cursorLine < lines.length)
|
|
124
|
+
lines[cursorLine] = lines[cursorLine] + (para.length === 0 || para.length % w === 0 ? CURSOR : '');
|
|
125
|
+
placed = true;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
lines.push('');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (!placed) {
|
|
133
|
+
lines.push(CURSOR);
|
|
134
|
+
cursorLine = lines.length - 1;
|
|
135
|
+
cursorCol = 0;
|
|
136
|
+
}
|
|
137
|
+
return { lines, cursorLine, cursorCol };
|
|
138
|
+
}
|
|
139
|
+
const CURSOR = '▍';
|
|
140
|
+
//# sourceMappingURL=editor.js.map
|