openmausbot 0.1.90 → 0.1.91

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 (112) hide show
  1. package/dist/assets/{abnfDiagram-O67JEVCF-DUyXd0kL.js → abnfDiagram-O67JEVCF-yP-w8pRq.js} +1 -1
  2. package/dist/assets/{arc-q73qM-At.js → arc-DsivfZEh.js} +1 -1
  3. package/dist/assets/{architectureDiagram-NJMV4G6O-D33O3Wur.js → architectureDiagram-NJMV4G6O-CILw7lzT.js} +1 -1
  4. package/dist/assets/{blockDiagram-BEXU5L5S-DLsJeoXC.js → blockDiagram-BEXU5L5S-DEQUV3HF.js} +1 -1
  5. package/dist/assets/{c4Diagram-YGBWAQC7-DnaljZnu.js → c4Diagram-YGBWAQC7-lSXCZoKA.js} +1 -1
  6. package/dist/assets/channel-DrfGMu7X.js +1 -0
  7. package/dist/assets/{chunk-2Q5K7J3B-Da0h2i79.js → chunk-2Q5K7J3B-QCD5bgWP.js} +1 -1
  8. package/dist/assets/{chunk-3FUC2YCW-CfzHi54f.js → chunk-3FUC2YCW-C5-iZJuL.js} +2 -2
  9. package/dist/assets/{chunk-5VM5RSS4-LjE4d9Jf.js → chunk-5VM5RSS4-cxsawMpY.js} +1 -1
  10. package/dist/assets/{chunk-GTNCS2PH-DY-UGmvc.js → chunk-GTNCS2PH-DV8tV8H7.js} +1 -1
  11. package/dist/assets/{chunk-GWA4HPMP-BqeGhyhP.js → chunk-GWA4HPMP-CJFZyfbW.js} +1 -1
  12. package/dist/assets/{chunk-JWPE2WC7-BYa9EBAg.js → chunk-JWPE2WC7-BigbMXco.js} +1 -1
  13. package/dist/assets/{chunk-NETBCI7D-vTrDtWyb.js → chunk-NETBCI7D-oVxTfpDy.js} +1 -1
  14. package/dist/assets/{chunk-WEXAMYUT-ic5tXadM.js → chunk-WEXAMYUT-CH4BiroW.js} +1 -1
  15. package/dist/assets/{chunk-XXDRQBXY-DvRCY-c6.js → chunk-XXDRQBXY-KEDa6gax.js} +1 -1
  16. package/dist/assets/{classDiagram-v2-NBCMYWYE-DVbmgz_L.js → classDiagram-v2-NBCMYWYE-BiPjfqVv.js} +1 -1
  17. package/dist/assets/{cose-bilkent-JH36ORCC-vdUs2n57.js → cose-bilkent-JH36ORCC-Caxew3OY.js} +1 -1
  18. package/dist/assets/{cynefin-OW5HDTMX-BvLGlV3U.js → cynefin-OW5HDTMX-B_Pui369.js} +1 -1
  19. package/dist/assets/{cynefinDiagram-VND7K2PF-C4GcJQDt.js → cynefinDiagram-VND7K2PF-X64ydIhP.js} +1 -1
  20. package/dist/assets/{dagre-6A5THRUB-BMSaHpt_.js → dagre-6A5THRUB-TqYCI1E1.js} +1 -1
  21. package/dist/assets/{diagram-22UHCM2B-D5b9UBhC.js → diagram-22UHCM2B-TeOt3rAQ.js} +1 -1
  22. package/dist/assets/{diagram-3UASUU5V-CIKLlB7Y.js → diagram-3UASUU5V-D70BLhDA.js} +1 -1
  23. package/dist/assets/{diagram-ATOU4E4O-BzXb-7k7.js → diagram-ATOU4E4O-BbQDLwUC.js} +1 -1
  24. package/dist/assets/{diagram-CDSNMT55-HsTvJ7uT.js → diagram-CDSNMT55-ChNJZ1u-.js} +1 -1
  25. package/dist/assets/{diagram-MLGK6HIB-Db9ySNbQ.js → diagram-MLGK6HIB-DMBl2APa.js} +1 -1
  26. package/dist/assets/{diagram-MPIPVDR6-D6BKbpqY.js → diagram-MPIPVDR6-CEqDchOp.js} +1 -1
  27. package/dist/assets/{ebnfDiagram-ZINNZB2B-Bq067L0t.js → ebnfDiagram-ZINNZB2B-BVDKRp_-.js} +1 -1
  28. package/dist/assets/{elk-276RUBZZ-DhaD7fNJ.js → elk-276RUBZZ-CRkofO9B.js} +1 -1
  29. package/dist/assets/{erDiagram-OPXOYQCR-fwIhfz36.js → erDiagram-OPXOYQCR-DruOMh5e.js} +1 -1
  30. package/dist/assets/{flowDiagram-KWPJA3E3-DygIyu0V.js → flowDiagram-KWPJA3E3-8GMQeB7t.js} +1 -1
  31. package/dist/assets/{ganttDiagram-FUAMR5RP-DPYfSO96.js → ganttDiagram-FUAMR5RP-ORE9jcsM.js} +1 -1
  32. package/dist/assets/{gitGraphDiagram-X574FWY7-DhkHeCle.js → gitGraphDiagram-X574FWY7-BmsedsWh.js} +1 -1
  33. package/dist/assets/index-BlnCEcU6.js +588 -0
  34. package/dist/assets/{index-G1PHKGyh.js → index-DKNEM8Q6.js} +1 -1
  35. package/dist/assets/index-DVxjOvID.css +1 -0
  36. package/dist/assets/{infoDiagram-VRGFBTTK-DstBLxME.js → infoDiagram-VRGFBTTK-E_p7AooJ.js} +1 -1
  37. package/dist/assets/{ishikawaDiagram-OU5B5YK6-CrIsGgch.js → ishikawaDiagram-OU5B5YK6-Y-B2mKda.js} +1 -1
  38. package/dist/assets/{journeyDiagram-ZHPQQLJL-CYypGDbB.js → journeyDiagram-ZHPQQLJL-eA8RELcK.js} +1 -1
  39. package/dist/assets/{kanban-definition-PNTS6WVX-DGjPt8E_.js → kanban-definition-PNTS6WVX-DqIL2e8e.js} +1 -1
  40. package/dist/assets/{linear-Dwc3Hrru.js → linear-yC_29R6e.js} +1 -1
  41. package/dist/assets/{mermaid.core-Dc4OePBL.js → mermaid.core-VhEMkSND.js} +5 -5
  42. package/dist/assets/{mindmap-definition-NLK3R4M7-DV-vepj-.js → mindmap-definition-NLK3R4M7-oJ7kyQZy.js} +1 -1
  43. package/dist/assets/{pegDiagram-GJSIUBJH-lx5Kj-n5.js → pegDiagram-GJSIUBJH-BmfYcY0O.js} +1 -1
  44. package/dist/assets/{pieDiagram-5QR66LMP-Bq7Vmm15.js → pieDiagram-5QR66LMP-DKvgP7w9.js} +1 -1
  45. package/dist/assets/{quadrantDiagram-O4NWA36T-DeqeqOBj.js → quadrantDiagram-O4NWA36T-BEKL3W0L.js} +1 -1
  46. package/dist/assets/{railroadDiagram-XR7U4H2S-CXwRQzSC.js → railroadDiagram-XR7U4H2S-BEsiqR5s.js} +1 -1
  47. package/dist/assets/{requirementDiagram-PLB6GJNP-8tAeoB88.js → requirementDiagram-PLB6GJNP-DWBcWvAP.js} +1 -1
  48. package/dist/assets/{sankeyDiagram-IPEJSGJF-BG5zjGWU.js → sankeyDiagram-IPEJSGJF-rpZ2_O4s.js} +1 -1
  49. package/dist/assets/{sequenceDiagram-PO4LG4MO-DKF3iLcw.js → sequenceDiagram-PO4LG4MO-B99HQdJR.js} +1 -1
  50. package/dist/assets/{sizeCapture-INFHLROL-B-y1qUgT.js → sizeCapture-INFHLROL-BjN0qT5T.js} +1 -1
  51. package/dist/assets/{stateDiagram-v2-GCMORJYK-MkzPgxAc.js → stateDiagram-v2-GCMORJYK-BbsVgGsC.js} +1 -1
  52. package/dist/assets/{swimlanes-2SLR337P-DnbaOEwH.js → swimlanes-2SLR337P-DG3gKkeR.js} +1 -1
  53. package/dist/assets/swimlanesDiagram-TC7HE7FX-BCZhxl7e.js +8 -0
  54. package/dist/assets/{timeline-definition-EJHVYXUP-Bb4xG_Bt.js → timeline-definition-EJHVYXUP-BTHOdtF_.js} +1 -1
  55. package/dist/assets/{usecaseDiagram-POWQR4AR-JgkR9pFf.js → usecaseDiagram-POWQR4AR-acLSLFwc.js} +1 -1
  56. package/dist/assets/{vennDiagram-UO4OBE2U-CIPIrAYe.js → vennDiagram-UO4OBE2U-C5JzNX9G.js} +1 -1
  57. package/dist/assets/{wardleyDiagram-VNRHLVJA-BjCLuUvJ.js → wardleyDiagram-VNRHLVJA-DL1-PrR_.js} +1 -1
  58. package/dist/assets/{xychartDiagram-PMCCYNJV-DKgiaYxT.js → xychartDiagram-PMCCYNJV-Bvr1477p.js} +1 -1
  59. package/dist/index.html +2 -2
  60. package/dist-server/cloud-home-start.js +18 -3
  61. package/dist-server/container-mcp.js +84 -32
  62. package/dist-server/drivers/agents-proxy.js +11 -0
  63. package/dist-server/index.js +25183 -23580
  64. package/dist-server/openmausbot.js +313 -159
  65. package/dist-server/pair-cli.js +313 -159
  66. package/dist-server/server/boat.js +66 -21
  67. package/dist-server/server/bot-overview.js +7 -4
  68. package/dist-server/server/cloud-home-start.js +23 -5
  69. package/dist-server/server/cloud-home.js +25 -2
  70. package/dist-server/server/cloud-lending.js +103 -0
  71. package/dist-server/server/cloud-move-http.js +268 -0
  72. package/dist-server/server/cloud-move.js +418 -0
  73. package/dist-server/server/config.js +42 -4
  74. package/dist-server/server/decider/index.js +238 -0
  75. package/dist-server/server/decider/jev.js +183 -0
  76. package/dist-server/server/decider/log.js +62 -0
  77. package/dist-server/server/decider/relay.js +52 -0
  78. package/dist-server/server/decider/room-routing.js +88 -0
  79. package/dist-server/server/decider/types.js +5 -0
  80. package/dist-server/server/drivers/agents-catalog.js +16 -0
  81. package/dist-server/server/drivers/boatagent.js +20 -12
  82. package/dist-server/server/drivers/claude.js +1 -0
  83. package/dist-server/server/group-goal-run.js +6 -4
  84. package/dist-server/server/harness-capabilities.js +2 -0
  85. package/dist-server/server/included-services.js +70 -0
  86. package/dist-server/server/index.js +438 -102
  87. package/dist-server/server/model-context-window.js +4 -4
  88. package/dist-server/server/package-export.js +17 -10
  89. package/dist-server/server/package-import.js +6 -3
  90. package/dist-server/server/package-parts.js +3 -1
  91. package/dist-server/server/request-auth.js +2 -0
  92. package/dist-server/server/routes/decider.js +19 -0
  93. package/dist-server/server/shared-computers.js +116 -30
  94. package/dist-server/server/store.js +17 -2
  95. package/dist-server/server/surface.js +13 -0
  96. package/dist-server/server/system-prompt.js +11 -0
  97. package/dist-server/server/team-backup.js +6 -2
  98. package/dist-server/server/team-manifest.js +11 -3
  99. package/dist-server/server/tts/elevenlabs.js +11 -6
  100. package/dist-server/server/tts/index.js +17 -10
  101. package/dist-server/server/workspace-backup-policy.js +22 -3
  102. package/dist-server/server/workspace-backup.js +25 -8
  103. package/dist-server/shared/cloud-home.js +4 -0
  104. package/dist-server/shared/package-format.js +30 -4
  105. package/dist-server/shared/team-backup.js +20 -3
  106. package/dist-server/vps-container-mcp.js +84 -32
  107. package/dist-server/workspace-backup.worker.js +113 -31
  108. package/package.json +1 -1
  109. package/dist/assets/channel-BCuyHjFV.js +0 -1
  110. package/dist/assets/index-CRvo-DS2.css +0 -1
  111. package/dist/assets/index-CWYGlA63.js +0 -588
  112. package/dist/assets/swimlanesDiagram-TC7HE7FX-BZQ07DGE.js +0 -8
