@agentwhy/cli 0.0.0-dev
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/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +181 -0
- package/THIRD_PARTY_NOTICES.md +31 -0
- package/dist/adapter/claude-code/contract/assumptions.js +208 -0
- package/dist/adapter/claude-code/contract/denials.js +15 -0
- package/dist/adapter/claude-code/contract/entry-points.js +15 -0
- package/dist/adapter/claude-code/contract/fields.js +73 -0
- package/dist/adapter/claude-code/contract/hooks.js +96 -0
- package/dist/adapter/claude-code/contract/identifiers.js +15 -0
- package/dist/adapter/claude-code/contract/layout.js +29 -0
- package/dist/adapter/claude-code/contract/line-types.js +26 -0
- package/dist/adapter/claude-code/contract/projects.js +23 -0
- package/dist/adapter/claude-code/contract/recognition.js +14 -0
- package/dist/adapter/claude-code/contract/session-title.js +20 -0
- package/dist/adapter/claude-code/contract/settings.js +27 -0
- package/dist/adapter/claude-code/contract/task-notifications.js +33 -0
- package/dist/adapter/claude-code/contract/tools.js +37 -0
- package/dist/adapter/claude-code/contract/version.js +51 -0
- package/dist/adapter/claude-code/discovery/claude-code-project-catalogue.js +129 -0
- package/dist/adapter/claude-code/discovery/claude-code-recognition.js +46 -0
- package/dist/adapter/claude-code/discovery/claude-code-session-catalogue.js +100 -0
- package/dist/adapter/claude-code/discovery/claude-code-session-discovery.js +61 -0
- package/dist/adapter/claude-code/discovery/claude-code-session-titles.js +28 -0
- package/dist/adapter/claude-code/discovery/discovered-session.js +1 -0
- package/dist/adapter/claude-code/discovery/session-entries.js +41 -0
- package/dist/adapter/claude-code/discovery/transcript-tail.js +81 -0
- package/dist/adapter/claude-code/events/claude-code-session-source.js +197 -0
- package/dist/adapter/claude-code/events/delegation-index.js +15 -0
- package/dist/adapter/claude-code/events/transcript-scan.js +179 -0
- package/dist/adapter/claude-code/hooks/hook-output.js +42 -0
- package/dist/adapter/claude-code/hooks/pre-tool-use-input.js +23 -0
- package/dist/adapter/claude-code/hooks/stop-input.js +25 -0
- package/dist/adapter/claude-code/hooks/subagent-stop-input.js +26 -0
- package/dist/adapter/claude-code/policy/deny-rules.js +46 -0
- package/dist/adapter/claude-code/probe/claude-code-probe.js +86 -0
- package/dist/adapter/claude-code/probe/collectors/agent-tool-input-key-collector.js +24 -0
- package/dist/adapter/claude-code/probe/collectors/denial-kind-collector.js +20 -0
- package/dist/adapter/claude-code/probe/collectors/denied-call-collector.js +11 -0
- package/dist/adapter/claude-code/probe/collectors/identifier-collector.js +19 -0
- package/dist/adapter/claude-code/probe/collectors/line-collector.js +1 -0
- package/dist/adapter/claude-code/probe/collectors/line-type-collector.js +29 -0
- package/dist/adapter/claude-code/probe/collectors/sidechain-collector.js +20 -0
- package/dist/adapter/claude-code/probe/collectors/task-notification-collector.js +51 -0
- package/dist/adapter/claude-code/probe/collectors/tool-result-reference-collector.js +31 -0
- package/dist/adapter/claude-code/probe/collectors/tool-use-collector.js +24 -0
- package/dist/adapter/claude-code/probe/collectors/tool-version-collector.js +14 -0
- package/dist/adapter/claude-code/probe/collectors/top-level-key-collector.js +14 -0
- package/dist/adapter/claude-code/probe/collectors/unknown-line-type-key-collector.js +24 -0
- package/dist/adapter/claude-code/probe/collectors/working-directory-collector.js +28 -0
- package/dist/adapter/claude-code/probe/doctor-report.js +1 -0
- package/dist/adapter/claude-code/probe/meta-tally.js +42 -0
- package/dist/adapter/claude-code/probe/session-probe.js +1 -0
- package/dist/adapter/claude-code/probe/session-tally.js +41 -0
- package/dist/adapter/claude-code/probe/transcript-line.js +30 -0
- package/dist/adapter/claude-code/probe/transcript-tally.js +74 -0
- package/dist/adapter/claude-code/settings/deny-entries.js +65 -0
- package/dist/adapter/claude-code/settings/hook-entries.js +303 -0
- package/dist/adapter/codex/contract/actions.js +69 -0
- package/dist/adapter/codex/contract/assumptions.js +55 -0
- package/dist/adapter/codex/contract/capabilities.js +24 -0
- package/dist/adapter/codex/contract/delegations.js +30 -0
- package/dist/adapter/codex/contract/deliveries.js +25 -0
- package/dist/adapter/codex/contract/envelope.js +33 -0
- package/dist/adapter/codex/contract/hook-refusals.js +14 -0
- package/dist/adapter/codex/contract/hooks.js +46 -0
- package/dist/adapter/codex/contract/messages.js +47 -0
- package/dist/adapter/codex/contract/permissions.js +27 -0
- package/dist/adapter/codex/contract/reviews.js +13 -0
- package/dist/adapter/codex/contract/session.js +31 -0
- package/dist/adapter/codex/contract/turns.js +23 -0
- package/dist/adapter/codex/contract/version.js +15 -0
- package/dist/adapter/codex/discovery/codex-conversations.js +44 -0
- package/dist/adapter/codex/discovery/codex-project-catalogue.js +49 -0
- package/dist/adapter/codex/discovery/codex-recognition.js +20 -0
- package/dist/adapter/codex/discovery/codex-session-catalogue.js +28 -0
- package/dist/adapter/codex/discovery/codex-session-discovery.js +115 -0
- package/dist/adapter/codex/discovery/codex-session-index.js +21 -0
- package/dist/adapter/codex/discovery/codex-session-titles.js +135 -0
- package/dist/adapter/codex/discovery/session-header.js +86 -0
- package/dist/adapter/codex/discovery/session-owners.js +11 -0
- package/dist/adapter/codex/discovery/session-roots.js +49 -0
- package/dist/adapter/codex/events/action-items.js +138 -0
- package/dist/adapter/codex/events/capability-records.js +26 -0
- package/dist/adapter/codex/events/codex-session-source.js +121 -0
- package/dist/adapter/codex/events/hook-refusals.js +27 -0
- package/dist/adapter/codex/events/rollout-scan.js +614 -0
- package/dist/adapter/codex/events/turn-permissions.js +60 -0
- package/dist/adapter/codex/hooks/pre-tool-use-input.js +24 -0
- package/dist/adapter/codex/hooks/stop-refusals.js +57 -0
- package/dist/adapter/codex/probe/codex-doctor-report.js +1 -0
- package/dist/adapter/codex/probe/codex-probe.js +268 -0
- package/dist/adapter/codex/settings/codex-hooks.js +83 -0
- package/dist/cli/cli-command.js +1 -0
- package/dist/cli/command-router.js +42 -0
- package/dist/cli/commands/check-cli-command.js +128 -0
- package/dist/cli/commands/codex-stop-cli-command.js +27 -0
- package/dist/cli/commands/doctor-arguments.js +32 -0
- package/dist/cli/commands/doctor-cli-command.js +31 -0
- package/dist/cli/commands/doctor-usage.js +14 -0
- package/dist/cli/commands/init-cli-command.js +123 -0
- package/dist/cli/commands/menu-cli-command.js +58 -0
- package/dist/cli/commands/notify-cli-command.js +158 -0
- package/dist/cli/commands/refuse-cli-command.js +79 -0
- package/dist/cli/commands/report-arguments.js +62 -0
- package/dist/cli/commands/report-cli-command.js +36 -0
- package/dist/cli/commands/report-usage.js +41 -0
- package/dist/cli/commands/sessions-cli-command.js +184 -0
- package/dist/cli/commands/start-cli-command.js +83 -0
- package/dist/cli/commands/watch-cli-command.js +142 -0
- package/dist/cli/exit-codes.js +13 -0
- package/dist/cli/project-switches.js +46 -0
- package/dist/cli.js +80 -0
- package/dist/composition-root.js +411 -0
- package/dist/core/access/command-line.js +454 -0
- package/dist/core/access/listing.js +58 -0
- package/dist/core/access/path-shape.js +59 -0
- package/dist/core/access/path-tokens.js +37 -0
- package/dist/core/access/protected-access.js +310 -0
- package/dist/core/access/protected-values.js +102 -0
- package/dist/core/access/recorded-effect.js +67 -0
- package/dist/core/access/returns.js +173 -0
- package/dist/core/access/search-output.js +34 -0
- package/dist/core/access/search-reach.js +268 -0
- package/dist/core/access/uses.js +143 -0
- package/dist/core/access/words-before.js +52 -0
- package/dist/core/agent.js +1 -0
- package/dist/core/capability.js +11 -0
- package/dist/core/combined-project-catalogue.js +36 -0
- package/dist/core/combined-session-catalogue.js +25 -0
- package/dist/core/completeness.js +10 -0
- package/dist/core/context.js +1 -0
- package/dist/core/correlation/correlate.js +329 -0
- package/dist/core/delegation.js +1 -0
- package/dist/core/detector/prompt-signals.js +78 -0
- package/dist/core/entry-point.js +1 -0
- package/dist/core/event.js +1 -0
- package/dist/core/evidence.js +9 -0
- package/dist/core/late-message.js +32 -0
- package/dist/core/message.js +1 -0
- package/dist/core/nearest-project.js +28 -0
- package/dist/core/policy/default-policy.js +32 -0
- package/dist/core/policy/glob.js +56 -0
- package/dist/core/policy/parse-policy.js +70 -0
- package/dist/core/policy/policy.js +20 -0
- package/dist/core/policy/resolve-policy.js +16 -0
- package/dist/core/project-catalogue.js +1 -0
- package/dist/core/project-root.js +133 -0
- package/dist/core/provider-titles.js +10 -0
- package/dist/core/redaction/entropy.js +46 -0
- package/dist/core/redaction/redacted.js +4 -0
- package/dist/core/redaction/redactor.js +339 -0
- package/dist/core/redaction/secret-patterns.js +22 -0
- package/dist/core/redaction/value-shapes.js +81 -0
- package/dist/core/redaction/value-trace.js +110 -0
- package/dist/core/review.js +1 -0
- package/dist/core/session-catalogue.js +19 -0
- package/dist/core/session-filter.js +42 -0
- package/dist/core/session-format.js +27 -0
- package/dist/core/session-model.js +1 -0
- package/dist/core/session-reader.js +22 -0
- package/dist/core/session-records.js +1 -0
- package/dist/core/session-source.js +1 -0
- package/dist/core/session-titles.js +21 -0
- package/dist/core/turn.js +1 -0
- package/dist/doctor/codex-doctor.js +14 -0
- package/dist/doctor/doctor-use-case.js +1 -0
- package/dist/doctor/format-selecting-doctor.js +28 -0
- package/dist/doctor/render/attention/attention-rule.js +1 -0
- package/dist/doctor/render/attention/doctor-attention-rules.js +28 -0
- package/dist/doctor/render/attention/rules/damaged-meta-files-rule.js +8 -0
- package/dist/doctor/render/attention/rules/damaged-transcripts-rule.js +9 -0
- package/dist/doctor/render/attention/rules/incomplete-subagent-pairs-rule.js +6 -0
- package/dist/doctor/render/attention/rules/missing-main-transcript-rule.js +5 -0
- package/dist/doctor/render/attention/rules/missing-spilled-results-rule.js +6 -0
- package/dist/doctor/render/attention/rules/multiple-working-directories-rule.js +15 -0
- package/dist/doctor/render/attention/rules/unknown-denial-kinds-rule.js +5 -0
- package/dist/doctor/render/attention/rules/unknown-line-types-rule.js +6 -0
- package/dist/doctor/render/attention/rules/unrecognised-entries-rule.js +6 -0
- package/dist/doctor/render/attention/rules/unusable-directories-rule.js +12 -0
- package/dist/doctor/render/attention/transcript-scopes.js +6 -0
- package/dist/doctor/render/codex-text-doctor-renderer.js +97 -0
- package/dist/doctor/render/doctor-renderers.js +1 -0
- package/dist/doctor/render/json-doctor-renderer.js +7 -0
- package/dist/doctor/render/output-format.js +1 -0
- package/dist/doctor/render/text-doctor-renderer.js +124 -0
- package/dist/doctor/session-doctor.js +16 -0
- package/dist/infrastructure/clack-asker.js +24 -0
- package/dist/infrastructure/clack-chooser.js +40 -0
- package/dist/infrastructure/clack-multi-chooser.js +31 -0
- package/dist/infrastructure/file-alert-store.js +120 -0
- package/dist/infrastructure/file-checked-store.js +55 -0
- package/dist/infrastructure/file-mark-store.js +67 -0
- package/dist/infrastructure/file-onboarding-store.js +93 -0
- package/dist/infrastructure/folder-window.js +26 -0
- package/dist/infrastructure/node-agentwhy-invocation.js +99 -0
- package/dist/infrastructure/node-browser.js +40 -0
- package/dist/infrastructure/node-file-system.js +111 -0
- package/dist/infrastructure/node-local-server.js +115 -0
- package/dist/infrastructure/node-text-input.js +26 -0
- package/dist/infrastructure/os-notifier.js +21 -0
- package/dist/infrastructure/osascript-folder-chooser.js +53 -0
- package/dist/infrastructure/powershell-folder-chooser.js +78 -0
- package/dist/infrastructure/real-directory.js +18 -0
- package/dist/infrastructure/stream-printer.js +11 -0
- package/dist/infrastructure/terminal-banner.js +19 -0
- package/dist/ports/agentwhy-invocation.js +1 -0
- package/dist/ports/alert-store.js +1 -0
- package/dist/ports/asker.js +1 -0
- package/dist/ports/browser.js +1 -0
- package/dist/ports/checked-store.js +1 -0
- package/dist/ports/chooser.js +1 -0
- package/dist/ports/directory-reader.js +1 -0
- package/dist/ports/file-access-error.js +11 -0
- package/dist/ports/file-reader.js +1 -0
- package/dist/ports/file-tail-reader.js +1 -0
- package/dist/ports/file-writer.js +1 -0
- package/dist/ports/folder-chooser.js +1 -0
- package/dist/ports/local-server.js +1 -0
- package/dist/ports/mark-store.js +10 -0
- package/dist/ports/multi-chooser.js +1 -0
- package/dist/ports/notifier.js +1 -0
- package/dist/ports/onboarding-store.js +1 -0
- package/dist/ports/printer.js +1 -0
- package/dist/ports/text-input.js +1 -0
- package/dist/refuse/command-reach.js +135 -0
- package/dist/refuse/command-refusal.js +88 -0
- package/dist/refuse/render/codex-stop-words.js +21 -0
- package/dist/refuse/render/refusal-words.js +34 -0
- package/dist/report/build-report.js +1037 -0
- package/dist/report/check/actions-digest.js +73 -0
- package/dist/report/check/check-lines.js +83 -0
- package/dist/report/check/mark-request.js +90 -0
- package/dist/report/check/marks.js +84 -0
- package/dist/report/check/render/text-digest-renderer.js +332 -0
- package/dist/report/check/session-actions.js +90 -0
- package/dist/report/check/session-check.js +91 -0
- package/dist/report/choose-policy.js +61 -0
- package/dist/report/flow-reads.js +18 -0
- package/dist/report/private-files/tell-lists.js +84 -0
- package/dist/report/project-rules.js +33 -0
- package/dist/report/render/home-relative.js +18 -0
- package/dist/report/render/html-head.js +26 -0
- package/dist/report/render/html-report-components.js +48 -0
- package/dist/report/render/html-report-styles.js +500 -0
- package/dist/report/render/html-sidebar.js +42 -0
- package/dist/report/render/path-tail.js +14 -0
- package/dist/report/render/report-copy.js +1177 -0
- package/dist/report/render/report-page/advanced-view.js +167 -0
- package/dist/report/render/report-page/file-story.js +114 -0
- package/dist/report/render/report-page/files-view.js +381 -0
- package/dist/report/render/report-page/files.js +77 -0
- package/dist/report/render/report-page/fix-wizard-script.js +269 -0
- package/dist/report/render/report-page/fix-wizard.js +310 -0
- package/dist/report/render/report-page/helpers-view.js +383 -0
- package/dist/report/render/report-page/helpers.js +51 -0
- package/dist/report/render/report-page/item-names.js +63 -0
- package/dist/report/render/report-page/protect-patterns.js +13 -0
- package/dist/report/render/report-page/providers.js +208 -0
- package/dist/report/render/report-page/record-view.js +367 -0
- package/dist/report/render/report-page/report-page-renderer.js +129 -0
- package/dist/report/render/report-page/report-views.js +31 -0
- package/dist/report/render/report-page/story-window.js +356 -0
- package/dist/report/render/report-page/times.js +25 -0
- package/dist/report/render/report-page/to-do-view.js +299 -0
- package/dist/report/render/report-page/to-do.js +152 -0
- package/dist/report/render/report-page.js +1 -0
- package/dist/report/render/session-view.js +250 -0
- package/dist/report/render/text-report-renderer.js +981 -0
- package/dist/report/render/ui/add-file-popup.js +122 -0
- package/dist/report/render/ui/app-sidebar.js +78 -0
- package/dist/report/render/ui/ask-panel.js +80 -0
- package/dist/report/render/ui/avatar.js +19 -0
- package/dist/report/render/ui/backdrop.js +29 -0
- package/dist/report/render/ui/brand-mark.js +4 -0
- package/dist/report/render/ui/button.js +67 -0
- package/dist/report/render/ui/callout.js +20 -0
- package/dist/report/render/ui/chat-example.js +17 -0
- package/dist/report/render/ui/checklist.js +50 -0
- package/dist/report/render/ui/confirm-dialog.js +34 -0
- package/dist/report/render/ui/data-table.js +49 -0
- package/dist/report/render/ui/drawer.js +25 -0
- package/dist/report/render/ui/file-chip.js +37 -0
- package/dist/report/render/ui/fold-line.js +22 -0
- package/dist/report/render/ui/guide-card.js +25 -0
- package/dist/report/render/ui/hero.js +37 -0
- package/dist/report/render/ui/labelled-select.js +10 -0
- package/dist/report/render/ui/live-script.js +222 -0
- package/dist/report/render/ui/local-date.js +58 -0
- package/dist/report/render/ui/mode-icon.js +6 -0
- package/dist/report/render/ui/page-shell.js +101 -0
- package/dist/report/render/ui/pill-tabs.js +47 -0
- package/dist/report/render/ui/popup.js +77 -0
- package/dist/report/render/ui/progress.js +35 -0
- package/dist/report/render/ui/project-list.js +284 -0
- package/dist/report/render/ui/scope-choice.js +19 -0
- package/dist/report/render/ui/stats.js +21 -0
- package/dist/report/render/ui/status-icon.js +30 -0
- package/dist/report/render/ui/status-look.js +21 -0
- package/dist/report/render/ui/switch.js +11 -0
- package/dist/report/render/ui/tag.js +19 -0
- package/dist/report/render/ui/task-list.js +56 -0
- package/dist/report/render/ui/tokens.js +46 -0
- package/dist/report/render/ui/update-notice.js +146 -0
- package/dist/report/render/ui/words/app-words.js +163 -0
- package/dist/report/render/ui/words/conversations-words.js +457 -0
- package/dist/report/render/ui/words/month-words.js +59 -0
- package/dist/report/render/ui/words/onboarding-words.js +446 -0
- package/dist/report/render/ui/words/projects-words.js +217 -0
- package/dist/report/render/ui/words/report-words.js +2099 -0
- package/dist/report/render/ui/words/settings-words.js +611 -0
- package/dist/report/render/ui/words/to-fix-words.js +287 -0
- package/dist/report/report-model.js +2 -0
- package/dist/report/report-use-case.js +1 -0
- package/dist/report/rule-names.js +20 -0
- package/dist/report/session-report.js +163 -0
- package/dist/report/start/app-nav.js +37 -0
- package/dist/report/start/conversations/calendar-view.js +104 -0
- package/dist/report/start/conversations/conversation-columns.js +187 -0
- package/dist/report/start/conversations/conversations-renderer.js +54 -0
- package/dist/report/start/conversations/empty-week.js +120 -0
- package/dist/report/start/conversations/files-window.js +166 -0
- package/dist/report/start/conversations/period-section.js +280 -0
- package/dist/report/start/conversations/periods-script.js +440 -0
- package/dist/report/start/conversations/periods.js +110 -0
- package/dist/report/start/conversations/week-view.js +30 -0
- package/dist/report/start/conversations/weeks.js +17 -0
- package/dist/report/start/month/month-renderer.js +50 -0
- package/dist/report/start/month/month-view.js +135 -0
- package/dist/report/start/month/months.js +17 -0
- package/dist/report/start/onboarding/done.js +171 -0
- package/dist/report/start/onboarding/finish-onboarding.js +93 -0
- package/dist/report/start/onboarding/intro.js +100 -0
- package/dist/report/start/onboarding/onboarding-changes.js +40 -0
- package/dist/report/start/onboarding/onboarding-renderer.js +195 -0
- package/dist/report/start/onboarding/onboarding-script.js +400 -0
- package/dist/report/start/onboarding/onboarding-view.js +98 -0
- package/dist/report/start/onboarding/project-step.js +210 -0
- package/dist/report/start/onboarding/steps.js +239 -0
- package/dist/report/start/onboarding/welcome.js +66 -0
- package/dist/report/start/page-notice.js +10 -0
- package/dist/report/start/projects/index-projects.js +43 -0
- package/dist/report/start/projects/moved-page.js +82 -0
- package/dist/report/start/projects/project-switch.js +138 -0
- package/dist/report/start/projects/projects-window.js +67 -0
- package/dist/report/start/projects/temporary-space.js +18 -0
- package/dist/report/start/render/air-datepicker-vendor.js +27 -0
- package/dist/report/start/render/session-status.js +41 -0
- package/dist/report/start/render/start-words.js +84 -0
- package/dist/report/start/repository.js +28 -0
- package/dist/report/start/serve/index-handler.js +372 -0
- package/dist/report/start/serve/onboarding-request.js +50 -0
- package/dist/report/start/serve/settings-request.js +1 -0
- package/dist/report/start/serve/settings-setup.js +193 -0
- package/dist/report/start/session-index.js +1 -0
- package/dist/report/start/session-start.js +974 -0
- package/dist/report/start/settings/alerts-tab.js +104 -0
- package/dist/report/start/settings/files-tab.js +169 -0
- package/dist/report/start/settings/general-tab.js +71 -0
- package/dist/report/start/settings/settings-renderer.js +254 -0
- package/dist/report/start/settings/settings-script.js +161 -0
- package/dist/report/start/settings/settings-view.js +240 -0
- package/dist/report/start/settings/settings-windows.js +334 -0
- package/dist/report/start/settings-files.js +43 -0
- package/dist/report/start/to-fix/done-list.js +45 -0
- package/dist/report/start/to-fix/file-window.js +110 -0
- package/dist/report/start/to-fix/to-fix-list.js +70 -0
- package/dist/report/start/to-fix/to-fix-renderer.js +237 -0
- package/dist/report/start/to-fix/to-fix-script.js +94 -0
- package/dist/report/start/to-fix/to-fix-view.js +124 -0
- package/dist/report/watch/agent-alert.js +72 -0
- package/dist/report/watch/notice-choices.js +35 -0
- package/dist/report/watch/notice-settings.js +65 -0
- package/dist/report/watch/preferences.js +100 -0
- package/dist/report/watch/render/instruction-words.js +54 -0
- package/dist/report/watch/render/notice-words.js +182 -0
- package/dist/report/watch/subagent-watch.js +345 -0
- package/dist/report/watch/watch-notice.js +1 -0
- package/dist/setup/behind.js +18 -0
- package/dist/setup/codex-mirror.js +171 -0
- package/dist/setup/not-a-project.js +19 -0
- package/dist/setup/project-setup.js +644 -0
- package/dist/setup/protected-patterns.js +30 -0
- package/dist/shared/colour.js +23 -0
- package/dist/shared/compare.js +4 -0
- package/dist/shared/content-version.js +13 -0
- package/dist/shared/counter.js +11 -0
- package/dist/shared/file-stamp.js +4 -0
- package/dist/shared/json.js +13 -0
- package/dist/shared/label.js +13 -0
- package/dist/shared/package-name.js +6 -0
- package/dist/shared/plain-invocation.js +44 -0
- package/dist/shared/plain-version.js +21 -0
- package/dist/shared/printable.js +25 -0
- package/dist/shared/renderer.js +1 -0
- package/dist/shared/sentence.js +20 -0
- package/dist/shared/terminal-logo.js +41 -0
- package/dist/shared/text-table.js +15 -0
- package/dist/shared/wrap.js +29 -0
- package/package.json +70 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { escapeHtml as e } from '../../render/html-report-components.js';
|
|
2
|
+
import { inLanguages, labelAttributes, LANGS, TABLES, translator } from '../../render/report-copy.js';
|
|
3
|
+
import { APP_SIDEBAR_STYLE } from '../../render/ui/app-sidebar.js';
|
|
4
|
+
import { BUTTON_STYLE } from '../../render/ui/button.js';
|
|
5
|
+
import { dataTable, DATA_TABLE_STYLE } from '../../render/ui/data-table.js';
|
|
6
|
+
import { foldLine, FOLD_LINE_STYLE } from '../../render/ui/fold-line.js';
|
|
7
|
+
import { guideCard, GUIDE_CARD_STYLE } from '../../render/ui/guide-card.js';
|
|
8
|
+
import { hero, HERO_STYLE } from '../../render/ui/hero.js';
|
|
9
|
+
import { dayName } from '../../render/ui/local-date.js';
|
|
10
|
+
import { STATUS_ICON_STYLE } from '../../render/ui/status-icon.js';
|
|
11
|
+
import { MODE_SVG } from '../../render/ui/mode-icon.js';
|
|
12
|
+
import { LOOKS } from '../../render/ui/status-look.js';
|
|
13
|
+
import { AIR_DATEPICKER_SCRIPT, AIR_DATEPICKER_STYLE } from '../render/air-datepicker-vendor.js';
|
|
14
|
+
import { CALENDAR_VIEW_STYLE } from './calendar-view.js';
|
|
15
|
+
import { CONVERSATION_COLUMNS_STYLE, CONVERSATION_ROW_SCRIPT, conversationRow, CONVERSATION_TABLE } from './conversation-columns.js';
|
|
16
|
+
import { PERIODS_SCRIPT } from './periods-script.js';
|
|
17
|
+
/**
|
|
18
|
+
* One week or one month (`for-people-who-build-with-ai.md` F8-F14): the answer first, then where to start, then the
|
|
19
|
+
* days, then what needs attention and, folded, the rest. Every period is on the page, one under another; the script
|
|
20
|
+
* shows one at a time.
|
|
21
|
+
*/
|
|
22
|
+
export function periodSection(periods, at, index, spec) {
|
|
23
|
+
const period = periods[at];
|
|
24
|
+
const total = period.conversations.length;
|
|
25
|
+
// Put before the person: a read still to fix, and a read of files the person let the AI read (the maintainer,
|
|
26
|
+
// 2026-09-25) - which asks for nothing, and whose row leads to its report. The first is "Needs your attention"; the
|
|
27
|
+
// second, since the same day, "For your info" under it, so a list that asks for work holds only work.
|
|
28
|
+
const need = period.conversations.filter((item) => LOOKS[item.look].attention);
|
|
29
|
+
const fix = need.filter((item) => LOOKS[item.look].needsFix);
|
|
30
|
+
const info = need.filter((item) => !LOOKS[item.look].needsFix);
|
|
31
|
+
const asks = fix.length > 0;
|
|
32
|
+
// What this run did not read, or read with gaps, is neither to fix nor "nothing private": it is listed apart, with
|
|
33
|
+
// the command that includes it, and never folded under the line that says there is nothing to fix (F17, O4).
|
|
34
|
+
const unchecked = period.conversations.filter((item) => !LOOKS[item.look].known);
|
|
35
|
+
const others = period.conversations.filter((item) => LOOKS[item.look].known && !LOOKS[item.look].attention);
|
|
36
|
+
// F8, changed 2026-09-25: what was read and then fixed is still counted as read - it happened - and asks for nothing;
|
|
37
|
+
// so is what the person let it read (F57a).
|
|
38
|
+
const fixed = period.conversations.filter((item) => item.look === 'fixed').length;
|
|
39
|
+
const allowed = period.conversations.filter((item) => item.look === 'allowed').length;
|
|
40
|
+
const read = need.length + fixed;
|
|
41
|
+
// What a calm period says of what it read: nothing, fixed, let be read, or both - never "didn't read anything private".
|
|
42
|
+
const after = fixed > 0 && allowed > 0 ? 'fixedAllowed' : fixed > 0 ? 'fixed' : allowed > 0 ? 'allowed' : undefined;
|
|
43
|
+
// F8, changed 2026-09-24: a period whose every conversation was checked and none read anything says so in mint - and,
|
|
44
|
+
// since 2026-09-25, one whose every read was fixed.
|
|
45
|
+
const clean = total > 0 && need.length === 0 && unchecked.length === 0;
|
|
46
|
+
// F17: conversations read with gaps alone - every Codex record has one - are named as that, not as ones never checked.
|
|
47
|
+
const lead = uncheckedLead(unchecked, index.shared);
|
|
48
|
+
const partial = lead === 'conv.unchecked.partial';
|
|
49
|
+
// Every period opens whole (F10, changed 2026-09-24); a day is chosen only by a tap.
|
|
50
|
+
const open = '<section class="cw' + (at === 0 ? ' cw-current' : '') + '" id="' + spec.kind + '-' + period.ago + '" data-period-at="' + at + '"' +
|
|
51
|
+
' data-kind="' + spec.kind + '" data-first="' + period.first.number + '">';
|
|
52
|
+
// Nothing yet (the maintainer's design, 2026-09-29): one line of heading, and no count of what was read - coral
|
|
53
|
+
// "Nothing private was read." over an empty week said a reassurance about nothing.
|
|
54
|
+
if (total === 0 && spec.empty !== undefined) {
|
|
55
|
+
return open + hero({ eyebrow: spec.eyebrow, fact: inLanguages((t) => t(spec.zero)), action: '', lead: spec.empty.lead }) +
|
|
56
|
+
(spec.empty.guide === undefined ? '' : guideCard(spec.empty.guide)) + spec.view + spec.empty.after + '</section>';
|
|
57
|
+
}
|
|
58
|
+
return open +
|
|
59
|
+
hero({
|
|
60
|
+
eyebrow: spec.eyebrow,
|
|
61
|
+
fact: inLanguages((t) => (total === 0 ? t(spec.zero) : t('conv.hero.fact', { n: total }))),
|
|
62
|
+
action: inLanguages((t) => (need.length > 0 ? t('conv.hero.times', { n: read })
|
|
63
|
+
: unchecked.length > 0 ? t(partial ? 'conv.hero.partial' : 'conv.hero.unchecked', { n: unchecked.length })
|
|
64
|
+
: read > 0 ? t('conv.hero.times', { n: read }) : t('conv.hero.none'))),
|
|
65
|
+
// "The ones marked in coral" only where one is: a period with nothing to fix says so, and what is grey.
|
|
66
|
+
lead: inLanguages((t) => t(asks ? 'conv.hero.lead' : unchecked.length > 0 ? 'conv.hero.lead.unchecked'
|
|
67
|
+
: after === undefined ? 'conv.hero.lead.clean' : 'conv.hero.lead.' + after)),
|
|
68
|
+
...(clean ? { calm: true } : {}),
|
|
69
|
+
}) +
|
|
70
|
+
(spec.clean === undefined ? '' : guideCard(guideOf(period, spec.clean, after, unchecked.length, index.widen, lead, spec.lists))) +
|
|
71
|
+
spec.view +
|
|
72
|
+
(!spec.lists ? '' : dayChip(spec.whole)) +
|
|
73
|
+
(!spec.lists || fix.length === 0 ? '' :
|
|
74
|
+
'<section class="cw-need" data-need data-need-fix><div class="cw-need-head"><span class="cw-need-dot" aria-hidden="true"></span>' +
|
|
75
|
+
'<h2 class="cw-h2">' + inLanguages((t) => t('conv.need')) + '</h2><span class="cw-need-count" data-need-count>' + fix.length + '</span></div>' +
|
|
76
|
+
dataTable({ ...CONVERSATION_TABLE, rows: fix.map((item) => conversationRow(item, index.widen, !index.shared)) }) +
|
|
77
|
+
'</section>') +
|
|
78
|
+
(!spec.lists || info.length === 0 ? '' : forYourInfo(info, index)) +
|
|
79
|
+
(!spec.lists || unchecked.length === 0 ? '' :
|
|
80
|
+
'<section class="cw-need cw-unchecked" data-need><div class="cw-need-head"><span class="cw-need-dot" aria-hidden="true"></span>' +
|
|
81
|
+
'<h2 class="cw-h2">' + inLanguages((t) => t(partial ? 'look.unchecked' : 'conv.unchecked')) + '</h2><span class="cw-need-count" data-need-count>' + unchecked.length + '</span></div>' +
|
|
82
|
+
'<p class="cw-unchecked-lead">' + inLanguages((t) => t(lead, { command: '<code>' + e(index.widen) + '</code>' })) + '</p>' +
|
|
83
|
+
dataTable({ ...CONVERSATION_TABLE, rows: unchecked.map((item) => conversationRow(item, index.widen, !index.shared)) }) +
|
|
84
|
+
'</section>') +
|
|
85
|
+
(!spec.lists || others.length === 0 ? '' : theRest(others, need.length === 0, index)) +
|
|
86
|
+
'</section>';
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* "For your info (n) — your AI read files you track. Nothing to fix." (the maintainer, 2026-09-25): the conversations
|
|
90
|
+
* whose AI read only files the person chose Track for (F57a), under a line of their own in Track's sand, open, and shut
|
|
91
|
+
* with **Hide**. The script narrows it to the day chosen as it does "Needs your attention" (`data-need`).
|
|
92
|
+
*/
|
|
93
|
+
function forYourInfo(info, index) {
|
|
94
|
+
return '<section class="cw-need cw-info" data-need data-need-info>' + foldLine({
|
|
95
|
+
summary: '<strong>' + inLanguages((t) => t('conv.info')) + ' (<span data-need-count>' + info.length + '</span>)</strong> <span class="fold-rest">' +
|
|
96
|
+
inLanguages((t) => t('conv.info.rest')) + '</span>',
|
|
97
|
+
mark: { glyph: MODE_SVG.tell, tone: 'sand' },
|
|
98
|
+
attributes: ' open',
|
|
99
|
+
body: dataTable({ ...CONVERSATION_TABLE, rows: info.map((item) => conversationRow(item, index.widen, !index.shared)) }),
|
|
100
|
+
}) + '</section>';
|
|
101
|
+
}
|
|
102
|
+
/** The looks of the rest, in the order of F16's ladder: the groups of F13 and F14, and the order they are listed in. */
|
|
103
|
+
const REST = ['fixed', 'name', 'stopped', 'none'];
|
|
104
|
+
/** A group's table rows past this many wait behind "Show all" while the whole period is shown (F14). */
|
|
105
|
+
const CAP = 5;
|
|
106
|
+
/**
|
|
107
|
+
* F12's day chip, over both lists (F10, changed 2026-09-24): which day is chosen and how many conversations it holds,
|
|
108
|
+
* and × to bring the week back. Only a script chooses a day, so only a script shows it.
|
|
109
|
+
*/
|
|
110
|
+
function dayChip(whole) {
|
|
111
|
+
if (whole === undefined)
|
|
112
|
+
return '';
|
|
113
|
+
return '<div class="cw-daybar js-only" data-day-bar hidden><button type="button" class="cw-day-chip" data-day-clear' +
|
|
114
|
+
labelAttributes((t) => t(whole)) + '><span data-day-label></span><span class="cw-chip-count"> · ' + countedLine('conv.day.count', 0, ' data-day-count') + '</span>' +
|
|
115
|
+
'<span class="cw-day-x" aria-hidden="true">×</span></button></div>';
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* F13, F14 (changed 2026-09-24): everything with nothing to fix, in groups by what the AI did. Under "Needs your
|
|
119
|
+
* attention" it is folded, and its line says what it holds - each group's look and count, said and not pressed (the
|
|
120
|
+
* maintainer, 2026-09-25: chips that opened the list read as filters; the list's own pills filter it).
|
|
121
|
+
* With nothing above it, it is open under a heading of its own (`bare`): a fold with nothing to set it apart from was
|
|
122
|
+
* the whole page, shut. A day chosen that leaves nothing to fix lays it bare the same way (the script).
|
|
123
|
+
*/
|
|
124
|
+
function theRest(others, bare, index) {
|
|
125
|
+
const count = (look) => others.filter((item) => item.look === look).length;
|
|
126
|
+
const looks = REST.filter((look) => count(look) > 0);
|
|
127
|
+
const label = (look) => inLanguages((t) => t(LOOKS[look].label));
|
|
128
|
+
const mix = '<span class="cw-mix-row">' + looks.map((look) => '<span class="cw-mix cw-mix-' + LOOKS[look].tone + '" data-mix-look="' + look + '">' +
|
|
129
|
+
'<span class="cw-mix-glyph" aria-hidden="true">' + LOOKS[look].glyph + '</span>' + label(look) +
|
|
130
|
+
' <span class="cw-mix-n" data-look-n="' + look + '">' + count(look) + '</span></span>').join('') + '</span>';
|
|
131
|
+
const pills = '<div class="cw-pills" role="group"' + labelAttributes((t) => t('conv.filter.label')) + '>' +
|
|
132
|
+
['all', ...looks].map((look) => '<button type="button" class="cw-pill" data-pick-look="' + look + '" aria-pressed="' + String(look === 'all') + '" data-live-keep>' +
|
|
133
|
+
(look === 'all' ? inLanguages((t) => t('conv.filter.all')) : label(look)) +
|
|
134
|
+
' <span class="cw-pill-n" data-look-n="' + look + '">' + (look === 'all' ? others.length : count(look)) + '</span></button>').join('') + '</div>';
|
|
135
|
+
// Newest first inside each group, as the period lists them; a group's heading counts its rows, its note what is past five.
|
|
136
|
+
const rows = looks.flatMap((look) => {
|
|
137
|
+
const those = others.filter((item) => item.look === look);
|
|
138
|
+
return [
|
|
139
|
+
{ group: label(look), tone: LOOKS[look].tone, count: those.length, attributes: ' data-look-head="' + look + '"' },
|
|
140
|
+
...those.map((item) => conversationRow(item, index.widen, !index.shared)),
|
|
141
|
+
...(those.length <= CAP ? [] : [{
|
|
142
|
+
note: '<button type="button" class="cw-more" data-look-more="' + look + '" aria-pressed="false" data-live-keep>' +
|
|
143
|
+
'<span class="cw-more-all">' + inLanguages((t) => t('conv.more.all', { n: '<span data-look-n="' + look + '">' + those.length + '</span>' })) + '</span>' +
|
|
144
|
+
'<span class="cw-more-less">' + inLanguages((t) => t('conv.more.less')) + '</span></button>' +
|
|
145
|
+
'<span class="cw-more-rest">' + inLanguages((t) => t('conv.more.rest', { n: '<span data-look-past="' + look + '">' + (those.length - CAP) + '</span>' })) +
|
|
146
|
+
' · ' + label(look) + '</span>',
|
|
147
|
+
attributes: ' data-look-note="' + look + '" hidden',
|
|
148
|
+
}]),
|
|
149
|
+
];
|
|
150
|
+
});
|
|
151
|
+
return '<section class="cw-others' + (bare ? ' cw-bare' : '') + '">' + foldLine({
|
|
152
|
+
summary: '<strong>' + countedLine('conv.others.count', others.length) + '</strong> <span class="fold-rest">' +
|
|
153
|
+
inLanguages((t) => t('conv.others.rest')) + '</span>' + mix,
|
|
154
|
+
// live-pages L9: opened, it stays open across an update. Laid bare, it is open with no script too.
|
|
155
|
+
attributes: ' data-others data-live-keep' + (bare ? ' open' : ''),
|
|
156
|
+
body: '<div class="cw-list-head" data-list-head><h2 class="cw-h2">' + inLanguages((t) => t('conv.list')) + '</h2>' +
|
|
157
|
+
'<span class="cw-list-count" data-look-n="all">' + others.length + '</span></div>' +
|
|
158
|
+
'<div class="cw-tools js-only">' + pills +
|
|
159
|
+
'<input class="cw-search" type="search" data-search-input data-live-keep placeholder="' + e(translator('en')('conv.search')) + '"' +
|
|
160
|
+
LANGS.map((lang) => ' data-placeholder-' + lang + '="' + e(translator(lang)('conv.search')) + '"').join('') +
|
|
161
|
+
labelAttributes((t) => e(t('conv.search'))) + '></div>' +
|
|
162
|
+
dataTable({ ...CONVERSATION_TABLE, rows, empty: inLanguages((t) => t('conv.empty')) }) +
|
|
163
|
+
'<div class="cw-foot"><span class="cw-shown">' +
|
|
164
|
+
inLanguages((t) => t('conv.shown', { shown: '<span data-shown>' + others.length + '</span>', total: others.length })) +
|
|
165
|
+
'<span class="cw-zone"> ' + inLanguages((t) => t('conv.tech.zone', { zone: e(index.timeZone ?? 'UTC') })) + '</span></span>' +
|
|
166
|
+
'<label class="cw-tech-toggle" for="conv-tech"><span class="cw-tech-off">' + inLanguages((t) => t('conv.tech.show')) +
|
|
167
|
+
'</span><span class="cw-tech-on">' + inLanguages((t) => t('conv.tech.hide')) + '</span></label></div>',
|
|
168
|
+
}) + '</section>';
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Where to start (F9): the newest conversation of the period whose AI read something private that is still to fix;
|
|
172
|
+
* else, where some were not checked, what includes them - a card that only says, with no button; else the mint card,
|
|
173
|
+
* which says the AI read nothing only where that is true (changed 2026-09-25: a period whose reads were all fixed, or
|
|
174
|
+
* were of files the person let it read, F57a).
|
|
175
|
+
*/
|
|
176
|
+
function guideOf(period, clean, after, unchecked, widen, lead, listed) {
|
|
177
|
+
const start = period.start;
|
|
178
|
+
if (start === undefined || start.entry.report.kind !== 'generated') {
|
|
179
|
+
if (unchecked > 0) {
|
|
180
|
+
return {
|
|
181
|
+
tone: 'coral',
|
|
182
|
+
title: inLanguages((t) => t(lead === 'conv.unchecked.partial' || lead === 'conv.unchecked.mixed' ? 'conv.unchecked.partial.title' : 'conv.unchecked.title', { n: unchecked })),
|
|
183
|
+
// The list below says why, beside its rows; the card says only where they are, not the same sentence twice.
|
|
184
|
+
body: inLanguages((t) => (listed ? t('conv.unchecked.below', { n: unchecked }) : t(lead, { command: '<code>' + e(widen) + '</code>' }))),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return { tone: 'mint', title: clean, body: inLanguages((t) => t(after === undefined ? 'conv.clean.body' : 'conv.clean.' + after)) };
|
|
188
|
+
}
|
|
189
|
+
const title = start.entry.title === undefined ? undefined : e(start.entry.title);
|
|
190
|
+
return {
|
|
191
|
+
tone: 'coral',
|
|
192
|
+
title: inLanguages((t, lang) => t('conv.guide.title', {
|
|
193
|
+
when: start.relative === undefined ? dayName(start.day, lang) : t('conv.guide.' + start.relative),
|
|
194
|
+
time: start.time,
|
|
195
|
+
})),
|
|
196
|
+
body: inLanguages((t) => (title === undefined ? '' : t('conv.guide.asked', { ask: title }) + ' ') +
|
|
197
|
+
t('conv.guide.read', { what: start.read > 0 ? t('conv.guide.files', { n: start.read }) : t('conv.guide.something') })),
|
|
198
|
+
action: { label: inLanguages((t) => t('conv.guide.go')), href: e(start.entry.report.file) },
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* What the lines about unchecked conversations say: where each can be checked on request (F55) - older than the run, on
|
|
203
|
+
* a page that is not shared - the button first; otherwise, what the run could not read and the command that includes it.
|
|
204
|
+
*/
|
|
205
|
+
function uncheckedLead(unchecked, shared) {
|
|
206
|
+
// F17: a record with gaps was read - what it cannot show is said, never that the run did not read it. Every Codex record
|
|
207
|
+
// is one (`2026-09-27-what-codex-wrote.md` X23), so a list of them alone is common.
|
|
208
|
+
if (unchecked.every((item) => item.look === 'unchecked'))
|
|
209
|
+
return 'conv.unchecked.partial';
|
|
210
|
+
if (!shared && unchecked.every((item) => item.look === 'outside'))
|
|
211
|
+
return 'conv.unchecked.check';
|
|
212
|
+
return unchecked.some((item) => item.look === 'unchecked') ? 'conv.unchecked.mixed' : 'conv.unchecked.lead';
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* A count the script may change - the day chosen narrows the rest of the period to that day - written with every
|
|
216
|
+
* plural form of its language beside it, so the words follow the number: "1 other conversation", "3 inne rozmowy".
|
|
217
|
+
*/
|
|
218
|
+
function countedLine(key, n, attributes = '') {
|
|
219
|
+
return LANGS.map((lang) => {
|
|
220
|
+
const forms = Object.entries(TABLES[lang]).filter(([name]) => name.startsWith(key + '.'));
|
|
221
|
+
return '<span class="i18n" lang="' + lang + '" data-counted' + attributes +
|
|
222
|
+
forms.map(([name, text]) => ' data-form-' + name.slice(key.length + 1) + '="' + e(text) + '"').join('') + '>' +
|
|
223
|
+
translator(lang)(key, { n }) + '</span>';
|
|
224
|
+
}).join('');
|
|
225
|
+
}
|
|
226
|
+
/** The checkbox "Show technical details" toggles, once per page, before every period that reads it. */
|
|
227
|
+
export const TECH_TOGGLE = '<input type="checkbox" id="conv-tech" class="sr-only">';
|
|
228
|
+
/** What a period section lays out: the list headings, the search row and the line under the rest. */
|
|
229
|
+
export const PERIOD_SECTION_STYLE = String.raw `
|
|
230
|
+
.js .cw:not(.cw-current){display:none}
|
|
231
|
+
.cw+.cw{margin-top:72px;padding-top:40px;border-top:1px solid var(--white-07)}
|
|
232
|
+
.js .cw+.cw{margin-top:0;padding-top:0;border-top:0}
|
|
233
|
+
.cw-need{margin-bottom:28px}
|
|
234
|
+
.cw-need[hidden]{display:none}
|
|
235
|
+
.cw-need-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
|
|
236
|
+
.cw-need-dot{width:10px;height:10px;border-radius:50%;background:var(--coral);align-self:center}
|
|
237
|
+
.cw-need-count{font-size:15px;font-weight:650;color:var(--coral-text)}
|
|
238
|
+
.cw-unchecked .cw-need-dot{background:var(--text-3)}.cw-unchecked .cw-need-count{color:var(--text-2)}
|
|
239
|
+
.cw-unchecked-lead{margin:-4px 0 12px;font-size:14px;line-height:1.5;color:var(--text-2)}
|
|
240
|
+
.cw-unchecked-lead code,.guide code{font-family:var(--mono);font-size:13px;color:var(--text);background:var(--white-07);border-radius:6px;padding:1px 6px}
|
|
241
|
+
.cw-tools{display:none;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
|
|
242
|
+
.js .cw-tools{display:flex}
|
|
243
|
+
.cw-search{flex:1 1 220px;margin-left:auto;max-width:320px;min-width:0;background:var(--card);border:1px solid var(--white-10);border-radius:999px;padding:9px 16px;color:var(--text);font:inherit;font-size:14px;outline:none}
|
|
244
|
+
.cw-search:focus-visible{border-color:var(--coral-50)}
|
|
245
|
+
.cw-daybar{margin:0 0 20px}.cw-daybar[hidden]{display:none}
|
|
246
|
+
.cw-day-chip{display:inline-flex;align-items:center;gap:6px;background:var(--white-07);border:1px solid var(--white-10);border-radius:999px;color:var(--text);font:inherit;font-size:14px;font-weight:600;cursor:pointer;padding:6px 8px 6px 14px}
|
|
247
|
+
.cw-day-chip:hover{border-color:var(--white-25)}
|
|
248
|
+
.cw-chip-count{color:var(--text-2);font-weight:500}
|
|
249
|
+
.cw-day-x{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--white-10);color:var(--text-2);margin-left:4px}
|
|
250
|
+
.cw-mix-row{display:flex;gap:6px 18px;flex-wrap:wrap;margin-top:8px}
|
|
251
|
+
.cw-mix{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600}
|
|
252
|
+
.cw-mix[hidden]{display:none}
|
|
253
|
+
.cw-mix-blue{color:var(--blue)}.cw-mix-mint{color:var(--mint)}.cw-mix-grey{color:var(--text-2)}
|
|
254
|
+
.cw-mix-n{opacity:.8}
|
|
255
|
+
.cw-list-head{display:none;align-items:baseline;gap:10px;margin-bottom:12px}
|
|
256
|
+
.cw-bare .cw-list-head{display:flex}.cw-bare .fold-line{display:none}
|
|
257
|
+
.cw-list-count{font-size:15px;font-weight:650;color:var(--text-3)}
|
|
258
|
+
.cw-pills{display:flex;gap:8px;flex-wrap:wrap}
|
|
259
|
+
.cw-pill{display:flex;align-items:center;gap:8px;border-radius:999px;padding:7px 14px;font:inherit;font-size:14px;font-weight:500;cursor:pointer;border:1px solid var(--white-12);background:transparent;color:var(--text-soft)}
|
|
260
|
+
.cw-pill[aria-pressed="true"]{background:var(--text);color:var(--bg);border-color:var(--text)}
|
|
261
|
+
.cw-pill[hidden]{display:none}.cw-pill-n{opacity:.7}
|
|
262
|
+
.cw-more{border:1px solid var(--white-14);background:transparent;border-radius:999px;padding:5px 12px;font:inherit;font-size:13px;font-weight:600;color:var(--text-soft);cursor:pointer}
|
|
263
|
+
.cw-more:hover{background:var(--white-05);color:var(--text)}
|
|
264
|
+
.cw-more-less{display:none}.cw-more[aria-pressed="true"] .cw-more-less{display:inline}.cw-more[aria-pressed="true"] .cw-more-all{display:none}
|
|
265
|
+
.cw-more[aria-pressed="true"]+.cw-more-rest{display:none}
|
|
266
|
+
.cw-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-top:14px}
|
|
267
|
+
.cw-shown{font-size:13px;color:var(--text-3)}
|
|
268
|
+
.cw-zone{display:none}.shell-main:has(#conv-tech:checked) .cw-zone{display:inline}
|
|
269
|
+
.cw-tech-toggle{color:var(--text-2);font-size:13.5px;font-weight:600;cursor:pointer;padding:4px 0}
|
|
270
|
+
.cw-tech-toggle:hover{color:var(--text)}
|
|
271
|
+
.cw-tech-on{display:none}
|
|
272
|
+
.shell-main:has(#conv-tech:checked) .cw-tech-on{display:inline}.shell-main:has(#conv-tech:checked) .cw-tech-off{display:none}
|
|
273
|
+
.shell-main:has(#conv-tech:focus-visible) .cw-tech-toggle{outline:2px solid var(--coral);outline-offset:2px;border-radius:4px}
|
|
274
|
+
`;
|
|
275
|
+
/** Every style a page read through periods is made of: Conversations, and This month. */
|
|
276
|
+
export const PERIOD_PAGE_STYLES = [APP_SIDEBAR_STYLE, HERO_STYLE, GUIDE_CARD_STYLE, BUTTON_STYLE, AIR_DATEPICKER_STYLE,
|
|
277
|
+
CALENDAR_VIEW_STYLE, DATA_TABLE_STYLE, STATUS_ICON_STYLE, CONVERSATION_COLUMNS_STYLE, FOLD_LINE_STYLE, PERIOD_SECTION_STYLE];
|
|
278
|
+
/** The calendar a period is chosen in is the one the earlier page used, vendored (`air-datepicker-vendor.ts`). */
|
|
279
|
+
export const PERIOD_PAGE_LIBRARIES = [AIR_DATEPICKER_SCRIPT];
|
|
280
|
+
export const PERIOD_PAGE_SCRIPTS = [PERIODS_SCRIPT, CONVERSATION_ROW_SCRIPT];
|