dexto 2.0.0-beta.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/coding-agent/coding-agent.yml +0 -2
- package/dist/cli/agent-audit.d.ts +12 -0
- package/dist/cli/agent-audit.d.ts.map +1 -0
- package/dist/cli/agent-audit.js +52 -0
- package/dist/cli/cloud/command.d.ts +3 -39
- package/dist/cli/cloud/command.d.ts.map +1 -1
- package/dist/cli/cloud/command.js +12 -60
- package/dist/cli/cloud/commands/account.d.ts.map +1 -1
- package/dist/cli/cloud/commands/account.js +2 -1
- package/dist/cli/cloud/commands/agents.d.ts.map +1 -1
- package/dist/cli/cloud/commands/agents.js +3 -1
- package/dist/cli/cloud/commands/artifacts.d.ts +3 -0
- package/dist/cli/cloud/commands/artifacts.d.ts.map +1 -0
- package/dist/cli/cloud/commands/artifacts.js +267 -0
- package/dist/cli/cloud/commands/automations.d.ts.map +1 -1
- package/dist/cli/cloud/commands/automations.js +2 -1
- package/dist/cli/cloud/commands/chats.d.ts.map +1 -1
- package/dist/cli/cloud/commands/chats.js +20 -5
- package/dist/cli/cloud/commands/data-deletions.d.ts.map +1 -1
- package/dist/cli/cloud/commands/data-deletions.js +2 -1
- package/dist/cli/cloud/commands/deploys.d.ts.map +1 -1
- package/dist/cli/cloud/commands/deploys.js +3 -1
- package/dist/cli/cloud/commands/drive.d.ts.map +1 -1
- package/dist/cli/cloud/commands/drive.js +2 -1
- package/dist/cli/cloud/commands/files.d.ts.map +1 -1
- package/dist/cli/cloud/commands/files.js +3 -1
- package/dist/cli/cloud/commands/models.d.ts.map +1 -1
- package/dist/cli/cloud/commands/models.js +3 -1
- package/dist/cli/cloud/commands/profile.d.ts.map +1 -1
- package/dist/cli/cloud/commands/profile.js +2 -1
- package/dist/cli/cloud/commands/publish.d.ts.map +1 -1
- package/dist/cli/cloud/commands/publish.js +2 -1
- package/dist/cli/cloud/commands/sandboxes.d.ts.map +1 -1
- package/dist/cli/cloud/commands/sandboxes.js +2 -1
- package/dist/cli/cloud/commands/secrets.d.ts.map +1 -1
- package/dist/cli/cloud/commands/secrets.js +2 -1
- package/dist/cli/cloud/commands/skills.d.ts.map +1 -1
- package/dist/cli/cloud/commands/skills.js +2 -1
- package/dist/cli/cloud/commands/traces.d.ts +3 -0
- package/dist/cli/cloud/commands/traces.d.ts.map +1 -0
- package/dist/cli/cloud/commands/traces.js +142 -0
- package/dist/cli/cloud/commands/workspace-apps.d.ts.map +1 -1
- package/dist/cli/cloud/commands/workspace-apps.js +2 -1
- package/dist/cli/cloud/commands/workspace.d.ts.map +1 -1
- package/dist/cli/cloud/commands/workspace.js +3 -1
- package/dist/cli/cloud/host.d.ts.map +1 -1
- package/dist/cli/cloud/host.js +4 -0
- package/dist/cli/cloud/output.d.ts.map +1 -1
- package/dist/cli/cloud/output.js +2 -1
- package/dist/cli/cloud/run.d.ts.map +1 -1
- package/dist/cli/cloud/run.js +10 -10
- package/dist/cli/cloud/transfer.d.ts.map +1 -1
- package/dist/cli/cloud/transfer.js +2 -1
- package/dist/cli/cloud/v1.d.ts +2 -1
- package/dist/cli/cloud/v1.d.ts.map +1 -1
- package/dist/cli/cloud/v1.js +2 -1
- package/dist/cli/commands/auth/sign-in-commands.d.ts.map +1 -1
- package/dist/cli/commands/auth/sign-in-commands.js +2 -1
- package/dist/cli/commands/cloud/register.d.ts.map +1 -1
- package/dist/cli/commands/cloud/register.js +2 -0
- package/dist/cli/commands/run/headless.d.ts.map +1 -1
- package/dist/cli/commands/run/headless.js +55 -0
- package/dist/cli/commands/run/step-log.d.ts +11 -0
- package/dist/cli/commands/run/step-log.d.ts.map +1 -0
- package/dist/cli/commands/run/step-log.js +42 -0
- package/dist/cli/failure.d.ts +29 -0
- package/dist/cli/failure.d.ts.map +1 -0
- package/dist/cli/failure.js +31 -0
- package/dist/cli/help-json.d.ts.map +1 -1
- package/dist/cli/help-json.js +1 -1
- package/dist/cli/import/claude-code.d.ts +10 -0
- package/dist/cli/import/claude-code.d.ts.map +1 -0
- package/dist/cli/import/claude-code.js +131 -0
- package/dist/cli/import/codex.d.ts +27 -0
- package/dist/cli/import/codex.d.ts.map +1 -0
- package/dist/cli/import/codex.js +148 -0
- package/dist/cli/import/git.d.ts +19 -0
- package/dist/cli/import/git.d.ts.map +1 -0
- package/dist/cli/import/git.js +95 -0
- package/dist/cli/import/local-chats.d.ts +28 -0
- package/dist/cli/import/local-chats.d.ts.map +1 -0
- package/dist/cli/import/local-chats.js +129 -0
- package/dist/cli/import/redaction.d.ts +37 -0
- package/dist/cli/import/redaction.d.ts.map +1 -0
- package/dist/cli/import/redaction.js +148 -0
- package/dist/cli/import/test-utils.d.ts +16 -0
- package/dist/cli/import/test-utils.d.ts.map +1 -0
- package/dist/cli/import/test-utils.js +223 -0
- package/dist/cli/import/transcript.d.ts +75 -0
- package/dist/cli/import/transcript.d.ts.map +1 -0
- package/dist/cli/import/transcript.js +123 -0
- package/dist/cli/interaction.d.ts +18 -0
- package/dist/cli/interaction.d.ts.map +1 -0
- package/dist/cli/interaction.js +30 -0
- package/dist/cli/output.d.ts +9 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +6 -0
- package/dist/index-main.js +12 -1
- package/package.json +10 -10
- package/dist/cli/cloud/local-chats.d.ts +0 -73
- package/dist/cli/cloud/local-chats.d.ts.map +0 -1
- package/dist/cli/cloud/local-chats.js +0 -441
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
// Synthetic Claude Code and Codex transcripts the import tests share.
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
export const jsonl = (lines) => lines.map((line) => JSON.stringify(line)).join('\n');
|
|
4
|
+
/** A synthetic Claude Code session, shaped as the Agent SDK's messages. */
|
|
5
|
+
export function claudeSession(sessionId) {
|
|
6
|
+
const base = {
|
|
7
|
+
cwd: '/work/api',
|
|
8
|
+
gitBranch: 'main',
|
|
9
|
+
isSidechain: false,
|
|
10
|
+
sessionId,
|
|
11
|
+
version: '2.1.0',
|
|
12
|
+
};
|
|
13
|
+
return jsonl([
|
|
14
|
+
{ leafUuid: 'a3', summary: 'Fix the flaky login test', type: 'summary' },
|
|
15
|
+
{
|
|
16
|
+
...base,
|
|
17
|
+
isMeta: true,
|
|
18
|
+
message: { content: 'Caveat: local commands below.', role: 'user' },
|
|
19
|
+
timestamp: '2026-10-01T10:00:00.000Z',
|
|
20
|
+
type: 'user',
|
|
21
|
+
uuid: 'm0',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
...base,
|
|
25
|
+
message: { content: '<command-name>/clear</command-name>', role: 'user' },
|
|
26
|
+
timestamp: '2026-10-01T10:00:01.000Z',
|
|
27
|
+
type: 'user',
|
|
28
|
+
uuid: 'm1',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
...base,
|
|
32
|
+
message: { content: 'Why does login.test.ts fail?', role: 'user' },
|
|
33
|
+
timestamp: '2026-10-01T10:00:02.000Z',
|
|
34
|
+
type: 'user',
|
|
35
|
+
uuid: 'u1',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
...base,
|
|
39
|
+
message: {
|
|
40
|
+
content: [
|
|
41
|
+
{ thinking: 'Let me look.', type: 'thinking' },
|
|
42
|
+
{ text: 'Let me run it.', type: 'text' },
|
|
43
|
+
],
|
|
44
|
+
id: 'msg_1',
|
|
45
|
+
role: 'assistant',
|
|
46
|
+
},
|
|
47
|
+
timestamp: '2026-10-01T10:00:03.000Z',
|
|
48
|
+
type: 'assistant',
|
|
49
|
+
uuid: 'a1',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
...base,
|
|
53
|
+
message: {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
id: 'toolu_1',
|
|
57
|
+
input: { command: 'pnpm test login' },
|
|
58
|
+
name: 'Bash',
|
|
59
|
+
type: 'tool_use',
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
id: 'msg_1',
|
|
63
|
+
role: 'assistant',
|
|
64
|
+
},
|
|
65
|
+
timestamp: '2026-10-01T10:00:04.000Z',
|
|
66
|
+
type: 'assistant',
|
|
67
|
+
uuid: 'a2',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
...base,
|
|
71
|
+
message: {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
content: 'FAIL login.test.ts\nOPENAI_API_KEY=sk-abcdefghijklmnopqrstuvwx',
|
|
75
|
+
tool_use_id: 'toolu_1',
|
|
76
|
+
type: 'tool_result',
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
role: 'user',
|
|
80
|
+
},
|
|
81
|
+
timestamp: '2026-10-01T10:00:05.000Z',
|
|
82
|
+
type: 'user',
|
|
83
|
+
uuid: 'r1',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
...base,
|
|
87
|
+
isSidechain: true,
|
|
88
|
+
message: { content: [{ text: 'Subagent noise', type: 'text' }], role: 'assistant' },
|
|
89
|
+
timestamp: '2026-10-01T10:00:06.000Z',
|
|
90
|
+
type: 'assistant',
|
|
91
|
+
uuid: 's1',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
...base,
|
|
95
|
+
message: {
|
|
96
|
+
content: [{ text: 'The test races the clock.', type: 'text' }],
|
|
97
|
+
id: 'msg_2',
|
|
98
|
+
role: 'assistant',
|
|
99
|
+
},
|
|
100
|
+
timestamp: '2026-10-01T10:00:07.000Z',
|
|
101
|
+
type: 'assistant',
|
|
102
|
+
uuid: 'a3',
|
|
103
|
+
},
|
|
104
|
+
{ snapshot: {}, type: 'file-history-snapshot' },
|
|
105
|
+
'not json',
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
/** A synthetic Codex rollout, shaped as `RolloutItemWire` lines. */
|
|
109
|
+
export function codexRollout(id) {
|
|
110
|
+
return jsonl([
|
|
111
|
+
{
|
|
112
|
+
payload: {
|
|
113
|
+
cli_version: '0.50.0',
|
|
114
|
+
cwd: '/work/web',
|
|
115
|
+
git: { branch: 'feature/x', commit_hash: 'abc' },
|
|
116
|
+
id,
|
|
117
|
+
originator: 'codex_cli_rs',
|
|
118
|
+
timestamp: '2026-10-02T09:00:00.000Z',
|
|
119
|
+
},
|
|
120
|
+
timestamp: '2026-10-02T09:00:00.000Z',
|
|
121
|
+
type: 'session_meta',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
payload: {
|
|
125
|
+
content: [{ text: 'You are Codex.', type: 'input_text' }],
|
|
126
|
+
role: 'developer',
|
|
127
|
+
type: 'message',
|
|
128
|
+
},
|
|
129
|
+
timestamp: '2026-10-02T09:00:00.100Z',
|
|
130
|
+
type: 'response_item',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
payload: {
|
|
134
|
+
content: [
|
|
135
|
+
{
|
|
136
|
+
text: '<environment_context>\n <cwd>/work/web</cwd>\n</environment_context>',
|
|
137
|
+
type: 'input_text',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
role: 'user',
|
|
141
|
+
type: 'message',
|
|
142
|
+
},
|
|
143
|
+
timestamp: '2026-10-02T09:00:00.200Z',
|
|
144
|
+
type: 'response_item',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
payload: {
|
|
148
|
+
content: [{ text: 'List the routes.', type: 'input_text' }],
|
|
149
|
+
role: 'user',
|
|
150
|
+
type: 'message',
|
|
151
|
+
},
|
|
152
|
+
timestamp: '2026-10-02T09:00:01.000Z',
|
|
153
|
+
type: 'response_item',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
payload: { content: null, encrypted_content: 'x', summary: [], type: 'reasoning' },
|
|
157
|
+
timestamp: '2026-10-02T09:00:02.000Z',
|
|
158
|
+
type: 'response_item',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
payload: {
|
|
162
|
+
arguments: '{"command":["rg","route"]}',
|
|
163
|
+
call_id: 'call_1',
|
|
164
|
+
name: 'shell',
|
|
165
|
+
type: 'function_call',
|
|
166
|
+
},
|
|
167
|
+
timestamp: '2026-10-02T09:00:03.000Z',
|
|
168
|
+
type: 'response_item',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
payload: { call_id: 'call_1', output: 'src/routes.ts', type: 'function_call_output' },
|
|
172
|
+
timestamp: '2026-10-02T09:00:04.000Z',
|
|
173
|
+
type: 'response_item',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
payload: {
|
|
177
|
+
call_id: 'call_2',
|
|
178
|
+
input: '*** Begin Patch',
|
|
179
|
+
name: 'apply_patch',
|
|
180
|
+
type: 'custom_tool_call',
|
|
181
|
+
},
|
|
182
|
+
timestamp: '2026-10-02T09:00:05.000Z',
|
|
183
|
+
type: 'response_item',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
payload: {
|
|
187
|
+
call_id: 'call_2',
|
|
188
|
+
output: [{ text: 'Done.', type: 'input_text' }],
|
|
189
|
+
type: 'custom_tool_call_output',
|
|
190
|
+
},
|
|
191
|
+
timestamp: '2026-10-02T09:00:06.000Z',
|
|
192
|
+
type: 'response_item',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
payload: {
|
|
196
|
+
content: [{ text: 'One route: /health.', type: 'output_text' }],
|
|
197
|
+
role: 'assistant',
|
|
198
|
+
type: 'message',
|
|
199
|
+
},
|
|
200
|
+
timestamp: '2026-10-02T09:00:07.000Z',
|
|
201
|
+
type: 'response_item',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
payload: { message: 'ignored', type: 'agent_message' },
|
|
205
|
+
timestamp: '2026-10-02T09:00:08.000Z',
|
|
206
|
+
type: 'event_msg',
|
|
207
|
+
},
|
|
208
|
+
]);
|
|
209
|
+
}
|
|
210
|
+
/** A Codex `state_5.sqlite` with the `threads` columns an import reads, holding these rows. */
|
|
211
|
+
export async function writeCodexState(home, threads) {
|
|
212
|
+
const { default: Database } = await import('better-sqlite3');
|
|
213
|
+
const db = new Database(path.join(home, 'state_5.sqlite'));
|
|
214
|
+
try {
|
|
215
|
+
db.exec('CREATE TABLE threads (id TEXT PRIMARY KEY, rollout_path TEXT, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, cwd TEXT NOT NULL, title TEXT NOT NULL, archived INTEGER NOT NULL DEFAULT 0, name TEXT)');
|
|
216
|
+
const insert = db.prepare('INSERT INTO threads (id, rollout_path, created_at, updated_at, cwd, title, archived, name) VALUES (?, ?, 0, ?, ?, ?, ?, ?)');
|
|
217
|
+
for (const thread of threads)
|
|
218
|
+
insert.run(thread.id, thread.rolloutPath, Math.floor(new Date(thread.updatedAt).getTime() / 1_000), thread.cwd, thread.title, thread.archived === true ? 1 : 0, thread.name ?? null);
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
db.close();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export type LocalChatSource = 'claude-code' | 'codex';
|
|
2
|
+
export declare const LOCAL_CHAT_SOURCES: readonly LocalChatSource[];
|
|
3
|
+
export interface LocalChatMessage {
|
|
4
|
+
readonly createdAt: string;
|
|
5
|
+
readonly role: 'assistant' | 'user';
|
|
6
|
+
readonly text: string;
|
|
7
|
+
}
|
|
8
|
+
/** A pull request the session opened or worked on, as Claude Code's `pr-link` lines record it. */
|
|
9
|
+
export interface LocalPullRequest {
|
|
10
|
+
readonly number: number;
|
|
11
|
+
/** `owner/name` on GitHub. */
|
|
12
|
+
readonly repository: string;
|
|
13
|
+
readonly url: string;
|
|
14
|
+
}
|
|
15
|
+
/** The git repository a session ran in. */
|
|
16
|
+
export interface LocalRepository {
|
|
17
|
+
/**
|
|
18
|
+
* The main checkout's folder, so a worktree's sessions name the repository it belongs to; null
|
|
19
|
+
* when the folder the session ran in is no longer on this machine.
|
|
20
|
+
*/
|
|
21
|
+
readonly root: string | null;
|
|
22
|
+
/** The `origin` remote, without any credentials in it, or null when there is none. */
|
|
23
|
+
readonly remoteUrl: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface LocalChat {
|
|
26
|
+
/** Where the session started. */
|
|
27
|
+
readonly cwd: string | null;
|
|
28
|
+
readonly gitBranch: string | null;
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly messages: readonly LocalChatMessage[];
|
|
31
|
+
/** The transcript file it was read from. */
|
|
32
|
+
readonly path: string;
|
|
33
|
+
readonly pullRequests: readonly LocalPullRequest[];
|
|
34
|
+
/** The repository `cwd` is in, or null when it is in none or nothing about it is known. */
|
|
35
|
+
readonly repository: LocalRepository | null;
|
|
36
|
+
readonly source: LocalChatSource;
|
|
37
|
+
readonly startedAt: string;
|
|
38
|
+
readonly title: string;
|
|
39
|
+
readonly updatedAt: string;
|
|
40
|
+
}
|
|
41
|
+
/** What a parser reads from the transcript alone; the finder adds the repository from disk. */
|
|
42
|
+
export type ParsedChat = Omit<LocalChat, 'repository'> & {
|
|
43
|
+
/** The `origin` the source recorded when the session ran, if it records one. */
|
|
44
|
+
readonly recordedRemoteUrl: string | null;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Collects turns as a chat shows them: each person's message, then one assistant message holding
|
|
48
|
+
* everything the agent said and ran until the next one.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createTurns(): {
|
|
51
|
+
assistant(text: string, createdAt: string): void;
|
|
52
|
+
/** The turns, and when the last thing in them happened. */
|
|
53
|
+
done(): Turns;
|
|
54
|
+
user(text: string, createdAt: string): void;
|
|
55
|
+
};
|
|
56
|
+
interface Turns {
|
|
57
|
+
readonly lastAt: string | null;
|
|
58
|
+
readonly messages: readonly LocalChatMessage[];
|
|
59
|
+
}
|
|
60
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
61
|
+
export declare function stringField(value: Record<string, unknown>, key: string): string | null;
|
|
62
|
+
/** Each line that is a JSON object; a torn or foreign line is left out. */
|
|
63
|
+
export declare function jsonLines(text: string): Record<string, unknown>[];
|
|
64
|
+
export declare function validTime(value: string | null): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* The chat, titled by what the source named it or else by the person's first line; null when
|
|
67
|
+
* there is nothing the person said.
|
|
68
|
+
*/
|
|
69
|
+
export declare function finishChat(fields: Omit<ParsedChat, 'messages' | 'startedAt' | 'title' | 'updatedAt'> & {
|
|
70
|
+
readonly title: string | null;
|
|
71
|
+
}, { lastAt, messages }: Turns): ParsedChat | null;
|
|
72
|
+
export declare function toolCallText(name: string, input: unknown): string;
|
|
73
|
+
export declare function toolResultText(output: string): string;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../../src/cli/import/transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// What a local Claude Code or Codex session reads into, and the helpers both parsers share.
|
|
2
|
+
import { redactSecrets, truncate } from './redaction.js';
|
|
3
|
+
export const LOCAL_CHAT_SOURCES = ['claude-code', 'codex'];
|
|
4
|
+
/**
|
|
5
|
+
* Collects turns as a chat shows them: each person's message, then one assistant message holding
|
|
6
|
+
* everything the agent said and ran until the next one.
|
|
7
|
+
*/
|
|
8
|
+
export function createTurns() {
|
|
9
|
+
const messages = [];
|
|
10
|
+
let assistant = null;
|
|
11
|
+
let lastAt = null;
|
|
12
|
+
const flush = () => {
|
|
13
|
+
if (assistant !== null && assistant.parts.length > 0)
|
|
14
|
+
messages.push({
|
|
15
|
+
createdAt: assistant.createdAt,
|
|
16
|
+
role: 'assistant',
|
|
17
|
+
text: assistant.parts.join('\n\n'),
|
|
18
|
+
});
|
|
19
|
+
assistant = null;
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
assistant(text, createdAt) {
|
|
23
|
+
if (text.trim() === '')
|
|
24
|
+
return;
|
|
25
|
+
assistant ??= { createdAt, parts: [] };
|
|
26
|
+
assistant.parts.push(text.trim());
|
|
27
|
+
lastAt = createdAt;
|
|
28
|
+
},
|
|
29
|
+
/** The turns, and when the last thing in them happened. */
|
|
30
|
+
done() {
|
|
31
|
+
flush();
|
|
32
|
+
return { lastAt, messages };
|
|
33
|
+
},
|
|
34
|
+
user(text, createdAt) {
|
|
35
|
+
if (text.trim() === '')
|
|
36
|
+
return;
|
|
37
|
+
flush();
|
|
38
|
+
messages.push({ createdAt, role: 'user', text: text.trim() });
|
|
39
|
+
lastAt = createdAt;
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function isRecord(value) {
|
|
44
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
45
|
+
}
|
|
46
|
+
export function stringField(value, key) {
|
|
47
|
+
const field = value[key];
|
|
48
|
+
return typeof field === 'string' && field.trim() !== '' ? field : null;
|
|
49
|
+
}
|
|
50
|
+
/** Each line that is a JSON object; a torn or foreign line is left out. */
|
|
51
|
+
export function jsonLines(text) {
|
|
52
|
+
return text.split('\n').flatMap((line) => {
|
|
53
|
+
if (line.trim() === '')
|
|
54
|
+
return [];
|
|
55
|
+
try {
|
|
56
|
+
const value = JSON.parse(line);
|
|
57
|
+
return isRecord(value) ? [value] : [];
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export function validTime(value) {
|
|
65
|
+
if (value === null)
|
|
66
|
+
return null;
|
|
67
|
+
const time = new Date(value);
|
|
68
|
+
return Number.isNaN(time.getTime()) ? null : time.toISOString();
|
|
69
|
+
}
|
|
70
|
+
function firstLine(text) {
|
|
71
|
+
const line = text.split('\n').find((each) => each.trim() !== '') ?? '';
|
|
72
|
+
return truncate(redactSecrets(line.trim()).text, 80);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The chat, titled by what the source named it or else by the person's first line; null when
|
|
76
|
+
* there is nothing the person said.
|
|
77
|
+
*/
|
|
78
|
+
export function finishChat(fields, { lastAt, messages }) {
|
|
79
|
+
const first = messages[0];
|
|
80
|
+
const firstUser = messages.find((message) => message.role === 'user');
|
|
81
|
+
if (first === undefined || lastAt === null || firstUser === undefined)
|
|
82
|
+
return null;
|
|
83
|
+
return {
|
|
84
|
+
...fields,
|
|
85
|
+
messages,
|
|
86
|
+
startedAt: first.createdAt,
|
|
87
|
+
title: truncate(redactSecrets(fields.title?.trim() ?? firstLine(firstUser.text)).text, 200),
|
|
88
|
+
updatedAt: lastAt,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------------------------------
|
|
92
|
+
// Tool history as text
|
|
93
|
+
// ---------------------------------------------------------------------------------------------
|
|
94
|
+
/** How much of one tool call's input or result an imported chat keeps. */
|
|
95
|
+
const MAX_TOOL_CHARS = 4_000;
|
|
96
|
+
/** Text in a fence no backtick run inside it can close. */
|
|
97
|
+
function fenced(text) {
|
|
98
|
+
const longest = Math.max(2, ...[...text.matchAll(/`+/gu)].map((run) => run[0].length));
|
|
99
|
+
const fence = '`'.repeat(longest + 1);
|
|
100
|
+
return `${fence}\n${text}\n${fence}`;
|
|
101
|
+
}
|
|
102
|
+
/** Redacted whole, then cut: a cut can leave a secret no pattern still matches. */
|
|
103
|
+
function toolBody(text) {
|
|
104
|
+
return fenced(truncate(redactSecrets(text).text, MAX_TOOL_CHARS));
|
|
105
|
+
}
|
|
106
|
+
/** A JSON string pretty-printed, or as it is when it isn't JSON. */
|
|
107
|
+
function prettyJson(text) {
|
|
108
|
+
try {
|
|
109
|
+
return JSON.stringify(JSON.parse(text), null, 2);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return text;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function toolCallText(name, input) {
|
|
116
|
+
const body = typeof input === 'string'
|
|
117
|
+
? prettyJson(redactSecrets(input).text)
|
|
118
|
+
: JSON.stringify(input ?? null, (_key, value) => typeof value === 'string' ? redactSecrets(value).text : value, 2);
|
|
119
|
+
return `**Tool call: ${name}**\n${toolBody(body)}`;
|
|
120
|
+
}
|
|
121
|
+
export function toolResultText(output) {
|
|
122
|
+
return `**Tool result**\n${toolBody(output)}`;
|
|
123
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface InteractionContext {
|
|
2
|
+
readonly invocation: readonly string[];
|
|
3
|
+
readonly runtime: {
|
|
4
|
+
readonly prompt: ((question: string, options: {
|
|
5
|
+
secret: boolean;
|
|
6
|
+
}) => Promise<string>) | null;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/** Asks yes or no at a terminal; without one, only an explicit flag agrees. */
|
|
10
|
+
export declare function confirm(context: InteractionContext, question: string): Promise<boolean>;
|
|
11
|
+
/** Goes ahead with explicit consent or an interactive confirmation. */
|
|
12
|
+
export declare function requireConsent(context: InteractionContext, yes: boolean, what: string): Promise<void>;
|
|
13
|
+
export declare function requireInteractive(interactive: boolean, flag: string): void;
|
|
14
|
+
/** The invocation with extra arguments, quoted for a shell. */
|
|
15
|
+
export declare function rerunWith(context: Pick<InteractionContext, 'invocation'>, ...extra: string[]): string;
|
|
16
|
+
export declare function shellWord(word: string): string;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../src/cli/interaction.ts"],"names":[],"mappings":"AACA,UAAU,kBAAkB;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE;QACd,QAAQ,CAAC,MAAM,EACT,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GACrE,IAAI,CAAC;KACd,CAAC;CACL;AAED,+EAA+E;AAC/E,wBAAsB,OAAO,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7F;AAED,uEAAuE;AACvE,wBAAsB,cAAc,CAChC,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO3E;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,CACrB,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAC/C,GAAG,KAAK,EAAE,MAAM,EAAE,GACnB,MAAM,CAER;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CommandFailure } from './failure.js';
|
|
2
|
+
/** Asks yes or no at a terminal; without one, only an explicit flag agrees. */
|
|
3
|
+
export async function confirm(context, question) {
|
|
4
|
+
if (context.runtime.prompt === null)
|
|
5
|
+
return false;
|
|
6
|
+
const answer = await context.runtime.prompt(`${question} [y/N] `, { secret: false });
|
|
7
|
+
return /^y(es)?$/iu.test(answer.trim());
|
|
8
|
+
}
|
|
9
|
+
/** Goes ahead with explicit consent or an interactive confirmation. */
|
|
10
|
+
export async function requireConsent(context, yes, what) {
|
|
11
|
+
if (yes)
|
|
12
|
+
return;
|
|
13
|
+
if (context.runtime.prompt !== null) {
|
|
14
|
+
if (await confirm(context, `${what} Go ahead?`))
|
|
15
|
+
return;
|
|
16
|
+
throw new CommandFailure('needs_confirmation', 'Not done.', null);
|
|
17
|
+
}
|
|
18
|
+
throw new CommandFailure('needs_confirmation', `${what} Run it again with --yes once your person has agreed.`, rerunWith(context, '--yes'));
|
|
19
|
+
}
|
|
20
|
+
export function requireInteractive(interactive, flag) {
|
|
21
|
+
if (!interactive)
|
|
22
|
+
throw new CommandFailure('invalid_input', `Pass ${flag} when running non-interactively.`, null);
|
|
23
|
+
}
|
|
24
|
+
/** The invocation with extra arguments, quoted for a shell. */
|
|
25
|
+
export function rerunWith(context, ...extra) {
|
|
26
|
+
return ['dexto', ...context.invocation, ...extra].map(shellWord).join(' ');
|
|
27
|
+
}
|
|
28
|
+
export function shellWord(word) {
|
|
29
|
+
return /^[\w@%+=:,./-]+$/u.test(word) ? word : `'${word.replaceAll("'", "'\\''")}'`;
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,MAAM,CAET"}
|
package/dist/index-main.js
CHANGED
|
@@ -881,7 +881,18 @@ program
|
|
|
881
881
|
}, { timeoutMs: 0 }));
|
|
882
882
|
// 14) PARSE & EXECUTE
|
|
883
883
|
// `dexto --help --json`: the commands and exit codes as JSON, for agents.
|
|
884
|
-
|
|
884
|
+
// Internal inventory entry point for the repository build check.
|
|
885
|
+
if (process.argv.slice(2).length === 1 && process.argv[2] === '--audit-agent-cli') {
|
|
886
|
+
const [{ auditProgram }, { cloudCommands }] = await Promise.all([
|
|
887
|
+
import('./cli/agent-audit.js'),
|
|
888
|
+
import('./cli/cloud/host.js'),
|
|
889
|
+
]);
|
|
890
|
+
const commands = cloudCommands('', async () => {
|
|
891
|
+
throw new Error('Audit cannot sign in');
|
|
892
|
+
});
|
|
893
|
+
process.stdout.write(`${JSON.stringify(auditProgram(program, commands), null, 2)}\n`);
|
|
894
|
+
}
|
|
895
|
+
else if (isRootJsonHelp(process.argv.slice(2)))
|
|
885
896
|
process.stdout.write(`${JSON.stringify(rootHelpJson(program), null, 2)}\n`);
|
|
886
897
|
else
|
|
887
898
|
program.parseAsync(process.argv);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dexto",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"dexto": "./dist/index.js"
|
|
@@ -35,18 +35,18 @@
|
|
|
35
35
|
"yaml": "^2.8.3",
|
|
36
36
|
"zod": "^4.3.6",
|
|
37
37
|
"@dexto/agent-config": "1.14.4",
|
|
38
|
-
"@dexto/analytics": "1.15.0-beta.0",
|
|
39
38
|
"@dexto/client-sdk": "1.14.4",
|
|
39
|
+
"@dexto/analytics": "1.15.0-beta.1",
|
|
40
|
+
"@dexto/agent-management": "1.15.0-beta.1",
|
|
40
41
|
"@dexto/core": "1.14.4",
|
|
41
|
-
"@dexto/cloud-client": "1.15.0-beta.
|
|
42
|
-
"@dexto/agent
|
|
43
|
-
"@dexto/image-local": "1.15.0-beta.
|
|
44
|
-
"@dexto/image-logger-agent": "1.15.0-beta.0",
|
|
45
|
-
"@dexto/llm": "1.14.4",
|
|
42
|
+
"@dexto/cloud-client": "1.15.0-beta.1",
|
|
43
|
+
"@dexto/image-logger-agent": "1.15.0-beta.1",
|
|
44
|
+
"@dexto/image-local": "1.15.0-beta.1",
|
|
46
45
|
"@dexto/registry": "1.14.4",
|
|
47
|
-
"@dexto/
|
|
48
|
-
"@dexto/
|
|
49
|
-
"@dexto/tui": "1.15.0-beta.
|
|
46
|
+
"@dexto/llm": "1.14.4",
|
|
47
|
+
"@dexto/server": "1.15.0-beta.1",
|
|
48
|
+
"@dexto/tui": "1.15.0-beta.1",
|
|
49
|
+
"@dexto/storage": "1.14.4"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/ws": "^8.5.11",
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import type { CloudRuntime } from './runtime.js';
|
|
2
|
-
export type LocalChatSource = 'claude-code' | 'codex';
|
|
3
|
-
export declare const LOCAL_CHAT_SOURCES: readonly LocalChatSource[];
|
|
4
|
-
interface LocalChatMessage {
|
|
5
|
-
readonly createdAt: string;
|
|
6
|
-
readonly role: 'assistant' | 'user';
|
|
7
|
-
readonly text: string;
|
|
8
|
-
}
|
|
9
|
-
export interface LocalChat {
|
|
10
|
-
readonly cwd: string | null;
|
|
11
|
-
readonly gitBranch: string | null;
|
|
12
|
-
readonly id: string;
|
|
13
|
-
readonly messages: readonly LocalChatMessage[];
|
|
14
|
-
/** The transcript file it was read from. */
|
|
15
|
-
readonly path: string;
|
|
16
|
-
readonly source: LocalChatSource;
|
|
17
|
-
readonly startedAt: string;
|
|
18
|
-
readonly title: string;
|
|
19
|
-
readonly updatedAt: string;
|
|
20
|
-
}
|
|
21
|
-
/** What `dexto_chat_import` takes; its bounds are the server's too. */
|
|
22
|
-
export interface ChatImportInput {
|
|
23
|
-
readonly cwd?: string;
|
|
24
|
-
readonly gitBranch?: string;
|
|
25
|
-
readonly messages: readonly LocalChatMessage[];
|
|
26
|
-
readonly source: LocalChatSource;
|
|
27
|
-
readonly sourceSessionId: string;
|
|
28
|
-
readonly title: string;
|
|
29
|
-
}
|
|
30
|
-
export declare const MAX_IMPORT_MESSAGES = 2000;
|
|
31
|
-
export declare const MAX_MESSAGE_CHARS = 64000;
|
|
32
|
-
/**
|
|
33
|
-
* A Claude Code session file: one Agent SDK message per line (`type` `user` or `assistant`, with
|
|
34
|
-
* Anthropic `message.content`), plus `summary` lines that title it. Sidechain (subagent) and meta
|
|
35
|
-
* lines are left out, as is thinking.
|
|
36
|
-
*/
|
|
37
|
-
export declare function parseClaudeCodeTranscript(text: string, file: string): LocalChat | null;
|
|
38
|
-
/**
|
|
39
|
-
* A Codex rollout: `{timestamp, type, payload}` lines, as `codex-rs/history` writes them. The
|
|
40
|
-
* `session_meta` line names the thread; `response_item` lines carry messages and tool calls.
|
|
41
|
-
* Developer and system messages, injected context and reasoning are left out.
|
|
42
|
-
*/
|
|
43
|
-
export declare function parseCodexRollout(text: string, file: string): LocalChat | null;
|
|
44
|
-
export declare function redactSecrets(text: string): {
|
|
45
|
-
counts: Record<string, number>;
|
|
46
|
-
text: string;
|
|
47
|
-
};
|
|
48
|
-
type PreparedImport = {
|
|
49
|
-
readonly input: ChatImportInput;
|
|
50
|
-
readonly kind: 'ready';
|
|
51
|
-
/** How many of each kind of secret were redacted, counted from the markers sent. */
|
|
52
|
-
readonly redactions: Readonly<Record<string, number>>;
|
|
53
|
-
/** How many messages were cut to the size limit. */
|
|
54
|
-
readonly truncated: number;
|
|
55
|
-
} | {
|
|
56
|
-
readonly kind: 'skipped';
|
|
57
|
-
readonly reason: string;
|
|
58
|
-
};
|
|
59
|
-
/** The chat as it is sent: redacted, each message within the size limit, or why it can't go. */
|
|
60
|
-
export declare function toImportInput(chat: LocalChat): PreparedImport;
|
|
61
|
-
export interface LocalChatQuery {
|
|
62
|
-
/** Another sessions folder to read instead of the source's own. */
|
|
63
|
-
readonly dir: string | null;
|
|
64
|
-
/** Keep sessions whose working directory is this folder or inside it. */
|
|
65
|
-
readonly folder: string | null;
|
|
66
|
-
/** Keep sessions with a turn at or after this date. */
|
|
67
|
-
readonly since: string | null;
|
|
68
|
-
readonly source: LocalChatSource;
|
|
69
|
-
}
|
|
70
|
-
/** The source's sessions on this machine that match the query, newest first. */
|
|
71
|
-
export declare function findLocalChats(runtime: Pick<CloudRuntime, 'environment' | 'homeDirectory'>, query: LocalChatQuery): Promise<LocalChat[]>;
|
|
72
|
-
export {};
|
|
73
|
-
//# sourceMappingURL=local-chats.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-chats.d.ts","sourceRoot":"","sources":["../../../src/cli/cloud/local-chats.ts"],"names":[],"mappings":"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"}
|