@indigoai-us/hq-cli 5.312.2-beta.0 → 5.314.0
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/CHANGELOG.md +1 -4293
- package/assets/scaffold/core/scripts/checkpoint-stop-gate.sh +43 -281
- package/assets/scaffold/core/scripts/hook-lib.sh +50 -345
- package/assets/scaffold/core/scripts/hq-session.sh +23 -184
- package/assets/scaffold/core/scripts/lib/session-id.sh +2 -3
- package/assets/scaffold/core/scripts/lib/session-scope-capability.sh +1 -1
- package/assets/scaffold/core/scripts/lib/work-mesh-enqueue.sh +1 -2
- package/assets/scaffold/core/scripts/qmd-reindex-after-sync.sh +87 -10
- package/assets/scaffold/core/scripts/rebuild-company-knowledge-index.sh +3 -36
- package/assets/scaffold/core/scripts/rebuild-projects-index.sh +12 -99
- package/assets/scaffold/core/scripts/token-usage-report.sh +20 -81
- package/dist/bin/hq-auth-refresh.d.ts +0 -2
- package/dist/bin/hq-auth-refresh.js +6 -12
- package/dist/commands/__fixtures__/access-vault.d.ts +0 -2
- package/dist/commands/__fixtures__/access-vault.js +1 -1
- package/dist/commands/_patterns.d.ts +0 -16
- package/dist/commands/_patterns.js +3 -20
- package/dist/commands/access.d.ts +1 -2
- package/dist/commands/access.js +49 -58
- package/dist/commands/agents.d.ts +4 -106
- package/dist/commands/agents.js +45 -924
- package/dist/commands/auth.d.ts +0 -1
- package/dist/commands/auth.js +19 -189
- package/dist/commands/billing.d.ts +0 -3
- package/dist/commands/billing.js +1 -6
- package/dist/commands/channels.js +1 -56
- package/dist/commands/cloud-demote.js +2 -3
- package/dist/commands/cloud-provision.d.ts +0 -14
- package/dist/commands/cloud-provision.js +58 -232
- package/dist/commands/cloud.d.ts +15 -49
- package/dist/commands/cloud.js +122 -358
- package/dist/commands/company-transfer.d.ts +28 -4
- package/dist/commands/company-transfer.js +49 -5
- package/dist/commands/company.js +3 -66
- package/dist/commands/core-checkpoint.d.ts +9 -19
- package/dist/commands/core-checkpoint.js +37 -301
- package/dist/commands/core.d.ts +0 -4
- package/dist/commands/core.js +80 -270
- package/dist/commands/crm.js +3 -52
- package/dist/commands/db-provision.js +4 -4
- package/dist/commands/db-sql.js +21 -7
- package/dist/commands/dm.d.ts +12 -119
- package/dist/commands/dm.js +38 -388
- package/dist/commands/doctor.d.ts +0 -12
- package/dist/commands/doctor.js +12 -158
- package/dist/commands/feedback.d.ts +0 -6
- package/dist/commands/feedback.js +37 -86
- package/dist/commands/files-browse.d.ts +12 -32
- package/dist/commands/files-browse.js +60 -176
- package/dist/commands/files.d.ts +0 -17
- package/dist/commands/files.js +47 -300
- package/dist/commands/group-grants.js +2 -3
- package/dist/commands/groups.js +5 -6
- package/dist/commands/index-cmd.d.ts +1 -19
- package/dist/commands/index-cmd.js +7 -74
- package/dist/commands/integrations-api.d.ts +10 -15
- package/dist/commands/integrations-api.js +22 -27
- package/dist/commands/integrations-connect.d.ts +13 -51
- package/dist/commands/integrations-connect.js +71 -86
- package/dist/commands/integrations-core.d.ts +6 -6
- package/dist/commands/integrations-core.js +11 -25
- package/dist/commands/integrations-import.d.ts +1 -1
- package/dist/commands/integrations-import.js +24 -43
- package/dist/commands/integrations-manage.js +13 -20
- package/dist/commands/integrations.d.ts +0 -8
- package/dist/commands/integrations.js +7 -94
- package/dist/commands/login.js +6 -49
- package/dist/commands/mcp-registration.d.ts +25 -32
- package/dist/commands/mcp-registration.js +23 -256
- package/dist/commands/mcp-status.js +0 -1
- package/dist/commands/meetings.js +34 -55
- package/dist/commands/members.js +1 -5
- package/dist/commands/mesh.d.ts +0 -11
- package/dist/commands/mesh.js +76 -1086
- package/dist/commands/onboard-identity-guard.d.ts +1 -1
- package/dist/commands/onboard.js +5 -24
- package/dist/commands/pack-install.js +1 -3
- package/dist/commands/packs.js +1 -11
- package/dist/commands/people.d.ts +0 -4
- package/dist/commands/people.js +3 -37
- package/dist/commands/publish.d.ts +1 -8
- package/dist/commands/publish.js +4 -17
- package/dist/commands/reindex.js +6 -56
- package/dist/commands/rescue.d.ts +0 -4
- package/dist/commands/rescue.js +17 -27
- package/dist/commands/run.js +4 -18
- package/dist/commands/safe-extract.d.ts +2 -11
- package/dist/commands/safe-extract.js +8 -36
- package/dist/commands/scaffold-fast.d.ts +41 -0
- package/dist/commands/scaffold-fast.js +57 -0
- package/dist/commands/secrets.d.ts +2 -20
- package/dist/commands/secrets.js +71 -175
- package/dist/commands/skill.d.ts +4 -35
- package/dist/commands/skill.js +18 -357
- package/dist/commands/sync-mode.d.ts +0 -11
- package/dist/commands/sync-mode.js +0 -30
- package/dist/commands/sync-narrow.js +5 -36
- package/dist/commands/team-sync.js +10 -71
- package/dist/commands/update.js +0 -6
- package/dist/commands/whoami.d.ts +0 -22
- package/dist/commands/whoami.js +4 -137
- package/dist/commands/workers.d.ts +14 -2
- package/dist/commands/workers.js +10 -7
- package/dist/fast-core.d.ts +7 -6
- package/dist/fast-core.js +24 -80
- package/dist/index.d.ts +4 -3
- package/dist/index.js +9 -59
- package/dist/lazy-commands.d.ts +44 -20
- package/dist/lazy-commands.js +58 -60
- package/dist/lib/company-skill-wrapper.d.ts +0 -1
- package/dist/lib/company-skill-wrapper.js +29 -121
- package/dist/lib/core-utils/codex-skill-bridge.d.ts +1 -2
- package/dist/lib/core-utils/qmd-reindex-after-sync.d.ts +1 -14
- package/dist/lib/core-utils/qmd-reindex-after-sync.js +17 -101
- package/dist/lib/core-utils/soft-timeout.js +1 -1
- package/dist/lib/core-utils/timeout-guard.d.ts +3 -3
- package/dist/lib/core-utils/timeout-guard.js +13 -28
- package/dist/lib/core-utils/token-usage-report.js +3 -17
- package/dist/lib/db/control-plane.js +0 -6
- package/dist/lib/db/local.d.ts +5 -0
- package/dist/lib/db/local.js +1 -1
- package/dist/lib/db/migrate.d.ts +12 -0
- package/dist/lib/db/migrate.js +5 -5
- package/dist/lib/db/remote-sql.d.ts +2 -2
- package/dist/lib/db/remote-sql.js +3 -3
- package/dist/lib/db/sql.d.ts +10 -0
- package/dist/lib/db/sql.js +8 -4
- package/dist/lib/doctor/__testing__/fake-hq-tree.d.ts +1 -1
- package/dist/lib/doctor/__testing__/fake-hq-tree.js +1 -1
- package/dist/lib/doctor/checks/claude-wiring.js +1 -70
- package/dist/lib/doctor/checks/codex-wiring.d.ts +4 -0
- package/dist/lib/doctor/checks/codex-wiring.js +35 -3
- package/dist/lib/doctor/checks/grok-wiring.js +34 -1
- package/dist/lib/doctor/checks/integrations.js +0 -11
- package/dist/lib/doctor/checks/runtime-health.d.ts +17 -4
- package/dist/lib/doctor/checks/runtime-health.js +7 -20
- package/dist/lib/doctor/checks/sync-health.d.ts +0 -21
- package/dist/lib/doctor/checks/sync-health.js +2 -72
- package/dist/lib/doctor/checks/work-context.js +6 -12
- package/dist/lib/doctor/compat.d.ts +16 -0
- package/dist/lib/doctor/compat.js +3 -4
- package/dist/lib/doctor/deep/effects.js +3 -1
- package/dist/lib/doctor/deep/executor.d.ts +10 -4
- package/dist/lib/doctor/deep/executor.js +1 -1
- package/dist/lib/doctor/deep/parity.d.ts +29 -2
- package/dist/lib/doctor/deep/parity.js +7 -7
- package/dist/lib/doctor/deep/sandbox.d.ts +25 -7
- package/dist/lib/doctor/deep/sandbox.js +7 -5
- package/dist/lib/doctor/fix/apply.d.ts +8 -79
- package/dist/lib/doctor/fix/apply.js +80 -292
- package/dist/lib/doctor/fix/remediation.d.ts +6 -14
- package/dist/lib/doctor/fix/remediation.js +9 -49
- package/dist/lib/doctor/fixtures/schema.js +3 -1
- package/dist/lib/doctor/json-output.d.ts +1 -17
- package/dist/lib/doctor/json-output.js +2 -7
- package/dist/lib/doctor/platform.d.ts +26 -0
- package/dist/lib/doctor/platform.js +5 -5
- package/dist/lib/doctor/registry.d.ts +0 -14
- package/dist/lib/doctor/registry.js +0 -71
- package/dist/lib/doctor/report.js +1 -1
- package/dist/lib/doctor/types.d.ts +0 -5
- package/dist/lib/doctor/types.js +0 -20
- package/dist/lib/flag-registry-worker.js +1 -12
- package/dist/lib/flag-registry.d.ts +6 -26
- package/dist/lib/flag-registry.js +16 -133
- package/dist/lib/index-render/companies.d.ts +1 -4
- package/dist/lib/index-render/companies.js +3 -66
- package/dist/lib/index-render/company-knowledge.js +17 -80
- package/dist/lib/index-render/index.d.ts +0 -1
- package/dist/lib/index-render/index.js +1 -2
- package/dist/lib/index-render/projects.js +5 -82
- package/dist/lib/index-render/shared.d.ts +1 -13
- package/dist/lib/index-render/shared.js +2 -41
- package/dist/lib/mesh/api.d.ts +10 -103
- package/dist/lib/mesh/api.js +64 -334
- package/dist/lib/mesh/client.d.ts +2 -3
- package/dist/lib/mesh/client.js +2 -3
- package/dist/lib/mesh/live/backfill-held.d.ts +16 -67
- package/dist/lib/mesh/live/backfill-held.js +61 -415
- package/dist/lib/mesh/live/backoff.d.ts +2 -2
- package/dist/lib/mesh/live/backoff.js +3 -16
- package/dist/lib/mesh/live/daemon/board-refresh.d.ts +1 -7
- package/dist/lib/mesh/live/daemon/board-refresh.js +30 -78
- package/dist/lib/mesh/live/daemon/credentials.d.ts +10 -64
- package/dist/lib/mesh/live/daemon/credentials.js +20 -270
- package/dist/lib/mesh/live/daemon/doctor.d.ts +0 -51
- package/dist/lib/mesh/live/daemon/doctor.js +6 -180
- package/dist/lib/mesh/live/daemon/index.d.ts +10 -13
- package/dist/lib/mesh/live/daemon/index.js +6 -7
- package/dist/lib/mesh/live/daemon/install.d.ts +1 -255
- package/dist/lib/mesh/live/daemon/install.js +13 -811
- package/dist/lib/mesh/live/daemon/paths.d.ts +0 -2
- package/dist/lib/mesh/live/daemon/paths.js +0 -2
- package/dist/lib/mesh/live/daemon/presence.d.ts +5 -24
- package/dist/lib/mesh/live/daemon/presence.js +10 -79
- package/dist/lib/mesh/live/daemon/run.d.ts +2 -48
- package/dist/lib/mesh/live/daemon/run.js +33 -485
- package/dist/lib/mesh/live/daemon/state.d.ts +2 -19
- package/dist/lib/mesh/live/daemon/state.js +2 -34
- package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +9 -45
- package/dist/lib/mesh/live/daemon/transcript-watch.js +31 -227
- package/dist/lib/mesh/live/emit-client.d.ts +0 -8
- package/dist/lib/mesh/live/emit-client.js +8 -23
- package/dist/lib/mesh/live/emit-evidence.d.ts +0 -19
- package/dist/lib/mesh/live/emit-evidence.js +2 -20
- package/dist/lib/mesh/live/emit.d.ts +0 -9
- package/dist/lib/mesh/live/emit.js +2 -28
- package/dist/lib/mesh/live/enqueue.d.ts +0 -5
- package/dist/lib/mesh/live/enqueue.js +0 -19
- package/dist/lib/mesh/live/flush.d.ts +5 -17
- package/dist/lib/mesh/live/flush.js +38 -391
- package/dist/lib/mesh/live/format-spool-line.d.ts +2 -5
- package/dist/lib/mesh/live/format-spool-line.js +0 -10
- package/dist/lib/mesh/live/paths.d.ts +0 -2
- package/dist/lib/mesh/live/paths.js +0 -4
- package/dist/lib/mesh/live/session-event.schema.json +1 -24
- package/dist/lib/mesh/live/session-events-client.d.ts +0 -2
- package/dist/lib/mesh/live/session-events-client.js +0 -26
- package/dist/lib/mesh/live/spool.d.ts +0 -19
- package/dist/lib/mesh/live/spool.js +3 -269
- package/dist/lib/mesh/live/validate-session-event.d.ts +1 -1
- package/dist/lib/mesh/live/validate-session-event.js +1 -1
- package/dist/lib/plan-limit-nag.d.ts +6 -102
- package/dist/lib/plan-limit-nag.js +43 -348
- package/dist/lib/scan-packages/index.d.ts +0 -2
- package/dist/lib/scan-packages/index.js +6 -168
- package/dist/lib/search-index/background.d.ts +1 -8
- package/dist/lib/search-index/background.js +200 -55
- package/dist/lib/search-index/index.d.ts +0 -12
- package/dist/lib/search-index/index.js +7 -153
- package/dist/lib/work-context/company.d.ts +20 -22
- package/dist/lib/work-context/company.js +40 -124
- package/dist/lib/work-context/config.d.ts +11 -58
- package/dist/lib/work-context/config.js +83 -334
- package/dist/lib/work-context/contract.d.ts +0 -10
- package/dist/lib/work-context/index.d.ts +25 -0
- package/dist/lib/work-context/index.js +21 -0
- package/dist/lib/work-context/outbox.d.ts +1 -14
- package/dist/lib/work-context/outbox.js +1 -87
- package/dist/lib/work-context/reconcile.d.ts +0 -15
- package/dist/lib/work-context/reconcile.js +25 -380
- package/dist/lib/work-context/state.d.ts +10 -93
- package/dist/lib/work-context/state.js +29 -342
- package/dist/lib/workers-registry/index.js +8 -62
- package/dist/main.d.ts +0 -12
- package/dist/main.js +73 -266
- package/dist/node-network-compat.d.ts +30 -2
- package/dist/node-network-compat.js +51 -4
- package/dist/node-preflight.d.ts +1 -7
- package/dist/node-preflight.js +5 -5
- package/dist/register-all.d.ts +29 -4
- package/dist/register-all.js +233 -4
- package/dist/run/discover-schemas.d.ts +1 -2
- package/dist/run/env-graph-guard.d.ts +2 -2
- package/dist/run/env-graph-guard.js +2 -5
- package/dist/run/hq-plugin.d.ts +0 -4
- package/dist/run/hq-plugin.js +8 -36
- package/dist/sentry-before-send.js +0 -80
- package/dist/sentry.d.ts +2 -8
- package/dist/sentry.js +13 -117
- package/dist/startup-registration.d.ts +2 -26
- package/dist/startup-registration.js +15 -116
- package/dist/utils/cli-telemetry.d.ts +1 -74
- package/dist/utils/cli-telemetry.js +7 -434
- package/dist/utils/client-health.d.ts +4 -0
- package/dist/utils/client-health.js +2 -2
- package/dist/utils/cognito-session.d.ts +0 -71
- package/dist/utils/cognito-session.js +27 -481
- package/dist/utils/contribution-table.d.ts +1 -1
- package/dist/utils/environmental-error.d.ts +0 -18
- package/dist/utils/environmental-error.js +7 -240
- package/dist/utils/expected-cli-error.d.ts +0 -2
- package/dist/utils/expected-cli-error.js +0 -4
- package/dist/utils/feedback-diagnostics.d.ts +1 -2
- package/dist/utils/feedback-log-bundle.d.ts +26 -51
- package/dist/utils/feedback-log-bundle.js +31 -211
- package/dist/utils/feedback-logs.d.ts +47 -18
- package/dist/utils/feedback-logs.js +21 -50
- package/dist/utils/feedback-screenshots.d.ts +1 -0
- package/dist/utils/feedback-screenshots.js +1 -1
- package/dist/utils/hq-roots.d.ts +2 -25
- package/dist/utils/hq-roots.js +7 -67
- package/dist/utils/incomplete-install-error.d.ts +19 -87
- package/dist/utils/incomplete-install-error.js +68 -319
- package/dist/utils/install-tree-torn.d.ts +24 -260
- package/dist/utils/install-tree-torn.js +51 -998
- package/dist/utils/large-file-guard.d.ts +10 -0
- package/dist/utils/large-file-guard.js +1 -1
- package/dist/utils/local-files-overview.d.ts +8 -4
- package/dist/utils/local-files-overview.js +7 -48
- package/dist/utils/login-provider.d.ts +0 -7
- package/dist/utils/login-provider.js +0 -34
- package/dist/utils/pack-contributions.d.ts +9 -2
- package/dist/utils/pack-contributions.js +43 -6
- package/dist/utils/package-root-diagnostics.d.ts +1 -1
- package/dist/utils/people.d.ts +11 -7
- package/dist/utils/people.js +20 -5
- package/dist/utils/plan-gate-error.d.ts +10 -52
- package/dist/utils/plan-gate-error.js +41 -364
- package/dist/utils/qmd-model-download-error.d.ts +8 -0
- package/dist/utils/qmd-model-download-error.js +1 -1
- package/dist/utils/qmd-query-document-error.d.ts +6 -0
- package/dist/utils/qmd-query-document-error.js +1 -1
- package/dist/utils/redact-error-text.js +1 -2
- package/dist/utils/run-bundled-script.d.ts +0 -6
- package/dist/utils/run-bundled-script.js +4 -117
- package/dist/utils/secrets-cache.d.ts +3 -7
- package/dist/utils/secrets-cache.js +14 -162
- package/dist/utils/self-update.d.ts +1 -34
- package/dist/utils/self-update.js +42 -660
- package/dist/utils/sentry-fingerprint.d.ts +1 -23
- package/dist/utils/sentry-fingerprint.js +31 -223
- package/dist/utils/team-upgrade.d.ts +1 -1
- package/dist/utils/team-upgrade.js +3 -4
- package/dist/utils/vault-api.d.ts +1 -21
- package/dist/utils/vault-api.js +84 -251
- package/dist/utils/version-check.d.ts +1 -11
- package/dist/utils/version-check.js +3 -32
- package/dist/utils/version-gate.d.ts +17 -101
- package/dist/utils/version-gate.js +70 -645
- package/dist/utils/windows-spawn.d.ts +0 -6
- package/dist/utils/windows-spawn.js +0 -37
- package/package.json +8 -20
- package/README.md +0 -113
- package/assets/bot-workers/setup/context/USER-GUIDE.md +0 -404
- package/assets/bot-workers/setup/context/quick-reference.md +0 -199
- package/assets/bot-workers/setup/skills/agents-and-team.md +0 -167
- package/assets/bot-workers/setup/skills/explain-hq.md +0 -35
- package/assets/bot-workers/setup/skills/first-company.md +0 -74
- package/assets/bot-workers/setup/skills/joining-a-team.md +0 -125
- package/assets/bot-workers/setup/skills/pricing.md +0 -92
- package/assets/bot-workers/setup/skills/standing-help.md +0 -81
- package/assets/bot-workers/setup/skills/your-business.md +0 -281
- package/assets/bot-workers/setup/worker.yaml +0 -791
- package/assets/lanes-hooks/hq-lanes-drain.json +0 -15
- package/assets/lanes-hooks/hq-lanes-drain.mjs +0 -275
- package/assets/lanes-hooks/hq-lanes-drain.sh +0 -21
- package/assets/lanes-reconcile/hq-lanes-reconcile.service +0 -11
- package/assets/lanes-reconcile/hq-lanes-reconcile.timer +0 -12
- package/assets/scaffold/.claude/hooks/validate-policy-frontmatter.sh +0 -485
- package/assets/scaffold/core/scripts/audit-log.sh +0 -384
- package/assets/scaffold/core/scripts/clean-worktree-reconcile-handoff.sh +0 -171
- package/assets/scaffold/core/scripts/eval-trigger.sh +0 -193
- package/assets/scaffold/core/scripts/git-pack-extension-check.sh +0 -164
- package/assets/scaffold/core/scripts/handoff-finalize.sh +0 -688
- package/assets/scaffold/core/scripts/handoff-open-steps.sh +0 -81
- package/assets/scaffold/core/scripts/handoff-post.sh +0 -252
- package/assets/scaffold/core/scripts/hq-delegate-bundle.sh +0 -307
- package/assets/scaffold/core/scripts/hq-delegate-grant.sh +0 -252
- package/assets/scaffold/core/scripts/hq-delegate-pickup.sh +0 -99
- package/assets/scaffold/core/scripts/hq-delegate-publish.sh +0 -91
- package/assets/scaffold/core/scripts/hq-delegate-repo.sh +0 -158
- package/assets/scaffold/core/scripts/hq-delegate-resolve.sh +0 -145
- package/assets/scaffold/core/scripts/hq-delegate-secrets.sh +0 -129
- package/assets/scaffold/core/scripts/hq-delegate-send.sh +0 -259
- package/assets/scaffold/core/scripts/hq-delegate-transfer.sh +0 -175
- package/assets/scaffold/core/scripts/hq-delegate-verify.sh +0 -238
- package/assets/scaffold/core/scripts/hq-dm-bind.sh +0 -585
- package/assets/scaffold/core/scripts/hq-job-notify.sh +0 -389
- package/assets/scaffold/core/scripts/hq-job-probe.sh +0 -835
- package/assets/scaffold/core/scripts/hq-job-remediate.sh +0 -359
- package/assets/scaffold/core/scripts/hq-job-run.sh +0 -1025
- package/assets/scaffold/core/scripts/hq-pin.sh +0 -118
- package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +0 -310
- package/assets/scaffold/core/scripts/jobs-validate.sh +0 -451
- package/assets/scaffold/core/scripts/knowledge-prefs.sh +0 -55
- package/assets/scaffold/core/scripts/lib/portable.sh +0 -211
- package/assets/scaffold/core/scripts/lib/secret-patterns.sh +0 -58
- package/assets/scaffold/core/scripts/ontology-audience-grant.sh +0 -81
- package/assets/scaffold/core/scripts/ontology-brief.mjs +0 -93
- package/assets/scaffold/core/scripts/ontology-candidate.sh +0 -100
- package/assets/scaffold/core/scripts/ontology-garden.mjs +0 -238
- package/assets/scaffold/core/scripts/ontology-source-worklist.sh +0 -79
- package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +0 -834
- package/assets/scaffold/core/scripts/policy-age-report.sh +0 -156
- package/assets/scaffold/core/scripts/policy-retire.sh +0 -199
- package/assets/scaffold/core/scripts/qmd-reindex-bg.sh +0 -40
- package/assets/scaffold/core/scripts/read-policy-frontmatter.sh +0 -32
- package/assets/scaffold/core/scripts/refresh-vault-access.sh +0 -188
- package/assets/scaffold/core/scripts/resolve-company.sh +0 -199
- package/assets/scaffold/core/scripts/resume-thread-lock.sh +0 -285
- package/assets/scaffold/core/scripts/source-yaml-validate.sh +0 -36
- package/assets/scaffold/core/scripts/verify-story-deliverables.sh +0 -148
- package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +0 -152
- package/assets/scaffold/core/scripts/worktree-gc.sh +0 -362
- package/contracts/preflight/v1/fixtures.json +0 -87
- package/contracts/preflight/v1/schema.json +0 -58
- package/dist/command-catalog.generated.d.ts +0 -10655
- package/dist/command-catalog.generated.js +0 -13737
- package/dist/command-registration-plan.d.ts +0 -474
- package/dist/command-registration-plan.js +0 -136
- package/dist/commands/agent-enroll.d.ts +0 -146
- package/dist/commands/agent-enroll.js +0 -401
- package/dist/commands/agent-inbox.d.ts +0 -9
- package/dist/commands/agent-inbox.js +0 -102
- package/dist/commands/agent-kit.d.ts +0 -87
- package/dist/commands/agent-kit.js +0 -480
- package/dist/commands/agent-mcp.d.ts +0 -24
- package/dist/commands/agent-mcp.js +0 -127
- package/dist/commands/agent-probe.d.ts +0 -77
- package/dist/commands/agent-probe.js +0 -335
- package/dist/commands/agent.d.ts +0 -13
- package/dist/commands/agent.js +0 -40
- package/dist/commands/billing-sponsor.d.ts +0 -83
- package/dist/commands/billing-sponsor.js +0 -344
- package/dist/commands/bot-companies.d.ts +0 -40
- package/dist/commands/bot-companies.js +0 -64
- package/dist/commands/bot-continuity.d.ts +0 -28
- package/dist/commands/bot-continuity.js +0 -68
- package/dist/commands/bot-jobs.d.ts +0 -127
- package/dist/commands/bot-jobs.js +0 -454
- package/dist/commands/bot.d.ts +0 -278
- package/dist/commands/bot.js +0 -1982
- package/dist/commands/cloud-retire.d.ts +0 -51
- package/dist/commands/cloud-retire.js +0 -154
- package/dist/commands/core-audit-log-native.d.ts +0 -9
- package/dist/commands/core-audit-log-native.js +0 -257
- package/dist/commands/core-checkpoint-gate-setting.d.ts +0 -59
- package/dist/commands/core-checkpoint-gate-setting.js +0 -163
- package/dist/commands/core-checkpoint-stop-gate-native.d.ts +0 -34
- package/dist/commands/core-checkpoint-stop-gate-native.js +0 -725
- package/dist/commands/core-command-catalog.d.ts +0 -34
- package/dist/commands/core-command-catalog.js +0 -62
- package/dist/commands/core-company-index-scope-flag.d.ts +0 -3
- package/dist/commands/core-company-index-scope-flag.js +0 -6
- package/dist/commands/core-delegate-w1b.d.ts +0 -10
- package/dist/commands/core-delegate-w1b.js +0 -1219
- package/dist/commands/core-delegate.d.ts +0 -46
- package/dist/commands/core-delegate.js +0 -1040
- package/dist/commands/core-dm-bind-native.d.ts +0 -32
- package/dist/commands/core-dm-bind-native.js +0 -668
- package/dist/commands/core-git-pack-extension-check-native.d.ts +0 -22
- package/dist/commands/core-git-pack-extension-check-native.js +0 -190
- package/dist/commands/core-handoff-fast.d.ts +0 -18
- package/dist/commands/core-handoff-fast.js +0 -104
- package/dist/commands/core-handoff-open-steps.d.ts +0 -21
- package/dist/commands/core-handoff-open-steps.js +0 -264
- package/dist/commands/core-handoff.d.ts +0 -24
- package/dist/commands/core-handoff.js +0 -1144
- package/dist/commands/core-hq-session-native.d.ts +0 -39
- package/dist/commands/core-hq-session-native.js +0 -579
- package/dist/commands/core-job-native-utils.d.ts +0 -6
- package/dist/commands/core-job-native-utils.js +0 -80
- package/dist/commands/core-job-native.d.ts +0 -5
- package/dist/commands/core-job-native.js +0 -16
- package/dist/commands/core-job-notify-native.d.ts +0 -36
- package/dist/commands/core-job-notify-native.js +0 -359
- package/dist/commands/core-job-probe-native.d.ts +0 -45
- package/dist/commands/core-job-probe-native.js +0 -564
- package/dist/commands/core-job-remediate-native.d.ts +0 -26
- package/dist/commands/core-job-remediate-native.js +0 -374
- package/dist/commands/core-job-remote-launcher.d.ts +0 -7
- package/dist/commands/core-job-remote-launcher.js +0 -51
- package/dist/commands/core-job-run-native.d.ts +0 -47
- package/dist/commands/core-job-run-native.js +0 -1215
- package/dist/commands/core-jobs-native.d.ts +0 -25
- package/dist/commands/core-jobs-native.js +0 -1339
- package/dist/commands/core-knowledge-prefs.d.ts +0 -12
- package/dist/commands/core-knowledge-prefs.js +0 -137
- package/dist/commands/core-native-handoff-flag.d.ts +0 -4
- package/dist/commands/core-native-handoff-flag.js +0 -7
- package/dist/commands/core-native-jobs-flag.d.ts +0 -4
- package/dist/commands/core-native-jobs-flag.js +0 -7
- package/dist/commands/core-native-policy-flag.d.ts +0 -9
- package/dist/commands/core-native-policy-flag.js +0 -12
- package/dist/commands/core-native-session-flag.d.ts +0 -4
- package/dist/commands/core-native-session-flag.js +0 -7
- package/dist/commands/core-native-utilities-flag.d.ts +0 -4
- package/dist/commands/core-native-utilities-flag.js +0 -7
- package/dist/commands/core-native-utilities.d.ts +0 -29
- package/dist/commands/core-native-utilities.js +0 -54
- package/dist/commands/core-native-worker-skills-flag.d.ts +0 -4
- package/dist/commands/core-native-worker-skills-flag.js +0 -7
- package/dist/commands/core-ontology-native.d.ts +0 -17
- package/dist/commands/core-ontology-native.js +0 -916
- package/dist/commands/core-ontology.d.ts +0 -66
- package/dist/commands/core-ontology.js +0 -430
- package/dist/commands/core-pin-native.d.ts +0 -14
- package/dist/commands/core-pin-native.js +0 -236
- package/dist/commands/core-policy-frontmatter.d.ts +0 -8
- package/dist/commands/core-policy-frontmatter.js +0 -52
- package/dist/commands/core-policy.d.ts +0 -14
- package/dist/commands/core-policy.js +0 -1018
- package/dist/commands/core-refresh-vault-access-native.d.ts +0 -20
- package/dist/commands/core-refresh-vault-access-native.js +0 -229
- package/dist/commands/core-resolve-company-command.d.ts +0 -4
- package/dist/commands/core-resolve-company-command.js +0 -42
- package/dist/commands/core-resolve-company-native.d.ts +0 -28
- package/dist/commands/core-resolve-company-native.js +0 -408
- package/dist/commands/core-work-mesh-bind-trusted-native.d.ts +0 -32
- package/dist/commands/core-work-mesh-bind-trusted-native.js +0 -190
- package/dist/commands/core-worker-lint-native.d.ts +0 -4
- package/dist/commands/core-worker-lint-native.js +0 -160
- package/dist/commands/core-worker-share-native.d.ts +0 -5
- package/dist/commands/core-worker-share-native.js +0 -260
- package/dist/commands/core-worker-skills-command.d.ts +0 -8
- package/dist/commands/core-worker-skills-command.js +0 -33
- package/dist/commands/core-worker-skills-runtime.d.ts +0 -33
- package/dist/commands/core-worker-skills-runtime.js +0 -86
- package/dist/commands/daemon.d.ts +0 -63
- package/dist/commands/daemon.js +0 -877
- package/dist/commands/deploy-comments.d.ts +0 -3
- package/dist/commands/deploy-comments.js +0 -162
- package/dist/commands/lanes-accounts.d.ts +0 -28
- package/dist/commands/lanes-accounts.js +0 -595
- package/dist/commands/lanes-autopilot.d.ts +0 -11
- package/dist/commands/lanes-autopilot.js +0 -336
- package/dist/commands/lanes-checks.d.ts +0 -51
- package/dist/commands/lanes-checks.js +0 -941
- package/dist/commands/lanes-hold.d.ts +0 -43
- package/dist/commands/lanes-hold.js +0 -655
- package/dist/commands/lanes-kpis.d.ts +0 -11
- package/dist/commands/lanes-kpis.js +0 -34
- package/dist/commands/lanes-message.d.ts +0 -9
- package/dist/commands/lanes-message.js +0 -934
- package/dist/commands/lanes-move.d.ts +0 -12
- package/dist/commands/lanes-move.js +0 -397
- package/dist/commands/lanes-questions.d.ts +0 -36
- package/dist/commands/lanes-questions.js +0 -1004
- package/dist/commands/lanes-report.d.ts +0 -11
- package/dist/commands/lanes-report.js +0 -333
- package/dist/commands/lanes-resume.d.ts +0 -6
- package/dist/commands/lanes-resume.js +0 -561
- package/dist/commands/lanes-review.d.ts +0 -10
- package/dist/commands/lanes-review.js +0 -56
- package/dist/commands/lanes-shared.d.ts +0 -448
- package/dist/commands/lanes-shared.js +0 -170
- package/dist/commands/lanes-stories.d.ts +0 -15
- package/dist/commands/lanes-stories.js +0 -347
- package/dist/commands/lanes-watch.d.ts +0 -7
- package/dist/commands/lanes-watch.js +0 -216
- package/dist/commands/lanes.d.ts +0 -149
- package/dist/commands/lanes.js +0 -8843
- package/dist/commands/monitor.d.ts +0 -58
- package/dist/commands/monitor.js +0 -980
- package/dist/commands/onboard-bot-membership.d.ts +0 -32
- package/dist/commands/onboard-bot-membership.js +0 -40
- package/dist/commands/onboard-create-identity.d.ts +0 -26
- package/dist/commands/onboard-create-identity.js +0 -23
- package/dist/commands/outpost-pruner.d.ts +0 -3
- package/dist/commands/outpost-pruner.js +0 -125
- package/dist/commands/personal-connector-settings-flag.d.ts +0 -4
- package/dist/commands/personal-connector-settings-flag.js +0 -7
- package/dist/commands/personal-targeted-push-flag.d.ts +0 -4
- package/dist/commands/personal-targeted-push-flag.js +0 -7
- package/dist/commands/personal-targeted-push-paths.d.ts +0 -3
- package/dist/commands/personal-targeted-push-paths.js +0 -67
- package/dist/commands/report.d.ts +0 -19
- package/dist/commands/report.js +0 -537
- package/dist/commands/run-feature-telemetry.d.ts +0 -3
- package/dist/commands/run-feature-telemetry.js +0 -6
- package/dist/commands/staff/reset-test-account.d.ts +0 -110
- package/dist/commands/staff/reset-test-account.js +0 -268
- package/dist/commands/staff/test-account.d.ts +0 -51
- package/dist/commands/staff/test-account.js +0 -196
- package/dist/commands/vault-retention-flag.d.ts +0 -3
- package/dist/commands/vault-retention-flag.js +0 -9
- package/dist/commands/vault-retention.d.ts +0 -11
- package/dist/commands/vault-retention.js +0 -69
- package/dist/commands/version.d.ts +0 -10
- package/dist/commands/version.js +0 -11
- package/dist/fast-scaffold.d.ts +0 -84
- package/dist/fast-scaffold.js +0 -353
- package/dist/lanes-drain-hook.d.ts +0 -14
- package/dist/lanes-drain-hook.js +0 -203
- package/dist/lib/agent-kit/adopt-identity.d.ts +0 -27
- package/dist/lib/agent-kit/adopt-identity.js +0 -60
- package/dist/lib/agent-kit/attachment-download.d.ts +0 -24
- package/dist/lib/agent-kit/attachment-download.js +0 -47
- package/dist/lib/agent-kit/creds.d.ts +0 -106
- package/dist/lib/agent-kit/creds.js +0 -163
- package/dist/lib/agent-kit/fallback.d.ts +0 -78
- package/dist/lib/agent-kit/fallback.js +0 -210
- package/dist/lib/agent-kit/inbox-state.d.ts +0 -83
- package/dist/lib/agent-kit/inbox-state.js +0 -159
- package/dist/lib/agent-kit/kit-config.d.ts +0 -56
- package/dist/lib/agent-kit/kit-config.js +0 -65
- package/dist/lib/agent-kit/log.d.ts +0 -16
- package/dist/lib/agent-kit/log.js +0 -46
- package/dist/lib/agent-kit/mcp/attachments.d.ts +0 -126
- package/dist/lib/agent-kit/mcp/attachments.js +0 -222
- package/dist/lib/agent-kit/mcp/jsonrpc.d.ts +0 -75
- package/dist/lib/agent-kit/mcp/jsonrpc.js +0 -164
- package/dist/lib/agent-kit/mcp/tools.d.ts +0 -64
- package/dist/lib/agent-kit/mcp/tools.js +0 -397
- package/dist/lib/agent-kit/paths.d.ts +0 -65
- package/dist/lib/agent-kit/paths.js +0 -118
- package/dist/lib/agent-kit/private-file.d.ts +0 -29
- package/dist/lib/agent-kit/private-file.js +0 -91
- package/dist/lib/agent-kit/run/heartbeat.d.ts +0 -72
- package/dist/lib/agent-kit/run/heartbeat.js +0 -128
- package/dist/lib/agent-kit/run/inbox.d.ts +0 -76
- package/dist/lib/agent-kit/run/inbox.js +0 -205
- package/dist/lib/agent-kit/run/supervisor.d.ts +0 -35
- package/dist/lib/agent-kit/run/supervisor.js +0 -85
- package/dist/lib/agent-kit/run/sync.d.ts +0 -33
- package/dist/lib/agent-kit/run/sync.js +0 -58
- package/dist/lib/agent-kit/services.d.ts +0 -31
- package/dist/lib/agent-kit/services.js +0 -55
- package/dist/lib/agent-kit/skills.d.ts +0 -18
- package/dist/lib/agent-kit/skills.js +0 -151
- package/dist/lib/agent-kit/wake.d.ts +0 -83
- package/dist/lib/agent-kit/wake.js +0 -243
- package/dist/lib/agents/model-catalog.d.ts +0 -62
- package/dist/lib/agents/model-catalog.js +0 -275
- package/dist/lib/auth-login-provider-state.d.ts +0 -8
- package/dist/lib/auth-login-provider-state.js +0 -63
- package/dist/lib/aws-sdk-node-warning-output.d.ts +0 -12
- package/dist/lib/aws-sdk-node-warning-output.js +0 -22
- package/dist/lib/billing/free-month.d.ts +0 -18
- package/dist/lib/billing/free-month.js +0 -31
- package/dist/lib/billing/plan-limit-refusals.d.ts +0 -69
- package/dist/lib/billing/plan-limit-refusals.js +0 -187
- package/dist/lib/billing/plan-limit-upgrade-url.d.ts +0 -11
- package/dist/lib/billing/plan-limit-upgrade-url.js +0 -66
- package/dist/lib/billing/plan-lock.d.ts +0 -143
- package/dist/lib/billing/plan-lock.js +0 -439
- package/dist/lib/bot/api.d.ts +0 -349
- package/dist/lib/bot/api.js +0 -316
- package/dist/lib/bot/attachments.d.ts +0 -45
- package/dist/lib/bot/attachments.js +0 -89
- package/dist/lib/bot/cli-update.d.ts +0 -138
- package/dist/lib/bot/cli-update.js +0 -278
- package/dist/lib/bot/company-bind.d.ts +0 -27
- package/dist/lib/bot/company-bind.js +0 -62
- package/dist/lib/bot/config.d.ts +0 -153
- package/dist/lib/bot/config.js +0 -233
- package/dist/lib/bot/continuity-download.d.ts +0 -28
- package/dist/lib/bot/continuity-download.js +0 -75
- package/dist/lib/bot/continuity-install.d.ts +0 -14
- package/dist/lib/bot/continuity-install.js +0 -101
- package/dist/lib/bot/continuity.d.ts +0 -67
- package/dist/lib/bot/continuity.js +0 -301
- package/dist/lib/bot/creds.d.ts +0 -24
- package/dist/lib/bot/creds.js +0 -51
- package/dist/lib/bot/daemon.d.ts +0 -173
- package/dist/lib/bot/daemon.js +0 -552
- package/dist/lib/bot/inbox-poll-backoff-flag.d.ts +0 -24
- package/dist/lib/bot/inbox-poll-backoff-flag.js +0 -135
- package/dist/lib/bot/inbox-state.d.ts +0 -18
- package/dist/lib/bot/inbox-state.js +0 -51
- package/dist/lib/bot/index.d.ts +0 -23
- package/dist/lib/bot/index.js +0 -23
- package/dist/lib/bot/inflight.d.ts +0 -119
- package/dist/lib/bot/inflight.js +0 -83
- package/dist/lib/bot/job-completions.d.ts +0 -89
- package/dist/lib/bot/job-completions.js +0 -132
- package/dist/lib/bot/job-run.d.ts +0 -109
- package/dist/lib/bot/job-run.js +0 -246
- package/dist/lib/bot/local-config.d.ts +0 -61
- package/dist/lib/bot/local-config.js +0 -145
- package/dist/lib/bot/local-jobs.d.ts +0 -89
- package/dist/lib/bot/local-jobs.js +0 -459
- package/dist/lib/bot/local-name.d.ts +0 -54
- package/dist/lib/bot/local-name.js +0 -114
- package/dist/lib/bot/log.d.ts +0 -13
- package/dist/lib/bot/log.js +0 -59
- package/dist/lib/bot/owner-context.d.ts +0 -79
- package/dist/lib/bot/owner-context.js +0 -175
- package/dist/lib/bot/paths.d.ts +0 -76
- package/dist/lib/bot/paths.js +0 -131
- package/dist/lib/bot/progress.d.ts +0 -132
- package/dist/lib/bot/progress.js +0 -289
- package/dist/lib/bot/promote.d.ts +0 -16
- package/dist/lib/bot/promote.js +0 -106
- package/dist/lib/bot/promotion-hold.d.ts +0 -24
- package/dist/lib/bot/promotion-hold.js +0 -103
- package/dist/lib/bot/promotion-receipt.d.ts +0 -9
- package/dist/lib/bot/promotion-receipt.js +0 -56
- package/dist/lib/bot/promotion-upload.d.ts +0 -16
- package/dist/lib/bot/promotion-upload.js +0 -80
- package/dist/lib/bot/prompt.d.ts +0 -136
- package/dist/lib/bot/prompt.js +0 -433
- package/dist/lib/bot/room-policy.d.ts +0 -63
- package/dist/lib/bot/room-policy.js +0 -91
- package/dist/lib/bot/run.d.ts +0 -217
- package/dist/lib/bot/run.js +0 -1869
- package/dist/lib/bot/runnable.d.ts +0 -51
- package/dist/lib/bot/runnable.js +0 -65
- package/dist/lib/bot/runtime/claude.d.ts +0 -50
- package/dist/lib/bot/runtime/claude.js +0 -170
- package/dist/lib/bot/runtime/codex.d.ts +0 -28
- package/dist/lib/bot/runtime/codex.js +0 -153
- package/dist/lib/bot/runtime/grok-acp.d.ts +0 -40
- package/dist/lib/bot/runtime/grok-acp.js +0 -265
- package/dist/lib/bot/runtime/grok.d.ts +0 -41
- package/dist/lib/bot/runtime/grok.js +0 -169
- package/dist/lib/bot/runtime/index.d.ts +0 -36
- package/dist/lib/bot/runtime/index.js +0 -417
- package/dist/lib/bot/runtime/messages-stream.d.ts +0 -56
- package/dist/lib/bot/runtime/messages-stream.js +0 -194
- package/dist/lib/bot/runtime/sanitize.d.ts +0 -18
- package/dist/lib/bot/runtime/sanitize.js +0 -28
- package/dist/lib/bot/runtime/types.d.ts +0 -159
- package/dist/lib/bot/runtime/types.js +0 -51
- package/dist/lib/bot/runtime/windows.d.ts +0 -10
- package/dist/lib/bot/runtime/windows.js +0 -53
- package/dist/lib/bot/runtime-sign-in.d.ts +0 -24
- package/dist/lib/bot/runtime-sign-in.js +0 -31
- package/dist/lib/bot/scaffold.d.ts +0 -38
- package/dist/lib/bot/scaffold.js +0 -94
- package/dist/lib/bot/self-heal.d.ts +0 -52
- package/dist/lib/bot/self-heal.js +0 -79
- package/dist/lib/bot/self-process.d.ts +0 -19
- package/dist/lib/bot/self-process.js +0 -35
- package/dist/lib/bot/session.d.ts +0 -19
- package/dist/lib/bot/session.js +0 -39
- package/dist/lib/bot/setup-explain.d.ts +0 -64
- package/dist/lib/bot/setup-explain.js +0 -141
- package/dist/lib/bot/split.d.ts +0 -32
- package/dist/lib/bot/split.js +0 -241
- package/dist/lib/bot/status.d.ts +0 -57
- package/dist/lib/bot/status.js +0 -66
- package/dist/lib/bot/worker-source.d.ts +0 -66
- package/dist/lib/bot/worker-source.js +0 -283
- package/dist/lib/checkpoint-ontology/aliases.d.ts +0 -17
- package/dist/lib/checkpoint-ontology/aliases.js +0 -44
- package/dist/lib/checkpoint-ontology/apply.d.ts +0 -110
- package/dist/lib/checkpoint-ontology/apply.js +0 -777
- package/dist/lib/checkpoint-ontology/company-brief.d.ts +0 -18
- package/dist/lib/checkpoint-ontology/company-brief.js +0 -337
- package/dist/lib/checkpoint-ontology/company.d.ts +0 -44
- package/dist/lib/checkpoint-ontology/company.js +0 -118
- package/dist/lib/checkpoint-ontology/drop-aliases.d.ts +0 -41
- package/dist/lib/checkpoint-ontology/drop-aliases.js +0 -76
- package/dist/lib/checkpoint-ontology/entity-file.d.ts +0 -109
- package/dist/lib/checkpoint-ontology/entity-file.js +0 -371
- package/dist/lib/checkpoint-ontology/identity.d.ts +0 -38
- package/dist/lib/checkpoint-ontology/identity.js +0 -95
- package/dist/lib/checkpoint-ontology/merge-copies.d.ts +0 -199
- package/dist/lib/checkpoint-ontology/merge-copies.js +0 -1086
- package/dist/lib/checkpoint-ontology/multi-writer.d.ts +0 -101
- package/dist/lib/checkpoint-ontology/multi-writer.js +0 -394
- package/dist/lib/checkpoint-ontology/plan.d.ts +0 -193
- package/dist/lib/checkpoint-ontology/plan.js +0 -504
- package/dist/lib/checkpoint-ontology/queued-touches.d.ts +0 -29
- package/dist/lib/checkpoint-ontology/queued-touches.js +0 -193
- package/dist/lib/checkpoint-ontology/sync-client.d.ts +0 -38
- package/dist/lib/checkpoint-ontology/sync-client.js +0 -84
- package/dist/lib/checkpoint-ontology/tree.d.ts +0 -55
- package/dist/lib/checkpoint-ontology/tree.js +0 -198
- package/dist/lib/company-errors-sdk-warning-flag.d.ts +0 -5
- package/dist/lib/company-errors-sdk-warning-flag.js +0 -8
- package/dist/lib/core-utils/hook-timeout-debug-context-flag.d.ts +0 -20
- package/dist/lib/core-utils/hook-timeout-debug-context-flag.js +0 -81
- package/dist/lib/core-utils/jq-json-serializer.d.ts +0 -5
- package/dist/lib/core-utils/jq-json-serializer.js +0 -10
- package/dist/lib/core-utils/secret-patterns.d.ts +0 -43
- package/dist/lib/core-utils/secret-patterns.js +0 -34
- package/dist/lib/core-utils/sentry-report.d.ts +0 -114
- package/dist/lib/core-utils/sentry-report.js +0 -1034
- package/dist/lib/core-utils/timeout-guard-native.d.ts +0 -7
- package/dist/lib/core-utils/timeout-guard-native.js +0 -40
- package/dist/lib/core-utils/worktree-resume.d.ts +0 -20
- package/dist/lib/core-utils/worktree-resume.js +0 -1198
- package/dist/lib/daemon/catalog.d.ts +0 -134
- package/dist/lib/daemon/catalog.js +0 -358
- package/dist/lib/daemon/config.d.ts +0 -35
- package/dist/lib/daemon/config.js +0 -108
- package/dist/lib/daemon/flag.d.ts +0 -25
- package/dist/lib/daemon/flag.js +0 -59
- package/dist/lib/daemon/handoff.d.ts +0 -56
- package/dist/lib/daemon/handoff.js +0 -161
- package/dist/lib/daemon/hq-cloud.d.ts +0 -79
- package/dist/lib/daemon/hq-cloud.js +0 -183
- package/dist/lib/daemon/install.d.ts +0 -85
- package/dist/lib/daemon/install.js +0 -320
- package/dist/lib/daemon/legacy-sync-env.d.ts +0 -10
- package/dist/lib/daemon/legacy-sync-env.js +0 -58
- package/dist/lib/daemon/legacy.d.ts +0 -45
- package/dist/lib/daemon/legacy.js +0 -133
- package/dist/lib/daemon/lock.d.ts +0 -47
- package/dist/lib/daemon/lock.js +0 -138
- package/dist/lib/daemon/machine-type.d.ts +0 -50
- package/dist/lib/daemon/machine-type.js +0 -159
- package/dist/lib/daemon/migrate.d.ts +0 -77
- package/dist/lib/daemon/migrate.js +0 -265
- package/dist/lib/daemon/paths.d.ts +0 -24
- package/dist/lib/daemon/paths.js +0 -43
- package/dist/lib/daemon/protocol-tail.d.ts +0 -33
- package/dist/lib/daemon/protocol-tail.js +0 -131
- package/dist/lib/daemon/remote-control.d.ts +0 -74
- package/dist/lib/daemon/remote-control.js +0 -153
- package/dist/lib/daemon/requests.d.ts +0 -28
- package/dist/lib/daemon/requests.js +0 -65
- package/dist/lib/daemon/run.d.ts +0 -79
- package/dist/lib/daemon/run.js +0 -755
- package/dist/lib/daemon/succession.d.ts +0 -118
- package/dist/lib/daemon/succession.js +0 -263
- package/dist/lib/daemon/supervisor.d.ts +0 -132
- package/dist/lib/daemon/supervisor.js +0 -836
- package/dist/lib/daemon/sync-runner.d.ts +0 -58
- package/dist/lib/daemon/sync-runner.js +0 -277
- package/dist/lib/daemon/tools.d.ts +0 -52
- package/dist/lib/daemon/tools.js +0 -95
- package/dist/lib/daemon/updater.d.ts +0 -57
- package/dist/lib/daemon/updater.js +0 -163
- package/dist/lib/deploy-api.d.ts +0 -5
- package/dist/lib/deploy-api.js +0 -21
- package/dist/lib/deploy-apps.d.ts +0 -13
- package/dist/lib/deploy-apps.js +0 -29
- package/dist/lib/doctor/__testing__/run-doctor.d.ts +0 -8
- package/dist/lib/doctor/__testing__/run-doctor.js +0 -52
- package/dist/lib/doctor/checks/bots.d.ts +0 -13
- package/dist/lib/doctor/checks/bots.js +0 -189
- package/dist/lib/doctor/checks/scaffold-cli-floor.d.ts +0 -6
- package/dist/lib/doctor/checks/scaffold-cli-floor.js +0 -73
- package/dist/lib/doctor/checks/sync-runtime.d.ts +0 -11
- package/dist/lib/doctor/checks/sync-runtime.js +0 -216
- package/dist/lib/doctor/client-health-flag-token.d.ts +0 -15
- package/dist/lib/doctor/client-health-flag-token.js +0 -66
- package/dist/lib/doctor/client-health-reason-codes-flag.d.ts +0 -27
- package/dist/lib/doctor/client-health-reason-codes-flag.js +0 -106
- package/dist/lib/doctor/fix/json-output.d.ts +0 -28
- package/dist/lib/doctor/fix/json-output.js +0 -33
- package/dist/lib/doctor/fix/refresh-sync-outcome.d.ts +0 -12
- package/dist/lib/doctor/fix/refresh-sync-outcome.js +0 -25
- package/dist/lib/doctor/shared.d.ts +0 -8
- package/dist/lib/doctor/shared.js +0 -38
- package/dist/lib/doctor/stray-gate-entries.d.ts +0 -35
- package/dist/lib/doctor/stray-gate-entries.js +0 -83
- package/dist/lib/first-sync-next-step.d.ts +0 -37
- package/dist/lib/first-sync-next-step.js +0 -189
- package/dist/lib/flag-registry-endpoint.d.ts +0 -5
- package/dist/lib/flag-registry-endpoint.js +0 -9
- package/dist/lib/flag-registry-worker-source.generated.d.ts +0 -2
- package/dist/lib/flag-registry-worker-source.generated.js +0 -3
- package/dist/lib/flag-snapshot-file.d.ts +0 -20
- package/dist/lib/flag-snapshot-file.js +0 -91
- package/dist/lib/heartbeat-identity.d.ts +0 -30
- package/dist/lib/heartbeat-identity.js +0 -76
- package/dist/lib/lanes/account-home.d.ts +0 -8
- package/dist/lib/lanes/account-home.js +0 -10
- package/dist/lib/lanes/accounts.d.ts +0 -117
- package/dist/lib/lanes/accounts.js +0 -366
- package/dist/lib/lanes/admission-host.d.ts +0 -22
- package/dist/lib/lanes/admission-host.js +0 -37
- package/dist/lib/lanes/admission.d.ts +0 -26
- package/dist/lib/lanes/admission.js +0 -210
- package/dist/lib/lanes/approval-gate.d.ts +0 -8
- package/dist/lib/lanes/approval-gate.js +0 -90
- package/dist/lib/lanes/autopilot-metrics.d.ts +0 -99
- package/dist/lib/lanes/autopilot-metrics.js +0 -301
- package/dist/lib/lanes/autopilot-registry.d.ts +0 -62
- package/dist/lib/lanes/autopilot-registry.js +0 -192
- package/dist/lib/lanes/autopilot.d.ts +0 -120
- package/dist/lib/lanes/autopilot.js +0 -1061
- package/dist/lib/lanes/blocker-freshness.d.ts +0 -31
- package/dist/lib/lanes/blocker-freshness.js +0 -168
- package/dist/lib/lanes/checked-company-path.d.ts +0 -3
- package/dist/lib/lanes/checked-company-path.js +0 -39
- package/dist/lib/lanes/claude-balance.d.ts +0 -97
- package/dist/lib/lanes/claude-balance.js +0 -319
- package/dist/lib/lanes/compaction.d.ts +0 -110
- package/dist/lib/lanes/compaction.js +0 -293
- package/dist/lib/lanes/config.d.ts +0 -91
- package/dist/lib/lanes/config.js +0 -592
- package/dist/lib/lanes/constants.d.ts +0 -3
- package/dist/lib/lanes/constants.js +0 -3
- package/dist/lib/lanes/delivery-core.d.ts +0 -15
- package/dist/lib/lanes/delivery-core.js +0 -21
- package/dist/lib/lanes/delivery.d.ts +0 -180
- package/dist/lib/lanes/delivery.js +0 -443
- package/dist/lib/lanes/dropbox.d.ts +0 -129
- package/dist/lib/lanes/dropbox.js +0 -601
- package/dist/lib/lanes/effort.d.ts +0 -51
- package/dist/lib/lanes/effort.js +0 -113
- package/dist/lib/lanes/envelope-repair-dispatch.d.ts +0 -26
- package/dist/lib/lanes/envelope-repair-dispatch.js +0 -74
- package/dist/lib/lanes/errors.d.ts +0 -39
- package/dist/lib/lanes/errors.js +0 -72
- package/dist/lib/lanes/flag-keys.d.ts +0 -13
- package/dist/lib/lanes/flag-keys.js +0 -13
- package/dist/lib/lanes/grants.d.ts +0 -29
- package/dist/lib/lanes/grants.js +0 -166
- package/dist/lib/lanes/hire-grant-dispatch.d.ts +0 -29
- package/dist/lib/lanes/hire-grant-dispatch.js +0 -316
- package/dist/lib/lanes/hooks-install.d.ts +0 -82
- package/dist/lib/lanes/hooks-install.js +0 -479
- package/dist/lib/lanes/host-capacity.d.ts +0 -69
- package/dist/lib/lanes/host-capacity.js +0 -254
- package/dist/lib/lanes/hq-root.d.ts +0 -19
- package/dist/lib/lanes/hq-root.js +0 -28
- package/dist/lib/lanes/index.d.ts +0 -76
- package/dist/lib/lanes/index.js +0 -42
- package/dist/lib/lanes/keep-alive.d.ts +0 -68
- package/dist/lib/lanes/keep-alive.js +0 -343
- package/dist/lib/lanes/kr-freshness.d.ts +0 -76
- package/dist/lib/lanes/kr-freshness.js +0 -413
- package/dist/lib/lanes/lane-company.d.ts +0 -10
- package/dist/lib/lanes/lane-company.js +0 -41
- package/dist/lib/lanes/liveness.d.ts +0 -108
- package/dist/lib/lanes/liveness.js +0 -396
- package/dist/lib/lanes/machine-identity.d.ts +0 -34
- package/dist/lib/lanes/machine-identity.js +0 -92
- package/dist/lib/lanes/manager-status-gate.d.ts +0 -17
- package/dist/lib/lanes/manager-status-gate.js +0 -133
- package/dist/lib/lanes/merge-command.d.ts +0 -15
- package/dist/lib/lanes/merge-command.js +0 -629
- package/dist/lib/lanes/mesh-events.d.ts +0 -127
- package/dist/lib/lanes/mesh-events.js +0 -564
- package/dist/lib/lanes/message-replay.d.ts +0 -21
- package/dist/lib/lanes/message-replay.js +0 -122
- package/dist/lib/lanes/models.d.ts +0 -86
- package/dist/lib/lanes/models.js +0 -234
- package/dist/lib/lanes/monitor.d.ts +0 -48
- package/dist/lib/lanes/monitor.js +0 -428
- package/dist/lib/lanes/move-account.d.ts +0 -56
- package/dist/lib/lanes/move-account.js +0 -193
- package/dist/lib/lanes/orphans.d.ts +0 -25
- package/dist/lib/lanes/orphans.js +0 -102
- package/dist/lib/lanes/outpost-dispatch.d.ts +0 -147
- package/dist/lib/lanes/outpost-dispatch.js +0 -271
- package/dist/lib/lanes/outpost-hire-cache.d.ts +0 -22
- package/dist/lib/lanes/outpost-hire-cache.js +0 -153
- package/dist/lib/lanes/outpost-identity.d.ts +0 -33
- package/dist/lib/lanes/outpost-identity.js +0 -59
- package/dist/lib/lanes/outpost-profile-repin.d.ts +0 -17
- package/dist/lib/lanes/outpost-profile-repin.js +0 -84
- package/dist/lib/lanes/outpost-pruner-install.d.ts +0 -37
- package/dist/lib/lanes/outpost-pruner-install.js +0 -238
- package/dist/lib/lanes/outpost-registry-worker-approval.d.ts +0 -18
- package/dist/lib/lanes/outpost-registry-worker-approval.js +0 -109
- package/dist/lib/lanes/outpost-snapshot-memo.d.ts +0 -6
- package/dist/lib/lanes/outpost-snapshot-memo.js +0 -14
- package/dist/lib/lanes/outpost-worktree-pruner-flag.d.ts +0 -19
- package/dist/lib/lanes/outpost-worktree-pruner-flag.js +0 -86
- package/dist/lib/lanes/outpost-worktree-pruner.d.ts +0 -62
- package/dist/lib/lanes/outpost-worktree-pruner.js +0 -1201
- package/dist/lib/lanes/profile.d.ts +0 -69
- package/dist/lib/lanes/profile.js +0 -552
- package/dist/lib/lanes/provider-rejection.d.ts +0 -86
- package/dist/lib/lanes/provider-rejection.js +0 -286
- package/dist/lib/lanes/questions.d.ts +0 -90
- package/dist/lib/lanes/questions.js +0 -384
- package/dist/lib/lanes/quota.d.ts +0 -134
- package/dist/lib/lanes/quota.js +0 -471
- package/dist/lib/lanes/reconcile-install.d.ts +0 -90
- package/dist/lib/lanes/reconcile-install.js +0 -257
- package/dist/lib/lanes/reconcile.d.ts +0 -155
- package/dist/lib/lanes/reconcile.js +0 -3193
- package/dist/lib/lanes/registry-flag.d.ts +0 -29
- package/dist/lib/lanes/registry-flag.js +0 -139
- package/dist/lib/lanes/registry-persona.d.ts +0 -20
- package/dist/lib/lanes/registry-persona.js +0 -329
- package/dist/lib/lanes/registry.d.ts +0 -122
- package/dist/lib/lanes/registry.js +0 -570
- package/dist/lib/lanes/reviews.d.ts +0 -38
- package/dist/lib/lanes/reviews.js +0 -395
- package/dist/lib/lanes/runaway-tool-guard.d.ts +0 -38
- package/dist/lib/lanes/runaway-tool-guard.js +0 -284
- package/dist/lib/lanes/session-relink.d.ts +0 -25
- package/dist/lib/lanes/session-relink.js +0 -216
- package/dist/lib/lanes/spawn.d.ts +0 -350
- package/dist/lib/lanes/spawn.js +0 -2643
- package/dist/lib/lanes/ssm-command-context.d.ts +0 -12
- package/dist/lib/lanes/ssm-command-context.js +0 -52
- package/dist/lib/lanes/store.d.ts +0 -91
- package/dist/lib/lanes/store.js +0 -1811
- package/dist/lib/lanes/stories.d.ts +0 -23
- package/dist/lib/lanes/stories.js +0 -92
- package/dist/lib/lanes/story-ledger.d.ts +0 -80
- package/dist/lib/lanes/story-ledger.js +0 -815
- package/dist/lib/lanes/story-switch.d.ts +0 -21
- package/dist/lib/lanes/story-switch.js +0 -75
- package/dist/lib/lanes/text-scan.d.ts +0 -11
- package/dist/lib/lanes/text-scan.js +0 -103
- package/dist/lib/lanes/throttle.d.ts +0 -116
- package/dist/lib/lanes/throttle.js +0 -437
- package/dist/lib/lanes/timestamp.d.ts +0 -3
- package/dist/lib/lanes/timestamp.js +0 -26
- package/dist/lib/lanes/tracker-checks.d.ts +0 -77
- package/dist/lib/lanes/tracker-checks.js +0 -134
- package/dist/lib/lanes/tracker-report-state.d.ts +0 -10
- package/dist/lib/lanes/tracker-report-state.js +0 -124
- package/dist/lib/lanes/tracker-report.d.ts +0 -203
- package/dist/lib/lanes/tracker-report.js +0 -522
- package/dist/lib/lanes/tracker-store.d.ts +0 -18
- package/dist/lib/lanes/tracker-store.js +0 -106
- package/dist/lib/lanes/types.d.ts +0 -1020
- package/dist/lib/lanes/types.js +0 -417
- package/dist/lib/lanes/wait.d.ts +0 -39
- package/dist/lib/lanes/wait.js +0 -159
- package/dist/lib/lanes/watch.d.ts +0 -39
- package/dist/lib/lanes/watch.js +0 -249
- package/dist/lib/lanes/watcher-main.d.ts +0 -11
- package/dist/lib/lanes/watcher-main.js +0 -108
- package/dist/lib/lanes/watcher.d.ts +0 -287
- package/dist/lib/lanes/watcher.js +0 -1972
- package/dist/lib/mesh/live/daemon/config.d.ts +0 -36
- package/dist/lib/mesh/live/daemon/config.js +0 -120
- package/dist/lib/mesh/live/daemon/legacy-listen.d.ts +0 -43
- package/dist/lib/mesh/live/daemon/legacy-listen.js +0 -89
- package/dist/lib/mesh/live/daemon/live-cache.d.ts +0 -26
- package/dist/lib/mesh/live/daemon/live-cache.js +0 -116
- package/dist/lib/mesh/live/daemon/mqtt-events.d.ts +0 -7
- package/dist/lib/mesh/live/daemon/mqtt-events.js +0 -2
- package/dist/lib/mesh/live/daemon/mqtt-events.test-d.d.ts +0 -2
- package/dist/lib/mesh/live/daemon/mqtt-events.test-d.js +0 -10
- package/dist/lib/mesh/live/daemon/version-drift.d.ts +0 -5
- package/dist/lib/mesh/live/daemon/version-drift.js +0 -47
- package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +0 -32
- package/dist/lib/mesh/live/daemon/work-subscribe.js +0 -262
- package/dist/lib/mesh/live/report-summary.d.ts +0 -45
- package/dist/lib/mesh/live/report-summary.js +0 -234
- package/dist/lib/mesh/live/session-seq.d.ts +0 -4
- package/dist/lib/mesh/live/session-seq.js +0 -33
- package/dist/lib/mesh/project-board.d.ts +0 -65
- package/dist/lib/mesh/project-board.js +0 -181
- package/dist/lib/mesh/story-status.d.ts +0 -22
- package/dist/lib/mesh/story-status.js +0 -49
- package/dist/lib/monitor.d.ts +0 -149
- package/dist/lib/monitor.js +0 -519
- package/dist/lib/node-binary.d.ts +0 -50
- package/dist/lib/node-binary.js +0 -133
- package/dist/lib/notify-recipient.d.ts +0 -7
- package/dist/lib/notify-recipient.js +0 -11
- package/dist/lib/onboarding/checkpoint.d.ts +0 -13
- package/dist/lib/onboarding/checkpoint.js +0 -44
- package/dist/lib/onboarding/cli/onboard.d.ts +0 -53
- package/dist/lib/onboarding/cli/onboard.js +0 -135
- package/dist/lib/onboarding/cli/prompts.d.ts +0 -28
- package/dist/lib/onboarding/cli/prompts.js +0 -83
- package/dist/lib/onboarding/errors.d.ts +0 -34
- package/dist/lib/onboarding/errors.js +0 -59
- package/dist/lib/onboarding/index.d.ts +0 -13
- package/dist/lib/onboarding/index.js +0 -13
- package/dist/lib/onboarding/orchestrator.d.ts +0 -47
- package/dist/lib/onboarding/orchestrator.js +0 -569
- package/dist/lib/onboarding/types.d.ts +0 -79
- package/dist/lib/onboarding/types.js +0 -8
- package/dist/lib/policy-validator.d.ts +0 -7
- package/dist/lib/policy-validator.js +0 -187
- package/dist/lib/process-flag-company-context.d.ts +0 -8
- package/dist/lib/process-flag-company-context.js +0 -67
- package/dist/lib/report-publish.d.ts +0 -175
- package/dist/lib/report-publish.js +0 -421
- package/dist/lib/report-run.d.ts +0 -62
- package/dist/lib/report-run.js +0 -123
- package/dist/lib/report-snapshot.d.ts +0 -12
- package/dist/lib/report-snapshot.js +0 -135
- package/dist/lib/report-templates.d.ts +0 -9
- package/dist/lib/report-templates.js +0 -21
- package/dist/lib/scaffold-cli-floor.d.ts +0 -8
- package/dist/lib/scaffold-cli-floor.js +0 -50
- package/dist/lib/search-index/collection-path-repair-flag.d.ts +0 -4
- package/dist/lib/search-index/collection-path-repair-flag.js +0 -7
- package/dist/lib/search-index/embed-lock.d.ts +0 -32
- package/dist/lib/search-index/embed-lock.js +0 -286
- package/dist/lib/search-index/load-gate.d.ts +0 -57
- package/dist/lib/search-index/load-gate.js +0 -270
- package/dist/lib/search-index/max-doc-bytes.d.ts +0 -219
- package/dist/lib/search-index/max-doc-bytes.js +0 -463
- package/dist/lib/search-index/qmd-exit-diagnostics.d.ts +0 -5
- package/dist/lib/search-index/qmd-exit-diagnostics.js +0 -40
- package/dist/lib/search-index/reindex-single-flight-flag.d.ts +0 -5
- package/dist/lib/search-index/reindex-single-flight-flag.js +0 -8
- package/dist/lib/service-manager/index.d.ts +0 -42
- package/dist/lib/service-manager/index.js +0 -105
- package/dist/lib/service-manager/launchd.d.ts +0 -81
- package/dist/lib/service-manager/launchd.js +0 -212
- package/dist/lib/service-manager/systemd.d.ts +0 -19
- package/dist/lib/service-manager/systemd.js +0 -72
- package/dist/lib/service-manager/types.d.ts +0 -34
- package/dist/lib/service-manager/types.js +0 -26
- package/dist/lib/test-utils/isolated-flag-company-context.d.ts +0 -3
- package/dist/lib/test-utils/isolated-flag-company-context.js +0 -18
- package/dist/lib/work-context/bind-best.d.ts +0 -66
- package/dist/lib/work-context/bind-best.js +0 -344
- package/dist/lib/work-context/bind-calling-session.d.ts +0 -26
- package/dist/lib/work-context/bind-calling-session.js +0 -63
- package/dist/lib/work-context/company-rebind.d.ts +0 -23
- package/dist/lib/work-context/company-rebind.js +0 -59
- package/dist/lib/work-context/default-company.d.ts +0 -43
- package/dist/lib/work-context/default-company.js +0 -83
- package/dist/lib/work-context/outbox-quarantine-status-flag.d.ts +0 -4
- package/dist/lib/work-context/outbox-quarantine-status-flag.js +0 -7
- package/dist/lib/work-context/prd-sync.d.ts +0 -56
- package/dist/lib/work-context/prd-sync.js +0 -197
- package/dist/lib/work-context/preflight-contract.d.ts +0 -28
- package/dist/lib/work-context/preflight-contract.js +0 -85
- package/dist/lib/work-context/prompt-rebind.d.ts +0 -25
- package/dist/lib/work-context/prompt-rebind.js +0 -85
- package/dist/lib/work-context/windows-acl.d.ts +0 -123
- package/dist/lib/work-context/windows-acl.js +0 -425
- package/dist/lib/workers-registry/read.d.ts +0 -15
- package/dist/lib/workers-registry/read.js +0 -17
- package/dist/native-fast-route.d.ts +0 -7
- package/dist/native-fast-route.js +0 -45
- package/dist/node-network-compat-core.d.ts +0 -12
- package/dist/node-network-compat-core.js +0 -41
- package/dist/node-network-compat-fast.d.ts +0 -7
- package/dist/node-network-compat-fast.js +0 -23
- package/dist/secrets-env-fast-path.d.ts +0 -5
- package/dist/secrets-env-fast-path.js +0 -16
- package/dist/secrets-env-fast-route.d.ts +0 -18
- package/dist/secrets-env-fast-route.js +0 -54
- package/dist/utils/checkpoint-stamp-write-error.d.ts +0 -28
- package/dist/utils/checkpoint-stamp-write-error.js +0 -99
- package/dist/utils/cli-network-lifecycle.d.ts +0 -4
- package/dist/utils/cli-network-lifecycle.js +0 -11
- package/dist/utils/cognito-refresh-sentry.d.ts +0 -3
- package/dist/utils/cognito-refresh-sentry.js +0 -49
- package/dist/utils/console-origin.d.ts +0 -9
- package/dist/utils/console-origin.js +0 -28
- package/dist/utils/exclusive-lock.d.ts +0 -32
- package/dist/utils/exclusive-lock.js +0 -75
- package/dist/utils/fast-stream-errors.d.ts +0 -12
- package/dist/utils/fast-stream-errors.js +0 -18
- package/dist/utils/files-browse-acl.d.ts +0 -5
- package/dist/utils/files-browse-acl.js +0 -11
- package/dist/utils/hq-core-yaml.d.ts +0 -10
- package/dist/utils/hq-core-yaml.js +0 -40
- package/dist/utils/hq-root-resolver.d.ts +0 -13
- package/dist/utils/hq-root-resolver.js +0 -103
- package/dist/utils/redact-url.d.ts +0 -14
- package/dist/utils/redact-url.js +0 -218
- package/dist/utils/scaffold-fast-import-guard.d.ts +0 -2
- package/dist/utils/scaffold-fast-import-guard.js +0 -40
- package/dist/utils/scaffold-packlist-guard.d.ts +0 -7
- package/dist/utils/scaffold-packlist-guard.js +0 -23
- package/dist/utils/scaffold-sibling-references.d.ts +0 -22
- package/dist/utils/scaffold-sibling-references.js +0 -156
- package/dist/utils/secret-load-availability.d.ts +0 -8
- package/dist/utils/secret-load-availability.js +0 -54
- package/dist/utils/staged-install.d.ts +0 -34
- package/dist/utils/staged-install.js +0 -346
- package/dist/utils/staged-npm-install.d.ts +0 -16
- package/dist/utils/staged-npm-install.js +0 -264
- package/dist/utils/sync-log-sources.d.ts +0 -15
- package/dist/utils/sync-log-sources.js +0 -36
- package/dist/utils/table-width.d.ts +0 -7
- package/dist/utils/table-width.js +0 -15
- package/dist/utils/update-command-supervisor.cjs +0 -247
- package/dist/utils/upload-author.d.ts +0 -15
- package/dist/utils/upload-author.js +0 -39
- package/dist/utils/version-report.d.ts +0 -27
- package/dist/utils/version-report.js +0 -105
- package/dist/version-request.d.ts +0 -14
- package/dist/version-request.js +0 -36
- package/scripts/mesh-daemon-if-stale.mjs +0 -20
- package/templates/reports/blank.md +0 -3
- package/templates/reports/daily-digest.md +0 -11
- package/templates/runbooks/update-report.md +0 -21
|
@@ -1,1034 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `hq core sentry report` — constrained diagnostic transport for HQ hooks.
|
|
3
|
-
*
|
|
4
|
-
* The stdin event schema is deliberately closed. Hook payloads can contain
|
|
5
|
-
* commands, prompts, source content, transcript locations, and credentials, so
|
|
6
|
-
* this module accepts only a small set of scalar diagnostics plus bounded hook
|
|
7
|
-
* history and never reads a hook payload or the process environment. The
|
|
8
|
-
* owner-approved `hook_path`
|
|
9
|
-
* diagnostic is the narrow exception: it names the slow hook script and may
|
|
10
|
-
* include its company directory, but never carries the hook payload itself.
|
|
11
|
-
*
|
|
12
|
-
* Invalid top-level input and structurally rich metadata are rejected. The
|
|
13
|
-
* bounded hook sequence is the deliberate exception: it keeps only the most
|
|
14
|
-
* recent entries so diagnostics cannot expand the transport payload. Unknown
|
|
15
|
-
* scalar metadata is dropped instead: the allowlist, not a caller version
|
|
16
|
-
* match, determines what may leave the machine.
|
|
17
|
-
*/
|
|
18
|
-
import { createHash } from "node:crypto";
|
|
19
|
-
import { mkdirSync, readdirSync, readFileSync, renameSync, rmdirSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
20
|
-
import { tmpdir } from "node:os";
|
|
21
|
-
import { dirname, join } from "node:path";
|
|
22
|
-
import * as Sentry from "@sentry/node";
|
|
23
|
-
import { gte as semverGte, valid as validSemver } from "semver";
|
|
24
|
-
import { CLI_VERSION } from "../../cli-version.js";
|
|
25
|
-
import { beforeSend } from "../../sentry-before-send.js";
|
|
26
|
-
import { resolveLiveRoot } from "../../utils/hq-roots.js";
|
|
27
|
-
import { hookTimeoutDebugContextEnabled } from "./hook-timeout-debug-context-flag.js";
|
|
28
|
-
export const DEFAULT_SENTRY_REPORT_TIMEOUT_MS = 750;
|
|
29
|
-
const MAX_SENTRY_REPORT_TIMEOUT_MS = 5_000;
|
|
30
|
-
export const MAX_SENTRY_REPORT_PAYLOAD_BYTES = 2_048;
|
|
31
|
-
export const MAX_SENTRY_REPORT_METADATA_VALUE_BYTES = 256;
|
|
32
|
-
const MAX_SENTRY_REPORT_TYPE_BYTES = 64;
|
|
33
|
-
const MAX_SENTRY_REPORT_MESSAGE_BYTES = 1_024;
|
|
34
|
-
const MAX_SENTRY_REPORT_FINGERPRINT_BYTES = 128;
|
|
35
|
-
const SENTRY_REPORT_LEVELS = new Set([
|
|
36
|
-
"fatal",
|
|
37
|
-
"error",
|
|
38
|
-
"warning",
|
|
39
|
-
"log",
|
|
40
|
-
"info",
|
|
41
|
-
"debug",
|
|
42
|
-
]);
|
|
43
|
-
const HOOK_TIMEOUT_WARNING_TYPE = "hook_timeout_warning";
|
|
44
|
-
const HOOK_TIMEOUT_EXCEEDED_TYPE = "hook_timeout_exceeded";
|
|
45
|
-
const HOOK_LATE_FINISH_TYPE = "hook_late_finish";
|
|
46
|
-
const HOOK_TIMEOUT_WARNING_METRIC = "hq.hook_timeout_warning";
|
|
47
|
-
const HOOK_TIMEOUT_EXCEEDED_METRIC = "hq.hook_timeout_exceeded";
|
|
48
|
-
const MAX_HOOK_SEQUENCE_ENTRIES = 20;
|
|
49
|
-
const MAX_HOOK_TIMEOUT_DEBUG_PHASES = 24;
|
|
50
|
-
const MAX_HOOK_TIMEOUT_DEBUG_MS = 86_400_000;
|
|
51
|
-
// This is the hqVersion embedded in the first hq-core tag whose master-hook
|
|
52
|
-
// replaces BASH_ENV with /dev/null before reading it (tag v15.0.157-beta.2).
|
|
53
|
-
// Earlier cores only report whether BASH_ENV is non-empty, which is ambiguous.
|
|
54
|
-
const BASH_ENV_NEUTRALIZED_CORE_VERSION = "15.0.157-beta.2";
|
|
55
|
-
const HOOK_TIMEOUT_RATE_LIMIT_WINDOW_MS = 10 * 60 * 1_000;
|
|
56
|
-
const RATE_LIMIT_LOCK_WAIT_MS = 500;
|
|
57
|
-
const RATE_LIMIT_LOCK_POLL_MS = 5;
|
|
58
|
-
const RATE_LIMIT_LOCK_STALE_MS = 5_000;
|
|
59
|
-
const KNOWN_HOOK_SCRIPTS = new Set([
|
|
60
|
-
"master-hook.sh",
|
|
61
|
-
"hook-gate.sh",
|
|
62
|
-
"hook-timeout-watchdog.sh",
|
|
63
|
-
"check-hq-update.sh",
|
|
64
|
-
"block-core-writes-bash.sh",
|
|
65
|
-
"block-core-writes.sh",
|
|
66
|
-
"block-hq-worktree-session.sh",
|
|
67
|
-
"inject-policy-on-trigger.sh",
|
|
68
|
-
"inject-local-context.sh",
|
|
69
|
-
"session-title.sh",
|
|
70
|
-
"45-lanes-senior-monitor.sh",
|
|
71
|
-
"lanes-senior-monitor-stop-gate.sh",
|
|
72
|
-
]);
|
|
73
|
-
const DEBUG_CONTEXT_HOOK_NAMES = new Set([
|
|
74
|
-
...KNOWN_HOOK_SCRIPTS,
|
|
75
|
-
"reindex.sh",
|
|
76
|
-
]);
|
|
77
|
-
const DEBUG_CONTEXT_CHILD_NAMES = new Set([
|
|
78
|
-
...DEBUG_CONTEXT_HOOK_NAMES,
|
|
79
|
-
"bash",
|
|
80
|
-
"bash.exe",
|
|
81
|
-
"sh",
|
|
82
|
-
"cmd",
|
|
83
|
-
"cmd.exe",
|
|
84
|
-
"powershell",
|
|
85
|
-
"powershell.exe",
|
|
86
|
-
"wmic.exe",
|
|
87
|
-
"jq",
|
|
88
|
-
"jq.exe",
|
|
89
|
-
"node",
|
|
90
|
-
"node.exe",
|
|
91
|
-
"git",
|
|
92
|
-
"git.exe",
|
|
93
|
-
"python",
|
|
94
|
-
"python.exe",
|
|
95
|
-
"python3",
|
|
96
|
-
"python3.exe",
|
|
97
|
-
"true",
|
|
98
|
-
"sleep",
|
|
99
|
-
"cat",
|
|
100
|
-
"grep",
|
|
101
|
-
"sed",
|
|
102
|
-
"awk",
|
|
103
|
-
"find",
|
|
104
|
-
"timeout",
|
|
105
|
-
"curl",
|
|
106
|
-
"gh",
|
|
107
|
-
"hq",
|
|
108
|
-
"npm",
|
|
109
|
-
"pnpm",
|
|
110
|
-
"npx",
|
|
111
|
-
]);
|
|
112
|
-
const DEBUG_CONTEXT_HOOK_EVENTS = new Set([
|
|
113
|
-
"PreToolUse",
|
|
114
|
-
"PostToolUse",
|
|
115
|
-
"UserPromptSubmit",
|
|
116
|
-
"SessionStart",
|
|
117
|
-
"SessionEnd",
|
|
118
|
-
"Stop",
|
|
119
|
-
"PreCompact",
|
|
120
|
-
"Notification",
|
|
121
|
-
"PermissionRequest",
|
|
122
|
-
"SubagentStart",
|
|
123
|
-
"SubagentStop",
|
|
124
|
-
"TaskCompleted",
|
|
125
|
-
"TeammateIdle",
|
|
126
|
-
]);
|
|
127
|
-
const DEBUG_CONTEXT_PHASES = new Set([
|
|
128
|
-
"startup",
|
|
129
|
-
"source",
|
|
130
|
-
"config_load",
|
|
131
|
-
"policy_load",
|
|
132
|
-
"external_command",
|
|
133
|
-
"output_write",
|
|
134
|
-
"wait",
|
|
135
|
-
"child_wait",
|
|
136
|
-
"probe",
|
|
137
|
-
"parse",
|
|
138
|
-
]);
|
|
139
|
-
/**
|
|
140
|
-
* The only hook diagnostics that can be attached as metadata. The list omits
|
|
141
|
-
* command text, prompts, payloads, company names, and repositories. `hook_path`
|
|
142
|
-
* is owner-approved telemetry for the exact hook script and may include a
|
|
143
|
-
* company directory; it is never a substitute for hook input or a transcript.
|
|
144
|
-
*/
|
|
145
|
-
export const ALLOWED_SENTRY_REPORT_METADATA_KEYS = [
|
|
146
|
-
"hook_name",
|
|
147
|
-
"hook_path",
|
|
148
|
-
"hook_event",
|
|
149
|
-
"hook_script",
|
|
150
|
-
"tool_name",
|
|
151
|
-
"session_id",
|
|
152
|
-
"declared_timeout_ms",
|
|
153
|
-
"elapsed_ms",
|
|
154
|
-
"remaining_ms",
|
|
155
|
-
"watchdog_timeout_ms",
|
|
156
|
-
"hook_timeout_ms",
|
|
157
|
-
"hq_version",
|
|
158
|
-
"platform",
|
|
159
|
-
"load_average",
|
|
160
|
-
"spawn_ms",
|
|
161
|
-
"slow_child",
|
|
162
|
-
"slow_child_ms",
|
|
163
|
-
"exit_code",
|
|
164
|
-
"final_elapsed_ms",
|
|
165
|
-
"bash_env_set",
|
|
166
|
-
"cwd_kind",
|
|
167
|
-
"shell",
|
|
168
|
-
"nproc",
|
|
169
|
-
"hook_sequence",
|
|
170
|
-
"hook_timeout_debug_context",
|
|
171
|
-
];
|
|
172
|
-
const ALLOWED_METADATA_KEYS = new Set(ALLOWED_SENTRY_REPORT_METADATA_KEYS);
|
|
173
|
-
const SENTRY_REPORT_METADATA_KEY_HEADROOM = 2;
|
|
174
|
-
// This tracks the schema rather than a separately-maintained literal. A caller
|
|
175
|
-
// can send every recognised key with room for two later recognised fields,
|
|
176
|
-
// while unknown keys are deliberately dropped.
|
|
177
|
-
export const MAX_SENTRY_REPORT_METADATA_KEYS = ALLOWED_SENTRY_REPORT_METADATA_KEYS.length + SENTRY_REPORT_METADATA_KEY_HEADROOM;
|
|
178
|
-
const defaultDependencies = {
|
|
179
|
-
sentry: Sentry,
|
|
180
|
-
stdout: process.stdout,
|
|
181
|
-
stderr: process.stderr,
|
|
182
|
-
timeoutDebugContextEnabled: (signal) => hookTimeoutDebugContextEnabled({}, signal),
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* Read no more than the accepted event size. Returning early keeps a malformed
|
|
186
|
-
* pipe from making a watchdog retain an unbounded hook payload in memory.
|
|
187
|
-
*/
|
|
188
|
-
export async function readSentryReportStdin(stdin) {
|
|
189
|
-
const chunks = [];
|
|
190
|
-
let totalBytes = 0;
|
|
191
|
-
for await (const chunk of stdin) {
|
|
192
|
-
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
193
|
-
totalBytes += bytes.length;
|
|
194
|
-
if (totalBytes > MAX_SENTRY_REPORT_PAYLOAD_BYTES)
|
|
195
|
-
return null;
|
|
196
|
-
chunks.push(bytes);
|
|
197
|
-
}
|
|
198
|
-
return Buffer.concat(chunks).toString("utf8");
|
|
199
|
-
}
|
|
200
|
-
function isRecord(value) {
|
|
201
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
202
|
-
}
|
|
203
|
-
function byteLength(value) {
|
|
204
|
-
return Buffer.byteLength(value, "utf8");
|
|
205
|
-
}
|
|
206
|
-
function isBoundedString(value, maxBytes) {
|
|
207
|
-
return typeof value === "string" && value.length > 0 && byteLength(value) <= maxBytes;
|
|
208
|
-
}
|
|
209
|
-
function isScalarMetadataValue(value) {
|
|
210
|
-
if (typeof value === "string")
|
|
211
|
-
return byteLength(value) <= MAX_SENTRY_REPORT_METADATA_VALUE_BYTES;
|
|
212
|
-
if (typeof value === "boolean")
|
|
213
|
-
return true;
|
|
214
|
-
return typeof value === "number" && Number.isFinite(value);
|
|
215
|
-
}
|
|
216
|
-
function isHookSequenceEntry(value) {
|
|
217
|
-
if (!isRecord(value))
|
|
218
|
-
return false;
|
|
219
|
-
return (typeof value.script === "string" &&
|
|
220
|
-
value.script.length > 0 &&
|
|
221
|
-
byteLength(value.script) <= MAX_SENTRY_REPORT_METADATA_VALUE_BYTES &&
|
|
222
|
-
typeof value.event === "string" &&
|
|
223
|
-
value.event.length > 0 &&
|
|
224
|
-
byteLength(value.event) <= MAX_SENTRY_REPORT_METADATA_VALUE_BYTES &&
|
|
225
|
-
typeof value.ms === "number" &&
|
|
226
|
-
Number.isFinite(value.ms) &&
|
|
227
|
-
value.ms >= 0);
|
|
228
|
-
}
|
|
229
|
-
function boundedDebugName(value, known) {
|
|
230
|
-
if (typeof value !== "string" || value.length === 0)
|
|
231
|
-
return "other";
|
|
232
|
-
return known.has(basenameFromPath(value)) ? basenameFromPath(value) : "other";
|
|
233
|
-
}
|
|
234
|
-
function boundedDebugPhase(value) {
|
|
235
|
-
return typeof value === "string" && DEBUG_CONTEXT_PHASES.has(value) ? value : "other";
|
|
236
|
-
}
|
|
237
|
-
function boundedDebugHookEvent(value) {
|
|
238
|
-
return typeof value === "string" && DEBUG_CONTEXT_HOOK_EVENTS.has(value) ? value : "other";
|
|
239
|
-
}
|
|
240
|
-
function boundedDebugMilliseconds(value, allowNegative = false) {
|
|
241
|
-
if (typeof value !== "number" || !Number.isFinite(value))
|
|
242
|
-
return null;
|
|
243
|
-
const bounded = allowNegative
|
|
244
|
-
? Math.abs(value) <= MAX_HOOK_TIMEOUT_DEBUG_MS
|
|
245
|
-
: value >= 0 && value <= MAX_HOOK_TIMEOUT_DEBUG_MS;
|
|
246
|
-
return bounded ? value : null;
|
|
247
|
-
}
|
|
248
|
-
function boundedDebugProbe(value) {
|
|
249
|
-
if (value === "unavailable")
|
|
250
|
-
return value;
|
|
251
|
-
return boundedDebugMilliseconds(value) ?? undefined;
|
|
252
|
-
}
|
|
253
|
-
function boundedDebugPhaseTimings(value) {
|
|
254
|
-
if (!Array.isArray(value) || value.length > MAX_HOOK_TIMEOUT_DEBUG_PHASES)
|
|
255
|
-
return null;
|
|
256
|
-
const timings = [];
|
|
257
|
-
for (const entry of value) {
|
|
258
|
-
if (!isRecord(entry))
|
|
259
|
-
return null;
|
|
260
|
-
const elapsed = boundedDebugMilliseconds(entry.elapsed_ms);
|
|
261
|
-
if (elapsed === null)
|
|
262
|
-
return null;
|
|
263
|
-
const timing = {
|
|
264
|
-
phase: boundedDebugPhase(entry.phase),
|
|
265
|
-
elapsed_ms: elapsed,
|
|
266
|
-
};
|
|
267
|
-
timings.push(timing);
|
|
268
|
-
}
|
|
269
|
-
return timings;
|
|
270
|
-
}
|
|
271
|
-
/** Return only the closed, bounded shell-to-CLI context shape. */
|
|
272
|
-
function boundedHookTimeoutDebugContext(value) {
|
|
273
|
-
if (!isRecord(value))
|
|
274
|
-
return null;
|
|
275
|
-
const budget = boundedDebugMilliseconds(value.budget_ms);
|
|
276
|
-
const elapsed = boundedDebugMilliseconds(value.elapsed_ms);
|
|
277
|
-
const remaining = boundedDebugMilliseconds(value.remaining_ms, true);
|
|
278
|
-
const childElapsed = boundedDebugMilliseconds(value.waiting_child_elapsed_ms);
|
|
279
|
-
const phaseTimings = boundedDebugPhaseTimings(value.phase_timings);
|
|
280
|
-
if (budget === null ||
|
|
281
|
-
elapsed === null ||
|
|
282
|
-
remaining === null ||
|
|
283
|
-
childElapsed === null ||
|
|
284
|
-
phaseTimings === null) {
|
|
285
|
-
return null;
|
|
286
|
-
}
|
|
287
|
-
const loadAverage = boundedDebugProbe(value.load_average);
|
|
288
|
-
const spawnMs = boundedDebugProbe(value.spawn_ms);
|
|
289
|
-
const processCount = boundedDebugProbe(value.process_count);
|
|
290
|
-
const hasLoadAverage = typeof loadAverage === "number";
|
|
291
|
-
const hasWindowsProbe = spawnMs !== undefined && processCount !== undefined;
|
|
292
|
-
if (!hasLoadAverage && !hasWindowsProbe)
|
|
293
|
-
return null;
|
|
294
|
-
if (typeof processCount === "number" &&
|
|
295
|
-
(!Number.isInteger(processCount) || processCount > 1_000_000)) {
|
|
296
|
-
return null;
|
|
297
|
-
}
|
|
298
|
-
return {
|
|
299
|
-
hook_name: boundedDebugName(value.hook_name, DEBUG_CONTEXT_HOOK_NAMES),
|
|
300
|
-
hook_event: boundedDebugHookEvent(value.hook_event),
|
|
301
|
-
budget_ms: budget,
|
|
302
|
-
elapsed_ms: elapsed,
|
|
303
|
-
remaining_ms: remaining,
|
|
304
|
-
phase_timings: phaseTimings,
|
|
305
|
-
wait_point: boundedDebugPhase(value.wait_point),
|
|
306
|
-
waiting_child_basename: boundedDebugName(value.waiting_child_basename, DEBUG_CONTEXT_CHILD_NAMES),
|
|
307
|
-
waiting_child_elapsed_ms: childElapsed,
|
|
308
|
-
...(loadAverage !== undefined ? { load_average: loadAverage } : {}),
|
|
309
|
-
...(spawnMs !== undefined ? { spawn_ms: spawnMs } : {}),
|
|
310
|
-
...(processCount !== undefined ? { process_count: processCount } : {}),
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
function boundedHookSequence(value) {
|
|
314
|
-
if (!Array.isArray(value))
|
|
315
|
-
return null;
|
|
316
|
-
const recent = value.slice(-MAX_HOOK_SEQUENCE_ENTRIES);
|
|
317
|
-
if (!recent.every(isHookSequenceEntry))
|
|
318
|
-
return null;
|
|
319
|
-
return recent.map((entry) => ({
|
|
320
|
-
script: basenameFromPath(entry.script),
|
|
321
|
-
event: entry.event,
|
|
322
|
-
ms: entry.ms,
|
|
323
|
-
}));
|
|
324
|
-
}
|
|
325
|
-
function isAllowedMetadataValue(key, value) {
|
|
326
|
-
if (key === "hook_sequence")
|
|
327
|
-
return boundedHookSequence(value) !== null;
|
|
328
|
-
if (key === "hook_timeout_debug_context")
|
|
329
|
-
return boundedHookTimeoutDebugContext(value) !== null;
|
|
330
|
-
if (!isScalarMetadataValue(value))
|
|
331
|
-
return false;
|
|
332
|
-
if (key === "tool_name" || key === "session_id" || key === "hook_path") {
|
|
333
|
-
return typeof value === "string";
|
|
334
|
-
}
|
|
335
|
-
return true;
|
|
336
|
-
}
|
|
337
|
-
/** Unknown metadata is ignored before this cap is evaluated. */
|
|
338
|
-
export function exceedsSentryReportMetadataKeyCap(keys) {
|
|
339
|
-
let recognisedKeys = 0;
|
|
340
|
-
for (const key of keys) {
|
|
341
|
-
if (!ALLOWED_METADATA_KEYS.has(key))
|
|
342
|
-
continue;
|
|
343
|
-
recognisedKeys++;
|
|
344
|
-
if (recognisedKeys > MAX_SENTRY_REPORT_METADATA_KEYS)
|
|
345
|
-
return true;
|
|
346
|
-
}
|
|
347
|
-
return false;
|
|
348
|
-
}
|
|
349
|
-
function invalidInput() {
|
|
350
|
-
return { code: 1 };
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Parse and validate the closed report schema without touching Sentry. The
|
|
354
|
-
* function intentionally returns an ordinary result instead of throwing so a
|
|
355
|
-
* hook can ignore the CLI exit code without creating an unhandled rejection.
|
|
356
|
-
*/
|
|
357
|
-
function parseSentryReportEvent(stdin) {
|
|
358
|
-
if (byteLength(stdin) > MAX_SENTRY_REPORT_PAYLOAD_BYTES)
|
|
359
|
-
return invalidInput();
|
|
360
|
-
let parsed;
|
|
361
|
-
try {
|
|
362
|
-
parsed = JSON.parse(stdin);
|
|
363
|
-
}
|
|
364
|
-
catch {
|
|
365
|
-
return invalidInput();
|
|
366
|
-
}
|
|
367
|
-
if (!isRecord(parsed))
|
|
368
|
-
return invalidInput();
|
|
369
|
-
const allowedTopLevel = new Set(["type", "message", "fingerprint", "level", "metadata"]);
|
|
370
|
-
if (Object.keys(parsed).some((key) => !allowedTopLevel.has(key)))
|
|
371
|
-
return invalidInput();
|
|
372
|
-
if (!isBoundedString(parsed.type, MAX_SENTRY_REPORT_TYPE_BYTES))
|
|
373
|
-
return invalidInput();
|
|
374
|
-
if (!isBoundedString(parsed.message, MAX_SENTRY_REPORT_MESSAGE_BYTES))
|
|
375
|
-
return invalidInput();
|
|
376
|
-
if (!isBoundedString(parsed.fingerprint, MAX_SENTRY_REPORT_FINGERPRINT_BYTES))
|
|
377
|
-
return invalidInput();
|
|
378
|
-
if (typeof parsed.level !== "string" || !SENTRY_REPORT_LEVELS.has(parsed.level)) {
|
|
379
|
-
return invalidInput();
|
|
380
|
-
}
|
|
381
|
-
const rawMetadata = "metadata" in parsed ? parsed.metadata : {};
|
|
382
|
-
if (!isRecord(rawMetadata))
|
|
383
|
-
return invalidInput();
|
|
384
|
-
const metadataKeys = Object.keys(rawMetadata);
|
|
385
|
-
if (exceedsSentryReportMetadataKeyCap(metadataKeys))
|
|
386
|
-
return invalidInput();
|
|
387
|
-
const metadata = {};
|
|
388
|
-
let droppedMetadataKeys = 0;
|
|
389
|
-
for (const key of metadataKeys) {
|
|
390
|
-
if (!ALLOWED_METADATA_KEYS.has(key)) {
|
|
391
|
-
if (!isScalarMetadataValue(rawMetadata[key]))
|
|
392
|
-
return invalidInput();
|
|
393
|
-
droppedMetadataKeys++;
|
|
394
|
-
continue;
|
|
395
|
-
}
|
|
396
|
-
if (!isAllowedMetadataValue(key, rawMetadata[key]))
|
|
397
|
-
return invalidInput();
|
|
398
|
-
metadata[key] = key === "hook_sequence"
|
|
399
|
-
? boundedHookSequence(rawMetadata[key])
|
|
400
|
-
: key === "hook_timeout_debug_context"
|
|
401
|
-
? boundedHookTimeoutDebugContext(rawMetadata[key])
|
|
402
|
-
: rawMetadata[key];
|
|
403
|
-
}
|
|
404
|
-
if (typeof metadata.slow_child === "string") {
|
|
405
|
-
metadata.slow_child = safeSlowChild(metadata);
|
|
406
|
-
}
|
|
407
|
-
return {
|
|
408
|
-
code: 0,
|
|
409
|
-
event: {
|
|
410
|
-
type: parsed.type,
|
|
411
|
-
message: parsed.message,
|
|
412
|
-
fingerprint: parsed.fingerprint,
|
|
413
|
-
level: parsed.level,
|
|
414
|
-
metadata,
|
|
415
|
-
},
|
|
416
|
-
droppedMetadataKeys,
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
function resolveTimeout(timeoutMs) {
|
|
420
|
-
const timeout = timeoutMs ?? DEFAULT_SENTRY_REPORT_TIMEOUT_MS;
|
|
421
|
-
if (!Number.isInteger(timeout) || timeout < 1 || timeout > MAX_SENTRY_REPORT_TIMEOUT_MS)
|
|
422
|
-
return null;
|
|
423
|
-
return timeout;
|
|
424
|
-
}
|
|
425
|
-
function isHookTimeoutEvent(event) {
|
|
426
|
-
return (event.type === HOOK_TIMEOUT_WARNING_TYPE ||
|
|
427
|
-
event.type === HOOK_TIMEOUT_EXCEEDED_TYPE ||
|
|
428
|
-
event.type === HOOK_LATE_FINISH_TYPE);
|
|
429
|
-
}
|
|
430
|
-
function stringMetadata(metadata, key, fallback = "unknown") {
|
|
431
|
-
const value = metadata[key];
|
|
432
|
-
return typeof value === "string" && value.length > 0 ? value : fallback;
|
|
433
|
-
}
|
|
434
|
-
function basenameFromPath(value) {
|
|
435
|
-
const normalized = value.replaceAll("\\", "/");
|
|
436
|
-
const last = normalized.slice(normalized.lastIndexOf("/") + 1);
|
|
437
|
-
return last || "unknown";
|
|
438
|
-
}
|
|
439
|
-
const SAFE_TAG_TEXT = /^[A-Za-z0-9][A-Za-z0-9._:/+() -]{0,127}$/;
|
|
440
|
-
const SAFE_HOOK_EVENT = /^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;
|
|
441
|
-
const SAFE_HOOK_SCRIPT = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
442
|
-
const SAFE_EXIT_CODE = /^(?:-?[0-9]+|running)$/;
|
|
443
|
-
const SAFE_NPROC = /^[0-9]+$/;
|
|
444
|
-
function safeTagValue(value, pattern = SAFE_TAG_TEXT) {
|
|
445
|
-
return pattern.test(value) ? value : "unknown";
|
|
446
|
-
}
|
|
447
|
-
function safeMetadataTag(metadata, key, pattern = SAFE_TAG_TEXT) {
|
|
448
|
-
const value = metadata[key];
|
|
449
|
-
return typeof value === "string" && value.length > 0 ? safeTagValue(value, pattern) : "unknown";
|
|
450
|
-
}
|
|
451
|
-
function hookEvent(metadata) {
|
|
452
|
-
return safeMetadataTag(metadata, "hook_event", SAFE_HOOK_EVENT);
|
|
453
|
-
}
|
|
454
|
-
function hookScript(metadata) {
|
|
455
|
-
const explicit = stringMetadata(metadata, "hook_script", "");
|
|
456
|
-
const path = explicit || stringMetadata(metadata, "hook_path", "");
|
|
457
|
-
return path ? safeTagValue(basenameFromPath(path), SAFE_HOOK_SCRIPT) : "unknown";
|
|
458
|
-
}
|
|
459
|
-
function timeoutElapsedMs(metadata) {
|
|
460
|
-
const finalElapsed = metadata.final_elapsed_ms;
|
|
461
|
-
if (typeof finalElapsed === "number" && Number.isFinite(finalElapsed))
|
|
462
|
-
return finalElapsed;
|
|
463
|
-
const elapsed = metadata.elapsed_ms;
|
|
464
|
-
return typeof elapsed === "number" && Number.isFinite(elapsed) ? elapsed : undefined;
|
|
465
|
-
}
|
|
466
|
-
function formatNumber(value) {
|
|
467
|
-
return value.toFixed(2).replace(/\.00$|(?<=\.[0-9])0$/, "");
|
|
468
|
-
}
|
|
469
|
-
function elapsedBucket(elapsedMs) {
|
|
470
|
-
if (elapsedMs === undefined)
|
|
471
|
-
return "unknown";
|
|
472
|
-
if (elapsedMs < 5_000)
|
|
473
|
-
return "<5s";
|
|
474
|
-
if (elapsedMs < 10_000)
|
|
475
|
-
return "5-10s";
|
|
476
|
-
if (elapsedMs < 20_000)
|
|
477
|
-
return "10-20s";
|
|
478
|
-
if (elapsedMs < 60_000)
|
|
479
|
-
return "20-60s";
|
|
480
|
-
return ">=60s";
|
|
481
|
-
}
|
|
482
|
-
function remainingBucket(remainingMs) {
|
|
483
|
-
return remainingMs < 0
|
|
484
|
-
? `overdue-${elapsedBucket(Math.abs(remainingMs))}`
|
|
485
|
-
: elapsedBucket(remainingMs);
|
|
486
|
-
}
|
|
487
|
-
function loadBucket(loadAverage) {
|
|
488
|
-
if (loadAverage === undefined)
|
|
489
|
-
return "unknown";
|
|
490
|
-
if (loadAverage < 2)
|
|
491
|
-
return "<2";
|
|
492
|
-
if (loadAverage < 5)
|
|
493
|
-
return "2-5";
|
|
494
|
-
if (loadAverage < 10)
|
|
495
|
-
return "5-10";
|
|
496
|
-
if (loadAverage < 20)
|
|
497
|
-
return "10-20";
|
|
498
|
-
return ">=20";
|
|
499
|
-
}
|
|
500
|
-
function parsedLoadAverage(metadata) {
|
|
501
|
-
const value = metadata.load_average;
|
|
502
|
-
if (typeof value === "number" && Number.isFinite(value) && value >= 0)
|
|
503
|
-
return value;
|
|
504
|
-
if (typeof value !== "string")
|
|
505
|
-
return undefined;
|
|
506
|
-
if (value === "unavailable")
|
|
507
|
-
return "unavailable";
|
|
508
|
-
const match = /^\s*\{?\s*([0-9]+(?:\.[0-9]+)?)/.exec(value);
|
|
509
|
-
if (!match)
|
|
510
|
-
return undefined;
|
|
511
|
-
const parsed = Number(match[1]);
|
|
512
|
-
return Number.isFinite(parsed) ? parsed : undefined;
|
|
513
|
-
}
|
|
514
|
-
function operatingSystemName(metadata) {
|
|
515
|
-
const platform = stringMetadata(metadata, "platform", "").toLowerCase();
|
|
516
|
-
if (/windows|win32|mingw|msys|cygwin/.test(platform))
|
|
517
|
-
return "windows";
|
|
518
|
-
if (/darwin|macos|mac os/.test(platform))
|
|
519
|
-
return "macos";
|
|
520
|
-
if (/linux/.test(platform))
|
|
521
|
-
return "linux";
|
|
522
|
-
return "other";
|
|
523
|
-
}
|
|
524
|
-
function spawnMsBucket(metadata) {
|
|
525
|
-
const value = metadata.spawn_ms;
|
|
526
|
-
if (typeof value !== "number" || !Number.isFinite(value) || value < 0)
|
|
527
|
-
return "unavailable";
|
|
528
|
-
if (value < 100)
|
|
529
|
-
return "<100ms";
|
|
530
|
-
if (value < 500)
|
|
531
|
-
return "100-499ms";
|
|
532
|
-
if (value < 1_000)
|
|
533
|
-
return "500-999ms";
|
|
534
|
-
return ">=1000ms";
|
|
535
|
-
}
|
|
536
|
-
function debugSpawnMsBucket(value) {
|
|
537
|
-
if (typeof value !== "number")
|
|
538
|
-
return "unavailable";
|
|
539
|
-
if (value < 100)
|
|
540
|
-
return "<100ms";
|
|
541
|
-
if (value < 500)
|
|
542
|
-
return "100-499ms";
|
|
543
|
-
if (value < 1_000)
|
|
544
|
-
return "500-999ms";
|
|
545
|
-
return ">=1000ms";
|
|
546
|
-
}
|
|
547
|
-
function processCountBucket(value) {
|
|
548
|
-
if (typeof value !== "number")
|
|
549
|
-
return "unavailable";
|
|
550
|
-
if (value < 5)
|
|
551
|
-
return "0-4";
|
|
552
|
-
if (value < 17)
|
|
553
|
-
return "5-16";
|
|
554
|
-
if (value < 65)
|
|
555
|
-
return "17-64";
|
|
556
|
-
return "65+";
|
|
557
|
-
}
|
|
558
|
-
function hookTimeoutDebugContextTags(context) {
|
|
559
|
-
const tags = {
|
|
560
|
-
timeout_debug_hook_name: context.hook_name,
|
|
561
|
-
timeout_debug_hook_event: context.hook_event,
|
|
562
|
-
timeout_debug_budget_bucket: elapsedBucket(context.budget_ms),
|
|
563
|
-
timeout_debug_elapsed_bucket: elapsedBucket(context.elapsed_ms),
|
|
564
|
-
timeout_debug_remaining_bucket: remainingBucket(context.remaining_ms),
|
|
565
|
-
timeout_debug_wait_point: context.wait_point,
|
|
566
|
-
timeout_debug_waiting_child: context.waiting_child_basename,
|
|
567
|
-
timeout_debug_waiting_child_elapsed_bucket: elapsedBucket(context.waiting_child_elapsed_ms),
|
|
568
|
-
timeout_debug_load_bucket: context.load_average === "unavailable"
|
|
569
|
-
? "unavailable"
|
|
570
|
-
: loadBucket(context.load_average),
|
|
571
|
-
timeout_debug_spawn_ms_bucket: debugSpawnMsBucket(context.spawn_ms),
|
|
572
|
-
timeout_debug_process_count_bucket: processCountBucket(context.process_count),
|
|
573
|
-
};
|
|
574
|
-
const phaseElapsed = new Map();
|
|
575
|
-
for (const timing of context.phase_timings) {
|
|
576
|
-
phaseElapsed.set(timing.phase, Math.max(phaseElapsed.get(timing.phase) ?? 0, timing.elapsed_ms));
|
|
577
|
-
}
|
|
578
|
-
for (const [phase, elapsedMs] of phaseElapsed) {
|
|
579
|
-
tags[`timeout_debug_phase_${phase}_bucket`] = elapsedBucket(elapsedMs);
|
|
580
|
-
}
|
|
581
|
-
return tags;
|
|
582
|
-
}
|
|
583
|
-
function safeSlowChild(metadata) {
|
|
584
|
-
const value = metadata.slow_child;
|
|
585
|
-
const slowChildMs = metadata.slow_child_ms;
|
|
586
|
-
const bashEnv = bashEnvTag(metadata);
|
|
587
|
-
const hasMeasuredChild = typeof slowChildMs === "number" && Number.isFinite(slowChildMs) && slowChildMs >= 0;
|
|
588
|
-
if (metadata.hook_event === "SessionStart" &&
|
|
589
|
-
(bashEnv === "profile" || bashEnv === "set") &&
|
|
590
|
-
!hasMeasuredChild &&
|
|
591
|
-
(typeof value !== "string" || value.length === 0 || value === "other")) {
|
|
592
|
-
return "entry-bash-startup";
|
|
593
|
-
}
|
|
594
|
-
if (typeof value !== "string" || !SAFE_HOOK_SCRIPT.test(value))
|
|
595
|
-
return "other";
|
|
596
|
-
return value;
|
|
597
|
-
}
|
|
598
|
-
function isMachineWideHookSlowness(metadata) {
|
|
599
|
-
const spawnMs = metadata.spawn_ms;
|
|
600
|
-
if (typeof spawnMs === "number" && Number.isFinite(spawnMs) && spawnMs >= 500)
|
|
601
|
-
return true;
|
|
602
|
-
if (!Array.isArray(metadata.hook_sequence))
|
|
603
|
-
return false;
|
|
604
|
-
const slowScripts = new Set();
|
|
605
|
-
for (const entry of metadata.hook_sequence) {
|
|
606
|
-
if (entry.ms < 20_000 || !SAFE_HOOK_SCRIPT.test(entry.script))
|
|
607
|
-
continue;
|
|
608
|
-
slowScripts.add(entry.script);
|
|
609
|
-
}
|
|
610
|
-
return slowScripts.size >= 3;
|
|
611
|
-
}
|
|
612
|
-
function bashEnvTag(metadata) {
|
|
613
|
-
const value = metadata.bash_env_set;
|
|
614
|
-
if (value === "profile" || value === "devnull")
|
|
615
|
-
return value;
|
|
616
|
-
if (value === true || value === "set") {
|
|
617
|
-
const coreVersion = metadata.hq_version;
|
|
618
|
-
const parsedCoreVersion = typeof coreVersion === "string" ? validSemver(coreVersion) : null;
|
|
619
|
-
if (!parsedCoreVersion)
|
|
620
|
-
return "unknown";
|
|
621
|
-
return semverGte(parsedCoreVersion, BASH_ENV_NEUTRALIZED_CORE_VERSION) ? "devnull" : "set";
|
|
622
|
-
}
|
|
623
|
-
if (value === false || value === "unset")
|
|
624
|
-
return "unset";
|
|
625
|
-
return "unknown";
|
|
626
|
-
}
|
|
627
|
-
function hookTimeoutTags(event) {
|
|
628
|
-
const metadata = event.metadata;
|
|
629
|
-
const elapsedMs = timeoutElapsedMs(metadata);
|
|
630
|
-
const declaredTimeoutMs = typeof metadata.declared_timeout_ms === "number" && Number.isFinite(metadata.declared_timeout_ms)
|
|
631
|
-
? metadata.declared_timeout_ms
|
|
632
|
-
: undefined;
|
|
633
|
-
const ratio = elapsedMs !== undefined && declaredTimeoutMs !== undefined && declaredTimeoutMs > 0
|
|
634
|
-
? Math.round((elapsedMs / declaredTimeoutMs) * 4) / 4
|
|
635
|
-
: undefined;
|
|
636
|
-
const shell = stringMetadata(metadata, "shell");
|
|
637
|
-
const nproc = metadata.nproc;
|
|
638
|
-
const loadAverage = parsedLoadAverage(metadata);
|
|
639
|
-
const slowChildMs = metadata.slow_child_ms;
|
|
640
|
-
return {
|
|
641
|
-
hook_timeout_kind: hookTimeoutKind(event),
|
|
642
|
-
hook_event: hookEvent(metadata),
|
|
643
|
-
hook_script: hookScript(metadata),
|
|
644
|
-
elapsed_bucket: elapsedBucket(elapsedMs),
|
|
645
|
-
declared_timeout_s: declaredTimeoutMs === undefined ? "unknown" : formatNumber(declaredTimeoutMs / 1_000),
|
|
646
|
-
watchdog_ratio: ratio === undefined ? "unknown" : formatNumber(ratio),
|
|
647
|
-
exit_code: typeof metadata.exit_code === "string" || typeof metadata.exit_code === "number"
|
|
648
|
-
? safeTagValue(String(metadata.exit_code), SAFE_EXIT_CODE)
|
|
649
|
-
: "unknown",
|
|
650
|
-
platform: safeMetadataTag(metadata, "platform"),
|
|
651
|
-
hq_cli_version: CLI_VERSION,
|
|
652
|
-
hq_core_version: safeMetadataTag(metadata, "hq_version"),
|
|
653
|
-
shell: safeTagValue(shell),
|
|
654
|
-
bash_env: bashEnvTag(metadata),
|
|
655
|
-
cwd_kind: safeMetadataTag(metadata, "cwd_kind"),
|
|
656
|
-
os_name: operatingSystemName(metadata),
|
|
657
|
-
load_bucket: loadAverage === "unavailable" ? "unavailable" : loadBucket(loadAverage),
|
|
658
|
-
spawn_ms_bucket: spawnMsBucket(metadata),
|
|
659
|
-
slow_child: safeSlowChild(metadata),
|
|
660
|
-
slow_child_ms_bucket: typeof slowChildMs === "number" && Number.isFinite(slowChildMs)
|
|
661
|
-
? elapsedBucket(slowChildMs)
|
|
662
|
-
: "unknown",
|
|
663
|
-
machine_wide: isMachineWideHookSlowness(metadata) ? "true" : "false",
|
|
664
|
-
nproc: typeof nproc === "number" || typeof nproc === "string"
|
|
665
|
-
? safeTagValue(String(nproc), SAFE_NPROC)
|
|
666
|
-
: "unknown",
|
|
667
|
-
tool_name: safeMetadataTag(metadata, "tool_name"),
|
|
668
|
-
};
|
|
669
|
-
}
|
|
670
|
-
function hookTimeoutKind(event) {
|
|
671
|
-
if (event.type === HOOK_TIMEOUT_EXCEEDED_TYPE || event.type === HOOK_LATE_FINISH_TYPE) {
|
|
672
|
-
return "exceeded";
|
|
673
|
-
}
|
|
674
|
-
const elapsedMs = event.metadata.elapsed_ms;
|
|
675
|
-
const declaredTimeoutMs = event.metadata.declared_timeout_ms;
|
|
676
|
-
return typeof elapsedMs === "number" &&
|
|
677
|
-
typeof declaredTimeoutMs === "number" &&
|
|
678
|
-
elapsedMs >= declaredTimeoutMs
|
|
679
|
-
? "exceeded"
|
|
680
|
-
: "warning";
|
|
681
|
-
}
|
|
682
|
-
function sentryEnvelope(event, overrides, additionalTags = {}) {
|
|
683
|
-
return {
|
|
684
|
-
level: overrides?.level ?? event.level,
|
|
685
|
-
fingerprint: overrides?.fingerprint ?? [safeTagValue(event.fingerprint)],
|
|
686
|
-
tags: {
|
|
687
|
-
sentry_event_type: safeTagValue(event.type),
|
|
688
|
-
...(isHookTimeoutEvent(event) ? hookTimeoutTags(event) : {}),
|
|
689
|
-
...additionalTags,
|
|
690
|
-
},
|
|
691
|
-
extra: event.metadata,
|
|
692
|
-
};
|
|
693
|
-
}
|
|
694
|
-
/** Build the same scrubbed event projection that the live SDK path uses. */
|
|
695
|
-
function scrubbedSentryEnvelope(event, overrides, additionalTags = {}) {
|
|
696
|
-
return beforeSend({
|
|
697
|
-
message: event.message,
|
|
698
|
-
...sentryEnvelope(event, overrides, additionalTags),
|
|
699
|
-
}, {});
|
|
700
|
-
}
|
|
701
|
-
/** Group hook-timeout conditions by normalized kind while retaining triage tags. */
|
|
702
|
-
function hookTimeoutExceededOverrides(event) {
|
|
703
|
-
if (!isHookTimeoutEvent(event))
|
|
704
|
-
return undefined;
|
|
705
|
-
return {
|
|
706
|
-
level: "warning",
|
|
707
|
-
fingerprint: ["hook-timeout", hookTimeoutKind(event)],
|
|
708
|
-
};
|
|
709
|
-
}
|
|
710
|
-
/**
|
|
711
|
-
* Resolve true only when the local transport queue drains within the budget.
|
|
712
|
-
* This does not confirm that the ingest service accepted the event.
|
|
713
|
-
*/
|
|
714
|
-
async function flushWithin(sentry, timeoutMs) {
|
|
715
|
-
return new Promise((resolve) => {
|
|
716
|
-
const timer = setTimeout(() => resolve(false), timeoutMs);
|
|
717
|
-
void Promise.resolve()
|
|
718
|
-
.then(() => sentry.flush(timeoutMs))
|
|
719
|
-
.then((flushed) => {
|
|
720
|
-
clearTimeout(timer);
|
|
721
|
-
resolve(flushed === true);
|
|
722
|
-
}, () => {
|
|
723
|
-
clearTimeout(timer);
|
|
724
|
-
resolve(false);
|
|
725
|
-
});
|
|
726
|
-
});
|
|
727
|
-
}
|
|
728
|
-
function rateLimitDirectory(options, dependencies) {
|
|
729
|
-
if (options.rateLimitDirectory)
|
|
730
|
-
return options.rateLimitDirectory;
|
|
731
|
-
if (options.hqRoot)
|
|
732
|
-
return join(options.hqRoot, "workspace", "tmp", "sentry-hook-timeouts");
|
|
733
|
-
if (dependencies.rateLimitDirectory)
|
|
734
|
-
return dependencies.rateLimitDirectory;
|
|
735
|
-
try {
|
|
736
|
-
return join(resolveLiveRoot(), "workspace", "tmp", "sentry-hook-timeouts");
|
|
737
|
-
}
|
|
738
|
-
catch {
|
|
739
|
-
dependencies.stderr.write("Sentry timeout rate limit root unavailable; using process temp.\n");
|
|
740
|
-
return join(tmpdir(), "hq-cli-sentry-hook-timeouts");
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
function rateLimitStatePath(directory, key) {
|
|
744
|
-
const digest = createHash("sha256").update(key).digest("hex");
|
|
745
|
-
return join(directory, `${digest}.json`);
|
|
746
|
-
}
|
|
747
|
-
function readRateLimitState(statePath) {
|
|
748
|
-
try {
|
|
749
|
-
const parsed = JSON.parse(readFileSync(statePath, "utf8"));
|
|
750
|
-
if (typeof parsed.lastCapturedAt !== "number" ||
|
|
751
|
-
!Number.isFinite(parsed.lastCapturedAt) ||
|
|
752
|
-
typeof parsed.suppressedCount !== "number" ||
|
|
753
|
-
!Number.isInteger(parsed.suppressedCount) ||
|
|
754
|
-
parsed.suppressedCount < 0) {
|
|
755
|
-
throw new Error("invalid timeout rate limit state");
|
|
756
|
-
}
|
|
757
|
-
return parsed;
|
|
758
|
-
}
|
|
759
|
-
catch (error) {
|
|
760
|
-
if (error.code === "ENOENT")
|
|
761
|
-
return undefined;
|
|
762
|
-
throw new Error("Unable to read the timeout rate limit state", { cause: error });
|
|
763
|
-
}
|
|
764
|
-
}
|
|
765
|
-
function writeRateLimitState(statePath, state) {
|
|
766
|
-
mkdirSync(dirname(statePath), { recursive: true, mode: 0o700 });
|
|
767
|
-
const temporaryPath = `${statePath}.${process.pid}.${Date.now()}.tmp`;
|
|
768
|
-
writeFileSync(temporaryPath, `${JSON.stringify(state)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
769
|
-
renameSync(temporaryPath, statePath);
|
|
770
|
-
}
|
|
771
|
-
function sleepForRateLimitLock(milliseconds) {
|
|
772
|
-
const signal = new Int32Array(new SharedArrayBuffer(4));
|
|
773
|
-
Atomics.wait(signal, 0, 0, milliseconds);
|
|
774
|
-
}
|
|
775
|
-
function releaseRateLimitLock(lockPath) {
|
|
776
|
-
try {
|
|
777
|
-
rmdirSync(lockPath);
|
|
778
|
-
}
|
|
779
|
-
catch (error) {
|
|
780
|
-
if (error.code !== "ENOENT")
|
|
781
|
-
throw error;
|
|
782
|
-
}
|
|
783
|
-
}
|
|
784
|
-
function acquireRateLimitLock(directory) {
|
|
785
|
-
mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
786
|
-
const lockPath = join(directory, ".lock");
|
|
787
|
-
const deadline = Date.now() + RATE_LIMIT_LOCK_WAIT_MS;
|
|
788
|
-
for (;;) {
|
|
789
|
-
try {
|
|
790
|
-
mkdirSync(lockPath, { mode: 0o700 });
|
|
791
|
-
let released = false;
|
|
792
|
-
return () => {
|
|
793
|
-
if (released)
|
|
794
|
-
return;
|
|
795
|
-
released = true;
|
|
796
|
-
releaseRateLimitLock(lockPath);
|
|
797
|
-
};
|
|
798
|
-
}
|
|
799
|
-
catch (error) {
|
|
800
|
-
if (error.code !== "EEXIST")
|
|
801
|
-
throw error;
|
|
802
|
-
try {
|
|
803
|
-
if (Date.now() - statSync(lockPath).mtimeMs >= RATE_LIMIT_LOCK_STALE_MS) {
|
|
804
|
-
releaseRateLimitLock(lockPath);
|
|
805
|
-
continue;
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
catch (statError) {
|
|
809
|
-
if (statError.code !== "ENOENT")
|
|
810
|
-
throw statError;
|
|
811
|
-
continue;
|
|
812
|
-
}
|
|
813
|
-
if (Date.now() >= deadline)
|
|
814
|
-
throw new Error("Timed out acquiring the Sentry timeout rate limit lock");
|
|
815
|
-
sleepForRateLimitLock(RATE_LIMIT_LOCK_POLL_MS);
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
function pruneExpiredRateLimitState(directory, now, protectedStatePath) {
|
|
820
|
-
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
821
|
-
if (!entry.isFile() || !entry.name.endsWith(".json"))
|
|
822
|
-
continue;
|
|
823
|
-
const statePath = join(directory, entry.name);
|
|
824
|
-
if (statePath === protectedStatePath)
|
|
825
|
-
continue;
|
|
826
|
-
const state = readRateLimitState(statePath);
|
|
827
|
-
if (state &&
|
|
828
|
-
now >= state.lastCapturedAt &&
|
|
829
|
-
now - state.lastCapturedAt >= HOOK_TIMEOUT_RATE_LIMIT_WINDOW_MS) {
|
|
830
|
-
try {
|
|
831
|
-
unlinkSync(statePath);
|
|
832
|
-
}
|
|
833
|
-
catch (error) {
|
|
834
|
-
if (error.code !== "ENOENT")
|
|
835
|
-
throw error;
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
}
|
|
840
|
-
function timeoutRateLimitLease(event, kind, options, dependencies) {
|
|
841
|
-
const sessionId = stringMetadata(event.metadata, "session_id");
|
|
842
|
-
const machineWide = isMachineWideHookSlowness(event.metadata);
|
|
843
|
-
const classification = machineWide
|
|
844
|
-
? `machine-wide\0${operatingSystemName(event.metadata)}`
|
|
845
|
-
: `per-script\0${hookScript(event.metadata)}`;
|
|
846
|
-
const key = `${sessionId}\0${hookEvent(event.metadata)}\0${kind}\0${classification}`;
|
|
847
|
-
const directory = rateLimitDirectory(options, dependencies);
|
|
848
|
-
const statePath = rateLimitStatePath(directory, key);
|
|
849
|
-
const releaseLock = acquireRateLimitLock(directory);
|
|
850
|
-
const now = options.rateLimitNow?.() ?? dependencies.rateLimitNow?.() ?? Date.now();
|
|
851
|
-
try {
|
|
852
|
-
pruneExpiredRateLimitState(directory, now, statePath);
|
|
853
|
-
const current = readRateLimitState(statePath);
|
|
854
|
-
if (current &&
|
|
855
|
-
now >= current.lastCapturedAt &&
|
|
856
|
-
now - current.lastCapturedAt < HOOK_TIMEOUT_RATE_LIMIT_WINDOW_MS) {
|
|
857
|
-
writeRateLimitState(statePath, {
|
|
858
|
-
lastCapturedAt: current.lastCapturedAt,
|
|
859
|
-
suppressedCount: current.suppressedCount + 1,
|
|
860
|
-
});
|
|
861
|
-
releaseLock();
|
|
862
|
-
return {
|
|
863
|
-
capture: false,
|
|
864
|
-
suppressedSinceLast: 0,
|
|
865
|
-
commitCapture: () => undefined,
|
|
866
|
-
release: () => undefined,
|
|
867
|
-
};
|
|
868
|
-
}
|
|
869
|
-
let released = false;
|
|
870
|
-
const release = () => {
|
|
871
|
-
if (released)
|
|
872
|
-
return;
|
|
873
|
-
released = true;
|
|
874
|
-
releaseLock();
|
|
875
|
-
};
|
|
876
|
-
let committed = false;
|
|
877
|
-
return {
|
|
878
|
-
capture: true,
|
|
879
|
-
suppressedSinceLast: current?.suppressedCount ?? 0,
|
|
880
|
-
commitCapture: () => {
|
|
881
|
-
if (committed)
|
|
882
|
-
return;
|
|
883
|
-
if (released)
|
|
884
|
-
throw new Error("Sentry timeout rate limit lease was released before capture");
|
|
885
|
-
writeRateLimitState(statePath, { lastCapturedAt: now, suppressedCount: 0 });
|
|
886
|
-
committed = true;
|
|
887
|
-
release();
|
|
888
|
-
},
|
|
889
|
-
release,
|
|
890
|
-
};
|
|
891
|
-
}
|
|
892
|
-
catch (error) {
|
|
893
|
-
releaseLock();
|
|
894
|
-
throw error;
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
function metricAttributes(metadata) {
|
|
898
|
-
const attributes = Object.fromEntries(Object.entries(metadata)
|
|
899
|
-
.filter(([, value]) => isScalarMetadataValue(value))
|
|
900
|
-
.map(([key, value]) => [key, typeof value === "string" ? safeTagValue(value) : value]));
|
|
901
|
-
if (Object.hasOwn(metadata, "bash_env_set")) {
|
|
902
|
-
attributes.bash_env_set = bashEnvTag(metadata);
|
|
903
|
-
}
|
|
904
|
-
return attributes;
|
|
905
|
-
}
|
|
906
|
-
function addHookSequenceBreadcrumbs(event, dependencies) {
|
|
907
|
-
const sequence = event.metadata.hook_sequence;
|
|
908
|
-
if (!Array.isArray(sequence))
|
|
909
|
-
return;
|
|
910
|
-
for (const entry of sequence) {
|
|
911
|
-
dependencies.sentry.addBreadcrumb({
|
|
912
|
-
category: "hq.hook",
|
|
913
|
-
message: `${entry.script} ${entry.event} ${entry.ms}ms`,
|
|
914
|
-
});
|
|
915
|
-
}
|
|
916
|
-
}
|
|
917
|
-
async function reportSuppressedTimeout(result, event, timeoutMs, dependencies, kind) {
|
|
918
|
-
const metricName = kind === "exceeded" ? HOOK_TIMEOUT_EXCEEDED_METRIC : HOOK_TIMEOUT_WARNING_METRIC;
|
|
919
|
-
try {
|
|
920
|
-
dependencies.sentry.metrics.count(metricName, 1, {
|
|
921
|
-
attributes: metricAttributes(event.metadata),
|
|
922
|
-
});
|
|
923
|
-
if (await flushWithin(dependencies.sentry, timeoutMs))
|
|
924
|
-
return result;
|
|
925
|
-
}
|
|
926
|
-
catch {
|
|
927
|
-
// Report failure below without exposing event fields or transport details.
|
|
928
|
-
}
|
|
929
|
-
dependencies.stderr.write("Sentry report failed.\n");
|
|
930
|
-
return invalidInput();
|
|
931
|
-
}
|
|
932
|
-
/**
|
|
933
|
-
* Capture one validated Sentry message and wait only for the supplied bounded
|
|
934
|
-
* flush budget. A zero result means the event entered the local transport and
|
|
935
|
-
* its queue drained in time, not that ingest accepted it. Normal reports are
|
|
936
|
-
* silent on stdout; dry-runs print the same scrubbed event projection used by
|
|
937
|
-
* the live path. All failures use a generic stderr line so malformed input and
|
|
938
|
-
* transport errors cannot echo event data back to a hook.
|
|
939
|
-
*/
|
|
940
|
-
export async function reportSentryEvent(stdin, options = {}, dependencies = defaultDependencies) {
|
|
941
|
-
const timeoutMs = resolveTimeout(options.timeoutMs);
|
|
942
|
-
const result = parseSentryReportEvent(stdin);
|
|
943
|
-
if (timeoutMs === null || result.code !== 0 || !result.event) {
|
|
944
|
-
dependencies.stderr.write("Invalid Sentry report input.\n");
|
|
945
|
-
return invalidInput();
|
|
946
|
-
}
|
|
947
|
-
if (result.droppedMetadataKeys) {
|
|
948
|
-
const noun = result.droppedMetadataKeys === 1 ? "key" : "keys";
|
|
949
|
-
dependencies.stderr.write(`Dropped ${result.droppedMetadataKeys} unsupported Sentry report metadata ${noun}.\n`);
|
|
950
|
-
}
|
|
951
|
-
let event = result.event;
|
|
952
|
-
let debugContextTags = {};
|
|
953
|
-
const debugContext = event.metadata.hook_timeout_debug_context;
|
|
954
|
-
if (debugContext && isHookTimeoutEvent(event)) {
|
|
955
|
-
let enabled;
|
|
956
|
-
try {
|
|
957
|
-
enabled =
|
|
958
|
-
(await dependencies.timeoutDebugContextEnabled?.(options.signal)) ?? false;
|
|
959
|
-
}
|
|
960
|
-
catch {
|
|
961
|
-
// An optional diagnostic flag read must never suppress the base report.
|
|
962
|
-
enabled = false;
|
|
963
|
-
}
|
|
964
|
-
if (enabled) {
|
|
965
|
-
debugContextTags = hookTimeoutDebugContextTags(debugContext);
|
|
966
|
-
}
|
|
967
|
-
else {
|
|
968
|
-
const metadata = { ...event.metadata };
|
|
969
|
-
delete metadata.hook_timeout_debug_context;
|
|
970
|
-
event = { ...event, metadata };
|
|
971
|
-
}
|
|
972
|
-
}
|
|
973
|
-
else if (debugContext) {
|
|
974
|
-
const metadata = { ...event.metadata };
|
|
975
|
-
delete metadata.hook_timeout_debug_context;
|
|
976
|
-
event = { ...event, metadata };
|
|
977
|
-
}
|
|
978
|
-
result.event = event;
|
|
979
|
-
const overrides = hookTimeoutExceededOverrides(event);
|
|
980
|
-
if (options.dryRun) {
|
|
981
|
-
const scrubbed = scrubbedSentryEnvelope(event, overrides, debugContextTags);
|
|
982
|
-
if (scrubbed)
|
|
983
|
-
dependencies.stdout.write(`${JSON.stringify(scrubbed)}\n`);
|
|
984
|
-
return result;
|
|
985
|
-
}
|
|
986
|
-
if (isHookTimeoutEvent(event)) {
|
|
987
|
-
addHookSequenceBreadcrumbs(event, dependencies);
|
|
988
|
-
const kind = hookTimeoutKind(event);
|
|
989
|
-
let rateLimit;
|
|
990
|
-
try {
|
|
991
|
-
rateLimit = timeoutRateLimitLease(event, kind, options, dependencies);
|
|
992
|
-
}
|
|
993
|
-
catch {
|
|
994
|
-
dependencies.stderr.write("Sentry timeout rate limit state unavailable; sending without rate limiting.\n");
|
|
995
|
-
rateLimit = {
|
|
996
|
-
capture: true,
|
|
997
|
-
suppressedSinceLast: 0,
|
|
998
|
-
commitCapture: () => undefined,
|
|
999
|
-
release: () => undefined,
|
|
1000
|
-
};
|
|
1001
|
-
}
|
|
1002
|
-
if (!rateLimit.capture) {
|
|
1003
|
-
return reportSuppressedTimeout(result, event, timeoutMs, dependencies, kind);
|
|
1004
|
-
}
|
|
1005
|
-
const tags = rateLimit.suppressedSinceLast > 0
|
|
1006
|
-
? { suppressed_since_last: String(rateLimit.suppressedSinceLast) }
|
|
1007
|
-
: {};
|
|
1008
|
-
const envelope = sentryEnvelope(event, overrides, { ...debugContextTags, ...tags });
|
|
1009
|
-
try {
|
|
1010
|
-
dependencies.sentry.captureMessage(event.message, envelope);
|
|
1011
|
-
rateLimit.commitCapture();
|
|
1012
|
-
if (await flushWithin(dependencies.sentry, timeoutMs))
|
|
1013
|
-
return result;
|
|
1014
|
-
}
|
|
1015
|
-
catch {
|
|
1016
|
-
rateLimit.release();
|
|
1017
|
-
// Report failure below without exposing event fields or transport details.
|
|
1018
|
-
}
|
|
1019
|
-
dependencies.stderr.write("Sentry report failed.\n");
|
|
1020
|
-
return invalidInput();
|
|
1021
|
-
}
|
|
1022
|
-
const envelope = sentryEnvelope(event, overrides, debugContextTags);
|
|
1023
|
-
try {
|
|
1024
|
-
dependencies.sentry.captureMessage(event.message, envelope);
|
|
1025
|
-
if (await flushWithin(dependencies.sentry, timeoutMs))
|
|
1026
|
-
return result;
|
|
1027
|
-
}
|
|
1028
|
-
catch {
|
|
1029
|
-
// Report failure below without exposing event fields or transport details.
|
|
1030
|
-
}
|
|
1031
|
-
dependencies.stderr.write("Sentry report failed.\n");
|
|
1032
|
-
return invalidInput();
|
|
1033
|
-
}
|
|
1034
|
-
//# sourceMappingURL=sentry-report.js.map
|