openmausbot 0.1.82 → 0.1.84

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 (54) hide show
  1. package/dist/assets/index-BbU5REzd.js +310 -0
  2. package/dist/assets/{index-CKysBq-V.css → index-CLGfYlx_.css} +1 -1
  3. package/dist/assets/{index-5HVwp5m2.js → index-DNa2umw-.js} +1 -1
  4. package/dist/index.html +2 -2
  5. package/dist-server/container-mcp.js +20 -4
  6. package/dist-server/drivers/agents-proxy.js +30 -4
  7. package/dist-server/index.js +1716 -581
  8. package/dist-server/mcp-gate.js +2 -1
  9. package/dist-server/openmausbot.js +224 -63
  10. package/dist-server/pair-cli.js +224 -63
  11. package/dist-server/server/auto-approve.js +15 -1
  12. package/dist-server/server/auto-vm-claims.js +22 -0
  13. package/dist-server/server/browser-bundle-release.js +8 -7
  14. package/dist-server/server/browser-engine.js +1 -1
  15. package/dist-server/server/channel-queue.js +58 -0
  16. package/dist-server/server/checkpoints.js +9 -5
  17. package/dist-server/server/chief-of-staff.js +5 -2
  18. package/dist-server/server/computer-wait.js +33 -0
  19. package/dist-server/server/config.js +58 -3
  20. package/dist-server/server/contracts.js +0 -7
  21. package/dist-server/server/delta-context.js +258 -0
  22. package/dist-server/server/drivers/acp/gemini.js +11 -1
  23. package/dist-server/server/drivers/acp/qwen.js +16 -1
  24. package/dist-server/server/drivers/agents-proxy.js +32 -4
  25. package/dist-server/server/drivers/claude.js +26 -8
  26. package/dist-server/server/drivers/codex.js +79 -6
  27. package/dist-server/server/drivers/pi.js +2 -1
  28. package/dist-server/server/env-path.js +6 -1
  29. package/dist-server/server/incidents.js +104 -0
  30. package/dist-server/server/index.js +886 -134
  31. package/dist-server/server/local-routing.js +10 -4
  32. package/dist-server/server/notify.js +3 -1
  33. package/dist-server/server/peer-roster.js +37 -1
  34. package/dist-server/server/recent-work.js +4 -1
  35. package/dist-server/server/redact.js +5 -48
  36. package/dist-server/server/room-handoffs.js +79 -16
  37. package/dist-server/server/skill-fetch.js +1 -1
  38. package/dist-server/server/steer-queue.js +29 -0
  39. package/dist-server/server/store.js +43 -3
  40. package/dist-server/server/thread-retention.js +50 -0
  41. package/dist-server/server/turn-context.js +7 -0
  42. package/dist-server/server/turn-resources.js +6 -0
  43. package/dist-server/shared/approval-mode.js +8 -5
  44. package/dist-server/shared/inspector.js +1 -0
  45. package/dist-server/shared/json.js +1 -0
  46. package/dist-server/shared/notification.js +1 -0
  47. package/dist-server/shared/redact.js +61 -0
  48. package/dist-server/shared/routines.js +1 -0
  49. package/dist-server/shared/runtime-events.js +1 -0
  50. package/dist-server/shared/webhooks.js +1 -0
  51. package/dist-server/shared/wire.js +8 -0
  52. package/dist-server/vps-container-mcp.js +20 -4
  53. package/package.json +1 -1
  54. package/dist/assets/index-BLLsDK2F.js +0 -309
@@ -1095,10 +1095,10 @@ var TOOLS = [
1095
1095
  },
