@1agh/maude 1.4.4 → 1.4.6

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 (47) hide show
  1. package/apps/studio/annotations-model.ts +33 -1
  2. package/apps/studio/api.ts +19 -0
  3. package/apps/studio/canvas-comment-mount.tsx +48 -3
  4. package/apps/studio/canvas-lib.tsx +5 -0
  5. package/apps/studio/canvas-shell.tsx +110 -14
  6. package/apps/studio/canvas-source-memo.ts +39 -0
  7. package/apps/studio/canvas-text-patch.ts +117 -0
  8. package/apps/studio/client/app.jsx +108 -60
  9. package/apps/studio/client/comments-overlay.css +10 -0
  10. package/apps/studio/client/file-tree.jsx +157 -0
  11. package/apps/studio/client/index.html +1 -1
  12. package/apps/studio/client/panels/DiffView.jsx +37 -8
  13. package/apps/studio/client/panels/GitPanel.jsx +2 -1
  14. package/apps/studio/client/panels/SourceConflictPanel.jsx +19 -17
  15. package/apps/studio/client/styles/3-shell-maude.css +21 -9
  16. package/apps/studio/client/styles/4-components.css +4 -2
  17. package/apps/studio/collab/index.ts +9 -0
  18. package/apps/studio/collab/persistence.ts +49 -1
  19. package/apps/studio/comment-anchor.ts +116 -0
  20. package/apps/studio/comments-overlay.tsx +78 -35
  21. package/apps/studio/context.ts +1 -0
  22. package/apps/studio/cursors-overlay.tsx +181 -107
  23. package/apps/studio/dist/client.bundle.js +1086 -1086
  24. package/apps/studio/dist/comment-mount.js +2 -2
  25. package/apps/studio/dist/styles.css +1 -1
  26. package/apps/studio/hmr-broadcast.ts +59 -3
  27. package/apps/studio/http.ts +3 -0
  28. package/apps/studio/sync/accepted-cold-start.ts +95 -7
  29. package/apps/studio/sync/accepted-link.ts +165 -29
  30. package/apps/studio/sync/agent.ts +28 -2
  31. package/apps/studio/sync/comment-ledger.ts +229 -0
  32. package/apps/studio/sync/file-plane.ts +101 -2
  33. package/apps/studio/sync/index.ts +124 -17
  34. package/apps/studio/sync/journal-client.ts +9 -3
  35. package/apps/studio/sync/migrate-seed.ts +9 -2
  36. package/apps/studio/sync/projection.ts +114 -11
  37. package/apps/studio/sync/remote-docs.ts +3 -2
  38. package/apps/studio/sync/source-recovery.ts +67 -0
  39. package/apps/studio/sync/status.ts +11 -3
  40. package/apps/studio/sync/transaction-client.ts +49 -4
  41. package/apps/studio/use-collab.tsx +28 -1
  42. package/apps/studio/use-selection-set.tsx +13 -3
  43. package/apps/studio/use-undo-stack.tsx +22 -2
  44. package/apps/studio/whats-new.json +45 -0
  45. package/cli/lib/workspace-plan.mjs +10 -0
  46. package/package.json +8 -8
  47. package/plugins/design/templates/_shell.html +21 -0
@@ -357,6 +357,15 @@ export function envEntries(cfg, { hubSecret, adminPassword, renderSecret }) {
357
357
  value: '1',
358
358
  comment: 'containment invariant enforced (DDR-193 §2)',
359
359
  },
