@crowdedkingdoms/crowdyjs 11.1.0 → 12.0.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.
Files changed (81) hide show
  1. package/MIGRATION.md +107 -0
  2. package/README.md +203 -0
  3. package/dist/crowdy-agent/browser-dispatcher.d.ts +41 -0
  4. package/dist/crowdy-agent/browser-dispatcher.d.ts.map +1 -0
  5. package/dist/crowdy-agent/browser-dispatcher.js +264 -0
  6. package/dist/crowdy-agent/controller.d.ts +144 -0
  7. package/dist/crowdy-agent/controller.d.ts.map +1 -0
  8. package/dist/crowdy-agent/controller.js +1239 -0
  9. package/dist/crowdy-agent/errors.d.ts +37 -0
  10. package/dist/crowdy-agent/errors.d.ts.map +1 -0
  11. package/dist/crowdy-agent/errors.js +107 -0
  12. package/dist/crowdy-agent/graphql-transport.d.ts +154 -0
  13. package/dist/crowdy-agent/graphql-transport.d.ts.map +1 -0
  14. package/dist/crowdy-agent/graphql-transport.js +854 -0
  15. package/dist/crowdy-agent/index.d.ts +16 -0
  16. package/dist/crowdy-agent/index.d.ts.map +1 -0
  17. package/dist/crowdy-agent/index.js +15 -0
  18. package/dist/crowdy-agent/registry.d.ts +29 -0
  19. package/dist/crowdy-agent/registry.d.ts.map +1 -0
  20. package/dist/crowdy-agent/registry.js +281 -0
  21. package/dist/crowdy-agent/schema.d.ts +72 -0
  22. package/dist/crowdy-agent/schema.d.ts.map +1 -0
  23. package/dist/crowdy-agent/schema.js +467 -0
  24. package/dist/crowdy-agent/studio-tools.d.ts +15 -0
  25. package/dist/crowdy-agent/studio-tools.d.ts.map +1 -0
  26. package/dist/crowdy-agent/studio-tools.js +280 -0
  27. package/dist/crowdy-agent/tool-descriptors.d.ts +4 -0
  28. package/dist/crowdy-agent/tool-descriptors.d.ts.map +1 -0
  29. package/dist/crowdy-agent/tool-descriptors.js +1049 -0
  30. package/dist/crowdy-agent/transport.d.ts +152 -0
  31. package/dist/crowdy-agent/transport.d.ts.map +1 -0
  32. package/dist/crowdy-agent/transport.js +27 -0
  33. package/dist/crowdy-agent/types.d.ts +328 -0
  34. package/dist/crowdy-agent/types.d.ts.map +1 -0
  35. package/dist/crowdy-agent/types.js +37 -0
  36. package/dist/crowdy-client.d.ts +3 -0
  37. package/dist/crowdy-client.d.ts.map +1 -1
  38. package/dist/crowdy-client.js +6 -0
  39. package/dist/crowdy-studio/agent-dom-shell.d.ts +40 -0
  40. package/dist/crowdy-studio/agent-dom-shell.d.ts.map +1 -0
  41. package/dist/crowdy-studio/agent-dom-shell.js +354 -0
  42. package/dist/crowdy-studio/controller.d.ts +74 -4
  43. package/dist/crowdy-studio/controller.d.ts.map +1 -1
  44. package/dist/crowdy-studio/controller.js +450 -17
  45. package/dist/crowdy-studio/dom-shell.d.ts +4 -1
  46. package/dist/crowdy-studio/dom-shell.d.ts.map +1 -1
  47. package/dist/crowdy-studio/dom-shell.js +6 -1
  48. package/dist/crowdy-studio/index.d.ts +6 -3
  49. package/dist/crowdy-studio/index.d.ts.map +1 -1
  50. package/dist/crowdy-studio/index.js +3 -0
  51. package/dist/crowdy-studio/models.d.ts +67 -0
  52. package/dist/crowdy-studio/models.d.ts.map +1 -1
  53. package/dist/crowdy-studio/mount.d.ts +15 -0
  54. package/dist/crowdy-studio/mount.d.ts.map +1 -1
  55. package/dist/crowdy-studio/mount.js +129 -2
  56. package/dist/crowdy-studio/styles.d.ts +1 -1
  57. package/dist/crowdy-studio/styles.d.ts.map +1 -1
  58. package/dist/crowdy-studio/styles.js +2 -0
  59. package/dist/generated/graphql.d.ts +3753 -1
  60. package/dist/generated/graphql.d.ts.map +1 -1
  61. package/dist/generated/graphql.js +296 -0
  62. package/dist/index.d.ts +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/kit/npcs.d.ts.map +1 -1
  65. package/dist/kit/social.d.ts.map +1 -1
  66. package/dist/player-host/index.d.ts +5 -0
  67. package/dist/player-host/index.d.ts.map +1 -0
  68. package/dist/player-host/index.js +3 -0
  69. package/dist/player-host/lease-manager.d.ts +66 -0
  70. package/dist/player-host/lease-manager.d.ts.map +1 -0
  71. package/dist/player-host/lease-manager.js +428 -0
  72. package/dist/player-host/schemas.d.ts +9 -0
  73. package/dist/player-host/schemas.d.ts.map +1 -0
  74. package/dist/player-host/schemas.js +347 -0
  75. package/dist/player-host/tools.d.ts +13 -0
  76. package/dist/player-host/tools.d.ts.map +1 -0
  77. package/dist/player-host/tools.js +79 -0
  78. package/dist/player-host/types.d.ts +203 -0
  79. package/dist/player-host/types.d.ts.map +1 -0
  80. package/dist/player-host/types.js +1 -0
  81. package/package.json +12 -2
