@okrapdf/cli 0.3.1 → 0.3.3
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/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -4
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +178 -11
- package/dist/cli.test.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +246 -10
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/chat.test.js +178 -3
- package/dist/commands/chat.test.js.map +1 -1
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +4 -3
- package/dist/commands/jobs.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/lib/agent-renderer.d.ts +12 -0
- package/dist/lib/agent-renderer.d.ts.map +1 -1
- package/dist/lib/agent-renderer.js +28 -0
- package/dist/lib/agent-renderer.js.map +1 -1
- package/dist/lib/client.d.ts +1 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +1 -0
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +28 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/output.d.ts +1 -1
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +53 -2
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/runtime.d.ts.map +1 -1
- package/dist/lib/runtime.js +5 -0
- package/dist/lib/runtime.js.map +1 -1
- package/dist/lib/structured-output.d.ts +32 -0
- package/dist/lib/structured-output.d.ts.map +1 -0
- package/dist/lib/structured-output.js +156 -0
- package/dist/lib/structured-output.js.map +1 -0
- package/dist/lib/structured-output.test.d.ts +2 -0
- package/dist/lib/structured-output.test.d.ts.map +1 -0
- package/dist/lib/structured-output.test.js +148 -0
- package/dist/lib/structured-output.test.js.map +1 -0
- package/dist/lib/system-prompt.d.ts +4 -0
- package/dist/lib/system-prompt.d.ts.map +1 -1
- package/dist/lib/system-prompt.js +8 -0
- package/dist/lib/system-prompt.js.map +1 -1
- package/dist/templates/replay-viewer.html +230 -0
- package/package.json +4 -3
package/dist/lib/config.d.ts
CHANGED
|
@@ -57,6 +57,22 @@ export declare function resetConfig(): void;
|
|
|
57
57
|
* Check if authenticated
|
|
58
58
|
*/
|
|
59
59
|
export declare function isAuthenticated(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Get JSON field filter list from --json field1,field2
|
|
62
|
+
*/
|
|
63
|
+
export declare function getJsonFields(): string[] | null;
|
|
64
|
+
/**
|
|
65
|
+
* Get jq expression from --jq flag
|
|
66
|
+
*/
|
|
67
|
+
export declare function getJqExpression(): string | null;
|
|
68
|
+
/**
|
|
69
|
+
* Get agent session WebSocket URL (for chat command)
|
|
70
|
+
*/
|
|
71
|
+
export declare function getAgentSessionUrl(): string;
|
|
72
|
+
/**
|
|
73
|
+
* Get agent session HTTP URL (for replay/events)
|
|
74
|
+
*/
|
|
75
|
+
export declare function getAgentSessionHttpUrl(): string;
|
|
60
76
|
/**
|
|
61
77
|
* Check if JSON output is requested (via --json flag or OKRA_OUTPUT_FORMAT=json)
|
|
62
78
|
*/
|
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,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,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAK5D"}
|
package/dist/lib/config.js
CHANGED
|
@@ -123,6 +123,34 @@ export function resetConfig() {
|
|
|
123
123
|
export function isAuthenticated() {
|
|
124
124
|
return !!getApiKey();
|
|
125
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Get JSON field filter list from --json field1,field2
|
|
128
|
+
*/
|
|
129
|
+
export function getJsonFields() {
|
|
130
|
+
const raw = process.env.OKRA_JSON_FIELDS;
|
|
131
|
+
if (!raw)
|
|
132
|
+
return null;
|
|
133
|
+
return raw.split(',').map(f => f.trim()).filter(Boolean);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get jq expression from --jq flag
|
|
137
|
+
*/
|
|
138
|
+
export function getJqExpression() {
|
|
139
|
+
return process.env.OKRA_JQ || null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get agent session WebSocket URL (for chat command)
|
|
143
|
+
*/
|
|
144
|
+
export function getAgentSessionUrl() {
|
|
145
|
+
return process.env.OKRA_AGENT_SESSION_URL || 'wss://agent.okrapdf.com';
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get agent session HTTP URL (for replay/events)
|
|
149
|
+
*/
|
|
150
|
+
export function getAgentSessionHttpUrl() {
|
|
151
|
+
const ws = getAgentSessionUrl();
|
|
152
|
+
return ws.replace(/^wss:/, 'https:').replace(/^ws:/, 'http:');
|
|
153
|
+
}
|
|
126
154
|
/**
|
|
127
155
|
* Check if JSON output is requested (via --json flag or OKRA_OUTPUT_FORMAT=json)
|
|
128
156
|
*/
|
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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"}
|
package/dist/lib/output.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare function formatOutput(data: unknown, format: OutputFormat, column
|
|
|
12
12
|
width?: number;
|
|
13
13
|
}[]): string;
|
|
14
14
|
/**
|
|
15
|
-
* Format as JSON
|
|
15
|
+
* Format as JSON (with optional field filtering and jq piping)
|
|
16
16
|
*/
|
|
17
17
|
export declare function formatJson<T>(data: T): string;
|
|
18
18
|
/**
|
package/dist/lib/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEpC;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1D,MAAM,CAcR;AAyCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAe7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAK9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,EACvD,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1C,MAAM,CAgBR;AAYD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,EACzD,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1D,MAAM,CAqBR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,EAC5D,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1C,MAAM,CAiBR;AAgCD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG1C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAa3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAenD"}
|
package/dist/lib/output.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import Table from 'cli-table3';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
+
import { execSync } from 'child_process';
|
|
6
7
|
import { isQuietMode, isVerboseMode } from './runtime.js';
|
|
8
|
+
import { getJsonFields, getJqExpression } from './config.js';
|
|
7
9
|
/**
|
|
8
10
|
* Format data based on the output format
|
|
9
11
|
*/
|
|
@@ -23,10 +25,59 @@ export function formatOutput(data, format, columns) {
|
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
|
-
*
|
|
28
|
+
* Pick only specified keys from data
|
|
29
|
+
*/
|
|
30
|
+
function filterFields(data, fields) {
|
|
31
|
+
if (Array.isArray(data)) {
|
|
32
|
+
return data.map(item => filterFields(item, fields));
|
|
33
|
+
}
|
|
34
|
+
if (data && typeof data === 'object') {
|
|
35
|
+
const obj = data;
|
|
36
|
+
const result = {};
|
|
37
|
+
for (const f of fields) {
|
|
38
|
+
if (f in obj)
|
|
39
|
+
result[f] = obj[f];
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Pipe JSON string through system jq
|
|
47
|
+
*/
|
|
48
|
+
function applyJq(json, expression) {
|
|
49
|
+
try {
|
|
50
|
+
return execSync(`jq ${JSON.stringify(expression)}`, {
|
|
51
|
+
input: json,
|
|
52
|
+
encoding: 'utf8',
|
|
53
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
54
|
+
}).trimEnd();
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const msg = err.message || '';
|
|
58
|
+
if (msg.includes('ENOENT') || msg.includes('not found')) {
|
|
59
|
+
throw new Error('jq is not installed. Install it: https://jqlang.github.io/jq/download/');
|
|
60
|
+
}
|
|
61
|
+
// jq syntax error — surface stderr
|
|
62
|
+
const stderr = err.stderr;
|
|
63
|
+
throw new Error(`jq error: ${stderr || msg}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Format as JSON (with optional field filtering and jq piping)
|
|
27
68
|
*/
|
|
28
69
|
export function formatJson(data) {
|
|
29
|
-
|
|
70
|
+
let filtered = data;
|
|
71
|
+
const fields = getJsonFields();
|
|
72
|
+
if (fields) {
|
|
73
|
+
filtered = filterFields(filtered, fields);
|
|
74
|
+
}
|
|
75
|
+
let json = JSON.stringify(filtered, null, 2);
|
|
76
|
+
const jqExpr = getJqExpression();
|
|
77
|
+
if (jqExpr) {
|
|
78
|
+
json = applyJq(json, jqExpr);
|
|
79
|
+
}
|
|
80
|
+
return json;
|
|
30
81
|
}
|
|
31
82
|
/**
|
|
32
83
|
* Format as JSON Lines
|
package/dist/lib/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/lib/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/lib/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsBvD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
|
package/dist/lib/runtime.js
CHANGED
|
@@ -20,6 +20,11 @@ export function bootstrapGlobalEnv(argv) {
|
|
|
20
20
|
if (arg === '--json') {
|
|
21
21
|
process.env.OKRA_OUTPUT_FORMAT = 'json';
|
|
22
22
|
}
|
|
23
|
+
// --json=field1,field2 (equals syntax)
|
|
24
|
+
if (arg.startsWith('--json=')) {
|
|
25
|
+
process.env.OKRA_OUTPUT_FORMAT = 'json';
|
|
26
|
+
process.env.OKRA_JSON_FIELDS = arg.slice('--json='.length);
|
|
27
|
+
}
|
|
23
28
|
if (arg === '--quiet' || shortFlagPresent(arg, 'q')) {
|
|
24
29
|
process.env.OKRA_QUIET = '1';
|
|
25
30
|
}
|
package/dist/lib/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/lib/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,CAAC;AACpG,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;QAExB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;QAC1C,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QAC/B,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/lib/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,CAAC;AACpG,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;QAExB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;QAC1C,CAAC;QAED,uCAAuC;QACvC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QAC/B,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const BUILTIN_SCHEMAS: Record<string, {
|
|
3
|
+
description: string;
|
|
4
|
+
schema: z.ZodType;
|
|
5
|
+
}>;
|
|
6
|
+
export interface ResolvedSchema {
|
|
7
|
+
/** JSON Schema object to send to the SDK */
|
|
8
|
+
jsonSchema: Record<string, unknown>;
|
|
9
|
+
/** Optional Zod schema for client-side validation (only for built-ins) */
|
|
10
|
+
zodSchema?: z.ZodType;
|
|
11
|
+
/** Source description for error messages */
|
|
12
|
+
source: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a --schema value to a JSON Schema.
|
|
16
|
+
*
|
|
17
|
+
* Accepts:
|
|
18
|
+
* - Built-in name: "summary", "entities", "metadata", "tables"
|
|
19
|
+
* - Inline JSON: '{"type":"object","properties":{"name":{"type":"string"}}}'
|
|
20
|
+
* - File path: "./my-schema.json" or "/abs/path/schema.json"
|
|
21
|
+
*
|
|
22
|
+
* Returns null + error message if invalid.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveSchema(input: string): {
|
|
25
|
+
schema: ResolvedSchema;
|
|
26
|
+
} | {
|
|
27
|
+
error: string;
|
|
28
|
+
};
|
|
29
|
+
export declare function extractJson(text: string): unknown;
|
|
30
|
+
export declare function structuredOutputInstructions(schema: ResolvedSchema): string;
|
|
31
|
+
export declare function listBuiltinNames(): string[];
|
|
32
|
+
//# sourceMappingURL=structured-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-output.d.ts","sourceRoot":"","sources":["../../src/lib/structured-output.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAA;CAAE,CAgDtF,CAAC;AAIF,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACtB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAuD3F;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmBjD;AAID,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAM3E;AAID,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured output: resolve schemas from built-in presets, inline JSON, or files.
|
|
3
|
+
* The resolved JSON Schema is sent to the Claude Agent SDK via output_format
|
|
4
|
+
* for constrained decoding — no prompt engineering needed.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync } from 'fs';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
// ── Built-in schema presets ───────────────────────────────────────────
|
|
9
|
+
export const BUILTIN_SCHEMAS = {
|
|
10
|
+
summary: {
|
|
11
|
+
description: 'Document summary with title, description, and key points',
|
|
12
|
+
schema: z.object({
|
|
13
|
+
title: z.string(),
|
|
14
|
+
description: z.string(),
|
|
15
|
+
key_points: z.array(z.string()),
|
|
16
|
+
page_count: z.number(),
|
|
17
|
+
document_type: z.string().nullable().optional(),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
entities: {
|
|
21
|
+
description: 'People, organizations, dates, and monetary amounts found in the document',
|
|
22
|
+
schema: z.object({
|
|
23
|
+
people: z.array(z.string()),
|
|
24
|
+
organizations: z.array(z.string()),
|
|
25
|
+
dates: z.array(z.object({ date: z.string(), context: z.string() })),
|
|
26
|
+
amounts: z.array(z.object({
|
|
27
|
+
value: z.string(),
|
|
28
|
+
currency: z.string().nullable().optional(),
|
|
29
|
+
context: z.string(),
|
|
30
|
+
})),
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
metadata: {
|
|
34
|
+
description: 'Document metadata including type, language, author, and structural info',
|
|
35
|
+
schema: z.object({
|
|
36
|
+
document_type: z.string(),
|
|
37
|
+
date: z.string().nullable().optional(),
|
|
38
|
+
language: z.string().nullable().optional(),
|
|
39
|
+
author: z.string().nullable().optional(),
|
|
40
|
+
page_count: z.number(),
|
|
41
|
+
has_tables: z.boolean(),
|
|
42
|
+
}),
|
|
43
|
+
},
|
|
44
|
+
tables: {
|
|
45
|
+
description: 'Table inventory with counts, page locations, and structure info',
|
|
46
|
+
schema: z.object({
|
|
47
|
+
table_count: z.number(),
|
|
48
|
+
tables: z.array(z.object({
|
|
49
|
+
page: z.number(),
|
|
50
|
+
description: z.string(),
|
|
51
|
+
row_count: z.number().nullable().optional(),
|
|
52
|
+
column_count: z.number().nullable().optional(),
|
|
53
|
+
key_headers: z.array(z.string()).nullable().optional(),
|
|
54
|
+
})),
|
|
55
|
+
}),
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
// ── Schema resolution ─────────────────────────────────────────────────
|
|
59
|
+
/**
|
|
60
|
+
* Resolve a --schema value to a JSON Schema.
|
|
61
|
+
*
|
|
62
|
+
* Accepts:
|
|
63
|
+
* - Built-in name: "summary", "entities", "metadata", "tables"
|
|
64
|
+
* - Inline JSON: '{"type":"object","properties":{"name":{"type":"string"}}}'
|
|
65
|
+
* - File path: "./my-schema.json" or "/abs/path/schema.json"
|
|
66
|
+
*
|
|
67
|
+
* Returns null + error message if invalid.
|
|
68
|
+
*/
|
|
69
|
+
export function resolveSchema(input) {
|
|
70
|
+
// 1. Built-in preset
|
|
71
|
+
if (input in BUILTIN_SCHEMAS) {
|
|
72
|
+
const builtin = BUILTIN_SCHEMAS[input];
|
|
73
|
+
return {
|
|
74
|
+
schema: {
|
|
75
|
+
jsonSchema: z.toJSONSchema(builtin.schema, { target: 'draft-2020-12' }),
|
|
76
|
+
zodSchema: builtin.schema,
|
|
77
|
+
source: `built-in:${input}`,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// 2. Inline JSON (starts with '{')
|
|
82
|
+
if (input.startsWith('{')) {
|
|
83
|
+
try {
|
|
84
|
+
const parsed = JSON.parse(input);
|
|
85
|
+
if (!parsed.type) {
|
|
86
|
+
return { error: 'Inline JSON schema must have a "type" field' };
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
schema: {
|
|
90
|
+
jsonSchema: parsed,
|
|
91
|
+
source: 'inline',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
return { error: `Invalid inline JSON: ${e instanceof Error ? e.message : e}` };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// 3. File path
|
|
100
|
+
if (existsSync(input)) {
|
|
101
|
+
try {
|
|
102
|
+
const raw = readFileSync(input, 'utf8');
|
|
103
|
+
const parsed = JSON.parse(raw);
|
|
104
|
+
if (!parsed.type) {
|
|
105
|
+
return { error: `Schema file ${input} must have a "type" field` };
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
schema: {
|
|
109
|
+
jsonSchema: parsed,
|
|
110
|
+
source: `file:${input}`,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
return { error: `Failed to read schema file ${input}: ${e instanceof Error ? e.message : e}` };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// 4. Unknown
|
|
119
|
+
const presets = Object.keys(BUILTIN_SCHEMAS).join(', ');
|
|
120
|
+
return {
|
|
121
|
+
error: `Unknown schema "${input}". Use a built-in (${presets}), inline JSON, or a file path.`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// ── JSON extraction (fallback for when SDK doesn't return structured_output) ──
|
|
125
|
+
export function extractJson(text) {
|
|
126
|
+
const trimmed = text.trim();
|
|
127
|
+
try {
|
|
128
|
+
return JSON.parse(trimmed);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// fall through
|
|
132
|
+
}
|
|
133
|
+
const match = trimmed.match(/\{[\s\S]*\}/);
|
|
134
|
+
if (match) {
|
|
135
|
+
try {
|
|
136
|
+
return JSON.parse(match[0]);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// fall through
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
// ── Prompt template (kept for system prompt hint) ─────────────────────
|
|
145
|
+
export function structuredOutputInstructions(schema) {
|
|
146
|
+
return `\n<structured-output>
|
|
147
|
+
RESPOND WITH ONLY A SINGLE JSON OBJECT matching the provided output_format schema.
|
|
148
|
+
No markdown fences, no explanations, no preamble.
|
|
149
|
+
Use null for unknown optional fields. Do NOT hallucinate values.
|
|
150
|
+
</structured-output>`;
|
|
151
|
+
}
|
|
152
|
+
// ── Helpers ───────────────────────────────────────────────────────────
|
|
153
|
+
export function listBuiltinNames() {
|
|
154
|
+
return Object.keys(BUILTIN_SCHEMAS);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=structured-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-output.js","sourceRoot":"","sources":["../../src/lib/structured-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-output.test.d.ts","sourceRoot":"","sources":["../../src/lib/structured-output.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { extractJson, resolveSchema, listBuiltinNames, structuredOutputInstructions, } from './structured-output.js';
|
|
3
|
+
import { writeFileSync, unlinkSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
describe('extractJson', () => {
|
|
7
|
+
it('parses clean JSON', () => {
|
|
8
|
+
const result = extractJson('{"title":"Test","page_count":5}');
|
|
9
|
+
expect(result).toEqual({ title: 'Test', page_count: 5 });
|
|
10
|
+
});
|
|
11
|
+
it('extracts JSON from markdown fences', () => {
|
|
12
|
+
const input = 'Here is the result:\n```json\n{"title":"Test"}\n```\n';
|
|
13
|
+
expect(extractJson(input)).toEqual({ title: 'Test' });
|
|
14
|
+
});
|
|
15
|
+
it('extracts JSON with surrounding text', () => {
|
|
16
|
+
const input = 'Sure! Here is the summary:\n{"title":"Annual Report","page_count":10}\nHope that helps!';
|
|
17
|
+
expect(extractJson(input)).toEqual({ title: 'Annual Report', page_count: 10 });
|
|
18
|
+
});
|
|
19
|
+
it('returns null for non-JSON text', () => {
|
|
20
|
+
expect(extractJson('This is just plain text')).toBeNull();
|
|
21
|
+
});
|
|
22
|
+
it('returns null for empty string', () => {
|
|
23
|
+
expect(extractJson('')).toBeNull();
|
|
24
|
+
});
|
|
25
|
+
it('handles whitespace-padded JSON', () => {
|
|
26
|
+
expect(extractJson(' \n {"a":1} \n ')).toEqual({ a: 1 });
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('resolveSchema', () => {
|
|
30
|
+
it('resolves built-in schema by name', () => {
|
|
31
|
+
const result = resolveSchema('summary');
|
|
32
|
+
expect('schema' in result).toBe(true);
|
|
33
|
+
if ('schema' in result) {
|
|
34
|
+
expect(result.schema.source).toBe('built-in:summary');
|
|
35
|
+
expect(result.schema.jsonSchema).toBeDefined();
|
|
36
|
+
expect(result.schema.zodSchema).toBeDefined();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
it('resolves all built-in schemas', () => {
|
|
40
|
+
for (const name of listBuiltinNames()) {
|
|
41
|
+
const result = resolveSchema(name);
|
|
42
|
+
expect('schema' in result).toBe(true);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
it('resolves inline JSON schema', () => {
|
|
46
|
+
const input = '{"type":"object","properties":{"name":{"type":"string"}}}';
|
|
47
|
+
const result = resolveSchema(input);
|
|
48
|
+
expect('schema' in result).toBe(true);
|
|
49
|
+
if ('schema' in result) {
|
|
50
|
+
expect(result.schema.source).toBe('inline');
|
|
51
|
+
expect(result.schema.jsonSchema).toEqual(JSON.parse(input));
|
|
52
|
+
expect(result.schema.zodSchema).toBeUndefined();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
it('rejects inline JSON without type field', () => {
|
|
56
|
+
const result = resolveSchema('{"properties":{"name":{"type":"string"}}}');
|
|
57
|
+
expect('error' in result).toBe(true);
|
|
58
|
+
if ('error' in result) {
|
|
59
|
+
expect(result.error).toContain('type');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it('rejects invalid inline JSON', () => {
|
|
63
|
+
const result = resolveSchema('{not valid json}');
|
|
64
|
+
expect('error' in result).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('resolves schema from file', () => {
|
|
67
|
+
const tmpFile = join(tmpdir(), `test-schema-${Date.now()}.json`);
|
|
68
|
+
const schema = { type: 'object', properties: { age: { type: 'number' } } };
|
|
69
|
+
writeFileSync(tmpFile, JSON.stringify(schema));
|
|
70
|
+
try {
|
|
71
|
+
const result = resolveSchema(tmpFile);
|
|
72
|
+
expect('schema' in result).toBe(true);
|
|
73
|
+
if ('schema' in result) {
|
|
74
|
+
expect(result.schema.source).toBe(`file:${tmpFile}`);
|
|
75
|
+
expect(result.schema.jsonSchema).toEqual(schema);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
unlinkSync(tmpFile);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
it('returns error for unknown name', () => {
|
|
83
|
+
const result = resolveSchema('nonexistent');
|
|
84
|
+
expect('error' in result).toBe(true);
|
|
85
|
+
if ('error' in result) {
|
|
86
|
+
expect(result.error).toContain('Unknown schema');
|
|
87
|
+
expect(result.error).toContain('summary');
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('listBuiltinNames', () => {
|
|
92
|
+
it('returns all schema names', () => {
|
|
93
|
+
const names = listBuiltinNames();
|
|
94
|
+
expect(names).toContain('summary');
|
|
95
|
+
expect(names).toContain('entities');
|
|
96
|
+
expect(names).toContain('metadata');
|
|
97
|
+
expect(names).toContain('tables');
|
|
98
|
+
expect(names).toHaveLength(4);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('structuredOutputInstructions', () => {
|
|
102
|
+
it('includes structured output block', () => {
|
|
103
|
+
const result = resolveSchema('summary');
|
|
104
|
+
expect('schema' in result).toBe(true);
|
|
105
|
+
if ('schema' in result) {
|
|
106
|
+
const instructions = structuredOutputInstructions(result.schema);
|
|
107
|
+
expect(instructions).toContain('<structured-output>');
|
|
108
|
+
expect(instructions).toContain('JSON');
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('built-in schema validation', () => {
|
|
113
|
+
it('summary schema validates correct data', () => {
|
|
114
|
+
const result = resolveSchema('summary');
|
|
115
|
+
if ('schema' in result && result.schema.zodSchema) {
|
|
116
|
+
const data = {
|
|
117
|
+
title: 'Annual Report',
|
|
118
|
+
description: 'Financial summary',
|
|
119
|
+
key_points: ['Revenue grew'],
|
|
120
|
+
page_count: 42,
|
|
121
|
+
document_type: 'report',
|
|
122
|
+
};
|
|
123
|
+
const parsed = result.schema.zodSchema.safeParse(data);
|
|
124
|
+
expect(parsed.success).toBe(true);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
it('summary schema rejects missing required fields', () => {
|
|
128
|
+
const result = resolveSchema('summary');
|
|
129
|
+
if ('schema' in result && result.schema.zodSchema) {
|
|
130
|
+
const parsed = result.schema.zodSchema.safeParse({ title: 'Test' });
|
|
131
|
+
expect(parsed.success).toBe(false);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
it('entities schema validates correct data', () => {
|
|
135
|
+
const result = resolveSchema('entities');
|
|
136
|
+
if ('schema' in result && result.schema.zodSchema) {
|
|
137
|
+
const data = {
|
|
138
|
+
people: ['John'],
|
|
139
|
+
organizations: ['Acme'],
|
|
140
|
+
dates: [{ date: '2024-01-15', context: 'filed' }],
|
|
141
|
+
amounts: [{ value: '$1M', currency: 'USD', context: 'revenue' }],
|
|
142
|
+
};
|
|
143
|
+
const parsed = result.schema.zodSchema.safeParse(data);
|
|
144
|
+
expect(parsed.success).toBe(true);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=structured-output.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-output.test.js","sourceRoot":"","sources":["../../src/lib/structured-output.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Minimal system prompt for CLI agent chat (no UI/mention context)
|
|
3
3
|
*/
|
|
4
|
+
import { type ResolvedSchema } from './structured-output.js';
|
|
5
|
+
export declare function buildSystemPrompt(options?: {
|
|
6
|
+
schema?: ResolvedSchema;
|
|
7
|
+
}): string;
|
|
4
8
|
export declare const CLI_SYSTEM_PROMPT = "You are a helpful assistant that can help with document analysis and extraction. Your goal is to understand the one pdf given to you with tools like parse and whole suite of python libraries.\n\n<goal>\n - To start, list, or grep for keywords inside derived folder directly. Most likely, you will find markdown files that are page-to-page extracted from the pdf.\n - Try to cite from the derived folder when you try to answer a question or create a document.\n - If there is no relevant information returned from searching the derived/ directory, offer to parse more pages.\n</goal>\n\n<environment>\n OS: Linux (x86_64) in an ephemeral sandbox environment\n Python: 3.12.3, fully functional\n</environment>\n\n<files>\n - There is only one pdf that is in /mnt/data/*.pdf. When user talks about \"the document\", refer to this pdf.\n - All the files you need are in /mnt/data/*\n - Everything you create/extract from the source pdf, move them in the app/derived directory so we can save them for future use in this ephemeral sandbox\n</files>\n\n<derived-folder-structure>\n The derived/ folder contains two parallel OCR outputs that match page-to-page:\n\n <ocr-folder path=\"derived/ocr/\">\n - Raw character extraction from Google DocAI without layout interpretation\n - Use as GROUND TRUTH to detect hallucinations in pages/ output\n - File format: page_001.md, page_002.md, ... + index.json\n </ocr-folder>\n\n <pages-folder path=\"derived/pages/\">\n - AI-interpreted OCR with layout intelligence (VLM/OpenRouter)\n - Structured output: markdown tables, proper column alignment, organized sections\n - Use for QA, data extraction, and answering user questions\n - File format: page_001.md, page_002.md, ... + index.json\n </pages-folder>\n\n <validation-workflow>\n When answering questions or extracting data:\n 1. Use pages/ for structured extraction and user-facing answers\n 2. Cross-reference ocr/ to verify numbers/text are not hallucinated\n 3. If pages/ content differs significantly from ocr/, flag as potential hallucination\n </validation-workflow>\n</derived-folder-structure>\n\n<parse-cli-reference>\n The parse CLI extracts content from PDFs. Output goes to /mnt/data/parse/ directory.\n parse document.pdf # Parse entire PDF\n parse -v document.pdf # Verbose (show progress)\n For specific page ranges: use pypdf to extract pages first, then parse the extracted PDF.\n</parse-cli-reference>\n\n<constraints>\n - NEVER use the Read tool on PDF or image files directly - they will exceed buffer limits and crash.\n - When you mention a file path, always use the full path, ie /mnt/data/derived/revenue.xlsx\n</constraints>";
|
|
5
9
|
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/lib/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,iBAAiB,oqFAqDf,CAAC"}
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/lib/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,cAAc,EAAgC,MAAM,wBAAwB,CAAC;AAE3F,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,GAAG,MAAM,CAM/E;AAED,eAAO,MAAM,iBAAiB,oqFAqDf,CAAC"}
|