@okrapdf/cli 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.test.js +178 -11
- package/dist/cli.test.js.map +1 -1
- package/dist/commands/chat-schema-output.test.d.ts +2 -0
- package/dist/commands/chat-schema-output.test.d.ts.map +1 -0
- package/dist/commands/chat-schema-output.test.js +151 -0
- package/dist/commands/chat-schema-output.test.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +268 -12
- 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 +8 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +13 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/progress.d.ts +6 -2
- package/dist/lib/progress.d.ts.map +1 -1
- package/dist/lib/progress.js +5 -2
- package/dist/lib/progress.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/cli.test.js
CHANGED
|
@@ -1,35 +1,202 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
// Mock client module before importing anything that uses it
|
|
3
|
+
vi.mock('./lib/client.js', async (importOriginal) => {
|
|
4
|
+
const actual = await importOriginal();
|
|
5
|
+
return {
|
|
6
|
+
...actual,
|
|
7
|
+
get: vi.fn(),
|
|
8
|
+
};
|
|
9
|
+
});
|
|
2
10
|
import { createProgram } from './cli.js';
|
|
11
|
+
import { get } from './lib/client.js';
|
|
12
|
+
const mockedGet = vi.mocked(get);
|
|
3
13
|
const ORIGINAL_ENV = process.env;
|
|
4
|
-
|
|
14
|
+
const FAKE_JOBS_RESPONSE = {
|
|
15
|
+
items: [
|
|
16
|
+
{
|
|
17
|
+
job_id: 'ocr-abc123',
|
|
18
|
+
status: 'completed',
|
|
19
|
+
filename: 'invoice.pdf',
|
|
20
|
+
total_pages: 10,
|
|
21
|
+
pages_completed: 10,
|
|
22
|
+
error: null,
|
|
23
|
+
created_at: '2026-02-15T00:00:00Z',
|
|
24
|
+
updated_at: '2026-02-15T01:00:00Z',
|
|
25
|
+
viewer_url: 'https://app.okrapdf.com/ocr/ocr-abc123',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
job_id: 'ocr-xyz789',
|
|
29
|
+
status: 'running',
|
|
30
|
+
filename: 'report.pdf',
|
|
31
|
+
total_pages: 5,
|
|
32
|
+
pages_completed: 2,
|
|
33
|
+
error: null,
|
|
34
|
+
created_at: '2026-02-16T00:00:00Z',
|
|
35
|
+
updated_at: '2026-02-16T01:00:00Z',
|
|
36
|
+
viewer_url: 'https://app.okrapdf.com/ocr/ocr-xyz789',
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
pagination: { page: 1, totalPages: 1, total: 2 },
|
|
40
|
+
};
|
|
41
|
+
function cleanEnv() {
|
|
42
|
+
process.env = { ...ORIGINAL_ENV };
|
|
43
|
+
delete process.env.OKRA_OUTPUT_FORMAT;
|
|
44
|
+
delete process.env.OKRA_JSON_FIELDS;
|
|
45
|
+
delete process.env.OKRA_JQ;
|
|
46
|
+
delete process.env.OKRA_QUIET;
|
|
47
|
+
delete process.env.OKRA_VERBOSE;
|
|
48
|
+
}
|
|
49
|
+
describe('global --json flag', () => {
|
|
50
|
+
beforeEach(cleanEnv);
|
|
51
|
+
afterEach(() => {
|
|
52
|
+
process.env = ORIGINAL_ENV;
|
|
53
|
+
vi.restoreAllMocks();
|
|
54
|
+
});
|
|
55
|
+
it('--json exit_codes filters to only that field', async () => {
|
|
56
|
+
const out = [];
|
|
57
|
+
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
58
|
+
out.push(args.join(' '));
|
|
59
|
+
});
|
|
60
|
+
const program = createProgram();
|
|
61
|
+
// --json takes 'exit_codes' as the field filter, 'exit-codes' is the subcommand
|
|
62
|
+
await program.parseAsync(['--json', 'exit_codes', 'exit-codes'], { from: 'user' });
|
|
63
|
+
const payload = JSON.parse(out.join('\n'));
|
|
64
|
+
expect(payload).toHaveProperty('exit_codes');
|
|
65
|
+
expect(Object.keys(payload)).toEqual(['exit_codes']);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('--json field filtering with jobs list', () => {
|
|
5
69
|
beforeEach(() => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
delete process.env.OKRA_QUIET;
|
|
9
|
-
delete process.env.OKRA_VERBOSE;
|
|
70
|
+
cleanEnv();
|
|
71
|
+
process.env.OKRA_API_KEY = 'test-key';
|
|
10
72
|
});
|
|
11
73
|
afterEach(() => {
|
|
12
74
|
process.env = ORIGINAL_ENV;
|
|
13
75
|
vi.restoreAllMocks();
|
|
76
|
+
mockedGet.mockReset();
|
|
77
|
+
});
|
|
78
|
+
it('--json filename (before subcommand) returns only filename', async () => {
|
|
79
|
+
mockedGet.mockResolvedValueOnce(FAKE_JOBS_RESPONSE);
|
|
80
|
+
const out = [];
|
|
81
|
+
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
82
|
+
out.push(args.join(' '));
|
|
83
|
+
});
|
|
84
|
+
const program = createProgram();
|
|
85
|
+
await program.parseAsync(['--json', 'filename', 'jobs', 'list'], { from: 'user' });
|
|
86
|
+
const payload = JSON.parse(out.join('\n'));
|
|
87
|
+
expect(Array.isArray(payload)).toBe(true);
|
|
88
|
+
expect(payload).toHaveLength(2);
|
|
89
|
+
for (const item of payload) {
|
|
90
|
+
expect(Object.keys(item)).toEqual(['filename']);
|
|
91
|
+
}
|
|
92
|
+
expect(payload[0].filename).toBe('invoice.pdf');
|
|
93
|
+
});
|
|
94
|
+
it('--json job_id,status returns only those two fields', async () => {
|
|
95
|
+
mockedGet.mockResolvedValueOnce(FAKE_JOBS_RESPONSE);
|
|
96
|
+
const out = [];
|
|
97
|
+
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
98
|
+
out.push(args.join(' '));
|
|
99
|
+
});
|
|
100
|
+
const program = createProgram();
|
|
101
|
+
await program.parseAsync(['--json', 'job_id,status', 'jobs', 'list'], { from: 'user' });
|
|
102
|
+
const payload = JSON.parse(out.join('\n'));
|
|
103
|
+
expect(Array.isArray(payload)).toBe(true);
|
|
104
|
+
for (const item of payload) {
|
|
105
|
+
expect(Object.keys(item).sort()).toEqual(['job_id', 'status']);
|
|
106
|
+
}
|
|
14
107
|
});
|
|
15
|
-
it('
|
|
108
|
+
it('--json filename (after subcommand) also filters correctly', async () => {
|
|
109
|
+
mockedGet.mockResolvedValueOnce(FAKE_JOBS_RESPONSE);
|
|
16
110
|
const out = [];
|
|
17
111
|
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
18
112
|
out.push(args.join(' '));
|
|
19
113
|
});
|
|
20
114
|
const program = createProgram();
|
|
21
|
-
await program.parseAsync(['--json', '
|
|
115
|
+
await program.parseAsync(['jobs', 'list', '--json', 'filename', '-l', '5'], { from: 'user' });
|
|
22
116
|
const payload = JSON.parse(out.join('\n'));
|
|
23
|
-
expect(payload
|
|
117
|
+
expect(Array.isArray(payload)).toBe(true);
|
|
118
|
+
for (const item of payload) {
|
|
119
|
+
expect(Object.keys(item)).toEqual(['filename']);
|
|
120
|
+
}
|
|
24
121
|
});
|
|
25
|
-
it('
|
|
122
|
+
it('full run() simulation with bootstrapGlobalEnv', async () => {
|
|
123
|
+
const { bootstrapGlobalEnv } = await import('./lib/runtime.js');
|
|
124
|
+
const argv = ['node', 'okra', 'jobs', 'list', '--json', 'filename', '-l', '5'];
|
|
125
|
+
bootstrapGlobalEnv(argv);
|
|
126
|
+
mockedGet.mockResolvedValueOnce(FAKE_JOBS_RESPONSE);
|
|
26
127
|
const out = [];
|
|
27
128
|
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
28
129
|
out.push(args.join(' '));
|
|
29
130
|
});
|
|
30
131
|
const program = createProgram();
|
|
31
|
-
await program.parseAsync(
|
|
32
|
-
|
|
132
|
+
await program.parseAsync(argv);
|
|
133
|
+
const payload = JSON.parse(out.join('\n'));
|
|
134
|
+
expect(Array.isArray(payload)).toBe(true);
|
|
135
|
+
for (const item of payload) {
|
|
136
|
+
expect(Object.keys(item)).toEqual(['filename']);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('JSON output cleanliness (gh CLI patterns)', () => {
|
|
141
|
+
beforeEach(() => {
|
|
142
|
+
cleanEnv();
|
|
143
|
+
process.env.OKRA_API_KEY = 'test-key';
|
|
144
|
+
});
|
|
145
|
+
afterEach(() => {
|
|
146
|
+
process.env = ORIGINAL_ENV;
|
|
147
|
+
vi.restoreAllMocks();
|
|
148
|
+
mockedGet.mockReset();
|
|
149
|
+
});
|
|
150
|
+
it('suppresses pagination footer in JSON mode', async () => {
|
|
151
|
+
const multiPageResponse = {
|
|
152
|
+
...FAKE_JOBS_RESPONSE,
|
|
153
|
+
pagination: { page: 1, totalPages: 35, total: 699 },
|
|
154
|
+
};
|
|
155
|
+
mockedGet.mockResolvedValueOnce(multiPageResponse);
|
|
156
|
+
const out = [];
|
|
157
|
+
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
158
|
+
out.push(args.join(' '));
|
|
159
|
+
});
|
|
160
|
+
const program = createProgram();
|
|
161
|
+
await program.parseAsync(['--json', 'job_id', 'jobs', 'list'], { from: 'user' });
|
|
162
|
+
const raw = out.join('\n');
|
|
163
|
+
// Should be valid JSON with no trailing "Page X of Y" text
|
|
164
|
+
expect(() => JSON.parse(raw)).not.toThrow();
|
|
165
|
+
expect(raw).not.toContain('Page');
|
|
166
|
+
expect(raw).not.toContain('total');
|
|
167
|
+
});
|
|
168
|
+
it('shows pagination footer in table mode', async () => {
|
|
169
|
+
const multiPageResponse = {
|
|
170
|
+
...FAKE_JOBS_RESPONSE,
|
|
171
|
+
pagination: { page: 1, totalPages: 35, total: 699 },
|
|
172
|
+
};
|
|
173
|
+
mockedGet.mockResolvedValueOnce(multiPageResponse);
|
|
174
|
+
const out = [];
|
|
175
|
+
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
176
|
+
out.push(args.join(' '));
|
|
177
|
+
});
|
|
178
|
+
const program = createProgram();
|
|
179
|
+
await program.parseAsync(['jobs', 'list'], { from: 'user' });
|
|
180
|
+
const raw = out.join('\n');
|
|
181
|
+
expect(raw).toContain('Page 1 of 35');
|
|
182
|
+
expect(raw).toContain('699 total');
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('bootstrapGlobalEnv', () => {
|
|
186
|
+
beforeEach(cleanEnv);
|
|
187
|
+
afterEach(() => {
|
|
188
|
+
process.env = ORIGINAL_ENV;
|
|
189
|
+
});
|
|
190
|
+
it('--json sets OKRA_OUTPUT_FORMAT', async () => {
|
|
191
|
+
const { bootstrapGlobalEnv } = await import('./lib/runtime.js');
|
|
192
|
+
bootstrapGlobalEnv(['node', 'okra', 'jobs', 'list', '--json']);
|
|
193
|
+
expect(process.env.OKRA_OUTPUT_FORMAT).toBe('json');
|
|
194
|
+
});
|
|
195
|
+
it('--json=fields sets OKRA_JSON_FIELDS', async () => {
|
|
196
|
+
const { bootstrapGlobalEnv } = await import('./lib/runtime.js');
|
|
197
|
+
bootstrapGlobalEnv(['node', 'okra', 'jobs', 'list', '--json=filename,status']);
|
|
198
|
+
expect(process.env.OKRA_OUTPUT_FORMAT).toBe('json');
|
|
199
|
+
expect(process.env.OKRA_JSON_FIELDS).toBe('filename,status');
|
|
33
200
|
});
|
|
34
201
|
});
|
|
35
202
|
//# sourceMappingURL=cli.test.js.map
|
package/dist/cli.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-schema-output.test.d.ts","sourceRoot":"","sources":["../../src/commands/chat-schema-output.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TDD: --schema mode must produce ONLY valid JSON on stdout.
|
|
3
|
+
*
|
|
4
|
+
* gh CLI pattern: human-friendly output (spinners, status) → stderr.
|
|
5
|
+
* stdout is reserved for machine-readable output.
|
|
6
|
+
*/
|
|
7
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
8
|
+
// ── Mocks (before any imports that touch them) ──────────────────────────
|
|
9
|
+
// Mock ws-polyfill (no-op)
|
|
10
|
+
vi.mock('../lib/ws-polyfill.js', () => ({}));
|
|
11
|
+
// Mock config
|
|
12
|
+
vi.mock('../lib/config.js', () => ({
|
|
13
|
+
getApiKey: () => 'test-key',
|
|
14
|
+
getAgentSessionUrl: () => 'wss://localhost:9999',
|
|
15
|
+
getAgentSessionHttpUrl: () => 'http://localhost:9999',
|
|
16
|
+
getOutputFormat: () => 'text',
|
|
17
|
+
getJsonFields: () => null,
|
|
18
|
+
getJqExpression: () => null,
|
|
19
|
+
}));
|
|
20
|
+
// Mock bootstrap — use a forwarding wrapper so vi.restoreAllMocks doesn't break it
|
|
21
|
+
const mockFetchBootstrap = vi.fn().mockResolvedValue({
|
|
22
|
+
archiveUrl: 'https://example.com/archive.tar.gz',
|
|
23
|
+
metadata: { totalPages: 5 },
|
|
24
|
+
});
|
|
25
|
+
vi.mock('../lib/bootstrap.js', () => ({
|
|
26
|
+
fetchBootstrap: (...args) => mockFetchBootstrap(...args),
|
|
27
|
+
}));
|
|
28
|
+
// Fake AgentSessionClient that simulates the full connect → sandbox → agent flow
|
|
29
|
+
let fakeClientHandlers = {};
|
|
30
|
+
const fakeClient = {
|
|
31
|
+
on: vi.fn((event, handler) => {
|
|
32
|
+
(fakeClientHandlers[event] ??= []).push(handler);
|
|
33
|
+
}),
|
|
34
|
+
send: vi.fn(),
|
|
35
|
+
connect: vi.fn(() => {
|
|
36
|
+
// Simulate: READY → SANDBOX_STATUS ready
|
|
37
|
+
setTimeout(() => {
|
|
38
|
+
for (const h of fakeClientHandlers['READY'] ?? [])
|
|
39
|
+
h({ sandboxId: 'sb-123' });
|
|
40
|
+
for (const h of fakeClientHandlers['SANDBOX_STATUS'] ?? [])
|
|
41
|
+
h({ status: 'ready' });
|
|
42
|
+
}, 5);
|
|
43
|
+
}),
|
|
44
|
+
disconnect: vi.fn(),
|
|
45
|
+
};
|
|
46
|
+
vi.mock('@steventsao/agent-session', () => ({
|
|
47
|
+
AgentSessionClient: vi.fn(() => fakeClient),
|
|
48
|
+
}));
|
|
49
|
+
// Mock process.exit so test doesn't actually exit
|
|
50
|
+
const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { }));
|
|
51
|
+
// ── Imports ─────────────────────────────────────────────────────────────
|
|
52
|
+
import { createChatCommand } from './chat.js';
|
|
53
|
+
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
54
|
+
/** Simulate agent responding after our message is sent */
|
|
55
|
+
function simulateAgentResponse(jsonPayload) {
|
|
56
|
+
const checkSend = setInterval(() => {
|
|
57
|
+
if (fakeClient.send.mock.calls.length > 0) {
|
|
58
|
+
clearInterval(checkSend);
|
|
59
|
+
for (const h of fakeClientHandlers['AGENT_STARTED'] ?? [])
|
|
60
|
+
h({});
|
|
61
|
+
for (const h of fakeClientHandlers['AGENT_MESSAGE'] ?? []) {
|
|
62
|
+
h({
|
|
63
|
+
subtype: 'result',
|
|
64
|
+
structured_output: jsonPayload,
|
|
65
|
+
message: { content: [{ type: 'text', text: JSON.stringify(jsonPayload) }] },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
for (const h of fakeClientHandlers['AGENT_DONE'] ?? [])
|
|
69
|
+
h({ total_cost_usd: 0.01, duration_ms: 500 });
|
|
70
|
+
}
|
|
71
|
+
}, 10);
|
|
72
|
+
setTimeout(() => clearInterval(checkSend), 5000);
|
|
73
|
+
}
|
|
74
|
+
// ── Tests ───────────────────────────────────────────────────────────────
|
|
75
|
+
describe('chat --schema: stdout must be pure JSON', () => {
|
|
76
|
+
let stdoutWriteCalls;
|
|
77
|
+
let stderrWriteCalls;
|
|
78
|
+
let origStdoutWrite;
|
|
79
|
+
let origStderrWrite;
|
|
80
|
+
beforeEach(() => {
|
|
81
|
+
// Reset fake client state
|
|
82
|
+
fakeClientHandlers = {};
|
|
83
|
+
fakeClient.on.mockClear();
|
|
84
|
+
fakeClient.send.mockClear();
|
|
85
|
+
fakeClient.connect.mockClear();
|
|
86
|
+
fakeClient.disconnect.mockClear();
|
|
87
|
+
mockExit.mockClear();
|
|
88
|
+
mockFetchBootstrap.mockClear();
|
|
89
|
+
// Intercept at the lowest level: process.stdout.write / process.stderr.write
|
|
90
|
+
stdoutWriteCalls = [];
|
|
91
|
+
stderrWriteCalls = [];
|
|
92
|
+
origStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
93
|
+
origStderrWrite = process.stderr.write.bind(process.stderr);
|
|
94
|
+
process.stdout.write = ((...args) => {
|
|
95
|
+
const chunk = typeof args[0] === 'string' ? args[0] : Buffer.isBuffer(args[0]) ? args[0].toString() : String(args[0]);
|
|
96
|
+
stdoutWriteCalls.push(chunk);
|
|
97
|
+
return true;
|
|
98
|
+
});
|
|
99
|
+
process.stderr.write = ((...args) => {
|
|
100
|
+
const chunk = typeof args[0] === 'string' ? args[0] : Buffer.isBuffer(args[0]) ? args[0].toString() : String(args[0]);
|
|
101
|
+
stderrWriteCalls.push(chunk);
|
|
102
|
+
return true;
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
afterEach(() => {
|
|
106
|
+
process.stdout.write = origStdoutWrite;
|
|
107
|
+
process.stderr.write = origStderrWrite;
|
|
108
|
+
});
|
|
109
|
+
it('stdout contains ONLY the JSON result, no spinners or logs', async () => {
|
|
110
|
+
const expectedPayload = { companyName: 'Acme Corp' };
|
|
111
|
+
simulateAgentResponse(expectedPayload);
|
|
112
|
+
const chat = createChatCommand();
|
|
113
|
+
await chat.parseAsync([
|
|
114
|
+
'send', 'ocr-test123',
|
|
115
|
+
'-m', 'get company info',
|
|
116
|
+
'--schema', '{"type":"object","properties":{"companyName":{"type":"string"}}}',
|
|
117
|
+
], { from: 'user' });
|
|
118
|
+
const stdout = stdoutWriteCalls.join('');
|
|
119
|
+
// Must be valid JSON and nothing else
|
|
120
|
+
let parsed;
|
|
121
|
+
expect(() => { parsed = JSON.parse(stdout.trim()); }).not.toThrow();
|
|
122
|
+
expect(parsed).toEqual(expectedPayload);
|
|
123
|
+
// Must NOT contain spinner or log artifacts
|
|
124
|
+
expect(stdout).not.toContain('Document ready');
|
|
125
|
+
expect(stdout).not.toContain('Sandbox ready');
|
|
126
|
+
expect(stdout).not.toContain('Booting sandbox');
|
|
127
|
+
expect(stdout).not.toContain('[AgentSession]');
|
|
128
|
+
expect(stdout).not.toContain('Sending:');
|
|
129
|
+
}, 15_000);
|
|
130
|
+
it('spinners and status messages go to stderr in schema mode', async () => {
|
|
131
|
+
const expectedPayload = { count: 42 };
|
|
132
|
+
simulateAgentResponse(expectedPayload);
|
|
133
|
+
const chat = createChatCommand();
|
|
134
|
+
await chat.parseAsync([
|
|
135
|
+
'send', 'ocr-test456',
|
|
136
|
+
'-m', 'count tables',
|
|
137
|
+
'--schema', '{"type":"object","properties":{"count":{"type":"number"}}}',
|
|
138
|
+
], { from: 'user' });
|
|
139
|
+
const stderr = stderrWriteCalls.join('');
|
|
140
|
+
// Spinners should go to stderr
|
|
141
|
+
expect(stderr).toContain('Document ready');
|
|
142
|
+
// stdout should be clean JSON only
|
|
143
|
+
const stdout = stdoutWriteCalls.join('');
|
|
144
|
+
expect(() => JSON.parse(stdout.trim())).not.toThrow();
|
|
145
|
+
}, 15_000);
|
|
146
|
+
it('without --schema, createChatCommand works', () => {
|
|
147
|
+
const chat = createChatCommand();
|
|
148
|
+
expect(chat.name()).toBe('chat');
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=chat-schema-output.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-schema-output.test.js","sourceRoot":"","sources":["../../src/commands/chat-schema-output.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAmY3C"}
|