openmausbot 0.1.86 → 0.1.88
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/README.md +4 -3
- package/dist/assets/{abnfDiagram-O67JEVCF-DpUZNnFD.js → abnfDiagram-O67JEVCF-qd9VD3GV.js} +1 -1
- package/dist/assets/{arc-DW7mrI4p.js → arc-3RwkUjRe.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-CyeZ5WLZ.js → architectureDiagram-NJMV4G6O-CFKSJS7a.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-CBVaNjO7.js → blockDiagram-BEXU5L5S-CG1rEfWD.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-sf8d41uT.js → c4Diagram-YGBWAQC7-CBW9N664.js} +1 -1
- package/dist/assets/channel-CnRnO3tF.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BOGvy7Y_.js → chunk-2Q5K7J3B-2mRfTksB.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-BiF9zyiz.js → chunk-3FUC2YCW-Cv1dpErj.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-EFuZ1SBZ.js → chunk-5VM5RSS4-B7IACJp-.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-pJLNSAT7.js → chunk-GTNCS2PH-An0hZtYa.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-Cb-3_3IT.js → chunk-GWA4HPMP-BcJB2nEm.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-DAf5aogn.js → chunk-JWPE2WC7-CV_W7TN7.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-DR3kiwZz.js → chunk-NETBCI7D-Bcs_kwnA.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-BmU8PeyM.js → chunk-WEXAMYUT-lrx_DxFP.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-Buh8g8OT.js → chunk-XXDRQBXY-DabHlLGM.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-BurfmMWM.js → classDiagram-v2-NBCMYWYE-BnHj6P7d.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-KkGZUEkU.js → cose-bilkent-JH36ORCC-CfLp6UDi.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-C3PpV96d.js → cynefin-OW5HDTMX-Dm4dbVA1.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-Dt8JwJaI.js → cynefinDiagram-VND7K2PF-B9mH-PID.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-DkjN8266.js → dagre-6A5THRUB-DDc_NVQJ.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-DUAJS0JV.js → diagram-22UHCM2B-lwr8Ip8-.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-Dw4KhF1a.js → diagram-3UASUU5V-BLLe6dmI.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-Dd1gmQqf.js → diagram-ATOU4E4O-6eUIq4lz.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-CjwGs0Yw.js → diagram-CDSNMT55-O-pRN7VQ.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-BL-69Zrq.js → diagram-MLGK6HIB-BietvGAI.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-5Zi2N7wo.js → diagram-MPIPVDR6-Bd2Cl62X.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-D9NekWUX.js → ebnfDiagram-ZINNZB2B-B6iDy69W.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-CkaSQjxw.js → elk-276RUBZZ-DQVHfKe0.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-CdAVBV8-.js → erDiagram-OPXOYQCR-BWdVp2tQ.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-Bm_lWWH7.js → flowDiagram-KWPJA3E3-WLE6rKB4.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-FZ8ejYWJ.js → ganttDiagram-FUAMR5RP-BbjS-4gn.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-Dlv9rizZ.js → gitGraphDiagram-X574FWY7-Dpy2QSGq.js} +1 -1
- package/dist/assets/index-BIMdIbaw.css +1 -0
- package/dist/assets/index-CHnODCr2.js +583 -0
- package/dist/assets/{index-h9FFNwTu.js → index-CIaHn5NS.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-BdQ_gW5B.js → infoDiagram-VRGFBTTK-D_jKWlKe.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-EwssEp2X.js → ishikawaDiagram-OU5B5YK6-DLJohSuK.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-BX1G1vOd.js → journeyDiagram-ZHPQQLJL-DPOFj0qN.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-BB4kAsyC.js → kanban-definition-PNTS6WVX-BI7v-xpK.js} +1 -1
- package/dist/assets/{linear-3su2TG93.js → linear-C2pWPSxO.js} +1 -1
- package/dist/assets/{mermaid.core-CDD1E0s9.js → mermaid.core-CR-j5WQU.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-Ba50MsNK.js → mindmap-definition-NLK3R4M7-lz9GvXRh.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-DZLkkZlM.js → pegDiagram-GJSIUBJH-Dl4_ia61.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-DaTz77Uq.js → pieDiagram-5QR66LMP-DWuT3n88.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-CpaiidpR.js → quadrantDiagram-O4NWA36T-DXWe9Jx7.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-mN4JrMeI.js → railroadDiagram-XR7U4H2S-COY1IBVY.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-BSNDRpg7.js → requirementDiagram-PLB6GJNP-DnyVuhsQ.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-FngzGNug.js → sankeyDiagram-IPEJSGJF-BSc4NdGK.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-CM4pCC3L.js → sequenceDiagram-PO4LG4MO-kqEU2EGq.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-CRICHXkw.js → sizeCapture-INFHLROL-BvB4bkWD.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-oyTWpxH2.js → stateDiagram-v2-GCMORJYK-BIrqNv7y.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-D9h9mPBq.js → swimlanes-2SLR337P-CFnalQUE.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-C4a8qNGj.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BJUlN9bW.js → timeline-definition-EJHVYXUP-CsSWJnSQ.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-3uBNkbAb.js → usecaseDiagram-POWQR4AR-DkAmJ1EE.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-D2odalzT.js → vennDiagram-UO4OBE2U-C3vd9drL.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-DHgFaB9S.js → wardleyDiagram-VNRHLVJA-j26CM-pi.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-w5GYM2h0.js → xychartDiagram-PMCCYNJV-BYu1Q_at.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/browser-proxy.js +2 -1
- package/dist-server/companion/src/routes.js +8 -1
- package/dist-server/connector-proxy.js +105 -1
- package/dist-server/container-mcp.js +1032 -165
- package/dist-server/drivers/agents-proxy.js +338 -29
- package/dist-server/drivers/phone-proxy.js +33 -2
- package/dist-server/index.js +40590 -31811
- package/dist-server/local-computer-proxy.js +5 -3
- package/dist-server/local-computer.js +53 -17
- package/dist-server/mcp-gate.js +2 -0
- package/dist-server/mcp-server.js +5 -3
- package/dist-server/message-search.worker.js +52 -0
- package/dist-server/openmausbot.js +4457 -1399
- package/dist-server/pair-cli.js +4457 -1399
- package/dist-server/permission-proxy.js +29 -9
- package/dist-server/server/admission.js +81 -0
- package/dist-server/server/aside-queue.js +294 -0
- package/dist-server/server/attachments.js +98 -1
- package/dist-server/server/auto-approve.js +4 -3
- package/dist-server/server/auto-vm-claims.js +1 -0
- package/dist-server/server/bot-attachment.js +107 -0
- package/dist-server/server/bot-overview.js +19 -0
- package/dist-server/server/bot-package.js +18 -292
- package/dist-server/server/bot-profile.js +5 -17
- package/dist-server/server/box-create-idempotency.js +3 -3
- package/dist-server/server/box.js +57 -55
- package/dist-server/server/browser-proxy.js +3 -2
- package/dist-server/server/browser-runtime.js +37 -1
- package/dist-server/server/cli-api-setup.js +1 -0
- package/dist-server/server/cli.js +2 -2
- package/dist-server/server/command-allowlist.js +154 -0
- package/dist-server/server/composio.js +297 -1
- package/dist-server/server/computer-wait.js +22 -9
- package/dist-server/server/config.js +84 -12
- package/dist-server/server/connector-advertisement.js +165 -0
- package/dist-server/server/connector-proxy.js +14 -2
- package/dist-server/server/connector-verdict.js +168 -0
- package/dist-server/server/container-computer.js +61 -1
- package/dist-server/server/contracts.js +22 -0
- package/dist-server/server/default-model-selection.js +9 -0
- package/dist-server/server/delegations.js +85 -34
- package/dist-server/server/drivers/acp/core.js +80 -20
- package/dist-server/server/drivers/acp/cursor.js +3 -7
- package/dist-server/server/drivers/acp/droid.js +4 -7
- package/dist-server/server/drivers/acp/gemini.js +4 -4
- package/dist-server/server/drivers/acp/grok.js +4 -9
- package/dist-server/server/drivers/acp/hermes.js +3 -5
- package/dist-server/server/drivers/acp/opencode-go.js +2 -5
- package/dist-server/server/drivers/acp/qwen.js +9 -15
- package/dist-server/server/drivers/agents-call.js +179 -13
- package/dist-server/server/drivers/agents-catalog.js +134 -10
- package/dist-server/server/drivers/boxagent.js +160 -36
- package/dist-server/server/drivers/builtIn.js +2 -0
- package/dist-server/server/drivers/chat-box-tools.js +90 -0
- package/dist-server/server/drivers/chat-images.js +54 -0
- package/dist-server/server/drivers/chat-mcp-tools.js +38 -8
- package/dist-server/server/drivers/chat-tool-approval.js +70 -18
- package/dist-server/server/drivers/claude.js +38 -19
- package/dist-server/server/drivers/codex-catalog.js +14 -6
- package/dist-server/server/drivers/codex-identity.js +2 -1
- package/dist-server/server/drivers/codex-instructions.js +48 -6
- package/dist-server/server/drivers/codex-release.js +48 -0
- package/dist-server/server/drivers/codex-tool-surface.js +20 -0
- package/dist-server/server/drivers/codex.js +102 -55
- package/dist-server/server/drivers/mistral.js +115 -0
- package/dist-server/server/drivers/openai-chat.js +180 -33
- package/dist-server/server/drivers/openai-compat.js +1 -0
- package/dist-server/server/drivers/permission-command.js +35 -0
- package/dist-server/server/drivers/phone-proxy.js +47 -2
- package/dist-server/server/drivers/pi.js +306 -28
- package/dist-server/server/drivers/prompt-split.js +110 -0
- package/dist-server/server/drivers/session-idle.js +29 -0
- package/dist-server/server/env-path.js +15 -0
- package/dist-server/server/fleet.js +1 -1
- package/dist-server/server/group-thread-usage.js +103 -0
- package/dist-server/server/guarded-requests.js +2 -2
- package/dist-server/server/harness/registry.js +1 -0
- package/dist-server/server/harness-capabilities.js +46 -0
- package/dist-server/server/hosted-models.js +1 -1
- package/dist-server/server/index.js +2396 -505
- package/dist-server/server/local-computer.js +72 -23
- package/dist-server/server/managed-desktop.js +1 -1
- package/dist-server/server/mcp-bridge.js +6 -6
- package/dist-server/server/message-db.js +22 -42
- package/dist-server/server/message-file.js +9 -1
- package/dist-server/server/message-search-query.js +43 -0
- package/dist-server/server/message-search-worker.js +80 -0
- package/dist-server/server/message-search.worker.js +21 -0
- package/dist-server/server/model-requests.js +248 -0
- package/dist-server/server/new-bot-defaults.js +115 -0
- package/dist-server/server/options-card.js +21 -0
- package/dist-server/server/org-library.js +1065 -0
- package/dist-server/server/package-export.js +627 -39
- package/dist-server/server/package-import.js +458 -0
- package/dist-server/server/package-parts.js +87 -0
- package/dist-server/server/peer-approval.js +16 -7
- package/dist-server/server/peer-delivery.js +60 -0
- package/dist-server/server/peer-roster.js +67 -0
- package/dist-server/server/presets.js +492 -0
- package/dist-server/server/profile-requests.js +66 -39
- package/dist-server/server/profile-revision.js +9 -1
- package/dist-server/server/profile-versions.js +6 -3
- package/dist-server/server/provider-key-check.js +3 -2
- package/dist-server/server/published-teams.js +80 -0
- package/dist-server/server/room-handoffs.js +19 -3
- package/dist-server/server/routes/bot-presets.js +25 -0
- package/dist-server/server/routine-requests.js +35 -10
- package/dist-server/server/routines.js +41 -1
- package/dist-server/server/section-context.js +10 -0
- package/dist-server/server/skill-fetch.js +72 -14
- package/dist-server/server/skills.js +35 -61
- package/dist-server/server/steer-queue.js +3 -2
- package/dist-server/server/store.js +291 -17
- package/dist-server/server/surface.js +10 -4
- package/dist-server/server/system-prompt.js +38 -6
- package/dist-server/server/team-backup.js +6 -2
- package/dist-server/server/team-computers.js +10 -0
- package/dist-server/server/team-library.js +6 -2
- package/dist-server/server/team-manifest.js +4 -3
- package/dist-server/server/team-setup-requests.js +139 -27
- package/dist-server/server/thread-events.js +20 -2
- package/dist-server/server/tightening-requests.js +405 -0
- package/dist-server/server/tts/chatterbox.js +27 -5
- package/dist-server/server/turn-context.js +2 -0
- package/dist-server/server/turn-watchdog.js +12 -3
- package/dist-server/server/usage-ledger.js +19 -2
- package/dist-server/server/vps-computer.js +139 -51
- package/dist-server/server/vps-container-mcp.js +7 -0
- package/dist-server/server/vps-ssh.js +36 -7
- package/dist-server/server/workspace-backup-policy.js +12 -0
- package/dist-server/server/workspace-backup.js +42 -5
- package/dist-server/server/workspace-backup.worker.js +10 -0
- package/dist-server/server/workspace.js +1 -1
- package/dist-server/shared/approval-mode.js +1 -1
- package/dist-server/shared/ask-question.js +207 -12
- package/dist-server/shared/bot-profile.js +15 -0
- package/dist-server/shared/command-allowlist.js +1 -0
- package/dist-server/shared/credential-request.js +6 -2
- package/dist-server/shared/line-diff.js +23 -0
- package/dist-server/shared/model-request.js +1 -0
- package/dist-server/shared/options-card.js +51 -0
- package/dist-server/shared/package-format.js +967 -0
- package/dist-server/shared/profile-request.js +5 -4
- package/dist-server/shared/skill-md.js +64 -0
- package/dist-server/shared/team-backup.js +7 -0
- package/dist-server/shared/tightening-request.js +87 -0
- package/dist-server/shared/wire.js +4 -0
- package/dist-server/src/lib/composer-attachments.js +25 -3
- package/dist-server/vps-container-mcp.js +1132 -171
- package/dist-server/workspace-backup.worker.js +19474 -0
- package/enterprise/README.md +1 -1
- package/package.json +1 -1
- package/dist/assets/channel-BXFkgus9.js +0 -1
- package/dist/assets/index-BGgqlWPJ.css +0 -1
- package/dist/assets/index-BtHo8ZKl.js +0 -577
- package/dist/assets/swimlanesDiagram-TC7HE7FX-BWrvB2ak.js +0 -8
|
@@ -250,7 +250,7 @@ export function initPlan(input) {
|
|
|
250
250
|
...(input.operator ? [{ kind: "run", argv: ["systemctl", "enable", "--now", "openmausbot-fleet.service"], why: `start the fleet agent for ${input.operator}` }] : []),
|
|
251
251
|
{ kind: "run", argv: ["systemctl", "reload", "caddy"], why: "start serving the workspaces folder" },
|
|
252
252
|
{ kind: "note", text: `point *.${registry.domain} at this server (a wildcard A/AAAA record); each workspace gets its own certificate when created` },
|
|
253
|
-
...(input.operator ? [{ kind: "note", text: `the
|
|
253
|
+
...(input.operator ? [{ kind: "note", text: `the installation running as ${input.operator} can now manage installations from Settings → Installations` }] : []),
|
|
254
254
|
];
|
|
255
255
|
return { steps, registry };
|
|
256
256
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const finite = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
4
|
+
const valid = (row) => Boolean(row && typeof row.threadId === "string" && typeof row.botId === "string" && typeof row.at === "string" && Number.isFinite(Date.parse(row.at)) && finite(row.input) && finite(row.output));
|
|
5
|
+
function addRow(totals, row) {
|
|
6
|
+
const summary = totals.get(row.threadId) ?? { usage: { input: 0, output: 0, costUsd: null, turns: 0, cachedInput: 0 }, lastAt: -Infinity };
|
|
7
|
+
const total = summary.usage;
|
|
8
|
+
const input = Math.trunc(row.input), output = Math.trunc(row.output);
|
|
9
|
+
const cached = finite(row.cachedInput) ? Math.min(input, Math.trunc(row.cachedInput)) : undefined;
|
|
10
|
+
total.input += input;
|
|
11
|
+
total.output += output;
|
|
12
|
+
total.turns++;
|
|
13
|
+
if (cached === undefined)
|
|
14
|
+
delete total.cachedInput;
|
|
15
|
+
else if (total.cachedInput !== undefined)
|
|
16
|
+
total.cachedInput += cached;
|
|
17
|
+
if (finite(row.costUsd))
|
|
18
|
+
total.costUsd = (total.costUsd ?? 0) + row.costUsd;
|
|
19
|
+
const at = Date.parse(row.at);
|
|
20
|
+
if (at >= summary.lastAt) {
|
|
21
|
+
summary.lastAt = at;
|
|
22
|
+
total.lastTurn = { input, output, ...(cached === undefined ? {} : { cachedInput: cached }), costUsd: finite(row.costUsd) ? row.costUsd : null };
|
|
23
|
+
total.lastSpeaker = { botId: row.botId, name: typeof row.botName === "string" && row.botName ? row.botName : row.botId };
|
|
24
|
+
}
|
|
25
|
+
totals.set(row.threadId, summary);
|
|
26
|
+
}
|
|
27
|
+
/** Cache per-month/per-thread summaries, not the complete ledger in memory. */
|
|
28
|
+
export class GroupUsageReader {
|
|
29
|
+
files = new Map();
|
|
30
|
+
signature = "";
|
|
31
|
+
totals = new Map();
|
|
32
|
+
dataDir;
|
|
33
|
+
constructor(dataDir) { this.dataDir = dataDir; }
|
|
34
|
+
/** Refresh only at startup or after ledger persistence, never on an SSE lookup. */
|
|
35
|
+
refresh() {
|
|
36
|
+
const dir = join(this.dataDir, "usage");
|
|
37
|
+
let names;
|
|
38
|
+
try {
|
|
39
|
+
names = readdirSync(dir).filter(name => /^\d{4}-\d{2}\.jsonl$/.test(name)).sort();
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error.code !== "ENOENT")
|
|
43
|
+
throw error;
|
|
44
|
+
names = [];
|
|
45
|
+
}
|
|
46
|
+
const files = names.map(name => {
|
|
47
|
+
const stat = statSync(join(dir, name));
|
|
48
|
+
return { name, stamp: `${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}:${stat.ino}` };
|
|
49
|
+
});
|
|
50
|
+
const signature = JSON.stringify(files);
|
|
51
|
+
if (signature !== this.signature) {
|
|
52
|
+
const next = new Map();
|
|
53
|
+
for (const { name, stamp } of files) {
|
|
54
|
+
let entry = this.files.get(name);
|
|
55
|
+
if (entry?.stamp !== stamp) {
|
|
56
|
+
const totals = new Map();
|
|
57
|
+
for (const line of readFileSync(join(dir, name), "utf8").split("\n")) {
|
|
58
|
+
try {
|
|
59
|
+
const row = JSON.parse(line);
|
|
60
|
+
if (valid(row))
|
|
61
|
+
addRow(totals, row);
|
|
62
|
+
}
|
|
63
|
+
catch { /* incomplete or damaged row */ }
|
|
64
|
+
}
|
|
65
|
+
entry = { stamp, totals };
|
|
66
|
+
}
|
|
67
|
+
next.set(name, entry);
|
|
68
|
+
}
|
|
69
|
+
const summaries = new Map();
|
|
70
|
+
for (const entry of next.values()) {
|
|
71
|
+
for (const [threadId, part] of entry.totals) {
|
|
72
|
+
const total = summaries.get(threadId);
|
|
73
|
+
if (!total)
|
|
74
|
+
summaries.set(threadId, structuredClone(part));
|
|
75
|
+
else {
|
|
76
|
+
total.usage.input += part.usage.input;
|
|
77
|
+
total.usage.output += part.usage.output;
|
|
78
|
+
total.usage.turns += part.usage.turns;
|
|
79
|
+
if (total.usage.cachedInput === undefined || part.usage.cachedInput === undefined)
|
|
80
|
+
delete total.usage.cachedInput;
|
|
81
|
+
else
|
|
82
|
+
total.usage.cachedInput += part.usage.cachedInput;
|
|
83
|
+
if (part.usage.costUsd !== null)
|
|
84
|
+
total.usage.costUsd = (total.usage.costUsd ?? 0) + part.usage.costUsd;
|
|
85
|
+
if (part.lastAt >= total.lastAt) {
|
|
86
|
+
total.lastAt = part.lastAt;
|
|
87
|
+
total.usage.lastTurn = part.usage.lastTurn;
|
|
88
|
+
total.usage.lastSpeaker = part.usage.lastSpeaker;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const totals = new Map([...summaries].map(([id, value]) => [id, value.usage]));
|
|
94
|
+
this.files = next;
|
|
95
|
+
this.totals = totals;
|
|
96
|
+
this.signature = signature;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
forThread(threadId) {
|
|
100
|
+
const usage = this.totals.get(threadId);
|
|
101
|
+
return usage ? structuredClone(usage) : undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -54,7 +54,7 @@ export function requestSourceForCard(messages, messageId) {
|
|
|
54
54
|
return undefined;
|
|
55
55
|
}
|
|
56
56
|
export function requestNeedsInput(message) {
|
|
57
|
-
return Boolean((message.card?.requestId && !message.card.answered && !message.card.dismissed) ||
|
|
57
|
+
return Boolean((message.card?.requestId && !message.card.answered && !message.card.dismissed && !message.card.expired) ||
|
|
58
58
|
(message.connector && !message.connector.dismissed && !message.connector.resumed && message.connector.status !== "connected") ||
|
|
59
|
-
(message.secret && !message.secret.provided && !message.secret.dismissed));
|
|
59
|
+
(message.secret && !message.secret.provided && !message.secret.dismissed && !message.secret.superseded));
|
|
60
60
|
}
|
|
@@ -228,6 +228,7 @@ export class ProviderRegistry {
|
|
|
228
228
|
modelVariants: inst.adapter.capabilities.modelVariants === true,
|
|
229
229
|
queueing: inst.adapter.capabilities.queueing === true,
|
|
230
230
|
localComputerMcp: inst.adapter.capabilities.localComputerMcp === true,
|
|
231
|
+
cloudComputerMcp: inst.adapter.capabilities.cloudComputerMcp === true,
|
|
231
232
|
approvalReview: inst.reviewPermission !== undefined,
|
|
232
233
|
},
|
|
233
234
|
access: driver?.metadata.access ?? "subscription",
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// What a bot gains or loses when its default engine (instanceId, hence
|
|
2
|
+
// driver) changes. Two per-driver facts decide it: whether the driver mounts
|
|
3
|
+
// the agents tool catalog at all (adapter capabilities.agentsMcp — a bot on
|
|
4
|
+
// a driver without it is never even told about the team tools), and which
|
|
5
|
+
// approval levels the destination driver implements. Turn-scoped catalog
|
|
6
|
+
// flags are identical on both sides of a switch, so the comparison below
|
|
7
|
+
// uses one envelope profile and lets the per-driver capability decide the
|
|
8
|
+
// delta; the tool names themselves come from the real catalog, so this
|
|
9
|
+
// never drifts from what a turn is actually shown.
|
|
10
|
+
import { APPROVAL_MODES, supportsApprovalMode } from "../shared/approval-mode.js";
|
|
11
|
+
import { availableTools } from "./drivers/agents-catalog.js";
|
|
12
|
+
/** The widest turn the harness can build: every optional integration on and
|
|
13
|
+
* a coordinating (room) turn, where the room-only coordination tools exist.
|
|
14
|
+
* Both sides of a comparison get the same profile; only the driver's own
|
|
15
|
+
* capability can differ. */
|
|
16
|
+
const ENVELOPE = {
|
|
17
|
+
externalRuntime: false,
|
|
18
|
+
coordinating: true,
|
|
19
|
+
ownThreadCreation: true,
|
|
20
|
+
skillAuthoring: true,
|
|
21
|
+
sharedComputers: true,
|
|
22
|
+
voiceNotes: true,
|
|
23
|
+
botId: "",
|
|
24
|
+
};
|
|
25
|
+
/** Extra card lines for an engine switch, empty when nothing changes. */
|
|
26
|
+
export function harnessCapabilityLines(from, to) {
|
|
27
|
+
if (!from || !to)
|
|
28
|
+
return [];
|
|
29
|
+
const lines = [];
|
|
30
|
+
if (from.agentsMcp !== to.agentsMcp) {
|
|
31
|
+
const names = availableTools(ENVELOPE).map((tool) => tool.name);
|
|
32
|
+
const coordination = ["coordinate_bots", "ask_bot", "delegate_bot"].filter((name) => names.includes(name));
|
|
33
|
+
lines.push(to.agentsMcp
|
|
34
|
+
? "Gains peer coordination and the other team tools: " + names.length + " tools including " + coordination.join(", ") + "."
|
|
35
|
+
: "Loses peer coordination and every team tool: " + names.length + " tools including " + coordination.join(", ") + " go away.");
|
|
36
|
+
}
|
|
37
|
+
if (from.driverKind !== to.driverKind) {
|
|
38
|
+
const lost = APPROVAL_MODES.filter((mode) => supportsApprovalMode(from.driverKind, mode) && !supportsApprovalMode(to.driverKind, mode));
|
|
39
|
+
const gained = APPROVAL_MODES.filter((mode) => !supportsApprovalMode(from.driverKind, mode) && supportsApprovalMode(to.driverKind, mode));
|
|
40
|
+
if (lost.length)
|
|
41
|
+
lines.push("Loses approval levels: " + lost.join(", ") + ".");
|
|
42
|
+
if (gained.length)
|
|
43
|
+
lines.push("Gains approval levels: " + gained.join(", ") + ".");
|
|
44
|
+
}
|
|
45
|
+
return lines;
|
|
46
|
+
}
|
|
@@ -21,7 +21,7 @@ export function hostedModelPolicy(dataDirectory, env = process.env) {
|
|
|
21
21
|
return null;
|
|
22
22
|
const hosted = hostedWorkspaceConfiguration(env);
|
|
23
23
|
if (!hosted?.portalMembership || env.OMB_DESKTOP_PARENT === "1" || !/^omb_workspace_[A-Za-z0-9_-]{43}$/.test(env.OMB_HOSTED_MODEL_TOKEN ?? "")) {
|
|
24
|
-
throw new Error("Hosted model access requires complete portal-managed
|
|
24
|
+
throw new Error("Hosted model access requires complete portal-managed configuration.");
|
|
25
25
|
}
|
|
26
26
|
let catalog;
|
|
27
27
|
try {
|