@monoes/monobrowse 1.0.0 → 1.0.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 (101) hide show
  1. package/dist/package.json +75 -0
  2. package/dist/src/browser/adapters/index.d.ts.map +1 -1
  3. package/dist/src/browser/adapters/index.js +4 -0
  4. package/dist/src/browser/adapters/index.js.map +1 -1
  5. package/dist/src/browser/browser.js +2 -2
  6. package/dist/src/browser/browser.js.map +1 -1
  7. package/dist/src/browser/cdp.d.ts +6 -0
  8. package/dist/src/browser/cdp.d.ts.map +1 -1
  9. package/dist/src/browser/cdp.js +56 -1
  10. package/dist/src/browser/cdp.js.map +1 -1
  11. package/dist/src/browser/dashboard/api-types.d.ts +1 -1
  12. package/dist/src/browser/dashboard/server.d.ts +1 -1
  13. package/dist/src/browser/dashboard/server.d.ts.map +1 -1
  14. package/dist/src/browser/dashboard/server.js +204 -15
  15. package/dist/src/browser/dashboard/server.js.map +1 -1
  16. package/dist/src/browser/dashboard/ui.html +1811 -0
  17. package/dist/src/browser/playbook/browser-handlers.d.ts +3 -0
  18. package/dist/src/browser/playbook/browser-handlers.d.ts.map +1 -0
  19. package/dist/src/browser/playbook/browser-handlers.js +377 -0
  20. package/dist/src/browser/playbook/browser-handlers.js.map +1 -0
  21. package/dist/src/browser/playbook/builtin-handlers.d.ts +3 -0
  22. package/dist/src/browser/playbook/builtin-handlers.d.ts.map +1 -0
  23. package/dist/src/browser/playbook/builtin-handlers.js +364 -0
  24. package/dist/src/browser/playbook/builtin-handlers.js.map +1 -0
  25. package/dist/src/browser/playbook/index.d.ts +3 -0
  26. package/dist/src/browser/playbook/index.d.ts.map +1 -0
  27. package/dist/src/browser/playbook/index.js +3 -0
  28. package/dist/src/browser/playbook/index.js.map +1 -0
  29. package/dist/src/browser/playbook/store.d.ts +8 -0
  30. package/dist/src/browser/playbook/store.d.ts.map +1 -0
  31. package/dist/src/browser/playbook/store.js +87 -0
  32. package/dist/src/browser/playbook/store.js.map +1 -0
  33. package/dist/src/browser/screenshot.d.ts +2 -0
  34. package/dist/src/browser/screenshot.d.ts.map +1 -1
  35. package/dist/src/browser/screenshot.js +69 -2
  36. package/dist/src/browser/screenshot.js.map +1 -1
  37. package/dist/src/browser/types.d.ts.map +1 -1
  38. package/dist/src/browser/types.js +11 -0
  39. package/dist/src/browser/types.js.map +1 -1
  40. package/dist/src/cli/action.d.ts +3 -0
  41. package/dist/src/cli/action.d.ts.map +1 -0
  42. package/dist/src/cli/action.js +139 -0
  43. package/dist/src/cli/action.js.map +1 -0
  44. package/dist/src/cli/commands.d.ts +8 -0
  45. package/dist/src/cli/commands.d.ts.map +1 -0
  46. package/dist/src/cli/commands.js +3021 -0
  47. package/dist/src/cli/commands.js.map +1 -0
  48. package/dist/src/cli/output.d.ts +11 -0
  49. package/dist/src/cli/output.d.ts.map +1 -0
  50. package/dist/src/cli/output.js +33 -0
  51. package/dist/src/cli/output.js.map +1 -0
  52. package/dist/src/cli/platform.d.ts +7 -0
  53. package/dist/src/cli/platform.d.ts.map +1 -0
  54. package/dist/src/cli/platform.js +193 -0
  55. package/dist/src/cli/platform.js.map +1 -0
  56. package/dist/src/cli/playbook.d.ts +3 -0
  57. package/dist/src/cli/playbook.d.ts.map +1 -0
  58. package/dist/src/cli/playbook.js +265 -0
  59. package/dist/src/cli/playbook.js.map +1 -0
  60. package/dist/src/cli/types.d.ts +42 -0
  61. package/dist/src/cli/types.d.ts.map +1 -0
  62. package/dist/src/cli/types.js +2 -0
  63. package/dist/src/cli/types.js.map +1 -0
  64. package/dist/src/cli/workflow.d.ts +2 -0
  65. package/dist/src/cli/workflow.d.ts.map +1 -0
  66. package/dist/src/cli/workflow.js +3 -0
  67. package/dist/src/cli/workflow.js.map +1 -0
  68. package/dist/src/cli.d.ts +7 -0
  69. package/dist/src/cli.d.ts.map +1 -0
  70. package/dist/src/cli.js +187 -0
  71. package/dist/src/cli.js.map +1 -0
  72. package/dist/src/index.d.ts +5 -1
  73. package/dist/src/index.d.ts.map +1 -1
  74. package/dist/src/index.js +16 -1
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/package.json +24 -5
  78. package/src/browser/adapters/index.ts +4 -0
  79. package/src/browser/browser.ts +2 -2
  80. package/src/browser/cdp.ts +68 -1
  81. package/src/browser/dashboard/api-types.ts +1 -1
  82. package/src/browser/dashboard/server.ts +210 -17
  83. package/src/browser/dashboard/ui.html +1412 -45
  84. package/src/browser/playbook/browser-handlers.ts +449 -0
  85. package/src/browser/{workflow → playbook}/builtin-handlers.ts +35 -14
  86. package/src/browser/playbook/index.ts +2 -0
  87. package/src/browser/{workflow → playbook}/store.ts +14 -14
  88. package/src/browser/screenshot.ts +78 -3
  89. package/src/browser/types.ts +11 -0
  90. package/src/cli/action.ts +145 -0
  91. package/src/cli/commands.ts +2895 -0
  92. package/src/cli/output.ts +37 -0
  93. package/src/cli/platform.ts +211 -0
  94. package/src/cli/playbook.ts +280 -0
  95. package/src/cli/types.ts +47 -0
  96. package/src/cli.ts +208 -0
  97. package/src/index.ts +20 -1
  98. package/src/browser/workflow/engine.ts +0 -202
  99. package/src/browser/workflow/expression.ts +0 -107
  100. package/src/browser/workflow/index.ts +0 -5
  101. package/src/browser/workflow/types.ts +0 -62
