@songsid/agend 2.3.0-beta.9 → 2.3.1
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 +16 -8
- package/README.zh-TW.md +16 -8
- package/dist/adapter-world.js.map +1 -1
- package/dist/agend-home.d.ts +5 -0
- package/dist/agend-home.js +7 -0
- package/dist/agend-home.js.map +1 -0
- package/dist/agent-cli-instructions.md +7 -1
- package/dist/agent-cli.js +41 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +9 -0
- package/dist/agent-endpoint.js +23 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.js +1 -1
- package/dist/agent-file-read.js.map +1 -1
- package/dist/agent-whats-new.d.ts +16 -0
- package/dist/agent-whats-new.js +53 -12
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/apply-job.js.map +1 -1
- package/dist/atomic-write.js.map +1 -1
- package/dist/auth-api.d.ts +12 -0
- package/dist/auth-api.js +77 -22
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +4 -0
- package/dist/authority/authority-state.js +17 -8
- package/dist/authority/authority-state.js.map +1 -1
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/authority/web-authority.d.ts +16 -8
- package/dist/authority/web-authority.js +19 -5
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/antigravity.d.ts +2 -2
- package/dist/backend/antigravity.js +2 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.js +13 -4
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +8 -0
- package/dist/backend/codex-metadata.js +74 -17
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex-package.d.ts +30 -0
- package/dist/backend/codex-package.js +133 -0
- package/dist/backend/codex-package.js.map +1 -0
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex.d.ts +2 -0
- package/dist/backend/codex.js +25 -5
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +2 -0
- package/dist/backend/credential-profile.js +2 -0
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/effort-metadata.js.map +1 -1
- package/dist/backend/grok.js +58 -3
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-engine-ledger.js.map +1 -1
- package/dist/backend/kiro-kas-store.js.map +1 -1
- package/dist/backend/kiro-v2-store.js.map +1 -1
- package/dist/backend/kiro-v3-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +9 -1
- package/dist/backend/kiro.js +102 -1
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/launch-effort.js.map +1 -1
- package/dist/backend/mock.js.map +1 -1
- package/dist/backend/muse.d.ts +20 -2
- package/dist/backend/muse.js +154 -16
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/opencode-permission.js +1 -1
- package/dist/backend/opencode-permission.js.map +1 -1
- package/dist/backend/opencode.js +2 -1
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/session-signals.js.map +1 -1
- package/dist/backend-availability.js.map +1 -1
- package/dist/backend-command.d.ts +2 -0
- package/dist/backend-command.js +3 -1
- package/dist/backend-command.js.map +1 -1
- package/dist/backend-outage.js.map +1 -1
- package/dist/binary-probe.js +1 -1
- package/dist/binary-probe.js.map +1 -1
- package/dist/bug-report-cli.d.ts +30 -0
- package/dist/bug-report-cli.js +139 -0
- package/dist/bug-report-cli.js.map +1 -0
- package/dist/bug-report.d.ts +47 -0
- package/dist/bug-report.js +137 -0
- package/dist/bug-report.js.map +1 -0
- package/dist/bundled-skills.d.ts +18 -0
- package/dist/bundled-skills.js +38 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-service.js +1 -1
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord-client-retirement.d.ts +5 -0
- package/dist/channel/adapters/discord-client-retirement.js +57 -0
- package/dist/channel/adapters/discord-client-retirement.js.map +1 -0
- package/dist/channel/adapters/discord.d.ts +4 -0
- package/dist/channel/adapters/discord.js +57 -12
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +7 -1
- package/dist/channel/adapters/telegram.js +57 -49
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +21 -4
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +3 -1
- package/dist/channel/mcp-tools.js +41 -4
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-queue.js.map +1 -1
- package/dist/channel/sticker-download.js.map +1 -1
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/child-process.d.ts +21 -0
- package/dist/child-process.js +54 -0
- package/dist/child-process.js.map +1 -0
- package/dist/classic-channel-manager.js +3 -2
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli-entry.js.map +1 -1
- package/dist/cli-flags.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +448 -313
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +1 -1
- package/dist/command-table.js +1 -1
- package/dist/command-table.js.map +1 -1
- package/dist/compact-watch.js.map +1 -1
- package/dist/completion-install.js.map +1 -1
- package/dist/completion.js.map +1 -1
- package/dist/config-validator.d.ts +6 -0
- package/dist/config-validator.js +81 -8
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +15 -3
- package/dist/config.js +41 -10
- package/dist/config.js.map +1 -1
- package/dist/connection-secrets.js.map +1 -1
- package/dist/context-guardian.js.map +1 -1
- package/dist/coredump-filter.js.map +1 -1
- package/dist/cpu-profile.js.map +1 -1
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +7 -0
- package/dist/cross-instance-notice.js +10 -0
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +52 -1
- package/dist/daemon.js +385 -27
- package/dist/daemon.js.map +1 -1
- package/dist/daily-summary.js.map +1 -1
- package/dist/darwin-memory.js +1 -1
- package/dist/darwin-memory.js.map +1 -1
- package/dist/dashboard-live.d.ts +8 -0
- package/dist/dashboard-live.js +35 -0
- package/dist/dashboard-live.js.map +1 -0
- package/dist/dashboard-permissions.d.ts +69 -0
- package/dist/dashboard-permissions.js +138 -0
- package/dist/dashboard-permissions.js.map +1 -0
- package/dist/decision-list.js.map +1 -1
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-outbox.d.ts +11 -0
- package/dist/delivery-outbox.js +52 -2
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-outbox.test.js.map +1 -1
- package/dist/delivery-reconciliation.test.js.map +1 -1
- package/dist/diagnostic-redaction.d.ts +10 -0
- package/dist/diagnostic-redaction.js +167 -0
- package/dist/diagnostic-redaction.js.map +1 -0
- package/dist/doctor.d.ts +8 -0
- package/dist/doctor.js +52 -0
- package/dist/doctor.js.map +1 -1
- package/dist/e2e-isolation.js.map +1 -1
- package/dist/event-log.js.map +1 -1
- package/dist/export-import.js +7 -5
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-context.d.ts +1 -1
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-label.js.map +1 -1
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +2 -0
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-lock.d.ts +6 -0
- package/dist/fleet-lock.js +22 -2
- package/dist/fleet-lock.js.map +1 -1
- package/dist/fleet-manager.d.ts +283 -15
- package/dist/fleet-manager.js +1825 -331
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +18 -0
- package/dist/fleet-process-handlers.js +70 -0
- package/dist/fleet-process-handlers.js.map +1 -0
- package/dist/fleet-startup.d.ts +14 -0
- package/dist/fleet-startup.js +30 -0
- package/dist/fleet-startup.js.map +1 -0
- package/dist/fleet-traffic.js.map +1 -1
- package/dist/forged-envelope-scan.d.ts +0 -20
- package/dist/forged-envelope-scan.js +3 -2
- package/dist/forged-envelope-scan.js.map +1 -1
- package/dist/full-restart.d.ts +5 -5
- package/dist/full-restart.js +5 -5
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/bug-report/SKILL.md +31 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +52 -11
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +5 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +3 -1
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +8 -9
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +11 -0
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -1
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
- package/dist/general-knowledge/skills/scheduling/SKILL.md +4 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +321 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +24 -4
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +554 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +156 -32
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/general-knowledge/steering/core-rules.md +1 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/idle-gate-log.d.ts +19 -0
- package/dist/idle-gate-log.js +15 -0
- package/dist/idle-gate-log.js.map +1 -0
- package/dist/instance-config-impact.js +25 -4
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +11 -1
- package/dist/instance-lifecycle.js +97 -25
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +12 -6
- package/dist/instructions.js +19 -10
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-compact-pane.js.map +1 -1
- package/dist/kiro-db-reader.js.map +1 -1
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-log-gate.js.map +1 -1
- package/dist/kiro-transcript-lane.js.map +1 -1
- package/dist/locale.js +450 -20
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +1 -0
- package/dist/log-service.js.map +1 -1
- package/dist/log-steps.d.ts +1 -0
- package/dist/log-steps.js +15 -0
- package/dist/log-steps.js.map +1 -1
- package/dist/logger.js +3 -2
- package/dist/logger.js.map +1 -1
- package/dist/login-controller.d.ts +45 -0
- package/dist/login-controller.js +101 -5
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.js +1 -1
- package/dist/login-manager.js.map +1 -1
- package/dist/login-shell.js +3 -1
- package/dist/login-shell.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +96 -0
- package/dist/ls-attach-resolve.js +180 -0
- package/dist/ls-attach-resolve.js.map +1 -0
- package/dist/ls-rows.d.ts +12 -0
- package/dist/ls-rows.js +83 -4
- package/dist/ls-rows.js.map +1 -1
- package/dist/memory-pressure.js.map +1 -1
- package/dist/muse-usage-relay.js.map +1 -1
- package/dist/needs-you-hub.d.ts +98 -1
- package/dist/needs-you-hub.js +313 -44
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +5 -2
- package/dist/needs-you-live.js +6 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/needs-you.d.ts +68 -3
- package/dist/needs-you.js +39 -4
- package/dist/needs-you.js.map +1 -1
- package/dist/network-family.js.map +1 -1
- package/dist/operator-control-paths.js +3 -4
- package/dist/operator-control-paths.js.map +1 -1
- package/dist/outbound-handlers.d.ts +5 -2
- package/dist/outbound-handlers.js +81 -24
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +106 -60
- package/dist/outbound-schemas.js +33 -10
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/outbox-open-error.js.map +1 -1
- package/dist/pane-context-cache.js.map +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/private-dir.js.map +1 -1
- package/dist/probe-worker-pool.js.map +1 -1
- package/dist/profile-control.js.map +1 -1
- package/dist/prompt-file-ref.js.map +1 -1
- package/dist/provider-probe.js.map +1 -1
- package/dist/provider-secret-registry.d.ts +5 -3
- package/dist/provider-secret-registry.js +8 -2
- package/dist/provider-secret-registry.js.map +1 -1
- package/dist/public-link-auto-open.d.ts +32 -0
- package/dist/public-link-auto-open.js +86 -0
- package/dist/public-link-auto-open.js.map +1 -0
- package/dist/public-link-owner.d.ts +10 -0
- package/dist/public-link-owner.js +36 -0
- package/dist/public-link-owner.js.map +1 -0
- package/dist/public-link-progress.d.ts +12 -1
- package/dist/public-link-progress.js +5 -10
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.js.map +1 -1
- package/dist/public-tunnel-config.d.ts +11 -0
- package/dist/public-tunnel-config.js +68 -0
- package/dist/public-tunnel-config.js.map +1 -0
- package/dist/public-web-gateway.d.ts +2 -0
- package/dist/public-web-gateway.js +19 -6
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +48 -3
- package/dist/public-web-link.js +177 -51
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +9 -0
- package/dist/quickstart-api.js +82 -0
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +5 -0
- package/dist/quickstart.js +40 -25
- package/dist/quickstart.js.map +1 -1
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-dedup.js.map +1 -1
- package/dist/resource-report.js +1 -1
- package/dist/resource-report.js.map +1 -1
- package/dist/restart-guard.js.map +1 -1
- package/dist/restart-progress.d.ts +80 -1
- package/dist/restart-progress.js +306 -21
- package/dist/restart-progress.js.map +1 -1
- package/dist/rollout-index.js.map +1 -1
- package/dist/runtime-cpu-profile.js.map +1 -1
- package/dist/scheduler/db.d.ts +40 -13
- package/dist/scheduler/db.js +123 -89
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/scheduler/task-board-text.d.ts +26 -0
- package/dist/scheduler/task-board-text.js +140 -0
- package/dist/scheduler/task-board-text.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +730 -0
- package/dist/scheduler/task-board.js +2179 -0
- package/dist/scheduler/task-board.js.map +1 -0
- package/dist/scheduler/types.d.ts +6 -1
- package/dist/sd-notify.js +2 -1
- package/dist/sd-notify.js.map +1 -1
- package/dist/search/search-docs.d.ts +58 -0
- package/dist/search/search-docs.js +63 -0
- package/dist/search/search-docs.js.map +1 -0
- package/dist/search/search-index.d.ts +149 -0
- package/dist/search/search-index.js +453 -0
- package/dist/search/search-index.js.map +1 -0
- package/dist/search/search-store.d.ts +122 -0
- package/dist/search/search-store.js +236 -0
- package/dist/search/search-store.js.map +1 -0
- package/dist/search/search-worker.d.ts +1 -0
- package/dist/search/search-worker.js +163 -0
- package/dist/search/search-worker.js.map +1 -0
- package/dist/secret-file.js.map +1 -1
- package/dist/secret-store.d.ts +2 -0
- package/dist/secret-store.js +21 -0
- package/dist/secret-store.js.map +1 -1
- package/dist/service-installer.d.ts +98 -1
- package/dist/service-installer.js +246 -11
- package/dist/service-installer.js.map +1 -1
- package/dist/service-owner.d.ts +44 -0
- package/dist/service-owner.js +48 -0
- package/dist/service-owner.js.map +1 -0
- package/dist/service-plan.d.ts +39 -2
- package/dist/service-plan.js +188 -6
- package/dist/service-plan.js.map +1 -1
- package/dist/session-oom-stop.d.ts +45 -0
- package/dist/session-oom-stop.js +259 -0
- package/dist/session-oom-stop.js.map +1 -0
- package/dist/session-oom.d.ts +34 -0
- package/dist/session-oom.js +251 -0
- package/dist/session-oom.js.map +1 -0
- package/dist/settings-api.d.ts +14 -1
- package/dist/settings-api.js +74 -13
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.d.ts +5 -0
- package/dist/settings-change.js +167 -6
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +9 -1
- package/dist/settings-confirmation.js +18 -8
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-control.js +2 -1
- package/dist/settings-control.js.map +1 -1
- package/dist/settings-effect.js +29 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +13 -0
- package/dist/settings-http-confirmation.js +15 -3
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +13 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/settings-request-capability.d.ts +4 -1
- package/dist/settings-request-capability.js +11 -3
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/settings-transaction.js.map +1 -1
- package/dist/setup-auth.d.ts +1 -0
- package/dist/setup-auth.js +2 -1
- package/dist/setup-auth.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +23 -7
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-host.d.ts +6 -1
- package/dist/setup-host.js +15 -4
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-wizard.js +6 -3
- package/dist/setup-wizard.js.map +1 -1
- package/dist/spawn-gate.d.ts +7 -0
- package/dist/spawn-gate.js +45 -12
- package/dist/spawn-gate.js.map +1 -1
- package/dist/start-attempt.d.ts +11 -0
- package/dist/start-attempt.js +29 -0
- package/dist/start-attempt.js.map +1 -0
- package/dist/start-failure-chat.d.ts +37 -0
- package/dist/start-failure-chat.js +142 -0
- package/dist/start-failure-chat.js.map +1 -0
- package/dist/start-failure-notice.d.ts +4 -0
- package/dist/start-failure-notice.js +20 -0
- package/dist/start-failure-notice.js.map +1 -0
- package/dist/start-failure.d.ts +171 -0
- package/dist/start-failure.js +348 -0
- package/dist/start-failure.js.map +1 -0
- package/dist/startup-memory-deadline.d.ts +23 -0
- package/dist/startup-memory-deadline.js +55 -0
- package/dist/startup-memory-deadline.js.map +1 -0
- package/dist/statusline-watcher.js.map +1 -1
- package/dist/storm-window.js.map +1 -1
- package/dist/systemd-peer-bus.js.map +1 -1
- package/dist/target-queue-worker.js.map +1 -1
- package/dist/task-board-summary.d.ts +101 -0
- package/dist/task-board-summary.js +177 -0
- package/dist/task-board-summary.js.map +1 -0
- package/dist/task-board-tool.d.ts +25 -0
- package/dist/task-board-tool.js +155 -0
- package/dist/task-board-tool.js.map +1 -0
- package/dist/task-board-waker.d.ts +51 -0
- package/dist/task-board-waker.js +141 -0
- package/dist/task-board-waker.js.map +1 -0
- package/dist/telegram-api-root.d.ts +1 -0
- package/dist/telegram-api-root.js +40 -0
- package/dist/telegram-api-root.js.map +1 -0
- package/dist/tips.js.map +1 -1
- package/dist/tmux-control.js +1 -1
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +104 -0
- package/dist/tmux-exec-helper.js +412 -0
- package/dist/tmux-exec-helper.js.map +1 -0
- package/dist/tmux-manager.d.ts +1 -0
- package/dist/tmux-manager.js +29 -13
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.js +2 -2
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-archiver.js.map +1 -1
- package/dist/topic-commands.d.ts +13 -0
- package/dist/topic-commands.js +56 -33
- package/dist/topic-commands.js.map +1 -1
- package/dist/topic-link.js.map +1 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-jsonl.js.map +1 -1
- package/dist/transcript-monitor.js +5 -0
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +2 -0
- package/dist/transcript-sources.js +4 -0
- package/dist/transcript-sources.js.map +1 -1
- package/dist/tunnel/cloudflared-install.js +3 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -16
- package/dist/tunnel/cloudflared.js +100 -13
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/lease.js +3 -2
- package/dist/tunnel/lease.js.map +1 -1
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/tunnel/named-diagnostics.d.ts +13 -0
- package/dist/tunnel/named-diagnostics.js +52 -0
- package/dist/tunnel/named-diagnostics.js.map +1 -0
- package/dist/tunnel/public-fetch.js.map +1 -1
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/tunnel/types.d.ts +4 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/types.d.ts +56 -2
- package/dist/ui/app-effects.js +23 -5
- package/dist/ui/app.html +2 -0
- package/dist/ui/backend-signin.js +297 -0
- package/dist/ui/chat-effects.js +10 -3
- package/dist/ui/chat-msg-actions.js +176 -0
- package/dist/ui/chat-render.js +62 -18
- package/dist/ui/chat-store.js +218 -48
- package/dist/ui/chat-strings.js +40 -8
- package/dist/ui/chat-thread.js +119 -10
- package/dist/ui/effect-trial-offer.js +2 -31
- package/dist/ui/effects-waker.js +2 -0
- package/dist/ui/fleet-canvas-layout.js +13 -4
- package/dist/ui/fleet-canvas.js +69 -28
- package/dist/ui/fleet-office-editor.js +149 -0
- package/dist/ui/fleet-office-model.js +358 -0
- package/dist/ui/fleet-office-pack.js +199 -0
- package/dist/ui/fleet-office-skin.js +474 -0
- package/dist/ui/fleet-office-store.js +49 -0
- package/dist/ui/fleet-office-zones.js +177 -0
- package/dist/ui/fleet-office.js +434 -0
- package/dist/ui/fleet-org.js +18 -5
- package/dist/ui/fleet-route-scene.js +272 -0
- package/dist/ui/fleet-route-worker.js +21 -0
- package/dist/ui/fleet-route.js +88 -0
- package/dist/ui/fleet-task-card.js +436 -0
- package/dist/ui/fleet-task-common.js +482 -0
- package/dist/ui/fleet-task-work.js +107 -0
- package/dist/ui/fleet-tasks.js +569 -0
- package/dist/ui/fleet-traffic.js +81 -18
- package/dist/ui/fleet-usage.js +36 -2
- package/dist/ui/guest-refused.html +41 -0
- package/dist/ui/icons/icon-192.png +0 -0
- package/dist/ui/icons/icon-512.png +0 -0
- package/dist/ui/image-lightbox.js +45 -1
- package/dist/ui/image-zoom.js +242 -0
- package/dist/ui/panel-chat.js +214 -57
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +32 -71
- package/dist/ui/panel-log.js +3 -3
- package/dist/ui/panel-needs.js +23 -6
- package/dist/ui/panel-settings.js +166 -33
- package/dist/ui/preview-panel.js +2 -1
- package/dist/ui/search-dialog.js +350 -0
- package/dist/ui/settings-appearance.js +170 -10
- package/dist/ui/settings-apply.js +3 -3
- package/dist/ui/settings-confirm.js +7 -2
- package/dist/ui/settings-dialogs.js +46 -21
- package/dist/ui/settings-discord.js +6 -2
- package/dist/ui/settings-guests.js +2 -1
- package/dist/ui/settings-learn.js +1 -0
- package/dist/ui/settings-model.js +51 -18
- package/dist/ui/settings-mods.js +8 -3
- package/dist/ui/settings-owner-effects.js +6 -4
- package/dist/ui/settings-strings.js +186 -6
- package/dist/ui/settings-token.js +3 -1
- package/dist/ui/settings-web-authority.js +13 -5
- package/dist/ui/settings-wizard.js +13 -7
- package/dist/ui/shared/agend-auth.js +2 -0
- package/dist/ui/shared/app-i18n.js +12 -5
- package/dist/ui/shared/app-needs.js +2 -2
- package/dist/ui/shared/app-prefs.js +15 -0
- package/dist/ui/shared/app-route.js +18 -0
- package/dist/ui/shared/app-shell.js +189 -28
- package/dist/ui/shared/app-store.js +3 -2
- package/dist/ui/shared/app-stream.js +5 -1
- package/dist/ui/shared/app-themes.js +116 -1
- package/dist/ui/shared/app.css +668 -48
- package/dist/ui/shared/app.js +9 -1
- package/dist/ui/shared/card-strings.js +4 -0
- package/dist/ui/shared/effect-app-runtime.js +7 -5
- package/dist/ui/shared/effect-chat-runtime.js +2 -7
- package/dist/ui/shared/effect-cursor.js +3 -2
- package/dist/ui/shared/effect-display-metadata.js +39 -0
- package/dist/ui/shared/effect-owner-source.js +8 -1
- package/dist/ui/shared/effect-registry.js +14 -4
- package/dist/ui/shared/effect-runtime-loader.js +3 -1
- package/dist/ui/shared/effect-stock-trust.js +5 -5
- package/dist/ui/shared/feature-flags.js +127 -0
- package/dist/ui/shared/guest-refused.js +35 -0
- package/dist/ui/shared/header-tools.js +2 -2
- package/dist/ui/shared/identity-card.js +26 -8
- package/dist/ui/shared/identity-color.js +17 -10
- package/dist/ui/shared/instance-nav.js +183 -28
- package/dist/ui/shared/owner-css.js +30 -1
- package/dist/ui/shared/panel-view.js +14 -29
- package/dist/ui/shared/text-undo.js +210 -0
- package/dist/ui/shared/tokens.css +4 -0
- package/dist/ui/shared/ui-dialog.js +5 -4
- package/dist/ui/shared/ui-icons.js +4 -0
- package/dist/ui/shared/ui-menu.js +20 -7
- package/dist/ui/shared/ui-toast.js +16 -3
- package/dist/ui/shared/usage-dialog.js +216 -16
- package/dist/ui/shared/view-strings.js +70 -4
- package/dist/ui/shared/web-authorize.js +50 -1
- package/dist/ui/signin.html +2 -0
- package/dist/ui/web-terminal/terminal.html +10 -10
- package/dist/ui/web-terminal/terminal.js +58 -12
- package/dist/update-check.js.map +1 -1
- package/dist/update-dispatch.js +1 -1
- package/dist/update-dispatch.js.map +1 -1
- package/dist/update-install.js.map +1 -1
- package/dist/update-launch.d.ts +10 -1
- package/dist/update-launch.js +39 -14
- package/dist/update-launch.js.map +1 -1
- package/dist/update-marker.js.map +1 -1
- package/dist/update-preflight.js +1 -1
- package/dist/update-preflight.js.map +1 -1
- package/dist/update-progress.d.ts +3 -1
- package/dist/update-progress.js +3 -1
- package/dist/update-progress.js.map +1 -1
- package/dist/usage/format-rich.js +6 -3
- package/dist/usage/format-rich.js.map +1 -1
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +2 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/i18n.d.ts +13 -1
- package/dist/usage/i18n.js +29 -0
- package/dist/usage/i18n.js.map +1 -1
- package/dist/usage/providers.d.ts +89 -2
- package/dist/usage/providers.js +247 -41
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/usage/usage-api.d.ts +5 -1
- package/dist/usage/usage-api.js +185 -58
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.js +1 -1
- package/dist/usage-rollup.js.map +1 -1
- package/dist/user-systemd.d.ts +24 -0
- package/dist/user-systemd.js +75 -0
- package/dist/user-systemd.js.map +1 -0
- package/dist/view-api.d.ts +7 -0
- package/dist/view-api.js +16 -4
- package/dist/view-api.js.map +1 -1
- package/dist/wake-coordinator.js.map +1 -1
- package/dist/web-ambient.js.map +1 -1
- package/dist/web-api.d.ts +58 -11
- package/dist/web-api.js +1104 -71
- package/dist/web-api.js.map +1 -1
- package/dist/web-app-icon-worker.d.ts +1 -0
- package/dist/web-app-icon-worker.js +16 -0
- package/dist/web-app-icon-worker.js.map +1 -0
- package/dist/web-app-icon.d.ts +109 -0
- package/dist/web-app-icon.js +257 -0
- package/dist/web-app-icon.js.map +1 -0
- package/dist/web-appearance-policy.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +1 -0
- package/dist/web-appearance-tools.js +7 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +4 -10
- package/dist/web-appearance.js +7 -4
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-auth.d.ts +8 -4
- package/dist/web-auth.js +33 -21
- package/dist/web-auth.js.map +1 -1
- package/dist/web-backend-login.d.ts +130 -0
- package/dist/web-backend-login.js +225 -0
- package/dist/web-backend-login.js.map +1 -0
- package/dist/web-card.js.map +1 -1
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +118 -8
- package/dist/web-chat-history.js +220 -25
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +5 -1
- package/dist/web-commands.js +1 -1
- package/dist/web-commands.js.map +1 -1
- package/dist/web-cookie-names.d.ts +5 -0
- package/dist/web-cookie-names.js +12 -0
- package/dist/web-cookie-names.js.map +1 -0
- package/dist/web-effect-bundle.d.ts +2 -2
- package/dist/web-effect-library.js.map +1 -1
- package/dist/web-effect-playback.js.map +1 -1
- package/dist/web-effect-profiles.d.ts +16 -16
- package/dist/web-effect-profiles.js +3 -2
- package/dist/web-effect-profiles.js.map +1 -1
- package/dist/web-effect-service.js.map +1 -1
- package/dist/web-effect-tools.js.map +1 -1
- package/dist/web-effect-trials.js.map +1 -1
- package/dist/web-effect-upload.js.map +1 -1
- package/dist/web-effect.d.ts +6 -6
- package/dist/web-effect.js.map +1 -1
- package/dist/web-experimental-http.d.ts +2 -0
- package/dist/web-experimental-http.js +12 -0
- package/dist/web-experimental-http.js.map +1 -0
- package/dist/web-experimental.d.ts +11 -0
- package/dist/web-experimental.js +49 -0
- package/dist/web-experimental.js.map +1 -0
- package/dist/web-guest-access.d.ts +4 -2
- package/dist/web-guest-access.js +22 -10
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-guest-rooms.js.map +1 -1
- package/dist/web-host-guard.d.ts +11 -0
- package/dist/web-host-guard.js +11 -0
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-icons.d.ts +33 -1
- package/dist/web-icons.js +83 -11
- package/dist/web-icons.js.map +1 -1
- package/dist/web-identity-color.js.map +1 -1
- package/dist/web-image-meta.d.ts +13 -0
- package/dist/web-image-meta.js +62 -0
- package/dist/web-image-meta.js.map +1 -1
- package/dist/web-images.js.map +1 -1
- package/dist/web-libavoid.d.ts +14 -0
- package/dist/web-libavoid.js +46 -0
- package/dist/web-libavoid.js.map +1 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-mentions.js.map +1 -1
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-mod-store.d.ts +2 -0
- package/dist/web-mod-store.js +10 -0
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-office-store.d.ts +104 -0
- package/dist/web-office-store.js +236 -0
- package/dist/web-office-store.js.map +1 -0
- package/dist/web-owner-css-store.d.ts +44 -1
- package/dist/web-owner-css-store.js +70 -9
- package/dist/web-owner-css-store.js.map +1 -1
- package/dist/web-owner-css.js.map +1 -1
- package/dist/web-png.d.ts +33 -0
- package/dist/web-png.js +329 -0
- package/dist/web-png.js.map +1 -0
- package/dist/web-prefs.d.ts +6 -0
- package/dist/web-prefs.js +29 -3
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +2 -0
- package/dist/web-preview.js +2 -0
- package/dist/web-preview.js.map +1 -1
- package/dist/web-profile.js.map +1 -1
- package/dist/web-reactions.d.ts +35 -0
- package/dist/web-reactions.js +47 -0
- package/dist/web-reactions.js.map +1 -0
- package/dist/web-request-context.d.ts +5 -0
- package/dist/web-request-context.js.map +1 -1
- package/dist/web-returning-device.d.ts +4 -2
- package/dist/web-returning-device.js +13 -6
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-schedules.js.map +1 -1
- package/dist/web-send-dedupe.d.ts +36 -0
- package/dist/web-send-dedupe.js +69 -0
- package/dist/web-send-dedupe.js.map +1 -0
- package/dist/web-session-authorization.js.map +1 -1
- package/dist/web-session.js +1 -1
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +3 -1
- package/dist/web-settings-patch.js +11 -5
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +6 -0
- package/dist/web-settings-tools.js +52 -17
- package/dist/web-settings-tools.js.map +1 -1
- package/dist/web-terminal-http.js +15 -2
- package/dist/web-terminal-http.js.map +1 -1
- package/dist/web-terminal.js +1 -1
- package/dist/web-terminal.js.map +1 -1
- package/dist/web-theme-store.d.ts +2 -2
- package/dist/web-theme-store.js +6 -3
- package/dist/web-theme-store.js.map +1 -1
- package/dist/web-theme.d.ts +29 -0
- package/dist/web-theme.js +89 -1
- package/dist/web-theme.js.map +1 -1
- package/dist/web-upload.d.ts +18 -1
- package/dist/web-upload.js +45 -7
- package/dist/web-upload.js.map +1 -1
- package/dist/web-widget.js.map +1 -1
- package/dist/webhook-emitter.js.map +1 -1
- package/dist/windows-shortcuts.d.ts +78 -0
- package/dist/windows-shortcuts.js +203 -0
- package/dist/windows-shortcuts.js.map +1 -0
- package/dist/workflow-templates/default.md +3 -0
- package/dist/working-state-journal.d.ts +68 -0
- package/dist/working-state-journal.js +93 -0
- package/dist/working-state-journal.js.map +1 -0
- package/dist/ws-server.js.map +1 -1
- package/dist/yaml-shared-nodes.d.ts +25 -0
- package/dist/yaml-shared-nodes.js +185 -0
- package/dist/yaml-shared-nodes.js.map +1 -0
- package/launcher/agend-install.cjs +828 -0
- package/launcher/install-admission.cjs +4 -39
- package/launcher/postinstall.cjs +14 -12
- package/launcher/private-home.cjs +43 -0
- package/package.json +16 -13
- package/scripts/preinstall-guard.cjs +2 -5
- package/templates/windows-shortcuts.ps1 +181 -0
- package/launcher/old-updater-note.cjs +0 -48
package/dist/usage/providers.js
CHANGED
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { readFile, writeFile, access, constants } from "node:fs/promises";
|
|
22
22
|
import { readFileSync, readdirSync } from "node:fs";
|
|
23
|
-
import { join, resolve, sep } from "node:path";
|
|
24
|
-
import { execFile } from "
|
|
23
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
24
|
+
import { execFile } from "../child-process.js";
|
|
25
25
|
import { getAgendHome } from "../paths.js";
|
|
26
26
|
import { loadFleetConfig } from "../config.js";
|
|
27
27
|
import { classicProfile, profileName, readClassicBindings } from "../classic-bindings.js";
|
|
28
|
-
import { CHAT_PROFILE_LOGIN_BACKENDS, credentialHomeSpec, credentialProfileLoginCommand, credentialProfileStoreHome, instanceCredentialProfile, } from "../backend/credential-profile.js";
|
|
28
|
+
import { CHAT_PROFILE_LOGIN_BACKENDS, credentialHomeSpec, credentialProfileHome, credentialProfileLoginCommand, credentialProfileStoreHome, instanceCredentialProfile, isCredentialProfileName, } from "../backend/credential-profile.js";
|
|
29
29
|
import { claudeKeychainService } from "../backend/claude-code.js";
|
|
30
30
|
import { readKiroAuthTokens } from "../backend/kiro-auth-store.js";
|
|
31
31
|
import { homedir, userInfo } from "node:os";
|
|
@@ -364,6 +364,9 @@ export async function fetchClaudeUsage(storeHome, scope = {}) {
|
|
|
364
364
|
// limits down. This is the case the whole statusline source exists for.
|
|
365
365
|
if (statusline)
|
|
366
366
|
return statuslineUsage(statusline, null);
|
|
367
|
+
// #2236: a profile on the host that no instance uses, signed out: not set up here — no row.
|
|
368
|
+
if (profileHome !== null && scope.hostOnly)
|
|
369
|
+
return { status: "no-credentials", hint: "Not logged in.", metrics: [] };
|
|
367
370
|
if (profileHome !== null) {
|
|
368
371
|
// On screen (`ok`, as kiro's signed-out row), with what signs this profile in — never a fallback: from chat
|
|
369
372
|
// (`/login claude-code <profile>`, #1699 part 2), or the exact line on the host — the same words as the auth alert.
|
|
@@ -510,10 +513,31 @@ export async function fetchClaudeUsage(storeHome, scope = {}) {
|
|
|
510
513
|
// the app), so embedding it is the accepted norm, not a leaked key. It is
|
|
511
514
|
// required for the refresh-token grant.
|
|
512
515
|
const AGY_TOKEN_FILE = ["antigravity-cli", "antigravity-oauth-token"];
|
|
516
|
+
/**
|
|
517
|
+
* The daily base first, the production base as the fallback. Checked live 2026-10-20 (#2240, a user's Google AI Pro
|
|
518
|
+
* account, read-only) against agy's own /quota: only the daily base, asked as agy's CLI asks (agyUserAgent), answers with
|
|
519
|
+
* the plan's Gemini quota and the Gemini 4 Argon group — agy's numbers exactly. The production base answers with a
|
|
520
|
+
* free-tier Gemini bucket and no Argon whatever the client says.
|
|
521
|
+
*/
|
|
513
522
|
const AGY_CLOUDCODE_URLS = [
|
|
514
523
|
"https://daily-cloudcode-pa.googleapis.com",
|
|
515
524
|
"https://cloudcode-pa.googleapis.com",
|
|
516
525
|
];
|
|
526
|
+
/**
|
|
527
|
+
* The agy CLI version AgEnD names itself as, in agy's own User-Agent (`antigravity/cli/<version> (aidev_client; …)`, as
|
|
528
|
+
* captured from agy 1.4.3's /quota, #2240, 2026-10-20). The daily base gates its summary on it: as `antigravity/cli/1.2.0`
|
|
529
|
+
* there was no Argon group, from 1.3.0 on there was; as `antigravity/cli/1.0.0` no Gemini group either; without the
|
|
530
|
+
* `cli/` segment (`antigravity/2.24.0`, OpenUsage's value) Gemini but never Argon. If Google raises the gate past it, a
|
|
531
|
+
* group disappears again and the row falls back to the busiest model's quota — a visible gap, never wrong numbers.
|
|
532
|
+
* Bump it here.
|
|
533
|
+
*/
|
|
534
|
+
export const AGY_CLIENT_VERSION = "1.4.3";
|
|
535
|
+
/** agy's own User-Agent shape (`antigravity/cli/%s (aidev_client; os_type=…; arch=…)`), for this host. */
|
|
536
|
+
export function agyUserAgent(platform = process.platform, arch = process.arch) {
|
|
537
|
+
const os = platform === "win32" ? "windows" : platform;
|
|
538
|
+
const cpu = arch === "x64" ? "amd64" : arch;
|
|
539
|
+
return `antigravity/cli/${AGY_CLIENT_VERSION} (aidev_client; os_type=${os}; arch=${cpu})`;
|
|
540
|
+
}
|
|
517
541
|
/**
|
|
518
542
|
* The Google installed-app OAuth client pair, READ FROM THE INSTALLED agy
|
|
519
543
|
* BINARY rather than committed here.
|
|
@@ -555,17 +579,50 @@ export function agyQuotaBuckets(body) {
|
|
|
555
579
|
const grouped = (body.groups ?? []).flatMap(g => (g.buckets ?? []).map(b => ({ ...b, group: g.displayName?.trim() || undefined })));
|
|
556
580
|
return grouped.length ? grouped : (body.buckets ?? []);
|
|
557
581
|
}
|
|
582
|
+
/**
|
|
583
|
+
* Each model's quota as a per-model bucket. Only models with a reset time count: agy's internal models (tab completion,
|
|
584
|
+
* `chat_…`) report a bare 1 with none, which is no limit anyone runs into.
|
|
585
|
+
*/
|
|
586
|
+
export function agyModelBuckets(body) {
|
|
587
|
+
return Object.entries(body.models ?? {}).flatMap(([id, m]) => m?.quotaInfo?.resetTime
|
|
588
|
+
? [{ bucketId: id, remainingFraction: m.quotaInfo.remainingFraction, resetTime: m.quotaInfo.resetTime, provider: m.modelProvider }]
|
|
589
|
+
: []);
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* The buckets to show: the summary's, then — for each pool the summary does not name — the models' own quotas
|
|
593
|
+
* (#2174). agy 1.4 (2026-10-19, this machine's live account) answered the summary with only the "Claude and GPT
|
|
594
|
+
* models" group while every Gemini model still had a quota of its own, so the Gemini pool vanished from the row.
|
|
595
|
+
*/
|
|
596
|
+
export function agyUsageBuckets(summary, models) {
|
|
597
|
+
const fromSummary = agyQuotaBuckets(summary);
|
|
598
|
+
const named = new Set(fromSummary.map(b => { const id = agyBucketId(b); return id ? agyPool(b, id) : null; }));
|
|
599
|
+
return [...fromSummary, ...(models ? agyModelBuckets(models).filter(b => !named.has(agyPool(b, b.bucketId))) : [])];
|
|
600
|
+
}
|
|
601
|
+
function agyBucketId(b) {
|
|
602
|
+
return b.bucketId?.trim() || (b.group ? b.displayName?.trim() : undefined);
|
|
603
|
+
}
|
|
604
|
+
/** agy's limits: a five-hour session and a week (the buckets' own `window`: "5h", "weekly"). */
|
|
605
|
+
const AGY_WINDOW_MS = { session: 5 * 3_600_000, weekly: 7 * 24 * 3_600_000 };
|
|
558
606
|
const AGY_POOLED = {
|
|
559
607
|
"gemini-5h": { pool: "Gemini", window: "session" },
|
|
560
608
|
"gemini-weekly": { pool: "Gemini", window: "weekly" },
|
|
561
609
|
"3p-5h": { pool: "Claude & others", window: "session" },
|
|
562
610
|
"3p-weekly": { pool: "Claude & others", window: "weekly" },
|
|
563
611
|
};
|
|
564
|
-
/**
|
|
612
|
+
/**
|
|
613
|
+
* The pool a bucket belongs to: its group when the summary names one (#1898), else its model's provider, else its id.
|
|
614
|
+
* One nobody recognises is a pool of its own under its own name — never folded into another, so a vendor rename shows
|
|
615
|
+
* up as a new row instead of hiding one (#2174).
|
|
616
|
+
*/
|
|
565
617
|
function agyPool(b, id) {
|
|
566
618
|
const pooled = AGY_POOLED[id];
|
|
567
619
|
if (pooled)
|
|
568
620
|
return pooled.pool;
|
|
621
|
+
// #2240: Gemini 4 Argon has a quota of its own on paid Pro plans ("Argon quota is separate", as agy shows it): its own pool,
|
|
622
|
+
// from a summary group or from its models (gemini-4-argon-*), never folded into Gemini's worst-of by the rule below.
|
|
623
|
+
const argon = agyArgonPool(b.group) ?? agyArgonPool(id);
|
|
624
|
+
if (argon)
|
|
625
|
+
return argon;
|
|
569
626
|
const group = b.group;
|
|
570
627
|
if (group) {
|
|
571
628
|
if (/gemini/i.test(group))
|
|
@@ -574,7 +631,27 @@ function agyPool(b, id) {
|
|
|
574
631
|
return "Claude & others";
|
|
575
632
|
return group;
|
|
576
633
|
}
|
|
577
|
-
|
|
634
|
+
const provider = b.provider?.replace(/^MODEL_PROVIDER_/, "");
|
|
635
|
+
if (provider) {
|
|
636
|
+
if (provider === "GOOGLE")
|
|
637
|
+
return "Gemini";
|
|
638
|
+
if (provider === "ANTHROPIC" || provider === "OPENAI")
|
|
639
|
+
return "Claude & others";
|
|
640
|
+
if (provider !== "UNSPECIFIED")
|
|
641
|
+
return provider.replace(/_/g, " ");
|
|
642
|
+
}
|
|
643
|
+
if (/^gemini/i.test(id))
|
|
644
|
+
return "Gemini";
|
|
645
|
+
if (/^(claude|gpt|3p)\b/i.test(id))
|
|
646
|
+
return "Claude & others";
|
|
647
|
+
return id;
|
|
648
|
+
}
|
|
649
|
+
/** "Gemini 4 Argon", "GEMINI 4 ARGON", "gemini-4-argon-high" → "Gemini 4 Argon"; any other Argon → "Argon"; else null. */
|
|
650
|
+
function agyArgonPool(text) {
|
|
651
|
+
if (!text || !/argon/i.test(text))
|
|
652
|
+
return null;
|
|
653
|
+
const version = /gemini[\s_-]*(\d+(?:\.\d+)?)[\s_-]*argon/i.exec(text);
|
|
654
|
+
return version ? `Gemini ${version[1]} Argon` : "Argon";
|
|
578
655
|
}
|
|
579
656
|
/** The limit a bucket counts against ("Five Hour Limit", window "5h" …), or null for a per-model bucket. */
|
|
580
657
|
function agyWindow(b, id) {
|
|
@@ -626,7 +703,7 @@ function agyLabel(pool, window) {
|
|
|
626
703
|
export function agyPoolMetrics(buckets) {
|
|
627
704
|
const entries = new Map();
|
|
628
705
|
for (const b of buckets) {
|
|
629
|
-
const id =
|
|
706
|
+
const id = agyBucketId(b);
|
|
630
707
|
if (!id || b.disabled === true || typeof b.remainingFraction !== "number" || !Number.isFinite(b.remainingFraction))
|
|
631
708
|
continue;
|
|
632
709
|
const pool = agyPool(b, id);
|
|
@@ -653,8 +730,10 @@ export function agyPoolMetrics(buckets) {
|
|
|
653
730
|
.filter(e => e.window || !limited.has(e.pool))
|
|
654
731
|
.sort((a, b) => pools.indexOf(a.pool) - pools.indexOf(b.pool) || order(a.window) - order(b.window))
|
|
655
732
|
.map(e => {
|
|
656
|
-
const label = agyLabel(e.pool, e.window);
|
|
657
|
-
const metric = { label: label.text, labelI18n: label.i18n, type: "percent", used: (1 - e.fraction) * 100, resetsAt: e.resetsAt
|
|
733
|
+
const label = agyLabel(e.pool, e.window), pool = agyLabel(e.pool, null);
|
|
734
|
+
const metric = { label: label.text, labelI18n: label.i18n, type: "percent", used: (1 - e.fraction) * 100, resetsAt: e.resetsAt,
|
|
735
|
+
// #2240: its window's length and its pool — the compact view shows a line per pool (Argon among them).
|
|
736
|
+
...(e.window ? { windowMs: AGY_WINDOW_MS[e.window] } : {}), pool: { label: pool.text, labelI18n: pool.i18n } };
|
|
658
737
|
// Which number this is: the highest usage across the pool's models. Without
|
|
659
738
|
// it a flat 0% right after a weekly rollover is indistinguishable from a
|
|
660
739
|
// broken reading — which is exactly how it was reported.
|
|
@@ -737,7 +816,76 @@ async function agyAccessToken() {
|
|
|
737
816
|
return { error: "Could not reach oauth2.googleapis.com.", errorI18n: i18n("usage.error.unreachable", "oauth2.googleapis.com") };
|
|
738
817
|
}
|
|
739
818
|
}
|
|
740
|
-
|
|
819
|
+
/**
|
|
820
|
+
* The models' own quotas (`fetchAvailableModels`, the list agy's model picker reads), from the same base as the
|
|
821
|
+
* summary. Only what the summary leaves out is taken from it, so a failure here costs nothing: null. Optional, so it
|
|
822
|
+
* never costs the row the summary already in hand (#2176 review, as the Codex ticket list, #1246): once the summary
|
|
823
|
+
* has answered it gets only what is left before the provider deadline, less a margin, and is then cancelled.
|
|
824
|
+
*/
|
|
825
|
+
const AGY_MODELS_DEADLINE_MARGIN_MS = 1_000;
|
|
826
|
+
function agyModels(base, token) {
|
|
827
|
+
return agyOptionalRead(base, token, "fetchAvailableModels", "{}");
|
|
828
|
+
}
|
|
829
|
+
/**
|
|
830
|
+
* The plan's name for the row (Google AI Pro …): `loadCodeAssist`, asked as agy asks it (its client metadata), read
|
|
831
|
+
* like the models' quotas — alongside the summary, optional, cancelled at the deadline. The paid tier wins over the
|
|
832
|
+
* current one, as OpenUsage reads it: a Pro account's current tier is "free-tier" (named "Antigravity").
|
|
833
|
+
*/
|
|
834
|
+
const AGY_LOAD_CODE_ASSIST_BODY = JSON.stringify({ metadata: { ideType: "ANTIGRAVITY", platform: "PLATFORM_UNSPECIFIED", pluginType: "GEMINI" } });
|
|
835
|
+
function agyCodeAssist(base, token) {
|
|
836
|
+
return agyOptionalRead(base, token, "loadCodeAssist", AGY_LOAD_CODE_ASSIST_BODY);
|
|
837
|
+
}
|
|
838
|
+
/** The plan's name from loadCodeAssist: the paid tier's, else the current tier's (its name, else its id), else null; at most
|
|
839
|
+
* AGY_PLAN_MAX characters (it is a badge on one line, and the text comes from the server). */
|
|
840
|
+
export function agyPlan(body) {
|
|
841
|
+
for (const tier of [body?.paidTier, body?.currentTier]) {
|
|
842
|
+
for (const v of [tier?.name, tier?.id])
|
|
843
|
+
if (typeof v === "string" && v.trim())
|
|
844
|
+
return truncatePlan(v.trim());
|
|
845
|
+
}
|
|
846
|
+
return null;
|
|
847
|
+
}
|
|
848
|
+
const AGY_PLAN_MAX = 64;
|
|
849
|
+
function truncatePlan(name) {
|
|
850
|
+
const chars = [...name];
|
|
851
|
+
return chars.length <= AGY_PLAN_MAX ? name : `${chars.slice(0, AGY_PLAN_MAX - 1).join("")}…`;
|
|
852
|
+
}
|
|
853
|
+
/** One optional Cloud Code read beside the summary: its body, or null on any failure; bounded by the caller's budget. */
|
|
854
|
+
function agyOptionalRead(base, token, method, requestBody) {
|
|
855
|
+
const abort = new AbortController();
|
|
856
|
+
const result = (async () => {
|
|
857
|
+
const res = await fetch(`${base}/v1internal:${method}`, {
|
|
858
|
+
method: "POST",
|
|
859
|
+
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json", "User-Agent": agyUserAgent() },
|
|
860
|
+
body: requestBody,
|
|
861
|
+
signal: AbortSignal.any([abort.signal, AbortSignal.timeout(LONGEST_SINGLE_FETCH_MS)]),
|
|
862
|
+
});
|
|
863
|
+
if (!res.ok)
|
|
864
|
+
return null;
|
|
865
|
+
const body = await res.json();
|
|
866
|
+
return body && typeof body === "object" ? body : null;
|
|
867
|
+
})().catch(() => null);
|
|
868
|
+
return {
|
|
869
|
+
cancel: () => abort.abort(),
|
|
870
|
+
async within(budgetMs) {
|
|
871
|
+
// No time left: an answer already in hand still counts (it settles first), nothing is waited for.
|
|
872
|
+
if (!(budgetMs > 0))
|
|
873
|
+
return Promise.race([result, Promise.resolve(null)]);
|
|
874
|
+
let timer;
|
|
875
|
+
// The timer settles the race, so a fetch that ignores its signal cannot hold the row; the caller then cancels it.
|
|
876
|
+
const timedOut = new Promise(resolve => { timer = setTimeout(() => resolve(null), budgetMs); });
|
|
877
|
+
try {
|
|
878
|
+
return await Promise.race([result, timedOut]);
|
|
879
|
+
}
|
|
880
|
+
finally {
|
|
881
|
+
clearTimeout(timer);
|
|
882
|
+
}
|
|
883
|
+
},
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
export async function fetchAntigravityUsage() {
|
|
887
|
+
// Monotonic: the deadline the models' budget is measured against is a timer, which a wall-clock change does not move.
|
|
888
|
+
const startedAt = performance.now();
|
|
741
889
|
// A CLI-observed rate limit outranks anything the quota API says. The bucket
|
|
742
890
|
// summary cannot see the account-level individual cap: verified live, it
|
|
743
891
|
// reported every bucket 0% used in the same minute the CLI was refusing work
|
|
@@ -763,38 +911,51 @@ async function fetchAntigravityUsage() {
|
|
|
763
911
|
if ("error" in auth)
|
|
764
912
|
return { status: "error", error: auth.error, errorI18n: auth.errorI18n, metrics: [] };
|
|
765
913
|
for (const base of AGY_CLOUDCODE_URLS) {
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
headers: {
|
|
771
|
-
Authorization: `Bearer ${auth.token}`,
|
|
772
|
-
"Content-Type": "application/json",
|
|
773
|
-
"User-Agent": "antigravity",
|
|
774
|
-
},
|
|
775
|
-
body: "{}",
|
|
776
|
-
signal: AbortSignal.timeout(LONGEST_SINGLE_FETCH_MS),
|
|
777
|
-
});
|
|
778
|
-
}
|
|
779
|
-
catch {
|
|
780
|
-
continue;
|
|
781
|
-
}
|
|
782
|
-
if (res.status === 401 || res.status === 403) {
|
|
783
|
-
return { status: "error", error: "Token rejected. Run `agy` once to refresh the login.", errorI18n: i18n("usage.error.token_rejected", "agy"), metrics: [] };
|
|
784
|
-
}
|
|
785
|
-
if (!res.ok)
|
|
786
|
-
continue; // try the other base
|
|
787
|
-
let body;
|
|
914
|
+
// Alongside the summary, not after it: one more round trip in the chain would push a slow-but-healthy pair past
|
|
915
|
+
// the provider deadline. Cancelled when the summary fails (it never rejects).
|
|
916
|
+
const models = agyModels(base, auth.token);
|
|
917
|
+
const codeAssist = agyCodeAssist(base, auth.token);
|
|
788
918
|
try {
|
|
789
|
-
|
|
919
|
+
let res;
|
|
920
|
+
try {
|
|
921
|
+
res = await fetch(`${base}/v1internal:retrieveUserQuotaSummary`, {
|
|
922
|
+
method: "POST",
|
|
923
|
+
headers: {
|
|
924
|
+
Authorization: `Bearer ${auth.token}`,
|
|
925
|
+
"Content-Type": "application/json",
|
|
926
|
+
"User-Agent": agyUserAgent(),
|
|
927
|
+
},
|
|
928
|
+
body: "{}",
|
|
929
|
+
signal: AbortSignal.timeout(LONGEST_SINGLE_FETCH_MS),
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
catch {
|
|
933
|
+
continue;
|
|
934
|
+
}
|
|
935
|
+
if (res.status === 401 || res.status === 403) {
|
|
936
|
+
return { status: "error", error: "Token rejected. Run `agy` once to refresh the login.", errorI18n: i18n("usage.error.token_rejected", "agy"), metrics: [] };
|
|
937
|
+
}
|
|
938
|
+
if (!res.ok)
|
|
939
|
+
continue; // try the other base
|
|
940
|
+
let body;
|
|
941
|
+
try {
|
|
942
|
+
body = await res.json();
|
|
943
|
+
}
|
|
944
|
+
catch {
|
|
945
|
+
continue;
|
|
946
|
+
}
|
|
947
|
+
const budgetMs = providerDeadlineMs - (performance.now() - startedAt) - AGY_MODELS_DEADLINE_MARGIN_MS;
|
|
948
|
+
const [modelList, assist] = await Promise.all([models.within(budgetMs), codeAssist.within(budgetMs)]);
|
|
949
|
+
const metrics = agyPoolMetrics(agyUsageBuckets(body ?? {}, modelList));
|
|
950
|
+
const plan = agyPlan(assist);
|
|
951
|
+
return metrics.length
|
|
952
|
+
? { status: "ok", plan, metrics }
|
|
953
|
+
: { status: "ok", plan, hint: "No quota information reported for this account.", hintI18n: i18n("usage.hint.no_quota"), metrics: [] };
|
|
790
954
|
}
|
|
791
|
-
|
|
792
|
-
|
|
955
|
+
finally {
|
|
956
|
+
models.cancel(); // a base given up on, or a read already settled: nothing left to wait for
|
|
957
|
+
codeAssist.cancel();
|
|
793
958
|
}
|
|
794
|
-
const metrics = agyPoolMetrics(agyQuotaBuckets(body ?? {}));
|
|
795
|
-
return metrics.length
|
|
796
|
-
? { status: "ok", plan: null, metrics }
|
|
797
|
-
: { status: "ok", plan: null, hint: "No quota information reported for this account.", hintI18n: i18n("usage.hint.no_quota"), metrics: [] };
|
|
798
959
|
}
|
|
799
960
|
return { status: "error", error: "Could not reach the Cloud Code quota endpoints.", errorI18n: i18n("usage.error.unreachable", "Cloud Code quota endpoints"), metrics: [] };
|
|
800
961
|
}
|
|
@@ -1434,6 +1595,8 @@ export function providersForConfig(config, base = DEFAULT_PROVIDERS) {
|
|
|
1434
1595
|
const backendName = usageBackendForProviderId(provider.id);
|
|
1435
1596
|
if (!backendName || !credentialHomeSpec(backendName))
|
|
1436
1597
|
return [provider];
|
|
1598
|
+
if (provider.id === "claude")
|
|
1599
|
+
return claudeHostRows(config, provider, backendName);
|
|
1437
1600
|
const profiles = effectiveCredentialProfiles(config, backendName);
|
|
1438
1601
|
if (profiles.length === 0)
|
|
1439
1602
|
return [provider];
|
|
@@ -1451,6 +1614,7 @@ export function providersForConfig(config, base = DEFAULT_PROVIDERS) {
|
|
|
1451
1614
|
rows.push({
|
|
1452
1615
|
id: provider.id,
|
|
1453
1616
|
name: provider.id === "codex" ? `${provider.name} (default)` : provider.name,
|
|
1617
|
+
...(provider.id === "codex" ? { defaultLogin: true } : {}),
|
|
1454
1618
|
// Claude's shared row keeps its statusline fallback to the shared instances (#1699); others ignore the scope.
|
|
1455
1619
|
fetch: () => provider.fetch(undefined, { besideProfiles: true }),
|
|
1456
1620
|
});
|
|
@@ -1464,6 +1628,48 @@ export function providersForConfig(config, base = DEFAULT_PROVIDERS) {
|
|
|
1464
1628
|
return rows;
|
|
1465
1629
|
});
|
|
1466
1630
|
}
|
|
1631
|
+
/**
|
|
1632
|
+
* #2236: one row per Claude login ON THE HOST, used by an instance or not — the default (shared) login and every
|
|
1633
|
+
* credential profile there. A subscription at its limit is exactly the one a person stops using; it must not vanish
|
|
1634
|
+
* because nothing runs on it (a user's first account, full, had no row once every instance moved to new profiles).
|
|
1635
|
+
* The shared row is "Claude (default)" beside profiles (shown whenever that login exists); a profile no instance uses
|
|
1636
|
+
* shows only when signed in. isHostLoginUsageProvider keeps these rows through the snapshot's running-instances filter.
|
|
1637
|
+
*/
|
|
1638
|
+
function claudeHostRows(config, provider, backendName) {
|
|
1639
|
+
const inUse = effectiveCredentialProfiles(config, backendName);
|
|
1640
|
+
const profiles = [...new Set([...inUse, ...claudeProfilesOnHost()])].sort();
|
|
1641
|
+
if (profiles.length === 0)
|
|
1642
|
+
return [provider];
|
|
1643
|
+
const homes = profiles.map(profile => credentialProfileStoreHome(getAgendHome(), backendName, profile));
|
|
1644
|
+
return [
|
|
1645
|
+
{ id: provider.id, name: `${provider.name} (default)`, defaultLogin: true, fetch: () => provider.fetch(undefined, { besideProfiles: true }) },
|
|
1646
|
+
...profiles.map((profile, i) => ({
|
|
1647
|
+
id: `${provider.id}:${profile}`,
|
|
1648
|
+
name: `${provider.name} (${profile})`,
|
|
1649
|
+
profile,
|
|
1650
|
+
fetch: () => provider.fetch(homes[i], inUse.includes(profile) ? { profile } : { profile, hostOnly: true }),
|
|
1651
|
+
})),
|
|
1652
|
+
];
|
|
1653
|
+
}
|
|
1654
|
+
/** What a row says about whose login it reads: its profile (#2014), or that it is the default login beside profiles. */
|
|
1655
|
+
function rowTags(p) {
|
|
1656
|
+
return { ...(p.profile ? { profile: p.profile } : {}), ...(p.defaultLogin ? { defaultLogin: true } : {}) };
|
|
1657
|
+
}
|
|
1658
|
+
/** #2236: the Claude credential profiles on this host (their directories), whether or not an instance uses them. */
|
|
1659
|
+
function claudeProfilesOnHost() {
|
|
1660
|
+
try {
|
|
1661
|
+
return readdirSync(dirname(credentialProfileHome(getAgendHome(), "claude-code", "x")), { withFileTypes: true })
|
|
1662
|
+
.filter(e => e.isDirectory() && isCredentialProfileName(e.name))
|
|
1663
|
+
.map(e => e.name);
|
|
1664
|
+
}
|
|
1665
|
+
catch {
|
|
1666
|
+
return [];
|
|
1667
|
+
}
|
|
1668
|
+
}
|
|
1669
|
+
/** #2236: a Claude login's row — kept on screen whether or not a running instance uses it. */
|
|
1670
|
+
export function isHostLoginUsageProvider(id) {
|
|
1671
|
+
return id === "claude" || id.startsWith("claude:");
|
|
1672
|
+
}
|
|
1467
1673
|
/**
|
|
1468
1674
|
* Whether at least one effective fleet binding uses the legacy shared login.
|
|
1469
1675
|
*
|
|
@@ -1645,16 +1851,16 @@ export async function fetchAllUsage(config) {
|
|
|
1645
1851
|
// Fail soft: this row says it could not be read, the rest still answer,
|
|
1646
1852
|
// and the snapshot returns in bounded time.
|
|
1647
1853
|
return {
|
|
1648
|
-
id: p.id, name: p.name, ...(p
|
|
1854
|
+
id: p.id, name: p.name, ...rowTags(p), status: "error",
|
|
1649
1855
|
error: `Could not reach ${p.name}.`,
|
|
1650
1856
|
errorI18n: i18n("usage.error.unreachable", p.name),
|
|
1651
1857
|
metrics: [],
|
|
1652
1858
|
};
|
|
1653
1859
|
}
|
|
1654
|
-
return { id: p.id, name: p.name, ...(p
|
|
1860
|
+
return { id: p.id, name: p.name, ...rowTags(p), ...outcome };
|
|
1655
1861
|
}
|
|
1656
1862
|
catch (err) {
|
|
1657
|
-
return { id: p.id, name: p.name, ...(p
|
|
1863
|
+
return { id: p.id, name: p.name, ...rowTags(p), status: "error", error: String(err?.message ?? err), metrics: [] };
|
|
1658
1864
|
}
|
|
1659
1865
|
}));
|
|
1660
1866
|
return {
|