@songsid/agend 2.3.0-beta.1 → 2.3.0-beta.10
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/agent-cli-instructions.md +5 -2
- package/dist/agent-cli.js +43 -7
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +4 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.d.ts +14 -6
- package/dist/agent-file-read.js +207 -19
- package/dist/agent-file-read.js.map +1 -1
- package/dist/agent-whats-new.d.ts +11 -0
- package/dist/agent-whats-new.js +29 -15
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.d.ts +30 -1
- package/dist/auth-api.js +45 -13
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +38 -0
- package/dist/authority/authority-state.js +114 -0
- package/dist/authority/authority-state.js.map +1 -0
- package/dist/authority/session-authorizations.d.ts +43 -0
- package/dist/authority/session-authorizations.js +102 -0
- package/dist/authority/session-authorizations.js.map +1 -0
- package/dist/authority/web-authority.d.ts +120 -0
- package/dist/authority/web-authority.js +157 -0
- package/dist/authority/web-authority.js.map +1 -0
- package/dist/backend/claude-code.d.ts +2 -2
- package/dist/backend/claude-code.js +10 -5
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/types.d.ts +14 -0
- package/dist/backend/types.js +25 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-availability.d.ts +120 -0
- package/dist/backend-availability.js +396 -0
- package/dist/backend-availability.js.map +1 -0
- package/dist/backend-command.d.ts +21 -3
- package/dist/backend-command.js +23 -4
- package/dist/backend-command.js.map +1 -1
- package/dist/bundled-skills.d.ts +14 -0
- package/dist/bundled-skills.js +29 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-analysis.d.ts +47 -1
- package/dist/cache-analysis.js +68 -8
- package/dist/cache-analysis.js.map +1 -1
- package/dist/cache-ledger.d.ts +16 -3
- package/dist/cache-ledger.js +33 -13
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-report-tool.d.ts +17 -0
- package/dist/cache-report-tool.js +40 -0
- package/dist/cache-report-tool.js.map +1 -0
- package/dist/cache-service.d.ts +70 -3
- package/dist/cache-service.js +178 -17
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +7 -0
- package/dist/channel/adapters/discord.js +35 -0
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-tools.js +22 -10
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +6 -0
- package/dist/classic-channel-manager.d.ts +10 -5
- package/dist/classic-channel-manager.js +12 -9
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +130 -31
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +103 -4
- package/dist/config-validator.js.map +1 -1
- package/dist/daemon.d.ts +7 -0
- package/dist/daemon.js +63 -16
- package/dist/daemon.js.map +1 -1
- package/dist/decision-list.d.ts +25 -0
- package/dist/decision-list.js +30 -0
- package/dist/decision-list.js.map +1 -0
- package/dist/delivery-outbox.d.ts +10 -0
- package/dist/delivery-outbox.js +12 -1
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/fleet-context.d.ts +10 -0
- package/dist/fleet-manager.d.ts +417 -11
- package/dist/fleet-manager.js +1387 -109
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-traffic.d.ts +74 -0
- package/dist/fleet-traffic.js +196 -0
- package/dist/fleet-traffic.js.map +1 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +20 -5
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +6 -1
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +3 -2
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +257 -23
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +476 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/human-delivery-receipts.d.ts +24 -1
- package/dist/human-delivery-receipts.js +64 -11
- package/dist/human-delivery-receipts.js.map +1 -1
- package/dist/instance-config-impact.js +3 -1
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-names.d.ts +4 -0
- package/dist/instance-names.js +12 -0
- package/dist/instance-names.js.map +1 -0
- package/dist/instructions.d.ts +12 -1
- package/dist/instructions.js +13 -2
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +100 -8
- package/dist/locale.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +95 -0
- package/dist/ls-attach-resolve.js +174 -0
- package/dist/ls-attach-resolve.js.map +1 -0
- package/dist/memory-hogs.d.ts +27 -0
- package/dist/memory-hogs.js +124 -0
- package/dist/memory-hogs.js.map +1 -0
- package/dist/outbound-handlers.d.ts +10 -0
- package/dist/outbound-handlers.js +122 -2
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +164 -4
- package/dist/outbound-schemas.js +99 -3
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +8 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +9 -0
- package/dist/public-web-link.js +8 -0
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +10 -1
- package/dist/quickstart-api.js +12 -4
- package/dist/quickstart-api.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +4 -0
- package/dist/reply-buttons-controller.js +2 -2
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/restart-progress.d.ts +65 -1
- package/dist/restart-progress.js +236 -10
- package/dist/restart-progress.js.map +1 -1
- package/dist/rollout-index.d.ts +5 -0
- package/dist/rollout-index.js +26 -5
- package/dist/rollout-index.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts +12 -0
- package/dist/scheduler/scheduler.js +83 -10
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/service-installer.d.ts +2 -1
- package/dist/service-installer.js +18 -3
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.d.ts +19 -0
- package/dist/settings-api.js +137 -2
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +104 -0
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +17 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/tmux-manager.d.ts +5 -0
- package/dist/tmux-manager.js +16 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +4 -6
- package/dist/tool-permissions.js +53 -5
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +7 -1
- package/dist/topic-commands.js +18 -4
- package/dist/topic-commands.js.map +1 -1
- package/dist/types.d.ts +48 -1
- package/dist/ui/app-effects.js +77 -31
- package/dist/ui/chat-ambient.js +307 -0
- package/dist/ui/chat-effect-posters.js +8 -8
- package/dist/ui/chat-effects.js +101 -13
- package/dist/ui/chat-render.js +5 -2
- package/dist/ui/chat-strings.js +59 -6
- package/dist/ui/chat-thread.js +149 -21
- package/dist/ui/effect-trial-controller.js +13 -8
- package/dist/ui/effect-trial-panel.js +19 -16
- package/dist/ui/fleet-cache.js +23 -1
- package/dist/ui/fleet-canvas-layout.js +111 -0
- package/dist/ui/fleet-canvas.js +525 -0
- package/dist/ui/fleet-org.js +27 -12
- package/dist/ui/fleet-traffic.js +343 -0
- package/dist/ui/fleet-usage.js +401 -0
- package/dist/ui/panel-chat.js +127 -49
- package/dist/ui/panel-details.js +2 -1
- package/dist/ui/panel-fleet.js +41 -16
- package/dist/ui/panel-settings.js +26 -8
- package/dist/ui/preview.js +3 -2
- package/dist/ui/settings-appearance.js +42 -18
- package/dist/ui/settings-catalog.js +92 -0
- package/dist/ui/settings-dialogs.js +40 -12
- package/dist/ui/settings-effects.js +4 -3
- package/dist/ui/settings-guests.js +117 -0
- package/dist/ui/settings-learn.js +25 -0
- package/dist/ui/settings-model.js +15 -6
- package/dist/ui/settings-mods.js +23 -9
- package/dist/ui/settings-owner-effects.js +9 -9
- package/dist/ui/settings-strings.js +120 -42
- package/dist/ui/settings-web-authority.js +91 -0
- package/dist/ui/shared/agend-auth.js +1 -1
- package/dist/ui/shared/app-i18n.js +4 -2
- package/dist/ui/shared/app-prefs.js +5 -4
- package/dist/ui/shared/app-route.js +1 -1
- package/dist/ui/shared/app-session.js +2 -0
- package/dist/ui/shared/app-shell.js +75 -9
- package/dist/ui/shared/app-store.js +26 -1
- package/dist/ui/shared/app-stream.js +3 -1
- package/dist/ui/shared/app-themes.js +24 -6
- package/dist/ui/shared/app.css +364 -16
- package/dist/ui/shared/app.js +21 -14
- package/dist/ui/shared/card-strings.js +4 -0
- package/dist/ui/shared/effect-app-runtime.js +68 -19
- package/dist/ui/shared/effect-chat-runtime.js +16 -3
- package/dist/ui/shared/effect-frame.js +26 -7
- package/dist/ui/shared/effect-geometry.js +24 -9
- package/dist/ui/shared/effect-policy.js +21 -7
- package/dist/ui/shared/effect-profiler.js +31 -9
- package/dist/ui/shared/effect-registry.js +87 -48
- package/dist/ui/shared/effect-stock-snapshot.js +9 -0
- package/dist/ui/shared/effect-stock-trust.js +62 -10
- package/dist/ui/shared/effect-trial-shadow.js +62 -0
- package/dist/ui/shared/effect-trial-source.js +1 -1
- package/dist/ui/shared/effect-trial-stage.js +54 -31
- package/dist/ui/shared/effect-trial.css +40 -0
- package/dist/ui/shared/fx-motion.js +67 -0
- package/dist/ui/shared/identity-card.js +75 -4
- package/dist/ui/shared/identity-color.js +3 -3
- package/dist/ui/shared/instance-nav.js +194 -28
- package/dist/ui/shared/panel-view.js +24 -4
- package/dist/ui/shared/tokens.css +9 -3
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/shared/usage-dialog.js +22 -2
- package/dist/ui/shared/view-strings.js +68 -2
- package/dist/ui/shared/web-authorize.js +151 -0
- package/dist/ui/signin.html +1 -1
- package/dist/ui/web-terminal/terminal.css +4 -4
- package/dist/usage/providers.d.ts +28 -0
- package/dist/usage/providers.js +126 -36
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage-report.d.ts +158 -0
- package/dist/usage-report.js +226 -0
- package/dist/usage-report.js.map +1 -0
- package/dist/usage-rollup.d.ts +51 -0
- package/dist/usage-rollup.js +168 -0
- package/dist/usage-rollup.js.map +1 -0
- package/dist/view-api.d.ts +39 -0
- package/dist/view-api.js +65 -4
- package/dist/view-api.js.map +1 -1
- package/dist/web-ambient.d.ts +72 -0
- package/dist/web-ambient.js +161 -0
- package/dist/web-ambient.js.map +1 -0
- package/dist/web-api.d.ts +69 -5
- package/dist/web-api.js +362 -45
- package/dist/web-api.js.map +1 -1
- package/dist/web-appearance-policy.d.ts +4 -6
- package/dist/web-appearance-policy.js +5 -12
- package/dist/web-appearance-policy.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +3 -0
- package/dist/web-appearance-tools.js +22 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.d.ts +27 -2
- package/dist/web-appearance-view.js +129 -14
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +17 -3
- package/dist/web-appearance.js +82 -7
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-asset-parts.d.ts +5 -10
- package/dist/web-asset-parts.js +3 -3
- package/dist/web-asset-parts.js.map +1 -1
- package/dist/web-auth.js +3 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-card.d.ts +14 -0
- package/dist/web-card.js +40 -6
- package/dist/web-card.js.map +1 -1
- package/dist/web-channel-echo.d.ts +7 -1
- package/dist/web-channel-echo.js +6 -2
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +46 -0
- package/dist/web-chat-history.js +80 -3
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +1 -0
- package/dist/web-effect-bootstrap.d.ts +12 -0
- package/dist/web-effect-bootstrap.js +49 -0
- package/dist/web-effect-bootstrap.js.map +1 -0
- package/dist/web-effect-bundle.js +46 -1
- package/dist/web-effect-bundle.js.map +1 -1
- package/dist/web-effect-playback.d.ts +30 -0
- package/dist/web-effect-playback.js +71 -0
- package/dist/web-effect-playback.js.map +1 -0
- package/dist/web-effect-profiles.d.ts +4 -4
- package/dist/web-effect-service.d.ts +11 -4
- package/dist/web-effect-service.js +28 -5
- package/dist/web-effect-service.js.map +1 -1
- package/dist/web-effect-tools.d.ts +1 -0
- package/dist/web-effect-tools.js +8 -5
- package/dist/web-effect-tools.js.map +1 -1
- package/dist/web-effect-trials.d.ts +4 -4
- package/dist/web-effect-trials.js +6 -6
- package/dist/web-effect-trials.js.map +1 -1
- package/dist/web-effect-upload.d.ts +2 -4
- package/dist/web-effect-upload.js +3 -8
- package/dist/web-effect-upload.js.map +1 -1
- package/dist/web-effect-worker.d.ts +1 -1
- package/dist/web-effect-worker.js +2 -2
- package/dist/web-effect-worker.js.map +1 -1
- package/dist/web-effect.d.ts +14 -0
- package/dist/web-effect.js +21 -0
- package/dist/web-effect.js.map +1 -1
- package/dist/web-guest-access.d.ts +125 -0
- package/dist/web-guest-access.js +234 -0
- package/dist/web-guest-access.js.map +1 -0
- package/dist/web-guest-rooms.d.ts +82 -0
- package/dist/web-guest-rooms.js +135 -0
- package/dist/web-guest-rooms.js.map +1 -0
- package/dist/web-identity-color.d.ts +1 -1
- package/dist/web-identity-color.js +2 -2
- package/dist/web-identity-color.js.map +1 -1
- package/dist/web-identity-palette.d.ts +1 -1
- package/dist/web-identity-palette.js +2 -2
- package/dist/web-identity-palette.js.map +1 -1
- package/dist/web-login.d.ts +47 -0
- package/dist/web-login.js +115 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-mod-agent.d.ts +1 -1
- package/dist/web-mod-agent.js +12 -8
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-mod-bundle.d.ts +14 -1
- package/dist/web-mod-bundle.js +68 -3
- package/dist/web-mod-bundle.js.map +1 -1
- package/dist/web-mod-export.d.ts +9 -0
- package/dist/web-mod-export.js +21 -0
- package/dist/web-mod-export.js.map +1 -1
- package/dist/web-mod-store.d.ts +7 -1
- package/dist/web-mod-store.js +21 -7
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-prefs.d.ts +14 -0
- package/dist/web-prefs.js +24 -4
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +6 -2
- package/dist/web-preview.js +4 -2
- package/dist/web-preview.js.map +1 -1
- package/dist/web-returning-device.d.ts +41 -0
- package/dist/web-returning-device.js +57 -5
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-session-authorization.d.ts +132 -0
- package/dist/web-session-authorization.js +193 -0
- package/dist/web-session-authorization.js.map +1 -0
- package/dist/web-session.d.ts +70 -10
- package/dist/web-session.js +137 -22
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +49 -2
- package/dist/web-settings-patch.js +145 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +89 -0
- package/dist/web-settings-tools.js +270 -0
- package/dist/web-settings-tools.js.map +1 -0
- package/dist/web-shell-routes.d.ts +1 -1
- package/dist/web-shell-routes.js +1 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-theme-store.d.ts +39 -0
- package/dist/web-theme-store.js +122 -11
- package/dist/web-theme-store.js.map +1 -1
- package/dist/web-theme.d.ts +2 -0
- package/dist/web-theme.js +10 -1
- package/dist/web-theme.js.map +1 -1
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +1 -1
- package/templates/systemd.service.ejs +8 -0
package/dist/cache-ledger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-ledger.js","sourceRoot":"","sources":["../src/cache-ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache-ledger.js","sourceRoot":"","sources":["../src/cache-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2001: get_cache_report's answer — the cache report (cache-service.ts, the same as GET /ui/cache) shaped for an
|
|
3
|
+
* agent: one compact row per instance, the costliest expiries first, at most `top` analysed rows; the fleet summary
|
|
4
|
+
* only for a caller who reads the fleet. Pure: the report comes from CacheService.published (no transcript read).
|
|
5
|
+
*/
|
|
6
|
+
import type { CacheReport } from "./cache-service.js";
|
|
7
|
+
export declare const CACHE_REPORT_TOP_DEFAULT = 10;
|
|
8
|
+
export interface CacheReportQuery {
|
|
9
|
+
/** "fleet": every row and the fleet summary; "own": only `caller`'s row. */
|
|
10
|
+
scope: "fleet" | "own";
|
|
11
|
+
caller: string;
|
|
12
|
+
instance?: string;
|
|
13
|
+
top?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function cacheReportForTool(report: CacheReport, q: CacheReportQuery): Record<string, unknown> | {
|
|
16
|
+
error: string;
|
|
17
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const CACHE_REPORT_TOP_DEFAULT = 10;
|
|
2
|
+
const ttlText = (sec) => (sec === null ? null : sec >= 3600 ? `${sec / 3600}h` : `${Math.round(sec / 60)}m`);
|
|
3
|
+
const round = (n) => Math.round(n * 1e4) / 1e4;
|
|
4
|
+
function row(r) {
|
|
5
|
+
const a = r.analysis, s = a.sim, e = a.effectiveTtl;
|
|
6
|
+
const writes = a.writeMix["5m"] + a.writeMix["1h"];
|
|
7
|
+
return {
|
|
8
|
+
name: r.name, backend: r.backend, status: r.status, models: a.models, requests: a.requests,
|
|
9
|
+
ttl_written: ttlText(a.ttlSec),
|
|
10
|
+
write_mix: { "5m_tokens": a.writeMix["5m"], "1h_tokens": a.writeMix["1h"], "1h_share": writes ? round(a.writeMix["1h"] / writes) : null },
|
|
11
|
+
effective_ttl: { ttl: ttlText(e.ttlSec), basis: e.basis, five_minute_measured_as: ttlText(e.fiveMinute), gap_miss: { gaps: e.sample, rewritten: e.misses, rate: e.rate === null ? null : round(e.rate) } },
|
|
12
|
+
past_ttl: s.pastTtl, expired: s.expired, rewrite_tokens: s.rewriteTokens,
|
|
13
|
+
unit: a.priced ? "usd" : "input_price_units",
|
|
14
|
+
expiry_cost: round(s.expiryCost), share_of_cost: a.share === null ? null : round(a.share),
|
|
15
|
+
keep_warm: { pings: s.pings + s.tailPings, pings_after_last_request: s.tailPings, ping_cost: round(s.pingCost + s.tailCost), net: round(s.net) },
|
|
16
|
+
recommendation: a.recommendation,
|
|
17
|
+
estimate: a.estimate,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function cacheReportForTool(report, q) {
|
|
21
|
+
const name = q.scope === "own" ? q.caller : q.instance;
|
|
22
|
+
if (q.scope === "own" && q.instance !== undefined && q.instance !== q.caller) {
|
|
23
|
+
return { error: `get_cache_report: you may read only your own row (${q.caller}); General, coordinators and full-profile instances read the fleet.` };
|
|
24
|
+
}
|
|
25
|
+
const rows = name === undefined ? report.instances : report.instances.filter((r) => r.name === name);
|
|
26
|
+
if (name !== undefined && !rows.length)
|
|
27
|
+
return { error: `get_cache_report: no instance named ${name}` };
|
|
28
|
+
const ok = rows.filter((r) => r.status === "ok" && r.analysis)
|
|
29
|
+
.sort((x, y) => (Number(y.analysis.priced) - Number(x.analysis.priced)) || (y.analysis.sim.expiryCost - x.analysis.sim.expiryCost));
|
|
30
|
+
const top = name === undefined ? Math.max(1, Math.min(50, q.top ?? CACHE_REPORT_TOP_DEFAULT)) : ok.length;
|
|
31
|
+
return {
|
|
32
|
+
window: report.window, from: new Date(report.from).toISOString(), to: new Date(report.to).toISOString(),
|
|
33
|
+
scope: q.scope, prices_checked: report.pricesChecked, scanning: report.scanning,
|
|
34
|
+
...(q.scope === "fleet" && name === undefined ? { fleet: report.fleet } : {}),
|
|
35
|
+
instances: ok.slice(0, top).map(row),
|
|
36
|
+
...(ok.length > top ? { omitted: ok.length - top } : {}),
|
|
37
|
+
other: rows.filter((r) => r.status !== "ok" || !r.analysis).map((r) => ({ name: r.name, backend: r.backend, status: r.status, ...(r.with ? { with: r.with } : {}) })),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=cache-report-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-report-tool.js","sourceRoot":"","sources":["../src/cache-report-tool.ts"],"names":[],"mappings":"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"}
|
package/dist/cache-service.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { type Ledger } from "./cache-ledger.js";
|
|
1
2
|
import { type InstanceAnalysis } from "./cache-analysis.js";
|
|
3
|
+
import { type UsageDays } from "./usage-rollup.js";
|
|
2
4
|
/** An instance to analyse: a fleet.yaml instance, or a ClassicBot room (its workspace under the AgEnD home). */
|
|
3
5
|
export interface CacheInstance {
|
|
4
6
|
name: string;
|
|
@@ -7,6 +9,11 @@ export interface CacheInstance {
|
|
|
7
9
|
ledgerPath: string;
|
|
8
10
|
/** #1699: this instance's claude config dir (its credential profile's); absent = claudeProjectsDir()'s parent. */
|
|
9
11
|
claudeConfigDir?: string;
|
|
12
|
+
/**
|
|
13
|
+
* #2122: the profile the hours read now are tagged with — the claude profile whose config dir is read ("default"
|
|
14
|
+
* without one); "unrecorded" for codex (a rollout does not say which login wrote it).
|
|
15
|
+
*/
|
|
16
|
+
profile?: string;
|
|
10
17
|
}
|
|
11
18
|
export interface CacheServiceOptions {
|
|
12
19
|
instances(): CacheInstance[];
|
|
@@ -18,6 +25,8 @@ export interface CacheServiceOptions {
|
|
|
18
25
|
path: string;
|
|
19
26
|
mtimeMs: number;
|
|
20
27
|
}>;
|
|
28
|
+
/** #2122: how much the last listing of `root` could not read (rollout-index.ts `unreadable`); absent: 0. */
|
|
29
|
+
rolloutsUnreadable?(root: string): number;
|
|
21
30
|
/** Where the rollout → working-directory map is kept (one session_meta read per rollout, ever). */
|
|
22
31
|
metaPath: string;
|
|
23
32
|
now?: () => number;
|
|
@@ -25,9 +34,15 @@ export interface CacheServiceOptions {
|
|
|
25
34
|
pauseMs?: number;
|
|
26
35
|
intervalMs?: number;
|
|
27
36
|
log?: (level: "info" | "warn" | "debug", msg: string, extra?: Record<string, unknown>) => void;
|
|
37
|
+
/** Monotonic milliseconds for the published report's age (tests); default performance.now. */
|
|
38
|
+
monotonic?: () => number;
|
|
39
|
+
/** #2122: the zone days are folded in (defaults.scheduler.default_timezone, else the host's). */
|
|
40
|
+
zone?: () => string;
|
|
28
41
|
}
|
|
29
42
|
export type CacheWindow = "24h" | "7d" | "30d";
|
|
30
43
|
export declare const WINDOWS: Record<CacheWindow, number>;
|
|
44
|
+
/** A window name as asked (a query string, a tool argument); anything unknown is the default, 7 days. */
|
|
45
|
+
export declare const cacheWindow: (w: string) => CacheWindow;
|
|
31
46
|
export interface InstanceReport {
|
|
32
47
|
name: string;
|
|
33
48
|
backend: string;
|
|
@@ -52,18 +67,22 @@ export interface CacheReport {
|
|
|
52
67
|
pendingBytes: number;
|
|
53
68
|
pendingFiles: number;
|
|
54
69
|
};
|
|
70
|
+
/** `switchTo1h` (#2010): instances whose 5-minute cache measurably expires in 5–60 minute gaps — set prompt_cache_ttl: "1h". */
|
|
55
71
|
fleet: {
|
|
56
72
|
expiryCost: number;
|
|
57
73
|
saving: number;
|
|
58
74
|
recommended: number;
|
|
59
75
|
analysed: number;
|
|
60
76
|
priced: boolean;
|
|
77
|
+
switchTo1h: number;
|
|
61
78
|
};
|
|
62
79
|
instances: InstanceReport[];
|
|
63
80
|
}
|
|
64
81
|
export declare class CacheService {
|
|
65
82
|
private readonly o;
|
|
66
83
|
private readonly ledgers;
|
|
84
|
+
/** #2122: each instance's daily rollup (usage-rollup.ts), beside its ledger. */
|
|
85
|
+
private readonly rollups;
|
|
67
86
|
private readonly dirty;
|
|
68
87
|
/** Rollout path → the inode its session_meta was read from, and the cwd it names (null: not a session_meta). */
|
|
69
88
|
private meta;
|
|
@@ -75,6 +94,11 @@ export declare class CacheService {
|
|
|
75
94
|
private closing;
|
|
76
95
|
private pending;
|
|
77
96
|
private caughtUp;
|
|
97
|
+
/**
|
|
98
|
+
* #2122 §5.5: instances whose transcripts could not all be listed or read during this catch-up (EACCES, EIO… — a source
|
|
99
|
+
* that is simply not there is not one). The catch-up then proves nothing about them: no coverage is recorded.
|
|
100
|
+
*/
|
|
101
|
+
private readonly unread;
|
|
78
102
|
private readonly now;
|
|
79
103
|
constructor(o: CacheServiceOptions);
|
|
80
104
|
/** Catch up now (joins a catch-up already running). */
|
|
@@ -98,6 +122,20 @@ export declare class CacheService {
|
|
|
98
122
|
stop(): Promise<void>;
|
|
99
123
|
scanning(): CacheReport["scanning"];
|
|
100
124
|
private catchUp;
|
|
125
|
+
private zone;
|
|
126
|
+
private daysPath;
|
|
127
|
+
/** #2122: an instance's rollup, read once. */
|
|
128
|
+
rollupFor(inst: CacheInstance): Promise<UsageDays>;
|
|
129
|
+
/**
|
|
130
|
+
* #2122 §5.2: fold the hours about to leave the ledger into the rollup — on a copy, kept only once it is on disk — and
|
|
131
|
+
* return the checkpoint that is durable now (the ledger is pruned through it, never past it).
|
|
132
|
+
*/
|
|
133
|
+
private foldBeforePrune;
|
|
134
|
+
/**
|
|
135
|
+
* #2122 §5.5: a catch-up finished — for each instance whose sources were all listed and read, every one changed in the
|
|
136
|
+
* read window has been read up to now (an empty source included: a real zero). One that failed proves nothing.
|
|
137
|
+
*/
|
|
138
|
+
private recordCoverage;
|
|
101
139
|
private ledgerFor;
|
|
102
140
|
/**
|
|
103
141
|
* The instances whose transcripts land where another's do — the same Claude project (working directory), the
|
|
@@ -111,6 +149,11 @@ export declare class CacheService {
|
|
|
111
149
|
*/
|
|
112
150
|
pass(): Promise<number>;
|
|
113
151
|
private passOnce;
|
|
152
|
+
/**
|
|
153
|
+
* #2122: an instance not read now (a backend AgEnD cannot measure, or a working directory it shares) keeps what it
|
|
154
|
+
* measured before: its ledger's old hours are still folded into the rollup before they leave, as anyone's.
|
|
155
|
+
*/
|
|
156
|
+
private keepHistory;
|
|
114
157
|
/** A file that is not the one the cursor read (another inode, or shorter): keep the session's end, start at its end. */
|
|
115
158
|
private followFromEnd;
|
|
116
159
|
private read;
|
|
@@ -119,15 +162,39 @@ export declare class CacheService {
|
|
|
119
162
|
private codexFilesByInstance;
|
|
120
163
|
/** Write what changed; whatever fails to write stays dirty and is written by a later pass. */
|
|
121
164
|
private save;
|
|
165
|
+
/** Ledger changes so far: a catch-up pass that read new lines (or dropped a file). */
|
|
166
|
+
private changes;
|
|
167
|
+
private readonly memo;
|
|
168
|
+
/**
|
|
169
|
+
* #2001: the report as last worked out, for get_cache_report — the same as report(), reused for up to a minute and
|
|
170
|
+
* until a catch-up reads something new, so agents asking in turn do not each redo it (or start another catch-up).
|
|
171
|
+
* Never reads a transcript itself.
|
|
172
|
+
*/
|
|
173
|
+
published(window: CacheWindow, maxAgeMs?: number): Promise<CacheReport>;
|
|
174
|
+
/**
|
|
175
|
+
* #2122: what the usage report reads — each instance's ledger and rollup as they are now, or why it has none. Never
|
|
176
|
+
* reads a transcript (a catch-up is started, not waited for).
|
|
177
|
+
*/
|
|
178
|
+
usageData(): Promise<{
|
|
179
|
+
scanning: CacheReport["scanning"];
|
|
180
|
+
instances: Array<{
|
|
181
|
+
inst: CacheInstance;
|
|
182
|
+
status: InstanceReport["status"];
|
|
183
|
+
with?: string[];
|
|
184
|
+
ledger: Ledger;
|
|
185
|
+
days: UsageDays;
|
|
186
|
+
}>;
|
|
187
|
+
}>;
|
|
122
188
|
/** The analysis for a window, from the ledgers as they are now (a catch-up is started, not waited for). */
|
|
123
189
|
report(window: CacheWindow): Promise<CacheReport>;
|
|
124
190
|
}
|
|
125
191
|
/**
|
|
126
192
|
* A rollout's session_meta, read with one bounded read through the descriptor whose inode it records. Null while the
|
|
127
|
-
* first line is not complete yet (the next pass reads it again); `cwd: null` for a complete first
|
|
128
|
-
* a session_meta
|
|
193
|
+
* first line is not complete yet, or the file is gone (the next pass reads it again); `cwd: null` for a complete first
|
|
194
|
+
* line that is not a session_meta; "unreadable" when it is there and could not be read (EACCES, EIO… — #2122: not a
|
|
195
|
+
* real absence).
|
|
129
196
|
*/
|
|
130
197
|
export declare function rolloutMeta(path: string): Promise<{
|
|
131
198
|
ino: number;
|
|
132
199
|
cwd: string | null;
|
|
133
|
-
} | null>;
|
|
200
|
+
} | null | "unreadable">;
|
package/dist/cache-service.js
CHANGED
|
@@ -20,15 +20,22 @@ import { scanJsonl } from "./cache-scan.js";
|
|
|
20
20
|
import { addTurn, claudeLine, codexLine, emptyLedger, KEEP_DAYS, pruneLedger, reviveLedger } from "./cache-ledger.js";
|
|
21
21
|
import { analyzeLedger } from "./cache-analysis.js";
|
|
22
22
|
import { PRICES_CHECKED, PRICE_SOURCES } from "./cache-prices.js";
|
|
23
|
+
import { addCoverage, foldHours, pruneDays, readDays, writeDays } from "./usage-rollup.js";
|
|
23
24
|
export const WINDOWS = { "24h": 86_400_000, "7d": 7 * 86_400_000, "30d": 30 * 86_400_000 };
|
|
25
|
+
/** A window name as asked (a query string, a tool argument); anything unknown is the default, 7 days. */
|
|
26
|
+
export const cacheWindow = (w) => (Object.prototype.hasOwnProperty.call(WINDOWS, w) ? w : "7d");
|
|
24
27
|
const DAY = 86_400_000;
|
|
25
28
|
const META_MAX_BYTES = 256 * 1024; // session_meta carries the instructions (~22 KB in real rollouts)
|
|
26
29
|
const kindOf = (backend) => (backend === "claude-code" ? "claude" : backend === "codex" ? "codex" : null);
|
|
27
30
|
const sleep = (ms) => new Promise((r) => { const h = setTimeout(r, ms); h.unref?.(); });
|
|
28
31
|
const dict = () => Object.create(null);
|
|
32
|
+
/** An error that means the path is not there (never was, or went): a real absence, not a failure to read it. */
|
|
33
|
+
const gone = (err) => err?.code === "ENOENT";
|
|
29
34
|
export class CacheService {
|
|
30
35
|
o;
|
|
31
36
|
ledgers = new Map();
|
|
37
|
+
/** #2122: each instance's daily rollup (usage-rollup.ts), beside its ledger. */
|
|
38
|
+
rollups = new Map();
|
|
32
39
|
dirty = new Set();
|
|
33
40
|
/** Rollout path → the inode its session_meta was read from, and the cwd it names (null: not a session_meta). */
|
|
34
41
|
meta = null;
|
|
@@ -40,6 +47,11 @@ export class CacheService {
|
|
|
40
47
|
closing = false;
|
|
41
48
|
pending = { bytes: 0, files: 0 };
|
|
42
49
|
caughtUp = false;
|
|
50
|
+
/**
|
|
51
|
+
* #2122 §5.5: instances whose transcripts could not all be listed or read during this catch-up (EACCES, EIO… — a source
|
|
52
|
+
* that is simply not there is not one). The catch-up then proves nothing about them: no coverage is recorded.
|
|
53
|
+
*/
|
|
54
|
+
unread = new Set();
|
|
43
55
|
now;
|
|
44
56
|
constructor(o) {
|
|
45
57
|
this.o = o;
|
|
@@ -99,10 +111,13 @@ export class CacheService {
|
|
|
99
111
|
return { active: this.running !== null, caughtUp: this.caughtUp, pendingBytes: this.pending.bytes, pendingFiles: this.pending.files };
|
|
100
112
|
}
|
|
101
113
|
async catchUp() {
|
|
114
|
+
this.unread.clear();
|
|
102
115
|
for (;;) {
|
|
103
116
|
const left = await this.pass();
|
|
104
|
-
if (left === 0)
|
|
117
|
+
if (left === 0) {
|
|
105
118
|
this.caughtUp = true;
|
|
119
|
+
await this.recordCoverage();
|
|
120
|
+
}
|
|
106
121
|
// Stop looping when: all caught up, explicitly stopped, or closing (stop()
|
|
107
122
|
// fenced new admission — let the current physical pass write its dirty data,
|
|
108
123
|
// then exit rather than scanning the full backlog during shutdown).
|
|
@@ -111,6 +126,55 @@ export class CacheService {
|
|
|
111
126
|
await sleep(this.o.pauseMs ?? 25);
|
|
112
127
|
}
|
|
113
128
|
}
|
|
129
|
+
zone() { return this.o.zone?.() || Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC"; }
|
|
130
|
+
daysPath(inst) { return join(dirname(inst.ledgerPath), "usage-days.json"); }
|
|
131
|
+
/** #2122: an instance's rollup, read once. */
|
|
132
|
+
async rollupFor(inst) {
|
|
133
|
+
let d = this.rollups.get(inst.name);
|
|
134
|
+
if (d)
|
|
135
|
+
return d;
|
|
136
|
+
d = await readDays(this.daysPath(inst));
|
|
137
|
+
const again = this.rollups.get(inst.name);
|
|
138
|
+
if (again)
|
|
139
|
+
return again;
|
|
140
|
+
this.rollups.set(inst.name, d);
|
|
141
|
+
return d;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* #2122 §5.2: fold the hours about to leave the ledger into the rollup — on a copy, kept only once it is on disk — and
|
|
145
|
+
* return the checkpoint that is durable now (the ledger is pruned through it, never past it).
|
|
146
|
+
*/
|
|
147
|
+
async foldBeforePrune(inst, ledger, cutoff) {
|
|
148
|
+
const current = await this.rollupFor(inst);
|
|
149
|
+
const next = structuredClone(current);
|
|
150
|
+
const folded = foldHours(next, ledger, cutoff, this.zone());
|
|
151
|
+
const pruned = pruneDays(next, this.now(), this.zone());
|
|
152
|
+
if (!folded && !pruned)
|
|
153
|
+
return current.checkpoint;
|
|
154
|
+
if (!(await writeDays(this.daysPath(inst), next))) {
|
|
155
|
+
this.o.log?.("warn", "usage rollup: could not be saved; the ledger keeps those hours until it can", { instance: inst.name });
|
|
156
|
+
return current.checkpoint;
|
|
157
|
+
}
|
|
158
|
+
this.rollups.set(inst.name, next);
|
|
159
|
+
return next.checkpoint;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* #2122 §5.5: a catch-up finished — for each instance whose sources were all listed and read, every one changed in the
|
|
163
|
+
* read window has been read up to now (an empty source included: a real zero). One that failed proves nothing.
|
|
164
|
+
*/
|
|
165
|
+
async recordCoverage() {
|
|
166
|
+
const now = this.now();
|
|
167
|
+
const insts = this.o.instances();
|
|
168
|
+
const shared = await this.shared(insts);
|
|
169
|
+
for (const inst of insts) {
|
|
170
|
+
if (!kindOf(inst.backend) || shared.has(inst.name) || this.unread.has(inst.name))
|
|
171
|
+
continue;
|
|
172
|
+
const next = structuredClone(await this.rollupFor(inst));
|
|
173
|
+
addCoverage(next, now - KEEP_DAYS * DAY, now);
|
|
174
|
+
if (await writeDays(this.daysPath(inst), next))
|
|
175
|
+
this.rollups.set(inst.name, next);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
114
178
|
async ledgerFor(inst) {
|
|
115
179
|
let l = this.ledgers.get(inst.name);
|
|
116
180
|
if (l)
|
|
@@ -173,8 +237,10 @@ export class CacheService {
|
|
|
173
237
|
if (this.stopped)
|
|
174
238
|
break;
|
|
175
239
|
const kind = kindOf(inst.backend);
|
|
176
|
-
if (!kind || shared.has(inst.name))
|
|
240
|
+
if (!kind || shared.has(inst.name)) {
|
|
241
|
+
await this.keepHistory(inst, cutoff);
|
|
177
242
|
continue;
|
|
243
|
+
}
|
|
178
244
|
const ledger = await this.ledgerFor(inst);
|
|
179
245
|
const files = kind === "claude" ? await this.claudeFiles(inst, cutoff) : codex.get(inst.name) ?? [];
|
|
180
246
|
const listed = new Set(files.map((f) => f.path));
|
|
@@ -203,7 +269,9 @@ export class CacheService {
|
|
|
203
269
|
behindFiles++;
|
|
204
270
|
continue;
|
|
205
271
|
}
|
|
206
|
-
const done = await this.read(ledger, cur, f.path, budget, cutoff);
|
|
272
|
+
const done = await this.read(ledger, cur, f.path, budget, cutoff, inst.profile);
|
|
273
|
+
if (done.failed)
|
|
274
|
+
this.unread.add(inst.name);
|
|
207
275
|
this.dirty.add(inst.name);
|
|
208
276
|
budget -= done.read;
|
|
209
277
|
if (done.behind > 0) {
|
|
@@ -211,12 +279,30 @@ export class CacheService {
|
|
|
211
279
|
behindFiles++;
|
|
212
280
|
}
|
|
213
281
|
}
|
|
214
|
-
|
|
282
|
+
// #2122: fold, then prune — the ledger never drops an hour the rollup does not durably hold.
|
|
283
|
+
pruneLedger(ledger, cutoff, await this.foldBeforePrune(inst, ledger, cutoff));
|
|
215
284
|
}
|
|
216
285
|
this.pending = { bytes: behindBytes, files: behindFiles };
|
|
286
|
+
// A ledger read something new (or lost a file): a published report is out of date (Fable #2030 P2 — a pass that
|
|
287
|
+
// read nothing, such as the one every report starts, leaves it as it is).
|
|
288
|
+
if (this.dirty.size)
|
|
289
|
+
this.changes++;
|
|
217
290
|
await this.save(insts);
|
|
218
291
|
return behindBytes;
|
|
219
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* #2122: an instance not read now (a backend AgEnD cannot measure, or a working directory it shares) keeps what it
|
|
295
|
+
* measured before: its ledger's old hours are still folded into the rollup before they leave, as anyone's.
|
|
296
|
+
*/
|
|
297
|
+
async keepHistory(inst, cutoff) {
|
|
298
|
+
const ledger = await this.ledgerFor(inst);
|
|
299
|
+
const before = Object.keys(ledger.hours).length;
|
|
300
|
+
if (!before)
|
|
301
|
+
return;
|
|
302
|
+
pruneLedger(ledger, cutoff, await this.foldBeforePrune(inst, ledger, cutoff));
|
|
303
|
+
if (Object.keys(ledger.hours).length !== before)
|
|
304
|
+
this.dirty.add(inst.name);
|
|
305
|
+
}
|
|
220
306
|
/** A file that is not the one the cursor read (another inode, or shorter): keep the session's end, start at its end. */
|
|
221
307
|
followFromEnd(ledger, path, cur, ino, size) {
|
|
222
308
|
const next = { kind: cur.kind, ino, offset: size };
|
|
@@ -228,12 +314,12 @@ export class CacheService {
|
|
|
228
314
|
next.ttl = cur.ttl;
|
|
229
315
|
return ledger.files[path] = next;
|
|
230
316
|
}
|
|
231
|
-
async read(ledger, cur, path, budget, cutoff) {
|
|
317
|
+
async read(ledger, cur, path, budget, cutoff, profile) {
|
|
232
318
|
try {
|
|
233
319
|
const res = await scanJsonl(path, cur.offset, { maxBytes: budget, ino: cur.ino }, (line) => {
|
|
234
320
|
const turn = cur.kind === "claude" ? claudeLine(line, cur) : codexLine(line, cur);
|
|
235
321
|
if (turn)
|
|
236
|
-
addTurn(ledger, cur, turn, cutoff);
|
|
322
|
+
addTurn(ledger, cur, turn, cutoff, profile);
|
|
237
323
|
});
|
|
238
324
|
if (res.replaced) {
|
|
239
325
|
this.followFromEnd(ledger, path, cur, res.ino, res.size);
|
|
@@ -250,17 +336,21 @@ export class CacheService {
|
|
|
250
336
|
}
|
|
251
337
|
catch (err) {
|
|
252
338
|
this.o.log?.("debug", "cache analysis: could not read a transcript", { path, err: String(err) });
|
|
253
|
-
|
|
339
|
+
// Gone since the listing: nothing left to read. Anything else: not read (the cursor stays; a later pass retries).
|
|
340
|
+
return gone(err) ? { read: 1, behind: 0 } : { read: 1, behind: 0, failed: true };
|
|
254
341
|
}
|
|
255
342
|
}
|
|
256
343
|
async claudeFiles(inst, cutoff) {
|
|
257
344
|
const projects = inst.claudeConfigDir ? join(inst.claudeConfigDir, "projects") : this.o.claudeProjectsDir();
|
|
258
345
|
const dir = join(projects, this.o.claudeKey(inst.workingDirectory));
|
|
259
346
|
let names;
|
|
347
|
+
// No project directory: this instance has written nothing there (a real zero). Unreadable: not listed at all.
|
|
260
348
|
try {
|
|
261
349
|
names = await readdir(dir);
|
|
262
350
|
}
|
|
263
|
-
catch {
|
|
351
|
+
catch (err) {
|
|
352
|
+
if (!gone(err))
|
|
353
|
+
this.unread.add(inst.name);
|
|
264
354
|
return [];
|
|
265
355
|
}
|
|
266
356
|
const out = [];
|
|
@@ -273,7 +363,10 @@ export class CacheService {
|
|
|
273
363
|
if (st.isFile() && st.mtimeMs >= cutoff)
|
|
274
364
|
out.push({ path, ino: st.ino, size: st.size });
|
|
275
365
|
}
|
|
276
|
-
catch {
|
|
366
|
+
catch (err) {
|
|
367
|
+
if (!gone(err))
|
|
368
|
+
this.unread.add(inst.name);
|
|
369
|
+
}
|
|
277
370
|
}
|
|
278
371
|
return out;
|
|
279
372
|
}
|
|
@@ -299,10 +392,19 @@ export class CacheService {
|
|
|
299
392
|
catch { /* none yet */ }
|
|
300
393
|
}
|
|
301
394
|
let rollouts = [];
|
|
395
|
+
// A listing that could not read part of the tree may miss any codex instance's rollouts: none of them is covered.
|
|
396
|
+
const unlisted = () => { for (const i of codexInsts)
|
|
397
|
+
this.unread.add(i.name); };
|
|
302
398
|
try {
|
|
303
|
-
|
|
399
|
+
const root = this.o.codexSessionsDir();
|
|
400
|
+
rollouts = this.o.listRollouts(root).filter((r) => r.mtimeMs >= cutoff);
|
|
401
|
+
if ((this.o.rolloutsUnreadable?.(root) ?? 0) > 0)
|
|
402
|
+
unlisted();
|
|
403
|
+
}
|
|
404
|
+
catch (err) {
|
|
405
|
+
if (!gone(err))
|
|
406
|
+
unlisted(); /* else no sessions yet */
|
|
304
407
|
}
|
|
305
|
-
catch { /* no sessions yet */ }
|
|
306
408
|
const live = new Set();
|
|
307
409
|
for (const r of rollouts) {
|
|
308
410
|
live.add(r.path);
|
|
@@ -310,13 +412,21 @@ export class CacheService {
|
|
|
310
412
|
try {
|
|
311
413
|
st = await stat(r.path);
|
|
312
414
|
}
|
|
313
|
-
catch {
|
|
415
|
+
catch (err) {
|
|
416
|
+
if (!gone(err))
|
|
417
|
+
unlisted();
|
|
314
418
|
continue;
|
|
315
419
|
}
|
|
316
420
|
let m = this.meta[r.path];
|
|
317
421
|
// Read once per physical file; a first line still being written is read again next pass.
|
|
318
422
|
if (!m || m.ino !== st.ino) {
|
|
319
423
|
const read = await rolloutMeta(r.path);
|
|
424
|
+
// Unreadable (not gone, not just unfinished): whose it is cannot be known, so no codex instance is covered.
|
|
425
|
+
if (read === "unreadable") {
|
|
426
|
+
unlisted();
|
|
427
|
+
delete this.meta[r.path];
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
320
430
|
if (read) {
|
|
321
431
|
m = this.meta[r.path] = read;
|
|
322
432
|
this.metaDirty = true;
|
|
@@ -356,13 +466,61 @@ export class CacheService {
|
|
|
356
466
|
if (this.metaDirty && this.meta && await writeAtomic(this.o.metaPath, JSON.stringify(this.meta)))
|
|
357
467
|
this.metaDirty = false;
|
|
358
468
|
}
|
|
469
|
+
/** Ledger changes so far: a catch-up pass that read new lines (or dropped a file). */
|
|
470
|
+
changes = 0;
|
|
471
|
+
memo = new Map();
|
|
472
|
+
/**
|
|
473
|
+
* #2001: the report as last worked out, for get_cache_report — the same as report(), reused for up to a minute and
|
|
474
|
+
* until a catch-up reads something new, so agents asking in turn do not each redo it (or start another catch-up).
|
|
475
|
+
* Never reads a transcript itself.
|
|
476
|
+
*/
|
|
477
|
+
published(window, maxAgeMs = 60_000) {
|
|
478
|
+
const m = this.memo.get(window), now = (this.o.monotonic ?? (() => performance.now()))();
|
|
479
|
+
if (m && m.changes === this.changes && now - m.at < maxAgeMs)
|
|
480
|
+
return m.report;
|
|
481
|
+
const report = this.report(window);
|
|
482
|
+
this.memo.set(window, { at: now, changes: this.changes, report });
|
|
483
|
+
report.catch(() => this.memo.delete(window));
|
|
484
|
+
return report;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* #2122: what the usage report reads — each instance's ledger and rollup as they are now, or why it has none. Never
|
|
488
|
+
* reads a transcript (a catch-up is started, not waited for).
|
|
489
|
+
*/
|
|
490
|
+
async usageData() {
|
|
491
|
+
this.start();
|
|
492
|
+
void this.kick();
|
|
493
|
+
const insts = this.o.instances();
|
|
494
|
+
const shared = await this.shared(insts);
|
|
495
|
+
const out = [];
|
|
496
|
+
for (const inst of insts) {
|
|
497
|
+
await this.ledgerFor(inst);
|
|
498
|
+
await this.rollupFor(inst);
|
|
499
|
+
// One instance's ledger and rollup copied together, with no await between: a pass folds an hour into a new rollup
|
|
500
|
+
// and prunes it from the ledger later, so both copies hold it (the report counts it once, by the checkpoint) or
|
|
501
|
+
// one does — never neither. Copies, so a pass that runs while the next instance is loaded changes nothing here.
|
|
502
|
+
const live = this.ledgers.get(inst.name);
|
|
503
|
+
const ledger = { ...emptyLedger(), hours: structuredClone(live.hours), ...(live.writesSeen ? { writesSeen: true } : {}) }; // what the report reads
|
|
504
|
+
const days = structuredClone(this.rollups.get(inst.name));
|
|
505
|
+
// `status` is about collecting now; what it measured before (another backend, a directory it did not share yet)
|
|
506
|
+
// is in `ledger` and `days` either way.
|
|
507
|
+
const kind = kindOf(inst.backend), others = shared.get(inst.name);
|
|
508
|
+
if (!kind)
|
|
509
|
+
out.push({ inst, status: inst.backend.startsWith("kiro") ? "credit_billed" : "unsupported", ledger, days });
|
|
510
|
+
else if (others)
|
|
511
|
+
out.push({ inst, status: "shared", with: others, ledger, days });
|
|
512
|
+
else
|
|
513
|
+
out.push({ inst, status: "ok", ledger, days });
|
|
514
|
+
}
|
|
515
|
+
return { scanning: this.scanning(), instances: out };
|
|
516
|
+
}
|
|
359
517
|
/** The analysis for a window, from the ledgers as they are now (a catch-up is started, not waited for). */
|
|
360
518
|
async report(window) {
|
|
361
519
|
this.start();
|
|
362
520
|
void this.kick();
|
|
363
521
|
const to = this.now(), from = to - WINDOWS[window];
|
|
364
522
|
const instances = [];
|
|
365
|
-
const fleet = { expiryCost: 0, saving: 0, recommended: 0, analysed: 0, priced: true };
|
|
523
|
+
const fleet = { expiryCost: 0, saving: 0, recommended: 0, analysed: 0, priced: true, switchTo1h: 0 };
|
|
366
524
|
const insts = this.o.instances();
|
|
367
525
|
const shared = await this.shared(insts);
|
|
368
526
|
for (const inst of insts) {
|
|
@@ -384,6 +542,8 @@ export class CacheService {
|
|
|
384
542
|
}
|
|
385
543
|
instances.push({ name: inst.name, backend: inst.backend, status: "ok", analysis });
|
|
386
544
|
fleet.analysed++;
|
|
545
|
+
if (analysis.recommendation.reason === "switch_to_1h")
|
|
546
|
+
fleet.switchTo1h++;
|
|
387
547
|
if (!analysis.priced) {
|
|
388
548
|
fleet.priced = false;
|
|
389
549
|
continue;
|
|
@@ -410,8 +570,9 @@ async function cwdKeys(dir) {
|
|
|
410
570
|
}
|
|
411
571
|
/**
|
|
412
572
|
* A rollout's session_meta, read with one bounded read through the descriptor whose inode it records. Null while the
|
|
413
|
-
* first line is not complete yet (the next pass reads it again); `cwd: null` for a complete first
|
|
414
|
-
* a session_meta
|
|
573
|
+
* first line is not complete yet, or the file is gone (the next pass reads it again); `cwd: null` for a complete first
|
|
574
|
+
* line that is not a session_meta; "unreadable" when it is there and could not be read (EACCES, EIO… — #2122: not a
|
|
575
|
+
* real absence).
|
|
415
576
|
*/
|
|
416
577
|
export async function rolloutMeta(path) {
|
|
417
578
|
let fh;
|
|
@@ -431,8 +592,8 @@ export async function rolloutMeta(path) {
|
|
|
431
592
|
return { ino, cwd: null };
|
|
432
593
|
}
|
|
433
594
|
}
|
|
434
|
-
catch {
|
|
435
|
-
return null;
|
|
595
|
+
catch (err) {
|
|
596
|
+
return gone(err) ? null : "unreadable";
|
|
436
597
|
}
|
|
437
598
|
finally {
|
|
438
599
|
await fh?.close().catch(() => { });
|