@promptframe/cli 0.1.60 → 0.1.64

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 (44) hide show
  1. package/README.md +38 -1
  2. package/dist/development-build-worker.d.ts +2 -0
  3. package/dist/development-build-worker.d.ts.map +1 -0
  4. package/dist/development-build-worker.js +184 -0
  5. package/dist/development-build-worker.js.map +1 -0
  6. package/dist/development-build.d.ts +22 -0
  7. package/dist/development-build.d.ts.map +1 -0
  8. package/dist/development-build.js +66 -0
  9. package/dist/development-build.js.map +1 -0
  10. package/dist/development-coordinator.d.ts +26 -0
  11. package/dist/development-coordinator.d.ts.map +1 -0
  12. package/dist/development-coordinator.js +114 -0
  13. package/dist/development-coordinator.js.map +1 -0
  14. package/dist/development-css.d.ts +10 -0
  15. package/dist/development-css.d.ts.map +1 -0
  16. package/dist/development-css.js +65 -0
  17. package/dist/development-css.js.map +1 -0
  18. package/dist/development-files.d.ts +6 -0
  19. package/dist/development-files.d.ts.map +1 -0
  20. package/dist/development-files.js +70 -0
  21. package/dist/development-files.js.map +1 -0
  22. package/dist/development-owner.d.ts +22 -0
  23. package/dist/development-owner.d.ts.map +1 -0
  24. package/dist/development-owner.js +253 -0
  25. package/dist/development-owner.js.map +1 -0
  26. package/dist/development-process.d.ts +15 -0
  27. package/dist/development-process.d.ts.map +1 -0
  28. package/dist/development-process.js +65 -0
  29. package/dist/development-process.js.map +1 -0
  30. package/dist/development-revisions.d.ts +58 -0
  31. package/dist/development-revisions.d.ts.map +1 -0
  32. package/dist/development-revisions.js +130 -0
  33. package/dist/development-revisions.js.map +1 -0
  34. package/dist/development-validation.d.ts +22 -0
  35. package/dist/development-validation.d.ts.map +1 -0
  36. package/dist/development-validation.js +122 -0
  37. package/dist/development-validation.js.map +1 -0
  38. package/dist/development-workspace.d.ts +37 -0
  39. package/dist/development-workspace.d.ts.map +1 -0
  40. package/dist/development-workspace.js +402 -0
  41. package/dist/development-workspace.js.map +1 -0
  42. package/dist/index.js +84 -1
  43. package/dist/index.js.map +1 -1
  44. package/package.json +10 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-css.js","sourceRoot":"","sources":["../src/development-css.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { DevelopmentContents, type DevelopmentLimits } from './development-revisions.js';