360
+ {
361
+ // The browser studio joins the project as a participant (loopback
362
+ // pairing, DDR-209). Without it a browser edit on a project that saves
363
+ // through accepted revisions never becomes an accepted action (F3 S09,
364
+ // 2026-09-25) — and the hub refuses that switch.
365
+ key: 'MAUDE_CELL_PAIRING',
366
+ value: '1',
367
+ comment: 'the browser studio is a project participant (required for accepted revisions)',
368
+ },
360
369
  {
361
370
  key: 'MAUDE_ADMIN_EMAIL',
362
371
  value: cfg.adminEmail,
@@ -501,6 +510,7 @@ export function renderCompose(cfg) {
501
510
  'HUB_WORKSPACE_MODE',
502
511
  ...(cfg.local ? ['HUB_INSECURE_HTTP'] : []),
503
512
  'MAUDE_WORKSPACE_MODE',
513
+ 'MAUDE_CELL_PAIRING',
504
514
  'MAUDE_ADMIN_EMAIL',
505
515
  // The password has to cross into the container too, or the hub knows WHO
506
516
  // the first user is and has no way to create them — which is precisely the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1agh/maude",
3
- "version": "1.4.4",
3
+ "version": "1.4.6",
4
4
  "description": "Marketplace of Claude Code plugins by Michal Dovrtěl: `design` (canvas-first design iteration) + `flow` (generic agentic workflow loop with .ai second brain). Ships the `maude` CLI (with `mdcc` legacy alias) to scaffold workspace, run the design dev server, and manage configs.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -58,13 +58,13 @@
58
58
  "test:e2e:desktop:parity:cloud": "pnpm --filter @maude/desktop-e2e e2e:parity:cloud"
59
59
  },
60
60
  "optionalDependencies": {
61
- "@1agh/maude-darwin-arm64": "1.4.4",
62
- "@1agh/maude-darwin-x64": "1.4.4",
63
- "@1agh/maude-linux-arm64": "1.4.4",
64
- "@1agh/maude-linux-arm64-musl": "1.4.4",
65
- "@1agh/maude-linux-x64": "1.4.4",
66
- "@1agh/maude-linux-x64-musl": "1.4.4",
67
- "@1agh/maude-win32-x64": "1.4.4"
61
+ "@1agh/maude-darwin-arm64": "1.4.6",
62
+ "@1agh/maude-darwin-x64": "1.4.6",
63
+ "@1agh/maude-linux-arm64": "1.4.6",
64
+ "@1agh/maude-linux-arm64-musl": "1.4.6",
65
+ "@1agh/maude-linux-x64": "1.4.6",
66
+ "@1agh/maude-linux-x64-musl": "1.4.6",
67
+ "@1agh/maude-win32-x64": "1.4.6"
68
68
  },
69
69
  "files": [
70
70
  "cli",
@@ -266,6 +266,21 @@
266
266
  }
267
267
  });
268
268
 
269
+ // text-patches:begin
270
+ function applyTextPatches(patches) {
271
+ for (const patch of patches.slice(0, 500)) {
272
+ if (!patch || typeof patch.id !== 'string' || typeof patch.text !== 'string') continue;
273
+ if (!/^[0-9a-f]{8}$/.test(patch.id)) continue;
274
+ for (const el of document.querySelectorAll('[data-cd-id="' + patch.id + '"][data-cd-editable="text"]')) {
275
+ if (el.isContentEditable || el.contains(document.activeElement)) continue;
276
+ const only = el.childNodes.length === 1 ? el.firstChild : null;
277
+ if (!only || only.nodeType !== Node.TEXT_NODE) continue;
278
+ if (only.data !== patch.text) only.data = patch.text;
279
+ }
280
+ }
281
+ }
282
+ // text-patches:end
283
+
269
284
  // Soft reload — re-import the canvas module (cache-busted) and swap it in
270
285
  // via the runtime, holding the last good render on a build/import error
271
286
  // (no white flash). Phase 30 (F4): used for EVERY canvas-body change while
@@ -473,6 +488,12 @@
473
488
  } else if (msg.mode === 'module' || msg.mode === 'hard') {
474
489
  // Only reload when the change touches *this* canvas (or `_lib`).
475
490
  if (msg.mode === 'hard' || !msg.file || (canvasRel && msg.file === canvasRel)) {
491
+ // F4 — a text-only change arrives with the new strings. Show
492
+ // them now; the remount below still re-renders from source and
493
+ // confirms (or corrects) them. Only a leaf that is exactly one
494
+ // text node is touched, via textContent (never markup), and
495
+ // never the element someone is typing in on this device.
496
+ if (msg.mode === 'module' && Array.isArray(msg.patches)) applyTextPatches(msg.patches);
476
497
  // Phase 12.3 — CSS-panel echo guard. The panel applies each
477
498
  // edit optimistically to the live DOM (dgn:'apply-style'), so a
478
499
  // `module` reload for THIS canvas's own edit is redundant churn: