50c 4.0.0 → 4.1.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 (3) hide show
  1. package/bin/50c.js +50 -6
  2. package/lib/team.js +655 -691
  3. package/package.json +2 -2
package/bin/50c.js CHANGED
@@ -1055,9 +1055,33 @@ async function runPackTool(packTool, args) {
1055
1055
  }
1056
1056
 
1057
1057
  const input = args.join(' ');
1058
-
1059
- // Map pack.tool to MCP tool name
1060
- const toolName = `${pack}_${tool}`;
1058
+
1059
+ // Map pack.tool to MCP tool name.
1060
+ // 2026-04-15 patch: the beacon pack client had aspirational tool names
1061
+ // that don't match the live server registry. Verified against
1062
+ // beacon.50c.ai/mcp tools/list 2026-04-15. Maps intended → actual.
1063
+ // Second pass 2026-04-15: added mint/recall/remember/drift/summarize
1064
+ // using roadmap_* + conversation_diagnostic + context_compress.
1065
+ const BEACON_NAME_MAP = {
1066
+ 'beacon_health': 'context_health',
1067
+ 'beacon_summarize': 'context_compress',
1068
+ 'beacon_checkpoint': 'fog_checkpoint',
1069
+ // Persistent memory via roadmap (scoped to roadmap items, FREE):
1070
+ 'beacon_mint': 'roadmap_add',
1071
+ 'beacon_remember': 'roadmap_add',
1072
+ 'beacon_recall': 'roadmap_list',
1073
+ // Drift detection (real semantic match, $0.15):
1074
+ 'beacon_drift': 'conversation_diagnostic',
1075
+ // These exist on the server as-is (no remap needed):
1076
+ // beacon_compress, beacon_extract, beacon_scan, beacon_rank, beacon_focus
1077
+ // GENUINELY DEAD (no server equivalent as of 2026-04-15):
1078
+ // beacon_tip, beacon_notip, beacon_diff, beacon_restore
1079
+ // For persistent memory, use ~/.claude/projects/<proj>/memory/ directly.
1080
+ };
1081
+ let toolName = `${pack}_${tool}`;
1082
+ if (BEACON_NAME_MAP[toolName]) {
1083
+ toolName = BEACON_NAME_MAP[toolName];
1084
+ }
1061
1085
 
1062
1086
  // Build args object based on tool
1063
1087
  let toolArgs = {};
@@ -1066,11 +1090,31 @@ async function runPackTool(packTool, args) {
1066
1090
  } else if (tool === 'health') {
1067
1091
  toolArgs = { messages: input ? [input] : [] };
1068
1092
  } else if (tool === 'remember' || tool === 'mint') {
1069
- toolArgs = { content: input };
1093
+ // 2026-04-15 patch: remapped to roadmap_add which expects {idea}.
1094
+ // Supports trailing --priority=critical|high|medium|low and --tags=a,b,c
1095
+ // e.g.: B4 mint "do the thing" --priority=critical --tags=deploy,urgent
1096
+ let idea = args.filter(a => !a.startsWith('--')).join(' ');
1097
+ let priority = null;
1098
+ let tags = null;
1099
+ for (const a of args) {
1100
+ if (a.startsWith('--priority=')) priority = a.slice(11);
1101
+ if (a.startsWith('--tags=')) tags = a.slice(7).split(',').map(t => t.trim()).filter(Boolean);
1102
+ }
1103
+ toolArgs = { idea };
1104
+ if (priority) toolArgs.priority = priority;
1105
+ if (tags) toolArgs.tags = tags;
1070
1106
  } else if (tool === 'recall') {
1071
- toolArgs = { query: input || null };
1107
+ // 2026-04-15 patch: remapped to roadmap_list which expects {filter}
1108
+ toolArgs = input ? { filter: input } : {};
1072
1109
  } else if (tool === 'drift') {
1073
- toolArgs = { messages: [input], goal: args[0] || 'stay on topic' };
1110
+ // 2026-04-15 patch: remapped to conversation_diagnostic which needs ≥3 messages.
1111
+ // Treat each positional arg as a separate message. For single-string input,
1112
+ // split on sentence terminators.
1113
+ let msgs = args;
1114
+ if (msgs.length < 3 && input) {
1115
+ msgs = input.split(/[.!?]+\s+/).map(s => s.trim()).filter(Boolean);
1116
+ }
1117
+ toolArgs = { messages: msgs };
1074
1118
  } else if (tool === 'checkpoint') {
1075
1119
  toolArgs = { name: args[0] || 'default', messages: args.slice(1) };
1076
1120
  } else if (tool === 'restore') {