@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 @@
|
|
|
1
|
+
{"version":3,"file":"source-key.js","sourceRoot":"","sources":["../../src/lib/source-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;gGAEgG;AAChG,MAAM,WAAW,GAA6B;IAC5C,MAAM,EAAE,CAAC,+CAA+C,CAAC;IACzD,MAAM,EAAE,CAAC,kDAAkD,CAAC;IAC5D,IAAI,EAAE,CAAC,sCAAsC,CAAC;IAC9C,MAAM,EAAE,CAAC,sCAAsC,CAAC;IAChD,UAAU,EAAE,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;IACrE,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,KAAK,EAAE,CAAC,kCAAkC,CAAC;IAC3C,KAAK,EAAE,CAAC,4BAA4B,CAAC;IACrC,IAAI,EAAE,CAAC,sBAAsB,CAAC;IAC9B,GAAG,EAAE,CAAC,4BAA4B,EAAE,+BAA+B,CAAC;CACrE,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAsB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,GAA8B;IAC/E,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IACjG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** The scope this phase writes under: the caller's own items. L4 adds repo/project/space keys
|
|
2
|
+
* ('repo:o/r', 'jira:ALI', ...) when scope pickers land, and L5's nextWindow reads whichever
|
|
3
|
+
* row is in force. */
|
|
4
|
+
export declare const WINDOW_SCOPE_KEY = "yours";
|
|
5
|
+
/** `needsReauth` is true when ANY scope row of the source says so: a token the vendor refused
|
|
6
|
+
* is refused for the whole source. Absence of a row is no problem, not a pass. */
|
|
7
|
+
export declare function readSyncStatus(dbPath: string, sourceId: string): {
|
|
8
|
+
needsReauth: boolean;
|
|
9
|
+
};
|
|
10
|
+
/** Record the window the user asked for. `null` is `all`: no lower bound, only the ceiling. */
|
|
11
|
+
export declare function recordWindowSince(dbPath: string, sourceId: string, windowSince: string | null, changedByAgent: string): void;
|
|
12
|
+
//# sourceMappingURL=source-sync-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-sync-state.d.ts","sourceRoot":"","sources":["../../src/lib/source-sync-state.ts"],"names":[],"mappings":"AAaA;;uBAEuB;AACvB,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAaxC;mFACmF;AACnF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAKzF;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAS5H"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L3: the slice of `source_sync` (schema v7) that `align_backfill` needs before L5's sync
|
|
3
|
+
* exists: is this source waiting on the user to re-authenticate, and what window did the user
|
|
4
|
+
* ask for. L5 owns the watermark columns (high_water, pending_until, last_*, items_last_run);
|
|
5
|
+
* nothing here writes them, and an upsert here never clears one.
|
|
6
|
+
*
|
|
7
|
+
* Opens its own short-lived handle on purpose. The MCP server holds the graph open through the
|
|
8
|
+
* local gateway client; this is a one-row read or write, and WAL plus the 30 s busy_timeout
|
|
9
|
+
* (set below, as local-db.ts sets it) is the case that pairing exists for.
|
|
10
|
+
*/
|
|
11
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
12
|
+
import { tightenGraphFiles } from './private-files.js';
|
|
13
|
+
/** The scope this phase writes under: the caller's own items. L4 adds repo/project/space keys
|
|
14
|
+
* ('repo:o/r', 'jira:ALI', ...) when scope pickers land, and L5's nextWindow reads whichever
|
|
15
|
+
* row is in force. */
|
|
16
|
+
export const WINDOW_SCOPE_KEY = 'yours';
|
|
17
|
+
function withDb(dbPath, fn) {
|
|
18
|
+
tightenGraphFiles(dbPath); // owner-only on every open (private-files.ts)
|
|
19
|
+
const db = new DatabaseSync(dbPath);
|
|
20
|
+
try {
|
|
21
|
+
db.exec('PRAGMA busy_timeout = 30000');
|
|
22
|
+
return fn(db);
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
db.close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** `needsReauth` is true when ANY scope row of the source says so: a token the vendor refused
|
|
29
|
+
* is refused for the whole source. Absence of a row is no problem, not a pass. */
|
|
30
|
+
export function readSyncStatus(dbPath, sourceId) {
|
|
31
|
+
return withDb(dbPath, (db) => {
|
|
32
|
+
const row = db.prepare(`SELECT 1 AS hit FROM source_sync WHERE source_id = ? AND status = 'needs_reauth' LIMIT 1`).get(sourceId);
|
|
33
|
+
return { needsReauth: row !== undefined };
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** Record the window the user asked for. `null` is `all`: no lower bound, only the ceiling. */
|
|
37
|
+
export function recordWindowSince(dbPath, sourceId, windowSince, changedByAgent) {
|
|
38
|
+
withDb(dbPath, (db) => {
|
|
39
|
+
db.prepare(`INSERT INTO source_sync (source_id, scope_key, scope, window_since, changed_via, changed_by_agent)
|
|
40
|
+
VALUES (?, ?, 'yours', ?, 'mcp', ?)
|
|
41
|
+
ON CONFLICT(source_id, scope_key) DO UPDATE SET
|
|
42
|
+
window_since = excluded.window_since, changed_via = 'mcp', changed_by_agent = excluded.changed_by_agent`).run(sourceId, WINDOW_SCOPE_KEY, windowSince, changedByAgent);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=source-sync-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-sync-state.js","sourceRoot":"","sources":["../../src/lib/source-sync-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;uBAEuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,SAAS,MAAM,CAAI,MAAc,EAAE,EAA2B;IAC5D,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,8CAA8C;IACzE,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,QAAgB;IAC7D,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,0FAA0F,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjI,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB,EAAE,WAA0B,EAAE,cAAsB;IACpH,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;QACpB,EAAE,CAAC,OAAO,CACR;;;iHAG2G,CAC5G,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-backfill-track.d.ts","sourceRoot":"","sources":["../../src/lib/startup-backfill-track.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { trackChildFromEnv } from './backfill-state.js';
|
|
2
|
+
// THIRD, right after startup-xdg: when `align_backfill` started this process, record from the first
|
|
3
|
+
// moment how it ends. Anything later (a bad --since, a commander parse error, an uncaught error)
|
|
4
|
+
// exits through process.exit, which the exit handler turns into a final "failed" status.
|
|
5
|
+
trackChildFromEnv();
|
|
6
|
+
//# sourceMappingURL=startup-backfill-track.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-backfill-track.js","sourceRoot":"","sources":["../../src/lib/startup-backfill-track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,oGAAoG;AACpG,iGAAiG;AACjG,yFAAyF;AACzF,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-xdg.d.ts","sourceRoot":"","sources":["../../src/lib/startup-xdg.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { dropRelativeXdg } from './xdg.js';
|
|
2
|
+
/*
|
|
3
|
+
* Imported second by index.ts, right after the startup-env snapshot and before any module that
|
|
4
|
+
* computes a directory (`conf`, env-paths, local-mode): a relative XDG_* is invalid per the XDG
|
|
5
|
+
* spec, and in the MCP child of an agent that loads a repo `.env` it would point align's config,
|
|
6
|
+
* cache and local.db into that repo.
|
|
7
|
+
*/
|
|
8
|
+
dropRelativeXdg(process.env);
|
|
9
|
+
//# sourceMappingURL=startup-xdg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-xdg.js","sourceRoot":"","sources":["../../src/lib/startup-xdg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;;GAKG;AACH,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"after-connect.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/after-connect.ts"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAM3H"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5: a fresh token was saved for a source (a foreground `align connect`/`setup` that read it
|
|
3
|
+
* successfully). The source is no longer waiting on the person, and the launch summary now lists
|
|
4
|
+
* it. Best effort and silent: a connect must never fail because a cache could not be written.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import { clearNeedsReauth } from './sync-state.js';
|
|
8
|
+
import { refreshSummary } from './summary.js';
|
|
9
|
+
export function afterSourceConnected(dbPath, source, isConnected) {
|
|
10
|
+
if (dbPath === undefined || !fs.existsSync(dbPath))
|
|
11
|
+
return;
|
|
12
|
+
try {
|
|
13
|
+
clearNeedsReauth(dbPath, source);
|
|
14
|
+
refreshSummary(dbPath, isConnected);
|
|
15
|
+
}
|
|
16
|
+
catch { /* the next sync rebuilds both */ }
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=after-connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"after-connect.js","sourceRoot":"","sources":["../../../src/lib/sync/after-connect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,UAAU,oBAAoB,CAAC,MAA0B,EAAE,MAAc,EAAE,WAAoC;IACnH,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO;IAC3D,IAAI,CAAC;QACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const claimFile: (dir: string, source: string, bucket: number) => string;
|
|
2
|
+
/** Is a claim for this source in force (this bucket's or the previous one's)? Reads only. */
|
|
3
|
+
export declare function claimInForce(dir: string, source: string, now: number, intervalMs: number): boolean;
|
|
4
|
+
export type ClaimResult = {
|
|
5
|
+
ok: true;
|
|
6
|
+
} | {
|
|
7
|
+
ok: false;
|
|
8
|
+
why: 'held' | 'unwritable';
|
|
9
|
+
};
|
|
10
|
+
export declare function takeClaim(dir: string, source: string, now: number, intervalMs: number): ClaimResult;
|
|
11
|
+
export declare function releaseClaim(dir: string, source: string, now: number, intervalMs: number): void;
|
|
12
|
+
/** Why a background refresh cannot record its claim for this source (a directory or other object in the way, or an unwritable state directory), or undefined. For `align sync --status`. */
|
|
13
|
+
export declare function claimProblem(dir: string, source: string, now: number, intervalMs: number): string | undefined;
|
|
14
|
+
//# sourceMappingURL=bg-claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bg-claim.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/bg-claim.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAuD,CAAC;AAehI,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGlG;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAC;AAEnF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAmBnG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAE/F;AAYD,4LAA4L;AAC5L,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7G"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L6: the per-source claim that keeps concurrent launches from each starting a child. One file per
|
|
3
|
+
* source per INTERVAL BUCKET, `<source>.<floor(now / interval)>.bgclaim`, created exclusively
|
|
4
|
+
* (`wx`) and never taken over: whoever creates the file for this bucket owns the interval, and
|
|
5
|
+
* everyone else finds it and stops. There is no "stale, remove it and retry" step, because that is
|
|
6
|
+
* what lets many launches each win once a claim is old (a remove followed by an exclusive create
|
|
7
|
+
* is two steps, and every racer can pass the first).
|
|
8
|
+
*
|
|
9
|
+
* The previous bucket's claim is honoured while it is younger than the interval, so a bucket
|
|
10
|
+
* boundary cannot double-start. After taking its own claim a launch also looks at the neighbouring
|
|
11
|
+
* buckets once more and yields if one appeared meanwhile; two launches on either side of a boundary
|
|
12
|
+
* may then both yield, which costs one interval of no refresh and never a second child.
|
|
13
|
+
* Files older than two intervals are swept. File-system only: the launch path imports this.
|
|
14
|
+
*/
|
|
15
|
+
import fs from 'node:fs';
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import { kindAt, readRegularFile } from './safe-read.js';
|
|
18
|
+
const NAME = (source) => new RegExp(`^${source}\\.(\\d+)\\.bgclaim$`);
|
|
19
|
+
export const claimFile = (dir, source, bucket) => path.join(dir, `${source}.${bucket}.bgclaim`);
|
|
20
|
+
const bucketOf = (now, intervalMs) => Math.floor(now / intervalMs);
|
|
21
|
+
function claimAt(file) {
|
|
22
|
+
const raw = readRegularFile(file, 4096);
|
|
23
|
+
if (raw === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
try {
|
|
26
|
+
const at = JSON.parse(raw).at;
|
|
27
|
+
return typeof at === 'number' && Number.isFinite(at) ? at : undefined;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Fresh = younger than the interval and not dated in the future. */
|
|
34
|
+
const fresh = (at, now, intervalMs) => at !== undefined && at <= now && now - at < intervalMs;
|
|
35
|
+
/** Is a claim for this source in force (this bucket's or the previous one's)? Reads only. */
|
|
36
|
+
export function claimInForce(dir, source, now, intervalMs) {
|
|
37
|
+
const b = bucketOf(now, intervalMs);
|
|
38
|
+
return [b, b - 1].some((k) => fresh(claimAt(claimFile(dir, source, k)), now, intervalMs));
|
|
39
|
+
}
|
|
40
|
+
export function takeClaim(dir, source, now, intervalMs) {
|
|
41
|
+
const b = bucketOf(now, intervalMs);
|
|
42
|
+
if (claimInForce(dir, source, now, intervalMs))
|
|
43
|
+
return { ok: false, why: 'held' };
|
|
44
|
+
const mine = claimFile(dir, source, b);
|
|
45
|
+
try {
|
|
46
|
+
fs.writeFileSync(mine, JSON.stringify({ at: now, pid: process.pid }), { flag: 'wx', mode: 0o600 });
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// EEXIST on a regular file: this bucket is taken (even by a claim too damaged to read), and it owns the interval.
|
|
50
|
+
// EEXIST on anything else (a directory, a FIFO) is an object in the way, which no claim can replace.
|
|
51
|
+
const code = e.code;
|
|
52
|
+
return { ok: false, why: code === 'EEXIST' && kindAt(mine) === 'file' ? 'held' : 'unwritable' };
|
|
53
|
+
}
|
|
54
|
+
// A launch on the other side of a boundary may have claimed between our check and our create.
|
|
55
|
+
if ([b - 1, b + 1].some((k) => { const at = claimAt(claimFile(dir, source, k)); return at !== undefined && Math.abs(now - at) < intervalMs; })) {
|
|
56
|
+
try {
|
|
57
|
+
fs.rmSync(mine, { force: true });
|
|
58
|
+
}
|
|
59
|
+
catch { /* it expires on its own */ }
|
|
60
|
+
return { ok: false, why: 'held' };
|
|
61
|
+
}
|
|
62
|
+
sweep(dir, source, b);
|
|
63
|
+
return { ok: true };
|
|
64
|
+
}
|
|
65
|
+
export function releaseClaim(dir, source, now, intervalMs) {
|
|
66
|
+
try {
|
|
67
|
+
fs.rmSync(claimFile(dir, source, bucketOf(now, intervalMs)), { force: true });
|
|
68
|
+
}
|
|
69
|
+
catch { /* it expires on its own */ }
|
|
70
|
+
}
|
|
71
|
+
function sweep(dir, source, bucket) {
|
|
72
|
+
try {
|
|
73
|
+
const re = NAME(source);
|
|
74
|
+
for (const n of fs.readdirSync(dir)) {
|
|
75
|
+
const m = re.exec(n);
|
|
76
|
+
if (m && Number(m[1]) < bucket - 2)
|
|
77
|
+
fs.rmSync(path.join(dir, n), { force: true });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch { /* a sweep that fails leaves old files, which are harmless */ }
|
|
81
|
+
}
|
|
82
|
+
/** Why a background refresh cannot record its claim for this source (a directory or other object in the way, or an unwritable state directory), or undefined. For `align sync --status`. */
|
|
83
|
+
export function claimProblem(dir, source, now, intervalMs) {
|
|
84
|
+
try {
|
|
85
|
+
fs.accessSync(dir, fs.constants.W_OK);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return `Align cannot write to its state directory (${dir}), so it does not refresh ${source} in the background`;
|
|
89
|
+
}
|
|
90
|
+
const b = bucketOf(now, intervalMs);
|
|
91
|
+
for (const k of [b, b - 1]) {
|
|
92
|
+
if (kindAt(claimFile(dir, source, k)) === 'other')
|
|
93
|
+
return `something that is not a file is in the way at ${claimFile(dir, source, k)}, so Align does not refresh ${source} in the background. Remove it`;
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=bg-claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bg-claim.js","sourceRoot":"","sources":["../../../src/lib/sync/bg-claim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type BlockedState = 'manual' | 'not_connected';
|
|
2
|
+
export declare function writeBlocked(source: string, state: BlockedState, reason: string, dir?: string | null): void;
|
|
3
|
+
export declare function clearBlocked(source: string, dir?: string | null): void;
|
|
4
|
+
export declare function readBlocked(source: string, dir?: string | null): {
|
|
5
|
+
state: BlockedState;
|
|
6
|
+
reason: string;
|
|
7
|
+
} | undefined;
|
|
8
|
+
//# sourceMappingURL=blocked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/blocked.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,eAAe,CAAC;AAGtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,IAAI,CAG5H;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,IAAI,CAGvF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAQrI"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L6: sources a background run found it cannot read until a person acts: `manual` (Confluence with no
|
|
3
|
+
* spaces chosen, Teams) or `not_connected`. Such a run writes no timestamp, so the launcher would
|
|
4
|
+
* start a child for it every interval for ever. The child leaves a small marker here instead; the
|
|
5
|
+
* summary builder reads it and lists the source as not schedulable, and the next run of that source
|
|
6
|
+
* that gets further clears it. File-system only (neither the launcher nor the summary reader opens it).
|
|
7
|
+
*/
|
|
8
|
+
import fs from 'node:fs';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { alignStateDir } from '../backfill-state.js';
|
|
11
|
+
import { isKnownSource } from './source-ids.js';
|
|
12
|
+
import { readRegularFile } from './safe-read.js';
|
|
13
|
+
import { writePrivateFile } from '../private-files.js';
|
|
14
|
+
const file = (dir, source) => path.join(dir, `${source}.blocked.json`);
|
|
15
|
+
export function writeBlocked(source, state, reason, dir = alignStateDir()) {
|
|
16
|
+
if (dir === null || !isKnownSource(source))
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
writePrivateFile(file(dir, source), JSON.stringify({ state, reason: reason.slice(0, 300) }));
|
|
20
|
+
}
|
|
21
|
+
catch { /* the next interval tries again */ }
|
|
22
|
+
}
|
|
23
|
+
export function clearBlocked(source, dir = alignStateDir()) {
|
|
24
|
+
if (dir === null || !isKnownSource(source))
|
|
25
|
+
return;
|
|
26
|
+
try {
|
|
27
|
+
fs.rmSync(file(dir, source), { force: true });
|
|
28
|
+
}
|
|
29
|
+
catch { /* as above */ }
|
|
30
|
+
}
|
|
31
|
+
export function readBlocked(source, dir = alignStateDir()) {
|
|
32
|
+
if (dir === null || !isKnownSource(source))
|
|
33
|
+
return undefined;
|
|
34
|
+
const raw = readRegularFile(file(dir, source), 4096);
|
|
35
|
+
if (raw === undefined)
|
|
36
|
+
return undefined;
|
|
37
|
+
try {
|
|
38
|
+
const b = JSON.parse(raw);
|
|
39
|
+
return (b.state === 'manual' || b.state === 'not_connected') ? { state: b.state, reason: typeof b.reason === 'string' ? b.reason : '' } : undefined;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=blocked.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked.js","sourceRoot":"","sources":["../../../src/lib/sync/blocked.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,MAAc,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,eAAe,CAAC,CAAC;AAE/F,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,KAAmB,EAAE,MAAc,EAAE,MAAqB,aAAa,EAAE;IACpH,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO;IACnD,IAAI,CAAC;QAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;AACrJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAqB,aAAa,EAAE;IAC/E,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO;IACnD,IAAI,CAAC;QAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,MAAqB,aAAa,EAAE;IAC9E,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0C,CAAC;QACnE,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtJ,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ClassificationOutcome } from '../local-relationship-classifier.js';
|
|
2
|
+
export declare const CLASSIFY_AUDIT_ACTION = "sync_classified";
|
|
3
|
+
export interface Unclassified {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
summary: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function unclassifiedItems(dbPath: string, limit: number): Unclassified[];
|
|
9
|
+
export interface Estimate {
|
|
10
|
+
/** Items that would be classified: min(max, unclassified). */
|
|
11
|
+
items: number;
|
|
12
|
+
/** Upper bound on LLM calls: items x CAPTURE_CLASSIFY_TOP_K. */
|
|
13
|
+
calls: number;
|
|
14
|
+
/** How many unclassified items exist in all. */
|
|
15
|
+
available: number;
|
|
16
|
+
/** "Anthropic", "Ollama"... or undefined when none is configured. */
|
|
17
|
+
provider: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
export declare function estimateClassify(dbPath: string, max: number): Estimate;
|
|
20
|
+
export interface ClassifyResult {
|
|
21
|
+
items: number;
|
|
22
|
+
calls: number;
|
|
23
|
+
typed: number;
|
|
24
|
+
unparsed: number;
|
|
25
|
+
stopped?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function classifyUnclassified(dbPath: string, max: number, classify?: (a: {
|
|
28
|
+
title: string;
|
|
29
|
+
summary: string;
|
|
30
|
+
}, b: {
|
|
31
|
+
title: string;
|
|
32
|
+
summary: string;
|
|
33
|
+
}) => Promise<ClassificationOutcome>): Promise<ClassifyResult>;
|
|
34
|
+
//# sourceMappingURL=classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/classify.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,qBAAqB,EAAwB,MAAM,qCAAqC,CAAC;AAGvG,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAE5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAkB/E;AAED,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAMtE;AAED,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAEnH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,CAAC,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,qBAAqB,CAAwB,GAChJ,OAAO,CAAC,cAAc,CAAC,CAoCzB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5, Decision 1: `align sync --classify --max N`, the ONLY path that types imported items.
|
|
3
|
+
*
|
|
4
|
+
* Background sync, backfill and every connector import write free `relates` links and never call
|
|
5
|
+
* the paid classifier. This is the on-demand half: the person runs it, sees an estimate first, and
|
|
6
|
+
* confirms (the command asks; `align_sync` can only ESTIMATE). It classifies the same high-confidence
|
|
7
|
+
* candidates ingestOne would have (score >= SIMILARITY_THRESHOLD, at most CAPTURE_CLASSIFY_TOP_K per
|
|
8
|
+
* item), writes through the existing `replaceLink`, and works newest first.
|
|
9
|
+
*
|
|
10
|
+
* "Unclassified" means: has at least one high-confidence `relates` edge as its source, no typed
|
|
11
|
+
* edge on either side, and was not already attempted. The attempt is recorded as an audit note
|
|
12
|
+
* (`sync_classified`) because a classifier verdict of `relates` writes `relates` again, which looks
|
|
13
|
+
* identical to never having been asked: without the note every run would pay for the same items.
|
|
14
|
+
*/
|
|
15
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
16
|
+
import { tightenGraphFiles } from '../private-files.js';
|
|
17
|
+
import { createLocalDb } from '../local-db.js';
|
|
18
|
+
import { CAPTURE_CLASSIFY_TOP_K } from '../local-ingest.js';
|
|
19
|
+
import { hasConfiguredProvider, preferredProvider } from '../local-llm.js';
|
|
20
|
+
import { PROVIDER_LABEL } from '../llm-providers.js';
|
|
21
|
+
import { classifyRelationship } from '../local-relationship-classifier.js';
|
|
22
|
+
import { SIMILARITY_THRESHOLD } from '../local-thresholds.js';
|
|
23
|
+
export const CLASSIFY_AUDIT_ACTION = 'sync_classified';
|
|
24
|
+
export function unclassifiedItems(dbPath, limit) {
|
|
25
|
+
tightenGraphFiles(dbPath); // owner-only on every open (private-files.ts)
|
|
26
|
+
const db = new DatabaseSync(dbPath);
|
|
27
|
+
try {
|
|
28
|
+
db.exec('PRAGMA busy_timeout = 30000');
|
|
29
|
+
return db.prepare(`SELECT d.id AS id, d.title AS title, d.summary AS summary FROM decisions d
|
|
30
|
+
WHERE EXISTS (SELECT 1 FROM decision_links l WHERE l.source_id = d.id AND l.relation = 'relates' AND l.confidence >= ?)
|
|
31
|
+
AND NOT EXISTS (SELECT 1 FROM decision_links t WHERE (t.source_id = d.id OR t.target_id = d.id) AND t.relation <> 'relates')
|
|
32
|
+
AND NOT EXISTS (SELECT 1 FROM decision_audit a WHERE a.decision_id = d.id AND a.action = ?)
|
|
33
|
+
ORDER BY d.created_at DESC, d.rowid DESC LIMIT ?`).all(SIMILARITY_THRESHOLD, CLASSIFY_AUDIT_ACTION, limit);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
if (/no such table/i.test(e.message))
|
|
37
|
+
return [];
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
db.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function estimateClassify(dbPath, max) {
|
|
45
|
+
const available = unclassifiedItems(dbPath, Number.MAX_SAFE_INTEGER).length;
|
|
46
|
+
const items = Math.min(Math.max(0, max), available);
|
|
47
|
+
const configured = hasConfiguredProvider();
|
|
48
|
+
const preferred = preferredProvider();
|
|
49
|
+
return { items, calls: items * CAPTURE_CLASSIFY_TOP_K, available, provider: configured ? (preferred ? PROVIDER_LABEL[preferred] : 'configured AI provider') : undefined };
|
|
50
|
+
}
|
|
51
|
+
export async function classifyUnclassified(dbPath, max, classify = classifyRelationship) {
|
|
52
|
+
const db = createLocalDb(dbPath);
|
|
53
|
+
const out = { items: 0, calls: 0, typed: 0, unparsed: 0 };
|
|
54
|
+
try {
|
|
55
|
+
for (const item of unclassifiedItems(dbPath, Math.max(0, max))) {
|
|
56
|
+
const candidates = db.listLinks({ relation: 'relates', decisionId: item.id })
|
|
57
|
+
.filter((l) => l.sourceId === item.id && l.confidence >= SIMILARITY_THRESHOLD)
|
|
58
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
59
|
+
.slice(0, CAPTURE_CLASSIFY_TOP_K);
|
|
60
|
+
let stopped = false;
|
|
61
|
+
for (const l of candidates) {
|
|
62
|
+
const existing = db.getDecisionById(l.targetId);
|
|
63
|
+
if (!existing)
|
|
64
|
+
continue;
|
|
65
|
+
out.calls += 1;
|
|
66
|
+
// Same direction as the capture-time pass: the EXISTING decision is the subject, this item the candidate.
|
|
67
|
+
const r = await classify({ title: existing.title, summary: existing.summary }, { title: item.title, summary: item.summary });
|
|
68
|
+
if (r.ok) {
|
|
69
|
+
db.replaceLink({ sourceId: item.id, targetId: l.targetId, relation: r.relationship.type, confidence: r.relationship.confidence });
|
|
70
|
+
out.typed += 1;
|
|
71
|
+
}
|
|
72
|
+
else if (r.failure?.kind === 'provider_stopped') {
|
|
73
|
+
stopped = true;
|
|
74
|
+
out.stopped = 'the AI provider stopped answering (a bad key, no credit or a rate limit)';
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
out.unparsed += 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// A stopped provider says nothing about this item, so it stays eligible for the next run.
|
|
82
|
+
if (stopped)
|
|
83
|
+
break;
|
|
84
|
+
db.insertAudit({ decisionId: item.id, action: CLASSIFY_AUDIT_ACTION, actor: null });
|
|
85
|
+
out.items += 1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
db.close();
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/lib/sync/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CaptureSkip } from '../fetchers/capture.js';
|
|
2
|
+
import { drainDiscussion } from '../fetchers/github.js';
|
|
3
|
+
import type { createLocalGatewayClient } from '../local-gateway-client.js';
|
|
4
|
+
export interface DrainResult {
|
|
5
|
+
enriched: number;
|
|
6
|
+
remaining: number;
|
|
7
|
+
skips: CaptureSkip[];
|
|
8
|
+
}
|
|
9
|
+
export interface DrainDeps {
|
|
10
|
+
/** Seam for tests: the chunked SDK drain. */
|
|
11
|
+
drain?: typeof drainDiscussion;
|
|
12
|
+
budget?: number;
|
|
13
|
+
deadlineMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function drainGitHub(dbPath: string, client: Pick<ReturnType<typeof createLocalGatewayClient>, 'ingestBatch'>, token: string, deps?: DrainDeps): Promise<DrainResult>;
|
|
16
|
+
//# sourceMappingURL=drain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/drain.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,MAAM,WAAW,WAAW;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE;AAE1F,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,eAAe,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAAE,aAAa,CAAC,EACxE,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { GITHUB_DISCUSSION_BUDGET, SYNC_TIME_BUDGET_MS } from '../import-defaults.js';
|
|
2
|
+
import { drainDiscussion } from '../fetchers/github.js';
|
|
3
|
+
import { clearDetailPending, pendingRows } from './sync-state.js';
|
|
4
|
+
export async function drainGitHub(dbPath, client, token, deps = {}) {
|
|
5
|
+
const rows = pendingRows(dbPath, 'github');
|
|
6
|
+
if (rows.length === 0)
|
|
7
|
+
return { enriched: 0, remaining: 0, skips: [] };
|
|
8
|
+
const byUrl = new Map(rows.map((r) => [r.source_url, r]));
|
|
9
|
+
const items = rows.map((r) => ({
|
|
10
|
+
source_url: r.source_url, platform: 'github', raw_text: r.summary, title: r.title,
|
|
11
|
+
...(r.decided_at !== null ? { created_at: r.decided_at, updated_at: r.decided_at } : {}),
|
|
12
|
+
detail_pending: true,
|
|
13
|
+
}));
|
|
14
|
+
const run = deps.drain ?? drainDiscussion;
|
|
15
|
+
const { items: done, skips } = await run(items, {
|
|
16
|
+
token, budget: deps.budget ?? GITHUB_DISCUSSION_BUDGET, deadlineMs: deps.deadlineMs ?? SYNC_TIME_BUDGET_MS,
|
|
17
|
+
});
|
|
18
|
+
const enriched = done.filter((i) => byUrl.has(i.source_url));
|
|
19
|
+
if (enriched.length > 0) {
|
|
20
|
+
const { snapshots } = await client.ingestBatch(enriched.map((i) => {
|
|
21
|
+
const stored = byUrl.get(i.source_url);
|
|
22
|
+
return {
|
|
23
|
+
source_url: i.source_url, platform: 'github', title: stored.title, raw_text: i.raw_text,
|
|
24
|
+
...(stored.decided_at !== null ? { created_at: stored.decided_at } : {}), detail_pending: false,
|
|
25
|
+
};
|
|
26
|
+
}), { classify: false, keyed: true });
|
|
27
|
+
// An attested row keeps its text (the new text is recorded for review), so its flag would
|
|
28
|
+
// stay set and the row would be read again every run. Its discussion HAS been read.
|
|
29
|
+
clearDetailPending(dbPath, snapshots.map((s) => s.id));
|
|
30
|
+
}
|
|
31
|
+
return { enriched: enriched.length, remaining: rows.length - enriched.length, skips };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=drain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.js","sourceRoot":"","sources":["../../../src/lib/sync/drain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type PurgeResult } from './purge.js';
|
|
2
|
+
export interface ForgetResult {
|
|
3
|
+
syncRowsRemoved: number;
|
|
4
|
+
/** Set only with `purge`. */
|
|
5
|
+
purged?: PurgeResult;
|
|
6
|
+
/** Items of the platform still in the graph afterwards. */
|
|
7
|
+
staying: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function forgetSourceData(dbPath: string | undefined, source: string, o: {
|
|
10
|
+
purge: boolean;
|
|
11
|
+
}): ForgetResult;
|
|
12
|
+
//# sourceMappingURL=forget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forget.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/forget.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/E,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAehH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5: what `align local forget <source>` does to the graph, beside dropping the token.
|
|
3
|
+
* Without `--purge`: the source's sync rows and item state go (its window and watermark mean nothing
|
|
4
|
+
* without a token) and the imported items stay; the caller is told how many. With `--purge`: the
|
|
5
|
+
* items nobody has vouched for go too (purge.ts says which are kept and why).
|
|
6
|
+
*
|
|
7
|
+
* ONE transaction: a failure leaves the graph as it was, and the caller drops the token only after
|
|
8
|
+
* this returns, so a failed forget never leaves a token-less source with half its state.
|
|
9
|
+
*/
|
|
10
|
+
import fs from 'node:fs';
|
|
11
|
+
import { createLocalDb } from '../local-db.js';
|
|
12
|
+
import { isPurgeable, previewIn, purgeIn } from './purge.js';
|
|
13
|
+
import { transact } from './sync-state.js';
|
|
14
|
+
export function forgetSourceData(dbPath, source, o) {
|
|
15
|
+
// A graph that does not exist has nothing to forget, and opening it would create it.
|
|
16
|
+
if (dbPath === undefined || !fs.existsSync(dbPath))
|
|
17
|
+
return { syncRowsRemoved: 0, staying: 0, ...(o.purge ? { purged: { deleted: 0, kept: 0 } } : {}) };
|
|
18
|
+
if (o.purge && !isPurgeable(source))
|
|
19
|
+
throw new Error(`"${source.slice(0, 24)}" is not a connector source, so nothing was purged.`);
|
|
20
|
+
// Opening through the one opener migrates an older file (the tables below exist) and refuses a newer one.
|
|
21
|
+
createLocalDb(dbPath).close();
|
|
22
|
+
return transact(dbPath, (db) => {
|
|
23
|
+
const syncRowsRemoved = Number(db.prepare('DELETE FROM source_sync WHERE source_id = ?').run(source).changes);
|
|
24
|
+
db.prepare('DELETE FROM sync_item_state WHERE platform = ?').run(source);
|
|
25
|
+
if (o.purge) {
|
|
26
|
+
const purged = purgeIn(db, source);
|
|
27
|
+
return { syncRowsRemoved, purged, staying: purged.kept };
|
|
28
|
+
}
|
|
29
|
+
return { syncRowsRemoved, staying: previewIn(db, source).total };
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=forget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forget.js","sourceRoot":"","sources":["../../../src/lib/sync/forget.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAU3C,MAAM,UAAU,gBAAgB,CAAC,MAA0B,EAAE,MAAc,EAAE,CAAqB;IAChG,qFAAqF;IACrF,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACvJ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,qDAAqD,CAAC,CAAC;IACnI,0GAA0G;IAC1G,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7B,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9G,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACnC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC"}
|