@playcraft/common 0.1.17 → 0.1.19

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 (45) hide show
  1. package/dist/cloud-workspace/runtime/checkpoints.d.ts +1 -47
  2. package/dist/cloud-workspace/runtime/checkpoints.d.ts.map +1 -1
  3. package/dist/cloud-workspace/runtime/checkpoints.js +1 -28
  4. package/dist/cloud-workspace/runtime/checkpoints.js.map +1 -1
  5. package/dist/cloud-workspace/runtime/config.d.ts +2 -3
  6. package/dist/cloud-workspace/runtime/config.d.ts.map +1 -1
  7. package/dist/cloud-workspace/runtime/config.js +3 -3
  8. package/dist/cloud-workspace/runtime/config.js.map +1 -1
  9. package/dist/cloud-workspace/runtime/files.d.ts +0 -6
  10. package/dist/cloud-workspace/runtime/files.d.ts.map +1 -1
  11. package/dist/cloud-workspace/runtime/files.js +0 -7
  12. package/dist/cloud-workspace/runtime/files.js.map +1 -1
  13. package/dist/cloud-workspace/runtime/git.d.ts +11 -0
  14. package/dist/cloud-workspace/runtime/git.d.ts.map +1 -1
  15. package/dist/cloud-workspace/runtime/git.js +9 -0
  16. package/dist/cloud-workspace/runtime/git.js.map +1 -1
  17. package/dist/cloud-workspace/runtime/index.d.ts +4 -7
  18. package/dist/cloud-workspace/runtime/index.d.ts.map +1 -1
  19. package/dist/cloud-workspace/runtime/index.js +3 -6
  20. package/dist/cloud-workspace/runtime/index.js.map +1 -1
  21. package/dist/cloud-workspace/runtime/operations.d.ts +9 -1
  22. package/dist/cloud-workspace/runtime/operations.d.ts.map +1 -1
  23. package/dist/cloud-workspace/runtime/operations.js +10 -0
  24. package/dist/cloud-workspace/runtime/operations.js.map +1 -1
  25. package/dist/cloud-workspace/runtime/platform-endpoints.d.ts +0 -1
  26. package/dist/cloud-workspace/runtime/platform-endpoints.d.ts.map +1 -1
  27. package/dist/cloud-workspace/runtime/platform-endpoints.js +0 -1
  28. package/dist/cloud-workspace/runtime/platform-endpoints.js.map +1 -1
  29. package/dist/cloud-workspace/runtime/resource-grant.d.ts +3 -3
  30. package/dist/cloud-workspace/runtime/resource-grant.d.ts.map +1 -1
  31. package/dist/cloud-workspace/runtime/resource-grant.js +2 -2
  32. package/dist/cloud-workspace/runtime/resource-grant.js.map +1 -1
  33. package/package.json +1 -1
  34. package/dist/cloud-workspace/runtime/file-snapshot.d.ts +0 -107
  35. package/dist/cloud-workspace/runtime/file-snapshot.d.ts.map +0 -1
  36. package/dist/cloud-workspace/runtime/file-snapshot.js +0 -231
  37. package/dist/cloud-workspace/runtime/file-snapshot.js.map +0 -1
  38. package/dist/cloud-workspace/runtime/http-object-store.d.ts +0 -17
  39. package/dist/cloud-workspace/runtime/http-object-store.d.ts.map +0 -1
  40. package/dist/cloud-workspace/runtime/http-object-store.js +0 -106
  41. package/dist/cloud-workspace/runtime/http-object-store.js.map +0 -1
  42. package/dist/cloud-workspace/runtime/instance-rebuild.d.ts +0 -62
  43. package/dist/cloud-workspace/runtime/instance-rebuild.d.ts.map +0 -1
  44. package/dist/cloud-workspace/runtime/instance-rebuild.js +0 -63
  45. package/dist/cloud-workspace/runtime/instance-rebuild.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  /**
3
3
  * Resource actions. Excludes instance destruction, checkpoint restore, and wildcards.
4
- * `checkpoint.save` saves the workspace files; it is carried out as a `checkpoint.create` operation.
4
+ * `workspace.save` commits the workspace to Git and, where the branch may be written, pushes it.
5
5
  */
