openmausbot 0.1.89 → 0.1.90
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.
- package/dist/assets/{abnfDiagram-O67JEVCF-BwaMaZEm.js → abnfDiagram-O67JEVCF-DUyXd0kL.js} +1 -1
- package/dist/assets/{arc-Be-8GKxd.js → arc-q73qM-At.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-Dp_U2Kv1.js → architectureDiagram-NJMV4G6O-D33O3Wur.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-DQjUjYUk.js → blockDiagram-BEXU5L5S-DLsJeoXC.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-Bd3aE4Kc.js → c4Diagram-YGBWAQC7-DnaljZnu.js} +1 -1
- package/dist/assets/channel-BCuyHjFV.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BijjTBeJ.js → chunk-2Q5K7J3B-Da0h2i79.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-CMGdwvzW.js → chunk-3FUC2YCW-CfzHi54f.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-0G09BfsZ.js → chunk-5VM5RSS4-LjE4d9Jf.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-FOp3vSHe.js → chunk-GTNCS2PH-DY-UGmvc.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-Dv-20VIn.js → chunk-GWA4HPMP-BqeGhyhP.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CRgrdFcz.js → chunk-JWPE2WC7-BYa9EBAg.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-3hP4f7QB.js → chunk-NETBCI7D-vTrDtWyb.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-CG98IjlG.js → chunk-WEXAMYUT-ic5tXadM.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-BrSTC9xG.js → chunk-XXDRQBXY-DvRCY-c6.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-rpQQQDFX.js → classDiagram-v2-NBCMYWYE-DVbmgz_L.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-G6RSafHA.js → cose-bilkent-JH36ORCC-vdUs2n57.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-CXjv-IM2.js → cynefin-OW5HDTMX-BvLGlV3U.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-Dw07MR9f.js → cynefinDiagram-VND7K2PF-C4GcJQDt.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-BwPnlTg2.js → dagre-6A5THRUB-BMSaHpt_.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-Cm6xcMiz.js → diagram-22UHCM2B-D5b9UBhC.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-CDpogPbE.js → diagram-3UASUU5V-CIKLlB7Y.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-BV8z3Pnc.js → diagram-ATOU4E4O-BzXb-7k7.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-CKCQhOOC.js → diagram-CDSNMT55-HsTvJ7uT.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-FGvJg69C.js → diagram-MLGK6HIB-Db9ySNbQ.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-CwATvgnS.js → diagram-MPIPVDR6-D6BKbpqY.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-CH_c3SSC.js → ebnfDiagram-ZINNZB2B-Bq067L0t.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-3guZi71R.js → elk-276RUBZZ-DhaD7fNJ.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-BMHphR2n.js → erDiagram-OPXOYQCR-fwIhfz36.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-Vm5DkW5x.js → flowDiagram-KWPJA3E3-DygIyu0V.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-DO-1ct07.js → ganttDiagram-FUAMR5RP-DPYfSO96.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-nxeksEIN.js → gitGraphDiagram-X574FWY7-DhkHeCle.js} +1 -1
- package/dist/assets/index-CRvo-DS2.css +1 -0
- package/dist/assets/index-CWYGlA63.js +588 -0
- package/dist/assets/{index-Oxk9x45i.js → index-G1PHKGyh.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-Dkcvr0p7.js → infoDiagram-VRGFBTTK-DstBLxME.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-BwVibkoO.js → ishikawaDiagram-OU5B5YK6-CrIsGgch.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-ByiBZqgG.js → journeyDiagram-ZHPQQLJL-CYypGDbB.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-qqjgXBF3.js → kanban-definition-PNTS6WVX-DGjPt8E_.js} +1 -1
- package/dist/assets/{linear-CtJnKe6A.js → linear-Dwc3Hrru.js} +1 -1
- package/dist/assets/{mermaid.core-BEiDklrY.js → mermaid.core-Dc4OePBL.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-DfIYHia9.js → mindmap-definition-NLK3R4M7-DV-vepj-.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-CYyRqa1a.js → pegDiagram-GJSIUBJH-lx5Kj-n5.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-hOToy_zH.js → pieDiagram-5QR66LMP-Bq7Vmm15.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-DKAsNN9I.js → quadrantDiagram-O4NWA36T-DeqeqOBj.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-BSA-d8JU.js → railroadDiagram-XR7U4H2S-CXwRQzSC.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-CSmlvb-p.js → requirementDiagram-PLB6GJNP-8tAeoB88.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-CD5F6fnG.js → sankeyDiagram-IPEJSGJF-BG5zjGWU.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-JUq5sx6d.js → sequenceDiagram-PO4LG4MO-DKF3iLcw.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-BjIS-Stk.js → sizeCapture-INFHLROL-B-y1qUgT.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-DklkUxOg.js → stateDiagram-v2-GCMORJYK-MkzPgxAc.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-CsjIU6be.js → swimlanes-2SLR337P-DnbaOEwH.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-BZQ07DGE.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BkFqK7AB.js → timeline-definition-EJHVYXUP-Bb4xG_Bt.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-70gJB1EU.js → usecaseDiagram-POWQR4AR-JgkR9pFf.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-83Tm62dN.js → vennDiagram-UO4OBE2U-CIPIrAYe.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-tTmseoX9.js → wardleyDiagram-VNRHLVJA-BjCLuUvJ.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-R1LBA55a.js → xychartDiagram-PMCCYNJV-DKgiaYxT.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/cloud-home-start.js +14795 -0
- package/dist-server/container-mcp.js +52 -4
- package/dist-server/drivers/agents-proxy.js +20 -10
- package/dist-server/index.js +8985 -6461
- package/dist-server/openmausbot.js +327 -145
- package/dist-server/pair-cli.js +327 -145
- package/dist-server/permission-proxy.js +1 -1
- package/dist-server/server/admission.js +46 -0
- package/dist-server/server/{box-create-idempotency.js → boat-create-idempotency.js} +32 -31
- package/dist-server/server/{box-delete-journal.js → boat-delete-journal.js} +26 -25
- package/dist-server/server/{box.js → boat.js} +330 -328
- package/dist-server/server/bot-profile.js +7 -1
- package/dist-server/server/channel-queue.js +58 -18
- package/dist-server/server/checkpoints.js +98 -52
- package/dist-server/server/claim-idle.js +33 -0
- package/dist-server/server/cloud-backend.js +5 -5
- package/dist-server/server/cloud-home-start.js +103 -0
- package/dist-server/server/cloud-home.js +218 -0
- package/dist-server/server/cloud-overflow.js +167 -0
- package/dist-server/server/composio.js +5 -0
- package/dist-server/server/computer-observation.js +2 -2
- package/dist-server/server/config.js +115 -6
- package/dist-server/server/container-computer.js +13 -0
- package/dist-server/server/control-client.js +2 -2
- package/dist-server/server/delegations.js +11 -3
- package/dist-server/server/drivers/acp/core.js +5 -4
- package/dist-server/server/drivers/agents-call.js +5 -1
- package/dist-server/server/drivers/agents-catalog.js +9 -3
- package/dist-server/server/drivers/{boxagent.js → boatagent.js} +13 -12
- package/dist-server/server/drivers/builtIn.js +2 -2
- package/dist-server/server/drivers/{chat-box-tools.js → chat-boat-tools.js} +3 -3
- package/dist-server/server/drivers/chat-mcp-tools.js +2 -2
- package/dist-server/server/drivers/claude.js +177 -13
- package/dist-server/server/drivers/native.js +1 -1
- package/dist-server/server/drivers/openai-chat.js +15 -4
- package/dist-server/server/drivers/pi.js +3 -3
- package/dist-server/server/hosted-models.js +6 -1
- package/dist-server/server/index.js +1029 -479
- package/dist-server/server/local-vm-inventory.js +11 -1
- package/dist-server/server/local-vm-seat-pool.js +141 -0
- package/dist-server/server/managed-policy.js +4 -1
- package/dist-server/server/memory-capture.js +194 -0
- package/dist-server/server/memory-entries.js +76 -0
- package/dist-server/server/memory-organize.js +102 -0
- package/dist-server/server/memory-tidy.js +144 -0
- package/dist-server/server/memory-topics.js +169 -0
- package/dist-server/server/memory-upkeep.js +452 -0
- package/dist-server/server/message-db.js +49 -5
- package/dist-server/server/permission-proxy.js +3 -3
- package/dist-server/server/profile-learned.js +98 -0
- package/dist-server/server/profile-versions.js +45 -11
- package/dist-server/server/recall.js +172 -0
- package/dist-server/server/redact.js +1 -1
- package/dist-server/server/room-cwd.js +1 -1
- package/dist-server/server/room-handoffs.js +61 -6
- package/dist-server/server/routes/bot-memory.js +215 -0
- package/dist-server/server/routine-requests.js +27 -16
- package/dist-server/server/routines.js +10 -6
- package/dist-server/server/steer-queue.js +41 -10
- package/dist-server/server/store.js +25 -1
- package/dist-server/server/surface.js +1 -1
- package/dist-server/server/system-prompt.js +5 -5
- package/dist-server/server/team-computers.js +2 -2
- package/dist-server/server/tightening-requests.js +34 -4
- package/dist-server/server/tool-summary.js +2 -2
- package/dist-server/server/tts/elevenlabs.js +1 -1
- package/dist-server/server/turn-resources.js +87 -11
- package/dist-server/server/vps-computer.js +1 -1
- package/dist-server/server/workspace.js +57 -22
- package/dist-server/shared/ask-question.js +7 -5
- package/dist-server/shared/bot-avatar.js +19 -0
- package/dist-server/shared/credential-request.js +3 -3
- package/dist-server/shared/tool-surface.js +1 -1
- package/dist-server/src/lib/composer-attachments.js +9 -0
- package/dist-server/vps-container-mcp.js +52 -4
- package/dist-server/workspace-backup.worker.js +52 -4
- package/package.json +1 -1
- package/dist/assets/channel-DqY_gMLg.js +0 -1
- package/dist/assets/index-BIMdIbaw.css +0 -1
- package/dist/assets/index-BVPdbq2r.js +0 -583
- package/dist/assets/swimlanesDiagram-TC7HE7FX-Bk14M0_B.js +0 -8
|
@@ -14657,6 +14657,8 @@ function normalizeImageGenerationUrl(value) {
|
|
|
14657
14657
|
// shared/bot-avatar.ts
|
|
14658
14658
|
var BOT_AVATAR_CROPS = ["mascot", "circle", "rounded", "square"];
|
|
14659
14659
|
var botAvatarCropSchema = external_exports.enum(BOT_AVATAR_CROPS);
|
|
14660
|
+
var AVATAR_ZOOM_MIN = 1;
|
|
14661
|
+
var AVATAR_ZOOM_MAX = 3;
|
|
14660
14662
|
var botAvatarUrlSchema = external_exports.string().regex(
|
|
14661
14663
|
/^\/api\/attachments\/[A-Za-z0-9-]+\.(?:png|jpg|gif|webp)$/,
|
|
14662
14664
|
"must be a stored PNG, JPEG, GIF, or WebP attachment"
|
|
@@ -14695,6 +14697,9 @@ var profilePatchSchema = external_exports.object({
|
|
|
14695
14697
|
error: "avatarUrl must be a stored PNG, JPEG, GIF, or WebP attachment"
|
|
14696
14698
|
}).optional(),
|
|
14697
14699
|
avatarCrop: botAvatarCropSchema.optional(),
|
|
14700
|
+
avatarZoom: external_exports.number({ error: "avatarZoom must be a number from 1 to 3" }).finite().min(AVATAR_ZOOM_MIN).max(AVATAR_ZOOM_MAX).optional(),
|
|
14701
|
+
avatarFocusX: external_exports.number({ error: "avatarFocusX must be a number from 0 to 1" }).finite().min(0).max(1).optional(),
|
|
14702
|
+
avatarFocusY: external_exports.number({ error: "avatarFocusY must be a number from 0 to 1" }).finite().min(0).max(1).optional(),
|
|
14698
14703
|
mascotBody: mascotBodySchema.optional(),
|
|
14699
14704
|
voice: external_exports.string({ error: "voice must be a string" }).max(BOT_PROFILE_LIMITS.voice, { error: "voice must be at most 200 characters" }).optional(),
|
|
14700
14705
|
speakReplies: external_exports.boolean({ error: "speakReplies must be true or false" }).optional()
|
|
@@ -15630,6 +15635,10 @@ var remoteMutationSchema = remoteEntrySchema.extend({
|
|
|
15630
15635
|
headers: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional()
|
|
15631
15636
|
});
|
|
15632
15637
|
|
|
15638
|
+
// server/cloud-overflow.ts
|
|
15639
|
+
var CLOUD_SEAT_IDLE_STOP_MS = 5 * 6e4;
|
|
15640
|
+
var CLOUD_SEAT_SLEEP_RETRY_MAX_MS = 10 * 6e4;
|
|
15641
|
+
|
|
15633
15642
|
// server/config.ts
|
|
15634
15643
|
var optionalText = external_exports.string().optional();
|
|
15635
15644
|
var SSH_ALIAS = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
|
|
@@ -15671,7 +15680,8 @@ var browserEngineConfigSchema = external_exports.object({
|
|
|
15671
15680
|
var roomConfigSchema = external_exports.object({
|
|
15672
15681
|
turnTimeoutMinutes: external_exports.number().int().min(MIN_ROOM_TURN_TIMEOUT_MINUTES).max(MAX_ROOM_TURN_TIMEOUT_MINUTES),
|
|
15673
15682
|
/** Room handoff tree lifetime. Active execution pauses this clock; the
|
|
15674
|
-
* hard cap is
|
|
15683
|
+
* hard cap is the maximum stall window, measured wall-clock from the
|
|
15684
|
+
* tree's last durable progress. */
|
|
15675
15685
|
handoffLifetimeMinutes: external_exports.number().int().min(1).max(MAX_ROOM_TURN_TIMEOUT_MINUTES).optional(),
|
|
15676
15686
|
handoffMinRunwayMinutes: external_exports.number().int().min(1).max(MAX_ROOM_TURN_TIMEOUT_MINUTES).optional(),
|
|
15677
15687
|
handoffHardCapMinutes: external_exports.number().int().min(1).max(7 * MAX_ROOM_TURN_TIMEOUT_MINUTES).optional()
|
|
@@ -15680,7 +15690,7 @@ var roomConfigSchema = external_exports.object({
|
|
|
15680
15690
|
{ message: "rooms handoff bounds must satisfy handoffMinRunwayMinutes <= handoffLifetimeMinutes <= handoffHardCapMinutes" }
|
|
15681
15691
|
);
|
|
15682
15692
|
var localVmConfigSchema = external_exports.object({
|
|
15683
|
-
mode: external_exports.enum(["shared", "per-bot"]).optional(),
|
|
15693
|
+
mode: external_exports.enum(["shared", "per-bot", "pool"]).optional(),
|
|
15684
15694
|
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional()
|
|
15685
15695
|
});
|
|
15686
15696
|
var browserProfileSchema = external_exports.object({
|
|
@@ -15799,6 +15809,10 @@ var featureConfigSchema = external_exports.object({
|
|
|
15799
15809
|
skillAuthoring: external_exports.boolean().optional(),
|
|
15800
15810
|
/** Show each tool run in the transcript. Off unless explicitly enabled. */
|
|
15801
15811
|
showToolCalls: external_exports.boolean().optional(),
|
|
15812
|
+
/** Run a routine inside the conversation it reports to, instead of a hidden
|
|
15813
|
+
* thread. Off unless explicitly enabled. The run still starts from its own
|
|
15814
|
+
* instructions, but the messages stay in that chat. */
|
|
15815
|
+
routinesInConversation: external_exports.boolean().optional(),
|
|
15802
15816
|
/** Experimental built-in browser. Off until explicitly enabled; each bot
|
|
15803
15817
|
* also has its own switch. */
|
|
15804
15818
|
browser: external_exports.boolean().optional(),
|
|
@@ -15812,8 +15826,23 @@ var featureConfigSchema = external_exports.object({
|
|
|
15812
15826
|
claudeUserMcp: external_exports.boolean().optional(),
|
|
15813
15827
|
/** LLM-generated titles for new bot threads. Off until explicitly
|
|
15814
15828
|
* enabled; a one-shot that fails or answers junk leaves the first-message
|
|
15815
|
-
|
|
15816
|
-
llmThreadTitles: external_exports.boolean().optional()
|
|
15829
|
+
* snippet in place — see llmThreadTitlesEnabled. */
|
|
15830
|
+
llmThreadTitles: external_exports.boolean().optional(),
|
|
15831
|
+
/** Before each turn, passages from the bot's own memory files and earlier
|
|
15832
|
+
* conversations that share words with the message ride into the turn.
|
|
15833
|
+
* Read-only; on unless explicitly switched off — see autoRecallEnabled. */
|
|
15834
|
+
autoRecall: external_exports.boolean().optional(),
|
|
15835
|
+
/** Idle release for computer claims (#1653): a desktop seat that stays
|
|
15836
|
+
* screen-quiet for 90 seconds is released to waiting turns while its
|
|
15837
|
+
* holder's turn still lives; the previous holder re-claims directly
|
|
15838
|
+
* for 10 minutes and yields to an occupied seat. Off until baked; see
|
|
15839
|
+
* computerClaimIdleReleaseEnabled for how to enable it by hand. */
|
|
15840
|
+
computerClaimIdleRelease: external_exports.boolean().optional(),
|
|
15841
|
+
/** Consented cloud overflow for local computer waits (#1655): a wait
|
|
15842
|
+
* may offer a per-second-billed cloud seat, but only through an explicit
|
|
15843
|
+
* consent card or a configured allowlist — never a silent Auto default.
|
|
15844
|
+
* Off until baked; see cloudOverflowEnabled for how to enable it by hand. */
|
|
15845
|
+
cloudOverflow: external_exports.boolean().optional()
|
|
15817
15846
|
});
|
|
15818
15847
|
var onboardingConfigSchema = external_exports.object({
|
|
15819
15848
|
/** ISO timestamp of finishing (or skipping to the end of) the welcome flow. */
|
|
@@ -15920,6 +15949,8 @@ var appConfigSchema = external_exports.object({
|
|
|
15920
15949
|
/** Project key used for Sessions, catalog and agent tools. userId/sessionId
|
|
15921
15950
|
* are non-secret local identifiers used to reuse one Composio Session. */
|
|
15922
15951
|
composio: external_exports.object({ apiKey: optionalText, userId: optionalText, sessionId: optionalText }).optional(),
|
|
15952
|
+
/** Historical config section name "box" (the persisted config.json key); the
|
|
15953
|
+
* provider is Boat now and the key is kept for compatibility. */
|
|
15923
15954
|
box: external_exports.object({ token: optionalText }).optional(),
|
|
15924
15955
|
vps: vpsConfigSchema.optional(),
|
|
15925
15956
|
/** Optional OpenCode key; persisted write-only and passed only to its child. */
|
|
@@ -15969,10 +16000,26 @@ var appConfigSchema = external_exports.object({
|
|
|
15969
16000
|
compactAt: external_exports.number().positive().max(1e7).optional(),
|
|
15970
16001
|
autoCompact: external_exports.boolean().optional()
|
|
15971
16002
|
}).optional(),
|
|
16003
|
+
/** Memory upkeep timing, for bots with Memory upkeep switched on. */
|
|
16004
|
+
memory: external_exports.object({
|
|
16005
|
+
/** Quiet time after a turn before its facts are captured (ms). */
|
|
16006
|
+
captureQuietMs: external_exports.number().int().min(1e3).max(24 * 60 * 6e4).optional(),
|
|
16007
|
+
/** Local hour (0-23) after which the nightly tidy-up runs. */
|
|
16008
|
+
tidyHour: external_exports.number().int().min(0).max(23).optional()
|
|
16009
|
+
}).strict().optional(),
|
|
15972
16010
|
threads: threadsConfigSchema.optional(),
|
|
15973
16011
|
/** The authorization decision log (server/decision-log.ts): days of month
|
|
15974
16012
|
* files kept, at least; OMB_DECISION_RETENTION_DAYS wins when set. */
|
|
15975
16013
|
decisions: external_exports.object({ retentionDays: external_exports.number().int().min(1).max(3650).optional() }).strict().optional(),
|
|
16014
|
+
/** #1655 cloud-overflow settings. perSecondCostUsd is the operator's own
|
|
16015
|
+
* verified rate: with no price configured the feature stays inert rather
|
|
16016
|
+
* than show an invented one. allowlistedThreads carries standing consent
|
|
16017
|
+
* for exact thread ids. */
|
|
16018
|
+
cloudOverflow: external_exports.object({
|
|
16019
|
+
perSecondCostUsd: external_exports.number().positive().max(10).optional(),
|
|
16020
|
+
idleStopMs: external_exports.number().int().positive().max(24 * 60 * 6e4).optional(),
|
|
16021
|
+
allowlistedThreads: external_exports.array(external_exports.string().min(1)).max(1e3).optional()
|
|
16022
|
+
}).strict().optional(),
|
|
15976
16023
|
localVm: localVmConfigSchema.optional(),
|
|
15977
16024
|
features: featureConfigSchema.optional(),
|
|
15978
16025
|
onboarding: onboardingConfigSchema.optional(),
|
|
@@ -15991,6 +16038,7 @@ var storedAppConfigSchema = appConfigSchema.extend({
|
|
|
15991
16038
|
});
|
|
15992
16039
|
var appConfigPatchSchema = appConfigSchema.omit({ instances: true, mcpServers: true, cliStartup: true, customDomain: true }).extend({ threads: threadsPatchSchema.optional(), newBots: newBotsPatchSchema.optional() });
|
|
15993
16040
|
var jsonObjectSchema = external_exports.record(external_exports.string(), external_exports.json());
|
|
16041
|
+
var DEFAULT_CAPTURE_QUIET_MS = 2 * 6e4;
|
|
15994
16042
|
var DATA_DIR = process.env.OMB_DATA_DIR ?? join2(homedir2(), ".openmausbot");
|
|
15995
16043
|
var LEGACY_DATA_DIR = join2(homedir2(), ".opengrokbot");
|
|
15996
16044
|
var EVENTS_DIR = join2(DATA_DIR, "events");
|
|
@@ -16,9 +16,9 @@ var CREDENTIAL_TARGETS = {
|
|
|
16
16
|
helpUrl: "https://console.x.ai/"
|
|
17
17
|
},
|
|
18
18
|
boxToken: {
|
|
19
|
-
label: "
|
|
20
|
-
description: "Gives bots an isolated cloud computer when
|
|
21
|
-
placeholder: "Paste your
|
|
19
|
+
label: "Boat API key",
|
|
20
|
+
description: "Gives bots an isolated cloud computer when Boat is selected.",
|
|
21
|
+
placeholder: "Paste your Boat API key",
|
|
22
22
|
helpUrl: "https://docs.boat.dev/api-keys"
|
|
23
23
|
},
|
|
24
24
|
opencodeGoApiKey: {
|
|
@@ -222,8 +222,9 @@ var ROUTINE_FIELDS_SCHEMA = {
|
|
|
222
222
|
schedule: ROUTINE_SCHEDULE_SCHEMA,
|
|
223
223
|
run_on: {
|
|
224
224
|
type: "string",
|
|
225
|
+
// "box" is Boat's historical run_on destination id (agents wire contract).
|
|
225
226
|
enum: ["maus", "box"],
|
|
226
|
-
description: "Default maus keeps the bot's selected model and configured computer, INCLUDING a self-hosted VPS. Omit this field for normal schedules. box explicitly switches the agent to the
|
|
227
|
+
description: "Default maus keeps the bot's selected model and configured computer, INCLUDING a self-hosted VPS. Omit this field for normal schedules. box explicitly switches the agent to the Boat-hosted runner; it requires Boat setup and is not the generic cloud/VPS option. Legacy cloud values from list_routines mean box, not VPS."
|
|
227
228
|
},
|
|
228
229
|
timeout_minutes: {
|
|
229
230
|
type: "integer",
|
|
@@ -383,7 +384,7 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
383
384
|
surface: {
|
|
384
385
|
type: "string",
|
|
385
386
|
enum: ["auto", "cloud", "vm", "local", "browser"],
|
|
386
|
-
description: "auto = suitable configured computer, cloud = remote
|
|
387
|
+
description: "auto = suitable configured computer, cloud = remote Boat/VPS, vm = isolated Local VM, local = user's own desktop, browser = built-in browser. Omit to list."
|
|
387
388
|
}
|
|
388
389
|
} }
|
|
389
390
|
},
|
|
@@ -625,7 +626,8 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
625
626
|
properties: {
|
|
626
627
|
action: { type: "string", enum: ["append", "replace", "remove", "supersede"] },
|
|
627
628
|
text: { type: "string", minLength: 1, description: "Non-blank new text for append, replace, or supersede: the fact itself, without a date or bullet. Omit for remove; use remove to delete a passage." },
|
|
628
|
-
old_text: { type: "string", minLength: 1, description: "Exact unique existing passage for replace, supersede, or remove. Omit for append." }
|
|
629
|
+
old_text: { type: "string", minLength: 1, description: "Exact unique existing passage for replace, supersede, or remove. Omit for append." },
|
|
630
|
+
until: { type: "string", pattern: "^\\d{4}-\\d{2}-\\d{2}$", description: "Optional, for append or supersede: YYYY-MM-DD, the last day a temporary fact holds (an exam this weekend, a trip next week). After that day the entry is hidden from your memory." }
|
|
629
631
|
},
|
|
630
632
|
required: ["action"]
|
|
631
633
|
}
|
|
@@ -717,12 +719,16 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
717
719
|
},
|
|
718
720
|
{
|
|
719
721
|
name: "propose_routine_action",
|
|
720
|
-
description: "Prepare a user-requested change to one of this bot's existing routines. Use list_routines first to get the routine id." + PROPOSAL_OUTCOME,
|
|
722
|
+
description: "Prepare a user-requested change to one of this bot's existing routines. Use list_routines first to get the routine id. If the user asks to change ANOTHER bot's routine and that bot is in your section, call list_bots and pass that bot's id as for_bot_id; the routine keeps its owner and every run keeps that bot's engine and permissions." + PROPOSAL_OUTCOME,
|
|
721
723
|
inputSchema: {
|
|
722
724
|
type: "object",
|
|
723
725
|
additionalProperties: false,
|
|
724
726
|
properties: {
|
|
725
727
|
routine_id: { type: "string", minLength: 1, description: "Routine id from list_routines." },
|
|
728
|
+
for_bot_id: {
|
|
729
|
+
type: "string",
|
|
730
|
+
description: "Only when the requested change targets ANOTHER bot's routine and that bot is in your section: that bot's id from list_bots. Learn the routine id from that bot's own routines (it can run list_routines). Omit to change one of your own routines."
|
|
731
|
+
},
|
|
726
732
|
action: {
|
|
727
733
|
type: "string",
|
|
728
734
|
enum: ["update", "pause", "resume", "run_now", "delete"],
|
|
@@ -16419,7 +16425,7 @@ function routineFields(args) {
|
|
|
16419
16425
|
const runOn = destination(args.run_on ?? args.runOn);
|
|
16420
16426
|
const timeoutMinutes = args.timeout_minutes ?? args.timeoutMinutes;
|
|
16421
16427
|
if (runOn != null && runOn !== "maus" && runOn !== "cloud") {
|
|
16422
|
-
return { fields, error: 'Use run_on="maus" for the bot\u2019s current model and configured computer (including VPS), or run_on="box" only for the
|
|
16428
|
+
return { fields, error: 'Use run_on="maus" for the bot\u2019s current model and configured computer (including VPS), or run_on="box" only for the Boat-hosted agent. Legacy "cloud" also means Boat.' };
|
|
16423
16429
|
}
|
|
16424
16430
|
if (timeoutMinutes != null && (typeof timeoutMinutes !== "number" || !Number.isInteger(timeoutMinutes) || timeoutMinutes < 5 || timeoutMinutes > 240)) {
|
|
16425
16431
|
return { fields, error: "timeout_minutes must be a whole number from 5 to 240. Use clear_timeout to remove a limit." };
|
|
@@ -17044,11 +17050,14 @@ ${JSON.stringify(routines, null, 2)}`
|
|
|
17044
17050
|
if (!routineId || !action) {
|
|
17045
17051
|
return { text: "propose_routine_action needs a routine_id and supported action.", isError: true };
|
|
17046
17052
|
}
|
|
17053
|
+
const forBotId = String(args.for_bot_id ?? "").trim();
|
|
17047
17054
|
const body = {
|
|
17048
17055
|
fromBotId: BOT_ID,
|
|
17049
17056
|
fromThreadId: THREAD_ID,
|
|
17050
17057
|
action,
|
|
17051
|
-
routineId
|
|
17058
|
+
routineId,
|
|
17059
|
+
// JSON.stringify drops the key entirely when no target was named
|
|
17060
|
+
...forBotId ? { forBotId } : {}
|
|
17052
17061
|
};
|
|
17053
17062
|
if (action === "update") {
|
|
17054
17063
|
if (!jsonRecord(args.changes)) {
|
|
@@ -17141,7 +17150,8 @@ ${JSON.stringify(routines, null, 2)}`
|
|
|
17141
17150
|
fromThreadId: THREAD_ID,
|
|
17142
17151
|
action: args.action,
|
|
17143
17152
|
text: args.text,
|
|
17144
|
-
oldText: args.old_text
|
|
17153
|
+
oldText: args.old_text,
|
|
17154
|
+
...typeof args.until === "string" && args.until.trim() ? { until: args.until.trim() } : {}
|
|
17145
17155
|
})
|
|
17146
17156
|
});
|
|
17147
17157
|
if (r.error || r.ok !== true) {
|