@portel/photon 1.14.0 → 1.16.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 (125) hide show
  1. package/dist/auto-ui/beam/photon-management.d.ts +1 -1
  2. package/dist/auto-ui/beam/photon-management.d.ts.map +1 -1
  3. package/dist/auto-ui/beam/photon-management.js +5 -1
  4. package/dist/auto-ui/beam/photon-management.js.map +1 -1
  5. package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
  6. package/dist/auto-ui/beam/routes/api-config.js +31 -9
  7. package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
  8. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
  9. package/dist/auto-ui/beam/routes/api-marketplace.js +3 -0
  10. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
  11. package/dist/auto-ui/beam.d.ts.map +1 -1
  12. package/dist/auto-ui/beam.js +205 -56
  13. package/dist/auto-ui/beam.js.map +1 -1
  14. package/dist/auto-ui/bridge/index.d.ts.map +1 -1
  15. package/dist/auto-ui/bridge/index.js +578 -0
  16. package/dist/auto-ui/bridge/index.js.map +1 -1
  17. package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
  18. package/dist/auto-ui/bridge/renderers.js +7 -3
  19. package/dist/auto-ui/bridge/renderers.js.map +1 -1
  20. package/dist/auto-ui/bridge/types.d.ts +6 -0
  21. package/dist/auto-ui/bridge/types.d.ts.map +1 -1
  22. package/dist/auto-ui/frontend/pure-view.html +289 -0
  23. package/dist/auto-ui/photon-bridge.d.ts +11 -0
  24. package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
  25. package/dist/auto-ui/photon-bridge.js +75 -1
  26. package/dist/auto-ui/photon-bridge.js.map +1 -1
  27. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  28. package/dist/auto-ui/streamable-http-transport.js +29 -3
  29. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  30. package/dist/beam-form.bundle.js +5707 -0
  31. package/dist/beam-form.bundle.js.map +7 -0
  32. package/dist/beam.bundle.js +2863 -895
  33. package/dist/beam.bundle.js.map +4 -4
  34. package/dist/claude-code-plugin.js +11 -3
  35. package/dist/claude-code-plugin.js.map +1 -1
  36. package/dist/cli/commands/build.js +1 -1
  37. package/dist/cli/commands/build.js.map +1 -1
  38. package/dist/cli/commands/doctor.d.ts.map +1 -1
  39. package/dist/cli/commands/doctor.js +7 -5
  40. package/dist/cli/commands/doctor.js.map +1 -1
  41. package/dist/cli/commands/info.d.ts.map +1 -1
  42. package/dist/cli/commands/info.js +18 -4
  43. package/dist/cli/commands/info.js.map +1 -1
  44. package/dist/cli/commands/mcp.js +2 -2
  45. package/dist/cli/commands/mcp.js.map +1 -1
  46. package/dist/cli/commands/update.d.ts.map +1 -1
  47. package/dist/cli/commands/update.js +6 -2
  48. package/dist/cli/commands/update.js.map +1 -1
  49. package/dist/cli-alias.d.ts.map +1 -1
  50. package/dist/cli-alias.js +3 -2
  51. package/dist/cli-alias.js.map +1 -1
  52. package/dist/daemon/client.d.ts +5 -0
  53. package/dist/daemon/client.d.ts.map +1 -1
  54. package/dist/daemon/client.js +50 -0
  55. package/dist/daemon/client.js.map +1 -1
  56. package/dist/daemon/manager.d.ts +15 -0
  57. package/dist/daemon/manager.d.ts.map +1 -1
  58. package/dist/daemon/manager.js +142 -11
  59. package/dist/daemon/manager.js.map +1 -1
  60. package/dist/daemon/worker-manager.js +1 -1
  61. package/dist/daemon/worker-manager.js.map +1 -1
  62. package/dist/deploy/cloudflare.d.ts.map +1 -1
  63. package/dist/deploy/cloudflare.js +12 -10
  64. package/dist/deploy/cloudflare.js.map +1 -1
  65. package/dist/loader.d.ts.map +1 -1
  66. package/dist/loader.js +37 -2
  67. package/dist/loader.js.map +1 -1
  68. package/dist/marketplace-manager.d.ts +9 -0
  69. package/dist/marketplace-manager.d.ts.map +1 -1
  70. package/dist/marketplace-manager.js +115 -42
  71. package/dist/marketplace-manager.js.map +1 -1
  72. package/dist/meta.d.ts +51 -0
  73. package/dist/meta.d.ts.map +1 -0
  74. package/dist/meta.js +320 -0
  75. package/dist/meta.js.map +1 -0
  76. package/dist/photon-cli-runner.d.ts.map +1 -1
  77. package/dist/photon-cli-runner.js +30 -5
  78. package/dist/photon-cli-runner.js.map +1 -1
  79. package/dist/photon-doc-extractor.d.ts +1 -0
  80. package/dist/photon-doc-extractor.d.ts.map +1 -1
  81. package/dist/photon-doc-extractor.js +33 -21
  82. package/dist/photon-doc-extractor.js.map +1 -1
  83. package/dist/photons/builder-compass.photon.d.ts +167 -0
  84. package/dist/photons/builder-compass.photon.d.ts.map +1 -0
  85. package/dist/photons/builder-compass.photon.js +816 -0
  86. package/dist/photons/builder-compass.photon.js.map +1 -0
  87. package/dist/photons/builder-compass.photon.ts +1129 -0
  88. package/dist/photons/docs/ui/docs.html +441 -0
  89. package/dist/photons/docs.photon.d.ts +237 -0
  90. package/dist/photons/docs.photon.d.ts.map +1 -0
  91. package/dist/photons/docs.photon.js +483 -0
  92. package/dist/photons/docs.photon.js.map +1 -0
  93. package/dist/photons/docs.photon.ts +536 -0
  94. package/dist/photons/maker.photon.d.ts.map +1 -1
  95. package/dist/photons/maker.photon.js +19 -2
  96. package/dist/photons/maker.photon.js.map +1 -1
  97. package/dist/photons/maker.photon.ts +18 -2
  98. package/dist/photons/slides.photon.d.ts +212 -0
  99. package/dist/photons/slides.photon.d.ts.map +1 -0
  100. package/dist/photons/slides.photon.js +355 -0
  101. package/dist/photons/slides.photon.js.map +1 -0
  102. package/dist/photons/slides.photon.ts +370 -0
  103. package/dist/photons/spreadsheet/ui/spreadsheet.html +779 -0
  104. package/dist/photons/spreadsheet.photon.d.ts +554 -0
  105. package/dist/photons/spreadsheet.photon.d.ts.map +1 -0
  106. package/dist/photons/spreadsheet.photon.js +1050 -0
  107. package/dist/photons/spreadsheet.photon.js.map +1 -0
  108. package/dist/photons/spreadsheet.photon.ts +1239 -0
  109. package/dist/photons/ui/builder-compass.html +1199 -0
  110. package/dist/photons/ui/builder-compass.photon.html +380 -0
  111. package/dist/server.d.ts.map +1 -1
  112. package/dist/server.js +33 -59
  113. package/dist/server.js.map +1 -1
  114. package/dist/shared/error-handler.d.ts +8 -0
  115. package/dist/shared/error-handler.d.ts.map +1 -1
  116. package/dist/shared/error-handler.js +50 -0
  117. package/dist/shared/error-handler.js.map +1 -1
  118. package/dist/shared-utils.d.ts +16 -2
  119. package/dist/shared-utils.d.ts.map +1 -1
  120. package/dist/shared-utils.js +37 -3
  121. package/dist/shared-utils.js.map +1 -1
  122. package/dist/template-manager.d.ts.map +1 -1
  123. package/dist/template-manager.js +2 -1
  124. package/dist/template-manager.js.map +1 -1
  125. package/package.json +8 -3
