@openruntime/cli 0.1.0

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 (77) hide show
  1. package/assets/auth-connector/icon-128.png +0 -0
  2. package/assets/auth-connector/icon-16.png +0 -0
  3. package/assets/auth-connector/icon-32.png +0 -0
  4. package/assets/auth-connector/icon-48.png +0 -0
  5. package/dist/args.d.ts +9 -0
  6. package/dist/args.d.ts.map +1 -0
  7. package/dist/args.js +52 -0
  8. package/dist/args.js.map +1 -0
  9. package/dist/auth-connector.d.ts +66 -0
  10. package/dist/auth-connector.d.ts.map +1 -0
  11. package/dist/auth-connector.js +1031 -0
  12. package/dist/auth-connector.js.map +1 -0
  13. package/dist/bridge-process.d.ts +64 -0
  14. package/dist/bridge-process.d.ts.map +1 -0
  15. package/dist/bridge-process.js +228 -0
  16. package/dist/bridge-process.js.map +1 -0
  17. package/dist/browser.d.ts +25 -0
  18. package/dist/browser.d.ts.map +1 -0
  19. package/dist/browser.js +180 -0
  20. package/dist/browser.js.map +1 -0
  21. package/dist/client.d.ts +21 -0
  22. package/dist/client.d.ts.map +1 -0
  23. package/dist/client.js +132 -0
  24. package/dist/client.js.map +1 -0
  25. package/dist/command-definition.d.ts +19 -0
  26. package/dist/command-definition.d.ts.map +1 -0
  27. package/dist/command-definition.js +42 -0
  28. package/dist/command-definition.js.map +1 -0
  29. package/dist/command-skill.d.ts +5 -0
  30. package/dist/command-skill.d.ts.map +1 -0
  31. package/dist/command-skill.js +25 -0
  32. package/dist/command-skill.js.map +1 -0
  33. package/dist/entry.d.ts +2 -0
  34. package/dist/entry.d.ts.map +1 -0
  35. package/dist/entry.js +16 -0
  36. package/dist/entry.js.map +1 -0
  37. package/dist/extension-api.d.ts +85 -0
  38. package/dist/extension-api.d.ts.map +1 -0
  39. package/dist/extension-api.js +313 -0
  40. package/dist/extension-api.js.map +1 -0
  41. package/dist/extensions/types.d.ts +3 -0
  42. package/dist/extensions/types.d.ts.map +1 -0
  43. package/dist/extensions/types.js +2 -0
  44. package/dist/extensions/types.js.map +1 -0
  45. package/dist/external-extensions.d.ts +19 -0
  46. package/dist/external-extensions.d.ts.map +1 -0
  47. package/dist/external-extensions.js +168 -0
  48. package/dist/external-extensions.js.map +1 -0
  49. package/dist/help.d.ts +17 -0
  50. package/dist/help.d.ts.map +1 -0
  51. package/dist/help.js +214 -0
  52. package/dist/help.js.map +1 -0
  53. package/dist/index.d.ts +100 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +1579 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/next-browser-profile-preload.d.ts +2 -0
  58. package/dist/next-browser-profile-preload.d.ts.map +1 -0
  59. package/dist/next-browser-profile-preload.js +391 -0
  60. package/dist/next-browser-profile-preload.js.map +1 -0
  61. package/dist/operation-log.d.ts +23 -0
  62. package/dist/operation-log.d.ts.map +1 -0
  63. package/dist/operation-log.js +76 -0
  64. package/dist/operation-log.js.map +1 -0
  65. package/dist/output.d.ts +42 -0
  66. package/dist/output.d.ts.map +1 -0
  67. package/dist/output.js +111 -0
  68. package/dist/output.js.map +1 -0
  69. package/dist/profile.d.ts +56 -0
  70. package/dist/profile.d.ts.map +1 -0
  71. package/dist/profile.js +414 -0
  72. package/dist/profile.js.map +1 -0
  73. package/dist/record.d.ts +17 -0
  74. package/dist/record.d.ts.map +1 -0
  75. package/dist/record.js +1494 -0
  76. package/dist/record.js.map +1 -0
  77. package/package.json +46 -0
