atom-lite 0.4.1 → 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 (88) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/dist/agent/loop.d.ts +9 -0
  4. package/dist/agent/loop.js +233 -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/app.js +373 -33
  14. package/dist/cli/app.js.map +1 -1
  15. package/dist/cli/commands.d.ts +3 -0
  16. package/dist/cli/commands.js +20 -5
  17. package/dist/cli/commands.js.map +1 -1
  18. package/dist/cli/main.js +2 -2
  19. package/dist/cli/main.js.map +1 -1
  20. package/dist/cli/mouse.js +4 -1
  21. package/dist/cli/mouse.js.map +1 -1
  22. package/dist/cli/stream-text.js +1 -0
  23. package/dist/cli/stream-text.js.map +1 -1
  24. package/dist/cli/theme.d.ts +1 -1
  25. package/dist/cli/theme.js +2 -0
  26. package/dist/cli/theme.js.map +1 -1
  27. package/dist/cli/transcript.d.ts +15 -1
  28. package/dist/cli/transcript.js +40 -1
  29. package/dist/cli/transcript.js.map +1 -1
  30. package/dist/cli/trust-prompt.d.ts +24 -0
  31. package/dist/cli/trust-prompt.js +89 -0
  32. package/dist/cli/trust-prompt.js.map +1 -0
  33. package/dist/config/defaults.d.ts +2 -0
  34. package/dist/config/defaults.js +2 -0
  35. package/dist/config/defaults.js.map +1 -1
  36. package/dist/config/load.js +4 -0
  37. package/dist/config/load.js.map +1 -1
  38. package/dist/config/paths.d.ts +2 -0
  39. package/dist/config/paths.js +12 -1
  40. package/dist/config/paths.js.map +1 -1
  41. package/dist/config/schema.d.ts +4 -0
  42. package/dist/config/schema.js +2 -0
  43. package/dist/config/schema.js.map +1 -1
  44. package/dist/context/manager.d.ts +17 -3
  45. package/dist/context/manager.js +129 -41
  46. package/dist/context/manager.js.map +1 -1
  47. package/dist/extensions/api.d.ts +51 -1
  48. package/dist/extensions/api.js +124 -6
  49. package/dist/extensions/api.js.map +1 -1
  50. package/dist/extensions/discovery.d.ts +16 -0
  51. package/dist/extensions/discovery.js +191 -108
  52. package/dist/extensions/discovery.js.map +1 -1
  53. package/dist/extensions/loader.d.ts +42 -1
  54. package/dist/extensions/loader.js +272 -32
  55. package/dist/extensions/loader.js.map +1 -1
  56. package/dist/extensions/session-manager.d.ts +44 -0
  57. package/dist/extensions/session-manager.js +137 -0
  58. package/dist/extensions/session-manager.js.map +1 -0
  59. package/dist/extensions/tool-adapter.d.ts +12 -0
  60. package/dist/extensions/tool-adapter.js +157 -0
  61. package/dist/extensions/tool-adapter.js.map +1 -0
  62. package/dist/extensions/trust.d.ts +2 -0
  63. package/dist/extensions/trust.js +32 -17
  64. package/dist/extensions/trust.js.map +1 -1
  65. package/dist/extensions/types.d.ts +45 -3
  66. package/dist/extensions/ui.d.ts +21 -0
  67. package/dist/extensions/ui.js +75 -0
  68. package/dist/extensions/ui.js.map +1 -0
  69. package/dist/index.d.ts +1 -0
  70. package/dist/index.js +1 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/mcp/stdio-transport.js +3 -20
  73. package/dist/mcp/stdio-transport.js.map +1 -1
  74. package/dist/runtime/scheduler.d.ts +4 -3
  75. package/dist/runtime/scheduler.js +7 -105
  76. package/dist/runtime/scheduler.js.map +1 -1
  77. package/dist/runtime/tool-executor.d.ts +18 -0
  78. package/dist/runtime/tool-executor.js +126 -0
  79. package/dist/runtime/tool-executor.js.map +1 -0
  80. package/dist/security/process.d.ts +10 -0
  81. package/dist/security/process.js +36 -0
  82. package/dist/security/process.js.map +1 -1
  83. package/dist/sessions/store.js +2 -3
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/tools/bash.js +6 -3
  86. package/dist/tools/bash.js.map +1 -1
  87. package/dist/tools/types.d.ts +6 -0
  88. package/package.json +3 -1
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readdirSync, readFileSync, statSync, } from "node:fs";
2
- import { basename, join, resolve } from "node:path";
3
- const EXTENSION_EXTENSIONS = new Set([".js", ".mjs"]);
2
+ import { basename, dirname, join, resolve } from "node:path";
3
+ const EXTENSION_EXTENSIONS = new Set([".ts", ".js", ".mjs"]);
4
4
  function readJson(path) {
5
5
  try {
6
6
  return JSON.parse(readFileSync(path, "utf8"));
@@ -9,30 +9,48 @@ function readJson(path) {
9
9
  return undefined;
10
10
  }
11
11
  }
12
- function isExtensionFile(path) {
12
+ function extensionSuffix(path) {
13
13
  const lower = path.toLowerCase();
14
- return lower.endsWith(".js") || lower.endsWith(".mjs");
14
+ for (const suffix of EXTENSION_EXTENSIONS) {
15
+ if (lower.endsWith(suffix))
16
+ return suffix;
17
+ }
18
+ return undefined;
15
19
  }
16
- function validateManifest(raw, packagePath) {
17
- const errors = [];
18
- if (!raw || typeof raw !== "object") {
19
- return { errors: ["manifest must be an object"] };
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: [] };
20
38
  }
21
- const record = raw;
22
- const atom = record.atom;
23
- if (!atom || typeof atom !== "object") {
24
- return { errors: ["missing or invalid \"atom\" field"] };
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`] };
25
44
  }
26
- const atomRecord = atom;
27
- const extensionsRaw = atomRecord.extensions;
45
+ const extensionsRaw = declaration.extensions;
28
46
  if (!Array.isArray(extensionsRaw) || extensionsRaw.length === 0) {
29
- errors.push("\"atom.extensions\" must be a non-empty array of strings");
47
+ errors.push(`"${field}.extensions" must be a non-empty array of strings`);
30
48
  }
31
49
  const extensions = [];
32
50
  if (Array.isArray(extensionsRaw)) {
33
51
  for (const entry of extensionsRaw) {
34
52
  if (typeof entry !== "string" || entry.trim() === "") {
35
- errors.push("\"atom.extensions\" entries must be non-empty strings");
53
+ errors.push(`"${field}.extensions" entries must be non-empty strings`);
36
54
  }
37
55
  else {
38
56
  extensions.push(entry);
@@ -40,14 +58,16 @@ function validateManifest(raw, packagePath) {
40
58
  }
41
59
  }
42
60
  const capabilities = [];
43
- if (atomRecord.capabilities !== undefined) {
44
- if (!Array.isArray(atomRecord.capabilities)) {
45
- errors.push("\"atom.capabilities\" must be an array of strings");
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`);
46
66
  }
47
67
  else {
48
- for (const capability of atomRecord.capabilities) {
68
+ for (const capability of capabilitiesRaw) {
49
69
  if (typeof capability !== "string") {
50
- errors.push("\"atom.capabilities\" entries must be strings");
70
+ errors.push(`"${field}.capabilities" entries must be strings`);
51
71
  }
52
72
  else {
53
73
  capabilities.push(capability);
@@ -56,43 +76,72 @@ function validateManifest(raw, packagePath) {
56
76
  }
57
77
  }
58
78
  let engines;
59
- if (atomRecord.engines !== undefined) {
60
- if (!atomRecord.engines || typeof atomRecord.engines !== "object") {
61
- errors.push("\"atom.engines\" must be an object");
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');
62
87
  }
63
88
  else {
64
- const engineRecord = atomRecord.engines;
65
- if (engineRecord["atom-lite"] !== undefined &&
66
- typeof engineRecord["atom-lite"] !== "string") {
67
- errors.push("\"atom.engines.atom-lite\" must be a string");
68
- }
69
- else {
70
- engines = { "atom-lite": engineRecord["atom-lite"] };
71
- }
89
+ engines = { "atom-lite": enginesRaw["atom-lite"] };
72
90
  }
73
91
  }
74
92
  if (errors.length > 0)
75
93
  return { errors };
76
- const manifest = {
77
- name: typeof record.name === "string" ? record.name : undefined,
78
- version: typeof record.version === "string" ? record.version : undefined,
79
- extensions,
80
- capabilities,
81
- engines,
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: [],
82
104
  };
83
- return { manifest, errors: [] };
84
105
  }
85
- function candidate(source, rootPath, entryPath, manifest, errors = []) {
106
+ function candidate(source, origin, rootPath, entryPath, manifest, errors = []) {
86
107
  return {
87
- id: basename(rootPath).replace(/\.(js|mjs)$/i, ""),
108
+ id: basename(rootPath).replace(/\.(ts|js|mjs)$/i, ""),
88
109
  source,
110
+ origin,
89
111
  rootPath,
90
112
  entryPath: resolve(entryPath),
91
113
  manifest,
92
114
  errors,
115
+ trusted: source !== "project",
93
116
  };
94
117
  }
95
- function discoverDirectory(source, dir) {
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) {
96
145
  const out = [];
97
146
  if (!existsSync(dir))
98
147
  return out;
@@ -123,46 +172,23 @@ function discoverDirectory(source, dir) {
123
172
  continue;
124
173
  }
125
174
  if (entryStat.isFile() && isExtensionFile(fullPath)) {
126
- out.push(candidate(source, fullPath, fullPath));
175
+ out.push(candidate(source, origin, fullPath, fullPath));
127
176
  continue;
128
177
  }
129
178
  if (!entryStat.isDirectory())
130
179
  continue;
131
- const packageJsonPath = join(fullPath, "package.json");
132
- if (existsSync(packageJsonPath)) {
133
- const rawPackage = readJson(packageJsonPath);
134
- const { manifest, errors } = validateManifest(rawPackage, packageJsonPath);
135
- if (errors.length > 0) {
136
- out.push(candidate(source, fullPath, fullPath, undefined, errors));
137
- continue;
138
- }
139
- if (manifest) {
140
- for (const relativeEntry of manifest.extensions) {
141
- const resolvedEntry = resolve(fullPath, relativeEntry);
142
- if (!existsSync(resolvedEntry)) {
143
- out.push(candidate(source, fullPath, resolvedEntry, manifest, [
144
- `extension entry does not exist: ${relativeEntry}`,
145
- ]));
146
- }
147
- else {
148
- out.push(candidate(source, fullPath, resolvedEntry, manifest));
149
- }
150
- }
151
- continue;
152
- }
153
- }
154
- const indexJs = join(fullPath, "index.js");
155
- const indexMjs = join(fullPath, "index.mjs");
156
- if (existsSync(indexJs)) {
157
- out.push(candidate(source, fullPath, indexJs));
158
- }
159
- else if (existsSync(indexMjs)) {
160
- out.push(candidate(source, fullPath, indexMjs));
180
+ const packaged = packageCandidates(source, origin, fullPath);
181
+ if (packaged !== undefined) {
182
+ out.push(...packaged);
183
+ continue;
161
184
  }
185
+ const index = indexEntry(fullPath);
186
+ if (index)
187
+ out.push(candidate(source, origin, fullPath, index));
162
188
  }
163
189
  return out;
164
190
  }
165
- function discoverPath(source, inputPath) {
191
+ function discoverPath(source, origin, inputPath) {
166
192
  if (!existsSync(inputPath))
167
193
  return [];
168
194
  let stat;
@@ -175,54 +201,109 @@ function discoverPath(source, inputPath) {
175
201
  if (stat.isFile()) {
176
202
  if (!isExtensionFile(inputPath))
177
203
  return [];
178
- return [candidate(source, inputPath, inputPath)];
204
+ return [candidate(source, origin, inputPath, inputPath)];
179
205
  }
180
206
  if (stat.isDirectory()) {
181
- // A directory with a package manifest is treated as one package.
182
- const packageJsonPath = join(inputPath, "package.json");
183
- if (existsSync(packageJsonPath)) {
184
- const rawPackage = readJson(packageJsonPath);
185
- const { manifest, errors } = validateManifest(rawPackage, packageJsonPath);
186
- if (errors.length > 0) {
187
- return [candidate(source, inputPath, inputPath, undefined, errors)];
188
- }
189
- if (manifest) {
190
- return manifest.extensions.map((relativeEntry) => {
191
- const resolvedEntry = resolve(inputPath, relativeEntry);
192
- const errors = existsSync(resolvedEntry)
193
- ? []
194
- : [`extension entry does not exist: ${relativeEntry}`];
195
- return candidate(source, inputPath, resolvedEntry, manifest, errors);
196
- });
197
- }
198
- }
199
- const indexJs = join(inputPath, "index.js");
200
- const indexMjs = join(inputPath, "index.mjs");
201
- if (existsSync(indexJs)) {
202
- return [candidate(source, inputPath, indexJs)];
203
- }
204
- if (existsSync(indexMjs)) {
205
- return [candidate(source, inputPath, indexMjs)];
206
- }
207
- return discoverDirectory(source, inputPath);
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);
208
214
  }
209
215
  return [];
210
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
+ }
211
241
  export function discoverExtensions(options = {}) {
212
242
  const out = [];
243
+ const cwd = options.cwd ? resolve(options.cwd) : undefined;
213
244
  for (const cliPath of options.cliPaths ?? []) {
214
- out.push(...discoverPath("cli", cliPath));
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")));
215
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.
216
266
  if (options.userDir) {
217
- out.push(...discoverDirectory("user", options.userDir));
267
+ out.push(...discoverDirectory("user", "atom global", options.userDir));
218
268
  }
219
269
  if (options.projectDir) {
220
- out.push(...discoverDirectory("project", options.projectDir));
270
+ out.push(...discoverDirectory("project", "atom project", options.projectDir));
221
271
  }
222
272
  for (const root of options.packageRoots ?? []) {
223
- out.push(...discoverDirectory("package", root));
273
+ out.push(...discoverDirectory("package", "package", root));
224
274
  }
225
- return out;
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;
226
307
  }
227
308
  export function formatExtensionDiscovery(extensions) {
228
309
  if (extensions.length === 0)
@@ -231,7 +312,9 @@ export function formatExtensionDiscovery(extensions) {
231
312
  .map((extension) => {
232
313
  const status = extension.errors.length > 0
233
314
  ? `invalid: ${extension.errors.join("; ")}`
234
- : "ok";
315
+ : extension.skipReason
316
+ ? `skipped: ${extension.skipReason}`
317
+ : "ok";
235
318
  const manifestName = extension.manifest?.name;
236
319
  const label = manifestName
237
320
  ? `${manifestName} (${extension.id})`
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/extensions/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/extensions/discovery.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,68 @@
1
1
  import { type DiscoveredExtension } from "./discovery.js";
2
2
  import { createExtensionRegistries } from "./api.js";
3
+ import type { ExtensionContext } from "./types.js";
4
+ import type { AtomEvent } from "./types.js";
3
5
  export interface ExtensionLoaderOptions {
4
6
  cliPaths?: string[];
7
+ hasUI?: boolean;
8
+ uiFactory?: (registries: ReturnType<typeof createExtensionRegistries>, ctx: ExtensionContext) => ExtensionContext["ui"];
5
9
  userDir?: string;
10
+ cwd?: string;
11
+ agentDir?: string;
6
12
  projectDir?: string;
7
13
  packageRoots?: string[];
8
14
  trustedProjects?: string[];
15
+ deniedProjects?: string[];
16
+ onLifecycleEvent?: (event: {
17
+ type: AtomEvent;
18
+ extensionId: string;
19
+ error?: string;
20
+ }) => void;
9
21
  }
10
22
  export interface LoadedExtension {
11
23
  id: string;
12
24
  source: string;
25
+ origin?: string;
13
26
  entryPath: string;
14
27
  status: "loaded" | "error" | "skipped";
15
28
  error?: string;
16
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;
17
48
  }
18
49
  export declare class ExtensionLoader {
19
50
  private options;
20
51
  private extensions;
52
+ private discovered;
53
+ private lifecycle;
54
+ private jiti;
21
55
  constructor(options?: ExtensionLoaderOptions);
22
- private trustedProjectSet;
56
+ private workspace;
57
+ private decisions;
23
58
  discover(): DiscoveredExtension[];
59
+ private getJiti;
24
60
  loadAll(): Promise<LoadedExtension[]>;
61
+ private recordLifecycle;
62
+ private emitToRegistries;
25
63
  list(): LoadedExtension[];
64
+ lifecycleEvents(): ExtensionLifecycleEvent[];
65
+ report(): ExtensionReport[];
66
+ doctor(): string;
26
67
  unloadAll(): Promise<void>;
27
68
  }