@indigoai-us/hq-cli 5.314.0 → 5.315.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 +4311 -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/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/resolve-company.sh +199 -0
- package/assets/scaffold/core/scripts/resume-thread-lock.sh +285 -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 +10753 -0
- package/dist/command-catalog.generated.js +13859 -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 +127 -0
- package/dist/commands/bot-jobs.js +454 -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-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-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-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-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 +277 -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 +8983 -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 +6 -7
- package/dist/fast-core.js +87 -24
- package/dist/fast-scaffold.d.ts +86 -0
- package/dist/fast-scaffold.js +364 -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-run.d.ts +109 -0
- package/dist/lib/bot/job-run.js +246 -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 +217 -0
- package/dist/lib/bot/run.js +1869 -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/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 +133 -0
- package/dist/lib/lanes/autopilot.js +1222 -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 +66 -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 +22 -0
- package/dist/lib/lanes/flag-keys.js +22 -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 +479 -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 +46 -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 +147 -0
- package/dist/lib/lanes/outpost-dispatch.js +271 -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
package/dist/commands/cloud.js
CHANGED
|
@@ -16,10 +16,16 @@ import { isAccessDeniedError, accessDeniedKeyOf, formatAccessDenied, } from "../
|
|
|
16
16
|
import chalk from "chalk";
|
|
17
17
|
import * as fs from "fs";
|
|
18
18
|
import * as path from "path";
|
|
19
|
-
import { share, sync, getStateDir, listJournals,
|
|
19
|
+
import { share, sync, getStateDir, listJournals, VaultClient, computePersonalVaultPaths, PERSONAL_VAULT_JOURNAL_SLUG, resolvePullScope, syncDoctor, } from "@indigoai-us/hq-cloud";
|
|
20
20
|
import { DEFAULT_HQ_ROOT, ensureCognitoToken, buildVaultConfig, } from "../utils/cognito-session.js";
|
|
21
|
+
import { resolveUploadAuthor } from "../utils/upload-author.js";
|
|
21
22
|
import { companyFolderExceedsThreshold, emitNarrowHint, isStrictRefusal, resolveBannerLevel, resolveNarrowHintPresentationLevel, resolveNarrowHintMinBytes, } from "../lib/narrow-hint-banner.js";
|
|
22
23
|
import { beginSyncHealthReport, } from "../utils/client-health.js";
|
|
24
|
+
import { recordFirstWorkBearingSync } from "../lib/first-sync-next-step.js";
|
|
25
|
+
import { createPlanLimitRefusalTracker, describeRefusedCount, describeRefusedFiles, mergePlanLimitRefusals, renderPlanLimitRefusalLines, trackingProgressRecorder, } from "../lib/billing/plan-limit-refusals.js";
|
|
26
|
+
import { formatPlanGateError, planGateErrorFromVaultError, } from "../utils/plan-gate-error.js";
|
|
27
|
+
import { personalTargetedPushPathsEnabled } from "./personal-targeted-push-flag.js";
|
|
28
|
+
import { resolveExplicitPersonalPushPaths } from "./personal-targeted-push-paths.js";
|
|
23
29
|
/**
|
|
24
30
|
* Terminal-failure signal for the sync fanout runners. The runners
|
|
25
31
|
* (`runPushAll` / `runPullAll` / `runPullPersonal` / `runNowSingle` /
|
|
@@ -33,18 +39,41 @@ import { beginSyncHealthReport, } from "../utils/client-health.js";
|
|
|
33
39
|
*/
|
|
34
40
|
export class SyncExitError extends Error {
|
|
35
41
|
code;
|
|
36
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The client-health outcome to record for this exit. A run whose only
|
|
44
|
+
* problem was a plan-limit refusal exits non-zero (it did not upload what
|
|
45
|
+
* was asked) but is not a sync failure: the engine worked and the refusal
|
|
46
|
+
* is plan state, so it must not count toward `consecutiveFailures`.
|
|
47
|
+
*/
|
|
48
|
+
health;
|
|
49
|
+
constructor(code, opts = {}) {
|
|
37
50
|
super(`sync command exit ${code}`);
|
|
38
51
|
this.code = code;
|
|
39
52
|
this.name = "SyncExitError";
|
|
53
|
+
this.health = opts.health ?? "failed";
|
|
40
54
|
}
|
|
41
55
|
}
|
|
56
|
+
async function ensureSyncCognitoToken() {
|
|
57
|
+
return ensureCognitoToken({
|
|
58
|
+
interactive: process.stdin.isTTY === true && process.stdout.isTTY === true,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
42
61
|
/**
|
|
43
62
|
* Preserve the vault's typed write-scope refusal at the CLI boundary. This is
|
|
44
63
|
* deliberately duck-typed so hq-cli remains compatible while hq-cloud and the
|
|
45
64
|
* CLI are released independently.
|
|
46
65
|
*/
|
|
47
66
|
export function formatSyncFailure(err) {
|
|
67
|
+
// A plan-limit refusal the runner threw (a 402 on the whole request) renders
|
|
68
|
+
// with the same reason, fix options and upgrade link as every other refusal.
|
|
69
|
+
const planGate = planGateErrorFromVaultError(err);
|
|
70
|
+
if (planGate) {
|
|
71
|
+
const refusedPath = typeof err.path === "string"
|
|
72
|
+
? err.path
|
|
73
|
+
: undefined;
|
|
74
|
+
return (formatPlanGateError(planGate) +
|
|
75
|
+
(refusedPath ? `\nNot uploaded: ${refusedPath}` : ""));
|
|
76
|
+
}
|
|
48
77
|
if (isAccessDeniedError(err)) {
|
|
49
78
|
const key = accessDeniedKeyOf(err);
|
|
50
79
|
const base = err instanceof Error ? err.message : String(err);
|
|
@@ -90,7 +119,12 @@ export async function withSyncHealthReport(run) {
|
|
|
90
119
|
return result;
|
|
91
120
|
}
|
|
92
121
|
catch (err) {
|
|
93
|
-
|
|
122
|
+
if (err instanceof SyncExitError && err.health === "succeeded") {
|
|
123
|
+
await health.succeeded();
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
await health.failed();
|
|
127
|
+
}
|
|
94
128
|
if (err instanceof SyncExitError)
|
|
95
129
|
process.exit(err.code);
|
|
96
130
|
throw err;
|
|
@@ -115,11 +149,39 @@ export function scopeExcludedWarning(count) {
|
|
|
115
149
|
* dropped files — helps debug ACL vs scope-excluded mismatches (feedback_7e9c535e).
|
|
116
150
|
*/
|
|
117
151
|
export function scopeExcludedPrefixDetail(prefixSet) {
|
|
118
|
-
|
|
152
|
+
// No client-side prefix scope applied: the server refused the paths one by
|
|
153
|
+
// one, and scopeExcludedLines' primary line already says so.
|
|
154
|
+
if (prefixSet === undefined)
|
|
155
|
+
return null;
|
|
156
|
+
if (prefixSet.length === 0) {
|
|
119
157
|
return " Granted write prefixes: (none — shared-mode membership with no explicit grants)";
|
|
120
158
|
}
|
|
121
159
|
return ` Granted write prefixes: ${prefixSet.join(", ")}`;
|
|
122
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Every warning line for a push that dropped files, shared by `push`, `now`
|
|
163
|
+
* and `push --all`. With a client prefix scope the files fell outside the
|
|
164
|
+
* caller's write prefixes; without one (prefixSet undefined) the server
|
|
165
|
+
* refused them path by path — typically another member's child in a private
|
|
166
|
+
* folder foo/ — and grant advice would point the reader the wrong way.
|
|
167
|
+
*/
|
|
168
|
+
export function scopeExcludedLines(count, prefixSet) {
|
|
169
|
+
if (count <= 0)
|
|
170
|
+
return [];
|
|
171
|
+
if (prefixSet === undefined) {
|
|
172
|
+
return [
|
|
173
|
+
`⚠ ${count} file(s) were NOT uploaded — the server refused them. ` +
|
|
174
|
+
`A common cause is a file someone else created in a private folder ` +
|
|
175
|
+
`(foo/): only its creator can change it. They were skipped, not ` +
|
|
176
|
+
`synced. Re-run with --json to list them.`,
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
const lines = [scopeExcludedWarning(count)];
|
|
180
|
+
const detail = scopeExcludedPrefixDetail(prefixSet);
|
|
181
|
+
if (detail)
|
|
182
|
+
lines.push(detail);
|
|
183
|
+
return lines;
|
|
184
|
+
}
|
|
123
185
|
/**
|
|
124
186
|
* Resolve the `propagateDeletePolicy` for share() calls.
|
|
125
187
|
*
|
|
@@ -388,6 +450,7 @@ export async function pushAll(options, deps) {
|
|
|
388
450
|
companyUid: m.companyUid,
|
|
389
451
|
shareOptions: {
|
|
390
452
|
company: m.companyUid,
|
|
453
|
+
targetSlug: slug,
|
|
391
454
|
hqRoot: options.hqRoot,
|
|
392
455
|
paths: [path.join(options.hqRoot, "companies", slug)],
|
|
393
456
|
skipUnchanged: true,
|
|
@@ -445,7 +508,13 @@ export async function pushAll(options, deps) {
|
|
|
445
508
|
result.bytesUploaded += r.bytesUploaded;
|
|
446
509
|
result.filesDeleted += r.filesDeleted;
|
|
447
510
|
result.filesExcludedByScope += r.filesExcludedByScope;
|
|
448
|
-
result.perCompany.push({
|
|
511
|
+
result.perCompany.push({
|
|
512
|
+
slug: entry.slug,
|
|
513
|
+
result: r,
|
|
514
|
+
...(entry.shareOptions.prefixSet !== undefined
|
|
515
|
+
? { prefixSet: entry.shareOptions.prefixSet }
|
|
516
|
+
: {}),
|
|
517
|
+
});
|
|
449
518
|
}
|
|
450
519
|
catch (err) {
|
|
451
520
|
const message = formatSyncFailure(err);
|
|
@@ -455,6 +524,24 @@ export async function pushAll(options, deps) {
|
|
|
455
524
|
}
|
|
456
525
|
return result;
|
|
457
526
|
}
|
|
527
|
+
/**
|
|
528
|
+
* Credentials `hq sync push` hands to share(). A pre-vended EntityContext
|
|
529
|
+
* (AppBar's `--creds-from-stdin` first push) cannot write under private
|
|
530
|
+
* folders directly, so it travels with the caller's vault config as
|
|
531
|
+
* `privateFolderVaultConfig`. share() takes exactly one of `vaultConfig` /
|
|
532
|
+
* `entityContext`.
|
|
533
|
+
*/
|
|
534
|
+
export function pushShareCredentials(input) {
|
|
535
|
+
if (input.entityContext) {
|
|
536
|
+
return {
|
|
537
|
+
entityContext: input.entityContext,
|
|
538
|
+
...(input.scopeVaultConfig
|
|
539
|
+
? { privateFolderVaultConfig: input.scopeVaultConfig }
|
|
540
|
+
: {}),
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
return input.vaultConfig ? { vaultConfig: input.vaultConfig } : {};
|
|
544
|
+
}
|
|
458
545
|
/**
|
|
459
546
|
* Resolve the canonical person entity UID for the logged-in user. Used by
|
|
460
547
|
* `hq sync {push,pull,now} --personal` to target the personal vault without
|
|
@@ -472,21 +559,15 @@ export async function resolveCanonicalPersonUid(vaultClient) {
|
|
|
472
559
|
return pick.uid;
|
|
473
560
|
}
|
|
474
561
|
/**
|
|
475
|
-
*
|
|
476
|
-
*
|
|
477
|
-
* `
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
* hand-rolled S3 sweep. Closes hq-cli#25.
|
|
482
|
-
*
|
|
483
|
-
* Refusal — not silent filtering — is intentional: explicit is better than
|
|
484
|
-
* implicit guesswork, and the legitimate "I want to push a subset of my
|
|
485
|
-
* personal vault" use case has a clean workaround (drop `--personal`, the
|
|
486
|
-
* subset upload targets the active company via standard semantics).
|
|
562
|
+
* Keep `hq sync push --personal <path>` refused by default. Positional paths
|
|
563
|
+
* bypass `computePersonalVaultPaths` and can send excluded `companies/`,
|
|
564
|
+
* `repos/`, `workspace/`, or `.git/` content to the personal vault. The
|
|
565
|
+
* default-off targeted-paths gate allows the combination only after every
|
|
566
|
+
* path is realpath-normalized and checked against the computed personal scope
|
|
567
|
+
* and its file exclusions. Closes hq-cli#25.
|
|
487
568
|
*/
|
|
488
|
-
export function assertNoPersonalPositionalPaths(opts, paths) {
|
|
489
|
-
if (opts.personal && paths && paths.length > 0) {
|
|
569
|
+
export function assertNoPersonalPositionalPaths(opts, paths, targetedPersonalPathsEnabled = false) {
|
|
570
|
+
if (opts.personal && paths && paths.length > 0 && !targetedPersonalPathsEnabled) {
|
|
490
571
|
throw new Error("`--personal` cannot be combined with explicit [paths]: " +
|
|
491
572
|
"positional paths bypass the PERSONAL_VAULT_EXCLUDED_TOP_LEVEL " +
|
|
492
573
|
"guard (skips .git/, companies/, repos/, workspace/), risking " +
|
|
@@ -616,6 +697,32 @@ async function resolveCliPullScope(client, companyRef, hqRoot) {
|
|
|
616
697
|
}
|
|
617
698
|
return resolvePullScope(client, companyUid, slug, hqRoot);
|
|
618
699
|
}
|
|
700
|
+
/**
|
|
701
|
+
* The progress-snapshot label share()'s default recorder would use: the
|
|
702
|
+
* target's slug, or null for a personal-vault push. A pre-vended context
|
|
703
|
+
* carries its slug; otherwise the caller's company reference is the best the
|
|
704
|
+
* CLI knows before share() resolves it.
|
|
705
|
+
*/
|
|
706
|
+
function shareProgressCompany(input) {
|
|
707
|
+
if (input.personalMode)
|
|
708
|
+
return null;
|
|
709
|
+
if (input.entityContext) {
|
|
710
|
+
return input.entityContext.uid.startsWith("prs_")
|
|
711
|
+
? null
|
|
712
|
+
: input.entityContext.slug;
|
|
713
|
+
}
|
|
714
|
+
return input.companyRef ?? null;
|
|
715
|
+
}
|
|
716
|
+
/** Only a real slug builds a company billing link; a raw uid does not. */
|
|
717
|
+
function companySlugForBilling(label) {
|
|
718
|
+
return label && !/^(?:cmp|prs)_/.test(label) ? { companySlug: label } : {};
|
|
719
|
+
}
|
|
720
|
+
/** Print one push leg's refusal block under its row. */
|
|
721
|
+
function printPlanLimitRefusal(summary, indent = " ") {
|
|
722
|
+
for (const line of renderPlanLimitRefusalLines(summary, indent)) {
|
|
723
|
+
console.log(chalk.yellow(line));
|
|
724
|
+
}
|
|
725
|
+
}
|
|
619
726
|
export function registerCloudCommands(program) {
|
|
620
727
|
program
|
|
621
728
|
.command("push")
|
|
@@ -682,7 +789,13 @@ export function registerCloudCommands(program) {
|
|
|
682
789
|
// the fanout" — wired through to `pushAll.skipPersonal`. Outside
|
|
683
790
|
// `--all` the flag has no effect (logged above as part of the
|
|
684
791
|
// option's help text).
|
|
685
|
-
await withSyncHealthReport(() =>
|
|
792
|
+
await withSyncHealthReport(async () => {
|
|
793
|
+
const refused = await runPushAll(options.hqRoot, options.message, options.onConflict, options.personal === false);
|
|
794
|
+
// A plan-limit refusal is not a sync failure, but the push did
|
|
795
|
+
// not upload everything it was asked to: exit non-zero.
|
|
796
|
+
if (refused)
|
|
797
|
+
throw new SyncExitError(1, { health: "succeeded" });
|
|
798
|
+
});
|
|
686
799
|
return;
|
|
687
800
|
}
|
|
688
801
|
const jsonMode = options.json === true;
|
|
@@ -698,6 +811,7 @@ export function registerCloudCommands(program) {
|
|
|
698
811
|
// Assigned right before the sync engine runs, so option-validation
|
|
699
812
|
// failures never count as a sync attempt (US-003).
|
|
700
813
|
let syncHealth;
|
|
814
|
+
let explicitPersonalPaths;
|
|
701
815
|
try {
|
|
702
816
|
if (options.personal && options.credsFromStdin) {
|
|
703
817
|
throw new Error("`--personal` cannot be combined with --creds-from-stdin: " +
|
|
@@ -706,7 +820,11 @@ export function registerCloudCommands(program) {
|
|
|
706
820
|
"to have already resolved entity + credentials. Pick one.");
|
|
707
821
|
}
|
|
708
822
|
// Closes hq-cli#25 — see `assertNoPersonalPositionalPaths` doc-block.
|
|
709
|
-
|
|
823
|
+
const targetedPersonalPathsEnabled = Boolean(options.personal && paths && paths.length > 0 && personalTargetedPushPathsEnabled());
|
|
824
|
+
assertNoPersonalPositionalPaths(options, paths, targetedPersonalPathsEnabled);
|
|
825
|
+
if (targetedPersonalPathsEnabled) {
|
|
826
|
+
explicitPersonalPaths = resolveExplicitPersonalPushPaths(options.hqRoot, paths);
|
|
827
|
+
}
|
|
710
828
|
log(chalk.bold("\nHQ Sync — Push"));
|
|
711
829
|
log(` HQ root: ${options.hqRoot}`);
|
|
712
830
|
// Resolve credentials. Two paths:
|
|
@@ -715,7 +833,7 @@ export function registerCloudCommands(program) {
|
|
|
715
833
|
// 2. default: vend via cached Cognito session (the human CLI path).
|
|
716
834
|
let entityContext;
|
|
717
835
|
let vaultConfig;
|
|
718
|
-
/** Vault API config for membership/grant scope lookups
|
|
836
|
+
/** Vault API config for membership/grant scope lookups and, on the pre-vended `--creds-from-stdin` path, private-folder uploads. */
|
|
719
837
|
let scopeVaultConfig;
|
|
720
838
|
if (options.credsFromStdin) {
|
|
721
839
|
if (process.stdin.isTTY) {
|
|
@@ -732,11 +850,11 @@ export function registerCloudCommands(program) {
|
|
|
732
850
|
}
|
|
733
851
|
// Upload creds are pre-vended in entityContext, but prefix filtering
|
|
734
852
|
// still needs vault-service membership/grant resolution.
|
|
735
|
-
const accessToken = await
|
|
853
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
736
854
|
scopeVaultConfig = buildVaultConfig(accessToken);
|
|
737
855
|
}
|
|
738
856
|
else {
|
|
739
|
-
const accessToken = await
|
|
857
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
740
858
|
vaultConfig = buildVaultConfig(accessToken);
|
|
741
859
|
scopeVaultConfig = vaultConfig;
|
|
742
860
|
}
|
|
@@ -764,11 +882,13 @@ export function registerCloudCommands(program) {
|
|
|
764
882
|
// Otherwise preserve the historical "default to cwd" semantics so
|
|
765
883
|
// `hq sync push <file>` and bare `hq sync push` from inside the
|
|
766
884
|
// company tree both work as before.
|
|
767
|
-
const targetPaths =
|
|
768
|
-
?
|
|
769
|
-
:
|
|
770
|
-
?
|
|
771
|
-
:
|
|
885
|
+
const targetPaths = explicitPersonalPaths
|
|
886
|
+
? explicitPersonalPaths
|
|
887
|
+
: paths && paths.length > 0
|
|
888
|
+
? paths
|
|
889
|
+
: options.personal
|
|
890
|
+
? computePersonalVaultPaths(options.hqRoot)
|
|
891
|
+
: [process.cwd()];
|
|
772
892
|
log(` Company: ${options.personal
|
|
773
893
|
? `(personal: ${targetCompany})`
|
|
774
894
|
: (options.company ?? "(from .hq/config.json or stdin)")}`);
|
|
@@ -785,33 +905,50 @@ export function registerCloudCommands(program) {
|
|
|
785
905
|
// every row renders `—`. Resolved best-effort from the cached
|
|
786
906
|
// idToken — pre-vended `--creds-from-stdin` paths still get author
|
|
787
907
|
// attribution as long as the caller is logged in locally.
|
|
788
|
-
const author =
|
|
908
|
+
const author = resolveUploadAuthor();
|
|
789
909
|
let pushPrefixSet;
|
|
790
910
|
if (!personalMode && scopeVaultConfig) {
|
|
791
911
|
const scopeClient = new VaultClient(scopeVaultConfig);
|
|
792
912
|
const scope = await resolveCliPullScope(scopeClient, targetCompany, options.hqRoot);
|
|
793
913
|
pushPrefixSet = scope?.prefixSet;
|
|
794
914
|
}
|
|
915
|
+
// Collect plan-limit refusals from the runner's events through the
|
|
916
|
+
// progress-recorder seam, which (unlike onEvent) leaves share()'s own
|
|
917
|
+
// console output untouched. The snapshot label mirrors share()'s
|
|
918
|
+
// default recorder: the target slug, or null for the personal vault.
|
|
919
|
+
const progressCompany = shareProgressCompany({
|
|
920
|
+
personalMode,
|
|
921
|
+
entityContext,
|
|
922
|
+
companyRef: targetCompany ?? readActiveCompany(options.hqRoot),
|
|
923
|
+
});
|
|
924
|
+
const planLimitTracker = createPlanLimitRefusalTracker(companySlugForBilling(progressCompany));
|
|
795
925
|
syncHealth = beginSyncHealthReport();
|
|
796
926
|
const result = await share({
|
|
797
927
|
paths: targetPaths,
|
|
798
928
|
company: targetCompany,
|
|
799
929
|
message: options.message,
|
|
800
930
|
onConflict: options.onConflict,
|
|
801
|
-
|
|
802
|
-
|
|
931
|
+
...pushShareCredentials({
|
|
932
|
+
entityContext,
|
|
933
|
+
vaultConfig,
|
|
934
|
+
scopeVaultConfig,
|
|
935
|
+
}),
|
|
803
936
|
hqRoot: options.hqRoot,
|
|
804
937
|
onEvent,
|
|
938
|
+
progressRecorder: trackingProgressRecorder(planLimitTracker, progressCompany),
|
|
805
939
|
...(personalMode ? { personalMode: true } : {}),
|
|
806
940
|
...(journalSlug !== undefined ? { journalSlug } : {}),
|
|
807
941
|
...(author ? { author } : {}),
|
|
808
942
|
...(pushPrefixSet !== undefined ? { prefixSet: pushPrefixSet } : {}),
|
|
809
943
|
});
|
|
944
|
+
const planLimitRefused = planLimitTracker.summary();
|
|
810
945
|
if (jsonMode) {
|
|
811
946
|
// Synthetic terminal event so subprocess consumers can read final
|
|
812
947
|
// counts without summing per-file events. Distinguished from
|
|
813
948
|
// SyncProgressEvent by `type:"complete"` (not in the share()
|
|
814
|
-
// event schema — added at the CLI seam).
|
|
949
|
+
// event schema — added at the CLI seam). `planLimitRefused` is
|
|
950
|
+
// additive: present only when a plan limit refused new files, so a
|
|
951
|
+
// consumer never has to infer a refusal from the counts.
|
|
815
952
|
emitJson({
|
|
816
953
|
type: "complete",
|
|
817
954
|
filesUploaded: result.filesUploaded,
|
|
@@ -819,6 +956,7 @@ export function registerCloudCommands(program) {
|
|
|
819
956
|
filesSkipped: result.filesSkipped,
|
|
820
957
|
conflictPaths: result.conflictPaths,
|
|
821
958
|
aborted: result.aborted,
|
|
959
|
+
...(planLimitRefused ? { planLimitRefused } : {}),
|
|
822
960
|
});
|
|
823
961
|
}
|
|
824
962
|
if (result.aborted) {
|
|
@@ -826,13 +964,37 @@ export function registerCloudCommands(program) {
|
|
|
826
964
|
await syncHealth.failed();
|
|
827
965
|
process.exit(1);
|
|
828
966
|
}
|
|
967
|
+
recordFirstWorkBearingSync({
|
|
968
|
+
filesUploaded: result.filesUploaded,
|
|
969
|
+
filesDeleted: result.filesDeleted,
|
|
970
|
+
aborted: result.aborted,
|
|
971
|
+
});
|
|
972
|
+
if (planLimitRefused) {
|
|
973
|
+
// Never a success line over a refusal: say what was pushed, what
|
|
974
|
+
// was refused and how to fix it, then exit non-zero. The sync
|
|
975
|
+
// itself worked, so client health records a success. `--json`
|
|
976
|
+
// callers read `planLimitRefused` on the complete event instead
|
|
977
|
+
// and keep their exit status.
|
|
978
|
+
log(chalk.yellow(`\n⚠ Pushed ${result.filesUploaded} file(s) (${formatBytes(result.bytesUploaded)}, ` +
|
|
979
|
+
`${result.filesSkipped} skipped), but ${describeRefusedFiles(planLimitRefused)} ` +
|
|
980
|
+
"refused by your plan limit."));
|
|
981
|
+
for (const line of renderPlanLimitRefusalLines(planLimitRefused)) {
|
|
982
|
+
log(chalk.yellow(line));
|
|
983
|
+
}
|
|
984
|
+
for (const line of scopeExcludedLines(result.filesExcludedByScope, pushPrefixSet)) {
|
|
985
|
+
log(chalk.yellow(line));
|
|
986
|
+
}
|
|
987
|
+
await syncHealth.succeeded();
|
|
988
|
+
if (!jsonMode)
|
|
989
|
+
process.exit(1);
|
|
990
|
+
return;
|
|
991
|
+
}
|
|
829
992
|
if (result.filesExcludedByScope > 0) {
|
|
830
993
|
log(chalk.yellow(`\n⚠ Pushed ${result.filesUploaded} file(s) (${formatBytes(result.bytesUploaded)}, ` +
|
|
831
994
|
`${result.filesSkipped} skipped, ${result.filesExcludedByScope} scope-excluded)`));
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
log(chalk.yellow(prefixDetail));
|
|
995
|
+
for (const line of scopeExcludedLines(result.filesExcludedByScope, pushPrefixSet)) {
|
|
996
|
+
log(chalk.yellow(line));
|
|
997
|
+
}
|
|
836
998
|
}
|
|
837
999
|
else {
|
|
838
1000
|
log(chalk.green(`\n✓ Pushed ${result.filesUploaded} file(s) (${formatBytes(result.bytesUploaded)}, ${result.filesSkipped} skipped)`));
|
|
@@ -907,7 +1069,7 @@ export function registerCloudCommands(program) {
|
|
|
907
1069
|
console.log(chalk.bold("\nHQ Sync — Pull"));
|
|
908
1070
|
console.log(` HQ root: ${options.hqRoot}`);
|
|
909
1071
|
console.log(` Company: ${options.company ?? "(from .hq/config.json)"}\n`);
|
|
910
|
-
const accessToken = await
|
|
1072
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
911
1073
|
const vaultConfig = buildVaultConfig(accessToken);
|
|
912
1074
|
// US-011 (2026-05-21 fix): resolve the caller's sync-config for
|
|
913
1075
|
// the targeted membership BEFORE the pull, so we can (a) emit the
|
|
@@ -971,6 +1133,10 @@ export function registerCloudCommands(program) {
|
|
|
971
1133
|
await syncHealth.failed();
|
|
972
1134
|
process.exit(1);
|
|
973
1135
|
}
|
|
1136
|
+
recordFirstWorkBearingSync({
|
|
1137
|
+
filesDownloaded: result.filesDownloaded,
|
|
1138
|
+
aborted: result.aborted,
|
|
1139
|
+
});
|
|
974
1140
|
console.log(chalk.green(`\n✓ Pulled ${result.filesDownloaded} file(s) (${formatBytes(result.bytesDownloaded)}, ${result.filesSkipped} skipped, ${result.conflicts} conflicts)`));
|
|
975
1141
|
// Emit the hint banner after success so it appears alongside the
|
|
976
1142
|
// summary line. Mirrors the wiring in runPullAll and runNowSingle.
|
|
@@ -996,8 +1162,18 @@ export function registerCloudCommands(program) {
|
|
|
996
1162
|
.command("status")
|
|
997
1163
|
.description("Show local sync journal summary")
|
|
998
1164
|
.option("--hq-root <path>", `Local HQ tree root (default: ${DEFAULT_HQ_ROOT})`, DEFAULT_HQ_ROOT)
|
|
999
|
-
.action((options) => {
|
|
1165
|
+
.action((options, command) => {
|
|
1166
|
+
const explicitHqRoot = command.getOptionValueSource("hqRoot") === "cli";
|
|
1000
1167
|
try {
|
|
1168
|
+
const hqRoot = options.hqRoot;
|
|
1169
|
+
if (explicitHqRoot) {
|
|
1170
|
+
if (!fs.existsSync(hqRoot)) {
|
|
1171
|
+
throw new Error(`HQ root does not exist: ${hqRoot}`);
|
|
1172
|
+
}
|
|
1173
|
+
if (!fs.statSync(hqRoot).isDirectory()) {
|
|
1174
|
+
throw new Error(`HQ root is not a directory: ${hqRoot}`);
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1001
1177
|
// The engine SHARDS the journal by slug — the personal-vault fanout
|
|
1002
1178
|
// slot, one shard per cloud company, and the legacy "personal" shard.
|
|
1003
1179
|
// Enumerate EVERY shard the engine can write (via the engine's own
|
|
@@ -1006,13 +1182,7 @@ export function registerCloudCommands(program) {
|
|
|
1006
1182
|
// looked at `sync-journal._Users_<user>_hq.json` — a slug the engine
|
|
1007
1183
|
// never writes — and printed "No sync journal yet" right after a
|
|
1008
1184
|
// successful sync (feedback_9fbf1f82 / feedback_46288b7b).
|
|
1009
|
-
const
|
|
1010
|
-
if (journals.length === 0) {
|
|
1011
|
-
console.log(chalk.dim("No sync journal yet — run `hq sync now`, `hq sync push`, or `hq sync pull` to create one."));
|
|
1012
|
-
console.log(chalk.dim(` Looked in: ${getStateDir()} (sync-journal.*.json)`));
|
|
1013
|
-
return;
|
|
1014
|
-
}
|
|
1015
|
-
const configPath = path.join(options.hqRoot, ".hq", "config.json");
|
|
1185
|
+
const configPath = path.join(hqRoot, ".hq", "config.json");
|
|
1016
1186
|
let activeCompany;
|
|
1017
1187
|
if (fs.existsSync(configPath)) {
|
|
1018
1188
|
try {
|
|
@@ -1023,13 +1193,22 @@ export function registerCloudCommands(program) {
|
|
|
1023
1193
|
// ignore
|
|
1024
1194
|
}
|
|
1025
1195
|
}
|
|
1196
|
+
// Journals live in the machine-wide state directory, independently
|
|
1197
|
+
// of the HQ content root selected for this status display.
|
|
1198
|
+
const stateDir = getStateDir();
|
|
1199
|
+
const journals = listJournals();
|
|
1026
1200
|
let grandFiles = 0;
|
|
1027
1201
|
let grandBytes = 0;
|
|
1028
1202
|
let grandLastSync = "";
|
|
1029
1203
|
console.log(chalk.bold("\nHQ Sync — Status"));
|
|
1030
|
-
console.log(` HQ root: ${
|
|
1204
|
+
console.log(` HQ root: ${hqRoot}`);
|
|
1031
1205
|
console.log(` Active company: ${activeCompany ?? chalk.dim("(none)")}`);
|
|
1206
|
+
console.log(` State dir: ${stateDir}`);
|
|
1032
1207
|
console.log(` Journals: ${journals.length}`);
|
|
1208
|
+
if (journals.length === 0) {
|
|
1209
|
+
console.log(chalk.dim("No sync journal yet — run `hq sync now`, `hq sync push`, or `hq sync pull` to create one."));
|
|
1210
|
+
return;
|
|
1211
|
+
}
|
|
1033
1212
|
for (const j of journals) {
|
|
1034
1213
|
const entries = Object.entries(j.journal.files ?? {});
|
|
1035
1214
|
// Tombstones record removed files — exclude them from "tracked".
|
|
@@ -1194,7 +1373,7 @@ async function runPullAll(hqRoot, onConflict, modeAllOverride, skipPersonal, for
|
|
|
1194
1373
|
console.log("");
|
|
1195
1374
|
let result;
|
|
1196
1375
|
try {
|
|
1197
|
-
const accessToken = await
|
|
1376
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
1198
1377
|
const vaultConfig = buildVaultConfig(accessToken);
|
|
1199
1378
|
const realClient = new VaultClient(vaultConfig);
|
|
1200
1379
|
const adapter = {
|
|
@@ -1270,6 +1449,14 @@ async function runPullAll(hqRoot, onConflict, modeAllOverride, skipPersonal, for
|
|
|
1270
1449
|
`(${formatBytes(result.bytesDownloaded)}) across ${result.attempted} ` +
|
|
1271
1450
|
`target(s); ${result.conflicts} conflict(s); ${errored} error(s)`;
|
|
1272
1451
|
console.log(errored > 0 ? chalk.yellow(summary) : chalk.green(summary));
|
|
1452
|
+
for (const row of result.perCompany) {
|
|
1453
|
+
if (row.result && !row.error) {
|
|
1454
|
+
recordFirstWorkBearingSync({
|
|
1455
|
+
filesDownloaded: row.result.filesDownloaded,
|
|
1456
|
+
aborted: row.result.aborted,
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1273
1460
|
if (errored > 0)
|
|
1274
1461
|
throw new SyncExitError(1);
|
|
1275
1462
|
}
|
|
@@ -1279,7 +1466,7 @@ export async function runPullPersonal(hqRoot, onConflict) {
|
|
|
1279
1466
|
console.log(` HQ root: ${hqRoot}`);
|
|
1280
1467
|
console.log(` Strategy: ${onConflict ?? "(interactive)"}\n`);
|
|
1281
1468
|
try {
|
|
1282
|
-
const accessToken = await
|
|
1469
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
1283
1470
|
const vaultConfig = buildVaultConfig(accessToken);
|
|
1284
1471
|
const client = new VaultClient(vaultConfig);
|
|
1285
1472
|
const personalUid = await resolveCanonicalPersonUid({
|
|
@@ -1300,6 +1487,10 @@ export async function runPullPersonal(hqRoot, onConflict) {
|
|
|
1300
1487
|
throw new SyncExitError(1);
|
|
1301
1488
|
}
|
|
1302
1489
|
console.log(chalk.green(`\n✓ Pulled ${result.filesDownloaded} file(s) (${formatBytes(result.bytesDownloaded)}, ${result.filesSkipped} skipped, ${result.conflicts} conflicts)`));
|
|
1490
|
+
recordFirstWorkBearingSync({
|
|
1491
|
+
filesDownloaded: result.filesDownloaded,
|
|
1492
|
+
aborted: result.aborted,
|
|
1493
|
+
});
|
|
1303
1494
|
}
|
|
1304
1495
|
catch (err) {
|
|
1305
1496
|
if (err instanceof SyncExitError)
|
|
@@ -1308,6 +1499,11 @@ export async function runPullPersonal(hqRoot, onConflict) {
|
|
|
1308
1499
|
throw new SyncExitError(1);
|
|
1309
1500
|
}
|
|
1310
1501
|
}
|
|
1502
|
+
/**
|
|
1503
|
+
* Run `push --all` and print its per-target report. Returns the files a plan
|
|
1504
|
+
* limit refused across every target (null when none were), so the caller can
|
|
1505
|
+
* refuse to report success; hard failures still throw {@link SyncExitError}.
|
|
1506
|
+
*/
|
|
1311
1507
|
async function runPushAll(hqRoot, message, onConflict, skipPersonal) {
|
|
1312
1508
|
console.log(chalk.bold("\nHQ Sync — Push (all)"));
|
|
1313
1509
|
console.log(` HQ root: ${hqRoot}`);
|
|
@@ -1318,10 +1514,10 @@ async function runPushAll(hqRoot, message, onConflict, skipPersonal) {
|
|
|
1318
1514
|
console.log("");
|
|
1319
1515
|
let result;
|
|
1320
1516
|
try {
|
|
1321
|
-
const accessToken = await
|
|
1517
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
1322
1518
|
const vaultConfig = buildVaultConfig(accessToken);
|
|
1323
1519
|
const realClient = new VaultClient(vaultConfig);
|
|
1324
|
-
const author =
|
|
1520
|
+
const author = resolveUploadAuthor();
|
|
1325
1521
|
const adapter = {
|
|
1326
1522
|
listMyMemberships: () => realClient.listMyMemberships(),
|
|
1327
1523
|
listPersonEntities: () => realClient.entity.listByType("person"),
|
|
@@ -1342,31 +1538,39 @@ async function runPushAll(hqRoot, message, onConflict, skipPersonal) {
|
|
|
1342
1538
|
}, {
|
|
1343
1539
|
vaultClient: adapter,
|
|
1344
1540
|
resolveScope: (companyUid, slug) => resolvePullScope(realClient, companyUid, slug, hqRoot),
|
|
1345
|
-
share: (opts) =>
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
: {}),
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
: {}),
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1541
|
+
share: async (opts) => {
|
|
1542
|
+
const progressCompany = opts.personalMode
|
|
1543
|
+
? null
|
|
1544
|
+
: (opts.targetSlug ?? opts.company);
|
|
1545
|
+
const tracker = createPlanLimitRefusalTracker(companySlugForBilling(progressCompany));
|
|
1546
|
+
const shareResult = await share({
|
|
1547
|
+
paths: opts.paths,
|
|
1548
|
+
company: opts.company,
|
|
1549
|
+
vaultConfig,
|
|
1550
|
+
hqRoot: opts.hqRoot,
|
|
1551
|
+
progressRecorder: trackingProgressRecorder(tracker, progressCompany),
|
|
1552
|
+
...(opts.onConflict ? { onConflict: opts.onConflict } : {}),
|
|
1553
|
+
...(opts.personalMode !== undefined
|
|
1554
|
+
? { personalMode: opts.personalMode }
|
|
1555
|
+
: {}),
|
|
1556
|
+
...(opts.journalSlug !== undefined
|
|
1557
|
+
? { journalSlug: opts.journalSlug }
|
|
1558
|
+
: {}),
|
|
1559
|
+
...(opts.message !== undefined ? { message: opts.message } : {}),
|
|
1560
|
+
...(opts.skipUnchanged !== undefined
|
|
1561
|
+
? { skipUnchanged: opts.skipUnchanged }
|
|
1562
|
+
: {}),
|
|
1563
|
+
...(opts.propagateDeletes !== undefined
|
|
1564
|
+
? { propagateDeletes: opts.propagateDeletes }
|
|
1565
|
+
: {}),
|
|
1566
|
+
...(opts.propagateDeletePolicy !== undefined
|
|
1567
|
+
? { propagateDeletePolicy: opts.propagateDeletePolicy }
|
|
1568
|
+
: {}),
|
|
1569
|
+
...(opts.prefixSet !== undefined ? { prefixSet: opts.prefixSet } : {}),
|
|
1570
|
+
...(author ? { author } : {}),
|
|
1571
|
+
});
|
|
1572
|
+
return { ...shareResult, planLimit: tracker.summary() };
|
|
1573
|
+
},
|
|
1370
1574
|
});
|
|
1371
1575
|
}
|
|
1372
1576
|
catch (err) {
|
|
@@ -1375,35 +1579,62 @@ async function runPushAll(hqRoot, message, onConflict, skipPersonal) {
|
|
|
1375
1579
|
// terminal sync_failure before exiting on our behalf.
|
|
1376
1580
|
throw new SyncExitError(1);
|
|
1377
1581
|
}
|
|
1582
|
+
let refused = null;
|
|
1583
|
+
let refusedTargets = 0;
|
|
1378
1584
|
for (const row of result.perCompany) {
|
|
1379
1585
|
if (row.error) {
|
|
1380
1586
|
console.log(chalk.red(` ✗ ${row.slug}: ${row.error}`));
|
|
1381
1587
|
}
|
|
1382
1588
|
else if (row.result) {
|
|
1383
1589
|
const r = row.result;
|
|
1384
|
-
const
|
|
1590
|
+
const legRefused = r.planLimit ?? null;
|
|
1591
|
+
const status = r.aborted || r.filesExcludedByScope > 0 || legRefused
|
|
1385
1592
|
? chalk.yellow("⚠")
|
|
1386
1593
|
: chalk.green("✓");
|
|
1387
1594
|
console.log(` ${status} ${row.slug}: ${r.filesUploaded} file(s), ` +
|
|
1388
1595
|
`${formatBytes(r.bytesUploaded)}, ${r.filesSkipped} skipped, ` +
|
|
1389
1596
|
`${r.filesDeleted} deleted, ${r.filesExcludedByScope} scope-excluded, ` +
|
|
1390
1597
|
`${r.conflictPaths.length} conflict(s)` +
|
|
1391
|
-
(r.aborted ? " — aborted" : "")
|
|
1598
|
+
(r.aborted ? " — aborted" : "") +
|
|
1599
|
+
(legRefused
|
|
1600
|
+
? ` — ${describeRefusedCount(legRefused)} refused by plan limit`
|
|
1601
|
+
: ""));
|
|
1602
|
+
if (legRefused) {
|
|
1603
|
+
printPlanLimitRefusal(legRefused);
|
|
1604
|
+
refused = mergePlanLimitRefusals(refused, legRefused);
|
|
1605
|
+
refusedTargets += 1;
|
|
1606
|
+
}
|
|
1392
1607
|
}
|
|
1393
1608
|
}
|
|
1394
1609
|
const errored = result.errors.length;
|
|
1395
1610
|
const summary = `\nPushed ${result.filesUploaded} file(s) ` +
|
|
1396
1611
|
`(${formatBytes(result.bytesUploaded)}) across ${result.attempted} ` +
|
|
1397
1612
|
`target(s); ${result.filesDeleted} deleted; ${errored} error(s); ` +
|
|
1398
|
-
`${result.filesExcludedByScope} scope-excluded
|
|
1399
|
-
|
|
1613
|
+
`${result.filesExcludedByScope} scope-excluded` +
|
|
1614
|
+
(refusedTargets > 0
|
|
1615
|
+
? `; new files refused by a plan limit on ${refusedTargets} target(s)`
|
|
1616
|
+
: "");
|
|
1617
|
+
console.log(errored > 0 || result.filesExcludedByScope > 0 || refusedTargets > 0
|
|
1400
1618
|
? chalk.yellow(summary)
|
|
1401
1619
|
: chalk.green(summary));
|
|
1402
|
-
|
|
1403
|
-
|
|
1620
|
+
for (const row of result.perCompany) {
|
|
1621
|
+
if (row.result && !row.error) {
|
|
1622
|
+
recordFirstWorkBearingSync({
|
|
1623
|
+
filesUploaded: row.result.filesUploaded,
|
|
1624
|
+
filesDeleted: row.result.filesDeleted,
|
|
1625
|
+
aborted: row.result.aborted,
|
|
1626
|
+
});
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
for (const row of result.perCompany) {
|
|
1630
|
+
const excluded = row.result?.filesExcludedByScope ?? 0;
|
|
1631
|
+
for (const line of scopeExcludedLines(excluded, row.prefixSet)) {
|
|
1632
|
+
console.log(chalk.yellow(`${row.slug}: ${line}`));
|
|
1633
|
+
}
|
|
1404
1634
|
}
|
|
1405
1635
|
if (errored > 0)
|
|
1406
1636
|
throw new SyncExitError(1);
|
|
1637
|
+
return refused;
|
|
1407
1638
|
}
|
|
1408
1639
|
async function runNowSingle(hqRoot, company, personal, message, onConflict, modeAllOverride, forceScopeShrink) {
|
|
1409
1640
|
console.log(chalk.bold("\nHQ Sync — Now"));
|
|
@@ -1411,9 +1642,9 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1411
1642
|
console.log(` Target: ${personal ? "(personal)" : (company ?? "(active company)")}`);
|
|
1412
1643
|
console.log(` Strategy: ${onConflict ?? "(interactive)"}\n`);
|
|
1413
1644
|
try {
|
|
1414
|
-
const accessToken = await
|
|
1645
|
+
const accessToken = await ensureSyncCognitoToken();
|
|
1415
1646
|
const vaultConfig = buildVaultConfig(accessToken);
|
|
1416
|
-
const author =
|
|
1647
|
+
const author = resolveUploadAuthor();
|
|
1417
1648
|
// Resolve the target. For --personal, look up the canonical person and
|
|
1418
1649
|
// route paths/journal through personalMode. Otherwise use the company arg
|
|
1419
1650
|
// (or fall back to the active company inside share()/sync()).
|
|
@@ -1421,6 +1652,7 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1421
1652
|
let personalMode = false;
|
|
1422
1653
|
let journalSlug;
|
|
1423
1654
|
let pushPaths;
|
|
1655
|
+
let pushSlug;
|
|
1424
1656
|
if (personal) {
|
|
1425
1657
|
const client = new VaultClient(vaultConfig);
|
|
1426
1658
|
targetCompany = await resolveCanonicalPersonUid({
|
|
@@ -1445,6 +1677,7 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1445
1677
|
"Use --company <slug>, --personal, or set up .hq/config.json.");
|
|
1446
1678
|
}
|
|
1447
1679
|
pushPaths = [path.join(hqRoot, "companies", slug)];
|
|
1680
|
+
pushSlug = slug;
|
|
1448
1681
|
}
|
|
1449
1682
|
// Push first so the subsequent pull doesn't redownload files we were
|
|
1450
1683
|
// about to broadcast (matches hq-sync-runner ordering).
|
|
@@ -1455,11 +1688,14 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1455
1688
|
const pushScope = await resolveCliPullScope(scopeClient, targetCompany, hqRoot);
|
|
1456
1689
|
nowPushPrefixSet = pushScope?.prefixSet;
|
|
1457
1690
|
}
|
|
1691
|
+
const pushProgressCompany = personalMode ? null : (pushSlug ?? null);
|
|
1692
|
+
const planLimitTracker = createPlanLimitRefusalTracker(companySlugForBilling(pushProgressCompany));
|
|
1458
1693
|
const pushResult = await share({
|
|
1459
1694
|
paths: pushPaths,
|
|
1460
1695
|
company: targetCompany,
|
|
1461
1696
|
vaultConfig,
|
|
1462
1697
|
hqRoot,
|
|
1698
|
+
progressRecorder: trackingProgressRecorder(planLimitTracker, pushProgressCompany),
|
|
1463
1699
|
skipUnchanged: true,
|
|
1464
1700
|
propagateDeletes: true,
|
|
1465
1701
|
propagateDeletePolicy: resolveDeletePolicy(),
|
|
@@ -1470,23 +1706,33 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1470
1706
|
...(author ? { author } : {}),
|
|
1471
1707
|
...(nowPushPrefixSet !== undefined ? { prefixSet: nowPushPrefixSet } : {}),
|
|
1472
1708
|
});
|
|
1473
|
-
const
|
|
1709
|
+
const pushRefused = planLimitTracker.summary();
|
|
1710
|
+
const pushStatus = pushResult.aborted || pushResult.filesExcludedByScope > 0 || pushRefused
|
|
1474
1711
|
? chalk.yellow("⚠")
|
|
1475
1712
|
: chalk.green("✓");
|
|
1476
1713
|
console.log(` ${pushStatus} ` +
|
|
1477
1714
|
`${pushResult.filesUploaded} uploaded, ${pushResult.filesSkipped} skipped, ` +
|
|
1478
1715
|
`${pushResult.filesDeleted} deleted, ${pushResult.filesExcludedByScope} scope-excluded` +
|
|
1479
|
-
(pushResult.aborted ? " — aborted" : "")
|
|
1716
|
+
(pushResult.aborted ? " — aborted" : "") +
|
|
1717
|
+
(pushRefused
|
|
1718
|
+
? ` — ${describeRefusedCount(pushRefused)} refused by plan limit`
|
|
1719
|
+
: ""));
|
|
1720
|
+
if (pushRefused)
|
|
1721
|
+
printPlanLimitRefusal(pushRefused, " ");
|
|
1480
1722
|
if (pushResult.filesExcludedByScope > 0) {
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
console.log(chalk.yellow(prefixDetail));
|
|
1723
|
+
for (const line of scopeExcludedLines(pushResult.filesExcludedByScope, nowPushPrefixSet)) {
|
|
1724
|
+
console.log(chalk.yellow(line));
|
|
1725
|
+
}
|
|
1485
1726
|
}
|
|
1486
1727
|
if (pushResult.aborted) {
|
|
1487
1728
|
console.log(chalk.yellow("\n⚠ Sync now aborted on push leg; pull skipped."));
|
|
1488
1729
|
throw new SyncExitError(1);
|
|
1489
1730
|
}
|
|
1731
|
+
recordFirstWorkBearingSync({
|
|
1732
|
+
filesUploaded: pushResult.filesUploaded,
|
|
1733
|
+
filesDeleted: pushResult.filesDeleted,
|
|
1734
|
+
aborted: pushResult.aborted,
|
|
1735
|
+
});
|
|
1490
1736
|
// US-011: resolve membership sync-config so we can either nudge an
|
|
1491
1737
|
// all-mode owner or refuse the pull when strict-mode is on. Skipped
|
|
1492
1738
|
// for personal targets (personal vault has no membership row) and
|
|
@@ -1578,6 +1824,10 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1578
1824
|
console.log(chalk.yellow("\n⚠ Sync now finished with pull leg aborted."));
|
|
1579
1825
|
throw new SyncExitError(1);
|
|
1580
1826
|
}
|
|
1827
|
+
recordFirstWorkBearingSync({
|
|
1828
|
+
filesDownloaded: pullResult.filesDownloaded,
|
|
1829
|
+
aborted: pullResult.aborted,
|
|
1830
|
+
});
|
|
1581
1831
|
// Emit the hint banner after a successful pull so it appears at the
|
|
1582
1832
|
// bottom of the summary rather than mid-stream. Size-gated: only a large
|
|
1583
1833
|
// local folder is nudged.
|
|
@@ -1588,6 +1838,12 @@ async function runNowSingle(hqRoot, company, personal, message, onConflict, mode
|
|
|
1588
1838
|
level: bannerLevel,
|
|
1589
1839
|
});
|
|
1590
1840
|
}
|
|
1841
|
+
if (pushRefused) {
|
|
1842
|
+
// The pull ran, but the push did not upload everything: no success line.
|
|
1843
|
+
console.log(chalk.yellow(`\n⚠ Sync now finished, but ${describeRefusedFiles(pushRefused)} ` +
|
|
1844
|
+
"refused by your plan limit (listed above)."));
|
|
1845
|
+
throw new SyncExitError(1, { health: "succeeded" });
|
|
1846
|
+
}
|
|
1591
1847
|
console.log(chalk.green("\n✓ Sync now complete"));
|
|
1592
1848
|
}
|
|
1593
1849
|
catch (err) {
|
|
@@ -1609,12 +1865,22 @@ async function runNowAll(hqRoot, message, onConflict, modeAllOverride, skipPerso
|
|
|
1609
1865
|
// so the per-target rendering, error isolation, and exit codes are
|
|
1610
1866
|
// identical to running `push --all` then `pull --all` back-to-back.
|
|
1611
1867
|
console.log(chalk.dim("→ push --all"));
|
|
1612
|
-
await runPushAll(hqRoot, message, onConflict, skipPersonal);
|
|
1868
|
+
const refused = await runPushAll(hqRoot, message, onConflict, skipPersonal);
|
|
1613
1869
|
console.log(chalk.dim("\n→ pull --all"));
|
|
1614
1870
|
// US-011: forward --mode-all so the strict refusal applies to the
|
|
1615
1871
|
// pull leg (push doesn't need a narrow-hint — the narrow ritual is
|
|
1616
1872
|
// pull-side).
|
|
1617
1873
|
await runPullAll(hqRoot, onConflict, modeAllOverride, skipPersonal, forceScopeShrink);
|
|
1874
|
+
if (refused) {
|
|
1875
|
+
// A plan-limit refusal does not stop the pull, but the run must not end
|
|
1876
|
+
// looking like a clean sync: say so last and exit non-zero.
|
|
1877
|
+
console.log(chalk.yellow(`\n⚠ Sync finished, but ${describeRefusedFiles(refused)} refused ` +
|
|
1878
|
+
"by your plan limit (listed under push --all above)."));
|
|
1879
|
+
if (refused.upgradeUrl) {
|
|
1880
|
+
console.log(chalk.yellow(` Upgrade: ${refused.upgradeUrl}`));
|
|
1881
|
+
}
|
|
1882
|
+
throw new SyncExitError(1, { health: "succeeded" });
|
|
1883
|
+
}
|
|
1618
1884
|
}
|
|
1619
1885
|
/**
|
|
1620
1886
|
* Best-effort read of the active company slug from `<hqRoot>/.hq/config.json`.
|
|
@@ -1668,35 +1934,4 @@ async function readAllStdin() {
|
|
|
1668
1934
|
}
|
|
1669
1935
|
return Buffer.concat(chunks).toString("utf8");
|
|
1670
1936
|
}
|
|
1671
|
-
/**
|
|
1672
|
-
* Resolve the syncing user's `UploadAuthor` (sub + email) from the cached
|
|
1673
|
-
* Cognito idToken. Returns `undefined` when no tokens are cached or the
|
|
1674
|
-
* token is missing the required claims — share() then skips the metadata
|
|
1675
|
-
* stamp gracefully (not an error).
|
|
1676
|
-
*
|
|
1677
|
-
* We deliberately decode the JWT here instead of verifying it: Cognito
|
|
1678
|
-
* already verified at issuance, and we only use the public claims to
|
|
1679
|
-
* label the upload's S3 user metadata (no auth decision rides on it).
|
|
1680
|
-
*/
|
|
1681
|
-
function resolveUploadAuthorFromCache() {
|
|
1682
|
-
const tokens = loadCachedTokens();
|
|
1683
|
-
if (!tokens?.idToken)
|
|
1684
|
-
return undefined;
|
|
1685
|
-
const parts = tokens.idToken.split(".");
|
|
1686
|
-
if (parts.length !== 3)
|
|
1687
|
-
return undefined;
|
|
1688
|
-
try {
|
|
1689
|
-
const payload = parts[1].replace(/-/g, "+").replace(/_/g, "/");
|
|
1690
|
-
const padded = payload + "=".repeat((4 - (payload.length % 4)) % 4);
|
|
1691
|
-
const json = Buffer.from(padded, "base64").toString("utf-8");
|
|
1692
|
-
const claims = JSON.parse(json);
|
|
1693
|
-
if (claims.sub && claims.email) {
|
|
1694
|
-
return { userSub: claims.sub, email: claims.email };
|
|
1695
|
-
}
|
|
1696
|
-
return undefined;
|
|
1697
|
-
}
|
|
1698
|
-
catch {
|
|
1699
|
-
return undefined;
|
|
1700
|
-
}
|
|
1701
|
-
}
|
|
1702
1937
|
//# sourceMappingURL=cloud.js.map
|