@aligndottech/cli 0.49.0 → 0.50.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 +4 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -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/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/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/local.d.ts.map +1 -1
- package/dist/commands/local.js +76 -4
- package/dist/commands/local.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 +141 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +72 -14
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +8 -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 +60 -0
- package/dist/commands/share.js.map +1 -0
- 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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.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/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/config.d.ts +31 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +139 -0
- 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 +93 -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 +96 -0
- package/dist/lib/curation/judgements-db.d.ts.map +1 -0
- package/dist/lib/curation/judgements-db.js +200 -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 +359 -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/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 +34 -0
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +19 -1
- 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/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 +151 -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/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 +484 -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-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 +61 -11
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +186 -371
- 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 +30 -87
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +182 -171
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-ingest.d.ts +129 -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 +61 -0
- package/dist/lib/local-link-pass.js.map +1 -0
- package/dist/lib/local-mode.d.ts +4 -1
- package/dist/lib/local-mode.d.ts.map +1 -1
- package/dist/lib/local-mode.js +16 -1
- 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-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/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-tool.d.ts +46 -0
- package/dist/lib/mcp/share-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-tool.js +68 -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/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/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 +42 -0
- package/dist/lib/scope-defaults.js.map +1 -0
- package/dist/lib/scope-real.d.ts +223 -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/share/command.d.ts +32 -0
- package/dist/lib/share/command.d.ts.map +1 -0
- package/dist/lib/share/command.js +136 -0
- package/dist/lib/share/command.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 +135 -0
- package/dist/lib/share/ledger.js.map +1 -0
- package/dist/lib/share/payload.d.ts +92 -0
- package/dist/lib/share/payload.d.ts.map +1 -0
- package/dist/lib/share/payload.js +138 -0
- package/dist/lib/share/payload.js.map +1 -0
- package/dist/lib/share/pending.d.ts +48 -0
- package/dist/lib/share/pending.d.ts.map +1 -0
- package/dist/lib/share/pending.js +130 -0
- package/dist/lib/share/pending.js.map +1 -0
- package/dist/lib/share/preview.d.ts +18 -0
- package/dist/lib/share/preview.d.ts.map +1 -0
- package/dist/lib/share/preview.js +72 -0
- package/dist/lib/share/preview.js.map +1 -0
- package/dist/lib/share/run.d.ts +115 -0
- package/dist/lib/share/run.d.ts.map +1 -0
- package/dist/lib/share/run.js +261 -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 +19 -0
- package/dist/lib/share/secret-scan.d.ts.map +1 -0
- package/dist/lib/share/secret-scan.js +75 -0
- package/dist/lib/share/secret-scan.js.map +1 -0
- package/dist/lib/share/tty.d.ts +4 -0
- package/dist/lib/share/tty.d.ts.map +1 -0
- package/dist/lib/share/tty.js +57 -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 +43 -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 +44 -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 +91 -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 +208 -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 +253 -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 +87 -22
- package/dist/lib/usage-telemetry.d.ts.map +1 -1
- package/dist/lib/usage-telemetry.js +263 -74
- 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 +3 -2
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visible.d.ts","sourceRoot":"","sources":["../../../src/lib/share/visible.ts"],"names":[],"mappings":"AAoBA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAOlF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: make every untrusted string safe to print on a terminal a person is about to answer.
|
|
3
|
+
*
|
|
4
|
+
* A decision's title, text, URL and notes come from sources other people write (a PR title, a Slack
|
|
5
|
+
* thread). Raw, they can carry ESC sequences that rewrite or clear the screen, a bare CR that overwrites
|
|
6
|
+
* the line above, or bidi overrides that reorder what is read, so the preview would show something other
|
|
7
|
+
* than what is sent. Each such character is replaced by a visible escape (`\x1b`, ``), never
|
|
8
|
+
* dropped: dropping would also hide that it was there.
|
|
9
|
+
*
|
|
10
|
+
* Covered, by Unicode category: controls (ESC, CR, tab, NUL, DEL, C1), every format character (bidi
|
|
11
|
+
* overrides and isolates, zero-width, soft hyphen, U+061C, the tag characters U+E0000-E007F), line and
|
|
12
|
+
* paragraph separators, default-ignorable code points (U+034F, U+180E, U+3164, U+FFF9-FFFB) and lone surrogates.
|
|
13
|
+
* `\n` is kept only when the caller asks (the indented body), because it cannot overwrite earlier text.
|
|
14
|
+
*/
|
|
15
|
+
// Unicode categories rather than hand-listed ranges (a hand-written list is guessing at published data):
|
|
16
|
+
// Cc controls (ESC, CR, NUL, C1), Cf format (bidi marks and overrides, zero-width, soft hyphen, ALM, tag
|
|
17
|
+
// characters U+E0000-E007F), Zl/Zp line and paragraph separators, Default_Ignorable_Code_Point (Hangul
|
|
18
|
+
// fillers, U+034F, U+180E, interlinear annotation marks) and Cs, a lone surrogate (needs the u flag).
|
|
19
|
+
const UNSAFE = /[\p{Cc}\p{Cf}\p{Zl}\p{Zp}\p{Default_Ignorable_Code_Point}]|\p{Cs}/gu;
|
|
20
|
+
export function visible(text, opts = {}) {
|
|
21
|
+
return text.replace(UNSAFE, (c) => {
|
|
22
|
+
if (c === '\n' && opts.keepNewline)
|
|
23
|
+
return c;
|
|
24
|
+
const code = c.codePointAt(0);
|
|
25
|
+
if (code <= 0xff)
|
|
26
|
+
return `\\x${code.toString(16).padStart(2, '0')}`;
|
|
27
|
+
return code <= 0xffff ? `\\u${code.toString(16).padStart(4, '0')}` : `\\u{${code.toString(16)}}`;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=visible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visible.js","sourceRoot":"","sources":["../../../src/lib/share/visible.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,yGAAyG;AACzG,yGAAyG;AACzG,uGAAuG;AACvG,sGAAsG;AACtG,MAAM,MAAM,GAAG,qEAAqE,CAAC;AAErF,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAkC,EAAE;IACxE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC/B,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;IACnG,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: the shape POST /ingest/batch answers a SHARE with, read without trusting it.
|
|
3
|
+
*
|
|
4
|
+
* The response is not one snapshot per request item. It carries `snapshots` for what was WRITTEN
|
|
5
|
+
* (each with `request_index`, its position in the request), and the rest by index: `matched`
|
|
6
|
+
* (attached to a decision the team already held, nothing created), `skipped` (a re-share left alone),
|
|
7
|
+
* `refused` (the identity belongs to a decision the caller cannot see), `match_ambiguous` (several
|
|
8
|
+
* team decisions share the source key, so the item was created as new) and `judgements` (one report
|
|
9
|
+
* per target, one result per judgement). Reading `snapshots[0]` as "the decision I shared" is wrong
|
|
10
|
+
* whenever any of those is present. This module turns the response into exactly one outcome per
|
|
11
|
+
* request item, and an item the response never mentions is `unknown`, never "created".
|
|
12
|
+
*/
|
|
13
|
+
export interface JudgementResult {
|
|
14
|
+
ok: boolean;
|
|
15
|
+
stored?: boolean;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface BatchResponse {
|
|
19
|
+
snapshots?: Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
summary?: string;
|
|
23
|
+
request_index?: number;
|
|
24
|
+
is_new?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
skipped?: Array<{
|
|
27
|
+
index: number;
|
|
28
|
+
reason: string;
|
|
29
|
+
existing_id: string;
|
|
30
|
+
}>;
|
|
31
|
+
matched?: Array<{
|
|
32
|
+
request_index: number;
|
|
33
|
+
existing_id: string;
|
|
34
|
+
status?: string;
|
|
35
|
+
team_text_hash?: string;
|
|
36
|
+
needs_confirmation?: Array<{
|
|
37
|
+
kind: string;
|
|
38
|
+
judgement_index: number;
|
|
39
|
+
}>;
|
|
40
|
+
}>;
|
|
41
|
+
match_ambiguous?: number[];
|
|
42
|
+
refused?: Array<{
|
|
43
|
+
request_index: number;
|
|
44
|
+
reason: string;
|
|
45
|
+
}>;
|
|
46
|
+
judgements?: Array<{
|
|
47
|
+
request_index: number;
|
|
48
|
+
decision_id: string;
|
|
49
|
+
results: JudgementResult[];
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
export interface JudgementFailure {
|
|
53
|
+
index: number;
|
|
54
|
+
error: string;
|
|
55
|
+
}
|
|
56
|
+
interface Common {
|
|
57
|
+
index: number;
|
|
58
|
+
/** One result per judgement sent, or null when the gateway reported none (an older gateway ignores the field). */
|
|
59
|
+
judgements: JudgementResult[] | null;
|
|
60
|
+
}
|
|
61
|
+
export type ItemOutcome = (Common & {
|
|
62
|
+
kind: 'created';
|
|
63
|
+
remoteId: string;
|
|
64
|
+
ambiguous: boolean;
|
|
65
|
+
uncertain: boolean;
|
|
66
|
+
}) | (Common & {
|
|
67
|
+
kind: 'updated';
|
|
68
|
+
remoteId: string;
|
|
69
|
+
}) | (Common & {
|
|
70
|
+
kind: 'matched';
|
|
71
|
+
remoteId: string;
|
|
72
|
+
status: string;
|
|
73
|
+
teamTextHash: string | null;
|
|
74
|
+
needsConfirmation: Array<{
|
|
75
|
+
kind: string;
|
|
76
|
+
judgement_index: number;
|
|
77
|
+
}>;
|
|
78
|
+
}) | (Common & {
|
|
79
|
+
kind: 'skipped';
|
|
80
|
+
remoteId: string;
|
|
81
|
+
reason: string;
|
|
82
|
+
}) | {
|
|
83
|
+
kind: 'refused';
|
|
84
|
+
index: number;
|
|
85
|
+
reason: string;
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'unknown';
|
|
88
|
+
index: number;
|
|
89
|
+
};
|
|
90
|
+
export declare function failedJudgements(results: JudgementResult[] | null): JudgementFailure[];
|
|
91
|
+
/**
|
|
92
|
+
* One outcome per request item. `sent` is how many items the request carried. A response whose
|
|
93
|
+
* snapshots carry no `request_index` (a gateway before the field) is index-aligned ONLY when nothing
|
|
94
|
+
* was matched, skipped or refused and the counts agree; otherwise those items are `unknown`.
|
|
95
|
+
*/
|
|
96
|
+
export declare function readOutcomes(sent: number, res: BatchResponse): ItemOutcome[];
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/lib/share/wire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export function failedJudgements(results) {
|
|
2
|
+
return (results ?? []).flatMap((r, index) => (r.ok ? [] : [{ index, error: r.error ?? 'failed' }]));
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* One outcome per request item. `sent` is how many items the request carried. A response whose
|
|
6
|
+
* snapshots carry no `request_index` (a gateway before the field) is index-aligned ONLY when nothing
|
|
7
|
+
* was matched, skipped or refused and the counts agree; otherwise those items are `unknown`.
|
|
8
|
+
*/
|
|
9
|
+
export function readOutcomes(sent, res) {
|
|
10
|
+
const snapshots = res.snapshots ?? [];
|
|
11
|
+
const judged = new Map((res.judgements ?? []).map((j) => [j.request_index, j.results]));
|
|
12
|
+
const reportFor = (index) => judged.get(index) ?? null;
|
|
13
|
+
const ambiguous = new Set(res.match_ambiguous ?? []);
|
|
14
|
+
const out = new Map();
|
|
15
|
+
for (const r of res.refused ?? [])
|
|
16
|
+
out.set(r.request_index, { kind: 'refused', index: r.request_index, reason: r.reason });
|
|
17
|
+
for (const m of res.matched ?? []) {
|
|
18
|
+
out.set(m.request_index, {
|
|
19
|
+
kind: 'matched', index: m.request_index, remoteId: m.existing_id, status: m.status ?? 'unknown',
|
|
20
|
+
teamTextHash: m.team_text_hash ?? null, needsConfirmation: m.needs_confirmation ?? [], judgements: reportFor(m.request_index),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
for (const s of res.skipped ?? []) {
|
|
24
|
+
out.set(s.index, { kind: 'skipped', index: s.index, remoteId: s.existing_id, reason: s.reason, judgements: reportFor(s.index) });
|
|
25
|
+
}
|
|
26
|
+
const untagged = snapshots.some((s) => s.request_index === undefined);
|
|
27
|
+
const aligned = untagged && snapshots.length === sent && out.size === 0;
|
|
28
|
+
snapshots.forEach((s, k) => {
|
|
29
|
+
const index = s.request_index ?? (aligned ? k : undefined);
|
|
30
|
+
if (index === undefined || out.has(index))
|
|
31
|
+
return;
|
|
32
|
+
// `created` is only believed when the gateway said so in so many words: a request_index AND is_new === true.
|
|
33
|
+
// A gateway before share matching (self-host older than 0.46.0) sends neither, so a row it REUSED at that
|
|
34
|
+
// source looks identical to a new one. Retracting it would archive somebody else's decision, so it is
|
|
35
|
+
// `uncertain` and recorded as not ours.
|
|
36
|
+
const sure = s.request_index !== undefined && s.is_new === true;
|
|
37
|
+
out.set(index, s.is_new === false
|
|
38
|
+
? { kind: 'updated', index, remoteId: s.id, judgements: reportFor(index) }
|
|
39
|
+
: { kind: 'created', index, remoteId: s.id, ambiguous: ambiguous.has(index), uncertain: !sure, judgements: reportFor(index) });
|
|
40
|
+
});
|
|
41
|
+
return Array.from({ length: sent }, (_, index) => out.get(index) ?? { kind: 'unknown', index });
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/lib/share/wire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An in-memory copy of every stored embedding, held as ONE contiguous Float32Array, with an
|
|
3
|
+
* exhaustive top-K scan over it (plan LB, decision 26).
|
|
4
|
+
*
|
|
5
|
+
* Why it exists: ingest ranked each new item against the whole graph by re-reading every
|
|
6
|
+
* stored vector out of SQLite, decoding it, and cosine-scoring it, once per item. Measured
|
|
7
|
+
* (profile at 5,000 rows): read and decode 5.7 ms, cosine 1.9 ms, sort 0.4 ms per item, and
|
|
8
|
+
* the read grows with the graph, so a batch was quadratic. Loading once per run and appending
|
|
9
|
+
* as items land removes the read; scoring against precomputed norms removes two thirds of the
|
|
10
|
+
* arithmetic. The scan stays EXHAUSTIVE - narrowing candidates would drop the cross-tool links
|
|
11
|
+
* the product exists for - so results must equal the old scan exactly. They do: the dot
|
|
12
|
+
* product accumulates in the same order as cosineSimilarity and divides by the same
|
|
13
|
+
* sqrt(normQuery) * sqrt(normRow), so every score is bit-identical, not merely close.
|
|
14
|
+
*
|
|
15
|
+
* Pure: no database, no model. The caller decides which rows go in.
|
|
16
|
+
*/
|
|
17
|
+
export interface Scored {
|
|
18
|
+
decisionId: string;
|
|
19
|
+
score: number;
|
|
20
|
+
}
|
|
21
|
+
/** Anything that can rank the graph against a query: the matrix, or the streaming scan that
|
|
22
|
+
* stands in for it on a graph too large to hold in memory. */
|
|
23
|
+
export interface Ranker {
|
|
24
|
+
topK(query: Float32Array, k: number, opts?: {
|
|
25
|
+
excludeId?: string;
|
|
26
|
+
threshold?: number;
|
|
27
|
+
}): Scored[] | Promise<Scored[]>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Above this many stored embeddings ingest does not build a matrix and ranks by streaming the
|
|
31
|
+
* table per item, as it did before the matrix existed. Memory: a 384-dim row is 1,536 bytes of
|
|
32
|
+
* Float32 plus its id and norm, so about 1.5 KB per row, i.e. roughly 230 MB at 150,000 rows.
|
|
33
|
+
* Building reads every row out of SQLite first, so the transient peak is about 2.5x the
|
|
34
|
+
* matrix (the decoded rows, the contiguous copy, and growth headroom) until the rows are
|
|
35
|
+
* released. The cap keeps that peak near 600 MB. Measured graphs are in the thousands of rows;
|
|
36
|
+
* this is a guard for the pathological case, not a tuning knob.
|
|
37
|
+
*/
|
|
38
|
+
export declare const MATRIX_MAX_ROWS = 150000;
|
|
39
|
+
/** The one writer of the "different model" error, shared with cosineSimilarity. */
|
|
40
|
+
export declare function embeddingLengthMismatch(a: number, b: number): Error;
|
|
41
|
+
export declare class EmbeddingMatrix implements Ranker {
|
|
42
|
+
private dim;
|
|
43
|
+
private data;
|
|
44
|
+
private sqrtNorms;
|
|
45
|
+
private ids;
|
|
46
|
+
private index;
|
|
47
|
+
static fromRows(rows: Array<{
|
|
48
|
+
decisionId: string;
|
|
49
|
+
embedding: Float32Array;
|
|
50
|
+
}>): EmbeddingMatrix;
|
|
51
|
+
get size(): number;
|
|
52
|
+
/** Adds a row, or replaces the vector of an id already held (setEmbedding is INSERT OR
|
|
53
|
+
* REPLACE, so the matrix must never hold two vectors for one decision). */
|
|
54
|
+
add(decisionId: string, embedding: Float32Array): void;
|
|
55
|
+
/** The `k` best rows by cosine, best first; equal scores order by id in code-unit order.
|
|
56
|
+
* Rows scoring below `threshold` are dropped (default: none are; findSimilar passed 0). */
|
|
57
|
+
topK(query: Float32Array, k: number, opts?: {
|
|
58
|
+
excludeId?: string;
|
|
59
|
+
threshold?: number;
|
|
60
|
+
}): Scored[];
|
|
61
|
+
private outranks;
|
|
62
|
+
private grow;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=embedding-matrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-matrix.d.ts","sourceRoot":"","sources":["../../../src/lib/similarity/embedding-matrix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,MAAM;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAE7D;+DAC+D;AAC/D,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACvH;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,SAAU,CAAC;AAEvC,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAKnE;AAID,qBAAa,eAAgB,YAAW,MAAM;IAC5C,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,KAAK,CAA6B;IAE1C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG,eAAe;IAM9F,IAAI,IAAI,IAAI,MAAM,CAA4B;IAE9C;gFAC4E;IAC5E,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAgBtD;gGAC4F;IAC5F,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM,EAAE;IAgCrG,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,IAAI;CAQb"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An in-memory copy of every stored embedding, held as ONE contiguous Float32Array, with an
|
|
3
|
+
* exhaustive top-K scan over it (plan LB, decision 26).
|
|
4
|
+
*
|
|
5
|
+
* Why it exists: ingest ranked each new item against the whole graph by re-reading every
|
|
6
|
+
* stored vector out of SQLite, decoding it, and cosine-scoring it, once per item. Measured
|
|
7
|
+
* (profile at 5,000 rows): read and decode 5.7 ms, cosine 1.9 ms, sort 0.4 ms per item, and
|
|
8
|
+
* the read grows with the graph, so a batch was quadratic. Loading once per run and appending
|
|
9
|
+
* as items land removes the read; scoring against precomputed norms removes two thirds of the
|
|
10
|
+
* arithmetic. The scan stays EXHAUSTIVE - narrowing candidates would drop the cross-tool links
|
|
11
|
+
* the product exists for - so results must equal the old scan exactly. They do: the dot
|
|
12
|
+
* product accumulates in the same order as cosineSimilarity and divides by the same
|
|
13
|
+
* sqrt(normQuery) * sqrt(normRow), so every score is bit-identical, not merely close.
|
|
14
|
+
*
|
|
15
|
+
* Pure: no database, no model. The caller decides which rows go in.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Above this many stored embeddings ingest does not build a matrix and ranks by streaming the
|
|
19
|
+
* table per item, as it did before the matrix existed. Memory: a 384-dim row is 1,536 bytes of
|
|
20
|
+
* Float32 plus its id and norm, so about 1.5 KB per row, i.e. roughly 230 MB at 150,000 rows.
|
|
21
|
+
* Building reads every row out of SQLite first, so the transient peak is about 2.5x the
|
|
22
|
+
* matrix (the decoded rows, the contiguous copy, and growth headroom) until the rows are
|
|
23
|
+
* released. The cap keeps that peak near 600 MB. Measured graphs are in the thousands of rows;
|
|
24
|
+
* this is a guard for the pathological case, not a tuning knob.
|
|
25
|
+
*/
|
|
26
|
+
export const MATRIX_MAX_ROWS = 150_000;
|
|
27
|
+
/** The one writer of the "different model" error, shared with cosineSimilarity. */
|
|
28
|
+
export function embeddingLengthMismatch(a, b) {
|
|
29
|
+
return new Error(`Embedding length mismatch: ${a} vs ${b}. The local graph holds a vector ` +
|
|
30
|
+
'from a different model - run `align local reset` and re-import to rebuild it.');
|
|
31
|
+
}
|
|
32
|
+
const INITIAL_ROWS = 256;
|
|
33
|
+
export class EmbeddingMatrix {
|
|
34
|
+
dim = -1;
|
|
35
|
+
data = new Float32Array(0);
|
|
36
|
+
sqrtNorms = new Float64Array(0);
|
|
37
|
+
ids = [];
|
|
38
|
+
index = new Map();
|
|
39
|
+
static fromRows(rows) {
|
|
40
|
+
const m = new EmbeddingMatrix();
|
|
41
|
+
for (const r of rows)
|
|
42
|
+
m.add(r.decisionId, r.embedding);
|
|
43
|
+
return m;
|
|
44
|
+
}
|
|
45
|
+
get size() { return this.ids.length; }
|
|
46
|
+
/** Adds a row, or replaces the vector of an id already held (setEmbedding is INSERT OR
|
|
47
|
+
* REPLACE, so the matrix must never hold two vectors for one decision). */
|
|
48
|
+
add(decisionId, embedding) {
|
|
49
|
+
if (this.dim === -1)
|
|
50
|
+
this.dim = embedding.length;
|
|
51
|
+
else if (embedding.length !== this.dim)
|
|
52
|
+
throw embeddingLengthMismatch(embedding.length, this.dim);
|
|
53
|
+
let row = this.index.get(decisionId);
|
|
54
|
+
if (row === undefined) {
|
|
55
|
+
row = this.ids.length;
|
|
56
|
+
if ((row + 1) * this.dim > this.data.length)
|
|
57
|
+
this.grow(Math.max(INITIAL_ROWS, row * 2));
|
|
58
|
+
this.ids.push(decisionId);
|
|
59
|
+
this.index.set(decisionId, row);
|
|
60
|
+
}
|
|
61
|
+
this.data.set(embedding, row * this.dim);
|
|
62
|
+
let norm = 0;
|
|
63
|
+
for (let i = 0; i < this.dim; i++)
|
|
64
|
+
norm += embedding[i] * embedding[i];
|
|
65
|
+
this.sqrtNorms[row] = Math.sqrt(norm);
|
|
66
|
+
}
|
|
67
|
+
/** The `k` best rows by cosine, best first; equal scores order by id in code-unit order.
|
|
68
|
+
* Rows scoring below `threshold` are dropped (default: none are; findSimilar passed 0). */
|
|
69
|
+
topK(query, k, opts = {}) {
|
|
70
|
+
const n = this.ids.length;
|
|
71
|
+
if (n === 0 || k <= 0)
|
|
72
|
+
return [];
|
|
73
|
+
if (query.length !== this.dim)
|
|
74
|
+
throw embeddingLengthMismatch(query.length, this.dim);
|
|
75
|
+
const threshold = opts.threshold ?? -Infinity;
|
|
76
|
+
const skip = opts.excludeId === undefined ? -1 : (this.index.get(opts.excludeId) ?? -1);
|
|
77
|
+
let normQ = 0;
|
|
78
|
+
for (let i = 0; i < this.dim; i++)
|
|
79
|
+
normQ += query[i] * query[i];
|
|
80
|
+
const sqrtQ = Math.sqrt(normQ);
|
|
81
|
+
const best = [];
|
|
82
|
+
const dim = this.dim, data = this.data;
|
|
83
|
+
for (let r = 0; r < n; r++) {
|
|
84
|
+
if (r === skip)
|
|
85
|
+
continue;
|
|
86
|
+
const base = r * dim;
|
|
87
|
+
let dot = 0;
|
|
88
|
+
for (let i = 0; i < dim; i++)
|
|
89
|
+
dot += query[i] * data[base + i];
|
|
90
|
+
const denom = sqrtQ * this.sqrtNorms[r];
|
|
91
|
+
const score = denom === 0 ? 0 : dot / denom;
|
|
92
|
+
if (!(score >= threshold))
|
|
93
|
+
continue;
|
|
94
|
+
if (best.length === k && !this.outranks(score, this.ids[r], best[k - 1]))
|
|
95
|
+
continue;
|
|
96
|
+
// Insertion into a list of at most k: k is 10 in ingest, so this beats any heap.
|
|
97
|
+
let pos = best.length === k ? k - 1 : best.length;
|
|
98
|
+
while (pos > 0 && this.outranks(score, this.ids[r], best[pos - 1])) {
|
|
99
|
+
if (pos < k)
|
|
100
|
+
best[pos] = best[pos - 1];
|
|
101
|
+
pos--;
|
|
102
|
+
}
|
|
103
|
+
best[pos] = { decisionId: this.ids[r], score };
|
|
104
|
+
}
|
|
105
|
+
return best;
|
|
106
|
+
}
|
|
107
|
+
outranks(score, id, other) {
|
|
108
|
+
return score > other.score || (score === other.score && id < other.decisionId);
|
|
109
|
+
}
|
|
110
|
+
grow(rows) {
|
|
111
|
+
const data = new Float32Array(rows * this.dim);
|
|
112
|
+
data.set(this.data);
|
|
113
|
+
this.data = data;
|
|
114
|
+
const norms = new Float64Array(rows);
|
|
115
|
+
norms.set(this.sqrtNorms);
|
|
116
|
+
this.sqrtNorms = norms;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=embedding-matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-matrix.js","sourceRoot":"","sources":["../../../src/lib/similarity/embedding-matrix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type SyncWindow } from './since.js';
|
|
2
|
+
/** The help line for `--since`, one writer for every command that takes it. */
|
|
3
|
+
export declare const SINCE_HELP = "How far back to read: 30d, 2w, 6m, 1y or all (default 180 days). A ceiling still applies";
|
|
4
|
+
/**
|
|
5
|
+
* L3: the CLI end of the one duration parser. A bad value exits 2 (usage error) naming the
|
|
6
|
+
* accepted forms, before any request is made: a window the user did not mean would be read
|
|
7
|
+
* and reported as complete. `align_backfill` calls parseSince directly and returns the same
|
|
8
|
+
* message as a tool error.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sinceFromFlag(raw: string | undefined, now?: Date): SyncWindow;
|
|
11
|
+
//# sourceMappingURL=since-flag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"since-flag.d.ts","sourceRoot":"","sources":["../../src/lib/since-flag.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAErE,+EAA+E;AAC/E,eAAO,MAAM,UAAU,6FAA6F,CAAC;AAErH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,UAAU,CASzF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { trackChildFromEnv } from './backfill-state.js';
|
|
3
|
+
import { parseSince, SinceError } from './since.js';
|
|
4
|
+
/** The help line for `--since`, one writer for every command that takes it. */
|
|
5
|
+
export const SINCE_HELP = 'How far back to read: 30d, 2w, 6m, 1y or all (default 180 days). A ceiling still applies';
|
|
6
|
+
/**
|
|
7
|
+
* L3: the CLI end of the one duration parser. A bad value exits 2 (usage error) naming the
|
|
8
|
+
* accepted forms, before any request is made: a window the user did not mean would be read
|
|
9
|
+
* and reported as complete. `align_backfill` calls parseSince directly and returns the same
|
|
10
|
+
* message as a tool error.
|
|
11
|
+
*/
|
|
12
|
+
export function sinceFromFlag(raw, now = new Date()) {
|
|
13
|
+
try {
|
|
14
|
+
return parseSince(raw, now);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
if (!(e instanceof SinceError))
|
|
18
|
+
throw e;
|
|
19
|
+
trackChildFromEnv()?.note(e.message); // a backfill child records why it ended
|
|
20
|
+
console.error(chalk.red(`align connect: ${e.message}`));
|
|
21
|
+
return process.exit(2);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=since-flag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"since-flag.js","sourceRoot":"","sources":["../../src/lib/since-flag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AAErE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG,0FAA0F,CAAC;AAErH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAuB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC3E,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC;YAAE,MAAM,CAAC,CAAC;QACxC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC;QAC9E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L3: the ONE parser for how far back an import reads. `align connect --since` and the MCP
|
|
3
|
+
* tool `align_backfill` both call it, so the two surfaces cannot accept different spellings
|
|
4
|
+
* of the same window (code-style.md: two readers of one format must agree).
|
|
5
|
+
*
|
|
6
|
+
* Accepted: `Nd`, `Nw`, `Nm` (a month is 30.4 days, rounded), `Ny`, and `all`. Anything else
|
|
7
|
+
* is a SinceError: a window the user did not mean is worse than a refusal, because the
|
|
8
|
+
* report would still say the read was complete.
|
|
9
|
+
*/
|
|
10
|
+
import { type SourceId } from './import-defaults.js';
|
|
11
|
+
import type { ScopeFetchOpts } from './scope-values.js';
|
|
12
|
+
export declare const ACCEPTED_SINCE_FORMS = "30d, 2w, 6m, 1y or all";
|
|
13
|
+
export declare class SinceError extends Error {
|
|
14
|
+
constructor(raw: string, why: string);
|
|
15
|
+
}
|
|
16
|
+
export interface SyncWindow {
|
|
17
|
+
/** Days back from now. Absent for `all`. */
|
|
18
|
+
days?: number;
|
|
19
|
+
/** ISO-8601 UTC lower bound for the SDK's `since`. Absent for `all`: only the ceiling applies. */
|
|
20
|
+
since?: string;
|
|
21
|
+
}
|
|
22
|
+
/** `undefined` means the flag was not passed: the plan default applies. */
|
|
23
|
+
export declare function parseSince(raw: string | undefined, now?: Date): SyncWindow;
|
|
24
|
+
/**
|
|
25
|
+
* The phrase the capture report prints. Exact: "the last 6 months" only for a window that IS
|
|
26
|
+
* what `6m` parses to (182 days). The default is 180 days and reads "the last 180 days", so two
|
|
27
|
+
* different reads never share a label. A month or year label needs the day count to be exactly
|
|
28
|
+
* what that many months or years parse to; anything else is said in days.
|
|
29
|
+
*/
|
|
30
|
+
export declare function windowLabel(days: number | undefined): string;
|
|
31
|
+
/**
|
|
32
|
+
* The options every windowed fetch gets: this source's ceiling, the shared time budget and the
|
|
33
|
+
* window's lower bound. `since` is OMITTED for `all`, never set to undefined, so the SDK sees no
|
|
34
|
+
* bound at all. The one reader of SYNC_CEILINGS for a fetch (import-defaults.test.ts pins it).
|
|
35
|
+
*/
|
|
36
|
+
export declare function fetchWindow(id: SourceId, window: SyncWindow): {
|
|
37
|
+
limit: number;
|
|
38
|
+
timeBudgetMs: number;
|
|
39
|
+
since?: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* What a source's fetch is handed beyond the window: L5's `until` and Slack `hotThreads`, and L4's team-scope option (Jira `projects`,
|
|
43
|
+
* Linear `teams`, GitLab `projectId`, Confluence `spaces`). `team` and `repo` are GitHub's, read by its closure in setup.ts.
|
|
44
|
+
*/
|
|
45
|
+
export interface FetchExtras extends ScopeFetchOpts {
|
|
46
|
+
until?: string;
|
|
47
|
+
hotThreads?: Array<{
|
|
48
|
+
channel: string;
|
|
49
|
+
ts: string;
|
|
50
|
+
}>;
|
|
51
|
+
team?: boolean;
|
|
52
|
+
/** GitHub team scope: the repo. */
|
|
53
|
+
repo?: string;
|
|
54
|
+
/** True when the caller has already decided the scope (repo or none): the fetch must not look at the folder itself. */
|
|
55
|
+
resolved?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** The optional extras a fetch adds to the window itself. Omitted keys stay omitted. */
|
|
58
|
+
export declare function windowExtras(o?: FetchExtras): FetchExtras;
|
|
59
|
+
//# sourceMappingURL=since.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"since.d.ts","sourceRoot":"","sources":["../../src/lib/since.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAgE,MAAM,sBAAsB,CAAC;AACnH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAS7D,qBAAa,UAAW,SAAQ,KAAK;gBACvB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAKrC;AAED,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,UAAU,CAUtF;AAMD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQ5D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAMrH;AAED;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uHAAuH;IACvH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CASzD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L3: the ONE parser for how far back an import reads. `align connect --since` and the MCP
|
|
3
|
+
* tool `align_backfill` both call it, so the two surfaces cannot accept different spellings
|
|
4
|
+
* of the same window (code-style.md: two readers of one format must agree).
|
|
5
|
+
*
|
|
6
|
+
* Accepted: `Nd`, `Nw`, `Nm` (a month is 30.4 days, rounded), `Ny`, and `all`. Anything else
|
|
7
|
+
* is a SinceError: a window the user did not mean is worse than a refusal, because the
|
|
8
|
+
* report would still say the read was complete.
|
|
9
|
+
*/
|
|
10
|
+
import { SYNC_CEILINGS, SYNC_TIME_BUDGET_MS, SYNC_WINDOW_DEFAULT_DAYS } from './import-defaults.js';
|
|
11
|
+
export const ACCEPTED_SINCE_FORMS = '30d, 2w, 6m, 1y or all';
|
|
12
|
+
const DAY_MS = 86_400_000;
|
|
13
|
+
const MONTH_DAYS = 30.4;
|
|
14
|
+
const DAYS_PER_UNIT = { d: 1, w: 7, m: MONTH_DAYS, y: 365 };
|
|
15
|
+
// The SDK refuses a window that starts before 1970 (a `shape` skip, nothing read). Refusing
|
|
16
|
+
// it here turns that into a message naming the accepted forms instead of a skip line.
|
|
17
|
+
const EPOCH_MS = Date.UTC(1970, 0, 1);
|
|
18
|
+
export class SinceError extends Error {
|
|
19
|
+
constructor(raw, why) {
|
|
20
|
+
// Cut: a pasted secret in the wrong field must not ride along into an error transcript.
|
|
21
|
+
super(`Cannot read "${raw.slice(0, 16)}" as how far back to look: ${why}. Use ${ACCEPTED_SINCE_FORMS}.`);
|
|
22
|
+
this.name = 'SinceError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** `undefined` means the flag was not passed: the plan default applies. */
|
|
26
|
+
export function parseSince(raw, now = new Date()) {
|
|
27
|
+
if (raw === undefined)
|
|
28
|
+
return windowOfDays(SYNC_WINDOW_DEFAULT_DAYS, now);
|
|
29
|
+
const text = raw.trim().toLowerCase();
|
|
30
|
+
if (text === 'all')
|
|
31
|
+
return {};
|
|
32
|
+
const m = /^(\d+)([dwmy])$/.exec(text);
|
|
33
|
+
if (!m)
|
|
34
|
+
throw new SinceError(raw, 'it is not a whole number followed by d, w, m or y');
|
|
35
|
+
const days = Math.round(Number(m[1]) * DAYS_PER_UNIT[m[2]]);
|
|
36
|
+
if (days < 1)
|
|
37
|
+
throw new SinceError(raw, 'it is not a positive length of time');
|
|
38
|
+
if (now.getTime() - days * DAY_MS < EPOCH_MS)
|
|
39
|
+
throw new SinceError(raw, 'it reaches back before 1970');
|
|
40
|
+
return windowOfDays(days, now);
|
|
41
|
+
}
|
|
42
|
+
function windowOfDays(days, now) {
|
|
43
|
+
return { days, since: new Date(now.getTime() - days * DAY_MS).toISOString() };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The phrase the capture report prints. Exact: "the last 6 months" only for a window that IS
|
|
47
|
+
* what `6m` parses to (182 days). The default is 180 days and reads "the last 180 days", so two
|
|
48
|
+
* different reads never share a label. A month or year label needs the day count to be exactly
|
|
49
|
+
* what that many months or years parse to; anything else is said in days.
|
|
50
|
+
*/
|
|
51
|
+
export function windowLabel(days) {
|
|
52
|
+
if (days === undefined)
|
|
53
|
+
return 'all the history the ceiling allowed';
|
|
54
|
+
const plural = (n, unit) => `${n} ${unit}${n === 1 ? '' : 's'}`;
|
|
55
|
+
// Years first: 3y is 1095 days, which 36 months (1094) does not round-trip to.
|
|
56
|
+
if (days % 365 === 0)
|
|
57
|
+
return `the last ${plural(days / 365, 'year')}`;
|
|
58
|
+
const months = Math.round(days / MONTH_DAYS);
|
|
59
|
+
if (months >= 2 && Math.round(months * MONTH_DAYS) === days)
|
|
60
|
+
return `the last ${plural(months, 'month')}`;
|
|
61
|
+
return `the last ${plural(days, 'day')}`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The options every windowed fetch gets: this source's ceiling, the shared time budget and the
|
|
65
|
+
* window's lower bound. `since` is OMITTED for `all`, never set to undefined, so the SDK sees no
|
|
66
|
+
* bound at all. The one reader of SYNC_CEILINGS for a fetch (import-defaults.test.ts pins it).
|
|
67
|
+
*/
|
|
68
|
+
export function fetchWindow(id, window) {
|
|
69
|
+
return {
|
|
70
|
+
limit: SYNC_CEILINGS[id],
|
|
71
|
+
timeBudgetMs: SYNC_TIME_BUDGET_MS,
|
|
72
|
+
...(window.since !== undefined ? { since: window.since } : {}),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** The optional extras a fetch adds to the window itself. Omitted keys stay omitted. */
|
|
76
|
+
export function windowExtras(o) {
|
|
77
|
+
return {
|
|
78
|
+
...(o?.until !== undefined ? { until: o.until } : {}),
|
|
79
|
+
...(o?.hotThreads !== undefined && o.hotThreads.length > 0 ? { hotThreads: o.hotThreads } : {}),
|
|
80
|
+
...(o?.projects !== undefined ? { projects: o.projects } : {}),
|
|
81
|
+
...(o?.teams !== undefined ? { teams: o.teams } : {}),
|
|
82
|
+
...(o?.projectId !== undefined ? { projectId: o.projectId } : {}),
|
|
83
|
+
...(o?.spaces !== undefined ? { spaces: o.spaces } : {}),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=since.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"since.js","sourceRoot":"","sources":["../../src/lib/since.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { normaliseSourceKey } from '@aligndottech/connector-core';
|
|
2
|
+
/** Every platform a connector import can key. */
|
|
3
|
+
export declare const KEYED_PLATFORMS: readonly string[];
|
|
4
|
+
/**
|
|
5
|
+
* The key stored in `decisions.source_key`, or undefined (the row keeps its
|
|
6
|
+
* (source_url, title) identity). The platform is part of the stored string, so a `git` import
|
|
7
|
+
* and a `github` row for the same commit URL are different items and never merge.
|
|
8
|
+
*
|
|
9
|
+
* Only a connector import is ever given one (callers decide that; see insertDecision's
|
|
10
|
+
* `keyed`). The platform alone cannot say: `align capture <PR url>` also stamps `github`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function connectorItemKey(platform: string, url: string | null | undefined): string | undefined;
|
|
13
|
+
//# sourceMappingURL=source-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-key.d.ts","sourceRoot":"","sources":["../../src/lib/source-key.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAkBlE,iDAAiD;AACjD,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA6B,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUrG"}
|