@crowdedkingdoms/crowdy-dsh 0.2.1-test.1 → 0.3.0-dev.1

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 (40) hide show
  1. package/README.md +5 -4
  2. package/dist/dsh-web/BUILD.json +5 -5
  3. package/dist/dsh-web/preview/vfs-image.tar.gz +0 -0
  4. package/lib/bridge/index.js +3 -0
  5. package/lib/bridge/index.js.map +1 -1
  6. package/lib/bridge/protocol.js +9 -1
  7. package/lib/bridge/protocol.js.map +1 -1
  8. package/lib/crowdy/client.js +10 -0
  9. package/lib/crowdy/client.js.map +1 -1
  10. package/lib/crowdy/config.js +1 -3
  11. package/lib/crowdy/config.js.map +1 -1
  12. package/lib/crowdy/project-store.js +97 -181
  13. package/lib/crowdy/project-store.js.map +1 -1
  14. package/lib/fs/crowdy-file-system.js +14 -34
  15. package/lib/fs/crowdy-file-system.js.map +1 -1
  16. package/lib/index.js +1 -1
  17. package/lib/index.js.map +1 -1
  18. package/lib/scripts/probe.js +4 -7
  19. package/lib/scripts/probe.js.map +1 -1
  20. package/lib/types/bridge/index.d.ts.map +1 -1
  21. package/lib/types/bridge/protocol.d.ts +21 -2
  22. package/lib/types/bridge/protocol.d.ts.map +1 -1
  23. package/lib/types/crowdy/client.d.ts +17 -1
  24. package/lib/types/crowdy/client.d.ts.map +1 -1
  25. package/lib/types/crowdy/config.d.ts +0 -2
  26. package/lib/types/crowdy/config.d.ts.map +1 -1
  27. package/lib/types/crowdy/project-store.d.ts +39 -47
  28. package/lib/types/crowdy/project-store.d.ts.map +1 -1
  29. package/lib/types/fs/crowdy-file-system.d.ts +6 -6
  30. package/lib/types/fs/crowdy-file-system.d.ts.map +1 -1
  31. package/lib/types/index.d.ts +2 -2
  32. package/lib/types/index.d.ts.map +1 -1
  33. package/lib/vendor/crowdyjs-sdk.js +322 -114
  34. package/lib/vendor/crowdyjs-sdk.version.json +1 -1
  35. package/package.json +7 -7
  36. package/profile/crowdy-web.patch.yml +0 -1
  37. package/lib/crowdy/github-layout.js +0 -97
  38. package/lib/crowdy/github-layout.js.map +0 -1
  39. package/lib/types/crowdy/github-layout.d.ts +0 -36
  40. package/lib/types/crowdy/github-layout.d.ts.map +0 -1
package/README.md CHANGED
@@ -31,7 +31,7 @@ game page (the-construct) iframe /dsh/index.html Web
31
31
 
32
32
  | Seam | Stock | Here |
33
33
  |---|---|---|
34
- | `ctx.fs` | `dsh-fs-sandbox` over the local disk | [`./fs`](src/fs/crowdy-file-system.ts): the project. GitHub-bound projects read/write the bound repository (SHA-guarded) and mirror to Studio; unbound projects use Studio files (`expectedRevision`). `captures/` and `context/` are in-memory scratch dirs the page fills. |
34
+ | `ctx.fs` | `dsh-fs-sandbox` over the local disk | [`./fs`](src/fs/crowdy-file-system.ts): the project. Reads are always the project's files (`crowdyStudioProject`); for a project bound to GitHub those are the server's mirror of the repository at `githubSha`. Writes go by `source`: a STUDIO project through the files-only save under `expectedRevision`, a GITHUB project as one commit per changed file (`crowdyStudioGitHubPutFile` / `DeleteFile` carrying `expectedCommitSha`). Nothing is mirrored from here; the server advances the mirror with each commit, so Monaco and the agent look at one tree. Layout comes from `crowdyStudioGitHubLayout`; this package does not parse `crowdy.json`. GitHub is never required. `captures/` and `context/` are in-memory scratch dirs the page fills. |
35
35
  | `ctx.attachments` | `dsh-attachment-local` (sharp) | [`./attachments`](src/attachments/crowdy-attachment-store.ts): in-memory, header-sniffed dimensions; the browser worker has no native image codec. |
