@massa-ai/cursor-plugin 1.52.0 → 1.53.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.
package/install.sh
CHANGED
|
@@ -325,7 +325,11 @@ install_bundled_skills() {
|
|
|
325
325
|
fi
|
|
326
326
|
|
|
327
327
|
local installed=0 name src dest
|
|
328
|
-
|
|
328
|
+
# Three harness skills, matching generate-skill-artifacts.ts:138's
|
|
329
|
+
# authoritative constant (D6/IPT-05) — not derived by scanning the bundle's
|
|
330
|
+
# skills/ directory, which would install 49 on cursor (every workflow skill
|
|
331
|
+
# ships as its own directory here).
|
|
332
|
+
for name in massa-ai persona-router profile; do
|
|
329
333
|
src="$SCRIPT_DIR/skills/$name"
|
|
330
334
|
[[ -d "$src" ]] || continue
|
|
331
335
|
dest="$HARNESS_SKILLS_DIR/$name"
|
|
@@ -354,7 +358,7 @@ if (typeof data.platforms !== "object" || data.platforms === null || Array.isArr
|
|
|
354
358
|
}
|
|
355
359
|
data.version = 2;
|
|
356
360
|
const prev = data.platforms[host];
|
|
357
|
-
data.platforms[host] = { root, skillsOwner: "plugin", skills: ["massa-ai", "persona-router"] };
|
|
361
|
+
data.platforms[host] = { root, skillsOwner: "plugin", skills: ["massa-ai", "persona-router", "profile"] };
|
|
358
362
|
// The whole-record replace must not drop fields a previous successful install
|
|
359
363
|
// wrote (R2) — re-attach them. installRoute (T9) is installer-owned but
|
|
360
364
|
// written by a LATER step of this same install (record_plugin_version), so it
|
|
@@ -400,7 +404,7 @@ NODE
|
|
|
400
404
|
)"
|
|
401
405
|
[[ "$raw_owner" == "plugin" ]] && {
|
|
402
406
|
local name
|
|
403
|
-
for name in massa-ai persona-router; do
|
|
407
|
+
for name in massa-ai persona-router profile; do
|
|
404
408
|
rm -rf "$HARNESS_SKILLS_DIR/$name"
|
|
405
409
|
done
|
|
406
410
|
rmdir "$HARNESS_SKILLS_DIR" 2>/dev/null || true
|
|
@@ -617,12 +621,18 @@ fi
|
|
|
617
621
|
# Flat agents and harness skills are written in BOTH branches (PAU-08/09):
|
|
618
622
|
# Cursor discovers subagents only from the flat directory regardless of which
|
|
619
623
|
# plugin-load path is active, and MCP/harness-skills ownership is independent
|
|
620
|
-
# of it too.
|
|
621
|
-
# linger installed. All of them, navigator included, are generated from
|
|
624
|
+
# of it too. All of them, navigator included, are generated from
|
|
622
625
|
# skills/agents/*/SKILL.md and owned by the massa-ai- name prefix (CRS-04) —
|
|
623
626
|
# user-authored agents are untouched.
|
|
627
|
+
#
|
|
628
|
+
# Copy-then-prune (D1/IPT-02 AC-02.6), not prune-then-copy: this loop copies
|
|
629
|
+
# the current set first, and only afterward sheds destination entries the
|
|
630
|
+
# bundle no longer ships. `set -euo pipefail` is in force, so a mid-loop `cp`
|
|
631
|
+
# failure aborts the script — under the old prune-first order that left the
|
|
632
|
+
# user with fewer agents than before the upgrade (possibly none); under this
|
|
633
|
+
# order the worst case is a retired agent lingering one run longer, which is
|
|
634
|
+
# the pre-fix status quo this feature already tolerates.
|
|
624
635
|
mkdir -p "$CURSOR_AGENTS_DIR"
|
|
625
|
-
rm -f "$CURSOR_AGENTS_DIR/"massa-ai-*.md
|
|
626
636
|
for src in "$SCRIPT_DIR/agents/"massa-ai-*.md; do
|
|
627
637
|
[[ -f "$src" ]] || continue
|
|
628
638
|
name="$(basename "$src")"
|
|
@@ -632,6 +642,19 @@ for src in "$SCRIPT_DIR/agents/"massa-ai-*.md; do
|
|
|
632
642
|
done
|
|
633
643
|
vecho " + ${specialist_count} subagent specialists (generated from skills/agents/*/SKILL.md)"
|
|
634
644
|
|
|
645
|
+
# Shed owned members the bundle no longer ships (D2): the removal population
|
|
646
|
+
# is the destination directory; the bundle supplies only the keep-predicate.
|
|
647
|
+
# Loop over the destination, consult the bundle only to decide whether to
|
|
648
|
+
# keep — never loop over the bundle to decide removals. Ownership test is the
|
|
649
|
+
# massa-ai- name prefix (D3), same as the uninstall loop above.
|
|
650
|
+
for f in "$CURSOR_AGENTS_DIR/"massa-ai-*.md; do
|
|
651
|
+
[[ -f "$f" ]] || continue
|
|
652
|
+
name="$(basename "$f")"
|
|
653
|
+
[[ -f "$SCRIPT_DIR/agents/$name" ]] && continue # keep-list: still shipped
|
|
654
|
+
rm -f "$f"
|
|
655
|
+
vecho " - $name (retired, no longer shipped)"
|
|
656
|
+
done
|
|
657
|
+
|
|
635
658
|
# Skills bundling (PDO-08, 09): install massa-ai/persona-router into the
|
|
636
659
|
# shared harness skills directory, unless scripts/install-skills.sh already
|
|
637
660
|
# owns it for this platform. Runs in both branches (same reasoning as above).
|
package/package.json
CHANGED
package/skills/massa-ai/SKILL.md
CHANGED
|
@@ -46,7 +46,7 @@ Before reading any massa-ai file:
|
|
|
46
46
|
Never pass `workflowSessionId` in that field. Use `synapse_task_begin`/`synapse_task_end`
|
|
47
47
|
for task envelopes and `synapse_prefetch` to warm the buffer on file open.
|
|
48
48
|
- Prefer the shared v2 retrieval order; fall back gracefully if the massa-ai
|
|
49
|
-
server or Synapse is unavailable. The full tool surface includes
|
|
49
|
+
server or Synapse is unavailable. The full tool surface includes 59 tools
|
|
50
50
|
(see `references/mcp-tools.md`): indexing, search, symbol graph
|
|
51
51
|
(`trace_path`, `impact_analysis`, `get_architecture`), memory CRUD
|
|
52
52
|
(`remember`, `recall`, `memory_update`, `memory_delete`), checkpoints
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# massa-ai Tool Contracts (
|
|
1
|
+
# massa-ai Tool Contracts (59 Tools)
|
|
2
2
|
|
|
3
3
|
Load when exact MCP schemas, REST fallbacks, response modes, or
|
|
4
4
|
polling rules are needed. Prefer the active tool declaration over copied
|
|
@@ -103,6 +103,8 @@ depends on exact content.
|
|
|
103
103
|
| `handoff_accept` | Accept an open handoff (open→accepted) | Req: `id`. Opt: `projectId`. |
|
|
104
104
|
| `handoff_cancel` | Cancel/expire an open handoff | Req: `id`. Opt: `projectId`. |
|
|
105
105
|
| `handoff_list_pending` | List open handoffs, oldest-first | Req: `projectId`. Opt: `targetAgent`. |
|
|
106
|
+
| `handoff_update` | Edit targetAgent/summary/openQuestions/nextSteps/files by id | Req: `id`. Opt: `projectId`, `targetAgent`, `summary`, `openQuestions`, `nextSteps`, `files` — at least one editable field required. Unknown/restricted fields (`status`, `acceptedAt`, etc.) are rejected by name. |
|
|
107
|
+
| `handoff_delete` | Hard-delete a handoff, any status | Req: `id`. Opt: `projectId`. |
|
|
106
108
|
|
|
107
109
|
## MCP Capability Matrix — Auto-improvement (Proposals)
|
|
108
110
|
|
|
@@ -111,6 +113,9 @@ depends on exact content.
|
|
|
111
113
|
| `list_proposals` | List pending auto-improvement proposals, newest-first | Req: `projectId`. |
|
|
112
114
|
| `approve_proposal` | Approve a proposal; applies the memory edit | Req: `id`. Opt: `projectId`, `source`. |
|
|
113
115
|
| `reject_proposal` | Reject a proposal (no edit applied) | Req: `id`. Opt: `projectId`, `reason`. |
|
|
116
|
+
| `create_proposal` | Create a pending proposal by hand | Req: `projectId`, `kind` (`memory.create`\|`memory.update`\|`memory.tag`), `payload`. Opt: `rationale`, `targetMemoryId`. `payload` is validated against the same per-kind rules the store enforces on read. |
|
|
117
|
+
| `update_proposal` | Edit rationale/payload by id, any status | Req: `id`. Opt: `projectId`, `rationale`, `payload` — at least one editable field required. `kind`/`targetMemoryId`/`status`/`decidedAt` are immutable. A `payload` edit re-validates against the row's existing `kind`. |
|
|
118
|
+
| `delete_proposal` | Hard-delete a proposal, any status | Req: `id`. Opt: `projectId`. Deleting an approved proposal does not reverse its applied memory edit. |
|
|
114
119
|
|
|
115
120
|
## MCP Capability Matrix — Passive Capture
|
|
116
121
|
|