@massa-ai/claude-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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "massa-ai",
3
- "version": "1.52.0",
3
+ "version": "1.53.0",
4
4
  "description": "massa-ai — semantic code search, durable memory, symbol graph, and context compression",
5
5
  "author": {
6
6
  "name": "Luiz Massa",
package/install.sh CHANGED
@@ -309,7 +309,7 @@ install_bundled_skills() {
309
309
  fi
310
310
 
311
311
  local installed=0 name src dest
312
- for name in massa-ai persona-router; do
312
+ for name in massa-ai persona-router profile; do
313
313
  src="$SCRIPT_DIR/skills/$name"
314
314
  [[ -d "$src" ]] || continue
315
315
  dest="$HARNESS_SKILLS_DIR/$name"
@@ -338,7 +338,7 @@ if (typeof data.platforms !== "object" || data.platforms === null || Array.isArr
338
338
  }
339
339
  data.version = 2;
340
340
  const prev = data.platforms[host];
341
- data.platforms[host] = { root, skillsOwner: "plugin", skills: ["massa-ai", "persona-router"] };
341
+ data.platforms[host] = { root, skillsOwner: "plugin", skills: ["massa-ai", "persona-router", "profile"] };
342
342
  // The whole-record replace must not drop fields a previous successful install
343
343
  // wrote (R2) — re-attach them. modelProfile (T10, MPS-03 round-trip
344
344
  // obligation) is engine-owned; installRoute is installer-owned but written by
@@ -385,7 +385,7 @@ NODE
385
385
  )"
386
386
  [[ "$raw_owner" == "plugin" ]] && {
387
387
  local name
388
- for name in massa-ai persona-router; do
388
+ for name in massa-ai persona-router profile; do
389
389
  rm -rf "$HARNESS_SKILLS_DIR/$name"
390
390
  done
391
391
  rmdir "$HARNESS_SKILLS_DIR" 2>/dev/null || true
@@ -734,10 +734,16 @@ remove_file_route_artifacts() {
734
734
  if [[ -f "$SETTINGS_JSON" ]]; then
735
735
  merge_settings_hooks "$SETTINGS_JSON" "uninstall"
736
736
  fi
737
+ # Prefix-glob against the INSTALLED directory, not the source bundle (IPT-03
738
+ # site 6, D2): deriving removals from $SCRIPT_DIR/commands/*.md misses
739
+ # installed copies whenever the bundle is absent or stale (normal under
740
+ # AD-016). Mirrors the agents loop directly below, which already does this
741
+ # correctly. The keep-list here is empty by design — the marketplace bundle
742
+ # serves its own commands, so every loose file-route copy is removed.
737
743
  if [[ -d "$TARGET/commands" ]]; then
738
- for src in "$SCRIPT_DIR/commands/"*.md; do
739
- [[ -f "$src" ]] || continue
740
- rm -f "$TARGET/commands/massa-ai-$(basename "$src" .md).md"
744
+ for f in "$TARGET/commands/"massa-ai-*.md; do
745
+ [[ -f "$f" ]] || continue
746
+ rm -f "$f"
741
747
  done
742
748
  fi
743
749
  if [[ -d "$TARGET/agents" ]]; then
@@ -824,6 +830,21 @@ else
824
830
  command_count=$((command_count + 1))
825
831
  done
826
832
 
833
+ # Shed commands retired from the bundle (IPT-02 site 2, D1 copy-then-prune):
834
+ # copy the current set first, then remove owned destination entries the
835
+ # bundle no longer ships — never the reverse, so an interrupted run never
836
+ # leaves the user with fewer commands than before. Removal population is the
837
+ # destination directory (D2); ownership test is the massa-ai- name prefix
838
+ # (install.sh:765).
839
+ for f in "$TARGET/commands/"massa-ai-*.md; do
840
+ [[ -f "$f" ]] || continue
841
+ prune_name="$(basename "$f" .md)"
842
+ prune_name="${prune_name#massa-ai-}"
843
+ [[ -f "$SCRIPT_DIR/commands/${prune_name}.md" ]] && continue
844
+ rm -f "$f"
845
+ vecho " - removed retired command $(basename "$f")"
846
+ done
847
+
827
848
  # Subagent specialists (generated from skills/agents/*/SKILL.md, navigator
828
849
  # included). The massa-ai- name prefix is the ownership marker used by uninstall.
829
850
  #
@@ -859,6 +880,20 @@ else
859
880
  done
860
881
  vecho " + ${specialist_count} subagent specialists (generated from skills/agents/*/SKILL.md)"
861
882
 
883
+ # Shed specialists retired from the bundle (IPT-02 site 1, D1
884
+ # copy-then-prune): copy the current set first, then remove owned
885
+ # destination entries ACTIVE_AGENTS_SRC (the bundle, or the active
886
+ # model-profile variant) no longer ships. Never prune-then-copy — an
887
+ # interrupted run must never leave the user with fewer agents than before.
888
+ # Removal population is the destination directory (D2); ownership test is
889
+ # the massa-ai- name prefix (install.sh:775-777).
890
+ for f in "$TARGET/agents/"massa-ai-*.md; do
891
+ [[ -f "$f" ]] || continue
892
+ [[ -f "$ACTIVE_AGENTS_SRC/$(basename "$f")" ]] && continue
893
+ rm -f "$f"
894
+ vecho " - removed retired specialist $(basename "$f")"
895
+ done
896
+
862
897
  install_variant_tree
863
898
  fi
864
899
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massa-ai/claude-plugin",
3
- "version": "1.52.0",
3
+ "version": "1.53.0",
4
4
  "description": "massa-ai plugin for Claude Code — semantic code search, durable memory, symbol graph, and context compression",
5
5
  "files": [
6
6
  "agents",
@@ -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 54 tools
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 (54 Tools)
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