@andre.li/memoark 0.3.1 → 0.3.2
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.en.md +388 -69
- package/README.md +674 -309
- package/README.zh-CN.md +816 -0
- package/bin/memoark.mjs +7 -2
- package/dist/adapters/store.d.ts.map +1 -1
- package/dist/adapters/store.js +6 -5
- package/dist/adapters/store.js.map +1 -1
- 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.js +682 -126
- package/dist/cli.js.map +1 -1
- 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 +4 -0
- package/dist/collectors/feishu/collector.d.ts.map +1 -1
- package/dist/collectors/feishu/collector.js +27 -4
- package/dist/collectors/feishu/collector.js.map +1 -1
- 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/lark-cli-client.d.ts +12 -0
- package/dist/collectors/feishu/lark-cli-client.d.ts.map +1 -1
- package/dist/collectors/feishu/lark-cli-client.js +37 -2
- package/dist/collectors/feishu/lark-cli-client.js.map +1 -1
- 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/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/dm.d.ts.map +1 -1
- package/dist/collectors/feishu/sources/dm.js +4 -0
- package/dist/collectors/feishu/sources/dm.js.map +1 -1
- package/dist/collectors/feishu/sources/mail.d.ts.map +1 -1
- package/dist/collectors/feishu/sources/mail.js +18 -20
- package/dist/collectors/feishu/sources/mail.js.map +1 -1
- package/dist/collectors/feishu/sources/messages.d.ts +2 -0
- package/dist/collectors/feishu/sources/messages.d.ts.map +1 -1
- package/dist/collectors/feishu/sources/messages.js +28 -1
- package/dist/collectors/feishu/sources/messages.js.map +1 -1
- package/dist/collectors/feishu/types.d.ts +37 -3
- package/dist/collectors/feishu/types.d.ts.map +1 -1
- package/dist/collectors/feishu/types.js.map +1 -1
- package/dist/config-center/connection-checks.d.ts.map +1 -1
- package/dist/config-center/connection-checks.js +1 -1
- package/dist/config-center/connection-checks.js.map +1 -1
- package/dist/config-center/schema.d.ts.map +1 -1
- package/dist/config-center/schema.js +77 -0
- package/dist/config-center/schema.js.map +1 -1
- package/dist/consolidator/consolidator.d.ts +13 -1
- package/dist/consolidator/consolidator.d.ts.map +1 -1
- package/dist/consolidator/consolidator.js +12 -2
- package/dist/consolidator/consolidator.js.map +1 -1
- package/dist/core/canonicalize.js +5 -1
- package/dist/core/canonicalize.js.map +1 -1
- package/dist/core/config.d.ts +52 -9
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +86 -24
- package/dist/core/config.js.map +1 -1
- 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/identity-resolver.d.ts +24 -3
- package/dist/core/identity-resolver.d.ts.map +1 -1
- package/dist/core/identity-resolver.js +147 -2
- package/dist/core/identity-resolver.js.map +1 -1
- package/dist/core/person-identity.d.ts +124 -0
- package/dist/core/person-identity.d.ts.map +1 -0
- package/dist/core/person-identity.js +342 -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 +1 -1
- package/dist/core/pipeline-factory.d.ts.map +1 -1
- package/dist/core/pipeline-factory.js +8 -3
- package/dist/core/pipeline-factory.js.map +1 -1
- package/dist/core/pipeline.d.ts +16 -0
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +49 -1
- package/dist/core/pipeline.js.map +1 -1
- 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 +2981 -309
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +27 -0
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/signal-scoring.d.ts.map +1 -1
- package/dist/core/signal-scoring.js +5 -1
- package/dist/core/signal-scoring.js.map +1 -1
- 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 +1 -1
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +3 -2
- package/dist/core/state.js.map +1 -1
- package/dist/core/types.d.ts +34 -6
- package/dist/core/types.d.ts.map +1 -1
- package/dist/daemon/reload-manager.d.ts +27 -0
- package/dist/daemon/reload-manager.d.ts.map +1 -0
- package/dist/daemon/reload-manager.js +67 -0
- package/dist/daemon/reload-manager.js.map +1 -0
- package/dist/daemon/scheduler.d.ts +9 -1
- package/dist/daemon/scheduler.d.ts.map +1 -1
- package/dist/daemon/scheduler.js +113 -38
- package/dist/daemon/scheduler.js.map +1 -1
- 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/embedded-assets.generated.d.ts.map +1 -1
- package/dist/embedded-assets.generated.js +3 -3
- package/dist/embedded-assets.generated.js.map +1 -1
- 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/prompts/examples/agent-session.md +257 -0
- package/dist/extractors/prompts/signal-extract.md +199 -0
- package/dist/extractors/prompts/system.md +45 -0
- package/dist/extractors/signal-extractor.d.ts +2 -1
- package/dist/extractors/signal-extractor.d.ts.map +1 -1
- package/dist/extractors/signal-extractor.js +99 -7
- package/dist/extractors/signal-extractor.js.map +1 -1
- 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 +30 -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 +31 -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 +32 -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 +35 -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 +35 -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 +32 -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 +26 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +117 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/json-config.d.ts +11 -0
- package/dist/install/json-config.d.ts.map +1 -0
- package/dist/install/json-config.js +39 -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/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 +51 -0
- package/dist/install/toml-config.js.map +1 -0
- package/dist/install/types.d.ts +37 -0
- package/dist/install/types.d.ts.map +1 -0
- package/dist/install/types.js +4 -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 +18 -0
- package/dist/install/yaml-config.js.map +1 -0
- package/dist/processors/privacy.d.ts +4 -1
- package/dist/processors/privacy.d.ts.map +1 -1
- package/dist/processors/privacy.js +5 -3
- package/dist/processors/privacy.js.map +1 -1
- 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 +8 -2
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +69 -34
- package/dist/server/api.js.map +1 -1
- package/dist/server/backfill-routes.d.ts.map +1 -1
- package/dist/server/backfill-routes.js +14 -1
- package/dist/server/backfill-routes.js.map +1 -1
- 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 +2 -0
- package/dist/server/config-routes.d.ts.map +1 -1
- package/dist/server/config-routes.js +2 -1
- package/dist/server/config-routes.js.map +1 -1
- package/dist/server/mcp-http.d.ts +26 -0
- package/dist/server/mcp-http.d.ts.map +1 -0
- package/dist/server/mcp-http.js +102 -0
- package/dist/server/mcp-http.js.map +1 -0
- package/dist/server/mcp.d.ts +191 -25
- package/dist/server/mcp.d.ts.map +1 -1
- package/dist/server/mcp.js +1111 -68
- package/dist/server/mcp.js.map +1 -1
- 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/setup-server.d.ts.map +1 -1
- package/dist/server/setup-server.js +8 -11
- package/dist/server/setup-server.js.map +1 -1
- package/dist/setup/connection-tests.d.ts +1 -1
- package/dist/setup/connection-tests.d.ts.map +1 -1
- package/dist/setup/connection-tests.js +4 -2
- package/dist/setup/connection-tests.js.map +1 -1
- package/dist/setup/generate-config.d.ts.map +1 -1
- package/dist/setup/generate-config.js +31 -1
- package/dist/setup/generate-config.js.map +1 -1
- package/dist/setup/init-wizard.d.ts +1 -0
- package/dist/setup/init-wizard.d.ts.map +1 -1
- package/dist/setup/init-wizard.js +38 -21
- package/dist/setup/init-wizard.js.map +1 -1
- package/dist/setup/validate-config.d.ts +5 -1
- package/dist/setup/validate-config.d.ts.map +1 -1
- package/dist/setup/validate-config.js +18 -0
- package/dist/setup/validate-config.js.map +1 -1
- 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 +2 -0
- package/dist/store/database.d.ts.map +1 -1
- package/dist/store/database.js +23 -10
- package/dist/store/database.js.map +1 -1
- package/dist/store/graph.d.ts +22 -0
- package/dist/store/graph.d.ts.map +1 -1
- package/dist/store/graph.js +97 -7
- package/dist/store/graph.js.map +1 -1
- package/dist/store/migrations/index.d.ts.map +1 -1
- package/dist/store/migrations/index.js +52 -0
- package/dist/store/migrations/index.js.map +1 -1
- package/dist/store/pages.d.ts +7 -0
- package/dist/store/pages.d.ts.map +1 -1
- package/dist/store/pages.js +56 -1
- package/dist/store/pages.js.map +1 -1
- package/dist/store/person-behavior.d.ts +28 -0
- package/dist/store/person-behavior.d.ts.map +1 -0
- package/dist/store/person-behavior.js +127 -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/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/schema.sql +107 -0
- package/dist/store/search.d.ts +36 -8
- package/dist/store/search.d.ts.map +1 -1
- package/dist/store/search.js +188 -76
- package/dist/store/search.js.map +1 -1
- package/dist/store/tags.d.ts.map +1 -1
- package/dist/store/tags.js +6 -2
- package/dist/store/tags.js.map +1 -1
- package/dist/store/timeline.d.ts +13 -1
- package/dist/store/timeline.d.ts.map +1 -1
- package/dist/store/timeline.js +134 -4
- package/dist/store/timeline.js.map +1 -1
- 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.map +1 -1
- package/dist/sync/obsidian.js +5 -1
- package/dist/sync/obsidian.js.map +1 -1
- 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 +18 -6
|
@@ -0,0 +1,342 @@
|
|
|
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
|
+
* Note: the old page's embeddings (chunks) are dropped with it — run
|
|
212
|
+
* `memoark embed` afterwards to re-embed the folded content.
|
|
213
|
+
*/
|
|
214
|
+
async merge(fromSlug, intoSlug) {
|
|
215
|
+
if (fromSlug === intoSlug)
|
|
216
|
+
throw new Error("cannot merge a person into itself");
|
|
217
|
+
const pages = this.requirePages();
|
|
218
|
+
const from = await pages.getPage(fromSlug);
|
|
219
|
+
const into = await pages.getPage(intoSlug);
|
|
220
|
+
if (!from)
|
|
221
|
+
throw new Error(`person page '${fromSlug}' not found`);
|
|
222
|
+
if (!into)
|
|
223
|
+
throw new Error(`person page '${intoSlug}' not found`);
|
|
224
|
+
const fromId = from.id;
|
|
225
|
+
const intoId = into.id;
|
|
226
|
+
// Re-point outgoing links, skipping rows that would violate the
|
|
227
|
+
// UNIQUE(from_page_id, to_page_id, link_type) constraint, then drop dups.
|
|
228
|
+
await this.db.query(`UPDATE links SET from_page_id = $1
|
|
229
|
+
WHERE from_page_id = $2
|
|
230
|
+
AND NOT EXISTS (
|
|
231
|
+
SELECT 1 FROM links l2
|
|
232
|
+
WHERE l2.from_page_id = $1 AND l2.to_page_id = links.to_page_id
|
|
233
|
+
AND l2.link_type = links.link_type
|
|
234
|
+
)`, [intoId, fromId]);
|
|
235
|
+
await this.db.query("DELETE FROM links WHERE from_page_id = $1", [fromId]);
|
|
236
|
+
// Re-point incoming links.
|
|
237
|
+
await this.db.query(`UPDATE links SET to_page_id = $1
|
|
238
|
+
WHERE to_page_id = $2
|
|
239
|
+
AND NOT EXISTS (
|
|
240
|
+
SELECT 1 FROM links l2
|
|
241
|
+
WHERE l2.to_page_id = $1 AND l2.from_page_id = links.from_page_id
|
|
242
|
+
AND l2.link_type = links.link_type
|
|
243
|
+
)`, [intoId, fromId]);
|
|
244
|
+
await this.db.query("DELETE FROM links WHERE to_page_id = $1", [fromId]);
|
|
245
|
+
// Drop any self-link created by the merge.
|
|
246
|
+
await this.db.query("DELETE FROM links WHERE from_page_id = $1 AND to_page_id = $1", [intoId]);
|
|
247
|
+
// Re-point timeline entries (UNIQUE(page_id, date, summary)).
|
|
248
|
+
await this.db.query(`UPDATE timeline_entries SET page_id = $1
|
|
249
|
+
WHERE page_id = $2
|
|
250
|
+
AND NOT EXISTS (
|
|
251
|
+
SELECT 1 FROM timeline_entries t2
|
|
252
|
+
WHERE t2.page_id = $1 AND t2.date = timeline_entries.date
|
|
253
|
+
AND t2.summary = timeline_entries.summary
|
|
254
|
+
)`, [intoId, fromId]);
|
|
255
|
+
await this.db.query("DELETE FROM timeline_entries WHERE page_id = $1", [fromId]);
|
|
256
|
+
// Re-point tags (UNIQUE(page_id, tag)).
|
|
257
|
+
await this.db.query(`UPDATE tags SET page_id = $1
|
|
258
|
+
WHERE page_id = $2
|
|
259
|
+
AND NOT EXISTS (SELECT 1 FROM tags t2 WHERE t2.page_id = $1 AND t2.tag = tags.tag)`, [intoId, fromId]);
|
|
260
|
+
await this.db.query("DELETE FROM tags WHERE page_id = $1", [fromId]);
|
|
261
|
+
// Fold body + aliases into the target.
|
|
262
|
+
const aliasValues = new Set([
|
|
263
|
+
...this.frontmatterAliases(into),
|
|
264
|
+
...this.frontmatterAliases(from),
|
|
265
|
+
fromSlug,
|
|
266
|
+
]);
|
|
267
|
+
const foldedBody = from.compiled_truth.trim().length > 0
|
|
268
|
+
? `${into.compiled_truth.trimEnd()}\n\n## Merged from ${fromSlug}\n\n${from.compiled_truth.trim()}`
|
|
269
|
+
: into.compiled_truth;
|
|
270
|
+
// Spec 8: the merged-into person's cached communication profile is now stale
|
|
271
|
+
// (it was computed before the behavior counters were folded in) — drop it so
|
|
272
|
+
// the next nightly synthesis recomputes from the combined evidence.
|
|
273
|
+
const { profile: _staleProfile, ...intoFm } = into.frontmatter;
|
|
274
|
+
await this.writePage({ ...into, frontmatter: intoFm }, foldedBody, [...aliasValues]);
|
|
275
|
+
// Spec 8: fold the behavior-layer counters (additive) into the target.
|
|
276
|
+
if (this.extra?.behavior) {
|
|
277
|
+
await this.extra.behavior.merge(fromSlug, intoSlug);
|
|
278
|
+
}
|
|
279
|
+
// Re-point handle + identity-cache mappings, then drop the old page.
|
|
280
|
+
await this.db.query("UPDATE person_handles SET canonical_slug = $1 WHERE canonical_slug = $2", [
|
|
281
|
+
intoSlug,
|
|
282
|
+
fromSlug,
|
|
283
|
+
]);
|
|
284
|
+
await this.insertHandle("slug", fromSlug, intoSlug, "strong", false);
|
|
285
|
+
await this.repointIdentityCache(fromSlug, intoSlug);
|
|
286
|
+
await pages.deletePage(fromSlug);
|
|
287
|
+
}
|
|
288
|
+
// ── internals ──────────────────────────────────────────────────────────
|
|
289
|
+
requirePages() {
|
|
290
|
+
if (!this.stores?.pages) {
|
|
291
|
+
throw new Error("PersonIdentityStore: page operations require a PageStore");
|
|
292
|
+
}
|
|
293
|
+
return this.stores.pages;
|
|
294
|
+
}
|
|
295
|
+
async insertHandle(kind, value, canonicalSlug, strength, ignoreConflict) {
|
|
296
|
+
const v = canonicalizeHandleValue(kind, value);
|
|
297
|
+
if (ignoreConflict) {
|
|
298
|
+
await this.db.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
|
|
299
|
+
VALUES ($1, $2, $3, $4)
|
|
300
|
+
ON CONFLICT (kind, value) DO NOTHING`, [kind, v, canonicalSlug, strength]);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
await this.db.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
|
|
304
|
+
VALUES ($1, $2, $3, $4)
|
|
305
|
+
ON CONFLICT (kind, value) DO UPDATE SET
|
|
306
|
+
canonical_slug = EXCLUDED.canonical_slug,
|
|
307
|
+
strength = EXCLUDED.strength`, [kind, v, canonicalSlug, strength]);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
async repointIdentityCache(oldSlug, newSlug) {
|
|
311
|
+
await this.db.query("UPDATE identity_cache SET display_name = $1 WHERE platform = 'canonical' AND display_name = $2", [newSlug, oldSlug]);
|
|
312
|
+
await this.db.query(`INSERT INTO identity_cache (platform, external_id, display_name, slug_hint)
|
|
313
|
+
VALUES ('canonical', $1, $2, $1)
|
|
314
|
+
ON CONFLICT (platform, external_id) DO UPDATE SET display_name = EXCLUDED.display_name`, [oldSlug, newSlug]);
|
|
315
|
+
}
|
|
316
|
+
frontmatterAliases(page) {
|
|
317
|
+
const a = page.frontmatter.aliases;
|
|
318
|
+
return Array.isArray(a) ? a.map(String) : [];
|
|
319
|
+
}
|
|
320
|
+
async appendAliasesToPage(slug, newAliases) {
|
|
321
|
+
const pages = this.requirePages();
|
|
322
|
+
const page = await pages.getPage(slug);
|
|
323
|
+
if (!page)
|
|
324
|
+
return;
|
|
325
|
+
const merged = new Set([...this.frontmatterAliases(page), ...newAliases]);
|
|
326
|
+
await this.writePage(page, page.compiled_truth, [...merged]);
|
|
327
|
+
}
|
|
328
|
+
async writePage(page, body, aliases) {
|
|
329
|
+
const pages = this.requirePages();
|
|
330
|
+
const { aliases: _drop, ...rest } = page.frontmatter;
|
|
331
|
+
const fm = {
|
|
332
|
+
title: page.title,
|
|
333
|
+
type: page.type,
|
|
334
|
+
...rest,
|
|
335
|
+
};
|
|
336
|
+
if (aliases.length > 0)
|
|
337
|
+
fm.aliases = aliases;
|
|
338
|
+
const content = `---\n${stringifyYaml(fm)}---\n${body}`;
|
|
339
|
+
await pages.putPage(page.slug, content);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
//# 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":"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"}
|
|
@@ -8,6 +8,6 @@ export interface PipelineRuntime {
|
|
|
8
8
|
provider: LLMProvider;
|
|
9
9
|
identity_resolver?: IdentityResolver;
|
|
10
10
|
}
|
|
11
|
-
export declare function buildPipelineConfig(config: Config, output_dir: string): PipelineConfig;
|
|
11
|
+
export declare function buildPipelineConfig(config: Config, output_dir: string, projectRoot?: string): PipelineConfig;
|
|
12
12
|
export declare function createPipelineRuntime(config: Config, pg: PGlite, output_dir: string): Promise<PipelineRuntime>;
|
|
13
13
|
//# sourceMappingURL=pipeline-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,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,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAmB1B"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { createLLMProvider } from "../extractors/providers/index.js";
|
|
2
2
|
import { IdentityResolver } from "./identity-resolver.js";
|
|
3
3
|
import { statePath } from "./state.js";
|
|
4
|
-
|
|
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);
|
|
5
9
|
return {
|
|
6
|
-
dedup_checkpoint: statePath("dedup.jsonl"),
|
|
7
|
-
cursor_checkpoint: statePath("cursors.yaml"),
|
|
10
|
+
dedup_checkpoint: statePath("dedup.jsonl", stateBase),
|
|
11
|
+
cursor_checkpoint: statePath("cursors.yaml", stateBase),
|
|
8
12
|
block_gap_minutes: config.block_builder.block_gap_minutes,
|
|
9
13
|
max_block_tokens: config.block_builder.max_block_tokens,
|
|
10
14
|
max_block_messages: config.block_builder.max_block_messages,
|
|
11
15
|
privacy: config.privacy,
|
|
12
16
|
output_dir,
|
|
13
17
|
block_concurrency: config.pipeline?.block_concurrency,
|
|
18
|
+
state_base: stateBase,
|
|
14
19
|
};
|
|
15
20
|
}
|
|
16
21
|
export async function createPipelineRuntime(config, pg, output_dir) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-factory.js","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,UAAU,mBAAmB,
|
|
1
|
+
{"version":3,"file":"pipeline-factory.js","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,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,EAAU,EACV,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,CACb,+EAA+E,CAChF,CAAC;IACJ,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"}
|
package/dist/core/pipeline.d.ts
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type StoreAdapterContext } from "../adapters/store.js";
|
|
7
7
|
import type { LLMProvider } from "../extractors/providers/types.js";
|
|
8
|
+
import { type AccumulateDeps } from "../profile/accumulate.js";
|
|
8
9
|
import type { PrivacyConfig } from "./config.js";
|
|
10
|
+
import type { IdentityResolver } from "./identity-resolver.js";
|
|
9
11
|
import type { Collector, RawMessage } from "./types.js";
|
|
10
12
|
/**
|
|
11
13
|
* Pipeline configuration
|
|
@@ -19,6 +21,7 @@ export interface PipelineConfig {
|
|
|
19
21
|
privacy: PrivacyConfig;
|
|
20
22
|
output_dir: string;
|
|
21
23
|
block_concurrency?: number;
|
|
24
|
+
state_base?: string;
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
27
|
* Pipeline execution options
|
|
@@ -32,6 +35,19 @@ export interface PipelineOpts {
|
|
|
32
35
|
dryRun?: boolean;
|
|
33
36
|
since?: string;
|
|
34
37
|
limit?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Optional identity resolver. When provided, person slugs are canonicalized
|
|
40
|
+
* (Stage 2.5) before results are pushed to the adapter, preventing duplicate
|
|
41
|
+
* person pages from LLM-produced slug variants.
|
|
42
|
+
*/
|
|
43
|
+
identityResolver?: IdentityResolver;
|
|
44
|
+
/**
|
|
45
|
+
* Optional person-communication-profile behavior accumulation (Spec 8 §4.1).
|
|
46
|
+
* When provided AND config.profile.enabled, DM/group blocks contribute to the
|
|
47
|
+
* person_behavior table while raw messages are still in memory. No-op when the
|
|
48
|
+
* config is disabled, so callers can wire it unconditionally.
|
|
49
|
+
*/
|
|
50
|
+
behavior?: AccumulateDeps;
|
|
35
51
|
}
|
|
36
52
|
/**
|
|
37
53
|
* Pipeline execution result
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAO9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,0BAA0B,CAAC;AAGnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAGV,SAAS,EAGT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CA+TzB"}
|