@@ -119,7 +119,7 @@ function probeLoginShellPath() {
119
119
 
120
120
  // server/config.ts
121
121
  import { homedir as homedir2 } from "node:os";
122
- import { join as join2 } from "node:path";
122
+ import { join as join3 } from "node:path";
123
123
 
124
124
  // node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
125
125
  var external_exports = {};
@@ -15639,6 +15639,72 @@ var remoteMutationSchema = remoteEntrySchema.extend({
15639
15639
  var CLOUD_SEAT_IDLE_STOP_MS = 5 * 6e4;
15640
15640
  var CLOUD_SEAT_SLEEP_RETRY_MAX_MS = 10 * 6e4;
15641
15641
 
15642
+ // server/proxy-paths.ts
15643
+ import { existsSync as existsSync2 } from "node:fs";
15644
+ import { dirname as dirname2, join as join2 } from "node:path";
15645
+ import { fileURLToPath } from "node:url";
15646
+ var SERVER_ROOT = dirname2(fileURLToPath(import.meta.url));
15647
+ function resolveProxy(relative) {
15648
+ const source = join2(SERVER_ROOT, `${relative}.ts`);
15649
+ return existsSync2(source) ? source : join2(SERVER_ROOT, `${relative}.js`);
15650
+ }
15651
+ var SPAWNED_PROXIES = {
15652
+ browser: resolveProxy("browser-proxy"),
15653
+ localComputer: resolveProxy("local-computer-proxy"),
15654
+ permission: resolveProxy("permission-proxy"),
15655
+ containerMcp: resolveProxy("container-mcp"),
15656
+ vpsContainerMcp: resolveProxy("vps-container-mcp"),
15657
+ agents: resolveProxy("drivers/agents-proxy"),
15658
+ dweb: resolveProxy("drivers/dweb-proxy"),
15659
+ connectors: resolveProxy("connector-proxy"),
15660
+ mcpGate: resolveProxy("mcp-gate"),
15661
+ phone: resolveProxy("drivers/phone-proxy"),
15662
+ hook: resolveProxy("hooks/omb-hook"),
15663
+ // Loaded by the external `pi` process via `-e`, not by this server — but
15664
+ // resolved through the same single source of truth so the packaged layout
15665
+ // check can assert it ships.
15666
+ piMcpExtension: resolveProxy("drivers/pi-mcp-extension")
15667
+ };
15668
+
15669
+ // server/enterprise.ts
15670
+ var layerSchema = external_exports.object({
15671
+ customer: external_exports.string().min(1),
15672
+ features: external_exports.array(external_exports.string().min(1)),
15673
+ expiresAt: external_exports.string().nullable()
15674
+ });
15675
+ var DAY_MS = 24 * 60 * 6e4;
15676
+
15677
+ // server/sessions.ts
15678
+ var PAIRING_CODE_TTL_MS = 5 * 6e4;
15679
+ function daysMs(value, fallbackDays) {
15680
+ const days = Number(value);
15681
+ const ok = Number.isInteger(days) && days >= 1 && days <= 3650;
15682
+ return (ok ? days : fallbackDays) * 24 * 60 * 6e4;
15683
+ }
15684
+ var SESSION_TTL_MS = daysMs(process.env.OMB_SESSION_TTL_DAYS, 30);
15685
+ var SESSION_MAX_AGE_MS = daysMs(process.env.OMB_SESSION_MAX_DAYS, 180);
15686
+ var SESSION_RENEW_WHEN_LEFT_MS = SESSION_TTL_MS / 2;
15687
+ var STREAM_TICKET_TTL_MS = 5 * 6e4;
15688
+ var scopeSchema = external_exports.enum(["admin", "client"]);
15689
+ var sessionSchema = external_exports.object({
15690
+ id: external_exports.string().min(1),
15691
+ tokenHash: external_exports.string().length(64),
15692
+ label: external_exports.string().max(80),
15693
+ scopes: external_exports.array(scopeSchema).min(1),
15694
+ createdAt: external_exports.number(),
15695
+ lastSeenAt: external_exports.number(),
15696
+ expiresAt: external_exports.number(),
15697
+ /** Set when the session came from an account sign-in rather than a code. */
15698
+ userId: external_exports.string().max(256).optional(),
15699
+ email: external_exports.string().max(320).optional(),
15700
+ /** Set only by the internal verified-portal issuance path, never by email or pairing input. */
15701
+ membershipAuthority: external_exports.literal("portal").optional()
15702
+ });
15703
+ var fileSchema = external_exports.object({ version: external_exports.literal(1), sessions: external_exports.array(sessionSchema) });
15704
+
15705
+ // server/cloud-home.ts
15706
+ var CLOUD_PAIRING_NONCE_MS = 10 * 6e4;
15707
+
15642
15708
  // server/config.ts
15643
15709
  var optionalText = external_exports.string().optional();
15644
15710
  var SSH_ALIAS = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
@@ -15970,6 +16036,19 @@ var appConfigSchema = external_exports.object({
15970
16036
  baseUrl: external_exports.string().trim().max(2048).refine((value) => !value || /^https?:\/\//i.test(value), "the Chatterbox server address must start with http:// or https://").optional(),
15971
16037
  model: optionalText
15972
16038
  }).optional(),
16039
+ /** The decision model (server/decider): a fast classifier that picks
16040
+ * things for bots, starting with who answers a room message. `key` is
16041
+ * write-only like every credential; `baseUrl` points at a Jev-compatible
16042
+ * server instead of TypeSafe's (an operator setting with no UI); `jobs`
16043
+ * switches each decision on or off. Not `decisions`: that section is the
16044
+ * authorization log's retention. */
16045
+ decider: external_exports.object({
16046
+ enabled: external_exports.boolean().optional(),
16047
+ provider: external_exports.enum(["jev", "off"]).optional(),
16048
+ key: optionalText,
16049
+ baseUrl: external_exports.string().trim().max(2048).refine((value) => !value || /^https?:\/\//i.test(value), "the decision model address must start with http:// or https://").optional(),
16050
+ jobs: external_exports.object({ roomRouting: external_exports.boolean().optional() }).optional()
16051
+ }).optional(),
15973
16052
  /** Avatar provider credentials stay separate; choosing a router never reuses a cloud key. */
15974
16053
  imageGen: external_exports.object({
15975
16054
  provider: external_exports.enum(["openai", "xai", "custom"]).optional(),
@@ -16039,37 +16118,10 @@ var storedAppConfigSchema = appConfigSchema.extend({
16039
16118
  var appConfigPatchSchema = appConfigSchema.omit({ instances: true, mcpServers: true, cliStartup: true, customDomain: true }).extend({ threads: threadsPatchSchema.optional(), newBots: newBotsPatchSchema.optional() });
16040
16119
  var jsonObjectSchema = external_exports.record(external_exports.string(), external_exports.json());
16041
16120
  var DEFAULT_CAPTURE_QUIET_MS = 2 * 6e4;
16042
- var DATA_DIR = process.env.OMB_DATA_DIR ?? join2(homedir2(), ".openmausbot");
16043
- var LEGACY_DATA_DIR = join2(homedir2(), ".opengrokbot");
16044
- var EVENTS_DIR = join2(DATA_DIR, "events");
16045
- var NATIVE_DIR = join2(DATA_DIR, "native");
16046
-
16047
- // server/proxy-paths.ts
16048
- import { existsSync as existsSync2 } from "node:fs";
16049
- import { dirname as dirname2, join as join3 } from "node:path";
16050
- import { fileURLToPath } from "node:url";
16051
- var SERVER_ROOT = dirname2(fileURLToPath(import.meta.url));
16052
- function resolveProxy(relative) {
16053
- const source = join3(SERVER_ROOT, `${relative}.ts`);
16054
- return existsSync2(source) ? source : join3(SERVER_ROOT, `${relative}.js`);
16055
- }
16056
- var SPAWNED_PROXIES = {
16057
- browser: resolveProxy("browser-proxy"),
16058
- localComputer: resolveProxy("local-computer-proxy"),
16059
- permission: resolveProxy("permission-proxy"),
16060
- containerMcp: resolveProxy("container-mcp"),
16061
- vpsContainerMcp: resolveProxy("vps-container-mcp"),
16062
- agents: resolveProxy("drivers/agents-proxy"),
16063
- dweb: resolveProxy("drivers/dweb-proxy"),
16064
- connectors: resolveProxy("connector-proxy"),
16065
- mcpGate: resolveProxy("mcp-gate"),
16066
- phone: resolveProxy("drivers/phone-proxy"),
16067
- hook: resolveProxy("hooks/omb-hook"),
16068
- // Loaded by the external `pi` process via `-e`, not by this server — but
16069
- // resolved through the same single source of truth so the packaged layout
16070
- // check can assert it ships.
16071
- piMcpExtension: resolveProxy("drivers/pi-mcp-extension")
16072
- };
16121
+ var DATA_DIR = process.env.OMB_DATA_DIR ?? join3(homedir2(), ".openmausbot");
16122
+ var LEGACY_DATA_DIR = join3(homedir2(), ".opengrokbot");
16123
+ var EVENTS_DIR = join3(DATA_DIR, "events");
16124
+ var NATIVE_DIR = join3(DATA_DIR, "native");
16073
16125
 
16074
16126
  // server/container-computer.ts
16075
16127
  var run = promisify(execFile2);
@@ -129,6 +129,7 @@ function catalogProfileFromEnv(env) {
129
129
  skillAuthoring: env.OMB_SKILL_AUTHORING_ENABLED === "1",
130
130
  sharedComputers: env.OMB_SHARED_COMPUTERS_ENABLED === "1",
131
131
  voiceNotes: env.OMB_VOICE_NOTES === "1",
132
+ cloudHome: env.OMB_CLOUD_HOME === "1",
132
133
  botId: env.OMB_BOT_ID ?? ""
133
134
  };
134
135
  }
@@ -853,7 +854,17 @@ var ROOM_ONLY_TOOLS = /* @__PURE__ */ new Set(["list_room_targets", "coordinate_
853
854
  var ROOM_REPLACED_TOOLS = /* @__PURE__ */ new Set(["ask_bot", "delegate_bot", "check_delegation", "wait_delegation", "start_thread", "send_to_thread", "wait_thread"]);
854
855
  var EXTERNAL_TOOL_NAMES = /* @__PURE__ */ new Set(["list_bots", "ask_bot", "delegate_bot", "check_delegation", "wait_delegation"]);
855
856
  var WATCHER_TOOL_NAMES = /* @__PURE__ */ new Set(["create_options_card"]);
857
+ var LOCAL_VM_TOOL_NAMES = /* @__PURE__ */ new Set(["vm_exec"]);
858
+ var CLOUD_HOME_SURFACE = {
859
+ type: "string",
860
+ enum: ["auto", "cloud", "browser"],
861
+ description: "auto = suitable configured computer, cloud = remote Boat/VPS, browser = built-in browser. Omit to list. This server runs in the cloud: the user's own computer and a Local VM are not places here."
862
+ };
856
863
  function availableTools(profile) {
864
+ const tools = catalogTools(profile);
865
+ return profile.cloudHome ? tools.filter((tool) => !LOCAL_VM_TOOL_NAMES.has(tool.name)).map((tool) => tool.name === "select_computer" ? { ...tool, inputSchema: { ...tool.inputSchema, properties: { surface: CLOUD_HOME_SURFACE } } } : tool) : tools;
866
+ }
867
+ function catalogTools(profile) {
857
868
  const TOOLS = toolDefinitions(profile.externalRuntime);
858
869
  const BOT_SCOPED_TOOLS = profile.botId === WATCHER_OPTIONS_CARD_BOT_ID ? TOOLS : TOOLS.filter((tool) => !WATCHER_TOOL_NAMES.has(tool.name));
859
870
  const AUTHORING_TOOLS = profile.skillAuthoring ? BOT_SCOPED_TOOLS : BOT_SCOPED_TOOLS.filter((tool) => !SKILL_TOOL_NAMES.has(tool.name));