36
36
  | agent preset | `standard` | [`presets/crowdy`](presets/crowdy/agent.cordis.yml): file tools, in-memory `glob`/`grep`, `sdk_lookup`, and the Studio tools below. No shell, no web, no subagents. |
37
37
  | page link | — | [`./bridge`](src/bridge/index.ts): `ctx.crowdyBridge`, a `BroadcastChannel` to the Studio page ([protocol](src/bridge/protocol.ts)). |
@@ -47,7 +47,7 @@ The iframe posts `{type:'crowdy-dsh:ready'}`; the page answers with:
47
47
  iframe.contentWindow.postMessage({
48
48
  type: 'crowdy-dsh:boot',
49
49
  files: {
50
- 'crowdy.json': JSON.stringify({ graphqlUrl, appId, projectId, bridgeChannel, bridgeNonce, githubFirst: true, root: '/dsh/workspace', persistScope }),
50
+ 'crowdy.json': JSON.stringify({ graphqlUrl, appId, projectId, bridgeChannel, bridgeNonce, root: '/dsh/workspace', persistScope }),
51
51
  'settings.yaml': `llm-deepseek:\n apiKeyEnv: CROWDY_APP_TOKEN\n baseURL: ${modelBaseUrl}\n thinking: disabled\n models: [...]\nagent-default-model:\n provider: deepseek-official\n model: ${defaultModel}\n`,
52
52
  },
53
53
  nonce: bridgeNonce, // one-time secret; every bridge frame carries it
@@ -170,6 +170,7 @@ dsh --profile web --patch ./profile/crowdy-node.patch.yml
170
170
  - Experimental upstream packages (`webworker-runtime`, `webworker-packer`) are
171
171
  private and may change; the tag is pinned and the build fails loud.
172
172
  - Attachments are in memory: a reload keeps the session text but not the pixels.
173
- - GitHub-bound projects cannot delete files from here (the Contents API path
174
- is not wrapped); the Studio panel or GitHub can.
173
+ - A multi-file write on a GitHub-bound project is one commit per file; a
174
+ stale race part-way through leaves the earlier commits on the branch and the
175
+ filesystem reports `FS_STALE_VERSION` for the rest. Re-read and retry.
175
176
  - The developer cockpit needs a real, empty mount directory (`CROWDY_MOUNT`).
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "package": "@crowdedkingdoms/crowdy-dsh",
3
- "version": "0.2.1",
4
- "builtAt": "2026-09-12T20:51:29.834Z",
3
+ "version": "0.3.0",
4
+ "builtAt": "2026-09-13T15:25:22.992Z",
5
5
  "source": {
6
6
  "repository": "CrowdedKingdoms/crowdy-dsh",
7
- "commit": "3dae61df42a499cbc3e74f5302d82a3d97fc6a7b",
7
+ "commit": "3e4b7cc0099609a275a9ecce2b2560151f9296e1",
8
8
  "dirty": false
9
9
  },
10
10
  "upstream": {
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "crowdyjs": {
17
17
  "name": "@crowdedkingdoms/crowdyjs",
18
- "version": "16.0.0-test.1",
18
+ "version": "17.0.0-dev.1",
19
19
  "source": "node_modules"
20
20
  },
21
21
  "files": {
@@ -112,7 +112,7 @@
112
112
  "manifest.webmanifest": "sha256:9b54d57eea00f2fdd1affe6e7999a4209a515755f12ac1a3299da2d55e178d4c",
113
113
  "preview/bootstrap-CYECZNXt.js": "sha256:9f303a0485c0badfdd19fad0c357ef050c5b9a343744ab5bf0c70015e7d95092",
114
114
  "preview/crowdy-boot-Cklh1qNl.js": "sha256:b21e8eb126e1cd8a52159d2d577e610df6c8af36a436f9ed5028cfabd11a85ff",
115
- "preview/vfs-image.tar.gz": "sha256:3e674bedf29227c75ac9e9c922faf63ad197a196203b80a8ad2c7ab18a191f15",
115
+ "preview/vfs-image.tar.gz": "sha256:87b85a2319ae1a64327c8620d4fafc74017ddc2bebee472ae666d41b3b5ad24f",
116
116
  "preview/worker-C8-_ANaz.js": "sha256:81099e5732dfe0c32bacd5897316b7956c5a0a22da01b4a0c6e21d0a3b9d9aa1"
117
117
  }
118
118
  }
@@ -125,6 +125,9 @@ export class CrowdyBridge extends Service {
125
125
  }), client.on('page.project', (payload) => {
126
126
  if (payload.projectId)
127
127
  fs.setProject(payload.projectId);
128
+ // Same project, moved commit (bind, refresh, or a Studio save on a
129
+ // bound project): the snapshot is behind the mirror.
130
+ fs.invalidate();
128
131
  }), client.on('page.saved', () => {
129
132
  fs.invalidate();
130
133
  }), client.on('page.context', (payload) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,15 @@
10
10
  *
11
11
  * @module @crowdedkingdoms/crowdy-dsh/bridge-protocol
12
12
  */
13
- export const CROWDY_BRIDGE_PROTOCOL_VERSION = 2;
13
+ /**
14
+ * v3 (crowdy-dsh 0.3 / CrowdyJS 17): a project carries `source` and
15
+ * `githubSha`. A GITHUB project's files are the server's mirror of the bound
16
+ * repository at that commit; the worker writes them as commits carrying
17
+ * `expectedCommitSha = githubSha` and mirrors nothing back to Studio itself.
18
+ * `page.project` / `page.saved` re-announce the commit whenever it moves so the
19
+ * worker's next write carries the current one.
20
+ */
21
+ export const CROWDY_BRIDGE_PROTOCOL_VERSION = 3;
14
22
  export const BRIDGE_ERROR_CODES = {
15
23
  unavailable: 'BRIDGE_UNAVAILABLE',
16
24
  timeout: 'BRIDGE_TIMEOUT',
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/bridge/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAA;AAyJxD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,oBAAoB;IACjC,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,gBAAgB;IACzB,SAAS,EAAE,YAAY;CACf,CAAA;AAEV,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,KAAc;IAC1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,KAAK,GAAG,KAA6B,CAAA;IAC3C,IAAI,KAAK,CAAC,CAAC,KAAK,8BAA8B,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC1H,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAClE,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/bridge/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAA;AAsKxD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,oBAAoB;IACjC,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,gBAAgB;IACzB,SAAS,EAAE,YAAY;CACf,CAAA;AAEV,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,KAAc;IAC1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,KAAK,GAAG,KAA6B,CAAA;IAC3C,IAAI,KAAK,CAAC,CAAC,KAAK,8BAA8B,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC1H,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAClE,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAA;AACjD,CAAC"}
@@ -38,6 +38,7 @@ export class CrowdyApiError extends Error {
38
38
  }
39
39
  }
40
40
  function toProject(dto) {
41
+ const bound = dto.source === 'GITHUB' && dto.githubOwner && dto.githubRepo && dto.githubBranch;
41
42
  return {
42
43
  projectId: dto.projectId,
43
44
  appId: String(dto.appId),
@@ -46,6 +47,10 @@ function toProject(dto) {
46
47
  revision: String(dto.revision),
47
48
  archived: dto.archived,
48
49
  updatedAt: dto.updatedAt,
50
+ source: bound ? 'GITHUB' : 'STUDIO',
51
+ github: bound
52
+ ? { owner: dto.githubOwner, repo: dto.githubRepo, branch: dto.githubBranch, sha: dto.githubSha ?? null }
53
+ : null,
49
54
  files: dto.files.map((file) => ({
50
55
  target: file.target,
51
56
  path: file.path,
@@ -226,6 +231,11 @@ const PROJECT_FIELDS = `
226
231
  revision
227
232
  archived
228
233
  updatedAt
234
+ source
235
+ githubOwner
236
+ githubRepo
237
+ githubBranch
238
+ githubSha
229
239
  files {
230
240
  target
231
241
  path
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/crowdy/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/crowdy/client.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,6 @@ const ENV_KEYS = {
29
29
  root: 'CROWDY_MOUNT',
30
30
  bridgeChannel: 'CROWDY_BRIDGE_CHANNEL',
31
31
  bridgeNonce: 'CROWDY_BRIDGE_NONCE',
32
- githubFirst: 'CROWDY_GITHUB_FIRST',
33
32
  studioOrigin: 'CROWDY_STUDIO_ORIGIN',
34
33
  persistScope: 'CROWDY_PERSIST_SCOPE',
35
34
  };
@@ -56,7 +55,7 @@ export function loadCrowdyConfig(overrides = {}) {
56
55
  const pick = (key) => {
57
56
  const fromEnv = env[ENV_KEYS[key]];
58
57
  if (fromEnv !== undefined && fromEnv !== '') {
59
- return (key === 'githubFirst' ? fromEnv === '1' || fromEnv === 'true' : fromEnv);
58
+ return fromEnv;
60
59
  }
61
60
  if (overrides[key] !== undefined)
62
61
  return overrides[key];
@@ -73,7 +72,6 @@ export function loadCrowdyConfig(overrides = {}) {
73
72
  root: pick('root'),
74
73
  bridgeChannel: pick('bridgeChannel'),
75
74
  bridgeNonce: pick('bridgeNonce'),
76
- githubFirst: pick('githubFirst') ?? true,
77
75
  studioOrigin: pick('studioOrigin'),
78
76
  persistScope: pick('persistScope'),
79
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/crowdy/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/crowdy/config.ts"],"names":[],"mappings":"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"}
@@ -1,223 +1,139 @@
1
1
  /**
2
- * Where a project's files live: the bound GitHub repository when the owner
3
- * bound one (GitHub is then the source of truth and Studio holds the deployable
4
- * mirror), otherwise the Crowdy Studio project itself.
2
+ * Where a project's files live, and how a batch of edits reaches them.
5
3
  *
6
- * Both stores present the same versioned bag of `(target, path, content)` so
7
- * the filesystem backend never learns which one it is talking to.
4
+ * Both sources present the same versioned bag of `(target, path, content)` so
5
+ * the filesystem backend never learns which one it is talking to:
6
+ *
7
+ * - a STUDIO project is read and written through the Crowdy Studio project
8
+ * API under its revision counter;
9
+ * - a GITHUB project is READ the same way — its `files` are the server's
10
+ * mirror of the bound repository at `github.sha` — and WRITTEN as commits:
11
+ * one `crowdyStudioGitHubPutFile` / `DeleteFile` per changed file, each
12
+ * carrying `expectedCommitSha` (the commit the previous one produced). The
13
+ * server advances the mirror with every commit, so nothing is mirrored from
14
+ * here; the harness and Monaco are always looking at one tree.
15
+ *
16
+ * A lost race is {@link CrowdyApiError} with `isRevisionConflict` either way
17
+ * (`CROWDY_STUDIO_REVISION_CONFLICT` or `GITHUB_STALE_SHA`); the filesystem
18
+ * reports `FS_STALE_VERSION` and the agent re-reads.
19
+ *
20
+ * Layout comes from the API (`crowdyStudioGitHubLayout`) at the commit being
21
+ * written to. This module does not parse `crowdy.json`; the API is the only
22
+ * grammar.
8
23
  *
9
24
  * @module @crowdedkingdoms/crowdy-dsh/crowdy/project-store
10
25
  */
11
26
  import { CrowdyApiError } from './client.js';
12
- import { layoutFromTree, parseCrowdyJson, repoPathToStudioFile, studioFileToRepoPath, } from './github-layout.js';
13
- /** Crowdy Studio project files behind `crowdyStudioProject*`. */
14
- export class StudioProjectStore {
27
+ /**
28
+ * The one store. Which path a commit takes is decided by the snapshot it is
29
+ * applied to, which is decided by the project's `source` at load time.
30
+ */
31
+ export class CrowdyProjectStore {
15
32
  client;
16
33
  projectId;
17
- kind = 'studio';
34
+ /** Layout per commit; commits are immutable so this never goes stale. */
35
+ layouts = new Map();
18
36
  constructor(client, projectId) {
19
37
  this.client = client;
20
38
  this.projectId = projectId;
21
39
  }
22
40
  async load() {
23
41
  const project = await this.client.loadProject(this.projectId);
24
- return {
25
- revision: project.revision,
26
- files: project.files,
27
- source: 'studio',
28
- label: `Crowdy Studio project "${project.name}"`,
29
- };
42
+ return snapshotOf(project);
30
43
  }
31
44
  async commit(snapshot, batch) {
45
+ if (snapshot.source === 'github')
46
+ return this.commitToGitHub(snapshot, batch);
32
47
  const project = await this.client.saveFiles({
33
48
  projectId: this.projectId,
34
49
  expectedRevision: snapshot.revision,
35
50
  ...batch,
36
51
  });
37
- return {
38
- revision: project.revision,
39
- files: project.files,
40
- source: 'studio',
41
- label: snapshot.label,
42
- };
43
- }
44
- }
45
- /**
46
- * The bound GitHub repository, read through `crowdyStudioGitHubTree/File` and
47
- * written through `crowdyStudioGitHubPutFile` (Contents API, SHA-guarded).
48
- *
49
- * After every successful GitHub write the same batch is mirrored onto the
50
- * Studio project so a draft test or deploy compiles what the agent wrote. The
51
- * mirror is best-effort: GitHub already holds the truth, and a Studio revision
52
- * race is reported, not treated as a failed write.
53
- */
54
- export class GitHubProjectStore {
55
- client;
56
- projectId;
57
- repoLabel;
58
- warn;
59
- kind = 'github';
60
- shas = new Map();
61
- layout;
62
- /** Last mirror failure, surfaced once by the filesystem in its next result. */
63
- mirrorWarning;
64
- constructor(client, projectId, repoLabel, warn = () => undefined) {
65
- this.client = client;
66
- this.projectId = projectId;
67
- this.repoLabel = repoLabel;
68
- this.warn = warn;
69
- }
70
- get scope() {
71
- return { appId: this.client.appId, projectId: this.projectId };
72
- }
73
- async load() {
74
- await this.client.authenticate();
75
- const entries = await this.client.github.tree(this.scope);
76
- const crowdyJson = entries.find((entry) => entry.type === 'blob' && entry.path === 'crowdy.json');
77
- let layout = null;
78
- if (crowdyJson) {
79
- const file = await this.client.github.getFile({ ...this.scope, path: 'crowdy.json' });
80
- layout = parseCrowdyJson(file.content);
81
- }
82
- this.layout = layout ?? layoutFromTree(entries);
83
- const mapped = [];
84
- for (const entry of entries) {
85
- if (entry.type !== 'blob')
86
- continue;
87
- const studio = repoPathToStudioFile(this.layout, entry.path);
88
- if (!studio)
89
- continue;
90
- if (!isSourcePath(studio.path))
91
- continue;
92
- mapped.push({ repoPath: entry.path, ...studio, sha: entry.sha });
93
- }
94
- const files = [];
95
- const shas = new Map();
96
- // Small projects: fetch sequentially in modest parallel batches so a
97
- // fleet-wide op limit is not tripped by one listing.
98
- const batchSize = 4;
99
- for (let index = 0; index < mapped.length; index += batchSize) {
100
- const slice = mapped.slice(index, index + batchSize);
101
- const loaded = await Promise.all(slice.map(async (entry) => {
102
- const file = await this.client.github.getFile({ ...this.scope, path: entry.repoPath });
103
- return { entry, file };
104
- }));
105
- for (const { entry, file } of loaded) {
106
- shas.set(key(entry.target, entry.path), { sha: file.sha, repoPath: entry.repoPath });
107
- files.push({
108
- target: entry.target,
109
- path: entry.path,
110
- content: file.content,
111
- revision: file.sha,
112
- updatedAt: '',
113
- });
114
- }
115
- }
116
- this.shas = shas;
117
- files.sort((a, b) => (a.target === b.target ? a.path.localeCompare(b.path) : a.target.localeCompare(b.target)));
118
- return {
119
- revision: revisionOf(shas),
120
- files,
121
- source: 'github',
122
- label: `GitHub ${this.repoLabel}`,
123
- };
52
+ return snapshotOf(project);
124
53
  }
125
- async commit(snapshot, batch) {
126
- if (snapshot.revision !== revisionOf(this.shas)) {
127
- throw new CrowdyApiError('The repository changed since it was read.', 'GITHUB_STALE_SHA');
54
+ async commitToGitHub(snapshot, batch) {
55
+ const scope = { appId: this.client.appId, projectId: this.projectId };
56
+ let sha = snapshot.revision;
57
+ if (!/^[0-9a-f]{40}$/.test(sha)) {
58
+ throw new CrowdyApiError('The bound project has no mirror commit yet; refresh it from GitHub in Crowdy Studio.', 'GITHUB_NOT_BOUND');
128
59
  }
129
- if (batch.deletes?.length) {
130
- throw new CrowdyApiError('Deleting files in a GitHub-bound project is not supported here; delete it on GitHub or in Crowdy Studio.', 'GITHUB_DELETE_UNSUPPORTED');
131
- }
132
- const layout = this.layout ?? layoutFromTree([]);
60
+ const layout = await this.layoutAt(scope, sha);
133
61
  for (const upsert of batch.upserts ?? []) {
134
- const repoPath = studioFileToRepoPath(layout, upsert.target, upsert.path);
135
- if (!repoPath) {
136
- throw new CrowdyApiError(`The bound repository has no ${upsert.target.toLowerCase()} root in crowdy.json, so ${upsert.path} has no place to go.`, 'GITHUB_PATH_INVALID');
137
- }
138
- const existing = this.shas.get(key(upsert.target, upsert.path));
62
+ const repoPath = repoPathFor(layout, upsert.target, upsert.path);
139
63
  const written = await this.client.github.putFile({
140
- ...this.scope,
64
+ ...scope,
141
65
  path: repoPath,
142
66
  content: upsert.content,
143
- message: `Crowdy Studio agent: ${existing ? 'update' : 'add'} ${repoPath}`,
144
- ...(existing ? { sha: existing.sha } : {}),
67
+ message: `Crowdy Studio agent: update ${repoPath}`,
68
+ expectedCommitSha: sha,
145
69
  });
146
- this.shas.set(key(upsert.target, upsert.path), { sha: written.sha, repoPath });
70
+ sha = written.commitSha ?? sha;
147
71
  }
148
- const files = snapshot.files.map((file) => ({ ...file }));
149
- for (const upsert of batch.upserts ?? []) {
150
- const index = files.findIndex((file) => file.target === upsert.target && file.path === upsert.path);
151
- const state = this.shas.get(key(upsert.target, upsert.path));
152
- const next = {
153
- target: upsert.target,
154
- path: upsert.path,
155
- content: upsert.content,
156
- revision: state?.sha ?? '',
157
- updatedAt: new Date().toISOString(),
158
- };
159
- if (index === -1)
160
- files.push(next);
161
- else
162
- files[index] = next;
163
- }
164
- await this.mirrorToStudio(batch);
165
- return { revision: revisionOf(this.shas), files, source: 'github', label: snapshot.label };
166
- }
167
- /** Copy the batch onto the Studio project so builds see the same bytes. */
168
- async mirrorToStudio(batch) {
169
- try {
170
- const project = await this.client.loadProject(this.projectId);
171
- await this.client.saveFiles({
172
- projectId: this.projectId,
173
- expectedRevision: project.revision,
174
- ...batch,
72
+ for (const del of batch.deletes ?? []) {
73
+ const repoPath = repoPathFor(layout, del.target, del.path);
74
+ const status = await this.client.github.deleteFile({
75
+ ...scope,
76
+ path: repoPath,
77
+ message: `Crowdy Studio agent: delete ${repoPath}`,
78
+ expectedCommitSha: sha,
175
79
  });
176
- this.mirrorWarning = undefined;
80
+ sha = status.githubSha ?? sha;
177
81
  }
178
- catch (error) {
179
- const message = error instanceof Error ? error.message : String(error);
180
- this.mirrorWarning = `Saved to GitHub, but the Crowdy Studio mirror was not updated: ${message}. Pull from GitHub in Studio before testing.`;
181
- this.warn(this.mirrorWarning);
82
+ // The server advanced the mirror with each commit; read it back rather
83
+ // than guessing at the shape it produced.
84
+ return snapshotOf(await this.client.loadProject(this.projectId));
85
+ }
86
+ async layoutAt(scope, commitSha) {
87
+ const cached = this.layouts.get(commitSha);
88
+ if (cached)
89
+ return cached;
90
+ const layout = await this.client.github.layout({ ...scope, commitSha });
91
+ if (this.layouts.size > 32) {
92
+ const [oldest] = this.layouts.keys();
93
+ if (oldest !== undefined)
94
+ this.layouts.delete(oldest);
182
95
  }
96
+ this.layouts.set(commitSha, layout);
97
+ return layout;
183
98
  }
184
99
  }
185
- function key(target, path) {
186
- return `${target}:${path}`;
100
+ /** Repository path of a project file under the API-resolved layout. */
101
+ export function repoPathFor(layout, target, path) {
102
+ const root = target === 'SERVER' ? layout.server : layout.client;
103
+ if (root == null) {
104
+ throw new CrowdyApiError(`The bound repository's crowdy.json has no ${target.toLowerCase()} directory, so ${path} has nowhere to go.`, 'GITHUB_PATH_INVALID', 'Add a "client" directory to crowdy.json on the bound branch.');
105
+ }
106
+ const base = root.replace(/^\/+|\/+$/g, '');
107
+ const rel = path.replace(/^\/+/, '');
108
+ if (!base || base === '.')
109
+ return rel;
110
+ return `${base}/${rel}`;
187
111
  }
188
- function revisionOf(shas) {
189
- return [...shas.entries()]
190
- .sort(([a], [b]) => a.localeCompare(b))
191
- .map(([k, v]) => `${k}=${v.sha}`)
192
- .join(';');
112
+ export function snapshotOf(project) {
113
+ if (project.source === 'GITHUB' && project.github) {
114
+ const label = `${project.github.owner}/${project.github.repo}@${project.github.branch}`;
115
+ return {
116
+ revision: project.github.sha ?? '',
117
+ files: project.files,
118
+ source: 'github',
119
+ label: `GitHub ${label}`,
120
+ };
121
+ }
122
+ return {
123
+ revision: project.revision,
124
+ files: project.files,
125
+ source: 'studio',
126
+ label: `Crowdy Studio project "${project.name}"`,
127
+ };
193
128
  }
194
129
  /** Crowdy Studio stores only `Cargo.toml` and `.rs` files under `src/`. */
195
130
  export function isSourcePath(path) {
196
131
  return path === 'Cargo.toml' || (path.startsWith('src/') && path.endsWith('.rs'));
197
132
  }
198
- /**
199
- * Choose the store for a project: GitHub when the project is bound to a
200
- * connected repository and the caller prefers it, otherwise Studio files.
201
- */
202
- export async function selectProjectStore(client, projectId, options) {
203
- if (options.githubFirst) {
204
- try {
205
- const status = await client.github.status({ appId: client.appId, projectId });
206
- if (status.configured && status.connected && status.owner && status.repo) {
207
- const label = `${status.owner}/${status.repo}@${status.branch ?? 'default'}`;
208
- return {
209
- store: new GitHubProjectStore(client, projectId, label, options.warn),
210
- reason: `The project is bound to GitHub (${label}); the repository is the source of truth and Studio mirrors it.`,
211
- };
212
- }
213
- }
214
- catch (error) {
215
- options.warn?.(`GitHub status unavailable, falling back to Studio files: ${error instanceof Error ? error.message : String(error)}`);
216
- }
217
- }
218
- return {
219
- store: new StudioProjectStore(client, projectId),
220
- reason: 'The project is not bound to a GitHub repository; Crowdy Studio project files are the source of truth.',
221
- };
133
+ /** Why a snapshot's files live where they do, for the system prompt and tool messages. */
134
+ export function describeSource(snapshot) {
135
+ return snapshot.source === 'github'
136
+ ? `The project is bound to ${snapshot.label.replace(/^GitHub /, '')}; the repository is the working tree and every write is a commit on it. Monaco in Crowdy Studio sees the same commit.`
137
+ : 'The project is not bound to a GitHub repository; Crowdy Studio project files are the working tree.';
222
138
  }
223
139
  //# sourceMappingURL=project-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-store.js","sourceRoot":"","sources":["../../src/crowdy/project-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-store.js","sourceRoot":"","sources":["../../src/crowdy/project-store.ts"],"names":[],"mappings":"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"}