@portel/photon 1.26.1 → 1.28.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 (50) hide show
  1. package/README.md +33 -0
  2. package/dist/auto-ui/beam/routes/api-daemon.d.ts +1 -0
  3. package/dist/auto-ui/beam/routes/api-daemon.d.ts.map +1 -1
  4. package/dist/auto-ui/beam/routes/api-daemon.js +35 -1
  5. package/dist/auto-ui/beam/routes/api-daemon.js.map +1 -1
  6. package/dist/beam-form.bundle.js +41 -1
  7. package/dist/beam-form.bundle.js.map +2 -2
  8. package/dist/beam.bundle.js +1661 -252
  9. package/dist/beam.bundle.js.map +4 -4
  10. package/dist/cli/commands/daemon.d.ts.map +1 -1
  11. package/dist/cli/commands/daemon.js +157 -0
  12. package/dist/cli/commands/daemon.js.map +1 -1
  13. package/dist/cli/commands/update.d.ts.map +1 -1
  14. package/dist/cli/commands/update.js +7 -8
  15. package/dist/cli/commands/update.js.map +1 -1
  16. package/dist/daemon/client.d.ts +1 -0
  17. package/dist/daemon/client.d.ts.map +1 -1
  18. package/dist/daemon/client.js +110 -23
  19. package/dist/daemon/client.js.map +1 -1
  20. package/dist/daemon/in-process-bridge.d.ts +29 -0
  21. package/dist/daemon/in-process-bridge.d.ts.map +1 -0
  22. package/dist/daemon/in-process-bridge.js +26 -0
  23. package/dist/daemon/in-process-bridge.js.map +1 -0
  24. package/dist/daemon/manager.d.ts +103 -1
  25. package/dist/daemon/manager.d.ts.map +1 -1
  26. package/dist/daemon/manager.js +313 -92
  27. package/dist/daemon/manager.js.map +1 -1
  28. package/dist/daemon/protocol.d.ts +1 -1
  29. package/dist/daemon/protocol.d.ts.map +1 -1
  30. package/dist/daemon/protocol.js +1 -0
  31. package/dist/daemon/protocol.js.map +1 -1
  32. package/dist/daemon/server.js +859 -38
  33. package/dist/daemon/server.js.map +1 -1
  34. package/dist/loader.d.ts.map +1 -1
  35. package/dist/loader.js +39 -13
  36. package/dist/loader.js.map +1 -1
  37. package/dist/sample-augmenter.d.ts +84 -0
  38. package/dist/sample-augmenter.d.ts.map +1 -0
  39. package/dist/sample-augmenter.js +164 -0
  40. package/dist/sample-augmenter.js.map +1 -0
  41. package/dist/shared/npm-registry.d.ts +30 -0
  42. package/dist/shared/npm-registry.d.ts.map +1 -0
  43. package/dist/shared/npm-registry.js +97 -0
  44. package/dist/shared/npm-registry.js.map +1 -0
  45. package/dist/version-notify.d.ts +5 -0
  46. package/dist/version-notify.d.ts.map +1 -1
  47. package/dist/version-notify.js +46 -23
  48. package/dist/version-notify.js.map +1 -1
  49. package/package.json +1 -1
  50. package/templates/cloudflare/worker.ts.template +94 -22
package/README.md CHANGED
@@ -452,6 +452,39 @@ photon test # Run tests
452
452
  photon ps # Observe & control scheduled jobs, webhooks, sessions
453
453
  ```
454
454
 
455
+ ### `photon ps`: scheduled jobs, webhooks, and sessions
456
+
457
+ `photon ps` is the operator surface for the daemon. Without arguments
458
+ it prints a four-section snapshot — ACTIVE schedules, DECLARED-but-
459
+ not-enrolled, WEBHOOKS, and ACTIVE SESSIONS.
460
+
461
+ ```bash
462
+ photon ps # full snapshot
463
+ photon ps --json # structured output for scripts
464
+ photon ps --type active # one section only
465
+ photon ps --base ~/Projects/kith # filter to one PHOTON_DIR
466
+ ```
467
+
468
+ **Two-step model.** A `@scheduled` annotation in source is **DECLARED**
469
+ until enrolled. Enrollment is per-machine, persistent, and explicit:
470
+
471
+ ```bash
472
+ photon ps enable newsletter:sendDigest # DECLARED → ACTIVE
473
+ photon ps disable newsletter:sendDigest # ACTIVE → suppressed (survives restart)
474
+ photon ps pause newsletter:sendDigest # stop firing without removing enrollment
475
+ photon ps resume newsletter:sendDigest # undo pause
476
+ photon ps history newsletter:sendDigest # last 20 firings: timestamp, status, error
477
+ ```
478
+
479
+ For manual cron schedules without a `@scheduled` tag, use the Beam Pulse
480
+ panel ("Add schedule") or call `this.schedule.create()` from photon code.
481
+
482
+ `this.schedule.create()` (programmatic schedules) skips DECLARED and
483
+ goes straight to ACTIVE. See
484
+ [`docs/GUIDE.md#scheduling`](docs/GUIDE.md#scheduling-scheduled-thisschedule-photon-ps)
485
+ for the full reference, the daemon state layout, and `.photon-no-host`
486
+ for multi-host setups.
487
+
455
488
  ### Install from GitHub
456
489
 
457
490
  Use qualified refs to install and run photons directly from any GitHub repository:
@@ -11,6 +11,7 @@
11
11
  * POST /api/daemon/schedules/disable – body: { photon, method }
12
12
  * POST /api/daemon/schedules/pause – body: { photon, method }
13
13
  * POST /api/daemon/schedules/resume – body: { photon, method }
