atom-lite 0.0.0-stage → 0.4.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/CHANGELOG.md +72 -0
- package/LICENSE +21 -0
- package/README.md +313 -2
- package/dist/agent/loop.d.ts +32 -0
- package/dist/agent/loop.js +204 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/types.d.ts +85 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/activity.d.ts +45 -0
- package/dist/cli/activity.js +141 -0
- package/dist/cli/activity.js.map +1 -0
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +1576 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/approval-prompt.d.ts +24 -0
- package/dist/cli/approval-prompt.js +82 -0
- package/dist/cli/approval-prompt.js.map +1 -0
- package/dist/cli/approvals.d.ts +1 -0
- package/dist/cli/approvals.js +2 -0
- package/dist/cli/approvals.js.map +1 -0
- package/dist/cli/banner.d.ts +12 -0
- package/dist/cli/banner.js +35 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/commands.d.ts +94 -0
- package/dist/cli/commands.js +324 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/diff.d.ts +1 -0
- package/dist/cli/diff.js +28 -0
- package/dist/cli/diff.js.map +1 -0
- package/dist/cli/input.d.ts +2 -0
- package/dist/cli/input.js +10 -0
- package/dist/cli/input.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +22 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/mouse.d.ts +54 -0
- package/dist/cli/mouse.js +83 -0
- package/dist/cli/mouse.js.map +1 -0
- package/dist/cli/palette.d.ts +41 -0
- package/dist/cli/palette.js +212 -0
- package/dist/cli/palette.js.map +1 -0
- package/dist/cli/panel.d.ts +29 -0
- package/dist/cli/panel.js +48 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli/picker.d.ts +34 -0
- package/dist/cli/picker.js +173 -0
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/renderer.d.ts +1 -0
- package/dist/cli/renderer.js +5 -0
- package/dist/cli/renderer.js.map +1 -0
- package/dist/cli/secret-input.d.ts +21 -0
- package/dist/cli/secret-input.js +101 -0
- package/dist/cli/secret-input.js.map +1 -0
- package/dist/cli/status-line.d.ts +24 -0
- package/dist/cli/status-line.js +49 -0
- package/dist/cli/status-line.js.map +1 -0
- package/dist/cli/stream-text.d.ts +18 -0
- package/dist/cli/stream-text.js +63 -0
- package/dist/cli/stream-text.js.map +1 -0
- package/dist/cli/theme.d.ts +48 -0
- package/dist/cli/theme.js +158 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/cli/tool-box.d.ts +41 -0
- package/dist/cli/tool-box.js +177 -0
- package/dist/cli/tool-box.js.map +1 -0
- package/dist/cli/transcript.d.ts +26 -0
- package/dist/cli/transcript.js +64 -0
- package/dist/cli/transcript.js.map +1 -0
- package/dist/config/credentials.d.ts +26 -0
- package/dist/config/credentials.js +79 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/defaults.d.ts +34 -0
- package/dist/config/defaults.js +35 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +9 -0
- package/dist/config/load.js +137 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/paths.d.ts +4 -0
- package/dist/config/paths.js +14 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +132 -0
- package/dist/config/schema.js +83 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/write.d.ts +20 -0
- package/dist/config/write.js +70 -0
- package/dist/config/write.js.map +1 -0
- package/dist/context/budget.d.ts +2 -0
- package/dist/context/budget.js +13 -0
- package/dist/context/budget.js.map +1 -0
- package/dist/context/builder.d.ts +7 -0
- package/dist/context/builder.js +11 -0
- package/dist/context/builder.js.map +1 -0
- package/dist/context/compaction.d.ts +1 -0
- package/dist/context/compaction.js +5 -0
- package/dist/context/compaction.js.map +1 -0
- package/dist/context/instructions.d.ts +3 -0
- package/dist/context/instructions.js +30 -0
- package/dist/context/instructions.js.map +1 -0
- package/dist/context/manager.d.ts +29 -0
- package/dist/context/manager.js +122 -0
- package/dist/context/manager.js.map +1 -0
- package/dist/extensions/api.d.ts +51 -0
- package/dist/extensions/api.js +101 -0
- package/dist/extensions/api.js.map +1 -0
- package/dist/extensions/discovery.d.ts +26 -0
- package/dist/extensions/discovery.js +243 -0
- package/dist/extensions/discovery.js.map +1 -0
- package/dist/extensions/loader.d.ts +27 -0
- package/dist/extensions/loader.js +113 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/trust.d.ts +4 -0
- package/dist/extensions/trust.js +40 -0
- package/dist/extensions/trust.js.map +1 -0
- package/dist/extensions/types.d.ts +52 -0
- package/dist/extensions/types.js +2 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +73 -0
- package/dist/mcp/client.js +363 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/format.d.ts +3 -0
- package/dist/mcp/format.js +37 -0
- package/dist/mcp/format.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +53 -0
- package/dist/mcp/manager.js +349 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/stdio-transport.d.ts +26 -0
- package/dist/mcp/stdio-transport.js +191 -0
- package/dist/mcp/stdio-transport.js.map +1 -0
- package/dist/mcp/tools.d.ts +22 -0
- package/dist/mcp/tools.js +162 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +92 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/catalog.d.ts +60 -0
- package/dist/providers/catalog.js +289 -0
- package/dist/providers/catalog.js.map +1 -0
- package/dist/providers/context-window.d.ts +11 -0
- package/dist/providers/context-window.js +87 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/factory.d.ts +2 -0
- package/dist/providers/factory.js +55 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/fake.d.ts +14 -0
- package/dist/providers/fake.js +23 -0
- package/dist/providers/fake.js.map +1 -0
- package/dist/providers/gemini.d.ts +24 -0
- package/dist/providers/gemini.js +228 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +64 -0
- package/dist/providers/ollama.js +433 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +27 -0
- package/dist/providers/openai-compatible.js +282 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -0
- package/dist/providers/registry.js +13 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/tool-calls.d.ts +18 -0
- package/dist/providers/tool-calls.js +42 -0
- package/dist/providers/tool-calls.js.map +1 -0
- package/dist/providers/types.d.ts +16 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/runtime/approvals.d.ts +20 -0
- package/dist/runtime/approvals.js +20 -0
- package/dist/runtime/approvals.js.map +1 -0
- package/dist/runtime/executor.d.ts +2 -0
- package/dist/runtime/executor.js +4 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/locks.d.ts +13 -0
- package/dist/runtime/locks.js +180 -0
- package/dist/runtime/locks.js.map +1 -0
- package/dist/runtime/scheduler.d.ts +7 -0
- package/dist/runtime/scheduler.js +110 -0
- package/dist/runtime/scheduler.js.map +1 -0
- package/dist/security/paths.d.ts +1 -0
- package/dist/security/paths.js +35 -0
- package/dist/security/paths.js.map +1 -0
- package/dist/security/process.d.ts +1 -0
- package/dist/security/process.js +8 -0
- package/dist/security/process.js.map +1 -0
- package/dist/security/redaction.d.ts +1 -0
- package/dist/security/redaction.js +4 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/sessions/events.d.ts +30 -0
- package/dist/sessions/events.js +92 -0
- package/dist/sessions/events.js.map +1 -0
- package/dist/sessions/history.d.ts +18 -0
- package/dist/sessions/history.js +76 -0
- package/dist/sessions/history.js.map +1 -0
- package/dist/sessions/index.d.ts +5 -0
- package/dist/sessions/index.js +6 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/recovery.d.ts +6 -0
- package/dist/sessions/recovery.js +35 -0
- package/dist/sessions/recovery.js.map +1 -0
- package/dist/sessions/search.d.ts +16 -0
- package/dist/sessions/search.js +136 -0
- package/dist/sessions/search.js.map +1 -0
- package/dist/sessions/store.d.ts +91 -0
- package/dist/sessions/store.js +360 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/skills/registry.d.ts +23 -0
- package/dist/skills/registry.js +129 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.js +159 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/diff.d.ts +7 -0
- package/dist/tools/diff.js +40 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.js +118 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/read.d.ts +2 -0
- package/dist/tools/read.js +138 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +7 -0
- package/dist/tools/registry.js +13 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +27 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/webfetch.d.ts +2 -0
- package/dist/tools/webfetch.js +97 -0
- package/dist/tools/webfetch.js.map +1 -0
- package/dist/tools/websearch.d.ts +2 -0
- package/dist/tools/websearch.js +88 -0
- package/dist/tools/websearch.js.map +1 -0
- package/dist/tools/write.d.ts +2 -0
- package/dist/tools/write.js +91 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +84 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +74 -4
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/** Parse `/name args` into its parts; non-slash input returns null. */
|
|
2
|
+
export function parseCommandInput(input) {
|
|
3
|
+
const trimmed = input.trim();
|
|
4
|
+
if (!trimmed.startsWith("/"))
|
|
5
|
+
return null;
|
|
6
|
+
const match = /^\/([^\s]+)(?:\s+([\s\S]*))?$/.exec(trimmed);
|
|
7
|
+
if (!match)
|
|
8
|
+
return null;
|
|
9
|
+
return {
|
|
10
|
+
name: match[1],
|
|
11
|
+
args: (match[2] ?? "").trim(),
|
|
12
|
+
raw: trimmed,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** Return the bare (slash-less) command name for inputs that opt in. */
|
|
16
|
+
export function bareCommandName(registry, input) {
|
|
17
|
+
const trimmed = input.trim();
|
|
18
|
+
if (!trimmed || trimmed.startsWith("/"))
|
|
19
|
+
return undefined;
|
|
20
|
+
const first = trimmed.split(/\s+/)[0];
|
|
21
|
+
const command = registry.get(first);
|
|
22
|
+
return command?.bareInvokable ? command.name : undefined;
|
|
23
|
+
}
|
|
24
|
+
export class CommandRegistry {
|
|
25
|
+
ordered = [];
|
|
26
|
+
byName = new Map();
|
|
27
|
+
register(definition) {
|
|
28
|
+
if (this.byName.has(definition.name))
|
|
29
|
+
return;
|
|
30
|
+
this.ordered.push(definition);
|
|
31
|
+
this.byName.set(definition.name, definition);
|
|
32
|
+
for (const alias of definition.aliases ?? []) {
|
|
33
|
+
if (!this.byName.has(alias))
|
|
34
|
+
this.byName.set(alias, definition);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
get(name) {
|
|
38
|
+
return this.byName.get(name);
|
|
39
|
+
}
|
|
40
|
+
list() {
|
|
41
|
+
return this.ordered;
|
|
42
|
+
}
|
|
43
|
+
/** `/help` grouped by category, with argument hints. */
|
|
44
|
+
helpText() {
|
|
45
|
+
const groups = new Map();
|
|
46
|
+
for (const command of this.ordered) {
|
|
47
|
+
const list = groups.get(command.category) ?? [];
|
|
48
|
+
list.push(command);
|
|
49
|
+
groups.set(command.category, list);
|
|
50
|
+
}
|
|
51
|
+
const lines = ["Commands:"];
|
|
52
|
+
for (const [category, commands] of groups) {
|
|
53
|
+
lines.push(` ${category}`);
|
|
54
|
+
for (const command of commands) {
|
|
55
|
+
const hint = command.argumentHint ? ` ${command.argumentHint}` : "";
|
|
56
|
+
const label = ` /${command.name}${hint}`;
|
|
57
|
+
lines.push(label.length >= 30
|
|
58
|
+
? `${label} ${command.description}`
|
|
59
|
+
: label.padEnd(30) + command.description);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return lines.join("\n");
|
|
63
|
+
}
|
|
64
|
+
/** Autocomplete entries derive from the same registry. */
|
|
65
|
+
autocomplete() {
|
|
66
|
+
return this.ordered.map((command) => ({
|
|
67
|
+
name: command.name,
|
|
68
|
+
description: command.description,
|
|
69
|
+
argumentHint: command.argumentHint,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Dispatch a slash command. Unknown commands consume the input and append a
|
|
74
|
+
* clear message so they can never fall through to the agent as a prompt.
|
|
75
|
+
*/
|
|
76
|
+
async dispatch(input, ctx) {
|
|
77
|
+
const parsed = parseCommandInput(input);
|
|
78
|
+
if (!parsed)
|
|
79
|
+
return { handled: false };
|
|
80
|
+
const command = this.get(parsed.name);
|
|
81
|
+
if (!command) {
|
|
82
|
+
ctx.appendLine(`unknown command: /${parsed.name} (type /help for a list of commands)`);
|
|
83
|
+
return { handled: true, unknown: true, name: parsed.name };
|
|
84
|
+
}
|
|
85
|
+
await command.run(ctx, parsed.args, parsed.raw);
|
|
86
|
+
return { handled: true, exit: command.exits === true, name: command.name };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const EFFORT_LEVELS = ["low", "medium", "high"];
|
|
90
|
+
/**
|
|
91
|
+
* Build the command registry. `skills` become first-class commands so a skill
|
|
92
|
+
* is invoked through exactly the same dispatch path as a built-in.
|
|
93
|
+
*/
|
|
94
|
+
export function createCommandRegistry(options = {}) {
|
|
95
|
+
const registry = new CommandRegistry();
|
|
96
|
+
registry.register({
|
|
97
|
+
name: "help",
|
|
98
|
+
aliases: ["?"],
|
|
99
|
+
description: "show commands",
|
|
100
|
+
category: "General",
|
|
101
|
+
run(ctx) {
|
|
102
|
+
ctx.appendLine(registry.helpText());
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
registry.register({
|
|
106
|
+
name: "model",
|
|
107
|
+
description: "search or switch model",
|
|
108
|
+
category: "Model",
|
|
109
|
+
argumentHint: "[model|provider/model]",
|
|
110
|
+
run(ctx, args) {
|
|
111
|
+
if (!args)
|
|
112
|
+
ctx.openModelPicker();
|
|
113
|
+
else
|
|
114
|
+
ctx.switchModel(args);
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
registry.register({
|
|
118
|
+
name: "provider",
|
|
119
|
+
description: "add or select provider",
|
|
120
|
+
category: "Model",
|
|
121
|
+
argumentHint: "[profile]",
|
|
122
|
+
run(ctx, args) {
|
|
123
|
+
if (args)
|
|
124
|
+
ctx.startProviderSetup(args);
|
|
125
|
+
else
|
|
126
|
+
ctx.openProviderPicker();
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
registry.register({
|
|
130
|
+
name: "effort",
|
|
131
|
+
description: "set effort level",
|
|
132
|
+
category: "Model",
|
|
133
|
+
argumentHint: "[low|medium|high]",
|
|
134
|
+
run(ctx, args) {
|
|
135
|
+
if (!args) {
|
|
136
|
+
ctx.openEffortPicker();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (EFFORT_LEVELS.includes(args)) {
|
|
140
|
+
ctx.setEffort(args);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
ctx.appendLine("usage: /effort low|medium|high");
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
registry.register({
|
|
148
|
+
name: "session",
|
|
149
|
+
description: "session info or rename",
|
|
150
|
+
category: "Session",
|
|
151
|
+
argumentHint: "[rename <title>]",
|
|
152
|
+
run(ctx, args) {
|
|
153
|
+
if (args === "rename" || args.startsWith("rename ")) {
|
|
154
|
+
const title = args.slice("rename".length).trim();
|
|
155
|
+
if (!title) {
|
|
156
|
+
ctx.appendLine("usage: /session rename <title>");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
ctx.renameSession(title);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const session = ctx.session;
|
|
163
|
+
ctx.appendLine(`session: ${session.id}\nworkspace: ${session.workspace}\nprovider: ${session.provider}\nmessages: ${session.messages.length}`);
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
registry.register({
|
|
167
|
+
name: "sessions",
|
|
168
|
+
description: "search or resume a session",
|
|
169
|
+
category: "Session",
|
|
170
|
+
argumentHint: "[all]",
|
|
171
|
+
run(ctx, args) {
|
|
172
|
+
ctx.openSessionsPicker(args.trim() === "all" ? "all" : "workspace");
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
registry.register({
|
|
176
|
+
name: "search",
|
|
177
|
+
description: "search sessions by title or content",
|
|
178
|
+
category: "Session",
|
|
179
|
+
argumentHint: "<query>",
|
|
180
|
+
run(ctx, args) {
|
|
181
|
+
const query = args.trim();
|
|
182
|
+
if (!query) {
|
|
183
|
+
ctx.appendLine("usage: /search <query>");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
ctx.searchSessions(query);
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
registry.register({
|
|
190
|
+
name: "compact",
|
|
191
|
+
description: "compact history",
|
|
192
|
+
category: "Session",
|
|
193
|
+
run(ctx) {
|
|
194
|
+
ctx.appendLine("compaction is automatic");
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
registry.register({
|
|
198
|
+
name: "clear",
|
|
199
|
+
aliases: ["new"],
|
|
200
|
+
description: "clear session",
|
|
201
|
+
category: "Session",
|
|
202
|
+
run(ctx) {
|
|
203
|
+
ctx.clearContent();
|
|
204
|
+
ctx.appendLine("started new session");
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
registry.register({
|
|
208
|
+
name: "approval",
|
|
209
|
+
description: "approval mode",
|
|
210
|
+
category: "Safety",
|
|
211
|
+
run(ctx) {
|
|
212
|
+
const approvals = ctx.approvals;
|
|
213
|
+
ctx.appendLine(`approval mode: ${approvals.mode}\ntrusted this session: ${approvals.isTrusted()}`);
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
registry.register({
|
|
217
|
+
name: "doctor",
|
|
218
|
+
description: "diagnostics",
|
|
219
|
+
category: "System",
|
|
220
|
+
async run(ctx) {
|
|
221
|
+
ctx.appendLine(await ctx.runDoctor());
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
registry.register({
|
|
225
|
+
name: "mcp",
|
|
226
|
+
description: "list or reconnect MCP servers",
|
|
227
|
+
category: "System",
|
|
228
|
+
argumentHint: "[reconnect [server]]",
|
|
229
|
+
async run(ctx, args) {
|
|
230
|
+
await ctx.runMcp(args);
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
registry.register({
|
|
234
|
+
name: "export",
|
|
235
|
+
description: "export session transcript",
|
|
236
|
+
category: "Session",
|
|
237
|
+
argumentHint: "[path] [--format md|json] [--force] [--no-redact]",
|
|
238
|
+
async run(ctx, args) {
|
|
239
|
+
await ctx.runExport(args);
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
registry.register({
|
|
243
|
+
name: "thinking",
|
|
244
|
+
description: "toggle thinking display",
|
|
245
|
+
category: "System",
|
|
246
|
+
run(ctx) {
|
|
247
|
+
const shown = ctx.toggleThinking();
|
|
248
|
+
ctx.appendLine(`thinking display: ${shown ? "shown" : "hidden"}`);
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
registry.register({
|
|
252
|
+
name: "theme",
|
|
253
|
+
description: "choose a colour theme",
|
|
254
|
+
category: "Appearance",
|
|
255
|
+
argumentHint: "[auto|dark|light|ansi]",
|
|
256
|
+
run(ctx, args) {
|
|
257
|
+
if (args)
|
|
258
|
+
ctx.setTheme(args);
|
|
259
|
+
else
|
|
260
|
+
ctx.openThemePicker();
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
registry.register({
|
|
264
|
+
name: "skills",
|
|
265
|
+
description: "list skills",
|
|
266
|
+
category: "Skills",
|
|
267
|
+
run(ctx) {
|
|
268
|
+
const skills = ctx.listSkills();
|
|
269
|
+
if (skills.length === 0) {
|
|
270
|
+
ctx.appendLine("no skills available");
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
ctx.appendLine(skills
|
|
274
|
+
.map((skill) => `${skill.name} - ${skill.description}`)
|
|
275
|
+
.join("\n"));
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
registry.register({
|
|
279
|
+
name: "skill",
|
|
280
|
+
description: "load a skill",
|
|
281
|
+
category: "Skills",
|
|
282
|
+
argumentHint: "<name> [prompt]",
|
|
283
|
+
async run(ctx, args) {
|
|
284
|
+
const [name, ...rest] = args.split(/\s+/).filter(Boolean);
|
|
285
|
+
if (!name) {
|
|
286
|
+
ctx.appendLine("usage: /skill <name> [prompt]");
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
await ctx.loadSkill(name, rest.join(" ").trim());
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
registry.register({
|
|
293
|
+
name: "extensions",
|
|
294
|
+
description: "list loaded extensions",
|
|
295
|
+
category: "Extensions",
|
|
296
|
+
run(ctx) {
|
|
297
|
+
ctx.appendLine(ctx.listExtensions());
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
registry.register({
|
|
301
|
+
name: "exit",
|
|
302
|
+
aliases: ["quit"],
|
|
303
|
+
description: "exit atom-lite",
|
|
304
|
+
category: "System",
|
|
305
|
+
exits: true,
|
|
306
|
+
run(ctx) {
|
|
307
|
+
ctx.requestExit();
|
|
308
|
+
},
|
|
309
|
+
});
|
|
310
|
+
for (const skill of options.skills ?? []) {
|
|
311
|
+
registry.register({
|
|
312
|
+
name: skill.name,
|
|
313
|
+
description: skill.description,
|
|
314
|
+
category: "Skills",
|
|
315
|
+
argumentHint: "[prompt]",
|
|
316
|
+
bareInvokable: true,
|
|
317
|
+
async run(ctx, args) {
|
|
318
|
+
await ctx.loadSkill(skill.name, args.trim());
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
return registry;
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function renderDiff(oldText: string, newText: string): string[];
|
package/dist/cli/diff.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function renderDiff(oldText, newText) {
|
|
2
|
+
const oldLines = oldText.split(/\r?\n/);
|
|
3
|
+
const newLines = newText.split(/\r?\n/);
|
|
4
|
+
// Simple LCS-based unified diff (no context lines beyond changes).
|
|
5
|
+
const out = [];
|
|
6
|
+
// Use a simple line-by-line diff (Myers-lite): find common prefix/suffix.
|
|
7
|
+
let prefix = 0;
|
|
8
|
+
while (prefix < oldLines.length && prefix < newLines.length && oldLines[prefix] === newLines[prefix]) {
|
|
9
|
+
prefix++;
|
|
10
|
+
}
|
|
11
|
+
let suffix = 0;
|
|
12
|
+
while (suffix < oldLines.length - prefix &&
|
|
13
|
+
suffix < newLines.length - prefix &&
|
|
14
|
+
oldLines[oldLines.length - 1 - suffix] === newLines[newLines.length - 1 - suffix]) {
|
|
15
|
+
suffix++;
|
|
16
|
+
}
|
|
17
|
+
const oldMid = oldLines.slice(prefix, oldLines.length - suffix);
|
|
18
|
+
const newMid = newLines.slice(prefix, newLines.length - suffix);
|
|
19
|
+
if (oldMid.length === 0 && newMid.length === 0) {
|
|
20
|
+
return ["(no changes)"];
|
|
21
|
+
}
|
|
22
|
+
for (const l of oldMid)
|
|
23
|
+
out.push(`- ${l}`);
|
|
24
|
+
for (const l of newMid)
|
|
25
|
+
out.push(`+ ${l}`);
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,mEAAmE;IACnE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,0EAA0E;IAC1E,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrG,MAAM,EAAE,CAAC;IACX,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OACE,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM;QACjC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM;QACjC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,EACjF,CAAC;QACD,MAAM,EAAE,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Extract bracketed-paste payloads; returns null for non-paste input. */
|
|
2
|
+
export function extractPaste(data) {
|
|
3
|
+
if (!data.includes("\x1b[200~"))
|
|
4
|
+
return null;
|
|
5
|
+
return data
|
|
6
|
+
.replace(/\x1b\[200~/g, "")
|
|
7
|
+
.replace(/\x1b\[201~/g, "")
|
|
8
|
+
.replace(/[\x00-\x1f]/g, "");
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/cli/input.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,IAAI;SACR,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Keep this bootstrap dependency-free so `--version`/`--help` do not pay for
|
|
3
|
+
// loading providers, tools, zod and the TUI.
|
|
4
|
+
const args = process.argv.slice(2);
|
|
5
|
+
if (args.includes("--version")) {
|
|
6
|
+
process.stdout.write("0.4.1\n");
|
|
7
|
+
}
|
|
8
|
+
else if (args.includes("--help")) {
|
|
9
|
+
process.stdout.write("atom-lite [task] [--provider NAME] [--model MODEL] [--continue] [--session ID] [--list-sessions] [--search-sessions QUERY] [--no-tools] [--json] [--debug] [--theme NAME] [--no-color] [--version] [--help]\n");
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
try {
|
|
13
|
+
const { run } = await import("./app.js");
|
|
14
|
+
await run(args);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
process.stderr.write(`atom-lite: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AACA,6EAA6E;AAC7E,6CAA6C;AAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;KAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+MAA+M,CAChN,CAAC;AACJ,CAAC;KAAM,CAAC;IACN,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CACnE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type MouseEvent = {
|
|
2
|
+
type: "wheel";
|
|
3
|
+
direction: "up" | "down";
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
} | {
|
|
7
|
+
type: "press" | "release";
|
|
8
|
+
button: "left" | "middle" | "right" | "none";
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
};
|
|
12
|
+
/** SGR mouse reporting (1006): ESC [ < button ; x ; y M|m. */
|
|
13
|
+
export declare function parseSgrMouse(data: string): MouseEvent | undefined;
|
|
14
|
+
export interface MouseBlock {
|
|
15
|
+
id: string;
|
|
16
|
+
height: number;
|
|
17
|
+
}
|
|
18
|
+
/** Find which block occupies a line, starting at the top of the document. */
|
|
19
|
+
export declare function blockAtLine(blocks: MouseBlock[], line: number): {
|
|
20
|
+
id: string;
|
|
21
|
+
offset: number;
|
|
22
|
+
} | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Map a terminal screen row (zero-based from the top) onto a document line.
|
|
25
|
+
* The normal-screen renderer shows the tail of the document, so long
|
|
26
|
+
* transcripts need the scrollback offset added.
|
|
27
|
+
*/
|
|
28
|
+
export declare function blockAtScreenRow(blocks: MouseBlock[], screenY: number, terminalRows: number): {
|
|
29
|
+
id: string;
|
|
30
|
+
offset: number;
|
|
31
|
+
} | undefined;
|
|
32
|
+
export interface MouseHandlers {
|
|
33
|
+
isModalOpen(): boolean;
|
|
34
|
+
scrollBy(lines: number): void;
|
|
35
|
+
focusInput(): void;
|
|
36
|
+
/** Return true when the click hit a tool box and toggled it. */
|
|
37
|
+
toggleToolBox(screenY: number): boolean;
|
|
38
|
+
requestRender(): void;
|
|
39
|
+
}
|
|
40
|
+
export declare const MOUSE_SCROLL_LINES = 3;
|
|
41
|
+
/** Apply one normalized mouse event. Returns true when it was consumed. */
|
|
42
|
+
export declare function handleMouseEvent(event: MouseEvent, handlers: MouseHandlers): boolean;
|
|
43
|
+
/** Mouse capture on/off sequences for SGR-capable terminals. */
|
|
44
|
+
export declare function mouseCaptureSequence(enabled: boolean): string;
|
|
45
|
+
export declare function shouldEnableMouse(options: {
|
|
46
|
+
interactive: boolean;
|
|
47
|
+
configured: boolean;
|
|
48
|
+
stdoutIsTTY: boolean;
|
|
49
|
+
}): boolean;
|
|
50
|
+
export interface MouseCapture {
|
|
51
|
+
enable(): void;
|
|
52
|
+
disable(): void;
|
|
53
|
+
}
|
|
54
|
+
export declare function createMouseCapture(write: (data: string) => void): MouseCapture;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** SGR mouse reporting (1006): ESC [ < button ; x ; y M|m. */
|
|
2
|
+
export function parseSgrMouse(data) {
|
|
3
|
+
const trimmed = data.trim();
|
|
4
|
+
const match = /^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/.exec(trimmed);
|
|
5
|
+
if (!match)
|
|
6
|
+
return undefined;
|
|
7
|
+
const code = Number(match[1]);
|
|
8
|
+
const x = Math.max(0, Number(match[2]) - 1);
|
|
9
|
+
const y = Math.max(0, Number(match[3]) - 1);
|
|
10
|
+
const release = match[4] === "m";
|
|
11
|
+
if ((code & 64) !== 0) {
|
|
12
|
+
if (release)
|
|
13
|
+
return undefined;
|
|
14
|
+
const direction = (code & 1) === 0 ? "up" : "down";
|
|
15
|
+
return { type: "wheel", direction, x, y };
|
|
16
|
+
}
|
|
17
|
+
const buttonCode = code & 3;
|
|
18
|
+
const button = buttonCode === 0
|
|
19
|
+
? "left"
|
|
20
|
+
: buttonCode === 1
|
|
21
|
+
? "middle"
|
|
22
|
+
: buttonCode === 2
|
|
23
|
+
? "right"
|
|
24
|
+
: "none";
|
|
25
|
+
return { type: release ? "release" : "press", button, x, y };
|
|
26
|
+
}
|
|
27
|
+
/** Find which block occupies a line, starting at the top of the document. */
|
|
28
|
+
export function blockAtLine(blocks, line) {
|
|
29
|
+
if (line < 0)
|
|
30
|
+
return undefined;
|
|
31
|
+
let top = 0;
|
|
32
|
+
for (const block of blocks) {
|
|
33
|
+
if (line < top + block.height) {
|
|
34
|
+
return { id: block.id, offset: line - top };
|
|
35
|
+
}
|
|
36
|
+
top += block.height;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Map a terminal screen row (zero-based from the top) onto a document line.
|
|
42
|
+
* The normal-screen renderer shows the tail of the document, so long
|
|
43
|
+
* transcripts need the scrollback offset added.
|
|
44
|
+
*/
|
|
45
|
+
export function blockAtScreenRow(blocks, screenY, terminalRows) {
|
|
46
|
+
const total = blocks.reduce((sum, block) => sum + block.height, 0);
|
|
47
|
+
const viewportTop = Math.max(0, total - Math.max(0, terminalRows));
|
|
48
|
+
return blockAtLine(blocks, viewportTop + Math.max(0, screenY));
|
|
49
|
+
}
|
|
50
|
+
export const MOUSE_SCROLL_LINES = 3;
|
|
51
|
+
/** Apply one normalized mouse event. Returns true when it was consumed. */
|
|
52
|
+
export function handleMouseEvent(event, handlers) {
|
|
53
|
+
if (handlers.isModalOpen())
|
|
54
|
+
return true;
|
|
55
|
+
if (event.type === "wheel") {
|
|
56
|
+
handlers.scrollBy(event.direction === "up" ? -MOUSE_SCROLL_LINES : MOUSE_SCROLL_LINES);
|
|
57
|
+
handlers.requestRender();
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (event.type === "press" && event.button === "left") {
|
|
61
|
+
if (!handlers.toggleToolBox(event.y))
|
|
62
|
+
handlers.focusInput();
|
|
63
|
+
handlers.requestRender();
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return event.type === "release";
|
|
67
|
+
}
|
|
68
|
+
/** Mouse capture on/off sequences for SGR-capable terminals. */
|
|
69
|
+
export function mouseCaptureSequence(enabled) {
|
|
70
|
+
return enabled
|
|
71
|
+
? "\x1b[?1000h\x1b[?1002h\x1b[?1004h\x1b[?1006h"
|
|
72
|
+
: "\x1b[?1006l\x1b[?1004l\x1b[?1002l\x1b[?1000l";
|
|
73
|
+
}
|
|
74
|
+
export function shouldEnableMouse(options) {
|
|
75
|
+
return options.interactive && options.configured && options.stdoutIsTTY;
|
|
76
|
+
}
|
|
77
|
+
export function createMouseCapture(write) {
|
|
78
|
+
return {
|
|
79
|
+
enable: () => write(mouseCaptureSequence(true)),
|
|
80
|
+
disable: () => write(mouseCaptureSequence(false)),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=mouse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/cli/mouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Theme } from "./theme.js";
|
|
2
|
+
export interface PaletteItem {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
category: string;
|
|
7
|
+
/** Extra fuzzy-search terms (for example command aliases). */
|
|
8
|
+
keywords?: string[];
|
|
9
|
+
action: () => void | Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export interface PaletteGroup {
|
|
12
|
+
category: string;
|
|
13
|
+
items: PaletteItem[];
|
|
14
|
+
}
|
|
15
|
+
/** Fuzzy-filter palette items on label, description, category and keywords. */
|
|
16
|
+
export declare function filterPaletteItems(items: PaletteItem[], query: string): PaletteItem[];
|
|
17
|
+
/**
|
|
18
|
+
* Group items by category, keeping the category order of first appearance.
|
|
19
|
+
* Filtering happens first, so groups only contain matching items.
|
|
20
|
+
*/
|
|
21
|
+
export declare function groupPaletteItems(items: PaletteItem[]): PaletteGroup[];
|
|
22
|
+
export interface CommandPaletteOptions {
|
|
23
|
+
tui: any;
|
|
24
|
+
container: any;
|
|
25
|
+
items: PaletteItem[];
|
|
26
|
+
maxVisible?: number;
|
|
27
|
+
title?: string;
|
|
28
|
+
theme?: Theme;
|
|
29
|
+
onCancel?: () => void;
|
|
30
|
+
/** Called after the palette closes and focus is restored, before the action. */
|
|
31
|
+
onSelect?: (item: PaletteItem) => void;
|
|
32
|
+
onError?: (error: unknown) => void;
|
|
33
|
+
restoreFocus?: () => void;
|
|
34
|
+
}
|
|
35
|
+
export interface CommandPalette {
|
|
36
|
+
updateItems(items: PaletteItem[]): void;
|
|
37
|
+
close(): void;
|
|
38
|
+
get isOpen(): boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Open the ctrl+p command palette overlay. */
|
|
41
|
+
export declare function openCommandPalette(options: CommandPaletteOptions): CommandPalette;
|