harnery 0.30.0 → 0.31.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 +4 -4
- package/dist/commander.d.ts +8 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +14 -13
- package/dist/commands/adapter.d.ts +12 -0
- package/dist/commands/adapter.d.ts.map +1 -0
- package/dist/commands/{harness.js → adapter.js} +35 -35
- package/dist/commands/agents.d.ts +3 -2
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +185 -74
- package/dist/commands/artifacts.d.ts +4 -0
- package/dist/commands/artifacts.d.ts.map +1 -0
- package/dist/commands/artifacts.js +143 -0
- package/dist/commands/backup.d.ts +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +5 -2
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +310 -7
- package/dist/commands/checkpoint.d.ts +12 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +162 -0
- package/dist/commands/context.d.ts +2 -2
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +3 -151
- package/dist/commands/decision.d.ts.map +1 -1
- package/dist/commands/decision.js +31 -7
- package/dist/commands/deinit.d.ts +2 -2
- package/dist/commands/deinit.js +15 -15
- package/dist/commands/doctor.js +23 -23
- package/dist/commands/governor.d.ts +4 -0
- package/dist/commands/governor.d.ts.map +1 -0
- package/dist/commands/{supervisor.js → governor.js} +133 -108
- package/dist/commands/grep.d.ts +1 -1
- package/dist/commands/grep.d.ts.map +1 -1
- package/dist/commands/grep.js +19 -2
- package/dist/commands/init.d.ts +12 -12
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +44 -30
- package/dist/commands/{session.d.ts → journal.d.ts} +2 -2
- package/dist/commands/journal.d.ts.map +1 -0
- package/dist/commands/{scratch.js → journal.js} +47 -47
- package/dist/commands/policy.js +1 -1
- package/dist/commands/presence.js +2 -2
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +3 -3
- package/dist/commands/tunnel.d.ts +16 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +213 -27
- package/dist/commands/web-fetch.js +1 -1
- package/dist/commands/web.d.ts +19 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +51 -0
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +38 -22
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +35 -28
- package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
- package/dist/core/adapters/attest-projection.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
- package/dist/core/adapters/attest.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/attest.js +9 -9
- package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
- package/dist/core/adapters/attestation.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/attestation.js +20 -20
- package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
- package/dist/core/adapters/bench.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/bench.js +12 -12
- package/dist/core/adapters/index.d.ts +13 -0
- package/dist/core/adapters/index.d.ts.map +1 -0
- package/dist/core/adapters/index.js +6 -0
- package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
- package/dist/core/adapters/profiles.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/profiles.js +11 -11
- package/dist/core/adapters/registry.d.ts +15 -0
- package/dist/core/adapters/registry.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/registry.js +11 -11
- package/dist/core/{harnesses → adapters}/types.d.ts +23 -23
- package/dist/core/adapters/types.d.ts.map +1 -0
- package/dist/core/{harnesses → adapters}/types.js +1 -1
- package/dist/core/agents/canonical-emit.d.ts +9 -14
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +15 -44
- package/dist/core/agents/cli-emit.js +1 -1
- package/dist/core/agents/cli.js +30 -26
- package/dist/core/agents/codex-replay.d.ts +1 -1
- package/dist/core/agents/codex-replay.js +6 -6
- package/dist/core/agents/coord-bin.d.ts +33 -0
- package/dist/core/agents/coord-bin.d.ts.map +1 -0
- package/dist/core/agents/coord-bin.js +89 -0
- package/dist/core/agents/coord-client.d.ts +78 -8
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +303 -75
- package/dist/core/agents/events/consume.d.ts +1 -1
- package/dist/core/agents/events/emit.d.ts +5 -6
- package/dist/core/agents/events/emit.d.ts.map +1 -1
- package/dist/core/agents/events/emit.js +2 -2
- package/dist/core/agents/paths.d.ts +5 -2
- package/dist/core/agents/paths.d.ts.map +1 -1
- package/dist/core/agents/paths.js +7 -13
- package/dist/core/agents/render/prompt-context.d.ts +21 -9
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +82 -30
- package/dist/core/agents/render/session-context.d.ts +1 -1
- package/dist/core/agents/render/session-context.js +5 -5
- package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
- package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/claim-conflict.js +1 -1
- package/dist/core/agents/rules/commit-conflict.js +98 -22
- package/dist/core/agents/rules/stop-hook.d.ts +9 -9
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +23 -5
- package/dist/core/agents/rules/verdict.d.ts +14 -0
- package/dist/core/agents/rules/verdict.d.ts.map +1 -0
- package/dist/core/agents/rules/verdict.js +1 -0
- package/dist/core/agents/session-events.js +3 -3
- package/dist/core/agents/state/council.d.ts +1 -1
- package/dist/core/agents/state/council.js +1 -1
- package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
- package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-projector.js +14 -10
- package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +12 -12
- package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
- package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
- package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
- package/dist/core/agents/state/pidmap.d.ts +28 -4
- package/dist/core/agents/state/pidmap.d.ts.map +1 -1
- package/dist/core/agents/state/pidmap.js +130 -15
- package/dist/core/agents/state/proc-start.d.ts +95 -0
- package/dist/core/agents/state/proc-start.d.ts.map +1 -0
- package/dist/core/agents/state/proc-start.js +199 -0
- package/dist/core/agents/state/shell-mutation.d.ts +1 -1
- package/dist/core/agents/state/shell-mutation.js +1 -1
- package/dist/core/agents/state/stale-sweep.js +7 -7
- package/dist/core/artifacts/index.d.ts +86 -0
- package/dist/core/artifacts/index.d.ts.map +1 -0
- package/dist/core/artifacts/index.js +421 -0
- package/dist/core/config.d.ts +9 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +26 -2
- package/dist/core/context/index.d.ts +12 -12
- package/dist/core/context/index.js +10 -10
- package/dist/core/governor/adapter-spread.d.ts +52 -0
- package/dist/core/governor/adapter-spread.d.ts.map +1 -0
- package/dist/core/governor/adapter-spread.js +52 -0
- package/dist/core/governor/index.d.ts +7 -0
- package/dist/core/governor/index.d.ts.map +1 -0
- package/dist/core/governor/index.js +6 -0
- package/dist/core/governor/plan-api.d.ts +38 -0
- package/dist/core/governor/plan-api.d.ts.map +1 -0
- package/dist/core/governor/plan-api.js +83 -0
- package/dist/core/governor/plan-read.d.ts +5 -0
- package/dist/core/governor/plan-read.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/plan-read.js +66 -52
- package/dist/core/{supervisor → governor}/plan-types.d.ts +57 -56
- package/dist/core/governor/plan-types.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/plan-types.js +4 -4
- package/dist/core/governor/planning.d.ts +48 -0
- package/dist/core/governor/planning.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/planning.js +125 -94
- package/dist/core/governor/read.d.ts +6 -0
- package/dist/core/governor/read.d.ts.map +1 -0
- package/dist/core/governor/read.js +4 -0
- package/dist/core/governor/runner.d.ts +37 -0
- package/dist/core/governor/runner.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/runner.js +15 -15
- package/dist/core/governor/service-read.d.ts +6 -0
- package/dist/core/governor/service-read.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/service-read.js +12 -12
- package/dist/core/governor/service.d.ts +114 -0
- package/dist/core/governor/service.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/service.js +57 -57
- package/dist/core/governor/state.d.ts +116 -0
- package/dist/core/governor/state.d.ts.map +1 -0
- package/dist/core/{supervisor → governor}/state.js +228 -108
- package/dist/core/hooks/adapter/detect.d.ts +9 -0
- package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
- package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
- package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
- package/dist/core/hooks/adapter/events.d.ts.map +1 -0
- package/dist/core/hooks/{harness → adapter}/events.js +5 -5
- package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
- package/dist/core/hooks/adapter/output.d.ts.map +1 -0
- package/dist/core/hooks/{harness → adapter}/output.js +30 -22
- package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
- package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
- package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
- package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
- package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
- package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
- package/dist/core/hooks/cli.d.ts +3 -3
- package/dist/core/hooks/cli.js +187 -162
- package/dist/core/hooks/effects/image-capture.d.ts +5 -5
- package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
- package/dist/core/hooks/effects/image-capture.js +3 -3
- package/dist/core/hooks/effects/index.d.ts +12 -12
- package/dist/core/hooks/effects/index.d.ts.map +1 -1
- package/dist/core/hooks/effects/index.js +19 -19
- package/dist/core/hooks/events/emit.d.ts +2 -2
- package/dist/core/hooks/events/emit.d.ts.map +1 -1
- package/dist/core/hooks/events/emit.js +1 -1
- package/dist/core/hooks/events/rotate.js +1 -1
- package/dist/core/hooks/events/schema.d.ts +13 -5
- package/dist/core/hooks/events/schema.d.ts.map +1 -1
- package/dist/core/hooks/guard-path.d.ts +2 -2
- package/dist/core/hooks/guard-path.js +2 -2
- package/dist/core/hooks/index.d.ts +1 -1
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/resolve/anchor.d.ts +14 -5
- package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
- package/dist/core/hooks/resolve/anchor.js +64 -7
- package/dist/core/hooks/resolve/coord-root.d.ts +16 -11
- package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
- package/dist/core/hooks/resolve/coord-root.js +18 -43
- package/dist/core/hooks/resolve/intent.js +1 -1
- package/dist/core/hooks/resolve/owner.d.ts +1 -1
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +11 -5
- package/dist/core/{scratch → journal}/index.d.ts +25 -25
- package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
- package/dist/core/{scratch → journal}/index.js +38 -38
- package/dist/core/policy/evaluate.d.ts +1 -1
- package/dist/core/policy/evaluate.d.ts.map +1 -1
- package/dist/core/policy/evaluate.js +7 -7
- package/dist/core/policy/types.d.ts +3 -3
- package/dist/core/policy/types.d.ts.map +1 -1
- package/dist/core/work/state.d.ts +12 -4
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +50 -17
- package/dist/core/workflow/adapters.d.ts +17 -0
- package/dist/core/workflow/adapters.d.ts.map +1 -0
- package/dist/core/workflow/adapters.js +21 -0
- package/dist/core/workflow/approvals.js +6 -6
- package/dist/core/workflow/billing.d.ts +9 -9
- package/dist/core/workflow/billing.js +9 -9
- package/dist/core/workflow/child-env.d.ts +10 -2
- package/dist/core/workflow/child-env.d.ts.map +1 -1
- package/dist/core/workflow/child-env.js +12 -4
- package/dist/core/workflow/engine.d.ts +15 -5
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +138 -83
- package/dist/core/workflow/evidence-preflight.d.ts +24 -0
- package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
- package/dist/core/workflow/evidence-preflight.js +134 -0
- package/dist/core/workflow/index.d.ts +1 -1
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/proof.d.ts +11 -5
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +45 -36
- package/dist/core/workflow/run-state.d.ts +1 -1
- package/dist/core/workflow/run-state.js +7 -7
- package/dist/core/workflow/sandbox-projection.d.ts +6 -6
- package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
- package/dist/core/workflow/sandbox-projection.js +11 -11
- package/dist/core/workflow/spawn-claude.d.ts +3 -3
- package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
- package/dist/core/workflow/spawn-claude.js +9 -6
- package/dist/core/workflow/spawn-codex.d.ts +4 -4
- package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
- package/dist/core/workflow/spawn-codex.js +9 -6
- package/dist/core/workflow/spawn-cursor.d.ts +4 -4
- package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
- package/dist/core/workflow/spawn-cursor.js +9 -6
- package/dist/core/workflow/spawn-failure.d.ts +1 -1
- package/dist/core/workflow/spawn-failure.js +1 -1
- package/dist/core/workflow/specialists.js +2 -2
- package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
- package/dist/core/workflow/transcript.d.ts.map +1 -0
- package/dist/core/workflow/{journal.js → transcript.js} +14 -14
- package/dist/core/workflow/types.d.ts +98 -51
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/types.js +11 -1
- package/dist/core/workflow/validate.d.ts +1 -1
- package/dist/core/workflow/validate.js +1 -1
- package/dist/core/workflow/workspaces/cancellation.js +2 -2
- package/dist/core/workflow/workspaces/cleanup.js +2 -2
- package/dist/core/workflow/workspaces/execution.js +6 -6
- package/dist/core/workflow/workspaces/inspect.js +9 -9
- package/dist/core/workflow/workspaces/integration.js +14 -14
- package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
- package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/lifecycle.js +9 -9
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/local-git.js +39 -5
- package/dist/core/workflow/workspaces/recovery.js +3 -3
- package/dist/core/workflow/workspaces/state.d.ts +1 -1
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/state.js +3 -3
- package/dist/core/workflow/workspaces/types.d.ts +1 -1
- package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
- package/dist/lib/browser/asserts.d.ts +28 -0
- package/dist/lib/browser/asserts.d.ts.map +1 -0
- package/dist/lib/browser/asserts.js +152 -0
- package/dist/lib/browser/client.d.ts +49 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +155 -14
- package/dist/lib/browser/content-checks.d.ts +108 -0
- package/dist/lib/browser/content-checks.d.ts.map +1 -0
- package/dist/lib/browser/content-checks.js +474 -0
- package/dist/lib/browser/critique.d.ts +91 -0
- package/dist/lib/browser/critique.d.ts.map +1 -0
- package/dist/lib/browser/critique.js +167 -0
- package/dist/lib/browser/geometry.d.ts +32 -0
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +244 -1
- package/dist/lib/browser/index.d.ts +4 -1
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +2 -0
- package/dist/lib/claude-desktop.d.ts.map +1 -1
- package/dist/lib/claude-desktop.js +4 -1
- package/dist/lib/context/index.js +9 -2
- package/dist/lib/council/index.d.ts +6 -6
- package/dist/lib/council/index.d.ts.map +1 -1
- package/dist/lib/council/index.js +8 -8
- package/dist/lib/identities/assume.d.ts +2 -2
- package/dist/lib/identities/assume.js +7 -7
- package/dist/lib/instructions/apply.d.ts +3 -3
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +75 -27
- package/dist/lib/instructions/host-addendum.d.ts +54 -0
- package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
- package/dist/lib/instructions/host-addendum.js +107 -0
- package/dist/lib/instructions/templates.d.ts +10 -3
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +41 -12
- package/dist/lib/machine.d.ts +2 -2
- package/dist/lib/machine.js +2 -2
- package/package.json +26 -21
- package/schemas/config.schema.json +26 -1
- package/src/commander.ts +22 -13
- package/src/commands/{harness.ts → adapter.ts} +46 -46
- package/src/commands/agents.ts +200 -78
- package/src/commands/artifacts.ts +168 -0
- package/src/commands/backup.ts +47 -33
- package/src/commands/browse.ts +438 -2
- package/src/commands/checkpoint.ts +196 -0
- package/src/commands/context.ts +3 -176
- package/src/commands/decision.ts +41 -7
- package/src/commands/deinit.ts +16 -16
- package/src/commands/doctor.ts +28 -28
- package/src/commands/{supervisor.ts → governor.ts} +184 -154
- package/src/commands/grep.ts +19 -2
- package/src/commands/init.ts +50 -34
- package/src/commands/{scratch.ts → journal.ts} +60 -60
- package/src/commands/policy.ts +1 -1
- package/src/commands/presence.ts +2 -2
- package/src/commands/sync.ts +3 -3
- package/src/commands/tunnel.ts +256 -38
- package/src/commands/web-fetch.ts +1 -1
- package/src/commands/web.ts +56 -1
- package/src/commands/work.ts +50 -35
- package/src/commands/workflow.ts +43 -34
- package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
- package/src/core/{harnesses → adapters}/attest.ts +27 -27
- package/src/core/{harnesses → adapters}/attestation.ts +41 -41
- package/src/core/{harnesses → adapters}/bench.ts +34 -43
- package/src/core/adapters/index.ts +56 -0
- package/src/core/{harnesses → adapters}/profiles.ts +16 -16
- package/src/core/{harnesses → adapters}/registry.ts +23 -23
- package/src/core/{harnesses → adapters}/types.ts +23 -23
- package/src/core/agents/canonical-emit.ts +16 -43
- package/src/core/agents/cli-emit.ts +1 -1
- package/src/core/agents/cli.ts +30 -28
- package/src/core/agents/codex-replay.ts +6 -6
- package/src/core/agents/coord-bin.ts +92 -0
- package/src/core/agents/coord-client.ts +302 -78
- package/src/core/agents/events/consume.ts +1 -1
- package/src/core/agents/events/emit.ts +7 -6
- package/src/core/agents/paths.ts +7 -11
- package/src/core/agents/render/prompt-context.ts +107 -31
- package/src/core/agents/render/session-context.ts +6 -6
- package/src/core/agents/rules/claim-conflict.ts +4 -7
- package/src/core/agents/rules/commit-conflict.ts +103 -22
- package/src/core/agents/rules/stop-hook.ts +33 -17
- package/src/core/agents/rules/verdict.ts +13 -0
- package/src/core/agents/session-events.ts +4 -4
- package/src/core/agents/state/council.ts +1 -1
- package/src/core/agents/state/heartbeat-projector.ts +16 -12
- package/src/core/agents/state/heartbeat-writer.ts +12 -12
- package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
- package/src/core/agents/state/pidmap.ts +130 -15
- package/src/core/agents/state/proc-start.ts +208 -0
- package/src/core/agents/state/shell-mutation.ts +1 -1
- package/src/core/agents/state/stale-sweep.ts +7 -7
- package/src/core/artifacts/index.ts +557 -0
- package/src/core/config.ts +30 -2
- package/src/core/context/index.ts +15 -15
- package/src/core/governor/adapter-spread.ts +82 -0
- package/src/core/governor/index.ts +91 -0
- package/src/core/governor/plan-api.ts +115 -0
- package/src/core/{supervisor → governor}/plan-read.ts +112 -97
- package/src/core/{supervisor → governor}/plan-types.ts +59 -56
- package/src/core/{supervisor → governor}/planning.ts +223 -192
- package/src/core/governor/read.ts +59 -0
- package/src/core/{supervisor → governor}/runner.ts +39 -39
- package/src/core/{supervisor → governor}/service-read.ts +22 -22
- package/src/core/{supervisor → governor}/service.ts +117 -119
- package/src/core/{supervisor → governor}/state.ts +325 -167
- package/src/core/hooks/adapter/detect.ts +30 -0
- package/src/core/hooks/{harness → adapter}/events.ts +16 -14
- package/src/core/hooks/{harness → adapter}/output.ts +31 -23
- package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
- package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
- package/src/core/hooks/cli.ts +197 -173
- package/src/core/hooks/effects/image-capture.ts +6 -6
- package/src/core/hooks/effects/index.ts +19 -19
- package/src/core/hooks/events/emit.ts +3 -3
- package/src/core/hooks/events/rotate.ts +1 -1
- package/src/core/hooks/events/schema.ts +15 -7
- package/src/core/hooks/guard-path.ts +2 -2
- package/src/core/hooks/index.ts +1 -1
- package/src/core/hooks/resolve/anchor.ts +63 -8
- package/src/core/hooks/resolve/coord-root.ts +18 -40
- package/src/core/hooks/resolve/intent.ts +1 -1
- package/src/core/hooks/resolve/owner.ts +11 -5
- package/src/core/{scratch → journal}/index.ts +53 -53
- package/src/core/policy/evaluate.ts +8 -8
- package/src/core/policy/types.ts +3 -3
- package/src/core/work/state.ts +65 -23
- package/src/core/workflow/adapters.ts +33 -0
- package/src/core/workflow/approvals.ts +7 -7
- package/src/core/workflow/billing.ts +12 -12
- package/src/core/workflow/child-env.ts +13 -4
- package/src/core/workflow/engine.ts +155 -90
- package/src/core/workflow/evidence-preflight.ts +165 -0
- package/src/core/workflow/index.ts +3 -3
- package/src/core/workflow/proof.ts +60 -50
- package/src/core/workflow/run-state.ts +7 -7
- package/src/core/workflow/sandbox-projection.ts +16 -16
- package/src/core/workflow/spawn-claude.ts +13 -10
- package/src/core/workflow/spawn-codex.ts +13 -10
- package/src/core/workflow/spawn-cursor.ts +13 -10
- package/src/core/workflow/spawn-failure.ts +1 -1
- package/src/core/workflow/specialists.ts +2 -2
- package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
- package/src/core/workflow/types.ts +108 -51
- package/src/core/workflow/validate.ts +1 -1
- package/src/core/workflow/workspaces/cancellation.ts +2 -2
- package/src/core/workflow/workspaces/cleanup.ts +2 -2
- package/src/core/workflow/workspaces/execution.ts +6 -6
- package/src/core/workflow/workspaces/inspect.ts +14 -11
- package/src/core/workflow/workspaces/integration.ts +18 -14
- package/src/core/workflow/workspaces/lifecycle.ts +10 -10
- package/src/core/workflow/workspaces/local-git.ts +47 -5
- package/src/core/workflow/workspaces/recovery.ts +3 -3
- package/src/core/workflow/workspaces/state.ts +4 -3
- package/src/core/workflow/workspaces/types.ts +1 -1
- package/src/lib/browser/asserts.ts +177 -0
- package/src/lib/browser/client.ts +189 -14
- package/src/lib/browser/content-checks.ts +571 -0
- package/src/lib/browser/critique.ts +231 -0
- package/src/lib/browser/geometry.ts +297 -1
- package/src/lib/browser/index.ts +34 -0
- package/src/lib/claude-desktop.ts +4 -1
- package/src/lib/context/index.ts +11 -1
- package/src/lib/council/index.ts +9 -9
- package/src/lib/identities/assume.ts +7 -7
- package/src/lib/instructions/apply.ts +87 -25
- package/src/lib/instructions/host-addendum.ts +126 -0
- package/src/lib/instructions/templates.ts +44 -15
- package/src/lib/machine.ts +2 -2
- package/dist/commands/harness.d.ts +0 -12
- package/dist/commands/harness.d.ts.map +0 -1
- package/dist/commands/scratch.d.ts +0 -4
- package/dist/commands/scratch.d.ts.map +0 -1
- package/dist/commands/session.d.ts.map +0 -1
- package/dist/commands/session.js +0 -162
- package/dist/commands/supervisor.d.ts +0 -4
- package/dist/commands/supervisor.d.ts.map +0 -1
- package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
- package/dist/core/harnesses/attest.d.ts.map +0 -1
- package/dist/core/harnesses/attestation.d.ts.map +0 -1
- package/dist/core/harnesses/bench.d.ts.map +0 -1
- package/dist/core/harnesses/index.d.ts +0 -13
- package/dist/core/harnesses/index.d.ts.map +0 -1
- package/dist/core/harnesses/index.js +0 -6
- package/dist/core/harnesses/profiles.d.ts.map +0 -1
- package/dist/core/harnesses/registry.d.ts +0 -15
- package/dist/core/harnesses/registry.d.ts.map +0 -1
- package/dist/core/harnesses/types.d.ts.map +0 -1
- package/dist/core/hooks/harness/detect.d.ts +0 -9
- package/dist/core/hooks/harness/events.d.ts.map +0 -1
- package/dist/core/hooks/harness/output.d.ts.map +0 -1
- package/dist/core/supervisor/index.d.ts +0 -7
- package/dist/core/supervisor/index.d.ts.map +0 -1
- package/dist/core/supervisor/index.js +0 -6
- package/dist/core/supervisor/plan-api.d.ts +0 -23
- package/dist/core/supervisor/plan-api.d.ts.map +0 -1
- package/dist/core/supervisor/plan-api.js +0 -50
- package/dist/core/supervisor/plan-read.d.ts +0 -5
- package/dist/core/supervisor/plan-read.d.ts.map +0 -1
- package/dist/core/supervisor/plan-types.d.ts.map +0 -1
- package/dist/core/supervisor/planning.d.ts +0 -33
- package/dist/core/supervisor/planning.d.ts.map +0 -1
- package/dist/core/supervisor/read.d.ts +0 -6
- package/dist/core/supervisor/read.d.ts.map +0 -1
- package/dist/core/supervisor/read.js +0 -4
- package/dist/core/supervisor/runner.d.ts +0 -37
- package/dist/core/supervisor/runner.d.ts.map +0 -1
- package/dist/core/supervisor/service-read.d.ts +0 -6
- package/dist/core/supervisor/service-read.d.ts.map +0 -1
- package/dist/core/supervisor/service.d.ts +0 -114
- package/dist/core/supervisor/service.d.ts.map +0 -1
- package/dist/core/supervisor/state.d.ts +0 -95
- package/dist/core/supervisor/state.d.ts.map +0 -1
- package/dist/core/workflow/harnesses.d.ts +0 -17
- package/dist/core/workflow/harnesses.d.ts.map +0 -1
- package/dist/core/workflow/harnesses.js +0 -21
- package/dist/core/workflow/journal.d.ts.map +0 -1
- package/src/commands/session.ts +0 -187
- package/src/core/harnesses/index.ts +0 -56
- package/src/core/hooks/harness/detect.ts +0 -30
- package/src/core/supervisor/index.ts +0 -89
- package/src/core/supervisor/plan-api.ts +0 -73
- package/src/core/supervisor/read.ts +0 -59
- package/src/core/workflow/harnesses.ts +0 -33
- /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// Vision-model page critic for `harn browse --check-critique`.
|
|
2
|
+
//
|
|
3
|
+
// Heuristic checks only catch what we can enumerate. The reason a human still
|
|
4
|
+
// eyeballs a page is the long tail — the odd thing that "looks off" without
|
|
5
|
+
// tripping a named rule. This hands a rendered page to a vision model and asks
|
|
6
|
+
// for that judgement, structured.
|
|
7
|
+
//
|
|
8
|
+
// Two things keep it honest:
|
|
9
|
+
// 1. Tiling. A tall page screenshotted whole and downscaled to a model's
|
|
10
|
+
// input budget loses the detail the critique depends on. So the page is
|
|
11
|
+
// cut into overlapping vertical bands (or one tile per selector match),
|
|
12
|
+
// each captured at full resolution and judged on its own, with findings
|
|
13
|
+
// tagged by tile + document scroll offset for locality.
|
|
14
|
+
// 2. Injection. harnery ships no model client and no API key. The host wires
|
|
15
|
+
// a `critiqueProvider` into the program context (same pattern as
|
|
16
|
+
// `extraHeaders`); without one, the check reports `skipped`, never a
|
|
17
|
+
// false pass. That keeps this portable — the tiling, prompt, and
|
|
18
|
+
// orchestration live here; the model call lives in the host.
|
|
19
|
+
import { PNG } from "pngjs";
|
|
20
|
+
export const DEFAULT_CRITIQUE_RUBRIC = [
|
|
21
|
+
"You are reviewing one vertical slice of a rendered web page for visual defects.",
|
|
22
|
+
"Report ONLY concrete, visible problems a careful designer would flag:",
|
|
23
|
+
"- text cut off, overlapping, or colliding with other elements",
|
|
24
|
+
"- text that is hard to read against its background (low contrast)",
|
|
25
|
+
"- misaligned or unevenly spaced elements; two blocks touching with no gap",
|
|
26
|
+
"- broken, distorted, or missing images",
|
|
27
|
+
"- leaked template tokens, placeholder text, or obviously wrong values",
|
|
28
|
+
"- anything that looks broken, unfinished, or accidental",
|
|
29
|
+
"Do NOT comment on content quality, wording, tone, or subjective taste.",
|
|
30
|
+
"If the slice looks fine, return an empty list. Be precise and terse.",
|
|
31
|
+
"Return JSON only: an array of objects",
|
|
32
|
+
'{"severity":"high|medium|low","category":"<short-slug>","description":"<one sentence>"}.',
|
|
33
|
+
].join("\n");
|
|
34
|
+
/**
|
|
35
|
+
* Cut a page of height `pageHeight` into overlapping vertical bands. Pure math
|
|
36
|
+
* so the caller (which owns the page) can screenshot each `clip` rect. The
|
|
37
|
+
* overlap keeps a finding that straddles a seam visible in at least one tile.
|
|
38
|
+
*/
|
|
39
|
+
export function bandRects(pageHeight, pageWidth, bandHeight, overlap) {
|
|
40
|
+
const bands = [];
|
|
41
|
+
if (pageHeight <= 0 || pageWidth <= 0)
|
|
42
|
+
return bands;
|
|
43
|
+
const step = Math.max(1, bandHeight - overlap);
|
|
44
|
+
let index = 0;
|
|
45
|
+
for (let y = 0; y < pageHeight; y += step) {
|
|
46
|
+
const height = Math.min(bandHeight, pageHeight - y);
|
|
47
|
+
bands.push({ index, x: 0, y, width: pageWidth, height });
|
|
48
|
+
index++;
|
|
49
|
+
if (y + height >= pageHeight)
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
return bands;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Cut tiles out of ONE full-page screenshot with pngjs. Playwright's own
|
|
56
|
+
* `clip` is viewport-relative, so a band below the fold errors with "clipped
|
|
57
|
+
* area outside the resulting image" — capturing the whole page once and
|
|
58
|
+
* cropping in pixel space sidesteps that and keeps every tile at full
|
|
59
|
+
* resolution. Pass `elementRects` for semantic (per-element) tiling; otherwise
|
|
60
|
+
* the page is banded from the actual image height. Rects are clamped to the
|
|
61
|
+
* image so an off-by-one never throws.
|
|
62
|
+
*/
|
|
63
|
+
export function tilesFromFullPage(fullPageBuffer, opts) {
|
|
64
|
+
const png = PNG.sync.read(fullPageBuffer);
|
|
65
|
+
const rects = opts.elementRects && opts.elementRects.length > 0
|
|
66
|
+
? opts.elementRects.map((r, index) => ({ index, ...r }))
|
|
67
|
+
: bandRects(png.height, png.width, opts.bandHeight ?? 1400, opts.overlap ?? 120).map((b) => ({
|
|
68
|
+
index: b.index,
|
|
69
|
+
label: `band ${b.index + 1}`,
|
|
70
|
+
x: b.x,
|
|
71
|
+
y: b.y,
|
|
72
|
+
width: b.width,
|
|
73
|
+
height: b.height,
|
|
74
|
+
}));
|
|
75
|
+
const tiles = [];
|
|
76
|
+
for (const rect of rects.slice(0, opts.maxTiles)) {
|
|
77
|
+
const sx = Math.max(0, Math.min(Math.round(rect.x), png.width - 1));
|
|
78
|
+
const sy = Math.max(0, Math.min(Math.round(rect.y), png.height - 1));
|
|
79
|
+
const w = Math.max(1, Math.min(Math.round(rect.width), png.width - sx));
|
|
80
|
+
const h = Math.max(1, Math.min(Math.round(rect.height), png.height - sy));
|
|
81
|
+
const dst = new PNG({ width: w, height: h });
|
|
82
|
+
// Manual RGBA row copy — pngjs's bitblt isn't available under every runtime
|
|
83
|
+
// (missing under Bun's build), so copy the crop window row by row instead.
|
|
84
|
+
for (let row = 0; row < h; row++) {
|
|
85
|
+
const srcStart = ((sy + row) * png.width + sx) * 4;
|
|
86
|
+
const dstStart = row * w * 4;
|
|
87
|
+
png.data.copy(dst.data, dstStart, srcStart, srcStart + w * 4);
|
|
88
|
+
}
|
|
89
|
+
tiles.push({
|
|
90
|
+
index: rect.index,
|
|
91
|
+
label: rect.label,
|
|
92
|
+
scrollY: sy,
|
|
93
|
+
width: w,
|
|
94
|
+
height: h,
|
|
95
|
+
pngBase64: PNG.sync.write(dst).toString("base64"),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return tiles;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Validate + normalize a provider's raw output into CritiqueFindings. Tolerant
|
|
102
|
+
* of a model returning a bare array or wrapping it in `{ findings: [...] }`,
|
|
103
|
+
* and drops entries that are not shaped like a finding.
|
|
104
|
+
*/
|
|
105
|
+
export function normalizeFindings(raw, tile) {
|
|
106
|
+
const arr = Array.isArray(raw)
|
|
107
|
+
? raw
|
|
108
|
+
: raw && typeof raw === "object" && Array.isArray(raw.findings)
|
|
109
|
+
? raw.findings
|
|
110
|
+
: [];
|
|
111
|
+
const severities = new Set(["high", "medium", "low"]);
|
|
112
|
+
const out = [];
|
|
113
|
+
for (const item of arr) {
|
|
114
|
+
if (!item || typeof item !== "object")
|
|
115
|
+
continue;
|
|
116
|
+
const record = item;
|
|
117
|
+
const severity = String(record.severity ?? "low").toLowerCase();
|
|
118
|
+
const description = typeof record.description === "string" ? record.description.trim() : "";
|
|
119
|
+
if (!description)
|
|
120
|
+
continue;
|
|
121
|
+
out.push({
|
|
122
|
+
tile,
|
|
123
|
+
severity: severities.has(severity) ? severity : "low",
|
|
124
|
+
category: typeof record.category === "string" && record.category.trim()
|
|
125
|
+
? record.category.trim()
|
|
126
|
+
: "visual",
|
|
127
|
+
description,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Run the critique over pre-captured tiles with an injected provider. Findings
|
|
134
|
+
* are collected across tiles; a provider throw becomes a `high` error finding
|
|
135
|
+
* for that tile rather than aborting. Outcome is `fail` when any `high` finding
|
|
136
|
+
* survives (the gate escalation lives in the caller).
|
|
137
|
+
*/
|
|
138
|
+
export async function runCritique(args) {
|
|
139
|
+
const { url, rubric, tiles, provider } = args;
|
|
140
|
+
if (!provider) {
|
|
141
|
+
return {
|
|
142
|
+
rule: "critique",
|
|
143
|
+
tiles: tiles.length,
|
|
144
|
+
provider: false,
|
|
145
|
+
findings: [],
|
|
146
|
+
outcome: "skipped",
|
|
147
|
+
error: "no critiqueProvider injected by the host (see HarneryProgramContext.critiqueProvider)",
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const findings = [];
|
|
151
|
+
for (const tile of tiles) {
|
|
152
|
+
try {
|
|
153
|
+
const tileFindings = await provider({ url, rubric, tile });
|
|
154
|
+
findings.push(...tileFindings.map((f) => ({ ...f, tile: tile.index })));
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
findings.push({
|
|
158
|
+
tile: tile.index,
|
|
159
|
+
severity: "high",
|
|
160
|
+
category: "provider-error",
|
|
161
|
+
description: `critique provider failed on ${tile.label}: ${err instanceof Error ? err.message : String(err)}`,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const outcome = findings.some((f) => f.severity === "high") ? "fail" : "pass";
|
|
166
|
+
return { rule: "critique", tiles: tiles.length, provider: true, findings, outcome };
|
|
167
|
+
}
|
|
@@ -106,6 +106,33 @@ export interface OverlapResult {
|
|
|
106
106
|
excluded: LayoutExclusion[];
|
|
107
107
|
truncated: boolean;
|
|
108
108
|
}
|
|
109
|
+
export interface CrowdPair {
|
|
110
|
+
before: LayoutElementMeasurement;
|
|
111
|
+
after: LayoutElementMeasurement;
|
|
112
|
+
/** Edge separation along `axis` in CSS px; negative means the panels overlap. */
|
|
113
|
+
separationPx: number;
|
|
114
|
+
/** "y" = stacked, "x" = side by side, "overlap" = they intersect in 2D. */
|
|
115
|
+
axis: "x" | "y" | "overlap";
|
|
116
|
+
minGapPx: number;
|
|
117
|
+
/** DOM label of the shared parent, so the fix location is obvious. */
|
|
118
|
+
parentLabel: string;
|
|
119
|
+
/**
|
|
120
|
+
* Whether each consecutive sibling peer was a leaf panel or a wrapper that
|
|
121
|
+
* contains panels. `before`/`after` always measure the nearest face panels
|
|
122
|
+
* (a descendant when the peer is composite).
|
|
123
|
+
*/
|
|
124
|
+
beforeKind: "panel" | "composite";
|
|
125
|
+
afterKind: "panel" | "composite";
|
|
126
|
+
}
|
|
127
|
+
export interface CrowdResult {
|
|
128
|
+
rule: "crowd";
|
|
129
|
+
selector: string;
|
|
130
|
+
found: boolean;
|
|
131
|
+
outcome: LayoutOutcome;
|
|
132
|
+
minGapPx: number;
|
|
133
|
+
issues: CrowdPair[];
|
|
134
|
+
truncated: boolean;
|
|
135
|
+
}
|
|
109
136
|
export interface LayoutLintRequest {
|
|
110
137
|
align: Array<{
|
|
111
138
|
selector: string;
|
|
@@ -126,12 +153,17 @@ export interface LayoutLintRequest {
|
|
|
126
153
|
selector: string;
|
|
127
154
|
tolerancePx: number;
|
|
128
155
|
}>;
|
|
156
|
+
crowd: Array<{
|
|
157
|
+
selector: string;
|
|
158
|
+
minGapPx: number;
|
|
159
|
+
}>;
|
|
129
160
|
}
|
|
130
161
|
export interface LayoutLintResult {
|
|
131
162
|
align: AlignResult[];
|
|
132
163
|
gap: GapResult[];
|
|
133
164
|
clip: ClipResult[];
|
|
134
165
|
overlap: OverlapResult[];
|
|
166
|
+
crowd: CrowdResult[];
|
|
135
167
|
}
|
|
136
168
|
export declare function median(values: number[]): number;
|
|
137
169
|
export declare function intersectRects(a: LayoutRect, b: LayoutRect): LayoutRect | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/geometry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -468,7 +468,220 @@ export function buildLayoutLintCheck() {
|
|
|
468
468
|
truncated,
|
|
469
469
|
};
|
|
470
470
|
});
|
|
471
|
-
|
|
471
|
+
// A "panel" here means a card-like callout — a block that reads as its own
|
|
472
|
+
// standalone box: a full (4-side) border, a modest corner radius, or a
|
|
473
|
+
// box-shadow. Two flush cards read as one merged block, which `overlap`
|
|
474
|
+
// (needs a 2D intersection) and `gap` (flags uneven spacing, so a
|
|
475
|
+
// uniformly-flush stack passes) both miss.
|
|
476
|
+
//
|
|
477
|
+
// Crowd peers are also *composites*: in-flow siblings that are not panels
|
|
478
|
+
// themselves but contain at least one panel descendant (a card grid, a
|
|
479
|
+
// flow of cards, etc.). Comparing only leaf panels missed the common case
|
|
480
|
+
// where a wrapper-of-cards sits flush against the next card. Separation is
|
|
481
|
+
// measured between the nearest face panels inside each peer, not the
|
|
482
|
+
// wrapper boxes, so a tall section with a card near the top and prose
|
|
483
|
+
// below does not false-fail against the next sibling.
|
|
484
|
+
//
|
|
485
|
+
// Deliberately NOT flagged: structural elements that are flush BY DESIGN —
|
|
486
|
+
// table cells, list/definition rows, and divided segments (a bg-only cell
|
|
487
|
+
// in a `gap:1px` strip). Those have no card boundary of their own, so the
|
|
488
|
+
// test below excludes them without a special-case allowlist. Pills, chips,
|
|
489
|
+
// and badges (radius ≥ half their smaller side) are inline controls, not
|
|
490
|
+
// layout cards, and are excluded too. Plain blocks with no panel chrome
|
|
491
|
+
// and no panel descendants stay out of the peer list.
|
|
492
|
+
const PARENT_LIMIT = 2000;
|
|
493
|
+
const PANEL_DESCENDANT_LIMIT = 100;
|
|
494
|
+
const OVERLAP_EPS = 1;
|
|
495
|
+
const STRUCTURAL_TAGS = new Set([
|
|
496
|
+
"TD",
|
|
497
|
+
"TH",
|
|
498
|
+
"TR",
|
|
499
|
+
"THEAD",
|
|
500
|
+
"TBODY",
|
|
501
|
+
"TFOOT",
|
|
502
|
+
"COL",
|
|
503
|
+
"COLGROUP",
|
|
504
|
+
]);
|
|
505
|
+
const maxCornerRadiusPx = (style, minDim) => {
|
|
506
|
+
const corners = [
|
|
507
|
+
"border-top-left-radius",
|
|
508
|
+
"border-top-right-radius",
|
|
509
|
+
"border-bottom-right-radius",
|
|
510
|
+
"border-bottom-left-radius",
|
|
511
|
+
];
|
|
512
|
+
let max = 0;
|
|
513
|
+
for (const corner of corners) {
|
|
514
|
+
const token = (style.getPropertyValue(corner) || "").trim().split(/\s+/)[0] ?? "";
|
|
515
|
+
const value = token.endsWith("%")
|
|
516
|
+
? (Number.parseFloat(token) / 100) * minDim
|
|
517
|
+
: Number.parseFloat(token) || 0;
|
|
518
|
+
if (value > max)
|
|
519
|
+
max = value;
|
|
520
|
+
}
|
|
521
|
+
return max;
|
|
522
|
+
};
|
|
523
|
+
const isPanel = (element) => {
|
|
524
|
+
if (STRUCTURAL_TAGS.has(element.tagName))
|
|
525
|
+
return false;
|
|
526
|
+
const style = getComputedStyle(element);
|
|
527
|
+
if (style.display.startsWith("table") || style.display.startsWith("inline"))
|
|
528
|
+
return false;
|
|
529
|
+
if (style.boxShadow && style.boxShadow !== "none")
|
|
530
|
+
return true;
|
|
531
|
+
const sides = ["top", "right", "bottom", "left"];
|
|
532
|
+
const fullBorder = sides.every((side) => {
|
|
533
|
+
const width = Number.parseFloat(style.getPropertyValue(`border-${side}-width`)) || 0;
|
|
534
|
+
const lineStyle = style.getPropertyValue(`border-${side}-style`);
|
|
535
|
+
return width > 0 && lineStyle !== "none" && lineStyle !== "";
|
|
536
|
+
});
|
|
537
|
+
if (fullBorder)
|
|
538
|
+
return true;
|
|
539
|
+
const rect = element.getBoundingClientRect();
|
|
540
|
+
const minDim = Math.min(rect.width, rect.height);
|
|
541
|
+
const radius = maxCornerRadiusPx(style, minDim);
|
|
542
|
+
// A card has a modest radius; a pill/circle (radius ≥ half its short side)
|
|
543
|
+
// is a control, not a card.
|
|
544
|
+
return radius >= 3 && radius < minDim / 2 - 1;
|
|
545
|
+
};
|
|
546
|
+
const isInFlowBox = (element) => {
|
|
547
|
+
if (isHidden(element))
|
|
548
|
+
return false;
|
|
549
|
+
const style = getComputedStyle(element);
|
|
550
|
+
if (style.position === "absolute" || style.position === "fixed")
|
|
551
|
+
return false;
|
|
552
|
+
const rect = element.getBoundingClientRect();
|
|
553
|
+
return rect.width > 0 && rect.height > 0;
|
|
554
|
+
};
|
|
555
|
+
/** Leaf panel faces that represent a crowd peer (self, or descendants). */
|
|
556
|
+
const collectPanelFaces = (element, selfIsPanel) => {
|
|
557
|
+
if (selfIsPanel)
|
|
558
|
+
return [measure(element, 0, false)];
|
|
559
|
+
const faces = [];
|
|
560
|
+
const descendants = element.querySelectorAll("*");
|
|
561
|
+
for (let i = 0; i < descendants.length && faces.length < PANEL_DESCENDANT_LIMIT; i++) {
|
|
562
|
+
const child = descendants[i];
|
|
563
|
+
if (!child || !isInFlowBox(child) || !isPanel(child))
|
|
564
|
+
continue;
|
|
565
|
+
faces.push(measure(child, faces.length, false));
|
|
566
|
+
}
|
|
567
|
+
return faces;
|
|
568
|
+
};
|
|
569
|
+
// In-flow, visible, non-zero-area direct children that are crowd peers:
|
|
570
|
+
// leaf panels, or composites that wrap at least one panel. Non-peer
|
|
571
|
+
// siblings (plain prose, arrows, spacers) drop out of the list so two
|
|
572
|
+
// panels separated only by chrome still get a face-to-face check.
|
|
573
|
+
const collectCrowdPeers = (parent) => {
|
|
574
|
+
const out = [];
|
|
575
|
+
const children = [...parent.children];
|
|
576
|
+
for (let index = 0; index < children.length && index < CHILD_LIMIT; index++) {
|
|
577
|
+
const element = children[index];
|
|
578
|
+
if (!element || !isInFlowBox(element))
|
|
579
|
+
continue;
|
|
580
|
+
const selfIsPanel = isPanel(element);
|
|
581
|
+
const faces = collectPanelFaces(element, selfIsPanel);
|
|
582
|
+
if (faces.length === 0)
|
|
583
|
+
continue;
|
|
584
|
+
out.push({
|
|
585
|
+
kind: selfIsPanel ? "panel" : "composite",
|
|
586
|
+
faces,
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
return out;
|
|
590
|
+
};
|
|
591
|
+
const separationOf = (a, b) => {
|
|
592
|
+
const ra = a.rect;
|
|
593
|
+
const rb = b.rect;
|
|
594
|
+
const yOverlap = Math.min(ra.bottom, rb.bottom) - Math.max(ra.top, rb.top);
|
|
595
|
+
const xOverlap = Math.min(ra.right, rb.right) - Math.max(ra.left, rb.left);
|
|
596
|
+
const sharesY = yOverlap > OVERLAP_EPS;
|
|
597
|
+
const sharesX = xOverlap > OVERLAP_EPS;
|
|
598
|
+
if (sharesX && sharesY)
|
|
599
|
+
return { axis: "overlap", sep: -Math.min(xOverlap, yOverlap) };
|
|
600
|
+
if (sharesX) {
|
|
601
|
+
const [upper, lower] = ra.top <= rb.top ? [ra, rb] : [rb, ra];
|
|
602
|
+
return { axis: "y", sep: lower.top - upper.bottom };
|
|
603
|
+
}
|
|
604
|
+
if (sharesY) {
|
|
605
|
+
const [left, right] = ra.left <= rb.left ? [ra, rb] : [rb, ra];
|
|
606
|
+
return { axis: "x", sep: right.left - left.right };
|
|
607
|
+
}
|
|
608
|
+
// Diagonal (e.g. a grid row wrap): not edge-adjacent, so never crowded.
|
|
609
|
+
const vGap = Math.max(ra.top, rb.top) - Math.min(ra.bottom, rb.bottom);
|
|
610
|
+
const hGap = Math.max(ra.left, rb.left) - Math.min(ra.right, rb.right);
|
|
611
|
+
return { axis: "none", sep: Math.max(vGap, hGap) };
|
|
612
|
+
};
|
|
613
|
+
/** Tightest edge-adjacent face pair across two peers' panel faces. */
|
|
614
|
+
const nearestCrowdPair = (beforeFaces, afterFaces) => {
|
|
615
|
+
let best = null;
|
|
616
|
+
for (const before of beforeFaces) {
|
|
617
|
+
for (const after of afterFaces) {
|
|
618
|
+
const { axis, sep } = separationOf(before, after);
|
|
619
|
+
if (axis === "none")
|
|
620
|
+
continue;
|
|
621
|
+
if (best === null || sep < best.sep) {
|
|
622
|
+
best = { before, after, axis, sep };
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
return best;
|
|
627
|
+
};
|
|
628
|
+
const crowd = request.crowd.map(({ selector, minGapPx }) => {
|
|
629
|
+
const container = document.querySelector(selector);
|
|
630
|
+
if (!(container instanceof Element)) {
|
|
631
|
+
return {
|
|
632
|
+
rule: "crowd",
|
|
633
|
+
selector,
|
|
634
|
+
found: false,
|
|
635
|
+
outcome: "fail",
|
|
636
|
+
minGapPx,
|
|
637
|
+
issues: [],
|
|
638
|
+
truncated: false,
|
|
639
|
+
};
|
|
640
|
+
}
|
|
641
|
+
const parents = [container, ...container.querySelectorAll("*")];
|
|
642
|
+
const issues = [];
|
|
643
|
+
let truncated = parents.length > PARENT_LIMIT;
|
|
644
|
+
const limit = Math.min(parents.length, PARENT_LIMIT);
|
|
645
|
+
for (let p = 0; p < limit; p++) {
|
|
646
|
+
const parent = parents[p];
|
|
647
|
+
const peers = collectCrowdPeers(parent);
|
|
648
|
+
for (let i = 1; i < peers.length; i++) {
|
|
649
|
+
const beforePeer = peers[i - 1];
|
|
650
|
+
const afterPeer = peers[i];
|
|
651
|
+
const best = nearestCrowdPair(beforePeer.faces, afterPeer.faces);
|
|
652
|
+
if (!best)
|
|
653
|
+
continue;
|
|
654
|
+
if (best.sep < minGapPx) {
|
|
655
|
+
issues.push({
|
|
656
|
+
before: best.before,
|
|
657
|
+
after: best.after,
|
|
658
|
+
separationPx: best.sep,
|
|
659
|
+
axis: best.axis,
|
|
660
|
+
minGapPx,
|
|
661
|
+
parentLabel: labelOf(parent),
|
|
662
|
+
beforeKind: beforePeer.kind,
|
|
663
|
+
afterKind: afterPeer.kind,
|
|
664
|
+
});
|
|
665
|
+
if (issues.length >= ISSUE_LIMIT) {
|
|
666
|
+
truncated = true;
|
|
667
|
+
break;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
if (issues.length >= ISSUE_LIMIT)
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
return {
|
|
675
|
+
rule: "crowd",
|
|
676
|
+
selector,
|
|
677
|
+
found: true,
|
|
678
|
+
outcome: issues.length > 0 ? "fail" : "pass",
|
|
679
|
+
minGapPx,
|
|
680
|
+
issues,
|
|
681
|
+
truncated,
|
|
682
|
+
};
|
|
683
|
+
});
|
|
684
|
+
return { align, gap, clip, overlap, crowd };
|
|
472
685
|
};
|
|
473
686
|
}
|
|
474
687
|
export function buildLayoutLintAnnotateScript() {
|
|
@@ -516,6 +729,36 @@ export function buildLayoutLintAnnotateScript() {
|
|
|
516
729
|
box(issue.intersection, "#e11d48", `overlap ${issue.areaPx.toFixed(0)}px²`);
|
|
517
730
|
}
|
|
518
731
|
}
|
|
732
|
+
for (const check of result.crowd) {
|
|
733
|
+
for (const issue of check.issues) {
|
|
734
|
+
// Draw the touching seam: a thin strip along the edge the two panels
|
|
735
|
+
// share, so "no space here" is visible even at zero separation.
|
|
736
|
+
const a = issue.before.rect;
|
|
737
|
+
const b = issue.after.rect;
|
|
738
|
+
const seam = issue.axis === "x"
|
|
739
|
+
? {
|
|
740
|
+
x: Math.min(a.right, b.right),
|
|
741
|
+
y: Math.max(a.top, b.top),
|
|
742
|
+
width: Math.max(2, Math.abs(issue.separationPx)),
|
|
743
|
+
height: Math.max(1, Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top)),
|
|
744
|
+
top: Math.max(a.top, b.top),
|
|
745
|
+
right: 0,
|
|
746
|
+
bottom: 0,
|
|
747
|
+
left: Math.min(a.right, b.right),
|
|
748
|
+
}
|
|
749
|
+
: {
|
|
750
|
+
x: Math.max(a.left, b.left),
|
|
751
|
+
y: Math.min(a.bottom, b.bottom),
|
|
752
|
+
width: Math.max(1, Math.min(a.right, b.right) - Math.max(a.left, b.left)),
|
|
753
|
+
height: Math.max(2, Math.abs(issue.separationPx)),
|
|
754
|
+
top: Math.min(a.bottom, b.bottom),
|
|
755
|
+
right: 0,
|
|
756
|
+
bottom: 0,
|
|
757
|
+
left: Math.max(a.left, b.left),
|
|
758
|
+
};
|
|
759
|
+
box(seam, "#14b8a6", `crowd ${issue.separationPx.toFixed(1)}px`);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
519
762
|
};
|
|
520
763
|
}
|
|
521
764
|
export function buildClearLayoutLintAnnotationsScript() {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export { type AssertOp, type AssertResult, type AssertSpec, buildAssertCheck, parseAssertSpec, } from "./asserts.js";
|
|
1
2
|
export { Browser, type BrowserOptions, type ConsoleEvent, type Diagnostics, type FailedRequest, type NavigateResult, type PageErrorEvent, } from "./client.js";
|
|
3
|
+
export type { CheckRect, ContentAnnotationBox, ContentChecksRequest, ContentChecksResult, ContrastHit, ContrastResult, ImageHealthResult, ImageHit, PlaceholderHit, PlaceholderResult, TruncationHit, TruncationResult, } from "./content-checks.js";
|
|
4
|
+
export { bandRects, type CritiqueFinding, type CritiqueProvider, type CritiqueResult, type CritiqueTile, DEFAULT_CRITIQUE_RUBRIC, normalizeFindings, runCritique, tilesFromFullPage, } from "./critique.js";
|
|
2
5
|
export { captureDevOverlay, type DevOverlayError, type DevOverlayResult, } from "./dev-overlay.js";
|
|
3
|
-
export type { AlignChild, AlignCluster, AlignResult, ClipIssue, ClipResult, GapCluster, GapPair, GapResult, LayoutAxis, LayoutElementMeasurement, LayoutExclusion, LayoutLintRequest, LayoutLintResult, LayoutOutcome, LayoutRect, OverlapIssue, OverlapResult, } from "./geometry.js";
|
|
6
|
+
export type { AlignChild, AlignCluster, AlignResult, ClipIssue, ClipResult, CrowdPair, CrowdResult, GapCluster, GapPair, GapResult, LayoutAxis, LayoutElementMeasurement, LayoutExclusion, LayoutLintRequest, LayoutLintResult, LayoutOutcome, LayoutRect, OverlapIssue, OverlapResult, } from "./geometry.js";
|
|
4
7
|
export { isWSL, wslHeadedLaunchArgs } from "./launch-args.js";
|
|
5
8
|
export type { OverflowElement, OverflowResult, WidthResult, } from "./layout.js";
|
|
6
9
|
export type { RuntHit, RuntsResult, } from "./runts.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EACV,eAAe,EACf,cAAc,EACd,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,OAAO,EACP,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,OAAO,EACP,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EACT,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EACV,eAAe,EACf,cAAc,EACd,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,OAAO,EACP,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { buildAssertCheck, parseAssertSpec, } from "./asserts.js";
|
|
1
2
|
export { Browser, } from "./client.js";
|
|
3
|
+
export { bandRects, DEFAULT_CRITIQUE_RUBRIC, normalizeFindings, runCritique, tilesFromFullPage, } from "./critique.js";
|
|
2
4
|
export { captureDevOverlay, } from "./dev-overlay.js";
|
|
3
5
|
export { isWSL, wslHeadedLaunchArgs } from "./launch-args.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/lib/claude-desktop.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,mBAAmB,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB;AAaD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC/D;AA4CD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAyB9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAerF;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/lib/claude-desktop.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,mBAAmB,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB;AAaD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC/D;AA4CD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAyB9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAerF;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM1F;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,UAAU,CA2C3F;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAQhE"}
|
|
@@ -154,7 +154,10 @@ export function readCliAccount() {
|
|
|
154
154
|
export function entryMatchesSelector(entry, selector) {
|
|
155
155
|
if (entry.cliSessionId === selector || entry.sessionId === selector)
|
|
156
156
|
return true;
|
|
157
|
-
|
|
157
|
+
// Optional chain rather than a null guard: the reader normalises a missing
|
|
158
|
+
// title to null, but this is exported, and a hand-built entry with an absent
|
|
159
|
+
// title would slip past `!== null` and then throw on the method call.
|
|
160
|
+
return entry.title?.toLowerCase().includes(selector.toLowerCase()) ?? false;
|
|
158
161
|
}
|
|
159
162
|
/**
|
|
160
163
|
* Plan the copies that would make each target account list the selected
|
|
@@ -49,8 +49,15 @@ function buildSelf() {
|
|
|
49
49
|
if (!owner)
|
|
50
50
|
throw new Error("not in an agent session (no pid-map entry)");
|
|
51
51
|
const hb = readHeartbeat(owner);
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
// Full id, never abbreviated: this message exists to hand the reader an id to
|
|
53
|
+
// pass back (to `agents heal --owner`, say), and an 8-char prefix is not that
|
|
54
|
+
// id. Healing the truncated form writes `.harnery/active/<prefix>.json`, a
|
|
55
|
+
// heartbeat no reader ever resolves — so the session still looks unhealable
|
|
56
|
+
// and now has a junk file shadowing it. Same rule as `noHeartbeatMessage` in
|
|
57
|
+
// the agents command.
|
|
58
|
+
if (!hb) {
|
|
59
|
+
throw new Error(`pid-map resolved owner=${owner} but no heartbeat exists at .harnery/active/${owner}.json`);
|
|
60
|
+
}
|
|
54
61
|
const startedMs = Date.parse(hb.started_at);
|
|
55
62
|
const ageSecs = Number.isFinite(startedMs)
|
|
56
63
|
? Math.max(0, Math.floor((Date.now() - startedMs) / 1000))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Council manifest helpers: file-based multi-agent coordination primitives.
|
|
3
3
|
*
|
|
4
|
-
* Lives under .harnery/councils/ alongside heartbeats +
|
|
4
|
+
* Lives under .harnery/councils/ alongside heartbeats + journals. Council
|
|
5
5
|
* lifecycle commands serialize manifest mutations through a shared flock;
|
|
6
6
|
* round contribution files are per-member and don't need shared locking.
|
|
7
7
|
*/
|
|
@@ -99,13 +99,13 @@ export interface KnownAgent {
|
|
|
99
99
|
/** `agent-<Name>` canonical handle. */
|
|
100
100
|
name: string;
|
|
101
101
|
/** `active` = currently has a heartbeat in `.harnery/active/`. `stale` =
|
|
102
|
-
* recently ended (
|
|
102
|
+
* recently ended (journal archived within the lookback window). */
|
|
103
103
|
state: "active" | "stale";
|
|
104
104
|
/** ISO timestamp of the most-recent signal. */
|
|
105
105
|
last_seen: string;
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
|
-
* Active heartbeats + recently-archived
|
|
108
|
+
* Active heartbeats + recently-archived journals, deduped by name.
|
|
109
109
|
* Used by `agents council set-steward` to refuse arbitrary names;
|
|
110
110
|
* pass `--allow-unknown` to bypass when bootstrapping a new agent.
|
|
111
111
|
*/
|
|
@@ -182,7 +182,7 @@ export declare function writeContribution(councilId: string, round: number, memb
|
|
|
182
182
|
* Path to the round-N prompts directory: `.harnery/councils/<id>/round-N/prompts/`.
|
|
183
183
|
* Sibling to the contribution files. Holds one `<member>.md` per non-self
|
|
184
184
|
* council member, drafted by the steward, read by the operator (copy-paste
|
|
185
|
-
* into each agent
|
|
185
|
+
* into each agent adapter) and the web UI (per-member panel).
|
|
186
186
|
*/
|
|
187
187
|
export declare function promptsDir(councilId: string, round: number): string | null;
|
|
188
188
|
/** Path to a single member's prompt file in a given round. Like
|
|
@@ -202,9 +202,9 @@ export declare function stripRouteHeader(body: string): string;
|
|
|
202
202
|
* Build the submit footer appended to every steward-drafted prompt. This is the
|
|
203
203
|
* load-bearing instruction that a contribution composed in chat is NOT recorded;
|
|
204
204
|
* the agent must run the command below. It rides on the prompt (the one
|
|
205
|
-
* artifact the operator always pastes) so it reaches every
|
|
205
|
+
* artifact the operator always pastes) so it reaches every adapter regardless of
|
|
206
206
|
* whether the convene-time invitation was delivered or a `/council` skill is
|
|
207
|
-
* available. Without it, agents (esp. non-Claude
|
|
207
|
+
* available. Without it, agents (esp. non-Claude adapters with no skill) write
|
|
208
208
|
* their take as a reply and end the turn, leaving the council showing them as
|
|
209
209
|
* still-pending. Visible markdown (not an HTML comment) so the agent reads it.
|
|
210
210
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/council/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,CAAC;AACtD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,OAAO,sBAAsB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB;0CACsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;wEAEoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAElE;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAI3C;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAIlD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAKhF;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAKxF;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAQ7D;AAED,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAgBtE;AAED;;;qDAGqD;AACrD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAkB9E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,CAsB5F;AAED,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/council/index.ts"],"names":[],"mappings":"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"}
|