@arvoretech/hub 0.12.0 → 0.13.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.
|
@@ -117,7 +117,7 @@ async function checkAndAutoRegenerate(hubDir) {
|
|
|
117
117
|
return;
|
|
118
118
|
}
|
|
119
119
|
console.log(chalk.yellow("\n Detected outdated configs, auto-regenerating..."));
|
|
120
|
-
const { generators: generators2 } = await import("./generate-
|
|
120
|
+
const { generators: generators2 } = await import("./generate-Z2ZCPGIG.js");
|
|
121
121
|
const generator = generators2[result.editor];
|
|
122
122
|
if (!generator) {
|
|
123
123
|
console.log(chalk.red(` Unknown editor '${result.editor}' in cache. Run 'hub generate' manually.`));
|
|
@@ -968,6 +968,44 @@ tools:
|
|
|
968
968
|
${body.trim()}
|
|
969
969
|
`;
|
|
970
970
|
}
|
|
971
|
+
function hasAgentTeamsLeadMcp(mcps) {
|
|
972
|
+
if (!mcps) return false;
|
|
973
|
+
const proxyMcp = mcps.find((m) => m.upstreams && m.upstreams.length > 0);
|
|
974
|
+
const directMatch = mcps.some((m) => m.name === "agent-teams-lead");
|
|
975
|
+
const upstreamMatch = proxyMcp?.upstreams?.includes("agent-teams-lead") ?? false;
|
|
976
|
+
return directMatch || upstreamMatch;
|
|
977
|
+
}
|
|
978
|
+
function buildAgentTeamsSection(mcps) {
|
|
979
|
+
if (!hasAgentTeamsLeadMcp(mcps)) return "";
|
|
980
|
+
return `
|
|
981
|
+
## Agent Teams
|
|
982
|
+
|
|
983
|
+
This workspace has agent teams support via the \`agent-teams-lead\` MCP. You can act as a team lead, spawning multiple AI teammates that work in parallel on different tasks.
|
|
984
|
+
|
|
985
|
+
**When to use agent teams** instead of sub-agents:
|
|
986
|
+
- Tasks that benefit from parallel exploration (research, review, debugging)
|
|
987
|
+
- Cross-layer work (frontend + backend + tests simultaneously)
|
|
988
|
+
- Work where teammates need to communicate and coordinate with each other
|
|
989
|
+
|
|
990
|
+
**How it works:**
|
|
991
|
+
1. Use \`spawn_team\` to create a team with an objective and list of teammates (each referencing an agent file)
|
|
992
|
+
2. Use \`create_task\` to add tasks to the shared task list (tasks can have dependencies and exclusive file paths)
|
|
993
|
+
3. Teammates automatically claim pending tasks, do the work, and mark them complete
|
|
994
|
+
4. Use \`send_message\` to communicate with teammates (or broadcast to all)
|
|
995
|
+
5. Use \`wait_for_team\` to block until all tasks are resolved or teammates finish
|
|
996
|
+
6. Use \`team_status\` to check progress, task states, and unread messages
|
|
997
|
+
7. Use \`read_artifact\` to read outputs published by teammates
|
|
998
|
+
|
|
999
|
+
**Available tools:** \`spawn_team\`, \`add_teammate\`, \`remove_teammate\`, \`create_task\`, \`team_status\`, \`send_message\`, \`wait_for_team\`, \`read_artifact\`.
|
|
1000
|
+
|
|
1001
|
+
**Best practices:**
|
|
1002
|
+
- Create tasks IMMEDIATELY after spawning the team (teammates start looking for tasks right away)
|
|
1003
|
+
- Use \`exclusive_paths\` on tasks to prevent file conflicts between teammates
|
|
1004
|
+
- Use \`depends_on\` to chain tasks that must run in order
|
|
1005
|
+
- Keep 2-3 tasks per teammate for good throughput
|
|
1006
|
+
- Send a broadcast message after creating tasks to notify teammates
|
|
1007
|
+
- Always call \`wait_for_team\` after creating tasks to monitor completion`;
|
|
1008
|
+
}
|
|
971
1009
|
function buildMcpToolsSection(mcps) {
|
|
972
1010
|
if (!mcps || mcps.length === 0) return "";
|
|
973
1011
|
const proxyMcp = mcps.find((m) => m.upstreams && m.upstreams.length > 0);
|
|
@@ -1108,6 +1146,8 @@ Available tools: \`search_memories\`, \`get_memory\`, \`add_memory\`, \`list_mem
|
|
|
1108
1146
|
}
|
|
1109
1147
|
const designSectionOpenCode = buildDesignSection(config);
|
|
1110
1148
|
if (designSectionOpenCode) sections.push(designSectionOpenCode);
|
|
1149
|
+
const agentTeamsSectionOpenCode = buildAgentTeamsSection(config.mcps);
|
|
1150
|
+
if (agentTeamsSectionOpenCode) sections.push(agentTeamsSectionOpenCode);
|
|
1111
1151
|
sections.push(`
|
|
1112
1152
|
## Troubleshooting and Debugging
|
|
1113
1153
|
|
|
@@ -1401,6 +1441,8 @@ Available tools: \`search_memories\`, \`get_memory\`, \`add_memory\`, \`list_mem
|
|
|
1401
1441
|
}
|
|
1402
1442
|
const designSectionKiro = buildDesignSection(config);
|
|
1403
1443
|
if (designSectionKiro) sections.push(designSectionKiro);
|
|
1444
|
+
const agentTeamsSectionKiro = buildAgentTeamsSection(config.mcps);
|
|
1445
|
+
if (agentTeamsSectionKiro) sections.push(agentTeamsSectionKiro);
|
|
1404
1446
|
sections.push(`
|
|
1405
1447
|
## Troubleshooting and Debugging
|
|
1406
1448
|
|
|
@@ -1589,6 +1631,8 @@ Available tools: \`search_memories\`, \`get_memory\`, \`add_memory\`, \`list_mem
|
|
|
1589
1631
|
}
|
|
1590
1632
|
const designSectionCursor = buildDesignSection(config);
|
|
1591
1633
|
if (designSectionCursor) sections.push(designSectionCursor);
|
|
1634
|
+
const agentTeamsSectionCursor = buildAgentTeamsSection(config.mcps);
|
|
1635
|
+
if (agentTeamsSectionCursor) sections.push(agentTeamsSectionCursor);
|
|
1592
1636
|
sections.push(`
|
|
1593
1637
|
## Troubleshooting and Debugging
|
|
1594
1638
|
|
package/dist/config/index.d.ts
CHANGED
|
@@ -194,6 +194,7 @@ declare const mcp: {
|
|
|
194
194
|
googleChat(overrides?: MCPOverrides): MCPConfig;
|
|
195
195
|
playwright(overrides?: MCPOverrides): MCPConfig;
|
|
196
196
|
context7(overrides?: MCPOverrides): MCPConfig;
|
|
197
|
+
agentTeamsLead(overrides?: MCPOverrides): MCPConfig;
|
|
197
198
|
proxy(name: string, overrides: MCPOverrides & {
|
|
198
199
|
upstreams: string[];
|
|
199
200
|
}): MCPConfig;
|
package/dist/config/index.js
CHANGED
|
@@ -159,7 +159,7 @@ var mcp = {
|
|
|
159
159
|
runtimeLens(overrides) {
|
|
160
160
|
return {
|
|
161
161
|
name: "runtime-lens",
|
|
162
|
-
package: "runtime-lens",
|
|
162
|
+
package: "@arvoretech/runtime-lens-mcp",
|
|
163
163
|
...overrides,
|
|
164
164
|
env: { ...overrides?.env }
|
|
165
165
|
};
|
|
@@ -194,6 +194,14 @@ var mcp = {
|
|
|
194
194
|
...overrides
|
|
195
195
|
};
|
|
196
196
|
},
|
|
197
|
+
agentTeamsLead(overrides) {
|
|
198
|
+
return {
|
|
199
|
+
name: "agent-teams-lead",
|
|
200
|
+
package: "@arvoretech/agent-teams-lead-mcp",
|
|
201
|
+
...overrides,
|
|
202
|
+
env: { ...overrides?.env }
|
|
203
|
+
};
|
|
204
|
+
},
|
|
197
205
|
proxy(name, overrides) {
|
|
198
206
|
return {
|
|
199
207
|
name,
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
checkAndAutoRegenerate,
|
|
4
4
|
generateCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RMOWX5GS.js";
|
|
6
6
|
import {
|
|
7
7
|
loadHubConfig,
|
|
8
8
|
resolveConfigPath
|
|
@@ -761,6 +761,7 @@ var AVAILABLE_MCPS = [
|
|
|
761
761
|
{ name: "meet-transcriptions", description: "Semantic search across meeting transcriptions" },
|
|
762
762
|
{ name: "google-chat", description: "Google Chat spaces, members, and messages" },
|
|
763
763
|
{ name: "tempmail", description: "Temporary email for testing" },
|
|
764
|
+
{ name: "agent-teams-lead", description: "Spawn AI teammate teams that work in parallel on tasks" },
|
|
764
765
|
{ name: "mcp-proxy", description: "Proxy gateway that reduces token usage via mcp_search/mcp_call" }
|
|
765
766
|
];
|
|
766
767
|
|
|
@@ -1275,6 +1276,7 @@ var MCP_HELPER_MAP = {
|
|
|
1275
1276
|
"google-chat": { helper: "mcp.googleChat", hasNameArg: false },
|
|
1276
1277
|
playwright: { helper: "mcp.playwright", hasNameArg: false },
|
|
1277
1278
|
context7: { helper: "mcp.context7", hasNameArg: false },
|
|
1279
|
+
"agent-teams-lead": { helper: "mcp.agentTeamsLead", hasNameArg: false },
|
|
1278
1280
|
"mcp-proxy": { helper: "mcp.proxy", hasNameArg: true }
|
|
1279
1281
|
};
|
|
1280
1282
|
function buildTypeScriptConfig(state) {
|