atom-lite 0.1.0 → 0.5.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.
Files changed (169) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +58 -10
  3. package/dist/agent/loop.d.ts +11 -0
  4. package/dist/agent/loop.js +238 -47
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/agent/model-turn.d.ts +37 -0
  7. package/dist/agent/model-turn.js +53 -0
  8. package/dist/agent/model-turn.js.map +1 -0
  9. package/dist/agent/turn-recorder.d.ts +33 -0
  10. package/dist/agent/turn-recorder.js +74 -0
  11. package/dist/agent/turn-recorder.js.map +1 -0
  12. package/dist/agent/types.d.ts +4 -0
  13. package/dist/cli/activity.d.ts +45 -0
  14. package/dist/cli/activity.js +141 -0
  15. package/dist/cli/activity.js.map +1 -0
  16. package/dist/cli/app.js +1234 -378
  17. package/dist/cli/app.js.map +1 -1
  18. package/dist/cli/approval-prompt.d.ts +24 -0
  19. package/dist/cli/approval-prompt.js +82 -0
  20. package/dist/cli/approval-prompt.js.map +1 -0
  21. package/dist/cli/banner.d.ts +5 -1
  22. package/dist/cli/banner.js +10 -4
  23. package/dist/cli/banner.js.map +1 -1
  24. package/dist/cli/commands.d.ts +92 -14
  25. package/dist/cli/commands.js +330 -52
  26. package/dist/cli/commands.js.map +1 -1
  27. package/dist/cli/diff.d.ts +1 -0
  28. package/dist/cli/diff.js +28 -0
  29. package/dist/cli/diff.js.map +1 -0
  30. package/dist/cli/input.d.ts +2 -0
  31. package/dist/cli/input.js +10 -0
  32. package/dist/cli/input.js.map +1 -0
  33. package/dist/cli/main.js +2 -2
  34. package/dist/cli/main.js.map +1 -1
  35. package/dist/cli/mouse.d.ts +54 -0
  36. package/dist/cli/mouse.js +86 -0
  37. package/dist/cli/mouse.js.map +1 -0
  38. package/dist/cli/palette.d.ts +41 -0
  39. package/dist/cli/palette.js +212 -0
  40. package/dist/cli/palette.js.map +1 -0
  41. package/dist/cli/panel.d.ts +29 -0
  42. package/dist/cli/panel.js +48 -0
  43. package/dist/cli/panel.js.map +1 -0
  44. package/dist/cli/picker.d.ts +8 -0
  45. package/dist/cli/picker.js +26 -28
  46. package/dist/cli/picker.js.map +1 -1
  47. package/dist/cli/status-line.d.ts +6 -0
  48. package/dist/cli/status-line.js +21 -7
  49. package/dist/cli/status-line.js.map +1 -1
  50. package/dist/cli/stream-text.d.ts +4 -8
  51. package/dist/cli/stream-text.js +26 -12
  52. package/dist/cli/stream-text.js.map +1 -1
  53. package/dist/cli/theme.d.ts +48 -0
  54. package/dist/cli/theme.js +160 -0
  55. package/dist/cli/theme.js.map +1 -0
  56. package/dist/cli/tool-box.d.ts +41 -0
  57. package/dist/cli/tool-box.js +177 -0
  58. package/dist/cli/tool-box.js.map +1 -0
  59. package/dist/cli/transcript.d.ts +24 -1
  60. package/dist/cli/transcript.js +65 -2
  61. package/dist/cli/transcript.js.map +1 -1
  62. package/dist/cli/trust-prompt.d.ts +24 -0
  63. package/dist/cli/trust-prompt.js +89 -0
  64. package/dist/cli/trust-prompt.js.map +1 -0
  65. package/dist/config/defaults.d.ts +12 -0
  66. package/dist/config/defaults.js +12 -0
  67. package/dist/config/defaults.js.map +1 -1
  68. package/dist/config/load.d.ts +2 -0
  69. package/dist/config/load.js +36 -0
  70. package/dist/config/load.js.map +1 -1
  71. package/dist/config/paths.d.ts +2 -0
  72. package/dist/config/paths.js +12 -1
  73. package/dist/config/paths.js.map +1 -1
  74. package/dist/config/schema.d.ts +53 -0
  75. package/dist/config/schema.js +33 -0
  76. package/dist/config/schema.js.map +1 -1
  77. package/dist/config/write.d.ts +2 -0
  78. package/dist/config/write.js +9 -0
  79. package/dist/config/write.js.map +1 -1
  80. package/dist/context/builder.d.ts +7 -0
  81. package/dist/context/builder.js +11 -0
  82. package/dist/context/builder.js.map +1 -0
  83. package/dist/context/manager.d.ts +17 -3
  84. package/dist/context/manager.js +129 -41
  85. package/dist/context/manager.js.map +1 -1
  86. package/dist/extensions/api.d.ts +101 -0
  87. package/dist/extensions/api.js +219 -0
  88. package/dist/extensions/api.js.map +1 -0
  89. package/dist/extensions/discovery.d.ts +42 -0
  90. package/dist/extensions/discovery.js +326 -0
  91. package/dist/extensions/discovery.js.map +1 -0
  92. package/dist/extensions/loader.d.ts +68 -0
  93. package/dist/extensions/loader.js +353 -0
  94. package/dist/extensions/loader.js.map +1 -0
  95. package/dist/extensions/session-manager.d.ts +44 -0
  96. package/dist/extensions/session-manager.js +137 -0
  97. package/dist/extensions/session-manager.js.map +1 -0
  98. package/dist/extensions/tool-adapter.d.ts +12 -0
  99. package/dist/extensions/tool-adapter.js +157 -0
  100. package/dist/extensions/tool-adapter.js.map +1 -0
  101. package/dist/extensions/trust.d.ts +6 -0
  102. package/dist/extensions/trust.js +55 -0
  103. package/dist/extensions/trust.js.map +1 -0
  104. package/dist/extensions/types.d.ts +94 -0
  105. package/dist/extensions/types.js +2 -0
  106. package/dist/extensions/types.js.map +1 -0
  107. package/dist/extensions/ui.d.ts +21 -0
  108. package/dist/extensions/ui.js +75 -0
  109. package/dist/extensions/ui.js.map +1 -0
  110. package/dist/index.d.ts +2 -0
  111. package/dist/index.js +2 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/mcp/client.d.ts +73 -0
  114. package/dist/mcp/client.js +363 -0
  115. package/dist/mcp/client.js.map +1 -0
  116. package/dist/mcp/format.d.ts +3 -0
  117. package/dist/mcp/format.js +37 -0
  118. package/dist/mcp/format.js.map +1 -0
  119. package/dist/mcp/index.d.ts +6 -0
  120. package/dist/mcp/index.js +7 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/manager.d.ts +53 -0
  123. package/dist/mcp/manager.js +349 -0
  124. package/dist/mcp/manager.js.map +1 -0
  125. package/dist/mcp/stdio-transport.d.ts +26 -0
  126. package/dist/mcp/stdio-transport.js +174 -0
  127. package/dist/mcp/stdio-transport.js.map +1 -0
  128. package/dist/mcp/tools.d.ts +22 -0
  129. package/dist/mcp/tools.js +162 -0
  130. package/dist/mcp/tools.js.map +1 -0
  131. package/dist/mcp/types.d.ts +92 -0
  132. package/dist/mcp/types.js +2 -0
  133. package/dist/mcp/types.js.map +1 -0
  134. package/dist/providers/factory.js +1 -0
  135. package/dist/providers/factory.js.map +1 -1
  136. package/dist/runtime/executor.d.ts +2 -0
  137. package/dist/runtime/executor.js +4 -0
  138. package/dist/runtime/executor.js.map +1 -0
  139. package/dist/runtime/scheduler.d.ts +4 -3
  140. package/dist/runtime/scheduler.js +7 -98
  141. package/dist/runtime/scheduler.js.map +1 -1
  142. package/dist/runtime/tool-executor.d.ts +18 -0
  143. package/dist/runtime/tool-executor.js +126 -0
  144. package/dist/runtime/tool-executor.js.map +1 -0
  145. package/dist/security/process.d.ts +10 -0
  146. package/dist/security/process.js +36 -0
  147. package/dist/security/process.js.map +1 -1
  148. package/dist/sessions/events.d.ts +9 -0
  149. package/dist/sessions/events.js +11 -6
  150. package/dist/sessions/events.js.map +1 -1
  151. package/dist/sessions/history.d.ts +18 -0
  152. package/dist/sessions/history.js +76 -0
  153. package/dist/sessions/history.js.map +1 -0
  154. package/dist/sessions/index.d.ts +2 -0
  155. package/dist/sessions/index.js +2 -0
  156. package/dist/sessions/index.js.map +1 -1
  157. package/dist/sessions/search.d.ts +16 -0
  158. package/dist/sessions/search.js +136 -0
  159. package/dist/sessions/search.js.map +1 -0
  160. package/dist/sessions/store.js +7 -4
  161. package/dist/sessions/store.js.map +1 -1
  162. package/dist/tools/bash.js +6 -3
  163. package/dist/tools/bash.js.map +1 -1
  164. package/dist/tools/edit.js +2 -1
  165. package/dist/tools/edit.js.map +1 -1
  166. package/dist/tools/types.d.ts +6 -0
  167. package/dist/types.d.ts +2 -1
  168. package/dist/types.js.map +1 -1
  169. package/package.json +3 -1