2
+ /** Capture declared workspace inputs, never a live path for a compiler to reopen.
3
+ * Generated output and node_modules are not discovered by this reader. The
4
+ * workspace consumer supplies the complete, bounded source/dependency list. */
5
+ export declare function captureDevelopmentFiles(root: string, paths: readonly string[], limits: DevelopmentLimits): DevelopmentContents;
6
+ //# sourceMappingURL=development-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-files.d.ts","sourceRoot":"","sources":["../src/development-files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEzF;;+EAE+E;AAC/E,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,iBAAiB,GACxB,mBAAmB,CAqDrB"}
@@ -0,0 +1,70 @@
1
+ import { constants, closeSync, fstatSync, lstatSync, openSync, readSync, realpathSync } from 'node:fs';
2
+ import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
3
+ import { DevelopmentContents } from './development-revisions.js';
4
+ /** Capture declared workspace inputs, never a live path for a compiler to reopen.
5
+ * Generated output and node_modules are not discovered by this reader. The
6
+ * workspace consumer supplies the complete, bounded source/dependency list. */
7
+ export function captureDevelopmentFiles(root, paths, limits) {
8
+ // Reuse the content contract before performing any file I/O. These empty
9
+ // bytes only validate names/count/options; they are never published.
10
+ const names = new DevelopmentContents(paths.map(path => ({ path, bytes: new Uint8Array() })), limits)
11
+ .readFiles().map(file => file.path);
12
+ const base = realpathSync(root);
13
+ const files = [];
14
+ let total = 0;
15
+ for (const name of names) {
16
+ const file = resolve(base, ...name.split('/'));
17
+ const withinRoot = () => {
18
+ const local = relative(base, realpathSync(file));
19
+ if (!local || local === '..' || local.startsWith(`..${sep}`) || isAbsolute(local)) {
20
+ throw new Error('development.capture.outside_root');
21
+ }
22
+ // Source links, including directory links, are explicit errors. A
23
+ // workspace alias resolves to declared real source paths before capture.
24
+ for (let part = file; part !== base; part = dirname(part)) {
25
+ const entry = lstatSync(part);
26
+ if (entry.isSymbolicLink())
27
+ throw new Error('development.capture.symlink');
28
+ if (part === file && !entry.isFile())
29
+ throw new Error('development.capture.not_file');
30
+ }
31
+ };
32
+ withinRoot();
33
+ // NONBLOCK also bounds a replacement by a FIFO between lstat and open.
34
+ // fstat below still requires a regular file before any bytes are read.
35
+ const descriptor = openSync(file, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
36
+ try {
37
+ const before = fstatSync(descriptor, { bigint: true });
38
+ if (!before.isFile())
39
+ throw new Error('development.capture.not_file');
40
+ const remaining = limits.maximumBytes - total;
41
+ if (before.size > BigInt(remaining))
42
+ throw new Error('development.contents.byte_limit');
43
+ // Read at most the observed size plus one probe byte. A concurrently
44
+ // growing file cannot cause an unbounded readFile allocation.
45
+ const bytes = Buffer.alloc(Number(before.size) + 1);
46
+ let used = 0;
47
+ while (used < bytes.length) {
48
+ const count = readSync(descriptor, bytes, used, bytes.length - used, null);
49
+ if (!count)
50
+ break;
51
+ used += count;
52
+ }
53
+ const after = fstatSync(descriptor, { bigint: true });
54
+ withinRoot();
55
+ const current = lstatSync(file, { bigint: true });
56
+ if (used !== Number(before.size) || ['dev', 'ino', 'size', 'mtimeNs', 'ctimeNs'].some(key => {
57
+ const field = key;
58
+ return before[field] !== after[field] || after[field] !== current[field];
59
+ }))
60
+ throw new Error('development.capture.changed_during_read');
61
+ total += used;
62
+ files.push({ path: name, bytes: bytes.subarray(0, used) });
63
+ }
64
+ finally {
65
+ closeSync(descriptor);
66
+ }
67
+ }
68
+ return new DevelopmentContents(files, limits);
69
+ }
70
+ //# sourceMappingURL=development-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-files.js","sourceRoot":"","sources":["../src/development-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AAEzF;;+EAE+E;AAC/E,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,KAAwB,EACxB,MAAyB;IAEzB,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;SAClG,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAA+C,EAAE,CAAC;IAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClF,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,kEAAkE;YAClE,yEAAyE;YACzE,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,KAAK,CAAC,cAAc,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC3E,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC;QACF,UAAU,EAAE,CAAC;QACb,uEAAuE;QACvE,uEAAuE;QACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;YAC9C,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACxF,qEAAqE;YACrE,8DAA8D;YAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC3E,IAAI,CAAC,KAAK;oBAAE,MAAM;gBAClB,IAAI,IAAI,KAAK,CAAC;YAChB,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,UAAU,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC1F,MAAM,KAAK,GAAG,GAAqD,CAAC;gBACpE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC/D,KAAK,IAAI,IAAI,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** Same CLI process, filesystem-local owner control. The Studio HTTP surface
2
+ * remains GET-only, and stop never signals a numeric PID. */
3
+ export declare function stopDevelopmentOwner(root: string, reason?: 'stop' | 'replace'): Promise<{
4
+ stopped: boolean;
5
+ stale?: undefined;
6
+ acknowledged?: undefined;
7
+ } | {
8
+ stopped: boolean;
9
+ stale: boolean;
10
+ acknowledged?: undefined;
11
+ } | {
12
+ stopped: boolean;
13
+ acknowledged: boolean;
14
+ stale?: undefined;
15
+ }>;
16
+ export declare function acquireDevelopmentOwner(root: string, onStop: (reason: 'stop' | 'replace' | 'fatal') => void): Promise<Readonly<{
17
+ connectionId: string;
18
+ preferredPort: number;
19
+ recordPort(port: number): void;
20
+ close(): Promise<void>;
21
+ }>>;
22
+ //# sourceMappingURL=development-owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-owner.d.ts","sourceRoot":"","sources":["../src/development-owner.ts"],"names":[],"mappings":"AAmEA;6DAC6D;AAC7D,wBAAsB,oBAAoB,CAAC,IAAI,EAAC,MAAM,EAAC,MAAM,GAAC,MAAM,GAAC,SAAgB;;;;;;;;;;;;GAcpF;AACD,wBAAsB,uBAAuB,CAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,CAAC,MAAM,EAAC,MAAM,GAAC,SAAS,GAAC,OAAO,KAAG,IAAI;;;qBAgClF,MAAM;;IAY3B"}
@@ -0,0 +1,253 @@
1
+ import { createHash, randomBytes } from 'node:crypto';
2
+ import { constants, chmodSync, closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, realpathSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ import { createConnection, createServer } from 'node:net';
4
+ import { execFileSync } from 'node:child_process';
5
+ import { join } from 'node:path';
6
+ import { tmpdir } from 'node:os';
7
+ const hex = /^[a-f0-9]{32}$/u;
8
+ const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
9
+ function birth(pid) {
10
+ try {
11
+ process.kill(pid, 0);
12
+ }
13
+ catch (error) {
14
+ if (error.code === 'ESRCH')
15
+ return null;
16
+ throw Error('development.owner.identity_unavailable');
17
+ }
18
+ try {
19
+ if (process.platform === 'linux') {
20
+ const stat = readFileSync(`/proc/${pid}/stat`, 'utf8'), fields = stat.slice(stat.lastIndexOf(')') + 2).split(' ');
21
+ return readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim() + ':' + fields[19];
22
+ }
23
+ if (process.platform === 'win32')
24
+ return execFileSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`], { encoding: 'utf8', timeout: 3000, stdio: ['ignore', 'pipe', 'ignore'] }).trim();
25
+ return execFileSync('ps', ['-p', String(pid), '-o', 'lstart=', '-o', 'uid='], { encoding: 'utf8', timeout: 3000, stdio: ['ignore', 'pipe', 'ignore'] }).trim();
26
+ }
27
+ catch {
28
+ try {
29
+ process.kill(pid, 0);
30
+ }
31
+ catch (error) {
32
+ if (error.code === 'ESRCH')
33
+ return null;
34
+ }
35
+ throw Error('development.owner.identity_unavailable');
36
+ }
37
+ }
38
+ function paths(root, create = false) {
39
+ root = realpathSync(root);
40
+ const directory = join(root, '.promptframe', 'dev'), rootDigest = createHash('sha256').update(root).digest('hex');
41
+ for (const path of [join(root, '.promptframe'), directory]) {
42
+ if (!existsSync(path)) {
43
+ if (!create)
44
+ continue;
45
+ mkdirSync(path, { mode: 0o700 });
46
+ }
47
+ const info = lstatSync(path);
48
+ if (!info.isDirectory() || info.isSymbolicLink() || process.getuid && info.uid !== process.getuid())
49
+ throw Error('development.owner.directory_unsafe');
50
+ }
51
+ const ignored = join(directory, '.gitignore');
52
+ if (create && !existsSync(ignored))
53
+ writeFileSync(ignored, '*\n', { flag: 'wx', mode: 0o600 });
54
+ return { directory, rootDigest, state: join(directory, 'state.json'), lock: join(directory, 'owner.json') };
55
+ }
56
+ function read(path) {
57
+ const info = lstatSync(path);
58
+ if (!info.isFile() || info.isSymbolicLink() || process.getuid && info.uid !== process.getuid())
59
+ throw Error('development.owner.record_unsafe');
60
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
61
+ try {
62
+ const raw = readFileSync(fd, 'utf8');
63
+ if (Buffer.byteLength(raw) > 4096)
64
+ throw Error('development.owner.record_invalid');
65
+ return JSON.parse(raw);
66
+ }
67
+ finally {
68
+ closeSync(fd);
69
+ }
70
+ }
71
+ function write(path, value) {
72
+ const fd = openSync(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
73
+ try {
74
+ writeFileSync(fd, JSON.stringify(value) + '\n');
75
+ fsyncSync(fd);
76
+ }
77
+ finally {
78
+ closeSync(fd);
79
+ }
80
+ }
81
+ function endpoint(owner) {
82
+ const name = `promptframe-dev-${process.getuid?.() ?? 'user'}-${owner.rootDigest.slice(0, 24)}`;
83
+ // Linux abstract sockets and Windows named pipes are kernel-owned: stale
84
+ // metadata cannot require an unsafe unlink/recreate arbitration sequence.
85
+ if (process.platform === 'linux')
86
+ return '\0' + name;
87
+ return process.platform === 'win32' ? `\\\\.\\pipe\\${name}` : join(tmpdir(), name + '.sock');
88
+ }
89
+ function ownerAt(path, rootDigest) {
90
+ if (!existsSync(path))
91
+ return null;
92
+ const value = read(path);
93
+ if (Object.keys(value).some(key => !['version', 'rootDigest', 'instanceId', 'connectionId', 'pid', 'birth', 'port'].includes(key)) || value.version !== 1 || typeof value.instanceId !== 'string' || typeof value.connectionId !== 'string' || value.rootDigest !== rootDigest || !hex.test(value.instanceId) || !hex.test(value.connectionId)
94
+ || !Number.isSafeInteger(value.pid) || value.pid < 1 || typeof value.birth !== 'string' || !value.birth || value.birth.length > 256
95
+ || value.port !== undefined && (!Number.isInteger(value.port) || value.port < 1 || value.port > 65535))
96
+ throw Error('development.owner.record_invalid');
97
+ return value;
98
+ }
99
+ function same(a, b) { return a.instanceId === b.instanceId && a.pid === b.pid && a.birth === b.birth && a.rootDigest === b.rootDigest; }
100
+ function removeOwned(path, owner) { const current = ownerAt(path, owner.rootDigest); if (current && same(current, owner))
101
+ unlinkSync(path); }
102
+ async function command(owner, action) {
103
+ return new Promise((resolve, reject) => {
104
+ const socket = createConnection(endpoint(owner));
105
+ let raw = '';
106
+ const timer = setTimeout(() => socket.destroy(Error('development.owner.control_unconfirmed')), 3000);
107
+ socket.setEncoding('utf8');
108
+ socket.once('connect', () => socket.end(JSON.stringify({ action, instanceId: owner.instanceId }) + '\n'));
109
+ socket.on('data', chunk => { raw += chunk; if (raw.length > 4096)
110
+ socket.destroy(Error('development.owner.control_invalid')); });
111
+ socket.once('error', reject);
112
+ socket.once('close', () => { clearTimeout(timer); try {
113
+ const result = JSON.parse(raw);
114
+ if (!same(result, owner) || result.connectionId !== owner.connectionId)
115
+ throw Error();
116
+ resolve(result);
117
+ }
118
+ catch {
119
+ reject(Error('development.owner.control_unconfirmed'));
120
+ } });
121
+ });
122
+ }
123
+ /** Same CLI process, filesystem-local owner control. The Studio HTTP surface
124
+ * remains GET-only, and stop never signals a numeric PID. */
125
+ export async function stopDevelopmentOwner(root, reason = 'stop') {
126
+ const p = paths(root), owner = ownerAt(p.lock, p.rootDigest);
127
+ if (!owner)
128
+ return { stopped: false };
129
+ const current = birth(owner.pid);
130
+ if (current !== owner.birth)
131
+ return { stopped: false, stale: true };
132
+ await command(owner, 'inspect');
133
+ let acknowledged = true;
134
+ try {
135
+ await command(owner, reason);
136
+ }
137
+ catch {
138
+ acknowledged = false;
139
+ }
140
+ // A lost control reply is observed under the same identity, never resent.
141
+ const until = Date.now() + 30_000;
142
+ while (Date.now() < until) {
143
+ const live = ownerAt(p.lock, p.rootDigest);
144
+ if (live && !same(live, owner))
145
+ throw Error('development.owner.changed');
146
+ if (!live && birth(owner.pid) !== owner.birth)
147
+ return { stopped: true, acknowledged };
148
+ await wait(50);
149
+ }
150
+ throw Error('development.owner.close_unconfirmed');
151
+ }
152
+ export async function acquireDevelopmentOwner(root, onStop) {
153
+ const p = paths(root, true);
154
+ let state;
155
+ if (!existsSync(p.state)) {
156
+ try {
157
+ write(p.state, { version: 1, connectionId: randomBytes(16).toString('hex') });
158
+ }
159
+ catch (error) {
160
+ if (error.code !== 'EEXIST')
161
+ throw error;
162
+ }
163
+ }
164
+ state = read(p.state);
165
+ if (Object.keys(state).some(key => !['version', 'connectionId', 'port'].includes(key)) || state.version !== 1 || typeof state.connectionId !== 'string' || !hex.test(state.connectionId) || state.port !== undefined && (!Number.isInteger(state.port) || state.port < 1 || state.port > 65535))
166
+ throw Error('development.owner.state_invalid');
167
+ let owner = { version: 1, rootDigest: p.rootDigest, instanceId: randomBytes(16).toString('hex'), connectionId: state.connectionId, pid: process.pid, birth: birth(process.pid) };
168
+ let ownsRecord = false;
169
+ let closing = false;
170
+ const sockets = new Set();
171
+ let control;
172
+ try {
173
+ control = createServer({ allowHalfOpen: true }, socket => {
174
+ sockets.add(socket);
175
+ socket.once('close', () => sockets.delete(socket));
176
+ socket.setTimeout(3000, () => socket.destroy());
177
+ socket.setEncoding('utf8');
178
+ let raw = '';
179
+ socket.on('data', chunk => {
180
+ raw += chunk;
181
+ if (raw.length > 1024) {
182
+ socket.destroy();
183
+ return;
184
+ }
185
+ if (!raw.endsWith('\n'))
186
+ return;
187
+ try {
188
+ const input = JSON.parse(raw);
189
+ if (input.instanceId !== owner.instanceId || !['inspect', 'stop', 'replace'].includes(input.action))
190
+ throw Error();
191
+ socket.end(JSON.stringify(owner));
192
+ if (input.action !== 'inspect' && !closing) {
193
+ closing = true;
194
+ onStop(input.action);
195
+ }
196
+ }
197
+ catch {
198
+ socket.destroy();
199
+ }
200
+ });
201
+ });
202
+ await new Promise((resolve, reject) => { control.once('error', reject); control.listen(endpoint(owner), () => { control.removeListener('error', reject); resolve(); }); });
203
+ control.on('error', () => { if (!closing) {
204
+ closing = true;
205
+ onStop('fatal');
206
+ } });
207
+ if (process.platform !== 'win32' && process.platform !== 'linux')
208
+ chmodSync(endpoint(owner), 0o600);
209
+ // All stale reclamation, new record creation and state updates happen
210
+ // while this process owns the fixed kernel endpoint.
211
+ const previous = ownerAt(p.lock, p.rootDigest);
212
+ if (previous) {
213
+ if (birth(previous.pid) === previous.birth)
214
+ throw Error('development.owner.previous_exit_unconfirmed');
215
+ removeOwned(p.lock, previous);
216
+ }
217
+ write(p.lock, owner);
218
+ ownsRecord = true;
219
+ let closePromise;
220
+ return Object.freeze({ connectionId: state.connectionId,
221
+ preferredPort: state.port && state.port >= 24000 && state.port <= 24999 ? state.port : 24000 + parseInt(createHash('sha256').update(state.connectionId).digest('hex').slice(0, 8), 16) % 1000,
222
+ recordPort(port) {
223
+ const current = ownerAt(p.lock, p.rootDigest);
224
+ if (!current || !same(current, owner))
225
+ throw Error('development.owner.changed');
226
+ state = { ...state, port };
227
+ owner = { ...owner, port };
228
+ for (const [path, value] of [[p.state, state], [p.lock, owner]]) {
229
+ const temporary = path + '.' + owner.instanceId;
230
+ write(temporary, value);
231
+ renameSync(temporary, path);
232
+ }
233
+ },
234
+ close() {
235
+ return closePromise ??= (async () => {
236
+ removeOwned(p.lock, owner);
237
+ for (const socket of sockets)
238
+ socket.destroy();
239
+ await new Promise((resolve, reject) => control.close(error => error ? reject(error) : resolve()));
240
+ })();
241
+ },
242
+ });
243
+ }
244
+ catch (error) {
245
+ if (ownsRecord)
246
+ removeOwned(p.lock, owner);
247
+ control?.close();
248
+ if (error.code === 'EADDRINUSE')
249
+ throw Error('development.owner.already_running');
250
+ throw error;
251
+ }
252
+ }
253
+ //# sourceMappingURL=development-owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-owner.js","sourceRoot":"","sources":["../src/development-owner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare class DevelopmentProcessError extends Error {
2
+ readonly code: string;
3
+ readonly diagnosticCode?: string | undefined;
4
+ constructor(code: string, diagnosticCode?: string | undefined);
5
+ }
6
+ /** A bounded compiler/checker process, never a component execution sandbox. */
7
+ export declare function runDevelopmentProcess(options: {
8
+ worker: string;
9
+ cwd: string;
10
+ input: string;
11
+ timeoutMs: number;
12
+ maximumOutputBytes: number;
13
+ signal?: AbortSignal;
14
+ }): Promise<string>;
15
+ //# sourceMappingURL=development-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-process.d.ts","sourceRoot":"","sources":["../src/development-process.ts"],"names":[],"mappings":"AAEA,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;gBAA9C,IAAI,EAAE,MAAM,EAAW,cAAc,CAAC,EAAE,MAAM,YAAA;CAGpE;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAClD,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClB"}
@@ -0,0 +1,65 @@
1
+ import { spawn } from 'node:child_process';
2
+ export class DevelopmentProcessError extends Error {
3
+ code;
4
+ diagnosticCode;
5
+ constructor(code, diagnosticCode) {
6
+ super(code);
7
+ this.code = code;
8
+ this.diagnosticCode = diagnosticCode;
9
+ this.name = 'DevelopmentProcessError';
10
+ }
11
+ }
12
+ /** A bounded compiler/checker process, never a component execution sandbox. */
13
+ export function runDevelopmentProcess(options) {
14
+ options.signal?.throwIfAborted();
15
+ return new Promise((resolve, reject) => {
16
+ const child = spawn(process.execPath, [options.worker], {
17
+ cwd: options.cwd, stdio: ['pipe', 'pipe', 'pipe'],
18
+ env: { NO_COLOR: '1', NODE_ENV: 'development',
19
+ ...(process.platform === 'win32' && process.env.SystemRoot ? { SystemRoot: process.env.SystemRoot } : {}) },
20
+ });
21
+ let failed = false, firstError, total = 0;
22
+ const stdout = [], stderr = [];
23
+ const fail = (error) => {
24
+ if (!failed) {
25
+ failed = true;
26
+ firstError = error;
27
+ }
28
+ child.kill('SIGKILL');
29
+ };
30
+ const receive = (target, chunk) => {
31
+ total += chunk.length;
32
+ if (total > options.maximumOutputBytes)
33
+ return fail(new DevelopmentProcessError('development.build.output_limit'));
34
+ target.push(chunk);
35
+ };
36
+ child.stdout.on('data', chunk => receive(stdout, chunk));
37
+ child.stderr.on('data', chunk => receive(stderr, chunk));
38
+ child.stdin.on('error', error => { if (!failed)
39
+ fail(error); });
40
+ child.once('error', fail);
41
+ const abort = () => fail(options.signal.reason);
42
+ options.signal?.addEventListener('abort', abort, { once: true });
43
+ const timeout = setTimeout(() => fail(new DevelopmentProcessError('development.build.timeout')), options.timeoutMs);
44
+ child.once('close', code => {
45
+ clearTimeout(timeout);
46
+ options.signal?.removeEventListener('abort', abort);
47
+ if (failed)
48
+ return reject(firstError);
49
+ if (code === 0)
50
+ return resolve(Buffer.concat(stdout).toString('utf8'));
51
+ let diagnosticCode;
52
+ try {
53
+ const parsed = JSON.parse(Buffer.concat(stderr).toString('utf8'));
54
+ if (typeof parsed.code === 'string' && /^development\.[a-z0-9_.]{1,180}$/u.test(parsed.code))
55
+ diagnosticCode = parsed.code;
56
+ }
57
+ catch { /* Raw compiler paths/output are not public diagnostics. */ }
58
+ reject(new DevelopmentProcessError('development.build.rejected', diagnosticCode));
59
+ });
60
+ child.stdin.end(options.input);
61
+ if (options.signal?.aborted)
62
+ abort();
63
+ });
64
+ }
65
+ //# sourceMappingURL=development-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-process.js","sourceRoot":"","sources":["../src/development-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export interface DevelopmentFile {
2
+ path: string;
3
+ bytes: Uint8Array;
4
+ }
5
+ export interface DevelopmentLimits {
6
+ maximumFiles: number;
7
+ maximumBytes: number;
8
+ }
9
+ /** A private copy of one complete input set, including declared dependencies. */
10
+ export declare class DevelopmentContents {
11
+ #private;
12
+ readonly revision: string;
13
+ readonly byteLength: number;
14
+ constructor(files: readonly DevelopmentFile[], limits: DevelopmentLimits);
15
+ /** Consumers receive independent bytes; the checked capture remains immutable. */
16
+ readFiles(): DevelopmentFile[];
17
+ }
18
+ export interface DevelopmentCheck {
19
+ readonly moduleId: string;
20
+ readonly sourceRevision: string;
21
+ readonly sequence: number;
22
+ }
23
+ export interface CheckedDevelopmentModule {
24
+ readonly moduleId: string;
25
+ readonly sourceRevision: string;
26
+ readonly checkerKey: string;
27
+ readonly artifacts: DevelopmentContents;
28
+ }
29
+ export interface DevelopmentModuleState {
30
+ readonly moduleId: string;
31
+ /** Absent if current inputs cannot be captured; lastChecked stays explicit. */
32
+ readonly sourceRevision?: string;
33
+ readonly status: 'checking' | 'checked' | 'failed';
34
+ readonly diagnostic?: string;
35
+ /** Passed checks, not an assertion that a Player has loaded this revision. */
36
+ readonly lastChecked?: CheckedDevelopmentModule;
37
+ }
38
+ /**
39
+ * Adoption only. The caller captures dependencies, runs the common checks/build,
40
+ * and recaptures current inputs before publish/reject. Watcher events alone do
41
+ * not authorize a revision. This helper never executes component code.
42
+ */
43
+ export declare class DevelopmentRevisionGate {
44
+ #private;
45
+ constructor(options: {
46
+ checkerKey: string;
47
+ maximumModules: number;
48
+ });
49
+ begin(moduleId: string, source: DevelopmentContents): DevelopmentCheck;
50
+ invalidate(moduleId: string, diagnostic: string): void;
51
+ private assertIdentity;
52
+ publish(check: DevelopmentCheck, current: DevelopmentContents, artifacts: DevelopmentContents): boolean;
53
+ reject(check: DevelopmentCheck, current: DevelopmentContents, diagnostic: string): boolean;
54
+ state(moduleId: string): DevelopmentModuleState | undefined;
55
+ remove(moduleId: string): void;
56
+ private currentCheck;
57
+ }
58
+ //# sourceMappingURL=development-revisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-revisions.d.ts","sourceRoot":"","sources":["../src/development-revisions.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,iFAAiF;AACjF,qBAAa,mBAAmB;;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAGhB,KAAK,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,iBAAiB;IAqCxE,kFAAkF;IAClF,SAAS,IAAI,eAAe,EAAE;CAG/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED;;;;GAIG;AACH,qBAAa,uBAAuB;;gBAMtB,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE;IASnE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,gBAAgB;IAWtE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAStD,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO;IAUvG,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAQ1F,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAI3D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B,OAAO,CAAC,YAAY;CAUrB"}