package/dist/meta.js ADDED
@@ -0,0 +1,320 @@
1
+ /**
2
+ * _meta — Transport-agnostic system parameter namespace
3
+ *
4
+ * Clients attach `_meta` to tool call arguments for system-level hints.
5
+ * The runtime strips it before method invocation — methods never see it.
6
+ *
7
+ * Supported keys:
8
+ * format — Output format: csv, json, yaml, markdown, html
9
+ * viewport — Container size hint: { width, height? }
10
+ * fields — Field projection: { include?: [], exclude?: [] }
11
+ * locale — Localization: { language?, timezone? }
12
+ */
13
+ // Default formats available for all methods (trivial serialization)
14
+ const DEFAULT_EXPORT_FORMATS = ['json', 'yaml'];
15
+ // ═══════════════════════════════════════════════════════════════════════════════
16
+ // STRIP & APPLY
17
+ // ═══════════════════════════════════════════════════════════════════════════════
18
+ /**
19
+ * Extract `_meta` from tool call arguments.
20
+ * Returns clean args (without _meta) and the extracted meta params.
21
+ */
22
+ export function stripMeta(args) {
23
+ if (!args || typeof args !== 'object' || !('_meta' in args)) {
24
+ return { cleanArgs: args };
25
+ }
26
+ const { _meta, ...cleanArgs } = args;
27
+ return { cleanArgs, meta: _meta };
28
+ }
29
+ /**
30
+ * Apply _meta transformations to a tool result.
31
+ * Pipeline: field selection → format transformation.
32
+ *
33
+ * @param result - Raw method return value
34
+ * @param meta - Extracted _meta params
35
+ * @param exportFormats - Allowed formats from @export tag (undefined = defaults)
36
+ * @returns Transformed result, or MetaFormattedResult wrapper for text formats
37
+ */
38
+ export function applyMeta(result, meta, exportFormats) {
39
+ let processed = result;
40
+ // 1. Field selection (before format, so format works on filtered data)
41
+ if (meta.fields) {
42
+ processed = applyFieldSelection(processed, meta.fields);
43
+ }
44
+ // 2. Format transformation
45
+ if (meta.format) {
46
+ return applyFormatTransformation(processed, meta.format, exportFormats);
47
+ }
48
+ return processed;
49
+ }
50
+ // ═══════════════════════════════════════════════════════════════════════════════
51
+ // FIELD SELECTION
52
+ // ═══════════════════════════════════════════════════════════════════════════════
53
+ function applyFieldSelection(data, fields) {
54
+ if (Array.isArray(data)) {
55
+ return data.map((item) => applyFieldSelection(item, fields));
56
+ }
57
+ if (typeof data !== 'object' || data === null) {
58
+ return data;
59
+ }
60
+ const obj = data;
61
+ if (fields.include && fields.include.length > 0) {
62
+ const filtered = {};
63
+ for (const key of fields.include) {
64
+ if (key in obj)
65
+ filtered[key] = obj[key];
66
+ }
67
+ return filtered;
68
+ }
69
+ if (fields.exclude && fields.exclude.length > 0) {
70
+ const filtered = {};
71
+ for (const [key, value] of Object.entries(obj)) {
72
+ if (!fields.exclude.includes(key))
73
+ filtered[key] = value;
74
+ }
75
+ return filtered;
76
+ }
77
+ return data;
78
+ }
79
+ // ═══════════════════════════════════════════════════════════════════════════════
80
+ // FORMAT TRANSFORMATION
81
+ // ═══════════════════════════════════════════════════════════════════════════════
82
+ function applyFormatTransformation(data, format, exportFormats) {
83
+ const allowed = exportFormats ?? DEFAULT_EXPORT_FORMATS;
84
+ if (!allowed.includes(format)) {
85
+ // Return error as a formatted result so the client gets a clear message
86
+ return {
87
+ _metaFormatted: true,
88
+ text: `Format '${format}' not supported. Supported: ${allowed.join(', ')}`,
89
+ mimeType: 'text/plain',
90
+ };
91
+ }
92
+ switch (format) {
93
+ case 'json':
94
+ return {
95
+ _metaFormatted: true,
96
+ text: toJson(data),
97
+ mimeType: 'application/json',
98
+ };
99
+ case 'yaml':
100
+ return {
101
+ _metaFormatted: true,
102
+ text: toYaml(data),
103
+ mimeType: 'text/yaml',
104
+ };
105
+ case 'csv':
106
+ return {
107
+ _metaFormatted: true,
108
+ text: toCsv(data),
109
+ mimeType: 'text/csv',
110
+ };
111
+ case 'markdown':
112
+ return {
113
+ _metaFormatted: true,
114
+ text: toMarkdownTable(data),
115
+ mimeType: 'text/markdown',
116
+ };
117
+ case 'html':
118
+ return {
119
+ _metaFormatted: true,
120
+ text: toHtmlTable(data),
121
+ mimeType: 'text/html',
122
+ };
123
+ default:
124
+ return {
125
+ _metaFormatted: true,
126
+ text: `Format '${format}' is not yet implemented`,
127
+ mimeType: 'text/plain',
128
+ };
129
+ }
130
+ }
131
+ // ═══════════════════════════════════════════════════════════════════════════════
132
+ // SERIALIZERS
133
+ // ═══════════════════════════════════════════════════════════════════════════════
134
+ function toJson(data) {
135
+ return JSON.stringify(data, null, 2);
136
+ }
137
+ /**
138
+ * Minimal YAML serializer — no external dependency.
139
+ * Handles primitives, arrays, and nested objects.
140
+ */
141
+ function toYaml(data, indent = 0) {
142
+ const pad = ' '.repeat(indent);
143
+ if (data === null || data === undefined)
144
+ return `${pad}null`;
145
+ if (typeof data === 'boolean')
146
+ return `${pad}${data}`;
147
+ if (typeof data === 'number')
148
+ return `${pad}${data}`;
149
+ if (typeof data === 'string') {
150
+ // Quote strings that could be ambiguous
151
+ if (data === '' ||
152
+ data === 'true' ||
153
+ data === 'false' ||
154
+ data === 'null' ||
155
+ data.includes('\n') ||
156
+ data.includes(':') ||
157
+ data.includes('#') ||
158
+ /^\d/.test(data)) {
159
+ return `${pad}${JSON.stringify(data)}`;
160
+ }
161
+ return `${pad}${data}`;
162
+ }
163
+ if (Array.isArray(data)) {
164
+ if (data.length === 0)
165
+ return `${pad}[]`;
166
+ return data
167
+ .map((item) => {
168
+ if (typeof item === 'object' && item !== null && !Array.isArray(item)) {
169
+ const entries = Object.entries(item);
170
+ if (entries.length === 0)
171
+ return `${pad}- {}`;
172
+ const [firstKey, firstVal] = entries[0];
173
+ const firstLine = `${pad}- ${firstKey}: ${yamlValue(firstVal)}`;
174
+ const rest = entries
175
+ .slice(1)
176
+ .map(([k, v]) => `${pad} ${k}: ${yamlValue(v)}`)
177
+ .join('\n');
178
+ return rest ? `${firstLine}\n${rest}` : firstLine;
179
+ }
180
+ return `${pad}- ${yamlValue(item)}`;
181
+ })
182
+ .join('\n');
183
+ }
184
+ if (typeof data === 'object') {
185
+ const entries = Object.entries(data);
186
+ if (entries.length === 0)
187
+ return `${pad}{}`;
188
+ return entries
189
+ .map(([key, value]) => {
190
+ if (typeof value === 'object' && value !== null) {
191
+ return `${pad}${key}:\n${toYaml(value, indent + 1)}`;
192
+ }
193
+ return `${pad}${key}: ${yamlValue(value)}`;
194
+ })
195
+ .join('\n');
196
+ }
197
+ return `${pad}${typeof data === 'object' ? JSON.stringify(data) : String(data)}`;
198
+ }
199
+ function yamlValue(value) {
200
+ if (value === null || value === undefined)
201
+ return 'null';
202
+ if (typeof value === 'boolean' || typeof value === 'number')
203
+ return String(value);
204
+ if (typeof value === 'string') {
205
+ if (value === '' ||
206
+ value === 'true' ||
207
+ value === 'false' ||
208
+ value === 'null' ||
209
+ value.includes('\n') ||
210
+ value.includes(':') ||
211
+ value.includes('#') ||
212
+ /^\d/.test(value)) {
213
+ return JSON.stringify(value);
214
+ }
215
+ return value;
216
+ }
217
+ if (Array.isArray(value))
218
+ return JSON.stringify(value);
219
+ if (typeof value === 'object')
220
+ return JSON.stringify(value);
221
+ return String(value);
222
+ }
223
+ /**
224
+ * CSV serializer — RFC 4180 compliant.
225
+ * Handles arrays of objects (tabular data) and single objects.
226
+ */
227
+ function toCsv(data) {
228
+ const rows = normalizeToRows(data);
229
+ if (rows.length === 0)
230
+ return '';
231
+ const columns = Object.keys(rows[0]);
232
+ const header = columns.map(csvEscape).join(',');
233
+ const body = rows.map((row) => columns.map((col) => csvEscape(row[col])).join(',')).join('\n');
234
+ return `${header}\n${body}`;
235
+ }
236
+ function csvEscape(value) {
237
+ if (value === null || value === undefined)
238
+ return '';
239
+ const str = typeof value === 'object' ? JSON.stringify(value) : String(value);
240
+ // RFC 4180: quote fields containing comma, newline, or double-quote
241
+ if (str.includes(',') || str.includes('\n') || str.includes('"')) {
242
+ return `"${str.replace(/"/g, '""')}"`;
243
+ }
244
+ return str;
245
+ }
246
+ /**
247
+ * Markdown table serializer.
248
+ */
249
+ function toMarkdownTable(data) {
250
+ const rows = normalizeToRows(data);
251
+ if (rows.length === 0)
252
+ return '_No data_';
253
+ const columns = Object.keys(rows[0]);
254
+ const header = `| ${columns.join(' | ')} |`;
255
+ const separator = `| ${columns.map(() => '---').join(' | ')} |`;
256
+ const body = rows
257
+ .map((row) => `| ${columns.map((col) => mdEscape(row[col])).join(' | ')} |`)
258
+ .join('\n');
259
+ return `${header}\n${separator}\n${body}`;
260
+ }
261
+ function mdEscape(value) {
262
+ if (value === null || value === undefined)
263
+ return '';
264
+ const str = typeof value === 'object' ? JSON.stringify(value) : String(value);
265
+ return str.replace(/\|/g, '\\|').replace(/\n/g, ' ');
266
+ }
267
+ /**
268
+ * HTML table serializer.
269
+ */
270
+ function toHtmlTable(data) {
271
+ const rows = normalizeToRows(data);
272
+ if (rows.length === 0)
273
+ return '<p>No data</p>';
274
+ const columns = Object.keys(rows[0]);
275
+ const headerCells = columns.map((col) => `<th>${htmlEscape(col)}</th>`).join('');
276
+ const bodyRows = rows
277
+ .map((row) => {
278
+ const cells = columns.map((col) => `<td>${htmlEscape(row[col])}</td>`).join('');
279
+ return `<tr>${cells}</tr>`;
280
+ })
281
+ .join('\n');
282
+ return `<table>\n<thead><tr>${headerCells}</tr></thead>\n<tbody>\n${bodyRows}\n</tbody>\n</table>`;
283
+ }
284
+ function htmlEscape(value) {
285
+ if (value === null || value === undefined)
286
+ return '';
287
+ const str = typeof value === 'object' ? JSON.stringify(value) : String(value);
288
+ return str
289
+ .replace(/&/g, '&amp;')
290
+ .replace(/</g, '&lt;')
291
+ .replace(/>/g, '&gt;')
292
+ .replace(/"/g, '&quot;');
293
+ }
294
+ // ═══════════════════════════════════════════════════════════════════════════════
295
+ // HELPERS
296
+ // ═══════════════════════════════════════════════════════════════════════════════
297
+ /**
298
+ * Normalize data to an array of flat objects for tabular serializers.
299
+ * Single objects become a one-row table. Primitives become [{ value: x }].
300
+ */
301
+ function normalizeToRows(data) {
302
+ if (Array.isArray(data)) {
303
+ if (data.length === 0)
304
+ return [];
305
+ // Array of objects → use directly
306
+ if (typeof data[0] === 'object' && data[0] !== null) {
307
+ return data;
308
+ }
309
+ // Array of primitives → wrap each
310
+ return data.map((v) => ({ value: v }));
311
+ }
312
+ if (typeof data === 'object' && data !== null) {
313
+ return [data];
314
+ }
315
+ if (data !== null && data !== undefined) {
316
+ return [{ value: data }];
317
+ }
318
+ return [];
319
+ }
320
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmBH,oEAAoE;AACpE,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,kFAAkF;AAClF,gBAAgB;AAChB,kFAAkF;AAElF;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAA6B;IAIrD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAmB,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,IAAgB,EAAE,aAAwB;IACnF,IAAI,SAAS,GAAG,MAAM,CAAC;IAEvB,uEAAuE;IACvE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,SAAS,GAAG,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kFAAkF;AAClF,kBAAkB;AAClB,kFAAkF;AAElF,SAAS,mBAAmB,CAC1B,IAAa,EACb,MAAkD;IAElD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAE5C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,GAAG;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAClF,wBAAwB;AACxB,kFAAkF;AAElF,SAAS,yBAAyB,CAChC,IAAa,EACb,MAAc,EACd,aAAwB;IAExB,MAAM,OAAO,GAAG,aAAa,IAAI,sBAAsB,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,wEAAwE;QACxE,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,IAAI,EAAE,WAAW,MAAM,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1E,QAAQ,EAAE,YAAY;SACO,CAAC;IAClC,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO;gBACL,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;gBAClB,QAAQ,EAAE,kBAAkB;aAC7B,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;gBAClB,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,KAAK,KAAK;YACR,OAAO;gBACL,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,UAAU;aACrB,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;gBAC3B,QAAQ,EAAE,eAAe;aAC1B,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;gBACvB,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ;YACE,OAAO;gBACL,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE,WAAW,MAAM,0BAA0B;gBACjD,QAAQ,EAAE,YAAY;aACO,CAAC;IACpC,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,cAAc;AACd,kFAAkF;AAElF,SAAS,MAAM,CAAC,IAAa;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,IAAa,EAAE,MAAM,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,GAAG,MAAM,CAAC;IAC7D,IAAI,OAAO,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IACtD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,wCAAwC;QACxC,IACE,IAAI,KAAK,EAAE;YACX,IAAI,KAAK,MAAM;YACf,IAAI,KAAK,OAAO;YAChB,IAAI,KAAK,MAAM;YACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAChB,CAAC;YACD,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,GAAG,IAAI,CAAC;QACzC,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,GAAG,GAAG,MAAM,CAAC;gBAC9C,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,SAAS,GAAG,GAAG,GAAG,KAAK,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,GAAG,OAAO;qBACjB,KAAK,CAAC,CAAC,CAAC;qBACR,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChD,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACpD,CAAC;YACD,OAAO,GAAG,GAAG,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,GAAG,IAAI,CAAC;QAC5C,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,OAAO,GAAG,GAAG,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC;YACD,OAAO,GAAG,GAAG,GAAG,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAiC,CAAC,EAAE,CAAC;AAChH,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IACE,KAAK,KAAK,EAAE;YACZ,KAAK,KAAK,MAAM;YAChB,KAAK,KAAK,OAAO;YACjB,KAAK,KAAK,MAAM;YAChB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EACjB,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,KAAkC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,KAAK,CAAC,IAAa;IAC1B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/F,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAkC,CAAC,CAAC;IACjG,oEAAoE;IACpE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAa;IACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5C,MAAM,SAAS,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI;SACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAC3E,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,GAAG,MAAM,KAAK,SAAS,KAAK,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAkC,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAa;IAChC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAE/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,IAAI;SAClB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,OAAO,KAAK,OAAO,CAAC;IAC7B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,uBAAuB,WAAW,2BAA2B,QAAQ,sBAAsB,CAAC;AACrG,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAkC,CAAC,CAAC;IACjG,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,kFAAkF;AAClF,UAAU;AACV,kFAAkF;AAElF;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,kCAAkC;QAClC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,IAAiC,CAAC;QAC3C,CAAC;QACD,kCAAkC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,CAAC,IAA+B,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"photon-cli-runner.d.ts","sourceRoot":"","sources":["../src/photon-cli-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyCH,OAAO,EAGL,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAiC5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,EAAE,CAAC;IACJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA8fD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA2E9F;AA2yBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAiRf"}
1
+ {"version":3,"file":"photon-cli-runner.d.ts","sourceRoot":"","sources":["../src/photon-cli-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyCH,OAAO,EAGL,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAiC5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,EAAE,CAAC;IACJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAogBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA2E9F;AA2yBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAwSf"}
@@ -210,10 +210,15 @@ function formatOutput(result, formatHint) {
210
210
  return true;
211
211
  }
212
212
  // Handle @format qr — render QR code in terminal
213
- if (hint === 'qr' && result && typeof result === 'object') {
214
- const qrValue = result.qr || result.value || result.url || result.link;
213
+ if (hint === 'qr' && result) {
214
+ // Support both plain string results and object results with qr/value/url/link keys
215
+ const qrValue = typeof result === 'string'
216
+ ? result
217
+ : typeof result === 'object'
218
+ ? result.qr || result.value || result.url || result.link
219
+ : null;
215
220
  if (qrValue && typeof qrValue === 'string') {
216
- if (result.message) {
221
+ if (typeof result === 'object' && result.message) {
217
222
  console.log(result.message);
218
223
  }
219
224
  import('qrcode')
@@ -225,7 +230,7 @@ function formatOutput(result, formatHint) {
225
230
  .catch(() => console.log(`[QR] ${qrValue}`));
226
231
  return true;
227
232
  }
228
- if (result.message) {
233
+ if (typeof result === 'object' && result.message) {
229
234
  console.log(result.message);
230
235
  return true;
231
236
  }
@@ -1424,6 +1429,12 @@ export async function runMethod(photonName, methodName, args, workingDir) {
1424
1429
  const jsonOutput = args.includes('--json');
1425
1430
  // Check for -y flag (non-interactive mode, for agents/scripts)
1426
1431
  const nonInteractive = args.includes('-y');
1432
+ // Check for --format <type> flag (maps to _meta.format)
1433
+ let cliFormat;
1434
+ const formatIndex = args.indexOf('--format');
1435
+ if (formatIndex !== -1 && args[formatIndex + 1]) {
1436
+ cliFormat = args[formatIndex + 1];
1437
+ }
1427
1438
  // Check for --resume <runId> flag
1428
1439
  let resumeRunId;
1429
1440
  const resumeIndex = args.indexOf('--resume');
@@ -1434,9 +1445,18 @@ export async function runMethod(photonName, methodName, args, workingDir) {
1434
1445
  const filteredArgs = args.filter((arg, i) => arg !== '--json' &&
1435
1446
  arg !== '-y' &&
1436
1447
  arg !== '--resume' &&
1437
- (resumeIndex === -1 || i !== resumeIndex + 1));
1448
+ arg !== '--format' &&
1449
+ (resumeIndex === -1 || i !== resumeIndex + 1) &&
1450
+ (formatIndex === -1 || i !== formatIndex + 1));
1438
1451
  // Parse arguments
1439
1452
  const parsedArgs = parseCliArgs(filteredArgs, method.params);
1453
+ // Inject _meta from CLI flags (--format maps to _meta.format)
1454
+ if (cliFormat) {
1455
+ parsedArgs._meta = {
1456
+ ...(parsedArgs._meta || {}),
1457
+ format: cliFormat,
1458
+ };
1459
+ }
1440
1460
  // Validate required parameters
1441
1461
  const missing = [];
1442
1462
  for (const param of method.params) {
@@ -1562,6 +1582,11 @@ export async function runMethod(photonName, methodName, args, workingDir) {
1562
1582
  const actualResult = isStateful ? result.result : result;
1563
1583
  // Clear any intermediate render output before displaying final result
1564
1584
  clearRenderZone();
1585
+ // _meta format transformation: pre-formatted text outputs directly
1586
+ if (actualResult && typeof actualResult === 'object' && actualResult._metaFormatted === true) {
1587
+ console.log(actualResult.text);
1588
+ process.exit(0);
1589
+ }
1565
1590
  // Display result
1566
1591
  if (jsonOutput) {
1567
1592
  // For JSON output, include workflow metadata if stateful