@portel/photon-core 1.1.0 → 1.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/generator.js CHANGED
@@ -1,192 +1,280 @@
1
1
  /**
2
- * Generator-based Tool Execution
2
+ * Generator-based Tool Execution with Ask/Emit Pattern
3
3
  *
4
- * Enables photon tools to use generator functions with `yield` for:
5
- * - User prompts (text, password, confirm, select)
6
- * - Progress updates
7
- * - Streaming responses
8
- * - Multi-step wizards
4
+ * Enables photon tools to use async generator functions with `yield` for:
5
+ * - Interactive user input (ask) - blocks until user responds
6
+ * - Real-time output (emit) - fire and forget, no response needed
9
7
  *
10
- * The runtime handles yields appropriately based on the protocol:
11
- * - REST: Extract yields as optional parameters
12
- * - WebSocket/MCP: Interactive prompts
13
- * - CLI: readline prompts
14
- * - Fallback: Native OS dialogs
8
+ * ══════════════════════════════════════════════════════════════════════════════
9
+ * DESIGN PHILOSOPHY
10
+ * ══════════════════════════════════════════════════════════════════════════════
11
+ *
12
+ * The `ask` vs `emit` pattern provides instant clarity:
13
+ * - `ask` = "I need something FROM the user" (blocks, returns value)
14
+ * - `emit` = "I'm sending something TO the user" (non-blocking, void)
15
+ *
16
+ * This maps naturally to all runtime contexts:
17
+ *
18
+ * | Runtime | ask (input) | emit (output) |
19
+ * |------------|--------------------------|----------------------------|
20
+ * | REST API | Returns 202 + continue | Included in response or SSE|
21
+ * | WebSocket | Server request → client | Server push to client |
22
+ * | CLI | Readline prompt | Console output |
23
+ * | MCP | Elicitation dialog | Notification/logging |
24
+ * | Chatbot | Bot question → user reply| Status message, typing... |
25
+ *
26
+ * ══════════════════════════════════════════════════════════════════════════════
27
+ * REST API CONTINUATION PATTERN
28
+ * ══════════════════════════════════════════════════════════════════════════════
29
+ *
30
+ * When a generator yields `ask`, REST APIs can implement a continuation flow:
31
+ *
32
+ * ```
33
+ * POST /api/google-tv/connect
34
+ * Body: { ip: "192.168.1.100" }
35
+ *
36
+ * Response (202 Accepted):
37
+ * {
38
+ * "status": "awaiting_input",
39
+ * "continuation_id": "ctx_abc123",
40
+ * "ask": { "type": "text", "id": "pairing_code", "message": "Enter code:" },
41
+ * "continue": "/api/google-tv/connect/ctx_abc123"
42
+ * }
43
+ *
44
+ * POST /api/google-tv/connect/ctx_abc123
45
+ * Body: { "pairing_code": "123456" }
46
+ *
47
+ * Response (200 OK):
48
+ * { "status": "complete", "result": { "success": true } }
49
+ * ```
50
+ *
51
+ * ══════════════════════════════════════════════════════════════════════════════
52
+ * USAGE EXAMPLE
53
+ * ══════════════════════════════════════════════════════════════════════════════
15
54
  *
16
- * @example
17
55
  * ```typescript
18
56
  * async *connect(params: { ip: string }) {
19
- * await this.startConnection(params.ip);
57
+ * yield { emit: 'status', message: 'Connecting to TV...' };
58
+ *
59
+ * await this.startPairing(params.ip);
20
60
  *
61
+ * yield { emit: 'progress', value: 0.3, message: 'Waiting for code...' };
62
+ *
63
+ * // Blocks until user provides input
21
64
  * const code: string = yield {
22
- * prompt: 'Enter the 6-digit code:',
23
- * type: 'text'
65
+ * ask: 'text',
66
+ * id: 'pairing_code',
67
+ * message: 'Enter the 6-digit code shown on TV:',
68
+ * pattern: '^[0-9]{6}$',
69
+ * required: true
24
70
  * };
25
71
  *
72
+ * yield { emit: 'status', message: 'Verifying code...' };
73
+ *
26
74
  * await this.sendCode(code);
27
- * return { success: true };
75
+ *
76
+ * yield { emit: 'toast', message: 'Connected!', type: 'success' };
77
+ *
78
+ * return { success: true, paired: true };
28
79
  * }
29
80
  * ```
81
+ *
82
+ * @module generator
30
83
  */