@@ -0,0 +1,313 @@
1
+ import { OPEN_RUNTIME_SESSION_QUERY_PARAM } from "@openruntime/core";
2
+ import { createConsoleLogScript, createGetWindowScript, createWaitEvalScript, parseBrowserJsonOutput } from "./browser.js";
3
+ import { canAutoStartBridge, ensureBridge as ensureOpenRuntimeBridge } from "./bridge-process.js";
4
+ import { fetchInputOptions, fetchRuntimeResource, fetchRuntimes, normalizeBridgeUrl, runRuntimeAction, selectRuntime, waitForRuntime } from "./client.js";
5
+ import { getNumberOption, getOptionValue } from "./args.js";
6
+ import { createError } from "./output.js";
7
+ export function createOpenRuntimeExtensionApi(options) {
8
+ const bridgeUrl = createBridgeUrl(options.args);
9
+ const runtimeSelector = createRuntimeSelector(options.args);
10
+ const ensureLocalBridge = async (ensureOptions = {}) => {
11
+ if (!canAutoStartBridge(bridgeUrl)) {
12
+ return {
13
+ bridgeUrl,
14
+ status: "remote"
15
+ };
16
+ }
17
+ return await ensureOpenRuntimeBridge({
18
+ fetcher: options.fetcher,
19
+ bridgeUrl,
20
+ starter: options.bridgeStarter,
21
+ ...createOptionalNumberProperty("port", ensureOptions.port ?? getNumberOption(options.args, "port")),
22
+ ...(options.bridgeStateStore === undefined ? {} : { stateStore: options.bridgeStateStore }),
23
+ ...(ensureOptions.timeout === undefined ? {} : { timeout: ensureOptions.timeout })
24
+ });
25
+ };
26
+ const listRuntimes = async () => {
27
+ await ensureLocalBridge();
28
+ return await fetchRuntimes(options.fetcher, bridgeUrl);
29
+ };
30
+ const chooseRuntime = async (selector = runtimeSelector) => {
31
+ if (!hasRuntimeSelectorValue(selector) && options.openContext === undefined) {
32
+ throw createOpenContextRequiredError();
33
+ }
34
+ return selectRuntime(await listRuntimes(), selector);
35
+ };
36
+ const fetchResource = async (resource, query, selector) => {
37
+ const runtime = await chooseRuntime(selector);
38
+ return await fetchRuntimeResource(options.fetcher, bridgeUrl, runtime, resource, createSearchParams(query));
39
+ };
40
+ return {
41
+ targets: async (query) => await fetchResource("targets", query, undefined),
42
+ snapshot: async (query) => await fetchResource("snapshot", query, undefined),
43
+ events: async (query) => await fetchResource("events", query, undefined),
44
+ actions: async (query) => await fetchResource("actions", query, undefined),
45
+ inputOptions: async (actionName, inputName, inputOptions = {}) => {
46
+ const runtime = await chooseRuntime();
47
+ return await fetchInputOptions(options.fetcher, bridgeUrl, runtime, actionName, inputName, inputOptions.payload, inputOptions.timeout);
48
+ },
49
+ runAction: async (actionName, payload) => {
50
+ const runtime = await chooseRuntime();
51
+ return await runRuntimeAction(options.fetcher, bridgeUrl, runtime, actionName, payload);
52
+ },
53
+ waitFor: async (targetId, status, waitOptions = {}) => {
54
+ const runtime = await chooseRuntime();
55
+ return await waitForRuntime(options.fetcher, bridgeUrl, runtime, targetId, status, waitOptions.timeout, waitOptions.where);
56
+ },
57
+ browser: createOpenRuntimeBrowserApi({
58
+ browserRunner: options.browserRunner,
59
+ ...(options.openContext === undefined ? {} : { openContext: options.openContext })
60
+ })
61
+ };
62
+ }
63
+ function createOpenRuntimeBrowserApi(options) {
64
+ const runText = async (args) => {
65
+ if (options.openContext === undefined) {
66
+ throw createOpenContextRequiredError();
67
+ }
68
+ const result = await options.browserRunner.run(args);
69
+ if (result.exitCode !== 0) {
70
+ throw createError({
71
+ code: "PAGE_OPERATION_FAILED",
72
+ kind: "browser",
73
+ message: result.stderr.trim() || result.stdout.trim() || `Browser command "${args[0] ?? "unknown"}" failed.`,
74
+ details: {
75
+ command: args,
76
+ ...(result.stdout.trim().length === 0 ? {} : { stdout: result.stdout.trim() }),
77
+ ...(result.stderr.trim().length === 0 ? {} : { stderr: result.stderr.trim() })
78
+ }
79
+ });
80
+ }
81
+ return result.stdout.trim();
82
+ };
83
+ const runJson = async (args) => {
84
+ const output = await runText(args);
85
+ return parseBrowserJsonOutput(output);
86
+ };
87
+ return {
88
+ pageSnapshot: async () => await runJson(["snapshot"]),
89
+ click: async (target) => await runText(["click", target]),
90
+ fill: async (target, value) => await runText(["fill", target, value]),
91
+ eval: async (script) => await runJson(["eval", script]),
92
+ evalFile: async (path) => await runJson(["eval", "--file", path]),
93
+ waitEval: async (script, waitOptions = {}) => await waitForBrowserEval(options.browserRunner, script, waitOptions.timeout),
94
+ getWindow: async (path) => await runJson(["eval", createGetWindowScript(path)]),
95
+ screenshot: async (name, screenshotOptions = {}) => {
96
+ const args = ["screenshot"];
97
+ if (name !== undefined && name.length > 0) {
98
+ args.push(name);
99
+ }
100
+ if (screenshotOptions.fullPage === true) {
101
+ args.push("--full-page");
102
+ }
103
+ return await runText(args);
104
+ },
105
+ network: async (networkOptions = {}) => {
106
+ const output = await runText(["network"]);
107
+ return networkOptions.url === undefined
108
+ ? normalizeNetworkOutput(output)
109
+ : filterNetworkOutputByUrl(output, networkOptions.url);
110
+ },
111
+ console: async (consoleOptions = {}) => {
112
+ const levels = normalizeConsoleLevels(consoleOptions.levels);
113
+ const entries = filterConsoleEntries(parseConsoleEntries(await runJson(["eval", createConsoleLogScript()])), {
114
+ ...(levels === undefined ? {} : { levels }),
115
+ ...(consoleOptions.query === undefined ? {} : { query: consoleOptions.query }),
116
+ ...(consoleOptions.limit === undefined ? {} : { limit: consoleOptions.limit })
117
+ });
118
+ return {
119
+ entries,
120
+ summary: summarizeConsoleEntries(entries)
121
+ };
122
+ },
123
+ };
124
+ }
125
+ function hasRuntimeSelectorValue(selector) {
126
+ return selector.runtimeId !== undefined || selector.sessionId !== undefined || selector.url !== undefined;
127
+ }
128
+ function createOpenContextRequiredError() {
129
+ return createError({
130
+ code: "OPEN_CONTEXT_REQUIRED",
131
+ kind: "validation",
132
+ message: "No opened page context was found.",
133
+ retryable: false,
134
+ hint: "Run `openruntime open <url>` before running page commands."
135
+ });
136
+ }
137
+ function createRuntimeSelector(args) {
138
+ const selector = {};
139
+ const runtimeId = getOptionValue(args, "runtime");
140
+ const sessionId = getOptionValue(args, "session");
141
+ const url = getOptionValue(args, "url");
142
+ if (runtimeId !== undefined)
143
+ selector.runtimeId = runtimeId;
144
+ if (sessionId !== undefined)
145
+ selector.sessionId = sessionId;
146
+ if (url !== undefined)
147
+ selector.url = withOpenRuntimeSession(url, sessionId);
148
+ return selector;
149
+ }
150
+ function createBridgeUrl(args) {
151
+ const bridge = getOptionValue(args, "bridge");
152
+ if (bridge !== undefined) {
153
+ return normalizeBridgeUrl(bridge);
154
+ }
155
+ const port = getNumberOption(args, "port");
156
+ if (port !== undefined) {
157
+ return `http://localhost:${port}`;
158
+ }
159
+ return normalizeBridgeUrl(undefined);
160
+ }
161
+ function createSearchParams(query) {
162
+ const params = new URLSearchParams();
163
+ if (query === undefined)
164
+ return params;
165
+ for (const [rawName, rawValue] of Object.entries(query)) {
166
+ const name = normalizeQueryName(rawName);
167
+ const values = Array.isArray(rawValue) ? rawValue : [rawValue];
168
+ for (const value of values) {
169
+ if (value === undefined)
170
+ continue;
171
+ params.append(name, value === null ? "null" : String(value));
172
+ }
173
+ }
174
+ return params;
175
+ }
176
+ function normalizeQueryName(name) {
177
+ if (name === "targetId")
178
+ return "target-id";
179
+ return name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
180
+ }
181
+ function withOpenRuntimeSession(input, sessionId) {
182
+ if (sessionId === undefined || sessionId.length === 0)
183
+ return input;
184
+ try {
185
+ const url = new URL(input);
186
+ url.searchParams.set(OPEN_RUNTIME_SESSION_QUERY_PARAM, sessionId);
187
+ return url.toString();
188
+ }
189
+ catch {
190
+ return input;
191
+ }
192
+ }
193
+ async function waitForBrowserEval(browserRunner, script, timeout) {
194
+ const deadline = Date.now() + (timeout ?? 5000);
195
+ let lastValue;
196
+ let lastError;
197
+ while (Date.now() <= deadline) {
198
+ const result = await browserRunner.run(["eval", createWaitEvalScript(script)]);
199
+ if (result.exitCode === 0) {
200
+ try {
201
+ lastValue = parseBrowserJsonOutput(result.stdout);
202
+ if (lastValue === true) {
203
+ return {
204
+ success: true,
205
+ condition: { script },
206
+ value: lastValue
207
+ };
208
+ }
209
+ }
210
+ catch (error) {
211
+ lastError = error instanceof Error ? error.message : String(error);
212
+ }
213
+ }
214
+ else {
215
+ lastError = result.stderr.trim() || result.stdout.trim();
216
+ }
217
+ await sleep(100);
218
+ }
219
+ return {
220
+ success: false,
221
+ condition: { script },
222
+ ...(lastValue === undefined ? {} : { value: lastValue }),
223
+ reason: lastError === undefined
224
+ ? "Condition did not become true before timeout."
225
+ : `Condition did not become true before timeout. Last error: ${lastError}`
226
+ };
227
+ }
228
+ function parseConsoleEntries(value) {
229
+ if (!Array.isArray(value))
230
+ return [];
231
+ return value.flatMap((entry) => {
232
+ if (entry === null || typeof entry !== "object")
233
+ return [];
234
+ const item = entry;
235
+ const level = normalizeConsoleLevel(item.level);
236
+ if (level === undefined)
237
+ return [];
238
+ return [{
239
+ level,
240
+ args: typeof item.args === "string" ? item.args : String(item.args ?? ""),
241
+ ...(typeof item.timestamp === "number" ? { timestamp: item.timestamp } : {})
242
+ }];
243
+ });
244
+ }
245
+ function normalizeConsoleLevels(levels) {
246
+ if (levels === undefined)
247
+ return undefined;
248
+ return levels instanceof Set ? levels : new Set(levels);
249
+ }
250
+ function normalizeConsoleLevel(value) {
251
+ if (typeof value !== "string")
252
+ return undefined;
253
+ const normalized = value.toLowerCase();
254
+ if (normalized === "warning")
255
+ return "warn";
256
+ if (normalized === "log" || normalized === "info" || normalized === "warn" || normalized === "error") {
257
+ return normalized;
258
+ }
259
+ return undefined;
260
+ }
261
+ function filterConsoleEntries(entries, options) {
262
+ const normalizedQuery = options.query?.toLowerCase();
263
+ const filtered = entries.filter((entry) => (options.levels === undefined || options.levels.has(entry.level)) &&
264
+ (normalizedQuery === undefined ||
265
+ entry.level.includes(normalizedQuery) ||
266
+ entry.args.toLowerCase().includes(normalizedQuery)));
267
+ if (options.limit === undefined || options.limit < 0)
268
+ return filtered;
269
+ return filtered.slice(-options.limit);
270
+ }
271
+ function summarizeConsoleEntries(entries) {
272
+ const summary = {
273
+ total: entries.length,
274
+ log: 0,
275
+ info: 0,
276
+ warn: 0,
277
+ error: 0
278
+ };
279
+ for (const entry of entries) {
280
+ summary[entry.level] += 1;
281
+ }
282
+ return summary;
283
+ }
284
+ function filterNetworkOutputByUrl(output, query) {
285
+ const normalized = normalizeNetworkOutput(output);
286
+ if (normalized.trim() === "(no requests)")
287
+ return normalized;
288
+ const lines = normalized.split(/\r?\n/);
289
+ const filtered = lines.filter((line) => {
290
+ if (line.length === 0 || line.startsWith("#"))
291
+ return true;
292
+ return getNetworkLineUrl(line)?.includes(query) ?? false;
293
+ });
294
+ return filtered.join("\n");
295
+ }
296
+ function normalizeNetworkOutput(output) {
297
+ return output.split(/\r?\n/).filter((line) => !line.includes("network <idx>")).join("\n");
298
+ }
299
+ function getNetworkLineUrl(line) {
300
+ const parts = line.trim().split(/\s+/);
301
+ if (parts.length < 6)
302
+ return undefined;
303
+ return parts[5];
304
+ }
305
+ function createOptionalNumberProperty(name, value) {
306
+ return value === undefined ? {} : { [name]: value };
307
+ }
308
+ function sleep(milliseconds) {
309
+ return new Promise((resolve) => {
310
+ setTimeout(resolve, milliseconds);
311
+ });
312
+ }
313
+ //# sourceMappingURL=extension-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-api.js","sourceRoot":"","sources":["../src/extension-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { CliExtensionRunOptions, OpenRuntimeCliExtension } from "../index.js";
2
+ export type { OpenRuntimeCommandDefinition, ValidateCommandOptions } from "../index.js";
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extensions/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extensions/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { type CliCommandReference, type OpenRuntimeCliExtension } from "./index.js";
2
+ export interface ExtensionLoadRecord {
3
+ name: string;
4
+ source: "internal" | "external";
5
+ status: "loaded" | "skipped" | "failed";
6
+ path?: string;
7
+ reason?: string;
8
+ }
9
+ export interface ExternalExtensionLoadResult {
10
+ extensions: OpenRuntimeCliExtension[];
11
+ records: ExtensionLoadRecord[];
12
+ }
13
+ export declare function loadExternalCliExtensions(options: {
14
+ reservedNames: readonly string[];
15
+ env?: NodeJS.ProcessEnv;
16
+ }): Promise<ExternalExtensionLoadResult>;
17
+ export declare function createInternalExtensionRecords(extensions: readonly OpenRuntimeCliExtension[]): ExtensionLoadRecord[];
18
+ export declare function markExternalCommandReferences(references: readonly CliCommandReference[]): readonly CliCommandReference[];
19
+ //# sourceMappingURL=external-extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-extensions.d.ts","sourceRoot":"","sources":["../src/external-extensions.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAUD,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAmDvC;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE,GAAG,mBAAmB,EAAE,CAMpH;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,SAAS,mBAAmB,EAAE,GACzC,SAAS,mBAAmB,EAAE,CAKhC"}
@@ -0,0 +1,168 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { readdir } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve } from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+ import {} from "./index.js";
7
+ import { validateCommand } from "./command-definition.js";
8
+ const DEFAULT_EXTERNAL_COMMAND_DIR = join(homedir(), ".openruntime", "commands");
9
+ const EXTERNAL_COMMAND_DIR_ENV = "OPENRUNTIME_COMMANDS_DIR";
10
+ const DISABLE_EXTERNAL_COMMANDS_ENV = "OPENRUNTIME_DISABLE_COMMANDS";
11
+ export async function loadExternalCliExtensions(options) {
12
+ const env = options.env ?? process.env;
13
+ if (isExternalCommandLoadingDisabled(env)) {
14
+ return {
15
+ extensions: [],
16
+ records: []
17
+ };
18
+ }
19
+ const directory = resolveExternalCommandDirectory(env);
20
+ if (!existsSync(directory)) {
21
+ return {
22
+ extensions: [],
23
+ records: []
24
+ };
25
+ }
26
+ let candidates;
27
+ try {
28
+ candidates = await findExternalExtensionCandidates(directory);
29
+ }
30
+ catch (error) {
31
+ return {
32
+ extensions: [],
33
+ records: [
34
+ {
35
+ name: "commands-path",
36
+ source: "external",
37
+ status: "failed",
38
+ path: directory,
39
+ reason: error instanceof Error ? error.message : String(error)
40
+ }
41
+ ]
42
+ };
43
+ }
44
+ const reservedNames = new Set(options.reservedNames);
45
+ const extensions = [];
46
+ const records = [];
47
+ for (const candidate of candidates) {
48
+ const loaded = await loadExternalCommand(candidate, reservedNames);
49
+ records.push(loaded.record);
50
+ if (loaded.extension !== undefined) {
51
+ extensions.push(loaded.extension);
52
+ reservedNames.add(loaded.extension.name);
53
+ }
54
+ }
55
+ return {
56
+ extensions,
57
+ records
58
+ };
59
+ }
60
+ export function createInternalExtensionRecords(extensions) {
61
+ return extensions.map((extension) => ({
62
+ name: extension.name,
63
+ source: "internal",
64
+ status: "loaded"
65
+ }));
66
+ }
67
+ export function markExternalCommandReferences(references) {
68
+ return references.map((reference) => ({
69
+ ...reference,
70
+ category: "External Commands"
71
+ }));
72
+ }
73
+ async function findExternalExtensionCandidates(directory) {
74
+ const stats = statSync(directory);
75
+ if (stats.isFile()) {
76
+ if (!directory.endsWith(".mjs")) {
77
+ throw new Error(`Command file must be an .mjs file: ${directory}`);
78
+ }
79
+ return [{ path: directory }];
80
+ }
81
+ if (!stats.isDirectory()) {
82
+ throw new Error(`Command path must be a file or directory: ${directory}`);
83
+ }
84
+ const entries = await readdir(directory, { withFileTypes: true });
85
+ const candidates = [];
86
+ for (const entry of entries) {
87
+ const entryPath = join(directory, entry.name);
88
+ if (entry.isFile() && entry.name.endsWith(".mjs")) {
89
+ candidates.push({ path: entryPath });
90
+ continue;
91
+ }
92
+ if (entry.isDirectory()) {
93
+ const indexPath = join(entryPath, "index.mjs");
94
+ if (existsSync(indexPath) && statSync(indexPath).isFile()) {
95
+ candidates.push({ path: indexPath });
96
+ }
97
+ }
98
+ }
99
+ return candidates.sort((left, right) => left.path.localeCompare(right.path));
100
+ }
101
+ async function loadExternalCommand(candidate, reservedNames) {
102
+ try {
103
+ const module = await importExternalModule(candidate.path);
104
+ const definition = validateCommand(module.default, { path: candidate.path });
105
+ if (reservedNames.has(definition.name)) {
106
+ return {
107
+ record: {
108
+ name: definition.name,
109
+ source: "external",
110
+ status: "skipped",
111
+ path: candidate.path,
112
+ reason: `Command "${definition.name}" conflicts with an existing command.`
113
+ }
114
+ };
115
+ }
116
+ return {
117
+ extension: {
118
+ name: definition.name,
119
+ ...(definition.skill === undefined ? {} : { skill: definition.skill }),
120
+ ...(definition.commandReferences === undefined ? {} : {
121
+ commandReferences: markExternalCommandReferences(definition.commandReferences)
122
+ }),
123
+ run: definition.run
124
+ },
125
+ record: {
126
+ name: definition.name,
127
+ source: "external",
128
+ status: "loaded",
129
+ path: candidate.path
130
+ }
131
+ };
132
+ }
133
+ catch (error) {
134
+ return {
135
+ record: {
136
+ name: inferExtensionName(candidate.path),
137
+ source: "external",
138
+ status: "failed",
139
+ path: candidate.path,
140
+ reason: error instanceof Error ? error.message : String(error)
141
+ }
142
+ };
143
+ }
144
+ }
145
+ async function importExternalModule(modulePath) {
146
+ const moduleUrl = pathToFileURL(modulePath);
147
+ moduleUrl.searchParams.set("mtime", String(statSync(modulePath).mtimeMs));
148
+ return await import(moduleUrl.href);
149
+ }
150
+ function inferExtensionName(modulePath) {
151
+ const normalized = modulePath.replaceAll("\\", "/");
152
+ const segments = normalized.split("/");
153
+ const filename = segments.at(-1) ?? "unknown";
154
+ if (filename === "index.mjs") {
155
+ return segments.at(-2) ?? "unknown";
156
+ }
157
+ return filename.replace(/\.mjs$/, "");
158
+ }
159
+ function isExternalCommandLoadingDisabled(env) {
160
+ return env[DISABLE_EXTERNAL_COMMANDS_ENV] === "1";
161
+ }
162
+ function resolveExternalCommandDirectory(env) {
163
+ if (env[EXTERNAL_COMMAND_DIR_ENV] !== undefined) {
164
+ return resolve(env[EXTERNAL_COMMAND_DIR_ENV]);
165
+ }
166
+ return DEFAULT_EXTERNAL_COMMAND_DIR;
167
+ }
168
+ //# sourceMappingURL=external-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-extensions.js","sourceRoot":"","sources":["../src/external-extensions.ts"],"names":[],"mappings":"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"}
package/dist/help.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export interface CliCommandReference {
2
+ category: "Bridge and Browser" | "Runtime" | "Commands" | "External Commands";
3
+ usage: string;
4
+ description: string;
5
+ }
6
+ export declare const cliCommandReferences: CliCommandReference[];
7
+ export interface CliCommandSkillReference {
8
+ category: "Commands" | "External Commands";
9
+ command: string;
10
+ }
11
+ export interface CliReferenceCollection {
12
+ commandReferences?: readonly CliCommandReference[];
13
+ commandSkillReferences?: readonly CliCommandSkillReference[];
14
+ }
15
+ export declare function createHelpText(references?: CliReferenceCollection): string;
16
+ export declare function createCliReferenceMarkdown(references?: CliReferenceCollection): string;
17
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GAAG,UAAU,GAAG,mBAAmB,CAAC;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,EAuJrD,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,UAAU,GAAG,mBAAmB,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACnD,sBAAsB,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC9D;AAED,wBAAgB,cAAc,CAAC,UAAU,GAAE,sBAA2B,GAAG,MAAM,CA0B9E;AAED,wBAAgB,0BAA0B,CAAC,UAAU,GAAE,sBAA2B,GAAG,MAAM,CAkC1F"}