opencode-multiagent 0.4.0 → 0.6.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 (33) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/README.tr.md +1 -1
  4. package/agents/brainstormer.md +113 -0
  5. package/commands/brainstorm-conclude.md +14 -0
  6. package/commands/brainstorm.md +14 -0
  7. package/defaults/opencode-multiagent.json +64 -105
  8. package/defaults/opencode-multiagent.schema.json +41 -208
  9. package/dist/index.js +251 -105
  10. package/dist/opencode-multiagent/compiler.d.ts.map +1 -1
  11. package/dist/opencode-multiagent/constants.d.ts +0 -66
  12. package/dist/opencode-multiagent/constants.d.ts.map +1 -1
  13. package/dist/opencode-multiagent/defaults.d.ts +0 -2
  14. package/dist/opencode-multiagent/defaults.d.ts.map +1 -1
  15. package/dist/opencode-multiagent/hooks.d.ts.map +1 -1
  16. package/dist/opencode-multiagent/markdown.d.ts.map +1 -1
  17. package/dist/opencode-multiagent/runtime.d.ts.map +1 -1
  18. package/dist/opencode-multiagent/supervision.d.ts +4 -0
  19. package/dist/opencode-multiagent/supervision.d.ts.map +1 -1
  20. package/dist/opencode-multiagent/task-manager.d.ts +22 -0
  21. package/dist/opencode-multiagent/task-manager.d.ts.map +1 -1
  22. package/dist/opencode-multiagent/telemetry.d.ts +6 -0
  23. package/dist/opencode-multiagent/telemetry.d.ts.map +1 -1
  24. package/dist/opencode-multiagent/tools.d.ts +11 -0
  25. package/dist/opencode-multiagent/tools.d.ts.map +1 -1
  26. package/{agents → docs}/AGENTS.md +6 -2
  27. package/docs/agents.md +107 -17
  28. package/docs/agents.tr.md +107 -17
  29. package/docs/configuration.md +24 -16
  30. package/docs/configuration.tr.md +24 -17
  31. package/docs/usage-guide.md +54 -11
  32. package/docs/usage-guide.tr.md +56 -12
  33. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -69,76 +69,7 @@ var mcpToolPrefixes = [
69
69
  "code_index_",
70
70
  "repo_git_"
71
71
  ];
