@xoxoai/checkmate 0.6.7 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -257
- package/dist/checkmate.js +13375 -0
- package/package.json +30 -94
- package/plugin/.claude-plugin/plugin.json +10 -0
- package/plugin/bin/checkmate.ts +3 -0
- package/plugin/contracts/finding.schema.json +78 -0
- package/plugin/contracts/gap.schema.json +56 -0
- package/plugin/contracts/plan-candidate.schema.json +103 -0
- package/plugin/contracts/plan-delta.schema.json +63 -0
- package/plugin/contracts/plan-patch.schema.json +116 -0
- package/plugin/contracts/plan-request.schema.json +108 -0
- package/plugin/contracts/plan.schema.json +313 -0
- package/plugin/contracts/profile.schema.json +154 -0
- package/plugin/contracts/response.schema.json +25 -0
- package/plugin/contracts/result.schema.json +410 -0
- package/plugin/dist/checkmate.js +13012 -0
- package/plugin/package.json +4 -0
- package/plugin/references/browser.md +35 -0
- package/plugin/references/http.md +30 -0
- package/plugin/references/workflow.md +122 -0
- package/plugin/skills/execute/SKILL.md +92 -0
- package/plugin/skills/plan/SKILL.md +94 -0
- package/plugin/skills/report/SKILL.md +28 -0
- package/plugin/skills/revise/SKILL.md +43 -0
- package/plugin/skills/setup/SKILL.md +82 -0
- package/plugin/skills/status/SKILL.md +20 -0
- package/plugin/skills/ui/SKILL.md +26 -0
- package/plugin/src/actor.ts +21 -0
- package/plugin/src/cli.ts +1133 -0
- package/plugin/src/contracts.ts +342 -0
- package/plugin/src/index.ts +52 -0
- package/plugin/src/plans.ts +1028 -0
- package/plugin/src/render.ts +544 -0
- package/plugin/src/runs.ts +868 -0
- package/plugin/src/store.ts +384 -0
- package/plugin/src/targets.ts +205 -0
- package/plugin/src/types.ts +319 -0
- package/plugin/src/ui/assets/client.js +501 -0
- package/plugin/src/ui/assets/favicon.svg +1 -0
- package/plugin/src/ui/assets/fonts/inter-OFL.txt +93 -0
- package/plugin/src/ui/assets/fonts/inter.woff2 +0 -0
- package/plugin/src/ui/assets/fonts/jetbrains-mono-OFL.txt +93 -0
- package/plugin/src/ui/assets/fonts/jetbrains-mono.woff2 +0 -0
- package/plugin/src/ui/assets/fonts/space-grotesk-OFL.txt +93 -0
- package/plugin/src/ui/assets/fonts/space-grotesk.woff2 +0 -0
- package/plugin/src/ui/assets/style.css +1926 -0
- package/plugin/src/ui/edit.ts +305 -0
- package/plugin/src/ui/forms.ts +209 -0
- package/plugin/src/ui/html.ts +130 -0
- package/plugin/src/ui/layout.ts +198 -0
- package/plugin/src/ui/lists.ts +645 -0
- package/plugin/src/ui/plan.ts +577 -0
- package/plugin/src/ui/run.ts +489 -0
- package/plugin/src/ui/server.ts +684 -0
- package/plugin/src/validators.d.ts +13 -0
- package/plugin/src/validators.js +1 -0
- package/plugin/src/views.ts +839 -0
- package/bin/checkmate.js +0 -13
- package/dist/ai/client.d.ts +0 -64
- package/dist/ai/client.d.ts.map +0 -1
- package/dist/ai/client.js +0 -313
- package/dist/ai/client.js.map +0 -1
- package/dist/ai/message-handler.d.ts +0 -9
- package/dist/ai/message-handler.d.ts.map +0 -1
- package/dist/ai/message-handler.js +0 -50
- package/dist/ai/message-handler.js.map +0 -1
- package/dist/ai/message-history.d.ts +0 -17
- package/dist/ai/message-history.d.ts.map +0 -1
- package/dist/ai/message-history.js +0 -45
- package/dist/ai/message-history.js.map +0 -1
- package/dist/ai/prompts.d.ts +0 -4
- package/dist/ai/prompts.d.ts.map +0 -1
- package/dist/ai/prompts.js +0 -24
- package/dist/ai/prompts.js.map +0 -1
- package/dist/ai/rate-limit-policy.d.ts +0 -9
- package/dist/ai/rate-limit-policy.d.ts.map +0 -1
- package/dist/ai/rate-limit-policy.js +0 -34
- package/dist/ai/rate-limit-policy.js.map +0 -1
- package/dist/ai/tool-response-handler.d.ts +0 -16
- package/dist/ai/tool-response-handler.d.ts.map +0 -1
- package/dist/ai/tool-response-handler.js +0 -85
- package/dist/ai/tool-response-handler.js.map +0 -1
- package/dist/ai/turn-processor.d.ts +0 -34
- package/dist/ai/turn-processor.d.ts.map +0 -1
- package/dist/ai/turn-processor.js +0 -107
- package/dist/ai/turn-processor.js.map +0 -1
- package/dist/api/allocate-run-identity.d.ts +0 -8
- package/dist/api/allocate-run-identity.d.ts.map +0 -1
- package/dist/api/allocate-run-identity.js +0 -10
- package/dist/api/allocate-run-identity.js.map +0 -1
- package/dist/api/execute-prepared-run.d.ts +0 -22
- package/dist/api/execute-prepared-run.d.ts.map +0 -1
- package/dist/api/execute-prepared-run.js +0 -184
- package/dist/api/execute-prepared-run.js.map +0 -1
- package/dist/api/index.d.ts +0 -25
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -69
- package/dist/api/index.js.map +0 -1
- package/dist/api/prepare-run.d.ts +0 -44
- package/dist/api/prepare-run.d.ts.map +0 -1
- package/dist/api/prepare-run.js +0 -261
- package/dist/api/prepare-run.js.map +0 -1
- package/dist/cli/diagnostic-relay.d.ts +0 -6
- package/dist/cli/diagnostic-relay.d.ts.map +0 -1
- package/dist/cli/diagnostic-relay.js +0 -6
- package/dist/cli/diagnostic-relay.js.map +0 -1
- package/dist/cli/main.d.ts +0 -21
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -166
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/protocol.d.ts +0 -57
- package/dist/cli/protocol.d.ts.map +0 -1
- package/dist/cli/protocol.js +0 -116
- package/dist/cli/protocol.js.map +0 -1
- package/dist/cli/reconcile-result.d.ts +0 -13
- package/dist/cli/reconcile-result.d.ts.map +0 -1
- package/dist/cli/reconcile-result.js +0 -300
- package/dist/cli/reconcile-result.js.map +0 -1
- package/dist/cli/run-parent.d.ts +0 -37
- package/dist/cli/run-parent.d.ts.map +0 -1
- package/dist/cli/run-parent.js +0 -491
- package/dist/cli/run-parent.js.map +0 -1
- package/dist/cli/signals.d.ts +0 -36
- package/dist/cli/signals.d.ts.map +0 -1
- package/dist/cli/signals.js +0 -85
- package/dist/cli/signals.js.map +0 -1
- package/dist/cli/static-commands.d.ts +0 -11
- package/dist/cli/static-commands.d.ts.map +0 -1
- package/dist/cli/static-commands.js +0 -83
- package/dist/cli/static-commands.js.map +0 -1
- package/dist/cli/worker-stream-guard.d.ts +0 -20
- package/dist/cli/worker-stream-guard.d.ts.map +0 -1
- package/dist/cli/worker-stream-guard.js +0 -41
- package/dist/cli/worker-stream-guard.js.map +0 -1
- package/dist/cli/worker.d.ts +0 -3
- package/dist/cli/worker.d.ts.map +0 -1
- package/dist/cli/worker.js +0 -111
- package/dist/cli/worker.js.map +0 -1
- package/dist/config/ingestion.d.ts +0 -58
- package/dist/config/ingestion.d.ts.map +0 -1
- package/dist/config/ingestion.js +0 -283
- package/dist/config/ingestion.js.map +0 -1
- package/dist/config/manifest.d.ts +0 -20
- package/dist/config/manifest.d.ts.map +0 -1
- package/dist/config/manifest.js +0 -91
- package/dist/config/manifest.js.map +0 -1
- package/dist/config/model-egress.d.ts +0 -10
- package/dist/config/model-egress.d.ts.map +0 -1
- package/dist/config/model-egress.js +0 -62
- package/dist/config/model-egress.js.map +0 -1
- package/dist/config/package-resolution.d.ts +0 -4
- package/dist/config/package-resolution.d.ts.map +0 -1
- package/dist/config/package-resolution.js +0 -24
- package/dist/config/package-resolution.js.map +0 -1
- package/dist/config/policy.d.ts +0 -44
- package/dist/config/policy.d.ts.map +0 -1
- package/dist/config/policy.js +0 -141
- package/dist/config/policy.js.map +0 -1
- package/dist/config/record.d.ts +0 -4
- package/dist/config/record.d.ts.map +0 -1
- package/dist/config/record.js +0 -10
- package/dist/config/record.js.map +0 -1
- package/dist/config/secrets.d.ts +0 -11
- package/dist/config/secrets.d.ts.map +0 -1
- package/dist/config/secrets.js +0 -42
- package/dist/config/secrets.js.map +0 -1
- package/dist/contracts/diagnostics.d.ts +0 -4
- package/dist/contracts/diagnostics.d.ts.map +0 -1
- package/dist/contracts/diagnostics.js +0 -31
- package/dist/contracts/diagnostics.js.map +0 -1
- package/dist/contracts/serialize.d.ts +0 -2
- package/dist/contracts/serialize.d.ts.map +0 -1
- package/dist/contracts/serialize.js +0 -90
- package/dist/contracts/serialize.js.map +0 -1
- package/dist/contracts/types.d.ts +0 -316
- package/dist/contracts/types.d.ts.map +0 -1
- package/dist/contracts/types.js +0 -74
- package/dist/contracts/types.js.map +0 -1
- package/dist/contracts/validator.d.ts +0 -8
- package/dist/contracts/validator.d.ts.map +0 -1
- package/dist/contracts/validator.js +0 -71
- package/dist/contracts/validator.js.map +0 -1
- package/dist/driver.d.ts +0 -97
- package/dist/driver.d.ts.map +0 -1
- package/dist/driver.js +0 -24
- package/dist/driver.js.map +0 -1
- package/dist/drivers/descriptor.d.ts +0 -15
- package/dist/drivers/descriptor.d.ts.map +0 -1
- package/dist/drivers/descriptor.js +0 -122
- package/dist/drivers/descriptor.js.map +0 -1
- package/dist/drivers/loader.d.ts +0 -18
- package/dist/drivers/loader.d.ts.map +0 -1
- package/dist/drivers/loader.js +0 -97
- package/dist/drivers/loader.js.map +0 -1
- package/dist/drivers/web/checkmate-driver.json +0 -47
- package/dist/drivers/web/index.d.ts +0 -6
- package/dist/drivers/web/index.d.ts.map +0 -1
- package/dist/drivers/web/index.js +0 -27
- package/dist/drivers/web/index.js.map +0 -1
- package/dist/drivers/web/session.d.ts +0 -25
- package/dist/drivers/web/session.d.ts.map +0 -1
- package/dist/drivers/web/session.js +0 -132
- package/dist/drivers/web/session.js.map +0 -1
- package/dist/drivers/web/tools/network-request-recorder.d.ts +0 -46
- package/dist/drivers/web/tools/network-request-recorder.d.ts.map +0 -1
- package/dist/drivers/web/tools/network-request-recorder.js +0 -164
- package/dist/drivers/web/tools/network-request-recorder.js.map +0 -1
- package/dist/drivers/web/tools/screenshot-service.d.ts +0 -10
- package/dist/drivers/web/tools/screenshot-service.d.ts.map +0 -1
- package/dist/drivers/web/tools/screenshot-service.js +0 -23
- package/dist/drivers/web/tools/screenshot-service.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/index.d.ts +0 -4
- package/dist/drivers/web/tools/snapshot-filter/index.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/index.js +0 -4
- package/dist/drivers/web/tools/snapshot-filter/index.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts +0 -15
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js +0 -99
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts +0 -5
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js +0 -56
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts +0 -3
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js +0 -85
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-service.d.ts +0 -31
- package/dist/drivers/web/tools/snapshot-service.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-service.js +0 -96
- package/dist/drivers/web/tools/snapshot-service.js.map +0 -1
- package/dist/drivers/web/tools/tool.d.ts +0 -76
- package/dist/drivers/web/tools/tool.d.ts.map +0 -1
- package/dist/drivers/web/tools/tool.js +0 -562
- package/dist/drivers/web/tools/tool.js.map +0 -1
- package/dist/drivers/web/tools/transient-state-tracker.d.ts +0 -26
- package/dist/drivers/web/tools/transient-state-tracker.d.ts.map +0 -1
- package/dist/drivers/web/tools/transient-state-tracker.js +0 -301
- package/dist/drivers/web/tools/transient-state-tracker.js.map +0 -1
- package/dist/drivers/web/tools/types.d.ts +0 -11
- package/dist/drivers/web/tools/types.d.ts.map +0 -1
- package/dist/drivers/web/tools/types.js +0 -2
- package/dist/drivers/web/tools/types.js.map +0 -1
- package/dist/evidence/atomic-file.d.ts +0 -23
- package/dist/evidence/atomic-file.d.ts.map +0 -1
- package/dist/evidence/atomic-file.js +0 -104
- package/dist/evidence/atomic-file.js.map +0 -1
- package/dist/evidence/layout.d.ts +0 -30
- package/dist/evidence/layout.d.ts.map +0 -1
- package/dist/evidence/layout.js +0 -152
- package/dist/evidence/layout.js.map +0 -1
- package/dist/evidence/retention.d.ts +0 -5
- package/dist/evidence/retention.d.ts.map +0 -1
- package/dist/evidence/retention.js +0 -10
- package/dist/evidence/retention.js.map +0 -1
- package/dist/evidence/store.d.ts +0 -101
- package/dist/evidence/store.d.ts.map +0 -1
- package/dist/evidence/store.js +0 -375
- package/dist/evidence/store.js.map +0 -1
- package/dist/evidence/terminal-finalizer.d.ts +0 -19
- package/dist/evidence/terminal-finalizer.d.ts.map +0 -1
- package/dist/evidence/terminal-finalizer.js +0 -56
- package/dist/evidence/terminal-finalizer.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/logging/invocation-logger.d.ts +0 -4
- package/dist/logging/invocation-logger.d.ts.map +0 -1
- package/dist/logging/invocation-logger.js +0 -25
- package/dist/logging/invocation-logger.js.map +0 -1
- package/dist/logging/level-logger.d.ts +0 -11
- package/dist/logging/level-logger.d.ts.map +0 -1
- package/dist/logging/level-logger.js +0 -82
- package/dist/logging/level-logger.js.map +0 -1
- package/dist/logging/types.d.ts +0 -8
- package/dist/logging/types.d.ts.map +0 -1
- package/dist/logging/types.js +0 -7
- package/dist/logging/types.js.map +0 -1
- package/dist/redaction/diagnostic-sanitizer.d.ts +0 -7
- package/dist/redaction/diagnostic-sanitizer.d.ts.map +0 -1
- package/dist/redaction/diagnostic-sanitizer.js +0 -42
- package/dist/redaction/diagnostic-sanitizer.js.map +0 -1
- package/dist/redaction/redactor.d.ts +0 -40
- package/dist/redaction/redactor.d.ts.map +0 -1
- package/dist/redaction/redactor.js +0 -176
- package/dist/redaction/redactor.js.map +0 -1
- package/dist/redaction/scrub.d.ts +0 -29
- package/dist/redaction/scrub.d.ts.map +0 -1
- package/dist/redaction/scrub.js +0 -54
- package/dist/redaction/scrub.js.map +0 -1
- package/dist/runtime/config.d.ts +0 -16
- package/dist/runtime/config.d.ts.map +0 -1
- package/dist/runtime/config.js +0 -2
- package/dist/runtime/config.js.map +0 -1
- package/dist/runtime/driver-boundary.d.ts +0 -16
- package/dist/runtime/driver-boundary.d.ts.map +0 -1
- package/dist/runtime/driver-boundary.js +0 -71
- package/dist/runtime/driver-boundary.js.map +0 -1
- package/dist/runtime/driver-session.d.ts +0 -9
- package/dist/runtime/driver-session.d.ts.map +0 -1
- package/dist/runtime/driver-session.js +0 -64
- package/dist/runtime/driver-session.js.map +0 -1
- package/dist/runtime/internal-step-evidence.d.ts +0 -30
- package/dist/runtime/internal-step-evidence.d.ts.map +0 -1
- package/dist/runtime/internal-step-evidence.js +0 -82
- package/dist/runtime/internal-step-evidence.js.map +0 -1
- package/dist/runtime/result-adapter.d.ts +0 -9
- package/dist/runtime/result-adapter.d.ts.map +0 -1
- package/dist/runtime/result-adapter.js +0 -77
- package/dist/runtime/result-adapter.js.map +0 -1
- package/dist/runtime/runner.d.ts +0 -43
- package/dist/runtime/runner.d.ts.map +0 -1
- package/dist/runtime/runner.js +0 -72
- package/dist/runtime/runner.js.map +0 -1
- package/dist/runtime/scenario-control.d.ts +0 -40
- package/dist/runtime/scenario-control.d.ts.map +0 -1
- package/dist/runtime/scenario-control.js +0 -94
- package/dist/runtime/scenario-control.js.map +0 -1
- package/dist/runtime/scenario-runner.d.ts +0 -41
- package/dist/runtime/scenario-runner.d.ts.map +0 -1
- package/dist/runtime/scenario-runner.js +0 -274
- package/dist/runtime/scenario-runner.js.map +0 -1
- package/dist/runtime/scenario-state.d.ts +0 -55
- package/dist/runtime/scenario-state.d.ts.map +0 -1
- package/dist/runtime/scenario-state.js +0 -128
- package/dist/runtime/scenario-state.js.map +0 -1
- package/dist/runtime/step-execution.d.ts +0 -27
- package/dist/runtime/step-execution.d.ts.map +0 -1
- package/dist/runtime/step-execution.js +0 -143
- package/dist/runtime/step-execution.js.map +0 -1
- package/dist/runtime/text.d.ts +0 -10
- package/dist/runtime/text.d.ts.map +0 -1
- package/dist/runtime/text.js +0 -25
- package/dist/runtime/text.js.map +0 -1
- package/dist/runtime/types.d.ts +0 -53
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -2
- package/dist/runtime/types.js.map +0 -1
- package/dist/runtime/usage-tracker.d.ts +0 -37
- package/dist/runtime/usage-tracker.d.ts.map +0 -1
- package/dist/runtime/usage-tracker.js +0 -110
- package/dist/runtime/usage-tracker.js.map +0 -1
- package/dist/tools/define-agent-tool.d.ts +0 -20
- package/dist/tools/define-agent-tool.d.ts.map +0 -1
- package/dist/tools/define-agent-tool.js +0 -30
- package/dist/tools/define-agent-tool.js.map +0 -1
- package/dist/tools/dispatcher.d.ts +0 -19
- package/dist/tools/dispatcher.d.ts.map +0 -1
- package/dist/tools/dispatcher.js +0 -91
- package/dist/tools/dispatcher.js.map +0 -1
- package/dist/tools/loop-detector.d.ts +0 -27
- package/dist/tools/loop-detector.d.ts.map +0 -1
- package/dist/tools/loop-detector.js +0 -76
- package/dist/tools/loop-detector.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -19
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -54
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/step/result-tool.d.ts +0 -7
- package/dist/tools/step/result-tool.d.ts.map +0 -1
- package/dist/tools/step/result-tool.js +0 -34
- package/dist/tools/step/result-tool.js.map +0 -1
- package/dist/tools/tool-contract.d.ts +0 -3
- package/dist/tools/tool-contract.d.ts.map +0 -1
- package/dist/tools/tool-contract.js +0 -2
- package/dist/tools/tool-contract.js.map +0 -1
- package/dist/tools/types.d.ts +0 -210
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -4
- package/dist/tools/types.js.map +0 -1
- package/docs/CLI.md +0 -59
- package/docs/CONFIGURATION.md +0 -105
- package/docs/DRIVERS.md +0 -79
- package/docs/EVIDENCE.md +0 -64
- package/schemas/checkmate-config.v1.json +0 -176
- package/schemas/describe-result.v1.json +0 -414
- package/schemas/driver-descriptor.v1.json +0 -66
- package/schemas/run-request.v1.json +0 -67
- package/schemas/run-result.v1.json +0 -333
- package/schemas/validation-result.v1.json +0 -86
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import type { Html } from './html.ts'
|
|
2
|
+
import { html } from './html.ts'
|
|
3
|
+
|
|
4
|
+
export type Theme = 'system' | 'light' | 'dark'
|
|
5
|
+
export type Section = 'inbox' | 'plans' | 'runs' | 'log' | null
|
|
6
|
+
|
|
7
|
+
export type Context = {
|
|
8
|
+
path: string
|
|
9
|
+
csrf: string
|
|
10
|
+
actor: string | null
|
|
11
|
+
theme: Theme
|
|
12
|
+
toast: string | null
|
|
13
|
+
inboxCount: number
|
|
14
|
+
cursor: number
|
|
15
|
+
workspace: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type Page = {
|
|
19
|
+
title: string
|
|
20
|
+
section: Section
|
|
21
|
+
subjects: string[]
|
|
22
|
+
body: Html
|
|
23
|
+
status?: number
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const nextTheme: Record<Theme, Theme> = { system: 'light', light: 'dark', dark: 'system' }
|
|
27
|
+
const themeIcons = html`<svg class="ti ti-system" viewBox="0 0 16 16" aria-hidden="true">
|
|
28
|
+
<circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.5" />
|
|
29
|
+
<path d="M8 2a6 6 0 0 1 0 12z" fill="currentColor" />
|
|
30
|
+
</svg>
|
|
31
|
+
<svg class="ti ti-light" viewBox="0 0 16 16" aria-hidden="true">
|
|
32
|
+
<circle cx="8" cy="8" r="3" fill="currentColor" />
|
|
33
|
+
<path
|
|
34
|
+
d="M8 1v2M8 13v2M1 8h2M13 8h2M3 3l1.4 1.4M11.6 11.6 13 13M3 13l1.4-1.4M11.6 4.4 13 3"
|
|
35
|
+
stroke="currentColor"
|
|
36
|
+
stroke-width="1.5"
|
|
37
|
+
stroke-linecap="round"
|
|
38
|
+
/>
|
|
39
|
+
</svg>
|
|
40
|
+
<svg class="ti ti-dark" viewBox="0 0 16 16" aria-hidden="true">
|
|
41
|
+
<path d="M13.5 9.5A6 6 0 0 1 6.5 2.5a6 6 0 1 0 7 7z" fill="currentColor" />
|
|
42
|
+
</svg>`
|
|
43
|
+
|
|
44
|
+
export function mark() {
|
|
45
|
+
return html`<span class="mark" aria-hidden="true"><i></i><i></i><i class="on"></i><i></i></span>`
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function navLink(context: Context, page: Page, section: Section, href: string, label: string, extra: Html | '' = '') {
|
|
49
|
+
const current = page.section === section ? html` aria-current="page"` : ''
|
|
50
|
+
return html`<li><a href="${href}" ${current}>${label}${extra}</a></li>`
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function themeForm(context: Context) {
|
|
54
|
+
const next = nextTheme[context.theme]
|
|
55
|
+
return html`<form method="post" action="/theme" class="theme-form" data-theme-form>
|
|
56
|
+
<input type="hidden" name="csrf" value="${context.csrf}" />
|
|
57
|
+
<input type="hidden" name="back" value="${context.path}" />
|
|
58
|
+
<button
|
|
59
|
+
class="icon-btn"
|
|
60
|
+
name="theme"
|
|
61
|
+
value="${next}"
|
|
62
|
+
data-current="${context.theme}"
|
|
63
|
+
title="Theme: ${context.theme}. Switch to ${next}."
|
|
64
|
+
aria-label="Theme: ${context.theme}. Switch to ${next}."
|
|
65
|
+
>
|
|
66
|
+
${themeIcons}
|
|
67
|
+
</button>
|
|
68
|
+
</form>`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function header(context: Context, page: Page) {
|
|
72
|
+
const count = html`<b class="count" data-region="nav-count">${context.inboxCount || ''}</b>`
|
|
73
|
+
const actor = context.actor
|
|
74
|
+
? html`<a class="actor" href="/actor?back=${encodeURIComponent(context.path)}" title="Change your name"
|
|
75
|
+
>actor: ${context.actor}</a
|
|
76
|
+
>`
|
|
77
|
+
: html`<a class="actor" href="/actor?back=${encodeURIComponent(context.path)}">Set your name</a>`
|
|
78
|
+
return html`<header class="bar">
|
|
79
|
+
<div class="bar-in">
|
|
80
|
+
<a class="brand" href="/">${mark()}<span>checkmate</span></a>
|
|
81
|
+
<nav aria-label="Main">
|
|
82
|
+
<ul class="nav">
|
|
83
|
+
${navLink(context, page, 'inbox', '/', 'Inbox', count)}
|
|
84
|
+
${navLink(context, page, 'plans', '/plans', 'Plans')}
|
|
85
|
+
${navLink(context, page, 'runs', '/runs', 'Runs')} ${navLink(context, page, 'log', '/log', 'Log')}
|
|
86
|
+
</ul>
|
|
87
|
+
</nav>
|
|
88
|
+
<div class="who">
|
|
89
|
+
<span class="live" data-live hidden>○ Connecting…</span>
|
|
90
|
+
${actor} ${themeForm(context)}
|
|
91
|
+
<button
|
|
92
|
+
class="icon-btn"
|
|
93
|
+
type="button"
|
|
94
|
+
data-shortcuts-open
|
|
95
|
+
hidden
|
|
96
|
+
aria-label="Keyboard shortcuts"
|
|
97
|
+
title="Keyboard shortcuts (?)"
|
|
98
|
+
>
|
|
99
|
+
?
|
|
100
|
+
</button>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</header>`
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const shortcuts = html`<aside class="shortcuts" data-shortcuts hidden aria-labelledby="shortcuts-title">
|
|
107
|
+
<div class="shortcuts-head">
|
|
108
|
+
<h2 id="shortcuts-title">Keyboard shortcuts</h2>
|
|
109
|
+
<button class="icon-btn" type="button" data-shortcuts-close aria-label="Close shortcuts">×</button>
|
|
110
|
+
</div>
|
|
111
|
+
<dl>
|
|
112
|
+
<dt><kbd>/</kbd></dt>
|
|
113
|
+
<dd>Search or filter</dd>
|
|
114
|
+
<dt><kbd>j</kbd> <kbd>k</kbd></dt>
|
|
115
|
+
<dd>Next or previous item</dd>
|
|
116
|
+
<dt><kbd>Enter</kbd></dt>
|
|
117
|
+
<dd>Open the item</dd>
|
|
118
|
+
<dt><kbd>g</kbd> <kbd>i</kbd></dt>
|
|
119
|
+
<dd>Go to the inbox</dd>
|
|
120
|
+
<dt><kbd>Esc</kbd></dt>
|
|
121
|
+
<dd>Close the viewer or this panel</dd>
|
|
122
|
+
<dt><kbd>?</kbd></dt>
|
|
123
|
+
<dd>Show these shortcuts</dd>
|
|
124
|
+
</dl>
|
|
125
|
+
</aside>`
|
|
126
|
+
|
|
127
|
+
const viewer = html`<div
|
|
128
|
+
class="viewer"
|
|
129
|
+
data-viewer
|
|
130
|
+
hidden
|
|
131
|
+
role="dialog"
|
|
132
|
+
aria-modal="false"
|
|
133
|
+
aria-label="Evidence viewer"
|
|
134
|
+
>
|
|
135
|
+
<div class="viewer-bar">
|
|
136
|
+
<span class="viewer-name" data-viewer-name></span>
|
|
137
|
+
<a class="btn" data-viewer-open href="#" target="_blank" rel="noopener">Open original</a>
|
|
138
|
+
<button class="btn" type="button" data-viewer-close>Close <kbd>Esc</kbd></button>
|
|
139
|
+
</div>
|
|
140
|
+
<div class="viewer-body"><img data-viewer-image alt="" /></div>
|
|
141
|
+
</div>`
|
|
142
|
+
|
|
143
|
+
export function layout(context: Context, page: Page) {
|
|
144
|
+
const theme = context.theme === 'system' ? '' : html` data-theme="${context.theme}"`
|
|
145
|
+
return html`<!doctype html>
|
|
146
|
+
<html lang="en" ${theme}>
|
|
147
|
+
<head>
|
|
148
|
+
<meta charset="utf-8" />
|
|
149
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
150
|
+
<meta name="color-scheme" content="light dark" />
|
|
151
|
+
<title>${page.title} · Checkmate</title>
|
|
152
|
+
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml" />
|
|
153
|
+
<link rel="preload" href="/assets/fonts/inter.woff2" as="font" type="font/woff2" crossorigin />
|
|
154
|
+
<link rel="stylesheet" href="/assets/style.css" />
|
|
155
|
+
<script src="/assets/client.js" defer></script>
|
|
156
|
+
</head>
|
|
157
|
+
<body data-subjects="${page.subjects.join(',')}" data-cursor="${context.cursor}">
|
|
158
|
+
<a class="skip" href="#main">Skip to content</a>
|
|
159
|
+
${header(context, page)}
|
|
160
|
+
<main id="main" tabindex="-1">${page.body}</main>
|
|
161
|
+
<footer class="foot">
|
|
162
|
+
<span>Workspace <code>${context.workspace}</code></span>
|
|
163
|
+
<span>Press <kbd>?</kbd> for keyboard shortcuts</span>
|
|
164
|
+
</footer>
|
|
165
|
+
${context.toast ? html`<div class="toast" role="status" data-toast>${context.toast}</div>` : ''}
|
|
166
|
+
<div class="sr-only" aria-live="polite" data-announcer></div>
|
|
167
|
+
${shortcuts} ${viewer}
|
|
168
|
+
</body>
|
|
169
|
+
</html>`
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export function heading(title: Html | string, sub: Html | string | null = null, extra: Html | string = '') {
|
|
173
|
+
return html`<div class="page-head">
|
|
174
|
+
<div>
|
|
175
|
+
<h1>${title}</h1>
|
|
176
|
+
${sub ? html`<p class="sub">${sub}</p>` : ''}
|
|
177
|
+
</div>
|
|
178
|
+
${extra}
|
|
179
|
+
</div>`
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function banner(tone: 'warn' | 'info' | 'fail', content: Html | string) {
|
|
183
|
+
return html`<div class="banner ${tone}" role="${tone === 'info' ? 'status' : 'alert'}">${content}</div>`
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function downloads(label: string, base: string, note: string) {
|
|
187
|
+
const item = (format: string, name: string, hint: string) =>
|
|
188
|
+
html`<a href="${base}.${format}" download data-download="${format}"
|
|
189
|
+
>${name} <span class="muted small">${hint}</span></a
|
|
190
|
+
>`
|
|
191
|
+
return html`<details class="menu" data-menu>
|
|
192
|
+
<summary class="btn small" title="${note}">${label}</summary>
|
|
193
|
+
<div class="menu-list">
|
|
194
|
+
${item('html', 'HTML', 'print-ready')} ${item('md', 'Markdown', '.md')} ${item('json', 'JSON', 'data')}
|
|
195
|
+
<p class="menu-note">${note}</p>
|
|
196
|
+
</div>
|
|
197
|
+
</details>`
|
|
198
|
+
}
|