6
- export declare const RESOURCE_GRANT_ACTIONS: readonly ["runtime.ensure", "session.create", "session.turn", "session.interrupt", "session.approval.respond", "file.write", "git.commit", "git.push", "git.stage", "git.unstage", "git.discard", "terminal.create", "parameter.patch", "preview.publish", "checkpoint.save"];
6
+ export declare const RESOURCE_GRANT_ACTIONS: readonly ["runtime.ensure", "session.create", "session.turn", "session.interrupt", "session.approval.respond", "file.write", "git.commit", "git.push", "git.stage", "git.unstage", "git.discard", "terminal.create", "parameter.patch", "preview.publish", "workspace.save"];
7
7
  export declare const RESOURCE_GRANT_KIND: "workspace-resource";
8
8
  export declare const resourceGrantCommandSchema: z.ZodObject<{
9
9
  version: z.ZodLiteral<1>;
@@ -34,10 +34,10 @@ export declare const resourceGrantCommandSchema: z.ZodObject<{
34
34
  "git.stage": "git.stage";
35
35
  "git.unstage": "git.unstage";
36
36
  "git.discard": "git.discard";
37
+ "workspace.save": "workspace.save";
37
38
  "terminal.create": "terminal.create";
38
39
  "parameter.patch": "parameter.patch";
39
40
  "preview.publish": "preview.publish";
40
- "checkpoint.save": "checkpoint.save";
41
41
  }>>;
42
42
  }, z.core.$strict>;
43
43
  hardExpiresAt: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"resource-grant.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/resource-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,sBAAsB,+QAgBzB,CAAC;AAEX,eAAO,MAAM,mBAAmB,EAAG,oBAA6B,CAAC;AASjE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyBnC,CAAC;AAEL,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,0BAA0B;;;;;;;;;kBAW5B,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAa1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAG5G"}
1
+ {"version":3,"file":"resource-grant.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/resource-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,sBAAsB,8QAgBzB,CAAC;AAEX,eAAO,MAAM,mBAAmB,EAAG,oBAA6B,CAAC;AASjE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyBnC,CAAC;AAEL,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,0BAA0B;;;;;;;;;kBAW5B,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAa1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAG5G"}
@@ -2,7 +2,7 @@ import { createHash } from 'node:crypto';
2
2
  import { z } from 'zod';
3
3
  /**
4
4
  * Resource actions. Excludes instance destruction, checkpoint restore, and wildcards.
5
- * `checkpoint.save` saves the workspace files; it is carried out as a `checkpoint.create` operation.
5
+ * `workspace.save` commits the workspace to Git and, where the branch may be written, pushes it.
6
6
  */