@@ -0,0 +1,265 @@
1
+ // src/commands/browse-playbook.ts
2
+ import { Command } from 'commander';
3
+ import { readdir, writeFile, mkdir } from 'node:fs/promises';
4
+ import { existsSync } from 'node:fs';
5
+ import { join, resolve } from 'node:path';
6
+ import { readPlaybook, listPlaybookRuns, writePlaybookRun, runPlaybook } from '@monoes/monoplaybook';
7
+ import { createDefaultHandlers } from '../index.js';
8
+ import { startDashboard } from '../index.js';
9
+ export function createPlaybookCommand() {
10
+ const cmd = new Command('playbook')
11
+ .alias('workflow')
12
+ .description('Manage browser playbooks (saved automation recipes)');
13
+ cmd
14
+ .command('create <name>')
15
+ .description('Scaffold a new playbook JSON file')
16
+ .option('--template <type>', 'Starter template: minimal | http | google-sheets | gmail | github | gemini-image', 'minimal')
17
+ .action(async (name, opts) => {
18
+ const dir = join(process.cwd(), '.monomind', 'playbooks');
19
+ await mkdir(dir, { recursive: true });
20
+ const file = join(dir, `${name}.json`);
21
+ if (existsSync(file)) {
22
+ console.error(`Playbook already exists: ${file}`);
23
+ process.exit(1);
24
+ }
25
+ const humanName = name.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
26
+ let def;
27
+ switch (opts.template) {
28
+ case 'http':
29
+ def = {
30
+ id: name, name: humanName,
31
+ description: 'Fetch data from an HTTP endpoint and save to file',
32
+ nodes: [
33
+ { id: 'trigger', type: 'trigger.manual', name: 'Start', config: { items: [{ data: { url: 'https://api.example.com/data' } }] } },
34
+ { id: 'fetch', type: 'action.http', name: 'Fetch Data', config: { url: '{{$json.url}}', method: 'GET' }, onError: 'skip' },
35
+ { id: 'log', type: 'action.log', name: 'Log Result', config: { label: 'result' } },
36
+ { id: 'save', type: 'action.save_file', name: 'Save JSON', config: { path: `./output/${name}-result.json` } },
37
+ ],
38
+ connections: [{ from: 'trigger', to: 'fetch' }, { from: 'fetch', to: 'log' }, { from: 'log', to: 'save' }],
39
+ };
40
+ break;
41
+ case 'google-sheets': {
42
+ const accessRef = '{{params.access_token}}';
43
+ def = {
44
+ id: name, name: humanName,
45
+ description: 'Read rows from Google Sheets and process them',
46
+ params: {
47
+ spreadsheet_id: { required: true, description: 'Google Sheets ID from URL' },
48
+ range: { default: 'Sheet1', description: 'Cell range e.g. Sheet1!A:Z' },
49
+ access_token: { required: true, description: 'OAuth2 access token for Google Sheets API' },
50
+ },
51
+ nodes: [
52
+ { id: 'trigger', type: 'trigger.manual', name: 'Start', config: {} },
53
+ { id: 'read', type: 'service.google_sheets', name: 'Read Sheet', config: { operation: 'read_rows', spreadsheet_id: '{{params.spreadsheet_id}}', range: '{{params.range}}', access_token: accessRef } },
54
+ { id: 'log', type: 'action.log', name: 'Log Rows', config: { label: 'row' } },
55
+ ],
56
+ connections: [{ from: 'trigger', to: 'read' }, { from: 'read', to: 'log' }],
57
+ };
58
+ break;
59
+ }
60
+ case 'gmail': {
61
+ const gmailAccessRef = '{{params.access_token}}';
62
+ def = {
63
+ id: name, name: humanName,
64
+ description: 'Send emails via Gmail API',
65
+ params: {
66
+ to: { required: true, description: 'Recipient email address' },
67
+ subject: { required: true, description: 'Email subject line' },
68
+ body: { required: true, description: 'Email body text' },
69
+ access_token: { required: true, description: 'OAuth2 access token for Gmail API' },
70
+ },
71
+ nodes: [
72
+ { id: 'trigger', type: 'trigger.manual', name: 'Start', config: { items: [{ data: {} }] } },
73
+ { id: 'send', type: 'service.gmail', name: 'Send Email', config: { operation: 'send_message', to: '{{params.to}}', subject: '{{params.subject}}', body: '{{params.body}}', access_token: gmailAccessRef } },
74
+ { id: 'log', type: 'action.log', name: 'Log Result', config: { label: 'sent' } },
75
+ ],
76
+ connections: [{ from: 'trigger', to: 'send' }, { from: 'send', to: 'log' }],
77
+ };
78
+ break;
79
+ }
80
+ case 'github': {
81
+ const ghTokenRef = '{{params.gh_token}}';
82
+ def = {
83
+ id: name, name: humanName,
84
+ description: 'List GitHub issues and process them',
85
+ params: {
86
+ owner: { required: true, description: 'GitHub repo owner (user or org)' },
87
+ repo: { required: true, description: 'GitHub repo name' },
88
+ gh_token: { required: true, description: 'GitHub personal access token' },
89
+ state: { default: 'open', description: 'Issue state: open | closed | all' },
90
+ },
91
+ nodes: [
92
+ { id: 'trigger', type: 'trigger.manual', name: 'Start', config: { items: [{ data: {} }] } },
93
+ { id: 'issues', type: 'service.github', name: 'List Issues', config: { operation: 'list_issues', owner: '{{params.owner}}', repo: '{{params.repo}}', token: ghTokenRef, state: '{{params.state}}' } },
94
+ { id: 'log', type: 'action.log', name: 'Log Issues', config: { label: 'issue' } },
95
+ ],
96
+ connections: [{ from: 'trigger', to: 'issues' }, { from: 'issues', to: 'log' }],
97
+ };
98
+ break;
99
+ }
100
+ case 'gemini-image':
101
+ def = {
102
+ id: name, name: humanName,
103
+ description: 'Generate images using Gemini via browser or API',
104
+ params: { prompt: { required: true, description: 'Image generation prompt' } },
105
+ nodes: [
106
+ { id: 'trigger', type: 'trigger.manual', name: 'Start', config: { items: [{ data: {} }] } },
107
+ { id: 'generate', type: 'action.gemini_image', name: 'Generate Image', config: { prompt: '{{params.prompt}}', outputPath: `./output/${name}.png` }, onError: 'skip' },
108
+ { id: 'log', type: 'action.log', name: 'Log Result', config: { label: 'generated' } },
109
+ ],
110
+ connections: [{ from: 'trigger', to: 'generate' }, { from: 'generate', to: 'log' }],
111
+ };
112
+ break;
113
+ default: // minimal
114
+ def = {
115
+ id: name, name: humanName,
116
+ description: 'New playbook',
117
+ nodes: [
118
+ { id: 'trigger', type: 'trigger.manual', name: 'Start', config: { items: [{ data: { message: 'hello' } }] } },
119
+ { id: 'log', type: 'action.log', name: 'Log', config: { label: name } },
120
+ ],
121
+ connections: [{ from: 'trigger', to: 'log' }],
122
+ };
123
+ }
124
+ await writeFile(file, JSON.stringify(def, null, 2));
125
+ console.log(`Created: ${file}`);
126
+ console.log(`Template: ${opts.template}`);
127
+ if (def.params) {
128
+ console.log(`Params: ${Object.entries(def.params).map(([k, v]) => `${k}${v.required ? ' (required)' : ''}`).join(', ')}`);
129
+ }
130
+ console.log(`Run with: npx monomind browse playbook run ${file}`);
131
+ });
132
+ cmd
133
+ .command('run <file>')
134
+ .description('Execute a playbook and open the dashboard')
135
+ .option('--port <number>', 'Dashboard port (default: MONOBROWSE_DASHBOARD_PORT or 4242)', '4242')
136
+ .option('--no-keep', 'Exit immediately after run instead of keeping dashboard alive')
137
+ .option('--params <pairs...>', 'Playbook params as key=value pairs e.g. --params name=Alice count=5')
138
+ .option('--timeout <seconds>', 'Max run time in seconds (default: 900)', '900')
139
+ .action(async (file, opts) => {
140
+ const filePath = resolve(file);
141
+ let def;
142
+ try {
143
+ def = await readPlaybook(filePath);
144
+ }
145
+ catch (err) {
146
+ console.error(`Failed to load playbook: ${err instanceof Error ? err.message : String(err)}`);
147
+ process.exit(1);
148
+ }
149
+ // Parse --params key=value pairs
150
+ const params = {};
151
+ for (const pair of opts.params ?? []) {
152
+ const eq = pair.indexOf('=');
153
+ if (eq > 0)
154
+ params[pair.slice(0, eq)] = pair.slice(eq + 1);
155
+ }
156
+ // Validate required params
157
+ if (def.params) {
158
+ for (const [key, spec] of Object.entries(def.params)) {
159
+ if (spec.required && !(key in params) && spec.default === undefined) {
160
+ console.error(`Missing required playbook param: ${key}${spec.description ? ` (${spec.description})` : ''}`);
161
+ process.exit(1);
162
+ }
163
+ // Apply defaults
164
+ if (!(key in params) && spec.default !== undefined) {
165
+ params[key] = String(spec.default);
166
+ }
167
+ }
168
+ }
169
+ const port = parseInt(process.env['MONOBROWSE_DASHBOARD_PORT'] ?? opts.port, 10);
170
+ const dashboard = startDashboard(port);
171
+ console.log(`Dashboard: http://localhost:${dashboard.port}`);
172
+ console.log(`Running: ${def.name}`);
173
+ if (Object.keys(params).length > 0) {
174
+ console.log(`Params: ${JSON.stringify(params)}`);
175
+ }
176
+ const timeoutMs = parseInt(opts.timeout, 10) * 1000;
177
+ // Resolve the project directory once so every event carries the same canonical tag.
178
+ const projectDir = process.cwd();
179
+ const record = await runPlaybook(def, {
180
+ handlers: createDefaultHandlers(),
181
+ onEvent: event => {
182
+ dashboard.broadcast({ ...event, projectDir });
183
+ if (event.eventType === 'step_completed' || event.eventType === 'step_failed') {
184
+ const status = event.eventType === 'step_completed' ? '✓' : '✗';
185
+ console.log(` ${status} ${event.nodeName}${event.durationMs ? ` (${event.durationMs}ms)` : ''}`);
186
+ }
187
+ },
188
+ signal: AbortSignal.timeout(timeoutMs),
189
+ params,
190
+ isStopRequested: (id) => dashboard.isStopRequested(id),
191
+ });
192
+ dashboard.addRunRecord(record);
193
+ await writePlaybookRun(record);
194
+ console.log(`\nCompleted: ${record.status} — ${record.itemsProcessed} items`);
195
+ if (record.error)
196
+ console.error(`Error: ${record.error}`);
197
+ if (opts.keep !== false) {
198
+ console.log(`\nDashboard kept alive at http://localhost:${dashboard.port} — press Ctrl+C to exit`);
199
+ process.on('SIGINT', () => { dashboard.close(); process.exit(0); });
200
+ process.on('SIGTERM', () => { dashboard.close(); process.exit(0); });
201
+ }
202
+ else {
203
+ process.exit(record.status === 'completed' ? 0 : 1);
204
+ }
205
+ });
206
+ cmd
207
+ .command('list')
208
+ .description('List available playbooks and their last run status')
209
+ .action(async () => {
210
+ const dir = join(process.cwd(), '.monomind', 'playbooks');
211
+ if (!existsSync(dir)) {
212
+ console.log('No playbooks found. Create one with: browse playbook create <name>');
213
+ return;
214
+ }
215
+ const files = (await readdir(dir)).filter(f => f.endsWith('.json'));
216
+ if (files.length === 0) {
217
+ console.log('No playbooks found.');
218
+ return;
219
+ }
220
+ const runs = await listPlaybookRuns();
221
+ for (const file of files) {
222
+ const id = file.replace('.json', '');
223
+ const lastRun = runs.find(r => r.playbookId === id);
224
+ const status = lastRun ? `[${lastRun.status}]` : '[never run]';
225
+ console.log(` ${id} ${status}`);
226
+ }
227
+ });
228
+ cmd
229
+ .command('status <run-id>')
230
+ .description('Check the status of a specific run')
231
+ .action(async (runId) => {
232
+ const runs = await listPlaybookRuns();
233
+ const run = runs.find(r => r.id === runId);
234
+ if (!run) {
235
+ console.error(`Run not found: ${runId}`);
236
+ process.exit(1);
237
+ }
238
+ console.log(JSON.stringify(run, null, 2));
239
+ });
240
+ cmd
241
+ .command('stop <run-id>')
242
+ .description('Request cancellation of a running playbook via dashboard')
243
+ .option('--port <number>', 'Dashboard port (default: MONOBROWSE_DASHBOARD_PORT or 4242)', '4242')
244
+ .action(async (runId, opts) => {
245
+ const port = parseInt(process.env['MONOBROWSE_DASHBOARD_PORT'] ?? opts.port, 10);
246
+ // Try to signal via HTTP POST to the dashboard server
247
+ try {
248
+ const res = await fetch(`http://127.0.0.1:${port}/stop/${runId}`, { method: 'POST' });
249
+ if (res.ok) {
250
+ console.log(`Stop requested for run: ${runId}`);
251
+ console.log(`Dashboard: http://localhost:${port}`);
252
+ }
253
+ else {
254
+ console.error(`Dashboard returned ${res.status}. Is a playbook running on port ${port}?`);
255
+ }
256
+ }
257
+ catch {
258
+ console.error(`Could not reach dashboard on port ${port}. Make sure the playbook is running.`);
259
+ console.error(`You can also use the Stop button in the dashboard: http://localhost:${port}`);
260
+ process.exit(1);
261
+ }
262
+ });
263
+ return cmd;
264
+ }
265
+ //# sourceMappingURL=playbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook.js","sourceRoot":"","sources":["../../../src/cli/playbook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface CommandContext {
2
+ args: string[];
3
+ flags: ParsedFlags;
4
+ cwd: string;
5
+ interactive: boolean;
6
+ }
7
+ export interface ParsedFlags {
8
+ [key: string]: string | boolean | number | string[];
9
+ _: string[];
10
+ }
11
+ export interface Command {
12
+ name: string;
13
+ description: string;
14
+ aliases?: string[];
15
+ subcommands?: Command[];
16
+ options?: CommandOption[];
17
+ examples?: CommandExample[];
18
+ action?: CommandAction;
19
+ hidden?: boolean;
20
+ }
21
+ export interface CommandOption {
22
+ name: string;
23
+ short?: string;
24
+ description: string;
25
+ type: 'string' | 'boolean' | 'number' | 'array';
26
+ default?: unknown;
27
+ required?: boolean;
28
+ choices?: string[];
29
+ validate?: (value: unknown) => boolean | string;
30
+ }
31
+ export interface CommandExample {
32
+ command: string;
33
+ description: string;
34
+ }
35
+ export type CommandAction = (ctx: CommandContext) => Promise<CommandResult | void>;
36
+ export interface CommandResult {
37
+ success: boolean;
38
+ message?: string;
39
+ data?: unknown;
40
+ exitCode?: number;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACpD,CAAC,EAAE,MAAM,EAAE,CAAC;CACb;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { createPlaybookCommand as createWorkflowCommand } from './playbook.js';
2
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/cli/workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,IAAI,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Backward-compatibility shim — canonical module is now playbook.ts
2
+ export { createPlaybookCommand as createWorkflowCommand } from './playbook.js';
3
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/cli/workflow.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,EAAE,qBAAqB,IAAI,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * monobrowse — standalone CLI entry point
4
+ * Dispatches to the same command tree used by `monomind browse`
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * monobrowse — standalone CLI entry point
4
+ * Dispatches to the same command tree used by `monomind browse`
5
+ */
6
+ import { createRequire } from 'module';
7
+ import browseCommand from './cli/commands.js';
8
+ import { output } from './cli/output.js';
9
+ const _require = createRequire(import.meta.url);
10
+ // ---------------------------------------------------------------------------
11
+ // Subcommand lookup (supports aliases)
12
+ // ---------------------------------------------------------------------------
13
+ function findSub(name, subs) {
14
+ return subs.find(s => s.name === name || s.aliases?.includes(name));
15
+ }
16
+ // ---------------------------------------------------------------------------
17
+ // Minimal argv parser — resolves short flags from the target subcommand's opts
18
+ // ---------------------------------------------------------------------------
19
+ function buildShortMap(cmd) {
20
+ const m = {};
21
+ if (!cmd?.options)
22
+ return m;
23
+ for (const opt of cmd.options) {
24
+ if (opt.short)
25
+ m[opt.short] = opt.name;
26
+ }
27
+ return m;
28
+ }
29
+ function isBooleanOpt(name, cmd) {
30
+ const opt = cmd?.options?.find(o => o.name === name);
31
+ return opt?.type === 'boolean';
32
+ }
33
+ function parseArgv(argv, sub) {
34
+ const shortMap = buildShortMap(sub);
35
+ const flags = { _: [] };
36
+ const positional = [];
37
+ let i = 0;
38
+ while (i < argv.length) {
39
+ const arg = argv[i];
40
+ if (arg === '--') {
41
+ positional.push(...argv.slice(i + 1));
42
+ break;
43
+ }
44
+ if (arg.startsWith('--')) {
45
+ const raw = arg.slice(2);
46
+ if (raw.startsWith('no-')) {
47
+ flags[raw.slice(3)] = false;
48
+ }
49
+ else if (raw.includes('=')) {
50
+ const eq = raw.indexOf('=');
51
+ flags[raw.slice(0, eq)] = raw.slice(eq + 1);
52
+ }
53
+ else if (isBooleanOpt(raw, sub) || i + 1 >= argv.length || argv[i + 1].startsWith('-')) {
54
+ flags[raw] = true;
55
+ }
56
+ else {
57
+ flags[raw] = argv[++i];
58
+ }
59
+ }
60
+ else if (arg.startsWith('-') && arg.length >= 2) {
61
+ const short = arg[1];
62
+ const long = shortMap[short] ?? short;
63
+ if (arg.length > 2) {
64
+ flags[long] = arg.slice(2);
65
+ }
66
+ else if (isBooleanOpt(long, sub) || i + 1 >= argv.length || argv[i + 1].startsWith('-')) {
67
+ flags[long] = true;
68
+ }
69
+ else {
70
+ flags[long] = argv[++i];
71
+ }
72
+ }
73
+ else {
74
+ positional.push(arg);
75
+ }
76
+ i++;
77
+ }
78
+ // Coerce number options
79
+ for (const opt of (sub?.options ?? [])) {
80
+ if (opt.type === 'number' && typeof flags[opt.name] === 'string') {
81
+ flags[opt.name] = Number(flags[opt.name]);
82
+ }
83
+ }
84
+ return { args: positional, flags };
85
+ }
86
+ // ---------------------------------------------------------------------------
87
+ // Help printer
88
+ // ---------------------------------------------------------------------------
89
+ function printHelp(cmd, prefix = 'monobrowse') {
90
+ const usage = cmd.name === 'browse'
91
+ ? `${prefix} <subcommand> [options]`
92
+ : `${prefix} ${cmd.name} [subcommand] [options]`;
93
+ console.log(`\nUsage: ${usage}\n`);
94
+ console.log(cmd.description + '\n');
95
+ if (cmd.subcommands?.length) {
96
+ console.log('Subcommands:');
97
+ for (const s of cmd.subcommands) {
98
+ if (!s.hidden)
99
+ console.log(` ${s.name.padEnd(20)} ${s.description}`);
100
+ }
101
+ console.log('');
102
+ }
103
+ if (cmd.options?.length) {
104
+ console.log('Options:');
105
+ for (const o of cmd.options) {
106
+ const shortPart = o.short ? `-${o.short}, ` : ' ';
107
+ const defaultPart = o.default !== undefined ? ` (default: ${o.default})` : '';
108
+ console.log(` ${shortPart}--${o.name.padEnd(18)} ${o.description}${defaultPart}`);
109
+ }
110
+ console.log('');
111
+ }
112
+ if (cmd.examples?.length) {
113
+ console.log('Examples:');
114
+ for (const ex of cmd.examples) {
115
+ const adjusted = ex.command.replace(/^monomind browse/, prefix);
116
+ console.log(` ${adjusted} ${ex.description}`);
117
+ }
118
+ console.log('');
119
+ }
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // Dispatch: find action and build context
123
+ // ---------------------------------------------------------------------------
124
+ async function dispatch(cmd, argv) {
125
+ if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {
126
+ printHelp(cmd);
127
+ return;
128
+ }
129
+ const subName = argv[0];
130
+ const rest = argv.slice(1);
131
+ const sub = findSub(subName, cmd.subcommands ?? []);
132
+ if (!sub) {
133
+ output.printError(`Unknown subcommand: ${subName}`);
134
+ output.printInfo('Run `monobrowse --help` to see available subcommands.');
135
+ process.exitCode = 1;
136
+ return;
137
+ }
138
+ if (rest[0] === '--help' || rest[0] === '-h') {
139
+ printHelp(sub, 'monobrowse');
140
+ return;
141
+ }
142
+ // Check if first remaining arg matches a nested subcommand
143
+ if (sub.subcommands?.length && rest.length > 0 && !rest[0].startsWith('-')) {
144
+ const nested = findSub(rest[0], sub.subcommands);
145
+ if (nested?.action) {
146
+ const { args, flags } = parseArgv(rest.slice(1), nested);
147
+ const ctx = { args, flags, cwd: process.cwd(), interactive: !!process.stdout.isTTY };
148
+ const result = await nested.action(ctx);
149
+ if (result && !result.success)
150
+ process.exitCode = result.exitCode ?? 1;
151
+ return;
152
+ }
153
+ }
154
+ // No nested match — invoke the subcommand's own action
155
+ if (!sub.action) {
156
+ output.printInfo(`Run \`monobrowse ${subName} --help\` for usage.`);
157
+ return;
158
+ }
159
+ const { args, flags } = parseArgv(rest, sub);
160
+ const ctx = { args, flags, cwd: process.cwd(), interactive: !!process.stdout.isTTY };
161
+ const result = await sub.action(ctx);
162
+ if (result && !result.success)
163
+ process.exitCode = result.exitCode ?? 1;
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Main
167
+ // ---------------------------------------------------------------------------
168
+ async function main() {
169
+ const userArgs = process.argv.slice(2);
170
+ if (userArgs.length === 0 || userArgs[0] === '--help' || userArgs[0] === '-h') {
171
+ printHelp(browseCommand);
172
+ return;
173
+ }
174
+ if (userArgs[0] === '--version' || userArgs[0] === '-V') {
175
+ const pkg = _require('../package.json');
176
+ console.log(pkg.version);
177
+ return;
178
+ }
179
+ await dispatch(browseCommand, userArgs);
180
+ }
181
+ main().then(() => {
182
+ process.exit(process.exitCode ?? 0);
183
+ }).catch(err => {
184
+ output.printError(err instanceof Error ? err.message : String(err));
185
+ process.exit(1);
186
+ });
187
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
+ export * from '@monoes/monoplaybook';
1
2
  export * from './browser/index.js';
2
- export * from './browser/workflow/index.js';
3
3
  export * from './browser/action-builder/analyzer.js';
4
4
  export * from './browser/action-builder/types.js';
5
5
  export * from './browser/adapters/index.js';
6
6
  export { startDashboard, getDashboard } from './browser/dashboard/server.js';
7
+ export { createBuiltinHandlers, createBrowserHandlers } from './browser/playbook/index.js';
8
+ export { readAction } from './browser/playbook/store.js';
9
+ import type { NodeHandler } from '@monoes/monoplaybook';
10
+ export declare function createDefaultHandlers(): Map<string, NodeHandler>;
7
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AAErC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAOzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAMhE"}
package/dist/src/index.js CHANGED
@@ -1,7 +1,22 @@
1
+ // Re-export the full monoplaybook engine so consumers only need @monoes/monobrowse
2
+ export * from '@monoes/monoplaybook';
1
3
  export * from './browser/index.js';
2
- export * from './browser/workflow/index.js';
3
4
  export * from './browser/action-builder/analyzer.js';
4
5
  export * from './browser/action-builder/types.js';
5
6
  export * from './browser/adapters/index.js';
6
7
  export { startDashboard, getDashboard } from './browser/dashboard/server.js';
8
+ export { createBuiltinHandlers, createBrowserHandlers } from './browser/playbook/index.js';
9
+ export { readAction } from './browser/playbook/store.js';
10
+ // Batteries-included handler factory: service nodes + browser automation + builtins.
11
+ // This is the recommended entry point when using monobrowse as the default executor.
12
+ import { createNodeHandlers } from '@monoes/monoplaybook';
13
+ import { createBrowserHandlers } from './browser/playbook/browser-handlers.js';
14
+ import { createBuiltinHandlers } from './browser/playbook/builtin-handlers.js';
15
+ export function createDefaultHandlers() {
16
+ return new Map([
17
+ ...createNodeHandlers(),
18
+ ...createBrowserHandlers(),
19
+ ...createBuiltinHandlers(),
20
+ ]);
21
+ }
7
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,cAAc,sBAAsB,CAAC;AAErC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,qFAAqF;AACrF,qFAAqF;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAG/E,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,GAAG,CAAsB;QAClC,GAAG,kBAAkB,EAAE;QACvB,GAAG,qBAAqB,EAAE;QAC1B,GAAG,qBAAqB,EAAE;KAC3B,CAAC,CAAC;AACL,CAAC"}