84
+ // ══════════════════════════════════════════════════════════════════════════════
85
+ // TYPE GUARDS - Check what kind of yield we have
86
+ // ══════════════════════════════════════════════════════════════════════════════
31
87
  /**
32
- * Check if a yield requires user input
88
+ * Check if yield is an ask (requires user input)
89
+ *
90
+ * @example
91
+ * if (isAskYield(yielded)) {
92
+ * const userInput = await promptUser(yielded);
93
+ * generator.next(userInput);
94
+ * }
33
95
  */
34
- export function isInputYield(y) {
35
- return 'prompt' in y || 'confirm' in y || 'select' in y;
96
+ export function isAskYield(y) {
97
+ return 'ask' in y;
36
98
  }
37
99
  /**
38
- * Check if a yield is a progress update
100
+ * Check if yield is an emit (output only, no response needed)
101
+ *
102
+ * @example
103
+ * if (isEmitYield(yielded)) {
104
+ * handleOutput(yielded);
105
+ * generator.next(); // Continue without value
106
+ * }
39
107
  */
40
- export function isProgressYield(y) {
41
- return 'progress' in y;
108
+ export function isEmitYield(y) {
109
+ return 'emit' in y;
42
110
  }
43
111
  /**
44
- * Check if a yield is streaming data
112
+ * Get the type of an ask yield
45
113
  */
46
- export function isStreamYield(y) {
47
- return 'stream' in y;
114
+ export function getAskType(y) {
115
+ return y.ask;
48
116
  }
49
117
  /**
50
- * Check if a yield is a log message
118
+ * Get the type of an emit yield
51
119
  */
52
- export function isLogYield(y) {
53
- return 'log' in y;
120
+ export function getEmitType(y) {
121
+ return y.emit;
122
+ }
123
+ // ══════════════════════════════════════════════════════════════════════════════
124
+ // GENERATOR DETECTION
125
+ // ══════════════════════════════════════════════════════════════════════════════
126
+ /**
127
+ * Check if a function is an async generator function
128
+ *
129
+ * @example
130
+ * if (isAsyncGeneratorFunction(method)) {
131
+ * const gen = method.call(instance, params);
132
+ * await executeGenerator(gen, config);
133
+ * }
134
+ */
135
+ export function isAsyncGeneratorFunction(fn) {
136
+ if (!fn)
137
+ return false;
138
+ const constructor = fn.constructor;
139
+ if (!constructor)
140
+ return false;
141
+ if (constructor.name === 'AsyncGeneratorFunction')
142
+ return true;
143
+ const prototype = Object.getPrototypeOf(fn);
144
+ return prototype?.constructor?.name === 'AsyncGeneratorFunction';
54
145
  }
55
- // ============================================================================
56
- // Generator Executor - Runs generator tools
57
- // ============================================================================
58
146
  /**
59
- * Execute a generator-based tool
147
+ * Check if a value is an async generator instance (already invoked)
148
+ *
149
+ * @example
150
+ * const result = method.call(instance, params);
151
+ * if (isAsyncGenerator(result)) {
152
+ * await executeGenerator(result, config);
153
+ * }
154
+ */
155
+ export function isAsyncGenerator(obj) {
156
+ return obj &&
157
+ typeof obj.next === 'function' &&
158
+ typeof obj.return === 'function' &&
159
+ typeof obj.throw === 'function' &&
160
+ typeof obj[Symbol.asyncIterator] === 'function';
161
+ }
162
+ // ══════════════════════════════════════════════════════════════════════════════
163
+ // GENERATOR EXECUTOR - Runs generator tools to completion
164
+ // ══════════════════════════════════════════════════════════════════════════════
165
+ /**
166
+ * Execute a generator-based photon tool to completion.
167
+ *
168
+ * Handles the yield/resume loop:
169
+ * 1. Run generator until it yields
170
+ * 2. If ask yield: get input from provider (or pre-provided), resume with value
171
+ * 3. If emit yield: call output handler, resume without value
172
+ * 4. Repeat until generator returns
60
173
  *
61
174
  * @param generator - The async generator to execute
62
175
  * @param config - Configuration for handling yields
63
176
  * @returns The final return value of the generator
64
177
  *
65
178
  * @example
66
- * ```typescript
67
- * const result = await executeGenerator(tool.connect({ ip: '192.168.1.1' }), {
68
- * inputProvider: async (y) => {
69
- * if ('prompt' in y) return await readline(y.prompt);
70
- * if ('confirm' in y) return await confirm(y.confirm);
179
+ * const result = await executeGenerator(photon.connect({ ip: '192.168.1.1' }), {
180
+ * inputProvider: async (ask) => {
181
+ * if (ask.ask === 'text') return await readline(ask.message);
182
+ * if (ask.ask === 'confirm') return await confirm(ask.message);
71
183
  * },
72
- * outputHandler: (y) => {
73
- * if ('progress' in y) console.log(`Progress: ${y.progress}%`);
184
+ * outputHandler: (emit) => {
185
+ * if (emit.emit === 'progress') console.log(`${emit.value * 100}%`);
74
186
  * }
75
187
  * });
76
- * ```
77
188
  */
78
189
  export async function executeGenerator(generator, config) {
79
190
  const { inputProvider, outputHandler, preProvidedInputs } = config;
80
- let promptIndex = 0;
191
+ let askIndex = 0;
81
192
  let result = await generator.next();
82
193
  while (!result.done) {
83
194
  const yielded = result.value;
84
- // Handle input yields (prompt, confirm, select)
85
- if (isInputYield(yielded)) {
86
- // Generate ID if not provided
87
- const yieldId = yielded.id || `prompt_${promptIndex++}`;
195
+ // Handle ask yields (need input)
196
+ if (isAskYield(yielded)) {
197
+ // Generate id if not provided
198
+ const askId = yielded.id || `ask_${askIndex++}`;
88
199
  // Check for pre-provided input (REST API style)
89
- if (preProvidedInputs && yieldId in preProvidedInputs) {
90
- result = await generator.next(preProvidedInputs[yieldId]);
200
+ if (preProvidedInputs && askId in preProvidedInputs) {
201
+ result = await generator.next(preProvidedInputs[askId]);
91
202
  continue;
92
203
  }
93
204
  // Get input from provider
94
205
  const input = await inputProvider(yielded);
95
206
  result = await generator.next(input);
96
207
  }
97
- // Handle output yields (progress, stream, log)
98
- else {
208
+ // Handle emit yields (output only)
209
+ else if (isEmitYield(yielded)) {
99
210
  if (outputHandler) {
100
211
  await outputHandler(yielded);
101
212
  }
102
213
  // Continue without providing a value
103
214
  result = await generator.next();
104
215
  }
216
+ // Unknown yield type - skip
217
+ else {
218
+ console.warn('[generator] Unknown yield type:', yielded);
219
+ result = await generator.next();
220
+ }
105
221
  }
106
222
  return result.value;
107
223
  }
108
- // ============================================================================
109
- // Generator Detection - Check if a function is a generator
110
- // ============================================================================
111
224
  /**
112
- * Check if a function is an async generator function
113
- */
114
- export function isAsyncGeneratorFunction(fn) {
115
- if (!fn)
116
- return false;
117
- const constructor = fn.constructor;
118
- if (!constructor)
119
- return false;
120
- if (constructor.name === 'AsyncGeneratorFunction')
121
- return true;
122
- // Check prototype chain
123
- const prototype = Object.getPrototypeOf(fn);
124
- return prototype && prototype.constructor &&
125
- prototype.constructor.name === 'AsyncGeneratorFunction';
126
- }
127
- /**
128
- * Check if a value is an async generator (already invoked)
129
- */
130
- export function isAsyncGenerator(obj) {
131
- return obj &&
132
- typeof obj.next === 'function' &&
133
- typeof obj.return === 'function' &&
134
- typeof obj.throw === 'function' &&
135
- typeof obj[Symbol.asyncIterator] === 'function';
136
- }
137
- /**
138
- * Extract yield information by running generator with mock provider
139
- * This is used for REST API schema generation
225
+ * Extract ask yield information by running generator with mock provider.
226
+ *
227
+ * This is used for REST API schema generation - each ask becomes
228
+ * an optional request parameter.
140
229
  *
141
- * Note: This only extracts yields that are reachable with default/empty inputs
142
- * Complex conditional yields may not be extracted
230
+ * Note: Only extracts asks reachable with default/empty inputs.
231
+ * Conditional asks may not be discovered.
232
+ *
233
+ * @example
234
+ * const asks = await extractAsks(Photon.prototype.connect, { ip: '' });
235
+ * // Returns: [{ id: 'pairing_code', type: 'text', message: '...' }]
236
+ * // These become optional query/body params in REST API
143
237
  */
144
- export async function extractYields(generatorFn, mockParams = {}) {
145
- const yields = [];
146
- let promptIndex = 0;
238
+ export async function extractAsks(generatorFn, mockParams = {}) {
239
+ const asks = [];
240
+ let askIndex = 0;
147
241
  try {
148
242
  const generator = generatorFn(mockParams);
149
243
  let result = await generator.next();
150
244
  while (!result.done) {
151
245
  const yielded = result.value;
152
- if (isInputYield(yielded)) {
153
- const id = yielded.id || `prompt_${promptIndex++}`;
154
- if ('prompt' in yielded) {
155
- yields.push({
156
- id,
157
- type: yielded.type === 'password' ? 'prompt' : 'prompt',
158
- prompt: yielded.prompt,
159
- default: yielded.default,
160
- required: yielded.required,
161
- pattern: yielded.pattern,
162
- });
163
- // Provide mock value to continue
164
- result = await generator.next(yielded.default || '');
246
+ if (isAskYield(yielded)) {
247
+ const id = yielded.id || `ask_${askIndex++}`;
248
+ const extracted = {
249
+ id,
250
+ type: yielded.ask,
251
+ message: yielded.message,
252
+ required: yielded.required,
253
+ };
254
+ // Extract type-specific properties
255
+ if (yielded.ask === 'text') {
256
+ extracted.default = yielded.default;
257
+ extracted.pattern = yielded.pattern;
165
258
  }
166
- else if ('confirm' in yielded) {
167
- yields.push({
168
- id,
169
- type: 'confirm',
170
- prompt: yielded.confirm,
171
- dangerous: yielded.dangerous,
172
- });
173
- result = await generator.next(true);
259
+ else if (yielded.ask === 'confirm') {
260
+ extracted.default = yielded.default;
174
261
  }
175
- else if ('select' in yielded) {
176
- yields.push({
177
- id,
178
- type: 'select',
179
- prompt: yielded.select,
180
- options: yielded.options,
181
- multi: yielded.multi,
182
- });
183
- const firstOption = yielded.options[0];
184
- const mockValue = typeof firstOption === 'string' ? firstOption : firstOption.value;
185
- result = await generator.next(yielded.multi ? [mockValue] : mockValue);
262
+ else if (yielded.ask === 'select') {
263
+ extracted.options = yielded.options;
264
+ extracted.default = yielded.default;
186
265
  }
266
+ else if (yielded.ask === 'number') {
267
+ extracted.default = yielded.default;
268
+ extracted.min = yielded.min;
269
+ extracted.max = yielded.max;
270
+ }
271
+ asks.push(extracted);
272
+ // Provide mock value to continue
273
+ const mockValue = getMockValue(yielded);
274
+ result = await generator.next(mockValue);
187
275
  }
188
276
  else {
189
- // Skip non-input yields
277
+ // Skip emit yields
190
278
  result = await generator.next();
191
279
  }
192
280
  }
@@ -194,55 +282,129 @@ export async function extractYields(generatorFn, mockParams = {}) {
194
282
  catch (error) {
195
283
  // Generator may throw if it needs real resources
196
284
  // Return what we've extracted so far
197
- console.warn('[generator] Yield extraction incomplete:', error);
285
+ console.warn('[generator] Ask extraction incomplete:', error);
286
+ }
287
+ return asks;
288
+ }
289
+ /**
290
+ * Get a mock value for an ask yield (for extraction purposes)
291
+ */
292
+ function getMockValue(ask) {
293
+ switch (ask.ask) {
294
+ case 'text':
295
+ case 'password':
296
+ return ask.default || '';
297
+ case 'confirm':
298
+ return ask.default ?? true;
299
+ case 'select':
300
+ const select = ask;
301
+ const firstOpt = select.options[0];
302
+ const firstVal = typeof firstOpt === 'string' ? firstOpt : firstOpt.value;
303
+ return select.multi ? [firstVal] : firstVal;
304
+ case 'number':
305
+ return ask.default ?? 0;
306
+ case 'file':
307
+ return null;
308
+ case 'date':
309
+ return ask.default || new Date().toISOString();
310
+ default:
311
+ return null;
198
312
  }
199
- return yields;
200
313
  }
201
- // ============================================================================
202
- // Default Input Providers - Built-in implementations for common scenarios
203
- // ============================================================================
314
+ // ══════════════════════════════════════════════════════════════════════════════
315
+ // BUILT-IN INPUT PROVIDERS
316
+ // ══════════════════════════════════════════════════════════════════════════════
204
317
  /**
205
- * Create an input provider from pre-provided values
206
- * Throws if a required value is missing
318
+ * Error thrown when input is required but not available.
319
+ *
320
+ * REST APIs can catch this to return a continuation response.
321
+ *
322
+ * @example
323
+ * try {
324
+ * await executeGenerator(gen, { inputProvider: createPrefilledProvider({}) });
325
+ * } catch (e) {
326
+ * if (e instanceof NeedsInputError) {
327
+ * return {
328
+ * status: 'awaiting_input',
329
+ * ask: e.ask,
330
+ * continuation_id: saveContinuation(gen)
331
+ * };
332
+ * }
333
+ * }
334
+ */
335
+ export class NeedsInputError extends Error {
336
+ ask;
337
+ constructor(ask) {
338
+ super(`Input required: ${ask.message}`);
339
+ this.name = 'NeedsInputError';
340
+ this.ask = ask;
341
+ }
342
+ }
343
+ /**
344
+ * Create an input provider from pre-provided values.
345
+ * Throws NeedsInputError if a required value is missing.
346
+ *
347
+ * Use for REST APIs where all inputs are provided upfront.
348
+ *
349
+ * @example
350
+ * const provider = createPrefilledProvider({
351
+ * name: 'John',
352
+ * confirmed: true
353
+ * });
207
354
  */
208
355
  export function createPrefilledProvider(inputs) {
209
- return async (yielded) => {
210
- if (!isInputYield(yielded))
211
- return undefined;
212
- const id = yielded.id || 'default';
356
+ let askIndex = 0;
357
+ return async (ask) => {
358
+ const id = ask.id || `ask_${askIndex++}`;
213
359
  if (id in inputs) {
214
360
  return inputs[id];
215
361
  }
216
362
  // Check for default value
217
- if ('prompt' in yielded && yielded.default !== undefined) {
218
- return yielded.default;
363
+ if ('default' in ask && ask.default !== undefined) {
364
+ return ask.default;
219
365
  }
220
- throw new NeedsInputError(yielded);
366
+ // No input available
367
+ throw new NeedsInputError(ask);
221
368
  };
222
369
  }
370
+ // ══════════════════════════════════════════════════════════════════════════════
371
+ // UTILITY: Wrap regular function as generator
372
+ // ══════════════════════════════════════════════════════════════════════════════
223
373
  /**
224
- * Error thrown when input is needed but not available
225
- * Runtimes can catch this to return appropriate responses
374
+ * Wrap a regular async function to behave like a generator.
375
+ * Useful for uniform handling in runtimes.
376
+ *
377
+ * @example
378
+ * const gen = wrapAsGenerator(() => photon.simpleMethod(params));
379
+ * const result = await executeGenerator(gen, config);
226
380
  */
227
- export class NeedsInputError extends Error {
228
- yielded;
229
- constructor(yielded) {
230
- const message = 'prompt' in yielded ? yielded.prompt :
231
- 'confirm' in yielded ? yielded.confirm :
232
- 'select' in yielded ? yielded.select : 'Input required';
233
- super(`Input required: ${message}`);
234
- this.name = 'NeedsInputError';
235
- this.yielded = yielded;
236
- }
381
+ export async function* wrapAsGenerator(asyncFn) {
382
+ return await asyncFn();
237
383
  }
238
- // ============================================================================
239
- // Utility: Wrap regular async function to match generator interface
240
- // ============================================================================
241
384
  /**
242
- * Wrap a regular async function to behave like a generator
243
- * Useful for uniform handling in runtimes
385
+ * @deprecated Use isAskYield instead
244
386
  */
245
- export async function* wrapAsGenerator(asyncFn) {
246
- return await asyncFn();
387
+ export const isInputYield = isAskYield;
388
+ /**
389
+ * @deprecated Use isEmitYield instead
390
+ */
391
+ export function isProgressYield(y) {
392
+ return isEmitYield(y) && y.emit === 'progress';
393
+ }
394
+ /**
395
+ * @deprecated Use isEmitYield instead
396
+ */
397
+ export function isStreamYield(y) {
398
+ return isEmitYield(y) && y.emit === 'stream';
399
+ }
400
+ /**
401
+ * @deprecated Use isEmitYield instead
402
+ */
403
+ export function isLogYield(y) {
404
+ return isEmitYield(y) && y.emit === 'log';
247
405
  }
406
+ /**
407
+ * @deprecated Use extractAsks instead
408
+ */
409
+ export const extractYields = extractAsks;
248
410
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}