@indigoai-us/hq-cli 5.313.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 -4300
- 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 -357
- package/dist/commands/company-transfer.d.ts +28 -4
- package/dist/commands/company-transfer.js +49 -5
- package/dist/commands/company.js +3 -68
- 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 -277
- 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 -87
- 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 -20
- 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 +7 -26
- 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 -53
- package/dist/lib/mesh/live/daemon/doctor.js +6 -190
- 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 -13
- package/dist/lib/work-context/contract.schema.json +1 -3
- 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 +5 -27
- package/dist/lib/work-context/outbox.js +6 -135
- package/dist/lib/work-context/reconcile.d.ts +0 -15
- package/dist/lib/work-context/reconcile.js +29 -405
- 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 -32
- package/dist/main.js +73 -273
- 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 +14 -2
- package/dist/utils/pack-contributions.js +44 -7
- 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.d.ts +2 -0
- package/dist/utils/redact-error-text.js +2 -3
- package/dist/utils/run-bundled-script.d.ts +0 -6
- package/dist/utils/run-bundled-script.js +4 -117
- package/dist/utils/sandbox-runner-client.d.ts +1 -2
- 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/lib/work-mesh-live-hook.sh +0 -378
- package/assets/scaffold/core/scripts/lib/work-mesh-live-rebind.sh +0 -141
- package/assets/scaffold/core/scripts/migrate-policy-triggers.sh +0 -373
- 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/register-project.sh +0 -262
- 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/work-mesh-live-rebind.sh +0 -59
- 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 -10735
- package/dist/command-catalog.generated.js +0 -13836
- 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/company-rename-flag.d.ts +0 -4
- package/dist/commands/company-rename-flag.js +0 -7
- package/dist/commands/company-rename.d.ts +0 -4
- package/dist/commands/company-rename.js +0 -90
- 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-eval-trigger-native.d.ts +0 -4
- package/dist/commands/core-eval-trigger-native.js +0 -12
- 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 -11
- package/dist/commands/core-knowledge-prefs.js +0 -137
- package/dist/commands/core-migrate-policy-triggers-native.d.ts +0 -21
- package/dist/commands/core-migrate-policy-triggers-native.js +0 -378
- 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-hook-helper-commands.d.ts +0 -4
- package/dist/commands/core-native-hook-helper-commands.js +0 -56
- package/dist/commands/core-native-hook-helpers-flag.d.ts +0 -4
- package/dist/commands/core-native-hook-helpers-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-register-project-native.d.ts +0 -30
- package/dist/commands/core-register-project-native.js +0 -347
- 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-work-mesh-live-rebind-native.d.ts +0 -18
- package/dist/commands/core-work-mesh-live-rebind-native.js +0 -262
- 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 -4
- 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 -937
- 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 -1005
- 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 -564
- 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 -8973
- 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 -86
- package/dist/fast-scaffold.js +0 -364
- 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 -94
- package/dist/lib/lanes/config.js +0 -606
- 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/disk-guard.d.ts +0 -66
- package/dist/lib/lanes/disk-guard.js +0 -172
- 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 -15
- package/dist/lib/lanes/flag-keys.js +0 -15
- package/dist/lib/lanes/grants.d.ts +0 -30
- package/dist/lib/lanes/grants.js +0 -171
- package/dist/lib/lanes/hire-grant-dispatch.d.ts +0 -29
- package/dist/lib/lanes/hire-grant-dispatch.js +0 -315
- 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 -161
- package/dist/lib/lanes/reconcile.js +0 -3324
- package/dist/lib/lanes/registry-flag.d.ts +0 -35
- package/dist/lib/lanes/registry-flag.js +0 -164
- 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 -355
- package/dist/lib/lanes/spawn.js +0 -2668
- 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 -1822
- 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 -1030
- package/dist/lib/lanes/types.js +0 -418
- 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/denial-codes.d.ts +0 -5
- package/dist/lib/mesh/denial-codes.js +0 -14
- 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 -34
- package/dist/lib/search-index/embed-lock.js +0 -295
- 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/core-eval-trigger.d.ts +0 -4
- package/dist/utils/core-eval-trigger.js +0 -88
- 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
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
* - macOS: LaunchAgent ai.getindigo.hq-mesh-daemon
|
|
5
5
|
* - Linux: systemd user unit hq-mesh-daemon.service
|
|
6
6
|
* (documented fallback: root-owned unit running as ec2-user)
|
|
7
|
-
* - Windows: per-user Scheduled Task ai.getindigo.hq-mesh-daemon registered
|
|
8
|
-
* from a rendered task XML via schtasks.exe (no native dependencies)
|
|
9
7
|
*
|
|
10
8
|
* The unit embeds the hq binary resolved at install time. Logs go to
|
|
11
9
|
* ~/.hq/work-mesh/daemon/log (rotation at 5MB handled by the daemon).
|
|
@@ -14,282 +12,20 @@
|
|
|
14
12
|
import * as fs from "node:fs";
|
|
15
13
|
import * as os from "node:os";
|
|
16
14
|
import * as path from "node:path";
|
|
17
|
-
import { spawnSync } from "node:child_process";
|
|
18
|
-
import semver from "semver";
|
|
19
15
|
import { resolveDaemonAssetDir } from "./log.js";
|
|
20
|
-
import { LAUNCHD_LABEL, SYSTEMD_UNIT_NAME,
|
|
21
|
-
import { isInstallableHqRoot, readDaemonConfig, registerTrustedHqRoot, verifyHqRoot } from "./config.js";
|
|
22
|
-
import { defaultPidLockDeps, pidLockStatus, readPidLock } from "./pid-lock.js";
|
|
23
|
-
import { retireLegacyListen } from "./legacy-listen.js";
|
|
24
|
-
import { readDaemonState } from "./state.js";
|
|
25
|
-
import { activateLaunchd, defaultRunCommand, launchdIsLoaded, launchdServiceTarget, launchdPlistProgramArguments, launchdProgramArgumentsDiffer, parseLaunchctlPrintArguments, } from "../../../service-manager/launchd.js";
|
|
26
|
-
import { activateSystemd, systemdIsActive } from "../../../service-manager/systemd.js";
|
|
27
|
-
import { nodeBinaryProblem, preferStableNodeBinary } from "../../../node-binary.js";
|
|
28
|
-
/**
|
|
29
|
-
* `schtasks /End` terminates the task's root process only. The daemon is
|
|
30
|
-
* launched through `conhost.exe --headless`, so ending the task kills conhost
|
|
31
|
-
* and leaves node running as an orphan that still holds the pid lock. Stop
|
|
32
|
-
* the recorded daemon pid explicitly. Returns the pid that was signalled, or
|
|
33
|
-
* null when no live daemon pid was recorded.
|
|
34
|
-
*/
|
|
35
|
-
export function stopWindowsDaemonProcess(dir, deps = {}) {
|
|
36
|
-
const record = readPidLock(daemonPidPath(dir), {
|
|
37
|
-
readFileSync: deps.readFileSync,
|
|
38
|
-
existsSync: deps.existsSync,
|
|
39
|
-
});
|
|
40
|
-
if (!record || record.pid === (deps.selfPid ?? process.pid))
|
|
41
|
-
return null;
|
|
42
|
-
try {
|
|
43
|
-
(deps.kill ?? ((pid) => process.kill(pid)))(record.pid);
|
|
44
|
-
return record.pid;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
export const defaultSchtasks = (args) => {
|
|
51
|
-
const r = spawnSync("schtasks.exe", args, { encoding: "utf8", windowsHide: true });
|
|
52
|
-
return {
|
|
53
|
-
status: r.status,
|
|
54
|
-
stdout: r.stdout ?? "",
|
|
55
|
-
stderr: r.error ? r.error.message : (r.stderr ?? ""),
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
function readServiceText(file, existsSync, readFileSync) {
|
|
59
|
-
if (!existsSync(file))
|
|
60
|
-
return "";
|
|
61
|
-
const raw = readFileSync(file);
|
|
62
|
-
const buf = Buffer.isBuffer(raw) ? raw : Buffer.from(String(raw));
|
|
63
|
-
if ((buf.length >= 2 && buf[0] === 0xff && buf[1] === 0xfe) || buf.includes(0)) {
|
|
64
|
-
return buf.toString("utf16le").replace(/^\uFEFF/, "");
|
|
65
|
-
}
|
|
66
|
-
return buf.toString("utf8");
|
|
67
|
-
}
|
|
68
|
-
function hqRootFromUnitText(platform, text) {
|
|
69
|
-
if (platform === "win32")
|
|
70
|
-
return parseWindowsTaskHqRoot(text);
|
|
71
|
-
if (platform === "darwin") {
|
|
72
|
-
const match = /<key>HQ_ROOT<\/key>\s*<string>([^<]*)<\/string>/.exec(text);
|
|
73
|
-
return match?.[1] ?? null;
|
|
74
|
-
}
|
|
75
|
-
const match = /^Environment=HQ_ROOT=(.*)$/m.exec(text);
|
|
76
|
-
if (!match)
|
|
77
|
-
return null;
|
|
78
|
-
const value = match[1].trim();
|
|
79
|
-
return value.startsWith("'") && value.endsWith("'") ? value.slice(1, -1) : value;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Record the HQ root the daemon was serving and replace a pre-allowlist unit
|
|
83
|
-
* before the process is restarted. A unit with no HQ_ROOT (or Restart=on-failure)
|
|
84
|
-
* comes back with an empty root allowlist unless this runs first.
|
|
85
|
-
*/
|
|
86
|
-
function migrateLegacyDaemonUnit(opts) {
|
|
87
|
-
const { platform, home } = opts;
|
|
88
|
-
if (platform !== "darwin" && platform !== "linux" && platform !== "win32")
|
|
89
|
-
return;
|
|
90
|
-
const unitPath = platform === "darwin"
|
|
91
|
-
? path.join(home, "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`)
|
|
92
|
-
: platform === "linux"
|
|
93
|
-
? path.join(home, ".config", "systemd", "user", SYSTEMD_UNIT_NAME)
|
|
94
|
-
: path.join(daemonDir(undefined, home, opts.env), `${WINDOWS_TASK_NAME}.xml`);
|
|
95
|
-
if (!opts.existsSync(unitPath))
|
|
96
|
-
return;
|
|
97
|
-
const text = readServiceText(unitPath, opts.existsSync, opts.readFileSync);
|
|
98
|
-
const fromUnit = hqRootFromUnitText(platform, text);
|
|
99
|
-
const verified = verifyHqRoot(fromUnit ?? undefined)
|
|
100
|
-
?? verifyHqRoot(opts.hqRoot)
|
|
101
|
-
?? verifyHqRoot(opts.env?.HQ_ROOT);
|
|
102
|
-
if (!verified)
|
|
103
|
-
return;
|
|
104
|
-
registerTrustedHqRoot(daemonDir(undefined, home, opts.env), verified);
|
|
105
|
-
const legacy = platform === "linux"
|
|
106
|
-
? !text.includes("Environment=HQ_ROOT=") || /Restart=on-failure/.test(text)
|
|
107
|
-
: platform === "darwin"
|
|
108
|
-
? !/<key>HQ_ROOT<\/key>/.test(text)
|
|
109
|
-
: !fromUnit;
|
|
110
|
-
if (!legacy)
|
|
111
|
-
return;
|
|
112
|
-
const paths = buildInstallPaths({
|
|
113
|
-
home,
|
|
114
|
-
env: opts.env,
|
|
115
|
-
hqRoot: verified,
|
|
116
|
-
hqBinary: "/usr/bin/hq",
|
|
117
|
-
nodeBinary: process.execPath ? resolveNodeBinary(process.execPath, opts.env ?? process.env) : "/usr/bin/node",
|
|
118
|
-
});
|
|
119
|
-
try {
|
|
120
|
-
paths.hqBinary = resolveHqBinary(process.argv, opts.env ?? process.env);
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// The rendered command only has to name a binary; install already resolved one.
|
|
124
|
-
}
|
|
125
|
-
if (platform === "darwin") {
|
|
126
|
-
opts.writeFileSync(unitPath, renderLaunchdPlist(paths), { mode: 0o600 });
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
if (platform === "linux") {
|
|
130
|
-
opts.writeFileSync(unitPath, renderSystemdUserUnit(paths), { mode: 0o600 });
|
|
131
|
-
opts.run("systemctl", ["--user", "daemon-reload"]);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const rendered = renderWindowsTaskXml(paths);
|
|
135
|
-
opts.writeFileSync(unitPath, encodeWindowsTaskXml(rendered));
|
|
136
|
-
opts.run("schtasks.exe", ["/Create", "/TN", WINDOWS_TASK_NAME, "/XML", unitPath, "/F"]);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Restart the installed user daemon after a CLI upgrade. This is deliberately
|
|
140
|
-
* best-effort: an update must remain successful if a user has no service,
|
|
141
|
-
* launchctl/systemd is unavailable, or the user manager is not running.
|
|
142
|
-
*/
|
|
143
|
-
function asRunCommand(run) {
|
|
144
|
-
return (command, args) => {
|
|
145
|
-
const result = run(command, args);
|
|
146
|
-
return {
|
|
147
|
-
status: result.status,
|
|
148
|
-
stdout: result.stdout ?? "",
|
|
149
|
-
stderr: result.stderr ?? "",
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
export function restartDaemonServiceIfInstalled(opts = {}) {
|
|
154
|
-
const platform = opts.platform ?? detectPlatform();
|
|
155
|
-
const home = opts.home ?? os.homedir();
|
|
156
|
-
const existsSync = opts.existsSync ?? fs.existsSync;
|
|
157
|
-
const readFileSync = opts.readFileSync ?? fs.readFileSync;
|
|
158
|
-
const writeFileSync = opts.writeFileSync ?? fs.writeFileSync;
|
|
159
|
-
const run = opts.run ?? ((command, args) => {
|
|
160
|
-
const result = spawnSync(command, args, { encoding: "utf8" });
|
|
161
|
-
return {
|
|
162
|
-
status: result.status,
|
|
163
|
-
stdout: typeof result.stdout === "string" ? result.stdout : "",
|
|
164
|
-
stderr: result.error ? result.error.message : (typeof result.stderr === "string" ? result.stderr : ""),
|
|
165
|
-
};
|
|
166
|
-
});
|
|
167
|
-
try {
|
|
168
|
-
migrateLegacyDaemonUnit({ platform, home, hqRoot: opts.hqRoot, env: opts.env, existsSync, readFileSync, writeFileSync, run });
|
|
169
|
-
if (platform === "darwin") {
|
|
170
|
-
const plist = path.join(home, "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`);
|
|
171
|
-
if (!existsSync(plist))
|
|
172
|
-
return { attempted: false, restarted: false };
|
|
173
|
-
const uid = opts.uid ?? process.getuid?.();
|
|
174
|
-
if (typeof uid !== "number")
|
|
175
|
-
return { attempted: false, restarted: false };
|
|
176
|
-
const target = `gui/${uid}/${LAUNCHD_LABEL}`;
|
|
177
|
-
const printed = run("launchctl", ["print", target]);
|
|
178
|
-
const loadedArgs = parseLaunchctlPrintArguments(printed.stdout ?? "");
|
|
179
|
-
const rawPlist = readFileSync(plist);
|
|
180
|
-
const plistText = Buffer.isBuffer(rawPlist) ? rawPlist.toString("utf8") : String(rawPlist);
|
|
181
|
-
const plistArgs = launchdPlistProgramArguments(plistText);
|
|
182
|
-
if (launchdProgramArgumentsDiffer(loadedArgs, plistArgs)) {
|
|
183
|
-
try {
|
|
184
|
-
activateLaunchd(plist, asRunCommand(run), uid, { sleep: opts.sleep });
|
|
185
|
-
return { attempted: true, restarted: true };
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
return { attempted: true, restarted: false, message: err instanceof Error ? err.message : String(err) };
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
const result = run("launchctl", ["kickstart", "-k", target]);
|
|
192
|
-
return { attempted: true, restarted: result.status === 0 };
|
|
193
|
-
}
|
|
194
|
-
if (platform === "linux") {
|
|
195
|
-
const unit = path.join(home, ".config", "systemd", "user", SYSTEMD_UNIT_NAME);
|
|
196
|
-
if (existsSync(unit)) {
|
|
197
|
-
const result = run("systemctl", ["--user", "restart", SYSTEMD_UNIT_NAME]);
|
|
198
|
-
return { attempted: true, restarted: result.status === 0 };
|
|
199
|
-
}
|
|
200
|
-
const systemUnit = path.join("/etc", "systemd", "system", SYSTEMD_UNIT_NAME);
|
|
201
|
-
if (existsSync(systemUnit)) {
|
|
202
|
-
return {
|
|
203
|
-
attempted: true,
|
|
204
|
-
restarted: false,
|
|
205
|
-
message: "system unit detected; restart requires the box's service manager",
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
return { attempted: false, restarted: false };
|
|
209
|
-
}
|
|
210
|
-
if (platform === "win32") {
|
|
211
|
-
const dir = daemonDir(undefined, home);
|
|
212
|
-
const xml = path.join(dir, `${WINDOWS_TASK_NAME}.xml`);
|
|
213
|
-
if (!existsSync(xml))
|
|
214
|
-
return { attempted: false, restarted: false };
|
|
215
|
-
run("schtasks.exe", ["/End", "/TN", WINDOWS_TASK_NAME]);
|
|
216
|
-
stopWindowsDaemonProcess(dir, { existsSync, kill: opts.kill });
|
|
217
|
-
const result = run("schtasks.exe", ["/Run", "/TN", WINDOWS_TASK_NAME]);
|
|
218
|
-
return { attempted: true, restarted: result.status === 0 };
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
catch {
|
|
222
|
-
// The caller has already completed the update; service restart failure is
|
|
223
|
-
// intentionally non-fatal and will be retried by normal service recovery.
|
|
224
|
-
}
|
|
225
|
-
return { attempted: false, restarted: false };
|
|
226
|
-
}
|
|
16
|
+
import { LAUNCHD_LABEL, SYSTEMD_UNIT_NAME, daemonDir, daemonLogPath, } from "./paths.js";
|
|
227
17
|
export function detectPlatform(platform = process.platform) {
|
|
228
18
|
if (platform === "darwin")
|
|
229
19
|
return "darwin";
|
|
230
20
|
if (platform === "linux")
|
|
231
21
|
return "linux";
|
|
232
|
-
if (platform === "win32")
|
|
233
|
-
return "win32";
|
|
234
22
|
return "other";
|
|
235
23
|
}
|
|
236
|
-
/**
|
|
237
|
-
* HQ updates moved the CLI from toolchain/node/bin/hq to
|
|
238
|
-
* toolchain/npm-global/bin/hq. A LaunchAgent that still names the old path
|
|
239
|
-
* dies with MODULE_NOT_FOUND on the next restart. Prefer the live npm-global
|
|
240
|
-
* binary when both exist.
|
|
241
|
-
*/
|
|
242
|
-
export function preferStableHqBinary(entry) {
|
|
243
|
-
const stale = `${path.sep}toolchain${path.sep}node${path.sep}bin${path.sep}`;
|
|
244
|
-
const stable = `${path.sep}toolchain${path.sep}npm-global${path.sep}bin${path.sep}`;
|
|
245
|
-
if (!entry.includes(stale))
|
|
246
|
-
return entry;
|
|
247
|
-
const candidate = entry.replace(stale, stable);
|
|
248
|
-
if (candidate !== entry && fs.existsSync(candidate))
|
|
249
|
-
return path.resolve(candidate);
|
|
250
|
-
return entry;
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Absolute path of the CLI entry that is executing this process.
|
|
254
|
-
* realpath of argv[1] only — never a PATH lookup of `hq`.
|
|
255
|
-
*/
|
|
256
|
-
export function resolveRunningCliEntry(argv = process.argv) {
|
|
257
|
-
const entry = argv[1];
|
|
258
|
-
if (!entry) {
|
|
259
|
-
throw new Error("Cannot resolve hq binary: process.argv[1] is empty");
|
|
260
|
-
}
|
|
261
|
-
try {
|
|
262
|
-
return fs.realpathSync(entry);
|
|
263
|
-
}
|
|
264
|
-
catch {
|
|
265
|
-
throw new Error(`Cannot resolve hq binary: ${entry} is not a real path`);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Absolute node binary for a service unit: the realpath of process.execPath,
|
|
270
|
-
* then its upgrade-stable alias (/opt/homebrew/bin/node rather than
|
|
271
|
-
* /opt/homebrew/Cellar/node/<version>/bin/node) when one resolves to the same
|
|
272
|
-
* binary. No PATH lookup of `node` by name.
|
|
273
|
-
*/
|
|
274
|
-
export function resolveAbsoluteNodeBinary(execPath = process.execPath) {
|
|
275
|
-
if (!execPath)
|
|
276
|
-
throw new Error("Cannot resolve node binary: execPath is empty");
|
|
277
|
-
let real;
|
|
278
|
-
try {
|
|
279
|
-
real = fs.realpathSync(execPath);
|
|
280
|
-
}
|
|
281
|
-
catch {
|
|
282
|
-
if (path.isAbsolute(execPath))
|
|
283
|
-
return execPath;
|
|
284
|
-
throw new Error(`Cannot resolve node binary: ${execPath} is not a real path`);
|
|
285
|
-
}
|
|
286
|
-
return preferStableNodeBinary(real);
|
|
287
|
-
}
|
|
288
24
|
/** Resolve the hq binary the current shell uses (argv[1] or PATH). */
|
|
289
25
|
export function resolveHqBinary(argv = process.argv, env = process.env) {
|
|
290
26
|
const entry = argv[1];
|
|
291
27
|
if (entry && fs.existsSync(entry)) {
|
|
292
|
-
return
|
|
28
|
+
return path.resolve(entry);
|
|
293
29
|
}
|
|
294
30
|
const pathEnv = env.PATH ?? "";
|
|
295
31
|
for (const dir of pathEnv.split(path.delimiter)) {
|
|
@@ -303,104 +39,9 @@ export function resolveHqBinary(argv = process.argv, env = process.env) {
|
|
|
303
39
|
}
|
|
304
40
|
throw new Error("Cannot resolve hq binary for daemon install");
|
|
305
41
|
}
|
|
306
|
-
/** True when this CLI is newer than the version the daemon recorded, or nothing was recorded. */
|
|
307
|
-
export function isNewerCliVersion(current, recorded) {
|
|
308
|
-
const recordedVersion = recorded?.trim() ?? "";
|
|
309
|
-
if (!recordedVersion)
|
|
310
|
-
return true;
|
|
311
|
-
if (semver.valid(current) && semver.valid(recordedVersion)) {
|
|
312
|
-
return semver.gt(current, recordedVersion);
|
|
313
|
-
}
|
|
314
|
-
return current !== recordedVersion;
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Reinstall and restart the user daemon only when `currentVersion` is newer
|
|
318
|
-
* than daemon/state.json `cliVersion`. A missing record counts as stale.
|
|
319
|
-
* `run` is the launchctl/systemctl seam — tests pass a stub.
|
|
320
|
-
*/
|
|
321
|
-
export function installDaemonIfStale(opts) {
|
|
322
|
-
const recorded = readDaemonState(opts.paths.daemonDir)?.cliVersion;
|
|
323
|
-
const platformForUnit = opts.platform ?? detectPlatform();
|
|
324
|
-
const installedNode = installedDaemonNodeBinary(opts.paths, platformForUnit, opts.readUnit);
|
|
325
|
-
// Only a rewrite that changes the node path helps: a unit whose node is gone
|
|
326
|
-
// or versioned, while this install resolves a different (stable) one.
|
|
327
|
-
const nodeProblem = installedNode && installedNode !== opts.paths.nodeBinary
|
|
328
|
-
? (opts.nodeProblem ?? nodeBinaryProblem)(installedNode)
|
|
329
|
-
: null;
|
|
330
|
-
if (!isNewerCliVersion(opts.currentVersion, recorded) && !nodeProblem) {
|
|
331
|
-
return {
|
|
332
|
-
reinstalled: false,
|
|
333
|
-
message: `daemon already records hq ${recorded}; not reinstalling`,
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
const run = opts.run ?? ((command, args) => {
|
|
337
|
-
const result = spawnSync(command, args, { encoding: "utf8" });
|
|
338
|
-
return {
|
|
339
|
-
status: result.status,
|
|
340
|
-
stdout: typeof result.stdout === "string" ? result.stdout : "",
|
|
341
|
-
stderr: typeof result.stderr === "string" ? result.stderr : "",
|
|
342
|
-
};
|
|
343
|
-
});
|
|
344
|
-
const platform = opts.platform ?? detectPlatform();
|
|
345
|
-
const installed = installDaemonService({
|
|
346
|
-
platform,
|
|
347
|
-
paths: opts.paths,
|
|
348
|
-
systemUser: opts.systemUser,
|
|
349
|
-
writeFileSync: opts.writeFileSync,
|
|
350
|
-
mkdirSync: opts.mkdirSync,
|
|
351
|
-
reloadSystemd: opts.reloadSystemd,
|
|
352
|
-
schtasks: opts.schtasks,
|
|
353
|
-
kill: opts.kill,
|
|
354
|
-
runCommand: opts.runCommand,
|
|
355
|
-
windowsLegacyTaskPresent: opts.windowsLegacyTaskPresent,
|
|
356
|
-
run,
|
|
357
|
-
uid: opts.uid,
|
|
358
|
-
sleep: opts.sleep,
|
|
359
|
-
});
|
|
360
|
-
if (platform === "linux" && !opts.systemUser && !opts.paths.systemUser) {
|
|
361
|
-
activateSystemd(SYSTEMD_UNIT_NAME, run);
|
|
362
|
-
}
|
|
363
|
-
return {
|
|
364
|
-
reinstalled: true,
|
|
365
|
-
message: `${installed.message} Restarted with ${opts.paths.nodeBinary} ${opts.paths.hqBinary}.`,
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* The node binary baked into the installed daemon unit (darwin plist or linux
|
|
370
|
-
* user unit), or null when there is no unit or it cannot be read. Used to
|
|
371
|
-
* reinstall a unit whose node was a versioned path an upgrade removed.
|
|
372
|
-
*/
|
|
373
|
-
export function installedDaemonNodeBinary(paths, platform, readUnit = (file) => {
|
|
374
|
-
try {
|
|
375
|
-
return fs.existsSync(file) ? fs.readFileSync(file, "utf8") : null;
|
|
376
|
-
}
|
|
377
|
-
catch {
|
|
378
|
-
return null;
|
|
379
|
-
}
|
|
380
|
-
}) {
|
|
381
|
-
if (platform === "darwin") {
|
|
382
|
-
const text = readUnit(paths.plistPath);
|
|
383
|
-
if (!text)
|
|
384
|
-
return null;
|
|
385
|
-
const block = text.match(/<key>ProgramArguments<\/key>\s*<array>([\s\S]*?)<\/array>/);
|
|
386
|
-
const first = block?.[1]?.match(/<string>([^<]*)<\/string>/);
|
|
387
|
-
return first?.[1] ?? null;
|
|
388
|
-
}
|
|
389
|
-
if (platform === "linux") {
|
|
390
|
-
const text = readUnit(paths.systemdUnitPath);
|
|
391
|
-
if (!text)
|
|
392
|
-
return null;
|
|
393
|
-
const m = text.match(/^ExecStart=('(?:[^']|'\\'')*'|\S+)/m);
|
|
394
|
-
if (!m)
|
|
395
|
-
return null;
|
|
396
|
-
const raw = m[1];
|
|
397
|
-
return raw.startsWith("'") ? raw.slice(1, -1).replace(/'\\''/g, "'") : raw;
|
|
398
|
-
}
|
|
399
|
-
return null;
|
|
400
|
-
}
|
|
401
42
|
export function resolveNodeBinary(execPath = process.execPath, env = process.env) {
|
|
402
43
|
if (execPath && fs.existsSync(execPath))
|
|
403
|
-
return
|
|
44
|
+
return execPath;
|
|
404
45
|
const pathEnv = env.PATH ?? "";
|
|
405
46
|
for (const dir of pathEnv.split(path.delimiter)) {
|
|
406
47
|
const candidate = path.join(dir, "node");
|
|
@@ -425,71 +66,9 @@ export function buildInstallPaths(opts) {
|
|
|
425
66
|
plistPath: path.join(home, "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`),
|
|
426
67
|
systemdUserDir: path.join(home, ".config", "systemd", "user"),
|
|
427
68
|
systemdUnitPath: path.join(home, ".config", "systemd", "user", SYSTEMD_UNIT_NAME),
|
|
428
|
-
windowsTaskXmlPath: path.join(ddir, `${WINDOWS_TASK_NAME}.xml`),
|
|
429
|
-
windowsUser: opts.windowsUser ?? resolveWindowsUser(env),
|
|
430
|
-
windowsHeadlessLauncher: opts.windowsHeadlessLauncher === undefined
|
|
431
|
-
? resolveWindowsHeadlessLauncher(env)
|
|
432
|
-
: (opts.windowsHeadlessLauncher ?? undefined),
|
|
433
69
|
systemUser: opts.systemUser,
|
|
434
|
-
hqRoot: opts.hqRoot,
|
|
435
|
-
hqRootSource: opts.hqRootSource,
|
|
436
70
|
};
|
|
437
71
|
}
|
|
438
|
-
/** `DOMAIN\user` for the current account, as Task Scheduler expects. */
|
|
439
|
-
export function resolveWindowsUser(env = process.env) {
|
|
440
|
-
const user = env.USERNAME?.trim() || safeUsername();
|
|
441
|
-
const domain = env.USERDOMAIN?.trim();
|
|
442
|
-
return domain ? `${domain}\\${user}` : user;
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* `conhost.exe --headless` is undocumented. It shipped with the ConPTY
|
|
446
|
-
* conhost in Windows 10 1809 (build 17763); older conhost builds reject the
|
|
447
|
-
* flag and the task would fail on every logon. Gate on the kernel build
|
|
448
|
-
* reported by os.release() ("10.0.<build>") plus a presence check.
|
|
449
|
-
*/
|
|
450
|
-
export const WINDOWS_CONHOST_HEADLESS_MIN_BUILD = 17763;
|
|
451
|
-
/** Build number from an os.release() string such as "10.0.26200"; null if unparsable. */
|
|
452
|
-
export function parseWindowsBuild(release) {
|
|
453
|
-
const m = /^\d+\.\d+\.(\d+)/.exec(release.trim());
|
|
454
|
-
if (!m)
|
|
455
|
-
return null;
|
|
456
|
-
const build = Number(m[1]);
|
|
457
|
-
return Number.isFinite(build) ? build : null;
|
|
458
|
-
}
|
|
459
|
-
/**
|
|
460
|
-
* `conhost.exe --headless` (Windows 10 1809+) runs a console app with no
|
|
461
|
-
* window. Returns the launcher path only when conhost.exe exists under
|
|
462
|
-
* SystemRoot and the host build is new enough to honour `--headless`.
|
|
463
|
-
*/
|
|
464
|
-
export function resolveWindowsHeadlessLauncher(env = process.env, existsSync = fs.existsSync, release = os.release()) {
|
|
465
|
-
const build = parseWindowsBuild(release);
|
|
466
|
-
if (build === null || build < WINDOWS_CONHOST_HEADLESS_MIN_BUILD)
|
|
467
|
-
return undefined;
|
|
468
|
-
const systemRoot = env.SystemRoot?.trim() || env.windir?.trim() || "C:\\Windows";
|
|
469
|
-
const candidate = path.join(systemRoot, "System32", "conhost.exe");
|
|
470
|
-
return existsSync(candidate) ? candidate : undefined;
|
|
471
|
-
}
|
|
472
|
-
/** Which launch wrapper the rendered task uses (recorded in the install message). */
|
|
473
|
-
export function windowsLaunchMode(paths) {
|
|
474
|
-
return paths.windowsHeadlessLauncher ? "conhost-headless" : "direct";
|
|
475
|
-
}
|
|
476
|
-
/** The task uses the interactive token, so it exists only inside the user's logon session. */
|
|
477
|
-
export function windowsLogonNotice(paths) {
|
|
478
|
-
return `runs at logon of ${paths.windowsUser}; not running while logged out`;
|
|
479
|
-
}
|
|
480
|
-
function describeWindowsLaunchMode(paths) {
|
|
481
|
-
return windowsLaunchMode(paths) === "conhost-headless"
|
|
482
|
-
? `mode: conhost --headless via ${paths.windowsHeadlessLauncher}`
|
|
483
|
-
: "mode: direct node (conhost --headless unavailable on this host; a console window may appear at logon)";
|
|
484
|
-
}
|
|
485
|
-
function safeUsername() {
|
|
486
|
-
try {
|
|
487
|
-
return os.userInfo().username;
|
|
488
|
-
}
|
|
489
|
-
catch {
|
|
490
|
-
return "";
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
72
|
export function renderLaunchdPlist(paths) {
|
|
494
73
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
495
74
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
@@ -521,7 +100,6 @@ export function renderLaunchdPlist(paths) {
|
|
|
521
100
|
<string>${escapeXml(paths.home)}</string>
|
|
522
101
|
<key>PATH</key>
|
|
523
102
|
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
|
|
524
|
-
${paths.hqRoot ? `<key>HQ_ROOT</key>\n <string>${escapeXml(paths.hqRoot)}</string>` : ""}
|
|
525
103
|
</dict>
|
|
526
104
|
</dict>
|
|
527
105
|
</plist>
|
|
@@ -537,11 +115,11 @@ Wants=network-online.target
|
|
|
537
115
|
Type=simple
|
|
538
116
|
ExecStart=${shellQuote(paths.nodeBinary)} ${shellQuote(paths.hqBinary)} mesh daemon run
|
|
539
117
|
WorkingDirectory=${paths.daemonDir}
|
|
540
|
-
Restart=
|
|
118
|
+
Restart=on-failure
|
|
541
119
|
RestartSec=5
|
|
542
120
|
Environment=HOME=${paths.home}
|
|
543
121
|
Environment=PATH=/usr/local/bin:/usr/bin:/bin
|
|
544
|
-
|
|
122
|
+
StandardOutput=append:${paths.logPath}
|
|
545
123
|
StandardError=append:${paths.logPath}
|
|
546
124
|
|
|
547
125
|
[Install]
|
|
@@ -569,237 +147,19 @@ User=${user}
|
|
|
569
147
|
Group=${user}
|
|
570
148
|
ExecStart=${shellQuote(paths.nodeBinary)} ${shellQuote(paths.hqBinary)} mesh daemon run
|
|
571
149
|
WorkingDirectory=/home/${user}/.hq/work-mesh/daemon
|
|
572
|
-
Restart=
|
|
150
|
+
Restart=on-failure
|
|
573
151
|
RestartSec=5
|
|
574
152
|
Environment=HOME=/home/${user}
|
|
575
153
|
Environment=PATH=/usr/local/bin:/usr/bin:/bin
|
|
576
154
|
Environment=HQ_MACHINE_CREDS_FILE=/home/${user}/.hq-agent/machine-creds.json
|
|
577
155
|
Environment=HQ_AGENT_IDENTITY_FILE=/var/lib/hq-agent/identity.json
|
|
578
|
-
|
|
156
|
+
StandardOutput=append:/home/${user}/.hq/work-mesh/daemon/log
|
|
579
157
|
StandardError=append:/home/${user}/.hq/work-mesh/daemon/log
|
|
580
158
|
|
|
581
159
|
[Install]
|
|
582
160
|
WantedBy=multi-user.target
|
|
583
161
|
`;
|
|
584
162
|
}
|
|
585
|
-
/**
|
|
586
|
-
* Windows Task Scheduler definition (schtasks /Create /XML). Runs at logon of
|
|
587
|
-
* the registering user, hidden, no execution time limit, one instance, and
|
|
588
|
-
* restarts every minute on failure. HOME/USERPROFILE come from the user's own
|
|
589
|
-
* session. Task Scheduler XML has no environment block, so the HQ root the
|
|
590
|
-
* install was run for is passed explicitly as `mesh daemon run --hq-root
|
|
591
|
-
* <path>` (the launchd/systemd equivalent of Environment=HQ_ROOT) and is also
|
|
592
|
-
* persisted in the daemon config as a trusted root.
|
|
593
|
-
*
|
|
594
|
-
* LogonType is InteractiveToken: S4U ("run whether user is logged on or not")
|
|
595
|
-
* needs elevation to register, and the interactive token is what an
|
|
596
|
-
* unprivileged `hq mesh daemon install` can create. As a consequence the task
|
|
597
|
-
* runs only while the registering user is logged on. The console window that
|
|
598
|
-
* an interactive-token task would otherwise open is avoided by launching
|
|
599
|
-
* through `conhost.exe --headless` when the host supports it (see
|
|
600
|
-
* resolveWindowsHeadlessLauncher); otherwise node is run directly.
|
|
601
|
-
*/
|
|
602
|
-
export function renderWindowsTaskXml(paths) {
|
|
603
|
-
const user = escapeXml(paths.windowsUser);
|
|
604
|
-
const nodeArg = windowsArgQuote(paths.nodeBinary);
|
|
605
|
-
const hqArg = windowsArgQuote(paths.hqBinary);
|
|
606
|
-
const command = paths.windowsHeadlessLauncher ?? paths.nodeBinary;
|
|
607
|
-
const rootArgs = paths.hqRoot ? ` --hq-root ${windowsArgQuote(paths.hqRoot)}` : "";
|
|
608
|
-
const args = paths.windowsHeadlessLauncher
|
|
609
|
-
? `--headless ${nodeArg} ${hqArg} mesh daemon run${rootArgs}`
|
|
610
|
-
: `${hqArg} mesh daemon run${rootArgs}`;
|
|
611
|
-
return `<?xml version="1.0" encoding="UTF-16"?>
|
|
612
|
-
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
|
613
|
-
<RegistrationInfo>
|
|
614
|
-
<URI>\\${WINDOWS_TASK_NAME}</URI>
|
|
615
|
-
<Description>HQ Work Mesh Live daemon (spool drainer + MQTT presence)</Description>
|
|
616
|
-
</RegistrationInfo>
|
|
617
|
-
<Triggers>
|
|
618
|
-
<LogonTrigger>
|
|
619
|
-
<Enabled>true</Enabled>
|
|
620
|
-
<UserId>${user}</UserId>
|
|
621
|
-
</LogonTrigger>
|
|
622
|
-
</Triggers>
|
|
623
|
-
<Principals>
|
|
624
|
-
<Principal id="Author">
|
|
625
|
-
<UserId>${user}</UserId>
|
|
626
|
-
<LogonType>${WINDOWS_TASK_LOGON_TYPE}</LogonType>
|
|
627
|
-
<RunLevel>LeastPrivilege</RunLevel>
|
|
628
|
-
</Principal>
|
|
629
|
-
</Principals>
|
|
630
|
-
<Settings>
|
|
631
|
-
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
|
|
632
|
-
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
|
|
633
|
-
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
|
|
634
|
-
<AllowHardTerminate>true</AllowHardTerminate>
|
|
635
|
-
<StartWhenAvailable>true</StartWhenAvailable>
|
|
636
|
-
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
|
|
637
|
-
<AllowStartOnDemand>true</AllowStartOnDemand>
|
|
638
|
-
<Enabled>true</Enabled>
|
|
639
|
-
<Hidden>true</Hidden>
|
|
640
|
-
<RunOnlyIfIdle>false</RunOnlyIfIdle>
|
|
641
|
-
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
|
|
642
|
-
<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
|
|
643
|
-
<WakeToRun>false</WakeToRun>
|
|
644
|
-
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
|
|
645
|
-
<Priority>7</Priority>
|
|
646
|
-
<RestartOnFailure>
|
|
647
|
-
<Interval>PT1M</Interval>
|
|
648
|
-
<Count>999</Count>
|
|
649
|
-
</RestartOnFailure>
|
|
650
|
-
</Settings>
|
|
651
|
-
<Actions Context="Author">
|
|
652
|
-
<Exec>
|
|
653
|
-
<Command>${escapeXml(command)}</Command>
|
|
654
|
-
<Arguments>${escapeXml(args)}</Arguments>
|
|
655
|
-
<WorkingDirectory>${escapeXml(paths.daemonDir)}</WorkingDirectory>
|
|
656
|
-
</Exec>
|
|
657
|
-
</Actions>
|
|
658
|
-
</Task>
|
|
659
|
-
`;
|
|
660
|
-
}
|
|
661
|
-
const WINDOWS_TASK_LOGON_TYPE = "InteractiveToken";
|
|
662
|
-
/** schtasks stores task XML as UTF-16 LE with BOM; match it so /XML parses. */
|
|
663
|
-
export function encodeWindowsTaskXml(rendered) {
|
|
664
|
-
return Buffer.from(`\uFEFF${rendered}`, "utf16le");
|
|
665
|
-
}
|
|
666
|
-
function windowsArgQuote(value) {
|
|
667
|
-
if (/^[A-Za-z0-9_.:\\/-]+$/.test(value))
|
|
668
|
-
return value;
|
|
669
|
-
return `"${value.replace(/"/g, '\\"')}"`;
|
|
670
|
-
}
|
|
671
|
-
/** Status column of `schtasks /Query /FO CSV /NH`: "TaskName","Next Run Time","Status". */
|
|
672
|
-
export function parseSchtasksCsvStatus(stdout) {
|
|
673
|
-
for (const line of stdout.split(/\r?\n/)) {
|
|
674
|
-
const cells = line.match(/"([^"]*)"/g);
|
|
675
|
-
if (!cells || cells.length < 3)
|
|
676
|
-
continue;
|
|
677
|
-
return cells[2].slice(1, -1).trim();
|
|
678
|
-
}
|
|
679
|
-
return null;
|
|
680
|
-
}
|
|
681
|
-
/** Split one CSV line as schtasks emits it (all cells quoted, `""` escapes a quote). */
|
|
682
|
-
function splitCsvLine(line) {
|
|
683
|
-
const cells = [];
|
|
684
|
-
let cur = "";
|
|
685
|
-
let inQuotes = false;
|
|
686
|
-
for (let i = 0; i < line.length; i++) {
|
|
687
|
-
const ch = line[i];
|
|
688
|
-
if (inQuotes) {
|
|
689
|
-
if (ch === '"') {
|
|
690
|
-
if (line[i + 1] === '"') {
|
|
691
|
-
cur += '"';
|
|
692
|
-
i++;
|
|
693
|
-
}
|
|
694
|
-
else
|
|
695
|
-
inQuotes = false;
|
|
696
|
-
}
|
|
697
|
-
else
|
|
698
|
-
cur += ch;
|
|
699
|
-
}
|
|
700
|
-
else if (ch === '"')
|
|
701
|
-
inQuotes = true;
|
|
702
|
-
else if (ch === ",") {
|
|
703
|
-
cells.push(cur);
|
|
704
|
-
cur = "";
|
|
705
|
-
}
|
|
706
|
-
else
|
|
707
|
-
cur += ch;
|
|
708
|
-
}
|
|
709
|
-
cells.push(cur);
|
|
710
|
-
return cells;
|
|
711
|
-
}
|
|
712
|
-
/** Column index of "Last Result" in `schtasks /Query /V /FO CSV` (fixed order, header localized). */
|
|
713
|
-
const SCHTASKS_LAST_RESULT_COLUMN = 6;
|
|
714
|
-
/**
|
|
715
|
-
* "Last Result" of `schtasks /Query /TN <name> /V /FO CSV`, normalized to an
|
|
716
|
-
* unsigned 32-bit code (schtasks prints HRESULT/NTSTATUS values as signed
|
|
717
|
-
* decimals, e.g. -2147024894 for 0x80070002). Prefers the English header
|
|
718
|
-
* when present; otherwise uses the fixed column position. Null when the
|
|
719
|
-
* output carries no task row or the cell is not numeric.
|
|
720
|
-
*/
|
|
721
|
-
export function parseSchtasksLastResult(stdout) {
|
|
722
|
-
const lines = stdout.split(/\r?\n/).filter((l) => l.trim().length > 0);
|
|
723
|
-
if (lines.length === 0)
|
|
724
|
-
return null;
|
|
725
|
-
let column = SCHTASKS_LAST_RESULT_COLUMN;
|
|
726
|
-
let rows = lines;
|
|
727
|
-
const header = splitCsvLine(lines[0]);
|
|
728
|
-
const headerIdx = header.findIndex((h) => /^last result$/i.test(h.trim()));
|
|
729
|
-
if (headerIdx >= 0 || /^hostname$/i.test(header[0]?.trim() ?? "")) {
|
|
730
|
-
if (headerIdx >= 0)
|
|
731
|
-
column = headerIdx;
|
|
732
|
-
rows = lines.slice(1);
|
|
733
|
-
}
|
|
734
|
-
for (const line of rows) {
|
|
735
|
-
const cells = splitCsvLine(line);
|
|
736
|
-
if (cells.length <= column)
|
|
737
|
-
continue;
|
|
738
|
-
const raw = cells[column].trim();
|
|
739
|
-
if (!/^-?\d+$/.test(raw))
|
|
740
|
-
continue;
|
|
741
|
-
return Number(raw) >>> 0;
|
|
742
|
-
}
|
|
743
|
-
return null;
|
|
744
|
-
}
|
|
745
|
-
/**
|
|
746
|
-
* Task Scheduler informational results mean "no failed start": 0 is success,
|
|
747
|
-
* and every SCHED_S_* code (ready, running, not yet run, terminated, queued,
|
|
748
|
-
* ...) is a success-severity HRESULT (bit 31 clear) in FACILITY_ITF (0x4)
|
|
749
|
-
* with code 0x1300-0x13FF, i.e. 0x00041300-0x000413FF. Everything else
|
|
750
|
-
* (0x8007xxxx, 0xC000xxxx, process exit codes such as 1) is a failed start.
|
|
751
|
-
*/
|
|
752
|
-
export function schtasksLastResultFailed(code) {
|
|
753
|
-
if (code === null || code === 0)
|
|
754
|
-
return false;
|
|
755
|
-
const severityFailed = (code & 0x80000000) !== 0;
|
|
756
|
-
const facility = (code >>> 16) & 0x7ff;
|
|
757
|
-
const lowCode = code & 0xffff;
|
|
758
|
-
if (!severityFailed && facility === 0x4 && lowCode >= 0x1300 && lowCode <= 0x13ff)
|
|
759
|
-
return false;
|
|
760
|
-
return true;
|
|
761
|
-
}
|
|
762
|
-
/** `--hq-root <path>` from a rendered task's <Arguments> (XML-escaped, optionally quoted). */
|
|
763
|
-
export function parseWindowsTaskHqRoot(xml) {
|
|
764
|
-
const m = /<Arguments>([^<]*)<\/Arguments>/.exec(xml);
|
|
765
|
-
if (!m)
|
|
766
|
-
return null;
|
|
767
|
-
const args = unescapeXml(m[1]);
|
|
768
|
-
const quoted = /--hq-root "((?:[^"\\]|\\.)*)"/.exec(args);
|
|
769
|
-
if (quoted)
|
|
770
|
-
return quoted[1].replace(/\\"/g, '"');
|
|
771
|
-
const bare = /--hq-root (\S+)/.exec(args);
|
|
772
|
-
return bare ? bare[1] : null;
|
|
773
|
-
}
|
|
774
|
-
/**
|
|
775
|
-
* The HQ root the installed Windows task actually carries: the task XML on
|
|
776
|
-
* disk first, else the first persisted trusted root. Reads state only; never
|
|
777
|
-
* resolves from cwd, so status reports what install recorded.
|
|
778
|
-
*/
|
|
779
|
-
export function readRecordedWindowsHqRoot(paths, deps = {}) {
|
|
780
|
-
const existsSync = deps.existsSync ?? fs.existsSync;
|
|
781
|
-
const readFileSync = deps.readFileSync ?? fs.readFileSync;
|
|
782
|
-
try {
|
|
783
|
-
if (existsSync(paths.windowsTaskXmlPath)) {
|
|
784
|
-
const raw = readFileSync(paths.windowsTaskXmlPath);
|
|
785
|
-
const text = Buffer.isBuffer(raw) ? raw.toString("utf16le").replace(/^\uFEFF/, "") : String(raw);
|
|
786
|
-
const fromXml = parseWindowsTaskHqRoot(text);
|
|
787
|
-
if (fromXml)
|
|
788
|
-
return fromXml;
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
catch {
|
|
792
|
-
// fall through to config
|
|
793
|
-
}
|
|
794
|
-
return readDaemonConfig(paths.daemonDir).trustedHqRoots[0] ?? null;
|
|
795
|
-
}
|
|
796
|
-
function unescapeXml(value) {
|
|
797
|
-
return value
|
|
798
|
-
.replace(/"/g, '"')
|
|
799
|
-
.replace(/</g, "<")
|
|
800
|
-
.replace(/>/g, ">")
|
|
801
|
-
.replace(/&/g, "&");
|
|
802
|
-
}
|
|
803
163
|
function escapeXml(value) {
|
|
804
164
|
return value
|
|
805
165
|
.replace(/&/g, "&")
|
|
@@ -819,33 +179,18 @@ export function installDaemonService(opts) {
|
|
|
819
179
|
const writeFileSync = opts.writeFileSync ?? fs.writeFileSync;
|
|
820
180
|
const mkdirSync = opts.mkdirSync ?? fs.mkdirSync;
|
|
821
181
|
mkdirSync(paths.daemonDir, { recursive: true, mode: 0o700 });
|
|
822
|
-
registerTrustedHqRoot(paths.daemonDir, paths.hqRoot);
|
|
823
|
-
const retired = retireLegacyListen({
|
|
824
|
-
home: paths.home,
|
|
825
|
-
platform,
|
|
826
|
-
run: opts.runCommand,
|
|
827
|
-
windowsTaskPresent: opts.windowsLegacyTaskPresent,
|
|
828
|
-
});
|
|
829
|
-
const legacyNote = retired.removed
|
|
830
|
-
? " Retired legacy listener ai.getindigo.hq-work-mesh-listen."
|
|
831
|
-
: "";
|
|
832
182
|
if (platform === "darwin") {
|
|
833
183
|
const rendered = renderLaunchdPlist(paths);
|
|
834
184
|
mkdirSync(paths.launchAgentsDir, { recursive: true });
|
|
835
185
|
writeFileSync(paths.plistPath, rendered, { mode: 0o600 });
|
|
836
|
-
|
|
837
|
-
activateLaunchd(paths.plistPath, opts.run, opts.uid, { sleep: opts.sleep });
|
|
838
|
-
}
|
|
839
|
-
else {
|
|
840
|
-
opts.activate?.(platform, paths.plistPath);
|
|
841
|
-
}
|
|
186
|
+
opts.activate?.(platform, paths.plistPath);
|
|
842
187
|
return {
|
|
843
188
|
platform,
|
|
844
189
|
action: "install",
|
|
845
190
|
paths,
|
|
846
191
|
rendered,
|
|
847
192
|
dest: paths.plistPath,
|
|
848
|
-
message: `Installed LaunchAgent ${LAUNCHD_LABEL} → ${paths.plistPath}
|
|
193
|
+
message: `Installed LaunchAgent ${LAUNCHD_LABEL} → ${paths.plistPath}`,
|
|
849
194
|
};
|
|
850
195
|
}
|
|
851
196
|
if (platform === "linux") {
|
|
@@ -865,13 +210,12 @@ export function installDaemonService(opts) {
|
|
|
865
210
|
dest,
|
|
866
211
|
message: `Wrote system unit template for user ${opts.systemUser ?? paths.systemUser} at ${dest}. ` +
|
|
867
212
|
`Install with: sudo cp ${dest} /etc/systemd/system/${SYSTEMD_UNIT_NAME} && ` +
|
|
868
|
-
`sudo systemctl daemon-reload && sudo systemctl enable --now ${SYSTEMD_UNIT_NAME}
|
|
213
|
+
`sudo systemctl daemon-reload && sudo systemctl enable --now ${SYSTEMD_UNIT_NAME}`,
|
|
869
214
|
};
|
|
870
215
|
}
|
|
871
216
|
const rendered = renderSystemdUserUnit(paths);
|
|
872
217
|
mkdirSync(paths.systemdUserDir, { recursive: true });
|
|
873
218
|
writeFileSync(paths.systemdUnitPath, rendered, { mode: 0o600 });
|
|
874
|
-
(opts.reloadSystemd ?? (() => spawnSync("systemctl", ["--user", "daemon-reload"], { stdio: "ignore" })))();
|
|
875
219
|
opts.activate?.(platform, paths.systemdUnitPath);
|
|
876
220
|
return {
|
|
877
221
|
platform,
|
|
@@ -879,49 +223,14 @@ export function installDaemonService(opts) {
|
|
|
879
223
|
paths,
|
|
880
224
|
rendered,
|
|
881
225
|
dest: paths.systemdUnitPath,
|
|
882
|
-
message: `Installed systemd user unit ${SYSTEMD_UNIT_NAME} → ${paths.systemdUnitPath}
|
|
883
|
-
};
|
|
884
|
-
}
|
|
885
|
-
if (platform === "win32") {
|
|
886
|
-
const schtasks = opts.schtasks ?? defaultSchtasks;
|
|
887
|
-
const rendered = renderWindowsTaskXml(paths);
|
|
888
|
-
writeFileSync(paths.windowsTaskXmlPath, encodeWindowsTaskXml(rendered), { mode: 0o600 });
|
|
889
|
-
const created = schtasks([
|
|
890
|
-
"/Create", "/TN", WINDOWS_TASK_NAME, "/XML", paths.windowsTaskXmlPath, "/F",
|
|
891
|
-
]);
|
|
892
|
-
if (created.status !== 0) {
|
|
893
|
-
throw new Error(`schtasks /Create failed for ${WINDOWS_TASK_NAME} (exit ${created.status ?? "signal"}): ` +
|
|
894
|
-
`${(created.stderr || created.stdout).trim()}`);
|
|
895
|
-
}
|
|
896
|
-
// /F replaced any previous registration without ending its instance; stop
|
|
897
|
-
// the recorded daemon so the fresh task instance can take the pid lock.
|
|
898
|
-
schtasks(["/End", "/TN", WINDOWS_TASK_NAME]);
|
|
899
|
-
stopWindowsDaemonProcess(paths.daemonDir, { kill: opts.kill });
|
|
900
|
-
const started = schtasks(["/Run", "/TN", WINDOWS_TASK_NAME]);
|
|
901
|
-
const running = started.status === 0;
|
|
902
|
-
const mode = describeWindowsLaunchMode(paths);
|
|
903
|
-
const rootLine = paths.hqRoot
|
|
904
|
-
? `HQ root: ${paths.hqRoot}${paths.hqRootSource ? ` (from ${paths.hqRootSource})` : ""}\n`
|
|
905
|
-
: "";
|
|
906
|
-
return {
|
|
907
|
-
platform,
|
|
908
|
-
action: "install",
|
|
909
|
-
paths,
|
|
910
|
-
rendered,
|
|
911
|
-
dest: paths.windowsTaskXmlPath,
|
|
912
|
-
running,
|
|
913
|
-
message: running
|
|
914
|
-
? `${rootLine}Installed Scheduled Task ${WINDOWS_TASK_NAME} → ${paths.windowsTaskXmlPath} (started; ${mode})${legacyNote}`
|
|
915
|
-
: `${rootLine}Installed Scheduled Task ${WINDOWS_TASK_NAME} → ${paths.windowsTaskXmlPath} (${mode}); ` +
|
|
916
|
-
`start failed: ${(started.stderr || started.stdout).trim()}. It starts at next logon.${legacyNote}`,
|
|
917
|
-
notice: windowsLogonNotice(paths),
|
|
226
|
+
message: `Installed systemd user unit ${SYSTEMD_UNIT_NAME} → ${paths.systemdUnitPath}`,
|
|
918
227
|
};
|
|
919
228
|
}
|
|
920
229
|
return {
|
|
921
230
|
platform,
|
|
922
231
|
action: "install",
|
|
923
232
|
paths,
|
|
924
|
-
message: `Unsupported platform for service install; run: ${paths.nodeBinary} ${paths.hqBinary} mesh daemon run
|
|
233
|
+
message: `Unsupported platform for service install; run: ${paths.nodeBinary} ${paths.hqBinary} mesh daemon run`,
|
|
925
234
|
};
|
|
926
235
|
}
|
|
927
236
|
export function uninstallDaemonService(opts) {
|
|
@@ -929,44 +238,9 @@ export function uninstallDaemonService(opts) {
|
|
|
929
238
|
const paths = opts.paths ?? buildInstallPaths({});
|
|
930
239
|
const unlinkSync = opts.unlinkSync ?? fs.unlinkSync;
|
|
931
240
|
const existsSync = opts.existsSync ?? fs.existsSync;
|
|
932
|
-
if (platform === "win32") {
|
|
933
|
-
const schtasks = opts.schtasks ?? defaultSchtasks;
|
|
934
|
-
const registered = schtasks(["/Query", "/TN", WINDOWS_TASK_NAME, "/FO", "CSV", "/NH"]).status === 0;
|
|
935
|
-
if (registered) {
|
|
936
|
-
schtasks(["/End", "/TN", WINDOWS_TASK_NAME]);
|
|
937
|
-
stopWindowsDaemonProcess(paths.daemonDir, { existsSync, kill: opts.kill });
|
|
938
|
-
const deleted = schtasks(["/Delete", "/TN", WINDOWS_TASK_NAME, "/F"]);
|
|
939
|
-
if (deleted.status !== 0) {
|
|
940
|
-
throw new Error(`schtasks /Delete failed for ${WINDOWS_TASK_NAME} (exit ${deleted.status ?? "signal"}): ` +
|
|
941
|
-
`${(deleted.stderr || deleted.stdout).trim()}`);
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
if (existsSync(paths.windowsTaskXmlPath))
|
|
945
|
-
unlinkSync(paths.windowsTaskXmlPath);
|
|
946
|
-
return {
|
|
947
|
-
platform,
|
|
948
|
-
action: "uninstall",
|
|
949
|
-
paths,
|
|
950
|
-
dest: paths.windowsTaskXmlPath,
|
|
951
|
-
message: registered
|
|
952
|
-
? `Removed Scheduled Task ${WINDOWS_TASK_NAME}`
|
|
953
|
-
: `Scheduled Task ${WINDOWS_TASK_NAME} was not registered; removed local task XML if present`,
|
|
954
|
-
};
|
|
955
|
-
}
|
|
956
241
|
if (platform === "darwin") {
|
|
957
242
|
if (existsSync(paths.plistPath)) {
|
|
958
|
-
|
|
959
|
-
opts.deactivate(platform, paths.plistPath);
|
|
960
|
-
}
|
|
961
|
-
else {
|
|
962
|
-
const run = opts.run ?? defaultRunCommand;
|
|
963
|
-
const target = launchdServiceTarget(paths.plistPath, opts.uid);
|
|
964
|
-
const bootout = run("launchctl", ["bootout", target]);
|
|
965
|
-
if (bootout.status !== 0 && run("launchctl", ["print", target]).status === 0) {
|
|
966
|
-
const detail = (bootout.stderr || bootout.stdout).trim();
|
|
967
|
-
throw new Error(`launchctl bootout failed for ${target}${detail ? `: ${detail}` : ` (exit ${bootout.status})`}`);
|
|
968
|
-
}
|
|
969
|
-
}
|
|
243
|
+
opts.deactivate?.(platform, paths.plistPath);
|
|
970
244
|
unlinkSync(paths.plistPath);
|
|
971
245
|
}
|
|
972
246
|
return {
|
|
@@ -1001,82 +275,10 @@ export function uninstallDaemonService(opts) {
|
|
|
1001
275
|
message: "Nothing to uninstall on this platform",
|
|
1002
276
|
};
|
|
1003
277
|
}
|
|
1004
|
-
/**
|
|
1005
|
-
* Live service-manager probe for `daemonServiceStatus`: `launchctl print
|
|
1006
|
-
* gui/<uid>/<label>` on macOS, `systemctl --user is-active` on Linux.
|
|
1007
|
-
*/
|
|
1008
|
-
export function daemonServiceIsLoaded(run, uid) {
|
|
1009
|
-
return (platform) => {
|
|
1010
|
-
if (platform === "darwin")
|
|
1011
|
-
return launchdIsLoaded(LAUNCHD_LABEL, run, uid);
|
|
1012
|
-
if (platform === "linux")
|
|
1013
|
-
return systemdIsActive(SYSTEMD_UNIT_NAME, run);
|
|
1014
|
-
return false;
|
|
1015
|
-
};
|
|
1016
|
-
}
|
|
1017
278
|
export function daemonServiceStatus(opts) {
|
|
1018
279
|
const platform = opts.platform ?? detectPlatform();
|
|
1019
280
|
const paths = opts.paths ?? buildInstallPaths({});
|
|
1020
281
|
const existsSync = opts.existsSync ?? fs.existsSync;
|
|
1021
|
-
if (platform === "win32") {
|
|
1022
|
-
const schtasks = opts.schtasks ?? defaultSchtasks;
|
|
1023
|
-
// schtasks only tells us whether the task exists. Its Status column is
|
|
1024
|
-
// localized ("Running" / "Wird ausgeführt" / ...), so the daemon pid lock
|
|
1025
|
-
// is the source of truth for "running"; the column is shown when it
|
|
1026
|
-
// happens to carry a value, as extra context only.
|
|
1027
|
-
const query = schtasks(["/Query", "/TN", WINDOWS_TASK_NAME, "/FO", "CSV", "/NH"]);
|
|
1028
|
-
const installed = query.status === 0;
|
|
1029
|
-
const taskState = installed ? parseSchtasksCsvStatus(query.stdout) : null;
|
|
1030
|
-
// The verbose query carries "Last Result": a non-zero, non-informational
|
|
1031
|
-
// code means the last start failed (for example conhost rejecting
|
|
1032
|
-
// --headless), which the pid lock alone would report as merely "not
|
|
1033
|
-
// running". Surface it so a failed start never looks like a clean idle.
|
|
1034
|
-
const verbose = installed
|
|
1035
|
-
? schtasks(["/Query", "/TN", WINDOWS_TASK_NAME, "/V", "/FO", "CSV"])
|
|
1036
|
-
: null;
|
|
1037
|
-
const lastResult = verbose && verbose.status === 0 ? parseSchtasksLastResult(verbose.stdout) : null;
|
|
1038
|
-
const lastRunFailed = schtasksLastResultFailed(lastResult);
|
|
1039
|
-
const lock = pidLockStatus(daemonPidPath(paths.daemonDir), {
|
|
1040
|
-
isProcessAlive: opts.isProcessAlive ?? defaultPidLockDeps().isProcessAlive,
|
|
1041
|
-
readFileSync: opts.readFileSync,
|
|
1042
|
-
existsSync,
|
|
1043
|
-
});
|
|
1044
|
-
const running = lock === "held";
|
|
1045
|
-
// Read the root the task actually carries and re-check it: a moved,
|
|
1046
|
-
// renamed, or deleted HQ tree leaves the task pointing at nothing.
|
|
1047
|
-
const recordedHqRoot = installed
|
|
1048
|
-
? readRecordedWindowsHqRoot(paths, { existsSync, readFileSync: opts.readFileSync })
|
|
1049
|
-
: null;
|
|
1050
|
-
const rootValid = recordedHqRoot ? isInstallableHqRoot(recordedHqRoot) : undefined;
|
|
1051
|
-
const detail = (taskState ? ` [task: ${taskState}]` : "") +
|
|
1052
|
-
(lastRunFailed ? ` [last run failed: result ${lastResult}]` : "") +
|
|
1053
|
-
(rootValid === false ? ` [recorded root no longer qualifies: ${recordedHqRoot}]` : "");
|
|
1054
|
-
let message;
|
|
1055
|
-
if (!installed) {
|
|
1056
|
-
message = running
|
|
1057
|
-
? `Scheduled Task ${WINDOWS_TASK_NAME}: not installed (daemon running outside the task)`
|
|
1058
|
-
: `Scheduled Task ${WINDOWS_TASK_NAME}: not installed`;
|
|
1059
|
-
}
|
|
1060
|
-
else if (running) {
|
|
1061
|
-
message = `Scheduled Task ${WINDOWS_TASK_NAME}: running${detail}`;
|
|
1062
|
-
}
|
|
1063
|
-
else {
|
|
1064
|
-
message = `Scheduled Task ${WINDOWS_TASK_NAME}: installed (daemon not running${lock === "stale" ? ", stale pid lock" : ""})${detail}`;
|
|
1065
|
-
}
|
|
1066
|
-
return {
|
|
1067
|
-
platform,
|
|
1068
|
-
action: "status",
|
|
1069
|
-
paths,
|
|
1070
|
-
dest: paths.windowsTaskXmlPath,
|
|
1071
|
-
running,
|
|
1072
|
-
message,
|
|
1073
|
-
lastResult,
|
|
1074
|
-
lastRunFailed,
|
|
1075
|
-
notice: installed ? windowsLogonNotice(paths) : undefined,
|
|
1076
|
-
recordedHqRoot,
|
|
1077
|
-
rootValid,
|
|
1078
|
-
};
|
|
1079
|
-
}
|
|
1080
282
|
if (platform === "darwin") {
|
|
1081
283
|
const installed = existsSync(paths.plistPath);
|
|
1082
284
|
const running = installed
|