@portel/photon 1.27.0 → 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.
- package/README.md +33 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +7 -8
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/daemon/server.js +27 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +28 -13
- package/dist/loader.js.map +1 -1
- package/dist/sample-augmenter.d.ts +84 -0
- package/dist/sample-augmenter.d.ts.map +1 -0
- package/dist/sample-augmenter.js +164 -0
- package/dist/sample-augmenter.js.map +1 -0
- package/dist/shared/npm-registry.d.ts +30 -0
- package/dist/shared/npm-registry.d.ts.map +1 -0
- package/dist/shared/npm-registry.js +97 -0
- package/dist/shared/npm-registry.js.map +1 -0
- package/dist/version-notify.d.ts +5 -0
- package/dist/version-notify.d.ts.map +1 -1
- package/dist/version-notify.js +46 -23
- package/dist/version-notify.js.map +1 -1
- package/package.json +1 -1
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:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqF5D"}
|
|
@@ -20,19 +20,18 @@ export function registerUpdateCommand(program) {
|
|
|
20
20
|
try {
|
|
21
21
|
const { printInfo, printSuccess, printWarning, printHeader, printError } = await import('../../cli-formatter.js');
|
|
22
22
|
const { execSync } = await import('child_process');
|
|
23
|
-
|
|
23
|
+
const { fetchLatestVersion } = await import('../../shared/npm-registry.js');
|
|
24
|
+
// 1. Check latest version. Hits registry.npmjs.org over HTTPS
|
|
25
|
+
// directly — shelling out to `npm view` failed under launchd PATH
|
|
26
|
+
// and reported the failure as "registry unreachable" (Bug 3, v1.27.0).
|
|
24
27
|
let latestVersion = null;
|
|
25
28
|
try {
|
|
26
29
|
latestVersion = await runTask('Checking for updates', async () => {
|
|
27
|
-
return
|
|
28
|
-
encoding: 'utf-8',
|
|
29
|
-
timeout: 10000,
|
|
30
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
31
|
-
}).trim();
|
|
30
|
+
return await fetchLatestVersion('@portel/photon');
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
|
-
catch {
|
|
35
|
-
printError(
|
|
33
|
+
catch (err) {
|
|
34
|
+
printError(`Could not check npm registry: ${getErrorMessage(err)}`);
|
|
36
35
|
process.exit(1);
|
|
37
36
|
}
|
|
38
37
|
if (!latestVersion) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,mFAAmF,CACpF;SACA,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,GACtE,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/server.js
CHANGED
|
@@ -3083,8 +3083,34 @@ async function handleRequest(request, socket) {
|
|
|
3083
3083
|
workingDir: j.workingDir ?? defaultBase,
|
|
3084
3084
|
createdBy: j.createdBy,
|
|
3085
3085
|
}));
|
|
3086
|
+
// Resolve declared->active equivalence by (photon, method, cron, base).
|
|
3087
|
+
// The exact-key lookup `scheduledJobs.has(declaredKey(...))` only catches
|
|
3088
|
+
// a declaration that was enrolled via `photon ps enable` — it misses
|
|
3089
|
+
// the case where a photon ships BOTH `@scheduled` AND a legacy
|
|
3090
|
+
// `enable_schedule` that calls `this.schedule.create()`. The legacy
|
|
3091
|
+
// path keys jobs as `<photon>:sched:<uuid>`, so the declaration shows
|
|
3092
|
+
// up as DECLARED-not-enrolled even though an equivalent timer is
|
|
3093
|
+
// actively firing (Bug 5 in v1.27.0). Compare on the underlying
|
|
3094
|
+
// identity tuple so the CLI can suppress the cosmetic duplicate.
|
|
3086
3095
|
const declared = Array.from(declaredSchedules.values()).map((d) => {
|
|
3087
3096
|
const k = declaredKey(d.photon, d.method, d.workingDir);
|
|
3097
|
+
const declBase = d.workingDir ? path.resolve(d.workingDir) : defaultBase;
|
|
3098
|
+
let isActive = scheduledJobs.has(k);
|
|
3099
|
+
if (!isActive) {
|
|
3100
|
+
for (const job of scheduledJobs.values()) {
|
|
3101
|
+
if (job.photonName !== d.photon)
|
|
3102
|
+
continue;
|
|
3103
|
+
if (job.method !== d.method)
|
|
3104
|
+
continue;
|
|
3105
|
+
if (job.cron !== d.cron)
|
|
3106
|
+
continue;
|
|
3107
|
+
const jobBase = job.workingDir ? path.resolve(job.workingDir) : defaultBase;
|
|
3108
|
+
if (jobBase !== declBase)
|
|
3109
|
+
continue;
|
|
3110
|
+
isActive = true;
|
|
3111
|
+
break;
|
|
3112
|
+
}
|
|
3113
|
+
}
|
|
3088
3114
|
return {
|
|
3089
3115
|
key: k,
|
|
3090
3116
|
photon: d.photon,
|
|
@@ -3092,7 +3118,7 @@ async function handleRequest(request, socket) {
|
|
|
3092
3118
|
cron: d.cron,
|
|
3093
3119
|
photonPath: d.photonPath,
|
|
3094
3120
|
workingDir: d.workingDir ?? defaultBase,
|
|
3095
|
-
active:
|
|
3121
|
+
active: isActive,
|
|
3096
3122
|
};
|
|
3097
3123
|
});
|
|
3098
3124
|
const webhooks = [];
|