@songsid/agend 2.3.5-alpha.3 → 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-api.d.ts +4 -0
- package/dist/agent-runtime-api.js +59 -0
- package/dist/agent-runtime-api.js.map +1 -0
- package/dist/agent-runtime-change.d.ts +76 -0
- package/dist/agent-runtime-change.js +114 -0
- package/dist/agent-runtime-change.js.map +1 -0
- 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 +168 -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 +7 -0
- package/dist/backend/codex-footer-hints.js +41 -0
- package/dist/backend/codex-footer-hints.js.map +1 -0
- 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 +85 -24
- 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 +362 -7
- package/dist/fleet-manager.js +1522 -91
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-windows-runtime.d.ts +8 -2
- package/dist/fleet-windows-runtime.js +93 -6
- 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 +3 -3
- 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/public-web-link.d.ts +6 -0
- package/dist/public-web-link.js +9 -0
- package/dist/public-web-link.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 +106 -13
- package/dist/runtime-api.js.map +1 -1
- package/dist/runtime-build-info.d.ts +9 -0
- package/dist/runtime-build-info.js +59 -0
- package/dist/runtime-build-info.js.map +1 -0
- package/dist/runtime-bundle.d.ts +6 -1
- package/dist/runtime-bundle.js +17 -9
- package/dist/runtime-bundle.js.map +1 -1
- package/dist/runtime-cli.d.ts +13 -1
- package/dist/runtime-cli.js +173 -19
- package/dist/runtime-cli.js.map +1 -1
- package/dist/runtime-client-store.d.ts +27 -1
- package/dist/runtime-client-store.js +86 -6
- package/dist/runtime-client-store.js.map +1 -1
- package/dist/runtime-client.d.ts +74 -0
- package/dist/runtime-client.js +336 -26
- package/dist/runtime-client.js.map +1 -1
- package/dist/runtime-connection.d.ts +22 -0
- package/dist/runtime-connection.js +93 -0
- package/dist/runtime-connection.js.map +1 -0
- package/dist/runtime-coordinator.d.ts +16 -0
- package/dist/runtime-coordinator.js +287 -62
- 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-boot.d.ts +7 -0
- package/dist/runtime-pane-boot.js +23 -0
- package/dist/runtime-pane-boot.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 +30 -2
- package/dist/runtime-protocol.js +30 -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 +98 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +3 -0
- package/dist/settings-http-confirmation.js +28 -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 +68 -0
- package/dist/ui/agent-runtime.js +20 -2
- package/dist/ui/backend-signin.js +39 -21
- 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-instance-settings.js +5 -8
- package/dist/ui/native-pane-recovery.js +1 -1
- package/dist/ui/office-share-page.js +4 -2
- package/dist/ui/panel-chat.js +36 -49
- package/dist/ui/panel-details.js +1 -1
- package/dist/ui/panel-fleet.js +82 -12
- 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 +239 -45
- package/dist/ui/panel-settings.js +266 -192
- package/dist/ui/panel-windows-cli.js +88 -42
- 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-agent-filters.js +94 -0
- package/dist/ui/settings-appearance.js +122 -23
- 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 +33 -12
- package/dist/ui/settings-guests.js +25 -11
- 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 +242 -0
- package/dist/ui/settings-model.js +24 -2
- package/dist/ui/settings-outside.js +104 -38
- package/dist/ui/settings-registry.js +9 -4
- package/dist/ui/settings-shared-strings.js +143 -0
- package/dist/ui/settings-shared.js +345 -0
- package/dist/ui/settings-shortcuts.js +65 -0
- package/dist/ui/settings-strings.js +89 -32
- package/dist/ui/settings-web-authority.js +17 -11
- 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 +81 -15
- package/dist/ui/shared/app.css +1114 -13
- 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/instance-nav.js +3 -2
- package/dist/ui/shared/machine-name.js +13 -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/settings-width.js +31 -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/tokens.css +1 -0
- package/dist/ui/shared/ui-dialog.js +2 -2
- package/dist/ui/shared/ui-menu.js +3 -3
- 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/windows-cli-catalog.js +41 -12
- 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 +49 -2
- package/dist/web-api.js +279 -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 +4 -1
- package/dist/windows-agents.js +14 -10
- package/dist/windows-agents.js.map +1 -1
- package/dist/windows-cli-api.d.ts +12 -1
- package/dist/windows-cli-api.js +29 -2
- 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 +25 -0
- package/dist/windows-cli-worker.js +98 -7
- package/dist/windows-cli-worker.js.map +1 -1
- package/dist/windows-cli.d.ts +11 -0
- package/dist/windows-cli.js +17 -3
- 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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// #1770: the time a chat line shows, read in the fleet's zone (the one chat-logs, fleet.log and the #1586 DMs use) —
|
|
2
|
+
// "17:38" today, "Yesterday 17:38", "10/11 17:38" earlier this year, "2025/10/11 17:38" before. The hour and minute keep
|
|
3
|
+
// the browser's own format (12- or 24-hour), as they always had. No imports: the thread, the preview panel and the
|
|
4
|
+
// tests read it as it is.
|
|
5
|
+
|
|
6
|
+
const cache = new Map();
|
|
7
|
+
/** One formatter per (kind, zone, locale): a thread may label 500 lines on every render. */
|
|
8
|
+
function fmt(kind, tz, locale) {
|
|
9
|
+
const key = `${kind}|${tz || ""}|${locale || ""}`;
|
|
10
|
+
let f = cache.get(key);
|
|
11
|
+
if (!f) {
|
|
12
|
+
const o = kind === "hm" ? { hour: "2-digit", minute: "2-digit" }
|
|
13
|
+
: kind === "ymd" ? { year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hourCycle: "h23" }
|
|
14
|
+
: { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", timeZoneName: "short" };
|
|
15
|
+
f = new Intl.DateTimeFormat(kind === "ymd" ? "en-US" : (locale || []), { ...o, timeZone: tz || undefined });
|
|
16
|
+
cache.set(key, f);
|
|
17
|
+
}
|
|
18
|
+
return f;
|
|
19
|
+
}
|
|
20
|
+
/** `tz` when this browser knows it, else undefined (the browser's own zone): a label must still be drawn. */
|
|
21
|
+
function known(tz) {
|
|
22
|
+
if (!tz) return undefined;
|
|
23
|
+
try { fmt("ymd", tz); return tz; } catch { return undefined; }
|
|
24
|
+
}
|
|
25
|
+
/** The fleet's zone, as the page was served it (<body data-fleet-tz>); undefined when absent or unknown here. */
|
|
26
|
+
export function fleetTz() { return known(globalThis.document?.body?.dataset?.fleetTz); }
|
|
27
|
+
|
|
28
|
+
const toMs = (ts) => (typeof ts === "number" ? ts : Date.parse(String(ts || "")));
|
|
29
|
+
function wall(ms, tz) {
|
|
30
|
+
const p = {};
|
|
31
|
+
for (const x of fmt("ymd", tz).formatToParts(ms)) p[x.type] = Number(x.value);
|
|
32
|
+
return p;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The label for `ts` (ISO string or epoch ms), "" when it cannot be read. opts: tz (default the fleet's), now (epoch ms),
|
|
37
|
+
* yesterday(hm) → the word for "yesterday" around hm (default: hm alone), locale (tests).
|
|
38
|
+
*/
|
|
39
|
+
export function chatTime(ts, opts = {}) {
|
|
40
|
+
const ms = toMs(ts);
|
|
41
|
+
if (!Number.isFinite(ms)) return "";
|
|
42
|
+
const tz = "tz" in opts ? known(opts.tz) : fleetTz();
|
|
43
|
+
const hm = fmt("hm", tz, opts.locale).format(ms);
|
|
44
|
+
const d = wall(ms, tz), today = wall(opts.now ?? Date.now(), tz);
|
|
45
|
+
if (d.year === today.year && d.month === today.month && d.day === today.day) return hm;
|
|
46
|
+
const y = new Date(Date.UTC(today.year, today.month - 1, today.day - 1));
|
|
47
|
+
if (d.year === y.getUTCFullYear() && d.month === y.getUTCMonth() + 1 && d.day === y.getUTCDate()) return opts.yesterday ? opts.yesterday(hm) : hm;
|
|
48
|
+
return d.year === today.year ? `${d.month}/${d.day} ${hm}` : `${d.year}/${d.month}/${d.day} ${hm}`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** The full date, time and zone of `ts`, for a tooltip; "" when it cannot be read. */
|
|
52
|
+
export function chatTimeFull(ts, opts = {}) {
|
|
53
|
+
const ms = toMs(ts);
|
|
54
|
+
if (!Number.isFinite(ms)) return "";
|
|
55
|
+
return fmt("full", "tz" in opts ? known(opts.tz) : fleetTz(), opts.locale).format(ms);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Milliseconds until the fleet's next midnight (when "today" labels change), at most an hour (a DST day self-corrects). */
|
|
59
|
+
export function msToNextDay(now = Date.now(), tz = fleetTz()) {
|
|
60
|
+
const w = wall(now, known(tz));
|
|
61
|
+
const into = ((w.hour * 60 + w.minute) * 60 + w.second) * 1000 + (now % 1000);
|
|
62
|
+
return Math.max(1000, Math.min(3_600_000, 86_400_000 - into + 1000));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Call `fn` when the fleet's day may have changed — at its next midnight, then again for each one after (an hour at
|
|
67
|
+
* most between looks, so a DST day or a late timer corrects itself). Each subscriber holds its own timer, and no
|
|
68
|
+
* module-wide state: the unsubscribe it returns leaves nothing armed.
|
|
69
|
+
*/
|
|
70
|
+
export function onDayChange(fn) {
|
|
71
|
+
let timer = null, live = true;
|
|
72
|
+
const arm = () => {
|
|
73
|
+
timer = setTimeout(() => {
|
|
74
|
+
timer = null;
|
|
75
|
+
try { fn(); } finally { if (live) arm(); }
|
|
76
|
+
}, msToNextDay());
|
|
77
|
+
};
|
|
78
|
+
arm();
|
|
79
|
+
return () => { live = false; if (timer !== null) { clearTimeout(timer); timer = null; } };
|
|
80
|
+
}
|
|
@@ -10,6 +10,7 @@ import { t } from "./app-i18n.js";
|
|
|
10
10
|
import { appStore, createStore, useStore } from "./app-store.js";
|
|
11
11
|
import { Icon } from "./ui-icons.js";
|
|
12
12
|
import { UsageBody, UsageCompactToggle, UsageDialog } from "./usage-dialog.js";
|
|
13
|
+
import { RailFrame } from "./side-rail.js";
|
|
13
14
|
|
|
14
15
|
export const TEXT_SIZE_KEY = "agend_text_size";
|
|
15
16
|
export const VIEW_FIT_KEY = "agend_view_fit";
|
|
@@ -127,11 +128,8 @@ export function UsageRail({ route }) {
|
|
|
127
128
|
const { instances = [] } = useStore(appStore);
|
|
128
129
|
const instance = instances.find(item => item.name === route?.instance);
|
|
129
130
|
if (!wide || !open || !route || !RAIL_PANELS.includes(route.panel) || !usageOffered() || instance?.capabilities?.usage === false) return null;
|
|
130
|
-
return html
|
|
131
|
-
|
|
132
|
-
<button type="button" class="icon-btn" onClick=${() => setUsageRail(false)} aria-label=${t("app.usageHide")} title=${t("app.usageHide")}><${Icon} name="close" size=${16} /></button></div>
|
|
133
|
-
<div class="u-rail-body"><${UsageBody} owner="usage-rail" /></div>
|
|
134
|
-
</aside>`;
|
|
131
|
+
return html`<${RailFrame} trust="usage" label=${t("view.usage.title_plain")} title=${t("view.usage.title")} tools=${html`<${UsageCompactToggle} />`}
|
|
132
|
+
closeLabel=${t("app.usageHide")} onClose=${() => setUsageRail(false)}><${UsageBody} owner="usage-rail" /></${RailFrame}>`;
|
|
135
133
|
}
|
|
136
134
|
|
|
137
135
|
/**
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// #1306 §6.1 (Q4): an agent's .html / .htm attachment gets the same preview card as a ```html block. Its HTML is read
|
|
2
|
+
// from /ui/file/<id> — same origin, this session's cookie — only on a click (Preview, Open in panel), never to show a
|
|
3
|
+
// card. What runs is then handed to the preview frame exactly like a block's (AgendPreview.start): the file URL itself
|
|
4
|
+
// is never opened or framed on the dashboard's origin.
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* #2863: the sizes a preview takes (UTF-8 bytes of the HTML), the same as a block's (preview.js LIMITS): up to ASK it
|
|
8
|
+
* runs at once; above it the person is asked first ("Preview anyway?"); above MAX there is no preview, only the
|
|
9
|
+
* download. MAX is the frame's own ceiling (web-preview.ts PREVIEW_HTML_MAX_BYTES).
|
|
10
|
+
*/
|
|
11
|
+
export const HTML_PREVIEW_ASK = 8 * 1024 * 1024;
|
|
12
|
+
export const HTML_PREVIEW_MAX = 50 * 1024 * 1024;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Read an attachment's HTML: { ok: true, code } or { ok: false, reason } with reason "large" (above `ask` and not
|
|
16
|
+
* `anyway`: nothing is fetched when its listed size says so; `size` is what it is), "over" (above `max`: its listed size
|
|
17
|
+
* is checked before anything is fetched, the bytes again after), "gone" (the fleet no longer serves that id — the file
|
|
18
|
+
* changed, or the fleet restarted), or "failed". The text card reads with its own, single cap (ask = max).
|
|
19
|
+
*/
|
|
20
|
+
export async function loadHtmlAttachment(att, fetchImpl = globalThis.fetch, { ask = HTML_PREVIEW_ASK, max = HTML_PREVIEW_MAX, anyway = false } = {}) {
|
|
21
|
+
if (!att || typeof att.id !== "string" || !/^[0-9a-f]{32}$/.test(att.id)) return { ok: false, reason: "failed" };
|
|
22
|
+
if (typeof att.size === "number" && att.size > max) return { ok: false, reason: "over" };
|
|
23
|
+
if (typeof att.size === "number" && att.size > ask && !anyway) return { ok: false, reason: "large", size: att.size };
|
|
24
|
+
let res;
|
|
25
|
+
// Hub PR A (#3226): a Hub file is read from its own room-scoped URL (chat-render's attachmentUrl: a plain same-origin path).
|
|
26
|
+
const url = globalThis.AgendChatRender?.attachmentUrl ? globalThis.AgendChatRender.attachmentUrl(att) : `/ui/file/${att.id}`;
|
|
27
|
+
try { res = await fetchImpl(url, { credentials: "same-origin", cache: "no-store" }); }
|
|
28
|
+
catch { return { ok: false, reason: "failed" }; }
|
|
29
|
+
if (!res || !res.ok) return { ok: false, reason: res && res.status === 404 ? "gone" : "failed" };
|
|
30
|
+
let bytes;
|
|
31
|
+
try { bytes = await res.arrayBuffer(); } catch { return { ok: false, reason: "failed" }; }
|
|
32
|
+
if (bytes.byteLength > max) return { ok: false, reason: "over" };
|
|
33
|
+
if (bytes.byteLength > ask && !anyway) return { ok: false, reason: "large", size: bytes.byteLength };
|
|
34
|
+
// UTF-8, as a block's text is; a BOM is dropped.
|
|
35
|
+
return { ok: true, code: new TextDecoder("utf-8").decode(bytes) };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** #2863: a size as the person reads it: "12.3 MB" (1 MB = 1024 × 1024 bytes, as the caps are). */
|
|
39
|
+
export function sizeLabel(bytes) {
|
|
40
|
+
const mb = bytes / (1024 * 1024);
|
|
41
|
+
return `${mb >= 10 ? Math.round(mb) : Math.round(mb * 10) / 10} MB`;
|
|
42
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* #3226 B: the Hub chat — the conversation list (in the sidebar; the page itself on a phone), a room (its header, the
|
|
2
|
+
fleet chat's thread and composer) and the right-hand panel (the usage rail's frame and cards). Linked by the Hub's
|
|
3
|
+
hub-chat-strings.js (an older hub.css or app.css lacks these rules). Tokens only: both themes follow. No style= anywhere
|
|
4
|
+
(#1300): every look here is a class. */
|
|
5
|
+
|
|
6
|
+
/* ── the conversation list ── */
|
|
7
|
+
.hub-side-nav { display: flex; flex-direction: column; min-height: 0; flex: 1; }
|
|
8
|
+
.hub-nav { display: flex; flex-direction: column; gap: var(--s-1); min-height: 0; padding: 0 var(--s-2) var(--s-2); }
|
|
9
|
+
.hub-new { justify-content: flex-start; gap: var(--s-2); margin: var(--s-1) 0 var(--s-2); }
|
|
10
|
+
.hub-search { display: flex; align-items: center; gap: var(--s-2); background: var(--surface); border-radius: var(--r-sm); padding: 0 var(--s-2); color: var(--text-3); }
|
|
11
|
+
.hub-search input { flex: 1; min-width: 0; border: 0; background: transparent; color: var(--text); padding: 7px 0; font: inherit; font-size: var(--fs-sm); outline: none; }
|
|
12
|
+
.hub-sec { font-size: var(--fs-xs); color: var(--text-3); letter-spacing: .06em; padding: var(--s-3) var(--s-2) var(--s-1); }
|
|
13
|
+
.hub-rooms { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1px; }
|
|
14
|
+
.hub-room-row, .hub-pick-row { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: var(--s-2); align-items: center; padding: 7px var(--s-2);
|
|
15
|
+
border-radius: var(--r-sm); color: var(--text); text-decoration: none; }
|
|
16
|
+
.hub-room-row:hover { background: var(--surface); }
|
|
17
|
+
.hub-room-row.active { background: var(--surface-2); }
|
|
18
|
+
.hub-room-row.closed .t, .hub-room-row.closed .s { color: var(--text-3); }
|
|
19
|
+
.hub-room-text { min-width: 0; display: flex; flex-direction: column; }
|
|
20
|
+
.hub-room-text .t { font-weight: var(--fw-semibold, 600); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
21
|
+
.hub-room-text .s { color: var(--text-3); font-size: var(--fs-xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
22
|
+
.hub-room-side { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; font-size: 11.5px; color: var(--text-3); font-variant-numeric: tabular-nums; }
|
|
23
|
+
.hub-room-side .pulse { width: 8px; height: 8px; border-radius: 50%; background: var(--warn); animation: hub-pulse 1.4s ease-in-out infinite; }
|
|
24
|
+
@keyframes hub-pulse { 50% { opacity: .3; } }
|
|
25
|
+
@media (prefers-reduced-motion: reduce) { .hub-room-side .pulse { animation: none; } }
|
|
26
|
+
.hub-list-empty, .hub-list-err { margin: var(--s-2); font-size: var(--fs-sm); }
|
|
27
|
+
|
|
28
|
+
/* a name's letter on a tone (the same tones in both themes) */
|
|
29
|
+
.hub-av { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; font-weight: 600; font-size: 14px; color: #fff; flex: none; }
|
|
30
|
+
.hub-av.sm { width: 28px; height: 28px; font-size: 12px; border-radius: 8px; }
|
|
31
|
+
.hub-av.lg { width: 56px; height: 56px; font-size: 22px; border-radius: 16px; }
|
|
32
|
+
.hub-av.t0 { background: #4f6bd8; } .hub-av.t1 { background: #2f8f83; } .hub-av.t2 { background: #b4643a; }
|
|
33
|
+
.hub-av.t3 { background: #7b5bc4; } .hub-av.t4 { background: #6b7280; } .hub-av.t5 { background: #b8447a; }
|
|
34
|
+
|
|
35
|
+
/* ── the page: a phone's list, or a wide screen's "pick a chat" ── */
|
|
36
|
+
.hub-chat-body { display: flex; flex-direction: column; overflow: hidden; padding: 0; }
|
|
37
|
+
.hub-home { flex: 1; min-height: 0; display: flex; }
|
|
38
|
+
.hub-home-list { display: none; }
|
|
39
|
+
.hub-home-pick { flex: 1; display: flex; align-items: center; justify-content: center; padding: var(--s-6); }
|
|
40
|
+
@media (max-width: 899px) {
|
|
41
|
+
.hub-home-list { display: block; flex: 1; overflow-y: auto; padding-top: var(--s-2); }
|
|
42
|
+
.hub-home-pick { display: none; }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* ── a room ── */
|
|
46
|
+
.hub-chat { flex: 1; min-height: 0; display: flex; }
|
|
47
|
+
.hub-chat-main { flex: 1; min-width: 0; display: flex; flex-direction: column; min-height: 0; }
|
|
48
|
+
.hub-chat-head { display: flex; align-items: center; gap: var(--s-2); min-height: var(--header-h, 52px); padding: 0 var(--s-4); border-bottom: 1px solid var(--border); flex: none; }
|
|
49
|
+
.hub-chat-title { flex: 1; min-width: 0; display: flex; flex-direction: column; }
|
|
50
|
+
.hub-chat-title strong { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
51
|
+
.hub-chat-title .s { color: var(--text-3); font-size: var(--fs-xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
52
|
+
.hub-back { flex: none; }
|
|
53
|
+
.hub-scroller { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; position: relative; }
|
|
54
|
+
.hub-scroller .thread { max-width: var(--col); margin: 0 auto; padding: var(--s-4) var(--s-5); }
|
|
55
|
+
.hub-room-empty { padding: var(--s-6) var(--s-4); }
|
|
56
|
+
.hub-banner { margin: 0; padding: var(--s-2) var(--s-3); border-radius: var(--r-md); font-size: var(--fs-sm); background: var(--surface); color: var(--text-2); }
|
|
57
|
+
.hub-banner.danger { background: var(--danger-bg, var(--surface)); color: var(--danger); }
|
|
58
|
+
.hub-banner.warn { background: var(--warn-bg, var(--surface)); color: var(--warn); }
|
|
59
|
+
|
|
60
|
+
/* ── the right-hand panel: the usage rail's frame (side-rail.js), its cards ── */
|
|
61
|
+
.hub-chat > .u-rail { width: 320px; flex-shrink: 0; }
|
|
62
|
+
.hub-card { gap: var(--s-2); }
|
|
63
|
+
.hub-agent-card { align-items: center; text-align: center; }
|
|
64
|
+
.hub-agent-card strong { font-size: var(--fs-lg, 17px); }
|
|
65
|
+
.hub-kv { margin: 0; display: grid; grid-template-columns: auto 1fr; gap: 4px 10px; font-size: var(--fs-sm); }
|
|
66
|
+
.hub-kv dt { color: var(--text-3); } .hub-kv dd { margin: 0; min-width: 0; }
|
|
67
|
+
.hub-aud { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--s-2); font-size: var(--fs-sm); color: var(--text-2); }
|
|
68
|
+
.hub-aud li { display: grid; grid-template-columns: 18px 1fr; gap: var(--s-2); }
|
|
69
|
+
.hub-aud li > .icon { margin-top: 2px; color: var(--text-3); }
|
|
70
|
+
.hub-aud b { color: var(--text); }
|
|
71
|
+
.hub-p1 { margin: 0 var(--s-1); font-size: var(--fs-xs); }
|
|
72
|
+
.hub-rail-sheet { display: flex; flex-direction: column; gap: var(--s-3); }
|
|
73
|
+
|
|
74
|
+
/* ── New chat ── */
|
|
75
|
+
.hub-pick { display: flex; flex-direction: column; gap: var(--s-2); }
|
|
76
|
+
.hub-pick-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
77
|
+
.hub-pick-row { grid-template-columns: 34px minmax(0, 1fr) auto; }
|
|
78
|
+
.hub-pick-row .hub-room-text .s { white-space: normal; }
|
|
79
|
+
.hub-dock .composer-row .hint { white-space: normal; overflow: visible; text-overflow: clip; }
|
|
80
|
+
|
|
81
|
+
/* the session's menu sits at the sidebar's foot: it always opens upward */
|
|
82
|
+
.hub-session .hub-menu .menu-list { top: auto; bottom: calc(100% + 6px); right: 0; left: auto; }
|
|
83
|
+
|
|
84
|
+
/* An HTML block's Download needs the preview (#3226 E): not offered in the Hub's thread until then. */
|
|
85
|
+
.hub-scroller .pv-dl { display: none; }
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* #3226 C: My shared agents and Administration as Settings-like pages (linked by hub-owner-strings.js; an older
|
|
2
|
+
hub-chat.css lacks these rules). Tokens only; no style= anywhere (#1300). */
|
|
3
|
+
/* ── My shared agents and Administration (#3226 C): Settings' page layout ── */
|
|
4
|
+
.hub-page-body { padding: var(--s-4) max(var(--s-5), env(safe-area-inset-right)) var(--s-6) max(var(--s-5), env(safe-area-inset-left)); }
|
|
5
|
+
.hub-owner { width: 100%; max-width: 860px; min-width: 0; margin: 0 auto; display: flex; flex-direction: column; gap: var(--s-3); }
|
|
6
|
+
.hub-crumb { display: inline-flex; align-items: center; gap: var(--s-1); color: var(--text-2); font-size: var(--fs-sm); text-decoration: none; width: fit-content; }
|
|
7
|
+
.hub-rows { display: flex; flex-direction: column; gap: var(--s-2); margin-top: var(--s-2); }
|
|
8
|
+
.hub-rows .s-row.hub-row { display: flex; align-items: center; gap: var(--s-3); flex-wrap: nowrap; background: var(--surface-2); }
|
|
9
|
+
.hub-row > :not(.hub-row-text) { flex: none; }
|
|
10
|
+
.hub-row-link { color: var(--text); text-decoration: none; }
|
|
11
|
+
.hub-row-link:hover { background: var(--surface-2); }
|
|
12
|
+
.hub-row-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
13
|
+
.hub-row-text strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
14
|
+
.hub-row-text .note { overflow-wrap: anywhere; }
|
|
15
|
+
.hub-card-head { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); }
|
|
16
|
+
.hub-card-head h3 { margin: 0; color: var(--text); font-size: var(--fs-lg); text-transform: none; letter-spacing: 0; }
|
|
17
|
+
.hub-grant { display: flex; flex-direction: column; gap: var(--s-3); }
|
|
18
|
+
.hub-grant .field { margin: 0; }
|
|
19
|
+
.hub-danger h3 { color: var(--danger); }
|
|
20
|
+
.hub-steps { list-style: none; margin: var(--s-2) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--s-3); counter-reset: hub-step; }
|
|
21
|
+
.hub-steps > li { display: flex; align-items: flex-start; gap: var(--s-3); counter-increment: hub-step; }
|
|
22
|
+
.hub-steps > li::before { content: counter(hub-step); flex: none; width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 600;
|
|
23
|
+
background: var(--surface-2); color: var(--text-2); }
|
|
24
|
+
.hub-step-body { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: var(--s-2); text-align: start; }
|
|
25
|
+
.hub-steps > li.done::before { content: "✓"; background: var(--ok-bg, var(--surface)); color: var(--ok); }
|
|
26
|
+
.hub-steps > li.now::before { background: var(--text); color: var(--bg); }
|
|
27
|
+
.hub-step-body > span { display: flex; flex-direction: column; gap: 2px; }
|
|
28
|
+
.hub-step-form { display: flex; gap: var(--s-2); align-items: center; flex-wrap: wrap; width: 100%; }
|
|
29
|
+
.hub-step-form .field { margin: 0; flex: 1; min-width: 12em; }
|
|
30
|
+
.hub-steps .hub-offer { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; text-align: start; margin: 0; padding: 0; }
|
|
31
|
+
.hub-steps > li::before { align-self: flex-start; margin-top: 1px; }
|
|
32
|
+
.hub-steps .hub-offer > * { text-align: start; align-self: flex-start; justify-self: start; }
|
|
33
|
+
@media (max-width: 899px) { .hub-page-body { padding: var(--s-3) var(--s-4) var(--s-6); } }
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* The lazy quota components own these additions, including on a retained shell stylesheet. */
|
|
2
|
+
.hub-quota-card .u-row { flex-wrap: wrap; gap: var(--s-2); }
|
|
3
|
+
.hub-quota-chip { max-width: 100%; white-space: normal; }
|
|
4
|
+
.hub-quota-banner { overflow-wrap: anywhere; }
|
|
5
|
+
.hub-quota-visibility > h3 { margin: 0 0 var(--s-3); }
|
|
6
|
+
.hub-quota-setting { display: flex; align-items: center; justify-content: space-between; gap: var(--s-4); }
|
|
7
|
+
.hub-quota-setting > span { min-width: 0; }
|
|
8
|
+
.hub-quota-setting .note { display: block; margin: var(--s-1) 0 0; }
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/* AgEnD Hub P1, slice 3: the Hub pages' own stylesheet, linked by their lazy modules (hub-strings.js linkHubCss), so a
|
|
2
|
+
tab opened before an upgrade (an app.css without these rules) draws them the same. Never loaded while the Hub is off. */
|
|
3
|
+
.hub-brand-name { color: var(--text-2); font-weight: var(--fw-medium); }
|
|
4
|
+
.hub-switch { display: flex; gap: 2px; margin: 0 var(--s-3) var(--s-2); padding: 2px; border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface-2); }
|
|
5
|
+
.hub-switch-item { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: var(--s-1); min-height: 28px; padding: 0 var(--s-2);
|
|
6
|
+
border-radius: var(--r-sm); font-size: var(--fs-sm); color: var(--text-2); text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
7
|
+
.hub-switch-item.is-current { background: var(--surface); color: var(--text); box-shadow: var(--shadow-1); font-weight: var(--fw-medium); }
|
|
8
|
+
a.hub-switch-item:hover { color: var(--text); }
|
|
9
|
+
a.hub-switch-item:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }
|
|
10
|
+
.hub-preview { border-left: 3px solid var(--warn-line); background: var(--warn-bg); padding: var(--s-2) var(--s-3); }
|
|
11
|
+
.hub-empty { padding: var(--s-6) 0; }
|
|
12
|
+
.s-hub-connect .hub-connect { max-width: 520px; }
|
|
13
|
+
.hub-state { display: grid; gap: var(--s-2); margin-top: var(--s-3); }
|
|
14
|
+
.hub-state h4 { margin: 0; display: flex; align-items: center; gap: var(--s-2); flex-wrap: wrap; }
|
|
15
|
+
.hub-origin code { overflow-wrap: anywhere; }
|
|
16
|
+
.hub-fp { display: grid; gap: var(--s-1); }
|
|
17
|
+
.hub-fp-label { font-size: var(--fs-sm); color: var(--text-2); }
|
|
18
|
+
.hub-fp-groups { font-family: var(--font-mono); font-size: var(--fs-md); letter-spacing: .04em; word-spacing: .3em; overflow-wrap: anywhere; }
|
|
19
|
+
.hub-fp-full { font-family: var(--font-mono); font-size: var(--fs-xs); overflow-wrap: anywhere; color: var(--text-2); }
|
|
20
|
+
.hub-fp .btn-link { justify-self: start; }
|
|
21
|
+
.hub-steps-lead { margin: var(--s-1) 0 0; }
|
|
22
|
+
.hub-steps { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--s-1); }
|
|
23
|
+
.hub-steps li { display: flex; align-items: center; gap: var(--s-2); color: var(--text-2); }
|
|
24
|
+
.hub-steps li.is-done { color: var(--ok); }
|
|
25
|
+
.hub-steps small { margin-left: auto; color: var(--text-3); }
|
|
26
|
+
.hub-link { font-size: var(--fs-xs); font-weight: var(--fw-medium); padding: 1px var(--s-2); border-radius: var(--r-full); }
|
|
27
|
+
.hub-link.is-online { background: var(--ok-bg); color: var(--ok); }
|
|
28
|
+
.hub-link.is-offline { background: var(--warn-bg); color: var(--warn); }
|
|
29
|
+
.hub-key-changed, .hub-held { border-left: 3px solid var(--danger-line); padding-left: var(--s-3); }
|
|
30
|
+
.hub-exposures { margin-top: var(--s-4); border-top: 1px solid var(--border); padding-top: var(--s-3); }
|
|
31
|
+
.hub-exposures h4 { margin: 0 0 var(--s-1); }
|
|
32
|
+
.hub-exposure-list { list-style: none; margin: var(--s-2) 0 0; padding: 0; display: grid; gap: var(--s-2); }
|
|
33
|
+
.hub-exposure { display: grid; gap: 2px; padding: var(--s-2) var(--s-3); border: 1px solid var(--border); border-radius: var(--r-md); }
|
|
34
|
+
.hub-exposure.is-shared { border-color: var(--accent); }
|
|
35
|
+
.hub-exposure-main { display: flex; align-items: center; gap: var(--s-2); min-height: var(--tap); }
|
|
36
|
+
.hub-exposure-name { min-width: 0; overflow-wrap: anywhere; }
|
|
37
|
+
.hub-exposure-why { color: var(--text-3); padding-left: calc(var(--s-2) + 18px); }
|
|
38
|
+
/* S3b: the Hub workspace's pages */
|
|
39
|
+
.hub-body { display: grid; gap: var(--s-3); align-content: start; padding: var(--s-4) var(--s-3) var(--s-6); }
|
|
40
|
+
.hub-ask, .hub-mine, .hub-admin { display: grid; gap: var(--s-3); align-content: start; }
|
|
41
|
+
.hub-body > * { width: 100%; max-width: 860px; min-width: 0; }
|
|
42
|
+
.hub-body .card { margin-bottom: 0; }
|
|
43
|
+
@media (max-width: 899px) { .hub-body { padding: var(--s-3) var(--s-4) var(--s-6); } }
|
|
44
|
+
.hub-signin { max-width: 420px; }
|
|
45
|
+
.hub-signin h2 { margin: 0 0 var(--s-1); }
|
|
46
|
+
.hub-list { list-style: none; margin: var(--s-2) 0 0; padding: 0; display: grid; gap: var(--s-2); }
|
|
47
|
+
.hub-item { display: flex; align-items: center; gap: var(--s-2); flex-wrap: wrap; padding: var(--s-2) var(--s-3); border: 1px solid var(--border); border-radius: var(--r-md); }
|
|
48
|
+
.hub-item .grow { flex: 1; min-width: 0; display: grid; gap: 2px; overflow-wrap: anywhere; }
|
|
49
|
+
.hub-room { display: grid; gap: var(--s-2); }
|
|
50
|
+
.hub-room-head { display: flex; align-items: center; gap: var(--s-2); }
|
|
51
|
+
.hub-room-head h3 { margin: 0; min-width: 0; overflow-wrap: anywhere; }
|
|
52
|
+
.hub-identity { margin: 0; }
|
|
53
|
+
.hub-entries { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--s-3); }
|
|
54
|
+
.hub-entry { display: grid; gap: var(--s-1); }
|
|
55
|
+
.hub-q, .hub-a { white-space: pre-wrap; overflow-wrap: anywhere; padding: var(--s-2) var(--s-3); border-radius: var(--r-md); }
|
|
56
|
+
.hub-q { justify-self: end; max-width: 85%; background: var(--surface-2); }
|
|
57
|
+
.hub-a { justify-self: start; max-width: 95%; border: 1px solid var(--border); }
|
|
58
|
+
.hub-stage { font-size: var(--fs-sm); color: var(--text-3); }
|
|
59
|
+
.hub-stage.stage-uncertain, .hub-stage.stage-failed, .hub-stage.stage-cancelled, .hub-stage.stage-rejected { color: var(--warn); }
|
|
60
|
+
.hub-compose textarea { width: 100%; min-height: 72px; resize: vertical; }
|
|
61
|
+
.hub-exposure-card h3 { display: flex; align-items: center; gap: var(--s-2); flex-wrap: wrap; margin: 0; }
|
|
62
|
+
.hub-badge { font-size: var(--fs-xs); font-weight: var(--fw-medium); padding: 1px var(--s-2); border-radius: var(--r-full); background: var(--surface-2); color: var(--text-2); }
|
|
63
|
+
.hub-badge.state-published { background: var(--ok-bg); color: var(--ok); }
|
|
64
|
+
.hub-badge.state-frozen { background: var(--warn-bg); color: var(--warn); }
|
|
65
|
+
.hub-grant { display: flex; flex-direction: row; flex-wrap: wrap; align-items: flex-end; gap: var(--s-2); margin-top: var(--s-2); }
|
|
66
|
+
.hub-grant .field { flex: 1 1 200px; min-width: 0; }
|
|
67
|
+
.hub-grant .field-row { flex: 1 1 100%; flex-wrap: wrap; }
|
|
68
|
+
.hub-offer { display: grid; gap: var(--s-1); margin-top: var(--s-2); }
|
|
69
|
+
.hub-code { font-family: var(--font-mono); font-size: var(--fs-lg); letter-spacing: .12em; user-select: all; }
|
|
70
|
+
.hub-session { display: flex; align-items: center; gap: var(--s-2); }
|
|
71
|
+
.hub-session .side-row { flex: 1; min-width: 0; }
|
|
@@ -18,6 +18,7 @@ import { viewStore } from "./view-roster-store.js";
|
|
|
18
18
|
import { onPrefsChanged, prefInForce, prefsWritable, savePref } from "./app-prefs.js";
|
|
19
19
|
import "./view-strings.js";
|
|
20
20
|
import { themesShown, themesStore } from "./app-themes.js";
|
|
21
|
+
import { machineName } from "./machine-name.js";
|
|
21
22
|
import { identityClasses, identityOf, paintIdentity, useIdentityColors } from "./identity-color.js";
|
|
22
23
|
|
|
23
24
|
/** view.* text with named values. */
|
|
@@ -145,7 +146,7 @@ export function instanceTooltip(it) {
|
|
|
145
146
|
else lines.push(name);
|
|
146
147
|
lines.push(line("tooltipBackend", backendLabel(it.backend)));
|
|
147
148
|
if (it.runtime) lines.push(`Runtime: ${runtimeLabel(it.runtime)}`);
|
|
148
|
-
if (it.machine_id) lines.push(line("tooltipMachine",it.
|
|
149
|
+
if (it.machine_id) lines.push(line("tooltipMachine",machineName(it.machine_id,it.machine_name)));
|
|
149
150
|
if (it.machine_id && it.machine_status !== "online") lines.push(tn(it.machine_status === "revoked" ? "machineRevoked" : "machineOffline"));
|
|
150
151
|
const src = (s) => (s === "instance" || s === "classic" ? tn("srcConfigured") : s === "fleet-default" ? tn("srcFleetDefault") : "");
|
|
151
152
|
lines.push(line("tooltipModel", (modelText(it) || tn("tooltipUnavailable")) + src(it.model_source)));
|
|
@@ -630,7 +631,7 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
630
631
|
<span class="v-meta">${it.runtime === "windows" ? "Windows" : it.context_pct != null ? `${Math.round(it.context_pct)}%` : ""}</span></span>
|
|
631
632
|
${two ? html`<span class="inst-line inst-line2"><span class="inst-alt" title=${secondary || undefined}>${secondary || ""}</span>
|
|
632
633
|
${mins != null ? html`<span class=${`inst-when${fade > 0 ? " fresh" : ""}`} title=${tn("replyTitle", { time: new Date(Date.parse(it.last_reply)).toLocaleString() })}>${replyText(mins)}</span>` : null}</span>` : null}
|
|
633
|
-
${it.machine_id ? html`<span class=${`inst-machine${it.machine_status !== "online" ? " offline" : ""}`} title=${tn("tooltipMachine",{value:it.
|
|
634
|
+
${it.machine_id ? html`<span class=${`inst-machine${it.machine_status !== "online" ? " offline" : ""}`} title=${tn("tooltipMachine",{value:machineName(it.machine_id,it.machine_name)})}><span class="inst-machine-name">${machineName(it.machine_id,it.machine_name)}</span>${it.machine_status !== "online" ? html`<span class="inst-machine-status">${tn(it.machine_status === "revoked" ? "machineRevoked" : "machineOffline")}</span>` : null}</span>` : null}
|
|
634
635
|
${facet === "needs" ? html`<span class="inst-sub"><span class="badge-await" title=${waiting || t("app.approxNote")}>${t("app.needsYou")}</span></span>` : null}
|
|
635
636
|
<span class="sr-only">${tn("tooltipBackend", { value: backendLabel(it.backend) })}</span></span>
|
|
636
637
|
</a>${fav && editing && canStar ? html`<button type="button" class="icon-btn inst-move" aria-label=${tn("favUp", { name: label })}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// A paired computer's display name. A module of its own, imported by the sidebar (instance-nav.js) and by the lazy
|
|
2
|
+
// chat panel. A tab opened before an upgrade keeps the old shell, whose instance-nav.js has no `machineName`; the new
|
|
3
|
+
// chat panel imports it from here instead, a module that tab loads fresh, so Chat still opens (as #2978 did for
|
|
4
|
+
// settings-width.js). It registers its own words so it does not depend on the shell's older string tables.
|
|
5
|
+
import { register, t } from "./app-i18n.js";
|
|
6
|
+
|
|
7
|
+
register("machine", {
|
|
8
|
+
"en": { "short": "Computer {value}" },
|
|
9
|
+
"zh-TW": { "short": "電腦 {value}" },
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
/** A remote computer by its name; with no name yet, by the start of its id, never the whole id. The 8-character cut matches `shortId` in src/ui/settings-agent-filters.js; keep the two in step. */
|
|
13
|
+
export const machineName = (id, name) => name || t("machine.short").split("{value}").join(String(id).slice(0, 8));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Hub PR A (#3226): a page's head as Settings draws it (#1408: `.s-page-head`) — the title with its scope beside it, the
|
|
2
|
+
// lead under them and the page's actions on the right — shared so the Hub's owner and admin pages are the same thing.
|
|
3
|
+
// Drawing only: the words are the caller's (Settings' SettingsPageHead passes its own).
|
|
4
|
+
import { html } from "./app-html.js";
|
|
5
|
+
|
|
6
|
+
export function PageHead({ title, scope, lead, children }) {
|
|
7
|
+
return html`<header class="s-page-head"><div><div class="s-page-title"><h2>${title}</h2><span class="s-scope">${scope}</span></div><p class="s-page-lead">${lead}</p></div>${children ? html`<div class="s-page-actions">${children}</div>` : null}</header>`;
|
|
8
|
+
}
|
|
@@ -282,6 +282,13 @@ const REDRAWS_IN_PLACE = new Set(["grok"]);
|
|
|
282
282
|
const FULL_SCREEN = new Set(["claude-code", "opencode", "grok"]); // agy: its chat UI unverified — found by the read
|
|
283
283
|
/** The full-screen CLIs whose earlier output the Log tab shows (it reads their transcript: log-service.ts). */
|
|
284
284
|
const LOG_HAS_HISTORY = new Set(["claude-code"]);
|
|
285
|
+
/**
|
|
286
|
+
* Claude history in the View (view-history.js): the full-screen CLIs whose View shows their earlier conversation from
|
|
287
|
+
* their transcript, above the live screen. A server without it (an older one) leaves them as before: no scrollback.
|
|
288
|
+
*/
|
|
289
|
+
const TRANSCRIPT_HISTORY = new Set(["claude-code"]);
|
|
290
|
+
/** How near the top (px) a history being read asks for the page before it. */
|
|
291
|
+
const OLDER_AT_PX = 48;
|
|
285
292
|
/**
|
|
286
293
|
* M-2267 option (2), the leader's safe default: where a full-screen CLI's earlier output is — its Log tab (or that the
|
|
287
294
|
* Log tab is off, and where to turn it on). Only for whom the Log tab is (a signed-in session on the full app; never a
|
|
@@ -304,8 +311,11 @@ function Terminal({ name, lease, density, every = 800, backend = "", signedIn =
|
|
|
304
311
|
const [newBelow, setNewBelow] = useState(false);
|
|
305
312
|
const [historyNote, setHistoryNoteState] = useState(null);
|
|
306
313
|
// A CLI found to keep no scrollback (full screen): nothing is offered or read again for it; the note says why, briefly.
|
|
307
|
-
const
|
|
308
|
-
const
|
|
314
|
+
const keepsNone = FULL_SCREEN.has(backend) && !TRANSCRIPT_HISTORY.has(backend);
|
|
315
|
+
const [noScrollback, setNoScrollback] = useState(keepsNone);
|
|
316
|
+
const noScrollbackRef = useRef(keepsNone);
|
|
317
|
+
// Claude history in the View: the history shown while reading (view-history.js's createHistory), or null.
|
|
318
|
+
const transcript = useRef(null);
|
|
309
319
|
const logLink = logLinkFor(name, backend, signedIn);
|
|
310
320
|
const noteTimer = useRef(null);
|
|
311
321
|
const setHistoryNote = (note, brief = false) => {
|
|
@@ -402,6 +412,7 @@ function Terminal({ name, lease, density, every = 800, backend = "", signedIn =
|
|
|
402
412
|
// The person asked for what scrolled off: one bounded read, then reading (or why there is nothing to read).
|
|
403
413
|
const loadEarlier = useRef(null);
|
|
404
414
|
const follow = useRef(null);
|
|
415
|
+
const olderPage = useRef(null);
|
|
405
416
|
useEffect(() => {
|
|
406
417
|
const reads = readStream(lease);
|
|
407
418
|
const refresh = async () => {
|
|
@@ -439,6 +450,7 @@ function Terminal({ name, lease, density, every = 800, backend = "", signedIn =
|
|
|
439
450
|
const from = modeRef.current;
|
|
440
451
|
if (from !== "follow" && !(from === "reading" && !screenAt.current.history)) return;
|
|
441
452
|
if (noScrollbackRef.current) { setHistoryNote(tn("noEarlier"), true); return; } // known: nothing to read
|
|
453
|
+
if (TRANSCRIPT_HISTORY.has(backend)) { await loadTranscript(from); return; }
|
|
442
454
|
const box0 = term.current;
|
|
443
455
|
// Where the person is, measured from the end: the screen's lines stay where they are under the scrollback added.
|
|
444
456
|
const fromEnd = box0 ? box0.scrollHeight - box0.scrollTop : 0;
|
|
@@ -477,8 +489,65 @@ function Terminal({ name, lease, density, every = 800, backend = "", signedIn =
|
|
|
477
489
|
}
|
|
478
490
|
} catch { if (lease.current()) { back(); setHistoryNote(tn("earlierFailed"), true); } }
|
|
479
491
|
};
|
|
492
|
+
/**
|
|
493
|
+
* Claude history in the View: the conversation before the live screen, from the transcript (the renderer is its own
|
|
494
|
+
* lazy module), drawn above the screen as it is now — then reading, as for a scrollback. Older pages come as the
|
|
495
|
+
* person nears the top. A server without it: this CLI keeps no scrollback, as before.
|
|
496
|
+
*/
|
|
497
|
+
const loadTranscript = async (from) => {
|
|
498
|
+
const back = () => { setMode(from); if (from === "follow") toBottom(); };
|
|
499
|
+
const screen = screenAt.current.drawn == null ? "" : screenAt.current.drawn;
|
|
500
|
+
setMode("loading"); setHistoryNote(tn("loadingEarlier"));
|
|
501
|
+
try {
|
|
502
|
+
const mod = await import("./view-history.js");
|
|
503
|
+
if (!lease.current() || modeRef.current !== "loading" || !pre.current) return;
|
|
504
|
+
let h = null;
|
|
505
|
+
h = mod.createHistory({ name, fetch: (u) => lease.fetch(u), alive: () => lease.current() && transcript.current === h,
|
|
506
|
+
doc: document, font: getComputedStyle(pre.current).fontFamily, cols: grid.current.cols });
|
|
507
|
+
transcript.current = h;
|
|
508
|
+
const got = await h.first(screen);
|
|
509
|
+
if (!lease.current() || modeRef.current !== "loading" || !pre.current || transcript.current !== h) return;
|
|
510
|
+
if (got.kind !== "ok") {
|
|
511
|
+
transcript.current = null;
|
|
512
|
+
if (got.kind === "unsupported") { noScrollbackRef.current = true; setNoScrollback(true); back(); setHistoryNote(tn("noEarlier"), true); return; }
|
|
513
|
+
back();
|
|
514
|
+
setHistoryNote(got.kind === "empty" ? tn("nothingEarlier") : got.status === 429 ? null : tn("earlierFailed"), true);
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
screenAt.current.reading = screen; screenAt.current.history = true;
|
|
518
|
+
setNewBelow(screenAt.current.latest != null && !sameScreen(screen, screenAt.current.latest));
|
|
519
|
+
setMode("reading"); setHistoryNote(null);
|
|
520
|
+
draw(screen); // the screen as it is (the one frame write), then the history above it
|
|
521
|
+
pre.current.insertBefore(h.root, pre.current.firstChild);
|
|
522
|
+
fit();
|
|
523
|
+
const box = term.current;
|
|
524
|
+
if (box) {
|
|
525
|
+
const px = parseFloat(getComputedStyle(pre.current).fontSize);
|
|
526
|
+
const lineH = Number.isFinite(px) && px > 0 ? px * 1.2 : 16;
|
|
527
|
+
// The history's last lines and the divider right above the screen.
|
|
528
|
+
box.scrollTop = Math.max(0, box.scrollHeight - box.clientHeight - lineH * 3);
|
|
529
|
+
}
|
|
530
|
+
} catch { if (lease.current() && modeRef.current === "loading") { transcript.current = null; back(); setHistoryNote(tn("earlierFailed"), true); } }
|
|
531
|
+
};
|
|
532
|
+
/** The page before the history shown, above it — where the person is stays where it is. */
|
|
533
|
+
let olderBusy = false;
|
|
534
|
+
olderPage.current = async () => {
|
|
535
|
+
const h = transcript.current, box = term.current;
|
|
536
|
+
if (olderBusy || !h || !box || modeRef.current !== "reading" || !screenAt.current.history) return;
|
|
537
|
+
olderBusy = true;
|
|
538
|
+
const fromEnd = box.scrollHeight - box.scrollTop;
|
|
539
|
+
const capped = !h.hasOlder();
|
|
540
|
+
if (!capped) setHistoryNote(tn("loadingEarlier"));
|
|
541
|
+
try {
|
|
542
|
+
const got = await h.older();
|
|
543
|
+
if (!lease.current() || transcript.current !== h) return;
|
|
544
|
+
box.scrollTop = Math.max(0, box.scrollHeight - fromEnd);
|
|
545
|
+
if (!capped) setHistoryNote(got.kind === "failed" ? tn("earlierFailed") : null, got.kind === "failed");
|
|
546
|
+
} finally { olderBusy = false; }
|
|
547
|
+
};
|
|
480
548
|
follow.current = () => {
|
|
481
549
|
if (modeRef.current === "follow") return;
|
|
550
|
+
transcript.current = null;
|
|
482
551
|
setMode("follow"); setNewBelow(false); setHistoryNote(null); screenAt.current.history = false;
|
|
483
552
|
const latest = screenAt.current.latest;
|
|
484
553
|
if (latest != null && pre.current) { draw(latest); fit(); }
|
|
@@ -501,7 +570,9 @@ function Terminal({ name, lease, density, every = 800, backend = "", signedIn =
|
|
|
501
570
|
// Asking for the earlier output: from following, or from reading the screen as it was — at the top.
|
|
502
571
|
const mayLoad = () => (modeRef.current === "follow" || (modeRef.current === "reading" && !screenAt.current.history)) && box.scrollTop <= 0;
|
|
503
572
|
const gesture = () => { gestureAt.current = performance.now(); };
|
|
504
|
-
|
|
573
|
+
// Claude's history being read, at (or near) its top: the page before it.
|
|
574
|
+
const nearTop = () => modeRef.current === "reading" && screenAt.current.history && transcript.current && box.scrollTop <= OLDER_AT_PX;
|
|
575
|
+
lease.on(box, "wheel", (e) => { gesture(); if (e.deltaY < 0 && mayLoad()) loadEarlier.current(); else if (e.deltaY < 0 && nearTop()) olderPage.current(); }, { passive: true });
|
|
505
576
|
let touchY = null;
|
|
506
577
|
lease.on(box, "touchstart", (e) => { gesture(); touchY = e.touches && e.touches[0] ? e.touches[0].clientY : null; }, { passive: true });
|
|
507
578
|
lease.on(box, "touchmove", (e) => {
|
|
@@ -509,15 +580,17 @@ function Terminal({ name, lease, density, every = 800, backend = "", signedIn =
|
|
|
509
580
|
const y = e.touches && e.touches[0] ? e.touches[0].clientY : null;
|
|
510
581
|
if (touchY == null || y == null) return;
|
|
511
582
|
if (y - touchY > 24 && mayLoad()) { touchY = null; loadEarlier.current(); }
|
|
583
|
+
else if (y - touchY > 24 && nearTop()) { touchY = null; olderPage.current(); }
|
|
512
584
|
}, { passive: true });
|
|
513
585
|
lease.on(box, "pointerdown", gesture, { passive: true }); // the scrollbar, dragged
|
|
514
586
|
lease.on(box, "keydown", (e) => {
|
|
515
587
|
gesture();
|
|
516
588
|
if ((e.key === "PageUp" || e.key === "ArrowUp" || e.key === "Home") && mayLoad()) { e.preventDefault(); loadEarlier.current(); }
|
|
589
|
+
else if ((e.key === "PageUp" || e.key === "ArrowUp" || e.key === "Home") && nearTop()) olderPage.current();
|
|
517
590
|
else if (modeRef.current === "reading" && e.key === "End") { e.preventDefault(); follow.current(); }
|
|
518
591
|
});
|
|
519
592
|
lease.on(box, "scroll", () => {
|
|
520
|
-
if (modeRef.current === "reading") { if (atBottom()) follow.current(); return; }
|
|
593
|
+
if (modeRef.current === "reading") { if (atBottom()) follow.current(); else if (nearTop()) olderPage.current(); return; }
|
|
521
594
|
// #2969 review (Prism P2): a screen taller than its box (a larger Aa), moved up from the bottom by the person:
|
|
522
595
|
// reading what is on it — the refresh no longer pulls them back down.
|
|
523
596
|
if (modeRef.current === "follow" && recentGesture() && !atBottom()) startReading(screenAt.current.drawn, false);
|