memkin 0.4.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/LICENSE +191 -0
- package/README.en.md +934 -0
- package/README.md +934 -0
- package/README.zh-CN.md +825 -0
- package/bin/memkin.mjs +41 -0
- package/dist/adapters/file.d.ts +19 -0
- package/dist/adapters/file.d.ts.map +1 -0
- package/dist/adapters/file.js +61 -0
- package/dist/adapters/file.js.map +1 -0
- package/dist/adapters/gbrain.d.ts +29 -0
- package/dist/adapters/gbrain.d.ts.map +1 -0
- package/dist/adapters/gbrain.js +622 -0
- package/dist/adapters/gbrain.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/registry.d.ts +18 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +18 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/stdout.d.ts +12 -0
- package/dist/adapters/stdout.d.ts.map +1 -0
- package/dist/adapters/stdout.js +29 -0
- package/dist/adapters/stdout.js.map +1 -0
- package/dist/adapters/store.d.ts +47 -0
- package/dist/adapters/store.d.ts.map +1 -0
- package/dist/adapters/store.js +642 -0
- package/dist/adapters/store.js.map +1 -0
- package/dist/cli-helpers.d.ts +12 -0
- package/dist/cli-helpers.d.ts.map +1 -0
- package/dist/cli-helpers.js +11 -0
- package/dist/cli-helpers.js.map +1 -0
- package/dist/cli-stores.d.ts +61 -0
- package/dist/cli-stores.d.ts.map +1 -0
- package/dist/cli-stores.js +130 -0
- package/dist/cli-stores.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1579 -0
- package/dist/cli.js.map +1 -0
- package/dist/collectors/agent/claude-code.d.ts +12 -0
- package/dist/collectors/agent/claude-code.d.ts.map +1 -0
- package/dist/collectors/agent/claude-code.js +94 -0
- package/dist/collectors/agent/claude-code.js.map +1 -0
- package/dist/collectors/agent/codex.d.ts +16 -0
- package/dist/collectors/agent/codex.d.ts.map +1 -0
- package/dist/collectors/agent/codex.js +149 -0
- package/dist/collectors/agent/codex.js.map +1 -0
- package/dist/collectors/agent/collector.d.ts +20 -0
- package/dist/collectors/agent/collector.d.ts.map +1 -0
- package/dist/collectors/agent/collector.js +108 -0
- package/dist/collectors/agent/collector.js.map +1 -0
- package/dist/collectors/agent/hermes.d.ts +13 -0
- package/dist/collectors/agent/hermes.d.ts.map +1 -0
- package/dist/collectors/agent/hermes.js +90 -0
- package/dist/collectors/agent/hermes.js.map +1 -0
- package/dist/collectors/agent/index.d.ts +6 -0
- package/dist/collectors/agent/index.d.ts.map +1 -0
- package/dist/collectors/agent/index.js +5 -0
- package/dist/collectors/agent/index.js.map +1 -0
- package/dist/collectors/agent/types.d.ts +61 -0
- package/dist/collectors/agent/types.d.ts.map +1 -0
- package/dist/collectors/agent/types.js +6 -0
- package/dist/collectors/agent/types.js.map +1 -0
- package/dist/collectors/feishu/auth.d.ts +13 -0
- package/dist/collectors/feishu/auth.d.ts.map +1 -0
- package/dist/collectors/feishu/auth.js +72 -0
- package/dist/collectors/feishu/auth.js.map +1 -0
- package/dist/collectors/feishu/chat-name-resolver.d.ts +33 -0
- package/dist/collectors/feishu/chat-name-resolver.d.ts.map +1 -0
- package/dist/collectors/feishu/chat-name-resolver.js +63 -0
- package/dist/collectors/feishu/chat-name-resolver.js.map +1 -0
- package/dist/collectors/feishu/collector.d.ts +27 -0
- package/dist/collectors/feishu/collector.d.ts.map +1 -0
- package/dist/collectors/feishu/collector.js +136 -0
- package/dist/collectors/feishu/collector.js.map +1 -0
- package/dist/collectors/feishu/cursor-staging.d.ts +11 -0
- package/dist/collectors/feishu/cursor-staging.d.ts.map +1 -0
- package/dist/collectors/feishu/cursor-staging.js +37 -0
- package/dist/collectors/feishu/cursor-staging.js.map +1 -0
- package/dist/collectors/feishu/docs/blocks.d.ts +25 -0
- package/dist/collectors/feishu/docs/blocks.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/blocks.js +34 -0
- package/dist/collectors/feishu/docs/blocks.js.map +1 -0
- package/dist/collectors/feishu/docs/candidate.d.ts +17 -0
- package/dist/collectors/feishu/docs/candidate.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/candidate.js +36 -0
- package/dist/collectors/feishu/docs/candidate.js.map +1 -0
- package/dist/collectors/feishu/docs/config.d.ts +41 -0
- package/dist/collectors/feishu/docs/config.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/config.js +30 -0
- package/dist/collectors/feishu/docs/config.js.map +1 -0
- package/dist/collectors/feishu/docs/decision.d.ts +14 -0
- package/dist/collectors/feishu/docs/decision.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/decision.js +43 -0
- package/dist/collectors/feishu/docs/decision.js.map +1 -0
- package/dist/collectors/feishu/docs/full-builder.d.ts +17 -0
- package/dist/collectors/feishu/docs/full-builder.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/full-builder.js +136 -0
- package/dist/collectors/feishu/docs/full-builder.js.map +1 -0
- package/dist/collectors/feishu/docs/hash.d.ts +8 -0
- package/dist/collectors/feishu/docs/hash.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/hash.js +15 -0
- package/dist/collectors/feishu/docs/hash.js.map +1 -0
- package/dist/collectors/feishu/docs/ingest.d.ts +54 -0
- package/dist/collectors/feishu/docs/ingest.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/ingest.js +120 -0
- package/dist/collectors/feishu/docs/ingest.js.map +1 -0
- package/dist/collectors/feishu/docs/llm-json.d.ts +13 -0
- package/dist/collectors/feishu/docs/llm-json.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/llm-json.js +40 -0
- package/dist/collectors/feishu/docs/llm-json.js.map +1 -0
- package/dist/collectors/feishu/docs/pointer-builder.d.ts +7 -0
- package/dist/collectors/feishu/docs/pointer-builder.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/pointer-builder.js +11 -0
- package/dist/collectors/feishu/docs/pointer-builder.js.map +1 -0
- package/dist/collectors/feishu/docs/render.d.ts +8 -0
- package/dist/collectors/feishu/docs/render.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/render.js +105 -0
- package/dist/collectors/feishu/docs/render.js.map +1 -0
- package/dist/collectors/feishu/docs/run.d.ts +37 -0
- package/dist/collectors/feishu/docs/run.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/run.js +143 -0
- package/dist/collectors/feishu/docs/run.js.map +1 -0
- package/dist/collectors/feishu/docs/status.d.ts +16 -0
- package/dist/collectors/feishu/docs/status.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/status.js +24 -0
- package/dist/collectors/feishu/docs/status.js.map +1 -0
- package/dist/collectors/feishu/docs/store-writer.d.ts +32 -0
- package/dist/collectors/feishu/docs/store-writer.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/store-writer.js +71 -0
- package/dist/collectors/feishu/docs/store-writer.js.map +1 -0
- package/dist/collectors/feishu/docs/toc.d.ts +3 -0
- package/dist/collectors/feishu/docs/toc.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/toc.js +19 -0
- package/dist/collectors/feishu/docs/toc.js.map +1 -0
- package/dist/collectors/feishu/docs/triggers.d.ts +7 -0
- package/dist/collectors/feishu/docs/triggers.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/triggers.js +31 -0
- package/dist/collectors/feishu/docs/triggers.js.map +1 -0
- package/dist/collectors/feishu/docs/types.d.ts +109 -0
- package/dist/collectors/feishu/docs/types.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/types.js +2 -0
- package/dist/collectors/feishu/docs/types.js.map +1 -0
- package/dist/collectors/feishu/docs/upgrade-queue.d.ts +19 -0
- package/dist/collectors/feishu/docs/upgrade-queue.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/upgrade-queue.js +36 -0
- package/dist/collectors/feishu/docs/upgrade-queue.js.map +1 -0
- package/dist/collectors/feishu/docs/url-parser.d.ts +3 -0
- package/dist/collectors/feishu/docs/url-parser.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/url-parser.js +39 -0
- package/dist/collectors/feishu/docs/url-parser.js.map +1 -0
- package/dist/collectors/feishu/docs/walkers.d.ts +24 -0
- package/dist/collectors/feishu/docs/walkers.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/walkers.js +90 -0
- package/dist/collectors/feishu/docs/walkers.js.map +1 -0
- package/dist/collectors/feishu/docs/wiki-resolver.d.ts +15 -0
- package/dist/collectors/feishu/docs/wiki-resolver.d.ts.map +1 -0
- package/dist/collectors/feishu/docs/wiki-resolver.js +24 -0
- package/dist/collectors/feishu/docs/wiki-resolver.js.map +1 -0
- package/dist/collectors/feishu/http-client.d.ts +26 -0
- package/dist/collectors/feishu/http-client.d.ts.map +1 -0
- package/dist/collectors/feishu/http-client.js +94 -0
- package/dist/collectors/feishu/http-client.js.map +1 -0
- package/dist/collectors/feishu/index.d.ts +3 -0
- package/dist/collectors/feishu/index.d.ts.map +1 -0
- package/dist/collectors/feishu/index.js +2 -0
- package/dist/collectors/feishu/index.js.map +1 -0
- package/dist/collectors/feishu/lark-cli-client.d.ts +28 -0
- package/dist/collectors/feishu/lark-cli-client.d.ts.map +1 -0
- package/dist/collectors/feishu/lark-cli-client.js +104 -0
- package/dist/collectors/feishu/lark-cli-client.js.map +1 -0
- package/dist/collectors/feishu/lark-cli-identity-backend.d.ts +28 -0
- package/dist/collectors/feishu/lark-cli-identity-backend.d.ts.map +1 -0
- package/dist/collectors/feishu/lark-cli-identity-backend.js +110 -0
- package/dist/collectors/feishu/lark-cli-identity-backend.js.map +1 -0
- package/dist/collectors/feishu/rate-limiter.d.ts +10 -0
- package/dist/collectors/feishu/rate-limiter.d.ts.map +1 -0
- package/dist/collectors/feishu/rate-limiter.js +33 -0
- package/dist/collectors/feishu/rate-limiter.js.map +1 -0
- package/dist/collectors/feishu/self-open-id.d.ts +20 -0
- package/dist/collectors/feishu/self-open-id.d.ts.map +1 -0
- package/dist/collectors/feishu/self-open-id.js +31 -0
- package/dist/collectors/feishu/self-open-id.js.map +1 -0
- package/dist/collectors/feishu/sources/base.d.ts +9 -0
- package/dist/collectors/feishu/sources/base.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/base.js +2 -0
- package/dist/collectors/feishu/sources/base.js.map +1 -0
- package/dist/collectors/feishu/sources/calendar.d.ts +16 -0
- package/dist/collectors/feishu/sources/calendar.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/calendar.js +98 -0
- package/dist/collectors/feishu/sources/calendar.js.map +1 -0
- package/dist/collectors/feishu/sources/dm.d.ts +28 -0
- package/dist/collectors/feishu/sources/dm.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/dm.js +156 -0
- package/dist/collectors/feishu/sources/dm.js.map +1 -0
- package/dist/collectors/feishu/sources/mail.d.ts +27 -0
- package/dist/collectors/feishu/sources/mail.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/mail.js +149 -0
- package/dist/collectors/feishu/sources/mail.js.map +1 -0
- package/dist/collectors/feishu/sources/message-search.d.ts +37 -0
- package/dist/collectors/feishu/sources/message-search.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/message-search.js +140 -0
- package/dist/collectors/feishu/sources/message-search.js.map +1 -0
- package/dist/collectors/feishu/sources/messages.d.ts +28 -0
- package/dist/collectors/feishu/sources/messages.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/messages.js +175 -0
- package/dist/collectors/feishu/sources/messages.js.map +1 -0
- package/dist/collectors/feishu/sources/tasks.d.ts +15 -0
- package/dist/collectors/feishu/sources/tasks.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/tasks.js +74 -0
- package/dist/collectors/feishu/sources/tasks.js.map +1 -0
- package/dist/collectors/feishu/types.d.ts +258 -0
- package/dist/collectors/feishu/types.d.ts.map +1 -0
- package/dist/collectors/feishu/types.js +17 -0
- package/dist/collectors/feishu/types.js.map +1 -0
- package/dist/collectors/index.d.ts +10 -0
- package/dist/collectors/index.d.ts.map +1 -0
- package/dist/collectors/index.js +18 -0
- package/dist/collectors/index.js.map +1 -0
- package/dist/config-center/connection-checks.d.ts +28 -0
- package/dist/config-center/connection-checks.d.ts.map +1 -0
- package/dist/config-center/connection-checks.js +114 -0
- package/dist/config-center/connection-checks.js.map +1 -0
- package/dist/config-center/document.d.ts +21 -0
- package/dist/config-center/document.d.ts.map +1 -0
- package/dist/config-center/document.js +93 -0
- package/dist/config-center/document.js.map +1 -0
- package/dist/config-center/index.d.ts +9 -0
- package/dist/config-center/index.d.ts.map +1 -0
- package/dist/config-center/index.js +29 -0
- package/dist/config-center/index.js.map +1 -0
- package/dist/config-center/recommendations.d.ts +16 -0
- package/dist/config-center/recommendations.d.ts.map +1 -0
- package/dist/config-center/recommendations.js +50 -0
- package/dist/config-center/recommendations.js.map +1 -0
- package/dist/config-center/reducer.d.ts +57 -0
- package/dist/config-center/reducer.d.ts.map +1 -0
- package/dist/config-center/reducer.js +192 -0
- package/dist/config-center/reducer.js.map +1 -0
- package/dist/config-center/schema.d.ts +31 -0
- package/dist/config-center/schema.d.ts.map +1 -0
- package/dist/config-center/schema.js +442 -0
- package/dist/config-center/schema.js.map +1 -0
- package/dist/config-center/secrets.d.ts +9 -0
- package/dist/config-center/secrets.d.ts.map +1 -0
- package/dist/config-center/secrets.js +51 -0
- package/dist/config-center/secrets.js.map +1 -0
- package/dist/config-center/source-dirs.d.ts +16 -0
- package/dist/config-center/source-dirs.d.ts.map +1 -0
- package/dist/config-center/source-dirs.js +81 -0
- package/dist/config-center/source-dirs.js.map +1 -0
- package/dist/config-center/tui/app.d.ts +22 -0
- package/dist/config-center/tui/app.d.ts.map +1 -0
- package/dist/config-center/tui/app.js +142 -0
- package/dist/config-center/tui/app.js.map +1 -0
- package/dist/config-center/tui/render.d.ts +20 -0
- package/dist/config-center/tui/render.d.ts.map +1 -0
- package/dist/config-center/tui/render.js +166 -0
- package/dist/config-center/tui/render.js.map +1 -0
- package/dist/config-center/validation.d.ts +9 -0
- package/dist/config-center/validation.d.ts.map +1 -0
- package/dist/config-center/validation.js +59 -0
- package/dist/config-center/validation.js.map +1 -0
- package/dist/consolidator/consolidator.d.ts +43 -0
- package/dist/consolidator/consolidator.d.ts.map +1 -0
- package/dist/consolidator/consolidator.js +67 -0
- package/dist/consolidator/consolidator.js.map +1 -0
- package/dist/consolidator/dead-link.d.ts +7 -0
- package/dist/consolidator/dead-link.d.ts.map +1 -0
- package/dist/consolidator/dead-link.js +57 -0
- package/dist/consolidator/dead-link.js.map +1 -0
- package/dist/consolidator/hot-warm.d.ts +9 -0
- package/dist/consolidator/hot-warm.d.ts.map +1 -0
- package/dist/consolidator/hot-warm.js +88 -0
- package/dist/consolidator/hot-warm.js.map +1 -0
- package/dist/consolidator/infer-preferences.d.ts +14 -0
- package/dist/consolidator/infer-preferences.d.ts.map +1 -0
- package/dist/consolidator/infer-preferences.js +73 -0
- package/dist/consolidator/infer-preferences.js.map +1 -0
- package/dist/consolidator/rules.d.ts +5 -0
- package/dist/consolidator/rules.d.ts.map +1 -0
- package/dist/consolidator/rules.js +53 -0
- package/dist/consolidator/rules.js.map +1 -0
- package/dist/consolidator/warm-cold.d.ts +13 -0
- package/dist/consolidator/warm-cold.d.ts.map +1 -0
- package/dist/consolidator/warm-cold.js +91 -0
- package/dist/consolidator/warm-cold.js.map +1 -0
- package/dist/core/block-builder.d.ts +15 -0
- package/dist/core/block-builder.d.ts.map +1 -0
- package/dist/core/block-builder.js +185 -0
- package/dist/core/block-builder.js.map +1 -0
- package/dist/core/canonicalize.d.ts +3 -0
- package/dist/core/canonicalize.d.ts.map +1 -0
- package/dist/core/canonicalize.js +141 -0
- package/dist/core/canonicalize.js.map +1 -0
- package/dist/core/concurrency.d.ts +2 -0
- package/dist/core/concurrency.d.ts.map +1 -0
- package/dist/core/concurrency.js +14 -0
- package/dist/core/concurrency.js.map +1 -0
- package/dist/core/config.d.ts +257 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +247 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/cursors.d.ts +36 -0
- package/dist/core/cursors.d.ts.map +1 -0
- package/dist/core/cursors.js +90 -0
- package/dist/core/cursors.js.map +1 -0
- package/dist/core/dedup.d.ts +45 -0
- package/dist/core/dedup.d.ts.map +1 -0
- package/dist/core/dedup.js +111 -0
- package/dist/core/dedup.js.map +1 -0
- package/dist/core/entity-extract.d.ts +3 -0
- package/dist/core/entity-extract.d.ts.map +1 -0
- package/dist/core/entity-extract.js +54 -0
- package/dist/core/entity-extract.js.map +1 -0
- package/dist/core/env-validation.d.ts +9 -0
- package/dist/core/env-validation.d.ts.map +1 -0
- package/dist/core/env-validation.js +94 -0
- package/dist/core/env-validation.js.map +1 -0
- package/dist/core/helpers.d.ts +3 -0
- package/dist/core/helpers.d.ts.map +1 -0
- package/dist/core/helpers.js +10 -0
- package/dist/core/helpers.js.map +1 -0
- package/dist/core/identity-resolver.d.ts +42 -0
- package/dist/core/identity-resolver.d.ts.map +1 -0
- package/dist/core/identity-resolver.js +207 -0
- package/dist/core/identity-resolver.js.map +1 -0
- package/dist/core/person-identity.d.ts +140 -0
- package/dist/core/person-identity.d.ts.map +1 -0
- package/dist/core/person-identity.js +428 -0
- package/dist/core/person-identity.js.map +1 -0
- package/dist/core/person-slug.d.ts +21 -0
- package/dist/core/person-slug.d.ts.map +1 -0
- package/dist/core/person-slug.js +93 -0
- package/dist/core/person-slug.js.map +1 -0
- package/dist/core/pipeline-factory.d.ts +13 -0
- package/dist/core/pipeline-factory.d.ts.map +1 -0
- package/dist/core/pipeline-factory.js +37 -0
- package/dist/core/pipeline-factory.js.map +1 -0
- package/dist/core/pipeline.d.ts +77 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +332 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +12 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/schemas.d.ts +5142 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +256 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/signal-scoring.d.ts +3 -0
- package/dist/core/signal-scoring.d.ts.map +1 -0
- package/dist/core/signal-scoring.js +128 -0
- package/dist/core/signal-scoring.js.map +1 -0
- package/dist/core/source-ref.d.ts +4 -0
- package/dist/core/source-ref.d.ts.map +1 -0
- package/dist/core/source-ref.js +24 -0
- package/dist/core/source-ref.js.map +1 -0
- package/dist/core/state.d.ts +22 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +33 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/types.d.ts +266 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/daemon/alerts.d.ts +12 -0
- package/dist/daemon/alerts.d.ts.map +1 -0
- package/dist/daemon/alerts.js +34 -0
- package/dist/daemon/alerts.js.map +1 -0
- package/dist/daemon/autostart/argv.d.ts +21 -0
- package/dist/daemon/autostart/argv.d.ts.map +1 -0
- package/dist/daemon/autostart/argv.js +37 -0
- package/dist/daemon/autostart/argv.js.map +1 -0
- package/dist/daemon/autostart/daemon-state.d.ts +19 -0
- package/dist/daemon/autostart/daemon-state.d.ts.map +1 -0
- package/dist/daemon/autostart/daemon-state.js +34 -0
- package/dist/daemon/autostart/daemon-state.js.map +1 -0
- package/dist/daemon/autostart/index.d.ts +40 -0
- package/dist/daemon/autostart/index.d.ts.map +1 -0
- package/dist/daemon/autostart/index.js +146 -0
- package/dist/daemon/autostart/index.js.map +1 -0
- package/dist/daemon/autostart/launchd.d.ts +13 -0
- package/dist/daemon/autostart/launchd.d.ts.map +1 -0
- package/dist/daemon/autostart/launchd.js +51 -0
- package/dist/daemon/autostart/launchd.js.map +1 -0
- package/dist/daemon/autostart/runner.d.ts +14 -0
- package/dist/daemon/autostart/runner.d.ts.map +1 -0
- package/dist/daemon/autostart/runner.js +30 -0
- package/dist/daemon/autostart/runner.js.map +1 -0
- package/dist/daemon/autostart/systemd.d.ts +11 -0
- package/dist/daemon/autostart/systemd.d.ts.map +1 -0
- package/dist/daemon/autostart/systemd.js +40 -0
- package/dist/daemon/autostart/systemd.js.map +1 -0
- package/dist/daemon/index.d.ts +6 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +6 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/logger.d.ts +8 -0
- package/dist/daemon/logger.d.ts.map +1 -0
- package/dist/daemon/logger.js +35 -0
- package/dist/daemon/logger.js.map +1 -0
- package/dist/daemon/reload-manager.d.ts +41 -0
- package/dist/daemon/reload-manager.d.ts.map +1 -0
- package/dist/daemon/reload-manager.js +89 -0
- package/dist/daemon/reload-manager.js.map +1 -0
- package/dist/daemon/run-history.d.ts +29 -0
- package/dist/daemon/run-history.d.ts.map +1 -0
- package/dist/daemon/run-history.js +54 -0
- package/dist/daemon/run-history.js.map +1 -0
- package/dist/daemon/scheduler.d.ts +45 -0
- package/dist/daemon/scheduler.d.ts.map +1 -0
- package/dist/daemon/scheduler.js +217 -0
- package/dist/daemon/scheduler.js.map +1 -0
- package/dist/daemon/serve-runtime.d.ts +31 -0
- package/dist/daemon/serve-runtime.d.ts.map +1 -0
- package/dist/daemon/serve-runtime.js +230 -0
- package/dist/daemon/serve-runtime.js.map +1 -0
- package/dist/daemon/source-schedule.d.ts +25 -0
- package/dist/daemon/source-schedule.d.ts.map +1 -0
- package/dist/daemon/source-schedule.js +87 -0
- package/dist/daemon/source-schedule.js.map +1 -0
- package/dist/embedded-assets.generated.d.ts +4 -0
- package/dist/embedded-assets.generated.d.ts.map +1 -0
- package/dist/embedded-assets.generated.js +12 -0
- package/dist/embedded-assets.generated.js.map +1 -0
- package/dist/extractors/noise-filter.d.ts +30 -0
- package/dist/extractors/noise-filter.d.ts.map +1 -0
- package/dist/extractors/noise-filter.js +185 -0
- package/dist/extractors/noise-filter.js.map +1 -0
- package/dist/extractors/playbook-extractor.d.ts +35 -0
- package/dist/extractors/playbook-extractor.d.ts.map +1 -0
- package/dist/extractors/playbook-extractor.js +98 -0
- package/dist/extractors/playbook-extractor.js.map +1 -0
- package/dist/extractors/providers/anthropic.d.ts +13 -0
- package/dist/extractors/providers/anthropic.d.ts.map +1 -0
- package/dist/extractors/providers/anthropic.js +67 -0
- package/dist/extractors/providers/anthropic.js.map +1 -0
- package/dist/extractors/providers/index.d.ts +12 -0
- package/dist/extractors/providers/index.d.ts.map +1 -0
- package/dist/extractors/providers/index.js +41 -0
- package/dist/extractors/providers/index.js.map +1 -0
- package/dist/extractors/providers/mock.d.ts +14 -0
- package/dist/extractors/providers/mock.d.ts.map +1 -0
- package/dist/extractors/providers/mock.js +37 -0
- package/dist/extractors/providers/mock.js.map +1 -0
- package/dist/extractors/providers/openai.d.ts +15 -0
- package/dist/extractors/providers/openai.d.ts.map +1 -0
- package/dist/extractors/providers/openai.js +109 -0
- package/dist/extractors/providers/openai.js.map +1 -0
- package/dist/extractors/providers/types.d.ts +27 -0
- package/dist/extractors/providers/types.d.ts.map +1 -0
- package/dist/extractors/providers/types.js +6 -0
- package/dist/extractors/providers/types.js.map +1 -0
- package/dist/extractors/signal-extractor.d.ts +30 -0
- package/dist/extractors/signal-extractor.d.ts.map +1 -0
- package/dist/extractors/signal-extractor.js +371 -0
- package/dist/extractors/signal-extractor.js.map +1 -0
- package/dist/formatters/index.d.ts +3 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +3 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/json.d.ts +6 -0
- package/dist/formatters/json.d.ts.map +1 -0
- package/dist/formatters/json.js +16 -0
- package/dist/formatters/json.js.map +1 -0
- package/dist/formatters/markdown.d.ts +6 -0
- package/dist/formatters/markdown.d.ts.map +1 -0
- package/dist/formatters/markdown.js +198 -0
- package/dist/formatters/markdown.js.map +1 -0
- package/dist/hooks/handlers.d.ts +21 -0
- package/dist/hooks/handlers.d.ts.map +1 -0
- package/dist/hooks/handlers.js +22 -0
- package/dist/hooks/handlers.js.map +1 -0
- package/dist/hooks/inject.d.ts +7 -0
- package/dist/hooks/inject.d.ts.map +1 -0
- package/dist/hooks/inject.js +18 -0
- package/dist/hooks/inject.js.map +1 -0
- package/dist/hooks/install.d.ts +14 -0
- package/dist/hooks/install.d.ts.map +1 -0
- package/dist/hooks/install.js +34 -0
- package/dist/hooks/install.js.map +1 -0
- package/dist/hooks/output.d.ts +19 -0
- package/dist/hooks/output.d.ts.map +1 -0
- package/dist/hooks/output.js +13 -0
- package/dist/hooks/output.js.map +1 -0
- package/dist/hooks/recall-client.d.ts +25 -0
- package/dist/hooks/recall-client.d.ts.map +1 -0
- package/dist/hooks/recall-client.js +56 -0
- package/dist/hooks/recall-client.js.map +1 -0
- package/dist/hooks/run-event.d.ts +13 -0
- package/dist/hooks/run-event.d.ts.map +1 -0
- package/dist/hooks/run-event.js +20 -0
- package/dist/hooks/run-event.js.map +1 -0
- package/dist/hooks/settings-edit.d.ts +10 -0
- package/dist/hooks/settings-edit.d.ts.map +1 -0
- package/dist/hooks/settings-edit.js +44 -0
- package/dist/hooks/settings-edit.js.map +1 -0
- package/dist/hooks/writeback.d.ts +12 -0
- package/dist/hooks/writeback.d.ts.map +1 -0
- package/dist/hooks/writeback.js +48 -0
- package/dist/hooks/writeback.js.map +1 -0
- package/dist/install/clients/claude-code.d.ts +3 -0
- package/dist/install/clients/claude-code.d.ts.map +1 -0
- package/dist/install/clients/claude-code.js +31 -0
- package/dist/install/clients/claude-code.js.map +1 -0
- package/dist/install/clients/claude-desktop.d.ts +3 -0
- package/dist/install/clients/claude-desktop.d.ts.map +1 -0
- package/dist/install/clients/claude-desktop.js +33 -0
- package/dist/install/clients/claude-desktop.js.map +1 -0
- package/dist/install/clients/codex.d.ts +3 -0
- package/dist/install/clients/codex.d.ts.map +1 -0
- package/dist/install/clients/codex.js +33 -0
- package/dist/install/clients/codex.js.map +1 -0
- package/dist/install/clients/cursor.d.ts +3 -0
- package/dist/install/clients/cursor.d.ts.map +1 -0
- package/dist/install/clients/cursor.js +37 -0
- package/dist/install/clients/cursor.js.map +1 -0
- package/dist/install/clients/hermes.d.ts +3 -0
- package/dist/install/clients/hermes.d.ts.map +1 -0
- package/dist/install/clients/hermes.js +37 -0
- package/dist/install/clients/hermes.js.map +1 -0
- package/dist/install/clients/index.d.ts +4 -0
- package/dist/install/clients/index.d.ts.map +1 -0
- package/dist/install/clients/index.js +18 -0
- package/dist/install/clients/index.js.map +1 -0
- package/dist/install/clients/windsurf.d.ts +3 -0
- package/dist/install/clients/windsurf.d.ts.map +1 -0
- package/dist/install/clients/windsurf.js +34 -0
- package/dist/install/clients/windsurf.js.map +1 -0
- package/dist/install/command.d.ts +14 -0
- package/dist/install/command.d.ts.map +1 -0
- package/dist/install/command.js +34 -0
- package/dist/install/command.js.map +1 -0
- package/dist/install/directive.d.ts +7 -0
- package/dist/install/directive.d.ts.map +1 -0
- package/dist/install/directive.js +31 -0
- package/dist/install/directive.js.map +1 -0
- package/dist/install/index.d.ts +28 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +122 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/json-config.d.ts +8 -0
- package/dist/install/json-config.d.ts.map +1 -0
- package/dist/install/json-config.js +44 -0
- package/dist/install/json-config.js.map +1 -0
- package/dist/install/marked-block.d.ts +11 -0
- package/dist/install/marked-block.d.ts.map +1 -0
- package/dist/install/marked-block.js +34 -0
- package/dist/install/marked-block.js.map +1 -0
- package/dist/install/mcp-entry.d.ts +11 -0
- package/dist/install/mcp-entry.d.ts.map +1 -0
- package/dist/install/mcp-entry.js +7 -0
- package/dist/install/mcp-entry.js.map +1 -0
- package/dist/install/skill.d.ts +4 -0
- package/dist/install/skill.d.ts.map +1 -0
- package/dist/install/skill.js +61 -0
- package/dist/install/skill.js.map +1 -0
- package/dist/install/toml-config.d.ts +4 -0
- package/dist/install/toml-config.d.ts.map +1 -0
- package/dist/install/toml-config.js +54 -0
- package/dist/install/toml-config.js.map +1 -0
- package/dist/install/types.d.ts +40 -0
- package/dist/install/types.d.ts.map +1 -0
- package/dist/install/types.js +10 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/yaml-config.d.ts +4 -0
- package/dist/install/yaml-config.d.ts.map +1 -0
- package/dist/install/yaml-config.js +19 -0
- package/dist/install/yaml-config.js.map +1 -0
- package/dist/lifecycle/down.d.ts +19 -0
- package/dist/lifecycle/down.d.ts.map +1 -0
- package/dist/lifecycle/down.js +24 -0
- package/dist/lifecycle/down.js.map +1 -0
- package/dist/lifecycle/health-poll.d.ts +19 -0
- package/dist/lifecycle/health-poll.d.ts.map +1 -0
- package/dist/lifecycle/health-poll.js +39 -0
- package/dist/lifecycle/health-poll.js.map +1 -0
- package/dist/lifecycle/install-state.d.ts +34 -0
- package/dist/lifecycle/install-state.d.ts.map +1 -0
- package/dist/lifecycle/install-state.js +70 -0
- package/dist/lifecycle/install-state.js.map +1 -0
- package/dist/lifecycle/legacy-migration.d.ts +58 -0
- package/dist/lifecycle/legacy-migration.d.ts.map +1 -0
- package/dist/lifecycle/legacy-migration.js +212 -0
- package/dist/lifecycle/legacy-migration.js.map +1 -0
- package/dist/lifecycle/lifecycle-lock.d.ts +20 -0
- package/dist/lifecycle/lifecycle-lock.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle-lock.js +98 -0
- package/dist/lifecycle/lifecycle-lock.js.map +1 -0
- package/dist/lifecycle/run-up.d.ts +38 -0
- package/dist/lifecycle/run-up.d.ts.map +1 -0
- package/dist/lifecycle/run-up.js +307 -0
- package/dist/lifecycle/run-up.js.map +1 -0
- package/dist/lifecycle/status.d.ts +38 -0
- package/dist/lifecycle/status.d.ts.map +1 -0
- package/dist/lifecycle/status.js +41 -0
- package/dist/lifecycle/status.js.map +1 -0
- package/dist/lifecycle/up.d.ts +35 -0
- package/dist/lifecycle/up.d.ts.map +1 -0
- package/dist/lifecycle/up.js +45 -0
- package/dist/lifecycle/up.js.map +1 -0
- package/dist/processors/privacy.d.ts +101 -0
- package/dist/processors/privacy.d.ts.map +1 -0
- package/dist/processors/privacy.js +273 -0
- package/dist/processors/privacy.js.map +1 -0
- package/dist/profile/accumulate.d.ts +28 -0
- package/dist/profile/accumulate.d.ts.map +1 -0
- package/dist/profile/accumulate.js +48 -0
- package/dist/profile/accumulate.js.map +1 -0
- package/dist/profile/behavior.d.ts +32 -0
- package/dist/profile/behavior.d.ts.map +1 -0
- package/dist/profile/behavior.js +122 -0
- package/dist/profile/behavior.js.map +1 -0
- package/dist/profile/four-color.d.ts +12 -0
- package/dist/profile/four-color.d.ts.map +1 -0
- package/dist/profile/four-color.js +39 -0
- package/dist/profile/four-color.js.map +1 -0
- package/dist/profile/profile-synth.d.ts +27 -0
- package/dist/profile/profile-synth.d.ts.map +1 -0
- package/dist/profile/profile-synth.js +174 -0
- package/dist/profile/profile-synth.js.map +1 -0
- package/dist/profile/types.d.ts +84 -0
- package/dist/profile/types.d.ts.map +1 -0
- package/dist/profile/types.js +11 -0
- package/dist/profile/types.js.map +1 -0
- package/dist/server/api.d.ts +49 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +502 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/backfill-job.d.ts +36 -0
- package/dist/server/backfill-job.d.ts.map +1 -0
- package/dist/server/backfill-job.js +88 -0
- package/dist/server/backfill-job.js.map +1 -0
- package/dist/server/backfill-routes.d.ts +7 -0
- package/dist/server/backfill-routes.d.ts.map +1 -0
- package/dist/server/backfill-routes.js +146 -0
- package/dist/server/backfill-routes.js.map +1 -0
- package/dist/server/chat-name-refresh-job.d.ts +33 -0
- package/dist/server/chat-name-refresh-job.d.ts.map +1 -0
- package/dist/server/chat-name-refresh-job.js +120 -0
- package/dist/server/chat-name-refresh-job.js.map +1 -0
- package/dist/server/chat-name-routes.d.ts +13 -0
- package/dist/server/chat-name-routes.d.ts.map +1 -0
- package/dist/server/chat-name-routes.js +81 -0
- package/dist/server/chat-name-routes.js.map +1 -0
- package/dist/server/config-routes.d.ts +10 -0
- package/dist/server/config-routes.d.ts.map +1 -0
- package/dist/server/config-routes.js +122 -0
- package/dist/server/config-routes.js.map +1 -0
- package/dist/server/context.d.ts +13 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +47 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/entity.d.ts +25 -0
- package/dist/server/entity.d.ts.map +1 -0
- package/dist/server/entity.js +34 -0
- package/dist/server/entity.js.map +1 -0
- package/dist/server/event-bus.d.ts +35 -0
- package/dist/server/event-bus.d.ts.map +1 -0
- package/dist/server/event-bus.js +4 -0
- package/dist/server/event-bus.js.map +1 -0
- package/dist/server/mcp-http-runtime.d.ts +28 -0
- package/dist/server/mcp-http-runtime.d.ts.map +1 -0
- package/dist/server/mcp-http-runtime.js +24 -0
- package/dist/server/mcp-http-runtime.js.map +1 -0
- package/dist/server/mcp-http.d.ts +41 -0
- package/dist/server/mcp-http.d.ts.map +1 -0
- package/dist/server/mcp-http.js +139 -0
- package/dist/server/mcp-http.js.map +1 -0
- package/dist/server/mcp.d.ts +292 -0
- package/dist/server/mcp.d.ts.map +1 -0
- package/dist/server/mcp.js +1146 -0
- package/dist/server/mcp.js.map +1 -0
- package/dist/server/open-browser.d.ts +3 -0
- package/dist/server/open-browser.d.ts.map +1 -0
- package/dist/server/open-browser.js +12 -0
- package/dist/server/open-browser.js.map +1 -0
- package/dist/server/runtime.d.ts +13 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +27 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/server-security.d.ts +51 -0
- package/dist/server/server-security.d.ts.map +1 -0
- package/dist/server/server-security.js +76 -0
- package/dist/server/server-security.js.map +1 -0
- package/dist/server/setup-server.d.ts +7 -0
- package/dist/server/setup-server.d.ts.map +1 -0
- package/dist/server/setup-server.js +49 -0
- package/dist/server/setup-server.js.map +1 -0
- package/dist/setup/assess-hardware.d.ts +34 -0
- package/dist/setup/assess-hardware.d.ts.map +1 -0
- package/dist/setup/assess-hardware.js +179 -0
- package/dist/setup/assess-hardware.js.map +1 -0
- package/dist/setup/connection-tests.d.ts +17 -0
- package/dist/setup/connection-tests.d.ts.map +1 -0
- package/dist/setup/connection-tests.js +69 -0
- package/dist/setup/connection-tests.js.map +1 -0
- package/dist/setup/detect-api-keys.d.ts +13 -0
- package/dist/setup/detect-api-keys.d.ts.map +1 -0
- package/dist/setup/detect-api-keys.js +41 -0
- package/dist/setup/detect-api-keys.js.map +1 -0
- package/dist/setup/detect-runtime.d.ts +14 -0
- package/dist/setup/detect-runtime.d.ts.map +1 -0
- package/dist/setup/detect-runtime.js +43 -0
- package/dist/setup/detect-runtime.js.map +1 -0
- package/dist/setup/detect-sources.d.ts +14 -0
- package/dist/setup/detect-sources.d.ts.map +1 -0
- package/dist/setup/detect-sources.js +75 -0
- package/dist/setup/detect-sources.js.map +1 -0
- package/dist/setup/doctor.d.ts +48 -0
- package/dist/setup/doctor.d.ts.map +1 -0
- package/dist/setup/doctor.js +157 -0
- package/dist/setup/doctor.js.map +1 -0
- package/dist/setup/generate-config.d.ts +13 -0
- package/dist/setup/generate-config.d.ts.map +1 -0
- package/dist/setup/generate-config.js +163 -0
- package/dist/setup/generate-config.js.map +1 -0
- package/dist/setup/index.d.ts +9 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +9 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/init-wizard.d.ts +20 -0
- package/dist/setup/init-wizard.d.ts.map +1 -0
- package/dist/setup/init-wizard.js +531 -0
- package/dist/setup/init-wizard.js.map +1 -0
- package/dist/setup/terminal.d.ts +28 -0
- package/dist/setup/terminal.d.ts.map +1 -0
- package/dist/setup/terminal.js +258 -0
- package/dist/setup/terminal.js.map +1 -0
- package/dist/setup/validate-config.d.ts +30 -0
- package/dist/setup/validate-config.d.ts.map +1 -0
- package/dist/setup/validate-config.js +45 -0
- package/dist/setup/validate-config.js.map +1 -0
- package/dist/store/chunks.d.ts +25 -0
- package/dist/store/chunks.d.ts.map +1 -0
- package/dist/store/chunks.js +78 -0
- package/dist/store/chunks.js.map +1 -0
- package/dist/store/data-dir-lock.d.ts +15 -0
- package/dist/store/data-dir-lock.d.ts.map +1 -0
- package/dist/store/data-dir-lock.js +96 -0
- package/dist/store/data-dir-lock.js.map +1 -0
- package/dist/store/database.d.ts +31 -0
- package/dist/store/database.d.ts.map +1 -0
- package/dist/store/database.js +113 -0
- package/dist/store/database.js.map +1 -0
- package/dist/store/embedding.d.ts +23 -0
- package/dist/store/embedding.d.ts.map +1 -0
- package/dist/store/embedding.js +62 -0
- package/dist/store/embedding.js.map +1 -0
- package/dist/store/engine-factory.d.ts +4 -0
- package/dist/store/engine-factory.d.ts.map +1 -0
- package/dist/store/engine-factory.js +18 -0
- package/dist/store/engine-factory.js.map +1 -0
- package/dist/store/graph.d.ts +75 -0
- package/dist/store/graph.d.ts.map +1 -0
- package/dist/store/graph.js +276 -0
- package/dist/store/graph.js.map +1 -0
- package/dist/store/managed/managed-engine.d.ts +35 -0
- package/dist/store/managed/managed-engine.d.ts.map +1 -0
- package/dist/store/managed/managed-engine.js +40 -0
- package/dist/store/managed/managed-engine.js.map +1 -0
- package/dist/store/managed/managed-lock.d.ts +2 -0
- package/dist/store/managed/managed-lock.d.ts.map +1 -0
- package/dist/store/managed/managed-lock.js +68 -0
- package/dist/store/managed/managed-lock.js.map +1 -0
- package/dist/store/managed/new-install.d.ts +12 -0
- package/dist/store/managed/new-install.d.ts.map +1 -0
- package/dist/store/managed/new-install.js +23 -0
- package/dist/store/managed/new-install.js.map +1 -0
- package/dist/store/managed/pg-paths.d.ts +28 -0
- package/dist/store/managed/pg-paths.d.ts.map +1 -0
- package/dist/store/managed/pg-paths.js +41 -0
- package/dist/store/managed/pg-paths.js.map +1 -0
- package/dist/store/managed/pg-runtime-provider.d.ts +47 -0
- package/dist/store/managed/pg-runtime-provider.d.ts.map +1 -0
- package/dist/store/managed/pg-runtime-provider.js +249 -0
- package/dist/store/managed/pg-runtime-provider.js.map +1 -0
- package/dist/store/managed/pg-supervisor.d.ts +30 -0
- package/dist/store/managed/pg-supervisor.d.ts.map +1 -0
- package/dist/store/managed/pg-supervisor.js +308 -0
- package/dist/store/managed/pg-supervisor.js.map +1 -0
- package/dist/store/managed/recovery-loop.d.ts +41 -0
- package/dist/store/managed/recovery-loop.d.ts.map +1 -0
- package/dist/store/managed/recovery-loop.js +87 -0
- package/dist/store/managed/recovery-loop.js.map +1 -0
- package/dist/store/managed/stop-from-state.d.ts +11 -0
- package/dist/store/managed/stop-from-state.d.ts.map +1 -0
- package/dist/store/managed/stop-from-state.js +26 -0
- package/dist/store/managed/stop-from-state.js.map +1 -0
- package/dist/store/migrations/index.d.ts +9 -0
- package/dist/store/migrations/index.d.ts.map +1 -0
- package/dist/store/migrations/index.js +121 -0
- package/dist/store/migrations/index.js.map +1 -0
- package/dist/store/pages.d.ts +81 -0
- package/dist/store/pages.d.ts.map +1 -0
- package/dist/store/pages.js +286 -0
- package/dist/store/pages.js.map +1 -0
- package/dist/store/person-behavior.d.ts +37 -0
- package/dist/store/person-behavior.d.ts.map +1 -0
- package/dist/store/person-behavior.js +134 -0
- package/dist/store/person-behavior.js.map +1 -0
- package/dist/store/pglite-assets.d.ts +15 -0
- package/dist/store/pglite-assets.d.ts.map +1 -0
- package/dist/store/pglite-assets.js +47 -0
- package/dist/store/pglite-assets.js.map +1 -0
- package/dist/store/pglite-executor.d.ts +21 -0
- package/dist/store/pglite-executor.d.ts.map +1 -0
- package/dist/store/pglite-executor.js +61 -0
- package/dist/store/pglite-executor.js.map +1 -0
- package/dist/store/postgres-executor.d.ts +16 -0
- package/dist/store/postgres-executor.d.ts.map +1 -0
- package/dist/store/postgres-executor.js +77 -0
- package/dist/store/postgres-executor.js.map +1 -0
- package/dist/store/query-rewrite.d.ts +28 -0
- package/dist/store/query-rewrite.d.ts.map +1 -0
- package/dist/store/query-rewrite.js +97 -0
- package/dist/store/query-rewrite.js.map +1 -0
- package/dist/store/search.d.ts +65 -0
- package/dist/store/search.d.ts.map +1 -0
- package/dist/store/search.js +312 -0
- package/dist/store/search.js.map +1 -0
- package/dist/store/sequence-sync.d.ts +22 -0
- package/dist/store/sequence-sync.d.ts.map +1 -0
- package/dist/store/sequence-sync.js +46 -0
- package/dist/store/sequence-sync.js.map +1 -0
- package/dist/store/sql-executor.d.ts +17 -0
- package/dist/store/sql-executor.d.ts.map +1 -0
- package/dist/store/sql-executor.js +3 -0
- package/dist/store/sql-executor.js.map +1 -0
- package/dist/store/store-meta.d.ts +10 -0
- package/dist/store/store-meta.d.ts.map +1 -0
- package/dist/store/store-meta.js +13 -0
- package/dist/store/store-meta.js.map +1 -0
- package/dist/store/tags.d.ts +10 -0
- package/dist/store/tags.d.ts.map +1 -0
- package/dist/store/tags.js +35 -0
- package/dist/store/tags.js.map +1 -0
- package/dist/store/timeline.d.ts +38 -0
- package/dist/store/timeline.d.ts.map +1 -0
- package/dist/store/timeline.js +173 -0
- package/dist/store/timeline.js.map +1 -0
- package/dist/store/trgm-search.d.ts +13 -0
- package/dist/store/trgm-search.d.ts.map +1 -0
- package/dist/store/trgm-search.js +53 -0
- package/dist/store/trgm-search.js.map +1 -0
- package/dist/store/wikilink.d.ts +17 -0
- package/dist/store/wikilink.d.ts.map +1 -0
- package/dist/store/wikilink.js +58 -0
- package/dist/store/wikilink.js.map +1 -0
- package/dist/sync/obsidian.d.ts +136 -0
- package/dist/sync/obsidian.d.ts.map +1 -0
- package/dist/sync/obsidian.js +543 -0
- package/dist/sync/obsidian.js.map +1 -0
- package/dist/synth/cache.d.ts +17 -0
- package/dist/synth/cache.d.ts.map +1 -0
- package/dist/synth/cache.js +67 -0
- package/dist/synth/cache.js.map +1 -0
- package/dist/synth/citations.d.ts +12 -0
- package/dist/synth/citations.d.ts.map +1 -0
- package/dist/synth/citations.js +28 -0
- package/dist/synth/citations.js.map +1 -0
- package/dist/synth/context.d.ts +10 -0
- package/dist/synth/context.d.ts.map +1 -0
- package/dist/synth/context.js +67 -0
- package/dist/synth/context.js.map +1 -0
- package/dist/synth/engine.d.ts +16 -0
- package/dist/synth/engine.d.ts.map +1 -0
- package/dist/synth/engine.js +111 -0
- package/dist/synth/engine.js.map +1 -0
- package/dist/synth/gaps.d.ts +17 -0
- package/dist/synth/gaps.d.ts.map +1 -0
- package/dist/synth/gaps.js +57 -0
- package/dist/synth/gaps.js.map +1 -0
- package/dist/synth/index.d.ts +6 -0
- package/dist/synth/index.d.ts.map +1 -0
- package/dist/synth/index.js +6 -0
- package/dist/synth/index.js.map +1 -0
- package/dist/synth/intent.d.ts +6 -0
- package/dist/synth/intent.d.ts.map +1 -0
- package/dist/synth/intent.js +13 -0
- package/dist/synth/intent.js.map +1 -0
- package/dist/synth/intents/daily-report.d.ts +7 -0
- package/dist/synth/intents/daily-report.d.ts.map +1 -0
- package/dist/synth/intents/daily-report.js +37 -0
- package/dist/synth/intents/daily-report.js.map +1 -0
- package/dist/synth/intents/index.d.ts +2 -0
- package/dist/synth/intents/index.d.ts.map +1 -0
- package/dist/synth/intents/index.js +12 -0
- package/dist/synth/intents/index.js.map +1 -0
- package/dist/synth/intents/person-strategy.d.ts +40 -0
- package/dist/synth/intents/person-strategy.d.ts.map +1 -0
- package/dist/synth/intents/person-strategy.js +66 -0
- package/dist/synth/intents/person-strategy.js.map +1 -0
- package/dist/synth/intents/recall.d.ts +8 -0
- package/dist/synth/intents/recall.d.ts.map +1 -0
- package/dist/synth/intents/recall.js +26 -0
- package/dist/synth/intents/recall.js.map +1 -0
- package/dist/synth/intents/troubleshoot.d.ts +11 -0
- package/dist/synth/intents/troubleshoot.d.ts.map +1 -0
- package/dist/synth/intents/troubleshoot.js +66 -0
- package/dist/synth/intents/troubleshoot.js.map +1 -0
- package/dist/synth/scope.d.ts +13 -0
- package/dist/synth/scope.d.ts.map +1 -0
- package/dist/synth/scope.js +139 -0
- package/dist/synth/scope.js.map +1 -0
- package/dist/synth/types.d.ts +117 -0
- package/dist/synth/types.d.ts.map +1 -0
- package/dist/synth/types.js +2 -0
- package/dist/synth/types.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Person identity — Layer 1: typed handle/alias resolution.
|
|
3
|
+
*
|
|
4
|
+
* A person is anchored by a human-readable canonical page slug (e.g.
|
|
5
|
+
* `person/li-yinglong`). Every other way the person is referred to — a Feishu
|
|
6
|
+
* open id, an email, an exact display name, a nickname / 花名 — is a *handle*
|
|
7
|
+
* stored in `person_handles` and pointing at that canonical slug.
|
|
8
|
+
*
|
|
9
|
+
* Resolution rules (mirrors openhuman's `people` resolver contract):
|
|
10
|
+
* - Strong handles (feishu_open_id / email / name / slug) auto-resolve and
|
|
11
|
+
* are recorded automatically during canonicalization.
|
|
12
|
+
* - Weak handles (nickname / 花名) are NEVER created automatically — they
|
|
13
|
+
* only enter the table via an explicit `addAlias` / `link`, so an
|
|
14
|
+
* ambiguous nickname like "龙哥" can never silently merge two people.
|
|
15
|
+
* - Merging two existing person pages is always an explicit operation.
|
|
16
|
+
*/
|
|
17
|
+
import { stringify as stringifyYaml } from "yaml";
|
|
18
|
+
/** Default strength for a handle kind. Nicknames are weak; everything else strong. */
|
|
19
|
+
export function defaultStrength(kind) {
|
|
20
|
+
return kind === "nickname" ? "weak" : "strong";
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Canonicalize a handle value for storage and lookup. Emails and open ids are
|
|
24
|
+
* lowercased; names and nicknames are whitespace-collapsed; slugs are passed
|
|
25
|
+
* through (already normalized lowercase).
|
|
26
|
+
*/
|
|
27
|
+
export function canonicalizeHandleValue(kind, value) {
|
|
28
|
+
const trimmed = value.trim();
|
|
29
|
+
switch (kind) {
|
|
30
|
+
case "email":
|
|
31
|
+
case "feishu_open_id":
|
|
32
|
+
return trimmed.toLowerCase();
|
|
33
|
+
case "name":
|
|
34
|
+
case "nickname":
|
|
35
|
+
return trimmed.replace(/\s+/g, " ");
|
|
36
|
+
case "slug":
|
|
37
|
+
return trimmed;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const OPEN_ID_RE = /\bou_[a-zA-Z0-9]+\b/;
|
|
41
|
+
const EMAIL_RE = /[^\s@]+@[^\s@]+\.[^\s@]+/;
|
|
42
|
+
/** Canonical slug of the special "me" identity page (Spec 9 §4.1). */
|
|
43
|
+
export const ME_SLUG = "entities/me";
|
|
44
|
+
export class PersonIdentityStore {
|
|
45
|
+
db;
|
|
46
|
+
stores;
|
|
47
|
+
extra;
|
|
48
|
+
constructor(db, stores, extra) {
|
|
49
|
+
this.db = db;
|
|
50
|
+
this.stores = stores;
|
|
51
|
+
this.extra = extra;
|
|
52
|
+
}
|
|
53
|
+
/** Resolve a single handle to its canonical person slug, or null. */
|
|
54
|
+
async resolveHandle(kind, value) {
|
|
55
|
+
const v = canonicalizeHandleValue(kind, value);
|
|
56
|
+
const r = await this.db.query("SELECT canonical_slug FROM person_handles WHERE kind = $1 AND value = $2", [kind, v]);
|
|
57
|
+
return r.rows[0]?.canonical_slug ?? null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Resolve an extraction's (name, modelSlug) to a canonical slug via known
|
|
61
|
+
* handles. Tries strong handles first (slug, embedded open id / email, exact
|
|
62
|
+
* name), then any explicitly-linked nickname. Returns null if nothing known.
|
|
63
|
+
*/
|
|
64
|
+
async resolveForExtraction(name, modelSlug) {
|
|
65
|
+
const bySlug = await this.resolveHandle("slug", modelSlug);
|
|
66
|
+
if (bySlug)
|
|
67
|
+
return bySlug;
|
|
68
|
+
const openId = name.match(OPEN_ID_RE)?.[0];
|
|
69
|
+
if (openId) {
|
|
70
|
+
const hit = await this.resolveHandle("feishu_open_id", openId);
|
|
71
|
+
if (hit)
|
|
72
|
+
return hit;
|
|
73
|
+
}
|
|
74
|
+
const email = name.match(EMAIL_RE)?.[0];
|
|
75
|
+
if (email) {
|
|
76
|
+
const hit = await this.resolveHandle("email", email);
|
|
77
|
+
if (hit)
|
|
78
|
+
return hit;
|
|
79
|
+
}
|
|
80
|
+
const byName = await this.resolveHandle("name", name);
|
|
81
|
+
if (byName)
|
|
82
|
+
return byName;
|
|
83
|
+
// Weak handles resolve too, but only because they were explicitly linked.
|
|
84
|
+
return this.resolveHandle("nickname", name);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Record the strong handles implied by a freshly-canonicalized person
|
|
88
|
+
* (name → slug, slug → slug, and any embedded open id). Idempotent and
|
|
89
|
+
* non-destructive: existing rows are left untouched.
|
|
90
|
+
*/
|
|
91
|
+
async recordCanonical(name, canonicalSlug) {
|
|
92
|
+
await this.insertHandle("name", name, canonicalSlug, "strong", true);
|
|
93
|
+
await this.insertHandle("slug", canonicalSlug, canonicalSlug, "strong", true);
|
|
94
|
+
const openId = name.match(OPEN_ID_RE)?.[0];
|
|
95
|
+
if (openId) {
|
|
96
|
+
await this.insertHandle("feishu_open_id", openId, canonicalSlug, "strong", true);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Ensure the special `entities/me` self-identity page exists (Spec 9 §4.1).
|
|
101
|
+
* Idempotent — returns the canonical slug; creates a minimal person page the
|
|
102
|
+
* user can hand-edit (role / company / team / handles) when absent.
|
|
103
|
+
*/
|
|
104
|
+
async ensureEntitiesMe() {
|
|
105
|
+
const pages = this.requirePages();
|
|
106
|
+
const existing = await pages.getPage(ME_SLUG);
|
|
107
|
+
if (!existing) {
|
|
108
|
+
const content = `---\ntitle: Me\ntype: person\nis_me: true\n---\n# Me\n\n(自我身份页:可手编你的角色 / 公司 / 团队 / 项目 / 沟通偏好 / 各平台 handle。)\n`;
|
|
109
|
+
await pages.putPage(ME_SLUG, content);
|
|
110
|
+
}
|
|
111
|
+
await this.insertHandle("slug", ME_SLUG, ME_SLUG, "strong", true);
|
|
112
|
+
return ME_SLUG;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Register one of the current user's own handles (open_id / email / name),
|
|
116
|
+
* pointing it at `entities/me` as a strong handle (Spec 9 §4.2 manual path).
|
|
117
|
+
* Ensures the me page exists first.
|
|
118
|
+
*
|
|
119
|
+
* Spike (Spec 9 §4.2): auto-resolving the self open_id via
|
|
120
|
+
* `resolveSelfOpenId()` (src/collectors/feishu/self-open-id.ts) is wired as a
|
|
121
|
+
* best-effort enhancement only — it depends on a live lark-cli user-level
|
|
122
|
+
* OAuth session (user_access_token, separate from the bot token). That session
|
|
123
|
+
* is not available in CI/test, so only this manual path is exercised by tests
|
|
124
|
+
* and is the reliable default. Callers may best-effort call resolveSelfOpenId
|
|
125
|
+
* and feed the result here when a real session exists.
|
|
126
|
+
*/
|
|
127
|
+
async registerSelfHandle(kind, value) {
|
|
128
|
+
await this.ensureEntitiesMe();
|
|
129
|
+
await this.insertHandle(kind, value, ME_SLUG, "strong", false);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Whether `slugOrHandle` is the current user (Spec 9 §4.3). Accepts either a
|
|
133
|
+
* canonical slug (e.g. `entities/me`, `people/alice`) or a raw handle value
|
|
134
|
+
* (open_id / email / name / nickname); resolves to a canonical slug and
|
|
135
|
+
* compares against `entities/me`.
|
|
136
|
+
*/
|
|
137
|
+
async isMe(slugOrHandle) {
|
|
138
|
+
if (slugOrHandle === ME_SLUG)
|
|
139
|
+
return true;
|
|
140
|
+
// direct slug handle
|
|
141
|
+
if ((await this.resolveHandle("slug", slugOrHandle)) === ME_SLUG)
|
|
142
|
+
return true;
|
|
143
|
+
// try the strong handle kinds it could be
|
|
144
|
+
for (const kind of ["feishu_open_id", "email", "name", "nickname"]) {
|
|
145
|
+
if ((await this.resolveHandle(kind, slugOrHandle)) === ME_SLUG)
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Explicitly attach a handle (alias) to a canonical person. Defaults to the
|
|
152
|
+
* kind's natural strength. Throws if the handle already points at a
|
|
153
|
+
* different person (use `merge` / `removeHandle` to reassign).
|
|
154
|
+
*/
|
|
155
|
+
async addAlias(canonicalSlug, kind, value, strength) {
|
|
156
|
+
const v = canonicalizeHandleValue(kind, value);
|
|
157
|
+
const existing = await this.resolveHandle(kind, v);
|
|
158
|
+
if (existing && existing !== canonicalSlug) {
|
|
159
|
+
throw new Error(`handle ${kind}:${v} already maps to '${existing}'; remove it or merge '${existing}' into '${canonicalSlug}' first`);
|
|
160
|
+
}
|
|
161
|
+
await this.insertHandle(kind, v, canonicalSlug, strength ?? defaultStrength(kind), false);
|
|
162
|
+
// Reflect the alias into the page frontmatter so it's visible + searchable.
|
|
163
|
+
if (this.stores?.pages) {
|
|
164
|
+
await this.appendAliasesToPage(canonicalSlug, [v]);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/** List all handles attached to a canonical person. */
|
|
168
|
+
async listHandles(canonicalSlug) {
|
|
169
|
+
const r = await this.db.query("SELECT kind, value, canonical_slug, strength FROM person_handles WHERE canonical_slug = $1 ORDER BY kind, value", [canonicalSlug]);
|
|
170
|
+
return r.rows;
|
|
171
|
+
}
|
|
172
|
+
/** Remove a handle by (kind, value). */
|
|
173
|
+
async removeHandle(kind, value) {
|
|
174
|
+
const v = canonicalizeHandleValue(kind, value);
|
|
175
|
+
await this.db.query("DELETE FROM person_handles WHERE kind = $1 AND value = $2", [kind, v]);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Rename a person's canonical slug (correct a wrong canonicalization).
|
|
179
|
+
* Renames the page, re-points handles + identity_cache, leaves the old slug
|
|
180
|
+
* behind as a resolvable alias.
|
|
181
|
+
*/
|
|
182
|
+
async recanonicalize(oldSlug, newSlug) {
|
|
183
|
+
if (oldSlug === newSlug)
|
|
184
|
+
return;
|
|
185
|
+
const pages = this.requirePages();
|
|
186
|
+
const page = await pages.getPage(oldSlug);
|
|
187
|
+
if (!page)
|
|
188
|
+
throw new Error(`person page '${oldSlug}' not found`);
|
|
189
|
+
if (await pages.getPage(newSlug)) {
|
|
190
|
+
throw new Error(`'${newSlug}' already exists; use merge('${oldSlug}', '${newSlug}') instead`);
|
|
191
|
+
}
|
|
192
|
+
await this.db.query("UPDATE pages SET slug = $1, updated_at = NOW() WHERE slug = $2", [
|
|
193
|
+
newSlug,
|
|
194
|
+
oldSlug,
|
|
195
|
+
]);
|
|
196
|
+
await this.db.query("UPDATE person_handles SET canonical_slug = $1 WHERE canonical_slug = $2", [
|
|
197
|
+
newSlug,
|
|
198
|
+
oldSlug,
|
|
199
|
+
]);
|
|
200
|
+
await this.insertHandle("slug", oldSlug, newSlug, "strong", false);
|
|
201
|
+
await this.repointIdentityCache(oldSlug, newSlug);
|
|
202
|
+
const renamed = await pages.getPage(newSlug);
|
|
203
|
+
if (renamed)
|
|
204
|
+
await this.appendAliasesToPage(newSlug, [oldSlug]);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Merge person page `fromSlug` into `intoSlug`. Re-points links, timeline
|
|
208
|
+
* entries, and tags; folds the body and aliases into the target; records the
|
|
209
|
+
* old slug + handles as aliases of the target; deletes the old page.
|
|
210
|
+
*
|
|
211
|
+
* All direct SQL is executed inside a single transaction. Page rows are
|
|
212
|
+
* locked in sorted slug order to prevent deadlocks between concurrent
|
|
213
|
+
* reverse merges. If the source page no longer exists inside the transaction
|
|
214
|
+
* (already merged by a concurrent caller), the method returns as a no-op.
|
|
215
|
+
*
|
|
216
|
+
* Note: the old page's embeddings (chunks) are dropped with it — run
|
|
217
|
+
* `memkin embed` afterwards to re-embed the folded content.
|
|
218
|
+
*/
|
|
219
|
+
async merge(fromSlug, intoSlug) {
|
|
220
|
+
if (fromSlug === intoSlug)
|
|
221
|
+
throw new Error("cannot merge a person into itself");
|
|
222
|
+
// Validate existence BEFORE the transaction (nicer error messages).
|
|
223
|
+
const pages = this.requirePages();
|
|
224
|
+
const fromPre = await pages.getPage(fromSlug);
|
|
225
|
+
const intoPre = await pages.getPage(intoSlug);
|
|
226
|
+
if (!fromPre)
|
|
227
|
+
throw new Error(`person page '${fromSlug}' not found`);
|
|
228
|
+
if (!intoPre)
|
|
229
|
+
throw new Error(`person page '${intoSlug}' not found`);
|
|
230
|
+
// Spec 8: behavior counters are additive; use their own atomic transaction.
|
|
231
|
+
// This runs outside the identity tx intentionally — behavior is eventually
|
|
232
|
+
// consistent and additive.
|
|
233
|
+
// NOTE: behavior.merge() runs BEFORE the identity tx (it has its own atomic tx).
|
|
234
|
+
// Known relaxation: if the identity tx below rolls back AFTER this succeeds,
|
|
235
|
+
// behavior counters are misattributed to the target while the identity merge is
|
|
236
|
+
// reverted (source page persists with no behavior row, counters double-counted
|
|
237
|
+
// under target). Acceptable for rare explicit merges; for strict consistency,
|
|
238
|
+
// move behavior merge into the identity tx via a tx-scoped variant.
|
|
239
|
+
// Identity-table integrity itself is unaffected.
|
|
240
|
+
if (this.extra?.behavior) {
|
|
241
|
+
await this.extra.behavior.merge(fromSlug, intoSlug);
|
|
242
|
+
}
|
|
243
|
+
// Compute merged content before entering the tx (reads only, no side effects).
|
|
244
|
+
const aliasValues = new Set([
|
|
245
|
+
...this.frontmatterAliases(intoPre),
|
|
246
|
+
...this.frontmatterAliases(fromPre),
|
|
247
|
+
fromSlug,
|
|
248
|
+
]);
|
|
249
|
+
const foldedBody = fromPre.compiled_truth.trim().length > 0
|
|
250
|
+
? `${intoPre.compiled_truth.trimEnd()}\n\n## Merged from ${fromSlug}\n\n${fromPre.compiled_truth.trim()}`
|
|
251
|
+
: intoPre.compiled_truth;
|
|
252
|
+
// Spec 8: drop stale cached communication profile so next synthesis recomputes.
|
|
253
|
+
const { profile: _staleProfile, ...intoFm } = intoPre.frontmatter;
|
|
254
|
+
const mergedPage = { ...intoPre, frontmatter: intoFm };
|
|
255
|
+
await this.db.transaction(async (tx) => {
|
|
256
|
+
// Lock page rows in FIXED sorted slug order to prevent deadlock between
|
|
257
|
+
// concurrent A→B and B→A merges.
|
|
258
|
+
const [firstSlug, secondSlug] = [fromSlug, intoSlug].sort();
|
|
259
|
+
await tx.query("SELECT id FROM pages WHERE slug = $1 FOR UPDATE", [firstSlug]);
|
|
260
|
+
await tx.query("SELECT id FROM pages WHERE slug = $1 FOR UPDATE", [secondSlug]);
|
|
261
|
+
// Idempotency: if the source page was already merged, return as no-op.
|
|
262
|
+
const fromCheck = await tx.query("SELECT id FROM pages WHERE slug = $1", [
|
|
263
|
+
fromSlug,
|
|
264
|
+
]);
|
|
265
|
+
if (fromCheck.rows.length === 0)
|
|
266
|
+
return;
|
|
267
|
+
const fromId = fromCheck.rows[0].id;
|
|
268
|
+
const intoCheck = await tx.query("SELECT id FROM pages WHERE slug = $1", [
|
|
269
|
+
intoSlug,
|
|
270
|
+
]);
|
|
271
|
+
if (intoCheck.rows.length === 0)
|
|
272
|
+
return;
|
|
273
|
+
const intoId = intoCheck.rows[0].id;
|
|
274
|
+
// Re-point outgoing links, skipping rows that would violate the
|
|
275
|
+
// UNIQUE(from_page_id, to_page_id, link_type) constraint, then drop dups.
|
|
276
|
+
await tx.query(`UPDATE links SET from_page_id = $1
|
|
277
|
+
WHERE from_page_id = $2
|
|
278
|
+
AND NOT EXISTS (
|
|
279
|
+
SELECT 1 FROM links l2
|
|
280
|
+
WHERE l2.from_page_id = $1 AND l2.to_page_id = links.to_page_id
|
|
281
|
+
AND l2.link_type = links.link_type
|
|
282
|
+
)`, [intoId, fromId]);
|
|
283
|
+
await tx.query("DELETE FROM links WHERE from_page_id = $1", [fromId]);
|
|
284
|
+
// Re-point incoming links.
|
|
285
|
+
await tx.query(`UPDATE links SET to_page_id = $1
|
|
286
|
+
WHERE to_page_id = $2
|
|
287
|
+
AND NOT EXISTS (
|
|
288
|
+
SELECT 1 FROM links l2
|
|
289
|
+
WHERE l2.to_page_id = $1 AND l2.from_page_id = links.from_page_id
|
|
290
|
+
AND l2.link_type = links.link_type
|
|
291
|
+
)`, [intoId, fromId]);
|
|
292
|
+
await tx.query("DELETE FROM links WHERE to_page_id = $1", [fromId]);
|
|
293
|
+
// Drop any self-link created by the merge.
|
|
294
|
+
await tx.query("DELETE FROM links WHERE from_page_id = $1 AND to_page_id = $1", [intoId]);
|
|
295
|
+
// Re-point timeline entries (UNIQUE(page_id, date, summary)).
|
|
296
|
+
await tx.query(`UPDATE timeline_entries SET page_id = $1
|
|
297
|
+
WHERE page_id = $2
|
|
298
|
+
AND NOT EXISTS (
|
|
299
|
+
SELECT 1 FROM timeline_entries t2
|
|
300
|
+
WHERE t2.page_id = $1 AND t2.date = timeline_entries.date
|
|
301
|
+
AND t2.summary = timeline_entries.summary
|
|
302
|
+
)`, [intoId, fromId]);
|
|
303
|
+
await tx.query("DELETE FROM timeline_entries WHERE page_id = $1", [fromId]);
|
|
304
|
+
// Re-point tags (UNIQUE(page_id, tag)).
|
|
305
|
+
await tx.query(`UPDATE tags SET page_id = $1
|
|
306
|
+
WHERE page_id = $2
|
|
307
|
+
AND NOT EXISTS (SELECT 1 FROM tags t2 WHERE t2.page_id = $1 AND t2.tag = tags.tag)`, [intoId, fromId]);
|
|
308
|
+
await tx.query("DELETE FROM tags WHERE page_id = $1", [fromId]);
|
|
309
|
+
// Fold body + aliases into the target page.
|
|
310
|
+
await this.writePageTx(tx, mergedPage, foldedBody, [...aliasValues]);
|
|
311
|
+
// Re-point handle + identity-cache mappings.
|
|
312
|
+
await tx.query("UPDATE person_handles SET canonical_slug = $1 WHERE canonical_slug = $2", [
|
|
313
|
+
intoSlug,
|
|
314
|
+
fromSlug,
|
|
315
|
+
]);
|
|
316
|
+
await this.insertHandleTx(tx, "slug", fromSlug, intoSlug, "strong", false);
|
|
317
|
+
await this.repointIdentityCacheTx(tx, fromSlug, intoSlug);
|
|
318
|
+
// Delete the source page (chunks cascade via FK ON DELETE CASCADE).
|
|
319
|
+
await tx.query("DELETE FROM pages WHERE slug = $1", [fromSlug]);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
// ── internals ──────────────────────────────────────────────────────────
|
|
323
|
+
requirePages() {
|
|
324
|
+
if (!this.stores?.pages) {
|
|
325
|
+
throw new Error("PersonIdentityStore: page operations require a PageStore");
|
|
326
|
+
}
|
|
327
|
+
return this.stores.pages;
|
|
328
|
+
}
|
|
329
|
+
async insertHandle(kind, value, canonicalSlug, strength, ignoreConflict) {
|
|
330
|
+
const v = canonicalizeHandleValue(kind, value);
|
|
331
|
+
if (ignoreConflict) {
|
|
332
|
+
await this.db.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
|
|
333
|
+
VALUES ($1, $2, $3, $4)
|
|
334
|
+
ON CONFLICT (kind, value) DO NOTHING`, [kind, v, canonicalSlug, strength]);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
await this.db.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
|
|
338
|
+
VALUES ($1, $2, $3, $4)
|
|
339
|
+
ON CONFLICT (kind, value) DO UPDATE SET
|
|
340
|
+
canonical_slug = EXCLUDED.canonical_slug,
|
|
341
|
+
strength = EXCLUDED.strength`, [kind, v, canonicalSlug, strength]);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
async repointIdentityCache(oldSlug, newSlug) {
|
|
345
|
+
await this.db.query("UPDATE identity_cache SET display_name = $1 WHERE platform = 'canonical' AND display_name = $2", [newSlug, oldSlug]);
|
|
346
|
+
await this.db.query(`INSERT INTO identity_cache (platform, external_id, display_name, slug_hint)
|
|
347
|
+
VALUES ('canonical', $1, $2, $1)
|
|
348
|
+
ON CONFLICT (platform, external_id) DO UPDATE SET display_name = EXCLUDED.display_name`, [oldSlug, newSlug]);
|
|
349
|
+
}
|
|
350
|
+
/** tx-scoped variant of repointIdentityCache for use inside merge transaction. */
|
|
351
|
+
async repointIdentityCacheTx(tx, oldSlug, newSlug) {
|
|
352
|
+
await tx.query("UPDATE identity_cache SET display_name = $1 WHERE platform = 'canonical' AND display_name = $2", [newSlug, oldSlug]);
|
|
353
|
+
await tx.query(`INSERT INTO identity_cache (platform, external_id, display_name, slug_hint)
|
|
354
|
+
VALUES ('canonical', $1, $2, $1)
|
|
355
|
+
ON CONFLICT (platform, external_id) DO UPDATE SET display_name = EXCLUDED.display_name`, [oldSlug, newSlug]);
|
|
356
|
+
}
|
|
357
|
+
/** tx-scoped variant of insertHandle for use inside merge transaction. */
|
|
358
|
+
async insertHandleTx(tx, kind, value, canonicalSlug, strength, ignoreConflict) {
|
|
359
|
+
const v = canonicalizeHandleValue(kind, value);
|
|
360
|
+
if (ignoreConflict) {
|
|
361
|
+
await tx.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
|
|
362
|
+
VALUES ($1, $2, $3, $4)
|
|
363
|
+
ON CONFLICT (kind, value) DO NOTHING`, [kind, v, canonicalSlug, strength]);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
await tx.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
|
|
367
|
+
VALUES ($1, $2, $3, $4)
|
|
368
|
+
ON CONFLICT (kind, value) DO UPDATE SET
|
|
369
|
+
canonical_slug = EXCLUDED.canonical_slug,
|
|
370
|
+
strength = EXCLUDED.strength`, [kind, v, canonicalSlug, strength]);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
frontmatterAliases(page) {
|
|
374
|
+
const a = page.frontmatter.aliases;
|
|
375
|
+
return Array.isArray(a) ? a.map(String) : [];
|
|
376
|
+
}
|
|
377
|
+
async appendAliasesToPage(slug, newAliases) {
|
|
378
|
+
const pages = this.requirePages();
|
|
379
|
+
const page = await pages.getPage(slug);
|
|
380
|
+
if (!page)
|
|
381
|
+
return;
|
|
382
|
+
const merged = new Set([...this.frontmatterAliases(page), ...newAliases]);
|
|
383
|
+
await this.writePage(page, page.compiled_truth, [...merged]);
|
|
384
|
+
}
|
|
385
|
+
async writePage(page, body, aliases) {
|
|
386
|
+
const pages = this.requirePages();
|
|
387
|
+
const { aliases: _drop, ...rest } = page.frontmatter;
|
|
388
|
+
const fm = {
|
|
389
|
+
title: page.title,
|
|
390
|
+
type: page.type,
|
|
391
|
+
...rest,
|
|
392
|
+
};
|
|
393
|
+
if (aliases.length > 0)
|
|
394
|
+
fm.aliases = aliases;
|
|
395
|
+
const content = `---\n${stringifyYaml(fm)}---\n${body}`;
|
|
396
|
+
await pages.putPage(page.slug, content);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* tx-scoped page write for use inside the merge transaction.
|
|
400
|
+
* Executes the putPage SQL directly against the tx connection so the update
|
|
401
|
+
* participates in the outer transaction (avoids using a pool connection from
|
|
402
|
+
* PageStore which would be outside the tx boundary).
|
|
403
|
+
*/
|
|
404
|
+
async writePageTx(tx, page, body, aliases) {
|
|
405
|
+
const { createHash } = await import("node:crypto");
|
|
406
|
+
const { stringify: stringifyYamlFn } = await import("yaml");
|
|
407
|
+
const { aliases: _drop, ...rest } = page.frontmatter;
|
|
408
|
+
const fm = {
|
|
409
|
+
title: page.title,
|
|
410
|
+
type: page.type,
|
|
411
|
+
...rest,
|
|
412
|
+
};
|
|
413
|
+
if (aliases.length > 0)
|
|
414
|
+
fm.aliases = aliases;
|
|
415
|
+
const content = `---\n${stringifyYamlFn(fm)}---\n${body}`;
|
|
416
|
+
const contentHash = createHash("sha256").update(content).digest("hex");
|
|
417
|
+
await tx.query(`INSERT INTO pages (slug, type, title, compiled_truth, frontmatter, content_hash)
|
|
418
|
+
VALUES ($1, $2, $3, $4, $5::jsonb, $6)
|
|
419
|
+
ON CONFLICT (slug) DO UPDATE SET
|
|
420
|
+
type = EXCLUDED.type,
|
|
421
|
+
title = EXCLUDED.title,
|
|
422
|
+
compiled_truth = EXCLUDED.compiled_truth,
|
|
423
|
+
frontmatter = EXCLUDED.frontmatter,
|
|
424
|
+
content_hash = EXCLUDED.content_hash,
|
|
425
|
+
updated_at = NOW()`, [page.slug, page.type, page.title, body, JSON.stringify(fm), contentHash]);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=person-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person-identity.js","sourceRoot":"","sources":["../../src/core/person-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a person's name to a canonical slug.
|
|
3
|
+
*
|
|
4
|
+
* Chinese names: person/{family}-{given} (pinyin, lowercase)
|
|
5
|
+
* Latin names: person/{kebab-case}
|
|
6
|
+
* Feishu open IDs: person/{ou_<id>} (preserve underscore)
|
|
7
|
+
*
|
|
8
|
+
* Returns null if:
|
|
9
|
+
* - Input is empty or whitespace only
|
|
10
|
+
* - Name contains non-CJK, non-Latin scripts (e.g. Arabic, Cyrillic)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* toPersonCanonicalSlug("王建都") // "person/wang-jiandu"
|
|
14
|
+
* toPersonCanonicalSlug("李明") // "person/li-ming"
|
|
15
|
+
* toPersonCanonicalSlug("Alice Smith") // "person/alice-smith"
|
|
16
|
+
* toPersonCanonicalSlug("Sylar") // "person/sylar"
|
|
17
|
+
* toPersonCanonicalSlug("ou_10d417bea2263b13b0112f8067334323") // "person/ou_10d417..."
|
|
18
|
+
* toPersonCanonicalSlug("أحمد") // null
|
|
19
|
+
*/
|
|
20
|
+
export declare function toPersonCanonicalSlug(name: string): string | null;
|
|
21
|
+
//# sourceMappingURL=person-slug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person-slug.d.ts","sourceRoot":"","sources":["../../src/core/person-slug.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkDjE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { pinyin } from "pinyin-pro";
|
|
2
|
+
/**
|
|
3
|
+
* Convert a person's name to a canonical slug.
|
|
4
|
+
*
|
|
5
|
+
* Chinese names: person/{family}-{given} (pinyin, lowercase)
|
|
6
|
+
* Latin names: person/{kebab-case}
|
|
7
|
+
* Feishu open IDs: person/{ou_<id>} (preserve underscore)
|
|
8
|
+
*
|
|
9
|
+
* Returns null if:
|
|
10
|
+
* - Input is empty or whitespace only
|
|
11
|
+
* - Name contains non-CJK, non-Latin scripts (e.g. Arabic, Cyrillic)
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* toPersonCanonicalSlug("王建都") // "person/wang-jiandu"
|
|
15
|
+
* toPersonCanonicalSlug("李明") // "person/li-ming"
|
|
16
|
+
* toPersonCanonicalSlug("Alice Smith") // "person/alice-smith"
|
|
17
|
+
* toPersonCanonicalSlug("Sylar") // "person/sylar"
|
|
18
|
+
* toPersonCanonicalSlug("ou_10d417bea2263b13b0112f8067334323") // "person/ou_10d417..."
|
|
19
|
+
* toPersonCanonicalSlug("أحمد") // null
|
|
20
|
+
*/
|
|
21
|
+
export function toPersonCanonicalSlug(name) {
|
|
22
|
+
// 1. Trim whitespace
|
|
23
|
+
let cleaned = name.trim();
|
|
24
|
+
if (cleaned === "")
|
|
25
|
+
return null;
|
|
26
|
+
// 2. Generic Feishu user labels often include the only stable identity as an open ID.
|
|
27
|
+
const openIdMatch = cleaned.match(/\bou_[a-zA-Z0-9]+\b/);
|
|
28
|
+
if (openIdMatch) {
|
|
29
|
+
const labelWithoutOpenId = cleaned
|
|
30
|
+
.replace(/[((][^))]*ou_[a-zA-Z0-9]+[^))]*[))]/gi, "")
|
|
31
|
+
.replace(/\bou_[a-zA-Z0-9]+\b/gi, "")
|
|
32
|
+
.trim();
|
|
33
|
+
const genericLabel = labelWithoutOpenId
|
|
34
|
+
.toLowerCase()
|
|
35
|
+
.replace(/[^a-z]+/g, " ")
|
|
36
|
+
.trim();
|
|
37
|
+
const hasNamedCjkLabel = /[一-鿿]/.test(labelWithoutOpenId);
|
|
38
|
+
if (!hasNamedCjkLabel &&
|
|
39
|
+
(genericLabel === "" || genericLabel === "user" || genericLabel === "feishu user")) {
|
|
40
|
+
return `person/${openIdMatch[0].toLowerCase()}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 3. Remove parenthetical hints: strip (...)
|
|
44
|
+
cleaned = cleaned.replace(/[((][^))]*[))]/g, "").trim();
|
|
45
|
+
if (cleaned === "")
|
|
46
|
+
return null;
|
|
47
|
+
// 4. Preserve bare Feishu open IDs as stable opaque identifiers.
|
|
48
|
+
if (/^ou_[a-zA-Z0-9]+$/.test(cleaned)) {
|
|
49
|
+
return `person/${cleaned.toLowerCase()}`;
|
|
50
|
+
}
|
|
51
|
+
// 5. Detect script
|
|
52
|
+
const hasCJK = /[一-鿿]/.test(cleaned);
|
|
53
|
+
const isLatinOnly = /^[a-zA-Z\s\-']+$/.test(cleaned);
|
|
54
|
+
if (hasCJK) {
|
|
55
|
+
// Chinese path
|
|
56
|
+
return chinesePath(cleaned);
|
|
57
|
+
}
|
|
58
|
+
if (isLatinOnly) {
|
|
59
|
+
// Latin path
|
|
60
|
+
return latinPath(cleaned);
|
|
61
|
+
}
|
|
62
|
+
// Otherwise: ambiguous or unsupported script
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
function chinesePath(name) {
|
|
66
|
+
// Convert to pinyin array (without tones)
|
|
67
|
+
const syllables = pinyin(name, { toneType: "none", type: "array" });
|
|
68
|
+
if (syllables.length === 0)
|
|
69
|
+
return "person/unknown";
|
|
70
|
+
if (syllables.length === 1) {
|
|
71
|
+
// Single character name
|
|
72
|
+
return `person/${syllables[0].toLowerCase()}`;
|
|
73
|
+
}
|
|
74
|
+
// First syllable = family name
|
|
75
|
+
const family = syllables[0].toLowerCase();
|
|
76
|
+
// Remaining syllables = join together (no separator) = given name
|
|
77
|
+
const given = syllables
|
|
78
|
+
.slice(1)
|
|
79
|
+
.map((s) => s.toLowerCase())
|
|
80
|
+
.join("");
|
|
81
|
+
return `person/${family}-${given}`;
|
|
82
|
+
}
|
|
83
|
+
function latinPath(name) {
|
|
84
|
+
// Lowercase, replace apostrophes with hyphen, split on whitespace/hyphen, join with hyphen
|
|
85
|
+
const kebab = name
|
|
86
|
+
.toLowerCase()
|
|
87
|
+
.replace(/'/g, "-") // Replace apostrophes with hyphens
|
|
88
|
+
.split(/\s+/)
|
|
89
|
+
.filter((part) => part.length > 0)
|
|
90
|
+
.join("-");
|
|
91
|
+
return `person/${kebab}`;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=person-slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person-slug.js","sourceRoot":"","sources":["../../src/core/person-slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,qBAAqB;IACrB,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEhC,sFAAsF;IACtF,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,kBAAkB,GAAG,OAAO;aAC/B,OAAO,CAAC,uCAAuC,EAAE,EAAE,CAAC;aACpD,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;aACpC,IAAI,EAAE,CAAC;QACV,MAAM,YAAY,GAAG,kBAAkB;aACpC,WAAW,EAAE;aACb,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;aACxB,IAAI,EAAE,CAAC;QACV,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1D,IACE,CAAC,gBAAgB;YACjB,CAAC,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,aAAa,CAAC,EAClF,CAAC;YACD,OAAO,UAAU,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEhC,iEAAiE;IACjE,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAErD,IAAI,MAAM,EAAE,CAAC;QACX,eAAe;QACf,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,aAAa;QACb,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,6CAA6C;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,0CAA0C;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAa,CAAC;IAEhF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAEpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,wBAAwB;QACxB,OAAO,UAAU,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,kEAAkE;IAClE,MAAM,KAAK,GAAG,SAAS;SACpB,KAAK,CAAC,CAAC,CAAC;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC3B,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,UAAU,MAAM,IAAI,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,2FAA2F;IAC3F,MAAM,KAAK,GAAG,IAAI;SACf,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,mCAAmC;SACtD,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,UAAU,KAAK,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LLMProvider } from "../extractors/providers/types.js";
|
|
2
|
+
import type { SqlExecutor } from "../store/sql-executor.js";
|
|
3
|
+
import type { Config } from "./config.js";
|
|
4
|
+
import { IdentityResolver } from "./identity-resolver.js";
|
|
5
|
+
import type { PipelineConfig } from "./pipeline.js";
|
|
6
|
+
export interface PipelineRuntime {
|
|
7
|
+
config: PipelineConfig;
|
|
8
|
+
provider: LLMProvider;
|
|
9
|
+
identity_resolver?: IdentityResolver;
|
|
10
|
+
}
|
|
11
|
+
export declare function buildPipelineConfig(config: Config, output_dir: string, projectRoot?: string): PipelineConfig;
|
|
12
|
+
export declare function createPipelineRuntime(config: Config, pg: SqlExecutor, output_dir: string): Promise<PipelineRuntime>;
|
|
13
|
+
//# sourceMappingURL=pipeline-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAMD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,cAAc,CAahB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAiB1B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createLLMProvider } from "../extractors/providers/index.js";
|
|
2
|
+
import { IdentityResolver } from "./identity-resolver.js";
|
|
3
|
+
import { statePath } from "./state.js";
|
|
4
|
+
function projectRootOf(config, projectRoot) {
|
|
5
|
+
return projectRoot ?? config.__context?.projectRoot;
|
|
6
|
+
}
|
|
7
|
+
export function buildPipelineConfig(config, output_dir, projectRoot) {
|
|
8
|
+
const stateBase = projectRootOf(config, projectRoot);
|
|
9
|
+
return {
|
|
10
|
+
dedup_checkpoint: statePath("dedup.jsonl", stateBase),
|
|
11
|
+
cursor_checkpoint: statePath("cursors.yaml", stateBase),
|
|
12
|
+
block_gap_minutes: config.block_builder.block_gap_minutes,
|
|
13
|
+
max_block_tokens: config.block_builder.max_block_tokens,
|
|
14
|
+
max_block_messages: config.block_builder.max_block_messages,
|
|
15
|
+
privacy: config.privacy,
|
|
16
|
+
output_dir,
|
|
17
|
+
block_concurrency: config.pipeline?.block_concurrency,
|
|
18
|
+
state_base: stateBase,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export async function createPipelineRuntime(config, pg, output_dir) {
|
|
22
|
+
const llmConfig = { ...config.llm };
|
|
23
|
+
if (!llmConfig.api_key && !process.env.OPENAI_API_KEY) {
|
|
24
|
+
throw new Error("No API key configured. Set api_key in memkin.yaml or OPENAI_API_KEY env var.");
|
|
25
|
+
}
|
|
26
|
+
if (!llmConfig.api_key) {
|
|
27
|
+
llmConfig.api_key = process.env.OPENAI_API_KEY;
|
|
28
|
+
}
|
|
29
|
+
const provider = createLLMProvider(llmConfig);
|
|
30
|
+
const identity_resolver = new IdentityResolver(pg);
|
|
31
|
+
return {
|
|
32
|
+
config: buildPipelineConfig(config, output_dir),
|
|
33
|
+
provider,
|
|
34
|
+
identity_resolver,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=pipeline-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-factory.js","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAIrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,SAAS,aAAa,CAAC,MAAc,EAAE,WAAoB;IACzD,OAAO,WAAW,IAAK,MAAgC,CAAC,SAAS,EAAE,WAAW,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,UAAkB,EAClB,WAAoB;IAEpB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrD,OAAO;QACL,gBAAgB,EAAE,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC;QACrD,iBAAiB,EAAE,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC;QACvD,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,iBAAiB;QACzD,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,gBAAgB;QACvD,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC,kBAAkB;QAC3D,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU;QACV,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB;QACrD,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,EAAe,EACf,UAAkB;IAElB,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC;QAC/C,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|