@songsid/agend 2.3.5-alpha.4 → 2.3.5-alpha.5
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/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/accounts-view.d.ts +97 -0
- package/dist/accounts-view.js +116 -0
- package/dist/accounts-view.js.map +1 -0
- package/dist/agent-cli-instructions.md +1 -1
- package/dist/agent-credentials.d.ts +24 -0
- package/dist/agent-credentials.js +66 -0
- package/dist/agent-credentials.js.map +1 -0
- package/dist/agent-endpoint.d.ts +3 -1
- package/dist/agent-endpoint.js +13 -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-runtime-change.d.ts +3 -1
- package/dist/agent-runtime-change.js +15 -3
- package/dist/agent-runtime-change.js.map +1 -1
- package/dist/agent-workspace.d.ts +93 -0
- package/dist/agent-workspace.js +353 -0
- package/dist/agent-workspace.js.map +1 -0
- package/dist/auth-api.d.ts +27 -0
- package/dist/auth-api.js +164 -3
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/session-authorizations.d.ts +28 -4
- package/dist/authority/session-authorizations.js +63 -17
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/backend/antigravity.js +3 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/codex-footer-hints.d.ts +3 -0
- package/dist/backend/codex-footer-hints.js +14 -0
- package/dist/backend/codex-footer-hints.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +14 -0
- package/dist/backend/codex-metadata.js +45 -0
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex-quota-history.d.ts +7 -0
- package/dist/backend/codex-quota-history.js +57 -0
- package/dist/backend/codex-quota-history.js.map +1 -0
- package/dist/backend/codex-session-lookup.d.ts +6 -0
- package/dist/backend/codex-session-lookup.js +1 -1
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex-speed.d.ts +14 -0
- package/dist/backend/codex-speed.js +35 -0
- package/dist/backend/codex-speed.js.map +1 -0
- package/dist/backend/codex.d.ts +7 -0
- package/dist/backend/codex.js +78 -15
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok-weekly-reset.d.ts +24 -0
- package/dist/backend/grok-weekly-reset.js +95 -0
- package/dist/backend/grok-weekly-reset.js.map +1 -0
- package/dist/backend/grok.d.ts +30 -1
- package/dist/backend/grok.js +301 -54
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +3 -0
- package/dist/backend/kiro.js +50 -2
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +5 -3
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/native-pane.d.ts +3 -1
- package/dist/backend/native-pane.js +2 -2
- package/dist/backend/native-pane.js.map +1 -1
- package/dist/backend/types.d.ts +13 -1
- package/dist/backend/types.js +3 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/build-provenance-cli.d.ts +3 -0
- package/dist/build-provenance-cli.js +11 -0
- package/dist/build-provenance-cli.js.map +1 -0
- package/dist/build-provenance.d.ts +20 -0
- package/dist/build-provenance.js +67 -0
- package/dist/build-provenance.js.map +1 -0
- package/dist/build-provenance.json +1 -0
- package/dist/cache-ledger.d.ts +95 -0
- package/dist/cache-ledger.js +276 -4
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-service.d.ts +5 -0
- package/dist/cache-service.js +16 -4
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.js +11 -3
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +51 -0
- package/dist/channel/adapters/telegram.js +235 -17
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/claude-auth-status.d.ts +48 -0
- package/dist/claude-auth-status.js +149 -0
- package/dist/claude-auth-status.js.map +1 -0
- package/dist/cli.js +138 -37
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +21 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +10 -0
- package/dist/cross-instance-notice.js +67 -5
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +70 -1
- package/dist/daemon.js +547 -25
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +8 -0
- package/dist/dashboard-permissions.js +16 -0
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +23 -1
- package/dist/delivery-consumed-watch.js +30 -3
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +1 -1
- package/dist/delivery-reconciliation.js +1 -1
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/doctor.js +20 -9
- package/dist/doctor.js.map +1 -1
- package/dist/export-import.d.ts +7 -0
- package/dist/export-import.js +44 -10
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -0
- package/dist/fleet-manager.d.ts +359 -7
- package/dist/fleet-manager.js +1365 -90
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-windows-runtime.d.ts +2 -1
- package/dist/fleet-windows-runtime.js +25 -7
- package/dist/fleet-windows-runtime.js.map +1 -1
- package/dist/general-knowledge/skills/concepts/SKILL.md +425 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +2 -2
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
- package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +10 -10
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +31 -15
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/general-role.d.ts +1 -1
- package/dist/general-role.js +1 -0
- package/dist/general-role.js.map +1 -1
- package/dist/hub/admission.d.ts +28 -0
- package/dist/hub/admission.js +62 -0
- package/dist/hub/admission.js.map +1 -0
- package/dist/hub/attachments/limits.d.ts +20 -0
- package/dist/hub/attachments/limits.js +48 -0
- package/dist/hub/attachments/limits.js.map +1 -0
- package/dist/hub/attachments/store.d.ts +116 -0
- package/dist/hub/attachments/store.js +246 -0
- package/dist/hub/attachments/store.js.map +1 -0
- package/dist/hub/audit/index.d.ts +62 -0
- package/dist/hub/audit/index.js +344 -0
- package/dist/hub/audit/index.js.map +1 -0
- package/dist/hub/browser-certificate.d.ts +38 -0
- package/dist/hub/browser-certificate.js +247 -0
- package/dist/hub/browser-certificate.js.map +1 -0
- package/dist/hub/buttons-model.d.ts +9 -0
- package/dist/hub/buttons-model.js +42 -0
- package/dist/hub/buttons-model.js.map +1 -0
- package/dist/hub/buttons.d.ts +54 -0
- package/dist/hub/buttons.js +346 -0
- package/dist/hub/buttons.js.map +1 -0
- package/dist/hub/catalog.d.ts +74 -0
- package/dist/hub/catalog.js +195 -0
- package/dist/hub/catalog.js.map +1 -0
- package/dist/hub/client.d.ts +69 -0
- package/dist/hub/client.js +300 -0
- package/dist/hub/client.js.map +1 -0
- package/dist/hub/compose/member.d.ts +139 -0
- package/dist/hub/compose/member.js +450 -0
- package/dist/hub/compose/member.js.map +1 -0
- package/dist/hub/compose/server.d.ts +77 -0
- package/dist/hub/compose/server.js +349 -0
- package/dist/hub/compose/server.js.map +1 -0
- package/dist/hub/compose/views.d.ts +12 -0
- package/dist/hub/compose/views.js +4 -0
- package/dist/hub/compose/views.js.map +1 -0
- package/dist/hub/db.d.ts +56 -0
- package/dist/hub/db.js +188 -0
- package/dist/hub/db.js.map +1 -0
- package/dist/hub/directory/config.d.ts +39 -0
- package/dist/hub/directory/config.js +108 -0
- package/dist/hub/directory/config.js.map +1 -0
- package/dist/hub/directory/directory.d.ts +18 -0
- package/dist/hub/directory/directory.js +320 -0
- package/dist/hub/directory/directory.js.map +1 -0
- package/dist/hub/directory/index.d.ts +7 -0
- package/dist/hub/directory/index.js +4 -0
- package/dist/hub/directory/index.js.map +1 -0
- package/dist/hub/directory/profiles.d.ts +41 -0
- package/dist/hub/directory/profiles.js +90 -0
- package/dist/hub/directory/profiles.js.map +1 -0
- package/dist/hub/directory/types.d.ts +71 -0
- package/dist/hub/directory/types.js +14 -0
- package/dist/hub/directory/types.js.map +1 -0
- package/dist/hub/execution/cli-provider.d.ts +23 -0
- package/dist/hub/execution/cli-provider.js +341 -0
- package/dist/hub/execution/cli-provider.js.map +1 -0
- package/dist/hub/execution/index.d.ts +13 -0
- package/dist/hub/execution/index.js +8 -0
- package/dist/hub/execution/index.js.map +1 -0
- package/dist/hub/execution/model-broker.d.ts +24 -0
- package/dist/hub/execution/model-broker.js +208 -0
- package/dist/hub/execution/model-broker.js.map +1 -0
- package/dist/hub/execution/provider-setup.d.ts +11 -0
- package/dist/hub/execution/provider-setup.js +21 -0
- package/dist/hub/execution/provider-setup.js.map +1 -0
- package/dist/hub/execution/sandbox-runner.d.ts +1 -0
- package/dist/hub/execution/sandbox-runner.js +221 -0
- package/dist/hub/execution/sandbox-runner.js.map +1 -0
- package/dist/hub/execution/service.d.ts +136 -0
- package/dist/hub/execution/service.js +459 -0
- package/dist/hub/execution/service.js.map +1 -0
- package/dist/hub/execution/store.d.ts +61 -0
- package/dist/hub/execution/store.js +182 -0
- package/dist/hub/execution/store.js.map +1 -0
- package/dist/hub/execution/views.d.ts +20 -0
- package/dist/hub/execution/views.js +48 -0
- package/dist/hub/execution/views.js.map +1 -0
- package/dist/hub/http/compose.d.ts +20 -0
- package/dist/hub/http/compose.js +518 -0
- package/dist/hub/http/compose.js.map +1 -0
- package/dist/hub/http/core.d.ts +49 -0
- package/dist/hub/http/core.js +124 -0
- package/dist/hub/http/core.js.map +1 -0
- package/dist/hub/http/deps.d.ts +61 -0
- package/dist/hub/http/deps.js +2 -0
- package/dist/hub/http/deps.js.map +1 -0
- package/dist/hub/http/schema.d.ts +14 -0
- package/dist/hub/http/schema.js +80 -0
- package/dist/hub/http/schema.js.map +1 -0
- package/dist/hub/identity.d.ts +32 -0
- package/dist/hub/identity.js +80 -0
- package/dist/hub/identity.js.map +1 -0
- package/dist/hub/init/browser-certificate.d.ts +9 -0
- package/dist/hub/init/browser-certificate.js +78 -0
- package/dist/hub/init/browser-certificate.js.map +1 -0
- package/dist/hub/init/browser-tls.d.ts +18 -0
- package/dist/hub/init/browser-tls.js +62 -0
- package/dist/hub/init/browser-tls.js.map +1 -0
- package/dist/hub/init/cli.d.ts +3 -0
- package/dist/hub/init/cli.js +83 -0
- package/dist/hub/init/cli.js.map +1 -0
- package/dist/hub/init/directory-certificate.d.ts +24 -0
- package/dist/hub/init/directory-certificate.js +222 -0
- package/dist/hub/init/directory-certificate.js.map +1 -0
- package/dist/hub/init/existing-fleet.d.ts +6 -0
- package/dist/hub/init/existing-fleet.js +58 -0
- package/dist/hub/init/existing-fleet.js.map +1 -0
- package/dist/hub/init/handoff.d.ts +8 -0
- package/dist/hub/init/handoff.js +36 -0
- package/dist/hub/init/handoff.js.map +1 -0
- package/dist/hub/init/identity.d.ts +5 -0
- package/dist/hub/init/identity.js +24 -0
- package/dist/hub/init/identity.js.map +1 -0
- package/dist/hub/init/initializer.d.ts +24 -0
- package/dist/hub/init/initializer.js +385 -0
- package/dist/hub/init/initializer.js.map +1 -0
- package/dist/hub/init/inventory.d.ts +17 -0
- package/dist/hub/init/inventory.js +33 -0
- package/dist/hub/init/inventory.js.map +1 -0
- package/dist/hub/init/layout.d.ts +32 -0
- package/dist/hub/init/layout.js +53 -0
- package/dist/hub/init/layout.js.map +1 -0
- package/dist/hub/init/network.d.ts +18 -0
- package/dist/hub/init/network.js +104 -0
- package/dist/hub/init/network.js.map +1 -0
- package/dist/hub/init/plan-digest.d.ts +5 -0
- package/dist/hub/init/plan-digest.js +47 -0
- package/dist/hub/init/plan-digest.js.map +1 -0
- package/dist/hub/init/prompt.d.ts +26 -0
- package/dist/hub/init/prompt.js +110 -0
- package/dist/hub/init/prompt.js.map +1 -0
- package/dist/hub/init/secret-file.d.ts +1 -0
- package/dist/hub/init/secret-file.js +59 -0
- package/dist/hub/init/secret-file.js.map +1 -0
- package/dist/hub/init/text.d.ts +127 -0
- package/dist/hub/init/text.js +247 -0
- package/dist/hub/init/text.js.map +1 -0
- package/dist/hub/init/types.d.ts +114 -0
- package/dist/hub/init/types.js +9 -0
- package/dist/hub/init/types.js.map +1 -0
- package/dist/hub/init/wizard.d.ts +34 -0
- package/dist/hub/init/wizard.js +554 -0
- package/dist/hub/init/wizard.js.map +1 -0
- package/dist/hub/initialization.d.ts +23 -0
- package/dist/hub/initialization.js +28 -0
- package/dist/hub/initialization.js.map +1 -0
- package/dist/hub/member/agent-mode.d.ts +6 -0
- package/dist/hub/member/agent-mode.js +23 -0
- package/dist/hub/member/agent-mode.js.map +1 -0
- package/dist/hub/member/attachments.d.ts +29 -0
- package/dist/hub/member/attachments.js +107 -0
- package/dist/hub/member/attachments.js.map +1 -0
- package/dist/hub/member/exposure-api.d.ts +87 -0
- package/dist/hub/member/exposure-api.js +64 -0
- package/dist/hub/member/exposure-api.js.map +1 -0
- package/dist/hub/member/exposures.d.ts +123 -0
- package/dist/hub/member/exposures.js +282 -0
- package/dist/hub/member/exposures.js.map +1 -0
- package/dist/hub/member/pairing-api.d.ts +85 -0
- package/dist/hub/member/pairing-api.js +385 -0
- package/dist/hub/member/pairing-api.js.map +1 -0
- package/dist/hub/member/quota.d.ts +20 -0
- package/dist/hub/member/quota.js +98 -0
- package/dist/hub/member/quota.js.map +1 -0
- package/dist/hub/member-journal.d.ts +104 -0
- package/dist/hub/member-journal.js +336 -0
- package/dist/hub/member-journal.js.map +1 -0
- package/dist/hub/member-reconciliation.d.ts +14 -0
- package/dist/hub/member-reconciliation.js +97 -0
- package/dist/hub/member-reconciliation.js.map +1 -0
- package/dist/hub/mount.d.ts +39 -0
- package/dist/hub/mount.js +123 -0
- package/dist/hub/mount.js.map +1 -0
- package/dist/hub/pairing-client.d.ts +17 -0
- package/dist/hub/pairing-client.js +108 -0
- package/dist/hub/pairing-client.js.map +1 -0
- package/dist/hub/pairing.d.ts +65 -0
- package/dist/hub/pairing.js +211 -0
- package/dist/hub/pairing.js.map +1 -0
- package/dist/hub/policy.d.ts +63 -0
- package/dist/hub/policy.js +147 -0
- package/dist/hub/policy.js.map +1 -0
- package/dist/hub/preview.d.ts +32 -0
- package/dist/hub/preview.js +64 -0
- package/dist/hub/preview.js.map +1 -0
- package/dist/hub/private-files.d.ts +5 -0
- package/dist/hub/private-files.js +44 -0
- package/dist/hub/private-files.js.map +1 -0
- package/dist/hub/profile.d.ts +59 -0
- package/dist/hub/profile.js +73 -0
- package/dist/hub/profile.js.map +1 -0
- package/dist/hub/protocol.d.ts +779 -0
- package/dist/hub/protocol.js +93 -0
- package/dist/hub/protocol.js.map +1 -0
- package/dist/hub/quota.d.ts +24 -0
- package/dist/hub/quota.js +112 -0
- package/dist/hub/quota.js.map +1 -0
- package/dist/hub/representative.d.ts +141 -0
- package/dist/hub/representative.js +528 -0
- package/dist/hub/representative.js.map +1 -0
- package/dist/hub/retention.d.ts +17 -0
- package/dist/hub/retention.js +45 -0
- package/dist/hub/retention.js.map +1 -0
- package/dist/hub/rooms.d.ts +120 -0
- package/dist/hub/rooms.js +535 -0
- package/dist/hub/rooms.js.map +1 -0
- package/dist/hub/runtime.d.ts +106 -0
- package/dist/hub/runtime.js +298 -0
- package/dist/hub/runtime.js.map +1 -0
- package/dist/hub/server.d.ts +56 -0
- package/dist/hub/server.js +202 -0
- package/dist/hub/server.js.map +1 -0
- package/dist/hub/service-start.d.ts +17 -0
- package/dist/hub/service-start.js +109 -0
- package/dist/hub/service-start.js.map +1 -0
- package/dist/hub/sessions.d.ts +53 -0
- package/dist/hub/sessions.js +196 -0
- package/dist/hub/sessions.js.map +1 -0
- package/dist/hub/socket.d.ts +24 -0
- package/dist/hub/socket.js +79 -0
- package/dist/hub/socket.js.map +1 -0
- package/dist/hub/store.d.ts +77 -0
- package/dist/hub/store.js +88 -0
- package/dist/hub/store.js.map +1 -0
- package/dist/hub/tls.d.ts +31 -0
- package/dist/hub/tls.js +135 -0
- package/dist/hub/tls.js.map +1 -0
- package/dist/hub/types.d.ts +401 -0
- package/dist/hub/types.js +2 -0
- package/dist/hub/types.js.map +1 -0
- package/dist/hub/validation.d.ts +33 -0
- package/dist/hub/validation.js +136 -0
- package/dist/hub/validation.js.map +1 -0
- package/dist/hub/version-floor.d.ts +10 -0
- package/dist/hub/version-floor.js +45 -0
- package/dist/hub/version-floor.js.map +1 -0
- package/dist/hub-browser-certificate-policy.d.ts +31 -0
- package/dist/hub-browser-certificate-policy.js +25 -0
- package/dist/hub-browser-certificate-policy.js.map +1 -0
- package/dist/hub-membership-settings.d.ts +6 -0
- package/dist/hub-membership-settings.js +21 -0
- package/dist/hub-membership-settings.js.map +1 -0
- package/dist/hub-mode.d.ts +15 -0
- package/dist/hub-mode.js +17 -0
- package/dist/hub-mode.js.map +1 -0
- package/dist/hub-pairing-summary.d.ts +48 -0
- package/dist/hub-pairing-summary.js +36 -0
- package/dist/hub-pairing-summary.js.map +1 -0
- package/dist/hub-report-target.d.ts +32 -0
- package/dist/hub-report-target.js +33 -0
- package/dist/hub-report-target.js.map +1 -0
- package/dist/hub-retention-policy.d.ts +14 -0
- package/dist/hub-retention-policy.js +15 -0
- package/dist/hub-retention-policy.js.map +1 -0
- package/dist/instance-config-impact.js +3 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +17 -2
- package/dist/instance-lifecycle.js +58 -8
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instance-topic-delete.d.ts +77 -0
- package/dist/instance-topic-delete.js +123 -0
- package/dist/instance-topic-delete.js.map +1 -0
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.js +1 -1
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-engine-status.d.ts +11 -0
- package/dist/kiro-engine-status.js +6 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/launchd-service-domain.d.ts +5 -0
- package/dist/launchd-service-domain.js +21 -0
- package/dist/launchd-service-domain.js.map +1 -0
- package/dist/locale.js +125 -3
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +28 -0
- package/dist/log-service.js +29 -0
- package/dist/log-service.js.map +1 -1
- package/dist/log-steps.d.ts +4 -3
- package/dist/log-steps.js +32 -7
- package/dist/log-steps.js.map +1 -1
- package/dist/logger.d.ts +16 -2
- package/dist/logger.js +346 -66
- package/dist/logger.js.map +1 -1
- package/dist/login-flows.d.ts +15 -7
- package/dist/login-flows.js +29 -3
- package/dist/login-flows.js.map +1 -1
- package/dist/login-manager.js +25 -4
- package/dist/login-manager.js.map +1 -1
- package/dist/ls-rows.js +3 -4
- package/dist/ls-rows.js.map +1 -1
- package/dist/missed-offline.d.ts +25 -0
- package/dist/missed-offline.js +79 -0
- package/dist/missed-offline.js.map +1 -0
- package/dist/native-instance-api.d.ts +0 -1
- package/dist/native-instance-api.js +15 -3
- package/dist/native-instance-api.js.map +1 -1
- package/dist/native-instance-input.d.ts +3 -0
- package/dist/native-instance-input.js +6 -1
- package/dist/native-instance-input.js.map +1 -1
- package/dist/native-instance-registry.d.ts +6 -0
- package/dist/native-instance-registry.js +24 -0
- package/dist/native-instance-registry.js.map +1 -1
- package/dist/native-mcp.d.ts +3 -0
- package/dist/native-mcp.js +15 -2
- package/dist/native-mcp.js.map +1 -1
- package/dist/native-pane-lifecycle.d.ts +8 -0
- package/dist/native-pane-lifecycle.js +13 -4
- package/dist/native-pane-lifecycle.js.map +1 -1
- package/dist/native-pane-manager.js +17 -9
- package/dist/native-pane-manager.js.map +1 -1
- package/dist/needs-you-hub.d.ts +9 -1
- package/dist/needs-you-hub.js +46 -8
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +47 -2
- package/dist/needs-you.js +31 -3
- package/dist/needs-you.js.map +1 -1
- package/dist/office-share-page.js +2 -2
- package/dist/office-share-page.js.map +1 -1
- package/dist/office-share.d.ts +11 -0
- package/dist/office-share.js +14 -0
- package/dist/office-share.js.map +1 -1
- package/dist/office-talk.d.ts +26 -0
- package/dist/office-talk.js +50 -0
- package/dist/office-talk.js.map +1 -0
- package/dist/outbound-handlers.d.ts +14 -0
- package/dist/outbound-handlers.js +49 -6
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +33 -1
- package/dist/outbound-schemas.js +29 -16
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-quota-history.d.ts +9 -0
- package/dist/pane-quota-history.js +67 -0
- package/dist/pane-quota-history.js.map +1 -0
- package/dist/pause-marker.d.ts +1 -1
- package/dist/pause-marker.js +1 -1
- package/dist/pause-marker.js.map +1 -1
- package/dist/platform-general.d.ts +46 -0
- package/dist/platform-general.js +91 -0
- package/dist/platform-general.js.map +1 -0
- package/dist/public-web-gateway.js +7 -0
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/queued-handoffs.d.ts +33 -0
- package/dist/queued-handoffs.js +75 -0
- package/dist/queued-handoffs.js.map +1 -0
- package/dist/quickstart.d.ts +13 -0
- package/dist/quickstart.js +81 -5
- package/dist/quickstart.js.map +1 -1
- package/dist/quota-notice.d.ts +7 -0
- package/dist/quota-notice.js +40 -0
- package/dist/quota-notice.js.map +1 -1
- package/dist/reply-buttons-controller.js +10 -6
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-polls.d.ts +2 -2
- package/dist/reply-polls.js +3 -3
- package/dist/reply-polls.js.map +1 -1
- package/dist/runtime-api.d.ts +2 -0
- package/dist/runtime-api.js +25 -7
- package/dist/runtime-api.js.map +1 -1
- package/dist/runtime-build-info.js +5 -3
- package/dist/runtime-build-info.js.map +1 -1
- package/dist/runtime-bundle.d.ts +3 -0
- package/dist/runtime-bundle.js +3 -1
- package/dist/runtime-bundle.js.map +1 -1
- package/dist/runtime-cli.d.ts +8 -1
- package/dist/runtime-cli.js +127 -8
- package/dist/runtime-cli.js.map +1 -1
- package/dist/runtime-client-store.d.ts +7 -0
- package/dist/runtime-client-store.js +30 -2
- package/dist/runtime-client-store.js.map +1 -1
- package/dist/runtime-client.d.ts +63 -1
- package/dist/runtime-client.js +295 -21
- package/dist/runtime-client.js.map +1 -1
- package/dist/runtime-coordinator.d.ts +7 -0
- package/dist/runtime-coordinator.js +213 -35
- package/dist/runtime-coordinator.js.map +1 -1
- package/dist/runtime-credential-profiles.d.ts +78 -0
- package/dist/runtime-credential-profiles.js +280 -0
- package/dist/runtime-credential-profiles.js.map +1 -0
- package/dist/runtime-install.d.ts +50 -0
- package/dist/runtime-install.js +186 -0
- package/dist/runtime-install.js.map +1 -0
- package/dist/runtime-pane-assets.d.ts +1 -1
- package/dist/runtime-pane-assets.js +1 -1
- package/dist/runtime-pane-assets.js.map +1 -1
- package/dist/runtime-pane-codex-index.d.ts +10 -1
- package/dist/runtime-pane-codex-index.js +131 -27
- package/dist/runtime-pane-codex-index.js.map +1 -1
- package/dist/runtime-pane-host.d.ts +19 -0
- package/dist/runtime-pane-host.js +50 -7
- package/dist/runtime-pane-host.js.map +1 -1
- package/dist/runtime-pane-link.d.ts +7 -0
- package/dist/runtime-pane-link.js +93 -2
- package/dist/runtime-pane-link.js.map +1 -1
- package/dist/runtime-pane-mcp-relay.d.ts +1 -0
- package/dist/runtime-pane-mcp-relay.js +10 -0
- package/dist/runtime-pane-mcp-relay.js.map +1 -1
- package/dist/runtime-pane-mcp.d.ts +4 -0
- package/dist/runtime-pane-mcp.js +6 -3
- package/dist/runtime-pane-mcp.js.map +1 -1
- package/dist/runtime-pane-native.d.ts +32 -2
- package/dist/runtime-pane-native.js +55 -6
- package/dist/runtime-pane-native.js.map +1 -1
- package/dist/runtime-pane-port.d.ts +5 -0
- package/dist/runtime-pane-port.js +17 -1
- package/dist/runtime-pane-port.js.map +1 -1
- package/dist/runtime-pane-process.d.ts +1 -1
- package/dist/runtime-pane-process.js +11 -2
- package/dist/runtime-pane-process.js.map +1 -1
- package/dist/runtime-pane-protocol.d.ts +11 -1
- package/dist/runtime-pane-protocol.js +27 -5
- package/dist/runtime-pane-protocol.js.map +1 -1
- package/dist/runtime-pane-quota-history.d.ts +6 -0
- package/dist/runtime-pane-quota-history.js +44 -0
- package/dist/runtime-pane-quota-history.js.map +1 -0
- package/dist/runtime-pane-service.d.ts +5 -0
- package/dist/runtime-pane-service.js +47 -12
- package/dist/runtime-pane-service.js.map +1 -1
- package/dist/runtime-pane-transcript.d.ts +5 -0
- package/dist/runtime-pane-transcript.js +66 -5
- package/dist/runtime-pane-transcript.js.map +1 -1
- package/dist/runtime-pane-worker.js +19 -6
- package/dist/runtime-pane-worker.js.map +1 -1
- package/dist/runtime-protocol.d.ts +17 -2
- package/dist/runtime-protocol.js +12 -0
- package/dist/runtime-protocol.js.map +1 -1
- package/dist/runtime-update-activity.d.ts +21 -0
- package/dist/runtime-update-activity.js +51 -0
- package/dist/runtime-update-activity.js.map +1 -0
- package/dist/runtime-update-artifact.d.ts +31 -0
- package/dist/runtime-update-artifact.js +252 -0
- package/dist/runtime-update-artifact.js.map +1 -0
- package/dist/runtime-update-install.d.ts +31 -0
- package/dist/runtime-update-install.js +205 -0
- package/dist/runtime-update-install.js.map +1 -0
- package/dist/runtime-update-journal.d.ts +44 -0
- package/dist/runtime-update-journal.js +121 -0
- package/dist/runtime-update-journal.js.map +1 -0
- package/dist/runtime-update-lock.d.ts +48 -0
- package/dist/runtime-update-lock.js +217 -0
- package/dist/runtime-update-lock.js.map +1 -0
- package/dist/runtime-update-owners.d.ts +29 -0
- package/dist/runtime-update-owners.js +240 -0
- package/dist/runtime-update-owners.js.map +1 -0
- package/dist/runtime-update-protocol.d.ts +15 -0
- package/dist/runtime-update-protocol.js +13 -0
- package/dist/runtime-update-protocol.js.map +1 -0
- package/dist/runtime-windows-bridge.d.ts +2 -1
- package/dist/runtime-windows-bridge.js +11 -1
- package/dist/runtime-windows-bridge.js.map +1 -1
- package/dist/scheduler/db.d.ts +2 -1
- package/dist/scheduler/db.js +23 -9
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/task-board-text.js +1 -1
- package/dist/scheduler/task-board-text.js.map +1 -1
- package/dist/scheduler/task-board.d.ts +13 -0
- package/dist/scheduler/task-board.js +28 -3
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/service-drain.d.ts +19 -0
- package/dist/service-drain.js +64 -0
- package/dist/service-drain.js.map +1 -0
- package/dist/service-installer.d.ts +7 -2
- package/dist/service-installer.js +13 -10
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.d.ts +20 -0
- package/dist/settings-api.js +414 -4
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.d.ts +6 -0
- package/dist/settings-baseline.js +3 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.js +29 -6
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.d.ts +13 -0
- package/dist/settings-effect.js +97 -0
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +13 -1
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +27 -0
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/setup-wizard.js +6 -2
- package/dist/setup-wizard.js.map +1 -1
- package/dist/task-board-tool.d.ts +13 -1
- package/dist/task-board-tool.js +104 -4
- package/dist/task-board-tool.js.map +1 -1
- package/dist/task-board-waker.d.ts +6 -0
- package/dist/task-board-waker.js +4 -0
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tmux-binary.d.ts +59 -0
- package/dist/tmux-binary.js +200 -0
- package/dist/tmux-binary.js.map +1 -0
- package/dist/tmux-control.js +4 -4
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.js +32 -1
- package/dist/tmux-exec-helper.js.map +1 -1
- package/dist/tmux-manager.d.ts +1 -1
- package/dist/tmux-manager.js +45 -36
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.js +4 -3
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.d.ts +5 -2
- package/dist/tool-permissions.js +6 -5
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.d.ts +2 -0
- package/dist/tool-progress.js +19 -3
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.js +10 -5
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.d.ts +20 -0
- package/dist/transcript-monitor.js +47 -3
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-needles.d.ts +7 -0
- package/dist/transcript-needles.js +9 -1
- package/dist/transcript-needles.js.map +1 -1
- package/dist/transcript-records.d.ts +1 -1
- package/dist/transcript-records.js +2 -1
- package/dist/transcript-records.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/ui/account-identity.js +27 -0
- package/dist/ui/accounts-view.js +214 -0
- package/dist/ui/agent-runtime-settings.js +9 -8
- package/dist/ui/backend-signin.js +4 -1
- package/dist/ui/chat-ambient.js +1 -1
- package/dist/ui/chat-md-strings.js +3 -0
- package/dist/ui/chat-render.js +3 -670
- package/dist/ui/chat-store.js +1 -1
- package/dist/ui/chat-strings.js +3 -333
- package/dist/ui/chat-thread.js +3 -919
- package/dist/ui/chat-time.js +3 -80
- package/dist/ui/chat-tour.js +1 -1
- package/dist/ui/credential-profile-select.js +54 -0
- package/dist/ui/fleet-office-dialogue.d.ts +30 -0
- package/dist/ui/fleet-office-dialogue.js +382 -0
- package/dist/ui/fleet-office-pack.d.ts +9 -0
- package/dist/ui/fleet-office-pack.js +76 -4
- package/dist/ui/fleet-office-skin.js +23 -5
- package/dist/ui/fleet-office-store.js +5 -0
- package/dist/ui/fleet-office.js +173 -6
- package/dist/ui/fleet-task-card.js +10 -6
- package/dist/ui/fleet-task-common.js +12 -2
- package/dist/ui/fleet-task-menu.js +188 -0
- package/dist/ui/fleet-task-stats.js +124 -0
- package/dist/ui/fleet-task-view.js +340 -0
- package/dist/ui/fleet-tasks.js +131 -43
- package/dist/ui/fleet-usage.js +90 -27
- package/dist/ui/html-attachment.js +3 -40
- package/dist/ui/hub-agent-copy.js +23 -0
- package/dist/ui/hub-button-actions.js +65 -0
- package/dist/ui/hub-chat-store.js +158 -0
- package/dist/ui/hub-chat-strings.js +77 -0
- package/dist/ui/hub-client.js +329 -0
- package/dist/ui/hub-owner-strings.js +51 -0
- package/dist/ui/hub-provider-guidance.js +31 -0
- package/dist/ui/hub-quota.js +85 -0
- package/dist/ui/hub-strings.js +162 -0
- package/dist/ui/hub-switcher.js +27 -0
- package/dist/ui/native-pane-recovery.js +1 -1
- package/dist/ui/office-share-page.js +4 -2
- package/dist/ui/panel-chat.js +34 -48
- package/dist/ui/panel-details.js +1 -1
- package/dist/ui/panel-fleet.js +78 -10
- package/dist/ui/panel-hub.js +619 -0
- package/dist/ui/panel-log.js +2 -2
- package/dist/ui/panel-needs.js +24 -8
- package/dist/ui/panel-runtimes.js +114 -23
- package/dist/ui/panel-settings.js +69 -80
- package/dist/ui/panel-windows-cli.js +12 -2
- package/dist/ui/preview-pages.js +1 -1
- package/dist/ui/preview-panel.js +92 -6
- package/dist/ui/preview-versions.js +1 -1
- package/dist/ui/preview.js +3 -476
- package/dist/ui/runtime-commands.d.ts +4 -0
- package/dist/ui/runtime-commands.js +59 -0
- package/dist/ui/search-dialog.js +2 -0
- package/dist/ui/settings-access-strings.js +42 -0
- package/dist/ui/settings-build-version.js +35 -0
- package/dist/ui/settings-codex-copy.js +19 -0
- package/dist/ui/settings-devices.js +253 -0
- package/dist/ui/settings-dialogs.js +28 -7
- package/dist/ui/settings-hub-browser-certificate.js +74 -0
- package/dist/ui/settings-hub-membership.js +72 -0
- package/dist/ui/settings-hub-retention.js +52 -0
- package/dist/ui/settings-hub.js +196 -0
- package/dist/ui/settings-layout.js +8 -11
- package/dist/ui/settings-model.js +16 -2
- package/dist/ui/settings-outside.js +104 -38
- package/dist/ui/settings-registry.js +4 -1
- package/dist/ui/settings-shared-strings.js +143 -0
- package/dist/ui/settings-shared.js +345 -0
- package/dist/ui/settings-strings.js +10 -46
- package/dist/ui/settings-web-authority.js +5 -2
- package/dist/ui/shared/accounts.css +15 -0
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-needs.js +1 -1
- package/dist/ui/shared/app-route.js +6 -1
- package/dist/ui/shared/app-session.js +6 -2
- package/dist/ui/shared/app-shell.js +64 -8
- package/dist/ui/shared/app.css +121 -30
- package/dist/ui/shared/app.js +12 -3
- package/dist/ui/shared/chat-composer.js +68 -0
- package/dist/ui/shared/chat-md-strings.js +9 -0
- package/dist/ui/shared/chat-render.js +682 -0
- package/dist/ui/shared/chat-strings.js +333 -0
- package/dist/ui/shared/chat-thread.js +969 -0
- package/dist/ui/shared/chat-time.js +80 -0
- package/dist/ui/shared/header-tools.js +3 -5
- package/dist/ui/shared/html-attachment.js +42 -0
- package/dist/ui/shared/hub-chat.css +85 -0
- package/dist/ui/shared/hub-owner.css +33 -0
- package/dist/ui/shared/hub-quota.css +8 -0
- package/dist/ui/shared/hub.css +71 -0
- package/dist/ui/shared/page-head.js +8 -0
- package/dist/ui/shared/panel-view.js +77 -4
- package/dist/ui/shared/preview.js +476 -0
- package/dist/ui/shared/runtime-install.css +26 -0
- package/dist/ui/shared/side-rail.js +15 -0
- package/dist/ui/shared/signin.js +172 -0
- package/dist/ui/shared/task-board.css +95 -0
- package/dist/ui/shared/usage-dialog.js +18 -1
- package/dist/ui/shared/view-history.css +17 -0
- package/dist/ui/shared/view-history.js +438 -0
- package/dist/ui/shared/view-strings.js +16 -0
- package/dist/ui/shared/workspace.css +20 -0
- package/dist/ui/signin.html +21 -0
- package/dist/ui/workspace-panel.js +189 -0
- package/dist/ui/workspace-strings.js +35 -0
- package/dist/unattended-install.d.ts +11 -2
- package/dist/unattended-install.js +41 -6
- package/dist/unattended-install.js.map +1 -1
- package/dist/usage/capacity.d.ts +69 -0
- package/dist/usage/capacity.js +119 -0
- package/dist/usage/capacity.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +3 -0
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/profile-timeline.d.ts +16 -0
- package/dist/usage/profile-timeline.js +58 -0
- package/dist/usage/profile-timeline.js.map +1 -0
- package/dist/usage/providers.js +2 -1
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/quota-history.d.ts +43 -0
- package/dist/usage/quota-history.js +168 -0
- package/dist/usage/quota-history.js.map +1 -0
- package/dist/usage/usage-api.d.ts +31 -0
- package/dist/usage/usage-api.js +80 -1
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.d.ts +25 -1
- package/dist/usage-report.js +55 -4
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.d.ts +6 -1
- package/dist/usage-rollup.js +16 -4
- package/dist/usage-rollup.js.map +1 -1
- package/dist/view-api.d.ts +16 -0
- package/dist/view-api.js +105 -23
- package/dist/view-api.js.map +1 -1
- package/dist/view-history.d.ts +84 -0
- package/dist/view-history.js +116 -0
- package/dist/view-history.js.map +1 -0
- package/dist/web-api.d.ts +48 -2
- package/dist/web-api.js +276 -8
- package/dist/web-api.js.map +1 -1
- package/dist/web-backend-login.d.ts +23 -1
- package/dist/web-backend-login.js +11 -17
- package/dist/web-backend-login.js.map +1 -1
- package/dist/web-device-login.d.ts +153 -0
- package/dist/web-device-login.js +278 -0
- package/dist/web-device-login.js.map +1 -0
- package/dist/web-office-skins.d.ts +9 -0
- package/dist/web-office-skins.js +16 -1
- package/dist/web-office-skins.js.map +1 -1
- package/dist/web-session-authorization.d.ts +13 -2
- package/dist/web-session-authorization.js +10 -3
- package/dist/web-session-authorization.js.map +1 -1
- package/dist/web-session.d.ts +35 -0
- package/dist/web-session.js +7 -0
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +3 -1
- package/dist/web-settings-patch.js +4 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-shell-routes.d.ts +6 -0
- package/dist/web-shell-routes.js +7 -0
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-terminal.d.ts +4 -30
- package/dist/web-terminal.js +9 -6
- package/dist/web-terminal.js.map +1 -1
- package/dist/windows-agents.d.ts +1 -0
- package/dist/windows-agents.js +1 -0
- package/dist/windows-agents.js.map +1 -1
- package/dist/windows-cli-api.d.ts +12 -1
- package/dist/windows-cli-api.js +27 -1
- package/dist/windows-cli-api.js.map +1 -1
- package/dist/windows-cli-providers.d.ts +0 -9
- package/dist/windows-cli-providers.js +4 -9
- package/dist/windows-cli-providers.js.map +1 -1
- package/dist/windows-cli-worker.d.ts +24 -0
- package/dist/windows-cli-worker.js +96 -5
- package/dist/windows-cli-worker.js.map +1 -1
- package/dist/windows-cli.d.ts +10 -0
- package/dist/windows-cli.js +10 -1
- package/dist/windows-cli.js.map +1 -1
- package/dist/yaml-shared-nodes.js +8 -3
- package/dist/yaml-shared-nodes.js.map +1 -1
- package/launcher/agend-install.cjs +8 -1
- package/launcher/launchd-session-type.cjs +14 -0
- package/launcher/postinstall.cjs +27 -2
- package/launcher/private-home.cjs +1 -1
- package/launcher/tmux-bundle.cjs +247 -0
- package/package.json +3 -2
- package/templates/launchd.plist.ejs +3 -1
- package/templates/runtime-install/install.ps1 +270 -0
package/dist/ui/shared/signin.js
CHANGED
|
@@ -33,6 +33,15 @@
|
|
|
33
33
|
refused_outside: "That code didn't work. Check that your phone's clock is right and try the newest code.",
|
|
34
34
|
paused_outside: "Too many wrong codes. Try again in {duration}.",
|
|
35
35
|
minutes: "{0} minutes", minute: "1 minute", hours: "{0} hours", hour: "1 hour",
|
|
36
|
+
// #3061: sign in with another device — an 8-character code shown here, approved on a device that is already signed in.
|
|
37
|
+
another: "Sign in with another device", dev_title: "Sign in with another device",
|
|
38
|
+
dev_lead: "On a device that is already signed in to AgEnD as the owner, open Settings → Access & security, choose Add device under Devices & sign-in, and enter this code.",
|
|
39
|
+
dev_waiting: "Waiting for approval… Expires in {time}.", dev_approved: "Approved — signing in…",
|
|
40
|
+
dev_expired: "This code has expired.", dev_denied: "This request was denied.", dev_new: "Get a new code", dev_back: "Back",
|
|
41
|
+
dev_busy: "Too many devices are waiting right now. Try again in a moment.", dev_limited: "Too many codes asked for. Try again in {duration}.",
|
|
42
|
+
dev_unavailable: "Signing in with another device isn't available here.", dev_failed: "Could not get a code. Check the connection and try again.",
|
|
43
|
+
dev_lost: "Could not reach AgEnD. Still trying…",
|
|
44
|
+
dev_qr: "Or scan this QR code with a device that is already signed in as the owner. It holds this page's address and the code above, nothing else.",
|
|
36
45
|
},
|
|
37
46
|
"zh-TW": {
|
|
38
47
|
checking: "正在確認登入狀態…", title: "登入 AgEnD", lead: "輸入登入碼。",
|
|
@@ -55,6 +64,14 @@
|
|
|
55
64
|
refused_outside: "代碼不對。請確認手機時間正確,並輸入最新的代碼。",
|
|
56
65
|
paused_outside: "錯誤次數太多,請 {duration} 後再試。",
|
|
57
66
|
minutes: "{0} 分鐘", minute: "1 分鐘", hours: "{0} 小時", hour: "1 小時",
|
|
67
|
+
another: "使用其他裝置登入", dev_title: "使用其他裝置登入",
|
|
68
|
+
dev_lead: "在已登入且已驗證擁有者的裝置上,開啟「設定 → 存取與安全」,在「裝置與登入」選「新增裝置」,輸入這組代碼。",
|
|
69
|
+
dev_waiting: "等待核准中… {time} 後失效。", dev_approved: "已核准,登入中…",
|
|
70
|
+
dev_expired: "這組代碼已失效。", dev_denied: "這個請求已被拒絕。", dev_new: "取得新代碼", dev_back: "返回",
|
|
71
|
+
dev_busy: "目前等待核准的裝置太多,請稍後再試。", dev_limited: "要求代碼的次數太多,請 {duration} 後再試。",
|
|
72
|
+
dev_unavailable: "這裡無法使用其他裝置登入。", dev_failed: "無法取得代碼。請檢查連線後再試。",
|
|
73
|
+
dev_lost: "連不上 AgEnD,仍在重試…",
|
|
74
|
+
dev_qr: "也可以用已登入且已驗證擁有者的裝置掃描這個 QR Code。裡面只有這個頁面的網址和上面的代碼,沒有其他東西。",
|
|
58
75
|
},
|
|
59
76
|
};
|
|
60
77
|
const lang = /^zh/i.test(navigator.language || "") ? "zh-TW" : "en";
|
|
@@ -63,6 +80,11 @@
|
|
|
63
80
|
// #3008: …and one served through the link "Allow connections from outside" opened (<body data-outside="1">): signing in
|
|
64
81
|
// is the authenticator app's code, posted to /auth/totp.
|
|
65
82
|
const outside = webOnly && document.body.getAttribute("data-outside") === "1";
|
|
83
|
+
// #3061: …and one on this computer's own listener (<body data-device-login="1">, never the public link) offers "Sign in
|
|
84
|
+
// with another device".
|
|
85
|
+
const deviceLogin = webOnly && !outside && document.body.getAttribute("data-device-login") === "1";
|
|
86
|
+
// #3061 (P2b): …and, when `web.login_qr` is on (<body data-login-qr="1">), it also draws the QR code of the approve link.
|
|
87
|
+
const loginQr = deviceLogin && document.body.getAttribute("data-login-qr") === "1";
|
|
66
88
|
const t = (k) => (outside && (T[lang][`${k}_outside`] || T.en[`${k}_outside`])) || (webOnly && (T[lang][`${k}_web`] || T.en[`${k}_web`])) || T[lang][k] || T.en[k] || k;
|
|
67
89
|
/** A wait as words: "15 minutes" / 「15 分鐘」, "2 hours" / 「2 小時」 (rounded up). */
|
|
68
90
|
const duration = (ms) => {
|
|
@@ -149,6 +171,7 @@
|
|
|
149
171
|
} catch { /* private mode */ }
|
|
150
172
|
$("code").focus();
|
|
151
173
|
offerResend();
|
|
174
|
+
if (deviceLogin) $("another").hidden = false;
|
|
152
175
|
}
|
|
153
176
|
|
|
154
177
|
// Only a returning device gets the button; the answer is a boolean and asking has no side effect. Never from outside
|
|
@@ -180,6 +203,155 @@
|
|
|
180
203
|
button.disabled = false;
|
|
181
204
|
});
|
|
182
205
|
|
|
206
|
+
// ── #3061: sign in with another device ──
|
|
207
|
+
// POST /auth/device-login → the code to show (and an HttpOnly cookie that is this browser's request); then POST
|
|
208
|
+
// /auth/device-login/poll every couple of seconds until a signed-in owner has approved it (the poll that finds it
|
|
209
|
+
// approved is what signs this browser in, so nothing is handed over by the approving device), denied it, or it ran out.
|
|
210
|
+
// Never a GET: asking and polling both change state, and a preview must not.
|
|
211
|
+
const DEV_POLL_MS = 2000;
|
|
212
|
+
let dev = null;
|
|
213
|
+
// One call at a time, in the order they were asked for. Every one of the three answers may carry a Set-Cookie for the
|
|
214
|
+
// request's cookie (asking sets it, cancelling and a poll that finds it spent clear it), and the browser applies a cookie when
|
|
215
|
+
// the answer ARRIVES, not when this page chose to ask. So a stale call's late answer would replace or expire the cookie of the
|
|
216
|
+
// attempt that came after it (Back, then a new attempt, while the first attempt's create or cancel was still on the wire):
|
|
217
|
+
// the new attempt would poll with the wrong request, or none, and read "expired" after its owner had approved it. Each call
|
|
218
|
+
// therefore starts only when the one before it has finished: answered, or given up on after DEV_CALL_MS by aborting it. A response
|
|
219
|
+
// that has not arrived when its call is aborted is dropped by the browser, its Set-Cookie never processed; one whose headers had
|
|
220
|
+
// already arrived has applied its cookie before the next call is sent. Either way a call carries, and leaves behind, what the last
|
|
221
|
+
// one left. (An aborted request may still have been handled by the server; at worst that leaves an unused request that expires on
|
|
222
|
+
// its own.) `mine`: the attempt a create or poll belongs to; one that was stopped before its turn comes is not sent at all.
|
|
223
|
+
const DEV_CALL_MS = 15000;
|
|
224
|
+
let devTurn = Promise.resolve();
|
|
225
|
+
function devCall(path, mine) {
|
|
226
|
+
const run = async () => {
|
|
227
|
+
if (mine && mine.stopped) return null;
|
|
228
|
+
const ctl = typeof AbortController === "function" ? new AbortController() : null;
|
|
229
|
+
const timer = ctl ? setTimeout(() => ctl.abort(), DEV_CALL_MS) : 0;
|
|
230
|
+
try {
|
|
231
|
+
const r = await fetch(`/auth/device-login${path}`, { method: "POST", credentials: "same-origin", cache: "no-store", headers: { "Content-Type": "application/json" }, body: "{}", ...(ctl ? { signal: ctl.signal } : {}) });
|
|
232
|
+
let body = null;
|
|
233
|
+
try { body = await r.json(); } catch { /* no body, or not JSON */ }
|
|
234
|
+
return { r, body };
|
|
235
|
+
} finally { clearTimeout(timer); }
|
|
236
|
+
};
|
|
237
|
+
const call = devTurn.then(run);
|
|
238
|
+
devTurn = call.then(() => undefined, () => undefined);
|
|
239
|
+
return call;
|
|
240
|
+
}
|
|
241
|
+
const clock = (ms) => { const s = Math.max(0, Math.ceil(ms / 1000)); return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`; };
|
|
242
|
+
function devStop() {
|
|
243
|
+
hideQr();
|
|
244
|
+
if (!dev) return;
|
|
245
|
+
dev.stopped = true;
|
|
246
|
+
clearTimeout(dev.poll); clearInterval(dev.tick);
|
|
247
|
+
dev = null;
|
|
248
|
+
}
|
|
249
|
+
function devSay(text, bad, spent) {
|
|
250
|
+
$("devStatus").textContent = text;
|
|
251
|
+
$("devStatus").classList?.[bad ? "add" : "remove"]("bad");
|
|
252
|
+
$("devCode").classList?.[spent ? "add" : "remove"]("spent");
|
|
253
|
+
}
|
|
254
|
+
function devEnded(text, bad) {
|
|
255
|
+
devStop();
|
|
256
|
+
devSay(text, bad, true);
|
|
257
|
+
$("devNew").hidden = false;
|
|
258
|
+
hideQr();
|
|
259
|
+
}
|
|
260
|
+
// ── #3061 (P2b): the approve link as a QR code ──
|
|
261
|
+
// The link is THIS page's own address plus the code on screen — /settings/access?approve=XXXX-XXXX — and nothing else: no
|
|
262
|
+
// request id, no cookie, no token (the request's poll cookie is HttpOnly and never leaves this browser). A device that
|
|
263
|
+
// opens it has to be signed in as the verified owner to do anything with it, and what it opens is the same "Add device"
|
|
264
|
+
// dialog with the code filled in: the person still presses Continue, sees who is asking, and presses Allow. A sign-in page
|
|
265
|
+
// reached as localhost cannot be opened from another device, so no code is drawn there.
|
|
266
|
+
const reachableFromElsewhere = () => !/^(localhost|.*\.localhost|127(\.\d{1,3}){3}|\[?::1\]?)$/i.test(location.hostname);
|
|
267
|
+
function hideQr() { if (!loginQr) return; $("devQr").hidden = true; $("devQrSvg").replaceChildren(); }
|
|
268
|
+
async function showQr(code, mine) {
|
|
269
|
+
if (!loginQr || !reachableFromElsewhere()) return;
|
|
270
|
+
let make;
|
|
271
|
+
try { const m = await import("/assets/qrcode.module.js"); make = m.default || m.qrcode; } catch { return; }
|
|
272
|
+
if (dev !== mine || mine.stopped) return; // this request ended, or a newer one began, while the encoder loaded
|
|
273
|
+
const qr = make(0, "M");
|
|
274
|
+
qr.addData(`${location.origin}/settings/access?approve=${encodeURIComponent(code)}`);
|
|
275
|
+
qr.make();
|
|
276
|
+
const n = qr.getModuleCount(), size = n + 8;
|
|
277
|
+
let d = "";
|
|
278
|
+
for (let r = 0; r < n; r++) for (let c = 0; c < n; c++) if (qr.isDark(r, c)) d += `M${c + 4} ${r + 4}h1v1h-1z`;
|
|
279
|
+
const NS = "http://www.w3.org/2000/svg", svg = $("devQrSvg");
|
|
280
|
+
svg.setAttribute("viewBox", `0 0 ${size} ${size}`);
|
|
281
|
+
const back = document.createElementNS(NS, "rect"), dark = document.createElementNS(NS, "path");
|
|
282
|
+
back.setAttribute("width", String(size)); back.setAttribute("height", String(size)); back.setAttribute("fill", "#fff");
|
|
283
|
+
dark.setAttribute("d", d); dark.setAttribute("fill", "#000");
|
|
284
|
+
svg.replaceChildren(back, dark);
|
|
285
|
+
$("devQr").hidden = false;
|
|
286
|
+
}
|
|
287
|
+
async function devStart() {
|
|
288
|
+
devStop();
|
|
289
|
+
$("form").hidden = true; $("device").hidden = false; $("devNew").hidden = true;
|
|
290
|
+
hideQr();
|
|
291
|
+
$("devCode").textContent = "XXXX-XXXX";
|
|
292
|
+
devSay("", false, true);
|
|
293
|
+
const mine = { stopped: false, poll: 0, tick: 0, deadline: 0, lost: 0 };
|
|
294
|
+
dev = mine;
|
|
295
|
+
let made;
|
|
296
|
+
try { made = await devCall("", mine); } catch { if (!mine.stopped) devEnded(t("dev_failed"), true); return; }
|
|
297
|
+
if (mine.stopped || !made) return;
|
|
298
|
+
const { r, body } = made;
|
|
299
|
+
if (!r.ok || !body || typeof body.code !== "string") {
|
|
300
|
+
if (r.status === 429) {
|
|
301
|
+
let wait = Number(r.headers.get("Retry-After")) * 1000;
|
|
302
|
+
if (Number.isFinite(body && body.retryAfterMs)) wait = body.retryAfterMs;
|
|
303
|
+
devEnded(t("dev_limited").replace("{duration}", duration(Number.isFinite(wait) && wait > 0 ? wait : 60000)), true);
|
|
304
|
+
} else devEnded(r.status === 503 ? t("dev_busy") : r.status === 404 ? t("dev_unavailable") : t("dev_failed"), true);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
$("devCode").textContent = body.code;
|
|
308
|
+
$("devCode").classList?.remove("spent");
|
|
309
|
+
showQr(body.code, mine);
|
|
310
|
+
// The countdown runs on this browser's own clock from when the code arrived (the server's is the authority: its poll
|
|
311
|
+
// says `expired` when it is).
|
|
312
|
+
mine.deadline = Date.now() + (Number.isFinite(body.ttlMs) && body.ttlMs > 0 ? body.ttlMs : 300000);
|
|
313
|
+
const waiting = () => devSay(t("dev_waiting").replace("{time}", clock(mine.deadline - Date.now())), false, false);
|
|
314
|
+
waiting();
|
|
315
|
+
mine.tick = setInterval(() => { if (!mine.stopped && !mine.approved) waiting(); }, 1000);
|
|
316
|
+
const again = () => { if (!mine.stopped) mine.poll = setTimeout(ask, DEV_POLL_MS); };
|
|
317
|
+
const ask = async () => {
|
|
318
|
+
let asked = null;
|
|
319
|
+
try { asked = await devCall("/poll", mine); } catch { /* below */ }
|
|
320
|
+
if (mine.stopped) return;
|
|
321
|
+
const p = asked && asked.r, state = asked && asked.body && asked.body.state;
|
|
322
|
+
if (state === "approved" && p && p.ok) {
|
|
323
|
+
mine.approved = true;
|
|
324
|
+
devSay(t("dev_approved"), false, false);
|
|
325
|
+
clearBounce(); location.replace(nextTarget());
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
if (p && p.status === 404) { devEnded(t("dev_unavailable"), true); return; } // closed while waiting (e.g. web authorization turned off)
|
|
329
|
+
if (state === "denied") { devEnded(t("dev_denied"), true); return; }
|
|
330
|
+
if (state === "expired") { devEnded(t("dev_expired"), true); return; }
|
|
331
|
+
if (state === "pending") { mine.lost = 0; again(); return; }
|
|
332
|
+
// The network, or an answer that is none of these: keep trying — the server ends the request when it is time —
|
|
333
|
+
// but say so after a few, and stop waiting once the code's own time is well past.
|
|
334
|
+
if (Date.now() > mine.deadline + 15000) { devEnded(t("dev_expired"), true); return; }
|
|
335
|
+
if (++mine.lost >= 3) devSay(t("dev_lost"), true, false);
|
|
336
|
+
again();
|
|
337
|
+
};
|
|
338
|
+
again();
|
|
339
|
+
}
|
|
340
|
+
async function devBack() {
|
|
341
|
+
const mine = dev;
|
|
342
|
+
devStop();
|
|
343
|
+
$("device").hidden = true; $("form").hidden = false;
|
|
344
|
+
$("code").focus();
|
|
345
|
+
// Queued behind a create or poll of this attempt that is still on the wire (it needs the cookie that call sets), and ahead of
|
|
346
|
+
// whatever the person asks for next: a new attempt never starts while this one's cancel is still out.
|
|
347
|
+
if (mine && !mine.approved) { try { await devCall("/cancel"); } catch { /* it expires by itself */ } }
|
|
348
|
+
}
|
|
349
|
+
if (deviceLogin) {
|
|
350
|
+
$("another").addEventListener("click", () => { devStart(); });
|
|
351
|
+
$("devNew").addEventListener("click", () => { devStart(); });
|
|
352
|
+
$("devBack").addEventListener("click", () => { devBack(); });
|
|
353
|
+
}
|
|
354
|
+
|
|
183
355
|
async function probe() {
|
|
184
356
|
// A second bounce inside ten seconds means the cookie is valid but not being sent on the
|
|
185
357
|
// navigation; going round again would loop, so stop and let the person type a code.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* The task board's list, filters, Display, card menu and Insights (#3169, #3170, #3171; igs-willyliao). Its own file,
|
|
2
|
+
linked by fleet-task-view.js: a tab opened before an upgrade has an app.css without these rules. */
|
|
3
|
+
/* A project's Insights (fleet-task-stats.js): its choices, a bar per row coloured by class, its numbers. */
|
|
4
|
+
.tb-stats > .tb-insights { min-height: 26px; padding: 0 var(--s-2); }
|
|
5
|
+
.ts { display: flex; flex-direction: column; gap: var(--s-3); min-width: 0; }
|
|
6
|
+
.ts-choices { display: flex; flex-wrap: wrap; gap: var(--s-3); }
|
|
7
|
+
.ts-pick { flex: 1 1 140px; min-width: 0; margin: 0; }
|
|
8
|
+
.ts-sum, .ts-note { margin: 0; }
|
|
9
|
+
.ts-sum { font-size: var(--fs-sm); }
|
|
10
|
+
.ts-note { font-size: var(--fs-xs); }
|
|
11
|
+
.ts-legend { display: flex; flex-wrap: wrap; gap: var(--s-1) var(--s-3); margin: 0; padding: 0; list-style: none; font-size: var(--fs-xs); color: var(--text-2); }
|
|
12
|
+
.ts-legend li { display: inline-flex; align-items: center; gap: var(--s-1); }
|
|
13
|
+
.ts-key { display: inline-block; width: 10px; height: 10px; border-radius: 2px; background: var(--text-3); }
|
|
14
|
+
.ts-scroll { overflow-x: auto; }
|
|
15
|
+
.ts-table { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
|
|
16
|
+
.ts-table th, .ts-table td { padding: var(--s-1) var(--s-2); border-bottom: 1px solid var(--border); text-align: left; font-weight: var(--fw-regular); white-space: nowrap; }
|
|
17
|
+
.ts-table thead th { font-size: var(--fs-xs); font-weight: var(--fw-semibold); color: var(--text-2); }
|
|
18
|
+
.ts-table thead th.ts-part { max-width: 5em; white-space: normal; vertical-align: bottom; }
|
|
19
|
+
.ts-table tbody th { max-width: 160px; overflow: hidden; text-overflow: ellipsis; }
|
|
20
|
+
.ts-table tbody th .tb-person { max-width: 100%; }
|
|
21
|
+
.ts-table tbody th .tb-who { overflow: hidden; text-overflow: ellipsis; }
|
|
22
|
+
.ts-table .ts-bar-col { width: 35%; min-width: 96px; }
|
|
23
|
+
.ts-bar { display: block; width: 100%; height: 10px; border-radius: 2px; overflow: hidden; }
|
|
24
|
+
.ts-track { fill: var(--surface-2); }
|
|
25
|
+
.ts-table .ts-n { text-align: right; font-variant-numeric: tabular-nums; }
|
|
26
|
+
.ts-n.zero { color: var(--text-3); }
|
|
27
|
+
.ts-table .ts-total { font-weight: var(--fw-semibold); }
|
|
28
|
+
/* The parts' colours: a status as the board's dots; a priority from urgent (red) to low (grey); a size by weight. */
|
|
29
|
+
.ts-seg.none-all { fill: var(--accent); }
|
|
30
|
+
.ts-seg.status-open, .ts-key.status-open, .ts-seg.priority-low, .ts-key.priority-low, .ts-seg.size-none, .ts-key.size-none { fill: var(--text-3); background: var(--text-3); }
|
|
31
|
+
.ts-seg.status-claimed, .ts-key.status-claimed, .ts-seg.priority-normal, .ts-key.priority-normal, .ts-seg.size-M, .ts-key.size-M { fill: var(--accent); background: var(--accent); }
|
|
32
|
+
.ts-seg.status-blocked, .ts-key.status-blocked, .ts-seg.priority-urgent, .ts-key.priority-urgent { fill: var(--danger); background: var(--danger); }
|
|
33
|
+
.ts-seg.status-review, .ts-key.status-review, .ts-seg.priority-high, .ts-key.priority-high, .ts-seg.size-L, .ts-key.size-L { fill: var(--warn); background: var(--warn); }
|
|
34
|
+
.ts-seg.status-done, .ts-key.status-done, .ts-seg.size-S, .ts-key.size-S { fill: var(--ok); background: var(--ok); }
|
|
35
|
+
/* A phone keeps the bar and the total; the parts are in the legend's colours. */
|
|
36
|
+
@media (max-width: 899px) { .ts-table .ts-part { display: none; } }
|
|
37
|
+
|
|
38
|
+
/* A project's Filter and Display, its filters as chips, and the project as a list (fleet-task-view.js). */
|
|
39
|
+
.menu-text { gap: var(--s-1); }
|
|
40
|
+
/* Under the project's header, as Linear's options row: Filter, Display, then the filters in force. */
|
|
41
|
+
.tb-view-bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); margin: var(--s-3) 0; }
|
|
42
|
+
.tb-view-bar > .menu > .menu-text.active { border-color: var(--accent); background: var(--accent-dim); color: var(--accent); }
|
|
43
|
+
.tb-view-bar .menu-list { left: 0; right: auto; max-height: min(70vh, 520px); overflow-y: auto; }
|
|
44
|
+
.tb-columns.no-done { grid-template-columns: repeat(4, minmax(176px, 1fr)); }
|
|
45
|
+
.tb-filters { display: contents; }
|
|
46
|
+
.tb-chip { display: inline-flex; align-items: center; min-height: 30px; max-width: 100%; border: 1px solid var(--border); border-radius: var(--r-full); background: var(--surface); font-size: var(--fs-xs); }
|
|
47
|
+
.tb-chip-field { padding: 0 var(--s-2) 0 var(--s-3); color: var(--text-2); white-space: nowrap; }
|
|
48
|
+
.tb-chip-op, .tb-chip-x { align-self: stretch; padding: 0 var(--s-2); border: 0; border-left: 1px solid var(--border); background: none; color: var(--text-2); font-size: var(--fs-xs); cursor: pointer; }
|
|
49
|
+
.tb-chip.not .tb-chip-op { color: var(--danger); font-weight: var(--fw-semibold); }
|
|
50
|
+
.tb-chip-op:hover, .tb-chip-x:hover { background: var(--surface-2); color: var(--text); }
|
|
51
|
+
.tb-chip-x { display: inline-flex; align-items: center; border-radius: 0 var(--r-full) var(--r-full) 0; }
|
|
52
|
+
.tb-chip .menu { min-width: 0; }
|
|
53
|
+
.tb-chip .menu-text { min-height: 28px; max-width: 240px; padding: 0 var(--s-2); border: 0; border-left: 1px solid var(--border); border-radius: 0; background: none; }
|
|
54
|
+
.tb-chip .menu-text > span { overflow: hidden; text-overflow: ellipsis; }
|
|
55
|
+
.tb-list { display: flex; flex-direction: column; gap: var(--s-4); }
|
|
56
|
+
.tb-group-head { display: flex; align-items: center; gap: var(--s-2); margin: 0 0 var(--s-1); padding: var(--s-1) var(--s-2); border-radius: var(--r-sm); background: var(--surface); font-size: var(--fs-xs); font-weight: var(--fw-semibold); color: var(--text-2); }
|
|
57
|
+
.tb-rows { display: flex; flex-direction: column; margin: 0; padding: 0; list-style: none; }
|
|
58
|
+
.tb-row { border-bottom: 1px solid var(--border); cursor: pointer; }
|
|
59
|
+
.tb-row:hover { background: var(--surface); }
|
|
60
|
+
.tb-row.flash { animation: tb-flash 1.6s var(--ease); }
|
|
61
|
+
.tb-row-line { display: flex; align-items: center; gap: var(--s-2); min-height: 40px; padding: var(--s-1) var(--s-2); font-size: var(--fs-sm); min-width: 0; }
|
|
62
|
+
.tb-row.is-sub .tb-row-line { padding-left: var(--s-6); }
|
|
63
|
+
.tb-row-main { flex-shrink: 0; font-family: var(--font-mono); font-size: var(--fs-xs); color: var(--text-3); white-space: nowrap; }
|
|
64
|
+
.tb-row-text { flex: 1; display: flex; align-items: baseline; gap: var(--s-2); min-width: 0; }
|
|
65
|
+
.tb-row-title { flex-shrink: 1; min-width: 0; padding: 0; border: 0; background: none; color: var(--text); font: inherit; font-weight: var(--fw-medium); text-align: left; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
66
|
+
.tb-row-title:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; border-radius: var(--r-sm); }
|
|
67
|
+
.tb-row-note { flex: 1 1 0; min-width: 0; font-size: var(--fs-xs); color: var(--danger); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
68
|
+
.tb-row-tags { display: inline-flex; align-items: center; gap: var(--s-1); flex-shrink: 0; }
|
|
69
|
+
.tb-row-progress { display: inline-flex; align-items: center; gap: var(--s-1); flex-shrink: 0; padding: 2px var(--s-1); border: 0; border-radius: var(--r-sm); background: none; color: var(--text-2); font-size: var(--fs-xs); white-space: nowrap; }
|
|
70
|
+
.tb-row-progress > .tb-bar { width: 48px; }
|
|
71
|
+
button.tb-row-progress { cursor: pointer; }
|
|
72
|
+
button.tb-row-progress:hover { background: var(--surface-2); }
|
|
73
|
+
.tb-row-who { display: inline-flex; flex-shrink: 0; width: 140px; min-width: 0; font-size: var(--fs-xs); }
|
|
74
|
+
.tb-row-who .tb-who { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
75
|
+
.tb-row-time { flex-shrink: 0; width: 7em; font-size: var(--fs-xs); text-align: right; white-space: nowrap; }
|
|
76
|
+
.tb-row > .tb-subs { margin: 0 var(--s-2) var(--s-2) var(--s-6); }
|
|
77
|
+
@media (max-width: 899px) {
|
|
78
|
+
/* A phone's row: number and title on the first line, the rest under them. */
|
|
79
|
+
.tb-row-line { flex-wrap: wrap; row-gap: var(--s-1); }
|
|
80
|
+
.tb-row-text { flex: 1 1 calc(100% - 96px); }
|
|
81
|
+
.tb-row-who { width: auto; }
|
|
82
|
+
.tb-row-time { width: auto; margin-left: auto; }
|
|
83
|
+
.tb-row.is-sub .tb-row-line { padding-left: var(--s-4); }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* A card's menu at the pointer (fleet-task-menu.js): the app's menu, fixed where the right click was; and the card's
|
|
87
|
+
Previous / Next in its dialog's header. */
|
|
88
|
+
.menu-list.tb-card-menu { position: fixed; left: 0; top: 0; right: auto; max-height: min(80vh, 560px); overflow-y: auto; z-index: 40; }
|
|
89
|
+
.tb-card-menu .menu-heading.bare { padding: 0; }
|
|
90
|
+
.tb-card-menu .menu-item > .tb-dot { margin: 0 4px; }
|
|
91
|
+
.tc-steps { display: inline-flex; align-items: center; gap: 2px; margin-right: var(--s-1); }
|
|
92
|
+
.tc-step-at { min-width: 3.5em; font-size: var(--fs-xs); font-variant-numeric: tabular-nums; text-align: center; white-space: nowrap; }
|
|
93
|
+
@media (prefers-reduced-motion: reduce) {
|
|
94
|
+
.tb-row.flash { animation: none; }
|
|
95
|
+
}
|
|
@@ -64,6 +64,22 @@ function expiryText(iso) {
|
|
|
64
64
|
if (!(ms > 0)) return "";
|
|
65
65
|
return usageText("", { key: "usage.ticket_expiry", args: [`${at.getMonth() + 1}/${at.getDate()}`, usageDuration(ms)] });
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* #3066 §1: a server line ({ text, i18n }) in this page's language — or, when this tab's strings predate the key (a
|
|
69
|
+
* stale tab), the server's own English text, never the bare key.
|
|
70
|
+
*/
|
|
71
|
+
export function capacityLine(x) {
|
|
72
|
+
if (!x || typeof x.text !== "string") return "";
|
|
73
|
+
const key = x.i18n && typeof x.i18n.key === "string" ? `view.${x.i18n.key}` : null;
|
|
74
|
+
return key && t(key) !== key ? usageText(x.text, x.i18n) : x.text;
|
|
75
|
+
}
|
|
76
|
+
/** #3066 §1: a weekly quota's measured 100% (or why not yet), and the limit it always carries: only this fleet counts. */
|
|
77
|
+
function UsageCapacity({ c }) {
|
|
78
|
+
const notes = Array.isArray(c.notes) ? c.notes : [];
|
|
79
|
+
return html`<div class=${`u-cap${c.status === "ok" ? "" : " u-cap-wait"}`}>
|
|
80
|
+
<div class="u-cap-line">${capacityLine(c.line)}</div>
|
|
81
|
+
${notes.map((n, i) => html`<div key=${i} class="u-cap-note">${capacityLine(n)}</div>`)}</div>`;
|
|
82
|
+
}
|
|
67
83
|
export function UsageMetric({ m }) {
|
|
68
84
|
const bar = useRef(null);
|
|
69
85
|
const label = usageText(m.label, m.labelI18n);
|
|
@@ -78,7 +94,8 @@ export function UsageMetric({ m }) {
|
|
|
78
94
|
const sub = [note, resetText(m.resetsAt)].filter(Boolean).join(" · ");
|
|
79
95
|
return html`<div class="u-metric"><div class="u-row"><span class="u-label">${label}</span>${word ? html`<span class=${`u-status ${cls}`}>${word}</span>` : null}
|
|
80
96
|
<span class=${`u-pct ${cls}`}>${pct.toFixed(0)}<span class="u-unit">%</span></span></div>
|
|
81
|
-
<div class="u-meter"><div ref=${bar} class=${`u-fill ${cls}`}></div></div>${sub ? html`<div class="u-sub">${sub}</div>` : null}
|
|
97
|
+
<div class="u-meter"><div ref=${bar} class=${`u-fill ${cls}`}></div></div>${sub ? html`<div class="u-sub">${sub}</div>` : null}
|
|
98
|
+
${m.capacity ? html`<${UsageCapacity} c=${m.capacity} />` : null}</div>`;
|
|
82
99
|
}
|
|
83
100
|
if (m.type === "dollars") {
|
|
84
101
|
const val = m.limit ? `$${(m.used ?? 0).toFixed(2)} / $${m.limit.toFixed(2)}` : `$${(m.used ?? 0).toFixed(2)}`;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* Claude history in the View (view-history.js): its own stylesheet, linked by the module itself, so a tab opened before
|
|
2
|
+
an upgrade (an app.css without these rules) draws it the same. Colours come from the live screen, set per element. */
|
|
3
|
+
.v-pre .vh { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
4
|
+
.vh-line { padding-left: 2ch; text-indent: -2ch; min-height: 1.2em; }
|
|
5
|
+
.vh-line.vh-res { padding-left: 5ch; text-indent: -5ch; }
|
|
6
|
+
.vh-step + .vh-step { margin-top: 1.2em; }
|
|
7
|
+
.vh-b { font-weight: 700; }
|
|
8
|
+
.vh-diff { display: inline-block; width: 100%; vertical-align: top; text-indent: 0; }
|
|
9
|
+
.vh-dim { opacity: .6; }
|
|
10
|
+
.vh-more { background: none; border: 0; padding: 0; margin: 0; font: inherit; text-indent: 0; cursor: pointer;
|
|
11
|
+
text-decoration: underline dotted; text-underline-offset: 2px; }
|
|
12
|
+
.vh-more:disabled { cursor: progress; opacity: .7; }
|
|
13
|
+
.vh-more:focus-visible { outline: 1px solid currentColor; outline-offset: 1px; }
|
|
14
|
+
.vh-divider, .vh-cap { font-family: var(--font-ui, sans-serif); font-size: .85em; color: #8a8a8a; }
|
|
15
|
+
.vh-divider { display: flex; align-items: center; gap: 1ch; margin: .8em 0 .6em; white-space: nowrap; }
|
|
16
|
+
.vh-divider::before, .vh-divider::after { content: ""; flex: 1; border-top: 1px dashed #3c3c3c; }
|
|
17
|
+
.vh-cap { white-space: normal; padding-bottom: .8em; }
|