@portel/photon-core 2.23.0 → 2.24.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/dist/base.d.ts +37 -0
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +71 -2
- package/dist/base.js.map +1 -1
- package/dist/description-sanitizer.d.ts +34 -0
- package/dist/description-sanitizer.d.ts.map +1 -0
- package/dist/description-sanitizer.js +80 -0
- package/dist/description-sanitizer.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +28 -0
- package/dist/memory.js.map +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +96 -0
- package/dist/middleware.js.map +1 -1
- package/dist/mixins.d.ts.map +1 -1
- package/dist/mixins.js +9 -2
- package/dist/mixins.js.map +1 -1
- package/dist/photon-loader-lite.js +41 -0
- package/dist/photon-loader-lite.js.map +1 -1
- package/dist/schedule.d.ts +10 -1
- package/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +20 -10
- package/dist/schedule.js.map +1 -1
- package/dist/schema-extractor.d.ts +2 -1
- package/dist/schema-extractor.d.ts.map +1 -1
- package/dist/schema-extractor.js +128 -14
- package/dist/schema-extractor.js.map +1 -1
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/base.ts +80 -2
- package/src/description-sanitizer.ts +102 -0
- package/src/index.ts +6 -0
- package/src/memory.ts +28 -0
- package/src/middleware.ts +98 -0
- package/src/mixins.ts +14 -2
- package/src/photon-loader-lite.ts +38 -0
- package/src/schedule.ts +26 -10
- package/src/schema-extractor.ts +140 -14
- package/src/types.ts +9 -0
package/dist/types.d.ts
CHANGED
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* - Visualization: chart, chart:<type>, metric, gauge, timeline, dashboard, cart
|
|
9
9
|
* - Content: json, markdown, yaml, xml, html, mermaid, code, code:<lang>, slides
|
|
10
10
|
* - Container: panels, tabs, accordion, stack, columns
|
|
11
|
+
* - Declarative: a2ui (A2UI v0.9 JSONL — emits createSurface/updateComponents/updateDataModel)
|
|
11
12
|
*/
|
|
12
|
-
export type OutputFormat = 'primitive' | 'table' | 'tree' | 'list' | 'none' | 'json' | 'markdown' | 'yaml' | 'xml' | 'html' | 'mermaid' | 'slides' | 'card' | 'grid' | 'chips' | 'kv' | 'qr' | 'chart' | `chart:${string}` | 'metric' | 'gauge' | 'timeline' | 'dashboard' | 'cart' | 'panels' | 'tabs' | 'accordion' | 'stack' | 'columns' | `code` | `code:${string}`;
|
|
13
|
+
export type OutputFormat = 'primitive' | 'table' | 'tree' | 'list' | 'none' | 'json' | 'markdown' | 'yaml' | 'xml' | 'html' | 'mermaid' | 'slides' | 'card' | 'grid' | 'chips' | 'kv' | 'qr' | 'chart' | `chart:${string}` | 'metric' | 'gauge' | 'timeline' | 'dashboard' | 'cart' | 'panels' | 'tabs' | 'accordion' | 'stack' | 'columns' | 'a2ui' | `code` | `code:${string}`;
|
|
13
14
|
export interface PhotonTool {
|
|
14
15
|
name: string;
|
|
15
16
|
description: string;
|
|
@@ -288,6 +289,13 @@ export interface ConstructorParam {
|
|
|
288
289
|
defaultValue?: any;
|
|
289
290
|
/** True if type is string, number, or boolean (inject from env var) */
|
|
290
291
|
isPrimitive: boolean;
|
|
292
|
+
/**
|
|
293
|
+
* Per-parameter JSDoc description, taken from an inline `/** ... *\/`
|
|
294
|
+
* comment immediately before the parameter, or from a constructor-level
|
|
295
|
+
* `@param <name>` tag when the inline form is absent. Used by the Beam
|
|
296
|
+
* Setup form for field help text.
|
|
297
|
+
*/
|
|
298
|
+
description?: string;
|
|
291
299
|
}
|
|
292
300
|
/**
|
|
293
301
|
* Injection type for constructor parameters
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsgBH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAY,EAAE,CAAC,GAAe,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portel/photon-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.24.0",
|
|
4
4
|
"description": "Core library for parsing, loading, and managing .photon.ts files - runtime-agnostic foundation for building custom Photon runtimes",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"build": "tsc",
|
|
34
34
|
"clean": "rm -rf dist",
|
|
35
35
|
"prepublishOnly": "npm run clean && npm run build",
|
|
36
|
-
"test": "npm run build &&
|
|
36
|
+
"test": "npm run build && bash scripts/run-tests.sh",
|
|
37
37
|
"test:channels": "npx tsx tests/channels.test.ts",
|
|
38
38
|
"test:mixin": "npm run build && npx tsx tests/mixin.test.ts"
|
|
39
39
|
},
|
package/src/base.ts
CHANGED
|
@@ -71,6 +71,16 @@ export class Photon {
|
|
|
71
71
|
*/
|
|
72
72
|
_photonNamespace?: string;
|
|
73
73
|
|
|
74
|
+
/**
|
|
75
|
+
* PHOTON_DIR this instance was loaded from - set by runtime loader.
|
|
76
|
+
* Pinned so .data/ resolves to the same root regardless of which
|
|
77
|
+
* process (CLI, daemon, worker) reads the photon back later. Without
|
|
78
|
+
* this pin, MemoryProvider falls back to getDefaultContext().baseDir
|
|
79
|
+
* and writes/reads can drift between cwd-derived locations.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
_baseDir?: string;
|
|
83
|
+
|
|
74
84
|
/**
|
|
75
85
|
* Absolute path to the .photon.ts/.photon.js source file - set by runtime loader
|
|
76
86
|
* Used for storage() and assets() path resolution
|
|
@@ -78,6 +88,25 @@ export class Photon {
|
|
|
78
88
|
*/
|
|
79
89
|
_photonFilePath?: string;
|
|
80
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Stat snapshot captured when the current photon instance was loaded.
|
|
93
|
+
* Used by executeTool() to detect out-of-band edits so CLI-direct and
|
|
94
|
+
* lite-loader callers see new code immediately after a file save.
|
|
95
|
+
* See `_photonReloader` for the callback invoked on change.
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
_photonSourceStat?: { mtimeMs: number; size: number; ino: number };
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Callback the loader registers so executeTool() can trigger a live
|
|
102
|
+
* reload when `_photonFilePath` has changed since load. The loader is
|
|
103
|
+
* expected to re-evaluate the file, replace the cached module, and
|
|
104
|
+
* update `_photonSourceStat` on success. Missing callback means the
|
|
105
|
+
* gate is a no-op (the original behavior).
|
|
106
|
+
* @internal
|
|
107
|
+
*/
|
|
108
|
+
_photonReloader?: () => Promise<void>;
|
|
109
|
+
|
|
81
110
|
/**
|
|
82
111
|
* Dynamic photon resolver - injected by runtime loader
|
|
83
112
|
* Used by this.photon.use() for runtime photon access
|
|
@@ -153,7 +182,12 @@ export class Photon {
|
|
|
153
182
|
.replace(/([A-Z])/g, '-$1')
|
|
154
183
|
.toLowerCase()
|
|
155
184
|
.replace(/^-/, '');
|
|
156
|
-
this._memory = new MemoryProvider(
|
|
185
|
+
this._memory = new MemoryProvider(
|
|
186
|
+
name,
|
|
187
|
+
this._sessionId,
|
|
188
|
+
this._photonNamespace,
|
|
189
|
+
this._baseDir
|
|
190
|
+
);
|
|
157
191
|
}
|
|
158
192
|
return this._memory;
|
|
159
193
|
}
|
|
@@ -197,7 +231,7 @@ export class Photon {
|
|
|
197
231
|
.replace(/([A-Z])/g, '-$1')
|
|
198
232
|
.toLowerCase()
|
|
199
233
|
.replace(/^-/, '');
|
|
200
|
-
this._schedule = new ScheduleProvider(name);
|
|
234
|
+
this._schedule = new ScheduleProvider(name, this._baseDir);
|
|
201
235
|
}
|
|
202
236
|
return this._schedule;
|
|
203
237
|
}
|
|
@@ -624,6 +658,15 @@ export class Photon {
|
|
|
624
658
|
* Execute a tool method
|
|
625
659
|
*/
|
|
626
660
|
async executeTool(toolName: string, parameters: any, options?: { outputHandler?: (data: any) => void }): Promise<any> {
|
|
661
|
+
// Stat-gate: close the edit→dispatch race on non-daemon paths. The
|
|
662
|
+
// daemon has its own equivalent at src/daemon/server.ts; this runs
|
|
663
|
+
// for CLI-direct dispatch and for callers using the lite loader's
|
|
664
|
+
// programmatic photon() API. If the source file has changed since
|
|
665
|
+
// the instance was loaded, hand off to the loader-registered
|
|
666
|
+
// reloader before dispatching so the first call after a save sees
|
|
667
|
+
// the new code.
|
|
668
|
+
await this._statGateIfStale();
|
|
669
|
+
|
|
627
670
|
const method = (this as any)[toolName];
|
|
628
671
|
|
|
629
672
|
if (!method || typeof method !== 'function') {
|
|
@@ -642,6 +685,41 @@ export class Photon {
|
|
|
642
685
|
});
|
|
643
686
|
}
|
|
644
687
|
|
|
688
|
+
/**
|
|
689
|
+
* If a reloader is registered and the source file has changed since it
|
|
690
|
+
* was last loaded, invoke the reloader. Silent on missing file or
|
|
691
|
+
* reloader failure — dispatch continues on the stale instance rather
|
|
692
|
+
* than throwing for an observability concern.
|
|
693
|
+
*/
|
|
694
|
+
private async _statGateIfStale(): Promise<void> {
|
|
695
|
+
const filePath = this._photonFilePath;
|
|
696
|
+
const reloader = this._photonReloader;
|
|
697
|
+
const cached = this._photonSourceStat;
|
|
698
|
+
if (!filePath || !reloader || !cached) return;
|
|
699
|
+
let current: { mtimeMs: number; size: number; ino: number } | null = null;
|
|
700
|
+
try {
|
|
701
|
+
const s = fs.statSync(filePath);
|
|
702
|
+
current = { mtimeMs: s.mtimeMs, size: s.size, ino: s.ino };
|
|
703
|
+
} catch {
|
|
704
|
+
// Source gone or unreadable — nothing to gate against. Dispatch
|
|
705
|
+
// will surface the missing-photon error through its own path.
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
if (
|
|
709
|
+
current.mtimeMs === cached.mtimeMs &&
|
|
710
|
+
current.size === cached.size &&
|
|
711
|
+
current.ino === cached.ino
|
|
712
|
+
) {
|
|
713
|
+
return;
|
|
714
|
+
}
|
|
715
|
+
try {
|
|
716
|
+
await reloader();
|
|
717
|
+
} catch {
|
|
718
|
+
// Reloader errors are non-fatal — keep running on the stale
|
|
719
|
+
// instance rather than making dispatch itself fail.
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
|
|
645
723
|
/**
|
|
646
724
|
* Invoke the onError observability hook with a bounded timeout. Never
|
|
647
725
|
* suppresses the original error and never throws itself — a throw or
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-description sanitizer.
|
|
3
|
+
*
|
|
4
|
+
* Defends against MCP tool-description poisoning (OWASP MCP #3) by stripping
|
|
5
|
+
* invisible codepoints and redacting embedded prompt-injection markers from
|
|
6
|
+
* JSDoc descriptions before they reach the model.
|
|
7
|
+
*
|
|
8
|
+
* Called by the schema extractor at parse time; any photon loaded via the
|
|
9
|
+
* runtime benefits automatically. Intentionally conservative — it only
|
|
10
|
+
* touches obvious attack patterns. Legitimate documentation does not use
|
|
11
|
+
* zero-width spaces or contain `[[SYSTEM: ...]]` directives.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Unicode ranges that are invisible to humans but preserved by LLM tokenizers.
|
|
16
|
+
* Stripped unconditionally — no legitimate doc string needs them.
|
|
17
|
+
*
|
|
18
|
+
* U+200B ZERO WIDTH SPACE
|
|
19
|
+
* U+200C ZERO WIDTH NON-JOINER
|
|
20
|
+
* U+200D ZERO WIDTH JOINER
|
|
21
|
+
* U+200E LEFT-TO-RIGHT MARK
|
|
22
|
+
* U+200F RIGHT-TO-LEFT MARK
|
|
23
|
+
* U+202A-E LRE/RLE/PDF/LRO/RLO (bidi override)
|
|
24
|
+
* U+2060 WORD JOINER
|
|
25
|
+
* U+2066-9 LRI/RLI/FSI/PDI (bidi isolate)
|
|
26
|
+
* U+FEFF ZERO WIDTH NO-BREAK SPACE (BOM)
|
|
27
|
+
*/
|
|
28
|
+
const INVISIBLE_CHARS = /[\u200B-\u200F\u202A-\u202E\u2060\u2066-\u2069\uFEFF]/g;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Instruction-bracket patterns commonly used in tool-poisoning payloads.
|
|
32
|
+
* Each match is replaced with `[REDACTED]` and counted as a warning.
|
|
33
|
+
*/
|
|
34
|
+
const INSTRUCTION_PATTERNS: Array<{ name: string; pattern: RegExp }> = [
|
|
35
|
+
// Bracketed system directives: [[SYSTEM: ...]], [INST] ... [/INST], <|im_start|>...<|im_end|>
|
|
36
|
+
{ name: 'bracketed-system', pattern: /\[{1,2}\s*SYSTEM\s*:[^\]]*\]{1,2}/gi },
|
|
37
|
+
{ name: 'llama-inst', pattern: /\[\/?INST\]/gi },
|
|
38
|
+
{ name: 'chatml-tag', pattern: /<\|im_(?:start|end|sep)\|>/gi },
|
|
39
|
+
// Verbatim instruction phrases that only appear in jailbreaks, never in docs.
|
|
40
|
+
{ name: 'ignore-previous', pattern: /\bignore\s+(?:all\s+|the\s+)?(?:previous|prior|above)\s+instructions?\b/gi },
|
|
41
|
+
{ name: 'disregard-previous', pattern: /\bdisregard\s+(?:all\s+|the\s+)?(?:previous|prior|above)\b/gi },
|
|
42
|
+
{ name: 'system-prompt-literal', pattern: /\bSYSTEM[_\s-]?PROMPT\b/g },
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
/** Max length of a cleaned description. Anything longer is an attack surface. */
|
|
46
|
+
export const MAX_DESCRIPTION_LENGTH = 2000;
|
|
47
|
+
|
|
48
|
+
export interface SanitizerWarning {
|
|
49
|
+
/** Label of the rule that fired. */
|
|
50
|
+
rule: string;
|
|
51
|
+
/** Short slice of the matched text for forensics (capped at 80 chars). */
|
|
52
|
+
sample: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface SanitizeResult {
|
|
56
|
+
cleaned: string;
|
|
57
|
+
warnings: SanitizerWarning[];
|
|
58
|
+
/** Whether the string was truncated because it exceeded MAX_DESCRIPTION_LENGTH. */
|
|
59
|
+
truncated: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Strip invisible codepoints, redact instruction markers, and cap length.
|
|
64
|
+
* Idempotent: sanitize(sanitize(x).cleaned).cleaned === sanitize(x).cleaned
|
|
65
|
+
* so callers can apply it defensively without risking duplicate `[REDACTED]`
|
|
66
|
+
* tokens.
|
|
67
|
+
*/
|
|
68
|
+
export function sanitizeDescription(input: string): SanitizeResult {
|
|
69
|
+
const warnings: SanitizerWarning[] = [];
|
|
70
|
+
|
|
71
|
+
// Step 1: strip invisibles. Counts as one warning if any were present.
|
|
72
|
+
const withoutInvisibles = input.replace(INVISIBLE_CHARS, (match) => {
|
|
73
|
+
warnings.push({ rule: 'invisible-char', sample: codepointSample(match) });
|
|
74
|
+
return '';
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Step 2: redact each known instruction pattern.
|
|
78
|
+
let redacted = withoutInvisibles;
|
|
79
|
+
for (const { name, pattern } of INSTRUCTION_PATTERNS) {
|
|
80
|
+
redacted = redacted.replace(pattern, (match) => {
|
|
81
|
+
warnings.push({ rule: name, sample: match.slice(0, 80) });
|
|
82
|
+
return '[REDACTED]';
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Step 3: cap length. An attacker-friendly 50KB description is itself a
|
|
87
|
+
// prompt-injection vector via context-window flooding (OWASP MCP #10).
|
|
88
|
+
let truncated = false;
|
|
89
|
+
if (redacted.length > MAX_DESCRIPTION_LENGTH) {
|
|
90
|
+
redacted = redacted.slice(0, MAX_DESCRIPTION_LENGTH) + '…';
|
|
91
|
+
truncated = true;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return { cleaned: redacted, warnings, truncated };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function codepointSample(s: string): string {
|
|
98
|
+
return Array.from(s)
|
|
99
|
+
.map((c) => 'U+' + c.codePointAt(0)!.toString(16).toUpperCase().padStart(4, '0'))
|
|
100
|
+
.join(',')
|
|
101
|
+
.slice(0, 80);
|
|
102
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -162,6 +162,12 @@ export { DependencyManager } from './dependency-manager.js';
|
|
|
162
162
|
|
|
163
163
|
// Schema extraction
|
|
164
164
|
export { SchemaExtractor, detectCapabilities, type PhotonCapability } from './schema-extractor.js';
|
|
165
|
+
export {
|
|
166
|
+
sanitizeDescription,
|
|
167
|
+
MAX_DESCRIPTION_LENGTH,
|
|
168
|
+
type SanitizerWarning,
|
|
169
|
+
type SanitizeResult,
|
|
170
|
+
} from './description-sanitizer.js';
|
|
165
171
|
|
|
166
172
|
// Path resolution (Photon-specific paths)
|
|
167
173
|
export {
|
package/src/memory.ts
CHANGED
|
@@ -294,6 +294,33 @@ function findAndMigrateStrandedMemory(
|
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
+
/**
|
|
298
|
+
* Photons whose loader pinned a baseDir get deterministic paths regardless
|
|
299
|
+
* of which process reads them back. When baseDir is missing, getBase()
|
|
300
|
+
* silently falls back to PHOTON_DIR env or ~/.photon, which means the same
|
|
301
|
+
* photon can write to <repo>/.data/ from a CLI process and read from
|
|
302
|
+
* ~/.photon/.data/ from a daemon worker started in a different cwd. We
|
|
303
|
+
* warn once per photon so this drift is noticeable rather than silent.
|
|
304
|
+
*
|
|
305
|
+
* To suppress in test environments where the fallback is intentional, set
|
|
306
|
+
* PHOTON_MEMORY_NO_BASEDIR_WARN=1.
|
|
307
|
+
*/
|
|
308
|
+
const _baseDirFallbackWarned = new Set<string>();
|
|
309
|
+
function warnIfBaseDirMissing(photonId: string, baseDir?: string): void {
|
|
310
|
+
if (baseDir) return;
|
|
311
|
+
if (process.env.PHOTON_MEMORY_NO_BASEDIR_WARN) return;
|
|
312
|
+
if (_baseDirFallbackWarned.has(photonId)) return;
|
|
313
|
+
_baseDirFallbackWarned.add(photonId);
|
|
314
|
+
process.stderr.write(
|
|
315
|
+
`[photon-core] memory.resolveDir for "${photonId}" got no baseDir — ` +
|
|
316
|
+
`falling back to PHOTON_DIR env or ~/.photon. If this photon was ` +
|
|
317
|
+
`loaded with a workingDir, the loader is failing to set ` +
|
|
318
|
+
`instance._baseDir. Symptom: writes from one process land at the ` +
|
|
319
|
+
`loader's baseDir but reads from another process land at the env ` +
|
|
320
|
+
`fallback. See memory-baseDir-resolution-bug for details.\n`
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
|
|
297
324
|
function resolveDir(
|
|
298
325
|
photonId: string,
|
|
299
326
|
namespace: string,
|
|
@@ -301,6 +328,7 @@ function resolveDir(
|
|
|
301
328
|
sessionId?: string,
|
|
302
329
|
baseDir?: string
|
|
303
330
|
): string {
|
|
331
|
+
warnIfBaseDirMissing(photonId, baseDir);
|
|
304
332
|
switch (scope) {
|
|
305
333
|
case 'photon': {
|
|
306
334
|
const newDir = getPhotonMemoryDir(namespace, photonId, baseDir);
|
package/src/middleware.ts
CHANGED
|
@@ -674,6 +674,102 @@ const bulkheadMiddleware = defineMiddleware<{ maxConcurrent: number }>({
|
|
|
674
674
|
},
|
|
675
675
|
});
|
|
676
676
|
|
|
677
|
+
// --- mask (phase 85) ---
|
|
678
|
+
// Post-execution redaction pass. Rewrites named fields in the result with
|
|
679
|
+
// a masked placeholder before handoff to the transport layer. Defense
|
|
680
|
+
// against oversharing and accidental PII exposure (OWASP MCP #10).
|
|
681
|
+
// Runs AFTER execution, BEFORE __meta attachment (phase ≥ 85).
|
|
682
|
+
|
|
683
|
+
function maskValue(value: unknown, keys: string[], placeholder: string): unknown {
|
|
684
|
+
if (value === null || value === undefined) return value;
|
|
685
|
+
if (Array.isArray(value)) {
|
|
686
|
+
return value.map((v) => maskValue(v, keys, placeholder));
|
|
687
|
+
}
|
|
688
|
+
if (typeof value === 'object') {
|
|
689
|
+
const src = value as Record<string, unknown>;
|
|
690
|
+
const out: Record<string, unknown> = {};
|
|
691
|
+
for (const k of Object.keys(src)) {
|
|
692
|
+
if (keys.includes(k)) {
|
|
693
|
+
out[k] = placeholder;
|
|
694
|
+
} else {
|
|
695
|
+
out[k] = maskValue(src[k], keys, placeholder);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
return out;
|
|
699
|
+
}
|
|
700
|
+
return value;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
const maskMiddleware = defineMiddleware<{ fields: string[]; placeholder: string }>({
|
|
704
|
+
name: 'mask',
|
|
705
|
+
phase: 85,
|
|
706
|
+
parseShorthand(value: string) {
|
|
707
|
+
const fields = value
|
|
708
|
+
.split(/[,\s]+/)
|
|
709
|
+
.map((s) => s.trim())
|
|
710
|
+
.filter(Boolean);
|
|
711
|
+
return { fields, placeholder: '[REDACTED]' };
|
|
712
|
+
},
|
|
713
|
+
parseConfig(raw) {
|
|
714
|
+
const fields = (raw.fields || '')
|
|
715
|
+
.split(/[,\s]+/)
|
|
716
|
+
.map((s) => s.trim())
|
|
717
|
+
.filter(Boolean);
|
|
718
|
+
return { fields, placeholder: raw.placeholder?.trim() || '[REDACTED]' };
|
|
719
|
+
},
|
|
720
|
+
create(config, _state) {
|
|
721
|
+
return async (ctx, next) => {
|
|
722
|
+
const result = await next();
|
|
723
|
+
if (config.fields.length === 0) return result;
|
|
724
|
+
return maskValue(result, config.fields, config.placeholder);
|
|
725
|
+
};
|
|
726
|
+
},
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
// --- maxResponseBytes (phase 88) ---
|
|
730
|
+
// Caps the serialized response size. Hard truncates with a warning marker.
|
|
731
|
+
// Prevents context-window flooding (OWASP MCP #10) — an oversized result
|
|
732
|
+
// is an attack vector on its own even when the data is legitimate.
|
|
733
|
+
// Runs after @mask so the cap applies to the redacted payload.
|
|
734
|
+
|
|
735
|
+
const maxResponseBytesMiddleware = defineMiddleware<{ limit: number }>({
|
|
736
|
+
name: 'maxResponseBytes',
|
|
737
|
+
phase: 88,
|
|
738
|
+
parseShorthand(value: string) {
|
|
739
|
+
return { limit: Math.max(1, parseInt(value.trim(), 10) || 0) };
|
|
740
|
+
},
|
|
741
|
+
parseConfig(raw) {
|
|
742
|
+
const v = raw.limit || raw.bytes || raw.max;
|
|
743
|
+
return { limit: Math.max(1, parseInt(v || '0', 10) || 0) };
|
|
744
|
+
},
|
|
745
|
+
create(config, _state) {
|
|
746
|
+
return async (ctx, next) => {
|
|
747
|
+
const result = await next();
|
|
748
|
+
if (!config.limit || config.limit <= 0) return result;
|
|
749
|
+
let serialized: string;
|
|
750
|
+
try {
|
|
751
|
+
serialized = typeof result === 'string' ? result : JSON.stringify(result);
|
|
752
|
+
} catch {
|
|
753
|
+
return result; // unserializable → leave untouched
|
|
754
|
+
}
|
|
755
|
+
const byteLen = Buffer.byteLength(serialized, 'utf8');
|
|
756
|
+
if (byteLen <= config.limit) return result;
|
|
757
|
+
const truncated = serialized.slice(
|
|
758
|
+
0,
|
|
759
|
+
Math.max(0, config.limit - 32)
|
|
760
|
+
);
|
|
761
|
+
return {
|
|
762
|
+
truncated: true,
|
|
763
|
+
reason: 'maxResponseBytes',
|
|
764
|
+
limit: config.limit,
|
|
765
|
+
originalBytes: byteLen,
|
|
766
|
+
tool: `${ctx.photon}.${ctx.tool}`,
|
|
767
|
+
preview: truncated,
|
|
768
|
+
};
|
|
769
|
+
};
|
|
770
|
+
},
|
|
771
|
+
});
|
|
772
|
+
|
|
677
773
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
678
774
|
// GLOBAL BUILT-IN REGISTRY
|
|
679
775
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
@@ -691,6 +787,8 @@ builtinRegistry.register(queuedMiddleware);
|
|
|
691
787
|
builtinRegistry.register(lockedMiddleware);
|
|
692
788
|
builtinRegistry.register(timeoutMiddleware);
|
|
693
789
|
builtinRegistry.register(retryableMiddleware);
|
|
790
|
+
builtinRegistry.register(maskMiddleware);
|
|
791
|
+
builtinRegistry.register(maxResponseBytesMiddleware);
|
|
694
792
|
|
|
695
793
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
696
794
|
// PIPELINE ASSEMBLY
|
package/src/mixins.ts
CHANGED
|
@@ -58,6 +58,13 @@ export function withPhotonCapabilities<T extends Constructor>(Base: T): T {
|
|
|
58
58
|
*/
|
|
59
59
|
_photonName?: string;
|
|
60
60
|
_photonNamespace?: string;
|
|
61
|
+
/**
|
|
62
|
+
* PHOTON_DIR this instance was loaded from - set by runtime loader.
|
|
63
|
+
* Pinned so memory and other .data/-rooted state resolve to the same
|
|
64
|
+
* root regardless of which process reads back later.
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
_baseDir?: string;
|
|
61
68
|
|
|
62
69
|
/**
|
|
63
70
|
* Session ID for session-scoped memory - set by runtime
|
|
@@ -113,7 +120,12 @@ export function withPhotonCapabilities<T extends Constructor>(Base: T): T {
|
|
|
113
120
|
.replace(/([A-Z])/g, '-$1')
|
|
114
121
|
.toLowerCase()
|
|
115
122
|
.replace(/^-/, '');
|
|
116
|
-
this._memory = new MemoryProvider(
|
|
123
|
+
this._memory = new MemoryProvider(
|
|
124
|
+
name,
|
|
125
|
+
this._sessionId,
|
|
126
|
+
this._photonNamespace,
|
|
127
|
+
this._baseDir
|
|
128
|
+
);
|
|
117
129
|
}
|
|
118
130
|
return this._memory;
|
|
119
131
|
}
|
|
@@ -128,7 +140,7 @@ export function withPhotonCapabilities<T extends Constructor>(Base: T): T {
|
|
|
128
140
|
.replace(/([A-Z])/g, '-$1')
|
|
129
141
|
.toLowerCase()
|
|
130
142
|
.replace(/^-/, '');
|
|
131
|
-
this._schedule = new ScheduleProvider(name);
|
|
143
|
+
this._schedule = new ScheduleProvider(name, this._baseDir);
|
|
132
144
|
}
|
|
133
145
|
return this._schedule;
|
|
134
146
|
}
|
|
@@ -269,6 +269,44 @@ async function loadPhotonInternal(
|
|
|
269
269
|
// docs/internals/PHOTON-DIR-AND-NAMESPACE.md §3.
|
|
270
270
|
instance._photonName = photonName;
|
|
271
271
|
instance._photonNamespace = options.namespace ?? deriveNamespace(absolutePath, options.baseDir);
|
|
272
|
+
instance._baseDir = options.baseDir;
|
|
273
|
+
instance._photonFilePath = absolutePath;
|
|
274
|
+
// Stat-gate baseline. When executeTool() sees the source file has
|
|
275
|
+
// changed, it fires _photonReloader (registered just below) to swap
|
|
276
|
+
// in the fresh compile before dispatching.
|
|
277
|
+
try {
|
|
278
|
+
const s = fsSync.statSync(absolutePath);
|
|
279
|
+
instance._photonSourceStat = { mtimeMs: s.mtimeMs, size: s.size, ino: s.ino };
|
|
280
|
+
} catch {
|
|
281
|
+
// No stat — skip baselining so the gate is a no-op.
|
|
282
|
+
}
|
|
283
|
+
instance._photonReloader = async () => {
|
|
284
|
+
// Invalidate the cache entry, then re-run the whole load pipeline
|
|
285
|
+
// and copy public surface from the fresh instance onto the existing
|
|
286
|
+
// one. Callers already holding a reference to the proxy see new
|
|
287
|
+
// method behavior on the very next dispatch.
|
|
288
|
+
instanceCache.delete(cacheKey);
|
|
289
|
+
const fresh = (await photon(absolutePath, options)) as Record<string, any>;
|
|
290
|
+
// Refresh stat baseline on success so we don't re-trigger.
|
|
291
|
+
try {
|
|
292
|
+
const s = fsSync.statSync(absolutePath);
|
|
293
|
+
instance._photonSourceStat = { mtimeMs: s.mtimeMs, size: s.size, ino: s.ino };
|
|
294
|
+
} catch {
|
|
295
|
+
// ignore — next call will re-evaluate
|
|
296
|
+
}
|
|
297
|
+
// Rewire every own property from the fresh instance onto the
|
|
298
|
+
// live one. Prototype-level methods are re-looked-up through the
|
|
299
|
+
// instance's class on each dispatch via the proxy's method lookup,
|
|
300
|
+
// so they pick up the new code automatically. Own-property state
|
|
301
|
+
// (collections, explicit fields) gets refreshed here.
|
|
302
|
+
for (const key of Object.keys(fresh)) {
|
|
303
|
+
try {
|
|
304
|
+
(instance as Record<string, any>)[key] = fresh[key];
|
|
305
|
+
} catch {
|
|
306
|
+
// Read-only own property — skip; the proxy path will handle it.
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
};
|
|
272
310
|
if (options.instanceName) {
|
|
273
311
|
instance.instanceName = options.instanceName;
|
|
274
312
|
}
|
package/src/schedule.ts
CHANGED
|
@@ -139,9 +139,9 @@ function resolveCron(schedule: string): string {
|
|
|
139
139
|
|
|
140
140
|
// ── Storage Helpers ────────────────────────────────────────────────────
|
|
141
141
|
|
|
142
|
-
function photonScheduleDir(photonId: string, namespace?: string): string {
|
|
142
|
+
function photonScheduleDir(photonId: string, namespace?: string, baseDir?: string): string {
|
|
143
143
|
const ns = namespace || 'local';
|
|
144
|
-
const newDir = getPhotonSchedulesDir(ns, photonId);
|
|
144
|
+
const newDir = getPhotonSchedulesDir(ns, photonId, baseDir);
|
|
145
145
|
if (!fsSync.existsSync(newDir)) {
|
|
146
146
|
const legacyDir = getLegacySchedulesDir(photonId);
|
|
147
147
|
if (fsSync.existsSync(legacyDir)) return legacyDir;
|
|
@@ -149,8 +149,8 @@ function photonScheduleDir(photonId: string, namespace?: string): string {
|
|
|
149
149
|
return newDir;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
function taskPath(photonId: string, taskId: string): string {
|
|
153
|
-
return path.join(photonScheduleDir(photonId), `${taskId}.json`);
|
|
152
|
+
function taskPath(photonId: string, taskId: string, baseDir?: string): string {
|
|
153
|
+
return path.join(photonScheduleDir(photonId, undefined, baseDir), `${taskId}.json`);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
async function ensureDir(dir: string): Promise<void> {
|
|
@@ -171,9 +171,19 @@ async function ensureDir(dir: string): Promise<void> {
|
|
|
171
171
|
*/
|
|
172
172
|
export class ScheduleProvider {
|
|
173
173
|
private _photonId: string;
|
|
174
|
+
private _baseDir?: string;
|
|
174
175
|
|
|
175
|
-
|
|
176
|
+
/**
|
|
177
|
+
* @param photonId Photon identifier used as the bucket under .data/
|
|
178
|
+
* @param baseDir PHOTON_DIR the photon was loaded from. Pinned so
|
|
179
|
+
* schedule files stay under this base regardless of which process
|
|
180
|
+
* reads back later — mirrors the fix applied to MemoryProvider.
|
|
181
|
+
* Without it, photonScheduleDir falls through to PHOTON_DIR env or
|
|
182
|
+
* ~/.photon and schedule files drift across daemon restarts.
|
|
183
|
+
*/
|
|
184
|
+
constructor(photonId: string, baseDir?: string) {
|
|
176
185
|
this._photonId = photonId;
|
|
186
|
+
this._baseDir = baseDir;
|
|
177
187
|
}
|
|
178
188
|
|
|
179
189
|
/**
|
|
@@ -222,7 +232,10 @@ export class ScheduleProvider {
|
|
|
222
232
|
*/
|
|
223
233
|
async get(taskId: string): Promise<ScheduledTask | null> {
|
|
224
234
|
try {
|
|
225
|
-
const content = await fs.readFile(
|
|
235
|
+
const content = await fs.readFile(
|
|
236
|
+
taskPath(this._photonId, taskId, this._baseDir),
|
|
237
|
+
'utf-8'
|
|
238
|
+
);
|
|
226
239
|
return JSON.parse(content) as ScheduledTask;
|
|
227
240
|
} catch (err: any) {
|
|
228
241
|
if (err.code === 'ENOENT') return null;
|
|
@@ -242,7 +255,7 @@ export class ScheduleProvider {
|
|
|
242
255
|
* List all scheduled tasks, optionally filtered by status
|
|
243
256
|
*/
|
|
244
257
|
async list(status?: ScheduleStatus): Promise<ScheduledTask[]> {
|
|
245
|
-
const dir = photonScheduleDir(this._photonId);
|
|
258
|
+
const dir = photonScheduleDir(this._photonId, undefined, this._baseDir);
|
|
246
259
|
let files: string[];
|
|
247
260
|
try {
|
|
248
261
|
files = await fs.readdir(dir);
|
|
@@ -323,7 +336,7 @@ export class ScheduleProvider {
|
|
|
323
336
|
*/
|
|
324
337
|
async cancel(taskId: string): Promise<boolean> {
|
|
325
338
|
try {
|
|
326
|
-
await fs.unlink(taskPath(this._photonId, taskId));
|
|
339
|
+
await fs.unlink(taskPath(this._photonId, taskId, this._baseDir));
|
|
327
340
|
return true;
|
|
328
341
|
} catch (err: any) {
|
|
329
342
|
if (err.code === 'ENOENT') return false;
|
|
@@ -362,8 +375,11 @@ export class ScheduleProvider {
|
|
|
362
375
|
|
|
363
376
|
/** @internal */
|
|
364
377
|
private async _save(task: ScheduledTask): Promise<void> {
|
|
365
|
-
const dir = photonScheduleDir(this._photonId);
|
|
378
|
+
const dir = photonScheduleDir(this._photonId, undefined, this._baseDir);
|
|
366
379
|
await ensureDir(dir);
|
|
367
|
-
await fs.writeFile(
|
|
380
|
+
await fs.writeFile(
|
|
381
|
+
taskPath(this._photonId, task.id, this._baseDir),
|
|
382
|
+
JSON.stringify(task, null, 2)
|
|
383
|
+
);
|
|
368
384
|
}
|
|
369
385
|
}
|