7
7
  export const RESOURCE_GRANT_ACTIONS = [
8
8
  'runtime.ensure',
@@ -19,7 +19,7 @@ export const RESOURCE_GRANT_ACTIONS = [
19
19
  'terminal.create',
20
20
  'parameter.patch',
21
21
  'preview.publish',
22
- 'checkpoint.save',
22
+ 'workspace.save',
23
23
  ];
24
24
  export const RESOURCE_GRANT_KIND = 'workspace-resource';
25
25
  const scopeSchema = z
@@ -1 +1 @@
1
- {"version":3,"file":"resource-grant.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/resource-grant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-grant.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/resource-grant.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcraft/common",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,107 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const FILE_SNAPSHOT_ENTRY_KINDS: readonly ["file", "symlink", "deleted"];
3
- export type FileSnapshotEntryKind = (typeof FILE_SNAPSHOT_ENTRY_KINDS)[number];
4
- export declare const FILE_SNAPSHOT_STATUSES: readonly ["complete", "incomplete"];
5
- export type FileSnapshotStatus = (typeof FILE_SNAPSHOT_STATUSES)[number];
6
- export declare const fileSnapshotStatusSchema: z.ZodEnum<{
7
- complete: "complete";
8
- incomplete: "incomplete";
9
- }>;
10
- export declare const fileSnapshotEntrySchema: z.ZodObject<{
11
- path: z.ZodString;
12
- kind: z.ZodEnum<{
13
- file: "file";
14
- symlink: "symlink";
15
- deleted: "deleted";
16
- }>;
17
- mode: z.ZodOptional<z.ZodNumber>;
18
- contentHash: z.ZodOptional<z.ZodString>;
19
- size: z.ZodOptional<z.ZodNumber>;
20
- target: z.ZodOptional<z.ZodString>;
21
- }, z.core.$strict>;
22
- export type FileSnapshotEntry = z.infer<typeof fileSnapshotEntrySchema>;
23
- /**
24
- * Where a manifest's content objects live. Without a layout each snapshot has its own copies; with
25
- * `workspace` the objects are shared by every snapshot of the workspace and keyed by content hash,
26
- * so a snapshot only uploads content the workspace has not stored before.
27
- */
28
- export declare const FILE_SNAPSHOT_OBJECT_LAYOUTS: readonly ["workspace"];
29
- export type FileSnapshotObjectLayout = (typeof FILE_SNAPSHOT_OBJECT_LAYOUTS)[number];
30
- /** A transcript's object key (`nativeTranscriptKey`): workspace id, then the path under the Codex home. */
31
- export declare const NATIVE_TRANSCRIPT_KEY: RegExp;
32
- export declare const nativeTranscriptSchema: z.ZodObject<{
33
- sessionId: z.ZodString;
34
- threadId: z.ZodString;
35
- path: z.ZodString;
36
- contentHash: z.ZodString;
37
- size: z.ZodNumber;
38
- capturedAt: z.ZodString;
39
- }, z.core.$strict>;
40
- export type NativeTranscript = z.infer<typeof nativeTranscriptSchema>;
41
- export declare const fileSnapshotManifestSchema: z.ZodObject<{
42
- snapshotId: z.ZodString;
43
- workspaceId: z.ZodString;
44
- generation: z.ZodNumber;
45
- status: z.ZodEnum<{
46
- complete: "complete";
47
- incomplete: "incomplete";
48
- }>;
49
- entries: z.ZodArray<z.ZodObject<{
50
- path: z.ZodString;
51
- kind: z.ZodEnum<{
52
- file: "file";
53
- symlink: "symlink";
54
- deleted: "deleted";
55
- }>;
56
- mode: z.ZodOptional<z.ZodNumber>;
57
- contentHash: z.ZodOptional<z.ZodString>;
58
- size: z.ZodOptional<z.ZodNumber>;
59
- target: z.ZodOptional<z.ZodString>;
60
- }, z.core.$strict>>;
61
- digest: z.ZodString;
62
- objectLayout: z.ZodOptional<z.ZodEnum<{
63
- workspace: "workspace";
64
- }>>;
65
- native: z.ZodOptional<z.ZodArray<z.ZodObject<{
66
- sessionId: z.ZodString;
67
- threadId: z.ZodString;
68
- path: z.ZodString;
69
- contentHash: z.ZodString;
70
- size: z.ZodNumber;
71
- capturedAt: z.ZodString;
72
- }, z.core.$strict>>>;
73
- }, z.core.$strict>;
74
- export type FileSnapshotManifest = z.infer<typeof fileSnapshotManifestSchema>;
75
- export type FileSnapshotVerification = {
76
- ok: true;
77
- snapshotId: string;
78
- checksum: string;
79
- contentHashes: string[];
80
- } | {
81
- ok: false;
82
- reason: 'incomplete' | 'mismatch' | 'unreadable';
83
- };
84
- export declare function fileSnapshotObjectKey(workspaceId: string, generation: number, snapshotId: string, contentHash: string): string;
85
- /** A content object shared by every snapshot of the workspace. */
86
- export declare function fileSnapshotContentKey(workspaceId: string, contentHash: string): string;
87
- /**
88
- * Where a Codex thread transcript is kept: under the name Codex gave it, not its hash, so it can be
89
- * found by thread. Each save that changed it replaces it; only the latest copy is kept.
90
- */
91
- export declare function nativeTranscriptKey(workspaceId: string, path: string): string;
92
- export declare function fileSnapshotEntryObjectKey(manifest: Pick<FileSnapshotManifest, 'workspaceId' | 'generation' | 'snapshotId' | 'objectLayout'>, contentHash: string): string;
93
- export declare function fileSnapshotManifestKey(workspaceId: string, generation: number, snapshotId: string): string;
94
- export declare function hashSnapshotBytes(body: Buffer): string;
95
- export declare function fileSnapshotDigest(entries: readonly FileSnapshotEntry[]): string;
96
- export declare function assertHttpObjectStoreUrl(value: string): string;
97
- export declare function putObjectBytes(baseUrl: string, key: string, body: Buffer, client: 'cli' | 'runtime', headers?: Record<string, string>): Promise<void>;
98
- export declare function getObjectBytes(baseUrl: string, key: string, client: 'cli' | 'runtime'): Promise<Buffer>;
99
- /**
100
- * Reads the manifest and every object it names back from the store. Content hashes in `verified`
101
- * were read and checked against the same workspace's shared objects before, and are not read again;
102
- * they only apply to a manifest with the `workspace` layout, whose objects never change. Transcripts
103
- * are kept by name and replaced, so they are known as `<path>@<hash>` instead; one replaced since it
104
- * was checked no longer matches a manifest that names the old content, and fails the check.
105
- */
106
- export declare function verifyFileSnapshotManifest(manifestKey: string, getObject: (key: string) => Promise<Buffer | undefined>, verified?: ReadonlySet<string>): Promise<FileSnapshotVerification>;
107
- //# sourceMappingURL=file-snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-snapshot.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/file-snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,231 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { z } from 'zod';
3
- import { workspaceRelativePathSchema } from './files.js';
4
- import { generationSchema } from './generations.js';
5
- export const FILE_SNAPSHOT_ENTRY_KINDS = ['file', 'symlink', 'deleted'];
6
- export const FILE_SNAPSHOT_STATUSES = ['complete', 'incomplete'];
7
- export const fileSnapshotStatusSchema = z.enum(FILE_SNAPSHOT_STATUSES);
8
- export const fileSnapshotEntrySchema = z
9
- .object({
10
- path: workspaceRelativePathSchema,
11
- kind: z.enum(FILE_SNAPSHOT_ENTRY_KINDS),
12
- mode: z.number().int().min(0).max(0o777).optional(),
13
- contentHash: z.string().length(64).optional(),
14
- size: z.number().int().nonnegative().optional(),
15
- target: z.string().min(1).max(512).optional(),
16
- })
17
- .strict();
18
- /**
19
- * Where a manifest's content objects live. Without a layout each snapshot has its own copies; with
20
- * `workspace` the objects are shared by every snapshot of the workspace and keyed by content hash,
21
- * so a snapshot only uploads content the workspace has not stored before.
22
- */
23
- export const FILE_SNAPSHOT_OBJECT_LAYOUTS = ['workspace'];
24
- const NATIVE_THREAD_ID = /^[A-Za-z0-9_-]{1,128}$/;
25
- const TRANSCRIPT_PATH = String.raw `sessions/\d{4}/\d{2}/\d{2}/rollout-[A-Za-z0-9_.-]{1,200}\.jsonl`;
26
- const NATIVE_TRANSCRIPT_PATH = new RegExp(`^${TRANSCRIPT_PATH}$`);
27
- /** A transcript's object key (`nativeTranscriptKey`): workspace id, then the path under the Codex home. */
28
- export const NATIVE_TRANSCRIPT_KEY = new RegExp(`^workspaces/([A-Za-z0-9_-]{1,128})/codex/(${TRANSCRIPT_PATH})$`);
29
- /**
30
- * A Codex thread's transcript, the file Codex resumes the thread from. `path` is where Codex keeps
31
- * it under its home; the content is a shared workspace object like any file's.
32
- */
33
- const nativeTranscriptFields = z.object({
34
- sessionId: z.string().min(1).max(128),
35
- threadId: z.string().regex(NATIVE_THREAD_ID),
36
- path: z.string().regex(NATIVE_TRANSCRIPT_PATH),
37
- contentHash: z.string().length(64),
38
- size: z.number().int().nonnegative(),
39
- /** When the transcript was read: conversation after this is not in it. */
40
- capturedAt: z.string().datetime(),
41
- });
42
- /** Codex names a thread's file after the thread, so a path for another thread is refused. */
43
- function transcriptNamesThread(value) {
44
- return value.path.endsWith(`-${value.threadId}.jsonl`);
45
- }
46
- export const nativeTranscriptSchema = nativeTranscriptFields
47
- .strict()
48
- .refine(transcriptNamesThread, { message: 'native_transcript_path_mismatch' });
49
- export const fileSnapshotManifestSchema = z
50
- .object({
51
- snapshotId: z.string().min(1).max(128),
52
- workspaceId: z.string().min(1).max(128),
53
- generation: generationSchema,
54
- status: fileSnapshotStatusSchema,
55
- entries: z.array(fileSnapshotEntrySchema),
56
- digest: z.string().length(64),
57
- objectLayout: z.enum(FILE_SNAPSHOT_OBJECT_LAYOUTS).optional(),
58
- native: z.array(nativeTranscriptSchema).max(256).optional(),
59
- })
60
- .strict()
61
- .superRefine((value, context) => {
62
- if (value.native && value.objectLayout !== 'workspace') {
63
- context.addIssue({ code: z.ZodIssueCode.custom, message: 'native_transcripts_need_workspace_layout' });
64
- }
65
- if (value.status !== 'complete')
66
- return;
67
- for (const entry of value.entries) {
68
- if (entry.kind === 'file' && (!entry.contentHash || entry.mode === undefined || entry.size === undefined)) {
69
- context.addIssue({ code: z.ZodIssueCode.custom, message: 'file_snapshot_entry_incomplete' });
70
- }
71
- if (entry.kind === 'symlink' && (!entry.target || entry.mode === undefined)) {
72
- context.addIssue({ code: z.ZodIssueCode.custom, message: 'symlink_snapshot_entry_incomplete' });
73
- }
74
- if (entry.kind === 'deleted' && (entry.contentHash || entry.target || entry.mode !== undefined)) {
75
- context.addIssue({ code: z.ZodIssueCode.custom, message: 'deleted_snapshot_entry_invalid' });
76
- }
77
- }
78
- });
79
- export function fileSnapshotObjectKey(workspaceId, generation, snapshotId, contentHash) {
80
- return `workspaces/${workspaceId}/snapshots/${generation}/${snapshotId}/objects/${contentHash}`;
81
- }
82
- /** A content object shared by every snapshot of the workspace. */
83
- export function fileSnapshotContentKey(workspaceId, contentHash) {
84
- return `workspaces/${workspaceId}/objects/${contentHash}`;
85
- }
86
- /**
87
- * Where a Codex thread transcript is kept: under the name Codex gave it, not its hash, so it can be
88
- * found by thread. Each save that changed it replaces it; only the latest copy is kept.
89
- */
90
- export function nativeTranscriptKey(workspaceId, path) {
91
- return `workspaces/${workspaceId}/codex/${path}`;
92
- }
93
- /** A transcript object already checked is known by name and content, since its key is reused. */
94
- function nativeTranscriptToken(transcript) {
95
- return `${transcript.path}@${transcript.contentHash}`;
96
- }
97
- export function fileSnapshotEntryObjectKey(manifest, contentHash) {
98
- return manifest.objectLayout === 'workspace'
99
- ? fileSnapshotContentKey(manifest.workspaceId, contentHash)
100
- : fileSnapshotObjectKey(manifest.workspaceId, manifest.generation, manifest.snapshotId, contentHash);
101
- }
102
- export function fileSnapshotManifestKey(workspaceId, generation, snapshotId) {
103
- return `workspaces/${workspaceId}/snapshots/${generation}/${snapshotId}/manifest.json`;
104
- }
105
- export function hashSnapshotBytes(body) {
106
- return createHash('sha256').update(body).digest('hex');
107
- }
108
- export function fileSnapshotDigest(entries) {
109
- const sorted = [...entries].sort((left, right) => left.path.localeCompare(right.path) || left.kind.localeCompare(right.kind));
110
- return createHash('sha256').update(canonicalJson(sorted)).digest('hex');
111
- }
112
- export function assertHttpObjectStoreUrl(value) {
113
- let parsed;
114
- try {
115
- parsed = new URL(value);
116
- }
117
- catch {
118
- throw new Error('object_store_url_invalid');
119
- }
120
- if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
121
- throw new Error('object_store_url_invalid');
122
- }
123
- return value.replace(/\/$/, '');
124
- }
125
- export async function putObjectBytes(baseUrl, key, body, client, headers = {}) {
126
- const response = await fetch(objectUrl(baseUrl, key), {
127
- method: 'PUT',
128
- redirect: 'error',
129
- headers: {
130
- ...headers,
131
- 'content-type': 'application/octet-stream',
132
- 'x-playcraft-object-client': client,
133
- },
134
- body: new Uint8Array(body),
135
- });
136
- if (response.status === 409)
137
- throw new Error('object_conflict');
138
- if (response.status !== 201 && response.status !== 200)
139
- throw new Error('object_put_failed');
140
- }
141
- export async function getObjectBytes(baseUrl, key, client) {
142
- const response = await fetch(objectUrl(baseUrl, key), {
143
- headers: { 'x-playcraft-object-client': client },
144
- });
145
- if (response.status === 404)
146
- throw new Error('object_missing');
147
- if (!response.ok)
148
- throw new Error('object_get_failed');
149
- return Buffer.from(await response.arrayBuffer());
150
- }
151
- /**
152
- * Reads the manifest and every object it names back from the store. Content hashes in `verified`
153
- * were read and checked against the same workspace's shared objects before, and are not read again;
154
- * they only apply to a manifest with the `workspace` layout, whose objects never change. Transcripts
155
- * are kept by name and replaced, so they are known as `<path>@<hash>` instead; one replaced since it
156
- * was checked no longer matches a manifest that names the old content, and fails the check.
157
- */
158
- export async function verifyFileSnapshotManifest(manifestKey, getObject, verified = new Set()) {
159
- const raw = await getObject(manifestKey).catch(() => undefined);
160
- if (!raw)
161
- return { ok: false, reason: 'unreadable' };
162
- let parsed;
163
- try {
164
- parsed = JSON.parse(raw.toString('utf8'));
165
- }
166
- catch {
167
- return { ok: false, reason: 'mismatch' };
168
- }
169
- const manifest = fileSnapshotManifestSchema.safeParse(parsed);
170
- if (!manifest.success)
171
- return { ok: false, reason: 'mismatch' };
172
- if (manifest.data.status !== 'complete')
173
- return { ok: false, reason: 'incomplete' };
174
- const digest = fileSnapshotDigest(manifest.data.entries);
175
- if (digest !== manifest.data.digest)
176
- return { ok: false, reason: 'mismatch' };
177
- const contentHashes = new Set();
178
- for (const entry of manifest.data.entries) {
179
- if (entry.kind === 'deleted')
180
- continue;
181
- if (entry.kind === 'symlink') {
182
- if (!entry.target || entry.mode === undefined)
183
- return { ok: false, reason: 'mismatch' };
184
- continue;
185
- }
186
- if (!entry.contentHash || entry.mode === undefined)
187
- return { ok: false, reason: 'mismatch' };
188
- contentHashes.add(entry.contentHash);
189
- if (manifest.data.objectLayout === 'workspace' && verified.has(entry.contentHash))
190
- continue;
191
- const body = await getObject(fileSnapshotEntryObjectKey(manifest.data, entry.contentHash)).catch(() => undefined);
192
- if (!body || hashSnapshotBytes(body) !== entry.contentHash)
193
- return { ok: false, reason: 'mismatch' };
194
- if (entry.size !== undefined && body.byteLength !== entry.size)
195
- return { ok: false, reason: 'mismatch' };
196
- }
197
- for (const transcript of manifest.data.native ?? []) {
198
- const token = nativeTranscriptToken(transcript);
199
- contentHashes.add(token);
200
- if (verified.has(token))
201
- continue;
202
- const body = await getObject(nativeTranscriptKey(manifest.data.workspaceId, transcript.path)).catch(() => undefined);
203
- if (!body || hashSnapshotBytes(body) !== transcript.contentHash || body.byteLength !== transcript.size) {
204
- return { ok: false, reason: 'mismatch' };
205
- }
206
- }
207
- // Only shared objects can be skipped later; a snapshot's own copies are not reused by the next one.
208
- return {
209
- ok: true,
210
- snapshotId: manifest.data.snapshotId,
211
- checksum: digest,
212
- contentHashes: manifest.data.objectLayout === 'workspace' ? [...contentHashes] : [],
213
- };
214
- }
215
- function objectUrl(baseUrl, key) {
216
- return `${assertHttpObjectStoreUrl(baseUrl)}/objects/${encodeURIComponent(key)}`;
217
- }
218
- function canonicalJson(value) {
219
- return JSON.stringify(sortValue(value));
220
- }
221
- function sortValue(value) {
222
- if (Array.isArray(value))
223
- return value.map(sortValue);
224
- if (value && typeof value === 'object') {
225
- return Object.fromEntries(Object.entries(value)
226
- .sort(([left], [right]) => left.localeCompare(right))
227
- .map(([key, nested]) => [key, sortValue(nested)]));
228
- }
229
- return value;
230
- }
231
- //# sourceMappingURL=file-snapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-snapshot.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/file-snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- export type ObjectStoreEvent = {
2
- method: 'PUT' | 'GET';
3
- key: string;
4
- client: string;
5
- tampered: boolean;
6
- /** The request carried an Authorization header. */
7
- authorized?: boolean;
8
- };
9
- export type HttpObjectStore = {
10
- url: string;
11
- port: number;
12
- events: ObjectStoreEvent[];
13
- setTamperContentGets: (count: number) => void;
14
- close: () => Promise<void>;
15
- };
16
- export declare function startHttpObjectStore(): Promise<HttpObjectStore>;
17
- //# sourceMappingURL=http-object-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-object-store.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/http-object-store.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAIF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC,CA+BrE"}
@@ -1,106 +0,0 @@
1
- import { createServer } from 'node:http';
2
- import { once } from 'node:events';
3
- import { NATIVE_TRANSCRIPT_KEY as TRANSCRIPT_KEY } from './file-snapshot.js';
4
- const BODY_LIMIT = 2 * 1024 * 1024;
5
- export async function startHttpObjectStore() {
6
- const objects = new Map();
7
- const events = [];
8
- let tamperContentGets = 0;
9
- const server = createServer(async (request, response) => {
10
- try {
11
- await handle(request, response, objects, events, () => {
12
- if (tamperContentGets <= 0)
13
- return false;
14
- tamperContentGets -= 1;
15
- return true;
16
- });
17
- }
18
- catch {
19
- if (!response.headersSent)
20
- response.writeHead(500);
21
- response.end();
22
- }
23
- });
24
- server.listen(0, '0.0.0.0');
25
- await once(server, 'listening');
26
- const port = server.address().port;
27
- return {
28
- url: `http://127.0.0.1:${port}`,
29
- port,
30
- events,
31
- setTamperContentGets(count) {
32
- tamperContentGets = count;
33
- },
34
- close: () => new Promise((resolve, reject) => {
35
- server.close((error) => (error ? reject(error) : resolve()));
36
- }),
37
- };
38
- }
39
- async function handle(request, response, objects, events, takeTamper) {
40
- const url = new URL(request.url ?? '/', 'http://object-store.local');
41
- const marker = '/objects/';
42
- const objectsAt = url.pathname.indexOf(marker);
43
- if (url.pathname === '/rename' || request.method === 'MOVE' || objectsAt < 0) {
44
- response.writeHead(404);
45
- response.end();
46
- return;
47
- }
48
- const key = decodeURIComponent(url.pathname.slice(objectsAt + marker.length));
49
- if (!key || key.includes('..') || key.startsWith('/')) {
50
- response.writeHead(400);
51
- response.end();
52
- return;
53
- }
54
- const client = String(request.headers['x-playcraft-object-client'] ?? '');
55
- if (request.method === 'PUT') {
56
- const body = await readBody(request);
57
- const existing = objects.get(key);
58
- if (existing && !existing.equals(body) && !TRANSCRIPT_KEY.test(key)) {
59
- response.writeHead(409);
60
- response.end();
61
- return;
62
- }
63
- const created = !existing;
64
- objects.set(key, body);
65
- events.push({ method: 'PUT', key, client, tampered: false, authorized: Boolean(request.headers.authorization) });
66
- response.writeHead(created ? 201 : 200);
67
- response.end();
68
- return;
69
- }
70
- if (request.method === 'GET') {
71
- const body = objects.get(key);
72
- if (!body) {
73
- response.writeHead(404);
74
- response.end();
75
- return;
76
- }
77
- const tamper = !key.endsWith('/manifest.json') && takeTamper();
78
- const payload = tamper ? tamperBytes(body) : body;
79
- events.push({ method: 'GET', key, client, tampered: tamper });
80
- response.writeHead(200, { 'content-type': 'application/octet-stream' });
81
- response.end(payload);
82
- return;
83
- }
84
- response.writeHead(405);
85
- response.end();
86
- }
87
- function tamperBytes(body) {
88
- if (body.length === 0)
89
- return Buffer.from('x');
90
- const copy = Buffer.from(body);
91
- copy[copy.length - 1] = copy[copy.length - 1] ^ 0xff;
92
- return copy;
93
- }
94
- async function readBody(request) {
95
- const chunks = [];
96
- let size = 0;
97
- for await (const chunk of request) {
98
- const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
99
- size += buf.length;
100
- if (size > BODY_LIMIT)
101
- throw new Error('object_too_large');
102
- chunks.push(buf);
103
- }
104
- return Buffer.concat(chunks);
105
- }
106
- //# sourceMappingURL=http-object-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-object-store.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/http-object-store.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * Auth material, temp tokens, lock files, and stale sockets are not a generic backup. Names under the
4
- * workspace's `.git/` are refs and logs named after branches, so only its lock files are dropped.
5
- */
6
- export declare function isDisposableBackupPath(path: string): boolean;
7
- export declare const instanceRebuildEntrySchema: z.ZodObject<{
8
- path: z.ZodString;
9
- kind: z.ZodEnum<{
10
- file: "file";
11
- symlink: "symlink";
12
- deleted: "deleted";
13
- }>;
14
- mode: z.ZodOptional<z.ZodNumber>;
15
- contentBase64: z.ZodOptional<z.ZodString>;
16
- contentHash: z.ZodOptional<z.ZodString>;
17
- target: z.ZodOptional<z.ZodString>;
18
- }, z.core.$strict>;
19
- export type InstanceRebuildEntry = z.infer<typeof instanceRebuildEntrySchema>;
20
- export declare const instanceRebuildRequestSchema: z.ZodObject<{
21
- snapshotId: z.ZodString;
22
- workspaceId: z.ZodString;
23
- lossFrom: z.ZodString;
24
- lossTo: z.ZodString;
25
- entries: z.ZodArray<z.ZodObject<{
26
- path: z.ZodString;
27
- kind: z.ZodEnum<{
28
- file: "file";
29
- symlink: "symlink";
30
- deleted: "deleted";
31
- }>;
32
- mode: z.ZodOptional<z.ZodNumber>;
33
- contentBase64: z.ZodOptional<z.ZodString>;
34
- contentHash: z.ZodOptional<z.ZodString>;
35
- target: z.ZodOptional<z.ZodString>;
36
- }, z.core.$strict>>;
37
- }, z.core.$strict>;
38
- export type InstanceRebuildRequest = z.infer<typeof instanceRebuildRequestSchema>;
39
- export type InstanceRebuildRefusal = 'workspace_not_restorable' | 'snapshot_not_durable' | 'snapshot_incomplete' | 'snapshot_mismatch' | 'instance_still_alive' | 'instance_unavailable';
40
- export declare function decideInstanceRebuild(input: {
41
- workspaceStatus: string;
42
- pointer?: string;
43
- requestedSnapshotId?: string;
44
- requestedVerification?: {
45
- ok: false;
46
- reason: 'incomplete' | 'mismatch' | 'unreadable';
47
- };
48
- verification?: {
49
- ok: true;
50
- } | {
51
- ok: false;
52
- reason: 'incomplete' | 'mismatch' | 'unreadable';
53
- };
54
- previousInstanceToken?: string;
55
- currentInstanceToken?: string;
56
- }): {
57
- ok: true;
58
- } | {
59
- ok: false;
60
- reason: InstanceRebuildRefusal;
61
- };
62
- //# sourceMappingURL=instance-rebuild.d.ts.map