govon 1.2.2 → 1.4.0
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/bin/govon.js +2 -41
- package/dist/App.d.ts +22 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +307 -0
- package/dist/App.js.map +1 -0
- package/dist/client.d.ts +102 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +332 -0
- package/dist/client.js.map +1 -0
- package/dist/components/ApprovalPrompt.d.ts +15 -0
- package/dist/components/ApprovalPrompt.d.ts.map +1 -0
- package/dist/components/ApprovalPrompt.js +35 -0
- package/dist/components/ApprovalPrompt.js.map +1 -0
- package/dist/components/Banner.d.ts +6 -0
- package/dist/components/Banner.d.ts.map +1 -0
- package/dist/components/Banner.js +27 -0
- package/dist/components/Banner.js.map +1 -0
- package/dist/components/InputBar.d.ts +8 -0
- package/dist/components/InputBar.d.ts.map +1 -0
- package/dist/components/InputBar.js +26 -0
- package/dist/components/InputBar.js.map +1 -0
- package/dist/components/MarkdownView.d.ts +9 -0
- package/dist/components/MarkdownView.d.ts.map +1 -0
- package/dist/components/MarkdownView.js +38 -0
- package/dist/components/MarkdownView.js.map +1 -0
- package/dist/components/MessageBubble.d.ts +14 -0
- package/dist/components/MessageBubble.d.ts.map +1 -0
- package/dist/components/MessageBubble.js +15 -0
- package/dist/components/MessageBubble.js.map +1 -0
- package/dist/components/MetadataBar.d.ts +7 -0
- package/dist/components/MetadataBar.d.ts.map +1 -0
- package/dist/components/MetadataBar.js +19 -0
- package/dist/components/MetadataBar.js.map +1 -0
- package/dist/components/Spinner.d.ts +7 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +51 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/ThinkingBlock.d.ts +9 -0
- package/dist/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/components/ThinkingBlock.js +9 -0
- package/dist/components/ThinkingBlock.js.map +1 -0
- package/dist/components/ToolPanel.d.ts +7 -0
- package/dist/components/ToolPanel.d.ts.map +1 -0
- package/dist/components/ToolPanel.js +19 -0
- package/dist/components/ToolPanel.js.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/data/spinnerVerbs.d.ts +7 -0
- package/dist/data/spinnerVerbs.d.ts.map +1 -0
- package/dist/data/spinnerVerbs.js +58 -0
- package/dist/data/spinnerVerbs.js.map +1 -0
- package/dist/hooks/useDaemon.d.ts +16 -0
- package/dist/hooks/useDaemon.d.ts.map +1 -0
- package/dist/hooks/useDaemon.js +55 -0
- package/dist/hooks/useDaemon.js.map +1 -0
- package/dist/hooks/useHistory.d.ts +13 -0
- package/dist/hooks/useHistory.d.ts.map +1 -0
- package/dist/hooks/useHistory.js +170 -0
- package/dist/hooks/useHistory.js.map +1 -0
- package/dist/hooks/useSSE.d.ts +29 -0
- package/dist/hooks/useSSE.d.ts.map +1 -0
- package/dist/hooks/useSSE.js +341 -0
- package/dist/hooks/useSSE.js.map +1 -0
- package/dist/hooks/useTheme.d.ts +39 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +36 -0
- package/dist/hooks/useTheme.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1496 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +356 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +67 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -19
- package/README.md +0 -45
- package/lib/python-check.js +0 -223
package/bin/govon.js
CHANGED
|
@@ -1,44 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'
|
|
3
|
-
|
|
4
|
-
const { spawn } = require('child_process');
|
|
5
|
-
const { printEnvironmentStatus, isGovonInstalled } = require('../lib/python-check');
|
|
6
|
-
|
|
7
|
-
const args = process.argv.slice(2);
|
|
8
|
-
|
|
9
|
-
// On postinstall or direct invocation with --check-install, only run environment check and exit
|
|
10
|
-
if (args[0] === '--check-install') {
|
|
11
|
-
const ok = printEnvironmentStatus();
|
|
12
|
-
process.exit(ok ? 0 : 1);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Actual CLI execution path: if environment is not valid, print guidance and exit
|
|
16
|
-
if (!printEnvironmentStatus()) {
|
|
2
|
+
import('../dist/index.js').catch((err) => {
|
|
3
|
+
console.error('Failed to start govon:', err.message);
|
|
17
4
|
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Launch the govon CLI
|
|
21
|
-
const child = spawn('govon', args, {
|
|
22
|
-
stdio: 'inherit',
|
|
23
|
-
shell: false,
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
child.on('error', (err) => {
|
|
27
|
-
if (err.code === 'ENOENT') {
|
|
28
|
-
console.error(
|
|
29
|
-
[
|
|
30
|
-
'',
|
|
31
|
-
' [govon] Unable to execute the govon command.',
|
|
32
|
-
' Please verify it is installed via: pip install govon',
|
|
33
|
-
'',
|
|
34
|
-
].join('\n')
|
|
35
|
-
);
|
|
36
|
-
} else {
|
|
37
|
-
console.error(`[govon] Execution error: ${err.message}`);
|
|
38
|
-
}
|
|
39
|
-
process.exit(1);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
child.on('close', (code) => {
|
|
43
|
-
process.exit(code ?? 0);
|
|
44
5
|
});
|
package/dist/App.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App.tsx — main application component.
|
|
3
|
+
*
|
|
4
|
+
* Port of src/cli/tui/app.py GovOnApp class.
|
|
5
|
+
* Composes all UI widgets into a full-screen Ink layout and wires state
|
|
6
|
+
* management, server polling, SSE streaming, and input history together.
|
|
7
|
+
*
|
|
8
|
+
* Layout (top → bottom):
|
|
9
|
+
* 1. Banner (welcome screen, rendered once into scrollback)
|
|
10
|
+
* 2. Message history (Ink <Static> — completed messages go to scrollback)
|
|
11
|
+
* 3. Streaming area (current thinking + tools + streaming content)
|
|
12
|
+
* 4. Approval prompt (shown when pendingApproval is set)
|
|
13
|
+
* 5. Separator line
|
|
14
|
+
* 6. InputBar
|
|
15
|
+
* 7. Status footer
|
|
16
|
+
*/
|
|
17
|
+
export interface AppProps {
|
|
18
|
+
version: string;
|
|
19
|
+
initialQuery?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function App({ version, initialQuery }: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiCH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAiMD,wBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,QAAQ,2CA2NtD"}
|
package/dist/App.js
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* App.tsx — main application component.
|
|
4
|
+
*
|
|
5
|
+
* Port of src/cli/tui/app.py GovOnApp class.
|
|
6
|
+
* Composes all UI widgets into a full-screen Ink layout and wires state
|
|
7
|
+
* management, server polling, SSE streaming, and input history together.
|
|
8
|
+
*
|
|
9
|
+
* Layout (top → bottom):
|
|
10
|
+
* 1. Banner (welcome screen, rendered once into scrollback)
|
|
11
|
+
* 2. Message history (Ink <Static> — completed messages go to scrollback)
|
|
12
|
+
* 3. Streaming area (current thinking + tools + streaming content)
|
|
13
|
+
* 4. Approval prompt (shown when pendingApproval is set)
|
|
14
|
+
* 5. Separator line
|
|
15
|
+
* 6. InputBar
|
|
16
|
+
* 7. Status footer
|
|
17
|
+
*/
|
|
18
|
+
import React, { useReducer, useCallback, useMemo } from 'react';
|
|
19
|
+
import { Box, Text, Static, useApp, useInput, useStdout } from 'ink';
|
|
20
|
+
import { GovOnClient } from './client.js';
|
|
21
|
+
import { getBaseUrl, THEME_COLORS } from './config.js';
|
|
22
|
+
import { useDaemon } from './hooks/useDaemon.js';
|
|
23
|
+
import { useSSE } from './hooks/useSSE.js';
|
|
24
|
+
import { useHistory } from './hooks/useHistory.js';
|
|
25
|
+
import { Banner } from './components/Banner.js';
|
|
26
|
+
import { InputBar } from './components/InputBar.js';
|
|
27
|
+
import { Spinner } from './components/Spinner.js';
|
|
28
|
+
import { ThinkingBlock } from './components/ThinkingBlock.js';
|
|
29
|
+
import { MarkdownView } from './components/MarkdownView.js';
|
|
30
|
+
import { MessageBubble } from './components/MessageBubble.js';
|
|
31
|
+
import { ToolPanel } from './components/ToolPanel.js';
|
|
32
|
+
import { ApprovalPrompt } from './components/ApprovalPrompt.js';
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Module-level constants
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
/** Sentinel object placed first in the Static items array to render the banner
|
|
37
|
+
* exactly once into the terminal scrollback. Hoisted to module level so that
|
|
38
|
+
* its reference is stable across renders and Static never re-prints it. */
|
|
39
|
+
const BANNER_ITEM = { _banner: true };
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Initial state
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
const initialState = {
|
|
44
|
+
messages: [],
|
|
45
|
+
isLoading: false,
|
|
46
|
+
streamingContent: '',
|
|
47
|
+
streamingThinking: '',
|
|
48
|
+
pendingThinking: [],
|
|
49
|
+
activeTools: [],
|
|
50
|
+
sessionId: null,
|
|
51
|
+
threadId: null,
|
|
52
|
+
pendingApproval: null,
|
|
53
|
+
statusLabel: null,
|
|
54
|
+
error: null,
|
|
55
|
+
theme: 'dark',
|
|
56
|
+
apiBase: getBaseUrl(),
|
|
57
|
+
apiVersion: 'v3',
|
|
58
|
+
};
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Reducer
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
function reducer(state, action) {
|
|
63
|
+
switch (action.type) {
|
|
64
|
+
case 'SET_LOADING':
|
|
65
|
+
return { ...state, isLoading: action.payload };
|
|
66
|
+
case 'ADD_USER_MESSAGE': {
|
|
67
|
+
const msg = {
|
|
68
|
+
...action.payload,
|
|
69
|
+
role: 'user',
|
|
70
|
+
content: action.payload.content,
|
|
71
|
+
};
|
|
72
|
+
return { ...state, messages: [...state.messages, msg] };
|
|
73
|
+
}
|
|
74
|
+
case 'START_ASSISTANT_MESSAGE': {
|
|
75
|
+
const msg = {
|
|
76
|
+
id: action.payload.id,
|
|
77
|
+
role: 'assistant',
|
|
78
|
+
content: '',
|
|
79
|
+
timestamp: action.payload.timestamp,
|
|
80
|
+
streaming: true,
|
|
81
|
+
};
|
|
82
|
+
return {
|
|
83
|
+
...state,
|
|
84
|
+
messages: [...state.messages, msg],
|
|
85
|
+
streamingContent: '',
|
|
86
|
+
streamingThinking: '',
|
|
87
|
+
pendingThinking: [],
|
|
88
|
+
activeTools: [],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
case 'APPEND_STREAMING_CONTENT':
|
|
92
|
+
return {
|
|
93
|
+
...state,
|
|
94
|
+
streamingContent: state.streamingContent + action.payload,
|
|
95
|
+
};
|
|
96
|
+
case 'APPEND_STREAMING_THINKING':
|
|
97
|
+
return {
|
|
98
|
+
...state,
|
|
99
|
+
streamingThinking: state.streamingThinking + action.payload,
|
|
100
|
+
};
|
|
101
|
+
case 'START_THINKING_STEP': {
|
|
102
|
+
const { iteration } = action.payload;
|
|
103
|
+
// Only add if we don't already have an entry for this iteration
|
|
104
|
+
const already = state.pendingThinking.some((s) => s.iteration === iteration);
|
|
105
|
+
if (already)
|
|
106
|
+
return state;
|
|
107
|
+
// Initialize with empty content — the stale streamingThinking buffer
|
|
108
|
+
// must not be snapshotted here because END_THINKING_STEP will append
|
|
109
|
+
// whatever the stream emits between start and end into this slot.
|
|
110
|
+
return {
|
|
111
|
+
...state,
|
|
112
|
+
pendingThinking: [
|
|
113
|
+
...state.pendingThinking,
|
|
114
|
+
{ iteration, content: '' },
|
|
115
|
+
],
|
|
116
|
+
streamingThinking: '',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
case 'END_THINKING_STEP': {
|
|
120
|
+
const { iteration, tool_calls } = action.payload;
|
|
121
|
+
const updated = state.pendingThinking.map((step) => step.iteration === iteration
|
|
122
|
+
? { ...step, content: step.content + state.streamingThinking, tool_calls }
|
|
123
|
+
: step);
|
|
124
|
+
return {
|
|
125
|
+
...state,
|
|
126
|
+
pendingThinking: updated,
|
|
127
|
+
streamingThinking: '',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
case 'MARK_TOOL_START':
|
|
131
|
+
return {
|
|
132
|
+
...state,
|
|
133
|
+
activeTools: [
|
|
134
|
+
...state.activeTools,
|
|
135
|
+
{ tool: action.payload.tool, pending: true },
|
|
136
|
+
],
|
|
137
|
+
};
|
|
138
|
+
case 'MARK_TOOL_END': {
|
|
139
|
+
const { tool, success } = action.payload;
|
|
140
|
+
// Use findIndex + targeted update so only the first pending entry for
|
|
141
|
+
// this tool name is mutated — prevents clobbering later runs of the
|
|
142
|
+
// same tool if it appears more than once in a single iteration.
|
|
143
|
+
const idx = state.activeTools.findIndex((t) => t.tool === tool && t.pending);
|
|
144
|
+
if (idx === -1)
|
|
145
|
+
return state;
|
|
146
|
+
const updated = [...state.activeTools];
|
|
147
|
+
updated[idx] = { ...updated[idx], pending: false, success };
|
|
148
|
+
return { ...state, activeTools: updated };
|
|
149
|
+
}
|
|
150
|
+
case 'FINALIZE_ASSISTANT_MESSAGE': {
|
|
151
|
+
const { messageId, content, evidence, metadata, sessionId, threadId, } = action.payload;
|
|
152
|
+
const messages = state.messages.map((msg) => msg.id === messageId
|
|
153
|
+
? {
|
|
154
|
+
...msg,
|
|
155
|
+
content,
|
|
156
|
+
streaming: false,
|
|
157
|
+
thinking: state.pendingThinking,
|
|
158
|
+
tools: state.activeTools,
|
|
159
|
+
evidence,
|
|
160
|
+
metadata,
|
|
161
|
+
}
|
|
162
|
+
: msg);
|
|
163
|
+
return {
|
|
164
|
+
...state,
|
|
165
|
+
messages,
|
|
166
|
+
streamingContent: '',
|
|
167
|
+
streamingThinking: '',
|
|
168
|
+
pendingThinking: [],
|
|
169
|
+
activeTools: [],
|
|
170
|
+
sessionId,
|
|
171
|
+
threadId,
|
|
172
|
+
isLoading: false,
|
|
173
|
+
statusLabel: null,
|
|
174
|
+
error: null,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
case 'SET_PENDING_APPROVAL':
|
|
178
|
+
return { ...state, pendingApproval: action.payload };
|
|
179
|
+
case 'SET_STATUS_LABEL':
|
|
180
|
+
return { ...state, statusLabel: action.payload };
|
|
181
|
+
case 'SET_ERROR':
|
|
182
|
+
return { ...state, error: action.payload, isLoading: false };
|
|
183
|
+
case 'SET_THEME':
|
|
184
|
+
return { ...state, theme: action.payload };
|
|
185
|
+
case 'SET_API_BASE':
|
|
186
|
+
return { ...state, apiBase: action.payload };
|
|
187
|
+
case 'SET_API_VERSION':
|
|
188
|
+
return { ...state, apiVersion: action.payload };
|
|
189
|
+
case 'RESET_SESSION':
|
|
190
|
+
return { ...initialState, apiBase: state.apiBase, theme: state.theme };
|
|
191
|
+
default:
|
|
192
|
+
return state;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
// App component
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
export function App({ version, initialQuery }) {
|
|
199
|
+
const { exit } = useApp();
|
|
200
|
+
const { stdout } = useStdout();
|
|
201
|
+
const [state, dispatch] = useReducer(reducer, initialState);
|
|
202
|
+
// GovOnClient is stable for the lifetime of the app
|
|
203
|
+
const client = useMemo(() => new GovOnClient(state.apiBase), [state.apiBase]);
|
|
204
|
+
// Wait for server readiness
|
|
205
|
+
const daemon = useDaemon(client);
|
|
206
|
+
// SSE streaming
|
|
207
|
+
const { submit, cancel } = useSSE({
|
|
208
|
+
client,
|
|
209
|
+
dispatch,
|
|
210
|
+
sessionId: state.sessionId,
|
|
211
|
+
});
|
|
212
|
+
// Input history (up/down arrow navigation)
|
|
213
|
+
const { push: pushHistory } = useHistory();
|
|
214
|
+
// Handle query submission from InputBar
|
|
215
|
+
const handleSubmit = useCallback((query) => {
|
|
216
|
+
// Guard: do not allow submission while a request is in flight
|
|
217
|
+
if (state.isLoading)
|
|
218
|
+
return;
|
|
219
|
+
const userMsgId = crypto.randomUUID();
|
|
220
|
+
const timestamp = new Date().toISOString();
|
|
221
|
+
dispatch({
|
|
222
|
+
type: 'ADD_USER_MESSAGE',
|
|
223
|
+
payload: { id: userMsgId, content: query, timestamp },
|
|
224
|
+
});
|
|
225
|
+
pushHistory(query);
|
|
226
|
+
submit(query);
|
|
227
|
+
}, [state.isLoading, dispatch, pushHistory, submit]);
|
|
228
|
+
// Approval handling
|
|
229
|
+
const handleApproval = useCallback(async (approved) => {
|
|
230
|
+
if (!state.threadId || !state.pendingApproval)
|
|
231
|
+
return;
|
|
232
|
+
dispatch({ type: 'SET_PENDING_APPROVAL', payload: null });
|
|
233
|
+
try {
|
|
234
|
+
const result = await client.approve(state.threadId, approved);
|
|
235
|
+
if (approved && result.text) {
|
|
236
|
+
// The approve endpoint returns the final answer when the agent
|
|
237
|
+
// completes after approval. Finalize the current assistant message
|
|
238
|
+
// with that result rather than leaving streaming dangling.
|
|
239
|
+
const streamingMsg = state.messages.find((m) => m.streaming);
|
|
240
|
+
if (streamingMsg) {
|
|
241
|
+
dispatch({
|
|
242
|
+
type: 'FINALIZE_ASSISTANT_MESSAGE',
|
|
243
|
+
payload: {
|
|
244
|
+
messageId: streamingMsg.id,
|
|
245
|
+
content: result.text,
|
|
246
|
+
evidence: result.evidence_items ?? [],
|
|
247
|
+
metadata: {},
|
|
248
|
+
sessionId: result.session_id,
|
|
249
|
+
threadId: result.thread_id,
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
dispatch({ type: 'SET_LOADING', payload: false });
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
258
|
+
dispatch({ type: 'SET_ERROR', payload: msg });
|
|
259
|
+
dispatch({ type: 'SET_LOADING', payload: false });
|
|
260
|
+
}
|
|
261
|
+
}, [client, state.threadId, state.pendingApproval, state.messages, dispatch]);
|
|
262
|
+
// Submit initial query on first render once daemon is ready
|
|
263
|
+
const initialSubmittedRef = React.useRef(false);
|
|
264
|
+
React.useEffect(() => {
|
|
265
|
+
if (daemon.ready && initialQuery && !initialSubmittedRef.current) {
|
|
266
|
+
initialSubmittedRef.current = true;
|
|
267
|
+
handleSubmit(initialQuery);
|
|
268
|
+
}
|
|
269
|
+
}, [daemon.ready, initialQuery, handleSubmit]);
|
|
270
|
+
// Keyboard shortcuts: Ctrl+D/Ctrl+C exits, Esc cancels in-flight request
|
|
271
|
+
useInput((input, key) => {
|
|
272
|
+
if (key.ctrl && input === 'd')
|
|
273
|
+
exit();
|
|
274
|
+
if (key.ctrl && input === 'c')
|
|
275
|
+
exit();
|
|
276
|
+
if (key.escape && state.isLoading)
|
|
277
|
+
cancel();
|
|
278
|
+
});
|
|
279
|
+
// ---------------------------------------------------------------------------
|
|
280
|
+
// Render
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
// Server not yet ready
|
|
283
|
+
if (daemon.waiting) {
|
|
284
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Banner, { version: version }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: THEME_COLORS.muted, children: '서버 연결 중…' }) })] }));
|
|
285
|
+
}
|
|
286
|
+
if (daemon.error) {
|
|
287
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Banner, { version: version }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: THEME_COLORS.error, children: ['서버 오류: ', daemon.error] }) })] }));
|
|
288
|
+
}
|
|
289
|
+
// Completed messages (go to terminal scrollback via <Static>)
|
|
290
|
+
// Banner is the first "static" element, followed by the message history.
|
|
291
|
+
const completedMessages = state.messages.filter((m) => !m.streaming);
|
|
292
|
+
// Memoize the items array so that the reference only changes when
|
|
293
|
+
// completedMessages changes. Using a stable module-level BANNER_ITEM object
|
|
294
|
+
// prevents Static from detecting a new array on every render and
|
|
295
|
+
// re-printing the banner into the scrollback.
|
|
296
|
+
const staticItems = useMemo(() => [BANNER_ITEM, ...completedMessages], [completedMessages]);
|
|
297
|
+
// Terminal column width for the separator line (Fix 5).
|
|
298
|
+
const cols = stdout?.columns ?? 80;
|
|
299
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: staticItems, children: (item) => {
|
|
300
|
+
if ('_banner' in item && item._banner) {
|
|
301
|
+
return _jsx(Banner, { version: version }, "__banner__");
|
|
302
|
+
}
|
|
303
|
+
const msg = item;
|
|
304
|
+
return _jsx(MessageBubble, { message: msg }, msg.id);
|
|
305
|
+
} }), state.isLoading && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [state.streamingThinking.length > 0 && (_jsx(ThinkingBlock, { content: state.streamingThinking, streaming: true })), state.activeTools.length > 0 && (_jsx(ToolPanel, { tools: state.activeTools })), state.streamingContent.length > 0 ? (_jsx(Box, { marginLeft: 2, children: _jsx(MarkdownView, { content: state.streamingContent, streaming: true }) })) : (_jsx(Box, { marginLeft: 2, children: _jsx(Spinner, {}) })), state.statusLabel && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: THEME_COLORS.muted, dimColor: true, children: state.statusLabel }) }))] })), state.error && !state.isLoading && (_jsx(Box, { marginTop: 1, marginLeft: 2, children: _jsxs(Text, { color: THEME_COLORS.error, children: ['오류: ', state.error] }) })), state.pendingApproval && (_jsx(ApprovalPrompt, { request: state.pendingApproval, onApprove: handleApproval })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: THEME_COLORS.muted, dimColor: true, children: '─'.repeat(Math.max(1, cols - 1)) }) }), !state.pendingApproval && (_jsx(InputBar, { onSubmit: handleSubmit, disabled: state.isLoading })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, color: THEME_COLORS.dimmed, children: 'esc 취소 · Ctrl+D 종료 · /help 도움말' }) })] }));
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=App.js.map
|
package/dist/App.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;4EAE4E;AAC5E,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;AAW/C,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,YAAY,GAAa;IAC7B,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,EAAE;IACnB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,UAAU,EAAE;IACrB,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,OAAO,CAAC,KAAe,EAAE,MAAc;IAC9C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,GAAG,GAAY;gBACnB,GAAG,MAAM,CAAC,OAAO;gBACjB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;aAChC,CAAC;YACF,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1D,CAAC;QAED,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAY;gBACnB,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;gBACrB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;gBACnC,SAAS,EAAE,IAAI;aAChB,CAAC;YACF,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;gBAClC,gBAAgB,EAAE,EAAE;gBACpB,iBAAiB,EAAE,EAAE;gBACrB,eAAe,EAAE,EAAE;gBACnB,WAAW,EAAE,EAAE;aAChB,CAAC;QACJ,CAAC;QAED,KAAK,0BAA0B;YAC7B,OAAO;gBACL,GAAG,KAAK;gBACR,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO;aAC1D,CAAC;QAEJ,KAAK,2BAA2B;YAC9B,OAAO;gBACL,GAAG,KAAK;gBACR,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,GAAG,MAAM,CAAC,OAAO;aAC5D,CAAC;QAEJ,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YACrC,gEAAgE;YAChE,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;YAC7E,IAAI,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC1B,qEAAqE;YACrE,qEAAqE;YACrE,kEAAkE;YAClE,OAAO;gBACL,GAAG,KAAK;gBACR,eAAe,EAAE;oBACf,GAAG,KAAK,CAAC,eAAe;oBACxB,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;iBAC3B;gBACD,iBAAiB,EAAE,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjD,IAAI,CAAC,SAAS,KAAK,SAAS;gBAC1B,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,iBAAiB,EAAE,UAAU,EAAE;gBAC1E,CAAC,CAAC,IAAI,CACT,CAAC;YACF,OAAO;gBACL,GAAG,KAAK;gBACR,eAAe,EAAE,OAAO;gBACxB,iBAAiB,EAAE,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE;oBACX,GAAG,KAAK,CAAC,WAAW;oBACpB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;iBAC7C;aACF,CAAC;QAEJ,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YACzC,sEAAsE;YACtE,oEAAoE;YACpE,gEAAgE;YAChE,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7E,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC5D,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;QAED,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,GAAG,MAAM,CAAC,OAAO,CAAC;YAEnB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1C,GAAG,CAAC,EAAE,KAAK,SAAS;gBAClB,CAAC,CAAC;oBACE,GAAG,GAAG;oBACN,OAAO;oBACP,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,KAAK,CAAC,eAAe;oBAC/B,KAAK,EAAE,KAAK,CAAC,WAAW;oBACxB,QAAQ;oBACR,QAAQ;iBACT;gBACH,CAAC,CAAC,GAAG,CACR,CAAC;YAEF,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ;gBACR,gBAAgB,EAAE,EAAE;gBACpB,iBAAiB,EAAE,EAAE;gBACrB,eAAe,EAAE,EAAE;gBACnB,WAAW,EAAE,EAAE;gBACf,SAAS;gBACT,QAAQ;gBACR,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;QAED,KAAK,sBAAsB;YACzB,OAAO,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvD,KAAK,kBAAkB;YACrB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEnD,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAE/D,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAE7C,KAAK,cAAc;YACjB,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAE/C,KAAK,iBAAiB;YACpB,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAElD,KAAK,eAAe;YAClB,OAAO,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAEzE;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAY;IACrD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5D,oDAAoD;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9E,4BAA4B;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,gBAAgB;IAChB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAChC,MAAM;QACN,QAAQ;QACR,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAC;IAE3C,wCAAwC;IACxC,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAa,EAAE,EAAE;QAChB,8DAA8D;QAC9D,IAAI,KAAK,CAAC,SAAS;YAAE,OAAO;QAE5B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,QAAQ,CAAC;YACP,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;SACtD,CAAC,CAAC;QAEH,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,EACD,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CACjD,CAAC;IAEF,oBAAoB;IACpB,MAAM,cAAc,GAAG,WAAW,CAChC,KAAK,EAAE,QAAiB,EAAE,EAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe;YAAE,OAAO;QACtD,QAAQ,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5B,+DAA+D;gBAC/D,mEAAmE;gBACnE,2DAA2D;gBAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC7D,IAAI,YAAY,EAAE,CAAC;oBACjB,QAAQ,CAAC;wBACP,IAAI,EAAE,4BAA4B;wBAClC,OAAO,EAAE;4BACP,SAAS,EAAE,YAAY,CAAC,EAAE;4BAC1B,OAAO,EAAE,MAAM,CAAC,IAAI;4BACpB,QAAQ,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;4BACrC,QAAQ,EAAE,EAAE;4BACZ,SAAS,EAAE,MAAM,CAAC,UAAU;4BAC5B,QAAQ,EAAE,MAAM,CAAC,SAAS;yBAC3B;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9C,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAC1E,CAAC;IAEF,4DAA4D;IAC5D,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,MAAM,CAAC,KAAK,IAAI,YAAY,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACjE,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;YACnC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/C,yEAAyE;IACzE,QAAQ,CAAC,CAAC,KAAa,EAAE,GAAuC,EAAE,EAAE;QAClE,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG;YAAE,IAAI,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG;YAAE,IAAI,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS;YAAE,MAAM,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,SAAS;IACT,8EAA8E;IAE9E,uBAAuB;IACvB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,OAAO,EAAE,OAAO,GAAI,EAC5B,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,KAAK,YAAG,UAAU,GAAQ,GAChD,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,OAAO,EAAE,OAAO,GAAI,EAC5B,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,KAAK,aAAG,SAAS,EAAE,MAAM,CAAC,KAAK,IAAQ,GAC7D,IACF,CACP,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAErE,kEAAkE;IAClE,4EAA4E;IAC5E,iEAAiE;IACjE,8CAA8C;IAC9C,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,iBAAiB,CAAC,EACzC,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,wDAAwD;IACxD,MAAM,IAAI,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IAEnC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAEzB,KAAC,MAAM,IAAC,KAAK,EAAE,WAAW,YACvB,CAAC,IAAqC,EAAE,EAAE;oBACzC,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACtC,OAAO,KAAC,MAAM,IAAkB,OAAO,EAAE,OAAO,IAA7B,YAAY,CAAqB,CAAC;oBACvD,CAAC;oBACD,MAAM,GAAG,GAAG,IAAe,CAAC;oBAC5B,OAAO,KAAC,aAAa,IAAc,OAAO,EAAE,GAAG,IAApB,GAAG,CAAC,EAAE,CAAkB,CAAC;gBACtD,CAAC,GACM,EAGR,KAAK,CAAC,SAAS,IAAI,CAClB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aAErC,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CACrC,KAAC,aAAa,IAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,EAAE,SAAS,SAAG,CAC9D,EAGA,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAC/B,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,GAAI,CACxC,EAGA,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACnC,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,EAAE,SAAS,SAAG,GACvD,CACP,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,OAAO,KAAG,GACP,CACP,EAGA,KAAK,CAAC,WAAW,IAAI,CACpB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,kBACtC,KAAK,CAAC,WAAW,GACb,GACH,CACP,IACG,CACP,EAGA,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAClC,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAC9B,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,KAAK,aAAG,MAAM,EAAE,KAAK,CAAC,KAAK,IAAQ,GACzD,CACP,EAGA,KAAK,CAAC,eAAe,IAAI,CACxB,KAAC,cAAc,IACb,OAAO,EAAE,KAAK,CAAC,eAAe,EAC9B,SAAS,EAAE,cAAc,GACzB,CACH,EAGD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,kBACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAC7B,GACH,EAGL,CAAC,KAAK,CAAC,eAAe,IAAI,CACzB,KAAC,QAAQ,IAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAI,CAChE,EAGD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,QAAC,KAAK,EAAE,YAAY,CAAC,MAAM,YACtC,gCAAgC,GAC5B,GACH,IACF,CACP,CAAC;AACJ,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GovOn local daemon API HTTP client.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript port of src/cli/http_client.py.
|
|
5
|
+
* Wraps the REST/SSE API of the local daemon (uvicorn).
|
|
6
|
+
* Core endpoints: health / run / stream / approve / cancel.
|
|
7
|
+
*/
|
|
8
|
+
import type { V3SSEEvent, V2SSEEvent, AgentRunResponse, ApprovalResponse } from './types.js';
|
|
9
|
+
export declare class GovOnClient {
|
|
10
|
+
private readonly _baseUrl;
|
|
11
|
+
/** Cold-start polling timeout in ms (from config). */
|
|
12
|
+
private static readonly _COLD_START_TIMEOUT_MS;
|
|
13
|
+
/** Cold-start polling interval in ms (from config). */
|
|
14
|
+
private static readonly _COLD_START_INTERVAL_MS;
|
|
15
|
+
/**
|
|
16
|
+
* @param baseUrl - Daemon base URL (e.g. "http://127.0.0.1:8000").
|
|
17
|
+
* Trailing slash is stripped automatically.
|
|
18
|
+
*/
|
|
19
|
+
constructor(baseUrl?: string);
|
|
20
|
+
/**
|
|
21
|
+
* GET /health — check daemon status.
|
|
22
|
+
*
|
|
23
|
+
* @returns Health response from the server.
|
|
24
|
+
* @throws Error when daemon is unreachable.
|
|
25
|
+
*/
|
|
26
|
+
health(): Promise<Record<string, unknown>>;
|
|
27
|
+
/**
|
|
28
|
+
* Poll GET /health until the server responds with HTTP 200.
|
|
29
|
+
*
|
|
30
|
+
* Handles cold-start / sleeping remote servers (e.g. HF Space) by
|
|
31
|
+
* printing Korean status messages to stderr and waiting patiently.
|
|
32
|
+
*
|
|
33
|
+
* @returns true when server is ready, false on timeout.
|
|
34
|
+
*/
|
|
35
|
+
waitForReady(): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* POST /v3/agent/stream — v3 ReAct fine-grained SSE streaming.
|
|
38
|
+
*
|
|
39
|
+
* @param query - User input query.
|
|
40
|
+
* @param sessionId - Session ID to resume an existing session.
|
|
41
|
+
* @param maxIterations - Maximum ReAct loop iterations.
|
|
42
|
+
* @param signal - Optional external AbortSignal; composed with the internal timeout.
|
|
43
|
+
* @yields Parsed SSE event objects. Use the `type` key to distinguish them.
|
|
44
|
+
*/
|
|
45
|
+
streamV3(query: string, sessionId?: string, maxIterations?: number, signal?: AbortSignal): AsyncGenerator<V3SSEEvent>;
|
|
46
|
+
/**
|
|
47
|
+
* POST /v2/agent/stream — per-node SSE streaming.
|
|
48
|
+
*
|
|
49
|
+
* @param query - User input query.
|
|
50
|
+
* @param sessionId - Session ID to resume an existing session.
|
|
51
|
+
* @param signal - Optional external AbortSignal; composed with the internal timeout.
|
|
52
|
+
* @yields Parsed SSE event objects. Contains at least `node` and `status` keys.
|
|
53
|
+
*/
|
|
54
|
+
stream(query: string, sessionId?: string, signal?: AbortSignal): AsyncGenerator<V2SSEEvent>;
|
|
55
|
+
/**
|
|
56
|
+
* POST /v2/agent/run — blocking agent execution.
|
|
57
|
+
*
|
|
58
|
+
* @param query - User input query.
|
|
59
|
+
* @param sessionId - Session ID to resume an existing session.
|
|
60
|
+
* @param signal - Optional external AbortSignal; composed with the internal timeout.
|
|
61
|
+
* @returns Server response including thread_id, status, etc.
|
|
62
|
+
*/
|
|
63
|
+
run(query: string, sessionId?: string, signal?: AbortSignal): Promise<AgentRunResponse>;
|
|
64
|
+
/**
|
|
65
|
+
* POST /v3/agent/run — v3 ReAct blocking execution.
|
|
66
|
+
*
|
|
67
|
+
* @param query - User input query.
|
|
68
|
+
* @param sessionId - Session ID to resume an existing session.
|
|
69
|
+
* @param maxIterations - Maximum ReAct loop iterations.
|
|
70
|
+
* @param signal - Optional external AbortSignal; composed with the internal timeout.
|
|
71
|
+
* @returns Server response including metadata.
|
|
72
|
+
*/
|
|
73
|
+
runV3(query: string, sessionId?: string, maxIterations?: number, signal?: AbortSignal): Promise<Record<string, unknown>>;
|
|
74
|
+
/**
|
|
75
|
+
* POST /v2/agent/approve — approve or reject a pending tool call.
|
|
76
|
+
*
|
|
77
|
+
* Note: uses QUERY PARAMETERS (thread_id, approved), not request body.
|
|
78
|
+
*
|
|
79
|
+
* @param threadId - Graph thread ID to approve or reject.
|
|
80
|
+
* @param approved - true to approve, false to reject.
|
|
81
|
+
* @returns Server response.
|
|
82
|
+
*/
|
|
83
|
+
approve(threadId: string, approved: boolean): Promise<ApprovalResponse>;
|
|
84
|
+
/**
|
|
85
|
+
* POST /v2/agent/cancel — cancel a running session.
|
|
86
|
+
*
|
|
87
|
+
* Note: uses QUERY PARAMETER (thread_id), not request body.
|
|
88
|
+
*
|
|
89
|
+
* @param threadId - Graph thread ID to cancel.
|
|
90
|
+
* @returns Server response.
|
|
91
|
+
*/
|
|
92
|
+
cancel(threadId: string): Promise<Record<string, unknown>>;
|
|
93
|
+
/** Shared SSE streaming implementation used by stream() and streamV3(). */
|
|
94
|
+
private _sseStream;
|
|
95
|
+
/** GET helper with connection-error normalisation. */
|
|
96
|
+
private _get;
|
|
97
|
+
/** POST with JSON body helper. */
|
|
98
|
+
private _post;
|
|
99
|
+
/** POST with query-parameter helper (used by /approve and /cancel). */
|
|
100
|
+
private _postParams;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgB7F,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAsB;IAEpE,uDAAuD;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAA8B;IAE7E;;;OAGG;gBACS,OAAO,GAAE,MAAqB;IAQ1C;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIhD;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IA0DtC;;;;;;;;OAQG;IACI,QAAQ,CACb,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,UAAU,CAAC;IAU7B;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;IASlG;;;;;;;OAOG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAO7F;;;;;;;;OAQG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQnC;;;;;;;;OAQG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ7E;;;;;;;OAOG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAShE,2EAA2E;YAC5D,UAAU;IA2DzB,sDAAsD;YACxC,IAAI;IAyBlB,kCAAkC;YACpB,KAAK;IAuCnB,uEAAuE;YACzD,WAAW;CA+B1B"}
|