@raysonmeng/agentbridge 0.1.17 → 0.1.18
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/.claude-plugin/marketplace.json +1 -1
- package/dist/cli.js +49 -21
- package/dist/daemon.js +3 -3
- package/package.json +1 -1
- package/plugins/agentbridge/.claude-plugin/plugin.json +1 -1
- package/plugins/agentbridge/server/bridge-server.js +29 -3
- package/plugins/agentbridge/server/daemon.js +3 -3
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
{
|
|
13
13
|
"name": "agentbridge",
|
|
14
14
|
"description": "Bridge Claude Code and Codex through a shared daemon, push channel delivery, and reply/get_messages tools.",
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.18",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "AgentBridge Contributors",
|
|
18
18
|
"email": "raysonmeng@qq.com"
|
package/dist/cli.js
CHANGED
|
@@ -176,7 +176,7 @@ function parsePositiveIntEnv(name, fallback, log = () => {}, env = process.env)
|
|
|
176
176
|
var require_package = __commonJS((exports, module) => {
|
|
177
177
|
module.exports = {
|
|
178
178
|
name: "@raysonmeng/agentbridge",
|
|
179
|
-
version: "0.1.
|
|
179
|
+
version: "0.1.18",
|
|
180
180
|
description: "Bridge between Claude Code and Codex \u2014 bidirectional agent communication via MCP Channel + JSON-RPC",
|
|
181
181
|
type: "module",
|
|
182
182
|
packageManager: "bun@1.3.11",
|
|
@@ -904,7 +904,16 @@ ${endMarker}`;
|
|
|
904
904
|
var MARKER_START = (id) => `<!-- ${id}:start -->`, MARKER_END = (id) => `<!-- ${id}:end -->`;
|
|
905
905
|
|
|
906
906
|
// src/collaboration-content.ts
|
|
907
|
-
var MARKER_ID = "AgentBridge",
|
|
907
|
+
var MARKER_ID = "AgentBridge", BUDGET_PACING = `### Budget pacing \u2014 drive the WEEKLY quota to ~100% over the week, evenly, without reaching a 5h cap (active when agent-quota-guard is installed)
|
|
908
|
+
- **Core principle: token is the means, value is the end.** Raising intensity means producing more real parallel value (deeper reviews, more independent exploration / verification / genuine subtasks) \u2014 never manufacturing low-value work to consume quota. The budget to MAXIMIZE is the **weekly** quota (refreshed once a week): drive each side's weekly toward ~100% by its weekly reset, and consume it **evenly** across the week \u2014 front-loading then starving, or under-consuming throughout, both leave weekly quota unredeemed (forfeited). The **5h window is NOT a quota bucket to fill \u2014 it is a RATE CAP**: stay under it within any 5h period; reaching it = a forced pause until the 5h resets = wasted time, not progress.
|
|
909
|
+
- **Re-query your budget before EVERY allocation decision** \u2014 Claude: \`get_budget\` \u2192 **rendered text** covering both sides; Codex: \`check_budget\` with \`agent:"claude"|"codex"\` \u2192 **normalized JSON**, per side. (Two different shapes \u2014 read the right one below.) Never reuse remembered numbers: a weekly window can refresh EARLY (resetting both 5h and weekly), fully restoring a side you believed was exhausted.
|
|
910
|
+
- **Even-pacing test (per side \u2014 Claude runs it)** \u2014 compare two quantities: *budget-windows* = how many 5h windows the weekly quota still covers at the current burn rate; *clock-windows* = how many 5h windows physically fit before the weekly reset = (weekly reset \u2212 now) \xF7 5h. **Claude** (\`get_budget\` text) carries BOTH, pre-computed for BOTH sides: the lines "\u6309\u5F53\u524D\u8282\u594F\uFF0C\u5468\u989D\u5EA6\u8FD8\u591F \u2026 \u4E2A 5h \u7A97\u53E3" (budget-windows) and "\u8DDD\u5468\u5237\u65B0\u8FD8\u80FD\u5BB9\u7EB3 \u2026 \u4E2A 5h \u7A97\u53E3\uFF08\u65F6\u949F\uFF09" (clock-windows). **Codex** (\`check_budget\` JSON) today carries only per-bucket \`util\` / \`reset_epoch\` / \`reset_after_seconds\` \u2014 no burn rate, no \`five_hour_windows_left\` \u2014 so Codex CANNOT compute budget-windows itself; it reads its weekly \`util\` and clock-windows only. To locate Codex's weekly bucket: of the \`buckets[]\` entries whose \`id\` contains \`seven_day\` or \`secondary_window\` (there can be several \u2014 e.g. a model-specific \`additional_rate_limits[\u2026]\` one at 0%), take the HIGHEST-util one (the binding account-level window, matching how the bridge parses it); its clock-windows = \`reset_after_seconds\` \xF7 5h (never the top-level \`reset_epoch\`, which tracks the current limiter, not necessarily the weekly window). For the budget-windows half and the raise/hold/reduce verdict, Codex relies on Claude's \`get_budget\` (the burn projection lives there, for both sides) and reports its own weekly \`util\` + reset timing so Claude can run the test. (If a future \`check_budget\` exposes \`five_hour_windows_left\` on the weekly bucket, Codex reads it directly.) **The verdict (Claude computes it, per side):** budget > clock \u2192 **under-consuming** (weekly will be left unused) \u2192 **raise intensity**; budget < clock \u2192 **over-consuming** (won't last to the weekly reset) \u2192 **reduce intensity**; within ~1 window, or no confident rate \u2192 **hold**. **Codex, absent a fresh Claude verdict, holds at its current intensity (it never escalates unilaterally) and stays clear of the 5h cap \u2014 surfacing its weekly \`util\` + reset timing so Claude can issue the verdict.**
|
|
911
|
+
- **Raise intensity \u2014 use the levers your role has.** Orchestrator (Claude): pick larger, more-decomposable tasks; run more parallel subagents at once (3\u20135+ vs 1); raise delegation density; open more concurrent streams (review + explore + verify in parallel). Executor (Codex): go deeper in-turn, take larger chunks, run more verification/repro. Both: deepen quality (multi-angle review, broader test/repro) \u2014 never manufacture make-work. **Reduce intensity:** fewer/serial subagents (Claude), short bounded chunks, defer optional deep work. Stay below the **\u52A8\u6001\u6682\u505C\u7EBF** (shown in \`get_budget\`; its \`\u4F59\u91CF\` = headroom from your current util to that soft line, measured on the resettable hard-winner window \u2014 the 5h OR the weekly window, whichever currently limits you) \u2014 that soft ceiling, not the raw 5h cap, is the "do not cross, avoid a forced pause" line. **If that line is absent, or you only have JSON (Codex),** fall back to the 5h bucket's raw util vs 100% (Codex: of the \`buckets[]\` entries whose \`id\` contains \`five_hour\` or \`primary_window\`, take the HIGHEST-util one) and keep clear of the 5h cap.
|
|
912
|
+
- **Distinguish 5h from weekly:** a 5h window resetting does NOT consume or waste weekly budget \u2014 it only refreshes your rate headroom, so you can keep going when weekly is under-consumed. A near 5h reset is therefore not urgency but the release of a rate limit. The real "unused = forfeited" is the **weekly budget as its WEEKLY reset nears**: if weekly is still under-consumed then, raise intensity (within the 5h cap) to use it. If even pacing needs a rate beyond one 5h window's capacity, you are rate-limited \u2192 keep each 5h window as full as possible (under the cap).
|
|
913
|
+
- **Two-subscription imbalance \u2014 the quotas are INDEPENDENT and differ in BOTH amount AND reset timing** (each side's weekly and 5h windows reset on different clocks). **The cross-side split is the orchestrator's (Claude) decision:** route more work to the side that is MORE under-consuming on the even-pacing test (the larger budget-windows \u2212 clock-windows gap); when EITHER side lacks a confident rate (so the gap can't be compared), fall back to the more budget-rich side (larger absolute weekly headroom). On any tie (equal gap, or equal headroom), prefer the side whose **weekly resets SOONER** (its leftover is forfeited earlier). **As the executor (Codex) you do NOT decide the global split** \u2014 execute what you're assigned, and when your own budget is rich report it (with evidence) so Claude routes more to you. The tighter / over-consuming side carries less.
|
|
914
|
+
- **Side-aware pause (the hard floor the code enforces \u2014 obey, do not reinvent), with each side's own action:** **Codex exhausted** (\`system_budget_pause\`) \u2192 Codex's turns stop (gate closed); **Claude** must not retry replies and continues solo on independent work, checkpointing the split point \u2014 but the SAME \`system_budget_pause\` is ALSO emitted when both sides are exhausted, so do not infer "solo" from the directive name alone: read its content (it names the paused side[s]) or re-check \`get_budget\`, and continue solo ONLY while Claude's own side is healthy; if Claude is also at its line, handle it as **Both** below. **Claude exhausted** (\`system_budget_handoff\`) \u2192 **Claude** sends ONE handoff (remaining tasks / context / artifact locations / acceptance criteria) then stops; **Codex** receives the baton and carries the work forward as far as its remaining quota allows that turn. **Both** \u2192 joint pause; checkpoint and wait for \`resume\` (Claude's own quota-guard also hard-stops Claude independently). A transient probe **429 is NOT exhaustion** \u2192 fall back to cached util and keep working.`, CLAUDE_MD_SECTION, AGENTS_MD_SECTION;
|
|
915
|
+
var init_collaboration_content = __esm(() => {
|
|
916
|
+
CLAUDE_MD_SECTION = `## AgentBridge \u2014 Multi-Agent Collaboration
|
|
908
917
|
|
|
909
918
|
You are working in a **multi-agent environment** powered by AgentBridge.
|
|
910
919
|
Another AI agent (Codex, by OpenAI) is available in a parallel session on this machine.
|
|
@@ -935,14 +944,8 @@ Another AI agent (Codex, by OpenAI) is available in a parallel session on this m
|
|
|
935
944
|
3. Ask for Codex's agreement or counter-proposal before proceeding.
|
|
936
945
|
4. After task completion, **cross-review** each other's work.
|
|
937
946
|
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
- \`get_budget\` shows BOTH sides' quota \u2014 re-check it **before every task-allocation decision**. NEVER rely on quota numbers remembered from earlier in the conversation: the weekly window can refresh EARLY (resetting both 5h and weekly), so a side you remember as nearly exhausted may be fully restored.
|
|
941
|
-
- Side-aware pause semantics:
|
|
942
|
-
- **Codex exhausted** (\`system_budget_pause\`): the reply gate closes. Do not retry replies; continue solo on independent work, note the split point in a checkpoint.
|
|
943
|
-
- **You (Claude) exhausted** (\`system_budget_handoff\`): the gate stays OPEN \u2014 immediately send ONE handoff reply to Codex packaging the remaining task list, context, artifact locations and acceptance criteria, then stop working (your own quota-guard will hard-stop you at 92%). Codex relays the baton.
|
|
944
|
-
- **Both exhausted**: joint pause; checkpoint and wait for the resume notice.
|
|
945
|
-
- Save quota with model tiers: route mechanical subagent work to **haiku**, routine work to **sonnet**, reserve **opus** for architecture decisions; when your side is the heavier consumer, delegate more to Codex.`, AGENTS_MD_SECTION = `## AgentBridge \u2014 Multi-Agent Collaboration
|
|
947
|
+
${BUDGET_PACING}`;
|
|
948
|
+
AGENTS_MD_SECTION = `## AgentBridge \u2014 Multi-Agent Collaboration
|
|
946
949
|
|
|
947
950
|
You are working in a **multi-agent environment** powered by AgentBridge.
|
|
948
951
|
Another AI agent (Claude, by Anthropic) is available in a parallel session on this machine.
|
|
@@ -995,12 +998,8 @@ You MUST NOT run git **write** commands: \`commit\`, \`push\`, \`pull\`, \`fetch
|
|
|
995
998
|
- Do not blindly follow Claude \u2014 challenge with evidence when you disagree.
|
|
996
999
|
- Use explicit collaboration phrases: "My independent view is:", "I agree on:", "I disagree on:", "Current consensus:".
|
|
997
1000
|
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
- During a **budget pause** (your side exhausted) you simply stop receiving new turns \u2014 that IS the pause. Your own quota-guard hooks still apply; work resumes when Claude's next message arrives.
|
|
1001
|
-
- **Handoff (Claude's side exhausted)**: you may receive a baton message packaging the remaining work. Push as far as possible within that single turn; write leftovers to a checkpoint file; do NOT expect Claude to respond until its quota refreshes.
|
|
1002
|
-
- Claude may route more or less work to you based on **remaining work-time (runway), not just raw usage %** \u2014 a side that looks heavily used but is close to a window reset still has plenty of runway. Expected load balancing, not preference. Claude may also ask for more parallel subtasks when the account will not use its weekly quota before reset (underutilization).
|
|
1003
|
-
- When the user enabled tier control, the bridge may adjust your model/reasoning-effort via turn parameters under budget pressure; if asked to economize, prefer lower effort and concise outputs.`;
|
|
1001
|
+
${BUDGET_PACING}`;
|
|
1002
|
+
});
|
|
1004
1003
|
|
|
1005
1004
|
// src/cli/init.ts
|
|
1006
1005
|
var exports_init = {};
|
|
@@ -1200,6 +1199,7 @@ var init_init = __esm(() => {
|
|
|
1200
1199
|
init_pkg_root();
|
|
1201
1200
|
init_plugin_cache();
|
|
1202
1201
|
init_version_utils();
|
|
1202
|
+
init_collaboration_content();
|
|
1203
1203
|
});
|
|
1204
1204
|
|
|
1205
1205
|
// src/cli/dev.ts
|
|
@@ -1670,11 +1670,11 @@ function formatBuildInfo(build) {
|
|
|
1670
1670
|
var CODE_HASH_SENTINEL = "source", BUILD_INFO;
|
|
1671
1671
|
var init_build_info = __esm(() => {
|
|
1672
1672
|
BUILD_INFO = Object.freeze({
|
|
1673
|
-
version: defineString("0.1.
|
|
1674
|
-
commit: defineString("
|
|
1673
|
+
version: defineString("0.1.18", "0.0.0-source"),
|
|
1674
|
+
commit: defineString("9db0aa3", "source"),
|
|
1675
1675
|
bundle: defineBundle("dist"),
|
|
1676
1676
|
contractVersion: defineNumber(1, CONTRACT_VERSION),
|
|
1677
|
-
codeHash: defineString("
|
|
1677
|
+
codeHash: defineString("46a6407023f0", "source")
|
|
1678
1678
|
});
|
|
1679
1679
|
});
|
|
1680
1680
|
|
|
@@ -3584,7 +3584,9 @@ function isFreshAgentsMdContract(content) {
|
|
|
3584
3584
|
return false;
|
|
3585
3585
|
return content.includes("transparent proxy") && content.includes("Do not") && content.includes("sendToClaude") && content.includes("Git operations") && content.includes("Implementer, Executor, Verifier");
|
|
3586
3586
|
}
|
|
3587
|
-
var init_agents_contract = () => {
|
|
3587
|
+
var init_agents_contract = __esm(() => {
|
|
3588
|
+
init_collaboration_content();
|
|
3589
|
+
});
|
|
3588
3590
|
|
|
3589
3591
|
// src/wrapper-exit-observability.ts
|
|
3590
3592
|
import { readFileSync as readFileSync8, readdirSync as readdirSync3, statSync as statSync4 } from "fs";
|
|
@@ -5431,6 +5433,28 @@ function formatFiveHourWindowsLeftLine(snapshot) {
|
|
|
5431
5433
|
const byAgent = values.map(([name, value]) => `${name} ~${value.toFixed(1)}`).join(" / ");
|
|
5432
5434
|
return `\u6309\u5F53\u524D\u8282\u594F\uFF0C\u5468\u989D\u5EA6\u8FD8\u591F ${byAgent} \u4E2A 5h \u7A97\u53E3`;
|
|
5433
5435
|
}
|
|
5436
|
+
function clockWindowsLeft(usage, snapshotAt) {
|
|
5437
|
+
const weekly = usage?.weekly;
|
|
5438
|
+
if (!weekly || weekly.resetEpoch <= snapshotAt)
|
|
5439
|
+
return null;
|
|
5440
|
+
return (weekly.resetEpoch - snapshotAt) / FIVE_HOUR_WINDOW_SEC;
|
|
5441
|
+
}
|
|
5442
|
+
function formatClockWindowsLine(snapshot) {
|
|
5443
|
+
const values = [];
|
|
5444
|
+
const claude = clockWindowsLeft(snapshot.claude, snapshot.updatedAt);
|
|
5445
|
+
const codex = clockWindowsLeft(snapshot.codex, snapshot.updatedAt);
|
|
5446
|
+
if (claude !== null)
|
|
5447
|
+
values.push(["Claude", claude]);
|
|
5448
|
+
if (codex !== null)
|
|
5449
|
+
values.push(["Codex", codex]);
|
|
5450
|
+
if (values.length === 0)
|
|
5451
|
+
return null;
|
|
5452
|
+
const unique = [...new Set(values.map(([, value]) => value.toFixed(1)))];
|
|
5453
|
+
if (unique.length === 1)
|
|
5454
|
+
return `\u8DDD\u5468\u5237\u65B0\u8FD8\u80FD\u5BB9\u7EB3 ~${unique[0]} \u4E2A 5h \u7A97\u53E3\uFF08\u65F6\u949F\uFF09`;
|
|
5455
|
+
const byAgent = values.map(([name, value]) => `${name} ~${value.toFixed(1)}`).join(" / ");
|
|
5456
|
+
return `\u8DDD\u5468\u5237\u65B0\u8FD8\u80FD\u5BB9\u7EB3 ${byAgent} \u4E2A 5h \u7A97\u53E3\uFF08\u65F6\u949F\uFF09`;
|
|
5457
|
+
}
|
|
5434
5458
|
function formatDynamicLineLine(snapshot) {
|
|
5435
5459
|
const lines = snapshot.dynamicPauseLine;
|
|
5436
5460
|
if (!lines)
|
|
@@ -5467,6 +5491,9 @@ function renderBudgetSnapshot(snapshot, options = {}) {
|
|
|
5467
5491
|
const fiveHourWindowsLeftLine = formatFiveHourWindowsLeftLine(snapshot);
|
|
5468
5492
|
if (fiveHourWindowsLeftLine)
|
|
5469
5493
|
lines.push(fiveHourWindowsLeftLine);
|
|
5494
|
+
const clockWindowsLine = formatClockWindowsLine(snapshot);
|
|
5495
|
+
if (clockWindowsLine)
|
|
5496
|
+
lines.push(clockWindowsLine);
|
|
5470
5497
|
const dynamicLineLine = formatDynamicLineLine(snapshot);
|
|
5471
5498
|
if (dynamicLineLine)
|
|
5472
5499
|
lines.push(dynamicLineLine);
|
|
@@ -5506,13 +5533,14 @@ function renderBudgetSnapshot(snapshot, options = {}) {
|
|
|
5506
5533
|
return lines.join(`
|
|
5507
5534
|
`);
|
|
5508
5535
|
}
|
|
5509
|
-
var DEFAULT_GUARD_HARD_PCT = 99, WINDOW_LABELS, RESET_TRUNCATION_EPSILON_SEC = 60, PHASE_LABELS, BUDGET_UNAVAILABLE_TEXT = "\u9884\u7B97\u611F\u77E5\u4E0D\u53EF\u7528\uFF1A\u672A\u68C0\u6D4B\u5230 agent-quota-guard \u63A2\u9488\uFF08~/.budget-guard/bin/budget-probe\uFF09\u6216 budget \u529F\u80FD\u5DF2\u7981\u7528\u3002\u534F\u4F5C\u4E0D\u53D7\u5F71\u54CD\u3002";
|
|
5536
|
+
var DEFAULT_GUARD_HARD_PCT = 99, WINDOW_LABELS, RESET_TRUNCATION_EPSILON_SEC = 60, FIVE_HOUR_WINDOW_SEC, PHASE_LABELS, BUDGET_UNAVAILABLE_TEXT = "\u9884\u7B97\u611F\u77E5\u4E0D\u53EF\u7528\uFF1A\u672A\u68C0\u6D4B\u5230 agent-quota-guard \u63A2\u9488\uFF08~/.budget-guard/bin/budget-probe\uFF09\u6216 budget \u529F\u80FD\u5DF2\u7981\u7528\u3002\u534F\u4F5C\u4E0D\u53D7\u5F71\u54CD\u3002";
|
|
5510
5537
|
var init_render = __esm(() => {
|
|
5511
5538
|
init_burn_view();
|
|
5512
5539
|
WINDOW_LABELS = {
|
|
5513
5540
|
fiveHour: "5h \u7A97\u53E3",
|
|
5514
5541
|
weekly: "\u5468\u7A97\u53E3"
|
|
5515
5542
|
};
|
|
5543
|
+
FIVE_HOUR_WINDOW_SEC = 5 * 3600;
|
|
5516
5544
|
PHASE_LABELS = {
|
|
5517
5545
|
normal: "normal\uFF08\u6B63\u5E38\uFF09",
|
|
5518
5546
|
balance: "balance\uFF08\u9700\u5747\u8861\uFF09",
|
package/dist/daemon.js
CHANGED
|
@@ -29,11 +29,11 @@ function defineNumber(value, fallback) {
|
|
|
29
29
|
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
30
30
|
}
|
|
31
31
|
var BUILD_INFO = Object.freeze({
|
|
32
|
-
version: defineString("0.1.
|
|
33
|
-
commit: defineString("
|
|
32
|
+
version: defineString("0.1.18", "0.0.0-source"),
|
|
33
|
+
commit: defineString("9db0aa3", "source"),
|
|
34
34
|
bundle: defineBundle("dist"),
|
|
35
35
|
contractVersion: defineNumber(1, CONTRACT_VERSION),
|
|
36
|
-
codeHash: defineString("
|
|
36
|
+
codeHash: defineString("46a6407023f0", "source")
|
|
37
37
|
});
|
|
38
38
|
function daemonStatusBuildInfo() {
|
|
39
39
|
return { ...BUILD_INFO };
|
package/package.json
CHANGED
|
@@ -14007,6 +14007,29 @@ function formatFiveHourWindowsLeftLine(snapshot) {
|
|
|
14007
14007
|
const byAgent = values.map(([name, value]) => `${name} ~${value.toFixed(1)}`).join(" / ");
|
|
14008
14008
|
return `\u6309\u5F53\u524D\u8282\u594F\uFF0C\u5468\u989D\u5EA6\u8FD8\u591F ${byAgent} \u4E2A 5h \u7A97\u53E3`;
|
|
14009
14009
|
}
|
|
14010
|
+
var FIVE_HOUR_WINDOW_SEC = 5 * 3600;
|
|
14011
|
+
function clockWindowsLeft(usage, snapshotAt) {
|
|
14012
|
+
const weekly = usage?.weekly;
|
|
14013
|
+
if (!weekly || weekly.resetEpoch <= snapshotAt)
|
|
14014
|
+
return null;
|
|
14015
|
+
return (weekly.resetEpoch - snapshotAt) / FIVE_HOUR_WINDOW_SEC;
|
|
14016
|
+
}
|
|
14017
|
+
function formatClockWindowsLine(snapshot) {
|
|
14018
|
+
const values = [];
|
|
14019
|
+
const claude = clockWindowsLeft(snapshot.claude, snapshot.updatedAt);
|
|
14020
|
+
const codex = clockWindowsLeft(snapshot.codex, snapshot.updatedAt);
|
|
14021
|
+
if (claude !== null)
|
|
14022
|
+
values.push(["Claude", claude]);
|
|
14023
|
+
if (codex !== null)
|
|
14024
|
+
values.push(["Codex", codex]);
|
|
14025
|
+
if (values.length === 0)
|
|
14026
|
+
return null;
|
|
14027
|
+
const unique = [...new Set(values.map(([, value]) => value.toFixed(1)))];
|
|
14028
|
+
if (unique.length === 1)
|
|
14029
|
+
return `\u8DDD\u5468\u5237\u65B0\u8FD8\u80FD\u5BB9\u7EB3 ~${unique[0]} \u4E2A 5h \u7A97\u53E3\uFF08\u65F6\u949F\uFF09`;
|
|
14030
|
+
const byAgent = values.map(([name, value]) => `${name} ~${value.toFixed(1)}`).join(" / ");
|
|
14031
|
+
return `\u8DDD\u5468\u5237\u65B0\u8FD8\u80FD\u5BB9\u7EB3 ${byAgent} \u4E2A 5h \u7A97\u53E3\uFF08\u65F6\u949F\uFF09`;
|
|
14032
|
+
}
|
|
14010
14033
|
function formatDynamicLineLine(snapshot) {
|
|
14011
14034
|
const lines = snapshot.dynamicPauseLine;
|
|
14012
14035
|
if (!lines)
|
|
@@ -14050,6 +14073,9 @@ function renderBudgetSnapshot(snapshot, options = {}) {
|
|
|
14050
14073
|
const fiveHourWindowsLeftLine = formatFiveHourWindowsLeftLine(snapshot);
|
|
14051
14074
|
if (fiveHourWindowsLeftLine)
|
|
14052
14075
|
lines.push(fiveHourWindowsLeftLine);
|
|
14076
|
+
const clockWindowsLine = formatClockWindowsLine(snapshot);
|
|
14077
|
+
if (clockWindowsLine)
|
|
14078
|
+
lines.push(clockWindowsLine);
|
|
14053
14079
|
const dynamicLineLine = formatDynamicLineLine(snapshot);
|
|
14054
14080
|
if (dynamicLineLine)
|
|
14055
14081
|
lines.push(dynamicLineLine);
|
|
@@ -14596,11 +14622,11 @@ function defineNumber(value, fallback) {
|
|
|
14596
14622
|
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
14597
14623
|
}
|
|
14598
14624
|
var BUILD_INFO = Object.freeze({
|
|
14599
|
-
version: defineString("0.1.
|
|
14600
|
-
commit: defineString("
|
|
14625
|
+
version: defineString("0.1.18", "0.0.0-source"),
|
|
14626
|
+
commit: defineString("9db0aa3", "source"),
|
|
14601
14627
|
bundle: defineBundle("plugin"),
|
|
14602
14628
|
contractVersion: defineNumber(1, CONTRACT_VERSION),
|
|
14603
|
-
codeHash: defineString("
|
|
14629
|
+
codeHash: defineString("46a6407023f0", "source")
|
|
14604
14630
|
});
|
|
14605
14631
|
function sameRuntimeContract(a, b) {
|
|
14606
14632
|
if (!a || !b)
|
|
@@ -29,11 +29,11 @@ function defineNumber(value, fallback) {
|
|
|
29
29
|
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
30
30
|
}
|
|
31
31
|
var BUILD_INFO = Object.freeze({
|
|
32
|
-
version: defineString("0.1.
|
|
33
|
-
commit: defineString("
|
|
32
|
+
version: defineString("0.1.18", "0.0.0-source"),
|
|
33
|
+
commit: defineString("9db0aa3", "source"),
|
|
34
34
|
bundle: defineBundle("plugin"),
|
|
35
35
|
contractVersion: defineNumber(1, CONTRACT_VERSION),
|
|
36
|
-
codeHash: defineString("
|
|
36
|
+
codeHash: defineString("46a6407023f0", "source")
|
|
37
37
|
});
|
|
38
38
|
function daemonStatusBuildInfo() {
|
|
39
39
|
return { ...BUILD_INFO };
|