@okrapdf/cli 0.4.7 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +94 -26
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/chat.d.ts +6 -17
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +344 -332
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/elements.d.ts.map +1 -1
- package/dist/commands/elements.js +15 -12
- package/dist/commands/elements.js.map +1 -1
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +228 -13
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +11 -9
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +3 -24
- package/dist/commands/search.js.map +1 -1
- package/dist/lib/backends/do-adapters.test.d.ts +6 -0
- package/dist/lib/backends/do-adapters.test.d.ts.map +1 -0
- package/dist/lib/backends/do-adapters.test.js +311 -0
- package/dist/lib/backends/do-adapters.test.js.map +1 -0
- package/dist/lib/backends/do.d.ts +23 -0
- package/dist/lib/backends/do.d.ts.map +1 -0
- package/dist/lib/backends/do.js +340 -0
- package/dist/lib/backends/do.js.map +1 -0
- package/dist/lib/backends/index.d.ts +7 -0
- package/dist/lib/backends/index.d.ts.map +1 -0
- package/dist/lib/backends/index.js +8 -0
- package/dist/lib/backends/index.js.map +1 -0
- package/dist/lib/backends/okrapdf.d.ts +9 -0
- package/dist/lib/backends/okrapdf.d.ts.map +1 -0
- package/dist/lib/backends/okrapdf.js +50 -0
- package/dist/lib/backends/okrapdf.js.map +1 -0
- package/dist/lib/backends/types.d.ts +205 -0
- package/dist/lib/backends/types.d.ts.map +1 -0
- package/dist/lib/backends/types.js +7 -0
- package/dist/lib/backends/types.js.map +1 -0
- package/dist/lib/completion-stream.d.ts +22 -0
- package/dist/lib/completion-stream.d.ts.map +1 -0
- package/dist/lib/completion-stream.js +69 -0
- package/dist/lib/completion-stream.js.map +1 -0
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/general-chat.d.ts +11 -0
- package/dist/lib/general-chat.d.ts.map +1 -0
- package/dist/lib/general-chat.js +69 -0
- package/dist/lib/general-chat.js.map +1 -0
- package/dist/lib/multi-doc-chat.d.ts +20 -0
- package/dist/lib/multi-doc-chat.d.ts.map +1 -0
- package/dist/lib/multi-doc-chat.js +162 -0
- package/dist/lib/multi-doc-chat.js.map +1 -0
- package/dist/lib/single-doc-chat.d.ts +14 -0
- package/dist/lib/single-doc-chat.d.ts.map +1 -0
- package/dist/lib/single-doc-chat.js +165 -0
- package/dist/lib/single-doc-chat.js.map +1 -0
- package/dist/lib/task-agent.d.ts.map +1 -1
- package/dist/lib/task-agent.js +29 -10
- package/dist/lib/task-agent.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/backends/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared JSONL stream reader for /completion endpoints.
|
|
3
|
+
*
|
|
4
|
+
* All chat modes (single-doc, multi-doc, general) stream JSONL with the same
|
|
5
|
+
* event types: text_delta, toolcall_end, tool_result, step_done, done, error.
|
|
6
|
+
*/
|
|
7
|
+
export interface StreamCallbacks {
|
|
8
|
+
onTextDelta?(delta: string): void;
|
|
9
|
+
onToolCallEnd?(name: string): void;
|
|
10
|
+
onToolResult?(name: string): void;
|
|
11
|
+
onStepDone?(stopReason: string): void;
|
|
12
|
+
}
|
|
13
|
+
export interface StreamResult {
|
|
14
|
+
answer: string;
|
|
15
|
+
costUsd: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Read a JSONL streaming response and invoke callbacks for each event.
|
|
19
|
+
* Returns the final answer and cost from the `done` event.
|
|
20
|
+
*/
|
|
21
|
+
export declare function readCompletionStream(response: Response, callbacks: StreamCallbacks): Promise<StreamResult>;
|
|
22
|
+
//# sourceMappingURL=completion-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-stream.d.ts","sourceRoot":"","sources":["../../src/lib/completion-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,YAAY,CAAC,CAuDvB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared JSONL stream reader for /completion endpoints.
|
|
3
|
+
*
|
|
4
|
+
* All chat modes (single-doc, multi-doc, general) stream JSONL with the same
|
|
5
|
+
* event types: text_delta, toolcall_end, tool_result, step_done, done, error.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Read a JSONL streaming response and invoke callbacks for each event.
|
|
9
|
+
* Returns the final answer and cost from the `done` event.
|
|
10
|
+
*/
|
|
11
|
+
export async function readCompletionStream(response, callbacks) {
|
|
12
|
+
const reader = response.body.getReader();
|
|
13
|
+
const decoder = new TextDecoder();
|
|
14
|
+
let buffer = '';
|
|
15
|
+
let finalAnswer = '';
|
|
16
|
+
let totalCostUsd = 0;
|
|
17
|
+
while (true) {
|
|
18
|
+
const { done, value } = await reader.read();
|
|
19
|
+
if (done)
|
|
20
|
+
break;
|
|
21
|
+
buffer += decoder.decode(value, { stream: true });
|
|
22
|
+
const lines = buffer.split('\n');
|
|
23
|
+
buffer = lines.pop();
|
|
24
|
+
for (const line of lines) {
|
|
25
|
+
if (!line.trim())
|
|
26
|
+
continue;
|
|
27
|
+
let event;
|
|
28
|
+
try {
|
|
29
|
+
event = JSON.parse(line);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
switch (event.type) {
|
|
35
|
+
case 'text_delta':
|
|
36
|
+
callbacks.onTextDelta?.(event.delta);
|
|
37
|
+
break;
|
|
38
|
+
case 'toolcall_end':
|
|
39
|
+
callbacks.onToolCallEnd?.(event.name);
|
|
40
|
+
break;
|
|
41
|
+
case 'tool_result':
|
|
42
|
+
callbacks.onToolResult?.(event.name);
|
|
43
|
+
break;
|
|
44
|
+
case 'step_done':
|
|
45
|
+
callbacks.onStepDone?.(event.stopReason);
|
|
46
|
+
break;
|
|
47
|
+
case 'done':
|
|
48
|
+
finalAnswer = event.answer || '';
|
|
49
|
+
totalCostUsd = event.usage?.costUsd || 0;
|
|
50
|
+
break;
|
|
51
|
+
case 'error':
|
|
52
|
+
throw new Error(event.details || event.error || 'Completion failed');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Drain remaining buffer
|
|
57
|
+
if (buffer.trim()) {
|
|
58
|
+
try {
|
|
59
|
+
const event = JSON.parse(buffer);
|
|
60
|
+
if (event.type === 'done') {
|
|
61
|
+
finalAnswer = event.answer || '';
|
|
62
|
+
totalCostUsd = event.usage?.costUsd || 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch { /* ignore */ }
|
|
66
|
+
}
|
|
67
|
+
return { answer: finalAnswer, costUsd: totalCostUsd };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=completion-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-stream.js","sourceRoot":"","sources":["../../src/lib/completion-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAkB,EAClB,SAA0B;IAE1B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAK,CAAC,SAAS,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC3B,IAAI,KAAU,CAAC;YACf,IAAI,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YAErD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,YAAY;oBACf,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM;gBACR,KAAK,cAAc;oBACjB,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM;gBACR,KAAK,aAAa;oBAChB,SAAS,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,MAAM;gBACR,KAAK,WAAW;oBACd,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;oBACjC,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,OAAO;oBACV,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAQ,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjC,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -73,6 +73,10 @@ export declare function getAgentSessionUrl(): string;
|
|
|
73
73
|
* Get agent session HTTP URL (for replay/events)
|
|
74
74
|
*/
|
|
75
75
|
export declare function getAgentSessionHttpUrl(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Get the Document Agent shared secret for /document/:id/* HTTP endpoints.
|
|
78
|
+
*/
|
|
79
|
+
export declare function getDocumentAgentSecret(): string | undefined;
|
|
76
80
|
/**
|
|
77
81
|
* Check if JSON output is requested (via --json flag or OKRA_OUTPUT_FORMAT=json)
|
|
78
82
|
*/
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6BhF;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAG/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE3D;AAED,wBAAgB,aAAa,IAAI,SAAS,GAAG,SAAS,CAGrD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAElD;AAED,wBAAgB,aAAa,IAAI,QAAQ,GAAG,SAAS,CAGpD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAID;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAQrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAG/C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAK5D"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6BhF;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAG/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE3D;AAED,wBAAgB,aAAa,IAAI,SAAS,GAAG,SAAS,CAGrD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAElD;AAED,wBAAgB,aAAa,IAAI,QAAQ,GAAG,SAAS,CAGpD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAID;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAQrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAG/C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAK5D"}
|
package/dist/lib/config.js
CHANGED
|
@@ -151,6 +151,12 @@ export function getAgentSessionHttpUrl() {
|
|
|
151
151
|
const ws = getAgentSessionUrl();
|
|
152
152
|
return ws.replace(/^wss:/, 'https:').replace(/^ws:/, 'http:');
|
|
153
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Get the Document Agent shared secret for /document/:id/* HTTP endpoints.
|
|
156
|
+
*/
|
|
157
|
+
export function getDocumentAgentSecret() {
|
|
158
|
+
return process.env.DOCUMENT_AGENT_SHARED_SECRET || config.get('document_agent_secret');
|
|
159
|
+
}
|
|
154
160
|
/**
|
|
155
161
|
* Check if JSON output is requested (via --json flag or OKRA_OUTPUT_FORMAT=json)
|
|
156
162
|
*/
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General chat (no documents) — proxied through worker to Fireworks.
|
|
3
|
+
*
|
|
4
|
+
* okra chat "what is a 10-K filing?"
|
|
5
|
+
*/
|
|
6
|
+
export interface GeneralChatOptions {
|
|
7
|
+
message: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function runGeneralChat(opts: GeneralChatOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=general-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-chat.d.ts","sourceRoot":"","sources":["../../src/lib/general-chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D5E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General chat (no documents) — proxied through worker to Fireworks.
|
|
3
|
+
*
|
|
4
|
+
* okra chat "what is a 10-K filing?"
|
|
5
|
+
*/
|
|
6
|
+
import { getDocumentAgentSecret, getAgentSessionHttpUrl } from './config.js';
|
|
7
|
+
import { isQuietMode } from './runtime.js';
|
|
8
|
+
import { error } from './output.js';
|
|
9
|
+
import { createSpinner } from './progress.js';
|
|
10
|
+
import { EXIT_CODES } from './client.js';
|
|
11
|
+
import { readCompletionStream } from './completion-stream.js';
|
|
12
|
+
export async function runGeneralChat(opts) {
|
|
13
|
+
const secret = getDocumentAgentSecret();
|
|
14
|
+
if (!secret) {
|
|
15
|
+
error('DOCUMENT_AGENT_SHARED_SECRET not set. Add to .env or env.');
|
|
16
|
+
process.exit(EXIT_CODES.AUTH_ERROR);
|
|
17
|
+
}
|
|
18
|
+
const quiet = isQuietMode();
|
|
19
|
+
const useSpinners = !quiet && process.stderr.isTTY;
|
|
20
|
+
const baseUrl = getAgentSessionHttpUrl();
|
|
21
|
+
const completionUrl = `${baseUrl}/chat/completion`;
|
|
22
|
+
const chatSpinner = useSpinners
|
|
23
|
+
? createSpinner('Thinking...', { stream: process.stderr })
|
|
24
|
+
: null;
|
|
25
|
+
chatSpinner?.start();
|
|
26
|
+
let totalCostUsd = 0;
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(completionUrl, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: {
|
|
31
|
+
'Content-Type': 'application/json',
|
|
32
|
+
'Accept': 'application/x-ndjson',
|
|
33
|
+
'x-document-agent-secret': secret,
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({
|
|
36
|
+
prompt: opts.message,
|
|
37
|
+
stream: true,
|
|
38
|
+
...(opts.model && { model: opts.model }),
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const body = await response.text();
|
|
43
|
+
throw new Error(`Chat failed (${response.status}): ${body}`);
|
|
44
|
+
}
|
|
45
|
+
const result = await readCompletionStream(response, {
|
|
46
|
+
onTextDelta(delta) {
|
|
47
|
+
if (chatSpinner?.isSpinning)
|
|
48
|
+
chatSpinner.stop();
|
|
49
|
+
process.stdout.write(delta);
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
totalCostUsd = result.costUsd;
|
|
53
|
+
if (chatSpinner?.isSpinning)
|
|
54
|
+
chatSpinner.stop();
|
|
55
|
+
process.stdout.write('\n');
|
|
56
|
+
if (!quiet && totalCostUsd > 0) {
|
|
57
|
+
const chalk = (await import('chalk')).default;
|
|
58
|
+
process.stderr.write(chalk.dim(`\n$${totalCostUsd.toFixed(4)}`) + '\n');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (chatSpinner?.isSpinning)
|
|
63
|
+
chatSpinner.fail('Chat failed');
|
|
64
|
+
error(err instanceof Error ? err.message : String(err));
|
|
65
|
+
process.exitCode = EXIT_CODES.GENERAL_ERROR;
|
|
66
|
+
}
|
|
67
|
+
process.exit(process.exitCode ?? 0);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=general-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-chat.js","sourceRoot":"","sources":["../../src/lib/general-chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAEnD,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,GAAG,OAAO,kBAAkB,CAAC;IAEnD,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC;IACT,WAAW,EAAE,KAAK,EAAE,CAAC;IAErB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,QAAQ,EAAE,sBAAsB;gBAChC,yBAAyB,EAAE,MAAO;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,MAAM,EAAE,IAAI;gBACZ,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;aACzC,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE;YAClD,WAAW,CAAC,KAAK;gBACf,IAAI,WAAW,EAAE,UAAU;oBAAE,WAAW,CAAC,IAAI,EAAE,CAAC;gBAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;SACF,CAAC,CAAC;QAEH,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,WAAW,EAAE,UAAU;YAAE,WAAW,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,WAAW,EAAE,UAAU;YAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-document chat via /orchestrate/completion on worker.
|
|
3
|
+
*
|
|
4
|
+
* okra chat "compare revenue" --doc ocr-XXX,ocr-YYY
|
|
5
|
+
* okra chat "compare all" -c my-collection
|
|
6
|
+
*
|
|
7
|
+
* Lead agent (Fireworks kimi-k2p5) with query_document tool that fans out
|
|
8
|
+
* to each DocumentAgent DO's /completion endpoint.
|
|
9
|
+
*/
|
|
10
|
+
export interface MultiDocChatOptions {
|
|
11
|
+
message: string;
|
|
12
|
+
/** Comma-separated job IDs */
|
|
13
|
+
documents?: string;
|
|
14
|
+
/** Collection name or ID */
|
|
15
|
+
collection?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
share?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function runMultiDocChat(opts: MultiDocChatOptions): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=multi-doc-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-doc-chat.d.ts","sourceRoot":"","sources":["../../src/lib/multi-doc-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0ED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F9E"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-document chat via /orchestrate/completion on worker.
|
|
3
|
+
*
|
|
4
|
+
* okra chat "compare revenue" --doc ocr-XXX,ocr-YYY
|
|
5
|
+
* okra chat "compare all" -c my-collection
|
|
6
|
+
*
|
|
7
|
+
* Lead agent (Fireworks kimi-k2p5) with query_document tool that fans out
|
|
8
|
+
* to each DocumentAgent DO's /completion endpoint.
|
|
9
|
+
*/
|
|
10
|
+
import { getDocumentAgentSecret, getAgentSessionHttpUrl } from './config.js';
|
|
11
|
+
import { isQuietMode } from './runtime.js';
|
|
12
|
+
import { error, info } from './output.js';
|
|
13
|
+
import { createSpinner } from './progress.js';
|
|
14
|
+
import { EXIT_CODES, get, OkraApiError } from './client.js';
|
|
15
|
+
import { readCompletionStream } from './completion-stream.js';
|
|
16
|
+
async function resolveDocuments(documents, collection) {
|
|
17
|
+
// Direct job IDs — resolve file names in parallel
|
|
18
|
+
if (documents) {
|
|
19
|
+
const jobIds = documents.split(',').map(s => s.trim()).filter(Boolean);
|
|
20
|
+
for (const id of jobIds) {
|
|
21
|
+
if (!id.startsWith('ocr-')) {
|
|
22
|
+
error(`Invalid job ID: ${id} (must start with ocr-)`);
|
|
23
|
+
process.exit(EXIT_CODES.INVALID_ARGS);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const resolved = await Promise.all(jobIds.map(async (id) => {
|
|
27
|
+
try {
|
|
28
|
+
const job = await get(`api/v1/jobs/${id}`);
|
|
29
|
+
return { jobId: id, fileName: job.filename || id };
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return { jobId: id, fileName: id };
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
return resolved;
|
|
36
|
+
}
|
|
37
|
+
// Collection
|
|
38
|
+
if (collection) {
|
|
39
|
+
// Check if it's inline job IDs separated by commas
|
|
40
|
+
const parts = collection.split(',').map(s => s.trim());
|
|
41
|
+
if (parts.every(s => s.startsWith('ocr-'))) {
|
|
42
|
+
return parts.map(id => ({ jobId: id, fileName: id }));
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const payload = await get(`api/v1/collections/${encodeURIComponent(collection)}`);
|
|
46
|
+
info(`Collection: ${payload.name} (${payload.id})`);
|
|
47
|
+
const docs = payload.documents.map(d => ({
|
|
48
|
+
jobId: d.job_id,
|
|
49
|
+
fileName: d.file_name || d.job_id,
|
|
50
|
+
}));
|
|
51
|
+
for (const d of docs)
|
|
52
|
+
info(` ${d.jobId} ${d.fileName}`);
|
|
53
|
+
if (docs.length === 0) {
|
|
54
|
+
error('Collection is empty — add documents first');
|
|
55
|
+
process.exit(EXIT_CODES.INVALID_ARGS);
|
|
56
|
+
}
|
|
57
|
+
return docs;
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
if (err instanceof OkraApiError && err.statusCode === 404) {
|
|
61
|
+
error(`Collection not found: ${collection}`);
|
|
62
|
+
process.exit(EXIT_CODES.NOT_FOUND);
|
|
63
|
+
}
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
error('Provide document IDs (--doc) or collection (-c)');
|
|
68
|
+
process.exit(EXIT_CODES.INVALID_ARGS);
|
|
69
|
+
return []; // unreachable
|
|
70
|
+
}
|
|
71
|
+
export async function runMultiDocChat(opts) {
|
|
72
|
+
const secret = getDocumentAgentSecret();
|
|
73
|
+
if (!secret) {
|
|
74
|
+
error('DOCUMENT_AGENT_SHARED_SECRET not set. Add to .env or env.');
|
|
75
|
+
process.exit(EXIT_CODES.AUTH_ERROR);
|
|
76
|
+
}
|
|
77
|
+
const docs = await resolveDocuments(opts.documents, opts.collection);
|
|
78
|
+
const names = docs.map(d => d.fileName).join(', ');
|
|
79
|
+
info(`Querying ${docs.length} documents (${names})`);
|
|
80
|
+
const quiet = isQuietMode();
|
|
81
|
+
const useSpinners = !quiet && process.stderr.isTTY;
|
|
82
|
+
const baseUrl = getAgentSessionHttpUrl();
|
|
83
|
+
const completionUrl = `${baseUrl}/orchestrate/completion`;
|
|
84
|
+
const chatSpinner = useSpinners
|
|
85
|
+
? createSpinner('Thinking...', { stream: process.stderr })
|
|
86
|
+
: null;
|
|
87
|
+
chatSpinner?.start();
|
|
88
|
+
let totalCostUsd = 0;
|
|
89
|
+
let toolCallCount = 0;
|
|
90
|
+
try {
|
|
91
|
+
const response = await fetch(completionUrl, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: {
|
|
94
|
+
'Content-Type': 'application/json',
|
|
95
|
+
'Accept': 'application/x-ndjson',
|
|
96
|
+
'x-document-agent-secret': secret,
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify({
|
|
99
|
+
query: opts.message,
|
|
100
|
+
documents: docs,
|
|
101
|
+
stream: true,
|
|
102
|
+
...(opts.model && { model: opts.model }),
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
105
|
+
if (!response.ok) {
|
|
106
|
+
const body = await response.text();
|
|
107
|
+
throw new Error(`Orchestrate failed (${response.status}): ${body}`);
|
|
108
|
+
}
|
|
109
|
+
const result = await readCompletionStream(response, {
|
|
110
|
+
onTextDelta(delta) {
|
|
111
|
+
if (chatSpinner?.isSpinning)
|
|
112
|
+
chatSpinner.stop();
|
|
113
|
+
process.stdout.write(delta);
|
|
114
|
+
},
|
|
115
|
+
onToolCallEnd(name) {
|
|
116
|
+
toolCallCount++;
|
|
117
|
+
if (chatSpinner) {
|
|
118
|
+
if (!chatSpinner.isSpinning)
|
|
119
|
+
chatSpinner.start();
|
|
120
|
+
chatSpinner.text = `Querying: ${name}`;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
onToolResult(name) {
|
|
124
|
+
if (chatSpinner?.isSpinning)
|
|
125
|
+
chatSpinner.text = `${name} done`;
|
|
126
|
+
},
|
|
127
|
+
onStepDone(stopReason) {
|
|
128
|
+
if (stopReason === 'toolUse' && chatSpinner) {
|
|
129
|
+
if (!chatSpinner.isSpinning)
|
|
130
|
+
chatSpinner.start();
|
|
131
|
+
chatSpinner.text = 'Synthesizing...';
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
totalCostUsd = result.costUsd;
|
|
136
|
+
if (chatSpinner?.isSpinning)
|
|
137
|
+
chatSpinner.stop();
|
|
138
|
+
process.stdout.write('\n');
|
|
139
|
+
if (!quiet) {
|
|
140
|
+
const parts = [];
|
|
141
|
+
if (totalCostUsd > 0)
|
|
142
|
+
parts.push(`$${totalCostUsd.toFixed(4)}`);
|
|
143
|
+
if (toolCallCount > 0)
|
|
144
|
+
parts.push(`${toolCallCount} tool calls`);
|
|
145
|
+
if (parts.length) {
|
|
146
|
+
const chalk = (await import('chalk')).default;
|
|
147
|
+
process.stderr.write(chalk.dim(`\n${parts.join(' | ')}`) + '\n');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (opts.share) {
|
|
151
|
+
process.stderr.write(`Share URL: https://okrapdf.com/share/multi-doc\n`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
if (chatSpinner?.isSpinning)
|
|
156
|
+
chatSpinner.fail('Query failed');
|
|
157
|
+
error(err instanceof Error ? err.message : String(err));
|
|
158
|
+
process.exitCode = EXIT_CODES.GENERAL_ERROR;
|
|
159
|
+
}
|
|
160
|
+
process.exit(process.exitCode ?? 0);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=multi-doc-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-doc-chat.js","sourceRoot":"","sources":["../../src/lib/multi-doc-chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-document chat via /document/:id/completion (Gen 3 path).
|
|
3
|
+
*
|
|
4
|
+
* Sends a prompt to a DocumentAgent DO and streams JSONL back.
|
|
5
|
+
*/
|
|
6
|
+
export interface SingleDocChatOptions {
|
|
7
|
+
jobId: string;
|
|
8
|
+
message: string;
|
|
9
|
+
schema?: string;
|
|
10
|
+
share?: boolean;
|
|
11
|
+
model?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function runSingleDocChat(opts: SingleDocChatOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=single-doc-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-doc-chat.d.ts","sourceRoot":"","sources":["../../src/lib/single-doc-chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyJhF"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-document chat via /document/:id/completion (Gen 3 path).
|
|
3
|
+
*
|
|
4
|
+
* Sends a prompt to a DocumentAgent DO and streams JSONL back.
|
|
5
|
+
*/
|
|
6
|
+
import { getDocumentAgentSecret, getAgentSessionHttpUrl, getApiKey } from './config.js';
|
|
7
|
+
import { isQuietMode } from './runtime.js';
|
|
8
|
+
import { error, info } from './output.js';
|
|
9
|
+
import { createSpinner } from './progress.js';
|
|
10
|
+
import { EXIT_CODES, patch as apiPatch } from './client.js';
|
|
11
|
+
import { resolveSchema, extractJson, listBuiltinNames, } from './structured-output.js';
|
|
12
|
+
import { resolveJobId } from './resolver.js';
|
|
13
|
+
import { readCompletionStream } from './completion-stream.js';
|
|
14
|
+
export async function runSingleDocChat(opts) {
|
|
15
|
+
const secret = getDocumentAgentSecret();
|
|
16
|
+
if (!secret) {
|
|
17
|
+
error('DOCUMENT_AGENT_SHARED_SECRET not set. Add to .env or env. Use --socket for legacy WS path.');
|
|
18
|
+
process.exit(EXIT_CODES.AUTH_ERROR);
|
|
19
|
+
}
|
|
20
|
+
// Resolve schema if provided
|
|
21
|
+
let resolvedSchema;
|
|
22
|
+
if (opts.schema) {
|
|
23
|
+
if (opts.schema === 'help') {
|
|
24
|
+
console.log('Built-in schemas:');
|
|
25
|
+
for (const name of listBuiltinNames()) {
|
|
26
|
+
console.log(` ${name}`);
|
|
27
|
+
}
|
|
28
|
+
console.log('\nYou can also pass inline JSON or a file path:');
|
|
29
|
+
console.log(' --schema \'{"type":"object","properties":{"name":{"type":"string"}}}\'');
|
|
30
|
+
console.log(' --schema ./my-schema.json');
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
const result = resolveSchema(opts.schema);
|
|
34
|
+
if ('error' in result) {
|
|
35
|
+
error(result.error);
|
|
36
|
+
process.exit(EXIT_CODES.INVALID_ARGS);
|
|
37
|
+
}
|
|
38
|
+
resolvedSchema = result.schema;
|
|
39
|
+
}
|
|
40
|
+
// Resolve document reference to jobId
|
|
41
|
+
const resolved = await resolveJobId(opts.jobId).catch((err) => {
|
|
42
|
+
error(err instanceof Error ? err.message : String(err));
|
|
43
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
44
|
+
});
|
|
45
|
+
const jobId = resolved.jobId;
|
|
46
|
+
const quiet = isQuietMode();
|
|
47
|
+
const useSpinners = !quiet && process.stderr.isTTY;
|
|
48
|
+
// --share
|
|
49
|
+
if (opts.share) {
|
|
50
|
+
const apiKey = getApiKey();
|
|
51
|
+
if (apiKey) {
|
|
52
|
+
try {
|
|
53
|
+
await apiPatch(`api/share/${jobId}`, { is_public: true });
|
|
54
|
+
info(`Share URL: https://okrapdf.com/share/${jobId}`);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
error(`Failed to enable sharing: ${err instanceof Error ? err.message : String(err)}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const baseUrl = getAgentSessionHttpUrl();
|
|
62
|
+
const completionUrl = `${baseUrl}/document/${jobId}/completion`;
|
|
63
|
+
const chatSpinner = useSpinners
|
|
64
|
+
? createSpinner('Thinking...', { stream: process.stderr })
|
|
65
|
+
: null;
|
|
66
|
+
chatSpinner?.start();
|
|
67
|
+
let finalAnswer = '';
|
|
68
|
+
let totalCostUsd = 0;
|
|
69
|
+
let toolCallCount = 0;
|
|
70
|
+
try {
|
|
71
|
+
const response = await fetch(completionUrl, {
|
|
72
|
+
method: 'POST',
|
|
73
|
+
headers: {
|
|
74
|
+
'Content-Type': 'application/json',
|
|
75
|
+
'Accept': 'application/x-ndjson',
|
|
76
|
+
'x-document-agent-secret': secret,
|
|
77
|
+
},
|
|
78
|
+
body: JSON.stringify({ prompt: opts.message, stream: true }),
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
const body = await response.text();
|
|
82
|
+
throw new Error(`Completion failed (${response.status}): ${body}`);
|
|
83
|
+
}
|
|
84
|
+
const result = await readCompletionStream(response, {
|
|
85
|
+
onTextDelta(delta) {
|
|
86
|
+
if (chatSpinner?.isSpinning)
|
|
87
|
+
chatSpinner.stop();
|
|
88
|
+
process.stdout.write(delta);
|
|
89
|
+
},
|
|
90
|
+
onToolCallEnd(name) {
|
|
91
|
+
toolCallCount++;
|
|
92
|
+
if (chatSpinner) {
|
|
93
|
+
if (!chatSpinner.isSpinning)
|
|
94
|
+
chatSpinner.start();
|
|
95
|
+
chatSpinner.text = `Tool: ${name}`;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
onToolResult(name) {
|
|
99
|
+
if (chatSpinner?.isSpinning)
|
|
100
|
+
chatSpinner.text = `Tool: ${name} done`;
|
|
101
|
+
},
|
|
102
|
+
onStepDone(stopReason) {
|
|
103
|
+
if (stopReason === 'toolUse' && chatSpinner) {
|
|
104
|
+
if (!chatSpinner.isSpinning)
|
|
105
|
+
chatSpinner.start();
|
|
106
|
+
chatSpinner.text = 'Thinking...';
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
finalAnswer = result.answer;
|
|
111
|
+
totalCostUsd = result.costUsd;
|
|
112
|
+
if (chatSpinner?.isSpinning)
|
|
113
|
+
chatSpinner.stop();
|
|
114
|
+
process.stdout.write('\n');
|
|
115
|
+
if (!quiet && !resolvedSchema) {
|
|
116
|
+
const parts = [];
|
|
117
|
+
if (totalCostUsd > 0)
|
|
118
|
+
parts.push(`$${totalCostUsd.toFixed(4)}`);
|
|
119
|
+
if (toolCallCount > 0)
|
|
120
|
+
parts.push(`${toolCallCount} tool calls`);
|
|
121
|
+
if (parts.length) {
|
|
122
|
+
const chalk = (await import('chalk')).default;
|
|
123
|
+
process.stderr.write(chalk.dim(`\n${parts.join(' | ')}`) + '\n');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (opts.share)
|
|
127
|
+
process.stderr.write(`Share URL: https://okrapdf.com/share/${jobId}\n`);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (chatSpinner?.isSpinning)
|
|
131
|
+
chatSpinner.fail('Completion failed');
|
|
132
|
+
error(err instanceof Error ? err.message : String(err));
|
|
133
|
+
process.exitCode = EXIT_CODES.GENERAL_ERROR;
|
|
134
|
+
}
|
|
135
|
+
// Structured output
|
|
136
|
+
if (resolvedSchema && !process.exitCode) {
|
|
137
|
+
let parsed = extractJson(finalAnswer);
|
|
138
|
+
if (parsed === null) {
|
|
139
|
+
process.stderr.write('Failed to extract JSON from response.\n');
|
|
140
|
+
process.stderr.write('Raw output:\n' + finalAnswer + '\n');
|
|
141
|
+
process.exitCode = EXIT_CODES.VALIDATION_ERROR;
|
|
142
|
+
}
|
|
143
|
+
if (parsed !== null && !process.exitCode) {
|
|
144
|
+
if (resolvedSchema.zodSchema) {
|
|
145
|
+
const result = resolvedSchema.zodSchema.safeParse(parsed);
|
|
146
|
+
if (result.success) {
|
|
147
|
+
process.stdout.write(JSON.stringify(result.data, null, 2) + '\n');
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
process.stderr.write('Schema validation failed:\n');
|
|
151
|
+
for (const issue of result.error.issues) {
|
|
152
|
+
process.stderr.write(` - ${issue.path.join('.')}: ${issue.message}\n`);
|
|
153
|
+
}
|
|
154
|
+
process.stderr.write('\nRaw JSON:\n' + JSON.stringify(parsed, null, 2) + '\n');
|
|
155
|
+
process.exitCode = EXIT_CODES.VALIDATION_ERROR;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
process.stdout.write(JSON.stringify(parsed, null, 2) + '\n');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
process.exit(process.exitCode ?? 0);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=single-doc-chat.js.map
|