@1agh/maude 1.3.1 → 1.4.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.
package/apps/studio/ws.ts CHANGED
@@ -36,6 +36,9 @@ export type WsData =
36
36
  * a desktop, which is what makes every broadcast below reach everybody
37
37
  * exactly as it always did. */
38
38
  session: string;
39
+ /** WHO opened this socket, as the proxy vouched it — Cloud Phase 27.
40
+ * `''` on a desktop, where the project's git identity is the person. */
41
+ user?: string;
39
42
  }
40
43
  | {
41
44
  id: string;
@@ -446,8 +449,12 @@ export function createWs(
446
449
  else if (msg.type === 'tabs' && Array.isArray(msg.tabs)) inspect.setOpenTabs(msg.tabs);
447
450
  else if (msg.type === 'select' && msg.selection) inspect.setSelected(msg.selection);
448
451
  else if (msg.type === 'clear-select') inspect.setSelected(null);
449
- else if (msg.type === 'comments-add' && msg.payload) await api.commentsAdd(msg.payload);
450
- else if (msg.type === 'comments-patch' && msg.id)
452
+ else if (msg.type === 'comments-add' && msg.payload) {
453
+ // In a cell the author is the vouched member, never a claim in the
454
+ // frame and never the cell's own git identity (the machine).
455
+ const vouched = ws.data.kind === 'inspector' ? ws.data.user : '';
456
+ await api.commentsAdd(vouched ? { ...msg.payload, author: vouched } : msg.payload);
457
+ } else if (msg.type === 'comments-patch' && msg.id)
451
458
  await api.commentsPatch(msg.id, msg.patch || {});
452
459
  else if (msg.type === 'comments-delete' && msg.id) await api.commentsDelete(msg.id);
453
460
  else if (msg.type === 'comments-request' && typeof msg.file === 'string') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1agh/maude",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
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": {
@@ -29,7 +29,8 @@
29
29
  "test:e2e:desktop:git": "pnpm --filter @maude/desktop-e2e e2e:git",
30
30
  "build": "pnpm -r --if-present --filter '!@maude/desktop' '!@maude/desktop-e2e' run build",
31
31
  "build:binary": "bun run apps/studio/build.ts --release",
32
- "test": "node --test --test-reporter=spec cli/**/*.test.mjs && pnpm --filter @maude/hub test",
32
+ "test": "node --test --test-reporter=spec cli/**/*.test.mjs && pnpm --filter @maude/hub test && pnpm run test:harness",
33
+ "test:harness": "node --test $(find scripts/dev/sync-e2e -maxdepth 1 -name 'surface-*.test.mjs' ! -name 'surface-source-audit.test.mjs') && bun test scripts/dev/sync-e2e/surface-source-audit.test.mjs",
33
34
  "test:dev-server": "cd apps/studio && bun test --timeout 20000",
34
35
  "lint": "biome check .",
35
36
  "format": "biome format --write .",
@@ -53,16 +54,17 @@
53
54
  "test:e2e:desktop:parity": "pnpm --filter @maude/desktop-e2e e2e:parity",
54
55
  "test:e2e:desktop:sidecar-respawn": "pnpm --filter @maude/desktop-e2e e2e:sidecar-respawn",
55
56
  "test:e2e:desktop:team-project": "pnpm --filter @maude/desktop-e2e e2e:team-project",
57
+ "test:e2e:desktop:s20": "pnpm --filter @maude/desktop-e2e e2e:s20",
56
58
  "test:e2e:desktop:parity:cloud": "pnpm --filter @maude/desktop-e2e e2e:parity:cloud"
57
59
  },
58
60
  "optionalDependencies": {
59
- "@1agh/maude-darwin-arm64": "1.3.1",
60
- "@1agh/maude-darwin-x64": "1.3.1",
61
- "@1agh/maude-linux-arm64": "1.3.1",
62
- "@1agh/maude-linux-arm64-musl": "1.3.1",
63
- "@1agh/maude-linux-x64": "1.3.1",
64
- "@1agh/maude-linux-x64-musl": "1.3.1",
65
- "@1agh/maude-win32-x64": "1.3.1"
61
+ "@1agh/maude-darwin-arm64": "1.4.1",
62
+ "@1agh/maude-darwin-x64": "1.4.1",
63
+ "@1agh/maude-linux-arm64": "1.4.1",
64
+ "@1agh/maude-linux-arm64-musl": "1.4.1",
65
+ "@1agh/maude-linux-x64": "1.4.1",
66
+ "@1agh/maude-linux-x64-musl": "1.4.1",
67
+ "@1agh/maude-win32-x64": "1.4.1"
66
68
  },
67
69
  "files": [
68
70
  "cli",
@@ -475,7 +475,7 @@
475
475
  "tracker": {
476
476
  "type": "object",
477
477
  "additionalProperties": false,
478
- "description": "Issue / task tracker. Used by /flow:done, /flow:bug-rca, /flow:bug-fix to optionally create or update tickets.",
478
+ "description": "Issue / task tracker. Used by /flow:done, /flow:bug-rca, /flow:bug-fix and /flow:status to optionally read, create or update tickets. `orbit` additionally routes /flow:plan (find or create the task), /flow:execute (working-state reports) and /flow:done (close-time artifact push, warn-only) through the `orbit-backend` skill.",
479
479
  "properties": {
480
480
  "provider": {
481
481
  "type": "string",
@@ -487,13 +487,26 @@
487
487
  "notion",
488
488
  "asana",
489
489
  "shortcut",
490
+ "orbit",
490
491
  "none"
491
492
  ],
492
493
  "default": "none"
493
494
  },
494
495
  "mcp": {
495
496
  "type": "string",
496
- "description": "MCP tool name prefix used to call the provider (e.g. `mcp__claude_ai_ClickUp`, `mcp__github`). Generic commands resolve tool names by appending the operation (`<mcp>_<op>`). Omit if no MCP server is configured — commands will print payloads for manual handling."
497
+ "description": "MCP tool name prefix used to call the provider (e.g. `mcp__claude_ai_ClickUp`, `mcp__github`, `mcp__orbit`). Generic commands resolve tool names by appending the operation (`<mcp>_<op>`). Omit if no MCP server is configured — commands will print payloads for manual handling."
498
+ },
499
+ "baseUrl": {
500
+ "type": "string",
501
+ "format": "uri",
502
+ "pattern": "^https?://",
503
+ "description": "Base URL of a self-hosted tracker instance — used by `provider: orbit` (e.g. `https://orbit.example.com`); other providers ignore it. A committed pointer, never a secret: it names the MCP endpoint the project's `.mcp.json` entry targets (`<baseUrl>/api/mcp`) and the task links (`<baseUrl>/t/ORB-123`)."
504
+ },
505
+ "tokenEnv": {
506
+ "type": "string",
507
+ "pattern": "^[A-Z_][A-Z0-9_]*$",
508
+ "default": "ORBIT_MCP_TOKEN",
509
+ "description": "Name of the environment variable holding the per-machine bearer token for the tracker's MCP server — used by `provider: orbit`; other providers ignore it. Only the variable NAME is stored here; the token lives in the user's environment and `.mcp.json` references it as `${<tokenEnv>}`. Flow commands check whether it is set — they never read, print or write its value."
497
510
  },
498
511
  "defaults": {
499
512
  "type": "object",
@@ -40,6 +40,6 @@ For the full catalog (group definitions, member descriptions, rename history), s
40
40
 
41
41
  ## Skills
42
42
 
43
- `workflow-state`, `ddr-keeper`, `scenario`, `agent-browser`, `agent-device`, `codebase-intelligence`, `a11y-checker`, `question-protocol`, `make-skill-template`, `claude-md-keeper`, `debugging-rules`, `a11y-rules`, `motion-rules`, `responsive-rules`, `testing-rules`, `skill-loader`.
43
+ `workflow-state`, `ddr-keeper`, `scenario`, `agent-browser`, `agent-device`, `codebase-intelligence`, `a11y-checker`, `question-protocol`, `make-skill-template`, `claude-md-keeper`, `debugging-rules`, `a11y-rules`, `motion-rules`, `responsive-rules`, `testing-rules`, `skill-loader`, `orbit-backend` (the `orbit` tracker provider's contract).
44
44
 
45
45
  See [`skills/`](./skills/) for the full list and per-skill SKILL.md files.