@@ -0,0 +1,40 @@
1
+ import { type CrowdyStudioAgentController, type CrowdyStudioAgentStateV1 } from '../crowdy-agent/controller.js';
2
+ export interface CrowdyStudioAgentDomShellOptions {
3
+ getPlayLeaseContext?: () => {
4
+ controlledEntityId: string;
5
+ hostCapabilityRevision: string;
6
+ } | null;
7
+ }
8
+ /** Accessible, text-only rendering for the integrated durable agent dock. */
9
+ export declare class CrowdyStudioAgentDomShell {
10
+ private readonly controller;
11
+ private readonly options;
12
+ readonly root: HTMLElement;
13
+ private readonly status;
14
+ private readonly budget;
15
+ private readonly lease;
16
+ private readonly messages;
17
+ private readonly stream;
18
+ private readonly timeline;
19
+ private readonly approvals;
20
+ private readonly checkpoints;
21
+ private readonly composer;
22
+ private readonly send;
23
+ private readonly modeButtons;
24
+ private readonly scopeInputs;
25
+ private readonly unsubscribe;
26
+ private readonly countdownTimer;
27
+ private lastState;
28
+ private disposed;
29
+ constructor(host: HTMLElement, controller: CrowdyStudioAgentController, options?: CrowdyStudioAgentDomShellOptions);
30
+ render(state: CrowdyStudioAgentStateV1): void;
31
+ dispose(): void;
32
+ private renderBudget;
33
+ private renderLease;
34
+ private renderMessages;
35
+ private renderTimeline;
36
+ private renderApprovals;
37
+ private renderCheckpoints;
38
+ private run;
39
+ }
40
+ //# sourceMappingURL=agent-dom-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-dom-shell.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/agent-dom-shell.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC9B,MAAM,+BAA+B,CAAC;AAavC,MAAM,WAAW,gCAAgC;IAC/C,mBAAmB,CAAC,EAAE,MAAM;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,sBAAsB,EAAE,MAAM,CAAC;KAChC,GAAG,IAAI,CAAC;CACV;AAED,6EAA6E;AAC7E,qBAAa,yBAAyB;IAqBlC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IArB1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAC7E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAS;gBAGvB,IAAI,EAAE,WAAW,EACA,UAAU,EAAE,2BAA2B,EACvC,OAAO,GAAE,gCAAqC;IAkKjE,MAAM,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAyB7C,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,cAAc;IA4DtB,OAAO,CAAC,eAAe;IA+CvB,OAAO,CAAC,iBAAiB;YAkCX,GAAG;CAQlB"}
@@ -0,0 +1,354 @@
1
+ const PLAY_SCOPES = [
2
+ 'observe',
3
+ 'locomotion',
4
+ 'interact',
5
+ 'craft',
6
+ 'combat',
7
+ 'communicate',
8
+ 'travel',
9
+ ];
10
+ /** Accessible, text-only rendering for the integrated durable agent dock. */
11
+ export class CrowdyStudioAgentDomShell {
12
+ constructor(host, controller, options = {}) {
13
+ this.controller = controller;
14
+ this.options = options;
15
+ this.modeButtons = new Map();
16
+ this.scopeInputs = new Map();
17
+ this.disposed = false;
18
+ this.lastState = controller.getState();
19
+ this.root = document.createElement('aside');
20
+ this.root.className = 'ck-crowdy-studio-agent-dock';
21
+ this.root.setAttribute('aria-label', 'Crowdy Studio agent');
22
+ const header = document.createElement('header');
23
+ const title = document.createElement('h2');
24
+ title.textContent = 'Crowdy Agent';
25
+ this.status = document.createElement('span');
26
+ this.status.className = 'ck-crowdy-studio-agent-status';
27
+ this.status.setAttribute('role', 'status');
28
+ this.status.setAttribute('aria-live', 'polite');
29
+ header.append(title, this.status);
30
+ const modeGroup = document.createElement('div');
31
+ modeGroup.className = 'ck-crowdy-studio-agent-modes';
32
+ modeGroup.setAttribute('role', 'group');
33
+ modeGroup.setAttribute('aria-label', 'Agent mode');
34
+ for (const mode of ['ASK', 'BUILD', 'PLAY']) {
35
+ const control = button(titleCase(mode));
36
+ control.addEventListener('click', () => {
37
+ void this.run(() => this.controller.setMode(mode));
38
+ });
39
+ control.setAttribute('aria-pressed', 'false');
40
+ this.modeButtons.set(mode, control);
41
+ modeGroup.append(control);
42
+ }
43
+ const controls = document.createElement('div');
44
+ controls.className = 'ck-crowdy-studio-agent-controls';
45
+ const pause = button('Pause');
46
+ pause.addEventListener('click', () => void this.run(() => this.controller.pause()));
47
+ const resume = button('Resume');
48
+ resume.addEventListener('click', () => void this.run(() => this.controller.resume()));
49
+ const stop = button('Stop');
50
+ stop.className = 'ck-crowdy-studio-agent-stop';
51
+ stop.addEventListener('click', () => void this.run(() => this.controller.stop()));
52
+ controls.append(pause, resume, stop);
53
+ this.budget = document.createElement('div');
54
+ this.budget.className = 'ck-crowdy-studio-agent-budget';
55
+ this.budget.setAttribute('aria-label', 'Agent budget');
56
+ this.lease = document.createElement('div');
57
+ this.lease.className = 'ck-crowdy-studio-agent-lease';
58
+ this.lease.setAttribute('role', 'status');
59
+ this.lease.setAttribute('aria-label', 'Agent control lease');
60
+ const leaseControls = document.createElement('fieldset');
61
+ leaseControls.className = 'ck-crowdy-studio-agent-lease-controls';
62
+ const leaseLegend = document.createElement('legend');
63
+ leaseLegend.textContent = 'Play lease scopes';
64
+ leaseControls.append(leaseLegend);
65
+ for (const scope of PLAY_SCOPES) {
66
+ const label = document.createElement('label');
67
+ const input = document.createElement('input');
68
+ input.type = 'checkbox';
69
+ input.value = scope;
70
+ input.checked = scope === 'observe';
71
+ this.scopeInputs.set(scope, input);
72
+ const text = document.createElement('span');
73
+ text.textContent = scope.replace('_', ' ');
74
+ label.append(input, text);
75
+ leaseControls.append(label);
76
+ }
77
+ const grant = button('Grant 60 second Play lease');
78
+ grant.addEventListener('click', () => {
79
+ const context = this.options.getPlayLeaseContext?.();
80
+ if (!context) {
81
+ this.status.textContent =
82
+ 'The game host must advertise a controlled entity before Play.';
83
+ return;
84
+ }
85
+ const scopes = [...this.scopeInputs]
86
+ .filter(([, input]) => input.checked)
87
+ .map(([scope]) => scope);
88
+ void this.run(() => this.controller.grantPlayLease({
89
+ scopes,
90
+ durationSeconds: 60,
91
+ ...context,
92
+ }));
93
+ });
94
+ leaseControls.append(grant);
95
+ const conversationTitle = heading('Conversation');
96
+ this.messages = document.createElement('div');
97
+ this.messages.className = 'ck-crowdy-studio-agent-messages';
98
+ this.messages.setAttribute('role', 'log');
99
+ this.messages.setAttribute('aria-live', 'polite');
100
+ this.messages.setAttribute('aria-relevant', 'additions text');
101
+ this.stream = document.createElement('div');
102
+ this.stream.className = 'ck-crowdy-studio-agent-stream';
103
+ this.stream.setAttribute('aria-label', 'Streaming assistant response');
104
+ this.messages.append(this.stream);
105
+ const activityTitle = heading('Plan and tools');
106
+ this.timeline = document.createElement('ol');
107
+ this.timeline.className = 'ck-crowdy-studio-agent-timeline';
108
+ this.timeline.setAttribute('aria-label', 'Agent plan and tool timeline');
109
+ this.approvals = document.createElement('section');
110
+ this.approvals.className = 'ck-crowdy-studio-agent-approvals';
111
+ this.approvals.setAttribute('aria-label', 'Pending exact approvals');
112
+ this.checkpoints = document.createElement('section');
113
+ this.checkpoints.className = 'ck-crowdy-studio-agent-checkpoints';
114
+ this.checkpoints.setAttribute('aria-label', 'Agent diffs and checkpoints');
115
+ const form = document.createElement('form');
116
+ form.className = 'ck-crowdy-studio-agent-composer';
117
+ this.composer = document.createElement('textarea');
118
+ this.composer.maxLength = 32768;
119
+ this.composer.rows = 3;
120
+ this.composer.placeholder = 'Ask, build, or play…';
121
+ this.composer.setAttribute('aria-label', 'Message Crowdy Agent');
122
+ this.send = button('Send', 'submit');
123
+ form.append(this.composer, this.send);
124
+ form.addEventListener('submit', (event) => {
125
+ event.preventDefault();
126
+ const content = this.composer.value;
127
+ if (!content.trim())
128
+ return;
129
+ void this.run(async () => {
130
+ await this.controller.sendMessage(content);
131
+ this.composer.value = '';
132
+ });
133
+ });
134
+ this.composer.addEventListener('keydown', (event) => {
135
+ if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
136
+ event.preventDefault();
137
+ form.requestSubmit();
138
+ }
139
+ });
140
+ this.root.append(header, modeGroup, controls, this.budget, this.lease, leaseControls, conversationTitle, this.messages, activityTitle, this.timeline, this.approvals, this.checkpoints, form);
141
+ host.dataset.agent = 'true';
142
+ host.append(this.root);
143
+ this.unsubscribe = controller.subscribe((state) => this.render(state));
144
+ this.countdownTimer = setInterval(() => this.renderLease(this.lastState), 1000);
145
+ }
146
+ render(state) {
147
+ if (this.disposed)
148
+ return;
149
+ this.lastState = state;
150
+ this.status.textContent = state.lastError
151
+ ? `${state.connection} · ${state.lastError.code}: ${state.lastError.message}`
152
+ : state.reconnectRequired
153
+ ? `${state.connection} · explicit resume required`
154
+ : state.connection;
155
+ const mode = state.session?.mode;
156
+ for (const [candidate, control] of this.modeButtons) {
157
+ control.setAttribute('aria-pressed', String(candidate === mode));
158
+ control.dataset.active = String(candidate === mode);
159
+ control.disabled = state.connection !== 'CONNECTED';
160
+ }
161
+ this.send.disabled =
162
+ state.connection !== 'CONNECTED' ||
163
+ state.session?.status !== 'ACTIVE';
164
+ this.renderBudget(state);
165
+ this.renderLease(state);
166
+ this.renderMessages(state);
167
+ this.renderTimeline(state);
168
+ this.renderApprovals(state);
169
+ this.renderCheckpoints(state);
170
+ }
171
+ dispose() {
172
+ if (this.disposed)
173
+ return;
174
+ this.disposed = true;
175
+ clearInterval(this.countdownTimer);
176
+ this.unsubscribe();
177
+ this.root.remove();
178
+ }
179
+ renderBudget(state) {
180
+ if (!state.budget) {
181
+ this.budget.textContent = 'Budget unavailable';
182
+ return;
183
+ }
184
+ const dimensions = state.budget.dimensions.map((dimension) => `${dimension.name.toLowerCase().replace(/_/gu, ' ')} ${dimension.consumed}/${dimension.limit} ${dimension.unit}`);
185
+ this.budget.textContent = [
186
+ state.budget.platformFunded ? 'Platform-funded pilot' : state.budget.payer,
187
+ ...dimensions,
188
+ ].join(' · ');
189
+ }
190
+ renderLease(state) {
191
+ const lease = state.leases.find((entry) => entry.kind === 'PLAY' && entry.status === 'ACTIVE');
192
+ if (!lease) {
193
+ this.lease.textContent = 'No active Play lease';
194
+ return;
195
+ }
196
+ const remaining = Math.max(0, Math.ceil((Date.parse(lease.expiresAt) - Date.now()) / 1000));
197
+ this.lease.textContent = [
198
+ `Play lease: ${remaining}s`,
199
+ `holder ${lease.holder}`,
200
+ `entity ${lease.controlledEntityId ?? 'none'}`,
201
+ `scopes ${lease.scopes.join(', ')}`,
202
+ ].join(' · ');
203
+ }
204
+ renderMessages(state) {
205
+ const rows = state.messages.map((message) => {
206
+ const article = document.createElement('article');
207
+ article.className = 'ck-crowdy-studio-agent-message';
208
+ article.dataset.role = message.role;
209
+ const author = document.createElement('strong');
210
+ author.textContent = message.role === 'USER' ? 'You' : 'Crowdy Agent';
211
+ const content = document.createElement('p');
212
+ content.textContent = message.content;
213
+ article.append(author, content);
214
+ return article;
215
+ });
216
+ this.messages.replaceChildren(...rows, this.stream);
217
+ this.stream.textContent = state.streamingText;
218
+ this.stream.hidden = state.streamingText.length === 0;
219
+ }
220
+ renderTimeline(state) {
221
+ const runItems = state.events
222
+ .filter((event) => event.type.startsWith('RUN_'))
223
+ .map((event) => {
224
+ const item = document.createElement('li');
225
+ item.dataset.status = event.type;
226
+ const title = document.createElement('strong');
227
+ title.textContent = event.type.replace(/_/gu, ' ').toLowerCase();
228
+ const timestamp = document.createElement('span');
229
+ timestamp.textContent = event.createdAt;
230
+ item.append(title, timestamp);
231
+ const payload = event.payload;
232
+ if (payload.code || payload.reason || payload.error) {
233
+ const detail = document.createElement('p');
234
+ detail.textContent = [
235
+ payload.code,
236
+ payload.reason,
237
+ payload.error
238
+ ? `${payload.error.code}: ${payload.error.message}`
239
+ : '',
240
+ ]
241
+ .filter(Boolean)
242
+ .join(' · ');
243
+ item.append(detail);
244
+ }
245
+ return item;
246
+ });
247
+ const toolItems = state.tools.map((tool) => {
248
+ const item = document.createElement('li');
249
+ item.dataset.status = tool.status;
250
+ const title = document.createElement('strong');
251
+ title.textContent = `${tool.name} ${tool.version}`;
252
+ const status = document.createElement('span');
253
+ status.textContent = tool.status.replace(/_/gu, ' ').toLowerCase();
254
+ item.append(title, status);
255
+ if (tool.safeSummary) {
256
+ const summary = document.createElement('p');
257
+ summary.textContent = tool.safeSummary;
258
+ item.append(summary);
259
+ }
260
+ if (tool.error) {
261
+ const error = document.createElement('p');
262
+ error.textContent = `${tool.error.code}: ${tool.error.message}`;
263
+ item.append(error);
264
+ }
265
+ return item;
266
+ });
267
+ const items = [...runItems, ...toolItems];
268
+ this.timeline.replaceChildren(...items);
269
+ if (items.length === 0) {
270
+ const empty = document.createElement('li');
271
+ empty.textContent = 'No tool activity.';
272
+ this.timeline.append(empty);
273
+ }
274
+ }
275
+ renderApprovals(state) {
276
+ const pending = state.approvals.filter((approval) => approval.status === 'PENDING');
277
+ const cards = pending.map((approval) => {
278
+ const card = document.createElement('article');
279
+ card.className = 'ck-crowdy-studio-agent-approval';
280
+ const tool = state.tools.find((entry) => entry.toolCallId === approval.toolCallId);
281
+ const title = heading(tool
282
+ ? `Exact approval: ${tool.name} ${tool.version}`
283
+ : 'Exact approval required', 3);
284
+ const summary = document.createElement('p');
285
+ summary.textContent = `Server-verified execution plan: ${approval.safeSummary}`;
286
+ const call = document.createElement('p');
287
+ call.textContent = `Tool call ${approval.toolCallId}`;
288
+ const reasons = document.createElement('p');
289
+ reasons.textContent = approval.reasons.join(' · ');
290
+ const hash = document.createElement('code');
291
+ hash.textContent = approval.argumentHash;
292
+ const expiry = document.createElement('p');
293
+ expiry.textContent = `Expires ${approval.expiresAt}`;
294
+ const actions = document.createElement('div');
295
+ const approve = button('Approve exact call');
296
+ approve.addEventListener('click', () => void this.run(() => this.controller.approveTool(approval.toolCallId, approval.argumentHash)));
297
+ const deny = button('Deny');
298
+ deny.addEventListener('click', () => void this.run(() => this.controller.rejectTool(approval.toolCallId)));
299
+ actions.append(approve, deny);
300
+ card.append(title, call, summary, reasons, hash, expiry, actions);
301
+ return card;
302
+ });
303
+ this.approvals.replaceChildren(...cards);
304
+ }
305
+ renderCheckpoints(state) {
306
+ const diffTools = state.tools.filter((tool) => tool.name === 'workspace.file.patch' ||
307
+ tool.name === 'workspace.conflict.resolve');
308
+ const cards = diffTools.map((tool) => {
309
+ const card = document.createElement('article');
310
+ card.className = 'ck-crowdy-studio-agent-diff';
311
+ const title = heading('Project diff', 3);
312
+ const summary = document.createElement('p');
313
+ summary.textContent =
314
+ tool.safeSummary ?? `${tool.name} · ${tool.status.toLowerCase()}`;
315
+ card.append(title, summary);
316
+ return card;
317
+ });
318
+ for (const checkpoint of state.checkpoints) {
319
+ const card = document.createElement('article');
320
+ card.className = 'ck-crowdy-studio-agent-checkpoint';
321
+ const title = heading('Checkpoint', 3);
322
+ const detail = document.createElement('p');
323
+ detail.textContent = `${checkpoint.checkpointId} · revision ${checkpoint.projectRevision} · ${checkpoint.reason.toLowerCase().replace(/_/gu, ' ')}`;
324
+ const restore = button('Restore checkpoint');
325
+ restore.addEventListener('click', () => void this.run(() => this.controller.restoreCheckpoint(checkpoint.checkpointId)));
326
+ card.append(title, detail, restore);
327
+ cards.push(card);
328
+ }
329
+ this.checkpoints.replaceChildren(...cards);
330
+ }
331
+ async run(operation) {
332
+ try {
333
+ await operation();
334
+ }
335
+ catch (error) {
336
+ this.status.textContent =
337
+ error instanceof Error ? error.message : 'Agent action failed';
338
+ }
339
+ }
340
+ }
341
+ function button(label, type = 'button') {
342
+ const control = document.createElement('button');
343
+ control.type = type;
344
+ control.textContent = label;
345
+ return control;
346
+ }
347
+ function heading(text, level = 2) {
348
+ const value = document.createElement(`h${level}`);
349
+ value.textContent = text;
350
+ return value;
351
+ }
352
+ function titleCase(value) {
353
+ return `${value[0]}${value.slice(1).toLowerCase()}`;
354
+ }
@@ -2,7 +2,7 @@ import { type PlayerCodeBrokerOptions, type PlayerCodeGridBounds } from '../play
2
2
  import type { PlayerComputeAPI } from '../domains/playerCompute.js';