1096
1096
  {
1097
1097
  name: "coordinate_bots",
1098
- description: "Ask existing OpenMausBot teammates for advice or assign concrete work. From normal chat every assignment you send a teammate continues your one standing conversation with that teammate, so they keep the context of what you asked before; from a room it defaults to this room. Use group_id from list_room_targets for a specific room. Name 1-4 bot_ids: they receive only your brief and use their own model, tools and permissions. Busy bots queue. They can consult their specialists; all results return here and resume you automatically. Include exact file paths, constraints and what must be verified. After sending all assignments, END your turn; do not poll or wait. On return, resolve tradeoffs, verify the requested outcome and request concrete corrections if necessary before giving one final answer. Do not send acknowledgements as new work.",
1098
+ description: "Ask existing OpenMausBot teammates for advice or assign concrete work. From normal chat every assignment you send a teammate continues your one standing conversation with that teammate, so they keep the context of what you asked before; from a room it defaults to this room. Use group_id from list_room_targets for a specific room. Give 1-4 bot_ids \u2014 teammate ids as list_bots or your roster prints them; a unique teammate name also resolves: they receive only your brief and use their own model, tools and permissions. Busy bots queue. They can consult their specialists; all results return here and resume you automatically. Include exact file paths, constraints and what must be verified. After sending all assignments, END your turn; do not poll or wait. On return, resolve tradeoffs, verify the requested outcome and request concrete corrections if necessary before giving one final answer. Do not send acknowledgements as new work.",
1099
1099
  inputSchema: { type: "object", additionalProperties: false, properties: {
1100
1100
  group_id: { type: "string", description: "Optional destination room. Omit for this room, or your standing conversation with each teammate when chatting directly." },
1101
- bot_ids: { type: "array", items: { type: "string" }, minItems: 1, maxItems: 4, uniqueItems: true },
1101
+ bot_ids: { type: "array", items: { type: "string", description: "A teammate's id exactly as list_bots or your roster prints it ([id: \u2026]). A teammate's unique display name also resolves; a name shared by two reachable teammates is refused." }, minItems: 1, maxItems: 4, uniqueItems: true },
1102
1102
  message: { type: "string", minLength: 1, maxLength: 4e3, description: "Self-contained question or task for these teammates. Send separate requests when responsibilities differ." },
1103
1103
  request_key: { type: "string", description: "A short unique assignment key. Reuse for an identical retry." },
1104
1104
  rework: { type: "boolean", description: "True only for concrete additional work from someone who already completed a request." },
@@ -1121,7 +1121,7 @@ var TOOLS = [
1121
1121
  inputSchema: {
1122
1122
  type: "object",
1123
1123
  properties: {
1124
- bot_id: { type: "string", description: "The target bot's id (from list_bots)." },
1124
+ bot_id: { type: "string", description: "The target bot's id (from list_bots or your roster); a unique teammate name also resolves." },
1125
1125
  message: { type: "string", description: "What to say / ask the bot." }
1126
1126
  },
1127
1127
  required: ["bot_id", "message"]
@@ -1133,7 +1133,7 @@ var TOOLS = [
1133
1133
  inputSchema: {
1134
1134
  type: "object",
1135
1135
  properties: {
1136
- bot_id: { type: "string", description: "The target bot's id (from list_bots)." },
1136
+ bot_id: { type: "string", description: "The target bot's id (from list_bots or your roster); a unique teammate name also resolves." },
1137
1137
  message: { type: "string", description: "What the peer should do / answer." },
1138
1138
  reason: { type: "string", description: "Optional one-line reason for the delegation (shown to the user as a chip)." }
1139
1139
  },
@@ -1359,6 +1359,20 @@ var TOOLS = [
1359
1359
  required: ["action"]
1360
1360
  }
1361
1361
  },
1362
+ {
1363
+ name: "retry_thread",
1364
+ description: "Chief of Staff only. Resume a teammate's thread whose last run failed, stalled or could not start \u2014 the one an incident report named \u2014 exactly where it stopped, keeping its conversation and files. The teammate gets a line saying you asked for the retry and why. Use it when the cause looks transient (a crash, a timeout, a busy service). Use delegate_bot with a corrected brief instead when the request itself needs to change, and tell the person instead when only they can fix the cause (a sign-in, a missing credential, an unanswered question). Never retry the same thread more than twice.",
1365
+ inputSchema: {
1366
+ type: "object",
1367
+ additionalProperties: false,
1368
+ properties: {
1369
+ bot_id: { type: "string", description: "The teammate's id, from the incident report or list_bots." },
1370
+ thread_id: { type: "string", description: "The failed thread's id, from the incident report." },
1371
+ note: { type: "string", description: "Optional: one sentence for the teammate about what to watch for this time." }
1372
+ },
1373
+ required: ["bot_id", "thread_id"]
1374
+ }
1375
+ },
1362
1376
  {
1363
1377
  name: "memory_log",
1364
1378
  description: "Write one line to today's log file, memory/log/YYYY-MM-DD.md, stamped with the time and this conversation: what happened, not what is true. Use it for events worth a trace \u2014 a deploy went out, a person decided something, a check failed \u2014 that should not shape future sessions. Logs are never loaded into your prompt; the person can read them, and session_search finds them later. A fact that should hold in every session goes to memory_update instead.",
@@ -2141,6 +2155,18 @@ ${recent.join("\n")}` : "";
2141
2155
  const entry = typeof r.entry === "string" && r.entry ? ` Entry: ${r.entry}` : "";
2142
2156
  return { text: `Memory updated.${entry}${r.truncated ? " MEMORY.md exceeds the prompt load budget; keep it short and curated." : ""}` };
2143
2157
  }
2158
+ if (name === "retry_thread") {
2159
+ const botId = String(args.bot_id ?? "").trim();
2160
+ const threadId = String(args.thread_id ?? "").trim();
2161
+ const note = typeof args.note === "string" ? args.note.trim() : "";
2162
+ if (!botId || !threadId) return { text: "retry_thread needs bot_id and thread_id \u2014 both are in the incident report.", isError: true };
2163
+ const r = await api("/api/internal/retry-thread", {
2164
+ method: "POST",
2165
+ body: JSON.stringify({ fromBotId: BOT_ID, fromThreadId: THREAD_ID, toBotId: botId, toThreadId: threadId, ...note ? { note } : {} })
2166
+ });
2167
+ if (r.error) return { text: `Couldn't retry that thread: ${String(r.error)}`, isError: true };
2168
+ return { text: typeof r.message === "string" ? r.message : "The thread is running again. Its result stays in that thread; you are not woken for it \u2014 check it later with session_search or list_threads if you need to." };
2169
+ }
2144
2170
  if (name === "memory_log") {
2145
2171
  if (typeof args.text !== "string" || !args.text.trim()) {
2146
2172
  return { text: "memory_log needs text: one line about what happened.", isError: true };