14
+ * POST /api/daemon/schedules/add – body: { photon, method, cron } (manual schedule, no @scheduled tag required)
14
15
  * GET /api/daemon/history?photon=&method=&limit=&sinceTs=
15
16
  */
16
17
  import type { RouteHandler } from '../types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"api-daemon.d.ts","sourceRoot":"","sources":["../../../../src/auto-ui/beam/routes/api-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA2BhD,eAAO,MAAM,kBAAkB,EAAE,YA2EhC,CAAC"}
1
+ {"version":3,"file":"api-daemon.d.ts","sourceRoot":"","sources":["../../../../src/auto-ui/beam/routes/api-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA2BhD,eAAO,MAAM,kBAAkB,EAAE,YA0GhC,CAAC"}
@@ -11,6 +11,7 @@
11
11
  * POST /api/daemon/schedules/disable – body: { photon, method }
12
12
  * POST /api/daemon/schedules/pause – body: { photon, method }
13
13
  * POST /api/daemon/schedules/resume – body: { photon, method }
14
+ * POST /api/daemon/schedules/add – body: { photon, method, cron } (manual schedule, no @scheduled tag required)
14
15
  * GET /api/daemon/history?photon=&method=&limit=&sinceTs=
15
16
  */
16
17
  import { readBody } from '../../../shared/security.js';
@@ -82,10 +83,43 @@ export const handleDaemonRoutes = async (req, res, url) => {
82
83
  }
83
84
  if (url.pathname.startsWith('/api/daemon/schedules/') && (req.method === 'POST' || !req.method)) {
84
85
  const action = url.pathname.slice('/api/daemon/schedules/'.length);
85
- if (!['enable', 'disable', 'pause', 'resume'].includes(action)) {
86
+ if (!['enable', 'disable', 'pause', 'resume', 'add'].includes(action)) {
86
87
  writeJson(res, 404, { error: `Unknown schedule action "${action}"` });
87
88
  return true;
88
89
  }
90
+ if (action === 'add') {
91
+ const raw = await readBody(req);
92
+ let parsed;
93
+ try {
94
+ parsed = raw ? JSON.parse(raw) : {};
95
+ }
96
+ catch {
97
+ writeJson(res, 400, { error: 'Invalid JSON body' });
98
+ return true;
99
+ }
100
+ const body = parsed;
101
+ if (typeof body.photon !== 'string' || !body.photon.trim()) {
102
+ writeJson(res, 400, { error: 'Missing or invalid "photon"' });
103
+ return true;
104
+ }
105
+ if (typeof body.method !== 'string' || !body.method.trim()) {
106
+ writeJson(res, 400, { error: 'Missing or invalid "method"' });
107
+ return true;
108
+ }
109
+ if (typeof body.cron !== 'string' || !body.cron.trim()) {
110
+ writeJson(res, 400, { error: 'Missing or invalid "cron"' });
111
+ return true;
112
+ }
113
+ try {
114
+ const client = await import('../../../daemon/client.js');
115
+ const result = await client.addManualSchedule(body.photon, body.method, body.cron);
116
+ writeJson(res, 200, { ok: true, result });
117
+ }
118
+ catch (err) {
119
+ writeJson(res, 500, { error: getErrorMessage(err) });
120
+ }
121
+ return true;
122
+ }
89
123
  const parsed = await readAction(req);
90
124
  if ('error' in parsed) {
91
125
  writeJson(res, 400, { error: parsed.error });
@@ -1 +1 @@
1
- {"version":3,"file":"api-daemon.js","sourceRoot":"","sources":["../../../../src/auto-ui/beam/routes/api-daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-daemon.js","sourceRoot":"","sources":["../../../../src/auto-ui/beam/routes/api-daemon.ts"],"names":[],"mappings":"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"}
@@ -1815,6 +1815,21 @@ function formatLabel(name) {
1815
1815
  spaced = spaced.replace(/[_-]+/g, " ");
1816
1816
  let result = spaced.split(/\s+/).map((word) => {
1817
1817
  if (!word) return "";
1818
+ const lower = word.toLowerCase();
1819
+ const mixedCase = {
1820
+ oauth: "OAuth",
1821
+ whatsapp: "WhatsApp",
1822
+ github: "GitHub",
1823
+ gitlab: "GitLab",
1824
+ bitbucket: "Bitbucket",
1825
+ macos: "macOS",
1826
+ ios: "iOS",
1827
+ ipad: "iPad",
1828
+ iphone: "iPhone",
1829
+ npm: "npm",
1830
+ npx: "npx"
1831
+ };
1832
+ if (lower in mixedCase) return mixedCase[lower];
1818
1833
  const upper = word.toUpperCase();
1819
1834
  if ([
1820
1835
  "AI",
@@ -1843,7 +1858,32 @@ function formatLabel(name) {
1843
1858
  "OS",
1844
1859
  "DB",
1845
1860
  "IO",
1846
- "GIT"
1861
+ "GIT",
1862
+ "CPU",
1863
+ "GPU",
1864
+ "RAM",
1865
+ "RPC",
1866
+ "TCP",
1867
+ "UDP",
1868
+ "DNS",
1869
+ "JWT",
1870
+ "TLS",
1871
+ "SSL",
1872
+ "CDN",
1873
+ "SVG",
1874
+ "PNG",
1875
+ "JPG",
1876
+ "PDF",
1877
+ "YAML",
1878
+ "TOML",
1879
+ "CSV",
1880
+ "TSV",
1881
+ "UUID",
1882
+ "CRUD",
1883
+ "REST",
1884
+ "GRPC",
1885
+ "MIME",
1886
+ "PATH"
1847
1887
  ].includes(upper)) {
1848
1888
  if (upper === "IDS") return "IDs";
1849
1889
  return upper;