@indigoai-us/hq-cli 5.314.0 → 5.316.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 +4320 -1
- package/README.md +113 -0
- package/assets/bot-workers/setup/context/USER-GUIDE.md +404 -0
- package/assets/bot-workers/setup/context/quick-reference.md +199 -0
- package/assets/bot-workers/setup/skills/agents-and-team.md +167 -0
- package/assets/bot-workers/setup/skills/explain-hq.md +35 -0
- package/assets/bot-workers/setup/skills/first-company.md +74 -0
- package/assets/bot-workers/setup/skills/joining-a-team.md +125 -0
- package/assets/bot-workers/setup/skills/pricing.md +92 -0
- package/assets/bot-workers/setup/skills/standing-help.md +81 -0
- package/assets/bot-workers/setup/skills/your-business.md +281 -0
- package/assets/bot-workers/setup/worker.yaml +791 -0
- package/assets/lanes-hooks/hq-lanes-drain.json +15 -0
- package/assets/lanes-hooks/hq-lanes-drain.mjs +275 -0
- package/assets/lanes-hooks/hq-lanes-drain.sh +21 -0
- package/assets/lanes-reconcile/hq-lanes-reconcile.service +11 -0
- package/assets/lanes-reconcile/hq-lanes-reconcile.timer +12 -0
- package/assets/scaffold/.claude/hooks/validate-policy-frontmatter.sh +485 -0
- package/assets/scaffold/core/scripts/audit-log.sh +384 -0
- package/assets/scaffold/core/scripts/checkpoint-stop-gate.sh +281 -43
- package/assets/scaffold/core/scripts/clean-worktree-reconcile-handoff.sh +171 -0
- package/assets/scaffold/core/scripts/detect-stale-review-base.sh +199 -0
- package/assets/scaffold/core/scripts/eval-trigger.sh +193 -0
- package/assets/scaffold/core/scripts/git-pack-extension-check.sh +164 -0
- package/assets/scaffold/core/scripts/handoff-finalize.sh +688 -0
- package/assets/scaffold/core/scripts/handoff-open-steps.sh +81 -0
- package/assets/scaffold/core/scripts/handoff-post.sh +252 -0
- package/assets/scaffold/core/scripts/hook-lib.sh +345 -50
- package/assets/scaffold/core/scripts/hq-delegate-bundle.sh +307 -0
- package/assets/scaffold/core/scripts/hq-delegate-grant.sh +252 -0
- package/assets/scaffold/core/scripts/hq-delegate-pickup.sh +99 -0
- package/assets/scaffold/core/scripts/hq-delegate-publish.sh +91 -0
- package/assets/scaffold/core/scripts/hq-delegate-repo.sh +158 -0
- package/assets/scaffold/core/scripts/hq-delegate-resolve.sh +145 -0
- package/assets/scaffold/core/scripts/hq-delegate-secrets.sh +129 -0
- package/assets/scaffold/core/scripts/hq-delegate-send.sh +259 -0
- package/assets/scaffold/core/scripts/hq-delegate-transfer.sh +175 -0
- package/assets/scaffold/core/scripts/hq-delegate-verify.sh +238 -0
- package/assets/scaffold/core/scripts/hq-dm-bind.sh +585 -0
- package/assets/scaffold/core/scripts/hq-job-notify.sh +389 -0
- package/assets/scaffold/core/scripts/hq-job-probe.sh +835 -0
- package/assets/scaffold/core/scripts/hq-job-remediate.sh +359 -0
- package/assets/scaffold/core/scripts/hq-job-run.sh +1025 -0
- package/assets/scaffold/core/scripts/hq-pin.sh +118 -0
- package/assets/scaffold/core/scripts/hq-session.sh +184 -23
- package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +310 -0
- package/assets/scaffold/core/scripts/jobs-validate.sh +451 -0
- package/assets/scaffold/core/scripts/knowledge-prefs.sh +55 -0
- package/assets/scaffold/core/scripts/lib/portable.sh +211 -0
- package/assets/scaffold/core/scripts/lib/secret-patterns.sh +58 -0
- package/assets/scaffold/core/scripts/lib/session-id.sh +3 -2
- package/assets/scaffold/core/scripts/lib/session-scope-capability.sh +1 -1
- package/assets/scaffold/core/scripts/lib/work-mesh-enqueue.sh +2 -1
- package/assets/scaffold/core/scripts/lib/work-mesh-live-hook.sh +378 -0
- package/assets/scaffold/core/scripts/lib/work-mesh-live-rebind.sh +141 -0
- package/assets/scaffold/core/scripts/migrate-policy-triggers.sh +378 -0
- package/assets/scaffold/core/scripts/ontology-audience-grant.sh +81 -0
- package/assets/scaffold/core/scripts/ontology-brief.mjs +93 -0
- package/assets/scaffold/core/scripts/ontology-candidate.sh +100 -0
- package/assets/scaffold/core/scripts/ontology-garden.mjs +238 -0
- package/assets/scaffold/core/scripts/ontology-source-worklist.sh +79 -0
- package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +834 -0
- package/assets/scaffold/core/scripts/policy-age-report.sh +156 -0
- package/assets/scaffold/core/scripts/policy-retire.sh +199 -0
- package/assets/scaffold/core/scripts/qmd-reindex-after-sync.sh +10 -87
- package/assets/scaffold/core/scripts/qmd-reindex-bg.sh +40 -0
- package/assets/scaffold/core/scripts/read-policy-frontmatter.sh +32 -0
- package/assets/scaffold/core/scripts/rebuild-company-knowledge-index.sh +36 -3
- package/assets/scaffold/core/scripts/rebuild-projects-index.sh +99 -12
- package/assets/scaffold/core/scripts/refresh-vault-access.sh +188 -0
- package/assets/scaffold/core/scripts/register-project.sh +262 -0
- package/assets/scaffold/core/scripts/repo-run-registry.sh +408 -0
- package/assets/scaffold/core/scripts/resolve-company.sh +199 -0
- package/assets/scaffold/core/scripts/resume-thread-lock.sh +285 -0
- package/assets/scaffold/core/scripts/share-suggestion-state.sh +541 -0
- package/assets/scaffold/core/scripts/source-yaml-validate.sh +36 -0
- package/assets/scaffold/core/scripts/token-usage-report.sh +81 -20
- package/assets/scaffold/core/scripts/verify-story-deliverables.sh +148 -0
- package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +152 -0
- package/assets/scaffold/core/scripts/work-mesh-live-rebind.sh +59 -0
- package/assets/scaffold/core/scripts/worktree-gc.sh +362 -0
- package/contracts/preflight/v1/fixtures.json +87 -0
- package/contracts/preflight/v1/schema.json +58 -0
- package/dist/bin/hq-auth-refresh.d.ts +2 -0
- package/dist/bin/hq-auth-refresh.js +12 -6
- package/dist/command-catalog.generated.d.ts +10798 -0
- package/dist/command-catalog.generated.js +13915 -0
- package/dist/command-registration-plan.d.ts +474 -0
- package/dist/command-registration-plan.js +136 -0
- package/dist/commands/__fixtures__/access-vault.d.ts +2 -0
- package/dist/commands/__fixtures__/access-vault.js +1 -1
- package/dist/commands/_patterns.d.ts +16 -0
- package/dist/commands/_patterns.js +20 -3
- package/dist/commands/access.d.ts +2 -1
- package/dist/commands/access.js +58 -49
- package/dist/commands/agent-enroll.d.ts +146 -0
- package/dist/commands/agent-enroll.js +401 -0
- package/dist/commands/agent-inbox.d.ts +9 -0
- package/dist/commands/agent-inbox.js +102 -0
- package/dist/commands/agent-kit.d.ts +87 -0
- package/dist/commands/agent-kit.js +480 -0
- package/dist/commands/agent-mcp.d.ts +24 -0
- package/dist/commands/agent-mcp.js +127 -0
- package/dist/commands/agent-probe.d.ts +77 -0
- package/dist/commands/agent-probe.js +335 -0
- package/dist/commands/agent.d.ts +13 -0
- package/dist/commands/agent.js +40 -0
- package/dist/commands/agents.d.ts +106 -4
- package/dist/commands/agents.js +924 -45
- package/dist/commands/auth.d.ts +1 -0
- package/dist/commands/auth.js +189 -19
- package/dist/commands/billing-sponsor.d.ts +83 -0
- package/dist/commands/billing-sponsor.js +344 -0
- package/dist/commands/billing.d.ts +3 -0
- package/dist/commands/billing.js +6 -1
- package/dist/commands/bot-companies.d.ts +40 -0
- package/dist/commands/bot-companies.js +64 -0
- package/dist/commands/bot-continuity.d.ts +28 -0
- package/dist/commands/bot-continuity.js +68 -0
- package/dist/commands/bot-jobs.d.ts +131 -0
- package/dist/commands/bot-jobs.js +474 -0
- package/dist/commands/bot.d.ts +278 -0
- package/dist/commands/bot.js +1982 -0
- package/dist/commands/channels.js +56 -1
- package/dist/commands/cloud-demote.js +3 -2
- package/dist/commands/cloud-provision.d.ts +14 -0
- package/dist/commands/cloud-provision.js +232 -58
- package/dist/commands/cloud-retire.d.ts +51 -0
- package/dist/commands/cloud-retire.js +154 -0
- package/dist/commands/cloud.d.ts +49 -15
- package/dist/commands/cloud.js +357 -122
- package/dist/commands/company-rename-flag.d.ts +4 -0
- package/dist/commands/company-rename-flag.js +7 -0
- package/dist/commands/company-rename.d.ts +4 -0
- package/dist/commands/company-rename.js +90 -0
- package/dist/commands/company-transfer.d.ts +4 -28
- package/dist/commands/company-transfer.js +5 -49
- package/dist/commands/company.js +68 -3
- package/dist/commands/core-audit-log-native.d.ts +9 -0
- package/dist/commands/core-audit-log-native.js +257 -0
- package/dist/commands/core-checkpoint-gate-setting.d.ts +59 -0
- package/dist/commands/core-checkpoint-gate-setting.js +163 -0
- package/dist/commands/core-checkpoint-stop-gate-native.d.ts +34 -0
- package/dist/commands/core-checkpoint-stop-gate-native.js +725 -0
- package/dist/commands/core-checkpoint.d.ts +19 -9
- package/dist/commands/core-checkpoint.js +301 -37
- package/dist/commands/core-command-catalog.d.ts +34 -0
- package/dist/commands/core-command-catalog.js +62 -0
- package/dist/commands/core-company-index-scope-flag.d.ts +3 -0
- package/dist/commands/core-company-index-scope-flag.js +6 -0
- package/dist/commands/core-delegate-w1b.d.ts +10 -0
- package/dist/commands/core-delegate-w1b.js +1219 -0
- package/dist/commands/core-delegate.d.ts +46 -0
- package/dist/commands/core-delegate.js +1040 -0
- package/dist/commands/core-detect-stale-review-base-native.d.ts +23 -0
- package/dist/commands/core-detect-stale-review-base-native.js +178 -0
- package/dist/commands/core-dm-bind-native.d.ts +32 -0
- package/dist/commands/core-dm-bind-native.js +668 -0
- package/dist/commands/core-eval-trigger-native.d.ts +4 -0
- package/dist/commands/core-eval-trigger-native.js +12 -0
- package/dist/commands/core-git-pack-extension-check-native.d.ts +22 -0
- package/dist/commands/core-git-pack-extension-check-native.js +190 -0
- package/dist/commands/core-handoff-fast.d.ts +18 -0
- package/dist/commands/core-handoff-fast.js +104 -0
- package/dist/commands/core-handoff-open-steps.d.ts +21 -0
- package/dist/commands/core-handoff-open-steps.js +264 -0
- package/dist/commands/core-handoff.d.ts +24 -0
- package/dist/commands/core-handoff.js +1144 -0
- package/dist/commands/core-hook-state-helpers-native.d.ts +11 -0
- package/dist/commands/core-hook-state-helpers-native.js +74 -0
- package/dist/commands/core-hq-session-native.d.ts +39 -0
- package/dist/commands/core-hq-session-native.js +579 -0
- package/dist/commands/core-job-native-utils.d.ts +6 -0
- package/dist/commands/core-job-native-utils.js +80 -0
- package/dist/commands/core-job-native.d.ts +5 -0
- package/dist/commands/core-job-native.js +16 -0
- package/dist/commands/core-job-notify-native.d.ts +36 -0
- package/dist/commands/core-job-notify-native.js +359 -0
- package/dist/commands/core-job-probe-native.d.ts +45 -0
- package/dist/commands/core-job-probe-native.js +564 -0
- package/dist/commands/core-job-remediate-native.d.ts +26 -0
- package/dist/commands/core-job-remediate-native.js +374 -0
- package/dist/commands/core-job-remote-launcher.d.ts +7 -0
- package/dist/commands/core-job-remote-launcher.js +51 -0
- package/dist/commands/core-job-run-native.d.ts +47 -0
- package/dist/commands/core-job-run-native.js +1215 -0
- package/dist/commands/core-jobs-native.d.ts +25 -0
- package/dist/commands/core-jobs-native.js +1339 -0
- package/dist/commands/core-knowledge-prefs.d.ts +11 -0
- package/dist/commands/core-knowledge-prefs.js +137 -0
- package/dist/commands/core-migrate-policy-triggers-native.d.ts +21 -0
- package/dist/commands/core-migrate-policy-triggers-native.js +374 -0
- package/dist/commands/core-native-handoff-flag.d.ts +4 -0
- package/dist/commands/core-native-handoff-flag.js +7 -0
- package/dist/commands/core-native-hook-helper-commands.d.ts +4 -0
- package/dist/commands/core-native-hook-helper-commands.js +56 -0
- package/dist/commands/core-native-hook-helpers-flag.d.ts +4 -0
- package/dist/commands/core-native-hook-helpers-flag.js +7 -0
- package/dist/commands/core-native-jobs-flag.d.ts +4 -0
- package/dist/commands/core-native-jobs-flag.js +7 -0
- package/dist/commands/core-native-policy-flag.d.ts +9 -0
- package/dist/commands/core-native-policy-flag.js +12 -0
- package/dist/commands/core-native-session-flag.d.ts +4 -0
- package/dist/commands/core-native-session-flag.js +7 -0
- package/dist/commands/core-native-utilities-flag.d.ts +4 -0
- package/dist/commands/core-native-utilities-flag.js +7 -0
- package/dist/commands/core-native-utilities.d.ts +29 -0
- package/dist/commands/core-native-utilities.js +54 -0
- package/dist/commands/core-native-worker-skills-flag.d.ts +4 -0
- package/dist/commands/core-native-worker-skills-flag.js +7 -0
- package/dist/commands/core-ontology-native.d.ts +17 -0
- package/dist/commands/core-ontology-native.js +916 -0
- package/dist/commands/core-ontology.d.ts +66 -0
- package/dist/commands/core-ontology.js +430 -0
- package/dist/commands/core-pin-native.d.ts +14 -0
- package/dist/commands/core-pin-native.js +236 -0
- package/dist/commands/core-policy-frontmatter.d.ts +8 -0
- package/dist/commands/core-policy-frontmatter.js +52 -0
- package/dist/commands/core-policy.d.ts +14 -0
- package/dist/commands/core-policy.js +1018 -0
- package/dist/commands/core-refresh-vault-access-native.d.ts +20 -0
- package/dist/commands/core-refresh-vault-access-native.js +229 -0
- package/dist/commands/core-register-project-native.d.ts +30 -0
- package/dist/commands/core-register-project-native.js +347 -0
- package/dist/commands/core-repo-run-registry-native.d.ts +19 -0
- package/dist/commands/core-repo-run-registry-native.js +357 -0
- package/dist/commands/core-resolve-company-command.d.ts +4 -0
- package/dist/commands/core-resolve-company-command.js +42 -0
- package/dist/commands/core-resolve-company-native.d.ts +28 -0
- package/dist/commands/core-resolve-company-native.js +408 -0
- package/dist/commands/core-share-suggestion-state-native.d.ts +18 -0
- package/dist/commands/core-share-suggestion-state-native.js +445 -0
- package/dist/commands/core-work-mesh-bind-trusted-native.d.ts +32 -0
- package/dist/commands/core-work-mesh-bind-trusted-native.js +190 -0
- package/dist/commands/core-work-mesh-live-rebind-native.d.ts +18 -0
- package/dist/commands/core-work-mesh-live-rebind-native.js +262 -0
- package/dist/commands/core-worker-lint-native.d.ts +4 -0
- package/dist/commands/core-worker-lint-native.js +160 -0
- package/dist/commands/core-worker-share-native.d.ts +4 -0
- package/dist/commands/core-worker-share-native.js +260 -0
- package/dist/commands/core-worker-skills-command.d.ts +8 -0
- package/dist/commands/core-worker-skills-command.js +33 -0
- package/dist/commands/core-worker-skills-runtime.d.ts +33 -0
- package/dist/commands/core-worker-skills-runtime.js +86 -0
- package/dist/commands/core.d.ts +4 -0
- package/dist/commands/core.js +282 -80
- package/dist/commands/crm.js +52 -3
- package/dist/commands/daemon.d.ts +63 -0
- package/dist/commands/daemon.js +877 -0
- package/dist/commands/db-provision.js +4 -4
- package/dist/commands/db-sql.js +7 -21
- package/dist/commands/deploy-comments.d.ts +3 -0
- package/dist/commands/deploy-comments.js +162 -0
- package/dist/commands/dm.d.ts +119 -12
- package/dist/commands/dm.js +388 -38
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.js +158 -12
- package/dist/commands/feedback.d.ts +6 -0
- package/dist/commands/feedback.js +86 -37
- package/dist/commands/files-browse.d.ts +32 -12
- package/dist/commands/files-browse.js +176 -60
- package/dist/commands/files.d.ts +17 -0
- package/dist/commands/files.js +300 -47
- package/dist/commands/group-grants.js +3 -2
- package/dist/commands/groups.js +6 -5
- package/dist/commands/index-cmd.d.ts +19 -1
- package/dist/commands/index-cmd.js +74 -7
- package/dist/commands/integrations-api.d.ts +15 -10
- package/dist/commands/integrations-api.js +27 -22
- package/dist/commands/integrations-connect.d.ts +51 -13
- package/dist/commands/integrations-connect.js +86 -71
- package/dist/commands/integrations-core.d.ts +6 -6
- package/dist/commands/integrations-core.js +25 -11
- package/dist/commands/integrations-import.d.ts +1 -1
- package/dist/commands/integrations-import.js +43 -24
- package/dist/commands/integrations-manage.js +20 -13
- package/dist/commands/integrations.d.ts +8 -0
- package/dist/commands/integrations.js +94 -7
- package/dist/commands/lanes-accounts.d.ts +28 -0
- package/dist/commands/lanes-accounts.js +595 -0
- package/dist/commands/lanes-autopilot.d.ts +11 -0
- package/dist/commands/lanes-autopilot.js +336 -0
- package/dist/commands/lanes-checks.d.ts +51 -0
- package/dist/commands/lanes-checks.js +941 -0
- package/dist/commands/lanes-hold.d.ts +43 -0
- package/dist/commands/lanes-hold.js +655 -0
- package/dist/commands/lanes-keep-alive-audit.d.ts +10 -0
- package/dist/commands/lanes-keep-alive-audit.js +19 -0
- package/dist/commands/lanes-kpis.d.ts +11 -0
- package/dist/commands/lanes-kpis.js +34 -0
- package/dist/commands/lanes-message.d.ts +9 -0
- package/dist/commands/lanes-message.js +946 -0
- package/dist/commands/lanes-move.d.ts +12 -0
- package/dist/commands/lanes-move.js +397 -0
- package/dist/commands/lanes-questions.d.ts +36 -0
- package/dist/commands/lanes-questions.js +1005 -0
- package/dist/commands/lanes-report.d.ts +11 -0
- package/dist/commands/lanes-report.js +333 -0
- package/dist/commands/lanes-resume.d.ts +6 -0
- package/dist/commands/lanes-resume.js +564 -0
- package/dist/commands/lanes-review.d.ts +10 -0
- package/dist/commands/lanes-review.js +56 -0
- package/dist/commands/lanes-shared.d.ts +449 -0
- package/dist/commands/lanes-shared.js +170 -0
- package/dist/commands/lanes-stories.d.ts +15 -0
- package/dist/commands/lanes-stories.js +347 -0
- package/dist/commands/lanes-watch.d.ts +7 -0
- package/dist/commands/lanes-watch.js +216 -0
- package/dist/commands/lanes.d.ts +149 -0
- package/dist/commands/lanes.js +9013 -0
- package/dist/commands/login.js +49 -6
- package/dist/commands/mcp-registration.d.ts +32 -25
- package/dist/commands/mcp-registration.js +256 -23
- package/dist/commands/mcp-status.js +1 -0
- package/dist/commands/meetings.js +55 -34
- package/dist/commands/members.js +5 -1
- package/dist/commands/mesh.d.ts +11 -0
- package/dist/commands/mesh.js +1086 -76
- package/dist/commands/monitor.d.ts +58 -0
- package/dist/commands/monitor.js +980 -0
- package/dist/commands/onboard-bot-membership.d.ts +32 -0
- package/dist/commands/onboard-bot-membership.js +40 -0
- package/dist/commands/onboard-create-identity.d.ts +26 -0
- package/dist/commands/onboard-create-identity.js +23 -0
- package/dist/commands/onboard-identity-guard.d.ts +1 -1
- package/dist/commands/onboard.js +24 -5
- package/dist/commands/outpost-pruner.d.ts +3 -0
- package/dist/commands/outpost-pruner.js +125 -0
- package/dist/commands/pack-install.js +3 -1
- package/dist/commands/packs.js +11 -1
- package/dist/commands/people.d.ts +4 -0
- package/dist/commands/people.js +37 -3
- package/dist/commands/personal-connector-settings-flag.d.ts +4 -0
- package/dist/commands/personal-connector-settings-flag.js +7 -0
- package/dist/commands/personal-targeted-push-flag.d.ts +4 -0
- package/dist/commands/personal-targeted-push-flag.js +7 -0
- package/dist/commands/personal-targeted-push-paths.d.ts +3 -0
- package/dist/commands/personal-targeted-push-paths.js +67 -0
- package/dist/commands/publish.d.ts +8 -1
- package/dist/commands/publish.js +17 -4
- package/dist/commands/reindex.js +56 -6
- package/dist/commands/report.d.ts +19 -0
- package/dist/commands/report.js +537 -0
- package/dist/commands/rescue.d.ts +4 -0
- package/dist/commands/rescue.js +27 -17
- package/dist/commands/run-feature-telemetry.d.ts +3 -0
- package/dist/commands/run-feature-telemetry.js +6 -0
- package/dist/commands/run.js +18 -4
- package/dist/commands/safe-extract.d.ts +11 -2
- package/dist/commands/safe-extract.js +36 -8
- package/dist/commands/secrets.d.ts +20 -2
- package/dist/commands/secrets.js +175 -71
- package/dist/commands/skill.d.ts +35 -4
- package/dist/commands/skill.js +357 -18
- package/dist/commands/staff/reset-test-account.d.ts +110 -0
- package/dist/commands/staff/reset-test-account.js +268 -0
- package/dist/commands/staff/test-account.d.ts +51 -0
- package/dist/commands/staff/test-account.js +196 -0
- package/dist/commands/sync-mode.d.ts +11 -0
- package/dist/commands/sync-mode.js +30 -0
- package/dist/commands/sync-narrow.js +36 -5
- package/dist/commands/team-sync.js +71 -10
- package/dist/commands/update.js +6 -0
- package/dist/commands/vault-retention-flag.d.ts +3 -0
- package/dist/commands/vault-retention-flag.js +9 -0
- package/dist/commands/vault-retention.d.ts +11 -0
- package/dist/commands/vault-retention.js +69 -0
- package/dist/commands/version.d.ts +10 -0
- package/dist/commands/version.js +11 -0
- package/dist/commands/whoami.d.ts +22 -0
- package/dist/commands/whoami.js +137 -4
- package/dist/commands/workers.d.ts +2 -14
- package/dist/commands/workers.js +7 -10
- package/dist/fast-core.d.ts +7 -7
- package/dist/fast-core.js +91 -24
- package/dist/fast-scaffold.d.ts +86 -0
- package/dist/fast-scaffold.js +381 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.js +59 -9
- package/dist/lanes-drain-hook.d.ts +14 -0
- package/dist/lanes-drain-hook.js +203 -0
- package/dist/lazy-commands.d.ts +20 -44
- package/dist/lazy-commands.js +60 -58
- package/dist/lib/agent-kit/adopt-identity.d.ts +27 -0
- package/dist/lib/agent-kit/adopt-identity.js +60 -0
- package/dist/lib/agent-kit/attachment-download.d.ts +24 -0
- package/dist/lib/agent-kit/attachment-download.js +47 -0
- package/dist/lib/agent-kit/creds.d.ts +106 -0
- package/dist/lib/agent-kit/creds.js +163 -0
- package/dist/lib/agent-kit/fallback.d.ts +78 -0
- package/dist/lib/agent-kit/fallback.js +210 -0
- package/dist/lib/agent-kit/inbox-state.d.ts +83 -0
- package/dist/lib/agent-kit/inbox-state.js +159 -0
- package/dist/lib/agent-kit/kit-config.d.ts +56 -0
- package/dist/lib/agent-kit/kit-config.js +65 -0
- package/dist/lib/agent-kit/log.d.ts +16 -0
- package/dist/lib/agent-kit/log.js +46 -0
- package/dist/lib/agent-kit/mcp/attachments.d.ts +126 -0
- package/dist/lib/agent-kit/mcp/attachments.js +222 -0
- package/dist/lib/agent-kit/mcp/jsonrpc.d.ts +75 -0
- package/dist/lib/agent-kit/mcp/jsonrpc.js +164 -0
- package/dist/lib/agent-kit/mcp/tools.d.ts +64 -0
- package/dist/lib/agent-kit/mcp/tools.js +397 -0
- package/dist/lib/agent-kit/paths.d.ts +65 -0
- package/dist/lib/agent-kit/paths.js +118 -0
- package/dist/lib/agent-kit/private-file.d.ts +29 -0
- package/dist/lib/agent-kit/private-file.js +91 -0
- package/dist/lib/agent-kit/run/heartbeat.d.ts +72 -0
- package/dist/lib/agent-kit/run/heartbeat.js +128 -0
- package/dist/lib/agent-kit/run/inbox.d.ts +76 -0
- package/dist/lib/agent-kit/run/inbox.js +205 -0
- package/dist/lib/agent-kit/run/supervisor.d.ts +35 -0
- package/dist/lib/agent-kit/run/supervisor.js +85 -0
- package/dist/lib/agent-kit/run/sync.d.ts +33 -0
- package/dist/lib/agent-kit/run/sync.js +58 -0
- package/dist/lib/agent-kit/services.d.ts +31 -0
- package/dist/lib/agent-kit/services.js +55 -0
- package/dist/lib/agent-kit/skills.d.ts +18 -0
- package/dist/lib/agent-kit/skills.js +151 -0
- package/dist/lib/agent-kit/wake.d.ts +83 -0
- package/dist/lib/agent-kit/wake.js +243 -0
- package/dist/lib/agents/model-catalog.d.ts +62 -0
- package/dist/lib/agents/model-catalog.js +275 -0
- package/dist/lib/auth-login-provider-state.d.ts +8 -0
- package/dist/lib/auth-login-provider-state.js +63 -0
- package/dist/lib/aws-sdk-node-warning-output.d.ts +12 -0
- package/dist/lib/aws-sdk-node-warning-output.js +22 -0
- package/dist/lib/billing/free-month.d.ts +18 -0
- package/dist/lib/billing/free-month.js +31 -0
- package/dist/lib/billing/plan-limit-refusals.d.ts +69 -0
- package/dist/lib/billing/plan-limit-refusals.js +187 -0
- package/dist/lib/billing/plan-limit-upgrade-url.d.ts +11 -0
- package/dist/lib/billing/plan-limit-upgrade-url.js +66 -0
- package/dist/lib/billing/plan-lock.d.ts +143 -0
- package/dist/lib/billing/plan-lock.js +439 -0
- package/dist/lib/bot/api.d.ts +349 -0
- package/dist/lib/bot/api.js +316 -0
- package/dist/lib/bot/attachments.d.ts +45 -0
- package/dist/lib/bot/attachments.js +89 -0
- package/dist/lib/bot/cli-update.d.ts +138 -0
- package/dist/lib/bot/cli-update.js +278 -0
- package/dist/lib/bot/company-bind.d.ts +27 -0
- package/dist/lib/bot/company-bind.js +62 -0
- package/dist/lib/bot/config.d.ts +153 -0
- package/dist/lib/bot/config.js +233 -0
- package/dist/lib/bot/continuity-download.d.ts +28 -0
- package/dist/lib/bot/continuity-download.js +75 -0
- package/dist/lib/bot/continuity-install.d.ts +14 -0
- package/dist/lib/bot/continuity-install.js +101 -0
- package/dist/lib/bot/continuity.d.ts +67 -0
- package/dist/lib/bot/continuity.js +301 -0
- package/dist/lib/bot/creds.d.ts +24 -0
- package/dist/lib/bot/creds.js +51 -0
- package/dist/lib/bot/daemon.d.ts +173 -0
- package/dist/lib/bot/daemon.js +552 -0
- package/dist/lib/bot/inbox-poll-backoff-flag.d.ts +24 -0
- package/dist/lib/bot/inbox-poll-backoff-flag.js +135 -0
- package/dist/lib/bot/inbox-state.d.ts +18 -0
- package/dist/lib/bot/inbox-state.js +51 -0
- package/dist/lib/bot/index.d.ts +23 -0
- package/dist/lib/bot/index.js +23 -0
- package/dist/lib/bot/inflight.d.ts +119 -0
- package/dist/lib/bot/inflight.js +83 -0
- package/dist/lib/bot/job-completions.d.ts +89 -0
- package/dist/lib/bot/job-completions.js +132 -0
- package/dist/lib/bot/job-quiet-flag.d.ts +4 -0
- package/dist/lib/bot/job-quiet-flag.js +14 -0
- package/dist/lib/bot/job-run.d.ts +114 -0
- package/dist/lib/bot/job-run.js +266 -0
- package/dist/lib/bot/local-config.d.ts +61 -0
- package/dist/lib/bot/local-config.js +145 -0
- package/dist/lib/bot/local-jobs.d.ts +89 -0
- package/dist/lib/bot/local-jobs.js +459 -0
- package/dist/lib/bot/local-name.d.ts +54 -0
- package/dist/lib/bot/local-name.js +114 -0
- package/dist/lib/bot/log.d.ts +13 -0
- package/dist/lib/bot/log.js +59 -0
- package/dist/lib/bot/owner-context.d.ts +79 -0
- package/dist/lib/bot/owner-context.js +175 -0
- package/dist/lib/bot/paths.d.ts +76 -0
- package/dist/lib/bot/paths.js +131 -0
- package/dist/lib/bot/progress.d.ts +132 -0
- package/dist/lib/bot/progress.js +289 -0
- package/dist/lib/bot/promote.d.ts +16 -0
- package/dist/lib/bot/promote.js +106 -0
- package/dist/lib/bot/promotion-hold.d.ts +24 -0
- package/dist/lib/bot/promotion-hold.js +103 -0
- package/dist/lib/bot/promotion-receipt.d.ts +9 -0
- package/dist/lib/bot/promotion-receipt.js +56 -0
- package/dist/lib/bot/promotion-upload.d.ts +16 -0
- package/dist/lib/bot/promotion-upload.js +80 -0
- package/dist/lib/bot/prompt.d.ts +136 -0
- package/dist/lib/bot/prompt.js +433 -0
- package/dist/lib/bot/room-policy.d.ts +63 -0
- package/dist/lib/bot/room-policy.js +91 -0
- package/dist/lib/bot/run.d.ts +219 -0
- package/dist/lib/bot/run.js +1881 -0
- package/dist/lib/bot/runnable.d.ts +51 -0
- package/dist/lib/bot/runnable.js +65 -0
- package/dist/lib/bot/runtime/claude.d.ts +50 -0
- package/dist/lib/bot/runtime/claude.js +170 -0
- package/dist/lib/bot/runtime/codex.d.ts +28 -0
- package/dist/lib/bot/runtime/codex.js +153 -0
- package/dist/lib/bot/runtime/grok-acp.d.ts +40 -0
- package/dist/lib/bot/runtime/grok-acp.js +265 -0
- package/dist/lib/bot/runtime/grok.d.ts +41 -0
- package/dist/lib/bot/runtime/grok.js +169 -0
- package/dist/lib/bot/runtime/index.d.ts +36 -0
- package/dist/lib/bot/runtime/index.js +417 -0
- package/dist/lib/bot/runtime/messages-stream.d.ts +56 -0
- package/dist/lib/bot/runtime/messages-stream.js +194 -0
- package/dist/lib/bot/runtime/sanitize.d.ts +18 -0
- package/dist/lib/bot/runtime/sanitize.js +28 -0
- package/dist/lib/bot/runtime/types.d.ts +159 -0
- package/dist/lib/bot/runtime/types.js +51 -0
- package/dist/lib/bot/runtime/windows.d.ts +10 -0
- package/dist/lib/bot/runtime/windows.js +53 -0
- package/dist/lib/bot/runtime-sign-in.d.ts +24 -0
- package/dist/lib/bot/runtime-sign-in.js +31 -0
- package/dist/lib/bot/scaffold.d.ts +38 -0
- package/dist/lib/bot/scaffold.js +94 -0
- package/dist/lib/bot/self-heal.d.ts +52 -0
- package/dist/lib/bot/self-heal.js +79 -0
- package/dist/lib/bot/self-process.d.ts +19 -0
- package/dist/lib/bot/self-process.js +35 -0
- package/dist/lib/bot/session.d.ts +19 -0
- package/dist/lib/bot/session.js +39 -0
- package/dist/lib/bot/setup-explain.d.ts +64 -0
- package/dist/lib/bot/setup-explain.js +141 -0
- package/dist/lib/bot/split.d.ts +32 -0
- package/dist/lib/bot/split.js +241 -0
- package/dist/lib/bot/status.d.ts +57 -0
- package/dist/lib/bot/status.js +66 -0
- package/dist/lib/bot/worker-source.d.ts +66 -0
- package/dist/lib/bot/worker-source.js +283 -0
- package/dist/lib/checkpoint-ontology/aliases.d.ts +17 -0
- package/dist/lib/checkpoint-ontology/aliases.js +44 -0
- package/dist/lib/checkpoint-ontology/apply.d.ts +110 -0
- package/dist/lib/checkpoint-ontology/apply.js +777 -0
- package/dist/lib/checkpoint-ontology/company-brief.d.ts +18 -0
- package/dist/lib/checkpoint-ontology/company-brief.js +337 -0
- package/dist/lib/checkpoint-ontology/company.d.ts +44 -0
- package/dist/lib/checkpoint-ontology/company.js +118 -0
- package/dist/lib/checkpoint-ontology/drop-aliases.d.ts +41 -0
- package/dist/lib/checkpoint-ontology/drop-aliases.js +76 -0
- package/dist/lib/checkpoint-ontology/entity-file.d.ts +109 -0
- package/dist/lib/checkpoint-ontology/entity-file.js +371 -0
- package/dist/lib/checkpoint-ontology/identity.d.ts +38 -0
- package/dist/lib/checkpoint-ontology/identity.js +95 -0
- package/dist/lib/checkpoint-ontology/merge-copies.d.ts +199 -0
- package/dist/lib/checkpoint-ontology/merge-copies.js +1086 -0
- package/dist/lib/checkpoint-ontology/multi-writer.d.ts +101 -0
- package/dist/lib/checkpoint-ontology/multi-writer.js +394 -0
- package/dist/lib/checkpoint-ontology/plan.d.ts +193 -0
- package/dist/lib/checkpoint-ontology/plan.js +504 -0
- package/dist/lib/checkpoint-ontology/queued-touches.d.ts +29 -0
- package/dist/lib/checkpoint-ontology/queued-touches.js +193 -0
- package/dist/lib/checkpoint-ontology/sync-client.d.ts +38 -0
- package/dist/lib/checkpoint-ontology/sync-client.js +84 -0
- package/dist/lib/checkpoint-ontology/tree.d.ts +55 -0
- package/dist/lib/checkpoint-ontology/tree.js +198 -0
- package/dist/lib/company-errors-sdk-warning-flag.d.ts +5 -0
- package/dist/lib/company-errors-sdk-warning-flag.js +8 -0
- package/dist/lib/company-skill-wrapper.d.ts +1 -0
- package/dist/lib/company-skill-wrapper.js +121 -29
- package/dist/lib/core-utils/codex-skill-bridge.d.ts +2 -1
- package/dist/lib/core-utils/common.d.ts +0 -1
- package/dist/lib/core-utils/common.js +0 -9
- package/dist/lib/core-utils/hook-timeout-debug-context-flag.d.ts +20 -0
- package/dist/lib/core-utils/hook-timeout-debug-context-flag.js +81 -0
- package/dist/lib/core-utils/jq-json-serializer.d.ts +5 -0
- package/dist/lib/core-utils/jq-json-serializer.js +10 -0
- package/dist/lib/core-utils/qmd-reindex-after-sync.d.ts +14 -1
- package/dist/lib/core-utils/qmd-reindex-after-sync.js +101 -17
- package/dist/lib/core-utils/secret-patterns.d.ts +43 -0
- package/dist/lib/core-utils/secret-patterns.js +34 -0
- package/dist/lib/core-utils/sentry-report.d.ts +114 -0
- package/dist/lib/core-utils/sentry-report.js +1055 -0
- package/dist/lib/core-utils/soft-timeout.js +1 -1
- package/dist/lib/core-utils/timeout-guard-native.d.ts +7 -0
- package/dist/lib/core-utils/timeout-guard-native.js +40 -0
- package/dist/lib/core-utils/timeout-guard.d.ts +3 -3
- package/dist/lib/core-utils/timeout-guard.js +28 -13
- package/dist/lib/core-utils/token-usage-report.js +17 -3
- package/dist/lib/core-utils/worktree-resume.d.ts +20 -0
- package/dist/lib/core-utils/worktree-resume.js +1198 -0
- package/dist/lib/daemon/catalog.d.ts +134 -0
- package/dist/lib/daemon/catalog.js +358 -0
- package/dist/lib/daemon/config.d.ts +35 -0
- package/dist/lib/daemon/config.js +108 -0
- package/dist/lib/daemon/flag.d.ts +25 -0
- package/dist/lib/daemon/flag.js +59 -0
- package/dist/lib/daemon/handoff.d.ts +56 -0
- package/dist/lib/daemon/handoff.js +161 -0
- package/dist/lib/daemon/hq-cloud.d.ts +79 -0
- package/dist/lib/daemon/hq-cloud.js +183 -0
- package/dist/lib/daemon/install.d.ts +85 -0
- package/dist/lib/daemon/install.js +320 -0
- package/dist/lib/daemon/legacy-sync-env.d.ts +10 -0
- package/dist/lib/daemon/legacy-sync-env.js +58 -0
- package/dist/lib/daemon/legacy.d.ts +45 -0
- package/dist/lib/daemon/legacy.js +133 -0
- package/dist/lib/daemon/lock.d.ts +47 -0
- package/dist/lib/daemon/lock.js +138 -0
- package/dist/lib/daemon/machine-type.d.ts +50 -0
- package/dist/lib/daemon/machine-type.js +159 -0
- package/dist/lib/daemon/migrate.d.ts +77 -0
- package/dist/lib/daemon/migrate.js +265 -0
- package/dist/lib/daemon/paths.d.ts +24 -0
- package/dist/lib/daemon/paths.js +43 -0
- package/dist/lib/daemon/protocol-tail.d.ts +33 -0
- package/dist/lib/daemon/protocol-tail.js +131 -0
- package/dist/lib/daemon/remote-control.d.ts +74 -0
- package/dist/lib/daemon/remote-control.js +153 -0
- package/dist/lib/daemon/requests.d.ts +28 -0
- package/dist/lib/daemon/requests.js +65 -0
- package/dist/lib/daemon/run.d.ts +79 -0
- package/dist/lib/daemon/run.js +755 -0
- package/dist/lib/daemon/succession.d.ts +118 -0
- package/dist/lib/daemon/succession.js +263 -0
- package/dist/lib/daemon/supervisor.d.ts +132 -0
- package/dist/lib/daemon/supervisor.js +836 -0
- package/dist/lib/daemon/sync-runner.d.ts +58 -0
- package/dist/lib/daemon/sync-runner.js +277 -0
- package/dist/lib/daemon/tools.d.ts +52 -0
- package/dist/lib/daemon/tools.js +95 -0
- package/dist/lib/daemon/updater.d.ts +57 -0
- package/dist/lib/daemon/updater.js +163 -0
- package/dist/lib/db/control-plane.js +6 -0
- package/dist/lib/db/local.d.ts +0 -5
- package/dist/lib/db/local.js +1 -1
- package/dist/lib/db/migrate.d.ts +0 -12
- 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 +0 -10
- package/dist/lib/db/sql.js +4 -8
- package/dist/lib/deploy-api.d.ts +5 -0
- package/dist/lib/deploy-api.js +21 -0
- package/dist/lib/deploy-apps.d.ts +13 -0
- package/dist/lib/deploy-apps.js +29 -0
- 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/__testing__/run-doctor.d.ts +8 -0
- package/dist/lib/doctor/__testing__/run-doctor.js +52 -0
- package/dist/lib/doctor/checks/bots.d.ts +13 -0
- package/dist/lib/doctor/checks/bots.js +189 -0
- package/dist/lib/doctor/checks/claude-wiring.js +70 -1
- package/dist/lib/doctor/checks/codex-wiring.d.ts +0 -4
- package/dist/lib/doctor/checks/codex-wiring.js +3 -35
- package/dist/lib/doctor/checks/grok-wiring.js +1 -34
- package/dist/lib/doctor/checks/integrations.js +11 -0
- package/dist/lib/doctor/checks/runtime-health.d.ts +4 -17
- package/dist/lib/doctor/checks/runtime-health.js +20 -7
- package/dist/lib/doctor/checks/scaffold-cli-floor.d.ts +6 -0
- package/dist/lib/doctor/checks/scaffold-cli-floor.js +73 -0
- package/dist/lib/doctor/checks/sync-health.d.ts +21 -0
- package/dist/lib/doctor/checks/sync-health.js +72 -2
- package/dist/lib/doctor/checks/sync-runtime.d.ts +11 -0
- package/dist/lib/doctor/checks/sync-runtime.js +216 -0
- package/dist/lib/doctor/checks/work-context.js +20 -6
- package/dist/lib/doctor/client-health-flag-token.d.ts +15 -0
- package/dist/lib/doctor/client-health-flag-token.js +66 -0
- package/dist/lib/doctor/client-health-reason-codes-flag.d.ts +27 -0
- package/dist/lib/doctor/client-health-reason-codes-flag.js +106 -0
- package/dist/lib/doctor/compat.d.ts +0 -16
- package/dist/lib/doctor/compat.js +4 -3
- package/dist/lib/doctor/deep/effects.js +1 -3
- package/dist/lib/doctor/deep/executor.d.ts +4 -10
- package/dist/lib/doctor/deep/executor.js +1 -1
- package/dist/lib/doctor/deep/parity.d.ts +2 -29
- package/dist/lib/doctor/deep/parity.js +7 -7
- package/dist/lib/doctor/deep/sandbox.d.ts +7 -25
- package/dist/lib/doctor/deep/sandbox.js +5 -7
- package/dist/lib/doctor/fix/apply.d.ts +79 -8
- package/dist/lib/doctor/fix/apply.js +292 -80
- package/dist/lib/doctor/fix/json-output.d.ts +28 -0
- package/dist/lib/doctor/fix/json-output.js +33 -0
- package/dist/lib/doctor/fix/refresh-sync-outcome.d.ts +12 -0
- package/dist/lib/doctor/fix/refresh-sync-outcome.js +25 -0
- package/dist/lib/doctor/fix/remediation.d.ts +14 -6
- package/dist/lib/doctor/fix/remediation.js +49 -9
- package/dist/lib/doctor/fixtures/schema.js +1 -3
- package/dist/lib/doctor/json-output.d.ts +17 -1
- package/dist/lib/doctor/json-output.js +7 -2
- package/dist/lib/doctor/platform.d.ts +0 -26
- package/dist/lib/doctor/platform.js +5 -5
- package/dist/lib/doctor/registry.d.ts +14 -0
- package/dist/lib/doctor/registry.js +71 -0
- package/dist/lib/doctor/report.js +1 -1
- package/dist/lib/doctor/shared.d.ts +8 -0
- package/dist/lib/doctor/shared.js +38 -0
- package/dist/lib/doctor/stray-gate-entries.d.ts +35 -0
- package/dist/lib/doctor/stray-gate-entries.js +83 -0
- package/dist/lib/doctor/types.d.ts +5 -0
- package/dist/lib/doctor/types.js +20 -0
- package/dist/lib/first-sync-next-step.d.ts +34 -0
- package/dist/lib/first-sync-next-step.js +179 -0
- package/dist/lib/flag-registry-endpoint.d.ts +5 -0
- package/dist/lib/flag-registry-endpoint.js +9 -0
- package/dist/lib/flag-registry-worker-source.generated.d.ts +2 -0
- package/dist/lib/flag-registry-worker-source.generated.js +3 -0
- package/dist/lib/flag-registry-worker.js +12 -1
- package/dist/lib/flag-registry.d.ts +26 -6
- package/dist/lib/flag-registry.js +133 -16
- package/dist/lib/flag-snapshot-file.d.ts +20 -0
- package/dist/lib/flag-snapshot-file.js +91 -0
- package/dist/lib/heartbeat-identity.d.ts +30 -0
- package/dist/lib/heartbeat-identity.js +76 -0
- package/dist/lib/index-render/companies.d.ts +4 -1
- package/dist/lib/index-render/companies.js +66 -3
- package/dist/lib/index-render/company-knowledge.js +80 -17
- package/dist/lib/index-render/index.d.ts +1 -0
- package/dist/lib/index-render/index.js +2 -1
- package/dist/lib/index-render/projects.js +82 -5
- package/dist/lib/index-render/shared.d.ts +13 -1
- package/dist/lib/index-render/shared.js +41 -2
- package/dist/lib/lanes/account-home.d.ts +8 -0
- package/dist/lib/lanes/account-home.js +10 -0
- package/dist/lib/lanes/accounts.d.ts +117 -0
- package/dist/lib/lanes/accounts.js +366 -0
- package/dist/lib/lanes/admission-host.d.ts +22 -0
- package/dist/lib/lanes/admission-host.js +37 -0
- package/dist/lib/lanes/admission.d.ts +26 -0
- package/dist/lib/lanes/admission.js +210 -0
- package/dist/lib/lanes/approval-gate.d.ts +8 -0
- package/dist/lib/lanes/approval-gate.js +90 -0
- package/dist/lib/lanes/autopilot-metrics.d.ts +99 -0
- package/dist/lib/lanes/autopilot-metrics.js +301 -0
- package/dist/lib/lanes/autopilot-registry.d.ts +62 -0
- package/dist/lib/lanes/autopilot-registry.js +192 -0
- package/dist/lib/lanes/autopilot.d.ts +137 -0
- package/dist/lib/lanes/autopilot.js +1291 -0
- package/dist/lib/lanes/blocker-freshness.d.ts +31 -0
- package/dist/lib/lanes/blocker-freshness.js +168 -0
- package/dist/lib/lanes/checked-company-path.d.ts +3 -0
- package/dist/lib/lanes/checked-company-path.js +39 -0
- package/dist/lib/lanes/claude-balance.d.ts +97 -0
- package/dist/lib/lanes/claude-balance.js +319 -0
- package/dist/lib/lanes/compaction.d.ts +110 -0
- package/dist/lib/lanes/compaction.js +293 -0
- package/dist/lib/lanes/config.d.ts +94 -0
- package/dist/lib/lanes/config.js +606 -0
- package/dist/lib/lanes/constants.d.ts +3 -0
- package/dist/lib/lanes/constants.js +3 -0
- package/dist/lib/lanes/delivery-core.d.ts +15 -0
- package/dist/lib/lanes/delivery-core.js +21 -0
- package/dist/lib/lanes/delivery.d.ts +180 -0
- package/dist/lib/lanes/delivery.js +443 -0
- package/dist/lib/lanes/disk-guard.d.ts +65 -0
- package/dist/lib/lanes/disk-guard.js +172 -0
- package/dist/lib/lanes/dropbox.d.ts +129 -0
- package/dist/lib/lanes/dropbox.js +601 -0
- package/dist/lib/lanes/effort.d.ts +51 -0
- package/dist/lib/lanes/effort.js +113 -0
- package/dist/lib/lanes/envelope-repair-dispatch.d.ts +26 -0
- package/dist/lib/lanes/envelope-repair-dispatch.js +74 -0
- package/dist/lib/lanes/errors.d.ts +39 -0
- package/dist/lib/lanes/errors.js +72 -0
- package/dist/lib/lanes/flag-keys.d.ts +25 -0
- package/dist/lib/lanes/flag-keys.js +25 -0
- package/dist/lib/lanes/grants.d.ts +30 -0
- package/dist/lib/lanes/grants.js +171 -0
- package/dist/lib/lanes/hire-grant-dispatch.d.ts +29 -0
- package/dist/lib/lanes/hire-grant-dispatch.js +315 -0
- package/dist/lib/lanes/hooks-install.d.ts +82 -0
- package/dist/lib/lanes/hooks-install.js +555 -0
- package/dist/lib/lanes/host-capacity.d.ts +69 -0
- package/dist/lib/lanes/host-capacity.js +254 -0
- package/dist/lib/lanes/hq-root.d.ts +19 -0
- package/dist/lib/lanes/hq-root.js +28 -0
- package/dist/lib/lanes/index.d.ts +76 -0
- package/dist/lib/lanes/index.js +42 -0
- package/dist/lib/lanes/keep-alive-audit.d.ts +47 -0
- package/dist/lib/lanes/keep-alive-audit.js +370 -0
- package/dist/lib/lanes/keep-alive.d.ts +68 -0
- package/dist/lib/lanes/keep-alive.js +343 -0
- package/dist/lib/lanes/kr-freshness.d.ts +76 -0
- package/dist/lib/lanes/kr-freshness.js +413 -0
- package/dist/lib/lanes/lane-company.d.ts +10 -0
- package/dist/lib/lanes/lane-company.js +41 -0
- package/dist/lib/lanes/liveness.d.ts +108 -0
- package/dist/lib/lanes/liveness.js +396 -0
- package/dist/lib/lanes/machine-identity.d.ts +34 -0
- package/dist/lib/lanes/machine-identity.js +92 -0
- package/dist/lib/lanes/manager-status-gate.d.ts +17 -0
- package/dist/lib/lanes/manager-status-gate.js +133 -0
- package/dist/lib/lanes/merge-command.d.ts +15 -0
- package/dist/lib/lanes/merge-command.js +629 -0
- package/dist/lib/lanes/mesh-events.d.ts +127 -0
- package/dist/lib/lanes/mesh-events.js +564 -0
- package/dist/lib/lanes/message-replay.d.ts +21 -0
- package/dist/lib/lanes/message-replay.js +122 -0
- package/dist/lib/lanes/models.d.ts +86 -0
- package/dist/lib/lanes/models.js +234 -0
- package/dist/lib/lanes/monitor.d.ts +48 -0
- package/dist/lib/lanes/monitor.js +428 -0
- package/dist/lib/lanes/move-account.d.ts +56 -0
- package/dist/lib/lanes/move-account.js +193 -0
- package/dist/lib/lanes/orphans.d.ts +25 -0
- package/dist/lib/lanes/orphans.js +102 -0
- package/dist/lib/lanes/outpost-dispatch.d.ts +156 -0
- package/dist/lib/lanes/outpost-dispatch.js +293 -0
- package/dist/lib/lanes/outpost-hire-cache.d.ts +22 -0
- package/dist/lib/lanes/outpost-hire-cache.js +153 -0
- package/dist/lib/lanes/outpost-identity.d.ts +33 -0
- package/dist/lib/lanes/outpost-identity.js +59 -0
- package/dist/lib/lanes/outpost-profile-repin.d.ts +17 -0
- package/dist/lib/lanes/outpost-profile-repin.js +84 -0
- package/dist/lib/lanes/outpost-pruner-install.d.ts +37 -0
- package/dist/lib/lanes/outpost-pruner-install.js +238 -0
- package/dist/lib/lanes/outpost-registry-worker-approval.d.ts +18 -0
- package/dist/lib/lanes/outpost-registry-worker-approval.js +109 -0
- package/dist/lib/lanes/outpost-snapshot-memo.d.ts +6 -0
- package/dist/lib/lanes/outpost-snapshot-memo.js +14 -0
- package/dist/lib/lanes/outpost-worktree-pruner-flag.d.ts +19 -0
- package/dist/lib/lanes/outpost-worktree-pruner-flag.js +86 -0
- package/dist/lib/lanes/outpost-worktree-pruner.d.ts +62 -0
- package/dist/lib/lanes/outpost-worktree-pruner.js +1201 -0
- package/dist/lib/lanes/profile.d.ts +69 -0
- package/dist/lib/lanes/profile.js +552 -0
- package/dist/lib/lanes/provider-rejection.d.ts +86 -0
- package/dist/lib/lanes/provider-rejection.js +286 -0
- package/dist/lib/lanes/questions.d.ts +90 -0
- package/dist/lib/lanes/questions.js +384 -0
- package/dist/lib/lanes/quota.d.ts +134 -0
- package/dist/lib/lanes/quota.js +471 -0
- package/dist/lib/lanes/reconcile-install.d.ts +90 -0
- package/dist/lib/lanes/reconcile-install.js +257 -0
- package/dist/lib/lanes/reconcile.d.ts +161 -0
- package/dist/lib/lanes/reconcile.js +3343 -0
- package/dist/lib/lanes/registry-flag.d.ts +35 -0
- package/dist/lib/lanes/registry-flag.js +164 -0
- package/dist/lib/lanes/registry-persona.d.ts +20 -0
- package/dist/lib/lanes/registry-persona.js +329 -0
- package/dist/lib/lanes/registry.d.ts +122 -0
- package/dist/lib/lanes/registry.js +570 -0
- package/dist/lib/lanes/reviews.d.ts +38 -0
- package/dist/lib/lanes/reviews.js +395 -0
- package/dist/lib/lanes/runaway-tool-guard.d.ts +38 -0
- package/dist/lib/lanes/runaway-tool-guard.js +284 -0
- package/dist/lib/lanes/session-relink.d.ts +25 -0
- package/dist/lib/lanes/session-relink.js +216 -0
- package/dist/lib/lanes/spawn.d.ts +355 -0
- package/dist/lib/lanes/spawn.js +2668 -0
- package/dist/lib/lanes/ssm-command-context.d.ts +12 -0
- package/dist/lib/lanes/ssm-command-context.js +52 -0
- package/dist/lib/lanes/store.d.ts +91 -0
- package/dist/lib/lanes/store.js +1822 -0
- package/dist/lib/lanes/stories.d.ts +23 -0
- package/dist/lib/lanes/stories.js +92 -0
- package/dist/lib/lanes/story-ledger.d.ts +80 -0
- package/dist/lib/lanes/story-ledger.js +815 -0
- package/dist/lib/lanes/story-switch.d.ts +21 -0
- package/dist/lib/lanes/story-switch.js +75 -0
- package/dist/lib/lanes/text-scan.d.ts +11 -0
- package/dist/lib/lanes/text-scan.js +103 -0
- package/dist/lib/lanes/throttle.d.ts +116 -0
- package/dist/lib/lanes/throttle.js +437 -0
- package/dist/lib/lanes/timestamp.d.ts +3 -0
- package/dist/lib/lanes/timestamp.js +26 -0
- package/dist/lib/lanes/tracker-checks.d.ts +77 -0
- package/dist/lib/lanes/tracker-checks.js +134 -0
- package/dist/lib/lanes/tracker-report-state.d.ts +10 -0
- package/dist/lib/lanes/tracker-report-state.js +124 -0
- package/dist/lib/lanes/tracker-report.d.ts +203 -0
- package/dist/lib/lanes/tracker-report.js +522 -0
- package/dist/lib/lanes/tracker-store.d.ts +18 -0
- package/dist/lib/lanes/tracker-store.js +106 -0
- package/dist/lib/lanes/types.d.ts +1030 -0
- package/dist/lib/lanes/types.js +418 -0
- package/dist/lib/lanes/wait.d.ts +39 -0
- package/dist/lib/lanes/wait.js +159 -0
- package/dist/lib/lanes/watch.d.ts +39 -0
- package/dist/lib/lanes/watch.js +249 -0
- package/dist/lib/lanes/watcher-main.d.ts +11 -0
- package/dist/lib/lanes/watcher-main.js +108 -0
- package/dist/lib/lanes/watcher.d.ts +287 -0
- package/dist/lib/lanes/watcher.js +1972 -0
- package/dist/lib/mesh/api.d.ts +103 -10
- package/dist/lib/mesh/api.js +334 -64
- package/dist/lib/mesh/client.d.ts +3 -2
- package/dist/lib/mesh/client.js +26 -7
- package/dist/lib/mesh/denial-codes.d.ts +5 -0
- package/dist/lib/mesh/denial-codes.js +14 -0
- package/dist/lib/mesh/live/backfill-held.d.ts +67 -16
- package/dist/lib/mesh/live/backfill-held.js +415 -61
- package/dist/lib/mesh/live/backoff.d.ts +2 -2
- package/dist/lib/mesh/live/backoff.js +16 -3
- package/dist/lib/mesh/live/daemon/board-refresh.d.ts +7 -1
- package/dist/lib/mesh/live/daemon/board-refresh.js +78 -30
- package/dist/lib/mesh/live/daemon/config.d.ts +36 -0
- package/dist/lib/mesh/live/daemon/config.js +120 -0
- package/dist/lib/mesh/live/daemon/credentials.d.ts +64 -10
- package/dist/lib/mesh/live/daemon/credentials.js +270 -20
- package/dist/lib/mesh/live/daemon/doctor.d.ts +53 -0
- package/dist/lib/mesh/live/daemon/doctor.js +190 -6
- package/dist/lib/mesh/live/daemon/index.d.ts +13 -10
- package/dist/lib/mesh/live/daemon/index.js +7 -6
- package/dist/lib/mesh/live/daemon/install.d.ts +255 -1
- package/dist/lib/mesh/live/daemon/install.js +811 -13
- package/dist/lib/mesh/live/daemon/legacy-listen.d.ts +43 -0
- package/dist/lib/mesh/live/daemon/legacy-listen.js +89 -0
- package/dist/lib/mesh/live/daemon/live-cache.d.ts +26 -0
- package/dist/lib/mesh/live/daemon/live-cache.js +116 -0
- package/dist/lib/mesh/live/daemon/mqtt-events.d.ts +7 -0
- package/dist/lib/mesh/live/daemon/mqtt-events.js +2 -0
- package/dist/lib/mesh/live/daemon/mqtt-events.test-d.d.ts +2 -0
- package/dist/lib/mesh/live/daemon/mqtt-events.test-d.js +10 -0
- package/dist/lib/mesh/live/daemon/paths.d.ts +2 -0
- package/dist/lib/mesh/live/daemon/paths.js +2 -0
- package/dist/lib/mesh/live/daemon/presence.d.ts +24 -5
- package/dist/lib/mesh/live/daemon/presence.js +79 -10
- package/dist/lib/mesh/live/daemon/run.d.ts +48 -2
- package/dist/lib/mesh/live/daemon/run.js +485 -33
- package/dist/lib/mesh/live/daemon/state.d.ts +19 -2
- package/dist/lib/mesh/live/daemon/state.js +34 -2
- package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +45 -9
- package/dist/lib/mesh/live/daemon/transcript-watch.js +227 -31
- package/dist/lib/mesh/live/daemon/version-drift.d.ts +5 -0
- package/dist/lib/mesh/live/daemon/version-drift.js +47 -0
- package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +32 -0
- package/dist/lib/mesh/live/daemon/work-subscribe.js +262 -0
- package/dist/lib/mesh/live/emit-client.d.ts +8 -0
- package/dist/lib/mesh/live/emit-client.js +23 -8
- package/dist/lib/mesh/live/emit-evidence.d.ts +19 -0
- package/dist/lib/mesh/live/emit-evidence.js +20 -2
- package/dist/lib/mesh/live/emit.d.ts +9 -0
- package/dist/lib/mesh/live/emit.js +28 -2
- package/dist/lib/mesh/live/enqueue.d.ts +5 -0
- package/dist/lib/mesh/live/enqueue.js +19 -0
- package/dist/lib/mesh/live/flush.d.ts +17 -5
- package/dist/lib/mesh/live/flush.js +391 -38
- package/dist/lib/mesh/live/format-spool-line.d.ts +5 -2
- package/dist/lib/mesh/live/format-spool-line.js +10 -0
- package/dist/lib/mesh/live/paths.d.ts +2 -0
- package/dist/lib/mesh/live/paths.js +4 -0
- package/dist/lib/mesh/live/report-summary.d.ts +45 -0
- package/dist/lib/mesh/live/report-summary.js +234 -0
- package/dist/lib/mesh/live/session-event.schema.json +24 -1
- package/dist/lib/mesh/live/session-events-client.d.ts +2 -0
- package/dist/lib/mesh/live/session-events-client.js +26 -0
- package/dist/lib/mesh/live/session-seq.d.ts +4 -0
- package/dist/lib/mesh/live/session-seq.js +33 -0
- package/dist/lib/mesh/live/spool.d.ts +19 -0
- package/dist/lib/mesh/live/spool.js +269 -3
- 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/mesh/project-board.d.ts +65 -0
- package/dist/lib/mesh/project-board.js +181 -0
- package/dist/lib/mesh/story-status.d.ts +22 -0
- package/dist/lib/mesh/story-status.js +49 -0
- package/dist/lib/monitor.d.ts +149 -0
- package/dist/lib/monitor.js +519 -0
- package/dist/lib/node-binary.d.ts +50 -0
- package/dist/lib/node-binary.js +133 -0
- package/dist/lib/notify-recipient.d.ts +7 -0
- package/dist/lib/notify-recipient.js +11 -0
- package/dist/lib/onboarding/checkpoint.d.ts +13 -0
- package/dist/lib/onboarding/checkpoint.js +44 -0
- package/dist/lib/onboarding/cli/onboard.d.ts +53 -0
- package/dist/lib/onboarding/cli/onboard.js +135 -0
- package/dist/lib/onboarding/cli/prompts.d.ts +28 -0
- package/dist/lib/onboarding/cli/prompts.js +83 -0
- package/dist/lib/onboarding/errors.d.ts +34 -0
- package/dist/lib/onboarding/errors.js +59 -0
- package/dist/lib/onboarding/index.d.ts +13 -0
- package/dist/lib/onboarding/index.js +13 -0
- package/dist/lib/onboarding/orchestrator.d.ts +47 -0
- package/dist/lib/onboarding/orchestrator.js +569 -0
- package/dist/lib/onboarding/types.d.ts +79 -0
- package/dist/lib/onboarding/types.js +8 -0
- package/dist/lib/plan-limit-nag.d.ts +102 -6
- package/dist/lib/plan-limit-nag.js +348 -43
- package/dist/lib/policy-validator.d.ts +7 -0
- package/dist/lib/policy-validator.js +187 -0
- package/dist/lib/process-flag-company-context.d.ts +8 -0
- package/dist/lib/process-flag-company-context.js +67 -0
- package/dist/lib/report-publish.d.ts +175 -0
- package/dist/lib/report-publish.js +421 -0
- package/dist/lib/report-run.d.ts +62 -0
- package/dist/lib/report-run.js +123 -0
- package/dist/lib/report-snapshot.d.ts +12 -0
- package/dist/lib/report-snapshot.js +135 -0
- package/dist/lib/report-templates.d.ts +9 -0
- package/dist/lib/report-templates.js +21 -0
- package/dist/lib/scaffold-cli-floor.d.ts +8 -0
- package/dist/lib/scaffold-cli-floor.js +50 -0
- package/dist/lib/scan-packages/index.d.ts +2 -0
- package/dist/lib/scan-packages/index.js +168 -6
- package/dist/lib/search-index/background.d.ts +8 -1
- package/dist/lib/search-index/background.js +55 -200
- package/dist/lib/search-index/collection-path-repair-flag.d.ts +4 -0
- package/dist/lib/search-index/collection-path-repair-flag.js +7 -0
- package/dist/lib/search-index/embed-lock.d.ts +34 -0
- package/dist/lib/search-index/embed-lock.js +295 -0
- package/dist/lib/search-index/index.d.ts +12 -0
- package/dist/lib/search-index/index.js +153 -7
- package/dist/lib/search-index/load-gate.d.ts +57 -0
- package/dist/lib/search-index/load-gate.js +270 -0
- package/dist/lib/search-index/max-doc-bytes.d.ts +219 -0
- package/dist/lib/search-index/max-doc-bytes.js +463 -0
- package/dist/lib/search-index/qmd-exit-diagnostics.d.ts +5 -0
- package/dist/lib/search-index/qmd-exit-diagnostics.js +40 -0
- package/dist/lib/search-index/reindex-single-flight-flag.d.ts +5 -0
- package/dist/lib/search-index/reindex-single-flight-flag.js +8 -0
- package/dist/lib/service-manager/index.d.ts +42 -0
- package/dist/lib/service-manager/index.js +105 -0
- package/dist/lib/service-manager/launchd.d.ts +81 -0
- package/dist/lib/service-manager/launchd.js +212 -0
- package/dist/lib/service-manager/systemd.d.ts +19 -0
- package/dist/lib/service-manager/systemd.js +72 -0
- package/dist/lib/service-manager/types.d.ts +34 -0
- package/dist/lib/service-manager/types.js +26 -0
- package/dist/lib/test-utils/isolated-flag-company-context.d.ts +3 -0
- package/dist/lib/test-utils/isolated-flag-company-context.js +18 -0
- package/dist/lib/work-context/bind-best.d.ts +66 -0
- package/dist/lib/work-context/bind-best.js +344 -0
- package/dist/lib/work-context/bind-calling-session.d.ts +26 -0
- package/dist/lib/work-context/bind-calling-session.js +63 -0
- package/dist/lib/work-context/company-rebind.d.ts +23 -0
- package/dist/lib/work-context/company-rebind.js +59 -0
- package/dist/lib/work-context/company.d.ts +22 -20
- package/dist/lib/work-context/company.js +124 -40
- package/dist/lib/work-context/config.d.ts +58 -11
- package/dist/lib/work-context/config.js +334 -83
- package/dist/lib/work-context/contract.d.ts +13 -0
- package/dist/lib/work-context/contract.schema.json +3 -1
- package/dist/lib/work-context/default-company.d.ts +43 -0
- package/dist/lib/work-context/default-company.js +83 -0
- package/dist/lib/work-context/outbox-quarantine-status-flag.d.ts +4 -0
- package/dist/lib/work-context/outbox-quarantine-status-flag.js +7 -0
- package/dist/lib/work-context/outbox.d.ts +27 -5
- package/dist/lib/work-context/outbox.js +135 -6
- package/dist/lib/work-context/prd-sync.d.ts +56 -0
- package/dist/lib/work-context/prd-sync.js +197 -0
- package/dist/lib/work-context/preflight-contract.d.ts +28 -0
- package/dist/lib/work-context/preflight-contract.js +85 -0
- package/dist/lib/work-context/prompt-rebind.d.ts +25 -0
- package/dist/lib/work-context/prompt-rebind.js +85 -0
- package/dist/lib/work-context/reconcile.d.ts +15 -0
- package/dist/lib/work-context/reconcile.js +405 -29
- package/dist/lib/work-context/state.d.ts +93 -10
- package/dist/lib/work-context/state.js +342 -29
- package/dist/lib/work-context/windows-acl.d.ts +123 -0
- package/dist/lib/work-context/windows-acl.js +425 -0
- package/dist/lib/workers-registry/index.js +62 -8
- package/dist/lib/workers-registry/read.d.ts +15 -0
- package/dist/lib/workers-registry/read.js +17 -0
- package/dist/main.d.ts +32 -0
- package/dist/main.js +273 -73
- package/dist/native-fast-route.d.ts +7 -0
- package/dist/native-fast-route.js +45 -0
- package/dist/node-network-compat-core.d.ts +12 -0
- package/dist/node-network-compat-core.js +41 -0
- package/dist/node-network-compat-fast.d.ts +7 -0
- package/dist/node-network-compat-fast.js +23 -0
- package/dist/node-network-compat.d.ts +2 -30
- package/dist/node-network-compat.js +4 -51
- package/dist/node-preflight.d.ts +7 -1
- package/dist/node-preflight.js +5 -5
- package/dist/register-all.d.ts +4 -29
- package/dist/register-all.js +4 -233
- package/dist/run/discover-schemas.d.ts +2 -1
- package/dist/run/env-graph-guard.d.ts +2 -2
- package/dist/run/env-graph-guard.js +5 -2
- package/dist/run/hq-plugin.d.ts +4 -0
- package/dist/run/hq-plugin.js +36 -8
- package/dist/secrets-env-fast-path.d.ts +5 -0
- package/dist/secrets-env-fast-path.js +16 -0
- package/dist/secrets-env-fast-route.d.ts +18 -0
- package/dist/secrets-env-fast-route.js +54 -0
- package/dist/sentry-before-send.js +80 -0
- package/dist/sentry.d.ts +16 -4
- package/dist/sentry.js +179 -18
- package/dist/startup-registration.d.ts +26 -2
- package/dist/startup-registration.js +116 -15
- package/dist/utils/checkpoint-stamp-write-error.d.ts +28 -0
- package/dist/utils/checkpoint-stamp-write-error.js +99 -0
- package/dist/utils/cli-network-lifecycle.d.ts +4 -0
- package/dist/utils/cli-network-lifecycle.js +11 -0
- package/dist/utils/cli-telemetry.d.ts +75 -1
- package/dist/utils/cli-telemetry.js +433 -7
- package/dist/utils/client-health.d.ts +0 -4
- package/dist/utils/client-health.js +2 -2
- package/dist/utils/cognito-refresh-sentry.d.ts +3 -0
- package/dist/utils/cognito-refresh-sentry.js +49 -0
- package/dist/utils/cognito-session.d.ts +71 -0
- package/dist/utils/cognito-session.js +481 -27
- package/dist/utils/console-origin.d.ts +9 -0
- package/dist/utils/console-origin.js +28 -0
- package/dist/utils/contribution-table.d.ts +1 -1
- package/dist/utils/core-eval-trigger.d.ts +4 -0
- package/dist/utils/core-eval-trigger.js +88 -0
- package/dist/utils/environmental-error.d.ts +18 -0
- package/dist/utils/environmental-error.js +240 -7
- package/dist/utils/exclusive-lock.d.ts +32 -0
- package/dist/utils/exclusive-lock.js +75 -0
- package/dist/utils/expected-cli-error.d.ts +2 -0
- package/dist/utils/expected-cli-error.js +4 -0
- package/dist/utils/fast-stream-errors.d.ts +12 -0
- package/dist/utils/fast-stream-errors.js +18 -0
- package/dist/utils/feedback-diagnostics.d.ts +2 -1
- package/dist/utils/feedback-log-bundle.d.ts +51 -26
- package/dist/utils/feedback-log-bundle.js +211 -31
- package/dist/utils/feedback-logs.d.ts +18 -47
- package/dist/utils/feedback-logs.js +50 -21
- package/dist/utils/feedback-screenshots.d.ts +0 -1
- package/dist/utils/feedback-screenshots.js +1 -1
- package/dist/utils/files-browse-acl.d.ts +5 -0
- package/dist/utils/files-browse-acl.js +11 -0
- package/dist/utils/hq-core-yaml.d.ts +10 -0
- package/dist/utils/hq-core-yaml.js +40 -0
- package/dist/utils/hq-root-resolver.d.ts +13 -0
- package/dist/utils/hq-root-resolver.js +103 -0
- package/dist/utils/hq-roots.d.ts +25 -2
- package/dist/utils/hq-roots.js +67 -7
- package/dist/utils/incomplete-install-error.d.ts +87 -19
- package/dist/utils/incomplete-install-error.js +319 -68
- package/dist/utils/install-tree-torn.d.ts +260 -24
- package/dist/utils/install-tree-torn.js +998 -51
- package/dist/utils/large-file-guard.d.ts +0 -10
- package/dist/utils/large-file-guard.js +1 -1
- package/dist/utils/local-files-overview.d.ts +4 -8
- package/dist/utils/local-files-overview.js +48 -7
- package/dist/utils/login-provider.d.ts +7 -0
- package/dist/utils/login-provider.js +34 -0
- package/dist/utils/pack-contributions.d.ts +2 -14
- package/dist/utils/pack-contributions.js +7 -44
- package/dist/utils/package-root-diagnostics.d.ts +1 -1
- package/dist/utils/people.d.ts +7 -11
- package/dist/utils/people.js +5 -20
- package/dist/utils/plan-gate-error.d.ts +52 -10
- package/dist/utils/plan-gate-error.js +364 -41
- package/dist/utils/qmd-model-download-error.d.ts +0 -8
- package/dist/utils/qmd-model-download-error.js +1 -1
- package/dist/utils/qmd-query-document-error.d.ts +0 -6
- package/dist/utils/qmd-query-document-error.js +1 -1
- package/dist/utils/redact-error-text.d.ts +0 -2
- package/dist/utils/redact-error-text.js +3 -2
- package/dist/utils/redact-url.d.ts +14 -0
- package/dist/utils/redact-url.js +218 -0
- package/dist/utils/run-bundled-script.d.ts +6 -0
- package/dist/utils/run-bundled-script.js +117 -4
- package/dist/utils/sandbox-runner-client.d.ts +2 -1
- package/dist/utils/scaffold-fast-import-guard.d.ts +2 -0
- package/dist/utils/scaffold-fast-import-guard.js +40 -0
- package/dist/utils/scaffold-packlist-guard.d.ts +7 -0
- package/dist/utils/scaffold-packlist-guard.js +23 -0
- package/dist/utils/scaffold-sibling-references.d.ts +22 -0
- package/dist/utils/scaffold-sibling-references.js +156 -0
- package/dist/utils/secret-load-availability.d.ts +8 -0
- package/dist/utils/secret-load-availability.js +54 -0
- package/dist/utils/secrets-cache.d.ts +7 -3
- package/dist/utils/secrets-cache.js +162 -14
- package/dist/utils/self-update.d.ts +34 -1
- package/dist/utils/self-update.js +660 -42
- package/dist/utils/sentry-fingerprint.d.ts +23 -1
- package/dist/utils/sentry-fingerprint.js +223 -31
- package/dist/utils/staged-install.d.ts +34 -0
- package/dist/utils/staged-install.js +346 -0
- package/dist/utils/staged-npm-install.d.ts +16 -0
- package/dist/utils/staged-npm-install.js +264 -0
- package/dist/utils/sync-log-sources.d.ts +15 -0
- package/dist/utils/sync-log-sources.js +36 -0
- package/dist/utils/table-width.d.ts +7 -0
- package/dist/utils/table-width.js +15 -0
- package/dist/utils/team-upgrade.d.ts +1 -1
- package/dist/utils/team-upgrade.js +4 -3
- package/dist/utils/update-command-supervisor.cjs +247 -0
- package/dist/utils/upload-author.d.ts +15 -0
- package/dist/utils/upload-author.js +39 -0
- package/dist/utils/vault-api.d.ts +21 -1
- package/dist/utils/vault-api.js +251 -84
- package/dist/utils/version-check.d.ts +11 -1
- package/dist/utils/version-check.js +32 -3
- package/dist/utils/version-gate.d.ts +101 -17
- package/dist/utils/version-gate.js +645 -70
- package/dist/utils/version-report.d.ts +27 -0
- package/dist/utils/version-report.js +105 -0
- package/dist/utils/windows-spawn.d.ts +6 -0
- package/dist/utils/windows-spawn.js +37 -0
- package/dist/version-request.d.ts +14 -0
- package/dist/version-request.js +36 -0
- package/package.json +20 -8
- package/scripts/mesh-daemon-if-stale.mjs +20 -0
- package/templates/reports/blank.md +3 -0
- package/templates/reports/daily-digest.md +11 -0
- package/templates/runbooks/update-report.md +21 -0
- package/dist/commands/scaffold-fast.d.ts +0 -41
- package/dist/commands/scaffold-fast.js +0 -57
- package/dist/lib/work-context/index.d.ts +0 -25
- package/dist/lib/work-context/index.js +0 -21
|
@@ -11,26 +11,42 @@
|
|
|
11
11
|
import * as fs from "node:fs";
|
|
12
12
|
import * as os from "node:os";
|
|
13
13
|
import * as path from "node:path";
|
|
14
|
+
import { CLI_VERSION } from "../../../../cli-version.js";
|
|
14
15
|
import { createWorkSessionDeliverer } from "../../client.js";
|
|
15
|
-
import { meshJson, resolveActiveMembershipCompany } from "../../api.js";
|
|
16
|
-
import { ensureCognitoToken } from "../../../../utils/cognito-session.js";
|
|
16
|
+
import { listActiveMembershipCompanies, meshJson, resolveActiveMembershipCompany } from "../../api.js";
|
|
17
|
+
import { ensureCognitoToken, isMachineIdentity } from "../../../../utils/cognito-session.js";
|
|
17
18
|
import { replayOutbox } from "../../../work-context/outbox.js";
|
|
18
19
|
import { workContextRoot } from "../../../work-context/paths.js";
|
|
20
|
+
import { ensureDefaultCompany } from "../../../work-context/default-company.js";
|
|
21
|
+
import { invalidateDefaultCompanyMemberships, readDeviceConfig, } from "../../../work-context/config.js";
|
|
22
|
+
import { readSessionState, mergeLocalSessionFields, updateSessionState, } from "../../../work-context/state.js";
|
|
19
23
|
import { createSessionEventsPoster, resolveVaultApiBase, } from "../session-events-client.js";
|
|
20
24
|
import { flushSessionEvents, HELD_RETRY_INTERVAL_MS, } from "../flush.js";
|
|
25
|
+
import { backfillHeldSessions, } from "../backfill-held.js";
|
|
26
|
+
import { reconcileObservation } from "../../../work-context/reconcile.js";
|
|
21
27
|
import { workMeshRoot, workMeshSpoolPath } from "../paths.js";
|
|
22
28
|
import { createVaultBoardReader, refreshBoundSessionBoards, BOARD_REFRESH_INTERVAL_MS, } from "./board-refresh.js";
|
|
23
|
-
import { createContract3Fetcher, realTimerHost, } from "./credentials.js";
|
|
29
|
+
import { createContract3Fetcher, createPersonalRealtimeFetcher, readPreferredCompanyUids, realTimerHost, } from "./credentials.js";
|
|
24
30
|
import { appendDaemonLog, daemonLogLine, ensureDaemonLog } from "./log.js";
|
|
25
31
|
import { acquirePidLock, defaultPidLockDeps, releasePidLock, } from "./pid-lock.js";
|
|
26
32
|
import { daemonDir } from "./paths.js";
|
|
27
|
-
import { PresenceClient, } from "./presence.js";
|
|
28
|
-
import { defaultDaemonState, patchDaemonState, writeDaemonState, } from "./state.js";
|
|
33
|
+
import { PresenceClient, defaultMqttConnect, } from "./presence.js";
|
|
34
|
+
import { defaultDaemonState, patchDaemonState, readDaemonState, writeDaemonState, } from "./state.js";
|
|
29
35
|
import { workMeshHeldPath } from "../paths.js";
|
|
30
|
-
import { noteHookSessionsFromSpoolFile, TRANSCRIPT_WATCH_INTERVAL_MS, TranscriptWatcher, } from "./transcript-watch.js";
|
|
36
|
+
import { defaultTranscriptFs, noteHookSessionsFromSpoolFile, TRANSCRIPT_WATCH_INTERVAL_MS, TranscriptWatcher, } from "./transcript-watch.js";
|
|
31
37
|
import { resolveMeshEmitMode, runsEmitPath, } from "./mode.js";
|
|
38
|
+
import { hasCliVersionDrift, readInstalledCliVersion } from "./version-drift.js";
|
|
39
|
+
import { resolveRunningCliEntry } from "./install.js";
|
|
40
|
+
import { readDaemonConfig } from "./config.js";
|
|
41
|
+
import { retireLegacyListen } from "./legacy-listen.js";
|
|
42
|
+
import { startWorkCacheSubscriber } from "./work-subscribe.js";
|
|
32
43
|
export const SPOOL_DEBOUNCE_MS = 2_000;
|
|
33
44
|
export const FLUSH_INTERVAL_MS = 10_000;
|
|
45
|
+
/** Keep startup recovery bounded: the next daemon start continues the backlog. */
|
|
46
|
+
export const HELD_BACKFILL_STARTUP_BATCH_SIZE = 100;
|
|
47
|
+
export const DEVICE_DEFAULT_MEMBERSHIP_TIMEOUT_MS = 2_000;
|
|
48
|
+
/** Non-zero exit reserved for CLI version drift so legacy Restart=on-failure units restart. */
|
|
49
|
+
export const DAEMON_VERSION_DRIFT_EXIT_CODE = 75;
|
|
34
50
|
/**
|
|
35
51
|
* Only producer appends to spool.jsonl should wake the watcher. Every other
|
|
36
52
|
* file in the work-mesh root (held.jsonl, spool.<ts>.claimed, held.<ts>.claimed,
|
|
@@ -45,6 +61,30 @@ export function shouldFlushOnSpoolDirEvent(filename) {
|
|
|
45
61
|
return true;
|
|
46
62
|
return String(filename) === "spool.jsonl";
|
|
47
63
|
}
|
|
64
|
+
function sameCompanyValue(a, b) {
|
|
65
|
+
return Boolean(a && b && a.toLowerCase() === b.toLowerCase());
|
|
66
|
+
}
|
|
67
|
+
function stillMatchesDeniedCompany(current, input, slug) {
|
|
68
|
+
const deniedUid = input.companyUid ?? input.state?.companyUid;
|
|
69
|
+
const deniedSlug = input.companySlug ?? input.state?.companySlug ?? slug;
|
|
70
|
+
if (deniedUid && current.companyUid && deniedUid !== current.companyUid)
|
|
71
|
+
return false;
|
|
72
|
+
if (deniedSlug && current.companySlug && !sameCompanyValue(deniedSlug, current.companySlug))
|
|
73
|
+
return false;
|
|
74
|
+
return Boolean(current.companyUid || current.companySlug);
|
|
75
|
+
}
|
|
76
|
+
function stillMatchesDeniedDeviceDefaultBinding(current, original, input, slug) {
|
|
77
|
+
return stillMatchesDeniedCompany(current, input, slug) &&
|
|
78
|
+
current.companyUid === original.companyUid &&
|
|
79
|
+
current.companySlug === original.companySlug &&
|
|
80
|
+
current.contextStatus === original.contextStatus &&
|
|
81
|
+
current.projectId === original.projectId &&
|
|
82
|
+
current.taskId === original.taskId &&
|
|
83
|
+
current.bindingEpisodeId === original.bindingEpisodeId &&
|
|
84
|
+
current.source === original.source &&
|
|
85
|
+
current.version === original.version &&
|
|
86
|
+
current.updatedAt === original.updatedAt;
|
|
87
|
+
}
|
|
48
88
|
function alive(pid) {
|
|
49
89
|
try {
|
|
50
90
|
process.kill(pid, 0);
|
|
@@ -72,8 +112,28 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
72
112
|
((d, line) => appendDaemonLog(d, daemonLogLine("info", line, now)));
|
|
73
113
|
const processEvents = deps.processEvents ?? process;
|
|
74
114
|
const exit = deps.exit ?? ((code) => process.exit(code));
|
|
115
|
+
const daemonVersion = deps.daemonVersion ?? CLI_VERSION;
|
|
116
|
+
const installedCliVersion = deps.readInstalledCliVersion ?? readInstalledCliVersion;
|
|
75
117
|
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
118
|
+
const hostPlatform = process.platform === "darwin" || process.platform === "linux" || process.platform === "win32"
|
|
119
|
+
? process.platform
|
|
120
|
+
: "other";
|
|
121
|
+
const retiredListen = retireLegacyListen({
|
|
122
|
+
home,
|
|
123
|
+
platform: deps.legacyListenPlatform ?? hostPlatform,
|
|
124
|
+
run: deps.legacyListenRun,
|
|
125
|
+
windowsTaskPresent: deps.windowsLegacyTaskPresent,
|
|
126
|
+
});
|
|
127
|
+
const configuredRoots = readDaemonConfig(dir).trustedHqRoots;
|
|
128
|
+
const trustedRoots = [...new Set([
|
|
129
|
+
...(deps.hqRoot ? [deps.hqRoot] : []),
|
|
130
|
+
...(env.HQ_ROOT?.trim() ? [env.HQ_ROOT.trim()] : []),
|
|
131
|
+
...configuredRoots,
|
|
132
|
+
])];
|
|
76
133
|
ensureDaemonLog(dir);
|
|
134
|
+
if (retiredListen.removed) {
|
|
135
|
+
log(dir, "retired legacy listener ai.getindigo.hq-work-mesh-listen");
|
|
136
|
+
}
|
|
77
137
|
const lockDeps = deps.pidLock ?? defaultPidLockDeps({ isProcessAlive: alive });
|
|
78
138
|
const lock = acquirePidLock(dir, lockDeps);
|
|
79
139
|
if (!lock.ok) {
|
|
@@ -81,7 +141,17 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
81
141
|
}
|
|
82
142
|
writeDaemonState(dir, defaultDaemonState(lockDeps.pid, now));
|
|
83
143
|
log(dir, `daemon started pid=${lockDeps.pid} mode=${mode}`);
|
|
84
|
-
|
|
144
|
+
let cliEntry = deps.cliEntry ?? "";
|
|
145
|
+
if (!cliEntry) {
|
|
146
|
+
try {
|
|
147
|
+
cliEntry = resolveRunningCliEntry();
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
cliEntry = process.argv[1] ?? "";
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
log(dir, `daemon version=${daemonVersion} entry=${cliEntry}`);
|
|
154
|
+
patchDaemonState(dir, { emitMode: mode, cliVersion: daemonVersion, cliEntry }, now);
|
|
85
155
|
// Opt into machine-credential minting when the box has creds (systemd exports
|
|
86
156
|
// HQ_MACHINE_CREDS_FILE). On a person laptop with no machine creds this falls
|
|
87
157
|
// through to the person login cache inside ensureCognitoToken.
|
|
@@ -92,14 +162,179 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
92
162
|
// expires after ~1h to every vend/flush forever, so the second credential
|
|
93
163
|
// renewal (~96 min in) and everything after it failed with HTTP 401 and the
|
|
94
164
|
// daemon went dark once its IoT credentials expired.
|
|
165
|
+
// ensureCognitoToken refuses a refresh whose subject differs from the
|
|
166
|
+
// active person cache and restores the file. The daemon must not replace
|
|
167
|
+
// the operator login with another cached session.
|
|
95
168
|
const defaultGetToken = async () => ensureCognitoToken({ interactive: false, tokenSource: "machine" });
|
|
96
169
|
const getToken = deps.getToken ?? defaultGetToken;
|
|
170
|
+
const resolveMembership = deps.resolveMembership ?? resolveActiveMembershipCompany;
|
|
171
|
+
const machineIdentity = deps.machineIdentity ?? isMachineIdentity();
|
|
172
|
+
/** The sole authorization seam for daemon tenant I/O derived from a device default. */
|
|
173
|
+
const tenantGate = {
|
|
174
|
+
authorize: async (input) => {
|
|
175
|
+
const state = input.state ?? (input.sessionId
|
|
176
|
+
? readSessionState(input.sessionId, ctxRoot)
|
|
177
|
+
: null);
|
|
178
|
+
const slug = input.companySlug ?? state?.companySlug;
|
|
179
|
+
// A uid alone is enough to ask /membership/me. Missing slug is not a
|
|
180
|
+
// denial. A device-default session whose company was cleared can be
|
|
181
|
+
// checked against the configured default; that is the same company the
|
|
182
|
+
// daemon assigned before the false denial.
|
|
183
|
+
const configuredDefault = input.deviceDefault
|
|
184
|
+
? readDeviceConfig({ root: ctxRoot }).defaultCompany
|
|
185
|
+
: undefined;
|
|
186
|
+
const defaultCompany = configuredDefault?.enabled ? configuredDefault : undefined;
|
|
187
|
+
const usingDefaultFallback = !slug && !state?.companyUid && Boolean(defaultCompany?.slug || defaultCompany?.uid);
|
|
188
|
+
const lookupKey = slug || state?.companyUid || (usingDefaultFallback
|
|
189
|
+
? (defaultCompany?.slug || defaultCompany?.uid)
|
|
190
|
+
: undefined);
|
|
191
|
+
let authorization;
|
|
192
|
+
if (!lookupKey) {
|
|
193
|
+
authorization = { status: "denied" };
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
const controller = new AbortController();
|
|
197
|
+
const timeout = setTimeout(() => controller.abort(), DEVICE_DEFAULT_MEMBERSHIP_TIMEOUT_MS);
|
|
198
|
+
try {
|
|
199
|
+
authorization = await Promise.race([
|
|
200
|
+
(async () => {
|
|
201
|
+
const membership = await resolveMembership(await getToken(), lookupKey, controller.signal);
|
|
202
|
+
// Timeout wins even if the probe then returns null.
|
|
203
|
+
if (controller.signal.aborted) {
|
|
204
|
+
return {
|
|
205
|
+
status: "unavailable",
|
|
206
|
+
error: `membership lookup timed out after ${DEVICE_DEFAULT_MEMBERSHIP_TIMEOUT_MS}ms`,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (membership)
|
|
210
|
+
return { status: "authorized", uid: membership.companyUid };
|
|
211
|
+
// A machine token often cannot read /membership/me (401/403, or an
|
|
212
|
+
// empty person-membership list). That is "cannot tell", not "not
|
|
213
|
+
// a member". Leave the company in place and retry.
|
|
214
|
+
if (machineIdentity) {
|
|
215
|
+
return {
|
|
216
|
+
status: "unavailable",
|
|
217
|
+
error: "membership probe on a machine token did not confirm a company; company left unchanged",
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
return { status: "denied" };
|
|
221
|
+
})(),
|
|
222
|
+
new Promise((resolve) => {
|
|
223
|
+
controller.signal.addEventListener("abort", () => resolve({
|
|
224
|
+
status: "unavailable",
|
|
225
|
+
error: `membership lookup timed out after ${DEVICE_DEFAULT_MEMBERSHIP_TIMEOUT_MS}ms`,
|
|
226
|
+
}), { once: true });
|
|
227
|
+
}),
|
|
228
|
+
]);
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
authorization = {
|
|
232
|
+
status: "unavailable",
|
|
233
|
+
error: err instanceof Error ? err.message : String(err),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
clearTimeout(timeout);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (authorization.status === "unavailable") {
|
|
241
|
+
const prior = readDaemonState(dir)?.deviceDefaultMembershipLookupFailures ?? 0;
|
|
242
|
+
patchDaemonState(dir, {
|
|
243
|
+
lastErrorCode: "DEVICE_DEFAULT_MEMBERSHIP_LOOKUP_FAILED",
|
|
244
|
+
deviceDefaultMembershipLookupFailures: prior + 1,
|
|
245
|
+
}, now);
|
|
246
|
+
log(dir, `device-default membership lookup unavailable${slug ? ` company=${slug}` : ""}: ${authorization.error.slice(0, 160)}`);
|
|
247
|
+
return authorization;
|
|
248
|
+
}
|
|
249
|
+
if (!input.deviceDefault)
|
|
250
|
+
return authorization;
|
|
251
|
+
if (authorization.status === "authorized" &&
|
|
252
|
+
(!input.companyUid || input.companyUid === authorization.uid) &&
|
|
253
|
+
(!state?.companyUid || state.companyUid === authorization.uid)) {
|
|
254
|
+
// A prior false denial cleared the company and left needs_company.
|
|
255
|
+
// Membership just confirmed the company, so put it back and let flush post.
|
|
256
|
+
if (state &&
|
|
257
|
+
state.companyConfidence === "device_default" &&
|
|
258
|
+
state.contextStatus === "needs_company") {
|
|
259
|
+
const restoredSlug = state.companySlug || slug || defaultCompany?.slug;
|
|
260
|
+
const restoredUid = authorization.uid;
|
|
261
|
+
updateSessionState(state.sessionId, ctxRoot, (current) => {
|
|
262
|
+
if (!current || current.contextStatus !== "needs_company")
|
|
263
|
+
return null;
|
|
264
|
+
if (current.companyUid && current.companyUid !== restoredUid)
|
|
265
|
+
return null;
|
|
266
|
+
if (current.companySlug &&
|
|
267
|
+
restoredSlug &&
|
|
268
|
+
!sameCompanyValue(current.companySlug, restoredSlug)) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
return mergeLocalSessionFields({
|
|
272
|
+
...current,
|
|
273
|
+
companyUid: restoredUid,
|
|
274
|
+
...(restoredSlug ? { companySlug: restoredSlug } : {}),
|
|
275
|
+
contextStatus: current.projectId
|
|
276
|
+
? (current.taskId ? "bound" : "needs_task")
|
|
277
|
+
: "needs_project",
|
|
278
|
+
updatedAt: now().toISOString(),
|
|
279
|
+
}, current, { preserveCompanyBinding: false });
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
return authorization;
|
|
283
|
+
}
|
|
284
|
+
// Already stripped. Do not revoke, count, or log this again on every flush.
|
|
285
|
+
if (state &&
|
|
286
|
+
state.contextStatus === "needs_company" &&
|
|
287
|
+
!state.companyUid &&
|
|
288
|
+
!state.companySlug) {
|
|
289
|
+
return { status: "denied" };
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
invalidateDefaultCompanyMemberships({ root: ctxRoot, now });
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
log(dir, `default membership cache invalidation failed: ${String(err).slice(0, 160)}`);
|
|
296
|
+
}
|
|
297
|
+
if (state) {
|
|
298
|
+
// Commit only if the device-default binding that started this lookup is
|
|
299
|
+
// still current. The shared session-state lock also makes a hook writer
|
|
300
|
+
// that arrives at this boundary commit after us rather than get lost.
|
|
301
|
+
deps.beforeDeviceDefaultRevocationCommit?.();
|
|
302
|
+
const revoked = updateSessionState(state.sessionId, ctxRoot, (current) => {
|
|
303
|
+
if (!current || !stillMatchesDeniedDeviceDefaultBinding(current, state, input, slug)) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
return mergeLocalSessionFields({
|
|
307
|
+
...current,
|
|
308
|
+
companyUid: undefined,
|
|
309
|
+
companySlug: undefined,
|
|
310
|
+
contextStatus: "needs_company",
|
|
311
|
+
updatedAt: now().toISOString(),
|
|
312
|
+
}, current, { preserveCompanyBinding: false });
|
|
313
|
+
});
|
|
314
|
+
if (!revoked) {
|
|
315
|
+
log(dir, `device-default membership denial left newer session binding intact session=${state.sessionId}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
const prior = readDaemonState(dir)?.deviceDefaultAuthorizationDenials ?? 0;
|
|
319
|
+
patchDaemonState(dir, { deviceDefaultAuthorizationDenials: prior + 1 }, now);
|
|
320
|
+
log(dir, `device-default membership denied${slug ? ` company=${slug}` : ""}; work held`);
|
|
321
|
+
return { status: "denied" };
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
const validateDaemonMembership = async (slug, deviceDefault) => {
|
|
325
|
+
const authorization = await tenantGate.authorize({ companySlug: slug, deviceDefault });
|
|
326
|
+
if (authorization.status === "unavailable") {
|
|
327
|
+
throw new Error(`device-default membership lookup unavailable: ${authorization.error}`);
|
|
328
|
+
}
|
|
329
|
+
return authorization.status === "authorized" ? { uid: authorization.uid } : false;
|
|
330
|
+
};
|
|
97
331
|
/** In-memory held re-attempt throttle (survives watch-triggered flushes). */
|
|
98
332
|
let lastHeldRetryAtMs = 0;
|
|
333
|
+
const shutdownController = new AbortController();
|
|
99
334
|
const flushFn = deps.flush ??
|
|
100
|
-
(async () => {
|
|
335
|
+
(async (signal) => {
|
|
101
336
|
const t = await getToken();
|
|
102
|
-
const poster = createSessionEventsPoster({
|
|
337
|
+
const poster = deps.poster ?? createSessionEventsPoster({
|
|
103
338
|
token: t,
|
|
104
339
|
baseUrl: resolveVaultApiBase(env),
|
|
105
340
|
});
|
|
@@ -107,25 +342,97 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
107
342
|
workMeshRoot: meshRoot,
|
|
108
343
|
workContextRoot: ctxRoot,
|
|
109
344
|
poster,
|
|
345
|
+
signal,
|
|
110
346
|
heldRetryIntervalMs: HELD_RETRY_INTERVAL_MS,
|
|
111
347
|
lastHeldRetryAtMs,
|
|
112
348
|
onHeldClaimed: (atMs) => {
|
|
113
349
|
lastHeldRetryAtMs = atMs;
|
|
114
350
|
},
|
|
115
351
|
log: (message) => log(dir, message),
|
|
352
|
+
authorizeDeviceDefaultTenant: async (state) => (await tenantGate.authorize({
|
|
353
|
+
state,
|
|
354
|
+
companySlug: state.companySlug,
|
|
355
|
+
companyUid: state.companyUid,
|
|
356
|
+
deviceDefault: true,
|
|
357
|
+
})).status === "authorized",
|
|
116
358
|
});
|
|
117
359
|
});
|
|
118
360
|
const replayFn = deps.replayOutbox ??
|
|
119
361
|
(async () => {
|
|
120
362
|
const t = await getToken();
|
|
121
|
-
const deliver = createWorkSessionDeliverer({ token: t });
|
|
122
|
-
return replayOutbox(ctxRoot,
|
|
363
|
+
const deliver = deps.deliver ?? createWorkSessionDeliverer({ token: t });
|
|
364
|
+
return replayOutbox(ctxRoot, async (op) => {
|
|
365
|
+
const state = readSessionState(op.sessionId, ctxRoot);
|
|
366
|
+
// Provenance must survive session-state loss. For pre-upgrade outbox
|
|
367
|
+
// entries without provenance, absent state is unknown and therefore
|
|
368
|
+
// requires the same membership check before delivery.
|
|
369
|
+
const requiresMembershipCheck = op.companyConfidence === "device_default" ||
|
|
370
|
+
state?.companyConfidence === "device_default" ||
|
|
371
|
+
// Pre-provenance entries are untrusted even if an equally legacy
|
|
372
|
+
// session state happens to exist. A current membership read is the
|
|
373
|
+
// only authority that may release them.
|
|
374
|
+
!op.companyConfidence;
|
|
375
|
+
if (requiresMembershipCheck) {
|
|
376
|
+
const authorization = await tenantGate.authorize({
|
|
377
|
+
state: state ?? undefined,
|
|
378
|
+
companySlug: op.companySlug ?? state?.companySlug,
|
|
379
|
+
companyUid: op.companyUid ?? state?.companyUid,
|
|
380
|
+
deviceDefault: true,
|
|
381
|
+
});
|
|
382
|
+
if (authorization.status === "unavailable") {
|
|
383
|
+
return { ok: false, retryable: true, code: "DEVICE_DEFAULT_MEMBERSHIP_LOOKUP_FAILED" };
|
|
384
|
+
}
|
|
385
|
+
if (authorization.status !== "authorized") {
|
|
386
|
+
return { ok: false, retryable: false, code: "DEVICE_DEFAULT_MEMBERSHIP_DENIED" };
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return deliver(op);
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
const activateDefaultCompany = async () => {
|
|
393
|
+
try {
|
|
394
|
+
const token = await getToken();
|
|
395
|
+
await ensureDefaultCompany({
|
|
396
|
+
root: ctxRoot,
|
|
397
|
+
env,
|
|
398
|
+
listMemberships: () => listActiveMembershipCompanies(token),
|
|
399
|
+
log: (message) => log(dir, message),
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
catch (err) {
|
|
403
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
404
|
+
log(dir, `default company activation skipped: ${message.slice(0, 160)}`);
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
const backfillFn = deps.backfillHeld ??
|
|
408
|
+
(async () => {
|
|
409
|
+
await activateDefaultCompany();
|
|
410
|
+
const token = await getToken();
|
|
411
|
+
const deliver = createWorkSessionDeliverer({ token });
|
|
412
|
+
const useDeviceDefault = readDeviceConfig({ root: ctxRoot }).repairHeldWithDefault === true;
|
|
413
|
+
return backfillHeldSessions({
|
|
414
|
+
workMeshRoot: meshRoot,
|
|
415
|
+
workContextRoot: ctxRoot,
|
|
416
|
+
hqRoots: trustedRoots,
|
|
417
|
+
limit: deps.heldBackfillBatchSize ?? HELD_BACKFILL_STARTUP_BATCH_SIZE,
|
|
418
|
+
env,
|
|
419
|
+
useDeviceDefault,
|
|
420
|
+
reconcile: (observation) => reconcileObservation(observation, {
|
|
421
|
+
root: ctxRoot,
|
|
422
|
+
env,
|
|
423
|
+
deliver,
|
|
424
|
+
validateMembership: (slug) => validateDaemonMembership(slug, useDeviceDefault),
|
|
425
|
+
allowDeviceDefault: useDeviceDefault,
|
|
426
|
+
deviceDefaultConfidence: useDeviceDefault,
|
|
427
|
+
}),
|
|
428
|
+
validateMembership: (slug) => validateDaemonMembership(slug, useDeviceDefault),
|
|
429
|
+
});
|
|
123
430
|
});
|
|
124
431
|
const boardLast = new Map();
|
|
125
432
|
const refreshFn = deps.refreshBoards ??
|
|
126
433
|
(async () => {
|
|
127
434
|
const t = await getToken();
|
|
128
|
-
const reader = createVaultBoardReader({
|
|
435
|
+
const reader = deps.readBoard ?? createVaultBoardReader({
|
|
129
436
|
getJson: (p) => meshJson(t, p),
|
|
130
437
|
});
|
|
131
438
|
return refreshBoundSessionBoards({
|
|
@@ -134,19 +441,66 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
134
441
|
lastRefresh: boardLast,
|
|
135
442
|
intervalMs: BOARD_REFRESH_INTERVAL_MS,
|
|
136
443
|
now: () => timers.now(),
|
|
444
|
+
authorizeDeviceDefaultTenant: async (_sessionId, state) => (await tenantGate.authorize({
|
|
445
|
+
state,
|
|
446
|
+
companySlug: state.companySlug,
|
|
447
|
+
companyUid: state.companyUid,
|
|
448
|
+
deviceDefault: true,
|
|
449
|
+
})).status === "authorized",
|
|
137
450
|
});
|
|
138
451
|
});
|
|
452
|
+
let boardRefreshFailureActive = false;
|
|
453
|
+
const refreshBoardsWithDiagnostics = async () => {
|
|
454
|
+
try {
|
|
455
|
+
const result = await refreshFn();
|
|
456
|
+
if (boardRefreshFailureActive) {
|
|
457
|
+
log(dir, "mesh-board-refresh.recovered");
|
|
458
|
+
boardRefreshFailureActive = false;
|
|
459
|
+
}
|
|
460
|
+
return result;
|
|
461
|
+
}
|
|
462
|
+
catch (error) {
|
|
463
|
+
if (!boardRefreshFailureActive) {
|
|
464
|
+
const rawName = error instanceof Error ? error.name : typeof error;
|
|
465
|
+
const errorName = rawName.replace(/[^A-Za-z0-9_.-]/g, "").slice(0, 80) || "Error";
|
|
466
|
+
const rawMessage = error instanceof Error
|
|
467
|
+
? error.message
|
|
468
|
+
: typeof error === "string"
|
|
469
|
+
? error
|
|
470
|
+
: "non-Error rejection";
|
|
471
|
+
const message = rawMessage
|
|
472
|
+
.replace(/[\r\n\t]+/g, " ")
|
|
473
|
+
.replace(/Bearer\s+\S+/gi, "Bearer [REDACTED]")
|
|
474
|
+
.replace(/op:\/\/[^\s"]+/gi, "op://[REDACTED]")
|
|
475
|
+
.replace(/https?:\/\/[^\s"<>]+/gi, "[URL]")
|
|
476
|
+
.replace(/\b(?:gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]+|AKIA[0-9A-Z]{16}|eyJ[A-Za-z0-9_.-]{10,})\b/gi, "[REDACTED]")
|
|
477
|
+
.replace(/\b(?:access[_-]?token|refresh[_-]?token|id[_-]?token|token|cookie|authorization)\b\s*[:=]\s*[^\s,;&]+/gi, "credential=[REDACTED]")
|
|
478
|
+
.replace(/\b(?:cmp|prs|prj|sess?)_[A-Za-z0-9_-]+\b/gi, "[ID]")
|
|
479
|
+
.slice(0, 160);
|
|
480
|
+
log(dir, `mesh-board-refresh.failed errorName=${errorName} message=${message || "[empty]"}`);
|
|
481
|
+
}
|
|
482
|
+
boardRefreshFailureActive = true;
|
|
483
|
+
throw error;
|
|
484
|
+
}
|
|
485
|
+
};
|
|
139
486
|
let presence = null;
|
|
487
|
+
let workCache = null;
|
|
140
488
|
if (deps.enablePresence !== false) {
|
|
141
|
-
const
|
|
489
|
+
const fetchCredentialsRaw = deps.fetchCredentials ??
|
|
142
490
|
(async () => {
|
|
143
491
|
const t = await getToken();
|
|
144
492
|
return createContract3Fetcher({
|
|
145
493
|
token: t,
|
|
146
494
|
baseUrl: resolveVaultApiBase(env),
|
|
147
495
|
env,
|
|
496
|
+
readPreferredCompanyUids: () => readPreferredCompanyUids({ workContextRoot: ctxRoot }),
|
|
148
497
|
})();
|
|
149
498
|
});
|
|
499
|
+
const fetchCredentials = async () => {
|
|
500
|
+
const bundle = await fetchCredentialsRaw();
|
|
501
|
+
patchDaemonState(dir, { presenceDroppedCompanies: bundle.droppedCompanies }, now);
|
|
502
|
+
return bundle;
|
|
503
|
+
};
|
|
150
504
|
const presenceOpts = {
|
|
151
505
|
fetchCredentials,
|
|
152
506
|
mqttConnect: deps.mqttConnect,
|
|
@@ -166,6 +520,7 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
166
520
|
}, now);
|
|
167
521
|
log(dir, `presence online companies=${companies.length}`);
|
|
168
522
|
},
|
|
523
|
+
readPreferredCompanyUids: () => readPreferredCompanyUids({ workContextRoot: ctxRoot }),
|
|
169
524
|
onRefusal: (refusal) => {
|
|
170
525
|
patchDaemonState(dir, {
|
|
171
526
|
presenceRefusal: refusal,
|
|
@@ -193,16 +548,55 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
193
548
|
// Continue draining spool even if MQTT is down.
|
|
194
549
|
}
|
|
195
550
|
}
|
|
551
|
+
if (deps.enableWorkCache) {
|
|
552
|
+
try {
|
|
553
|
+
workCache = await startWorkCacheSubscriber({
|
|
554
|
+
meshRoot,
|
|
555
|
+
fetchCredentials: deps.fetchPersonalCredentials ?? (async () => {
|
|
556
|
+
const t = await getToken();
|
|
557
|
+
return createPersonalRealtimeFetcher({
|
|
558
|
+
token: t,
|
|
559
|
+
baseUrl: resolveVaultApiBase(env),
|
|
560
|
+
})();
|
|
561
|
+
}),
|
|
562
|
+
mqttConnect: (url, options) => {
|
|
563
|
+
const connect = deps.mqttConnect ?? defaultMqttConnect;
|
|
564
|
+
return connect(url, options);
|
|
565
|
+
},
|
|
566
|
+
now,
|
|
567
|
+
onInfo: (message) => log(dir, message.slice(0, 200)),
|
|
568
|
+
random: deps.random,
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
catch (err) {
|
|
572
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
573
|
+
log(dir, `work cache subscribe failed: ${msg.slice(0, 200)}`);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
196
576
|
let stopped = false;
|
|
577
|
+
let restartRequested = false;
|
|
197
578
|
let flushInFlight = null;
|
|
198
579
|
let debounceHandle = null;
|
|
199
580
|
let flushIntervalHandle = null;
|
|
581
|
+
let versionIntervalHandle = null;
|
|
200
582
|
let boardIntervalHandle = null;
|
|
201
583
|
let transcriptIntervalHandle = null;
|
|
202
584
|
let watcher = null;
|
|
203
585
|
/** Shared with transcript watcher: sessionIds seen on the hook/spool path. */
|
|
204
586
|
const lastHookEventAt = new Map();
|
|
587
|
+
const lastHookTurnEndAt = new Map();
|
|
205
588
|
let transcriptWatcher = null;
|
|
589
|
+
const requestRestartForVersionDrift = () => {
|
|
590
|
+
if (stopped || restartRequested)
|
|
591
|
+
return restartRequested;
|
|
592
|
+
const installedVersion = installedCliVersion();
|
|
593
|
+
if (!hasCliVersionDrift(daemonVersion, installedVersion))
|
|
594
|
+
return false;
|
|
595
|
+
restartRequested = true;
|
|
596
|
+
log(dir, `cli upgraded ${daemonVersion} -> ${installedVersion}, restarting`);
|
|
597
|
+
exit(DAEMON_VERSION_DRIFT_EXIT_CODE);
|
|
598
|
+
return true;
|
|
599
|
+
};
|
|
206
600
|
if (emitPath && deps.enableTranscriptWatch !== false) {
|
|
207
601
|
const hqRoot = deps.hqRoot ?? env.HQ_ROOT?.trim() ?? undefined;
|
|
208
602
|
const getToken = deps.getToken ?? defaultGetToken;
|
|
@@ -215,18 +609,11 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
215
609
|
fs: deps.transcriptFs,
|
|
216
610
|
now: () => now().getTime(),
|
|
217
611
|
lastHookEventAt,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return false;
|
|
224
|
-
return { uid: membership.companyUid };
|
|
225
|
-
}
|
|
226
|
-
catch {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
},
|
|
612
|
+
lastHookTurnEndAt,
|
|
613
|
+
// Transcript watch has no direct state writer: reconcile owns its write
|
|
614
|
+
// and merges local fields. Surface transient lookup failures as throws so
|
|
615
|
+
// reconcile defers without turning them into an authoritative denial.
|
|
616
|
+
validateMembership: (slug) => validateDaemonMembership(slug, true),
|
|
230
617
|
deliver: async (op) => {
|
|
231
618
|
try {
|
|
232
619
|
const token = await getToken();
|
|
@@ -244,7 +631,12 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
244
631
|
}
|
|
245
632
|
const doFlushCycle = async (reason, opts = {}) => {
|
|
246
633
|
// Refuse new cycles after stop, except the forced shutdown flush.
|
|
247
|
-
if (stopped && !opts.force)
|
|
634
|
+
if ((stopped || restartRequested) && !opts.force)
|
|
635
|
+
return;
|
|
636
|
+
// A long-lived daemon retains its loaded JS after a global CLI upgrade.
|
|
637
|
+
// The service unit resolves the binary again on restart, so exiting lets
|
|
638
|
+
// launchd/systemd bring up the upgraded implementation.
|
|
639
|
+
if (!opts.force && requestRestartForVersionDrift())
|
|
248
640
|
return;
|
|
249
641
|
if (flushInFlight) {
|
|
250
642
|
await flushInFlight;
|
|
@@ -253,11 +645,28 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
253
645
|
}
|
|
254
646
|
flushInFlight = (async () => {
|
|
255
647
|
try {
|
|
648
|
+
// A held session has already ended, so no later hook will naturally
|
|
649
|
+
// revisit its context. Repair a bounded batch before the first flush;
|
|
650
|
+
// recovered state is then retried immediately in this same cycle.
|
|
651
|
+
if (reason === "start") {
|
|
652
|
+
try {
|
|
653
|
+
const recovered = await backfillFn();
|
|
654
|
+
if (recovered.reconciled > 0 ||
|
|
655
|
+
recovered.unresolved > 0 ||
|
|
656
|
+
recovered.errors > 0) {
|
|
657
|
+
log(dir, `held backfill: considered=${recovered.considered} reconciled=${recovered.reconciled} unresolved=${recovered.unresolved} errors=${recovered.errors}`);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
catch (err) {
|
|
661
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
662
|
+
log(dir, `held backfill error: ${msg.slice(0, 200)}`);
|
|
663
|
+
}
|
|
664
|
+
}
|
|
256
665
|
// Record hook-emitted session ids from spool/held before claim/rename.
|
|
257
666
|
const at = now().getTime();
|
|
258
|
-
noteHookSessionsFromSpoolFile(workMeshSpoolPath(meshRoot), lastHookEventAt, at);
|
|
259
|
-
noteHookSessionsFromSpoolFile(workMeshHeldPath(meshRoot), lastHookEventAt, at);
|
|
260
|
-
const summary = await flushFn();
|
|
667
|
+
noteHookSessionsFromSpoolFile(workMeshSpoolPath(meshRoot), lastHookEventAt, at, defaultTranscriptFs, lastHookTurnEndAt);
|
|
668
|
+
noteHookSessionsFromSpoolFile(workMeshHeldPath(meshRoot), lastHookEventAt, at, defaultTranscriptFs, lastHookTurnEndAt);
|
|
669
|
+
const summary = await flushFn(shutdownController.signal);
|
|
261
670
|
try {
|
|
262
671
|
const replay = await replayFn();
|
|
263
672
|
const delivered = replay.delivered ?? 0;
|
|
@@ -326,13 +735,30 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
326
735
|
if (!fs.existsSync(spoolPath)) {
|
|
327
736
|
fs.writeFileSync(spoolPath, "", { mode: 0o600 });
|
|
328
737
|
}
|
|
329
|
-
|
|
738
|
+
const spoolWatcher = fs.watch(path.dirname(spoolPath), { persistent: true }, (_event, filename) => {
|
|
330
739
|
if (stopped)
|
|
331
740
|
return;
|
|
332
741
|
if (shouldFlushOnSpoolDirEvent(filename)) {
|
|
333
742
|
scheduleDebouncedFlush();
|
|
334
743
|
}
|
|
335
744
|
});
|
|
745
|
+
watcher = spoolWatcher;
|
|
746
|
+
spoolWatcher.on("error", (err) => {
|
|
747
|
+
// fs.watch can fail asynchronously after returning a watcher. Without
|
|
748
|
+
// an error listener Node treats EMFILE as an uncaught exception; the
|
|
749
|
+
// periodic flush below already provides a polling fallback.
|
|
750
|
+
if (watcher === spoolWatcher)
|
|
751
|
+
watcher = null;
|
|
752
|
+
try {
|
|
753
|
+
spoolWatcher.close();
|
|
754
|
+
}
|
|
755
|
+
catch (closeError) {
|
|
756
|
+
const closeMessage = closeError instanceof Error ? closeError.message : String(closeError);
|
|
757
|
+
log(dir, `fs.watch close failed after watcher error: ${closeMessage.slice(0, 120)}`);
|
|
758
|
+
}
|
|
759
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
760
|
+
log(dir, `fs.watch error; continuing interval flush: ${msg.slice(0, 120)}`);
|
|
761
|
+
});
|
|
336
762
|
}
|
|
337
763
|
catch (err) {
|
|
338
764
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -351,7 +777,7 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
351
777
|
boardIntervalHandle = timers.setTimeout(function boardTick() {
|
|
352
778
|
if (stopped)
|
|
353
779
|
return;
|
|
354
|
-
void
|
|
780
|
+
void refreshBoardsWithDiagnostics()
|
|
355
781
|
.catch(() => undefined)
|
|
356
782
|
.finally(() => {
|
|
357
783
|
if (stopped)
|
|
@@ -359,6 +785,14 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
359
785
|
boardIntervalHandle = timers.setTimeout(boardTick, BOARD_REFRESH_INTERVAL_MS);
|
|
360
786
|
});
|
|
361
787
|
}, BOARD_REFRESH_INTERVAL_MS);
|
|
788
|
+
// Version drift is independent of the legacy spool flush. Direct-mode
|
|
789
|
+
// daemons have no flush cycle, so they still need the same periodic restart
|
|
790
|
+
// check after an in-place CLI upgrade.
|
|
791
|
+
versionIntervalHandle = timers.setTimeout(function versionTick() {
|
|
792
|
+
if (stopped || requestRestartForVersionDrift())
|
|
793
|
+
return;
|
|
794
|
+
versionIntervalHandle = timers.setTimeout(versionTick, FLUSH_INTERVAL_MS);
|
|
795
|
+
}, FLUSH_INTERVAL_MS);
|
|
362
796
|
const runTranscriptTick = async () => {
|
|
363
797
|
if (!transcriptWatcher || stopped)
|
|
364
798
|
return;
|
|
@@ -379,6 +813,9 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
379
813
|
summary.turns > 0 ||
|
|
380
814
|
summary.ended > 0) {
|
|
381
815
|
log(dir, `transcript-watch: started=${summary.started} turns=${summary.turns} ended=${summary.ended} skippedHook=${summary.skippedHookCovered}`);
|
|
816
|
+
for (const sessionId of summary.endedSessionIds) {
|
|
817
|
+
log(dir, `transcript-watch quiet session_end sessionId=${sessionId}`);
|
|
818
|
+
}
|
|
382
819
|
scheduleDebouncedFlush();
|
|
383
820
|
}
|
|
384
821
|
}
|
|
@@ -401,10 +838,13 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
401
838
|
}
|
|
402
839
|
// Initial pass. Board refresh runs in both modes; the flush + transcript
|
|
403
840
|
// scan are legacy emit-path only.
|
|
404
|
-
if (emitPath) {
|
|
841
|
+
if (!requestRestartForVersionDrift() && emitPath) {
|
|
405
842
|
void doFlushCycle("start");
|
|
406
843
|
}
|
|
407
|
-
|
|
844
|
+
else {
|
|
845
|
+
void activateDefaultCompany();
|
|
846
|
+
}
|
|
847
|
+
void refreshBoardsWithDiagnostics().catch(() => undefined);
|
|
408
848
|
if (emitPath) {
|
|
409
849
|
void runTranscriptTick();
|
|
410
850
|
}
|
|
@@ -412,11 +852,14 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
412
852
|
if (stopped)
|
|
413
853
|
return;
|
|
414
854
|
stopped = true;
|
|
855
|
+
shutdownController.abort();
|
|
415
856
|
log(dir, "daemon stopping");
|
|
416
857
|
if (debounceHandle !== null)
|
|
417
858
|
timers.clearTimeout(debounceHandle);
|
|
418
859
|
if (flushIntervalHandle !== null)
|
|
419
860
|
timers.clearTimeout(flushIntervalHandle);
|
|
861
|
+
if (versionIntervalHandle !== null)
|
|
862
|
+
timers.clearTimeout(versionIntervalHandle);
|
|
420
863
|
if (boardIntervalHandle !== null)
|
|
421
864
|
timers.clearTimeout(boardIntervalHandle);
|
|
422
865
|
if (transcriptIntervalHandle !== null) {
|
|
@@ -431,6 +874,15 @@ export async function runMeshDaemon(deps = {}) {
|
|
|
431
874
|
// Final flush, then clean MQTT DISCONNECT so the broker emits the
|
|
432
875
|
// lifecycle event; offline is published server-side only.
|
|
433
876
|
await doFlushCycle("shutdown", { force: true });
|
|
877
|
+
if (workCache) {
|
|
878
|
+
try {
|
|
879
|
+
await workCache.stop();
|
|
880
|
+
}
|
|
881
|
+
catch (err) {
|
|
882
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
883
|
+
log(dir, `work cache stop error: ${msg.slice(0, 120)}`);
|
|
884
|
+
}
|
|
885
|
+
}
|
|
434
886
|
if (presence) {
|
|
435
887
|
try {
|
|
436
888
|
await presence.stop();
|