72
- var defaultProfiles = {
73
- minimal: {
74
- enforcement: true,
75
- observation: false,
76
- prompt_controls: false,
77
- agent_compilation: true,
78
- command_compilation: true,
79
- mcp_compilation: true,
80
- telemetry: false,
81
- supervision: false,
82
- quality_gate: false,
83
- task_lifecycle: false,
84
- quality_gate_enforcement: false,
85
- concurrency_limit: 0,
86
- experimental: {
87
- chat_system_transform: false,
88
- chat_messages_transform: false,
89
- session_compacting: false,
90
- text_complete: false
91
- }
92
- },
93
- standard: {
94
- enforcement: true,
95
- observation: true,
96
- prompt_controls: true,
97
- agent_compilation: true,
98
- command_compilation: true,
99
- mcp_compilation: true,
100
- telemetry: true,
101
- supervision: true,
102
- quality_gate: true,
103
- task_lifecycle: true,
104
- quality_gate_enforcement: false,
105
- concurrency_limit: 5,
106
- skill_sources: [
107
- bundledSkillsDir,
108
- join(homedir(), ".agents", "skills"),
109
- join(homedir(), "skills")
110
- ],
111
- skill_injection: false,
112
- experimental: {
113
- chat_system_transform: false,
114
- chat_messages_transform: false,
115
- session_compacting: false,
116
- text_complete: false
117
- }
118
- },
119
- strict: {
120
- enforcement: true,
121
- observation: true,
122
- prompt_controls: true,
123
- agent_compilation: true,
124
- command_compilation: true,
125
- mcp_compilation: true,
126
- telemetry: true,
127
- supervision: true,
128
- quality_gate: true,
129
- task_lifecycle: true,
130
- quality_gate_enforcement: true,
131
- concurrency_limit: 5,
132
- experimental: {
133
- chat_system_transform: true,
134
- chat_messages_transform: true,
135
- session_compacting: true,
136
- text_complete: true
137
- }
138
- }
139
- };
140
72
  var defaultFlags = {
141
- profile: "standard",
142
73
  enforcement: true,
143
74
  observation: true,
144
75
  prompt_controls: true,
@@ -149,7 +80,7 @@ var defaultFlags = {
149
80
  supervision: true,
150
81
  quality_gate: true,
151
82
  task_lifecycle: true,
152
- quality_gate_enforcement: false,
83
+ quality_gate_enforcement: true,
153
84
  concurrency_limit: 5,
154
85
  skill_sources: [
155
86
  bundledSkillsDir,
@@ -161,10 +92,10 @@ var defaultFlags = {
161
92
  permission_compilation: true
162
93
  },
163
94
  experimental: {
164
- chat_system_transform: false,
165
- chat_messages_transform: false,
166
- session_compacting: false,
167
- text_complete: false
95
+ chat_system_transform: true,
96
+ chat_messages_transform: true,
97
+ session_compacting: true,
98
+ text_complete: true
168
99
  },
169
100
  supervision_config: {
170
101
  idle_timeout_ms: 180000,
@@ -315,7 +246,7 @@ async function loadMarkdownDefs(dirs) {
315
246
  const defs = new Map;
316
247
  for (const dir of dedupe(dirs)) {
317
248
  const files = await readdir(dir).catch(() => []);
318
- for (const file of files.filter((name) => name.endsWith(".md")).sort()) {
249
+ for (const file of files.filter((name) => name.endsWith(".md") && name !== name.toUpperCase()).sort()) {
319
250
  try {
320
251
  const value = await readFile(join2(dir, file), "utf8");
321
252
  const { data, body } = parseFrontmatter(value);
@@ -439,7 +370,7 @@ async function compileAgents(cfg, dirs, agentSettings = {}) {
439
370
  const overrides = agentSettings?.[name];
440
371
  if (overrides && typeof overrides === "object") {
441
372
  for (const [field, value] of Object.entries(overrides)) {
442
- if (["model", "temperature", "steps"].includes(field) && !explicitFields.has(field)) {
373
+ if (["model", "temperature", "steps", "top_p", "options", "timeout_ms", "retry", "escalation_model"].includes(field) && !explicitFields.has(field)) {
443
374
  target[field] = clone(value);
444
375
  }
445
376
  }
@@ -451,6 +382,15 @@ async function compileAgents(cfg, dirs, agentSettings = {}) {
451
382
  mcpRegistry.set(name, buildMcpPermissionRegistry(perm));
452
383
  taskRouting.set(name, buildTaskRoutingAllowSet(perm));
453
384
  }
385
+ for (const key of Object.keys(agentSettings)) {
386
+ if (!defs.has(key)) {
387
+ await note("config_warning", {
388
+ observation: true,
389
+ warning: "unknown_agent_override",
390
+ agent: key
391
+ });
392
+ }
393
+ }
454
394
  return { mcpRegistry, taskRouting };
455
395
  }
456
396
  var isTaskRoutingAllowed = (agent, target, routing) => {
@@ -904,7 +844,10 @@ var createSupervisionController = ({
904
844
  lastActivity: Date.now(),
905
845
  remindedAt: 0,
906
846
  lastToolErrorAt: 0,
907
- hasUnverifiedEdits: false
847
+ hasUnverifiedEdits: false,
848
+ startedAt: Date.now(),
849
+ timeoutMs: 0,
850
+ timeoutNotifiedAt: 0
908
851
  });
909
852
  tracker.enforceLimit();
910
853
  await note("supervision", { event: "child_tracked", parentID, childID });
@@ -956,6 +899,26 @@ var createSupervisionController = ({
956
899
  childID: sessionID,
957
900
  agentName: info.agentName
958
901
  });
902
+ if (info.timeoutMs > 0 && now - info.startedAt > info.timeoutMs && info.timeoutNotifiedAt === 0) {
903
+ info.timeoutNotifiedAt = now;
904
+ const timeoutText = `[opencode-multiagent supervision] Child session ${sessionID} ` + `(agent: ${info.agentName ?? "unknown"}) exceeded its timeout of ${info.timeoutMs}ms ` + `(elapsed: ${now - info.startedAt}ms). Consider terminating or investigating.`;
905
+ try {
906
+ if (client.session?.prompt) {
907
+ await client.session.prompt({
908
+ path: { id: info.parentID },
909
+ body: { parts: [{ type: "text", text: timeoutText }], noReply: false }
910
+ });
911
+ }
912
+ } catch {}
913
+ await note("agent_timeout", compact({
914
+ observation: true,
915
+ parentID: info.parentID,
916
+ childID: sessionID,
917
+ agentName: info.agentName,
918
+ timeoutMs: info.timeoutMs,
919
+ elapsed: now - info.startedAt
920
+ }));
921
+ }
959
922
  return;
960
923
  }
961
924
  };
@@ -972,12 +935,18 @@ var createSupervisionController = ({
972
935
  const getActiveChildCount = (parentID) => {
973
936
  return childMap.get(parentID)?.size ?? 0;
974
937
  };
938
+ const setSessionTimeout = (sessionID, timeoutMs) => {
939
+ const info = tracker.entries.get(sessionID);
940
+ if (info)
941
+ info.timeoutMs = timeoutMs;
942
+ };
975
943
  return {
976
944
  handleSupervision,
977
945
  cleanup: tracker.cleanup,
978
946
  recordToolError,
979
947
  recordVerification,
980
948
  getActiveChildCount,
949
+ setSessionTimeout,
981
950
  getChildInfo(sessionID) {
982
951
  return tracker.entries.get(sessionID);
983
952
  },
@@ -1085,6 +1054,9 @@ var createTaskManager = (projectRoot) => {
1085
1054
  assignedAgent: input.assignedAgent,
1086
1055
  createdBy: input.createdBy,
1087
1056
  dependencies: input.dependencies ?? [],
1057
+ retryCount: 0,
1058
+ maxRetries: input.maxRetries ?? 0,
1059
+ escalationModel: input.escalationModel,
1088
1060
  createdAt: Date.now(),
1089
1061
  updatedAt: Date.now()
1090
1062
  };
@@ -1110,6 +1082,8 @@ var createTaskManager = (projectRoot) => {
1110
1082
  task.result = input.result;
1111
1083
  if (input.assignedAgent !== undefined)
1112
1084
  task.assignedAgent = input.assignedAgent;
1085
+ if (input.findings !== undefined)
1086
+ task.findings = input.findings;
1113
1087
  task.updatedAt = Date.now();
1114
1088
  schedulePersist();
1115
1089
  return task;
@@ -1136,7 +1110,10 @@ var createTaskManager = (projectRoot) => {
1136
1110
  const active = [...tasks.values()].filter((t) => t.status === "pending" || t.status === "claimed" || t.status === "in_progress");
1137
1111
  if (active.length === 0)
1138
1112
  return "";
1139
- const lines = active.slice(0, 10).map((t) => `- [${t.status}] ${t.title}${t.assignedAgent ? ` (${t.assignedAgent})` : ""}`);
1113
+ const lines = active.slice(0, 10).map((t) => {
1114
+ const depNote = t.dependencies.length > 0 ? areDependenciesMet(t.id).met ? " [deps:ok]" : ` [blocked:${areDependenciesMet(t.id).unmet.join(",")}]` : "";
1115
+ return `- [${t.status}] ${t.title}${t.assignedAgent ? ` (${t.assignedAgent})` : ""}${depNote}`;
1116
+ });
1140
1117
  return `Active tasks (${active.length}):
1141
1118
  ${lines.join(`
1142
1119
  `)}`;
@@ -1150,7 +1127,70 @@ ${lines.join(`
1150
1127
  schedulePersist();
1151
1128
  return true;
1152
1129
  };
1153
- return { create, update, get, list, load, getActiveSummary, linkSession };
1130
+ const getSiblingFindings = (taskID) => {
1131
+ const task = tasks.get(taskID);
1132
+ if (!task?.createdBy)
1133
+ return "";
1134
+ const siblings = [...tasks.values()].filter((t) => t.id !== taskID && t.status === "completed" && t.findings && t.createdBy === task.createdBy);
1135
+ if (siblings.length === 0)
1136
+ return "";
1137
+ return siblings.slice(0, 5).map((t) => `- [${t.id}] ${t.title}: ${t.findings.slice(0, 200)}`).join(`
1138
+ `);
1139
+ };
1140
+ const getReadyTasks = () => {
1141
+ return [...tasks.values()].filter((t) => {
1142
+ if (t.status !== "pending")
1143
+ return false;
1144
+ if (t.dependencies.length === 0)
1145
+ return true;
1146
+ return areDependenciesMet(t.id).met;
1147
+ });
1148
+ };
1149
+ const getDependentsOf = (taskID) => {
1150
+ return [...tasks.values()].filter((t) => t.dependencies.includes(taskID));
1151
+ };
1152
+ const listWithDepInfo = (filter) => {
1153
+ return list(filter).map((task) => {
1154
+ const { met, unmet } = areDependenciesMet(task.id);
1155
+ return { ...task, depsMet: met, unmetDeps: unmet };
1156
+ });
1157
+ };
1158
+ const shouldRetry = (taskID) => {
1159
+ const task = tasks.get(taskID);
1160
+ if (!task)
1161
+ return { retry: false, escalate: false };
1162
+ if (task.retryCount < task.maxRetries)
1163
+ return { retry: true, escalate: false };
1164
+ if (task.escalationModel)
1165
+ return { retry: false, escalate: true, model: task.escalationModel };
1166
+ return { retry: false, escalate: false };
1167
+ };
1168
+ const incrementRetry = (taskID) => {
1169
+ const task = tasks.get(taskID);
1170
+ if (!task)
1171
+ return { error: `Task ${taskID} not found` };
1172
+ task.retryCount += 1;
1173
+ task.status = "pending";
1174
+ task.result = (task.result ? task.result + " | " : "") + `Retry #${task.retryCount}`;
1175
+ task.updatedAt = Date.now();
1176
+ schedulePersist();
1177
+ return task;
1178
+ };
1179
+ return {
1180
+ create,
1181
+ update,
1182
+ get,
1183
+ list,
1184
+ load,
1185
+ getActiveSummary,
1186
+ linkSession,
1187
+ getSiblingFindings,
1188
+ getReadyTasks,
1189
+ getDependentsOf,
1190
+ listWithDepInfo,
1191
+ shouldRetry,
1192
+ incrementRetry
1193
+ };
1154
1194
  };
1155
1195
 
1156
1196
  // src/opencode-multiagent/telemetry.ts
@@ -1175,6 +1215,8 @@ var createTelemetryController = ({ flags }) => {
1175
1215
  filesEdited: 0,
1176
1216
  tasksDispatched: 0,
1177
1217
  permissionDenied: 0,
1218
+ inputTokens: 0,
1219
+ outputTokens: 0,
1178
1220
  flushed: false,
1179
1221
  ...extra
1180
1222
  });
@@ -1221,6 +1263,15 @@ var createTelemetryController = ({ flags }) => {
1221
1263
  return;
1222
1264
  state.permissionDenied += 1;
1223
1265
  },
1266
+ trackTokenUsage(sessionID, usage, extra) {
1267
+ const state = ensureSession(sessionID, extra);
1268
+ if (!state)
1269
+ return;
1270
+ if (typeof usage.inputTokens === "number")
1271
+ state.inputTokens += usage.inputTokens;
1272
+ if (typeof usage.outputTokens === "number")
1273
+ state.outputTokens += usage.outputTokens;
1274
+ },
1224
1275
  async flushSession(sessionID, reason = "session_deleted") {
1225
1276
  const state = tracker.entries.get(sessionID);
1226
1277
  if (!state || state.flushed)
@@ -1238,6 +1289,8 @@ var createTelemetryController = ({ flags }) => {
1238
1289
  files_edited: state.filesEdited,
1239
1290
  tasks_dispatched: state.tasksDispatched,
1240
1291
  permission_denied: state.permissionDenied,
1292
+ input_tokens: state.inputTokens,
1293
+ output_tokens: state.outputTokens,
1241
1294
  reason
1242
1295
  });
1243
1296
  },
@@ -1260,7 +1313,9 @@ var createTaskTools = (taskManager, taskManagerReady, correlation, quality, flag
1260
1313
  description: pluginTool.schema.string().describe("Detailed description of what needs to be done"),
1261
1314
  assignedAgent: pluginTool.schema.string().optional().describe("Name of the agent to assign this task to"),
1262
1315
  dependencies: pluginTool.schema.array(pluginTool.schema.string()).optional().describe("IDs of tasks this task depends on"),
1263
- priority: pluginTool.schema.enum(["high", "medium", "low"]).optional().describe("Task priority: high, medium, or low")
1316
+ priority: pluginTool.schema.enum(["high", "medium", "low"]).optional().describe("Task priority: high, medium, or low"),
1317
+ maxRetries: pluginTool.schema.number().optional().describe("Maximum retry attempts on failure. 0 = no retry."),
1318
+ escalationModel: pluginTool.schema.string().optional().describe("Model to escalate to when retries are exhausted (e.g., anthropic/claude-opus-4-6)")
1264
1319
  },
1265
1320
  async execute(args, ctx) {
1266
1321
  await taskManagerReady;
@@ -1304,6 +1359,7 @@ var createTaskTools = (taskManager, taskManagerReady, correlation, quality, flag
1304
1359
  taskID: pluginTool.schema.string().describe("ID of the task to update"),
1305
1360
  status: pluginTool.schema.enum(["pending", "claimed", "in_progress", "completed", "failed", "blocked"]).describe("New status for the task"),
1306
1361
  result: pluginTool.schema.string().optional().describe("Result summary or notes"),
1362
+ findings: pluginTool.schema.string().optional().describe("Key findings or output summary from this task for sibling context sharing"),
1307
1363
  force: pluginTool.schema.boolean().optional().describe("Force completion even without quality evidence (bypass quality gate)")
1308
1364
  },
1309
1365
  async execute(args, ctx) {
@@ -1332,7 +1388,7 @@ var createTaskTools = (taskManager, taskManagerReady, correlation, quality, flag
1332
1388
  agent: ctx.agent
1333
1389
  });
1334
1390
  }
1335
- return JSON.stringify(taskManager.update(args.taskID, { status: args.status, result: args.result }));
1391
+ return JSON.stringify(taskManager.update(args.taskID, { status: args.status, result: args.result, findings: args.findings }));
1336
1392
  }
1337
1393
  }),
1338
1394
  task_get: pluginTool({
@@ -1353,7 +1409,15 @@ var createTaskTools = (taskManager, taskManagerReady, correlation, quality, flag
1353
1409
  },
1354
1410
  async execute(args) {
1355
1411
  await taskManagerReady;
1356
- return JSON.stringify(taskManager.list(args));
1412
+ return JSON.stringify(taskManager.listWithDepInfo(args));
1413
+ }
1414
+ }),
1415
+ task_ready: pluginTool({
1416
+ description: "List tasks whose dependencies are all met and are ready to be dispatched",
1417
+ args: {},
1418
+ async execute() {
1419
+ await taskManagerReady;
1420
+ return JSON.stringify(taskManager.getReadyTasks());
1357
1421
  }
1358
1422
  })
1359
1423
  });
@@ -1436,7 +1500,17 @@ var createPluginHooks = ({
1436
1500
  const notifyParentOnChildCompletion = async (childSessionID, parentSessionID, agentName, taskLabel) => {
1437
1501
  const agentLabel = agentName ? ` (agent: ${agentName})` : "";
1438
1502
  const taskInfo = taskLabel ? `, task ${taskLabel}` : "";
1439
- const text2 = `Child session ${childSessionID}${agentLabel}${taskInfo} has completed. ` + "Review its output and proceed with the next task.";
1503
+ let siblingContext = "";
1504
+ if (taskLabel) {
1505
+ const findings = taskManager.getSiblingFindings(taskLabel);
1506
+ if (findings) {
1507
+ siblingContext = `
1508
+
1509
+ Completed sibling findings:
1510
+ ${findings}`;
1511
+ }
1512
+ }
1513
+ const text2 = `Child session ${childSessionID}${agentLabel}${taskInfo} has completed. ` + `Review its output and proceed with the next task.${siblingContext}`;
1440
1514
  try {
1441
1515
  if (client.session?.prompt) {
1442
1516
  await client.session.prompt({
@@ -1529,6 +1603,13 @@ var createPluginHooks = ({
1529
1603
  parent_agent: parent.agent,
1530
1604
  child_sessionID: childID
1531
1605
  });
1606
+ const childAgentName = agentHint ?? (typeof props.info?.agent === "string" ? props.info.agent : undefined);
1607
+ if (childAgentName && childID) {
1608
+ const agentCfg = agentSettings?.[childAgentName];
1609
+ if (agentCfg && typeof agentCfg === "object" && typeof agentCfg.timeout_ms === "number") {
1610
+ supervision.setSessionTimeout(childID, agentCfg.timeout_ms);
1611
+ }
1612
+ }
1532
1613
  }
1533
1614
  } else if (type === "message.updated") {
1534
1615
  const sessionID = typeof props.info?.sessionID === "string" ? props.info.sessionID : undefined;
@@ -1536,6 +1617,15 @@ var createPluginHooks = ({
1536
1617
  if (sessionID && agent) {
1537
1618
  rememberSession(sessionID, { agent });
1538
1619
  }
1620
+ if (sessionID) {
1621
+ const usage = props.info?.usage ?? props.usage ?? props.metadata?.usage;
1622
+ if (usage && typeof usage === "object") {
1623
+ telemetry.trackTokenUsage(sessionID, {
1624
+ inputTokens: typeof usage.inputTokens === "number" ? usage.inputTokens : typeof usage.input_tokens === "number" ? usage.input_tokens : undefined,
1625
+ outputTokens: typeof usage.outputTokens === "number" ? usage.outputTokens : typeof usage.output_tokens === "number" ? usage.output_tokens : undefined
1626
+ });
1627
+ }
1628
+ }
1539
1629
  } else if (type === "session.deleted") {
1540
1630
  const sessionID = typeof props.info?.id === "string" ? props.info.id : typeof props.sessionID === "string" ? props.sessionID : undefined;
1541
1631
  if (sessionID) {
@@ -1559,6 +1649,63 @@ var createPluginHooks = ({
1559
1649
  childSessionID: sessionID,
1560
1650
  autoStatus
1561
1651
  });
1652
+ if (autoStatus === "failed" && flags.task_lifecycle) {
1653
+ const retryInfo = taskManager.shouldRetry(link.taskID);
1654
+ if (retryInfo.retry) {
1655
+ const retriedTask = taskManager.incrementRetry(link.taskID);
1656
+ if (!("error" in retriedTask)) {
1657
+ await note("task_retry", {
1658
+ observation: true,
1659
+ taskID: link.taskID,
1660
+ retryCount: retriedTask.retryCount,
1661
+ maxRetries: retriedTask.maxRetries
1662
+ });
1663
+ if (childInfo?.parentID) {
1664
+ const retryText = `[opencode-multiagent retry] Task ${link.taskID} failed and has been reset to pending ` + `(retry ${retriedTask.retryCount}/${retriedTask.maxRetries}). Re-dispatch when ready.`;
1665
+ try {
1666
+ if (client.session?.prompt) {
1667
+ await client.session.prompt({
1668
+ path: { id: childInfo.parentID },
1669
+ body: { parts: [{ type: "text", text: retryText }], noReply: false }
1670
+ });
1671
+ }
1672
+ } catch {}
1673
+ }
1674
+ correlation.removeLink(sessionID);
1675
+ return;
1676
+ }
1677
+ } else if (retryInfo.escalate && retryInfo.model) {
1678
+ taskManager.update(link.taskID, {
1679
+ status: "pending",
1680
+ result: `Escalated to ${retryInfo.model} after exhausting retries`
1681
+ });
1682
+ await note("task_escalation", {
1683
+ observation: true,
1684
+ taskID: link.taskID,
1685
+ escalationModel: retryInfo.model
1686
+ });
1687
+ if (childInfo?.parentID) {
1688
+ const escalateText = `[opencode-multiagent escalation] Task ${link.taskID} exhausted retries. ` + `Re-dispatch with model override: ${retryInfo.model}.`;
1689
+ try {
1690
+ if (client.session?.prompt) {
1691
+ await client.session.prompt({
1692
+ path: { id: childInfo.parentID },
1693
+ body: { parts: [{ type: "text", text: escalateText }], noReply: false }
1694
+ });
1695
+ }
1696
+ } catch {}
1697
+ }
1698
+ correlation.removeLink(sessionID);
1699
+ return;
1700
+ }
1701
+ }
1702
+ if (autoStatus === "completed") {
1703
+ const dependents = taskManager.getDependentsOf(link.taskID);
1704
+ const nowReady = dependents.filter((t) => t.status === "pending" && taskManager.getReadyTasks().some((r) => r.id === t.id));
1705
+ if (nowReady.length > 0) {
1706
+ taskLabel = `${link.taskID} [unblocked: ${nowReady.map((t) => t.id).join(", ")}]`;
1707
+ }
1708
+ }
1562
1709
  }
1563
1710
  if (link)
1564
1711
  correlation.removeLink(sessionID);
@@ -1592,6 +1739,16 @@ var createPluginHooks = ({
1592
1739
  agent: label(input.agent),
1593
1740
  model: label(input.model, ["id", "name", "modelID"])
1594
1741
  });
1742
+ const agentName = label(input.agent);
1743
+ if (agentName && agentSettings?.[agentName]) {
1744
+ const settings = agentSettings[agentName];
1745
+ if (typeof settings.top_p === "number") {
1746
+ output.topP = settings.top_p;
1747
+ }
1748
+ if (settings.options && typeof settings.options === "object") {
1749
+ output.options = { ...output.options, ...settings.options };
1750
+ }
1751
+ }
1595
1752
  if (!flags.observation)
1596
1753
  return;
1597
1754
  const marks = [];
@@ -1627,7 +1784,7 @@ var createPluginHooks = ({
1627
1784
  return;
1628
1785
  Object.assign(output.headers, {
1629
1786
  "x-opencode-multiagent": "1",
1630
- "x-opencode-multiagent-profile": flags.profile ?? "standard",
1787
+ "x-opencode-multiagent-profile": pluginMode,
1631
1788
  "x-opencode-agent": label(input.agent) ?? "unknown"
1632
1789
  });
1633
1790
  },
@@ -1816,7 +1973,7 @@ ${experimentalText}`;
1816
1973
  Object.assign(output.env, {
1817
1974
  OPENCODE_MULTIAGENT: "1",
1818
1975
  OPENCODE_MULTIAGENT_MODE: pluginMode,
1819
- OPENCODE_MULTIAGENT_PROFILE: flags.profile ?? "standard",
1976
+ OPENCODE_MULTIAGENT_PROFILE: pluginMode,
1820
1977
  OPENCODE_CONTROL_PLANE: "1"
1821
1978
  });
1822
1979
  },
@@ -1863,32 +2020,21 @@ ${String(output.output ?? "")}`.toLowerCase();
1863
2020
  };
1864
2021
 
1865
2022
  // src/opencode-multiagent/runtime.ts
1866
- var readSettingsSection = (value) => {
1867
- if (!value || typeof value !== "object" || Array.isArray(value)) {
1868
- return {};
1869
- }
1870
- return value;
1871
- };
1872
2023
  async function loadRuntimeSettings() {
1873
- const [bundledDefaults, unifiedUserSettings] = await Promise.all([
2024
+ const [bundledDefaults, userSettings] = await Promise.all([
1874
2025
  loadBundledDefaults().catch(() => ({})),
1875
2026
  readJSON(settingsPath, {})
1876
2027
  ]);
1877
2028
  const defaultAgentSettings = readBundledDefaultsSection(bundledDefaults, "agentSettings", {});
1878
- const userFlags = readSettingsSection(unifiedUserSettings.flags);
1879
- const userAgentSettings = readSettingsSection(unifiedUserSettings.agentSettings);
1880
- const userProfiles = readSettingsSection(unifiedUserSettings.profiles);
1881
- const profiles = merge(defaultProfiles, userProfiles);
1882
- const profileName = typeof userFlags.profile === "string" ? userFlags.profile : defaultFlags.profile;
1883
- const profile = profiles[profileName] ?? {};
1884
- if (!(profileName in profiles)) {
1885
- await note("config_warning", {
1886
- observation: true,
1887
- warning: "unknown_profile",
1888
- profile: profileName
1889
- });
2029
+ const userFlagOverrides = {};
2030
+ if (typeof userSettings.telemetry === "boolean") {
2031
+ userFlagOverrides.telemetry = userSettings.telemetry;
2032
+ }
2033
+ if (typeof userSettings.concurrency_limit === "number") {
2034
+ userFlagOverrides.concurrency_limit = userSettings.concurrency_limit;
1890
2035
  }
1891
- const flags = merge(merge(defaultFlags, profile), userFlags);
2036
+ const flags = merge(defaultFlags, userFlagOverrides);
2037
+ const userAgentSettings = userSettings.agentSettings ?? {};
1892
2038
  const agentSettings = merge(defaultAgentSettings, userAgentSettings);
1893
2039
  return { flags, agentSettings };
1894
2040
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/compiler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,KAAK,YAAY,GAAG,aAAa,GAAG;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B,CAAC;AAWF,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AA2BpD,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAChD,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF,wBAAsB,aAAa,CACjC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EAC/B,aAAa,GAAE,aAAkB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAwC9B;AAED,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,SAAS,mBAAmB,KAC3B,OAKF,CAAC;AAEF,wBAAsB,eAAe,CACnC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,eAAO,MAAM,uBAAuB,GAAU,KAAK,YAAY,KAAG,OAAO,CAAC,IAAI,CAqC7E,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,KAAK,YAAY,KAAG,IAc3D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,WAAW,qBAAqB,KAAG,OAWrF,CAAC;AAEF,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/compiler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,KAAK,YAAY,GAAG,aAAa,GAAG;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B,CAAC;AAWF,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AA2BpD,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAChD,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF,wBAAsB,aAAa,CACjC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EAC/B,aAAa,GAAE,aAAkB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAmD9B;AAED,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,SAAS,mBAAmB,KAC3B,OAKF,CAAC;AAEF,wBAAsB,eAAe,CACnC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,eAAO,MAAM,uBAAuB,GAAU,KAAK,YAAY,KAAG,OAAO,CAAC,IAAI,CAqC7E,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,KAAK,YAAY,KAAG,IAc3D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,WAAW,qBAAqB,KAAG,OAWrF,CAAC;AAEF,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -18,72 +18,7 @@ export declare const qualityEventTypes: Set<string>;
18
18
  export declare const suspiciousTerms: string[];
19
19
  export declare const qualitySignalRegex: RegExp;
20
20
  export declare const mcpToolPrefixes: string[];
21
- export declare const defaultProfiles: {
22
- minimal: {
23
- enforcement: boolean;
24
- observation: boolean;
25
- prompt_controls: boolean;
26
- agent_compilation: boolean;
27
- command_compilation: boolean;
28
- mcp_compilation: boolean;
29
- telemetry: boolean;
30
- supervision: boolean;
31
- quality_gate: boolean;
32
- task_lifecycle: boolean;
33
- quality_gate_enforcement: boolean;
34
- concurrency_limit: number;
35
- experimental: {
36
- chat_system_transform: boolean;
37
- chat_messages_transform: boolean;
38
- session_compacting: boolean;
39
- text_complete: boolean;
40
- };
41
- };
42
- standard: {
43
- enforcement: boolean;
44
- observation: boolean;
45
- prompt_controls: boolean;
46
- agent_compilation: boolean;
47
- command_compilation: boolean;
48
- mcp_compilation: boolean;
49
- telemetry: boolean;
50
- supervision: boolean;
51
- quality_gate: boolean;
52
- task_lifecycle: boolean;
53
- quality_gate_enforcement: boolean;
54
- concurrency_limit: number;
55
- skill_sources: string[];
56
- skill_injection: boolean;
57
- experimental: {
58
- chat_system_transform: boolean;
59
- chat_messages_transform: boolean;
60
- session_compacting: boolean;
61
- text_complete: boolean;
62
- };
63
- };
64
- strict: {
65
- enforcement: boolean;
66
- observation: boolean;
67
- prompt_controls: boolean;
68
- agent_compilation: boolean;
69
- command_compilation: boolean;
70
- mcp_compilation: boolean;
71
- telemetry: boolean;
72
- supervision: boolean;
73
- quality_gate: boolean;
74
- task_lifecycle: boolean;
75
- quality_gate_enforcement: boolean;
76
- concurrency_limit: number;
77
- experimental: {
78
- chat_system_transform: boolean;
79
- chat_messages_transform: boolean;
80
- session_compacting: boolean;
81
- text_complete: boolean;
82
- };
83
- };
84
- };
85
21
  export declare const defaultFlags: {
86
- profile: string;
87
22
  enforcement: boolean;
88
23
  observation: boolean;
89
24
  prompt_controls: boolean;
@@ -124,5 +59,4 @@ export declare const destructiveBashFragments: string[];
124
59
  export declare const sensitiveMentions: string[];
125
60
  export declare const experimentalText = "[opencode-multiagent experimental] Experimental control-plane transforms are active for this session.";
126
61
  export type DefaultFlags = typeof defaultFlags;
127
- export type DefaultProfiles = typeof defaultProfiles;
128
62
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/constants.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,UAAU,WAAW,CAAC;AAEnC,eAAO,MAAM,WAAW,QAAyC,CAAC;AAClE,eAAO,MAAM,SAAS,QAA+B,CAAC;AACtD,eAAO,MAAM,eAAe,QAA8B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,UAAU,QAA4B,CAAC;AACpD,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,YAAY,QAAwC,CAAC;AAElE,eAAO,MAAM,WAAW,QAAsB,CAAC;AAC/C,eAAO,MAAM,mBAAmB,QAA4D,CAAC;AAC7F,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAC5D,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAChE,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAE5D,eAAO,MAAM,iBAAiB,aAW5B,CAAC;AAEH,eAAO,MAAM,qBAAqB,aAKhC,CAAC;AAEH,eAAO,MAAM,iBAAiB,aAA8D,CAAC;AAC7F,eAAO,MAAM,eAAe,UAA0D,CAAC;AACvF,eAAO,MAAM,kBAAkB,QACqF,CAAC;AAErH,eAAO,MAAM,eAAe,UAO3B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmE3B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCxB,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAA0C,CAAC;AAE5E,eAAO,MAAM,sBAAsB,QAAsD,CAAC;AAC1F,eAAO,MAAM,oBAAoB,UAOhC,CAAC;AACF,eAAO,MAAM,mBAAmB,UAA4B,CAAC;AAE7D,eAAO,MAAM,wBAAwB,UAoBpC,CAAC;AACF,eAAO,MAAM,iBAAiB,UAS7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,0GAC4E,CAAC;AAE1G,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC;AAC/C,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/constants.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,UAAU,WAAW,CAAC;AAEnC,eAAO,MAAM,WAAW,QAAyC,CAAC;AAClE,eAAO,MAAM,SAAS,QAA+B,CAAC;AACtD,eAAO,MAAM,eAAe,QAA8B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,UAAU,QAA4B,CAAC;AACpD,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,YAAY,QAAwC,CAAC;AAElE,eAAO,MAAM,WAAW,QAAsB,CAAC;AAC/C,eAAO,MAAM,mBAAmB,QAA4D,CAAC;AAC7F,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAC5D,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAChE,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAE5D,eAAO,MAAM,iBAAiB,aAW5B,CAAC;AAEH,eAAO,MAAM,qBAAqB,aAKhC,CAAC;AAEH,eAAO,MAAM,iBAAiB,aAA8D,CAAC;AAC7F,eAAO,MAAM,eAAe,UAA0D,CAAC;AACvF,eAAO,MAAM,kBAAkB,QACqF,CAAC;AAErH,eAAO,MAAM,eAAe,UAO3B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCxB,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAA0C,CAAC;AAE5E,eAAO,MAAM,sBAAsB,QAAsD,CAAC;AAC1F,eAAO,MAAM,oBAAoB,UAOhC,CAAC;AACF,eAAO,MAAM,mBAAmB,UAA4B,CAAC;AAE7D,eAAO,MAAM,wBAAwB,UAoBpC,CAAC;AACF,eAAO,MAAM,iBAAiB,UAS7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,0GAC4E,CAAC;AAE1G,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC"}
@@ -1,9 +1,7 @@
1
1
  import type { GenericRecord } from './types.ts';
2
2
  export type BundledDefaults = {
3
- flags?: GenericRecord;
4
3
  agentSettings?: GenericRecord;
5
4
  mcpDefaults?: GenericRecord;
6
- profiles?: GenericRecord;
7
5
  };
8
6
  export declare const loadBundledDefaults: () => Promise<BundledDefaults>;
9
7
  export declare const readBundledDefaultsSection: <T>(defaults: BundledDefaults, section: keyof BundledDefaults, fallback: T) => T;
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/defaults.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAYF,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,eAAe,CAQnE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,CAAC,EAC1C,UAAU,eAAe,EACzB,SAAS,MAAM,eAAe,EAC9B,UAAU,CAAC,KACV,CAQF,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/defaults.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B,CAAC;AAYF,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,eAAe,CAQnE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,CAAC,EAC1C,UAAU,eAAe,EACzB,SAAS,MAAM,eAAe,EAC9B,UAAU,CAAC,KACV,CAQF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAiCjD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG;IAClC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,yDAAyD;IACzD,cAAc,CAAC,EAAE,CACf,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAC7C,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KACxC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,wDAAwD;IACxD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,uDAAuD;IACvD,oCAAoC,CAAC,EAAE,CACrC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,mEAAmE;IACnE,sCAAsC,CAAC,EAAE,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,KAAK,EAAE,OAAO,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACxE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,uEAAuE;IACvE,iCAAiC,CAAC,EAAE,CAClC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,KAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,6DAA6D;IAC7D,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5F,CAAC;AAGF,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAezC,eAAO,MAAM,iBAAiB,GAAI,gDAK/B;IAGD,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,KAAG,aAkkBH,CAAC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/opencode-multiagent/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAiCjD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG;IAClC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,yDAAyD;IACzD,cAAc,CAAC,EAAE,CACf,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAC7C,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KACxC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,wDAAwD;IACxD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,uDAAuD;IACvD,oCAAoC,CAAC,EAAE,CACrC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,mEAAmE;IACnE,sCAAsC,CAAC,EAAE,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,KAAK,EAAE,OAAO,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACxE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,uEAAuE;IACvE,iCAAiC,CAAC,EAAE,CAClC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,KAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,6DAA6D;IAC7D,4BAA4B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5F,CAAC;AAGF,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAezC,eAAO,MAAM,iBAAiB,GAAI,gDAK/B;IAGD,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,KAAG,aAgrBH,CAAC"}