@aligndottech/cli 0.49.0 → 0.51.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/README.md +5 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +32 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +4 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +18 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +33 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connect-agents.d.ts.map +1 -1
- package/dist/commands/connect-agents.js +3 -1
- package/dist/commands/connect-agents.js.map +1 -1
- package/dist/commands/connect.d.ts +5 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +24 -0
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +11 -0
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/import/confluence.d.ts.map +1 -1
- package/dist/commands/import/confluence.js +24 -5
- package/dist/commands/import/confluence.js.map +1 -1
- package/dist/commands/import/docs.js +2 -2
- package/dist/commands/import/git.d.ts.map +1 -1
- package/dist/commands/import/git.js +15 -5
- package/dist/commands/import/git.js.map +1 -1
- package/dist/commands/import/github.d.ts.map +1 -1
- package/dist/commands/import/github.js +34 -7
- package/dist/commands/import/github.js.map +1 -1
- package/dist/commands/import/gitlab.d.ts.map +1 -1
- package/dist/commands/import/gitlab.js +10 -5
- package/dist/commands/import/gitlab.js.map +1 -1
- package/dist/commands/import/jira.d.ts.map +1 -1
- package/dist/commands/import/jira.js +10 -5
- package/dist/commands/import/jira.js.map +1 -1
- package/dist/commands/import/linear.d.ts.map +1 -1
- package/dist/commands/import/linear.js +10 -5
- package/dist/commands/import/linear.js.map +1 -1
- package/dist/commands/import/notion.d.ts.map +1 -1
- package/dist/commands/import/notion.js +10 -5
- package/dist/commands/import/notion.js.map +1 -1
- package/dist/commands/import/sessions.js +2 -2
- package/dist/commands/import/slack.d.ts.map +1 -1
- package/dist/commands/import/slack.js +12 -7
- package/dist/commands/import/slack.js.map +1 -1
- package/dist/commands/import/teams.d.ts.map +1 -1
- package/dist/commands/import/teams.js +10 -5
- package/dist/commands/import/teams.js.map +1 -1
- package/dist/commands/import/zoom.d.ts.map +1 -1
- package/dist/commands/import/zoom.js +10 -5
- package/dist/commands/import/zoom.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +43 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/invite.d.ts +8 -18
- package/dist/commands/invite.d.ts.map +1 -1
- package/dist/commands/invite.js +23 -46
- package/dist/commands/invite.js.map +1 -1
- package/dist/commands/join.d.ts +5 -0
- package/dist/commands/join.d.ts.map +1 -0
- package/dist/commands/join.js +49 -0
- package/dist/commands/join.js.map +1 -0
- package/dist/commands/local-relink.d.ts +35 -0
- package/dist/commands/local-relink.d.ts.map +1 -0
- package/dist/commands/local-relink.js +72 -0
- package/dist/commands/local-relink.js.map +1 -0
- package/dist/commands/local.d.ts.map +1 -1
- package/dist/commands/local.js +113 -4
- package/dist/commands/local.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +21 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mark.d.ts +37 -0
- package/dist/commands/mark.d.ts.map +1 -0
- package/dist/commands/mark.js +105 -0
- package/dist/commands/mark.js.map +1 -0
- package/dist/commands/mcp.d.ts +149 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +80 -15
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +12 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/setup.d.ts +39 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +65 -50
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/share.d.ts +7 -0
- package/dist/commands/share.d.ts.map +1 -0
- package/dist/commands/share.js +129 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +55 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +278 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/telemetry.d.ts +3 -3
- package/dist/commands/telemetry.js +6 -6
- package/dist/commands/telemetry.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +6 -1
- package/dist/commands/why.js.map +1 -1
- package/dist/detector/detector-version.d.ts +16 -0
- package/dist/detector/detector-version.d.ts.map +1 -0
- package/dist/detector/detector-version.js +36 -0
- package/dist/detector/detector-version.js.map +1 -0
- package/dist/detector/relationship-contract.d.ts +30 -0
- package/dist/detector/relationship-contract.d.ts.map +1 -0
- package/dist/detector/relationship-contract.js +120 -0
- package/dist/detector/relationship-contract.js.map +1 -0
- package/dist/detector/relationship-contract.v1.json +53 -0
- package/dist/detector/relationship-prompt.d.ts +20 -0
- package/dist/detector/relationship-prompt.d.ts.map +1 -0
- package/dist/detector/relationship-prompt.js +55 -0
- package/dist/detector/relationship-prompt.js.map +1 -0
- package/dist/detector/relationship-prompt.v1.json +13 -0
- package/dist/detector/resolve-pair.d.ts +39 -0
- package/dist/detector/resolve-pair.d.ts.map +1 -0
- package/dist/detector/resolve-pair.js +345 -0
- package/dist/detector/resolve-pair.js.map +1 -0
- package/dist/detector/similar-item.d.ts +20 -0
- package/dist/detector/similar-item.d.ts.map +1 -0
- package/dist/detector/similar-item.js +16 -0
- package/dist/detector/similar-item.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-dedup.d.ts.map +1 -1
- package/dist/lib/advisory-dedup.js +16 -8
- package/dist/lib/advisory-dedup.js.map +1 -1
- package/dist/lib/advisory-verdict.d.ts +19 -0
- package/dist/lib/advisory-verdict.d.ts.map +1 -1
- package/dist/lib/advisory-verdict.js +6 -3
- package/dist/lib/advisory-verdict.js.map +1 -1
- package/dist/lib/backfill-state.d.ts +116 -0
- package/dist/lib/backfill-state.d.ts.map +1 -0
- package/dist/lib/backfill-state.js +342 -0
- package/dist/lib/backfill-state.js.map +1 -0
- package/dist/lib/backup-copy.d.ts +17 -0
- package/dist/lib/backup-copy.d.ts.map +1 -0
- package/dist/lib/backup-copy.js +13 -0
- package/dist/lib/backup-copy.js.map +1 -0
- package/dist/lib/backup-exclusion.d.ts +10 -0
- package/dist/lib/backup-exclusion.d.ts.map +1 -0
- package/dist/lib/backup-exclusion.js +58 -0
- package/dist/lib/backup-exclusion.js.map +1 -0
- package/dist/lib/capture-report.d.ts +22 -18
- package/dist/lib/capture-report.d.ts.map +1 -1
- package/dist/lib/capture-report.js +64 -2
- package/dist/lib/capture-report.js.map +1 -1
- package/dist/lib/cli-oauth.d.ts +2 -0
- package/dist/lib/cli-oauth.d.ts.map +1 -1
- package/dist/lib/cli-oauth.js +61 -10
- package/dist/lib/cli-oauth.js.map +1 -1
- package/dist/lib/config.d.ts +72 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +245 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/confirm-timeout.d.ts +8 -0
- package/dist/lib/confirm-timeout.d.ts.map +1 -0
- package/dist/lib/confirm-timeout.js +18 -0
- package/dist/lib/confirm-timeout.js.map +1 -0
- package/dist/lib/curation/check-marks.d.ts +48 -0
- package/dist/lib/curation/check-marks.d.ts.map +1 -0
- package/dist/lib/curation/check-marks.js +81 -0
- package/dist/lib/curation/check-marks.js.map +1 -0
- package/dist/lib/curation/guardrail.d.ts +39 -0
- package/dist/lib/curation/guardrail.d.ts.map +1 -0
- package/dist/lib/curation/guardrail.js +95 -0
- package/dist/lib/curation/guardrail.js.map +1 -0
- package/dist/lib/curation/judge.d.ts +3 -0
- package/dist/lib/curation/judge.d.ts.map +1 -0
- package/dist/lib/curation/judge.js +9 -0
- package/dist/lib/curation/judge.js.map +1 -0
- package/dist/lib/curation/judgements-db.d.ts +97 -0
- package/dist/lib/curation/judgements-db.d.ts.map +1 -0
- package/dist/lib/curation/judgements-db.js +206 -0
- package/dist/lib/curation/judgements-db.js.map +1 -0
- package/dist/lib/curation/last-check.d.ts +32 -0
- package/dist/lib/curation/last-check.d.ts.map +1 -0
- package/dist/lib/curation/last-check.js +81 -0
- package/dist/lib/curation/last-check.js.map +1 -0
- package/dist/lib/curation/mark.d.ts +76 -0
- package/dist/lib/curation/mark.d.ts.map +1 -0
- package/dist/lib/curation/mark.js +361 -0
- package/dist/lib/curation/mark.js.map +1 -0
- package/dist/lib/curation/text.d.ts +6 -0
- package/dist/lib/curation/text.d.ts.map +1 -0
- package/dist/lib/curation/text.js +35 -0
- package/dist/lib/curation/text.js.map +1 -0
- package/dist/lib/destination-name.d.ts +24 -0
- package/dist/lib/destination-name.d.ts.map +1 -0
- package/dist/lib/destination-name.js +39 -0
- package/dist/lib/destination-name.js.map +1 -0
- package/dist/lib/destination-summary.d.ts +6 -0
- package/dist/lib/destination-summary.d.ts.map +1 -0
- package/dist/lib/destination-summary.js +27 -0
- package/dist/lib/destination-summary.js.map +1 -0
- package/dist/lib/destination-trust.d.ts +54 -0
- package/dist/lib/destination-trust.d.ts.map +1 -0
- package/dist/lib/destination-trust.js +107 -0
- package/dist/lib/destination-trust.js.map +1 -0
- package/dist/lib/env-resolver.d.ts.map +1 -1
- package/dist/lib/env-resolver.js +3 -0
- package/dist/lib/env-resolver.js.map +1 -1
- package/dist/lib/fatal.d.ts +11 -0
- package/dist/lib/fatal.d.ts.map +1 -0
- package/dist/lib/fatal.js +22 -0
- package/dist/lib/fatal.js.map +1 -0
- package/dist/lib/fetchers/capture.d.ts +49 -2
- package/dist/lib/fetchers/capture.d.ts.map +1 -1
- package/dist/lib/fetchers/capture.js +7 -1
- package/dist/lib/fetchers/capture.js.map +1 -1
- package/dist/lib/fetchers/confluence.d.ts +2 -2
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts +1 -0
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +3 -1
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts +44 -5
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +122 -5
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/gitlab.d.ts +2 -2
- package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
- package/dist/lib/fetchers/gitlab.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts +2 -2
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts +2 -2
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts +2 -2
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts +2 -3
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts +2 -2
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts +2 -2
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/gateway-client.d.ts +40 -14
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +47 -19
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/github-text.d.ts +3 -0
- package/dist/lib/github-text.d.ts.map +1 -0
- package/dist/lib/github-text.js +18 -0
- package/dist/lib/github-text.js.map +1 -0
- package/dist/lib/hook-context.d.ts +10 -0
- package/dist/lib/hook-context.d.ts.map +1 -1
- package/dist/lib/hook-context.js +14 -0
- package/dist/lib/hook-context.js.map +1 -1
- package/dist/lib/import-defaults.d.ts +39 -23
- package/dist/lib/import-defaults.d.ts.map +1 -1
- package/dist/lib/import-defaults.js +28 -26
- package/dist/lib/import-defaults.js.map +1 -1
- package/dist/lib/invite-prompt.d.ts +4 -4
- package/dist/lib/invite-prompt.d.ts.map +1 -1
- package/dist/lib/invite-prompt.js +4 -4
- package/dist/lib/invite-prompt.js.map +1 -1
- package/dist/lib/invite-settings.d.ts +18 -0
- package/dist/lib/invite-settings.d.ts.map +1 -0
- package/dist/lib/invite-settings.js +29 -0
- package/dist/lib/invite-settings.js.map +1 -0
- package/dist/lib/join-flow.d.ts +60 -0
- package/dist/lib/join-flow.d.ts.map +1 -0
- package/dist/lib/join-flow.js +282 -0
- package/dist/lib/join-flow.js.map +1 -0
- package/dist/lib/launch/adapters/aider.d.ts +17 -0
- package/dist/lib/launch/adapters/aider.d.ts.map +1 -0
- package/dist/lib/launch/adapters/aider.js +30 -0
- package/dist/lib/launch/adapters/aider.js.map +1 -0
- package/dist/lib/launch/adapters/auggie.d.ts +18 -0
- package/dist/lib/launch/adapters/auggie.d.ts.map +1 -0
- package/dist/lib/launch/adapters/auggie.js +34 -0
- package/dist/lib/launch/adapters/auggie.js.map +1 -0
- package/dist/lib/launch/adapters/cline.d.ts +10 -0
- package/dist/lib/launch/adapters/cline.d.ts.map +1 -0
- package/dist/lib/launch/adapters/cline.js +41 -0
- package/dist/lib/launch/adapters/cline.js.map +1 -0
- package/dist/lib/launch/adapters/continue.d.ts +22 -0
- package/dist/lib/launch/adapters/continue.d.ts.map +1 -0
- package/dist/lib/launch/adapters/continue.js +46 -0
- package/dist/lib/launch/adapters/continue.js.map +1 -0
- package/dist/lib/launch/adapters/gemini-cli.d.ts +13 -14
- package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -1
- package/dist/lib/launch/adapters/gemini-cli.js +38 -53
- package/dist/lib/launch/adapters/gemini-cli.js.map +1 -1
- package/dist/lib/launch/adapters/goose.d.ts +20 -0
- package/dist/lib/launch/adapters/goose.d.ts.map +1 -0
- package/dist/lib/launch/adapters/goose.js +47 -0
- package/dist/lib/launch/adapters/goose.js.map +1 -0
- package/dist/lib/launch/adapters/notes.d.ts +7 -0
- package/dist/lib/launch/adapters/notes.d.ts.map +1 -0
- package/dist/lib/launch/adapters/notes.js +5 -0
- package/dist/lib/launch/adapters/notes.js.map +1 -0
- package/dist/lib/launch/agents.d.ts +2 -0
- package/dist/lib/launch/agents.d.ts.map +1 -1
- package/dist/lib/launch/agents.js +3 -1
- package/dist/lib/launch/agents.js.map +1 -1
- package/dist/lib/launch/auggie-state.d.ts +25 -0
- package/dist/lib/launch/auggie-state.d.ts.map +1 -0
- package/dist/lib/launch/auggie-state.js +74 -0
- package/dist/lib/launch/auggie-state.js.map +1 -0
- package/dist/lib/launch/cline-state.d.ts +32 -0
- package/dist/lib/launch/cline-state.d.ts.map +1 -0
- package/dist/lib/launch/cline-state.js +108 -0
- package/dist/lib/launch/cline-state.js.map +1 -0
- package/dist/lib/launch/config-writes.d.ts +4 -0
- package/dist/lib/launch/config-writes.d.ts.map +1 -1
- package/dist/lib/launch/config-writes.js +8 -3
- package/dist/lib/launch/config-writes.js.map +1 -1
- package/dist/lib/launch/continue-state.d.ts +41 -0
- package/dist/lib/launch/continue-state.d.ts.map +1 -0
- package/dist/lib/launch/continue-state.js +142 -0
- package/dist/lib/launch/continue-state.js.map +1 -0
- package/dist/lib/launch/detect.d.ts.map +1 -1
- package/dist/lib/launch/detect.js +3 -1
- package/dist/lib/launch/detect.js.map +1 -1
- package/dist/lib/launch/gemini-state.d.ts +26 -20
- package/dist/lib/launch/gemini-state.d.ts.map +1 -1
- package/dist/lib/launch/gemini-state.js +95 -37
- package/dist/lib/launch/gemini-state.js.map +1 -1
- package/dist/lib/launch/gemini-system-file.d.ts +17 -0
- package/dist/lib/launch/gemini-system-file.d.ts.map +1 -0
- package/dist/lib/launch/gemini-system-file.js +55 -0
- package/dist/lib/launch/gemini-system-file.js.map +1 -0
- package/dist/lib/launch/gemini-trust.d.ts +3 -1
- package/dist/lib/launch/gemini-trust.d.ts.map +1 -1
- package/dist/lib/launch/gemini-trust.js +10 -3
- package/dist/lib/launch/gemini-trust.js.map +1 -1
- package/dist/lib/launch/goose-state.d.ts +53 -0
- package/dist/lib/launch/goose-state.d.ts.map +1 -0
- package/dist/lib/launch/goose-state.js +137 -0
- package/dist/lib/launch/goose-state.js.map +1 -0
- package/dist/lib/launch/launch-files.d.ts.map +1 -1
- package/dist/lib/launch/launch-files.js +3 -2
- package/dist/lib/launch/launch-files.js.map +1 -1
- package/dist/lib/launch/launch.d.ts +17 -2
- package/dist/lib/launch/launch.d.ts.map +1 -1
- package/dist/lib/launch/launch.js +36 -3
- package/dist/lib/launch/launch.js.map +1 -1
- package/dist/lib/launch/mcp-child-env.d.ts +30 -0
- package/dist/lib/launch/mcp-child-env.d.ts.map +1 -0
- package/dist/lib/launch/mcp-child-env.js +154 -0
- package/dist/lib/launch/mcp-child-env.js.map +1 -0
- package/dist/lib/launch/pick-agent.d.ts.map +1 -1
- package/dist/lib/launch/pick-agent.js +4 -4
- package/dist/lib/launch/pick-agent.js.map +1 -1
- package/dist/lib/launch/picker-options.d.ts.map +1 -1
- package/dist/lib/launch/picker-options.js +7 -2
- package/dist/lib/launch/picker-options.js.map +1 -1
- package/dist/lib/launch/registry/agents/aider.d.ts +3 -0
- package/dist/lib/launch/registry/agents/aider.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/aider.js +13 -0
- package/dist/lib/launch/registry/agents/aider.js.map +1 -0
- package/dist/lib/launch/registry/agents/auggie.d.ts +3 -0
- package/dist/lib/launch/registry/agents/auggie.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/auggie.js +11 -0
- package/dist/lib/launch/registry/agents/auggie.js.map +1 -0
- package/dist/lib/launch/registry/agents/cline.d.ts +3 -0
- package/dist/lib/launch/registry/agents/cline.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/cline.js +19 -0
- package/dist/lib/launch/registry/agents/cline.js.map +1 -0
- package/dist/lib/launch/registry/agents/continue.d.ts +3 -0
- package/dist/lib/launch/registry/agents/continue.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/continue.js +20 -0
- package/dist/lib/launch/registry/agents/continue.js.map +1 -0
- package/dist/lib/launch/registry/agents/gemini-cli.js +2 -2
- package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
- package/dist/lib/launch/registry/agents/goose.d.ts +3 -0
- package/dist/lib/launch/registry/agents/goose.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/goose.js +20 -0
- package/dist/lib/launch/registry/agents/goose.js.map +1 -0
- package/dist/lib/launch/registry/index.d.ts +1 -1
- package/dist/lib/launch/registry/index.d.ts.map +1 -1
- package/dist/lib/launch/registry/index.js +7 -2
- package/dist/lib/launch/registry/index.js.map +1 -1
- package/dist/lib/launch/registry/types.d.ts +12 -1
- package/dist/lib/launch/registry/types.d.ts.map +1 -1
- package/dist/lib/launch/strict-entry.d.ts +22 -2
- package/dist/lib/launch/strict-entry.d.ts.map +1 -1
- package/dist/lib/launch/strict-entry.js +80 -2
- package/dist/lib/launch/strict-entry.js.map +1 -1
- package/dist/lib/launch/yaml-scan.d.ts +59 -0
- package/dist/lib/launch/yaml-scan.d.ts.map +1 -0
- package/dist/lib/launch/yaml-scan.js +275 -0
- package/dist/lib/launch/yaml-scan.js.map +1 -0
- package/dist/lib/lead-prompt.d.ts +106 -0
- package/dist/lib/lead-prompt.d.ts.map +1 -0
- package/dist/lib/lead-prompt.js +175 -0
- package/dist/lib/lead-prompt.js.map +1 -0
- package/dist/lib/local-candidate-classify.d.ts +26 -0
- package/dist/lib/local-candidate-classify.d.ts.map +1 -0
- package/dist/lib/local-candidate-classify.js +53 -0
- package/dist/lib/local-candidate-classify.js.map +1 -0
- package/dist/lib/local-db-epoch.d.ts +4 -0
- package/dist/lib/local-db-epoch.d.ts.map +1 -0
- package/dist/lib/local-db-epoch.js +19 -0
- package/dist/lib/local-db-epoch.js.map +1 -0
- package/dist/lib/local-db-migrate.d.ts +85 -0
- package/dist/lib/local-db-migrate.d.ts.map +1 -0
- package/dist/lib/local-db-migrate.js +528 -0
- package/dist/lib/local-db-migrate.js.map +1 -0
- package/dist/lib/local-db-v10.d.ts +28 -0
- package/dist/lib/local-db-v10.d.ts.map +1 -0
- package/dist/lib/local-db-v10.js +49 -0
- package/dist/lib/local-db-v10.js.map +1 -0
- package/dist/lib/local-db-v11.d.ts +24 -0
- package/dist/lib/local-db-v11.d.ts.map +1 -0
- package/dist/lib/local-db-v11.js +25 -0
- package/dist/lib/local-db-v11.js.map +1 -0
- package/dist/lib/local-db-v12.d.ts +17 -0
- package/dist/lib/local-db-v12.d.ts.map +1 -0
- package/dist/lib/local-db-v12.js +8 -0
- package/dist/lib/local-db-v12.js.map +1 -0
- package/dist/lib/local-db-v7.d.ts +30 -0
- package/dist/lib/local-db-v7.d.ts.map +1 -0
- package/dist/lib/local-db-v7.js +285 -0
- package/dist/lib/local-db-v7.js.map +1 -0
- package/dist/lib/local-db-v8.d.ts +22 -0
- package/dist/lib/local-db-v8.d.ts.map +1 -0
- package/dist/lib/local-db-v8.js +33 -0
- package/dist/lib/local-db-v8.js.map +1 -0
- package/dist/lib/local-db-v9.d.ts +10 -0
- package/dist/lib/local-db-v9.d.ts.map +1 -0
- package/dist/lib/local-db-v9.js +8 -0
- package/dist/lib/local-db-v9.js.map +1 -0
- package/dist/lib/local-db.d.ts +73 -23
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +225 -375
- package/dist/lib/local-db.js.map +1 -1
- package/dist/lib/local-embeddings.d.ts.map +1 -1
- package/dist/lib/local-embeddings.js +2 -2
- package/dist/lib/local-embeddings.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts +31 -87
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +209 -187
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-ingest.d.ts +131 -0
- package/dist/lib/local-ingest.d.ts.map +1 -0
- package/dist/lib/local-ingest.js +81 -0
- package/dist/lib/local-ingest.js.map +1 -0
- package/dist/lib/local-link-pass.d.ts +15 -0
- package/dist/lib/local-link-pass.d.ts.map +1 -0
- package/dist/lib/local-link-pass.js +57 -0
- package/dist/lib/local-link-pass.js.map +1 -0
- package/dist/lib/local-llm.d.ts +1 -1
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +3 -2
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/local-mode.d.ts +9 -2
- package/dist/lib/local-mode.d.ts.map +1 -1
- package/dist/lib/local-mode.js +27 -7
- package/dist/lib/local-mode.js.map +1 -1
- package/dist/lib/local-provenance.d.ts +14 -0
- package/dist/lib/local-provenance.d.ts.map +1 -0
- package/dist/lib/local-provenance.js +14 -0
- package/dist/lib/local-provenance.js.map +1 -0
- package/dist/lib/local-relationship-classifier.d.ts +4 -0
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -1
- package/dist/lib/local-relationship-classifier.js +9 -4
- package/dist/lib/local-relationship-classifier.js.map +1 -1
- package/dist/lib/local-relink.d.ts +59 -0
- package/dist/lib/local-relink.d.ts.map +1 -0
- package/dist/lib/local-relink.js +171 -0
- package/dist/lib/local-relink.js.map +1 -0
- package/dist/lib/local-set-classifier.d.ts +36 -0
- package/dist/lib/local-set-classifier.d.ts.map +1 -0
- package/dist/lib/local-set-classifier.js +81 -0
- package/dist/lib/local-set-classifier.js.map +1 -0
- package/dist/lib/local-snapshot-loader.d.ts +29 -0
- package/dist/lib/local-snapshot-loader.d.ts.map +1 -0
- package/dist/lib/local-snapshot-loader.js +108 -0
- package/dist/lib/local-snapshot-loader.js.map +1 -0
- package/dist/lib/local-thresholds.d.ts +70 -0
- package/dist/lib/local-thresholds.d.ts.map +1 -0
- package/dist/lib/local-thresholds.js +79 -0
- package/dist/lib/local-thresholds.js.map +1 -0
- package/dist/lib/login-flow.d.ts +15 -0
- package/dist/lib/login-flow.d.ts.map +1 -1
- package/dist/lib/login-flow.js +80 -4
- package/dist/lib/login-flow.js.map +1 -1
- package/dist/lib/mcp/mark-tool.d.ts +27 -0
- package/dist/lib/mcp/mark-tool.d.ts.map +1 -0
- package/dist/lib/mcp/mark-tool.js +103 -0
- package/dist/lib/mcp/mark-tool.js.map +1 -0
- package/dist/lib/mcp/share-status-tool.d.ts +13 -0
- package/dist/lib/mcp/share-status-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-status-tool.js +116 -0
- package/dist/lib/mcp/share-status-tool.js.map +1 -0
- package/dist/lib/mcp/share-tool.d.ts +50 -0
- package/dist/lib/mcp/share-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-tool.js +174 -0
- package/dist/lib/mcp/share-tool.js.map +1 -0
- package/dist/lib/mcp/tool-rules.d.ts +30 -0
- package/dist/lib/mcp/tool-rules.d.ts.map +1 -0
- package/dist/lib/mcp/tool-rules.js +84 -0
- package/dist/lib/mcp/tool-rules.js.map +1 -0
- package/dist/lib/mcp-backfill.d.ts +89 -0
- package/dist/lib/mcp-backfill.d.ts.map +1 -0
- package/dist/lib/mcp-backfill.js +194 -0
- package/dist/lib/mcp-backfill.js.map +1 -0
- package/dist/lib/mcp-scope.d.ts +90 -0
- package/dist/lib/mcp-scope.d.ts.map +1 -0
- package/dist/lib/mcp-scope.js +125 -0
- package/dist/lib/mcp-scope.js.map +1 -0
- package/dist/lib/mcp-sync.d.ts +64 -0
- package/dist/lib/mcp-sync.d.ts.map +1 -0
- package/dist/lib/mcp-sync.js +183 -0
- package/dist/lib/mcp-sync.js.map +1 -0
- package/dist/lib/model-cache.d.ts +10 -0
- package/dist/lib/model-cache.d.ts.map +1 -0
- package/dist/lib/model-cache.js +35 -0
- package/dist/lib/model-cache.js.map +1 -0
- package/dist/lib/next-step.d.ts.map +1 -1
- package/dist/lib/next-step.js +2 -1
- package/dist/lib/next-step.js.map +1 -1
- package/dist/lib/personal-import.d.ts +7 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +13 -1
- package/dist/lib/personal-import.js.map +1 -1
- package/dist/lib/private-files.d.ts +33 -0
- package/dist/lib/private-files.d.ts.map +1 -0
- package/dist/lib/private-files.js +96 -0
- package/dist/lib/private-files.js.map +1 -0
- package/dist/lib/redaction-notice.d.ts +7 -0
- package/dist/lib/redaction-notice.d.ts.map +1 -0
- package/dist/lib/redaction-notice.js +32 -0
- package/dist/lib/redaction-notice.js.map +1 -0
- package/dist/lib/relink-estimate.d.ts +16 -0
- package/dist/lib/relink-estimate.d.ts.map +1 -0
- package/dist/lib/relink-estimate.js +30 -0
- package/dist/lib/relink-estimate.js.map +1 -0
- package/dist/lib/resolve-env.d.ts +15 -1
- package/dist/lib/resolve-env.d.ts.map +1 -1
- package/dist/lib/resolve-env.js +27 -7
- package/dist/lib/resolve-env.js.map +1 -1
- package/dist/lib/safe-config-write.d.ts.map +1 -1
- package/dist/lib/safe-config-write.js +39 -2
- package/dist/lib/safe-config-write.js.map +1 -1
- package/dist/lib/scope-choices.d.ts +51 -0
- package/dist/lib/scope-choices.d.ts.map +1 -0
- package/dist/lib/scope-choices.js +193 -0
- package/dist/lib/scope-choices.js.map +1 -0
- package/dist/lib/scope-connect.d.ts +82 -0
- package/dist/lib/scope-connect.d.ts.map +1 -0
- package/dist/lib/scope-connect.js +258 -0
- package/dist/lib/scope-connect.js.map +1 -0
- package/dist/lib/scope-defaults.d.ts +3 -0
- package/dist/lib/scope-defaults.d.ts.map +1 -0
- package/dist/lib/scope-defaults.js +44 -0
- package/dist/lib/scope-defaults.js.map +1 -0
- package/dist/lib/scope-real.d.ts +280 -0
- package/dist/lib/scope-real.d.ts.map +1 -0
- package/dist/lib/scope-real.js +58 -0
- package/dist/lib/scope-real.js.map +1 -0
- package/dist/lib/scope-values.d.ts +76 -0
- package/dist/lib/scope-values.d.ts.map +1 -0
- package/dist/lib/scope-values.js +169 -0
- package/dist/lib/scope-values.js.map +1 -0
- package/dist/lib/scope.d.ts +161 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +323 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/setup-route.d.ts +4 -2
- package/dist/lib/setup-route.d.ts.map +1 -1
- package/dist/lib/setup-route.js +12 -6
- package/dist/lib/setup-route.js.map +1 -1
- package/dist/lib/share/approval.d.ts +71 -0
- package/dist/lib/share/approval.d.ts.map +1 -0
- package/dist/lib/share/approval.js +139 -0
- package/dist/lib/share/approval.js.map +1 -0
- package/dist/lib/share/approve-link.d.ts +31 -0
- package/dist/lib/share/approve-link.d.ts.map +1 -0
- package/dist/lib/share/approve-link.js +46 -0
- package/dist/lib/share/approve-link.js.map +1 -0
- package/dist/lib/share/browser-flow.d.ts +85 -0
- package/dist/lib/share/browser-flow.d.ts.map +1 -0
- package/dist/lib/share/browser-flow.js +168 -0
- package/dist/lib/share/browser-flow.js.map +1 -0
- package/dist/lib/share/command.d.ts +65 -0
- package/dist/lib/share/command.d.ts.map +1 -0
- package/dist/lib/share/command.js +278 -0
- package/dist/lib/share/command.js.map +1 -0
- package/dist/lib/share/delivery-options.d.ts +15 -0
- package/dist/lib/share/delivery-options.d.ts.map +1 -0
- package/dist/lib/share/delivery-options.js +16 -0
- package/dist/lib/share/delivery-options.js.map +1 -0
- package/dist/lib/share/delivery.d.ts +83 -0
- package/dist/lib/share/delivery.d.ts.map +1 -0
- package/dist/lib/share/delivery.js +134 -0
- package/dist/lib/share/delivery.js.map +1 -0
- package/dist/lib/share/envelope.d.ts +61 -0
- package/dist/lib/share/envelope.d.ts.map +1 -0
- package/dist/lib/share/envelope.js +99 -0
- package/dist/lib/share/envelope.js.map +1 -0
- package/dist/lib/share/ledger.d.ts +59 -0
- package/dist/lib/share/ledger.d.ts.map +1 -0
- package/dist/lib/share/ledger.js +137 -0
- package/dist/lib/share/ledger.js.map +1 -0
- package/dist/lib/share/payload.d.ts +101 -0
- package/dist/lib/share/payload.d.ts.map +1 -0
- package/dist/lib/share/payload.js +147 -0
- package/dist/lib/share/payload.js.map +1 -0
- package/dist/lib/share/pending.d.ts +94 -0
- package/dist/lib/share/pending.d.ts.map +1 -0
- package/dist/lib/share/pending.js +256 -0
- package/dist/lib/share/pending.js.map +1 -0
- package/dist/lib/share/preview.d.ts +22 -0
- package/dist/lib/share/preview.d.ts.map +1 -0
- package/dist/lib/share/preview.js +74 -0
- package/dist/lib/share/preview.js.map +1 -0
- package/dist/lib/share/qr.d.ts +13 -0
- package/dist/lib/share/qr.d.ts.map +1 -0
- package/dist/lib/share/qr.js +77 -0
- package/dist/lib/share/qr.js.map +1 -0
- package/dist/lib/share/requests-client.d.ts +63 -0
- package/dist/lib/share/requests-client.d.ts.map +1 -0
- package/dist/lib/share/requests-client.js +69 -0
- package/dist/lib/share/requests-client.js.map +1 -0
- package/dist/lib/share/run.d.ts +134 -0
- package/dist/lib/share/run.d.ts.map +1 -0
- package/dist/lib/share/run.js +278 -0
- package/dist/lib/share/run.js.map +1 -0
- package/dist/lib/share/salt.d.ts +2 -0
- package/dist/lib/share/salt.d.ts.map +1 -0
- package/dist/lib/share/salt.js +44 -0
- package/dist/lib/share/salt.js.map +1 -0
- package/dist/lib/share/secret-patterns.json +100 -0
- package/dist/lib/share/secret-scan.d.ts +24 -0
- package/dist/lib/share/secret-scan.d.ts.map +1 -0
- package/dist/lib/share/secret-scan.js +116 -0
- package/dist/lib/share/secret-scan.js.map +1 -0
- package/dist/lib/share/target.d.ts +38 -0
- package/dist/lib/share/target.d.ts.map +1 -0
- package/dist/lib/share/target.js +80 -0
- package/dist/lib/share/target.js.map +1 -0
- package/dist/lib/share/tty.d.ts +12 -0
- package/dist/lib/share/tty.d.ts.map +1 -0
- package/dist/lib/share/tty.js +102 -0
- package/dist/lib/share/tty.js.map +1 -0
- package/dist/lib/share/visible.d.ts +4 -0
- package/dist/lib/share/visible.d.ts.map +1 -0
- package/dist/lib/share/visible.js +30 -0
- package/dist/lib/share/visible.js.map +1 -0
- package/dist/lib/share/wire.d.ts +98 -0
- package/dist/lib/share/wire.d.ts.map +1 -0
- package/dist/lib/share/wire.js +43 -0
- package/dist/lib/share/wire.js.map +1 -0
- package/dist/lib/similarity/embedding-matrix.d.ts +64 -0
- package/dist/lib/similarity/embedding-matrix.d.ts.map +1 -0
- package/dist/lib/similarity/embedding-matrix.js +119 -0
- package/dist/lib/similarity/embedding-matrix.js.map +1 -0
- package/dist/lib/since-flag.d.ts +11 -0
- package/dist/lib/since-flag.d.ts.map +1 -0
- package/dist/lib/since-flag.js +24 -0
- package/dist/lib/since-flag.js.map +1 -0
- package/dist/lib/since.d.ts +59 -0
- package/dist/lib/since.d.ts.map +1 -0
- package/dist/lib/since.js +86 -0
- package/dist/lib/since.js.map +1 -0
- package/dist/lib/source-key.d.ts +13 -0
- package/dist/lib/source-key.d.ts.map +1 -0
- package/dist/lib/source-key.js +60 -0
- package/dist/lib/source-key.js.map +1 -0
- package/dist/lib/source-sync-state.d.ts +12 -0
- package/dist/lib/source-sync-state.d.ts.map +1 -0
- package/dist/lib/source-sync-state.js +45 -0
- package/dist/lib/source-sync-state.js.map +1 -0
- package/dist/lib/startup-backfill-track.d.ts +2 -0
- package/dist/lib/startup-backfill-track.d.ts.map +1 -0
- package/dist/lib/startup-backfill-track.js +6 -0
- package/dist/lib/startup-backfill-track.js.map +1 -0
- package/dist/lib/startup-xdg.d.ts +2 -0
- package/dist/lib/startup-xdg.d.ts.map +1 -0
- package/dist/lib/startup-xdg.js +9 -0
- package/dist/lib/startup-xdg.js.map +1 -0
- package/dist/lib/sync/after-connect.d.ts +2 -0
- package/dist/lib/sync/after-connect.d.ts.map +1 -0
- package/dist/lib/sync/after-connect.js +18 -0
- package/dist/lib/sync/after-connect.js.map +1 -0
- package/dist/lib/sync/bg-claim.d.ts +14 -0
- package/dist/lib/sync/bg-claim.d.ts.map +1 -0
- package/dist/lib/sync/bg-claim.js +97 -0
- package/dist/lib/sync/bg-claim.js.map +1 -0
- package/dist/lib/sync/blocked.d.ts +8 -0
- package/dist/lib/sync/blocked.d.ts.map +1 -0
- package/dist/lib/sync/blocked.js +45 -0
- package/dist/lib/sync/blocked.js.map +1 -0
- package/dist/lib/sync/classify.d.ts +34 -0
- package/dist/lib/sync/classify.d.ts.map +1 -0
- package/dist/lib/sync/classify.js +93 -0
- package/dist/lib/sync/classify.js.map +1 -0
- package/dist/lib/sync/drain.d.ts +16 -0
- package/dist/lib/sync/drain.d.ts.map +1 -0
- package/dist/lib/sync/drain.js +33 -0
- package/dist/lib/sync/drain.js.map +1 -0
- package/dist/lib/sync/forget.d.ts +12 -0
- package/dist/lib/sync/forget.d.ts.map +1 -0
- package/dist/lib/sync/forget.js +32 -0
- package/dist/lib/sync/forget.js.map +1 -0
- package/dist/lib/sync/launch-hook.d.ts +42 -0
- package/dist/lib/sync/launch-hook.d.ts.map +1 -0
- package/dist/lib/sync/launch-hook.js +117 -0
- package/dist/lib/sync/launch-hook.js.map +1 -0
- package/dist/lib/sync/lock.d.ts +35 -0
- package/dist/lib/sync/lock.d.ts.map +1 -0
- package/dist/lib/sync/lock.js +175 -0
- package/dist/lib/sync/lock.js.map +1 -0
- package/dist/lib/sync/purge.d.ts +38 -0
- package/dist/lib/sync/purge.d.ts.map +1 -0
- package/dist/lib/sync/purge.js +61 -0
- package/dist/lib/sync/purge.js.map +1 -0
- package/dist/lib/sync/real-env.d.ts +265 -0
- package/dist/lib/sync/real-env.d.ts.map +1 -0
- package/dist/lib/sync/real-env.js +47 -0
- package/dist/lib/sync/real-env.js.map +1 -0
- package/dist/lib/sync/relink.d.ts +14 -0
- package/dist/lib/sync/relink.d.ts.map +1 -0
- package/dist/lib/sync/relink.js +36 -0
- package/dist/lib/sync/relink.js.map +1 -0
- package/dist/lib/sync/report.d.ts +3 -0
- package/dist/lib/sync/report.d.ts.map +1 -0
- package/dist/lib/sync/report.js +54 -0
- package/dist/lib/sync/report.js.map +1 -0
- package/dist/lib/sync/run-all.d.ts +23 -0
- package/dist/lib/sync/run-all.d.ts.map +1 -0
- package/dist/lib/sync/run-all.js +30 -0
- package/dist/lib/sync/run-all.js.map +1 -0
- package/dist/lib/sync/run-source.d.ts +73 -0
- package/dist/lib/sync/run-source.d.ts.map +1 -0
- package/dist/lib/sync/run-source.js +262 -0
- package/dist/lib/sync/run-source.js.map +1 -0
- package/dist/lib/sync/safe-read.d.ts +4 -0
- package/dist/lib/sync/safe-read.d.ts.map +1 -0
- package/dist/lib/sync/safe-read.js +40 -0
- package/dist/lib/sync/safe-read.js.map +1 -0
- package/dist/lib/sync/should-background-sync.d.ts +31 -0
- package/dist/lib/sync/should-background-sync.d.ts.map +1 -0
- package/dist/lib/sync/should-background-sync.js +69 -0
- package/dist/lib/sync/should-background-sync.js.map +1 -0
- package/dist/lib/sync/source-ids.d.ts +10 -0
- package/dist/lib/sync/source-ids.d.ts.map +1 -0
- package/dist/lib/sync/source-ids.js +9 -0
- package/dist/lib/sync/source-ids.js.map +1 -0
- package/dist/lib/sync/sources.d.ts +33 -0
- package/dist/lib/sync/sources.d.ts.map +1 -0
- package/dist/lib/sync/sources.js +37 -0
- package/dist/lib/sync/sources.js.map +1 -0
- package/dist/lib/sync/spawn-background.d.ts +27 -0
- package/dist/lib/sync/spawn-background.d.ts.map +1 -0
- package/dist/lib/sync/spawn-background.js +66 -0
- package/dist/lib/sync/spawn-background.js.map +1 -0
- package/dist/lib/sync/status.d.ts +57 -0
- package/dist/lib/sync/status.d.ts.map +1 -0
- package/dist/lib/sync/status.js +166 -0
- package/dist/lib/sync/status.js.map +1 -0
- package/dist/lib/sync/summary-read.d.ts +19 -0
- package/dist/lib/sync/summary-read.d.ts.map +1 -0
- package/dist/lib/sync/summary-read.js +39 -0
- package/dist/lib/sync/summary-read.js.map +1 -0
- package/dist/lib/sync/summary.d.ts +10 -0
- package/dist/lib/sync/summary.d.ts.map +1 -0
- package/dist/lib/sync/summary.js +80 -0
- package/dist/lib/sync/summary.js.map +1 -0
- package/dist/lib/sync/sync-state.d.ts +128 -0
- package/dist/lib/sync/sync-state.d.ts.map +1 -0
- package/dist/lib/sync/sync-state.js +255 -0
- package/dist/lib/sync/sync-state.js.map +1 -0
- package/dist/lib/sync/telemetry.d.ts +20 -0
- package/dist/lib/sync/telemetry.d.ts.map +1 -0
- package/dist/lib/sync/telemetry.js +31 -0
- package/dist/lib/sync/telemetry.js.map +1 -0
- package/dist/lib/sync/threads.d.ts +48 -0
- package/dist/lib/sync/threads.d.ts.map +1 -0
- package/dist/lib/sync/threads.js +82 -0
- package/dist/lib/sync/threads.js.map +1 -0
- package/dist/lib/sync/window.d.ts +72 -0
- package/dist/lib/sync/window.d.ts.map +1 -0
- package/dist/lib/sync/window.js +112 -0
- package/dist/lib/sync/window.js.map +1 -0
- package/dist/lib/team-cta.d.ts +11 -0
- package/dist/lib/team-cta.d.ts.map +1 -0
- package/dist/lib/team-cta.js +16 -0
- package/dist/lib/team-cta.js.map +1 -0
- package/dist/lib/telemetry-ci.d.ts +2 -0
- package/dist/lib/telemetry-ci.d.ts.map +1 -0
- package/dist/lib/telemetry-ci.js +21 -0
- package/dist/lib/telemetry-ci.js.map +1 -0
- package/dist/lib/telemetry-consent.d.ts +44 -23
- package/dist/lib/telemetry-consent.d.ts.map +1 -1
- package/dist/lib/telemetry-consent.js +74 -35
- package/dist/lib/telemetry-consent.js.map +1 -1
- package/dist/lib/telemetry-env.d.ts +1 -1
- package/dist/lib/usage-telemetry.d.ts +89 -24
- package/dist/lib/usage-telemetry.d.ts.map +1 -1
- package/dist/lib/usage-telemetry.js +283 -76
- package/dist/lib/usage-telemetry.js.map +1 -1
- package/dist/lib/xdg.d.ts +27 -0
- package/dist/lib/xdg.d.ts.map +1 -0
- package/dist/lib/xdg.js +56 -0
- package/dist/lib/xdg.js.map +1 -0
- package/package.json +6 -3
- package/dist/commands/push.d.ts +0 -25
- package/dist/commands/push.d.ts.map +0 -1
- package/dist/commands/push.js +0 -98
- package/dist/commands/push.js.map +0 -1
- package/dist/lib/personal-email-domains.d.ts +0 -8
- package/dist/lib/personal-email-domains.d.ts.map +0 -1
- package/dist/lib/personal-email-domains.js +0 -39
- package/dist/lib/personal-email-domains.js.map +0 -1
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: `align share` as a function of injected dependencies, returning an exit code. The commander
|
|
3
|
+
* wrapper (commands/share.ts) wires the real config, gateway client and prompts; tests wire fakes.
|
|
4
|
+
*
|
|
5
|
+
* Who may complete a share depends on what the gateway says (GET /share-requests/config, ALI-1540):
|
|
6
|
+
*
|
|
7
|
+
* - `required`, or `available` without `--typed`: the person approves in a BROWSER session. This process stages
|
|
8
|
+
* an encrypted request, prints a link and a code, waits, and sends only what the gateway says was approved.
|
|
9
|
+
* It never prompts on a terminal and never calls shareBatch. It may run inside an agent (ALIGN_WRAPPED): an
|
|
10
|
+
* agent can ask, and its own CLI token cannot approve, because the approve route refuses it. A browser session can (SECURITY.md lists how an agent may get one), so this is not a lock.
|
|
11
|
+
* - `off`, a gateway with no such route (404), or `available` with `--typed`: today's flow. EVERY path (a plain
|
|
12
|
+
* `align share` and `align share --confirm <code>`) shows the preview on the CONTROLLING terminal and needs a
|
|
13
|
+
* typed yes there (default No). There is no `--yes`: a flag is exactly what an agent would pass. A caller with
|
|
14
|
+
* no controlling terminal, or inside an agent align launched, is refused. The known gap (an agent that
|
|
15
|
+
* allocates its own pseudo-terminal) is stated in SECURITY.md. `required` never reaches this branch.
|
|
16
|
+
*/
|
|
17
|
+
import { visible } from './visible.js';
|
|
18
|
+
import { teamCtaLine } from '../team-cta.js';
|
|
19
|
+
import { runBrowserShare } from './browser-flow.js';
|
|
20
|
+
import { presentLink } from './delivery.js';
|
|
21
|
+
import { approveUrl } from './approval.js';
|
|
22
|
+
import { combinedHash, consumeCode, loadRequest, lookupCode, sweepPending } from './pending.js';
|
|
23
|
+
import { isAlignHost } from '../destination-trust.js';
|
|
24
|
+
import { resolveApprovalAppUrl } from './target.js';
|
|
25
|
+
import { prepare, ratifiedRows, renderResults, renderTeamText, retract, secretRefusal, send, ShareError } from './run.js';
|
|
26
|
+
const WRAPPED = 'align share needs you to type your answer at a terminal, and this run is inside an agent that align launched, so it cannot ask you. Open a normal terminal of your own and run it there. Nothing was sent.';
|
|
27
|
+
const WRAPPED_FOREIGN = 'This destination is not an Align address, so a share to it needs your own answer typed at a terminal here, and this is run from inside an agent that align launched. Open a normal terminal of your own and run it there. Nothing was sent.';
|
|
28
|
+
const hostOf = (url) => { try {
|
|
29
|
+
return new URL(url).host;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return '';
|
|
33
|
+
} };
|
|
34
|
+
const NO_TERMINAL = 'Confirm this in your own terminal. There is no interactive terminal here (an agent shell, a pipe and a hook have none). Nothing was sent.';
|
|
35
|
+
export async function runShare(opts, deps) {
|
|
36
|
+
// Every line this prints can carry text a stranger wrote (a remote id, a tenant name, a server error, a
|
|
37
|
+
// pending file's env). visible() is idempotent, so lines that were already escaped pass through unchanged.
|
|
38
|
+
const out = (l) => deps.out(visible(l, { keepNewline: true }));
|
|
39
|
+
const err = (l) => deps.err(visible(l, { keepNewline: true }));
|
|
40
|
+
if (deps.cloudEnv.mode === 'demo') {
|
|
41
|
+
err('align share needs a team account, and this environment is in demo mode. Run: align login');
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
if (deps.cloudEnv.mode === 'local-embedded' || !deps.cloudEnv.authToken) {
|
|
45
|
+
err(`align share sends decisions from your local graph to your team's.\n ${teamCtaLine()}\n Already have a team? Run: align login`);
|
|
46
|
+
try {
|
|
47
|
+
await deps.leadPrompt?.();
|
|
48
|
+
}
|
|
49
|
+
catch { /* an optional prompt never changes what the person sees from the command */ }
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
// A gateway that is not Align's is not an independent approver: its own web page "approving" proves nothing about the person.
|
|
53
|
+
// So a share to one needs the person at a terminal, in either mode, and an agent is refused before any request goes out.
|
|
54
|
+
// --open is refused too: an agent re-opening an approval link for a foreign gateway is the same hole.
|
|
55
|
+
const foreignGateway = !isAlignHost(hostOf(deps.cloudEnv.gatewayUrl));
|
|
56
|
+
if (foreignGateway && deps.wrapped) {
|
|
57
|
+
err(WRAPPED_FOREIGN);
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
if (opts.openRequest !== undefined)
|
|
61
|
+
return await reopenRequest(opts, deps, out, err);
|
|
62
|
+
if (!deps.localDbPath) {
|
|
63
|
+
err('There is no local graph on this machine to share from. `align setup --local` creates one.');
|
|
64
|
+
return 1;
|
|
65
|
+
}
|
|
66
|
+
const dbPath = deps.localDbPath;
|
|
67
|
+
sweepPending(); // codes are 10 minutes; a file a day old is leftover
|
|
68
|
+
const ctx = async () => ({ dbPath, envName: opts.envName, client: deps.client(), judge: await deps.judge(), salt: deps.salt, gatewayUrl: deps.cloudEnv.gatewayUrl, defaultGatewayUrl: deps.defaultGatewayUrl });
|
|
69
|
+
try {
|
|
70
|
+
if (opts.retract !== undefined) {
|
|
71
|
+
if (deps.wrapped) {
|
|
72
|
+
err(WRAPPED);
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
const r = await retract(await ctx(), opts.retract);
|
|
76
|
+
(r.ok ? out : err)(r.message);
|
|
77
|
+
return r.ok ? 0 : 1;
|
|
78
|
+
}
|
|
79
|
+
// Who approves is the gateway's call. A 404 is an older gateway (the typed flow); any other failure stops here
|
|
80
|
+
// and does NOT fall back, so a broken answer can never loosen the rule.
|
|
81
|
+
const cfg = await deps.client().shareRequestsConfig();
|
|
82
|
+
const mode = cfg?.mode ?? 'off';
|
|
83
|
+
if (mode === 'required' && (opts.typed || opts.confirm !== undefined)) {
|
|
84
|
+
err('This workspace requires approval in your browser, so --typed and --confirm are not accepted. Run: align share <id>. Nothing was sent.');
|
|
85
|
+
return 1;
|
|
86
|
+
}
|
|
87
|
+
const browser = mode === 'required' || (mode === 'available' && !opts.typed);
|
|
88
|
+
if (browser && opts.confirm !== undefined) {
|
|
89
|
+
err('Shares are approved in your browser on this gateway, so a confirmation code does not apply. Run: align share <id>. (Or add --typed to answer at this terminal.) Nothing was sent.');
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
if (!browser && deps.wrapped) {
|
|
93
|
+
err(WRAPPED);
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
// Where the approval link opens is settled before anything is prepared or staged: the link carries the share's key.
|
|
97
|
+
const appChoice = browser ? resolveApprovalAppUrl({ stored: deps.teamAppUrl ?? null, cfgAppUrl: cfg?.appUrl ?? null, guessed: deps.approval.appUrl }) : null;
|
|
98
|
+
if (appChoice && !appChoice.ok) {
|
|
99
|
+
err(appChoice.message);
|
|
100
|
+
return 1;
|
|
101
|
+
}
|
|
102
|
+
// No silent downgrade: when the typed flow runs because the gateway has no browser approval, say so.
|
|
103
|
+
if (!browser && !opts.typed)
|
|
104
|
+
out(cfg === null ? 'This gateway does not offer browser approval (it has no such route), so this uses the typed answer at your terminal.' : 'This gateway has browser approval turned off, so this uses the typed answer at your terminal.');
|
|
105
|
+
let ids = opts.ids;
|
|
106
|
+
let pendingCode;
|
|
107
|
+
if (opts.confirm !== undefined) {
|
|
108
|
+
const found = lookupCode(opts.confirm);
|
|
109
|
+
if (!found.ok) {
|
|
110
|
+
err(found.reason === 'expired' ? 'That confirmation code has expired. Ask your agent to start the share again.' : 'That confirmation code is not valid (unknown, malformed or already used). Nothing was sent.');
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
if (found.pending.envName !== opts.envName) {
|
|
114
|
+
err(`That code was issued for ${found.pending.envName}, not ${opts.envName}. Nothing was sent.`);
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
ids = found.pending.localIds;
|
|
118
|
+
pendingCode = opts.confirm;
|
|
119
|
+
}
|
|
120
|
+
else if (ids.length === 0) {
|
|
121
|
+
if (!opts.allRatified && opts.sinceIso === undefined) {
|
|
122
|
+
err('Name what to share: align share <id> [<id>...], or --all-ratified, or --since <30d|2w|6m>.');
|
|
123
|
+
return 2;
|
|
124
|
+
}
|
|
125
|
+
ids = ratifiedRows(dbPath, { owner: await deps.owner(), sinceIso: opts.sinceIso }).map((r) => r.id);
|
|
126
|
+
if (ids.length === 0) {
|
|
127
|
+
out('Nothing to share: you have no ratified decisions in that range.');
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const c = await ctx();
|
|
132
|
+
const prep = await prepare(c, ids);
|
|
133
|
+
if (prep.secrets.length) {
|
|
134
|
+
err(secretRefusal(prep.secrets));
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
for (const a of prep.already)
|
|
138
|
+
out(`Already shared as ${visible(a.remoteId)}: ${visible(a.title)}`);
|
|
139
|
+
if (prep.payloads.length === 0)
|
|
140
|
+
return 0;
|
|
141
|
+
if (browser) {
|
|
142
|
+
if (foreignGateway) {
|
|
143
|
+
const yes = await deps.ttyConfirm(prep.preview, `Share ${prep.payloads.length} decision${prep.payloads.length === 1 ? '' : 's'} with ${visible(prep.dest.workspace)} at ${visible(prep.dest.gatewayHost)}?`);
|
|
144
|
+
if (yes === null) {
|
|
145
|
+
err(NO_TERMINAL);
|
|
146
|
+
return 1;
|
|
147
|
+
}
|
|
148
|
+
if (!yes) {
|
|
149
|
+
out('Nothing was sent.');
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
out(prep.preview);
|
|
155
|
+
}
|
|
156
|
+
const { guard, ...rest } = deps.approval;
|
|
157
|
+
const maxWaitMs = ((cfg?.pendingTtlS ?? 900) + (cfg?.completeTtlS ?? 600)) * 1000;
|
|
158
|
+
return await (guard ?? ((run) => run(undefined)))((signal) => runBrowserShare(c, prep, { ...rest, appUrl: appChoice?.ok ? appChoice.appUrl : rest.appUrl, raw: deps.out, signal, maxWaitMs, client: c.client, out, err, ...(deps.wrapped ? { agent: 'wrapped' } : {}) }));
|
|
159
|
+
}
|
|
160
|
+
if (pendingCode !== undefined) {
|
|
161
|
+
const found = lookupCode(pendingCode);
|
|
162
|
+
if (!found.ok) {
|
|
163
|
+
err('That confirmation code is no longer valid. Nothing was sent.');
|
|
164
|
+
return 1;
|
|
165
|
+
}
|
|
166
|
+
if (found.pending.hash !== combinedHash(prep.payloads, prep)) {
|
|
167
|
+
err('What would be shared, or where it would go (the workspace or the gateway), has changed since your agent previewed it. Nothing was sent. Ask your agent to start again.');
|
|
168
|
+
return 1;
|
|
169
|
+
}
|
|
170
|
+
const yes = await deps.ttyConfirm(prep.preview, `Share ${prep.payloads.length} decision${prep.payloads.length === 1 ? '' : 's'} with ${visible(prep.dest.workspace)}?`);
|
|
171
|
+
if (yes === null) {
|
|
172
|
+
err(NO_TERMINAL);
|
|
173
|
+
return 1;
|
|
174
|
+
}
|
|
175
|
+
if (!yes) {
|
|
176
|
+
out('Nothing was sent.');
|
|
177
|
+
return 0;
|
|
178
|
+
}
|
|
179
|
+
if (!consumeCode(pendingCode)) {
|
|
180
|
+
err('That code was already used. Nothing was sent.');
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const yes = await deps.ttyConfirm(prep.preview, `Share ${prep.payloads.length} decision${prep.payloads.length === 1 ? '' : 's'} with ${visible(prep.dest.workspace)}?`);
|
|
186
|
+
if (yes === null) {
|
|
187
|
+
err(NO_TERMINAL);
|
|
188
|
+
return 1;
|
|
189
|
+
}
|
|
190
|
+
if (!yes) {
|
|
191
|
+
out('Nothing was sent.');
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const results = await send(c, prep, {
|
|
196
|
+
confirmTeamText: async (i) => {
|
|
197
|
+
const shown = `"${visible(i.title)}" is already on your team graph, as:\n${renderTeamText(i.team)}\nYour ratification would put your name on THAT text, not on yours.`;
|
|
198
|
+
return (await deps.ttyConfirm(shown, 'Do you stand behind the team\'s text?')) === true;
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
out(`\n${renderResults(results)}`);
|
|
202
|
+
const failed = results.some((r) => r.outcome.kind === 'refused' || r.outcome.kind === 'unknown');
|
|
203
|
+
return failed ? 1 : 0;
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
if (e instanceof ShareError) {
|
|
207
|
+
err(e.message);
|
|
208
|
+
return e.exitCode;
|
|
209
|
+
}
|
|
210
|
+
err(e.message);
|
|
211
|
+
return 1;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* `align share --open <id>`. The key for an agent-staged request rests in one place, the 0600 pending file on the machine
|
|
216
|
+
* that staged it, so this works there and nowhere else. Every refusal below prints no key. It only shows the link again: the
|
|
217
|
+
* person approves in the browser, and the agent's own status call finishes the share.
|
|
218
|
+
*/
|
|
219
|
+
async function reopenRequest(opts, deps, out, err) {
|
|
220
|
+
sweepPending();
|
|
221
|
+
const rec = loadRequest(opts.openRequest);
|
|
222
|
+
if (rec === null) {
|
|
223
|
+
err('No pending request with that id on this machine. A request can only be re-opened on the machine that staged it, and only until it expires. Ask your agent to start the share again.');
|
|
224
|
+
return 1;
|
|
225
|
+
}
|
|
226
|
+
if (!(Date.parse(rec.expiresAt) > Date.now())) {
|
|
227
|
+
err('That request has expired. Ask your agent to start the share again.');
|
|
228
|
+
return 1;
|
|
229
|
+
}
|
|
230
|
+
if (rec.envName !== opts.envName) {
|
|
231
|
+
err(`That request was staged for ${rec.envName}, not ${opts.envName}. Run: align share --open ${rec.requestId} --to ${rec.envName}`);
|
|
232
|
+
return 1;
|
|
233
|
+
}
|
|
234
|
+
// Fails closed: a sign-in with no tenant id cannot show the request belongs to this workspace, so it is not shown.
|
|
235
|
+
if (rec.gatewayUrl !== deps.cloudEnv.gatewayUrl || !deps.cloudEnv.tenantId || rec.tenantId !== deps.cloudEnv.tenantId) {
|
|
236
|
+
err('That request was staged for a different workspace or gateway than the one you are signed in to now, so it was not shown.');
|
|
237
|
+
return 1;
|
|
238
|
+
}
|
|
239
|
+
let state;
|
|
240
|
+
try {
|
|
241
|
+
state = (await deps.client().getShareRequest(rec.requestId)).state;
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
err(`Could not ask the gateway about that request (${visible(e.message)}), so the link was not shown. Try again in a moment.`);
|
|
245
|
+
return 1;
|
|
246
|
+
}
|
|
247
|
+
if (state !== 'pending') {
|
|
248
|
+
err(`That request is ${visible(state)}, so there is nothing to approve. Ask your agent to start the share again if you still want it.`);
|
|
249
|
+
return 1;
|
|
250
|
+
}
|
|
251
|
+
// Worked out again with the staging order (a team destination's saved app, else the gateway's app_url, else the guess); the record does not store it.
|
|
252
|
+
let cfgAppUrl;
|
|
253
|
+
try {
|
|
254
|
+
cfgAppUrl = (await deps.client().shareRequestsConfig())?.appUrl ?? null;
|
|
255
|
+
}
|
|
256
|
+
catch (e) {
|
|
257
|
+
err(`Could not ask the gateway about that request (${visible(e.message)}), so the link was not shown. Try again in a moment.`);
|
|
258
|
+
return 1;
|
|
259
|
+
}
|
|
260
|
+
const app = resolveApprovalAppUrl({ stored: deps.teamAppUrl ?? null, cfgAppUrl, guessed: deps.approval.appUrl });
|
|
261
|
+
if (!app.ok) {
|
|
262
|
+
err(app.message);
|
|
263
|
+
return 1;
|
|
264
|
+
}
|
|
265
|
+
const url = approveUrl(app.appUrl, rec.requestId, rec.keyB64Url);
|
|
266
|
+
const minutes = Math.max(1, Math.round((Date.parse(rec.expiresAt) - Date.now()) / 60000));
|
|
267
|
+
out(`Approve in your browser: ${url}`);
|
|
268
|
+
out(`Code: ${rec.userCode} (the page shows the same code. Check they match before you approve.)`);
|
|
269
|
+
out(`It expires in ${minutes} minutes. Nothing is sent until you approve. When you have, tell your agent so it can finish the share.`);
|
|
270
|
+
const a = deps.approval;
|
|
271
|
+
await presentLink(url, {
|
|
272
|
+
appUrl: app.appUrl, plan: a.plan ?? { open: a.openUrl !== undefined, qr: false, qrIfOpenFails: false, why: 'default' },
|
|
273
|
+
...(a.openUrl ? { openUrl: a.openUrl } : {}), ...(a.qr ? { qr: a.qr } : {}), ...(a.columns !== undefined ? { columns: a.columns } : {}),
|
|
274
|
+
...(a.copy ? { copy: a.copy } : {}), out, raw: deps.out,
|
|
275
|
+
});
|
|
276
|
+
return 0;
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** The command-line flags that steer how the approval link is delivered, declared once so a test can parse them without running a share. */
|
|
2
|
+
import type { Command } from 'commander';
|
|
3
|
+
import type { DeliveryFlags } from './delivery.js';
|
|
4
|
+
export interface DeliveryOpts {
|
|
5
|
+
/** `--no-open` gives false; `--open <id>` gives the id. */
|
|
6
|
+
open?: string | boolean;
|
|
7
|
+
/** `--qr` gives true, `--no-qr` false. */
|
|
8
|
+
qr?: boolean;
|
|
9
|
+
copy?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function addDeliveryOptions(cmd: Command): Command;
|
|
12
|
+
export declare function deliveryFlagsFrom(o: DeliveryOpts): DeliveryFlags;
|
|
13
|
+
/** Both `--qr` and `--no-qr` is a mistake worth stopping on, rather than guessing which one was meant. */
|
|
14
|
+
export declare function conflictingDeliveryFlags(argv: readonly string[]): boolean;
|
|
15
|
+
//# sourceMappingURL=delivery-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-options.d.ts","sourceRoot":"","sources":["../../../src/lib/share/delivery-options.ts"],"names":[],"mappings":"AAAA,4IAA4I;AAC5I,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOxD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,YAAY,GAAG,aAAa,CAEhE;AAED,0GAA0G;AAC1G,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEzE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function addDeliveryOptions(cmd) {
|
|
2
|
+
return cmd
|
|
3
|
+
.option('--open <request-id>', 'Show the approval link again (open it, or print it with a QR code) for a request your agent staged on this machine')
|
|
4
|
+
.option('--no-open', 'Print the approval link without opening a browser')
|
|
5
|
+
.option('--qr', 'Print a QR code of the approval link, even when output is not a terminal; scan it with your phone')
|
|
6
|
+
.option('--no-qr', 'Never print the QR code')
|
|
7
|
+
.option('--copy', 'Ask your terminal to copy the approval link (needs a terminal that supports OSC 52; the link then sits in your clipboard)');
|
|
8
|
+
}
|
|
9
|
+
export function deliveryFlagsFrom(o) {
|
|
10
|
+
return { noOpen: o.open === false, qr: o.qr === true, noQr: o.qr === false };
|
|
11
|
+
}
|
|
12
|
+
/** Both `--qr` and `--no-qr` is a mistake worth stopping on, rather than guessing which one was meant. */
|
|
13
|
+
export function conflictingDeliveryFlags(argv) {
|
|
14
|
+
return argv.includes('--qr') && argv.includes('--no-qr');
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=delivery-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-options.js","sourceRoot":"","sources":["../../../src/lib/share/delivery-options.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,GAAG;SACP,MAAM,CAAC,qBAAqB,EAAE,oHAAoH,CAAC;SACnJ,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;SACxE,MAAM,CAAC,MAAM,EAAE,mGAAmG,CAAC;SACnH,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;SAC5C,MAAM,CAAC,QAAQ,EAAE,2HAA2H,CAAC,CAAC;AACnJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAe;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;AAC/E,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,wBAAwB,CAAC,IAAuB;IAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How an approval link reaches the person: opened for them, shown as a QR code to scan with a phone, or both
|
|
3
|
+
* unavailable (then it is only printed, as before).
|
|
4
|
+
*
|
|
5
|
+
* decideDelivery is a pure table over the machine and the flags, so every row is testable without a terminal.
|
|
6
|
+
* openApprovalLink runs the link through the allowlist and then spawns an OS opener with an ARGUMENT VECTOR: no
|
|
7
|
+
* shell, no PowerShell string, no `start`. The `open` package is not used here on purpose: on Windows it builds a
|
|
8
|
+
* PowerShell double-quoted string, which is the thing that must never see a link built from config.
|
|
9
|
+
*
|
|
10
|
+
* ARGV VISIBILITY. On Linux (xdg-open) and macOS (open) the full link, including the `#k=` key, is on the opener's
|
|
11
|
+
* command line while it runs, so another local user can read it with `ps`. The key alone cannot approve anything: the
|
|
12
|
+
* approve route needs the same person's signed-in browser session and, where enabled, their passkey. Every route that
|
|
13
|
+
* hands a link to a browser from here (a file, a pipe, a local redirect page) leaves the key somewhere longer-lived or
|
|
14
|
+
* equally visible, so argv is the least bad option. Where that matters, use `--no-open` and the QR code.
|
|
15
|
+
*/
|
|
16
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
17
|
+
type Platform = typeof process.platform;
|
|
18
|
+
export interface DeliveryEnv {
|
|
19
|
+
platform: Platform;
|
|
20
|
+
env: Record<string, string | undefined>;
|
|
21
|
+
stdoutIsTTY: boolean;
|
|
22
|
+
stdinIsTTY: boolean;
|
|
23
|
+
/** Running inside a container (a Docker or Podman guest), where a browser is not the person's. */
|
|
24
|
+
inContainer: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DeliveryFlags {
|
|
27
|
+
/** --no-open */
|
|
28
|
+
noOpen?: boolean;
|
|
29
|
+
/** --qr: print the QR code even when stdout is not a terminal. Also means: do not open a browser here. */
|
|
30
|
+
qr?: boolean;
|
|
31
|
+
/** --no-qr: never print it. Wins over --qr. */
|
|
32
|
+
noQr?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface DeliveryPlan {
|
|
35
|
+
open: boolean;
|
|
36
|
+
qr: boolean;
|
|
37
|
+
/** When the browser launch fails, a QR is still worth printing (a terminal, not CI, and not --no-qr). */
|
|
38
|
+
qrIfOpenFails: boolean;
|
|
39
|
+
why: string;
|
|
40
|
+
}
|
|
41
|
+
/** Pure. Opening needs a person at a terminal on a machine with a browser; the QR is for every other terminal. */
|
|
42
|
+
export declare function decideDelivery(e: DeliveryEnv, f: DeliveryFlags): DeliveryPlan;
|
|
43
|
+
export declare function currentDeliveryEnv(): DeliveryEnv;
|
|
44
|
+
/** One executable and its arguments. The link is exactly one argument. */
|
|
45
|
+
export declare function browserLaunch(platform: Platform, url: string, env?: Record<string, string | undefined>): {
|
|
46
|
+
command: string;
|
|
47
|
+
args: string[];
|
|
48
|
+
};
|
|
49
|
+
export interface OpenDeps {
|
|
50
|
+
platform?: Platform;
|
|
51
|
+
spawn?: typeof nodeSpawn;
|
|
52
|
+
graceMs?: number;
|
|
53
|
+
env?: Record<string, string | undefined>;
|
|
54
|
+
}
|
|
55
|
+
/** False without spawning anything when the link does not pass the allowlist. */
|
|
56
|
+
export declare function openApprovalLink(url: string, appUrl: string, deps?: OpenDeps): Promise<boolean>;
|
|
57
|
+
/** `align invite`'s Settings > Team invites link, through its own allowlist and the same argv-only opener. */
|
|
58
|
+
export declare function openSettingsLink(url: string, appUrl: string, deps?: OpenDeps): Promise<boolean>;
|
|
59
|
+
/** What the approval step needs to put the link in front of the person. */
|
|
60
|
+
export interface PresentDeps {
|
|
61
|
+
appUrl: string;
|
|
62
|
+
plan: DeliveryPlan;
|
|
63
|
+
/** Absent: nothing is opened. Called with the web app the link was checked against (a team destination's own, not a guess). */
|
|
64
|
+
openUrl?: (url: string, appUrl: string) => Promise<boolean>;
|
|
65
|
+
/** Builds the QR lines for a link; absent: no QR. */
|
|
66
|
+
qr?: (url: string) => {
|
|
67
|
+
lines: string[];
|
|
68
|
+
columns: number;
|
|
69
|
+
};
|
|
70
|
+
/** Terminal width when known: a QR wider than this is not printed (it would wrap and not scan). */
|
|
71
|
+
columns?: number;
|
|
72
|
+
/** Ordinary lines (cleaned of control characters by the caller). */
|
|
73
|
+
out: (line: string) => void;
|
|
74
|
+
/** QR lines only: they carry colour escapes, which the caller's cleaning would turn into visible junk. We built them from a link that passed the allowlist. */
|
|
75
|
+
raw: (line: string) => void;
|
|
76
|
+
/** --copy: ask the terminal to put the link on the clipboard. */
|
|
77
|
+
copy?: (url: string) => void;
|
|
78
|
+
}
|
|
79
|
+
export declare function presentLink(url: string, d: PresentDeps): Promise<void>;
|
|
80
|
+
/** The OSC 52 "copy to clipboard" sequence for a link, or null when stdout is not a terminal (it would print as junk in a pipe). */
|
|
81
|
+
export declare function osc52(url: string, stdoutIsTTY: boolean): string | null;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/lib/share/delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How an approval link reaches the person: opened for them, shown as a QR code to scan with a phone, or both
|
|
3
|
+
* unavailable (then it is only printed, as before).
|
|
4
|
+
*
|
|
5
|
+
* decideDelivery is a pure table over the machine and the flags, so every row is testable without a terminal.
|
|
6
|
+
* openApprovalLink runs the link through the allowlist and then spawns an OS opener with an ARGUMENT VECTOR: no
|
|
7
|
+
* shell, no PowerShell string, no `start`. The `open` package is not used here on purpose: on Windows it builds a
|
|
8
|
+
* PowerShell double-quoted string, which is the thing that must never see a link built from config.
|
|
9
|
+
*
|
|
10
|
+
* ARGV VISIBILITY. On Linux (xdg-open) and macOS (open) the full link, including the `#k=` key, is on the opener's
|
|
11
|
+
* command line while it runs, so another local user can read it with `ps`. The key alone cannot approve anything: the
|
|
12
|
+
* approve route needs the same person's signed-in browser session and, where enabled, their passkey. Every route that
|
|
13
|
+
* hands a link to a browser from here (a file, a pipe, a local redirect page) leaves the key somewhere longer-lived or
|
|
14
|
+
* equally visible, so argv is the least bad option. Where that matters, use `--no-open` and the QR code.
|
|
15
|
+
*/
|
|
16
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
17
|
+
import fs from 'node:fs';
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
import { checkApproveLink, checkSettingsLink } from './approve-link.js';
|
|
20
|
+
import { tryOpenUrl } from '../open-url.js';
|
|
21
|
+
const set = (v) => v !== undefined && v !== '';
|
|
22
|
+
/** CI=false and CI=0 are how people turn it OFF; an empty value is unset. */
|
|
23
|
+
const isCi = (env) => (set(env['CI']) && !/^(false|0)$/i.test(env['CI'])) || set(env['GITHUB_ACTIONS']);
|
|
24
|
+
const isSsh = (env) => set(env['SSH_CONNECTION']) || set(env['SSH_TTY']) || set(env['SSH_CLIENT']);
|
|
25
|
+
const isRemoteDev = (env) => set(env['CODESPACES']) || set(env['REMOTE_CONTAINERS']);
|
|
26
|
+
/** Pure. Opening needs a person at a terminal on a machine with a browser; the QR is for every other terminal. */
|
|
27
|
+
export function decideDelivery(e, f) {
|
|
28
|
+
const ci = isCi(e.env);
|
|
29
|
+
const noBrowser = f.noOpen ? '--no-open'
|
|
30
|
+
: f.qr ? '--qr'
|
|
31
|
+
: !e.stdoutIsTTY || !e.stdinIsTTY ? 'not an interactive terminal'
|
|
32
|
+
: ci ? 'CI'
|
|
33
|
+
: isSsh(e.env) ? 'SSH session'
|
|
34
|
+
: isRemoteDev(e.env) ? 'remote dev environment'
|
|
35
|
+
: e.inContainer ? 'container'
|
|
36
|
+
: e.platform === 'linux' && !set(e.env['DISPLAY']) && !set(e.env['WAYLAND_DISPLAY']) ? 'no display'
|
|
37
|
+
: null;
|
|
38
|
+
const open = noBrowser === null;
|
|
39
|
+
// The QR goes where the link goes (stdout), so it needs a terminal there unless forced. CI never gets one unprompted.
|
|
40
|
+
const qr = f.noQr ? false : f.qr ? true : !open && e.stdoutIsTTY && !ci;
|
|
41
|
+
return { open, qr, qrIfOpenFails: !f.noQr && e.stdoutIsTTY && !ci, why: noBrowser ?? 'interactive terminal on a machine with a browser' };
|
|
42
|
+
}
|
|
43
|
+
export function currentDeliveryEnv() {
|
|
44
|
+
let inContainer = false;
|
|
45
|
+
try {
|
|
46
|
+
inContainer = process.platform === 'linux' && (fs.existsSync('/.dockerenv') || fs.existsSync('/run/.containerenv') || set(process.env['container']));
|
|
47
|
+
}
|
|
48
|
+
catch { /* unknown is not a container */ }
|
|
49
|
+
return { platform: process.platform, env: process.env, stdoutIsTTY: process.stdout.isTTY === true, stdinIsTTY: process.stdin.isTTY === true, inContainer };
|
|
50
|
+
}
|
|
51
|
+
/** One executable and its arguments. The link is exactly one argument. */
|
|
52
|
+
export function browserLaunch(platform, url, env = process.env) {
|
|
53
|
+
if (platform === 'darwin')
|
|
54
|
+
return { command: 'open', args: [url] };
|
|
55
|
+
if (platform === 'win32') {
|
|
56
|
+
// An absolute path: a bare `rundll32` is searched for in the working directory first on Windows, so a rundll32.exe in a
|
|
57
|
+
// cloned repo would run. SystemRoot is used only when it is absolute (a relative value would be the cwd again).
|
|
58
|
+
const root = env['SystemRoot'] !== undefined && path.win32.isAbsolute(env['SystemRoot']) && /^[A-Za-z]:\\/.test(env['SystemRoot']) ? env['SystemRoot'] : 'C:\\Windows';
|
|
59
|
+
return { command: path.win32.join(root, 'System32', 'rundll32.exe'), args: ['url.dll,FileProtocolHandler', url] };
|
|
60
|
+
}
|
|
61
|
+
return { command: 'xdg-open', args: [url] };
|
|
62
|
+
}
|
|
63
|
+
/** False without spawning anything when the link does not pass the allowlist. */
|
|
64
|
+
export async function openApprovalLink(url, appUrl, deps = {}) {
|
|
65
|
+
return checkApproveLink(url, appUrl).ok ? spawnOpener(url, deps) : false;
|
|
66
|
+
}
|
|
67
|
+
/** `align invite`'s Settings > Team invites link, through its own allowlist and the same argv-only opener. */
|
|
68
|
+
export async function openSettingsLink(url, appUrl, deps = {}) {
|
|
69
|
+
return checkSettingsLink(url, appUrl).ok ? spawnOpener(url, deps) : false;
|
|
70
|
+
}
|
|
71
|
+
/** Only ever called with a link an allowlist above has passed. */
|
|
72
|
+
async function spawnOpener(url, deps) {
|
|
73
|
+
const { command, args } = browserLaunch(deps.platform ?? process.platform, url, deps.env);
|
|
74
|
+
const spawnFn = deps.spawn ?? nodeSpawn;
|
|
75
|
+
const opener = async () => {
|
|
76
|
+
const child = spawnFn(command, args, { stdio: 'ignore', detached: true, windowsHide: true });
|
|
77
|
+
child.unref();
|
|
78
|
+
return child;
|
|
79
|
+
};
|
|
80
|
+
return tryOpenUrl(url, opener, deps.graceMs);
|
|
81
|
+
}
|
|
82
|
+
const HOW_WITH_QR = 'To open it, scan the QR code with your phone, or open the link above on any device where you are signed in to Align. Approving on a phone with Face ID or a fingerprint is the strongest way.';
|
|
83
|
+
const HOW_NO_QR = 'To open it, open the link above on any device where you are signed in to Align, a phone included.';
|
|
84
|
+
export async function presentLink(url, d) {
|
|
85
|
+
const check = checkApproveLink(url, d.appUrl);
|
|
86
|
+
if (!check.ok) {
|
|
87
|
+
d.out('This link is not in the expected form, so it was not opened and no QR code was made. If you trust this server, copy the link yourself.');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const showQr = () => {
|
|
91
|
+
if (!d.qr)
|
|
92
|
+
return false;
|
|
93
|
+
const r = d.qr(url);
|
|
94
|
+
if (d.columns !== undefined && d.columns < r.columns) {
|
|
95
|
+
d.out(`Your terminal is ${d.columns} columns wide and the QR code needs ${r.columns}. Widen it and run the share again, or open the link above.`);
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
d.out('Scan this with your phone camera:');
|
|
99
|
+
for (const l of r.lines)
|
|
100
|
+
d.raw(l);
|
|
101
|
+
return true;
|
|
102
|
+
};
|
|
103
|
+
let shownQr = false;
|
|
104
|
+
if (d.plan.qr)
|
|
105
|
+
shownQr = showQr();
|
|
106
|
+
if (d.copy) {
|
|
107
|
+
d.copy(url);
|
|
108
|
+
d.out('Asked your terminal to copy the link. Not every terminal allows it, so check before you paste.');
|
|
109
|
+
}
|
|
110
|
+
if (d.plan.open && d.openUrl) {
|
|
111
|
+
if (await d.openUrl(url, d.appUrl))
|
|
112
|
+
return;
|
|
113
|
+
d.out('Could not open a browser here. Open the link above yourself.');
|
|
114
|
+
if (!shownQr && d.plan.qrIfOpenFails)
|
|
115
|
+
shownQr = showQr();
|
|
116
|
+
}
|
|
117
|
+
d.out(shownQr ? HOW_WITH_QR : HOW_NO_QR);
|
|
118
|
+
}
|
|
119
|
+
/** The OSC 52 "copy to clipboard" sequence for a link, or null when stdout is not a terminal (it would print as junk in a pipe). */
|
|
120
|
+
export function osc52(url, stdoutIsTTY) {
|
|
121
|
+
if (!stdoutIsTTY)
|
|
122
|
+
return null;
|
|
123
|
+
let origin;
|
|
124
|
+
try {
|
|
125
|
+
origin = new URL(url).origin;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
if (!checkApproveLink(url, origin).ok)
|
|
131
|
+
return null;
|
|
132
|
+
return `\u001b]52;c;${Buffer.from(url, 'utf8').toString('base64')}\u0007`;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/lib/share/delivery.ts"],"names":[],"mappings":"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"}
|