@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,1040 +0,0 @@
|
|
|
1
|
-
/** Native implementations of the five `hq core delegate` shell companions. */
|
|
2
|
-
import { spawnSync } from "node:child_process";
|
|
3
|
-
import * as fs from "node:fs";
|
|
4
|
-
import * as os from "node:os";
|
|
5
|
-
import * as path from "node:path";
|
|
6
|
-
import { serializeJqJson } from "../lib/core-utils/jq-json-serializer.js";
|
|
7
|
-
import { resolveWindowsExecutable } from "../lib/bot/runtime/windows.js";
|
|
8
|
-
import { describeCoreCommand } from "./core-command-catalog.js";
|
|
9
|
-
import { resolveLiveRoot } from "../utils/hq-roots.js";
|
|
10
|
-
import { runBundledScript } from "../utils/run-bundled-script.js";
|
|
11
|
-
export const CORE_NATIVE_DELEGATE_FLAG = "core-native-delegate";
|
|
12
|
-
const SCRIPT_ASSETS = {
|
|
13
|
-
resolve: "core/scripts/hq-delegate-resolve.sh",
|
|
14
|
-
pickup: "core/scripts/hq-delegate-pickup.sh",
|
|
15
|
-
repo: "core/scripts/hq-delegate-repo.sh",
|
|
16
|
-
secrets: "core/scripts/hq-delegate-secrets.sh",
|
|
17
|
-
transfer: "core/scripts/hq-delegate-transfer.sh",
|
|
18
|
-
};
|
|
19
|
-
const COMMAND_DESCRIPTIONS = {
|
|
20
|
-
resolve: "Resolve a delegation recipient to a confirmed principal",
|
|
21
|
-
pickup: "Record or check evidence that a recipient picked up a delegation",
|
|
22
|
-
repo: "Prepare and record repository handover state",
|
|
23
|
-
secrets: "Grant a recipient access to declared secret names",
|
|
24
|
-
transfer: "Transfer local project ownership to a delegation recipient",
|
|
25
|
-
};
|
|
26
|
-
function writeOut(value) {
|
|
27
|
-
process.stdout.write(value);
|
|
28
|
-
}
|
|
29
|
-
function writeErr(value) {
|
|
30
|
-
process.stderr.write(value);
|
|
31
|
-
}
|
|
32
|
-
function runCapturedShell(asset, args, context) {
|
|
33
|
-
const result = runBundledScript({
|
|
34
|
-
asset,
|
|
35
|
-
args,
|
|
36
|
-
cwd: context.cwd,
|
|
37
|
-
...(context.root ? { hqRoot: context.root } : {}),
|
|
38
|
-
captureOutput: true,
|
|
39
|
-
});
|
|
40
|
-
if (result.stdout?.length)
|
|
41
|
-
process.stdout.write(result.stdout);
|
|
42
|
-
if (result.stderr?.length)
|
|
43
|
-
process.stderr.write(result.stderr);
|
|
44
|
-
return result.code;
|
|
45
|
-
}
|
|
46
|
-
const USAGE_TEXT = {
|
|
47
|
-
resolve: "hq-delegate-resolve.sh — resolve a delegation recipient to a confirmed\nprincipal (person email / prs_ uid, or fleet-agent agt_ uid). Read-only.\n\nUsage:\n core/scripts/hq-delegate-resolve.sh --company <slug> --to <token>\n\nOutput (stdout, JSON): {kind, principal, displayName, source}\n kind — \"person\" | \"agent\"\n principal — confirmed email, prs_… or agt_… uid\n source — \"verbatim\" | \"people-resolve\" | \"agents-list\"\n\nExit codes:\n 0 — resolved\n 1 — usage error (missing/invalid arguments)\n 3 — ambiguous: candidate list printed to stdout as JSON\n {status:\"ambiguous\", matches:[…]} — caller must present a picker\n 4 — not found (or found with no email): plain message on stderr\n\nTenancy: every lookup is scoped with an explicit --company. This helper\nnever enumerates or falls back across companies — single-company by\nconstruction, matching the /dm skill's resolution contract.\n\nFast path: a token containing \"@\" or starting with prs_ / agt_ passes\nthrough verbatim with NO lookup, preserving existing invocations exactly.\n",
|
|
48
|
-
// Preserve the companion usage function’s historical raw source lines.
|
|
49
|
-
pickup: "# hq-core: public\n# hq-delegate-pickup.sh — close the delegation loop with a receipt or a FAILED\n# state (2026-09-07).\n#\n# Why: the delegate pipeline ended at \"sent\", which is a send receipt, not a\n# delivery receipt. Seven delegations sat at sent/building with no way to tell\n# whether the recipient could act. This script adds the two missing states:\n#\n# sent --(evidence)--> picked-up recipient demonstrably has the work\n# sent --(silence past window)--> failed nobody picked it up; sender is told why\n#\n# Evidence, checked in order (any one suffices):\n# 1. --ack \"<text>\" an explicit acknowledgement (DM reply, chat) —\n# recorded verbatim with a timestamp\n# 2. repo branch has a commit by the recipient after sentAt\n# (manifest.repo.path + repo.branch, author email == to.principal)\n# 3. --evidence \"<free text>\" any other proof the operator observed\n#\n# Usage:\n# hq-delegate-pickup.sh --manifest <path> --ack \"<text>\" # record receipt\n# hq-delegate-pickup.sh --manifest <path> --evidence \"<text>\" # record receipt\n# hq-delegate-pickup.sh --manifest <path> --check [--window-hours N] # probe repo; fail if silent past window (default 72)\n# hq-delegate-pickup.sh --manifest <path> --status # print state line\n#\n# Exit 0: picked-up (or already). Exit 5: failed (window elapsed, no evidence).\n# Exit 6: still waiting (inside window, no evidence). Exit 2: usage/precondition.\nset -uo pipefail\n",
|
|
50
|
-
repo: "hq-delegate-repo.sh — code/branch handover for a delegation: make sure the\nproject's branch exists on the remote, record uncommitted work as NOT\ntransferred, and verify the recipient's repository access read-only.\n\nUsage:\n core/scripts/hq-delegate-repo.sh --manifest <path> [--yes] [--github-user <login>]\n\nBehavior (driven by the manifest's repo{} block; no-op when repo is null):\n - records remote URL and the branch's headSha into the manifest\n - a branch that exists only locally requires confirmation: without --yes\n the helper prints the plan and exits 2; with --yes it pushes via an\n explicitly anchored `git -C <abs path> push -u origin <branch>`\n - dirty/untracked files are captured into repo.dirtyFiles[] and appended\n to BRIEF.md as work NOT transferred — never silently dropped\n - recipient access is checked read-only via gh when --github-user is\n given; otherwise (or on a gh failure) repo.accessVerified stays false\n and the brief says so plainly — the helper never claims unverified access\n - never touches vaultPrefixes[] and never pushes repo content to the vault\n\nEnv: HQ_ROOT — HQ root override (default: resolved from script location)\n",
|
|
51
|
-
secrets: "hq-delegate-secrets.sh — grant a delegation recipient access to the secrets\na project needs, BY NAME ONLY. No command in this helper ever reads,\nprints, logs, or interpolates a secret value.\n\nUsage:\n core/scripts/hq-delegate-secrets.sh --manifest <path> [--yes] [--no-secrets]\n [--env-schema <path>]\n\nBehavior:\n - derives required secret NAMES from the project's / repo's .env.schema\n (--env-schema overrides discovery); no schema -> records secrets: []\n and says so plainly rather than guessing at credentials\n - without --yes: prints a full-prose confirmation listing every name and\n the principal, then exits 2 granting nothing — this step is a privilege\n handover and gets its own confirmation, separate from the file grants\n - with --yes: hq secrets share <NAME> --with <principal> --permission read\n per name, then records the names (and only the names) in the manifest\n - --no-secrets: skips everything, records {secrets: [], secretsSkipped: true}\n\nConsumption on the recipient's side is via `hq run` / `hq secrets exec` —\ndocumented in the brief; values never appear in any delegation artifact\n(policy hq-delegate-never-inlines-secrets-or-share-urls).\n",
|
|
52
|
-
transfer: "hq-delegate-transfer.sh — make a delegation real everywhere HQ tracks\nownership: board entry, PRD metadata, work mesh, and the project journal.\n\nUsage:\n core/scripts/hq-delegate-transfer.sh --manifest <path>\n\nBehavior (mode \"transfer\"; mode \"share\" skips every mutation):\n 1. companies/<co>/board.json — the project's entry gets owner=<recipient>\n and a bumped updated_at; created (once) if absent\n 2. prd.json metadata gains owner, delegatedFrom, delegatedAt\n 3. work-mesh: `done` event closes the delegator's in-progress thread and\n broadcasts the reassignment; silently skipped when the helper is\n unavailable (local/offline installs) — the transfer still succeeds\n 4. a dated \"Delegated\" stanza is appended to the project journal naming\n the recipient, delegation id, and transferred scope\n\nIdempotent: re-running updates owner/timestamps in place — never a\nduplicate board entry, never a duplicated journal stanza.\n\nThe delegator's own vault access is untouched (granting the recipient\nwrite does not revoke anything).\n\nEnv: HQ_ROOT — HQ root override (default: resolved from script location)\n",
|
|
53
|
-
};
|
|
54
|
-
function usage(name) {
|
|
55
|
-
return USAGE_TEXT[name];
|
|
56
|
-
}
|
|
57
|
-
function commandPath(name, cwd = process.cwd(), options = {}) {
|
|
58
|
-
const env = options.env ?? process.env;
|
|
59
|
-
if ((options.platform ?? process.platform) === "win32") {
|
|
60
|
-
const existsSync = options.existsSync ?? ((candidate) => {
|
|
61
|
-
try {
|
|
62
|
-
return fs.statSync(candidate).isFile();
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
return resolveWindowsExecutable(name, env, existsSync, cwd) ?? undefined;
|
|
69
|
-
}
|
|
70
|
-
const directories = (env.PATH ?? "").split(path.delimiter);
|
|
71
|
-
for (const directory of directories) {
|
|
72
|
-
const candidate = path.resolve(cwd, directory || ".", name);
|
|
73
|
-
try {
|
|
74
|
-
fs.accessSync(candidate, fs.constants.X_OK);
|
|
75
|
-
if (fs.statSync(candidate).isFile())
|
|
76
|
-
return candidate;
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
const code = error.code;
|
|
80
|
-
if (code !== "ENOENT" && code !== "ENOTDIR" && code !== "EACCES")
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
export function commandExists(name, cwd = process.cwd(), options = {}) {
|
|
87
|
-
return commandPath(name, cwd, options) !== undefined;
|
|
88
|
-
}
|
|
89
|
-
export function subprocess(command, args, cwd, options = {}) {
|
|
90
|
-
const result = spawnSync(command, args, {
|
|
91
|
-
cwd,
|
|
92
|
-
env: { ...process.env, ...options.env },
|
|
93
|
-
input: options.input,
|
|
94
|
-
maxBuffer: options.maxBuffer,
|
|
95
|
-
encoding: "buffer",
|
|
96
|
-
stdio: [options.input === undefined ? options.stdinFd ?? "inherit" : "pipe", options.stdout === "inherit" ? "inherit" : options.stdout === "ignore" ? "ignore" : "pipe", options.stderr === "pipe" ? "pipe" : options.stderr ?? "inherit"],
|
|
97
|
-
});
|
|
98
|
-
if (result.error) {
|
|
99
|
-
const stderr = Buffer.from(result.error.message);
|
|
100
|
-
return { code: 127, stderr: stderr.toString("utf8"), stderrBytes: stderr, stdout: "", stdoutBytes: Buffer.alloc(0) };
|
|
101
|
-
}
|
|
102
|
-
const stdoutBytes = Buffer.isBuffer(result.stdout) ? result.stdout : Buffer.alloc(0);
|
|
103
|
-
const stderrBytes = Buffer.isBuffer(result.stderr) ? result.stderr : Buffer.alloc(0);
|
|
104
|
-
return {
|
|
105
|
-
code: result.status ?? (result.signal ? 128 : 1),
|
|
106
|
-
stdout: stdoutBytes.toString("utf8"),
|
|
107
|
-
stderr: stderrBytes.toString("utf8"),
|
|
108
|
-
stdoutBytes,
|
|
109
|
-
stderrBytes,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
export function isRecord(value) {
|
|
113
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
114
|
-
}
|
|
115
|
-
export function readJsonText(text) {
|
|
116
|
-
return JSON.parse(text);
|
|
117
|
-
}
|
|
118
|
-
export function readJsonFile(file) {
|
|
119
|
-
return readJsonText(fs.readFileSync(file, "utf8"));
|
|
120
|
-
}
|
|
121
|
-
function jqValid(file) {
|
|
122
|
-
try {
|
|
123
|
-
const value = readJsonFile(file);
|
|
124
|
-
// `jq -e .` exits non-zero when its result is null or false.
|
|
125
|
-
return value !== null && value !== false;
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
function jqTruthy(value) {
|
|
132
|
-
return value !== null && value !== undefined && value !== false;
|
|
133
|
-
}
|
|
134
|
-
export function jqFallback(value, fallback = "") {
|
|
135
|
-
return jqTruthy(value) ? value : fallback;
|
|
136
|
-
}
|
|
137
|
-
export function jsonAt(value, dottedPath) {
|
|
138
|
-
let current = value;
|
|
139
|
-
for (const part of dottedPath.split(".")) {
|
|
140
|
-
current = isRecord(current) ? current[part] : undefined;
|
|
141
|
-
}
|
|
142
|
-
return current;
|
|
143
|
-
}
|
|
144
|
-
export function rawJsonValue(value) {
|
|
145
|
-
return serializeJqJson(value, "raw").replace(/\n+$/, "");
|
|
146
|
-
}
|
|
147
|
-
export function jqRawPath(value, dottedPath, fallback = "") {
|
|
148
|
-
const found = jsonAt(value, dottedPath);
|
|
149
|
-
return found === undefined && fallback === "" ? "" : rawJsonValue(jqFallback(found, fallback));
|
|
150
|
-
}
|
|
151
|
-
export function jqRawPaths(value, dottedPaths, fallback = "") {
|
|
152
|
-
for (const dottedPath of dottedPaths) {
|
|
153
|
-
const found = jsonAt(value, dottedPath);
|
|
154
|
-
if (jqTruthy(found))
|
|
155
|
-
return rawJsonValue(found);
|
|
156
|
-
}
|
|
157
|
-
return rawJsonValue(fallback);
|
|
158
|
-
}
|
|
159
|
-
export function requireRecord(value, property) {
|
|
160
|
-
const result = isRecord(value) ? value[property] : undefined;
|
|
161
|
-
if (!isRecord(result))
|
|
162
|
-
throw new TypeError(`Cannot update non-object field ${property}`);
|
|
163
|
-
return result;
|
|
164
|
-
}
|
|
165
|
-
export function moveFile(source, target) {
|
|
166
|
-
try {
|
|
167
|
-
fs.renameSync(source, target);
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
if (error.code !== "EXDEV")
|
|
171
|
-
throw error;
|
|
172
|
-
// The shell companion uses `mv`, which copies across filesystem boundaries.
|
|
173
|
-
fs.copyFileSync(source, target);
|
|
174
|
-
fs.unlinkSync(source);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
export function writeJsonAtomically(target, value, siblingTemp = false) {
|
|
178
|
-
const serialized = serializeJqJson(value, "pretty");
|
|
179
|
-
if (siblingTemp) {
|
|
180
|
-
const temporary = `${target}.tmp`;
|
|
181
|
-
fs.writeFileSync(temporary, serialized);
|
|
182
|
-
moveFile(temporary, target);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
const temporaryDir = fs.mkdtempSync(path.join(os.tmpdir(), "hq-delegate-"));
|
|
186
|
-
const temporary = path.join(temporaryDir, "result.json");
|
|
187
|
-
try {
|
|
188
|
-
fs.writeFileSync(temporary, "", { mode: 0o600 });
|
|
189
|
-
fs.writeFileSync(temporary, serialized);
|
|
190
|
-
moveFile(temporary, target);
|
|
191
|
-
}
|
|
192
|
-
finally {
|
|
193
|
-
fs.rmSync(temporaryDir, { recursive: true, force: true });
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
function firstJsonLine(value) {
|
|
197
|
-
const lines = value.split("\n");
|
|
198
|
-
const start = lines.findIndex((line) => /^[\t ]*(?:\{|\[)/.test(line));
|
|
199
|
-
return start < 0 ? "" : lines.slice(start).join("\n").replace(/\n+$/, "");
|
|
200
|
-
}
|
|
201
|
-
function readLineFromFd(fd) {
|
|
202
|
-
const chunks = [];
|
|
203
|
-
const byte = Buffer.alloc(1);
|
|
204
|
-
while (fs.readSync(fd, byte, 0, 1, null) === 1) {
|
|
205
|
-
if (byte[0] === 0x0a)
|
|
206
|
-
return Buffer.concat(chunks).toString("utf8");
|
|
207
|
-
chunks.push(Buffer.from(byte));
|
|
208
|
-
}
|
|
209
|
-
return chunks.length > 0 ? Buffer.concat(chunks).toString("utf8") : undefined;
|
|
210
|
-
}
|
|
211
|
-
function emitResolved(kind, principal, name, source) {
|
|
212
|
-
writeOut(serializeJqJson({ kind, principal, displayName: name === "" ? null : name, source }, "compact"));
|
|
213
|
-
return 0;
|
|
214
|
-
}
|
|
215
|
-
function runResolve(args, context) {
|
|
216
|
-
let company = "";
|
|
217
|
-
let token = "";
|
|
218
|
-
for (let i = 0; i < args.length;) {
|
|
219
|
-
const arg = args[i];
|
|
220
|
-
if (arg === "--company") {
|
|
221
|
-
company = args[i + 1] ?? "";
|
|
222
|
-
i += 2;
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
if (arg === "--to") {
|
|
226
|
-
token = args[i + 1] ?? "";
|
|
227
|
-
i += 2;
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
if (arg === "-h" || arg === "--help") {
|
|
231
|
-
writeOut(usage("resolve"));
|
|
232
|
-
return 0;
|
|
233
|
-
}
|
|
234
|
-
writeErr(`hq-delegate-resolve: unknown argument: ${arg}\n${usage("resolve")}`);
|
|
235
|
-
return 1;
|
|
236
|
-
}
|
|
237
|
-
if (!company) {
|
|
238
|
-
writeErr(`hq-delegate-resolve: --company is required (single-company lookups only; never a multi-company scan)\n${usage("resolve")}`);
|
|
239
|
-
return 1;
|
|
240
|
-
}
|
|
241
|
-
if (!token) {
|
|
242
|
-
writeErr(`hq-delegate-resolve: --to is required\n${usage("resolve")}`);
|
|
243
|
-
return 1;
|
|
244
|
-
}
|
|
245
|
-
if (token.startsWith("agt_"))
|
|
246
|
-
return emitResolved("agent", token, "", "verbatim");
|
|
247
|
-
if (token.startsWith("prs_") || token.includes("@"))
|
|
248
|
-
return emitResolved("person", token, "", "verbatim");
|
|
249
|
-
const people = subprocess("hq", ["people", "resolve", token, "--json", "--company", company], context.cwd, { stderr: "ignore" });
|
|
250
|
-
const peopleRaw = firstJsonLine(people.stdout ?? "");
|
|
251
|
-
let peopleValue;
|
|
252
|
-
let peopleStatus = "";
|
|
253
|
-
if (peopleRaw) {
|
|
254
|
-
try {
|
|
255
|
-
peopleValue = readJsonText(peopleRaw);
|
|
256
|
-
if (peopleValue !== null && peopleValue !== false)
|
|
257
|
-
peopleStatus = jqRawPath(peopleValue, "status");
|
|
258
|
-
}
|
|
259
|
-
catch {
|
|
260
|
-
peopleValue = undefined;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
if (peopleStatus === "found") {
|
|
264
|
-
const email = jqRawPath(peopleValue, "email");
|
|
265
|
-
const display = jqRawPaths(peopleValue, ["name", "displayName"]);
|
|
266
|
-
if (!email) {
|
|
267
|
-
writeErr(`hq-delegate-resolve: resolver returned found but no email for '${token}'\n`);
|
|
268
|
-
return 4;
|
|
269
|
-
}
|
|
270
|
-
return emitResolved("person", email, display, "people-resolve");
|
|
271
|
-
}
|
|
272
|
-
if (peopleStatus === "ambiguous") {
|
|
273
|
-
writeOut(serializeJqJson({ status: "ambiguous", matches: jqFallback(jsonAt(peopleValue, "matches"), []) }, "compact"));
|
|
274
|
-
return 3;
|
|
275
|
-
}
|
|
276
|
-
const noEmail = peopleStatus === "no_email";
|
|
277
|
-
if (peopleStatus !== "" && peopleStatus !== "not_found" && !noEmail) {
|
|
278
|
-
writeErr(`hq-delegate-resolve: unexpected resolver status '${peopleStatus}' for '${token}'\n`);
|
|
279
|
-
return 4;
|
|
280
|
-
}
|
|
281
|
-
const agents = subprocess("hq", ["agents", "list", "--company", company, "--json"], context.cwd, { stderr: "ignore" });
|
|
282
|
-
const agentsRaw = firstJsonLine(agents.stdout ?? "");
|
|
283
|
-
let agentsValue = [];
|
|
284
|
-
try {
|
|
285
|
-
if (agentsRaw) {
|
|
286
|
-
const parsedAgents = readJsonText(agentsRaw);
|
|
287
|
-
if (parsedAgents !== null && parsedAgents !== false)
|
|
288
|
-
agentsValue = parsedAgents;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
agentsValue = [];
|
|
293
|
-
}
|
|
294
|
-
const candidates = Array.isArray(agentsValue)
|
|
295
|
-
? agentsValue
|
|
296
|
-
: isRecord(agentsValue) ? Object.values(agentsValue) : [];
|
|
297
|
-
const asciiLower = (value) => value.replace(/[A-Z]/g, (character) => character.toLowerCase());
|
|
298
|
-
const matches = [];
|
|
299
|
-
for (const candidate of candidates) {
|
|
300
|
-
const nameValue = jqFallback(jsonAt(candidate, "name"), jsonAt(candidate, "displayName"));
|
|
301
|
-
const candidateName = jqTruthy(nameValue) ? nameValue : "";
|
|
302
|
-
if (typeof candidateName !== "string" || asciiLower(candidateName) !== asciiLower(token))
|
|
303
|
-
continue;
|
|
304
|
-
const agentUid = jqRawPaths(candidate, ["agentUid", "uid"]);
|
|
305
|
-
if (agentUid === "")
|
|
306
|
-
continue;
|
|
307
|
-
const displayName = jqRawPaths(candidate, ["name", "displayName"]);
|
|
308
|
-
matches.push({ agentUid, name: displayName });
|
|
309
|
-
}
|
|
310
|
-
const count = matches.length;
|
|
311
|
-
if (count === 1) {
|
|
312
|
-
const principal = rawJsonValue(matches[0]?.agentUid ?? "");
|
|
313
|
-
const display = rawJsonValue(matches[0]?.name ?? "");
|
|
314
|
-
return emitResolved("agent", principal, display, "agents-list");
|
|
315
|
-
}
|
|
316
|
-
if (count > 1) {
|
|
317
|
-
writeOut(serializeJqJson({ status: "ambiguous", matches }, "compact"));
|
|
318
|
-
return 3;
|
|
319
|
-
}
|
|
320
|
-
if (noEmail) {
|
|
321
|
-
writeErr(`hq-delegate-resolve: '${token}' was found in company '${company}' but has no email on record and matches no fleet agent — pass their exact email, personUid (prs_…), or agentUid (agt_…) instead\n`);
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
writeErr(`hq-delegate-resolve: no teammate or fleet agent named '${token}' found in company '${company}' — pass the exact email, personUid (prs_…), or agentUid (agt_…) instead\n`);
|
|
325
|
-
}
|
|
326
|
-
return 4;
|
|
327
|
-
}
|
|
328
|
-
function parsePickup(args) {
|
|
329
|
-
const values = { manifest: "", ack: "", evidence: "", check: false, status: false, window: process.env.HQ_DELEGATE_PICKUP_WINDOW_HOURS || "72" };
|
|
330
|
-
for (let i = 0; i < args.length;) {
|
|
331
|
-
const arg = args[i];
|
|
332
|
-
if (arg === "--manifest") {
|
|
333
|
-
values.manifest = args[i + 1] ?? "";
|
|
334
|
-
i += 2;
|
|
335
|
-
continue;
|
|
336
|
-
}
|
|
337
|
-
if (arg === "--ack") {
|
|
338
|
-
values.ack = args[i + 1] ?? "";
|
|
339
|
-
i += 2;
|
|
340
|
-
continue;
|
|
341
|
-
}
|
|
342
|
-
if (arg === "--evidence") {
|
|
343
|
-
values.evidence = args[i + 1] ?? "";
|
|
344
|
-
i += 2;
|
|
345
|
-
continue;
|
|
346
|
-
}
|
|
347
|
-
if (arg === "--check") {
|
|
348
|
-
values.check = true;
|
|
349
|
-
i += 1;
|
|
350
|
-
continue;
|
|
351
|
-
}
|
|
352
|
-
if (arg === "--window-hours") {
|
|
353
|
-
values.window = args[i + 1] ?? "";
|
|
354
|
-
i += 2;
|
|
355
|
-
continue;
|
|
356
|
-
}
|
|
357
|
-
if (arg === "--status") {
|
|
358
|
-
values.status = true;
|
|
359
|
-
i += 1;
|
|
360
|
-
continue;
|
|
361
|
-
}
|
|
362
|
-
if (arg === "-h" || arg === "--help")
|
|
363
|
-
return { values, help: true };
|
|
364
|
-
return { values, error: `hq-delegate-pickup: unknown arg ${arg}\n`, code: 2 };
|
|
365
|
-
}
|
|
366
|
-
return { values };
|
|
367
|
-
}
|
|
368
|
-
function runPickup(args, context) {
|
|
369
|
-
const parsed = parsePickup(args);
|
|
370
|
-
if (parsed.help) {
|
|
371
|
-
writeOut(usage("pickup"));
|
|
372
|
-
return 0;
|
|
373
|
-
}
|
|
374
|
-
if (parsed.error) {
|
|
375
|
-
writeErr(parsed.error);
|
|
376
|
-
return parsed.code ?? 2;
|
|
377
|
-
}
|
|
378
|
-
const manifest = String(parsed.values.manifest ?? "");
|
|
379
|
-
const requestedManifest = path.resolve(context.cwd, manifest);
|
|
380
|
-
let readable = false;
|
|
381
|
-
try {
|
|
382
|
-
readable = Boolean(manifest) && fs.statSync(requestedManifest).isFile() && (fs.accessSync(requestedManifest, fs.constants.R_OK), true);
|
|
383
|
-
}
|
|
384
|
-
catch (error) {
|
|
385
|
-
const code = error.code;
|
|
386
|
-
if (code !== "ENOENT" && code !== "ENOTDIR" && code !== "EACCES")
|
|
387
|
-
throw error;
|
|
388
|
-
}
|
|
389
|
-
if (!readable) {
|
|
390
|
-
writeErr("usage: --manifest <path> (--ack|--evidence|--check|--status)\n");
|
|
391
|
-
return 2;
|
|
392
|
-
}
|
|
393
|
-
const file = path.resolve(context.cwd, manifest);
|
|
394
|
-
const now = process.env.HQ_DELEGATE_NOW || new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
395
|
-
let document;
|
|
396
|
-
try {
|
|
397
|
-
document = readJsonFile(file);
|
|
398
|
-
}
|
|
399
|
-
catch (error) {
|
|
400
|
-
if (error instanceof SyntaxError)
|
|
401
|
-
return runCapturedShell(SCRIPT_ASSETS.pickup, args, context);
|
|
402
|
-
document = {};
|
|
403
|
-
}
|
|
404
|
-
const status = jqRawPath(document, "status");
|
|
405
|
-
const sentAt = jqRawPath(document, "sentAt");
|
|
406
|
-
const to = jqRawPath(document, "to.principal");
|
|
407
|
-
const name = jqRawPaths(document, ["to.displayName", "to.principal"], "the recipient");
|
|
408
|
-
if (parsed.values.status) {
|
|
409
|
-
const interpolation = (value) => typeof value === "string"
|
|
410
|
-
? value
|
|
411
|
-
: serializeJqJson(value, "compact").replace(/\n+$/, "");
|
|
412
|
-
let state = `${interpolation(jsonAt(document, "delegationId") ?? null)} ${interpolation(jsonAt(document, "status") ?? null)}`;
|
|
413
|
-
const pickedUpAt = jsonAt(document, "pickedUpAt");
|
|
414
|
-
if (jqTruthy(pickedUpAt)) {
|
|
415
|
-
state += ` picked-up ${interpolation(pickedUpAt)} via ${jqRawPath(document, "pickup.kind", "?")}`;
|
|
416
|
-
}
|
|
417
|
-
const failedAt = jsonAt(document, "failedAt");
|
|
418
|
-
if (jqTruthy(failedAt)) {
|
|
419
|
-
state += ` failed ${interpolation(failedAt)}: ${jqRawPath(document, "failure.reason")}`;
|
|
420
|
-
}
|
|
421
|
-
writeOut(`${state}\n`);
|
|
422
|
-
return 0;
|
|
423
|
-
}
|
|
424
|
-
if (status === "picked-up") {
|
|
425
|
-
writeOut(`hq-delegate-pickup: already picked up (${jqRawPath(document, "pickedUpAt")})\n`);
|
|
426
|
-
return 0;
|
|
427
|
-
}
|
|
428
|
-
if (status === "failed") {
|
|
429
|
-
writeOut(`hq-delegate-pickup: already failed (${jqRawPath(document, "failure.reason")})\n`);
|
|
430
|
-
return 5;
|
|
431
|
-
}
|
|
432
|
-
if (status !== "sent") {
|
|
433
|
-
writeErr(`hq-delegate-pickup: manifest status is '${status}' — only a 'sent' delegation can be picked up (send it first)\n`);
|
|
434
|
-
return 2;
|
|
435
|
-
}
|
|
436
|
-
const record = (kind, detail) => {
|
|
437
|
-
if (!isRecord(document))
|
|
438
|
-
throw new TypeError("Cannot update non-object delegation manifest");
|
|
439
|
-
writeJsonAtomically(file, {
|
|
440
|
-
...document,
|
|
441
|
-
status: "picked-up",
|
|
442
|
-
pickedUpAt: now,
|
|
443
|
-
pickup: { kind, detail, recordedAt: now },
|
|
444
|
-
}, true);
|
|
445
|
-
writeOut(`hq-delegate-pickup: ${name} picked up the delegation (${kind}) — status advanced to 'picked-up'\n`);
|
|
446
|
-
return 0;
|
|
447
|
-
};
|
|
448
|
-
const ack = String(parsed.values.ack ?? "");
|
|
449
|
-
const evidence = String(parsed.values.evidence ?? "");
|
|
450
|
-
if (ack)
|
|
451
|
-
return record("ack", ack);
|
|
452
|
-
if (evidence)
|
|
453
|
-
return record("evidence", evidence);
|
|
454
|
-
if (!parsed.values.check) {
|
|
455
|
-
writeErr("hq-delegate-pickup: nothing to do (pass --ack, --evidence, --check, or --status)\n");
|
|
456
|
-
return 2;
|
|
457
|
-
}
|
|
458
|
-
const repo = jqRawPath(document, "repo.path");
|
|
459
|
-
const branch = jqRawPath(document, "repo.branch");
|
|
460
|
-
if (repo && fs.existsSync(repo) && fs.statSync(repo).isDirectory() && branch && to) {
|
|
461
|
-
subprocess("git", ["-C", repo, "fetch", "-q", "origin", branch], context.cwd, { stderr: "ignore" });
|
|
462
|
-
let ref = `origin/${branch}`;
|
|
463
|
-
const showRef = subprocess("git", ["-C", repo, "show-ref", "--verify", "--quiet", `refs/remotes/${ref}`], context.cwd, { stderr: "ignore" });
|
|
464
|
-
if (showRef.code !== 0)
|
|
465
|
-
ref = branch;
|
|
466
|
-
const commandArgs = ["-C", repo, "log", ref, `--author=${to}`];
|
|
467
|
-
if (sentAt)
|
|
468
|
-
commandArgs.push(`--since=${sentAt}`);
|
|
469
|
-
commandArgs.push("--format=%h %ad %s", "--date=short", "-1");
|
|
470
|
-
const log = subprocess("git", commandArgs, context.cwd, { stderr: "ignore" }).stdout ?? "";
|
|
471
|
-
if (log)
|
|
472
|
-
return record("commit", `${log.replace(/\n+$/, "")} on ${branch}`);
|
|
473
|
-
}
|
|
474
|
-
let ageHours = 0;
|
|
475
|
-
if (sentAt) {
|
|
476
|
-
const sentParsed = Date.parse(sentAt);
|
|
477
|
-
const nowParsed = Date.parse(now);
|
|
478
|
-
const sent = Number.isFinite(sentParsed) ? Math.floor(sentParsed / 1000) : 0;
|
|
479
|
-
const current = Number.isFinite(nowParsed) ? Math.floor(nowParsed / 1000) : Math.floor(Date.now() / 1000);
|
|
480
|
-
ageHours = Math.trunc((current - sent) / 3600);
|
|
481
|
-
}
|
|
482
|
-
const window = Number.parseInt(String(parsed.values.window), 10);
|
|
483
|
-
if (ageHours < window) {
|
|
484
|
-
writeOut(`hq-delegate-pickup: waiting — no pickup evidence from ${name} yet (${ageHours}h of a ${String(parsed.values.window)}h window)\n`);
|
|
485
|
-
return 6;
|
|
486
|
-
}
|
|
487
|
-
const reason = `no pickup evidence from ${name} within ${String(parsed.values.window)}h of send (${sentAt || "unknown"}): no acknowledgement, no commit by ${to} on ${branch || "the branch"}`;
|
|
488
|
-
if (!isRecord(document))
|
|
489
|
-
throw new TypeError("Cannot update non-object delegation manifest");
|
|
490
|
-
writeJsonAtomically(file, {
|
|
491
|
-
...document,
|
|
492
|
-
status: "failed",
|
|
493
|
-
failedAt: now,
|
|
494
|
-
failure: { reason, recordedAt: now },
|
|
495
|
-
}, true);
|
|
496
|
-
writeErr(`hq-delegate-pickup: FAILED — ${reason}. Re-send with a direct ask, or hand it to someone else.\n`);
|
|
497
|
-
return 5;
|
|
498
|
-
}
|
|
499
|
-
function parseStandard(name, args) {
|
|
500
|
-
const values = { manifest: "" };
|
|
501
|
-
if (name === "repo") {
|
|
502
|
-
values.yes = false;
|
|
503
|
-
values.githubUser = "";
|
|
504
|
-
}
|
|
505
|
-
if (name === "secrets") {
|
|
506
|
-
values.yes = false;
|
|
507
|
-
values.noSecrets = false;
|
|
508
|
-
values.envSchema = "";
|
|
509
|
-
}
|
|
510
|
-
for (let i = 0; i < args.length;) {
|
|
511
|
-
const arg = args[i];
|
|
512
|
-
if (arg === "--manifest") {
|
|
513
|
-
values.manifest = args[i + 1] ?? "";
|
|
514
|
-
i += 2;
|
|
515
|
-
continue;
|
|
516
|
-
}
|
|
517
|
-
if (name === "repo" && arg === "--yes") {
|
|
518
|
-
values.yes = true;
|
|
519
|
-
i += 1;
|
|
520
|
-
continue;
|
|
521
|
-
}
|
|
522
|
-
if (name === "repo" && arg === "--github-user") {
|
|
523
|
-
values.githubUser = args[i + 1] ?? "";
|
|
524
|
-
i += 2;
|
|
525
|
-
continue;
|
|
526
|
-
}
|
|
527
|
-
if (name === "secrets" && arg === "--yes") {
|
|
528
|
-
values.yes = true;
|
|
529
|
-
i += 1;
|
|
530
|
-
continue;
|
|
531
|
-
}
|
|
532
|
-
if (name === "secrets" && arg === "--no-secrets") {
|
|
533
|
-
values.noSecrets = true;
|
|
534
|
-
i += 1;
|
|
535
|
-
continue;
|
|
536
|
-
}
|
|
537
|
-
if (name === "secrets" && arg === "--env-schema") {
|
|
538
|
-
values.envSchema = args[i + 1] ?? "";
|
|
539
|
-
i += 2;
|
|
540
|
-
continue;
|
|
541
|
-
}
|
|
542
|
-
if (arg === "-h" || arg === "--help")
|
|
543
|
-
return { values, help: true };
|
|
544
|
-
return { values, error: `hq-delegate-${name}: unknown argument: ${arg}\n`, code: 1 };
|
|
545
|
-
}
|
|
546
|
-
return { values };
|
|
547
|
-
}
|
|
548
|
-
function existingManifest(name, args, context) {
|
|
549
|
-
const prefix = `hq-delegate-${name}:`;
|
|
550
|
-
const parsed = parseStandard(name, args);
|
|
551
|
-
if (parsed.help) {
|
|
552
|
-
writeOut(usage(name));
|
|
553
|
-
return { code: 0, parsed };
|
|
554
|
-
}
|
|
555
|
-
if (parsed.error) {
|
|
556
|
-
writeErr(parsed.error);
|
|
557
|
-
return { code: parsed.code ?? 1, parsed };
|
|
558
|
-
}
|
|
559
|
-
const manifestArg = String(parsed.values.manifest ?? "");
|
|
560
|
-
if (!manifestArg) {
|
|
561
|
-
writeErr(`${prefix} --manifest is required\n`);
|
|
562
|
-
return { code: 1, parsed };
|
|
563
|
-
}
|
|
564
|
-
const file = path.resolve(context.cwd, manifestArg);
|
|
565
|
-
if (!fs.existsSync(file) || !fs.statSync(file).isFile()) {
|
|
566
|
-
writeErr(`${prefix} manifest not found: ${manifestArg}\n`);
|
|
567
|
-
return { code: 1, parsed };
|
|
568
|
-
}
|
|
569
|
-
if (!jqValid(file)) {
|
|
570
|
-
writeErr(`${prefix} manifest is not valid JSON: ${manifestArg}\n`);
|
|
571
|
-
return { code: 1, parsed };
|
|
572
|
-
}
|
|
573
|
-
return { file, parsed, document: readJsonFile(file) };
|
|
574
|
-
}
|
|
575
|
-
function runRepo(args, context) {
|
|
576
|
-
const loaded = existingManifest("repo", args, context);
|
|
577
|
-
if (loaded.code !== undefined)
|
|
578
|
-
return loaded.code;
|
|
579
|
-
const file = loaded.file;
|
|
580
|
-
const manifest = loaded.document;
|
|
581
|
-
if (!isRecord(manifest))
|
|
582
|
-
throw new TypeError("Cannot read repo from a non-object delegation manifest");
|
|
583
|
-
const options = loaded.parsed.values;
|
|
584
|
-
const root = context.root;
|
|
585
|
-
const repoValue = manifest.repo;
|
|
586
|
-
if (repoValue === null || repoValue === undefined) {
|
|
587
|
-
writeOut("hq-delegate-repo: project has no repoPath — nothing to hand over\n");
|
|
588
|
-
return 0;
|
|
589
|
-
}
|
|
590
|
-
const repoRel = jqRawPath(manifest, "repo.path");
|
|
591
|
-
const branch = jqRawPath(manifest, "repo.branch");
|
|
592
|
-
const prefix = "hq-delegate-repo:";
|
|
593
|
-
if (!repoRel) {
|
|
594
|
-
writeErr(`${prefix} manifest repo block has no path\n`);
|
|
595
|
-
return 1;
|
|
596
|
-
}
|
|
597
|
-
const repoDir = path.join(root, repoRel);
|
|
598
|
-
const gitDir = path.join(repoDir, ".git");
|
|
599
|
-
let isGitDir = false;
|
|
600
|
-
try {
|
|
601
|
-
isGitDir = fs.statSync(gitDir).isDirectory();
|
|
602
|
-
}
|
|
603
|
-
catch (error) {
|
|
604
|
-
const code = error.code;
|
|
605
|
-
if (code !== "ENOENT" && code !== "ENOTDIR" && code !== "EACCES")
|
|
606
|
-
throw error;
|
|
607
|
-
}
|
|
608
|
-
if (!isGitDir && subprocess("git", ["-C", repoDir, "rev-parse", "--git-dir"], context.cwd, { stderr: "ignore" }).code !== 0) {
|
|
609
|
-
writeErr(`${prefix} not a git repository: ${repoDir}\n`);
|
|
610
|
-
return 1;
|
|
611
|
-
}
|
|
612
|
-
const remoteUrl = (subprocess("git", ["-C", repoDir, "remote", "get-url", "origin"], context.cwd, { stderr: "ignore" }).stdout ?? "").replace(/\n+$/, "");
|
|
613
|
-
const status = subprocess("git", ["-C", repoDir, "status", "--porcelain"], context.cwd).stdout ?? "";
|
|
614
|
-
const dirtyLines = status.split("\n").filter((line) => line.length > 0).map((line) => line.length >= 3 ? line.slice(3) : line);
|
|
615
|
-
let pushed = false;
|
|
616
|
-
let headSha = "";
|
|
617
|
-
if (branch) {
|
|
618
|
-
const valid = subprocess("git", ["check-ref-format", "--branch", branch], context.cwd, { stderr: "ignore", stdout: "capture" });
|
|
619
|
-
if (valid.code !== 0) {
|
|
620
|
-
writeErr(`${prefix} invalid branch name in PRD: ${branch}\n`);
|
|
621
|
-
return 1;
|
|
622
|
-
}
|
|
623
|
-
const localSha = (subprocess("git", ["-C", repoDir, "rev-parse", "--verify", "--quiet", `refs/heads/${branch}`], context.cwd).stdout ?? "").replace(/\n+$/, "");
|
|
624
|
-
const remoteSha = (subprocess("git", ["-C", repoDir, "rev-parse", "--verify", "--quiet", `refs/remotes/origin/${branch}`], context.cwd).stdout ?? "").replace(/\n+$/, "");
|
|
625
|
-
if (remoteSha) {
|
|
626
|
-
pushed = true;
|
|
627
|
-
headSha = remoteSha;
|
|
628
|
-
}
|
|
629
|
-
else if (localSha) {
|
|
630
|
-
writeOut(`Branch handover plan — repo '${repoRel}':\n`);
|
|
631
|
-
writeOut(` branch '${branch}' exists only locally (${localSha})\n`);
|
|
632
|
-
writeOut(` action: git -C ${repoDir} push -u origin ${branch}\n`);
|
|
633
|
-
if (!options.yes) {
|
|
634
|
-
writeOut("\n");
|
|
635
|
-
writeErr(`${prefix} confirmation required — re-run with --yes to push the branch\n`);
|
|
636
|
-
return 2;
|
|
637
|
-
}
|
|
638
|
-
const push = subprocess("git", ["-C", repoDir, "push", "-u", "origin", branch], context.cwd, { stdout: "inherit" });
|
|
639
|
-
if (push.code !== 0) {
|
|
640
|
-
writeErr(`${prefix} failed to push branch '${branch}' to origin\n`);
|
|
641
|
-
return 1;
|
|
642
|
-
}
|
|
643
|
-
pushed = true;
|
|
644
|
-
headSha = localSha;
|
|
645
|
-
}
|
|
646
|
-
else {
|
|
647
|
-
writeOut(`${prefix} branch '${branch}' does not exist yet (declared in the PRD, not started) — recording as unpushed\n`);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
let accessVerified = false;
|
|
651
|
-
let accessNote;
|
|
652
|
-
const ghUser = String(options.githubUser ?? "");
|
|
653
|
-
if (ghUser && remoteUrl && commandExists("gh", context.cwd)) {
|
|
654
|
-
const ownerRepo = remoteUrl.replace(/^(git@[^:]+:|https?:\/\/[^/]+\/)/, "").replace(/\.git$/, "");
|
|
655
|
-
const access = subprocess("gh", ["api", `repos/${ownerRepo}/collaborators/${ghUser}`], context.cwd, { stdout: "ignore", stderr: "ignore" });
|
|
656
|
-
if (access.code === 0) {
|
|
657
|
-
accessVerified = true;
|
|
658
|
-
accessNote = `verified: ${ghUser} is a collaborator on ${ownerRepo}`;
|
|
659
|
-
}
|
|
660
|
-
else
|
|
661
|
-
accessNote = `UNVERIFIED: could not confirm ${ghUser} has access to ${ownerRepo} — the recipient may need to be invited before they can pull the branch`;
|
|
662
|
-
}
|
|
663
|
-
else {
|
|
664
|
-
accessNote = "UNVERIFIED: recipient repository access was not checked (no GitHub login supplied) — confirm they can reach the repo before assuming so";
|
|
665
|
-
}
|
|
666
|
-
const repo = requireRecord(manifest, "repo");
|
|
667
|
-
repo.remote = remoteUrl === "" ? null : remoteUrl;
|
|
668
|
-
repo.headSha = headSha === "" ? null : headSha;
|
|
669
|
-
repo.dirtyFiles = dirtyLines;
|
|
670
|
-
repo.branchPushed = pushed;
|
|
671
|
-
repo.accessVerified = accessVerified;
|
|
672
|
-
repo.accessNote = accessNote;
|
|
673
|
-
writeJsonAtomically(file, manifest);
|
|
674
|
-
const brief = path.join(path.dirname(file), "BRIEF.md");
|
|
675
|
-
if (fs.existsSync(brief) && (dirtyLines.length > 0 || !accessVerified)) {
|
|
676
|
-
let content = "\n## Code handover notes\n\n";
|
|
677
|
-
if (dirtyLines.length > 0)
|
|
678
|
-
content += `The delegator's working tree had uncommitted changes that are **not transferred** with this delegation. If something seems missing, these files are why — ask the delegator to commit and push them:\n\n${dirtyLines.map((entry) => `- \`${entry}\``).join("\n")}\n\n`;
|
|
679
|
-
if (!accessVerified)
|
|
680
|
-
content += `${accessNote}\n`;
|
|
681
|
-
fs.appendFileSync(brief, content);
|
|
682
|
-
}
|
|
683
|
-
writeOut(`${prefix} recorded branch state (pushed=${pushed}, dirty=${dirtyLines.length} files, accessVerified=${accessVerified})\n`);
|
|
684
|
-
return 0;
|
|
685
|
-
}
|
|
686
|
-
function scanSecretFiles(file) {
|
|
687
|
-
let schema;
|
|
688
|
-
try {
|
|
689
|
-
schema = fs.readFileSync(file, "utf8");
|
|
690
|
-
}
|
|
691
|
-
catch (error) {
|
|
692
|
-
const code = error.code;
|
|
693
|
-
if (code === "EACCES" || code === "EPERM")
|
|
694
|
-
return undefined;
|
|
695
|
-
throw error;
|
|
696
|
-
}
|
|
697
|
-
return [...new Set(schema.split(/\r?\n/)
|
|
698
|
-
.filter((line) => /^[A-Za-z_][A-Za-z0-9_]*=/.test(line))
|
|
699
|
-
.map((line) => line.slice(0, line.indexOf("="))))].sort();
|
|
700
|
-
}
|
|
701
|
-
function isRegularFile(file) {
|
|
702
|
-
try {
|
|
703
|
-
return fs.statSync(file).isFile();
|
|
704
|
-
}
|
|
705
|
-
catch (error) {
|
|
706
|
-
const code = error.code;
|
|
707
|
-
if (code === "ENOENT" || code === "ENOTDIR" || code === "EACCES" || code === "EPERM")
|
|
708
|
-
return false;
|
|
709
|
-
throw error;
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
function updateSecretsManifest(file, document, names, skipped, grantedAt) {
|
|
713
|
-
if (!isRecord(document))
|
|
714
|
-
throw new TypeError("Cannot update non-object delegation manifest");
|
|
715
|
-
document.secrets = names;
|
|
716
|
-
document.secretsSkipped = skipped;
|
|
717
|
-
if (grantedAt !== undefined)
|
|
718
|
-
document.secretsGrantedAt = grantedAt;
|
|
719
|
-
writeJsonAtomically(file, document);
|
|
720
|
-
}
|
|
721
|
-
function runSecrets(args, context) {
|
|
722
|
-
const loaded = existingManifest("secrets", args, context);
|
|
723
|
-
if (loaded.code !== undefined)
|
|
724
|
-
return loaded.code;
|
|
725
|
-
const file = loaded.file;
|
|
726
|
-
const document = loaded.document;
|
|
727
|
-
if (!isRecord(document))
|
|
728
|
-
throw new TypeError("Cannot read secrets from a non-object delegation manifest");
|
|
729
|
-
const options = loaded.parsed.values;
|
|
730
|
-
const prefix = "hq-delegate-secrets:";
|
|
731
|
-
const company = jqRawPath(document, "company");
|
|
732
|
-
const principal = jqRawPath(document, "to.principal");
|
|
733
|
-
const project = jqRawPath(document, "project.name");
|
|
734
|
-
if (!company) {
|
|
735
|
-
writeErr(`${prefix} manifest has no company\n`);
|
|
736
|
-
return 1;
|
|
737
|
-
}
|
|
738
|
-
if (!principal) {
|
|
739
|
-
writeErr(`${prefix} manifest has no to.principal\n`);
|
|
740
|
-
return 1;
|
|
741
|
-
}
|
|
742
|
-
if (options.noSecrets) {
|
|
743
|
-
updateSecretsManifest(file, document, [], true);
|
|
744
|
-
writeOut(`${prefix} skipped (--no-secrets) — no credential access granted\n`);
|
|
745
|
-
return 0;
|
|
746
|
-
}
|
|
747
|
-
let envSchema = String(options.envSchema ?? "");
|
|
748
|
-
let names;
|
|
749
|
-
if (envSchema) {
|
|
750
|
-
envSchema = path.resolve(context.cwd, envSchema);
|
|
751
|
-
if (isRegularFile(envSchema))
|
|
752
|
-
names = scanSecretFiles(envSchema);
|
|
753
|
-
}
|
|
754
|
-
else {
|
|
755
|
-
const repoRel = jqRawPath(document, "repo.path");
|
|
756
|
-
const candidates = [
|
|
757
|
-
path.join(context.root, "companies", company, "projects", project, ".env.schema"),
|
|
758
|
-
repoRel ? path.join(context.root, repoRel, ".env.schema") : "",
|
|
759
|
-
];
|
|
760
|
-
for (const candidate of candidates) {
|
|
761
|
-
if (!candidate || !isRegularFile(candidate))
|
|
762
|
-
continue;
|
|
763
|
-
const candidateNames = scanSecretFiles(candidate);
|
|
764
|
-
if (candidateNames === undefined)
|
|
765
|
-
continue;
|
|
766
|
-
envSchema = candidate;
|
|
767
|
-
names = candidateNames;
|
|
768
|
-
break;
|
|
769
|
-
}
|
|
770
|
-
}
|
|
771
|
-
if (!envSchema || names === undefined) {
|
|
772
|
-
updateSecretsManifest(file, document, [], false);
|
|
773
|
-
writeOut(`${prefix} no .env.schema found for this project or its repo — no secret names to grant. If the project needs credentials, add an .env.schema and re-run, or grant them manually with 'hq secrets share'.\n`);
|
|
774
|
-
return 0;
|
|
775
|
-
}
|
|
776
|
-
if (names.length === 0) {
|
|
777
|
-
// The source's pipefail exits on grep's status 1 before its empty-name
|
|
778
|
-
// handling branch; leave the manifest untouched to retain that behavior.
|
|
779
|
-
return 1;
|
|
780
|
-
}
|
|
781
|
-
const schemaName = path.basename(envSchema);
|
|
782
|
-
writeOut("Secret access handover — this grants the recipient the ability to use these credentials.\n\n");
|
|
783
|
-
writeOut(`The following ${names.length} secret name(s), declared by ${schemaName} for project '${project}', will be shared with read permission to '${principal}' in company '${company}':\n\n`);
|
|
784
|
-
writeOut(`${names.map((name) => ` - ${name}`).join("\n")}\n\n`);
|
|
785
|
-
writeOut("Only the names are granted and recorded; no secret value is read, printed, or transmitted by this step. The recipient consumes them through 'hq run' / 'hq secrets exec'.\n");
|
|
786
|
-
if (!options.yes) {
|
|
787
|
-
writeOut("\n");
|
|
788
|
-
writeErr(`${prefix} confirmation required — re-run with --yes after the user approves (or --no-secrets to skip)\n`);
|
|
789
|
-
return 2;
|
|
790
|
-
}
|
|
791
|
-
const namesDir = fs.mkdtempSync(path.join(os.tmpdir(), "hq-delegate-secret-names-"));
|
|
792
|
-
const namesFile = path.join(namesDir, "names");
|
|
793
|
-
let namesFd;
|
|
794
|
-
try {
|
|
795
|
-
// The shell's `while read` and each hq child share the same input stream.
|
|
796
|
-
// A child that reads stdin advances the next loop read just as it does in
|
|
797
|
-
// the bundled script; normal hq commands leave the name stream untouched.
|
|
798
|
-
fs.writeFileSync(namesFile, `${names.join("\n")}\n`, { mode: 0o600 });
|
|
799
|
-
namesFd = fs.openSync(namesFile, "r");
|
|
800
|
-
let name = readLineFromFd(namesFd);
|
|
801
|
-
while (name !== undefined) {
|
|
802
|
-
const share = subprocess("hq", ["secrets", "share", name, "--with", principal, "--permission", "read", "--company", company], context.cwd, { stdinFd: namesFd, stdout: "inherit" });
|
|
803
|
-
if (share.code !== 0) {
|
|
804
|
-
if (share.stderr)
|
|
805
|
-
writeErr(share.stderr);
|
|
806
|
-
writeErr(`${prefix} failed to grant '${name}' to '${principal}' — aborting; manifest not updated\n`);
|
|
807
|
-
return 1;
|
|
808
|
-
}
|
|
809
|
-
writeOut(`${prefix} granted read on '${name}' to '${principal}'\n`);
|
|
810
|
-
name = readLineFromFd(namesFd);
|
|
811
|
-
}
|
|
812
|
-
}
|
|
813
|
-
finally {
|
|
814
|
-
if (namesFd !== undefined)
|
|
815
|
-
fs.closeSync(namesFd);
|
|
816
|
-
fs.rmSync(namesDir, { recursive: true, force: true });
|
|
817
|
-
}
|
|
818
|
-
const now = process.env.HQ_DELEGATE_NOW || new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
819
|
-
updateSecretsManifest(file, document, names, false, now);
|
|
820
|
-
writeOut(`${prefix} ${names.length} secret name(s) granted and recorded (names only)\n`);
|
|
821
|
-
return 0;
|
|
822
|
-
}
|
|
823
|
-
function runTransfer(args, context) {
|
|
824
|
-
const loaded = existingManifest("transfer", args, context);
|
|
825
|
-
if (loaded.code !== undefined)
|
|
826
|
-
return loaded.code;
|
|
827
|
-
const file = loaded.file;
|
|
828
|
-
const document = loaded.document;
|
|
829
|
-
if (!isRecord(document))
|
|
830
|
-
throw new TypeError("Cannot read transfer data from a non-object delegation manifest");
|
|
831
|
-
const root = context.root;
|
|
832
|
-
const prefix = "hq-delegate-transfer:";
|
|
833
|
-
const mode = jqRawPath(document, "mode", "transfer");
|
|
834
|
-
const company = jqRawPath(document, "company");
|
|
835
|
-
const project = jqRawPath(document, "project.name");
|
|
836
|
-
const principal = jqRawPath(document, "to.principal");
|
|
837
|
-
const display = jqRawPaths(document, ["to.displayName", "to.principal"]);
|
|
838
|
-
const delegationId = jqRawPath(document, "delegationId");
|
|
839
|
-
const from = jqRawPaths(document, ["from.email", "from.personUid"], "unknown");
|
|
840
|
-
if (!company) {
|
|
841
|
-
writeErr(`${prefix} manifest has no company\n`);
|
|
842
|
-
return 1;
|
|
843
|
-
}
|
|
844
|
-
if (!project) {
|
|
845
|
-
writeErr(`${prefix} manifest has no project.name\n`);
|
|
846
|
-
return 1;
|
|
847
|
-
}
|
|
848
|
-
if (!principal) {
|
|
849
|
-
writeErr(`${prefix} manifest has no to.principal\n`);
|
|
850
|
-
return 1;
|
|
851
|
-
}
|
|
852
|
-
if (mode === "share") {
|
|
853
|
-
writeOut(`${prefix} mode is 'share' — ownership stays with the delegator, nothing mutated\n`);
|
|
854
|
-
return 0;
|
|
855
|
-
}
|
|
856
|
-
if (jsonAt(document, "status") !== "granted") {
|
|
857
|
-
writeErr(`${prefix} transfer requires confirmed grants (status granted)\n`);
|
|
858
|
-
return 1;
|
|
859
|
-
}
|
|
860
|
-
if (from === "unknown" || !from) {
|
|
861
|
-
writeErr(`${prefix} sender identity missing; rebuild the bundle\n`);
|
|
862
|
-
return 1;
|
|
863
|
-
}
|
|
864
|
-
const now = jqRawPath(document, "ownershipTransferredAt") || new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
865
|
-
const today = (process.env.HQ_DELEGATE_NOW || new Date().toISOString()).slice(0, 10);
|
|
866
|
-
const prdPath = `companies/${company}/projects/${project}/prd.json`;
|
|
867
|
-
const prdAbs = path.join(root, prdPath);
|
|
868
|
-
const projectDir = path.join(root, "companies", company, "projects", project);
|
|
869
|
-
const board = path.join(root, "companies", company, "board.json");
|
|
870
|
-
if (!fs.existsSync(prdAbs) || !fs.statSync(prdAbs).isFile()) {
|
|
871
|
-
writeErr(`${prefix} prd not found: ${prdPath}\n`);
|
|
872
|
-
return 1;
|
|
873
|
-
}
|
|
874
|
-
if (fs.existsSync(board)) {
|
|
875
|
-
if (!jqValid(board)) {
|
|
876
|
-
writeErr(`${prefix} board.json is not valid JSON: ${board}\n`);
|
|
877
|
-
return 1;
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
else {
|
|
881
|
-
fs.mkdirSync(path.dirname(board), { recursive: true });
|
|
882
|
-
fs.writeFileSync(board, '{"projects": []}\n');
|
|
883
|
-
}
|
|
884
|
-
const prd = readJsonFile(prdAbs);
|
|
885
|
-
const title = jqRawPath(prd, "name");
|
|
886
|
-
const descriptionValue = jqFallback(jsonAt(prd, "description"), "");
|
|
887
|
-
const description = Buffer.from(serializeJqJson(descriptionValue, "raw"), "utf8")
|
|
888
|
-
.subarray(0, 300).toString("utf8").replace(/\n+$/, "");
|
|
889
|
-
const boardDocument = readJsonFile(board);
|
|
890
|
-
if (!isRecord(boardDocument))
|
|
891
|
-
throw new TypeError("Cannot update non-object board.json");
|
|
892
|
-
const projectsValue = jqFallback(boardDocument.projects, []);
|
|
893
|
-
const projects = Array.isArray(projectsValue)
|
|
894
|
-
? projectsValue
|
|
895
|
-
: isRecord(projectsValue) ? Object.values(projectsValue) : [];
|
|
896
|
-
const hasProject = projects.some((entry) => jsonAt(entry, "prd_path") === prdPath);
|
|
897
|
-
if (hasProject) {
|
|
898
|
-
boardDocument.projects = projects.map((entry) => jsonAt(entry, "prd_path") === prdPath && isRecord(entry)
|
|
899
|
-
? { ...entry, owner: principal, updated_at: now }
|
|
900
|
-
: entry);
|
|
901
|
-
}
|
|
902
|
-
else {
|
|
903
|
-
boardDocument.projects = [...projects, {
|
|
904
|
-
id: `proj-${project}`,
|
|
905
|
-
title,
|
|
906
|
-
description,
|
|
907
|
-
status: "in_progress",
|
|
908
|
-
owner: principal,
|
|
909
|
-
prd_path: prdPath,
|
|
910
|
-
created_at: now,
|
|
911
|
-
updated_at: now,
|
|
912
|
-
}];
|
|
913
|
-
}
|
|
914
|
-
boardDocument.updated_at = now;
|
|
915
|
-
writeJsonAtomically(board, boardDocument);
|
|
916
|
-
if (!isRecord(prd))
|
|
917
|
-
throw new TypeError("Cannot update non-object prd.json");
|
|
918
|
-
if (!isRecord(prd.metadata))
|
|
919
|
-
prd.metadata = {};
|
|
920
|
-
const metadata = prd.metadata;
|
|
921
|
-
metadata.owner = principal;
|
|
922
|
-
metadata.delegatedFrom = from;
|
|
923
|
-
metadata.delegatedAt = now;
|
|
924
|
-
writeJsonAtomically(prdAbs, prd);
|
|
925
|
-
if (commandExists("hq", context.cwd)) {
|
|
926
|
-
const sessionId = process.env.HQ_SESSION_ID || "delegate";
|
|
927
|
-
const mesh = subprocess("hq", ["mesh", "session", "note", "--enqueue", "--session-id", sessionId, "--seq", "1", "--harness", "claude-code", "--adapter-version", "1.0.0", "--company-slug", company, "--project", project, "--summary", `Delegated to ${display} (${principal}) — delegation ${delegationId}; ownership transferred`], context.cwd, { stdout: "inherit" });
|
|
928
|
-
if (mesh.code !== 0)
|
|
929
|
-
writeErr(`${prefix} mesh note failed; authoritative mesh ownership remains unconfirmed\n`);
|
|
930
|
-
}
|
|
931
|
-
const journalDir = path.join(projectDir, "journal");
|
|
932
|
-
const journal = path.join(journalDir, "delegations.md");
|
|
933
|
-
fs.mkdirSync(journalDir, { recursive: true });
|
|
934
|
-
if (!fs.existsSync(journal))
|
|
935
|
-
fs.writeFileSync(journal, `# Delegation log — ${project}\n\nOwnership handoffs for this project, appended by /delegate.\n`);
|
|
936
|
-
const journalText = fs.readFileSync(journal, "utf8");
|
|
937
|
-
if (!journalText.includes(delegationId)) {
|
|
938
|
-
const prefixesValue = jqFallback(document.vaultPrefixes, []);
|
|
939
|
-
const vaultPrefixes = Array.isArray(prefixesValue) ? prefixesValue : [];
|
|
940
|
-
const scope = vaultPrefixes.map((entry) => jqRawPath(entry, "prefix")).join(", ");
|
|
941
|
-
fs.appendFileSync(journal, `\n## ${today} — Delegated to ${display}\n\n- Delegation: \`${delegationId}\`\n- From: ${from}\n- To: ${display} (${principal})\n- Transferred scope: ${scope}\n- Local board and PRD ownership updated; Work Mesh ownership is unconfirmed. Existing delegator access is unchanged.\n`);
|
|
942
|
-
}
|
|
943
|
-
document.ownershipTransferredAt = now;
|
|
944
|
-
document.workMeshOwnership = "unconfirmed";
|
|
945
|
-
writeJsonAtomically(file, document);
|
|
946
|
-
writeOut(`${prefix} ownership of '${project}' transferred to ${display} (${principal}) — local board, PRD, and journal updated; Work Mesh ownership unconfirmed\n`);
|
|
947
|
-
return 0;
|
|
948
|
-
}
|
|
949
|
-
function runNative(name, args, context) {
|
|
950
|
-
switch (name) {
|
|
951
|
-
case "resolve": return runResolve(args, context);
|
|
952
|
-
case "pickup": return runPickup(args, context);
|
|
953
|
-
case "repo": return runRepo(args, context);
|
|
954
|
-
case "secrets": return runSecrets(args, context);
|
|
955
|
-
case "transfer": return runTransfer(args, context);
|
|
956
|
-
}
|
|
957
|
-
}
|
|
958
|
-
/** Fast-entry adapter; family gating and shell fallback happen before import. */
|
|
959
|
-
export function runDelegateFast(args, _stdin, cwd, hqRoot, commandName) {
|
|
960
|
-
const name = commandName;
|
|
961
|
-
const context = name === "pickup"
|
|
962
|
-
? { cwd }
|
|
963
|
-
: (() => { const root = hqRoot ?? resolveLiveRoot(); return { cwd: root, root }; })();
|
|
964
|
-
const savedEnvironment = new Map();
|
|
965
|
-
if (context.root) {
|
|
966
|
-
for (const key of ["HQ_ROOT", "CLAUDE_PROJECT_DIR", "PWD"]) {
|
|
967
|
-
savedEnvironment.set(key, process.env[key]);
|
|
968
|
-
}
|
|
969
|
-
process.env.HQ_ROOT = context.root;
|
|
970
|
-
process.env.CLAUDE_PROJECT_DIR = context.root;
|
|
971
|
-
process.env.PWD = context.cwd;
|
|
972
|
-
}
|
|
973
|
-
let code;
|
|
974
|
-
try {
|
|
975
|
-
code = runNative(name, [...args], context);
|
|
976
|
-
}
|
|
977
|
-
finally {
|
|
978
|
-
for (const [key, value] of savedEnvironment) {
|
|
979
|
-
if (value === undefined)
|
|
980
|
-
delete process.env[key];
|
|
981
|
-
else
|
|
982
|
-
process.env[key] = value;
|
|
983
|
-
}
|
|
984
|
-
}
|
|
985
|
-
if (code !== 0)
|
|
986
|
-
process.exitCode = code;
|
|
987
|
-
return code;
|
|
988
|
-
}
|
|
989
|
-
/** Register the Wave 1a delegate commands and preserve the shell rollback path. */
|
|
990
|
-
export function registerCoreDelegateCommand(core, registerWave1b) {
|
|
991
|
-
const delegate = core.command("delegate").description("Delegation handover helpers");
|
|
992
|
-
for (const name of ["resolve", "pickup", "repo", "secrets", "transfer"]) {
|
|
993
|
-
const rootMode = name === "pickup" ? "cwd" : "live";
|
|
994
|
-
const command = delegate.command(name)
|
|
995
|
-
.description(COMMAND_DESCRIPTIONS[name])
|
|
996
|
-
.allowUnknownOption()
|
|
997
|
-
.allowExcessArguments()
|
|
998
|
-
.helpOption(false)
|
|
999
|
-
.argument("[args...]", "arguments accepted for shell ABI compatibility")
|
|
1000
|
-
.action(async (args = []) => {
|
|
1001
|
-
const scope = core.opts();
|
|
1002
|
-
const context = rootMode === "cwd"
|
|
1003
|
-
? { cwd: process.cwd() }
|
|
1004
|
-
: (() => { const root = resolveLiveRoot({ hqRoot: scope.hqRoot }); return { cwd: root, root }; })();
|
|
1005
|
-
const { resolveProcessFlagGate } = await import("../lib/flag-registry.js");
|
|
1006
|
-
if (!resolveProcessFlagGate(CORE_NATIVE_DELEGATE_FLAG, { fallback: false }, () => false)) {
|
|
1007
|
-
const result = runBundledScript({ asset: SCRIPT_ASSETS[name], args, cwd: context.cwd, hqRoot: context.root });
|
|
1008
|
-
if (result.code !== 0)
|
|
1009
|
-
process.exit(result.code);
|
|
1010
|
-
return;
|
|
1011
|
-
}
|
|
1012
|
-
const savedEnvironment = new Map();
|
|
1013
|
-
if (context.root) {
|
|
1014
|
-
for (const key of ["HQ_ROOT", "CLAUDE_PROJECT_DIR", "PWD"]) {
|
|
1015
|
-
savedEnvironment.set(key, process.env[key]);
|
|
1016
|
-
}
|
|
1017
|
-
process.env.HQ_ROOT = context.root;
|
|
1018
|
-
process.env.CLAUDE_PROJECT_DIR = context.root;
|
|
1019
|
-
process.env.PWD = context.cwd;
|
|
1020
|
-
}
|
|
1021
|
-
let code;
|
|
1022
|
-
try {
|
|
1023
|
-
code = runNative(name, args, context);
|
|
1024
|
-
}
|
|
1025
|
-
finally {
|
|
1026
|
-
for (const [key, value] of savedEnvironment) {
|
|
1027
|
-
if (value === undefined)
|
|
1028
|
-
delete process.env[key];
|
|
1029
|
-
else
|
|
1030
|
-
process.env[key] = value;
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
if (code !== 0)
|
|
1034
|
-
process.exit(code);
|
|
1035
|
-
});
|
|
1036
|
-
describeCoreCommand(command, { execution: "native", asset: SCRIPT_ASSETS[name], root: rootMode });
|
|
1037
|
-
}
|
|
1038
|
-
registerWave1b?.(delegate, core);
|
|
1039
|
-
}
|
|
1040
|
-
//# sourceMappingURL=core-delegate.js.map
|