3
3
  import type { PlayerWalletAPI } from '../domains/playerWallet.js';
4
4
  import { type CrowdyStudioDiagnostic } from './diagnostics.js';
5
- import { type CrowdyStudioFileRef, type CrowdyStudioPairingPreference, type CrowdyStudioProject, type CrowdyStudioProjectMetadata, type CrowdyStudioProjectProvider, type CrowdyStudioProjectSummary, type CrowdyStudioReferenceFile, type CrowdyStudioSaveState, type CrowdyStudioTarget } from './models.js';
5
+ import { type CrowdyStudioAtomicPatchInput, type CrowdyStudioAtomicPatchResult, type CrowdyStudioCheckpointMetadata, type CrowdyStudioFileRef, type CrowdyStudioPairingPreference, type CrowdyStudioProject, type CrowdyStudioProjectMetadata, type CrowdyStudioProjectProvider, type CrowdyStudioProjectSummary, type CrowdyStudioReferenceFile, type CrowdyStudioSaveState, type CrowdyStudioSynchronizationProvider, type CrowdyStudioTarget, type CrowdyStudioProjectSynchronization } from './models.js';
6
6
  import { type CrowdyStudioNewProjectOptions } from './starter-projects.js';
7
7
  export type CrowdyStudioPhase = 'IDLE' | 'TESTING_DRAFT' | 'DEPLOYING_LIVE' | 'COMPILING' | 'ENABLING' | 'RUNNING' | 'COMPILE_FAILED' | 'STOPPING' | 'STOPPED' | 'PARTIAL_FAILURE' | 'ERROR';
8
8
  export type CrowdyStudioPolledSurface = 'runs' | 'logs' | 'usage';
@@ -11,6 +11,33 @@ export interface CrowdyStudioRuntimeStatus {
11
11
  target?: CrowdyStudioTarget;
12
12
  message?: string;
13
13
  }
14
+ export type CrowdyStudioRuntimeSyncState = 'NEVER_RUN' | 'RUNNING_SAVED' | 'RUNNING_STALE' | 'STOPPED';
15
+ export interface CrowdyStudioRuntimeSync {
16
+ state: CrowdyStudioRuntimeSyncState;
17
+ savedRevisionId?: string;
18
+ runningRevisionId?: string;
19
+ deployment?: 'DRAFT' | 'LIVE';
20
+ startedAt?: string;
21
+ }
22
+ export interface CrowdyStudioDeployResult {
23
+ deployment: 'DRAFT' | 'LIVE';
24
+ status: 'RUNNING' | 'COMPILE_FAILED' | 'FAILED';
25
+ projectRevisionId: string;
26
+ targets: readonly CrowdyStudioTarget[];
27
+ message: string;
28
+ }
29
+ export interface CrowdyStudioDeploymentPlan {
30
+ expectedRevisionId: string;
31
+ targets: readonly CrowdyStudioTarget[];
32
+ pairingPreference?: CrowdyStudioPairingPreference;
33
+ projectContentHash?: string;
34
+ }
35
+ export interface CrowdyStudioAgentWorkContext {
36
+ projectId?: string;
37
+ projectRevisionId?: string;
38
+ saveState: 'SAVED';
39
+ runtimeSync: CrowdyStudioRuntimeSync;
40
+ }
14
41
  export interface CrowdyStudioUsageSnapshot {
15
42
  hourUnitsUsed: string;
16
43
  dayUnitsUsed: string;
@@ -51,6 +78,9 @@ export interface CrowdyStudioState {
51
78
  saveState: CrowdyStudioSaveState;
52
79
  saveMessage?: string;
53
80
  runtime: CrowdyStudioRuntimeStatus;
81
+ runtimeSync: CrowdyStudioRuntimeSync;
82
+ agentActivity: 'IDLE' | 'PREPARING' | 'WORKING' | 'PAUSED';
83
+ checkpoints: readonly CrowdyStudioCheckpointMetadata[];
54
84
  buildOutput: string;
55
85
  authoritativeDiagnostics: readonly CrowdyStudioDiagnostic[];
56
86
  localDiagnostics: readonly CrowdyStudioDiagnostic[];
@@ -91,6 +121,9 @@ export interface CrowdyStudioControllerOptions {
91
121
  compilePollMs?: number;
92
122
  compilePollLimit?: number;
93
123
  monitorPollMs?: number;
124
+ /** Durable atomic-patch and checkpoint adapter, independent of GraphQL types. */
125
+ synchronizationProvider?: CrowdyStudioSynchronizationProvider;
126
+ onProjectSynchronized?: (project: CrowdyStudioProject, synchronization: CrowdyStudioProjectSynchronization) => void;
94
127
  sleep?: (ms: number) => Promise<void>;
95
128
  brokerFactory?: (options: PlayerCodeBrokerOptions) => CrowdyStudioBroker;
96
129
  isOnline?: () => boolean;
@@ -110,6 +143,7 @@ export declare class CrowdyStudioController {
110
143
  private readonly options;
111
144
  private state;
112
145
  private readonly listeners;
146
+ private readonly humanEditListeners;
113
147
  private autosaveTimer;
114
148
  private retryTimer;
115
149
  private savePromise;
@@ -118,6 +152,7 @@ export declare class CrowdyStudioController {
118
152
  private conflictRemote;
119
153
  private broker;
120
154
  private operationGeneration;
155
+ private agentOperationGeneration;
121
156
  private readonly visibleSurfaces;
122
157
  private readonly surfaceTimers;
123
158
  private pageVisible;
@@ -125,7 +160,26 @@ export declare class CrowdyStudioController {
125
160
  constructor(options: CrowdyStudioControllerOptions);
126
161
  getState(): CrowdyStudioState;
127
162
  subscribe(listener: (state: CrowdyStudioState) => void): () => void;
163
+ /** Subscribe to synchronous human-edit preemption signals. */
164
+ onHumanEdit(listener: () => void): () => void;
165
+ /**
166
+ * Flush autosave before a durable agent turn. Conflict/offline state fails
167
+ * closed so Build never starts from an uncommitted browser snapshot.
168
+ */
169
+ prepareForAgentWork(): Promise<CrowdyStudioAgentWorkContext>;
170
+ finishAgentWork(paused?: boolean): void;
171
+ beginAgentOperation(): number;
172
+ /** Synchronously fence an in-flight agent compile/deploy/invoke operation. */
173
+ cancelAgentOperation(message?: string): void;
128
174
  canTarget(target: CrowdyStudioTarget, action: 'write' | 'run'): boolean;
175
+ /** Credential-free context projection used by exact browser agent tools. */
176
+ getAgentContext(): {
177
+ appRef: string;
178
+ projectRef?: string;
179
+ gridRef: string;
180
+ contextVersion: string;
181
+ projectContentHash?: string;
182
+ };
129
183
  initialize(): Promise<void>;
130
184
  createProject(options: Omit<CrowdyStudioNewProjectOptions, 'appId' | 'gridId'>): Promise<CrowdyStudioProject>;
131
185
  switchProject(projectId: string): Promise<void>;
@@ -152,15 +206,29 @@ export declare class CrowdyStudioController {
152
206
  retrySave(): Promise<boolean>;
153
207
  acceptRemoteConflict(): Promise<void>;
154
208
  overwriteConflict(): Promise<boolean>;
155
- testDraft(): Promise<void>;
156
- deployLive(): Promise<void>;
209
+ refreshCheckpoints(): Promise<readonly CrowdyStudioCheckpointMetadata[]>;
210
+ /**
211
+ * Validate every change against one immutable baseline, then persist and
212
+ * synchronize all files or none. Routine agent patches cannot delete/rename.
213
+ */
214
+ applyAtomicPatch(input: CrowdyStudioAtomicPatchInput): Promise<CrowdyStudioAtomicPatchResult>;
215
+ /**
216
+ * Apply a server-published project revision to Monaco/kernel state. Pending
217
+ * human edits win and turn the update into an explicit conflict.
218
+ */
219
+ synchronizeProject(project: CrowdyStudioProject, synchronization: CrowdyStudioProjectSynchronization): void;
220
+ restoreCheckpoint(checkpointId: string, approvalGrant: string, expectedRevisionId?: string): Promise<CrowdyStudioCheckpointMetadata>;
221
+ testDraft(agentOperation?: number): Promise<CrowdyStudioDeployResult>;
222
+ testDraftPlan(plan: CrowdyStudioDeploymentPlan, agentOperation?: number): Promise<CrowdyStudioDeployResult>;
223
+ deployLive(agentOperation?: number): Promise<CrowdyStudioDeployResult>;
224
+ deployLivePlan(plan: CrowdyStudioDeploymentPlan, agentOperation?: number): Promise<CrowdyStudioDeployResult>;
157
225
  private deployProject;
158
226
  private compileTarget;
159
227
  private recordBuild;
160
228
  private enableServer;
161
229
  private runClient;
162
230
  stopProject(): Promise<CrowdyStudioStopResult>;
163
- invoke(exportName: string, paramsJson?: string): Promise<CrowdyStudioInvokeResult>;
231
+ invoke(exportName: string, paramsJson?: string, agentOperation?: number): Promise<CrowdyStudioInvokeResult>;
164
232
  setSurfaceVisible(surface: CrowdyStudioPolledSurface, visible: boolean): void;
165
233
  setPageVisible(visible: boolean): void;
166
234
  refreshSurface(surface: CrowdyStudioPolledSurface): Promise<void>;
@@ -175,7 +243,9 @@ export declare class CrowdyStudioController {
175
243
  private clearSaveTimers;
176
244
  private clearTimer;
177
245
  private clientRuntimeOptions;
246
+ private assertDeploymentPlan;
178
247
  private checkOperation;
248
+ private checkAgentOperation;
179
249
  private sleep;
180
250
  private requireProject;
181
251
  private requireFile;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/controller.ts"],"names":[],"mappings":"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"}