@@ -0,0 +1,42 @@
1
+ export type ExtensionSource = "cli" | "user" | "project" | "package";
2
+ export interface ExtensionManifest {
3
+ name?: string;
4
+ version?: string;
5
+ extensions: string[];
6
+ capabilities: string[];
7
+ engines?: {
8
+ "atom-lite"?: string;
9
+ };
10
+ /** Which manifest field declared the extension entrypoints. */
11
+ kind?: "pi" | "atom";
12
+ }
13
+ export interface DiscoveredExtension {
14
+ id: string;
15
+ source: ExtensionSource;
16
+ /** Human-readable origin for diagnostics (for example "pi global"). */
17
+ origin?: string;
18
+ rootPath: string;
19
+ entryPath: string;
20
+ manifest?: ExtensionManifest;
21
+ errors: string[];
22
+ /** Project extensions are trusted only after an explicit project decision. */
23
+ trusted: boolean;
24
+ /** Set when the extension was discovered but must not be loaded. */
25
+ skipReason?: string;
26
+ }
27
+ export interface DiscoverExtensionsOptions {
28
+ cliPaths?: string[];
29
+ /** Extra global extension directory (Atom-native). */
30
+ userDir?: string;
31
+ /** Extra project extension directory (Atom-native). */
32
+ projectDir?: string;
33
+ packageRoots?: string[];
34
+ /** Workspace root. Enables project and settings discovery and trust checks. */
35
+ cwd?: string;
36
+ /** Pi agent directory (`~/.pi/agent` by default). */
37
+ agentDir?: string;
38
+ trustedProjects?: string[];
39
+ deniedProjects?: string[];
40
+ }
41
+ export declare function discoverExtensions(options?: DiscoverExtensionsOptions): DiscoveredExtension[];
42
+ export declare function formatExtensionDiscovery(extensions: DiscoveredExtension[]): string;
@@ -0,0 +1,326 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync, } from "node:fs";
2
+ import { basename, dirname, join, resolve } from "node:path";
3
+ const EXTENSION_EXTENSIONS = new Set([".ts", ".js", ".mjs"]);
4
+ function readJson(path) {
5
+ try {
6
+ return JSON.parse(readFileSync(path, "utf8"));
7
+ }
8
+ catch {
9
+ return undefined;
10
+ }
11
+ }
12
+ function extensionSuffix(path) {
13
+ const lower = path.toLowerCase();
14
+ for (const suffix of EXTENSION_EXTENSIONS) {
15
+ if (lower.endsWith(suffix))
16
+ return suffix;
17
+ }
18
+ return undefined;
19
+ }
20
+ function isExtensionFile(path) {
21
+ return extensionSuffix(path) !== undefined;
22
+ }
23
+ function stripExtension(path) {
24
+ const suffix = extensionSuffix(path);
25
+ return suffix ? path.slice(0, -suffix.length) : path;
26
+ }
27
+ function isRecord(value) {
28
+ return typeof value === "object" && value !== null && !Array.isArray(value);
29
+ }
30
+ function parseManifest(raw) {
31
+ if (!isRecord(raw)) {
32
+ return { errors: ["package.json must be an object"] };
33
+ }
34
+ const pi = raw.pi;
35
+ const atom = raw.atom;
36
+ if (pi === undefined && atom === undefined) {
37
+ return { errors: [] };
38
+ }
39
+ const errors = [];
40
+ const field = pi !== undefined ? "pi" : "atom";
41
+ const declaration = field === "pi" ? pi : atom;
42
+ if (!isRecord(declaration)) {
43
+ return { errors: [`"${field}" field must be an object`] };
44
+ }
45
+ const extensionsRaw = declaration.extensions;
46
+ if (!Array.isArray(extensionsRaw) || extensionsRaw.length === 0) {
47
+ errors.push(`"${field}.extensions" must be a non-empty array of strings`);
48
+ }
49
+ const extensions = [];
50
+ if (Array.isArray(extensionsRaw)) {
51
+ for (const entry of extensionsRaw) {
52
+ if (typeof entry !== "string" || entry.trim() === "") {
53
+ errors.push(`"${field}.extensions" entries must be non-empty strings`);
54
+ }
55
+ else {
56
+ extensions.push(entry);
57
+ }
58
+ }
59
+ }
60
+ const capabilities = [];
61
+ const capabilitiesRaw = declaration.capabilities ??
62
+ (isRecord(atom) ? atom.capabilities : undefined);
63
+ if (capabilitiesRaw !== undefined) {
64
+ if (!Array.isArray(capabilitiesRaw)) {
65
+ errors.push(`"${field}.capabilities" must be an array of strings`);
66
+ }
67
+ else {
68
+ for (const capability of capabilitiesRaw) {
69
+ if (typeof capability !== "string") {
70
+ errors.push(`"${field}.capabilities" entries must be strings`);
71
+ }
72
+ else {
73
+ capabilities.push(capability);
74
+ }
75
+ }
76
+ }
77
+ }
78
+ let engines;
79
+ const enginesRaw = isRecord(atom) ? atom.engines : undefined;
80
+ if (enginesRaw !== undefined) {
81
+ if (!isRecord(enginesRaw)) {
82
+ errors.push('"atom.engines" must be an object');
83
+ }
84
+ else if (enginesRaw["atom-lite"] !== undefined &&
85
+ typeof enginesRaw["atom-lite"] !== "string") {
86
+ errors.push('"atom.engines.atom-lite" must be a string');
87
+ }
88
+ else {
89
+ engines = { "atom-lite": enginesRaw["atom-lite"] };
90
+ }
91
+ }
92
+ if (errors.length > 0)
93
+ return { errors };
94
+ return {
95
+ manifest: {
96
+ name: typeof raw.name === "string" ? raw.name : undefined,
97
+ version: typeof raw.version === "string" ? raw.version : undefined,
98
+ extensions,
99
+ capabilities,
100
+ engines,
101
+ kind: field,
102
+ },
103
+ errors: [],
104
+ };
105
+ }
106
+ function candidate(source, origin, rootPath, entryPath, manifest, errors = []) {
107
+ return {
108
+ id: basename(rootPath).replace(/\.(ts|js|mjs)$/i, ""),
109
+ source,
110
+ origin,
111
+ rootPath,
112
+ entryPath: resolve(entryPath),
113
+ manifest,
114
+ errors,
115
+ trusted: source !== "project",
116
+ };
117
+ }
118
+ function packageCandidates(source, origin, packageDir) {
119
+ const packageJsonPath = join(packageDir, "package.json");
120
+ if (!existsSync(packageJsonPath))
121
+ return undefined;
122
+ const { manifest, errors } = parseManifest(readJson(packageJsonPath));
123
+ if (errors.length > 0) {
124
+ return [candidate(source, origin, packageDir, packageDir, undefined, errors)];
125
+ }
126
+ if (!manifest)
127
+ return undefined;
128
+ return manifest.extensions.map((relativeEntry) => {
129
+ const resolvedEntry = resolve(packageDir, relativeEntry);
130
+ const missing = existsSync(resolvedEntry)
131
+ ? []
132
+ : [`extension entry does not exist: ${relativeEntry}`];
133
+ return candidate(source, origin, packageDir, resolvedEntry, manifest, missing);
134
+ });
135
+ }
136
+ function indexEntry(dir) {
137
+ for (const name of ["index.ts", "index.js", "index.mjs"]) {
138
+ const fullPath = join(dir, name);
139
+ if (existsSync(fullPath))
140
+ return fullPath;
141
+ }
142
+ return undefined;
143
+ }
144
+ function discoverDirectory(source, origin, dir) {
145
+ const out = [];
146
+ if (!existsSync(dir))
147
+ return out;
148
+ let stat;
149
+ try {
150
+ stat = statSync(dir);
151
+ }
152
+ catch {
153
+ return out;
154
+ }
155
+ if (!stat.isDirectory())
156
+ return out;
157
+ let entries = [];
158
+ try {
159
+ entries = readdirSync(dir);
160
+ }
161
+ catch {
162
+ return out;
163
+ }
164
+ entries.sort();
165
+ for (const entry of entries) {
166
+ const fullPath = join(dir, entry);
167
+ let entryStat;
168
+ try {
169
+ entryStat = statSync(fullPath);
170
+ }
171
+ catch {
172
+ continue;
173
+ }
174
+ if (entryStat.isFile() && isExtensionFile(fullPath)) {
175
+ out.push(candidate(source, origin, fullPath, fullPath));
176
+ continue;
177
+ }
178
+ if (!entryStat.isDirectory())
179
+ continue;
180
+ const packaged = packageCandidates(source, origin, fullPath);
181
+ if (packaged !== undefined) {
182
+ out.push(...packaged);
183
+ continue;
184
+ }
185
+ const index = indexEntry(fullPath);
186
+ if (index)
187
+ out.push(candidate(source, origin, fullPath, index));
188
+ }
189
+ return out;
190
+ }
191
+ function discoverPath(source, origin, inputPath) {
192
+ if (!existsSync(inputPath))
193
+ return [];
194
+ let stat;
195
+ try {
196
+ stat = statSync(inputPath);
197
+ }
198
+ catch {
199
+ return [];
200
+ }
201
+ if (stat.isFile()) {
202
+ if (!isExtensionFile(inputPath))
203
+ return [];
204
+ return [candidate(source, origin, inputPath, inputPath)];
205
+ }
206
+ if (stat.isDirectory()) {
207
+ const packaged = packageCandidates(source, origin, inputPath);
208
+ if (packaged !== undefined)
209
+ return packaged;
210
+ const index = indexEntry(inputPath);
211
+ if (index)
212
+ return [candidate(source, origin, inputPath, index)];
213
+ return discoverDirectory(source, origin, inputPath);
214
+ }
215
+ return [];
216
+ }
217
+ function settingsExtensionPaths(settingsPath) {
218
+ const raw = readJson(settingsPath);
219
+ if (!isRecord(raw))
220
+ return [];
221
+ const extensions = raw.extensions;
222
+ if (!Array.isArray(extensions))
223
+ return [];
224
+ return extensions
225
+ .filter((entry) => typeof entry === "string")
226
+ .map((entry) => resolve(dirname(settingsPath), entry));
227
+ }
228
+ function uniqueIds(entries) {
229
+ const seen = new Map();
230
+ return entries.map((entry) => {
231
+ const count = seen.get(entry.id) ?? 0;
232
+ seen.set(entry.id, count + 1);
233
+ if (count === 0)
234
+ return entry;
235
+ return {
236
+ ...entry,
237
+ id: `${entry.id}:${basename(stripExtension(entry.entryPath))}`,
238
+ };
239
+ });
240
+ }
241
+ export function discoverExtensions(options = {}) {
242
+ const out = [];
243
+ const cwd = options.cwd ? resolve(options.cwd) : undefined;
244
+ for (const cliPath of options.cliPaths ?? []) {
245
+ out.push(...discoverPath("cli", "cli", cliPath));
246
+ }
247
+ if (cwd) {
248
+ out.push(...discoverDirectory("project", "pi project", join(cwd, ".pi", "extensions")));
249
+ }
250
+ if (options.agentDir) {
251
+ out.push(...discoverDirectory("user", "pi global", join(options.agentDir, "extensions")));
252
+ }
253
+ // Settings entries come after extension directories so directory discovery
254
+ // wins duplicate-resolution ties.
255
+ if (options.agentDir) {
256
+ for (const path of settingsExtensionPaths(join(options.agentDir, "settings.json"))) {
257
+ out.push(...discoverPath("user", "pi global settings", path));
258
+ }
259
+ }
260
+ if (cwd) {
261
+ for (const path of settingsExtensionPaths(join(cwd, ".pi", "settings.json"))) {
262
+ out.push(...discoverPath("project", "pi project settings", path));
263
+ }
264
+ }
265
+ // Atom-native directories are the lowest-precedence discovery source.
266
+ if (options.userDir) {
267
+ out.push(...discoverDirectory("user", "atom global", options.userDir));
268
+ }
269
+ if (options.projectDir) {
270
+ out.push(...discoverDirectory("project", "atom project", options.projectDir));
271
+ }
272
+ for (const root of options.packageRoots ?? []) {
273
+ out.push(...discoverDirectory("package", "package", root));
274
+ }
275
+ const seen = new Set();
276
+ const deduped = out.filter((entry) => {
277
+ const key = resolve(entry.entryPath);
278
+ if (seen.has(key))
279
+ return false;
280
+ seen.add(key);
281
+ return true;
282
+ });
283
+ const trustKey = cwd ?? (options.projectDir ? resolve(options.projectDir) : undefined);
284
+ const trusted = new Set((options.trustedProjects ?? []).map((path) => resolve(path)));
285
+ const denied = new Set((options.deniedProjects ?? []).map((path) => resolve(path)));
286
+ const resolved = uniqueIds(deduped).map((entry) => {
287
+ if (entry.source !== "project") {
288
+ return { ...entry, trusted: true };
289
+ }
290
+ if (trustKey && denied.has(trustKey)) {
291
+ return {
292
+ ...entry,
293
+ trusted: false,
294
+ skipReason: "project extensions are denied",
295
+ };
296
+ }
297
+ if (trustKey && trusted.has(trustKey)) {
298
+ return { ...entry, trusted: true, skipReason: undefined };
299
+ }
300
+ return {
301
+ ...entry,
302
+ trusted: false,
303
+ skipReason: "project is not trusted",
304
+ };
305
+ });
306
+ return resolved;
307
+ }
308
+ export function formatExtensionDiscovery(extensions) {
309
+ if (extensions.length === 0)
310
+ return "No extensions found.";
311
+ return extensions
312
+ .map((extension) => {
313
+ const status = extension.errors.length > 0
314
+ ? `invalid: ${extension.errors.join("; ")}`
315
+ : extension.skipReason
316
+ ? `skipped: ${extension.skipReason}`
317
+ : "ok";
318
+ const manifestName = extension.manifest?.name;
319
+ const label = manifestName
320
+ ? `${manifestName} (${extension.id})`
321
+ : extension.id;
322
+ return `${extension.source}\t${label}\t${extension.entryPath}\t${status}`;
323
+ })
324
+ .join("\n");
325
+ }
326
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/extensions/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { type DiscoveredExtension } from "./discovery.js";
2
+ import { createExtensionRegistries } from "./api.js";
3
+ import type { ExtensionContext } from "./types.js";
4
+ import type { AtomEvent } from "./types.js";
5
+ export interface ExtensionLoaderOptions {
6
+ cliPaths?: string[];
7
+ hasUI?: boolean;
8
+ uiFactory?: (registries: ReturnType<typeof createExtensionRegistries>, ctx: ExtensionContext) => ExtensionContext["ui"];
9
+ userDir?: string;
10
+ cwd?: string;
11
+ agentDir?: string;
12
+ projectDir?: string;
13
+ packageRoots?: string[];
14
+ trustedProjects?: string[];
15
+ deniedProjects?: string[];
16
+ onLifecycleEvent?: (event: {
17
+ type: AtomEvent;
18
+ extensionId: string;
19
+ error?: string;
20
+ }) => void;
21
+ }
22
+ export interface LoadedExtension {
23
+ id: string;
24
+ source: string;
25
+ origin?: string;
26
+ entryPath: string;
27
+ status: "loaded" | "error" | "skipped";
28
+ error?: string;
29
+ registries: ReturnType<typeof createExtensionRegistries>;
30
+ context?: ExtensionContext;
31
+ }
32
+ export interface ExtensionReport {
33
+ id: string;
34
+ source: string;
35
+ origin?: string;
36
+ version?: string;
37
+ entryPath: string;
38
+ status: "loaded" | "error" | "skipped" | "discovered";
39
+ error?: string;
40
+ trusted: boolean;
41
+ toolCount: number;
42
+ commandCount: number;
43
+ }
44
+ export interface ExtensionLifecycleEvent {
45
+ type: AtomEvent;
46
+ extensionId: string;
47
+ error?: string;
48
+ }
49
+ export declare class ExtensionLoader {
50
+ private options;
51
+ private extensions;
52
+ private discovered;
53
+ private lifecycle;
54
+ private jiti;
55
+ constructor(options?: ExtensionLoaderOptions);
56
+ private workspace;
57
+ private decisions;
58
+ discover(): DiscoveredExtension[];
59
+ private getJiti;
60
+ loadAll(): Promise<LoadedExtension[]>;
61
+ private recordLifecycle;
62
+ private emitToRegistries;
63
+ list(): LoadedExtension[];
64
+ lifecycleEvents(): ExtensionLifecycleEvent[];
65
+ report(): ExtensionReport[];
66
+ doctor(): string;
67
+ unloadAll(): Promise<void>;
68
+ }