@sofer_agent/cli 0.3.12 → 0.3.13
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/chat.d.ts +0 -1
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +24 -46
- package/dist/chat.js.map +1 -1
- package/dist/tui.d.ts +3 -37
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +190 -337
- package/dist/tui.jsx +170 -0
- package/dist/tui.jsx.map +1 -0
- package/package.json +20 -5
- package/src/bin.ts +1 -0
- package/src/chat.ts +2 -2
- package/bin/sofer +0 -6
- package/src/tui.ts +0 -371
package/dist/chat.d.ts
CHANGED
package/dist/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAsCA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCjD"}
|
package/dist/chat.js
CHANGED
|
@@ -2,40 +2,32 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import { agentPaths, loadConfig, shortAgentId, SoferAgent, } from "@sofer_agent/core";
|
|
4
4
|
import { loadSecrets } from "./env.js";
|
|
5
|
-
import {
|
|
5
|
+
import { addMessage, setInfo, runTui } from "./tui.js";
|
|
6
6
|
function sessionPath(config) {
|
|
7
|
-
if (config.agentObjectId)
|
|
7
|
+
if (config.agentObjectId)
|
|
8
8
|
return agentPaths.agent(shortAgentId(config.agentObjectId)).activityLog;
|
|
9
|
-
|
|
10
|
-
if (config.memwal.accountId) {
|
|
9
|
+
if (config.memwal.accountId)
|
|
11
10
|
return agentPaths.agent(shortAgentId(config.memwal.accountId)).activityLog;
|
|
12
|
-
}
|
|
13
11
|
return null;
|
|
14
12
|
}
|
|
15
13
|
function loadSession(path) {
|
|
16
14
|
if (!existsSync(path))
|
|
17
15
|
return [];
|
|
18
16
|
const messages = [];
|
|
19
|
-
const
|
|
20
|
-
for (const line of raw.split("\n")) {
|
|
17
|
+
for (const line of readFileSync(path, "utf8").split("\n")) {
|
|
21
18
|
if (!line.trim())
|
|
22
19
|
continue;
|
|
23
20
|
try {
|
|
24
|
-
|
|
25
|
-
messages.push({ role: entry.role, content: entry.content });
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
// skip malformed lines
|
|
21
|
+
messages.push(JSON.parse(line));
|
|
29
22
|
}
|
|
23
|
+
catch { /* skip */ }
|
|
30
24
|
}
|
|
31
25
|
return messages;
|
|
32
26
|
}
|
|
33
27
|
function saveSession(path, messages) {
|
|
34
|
-
const lines = messages.map((m) => JSON.stringify({ role: m.role, content: m.content }));
|
|
35
28
|
mkdirSync(dirname(path), { recursive: true });
|
|
36
|
-
writeFileSync(path,
|
|
29
|
+
writeFileSync(path, messages.map((m) => JSON.stringify(m)).join("\n") + "\n", "utf8");
|
|
37
30
|
}
|
|
38
|
-
/** Interactive chat TUI with promus-style polish + session resume. */
|
|
39
31
|
export async function chatCommand() {
|
|
40
32
|
const config = loadConfig();
|
|
41
33
|
const secrets = loadSecrets();
|
|
@@ -43,51 +35,37 @@ export async function chatCommand() {
|
|
|
43
35
|
console.error("Missing secrets. Run `sofer init` first.");
|
|
44
36
|
process.exit(1);
|
|
45
37
|
}
|
|
46
|
-
const agent = await SoferAgent.create(config, {
|
|
47
|
-
|
|
38
|
+
const agent = await SoferAgent.create(config, {
|
|
39
|
+
suiSecretKey: secrets.suiSecretKey,
|
|
40
|
+
anthropicApiKey: secrets.anthropicApiKey,
|
|
41
|
+
});
|
|
48
42
|
const sp = sessionPath(config);
|
|
49
43
|
if (sp) {
|
|
50
44
|
const history = loadSession(sp);
|
|
51
|
-
if (history.length > 0)
|
|
45
|
+
if (history.length > 0)
|
|
52
46
|
agent.loadHistory(history);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const tui = new SoferTui(agent, config);
|
|
56
|
-
// Show initial balance
|
|
57
|
-
try {
|
|
58
|
-
const bal = await agent.getBalance();
|
|
59
|
-
tui.setInfo({ balance: (Number(bal) / 1e9).toFixed(4) });
|
|
60
47
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
48
|
+
// Fetch initial balance non-blocking
|
|
49
|
+
agent.getBalance().then((bal) => {
|
|
50
|
+
setInfo({ balance: (Number(bal) / 1e9).toFixed(4) });
|
|
51
|
+
}).catch(() => { });
|
|
52
|
+
await runTui(agent, config, async (line, signal) => {
|
|
65
53
|
try {
|
|
66
54
|
const { text, turnUsage } = await agent.chat(line, signal);
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
addMessage("agent", text);
|
|
56
|
+
setInfo({ lastTurnIn: turnUsage.inputTokens, lastTurnOut: turnUsage.outputTokens });
|
|
69
57
|
}
|
|
70
58
|
catch (e) {
|
|
71
|
-
if (signal
|
|
72
|
-
|
|
59
|
+
if (signal.aborted) {
|
|
60
|
+
addMessage("system", "turn interrupted.");
|
|
73
61
|
}
|
|
74
62
|
else {
|
|
75
|
-
|
|
63
|
+
addMessage("error", e instanceof Error ? e.message : String(e));
|
|
76
64
|
}
|
|
77
65
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const bal = await agent.getBalance();
|
|
81
|
-
tui.setInfo({ balance: (Number(bal) / 1e9).toFixed(4) });
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// RPC unavailable, skip
|
|
85
|
-
}
|
|
86
|
-
// Save session after each turn
|
|
87
|
-
if (sp) {
|
|
66
|
+
agent.getBalance().then((bal) => setInfo({ balance: (Number(bal) / 1e9).toFixed(4) })).catch(() => { });
|
|
67
|
+
if (sp)
|
|
88
68
|
saveSession(sp, agent.getHistory());
|
|
89
|
-
}
|
|
90
|
-
tui.render();
|
|
91
69
|
});
|
|
92
70
|
}
|
|
93
71
|
//# sourceMappingURL=chat.js.map
|
package/dist/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EAEV,UAAU,EACV,YAAY,EACZ,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/tui.d.ts
CHANGED
|
@@ -8,41 +8,7 @@ export interface TuiInfo {
|
|
|
8
8
|
lastTurnOut: number;
|
|
9
9
|
balance?: string;
|
|
10
10
|
}
|
|
11
|
-
export declare
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
private state;
|
|
15
|
-
private inputBuf;
|
|
16
|
-
private cursor;
|
|
17
|
-
private columns;
|
|
18
|
-
private rows;
|
|
19
|
-
private chatW;
|
|
20
|
-
private sideW;
|
|
21
|
-
private bodyH;
|
|
22
|
-
private scrollOff;
|
|
23
|
-
private status;
|
|
24
|
-
private spinnerFrame;
|
|
25
|
-
private spinnerTimer;
|
|
26
|
-
private turnStartedAt;
|
|
27
|
-
private abortCtrl;
|
|
28
|
-
private info;
|
|
29
|
-
private resolve;
|
|
30
|
-
private onLine;
|
|
31
|
-
constructor(agent: SoferAgent, config: SoferConfig);
|
|
32
|
-
private measure;
|
|
33
|
-
addMessage(role: ChatLine["role"], text: string): void;
|
|
34
|
-
setInfo(info: Partial<TuiInfo>): void;
|
|
35
|
-
private startSpinner;
|
|
36
|
-
private stopSpinner;
|
|
37
|
-
run(onLine: (line: string, signal?: AbortSignal) => Promise<void>): Promise<void>;
|
|
38
|
-
private shutdown;
|
|
39
|
-
private handleInput;
|
|
40
|
-
private submit;
|
|
41
|
-
private handleResize;
|
|
42
|
-
render(): void;
|
|
43
|
-
private buildFrame;
|
|
44
|
-
private wrapMessage;
|
|
45
|
-
private roleLabel;
|
|
46
|
-
private buildSidebar;
|
|
47
|
-
}
|
|
11
|
+
export declare function addMessage(role: ChatLine["role"], text: string): void;
|
|
12
|
+
export declare function setInfo(patch: Partial<TuiInfo>): void;
|
|
13
|
+
export declare function runTui(agent: SoferAgent, config: SoferConfig, onSubmit: (line: string, signal: AbortSignal) => Promise<void>): Promise<void>;
|
|
48
14
|
//# sourceMappingURL=tui.d.ts.map
|
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMjE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAErE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAErD;AA+KD,wBAAsB,MAAM,CAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7D,OAAO,CAAC,IAAI,CAAC,CAWf"}
|