@andre.li/memoark 0.3.1
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 +606 -0
- package/README.md +560 -0
- package/bin/memoark.mjs +36 -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 +641 -0
- package/dist/adapters/store.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +694 -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/collector.d.ts +23 -0
- package/dist/collectors/feishu/collector.d.ts.map +1 -0
- package/dist/collectors/feishu/collector.js +113 -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/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 +16 -0
- package/dist/collectors/feishu/lark-cli-client.d.ts.map +1 -0
- package/dist/collectors/feishu/lark-cli-client.js +69 -0
- package/dist/collectors/feishu/lark-cli-client.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/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 +93 -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 +152 -0
- package/dist/collectors/feishu/sources/dm.js.map +1 -0
- package/dist/collectors/feishu/sources/docs.d.ts +23 -0
- package/dist/collectors/feishu/sources/docs.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/docs.js +154 -0
- package/dist/collectors/feishu/sources/docs.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 +136 -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 +26 -0
- package/dist/collectors/feishu/sources/messages.d.ts.map +1 -0
- package/dist/collectors/feishu/sources/messages.js +148 -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 +224 -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 +365 -0
- package/dist/config-center/schema.js.map +1 -0
- package/dist/config-center/secrets.d.ts +4 -0
- package/dist/config-center/secrets.d.ts.map +1 -0
- package/dist/config-center/secrets.js +27 -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 +31 -0
- package/dist/consolidator/consolidator.d.ts.map +1 -0
- package/dist/consolidator/consolidator.js +57 -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 +137 -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 +184 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +136 -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/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 +21 -0
- package/dist/core/identity-resolver.d.ts.map +1 -0
- package/dist/core/identity-resolver.js +62 -0
- package/dist/core/identity-resolver.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 +32 -0
- package/dist/core/pipeline-factory.js.map +1 -0
- package/dist/core/pipeline.d.ts +61 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +261 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/schemas.d.ts +2470 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +229 -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 +124 -0
- package/dist/core/signal-scoring.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 +32 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/types.d.ts +231 -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/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/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 +37 -0
- package/dist/daemon/scheduler.d.ts.map +1 -0
- package/dist/daemon/scheduler.js +142 -0
- package/dist/daemon/scheduler.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/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 +29 -0
- package/dist/extractors/signal-extractor.d.ts.map +1 -0
- package/dist/extractors/signal-extractor.js +279 -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/processors/privacy.d.ts +98 -0
- package/dist/processors/privacy.d.ts.map +1 -0
- package/dist/processors/privacy.js +271 -0
- package/dist/processors/privacy.js.map +1 -0
- package/dist/server/api.d.ts +35 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +453 -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 +123 -0
- package/dist/server/backfill-routes.js.map +1 -0
- package/dist/server/config-routes.d.ts +8 -0
- package/dist/server/config-routes.d.ts.map +1 -0
- package/dist/server/config-routes.js +114 -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.d.ts +126 -0
- package/dist/server/mcp.d.ts.map +1 -0
- package/dist/server/mcp.js +103 -0
- package/dist/server/mcp.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 +52 -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 +67 -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/generate-config.d.ts +5 -0
- package/dist/setup/generate-config.d.ts.map +1 -0
- package/dist/setup/generate-config.js +103 -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 +19 -0
- package/dist/setup/init-wizard.d.ts.map +1 -0
- package/dist/setup/init-wizard.js +501 -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 +26 -0
- package/dist/setup/validate-config.d.ts.map +1 -0
- package/dist/setup/validate-config.js +27 -0
- package/dist/setup/validate-config.js.map +1 -0
- package/dist/store/chunks.d.ts +19 -0
- package/dist/store/chunks.d.ts.map +1 -0
- package/dist/store/chunks.js +70 -0
- package/dist/store/chunks.js.map +1 -0
- package/dist/store/database.d.ts +24 -0
- package/dist/store/database.d.ts.map +1 -0
- package/dist/store/database.js +62 -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/graph.d.ts +53 -0
- package/dist/store/graph.d.ts.map +1 -0
- package/dist/store/graph.js +186 -0
- package/dist/store/graph.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 +68 -0
- package/dist/store/migrations/index.js.map +1 -0
- package/dist/store/pages.d.ts +39 -0
- package/dist/store/pages.d.ts.map +1 -0
- package/dist/store/pages.js +150 -0
- package/dist/store/pages.js.map +1 -0
- package/dist/store/search.d.ts +37 -0
- package/dist/store/search.d.ts.map +1 -0
- package/dist/store/search.js +200 -0
- package/dist/store/search.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 +31 -0
- package/dist/store/tags.js.map +1 -0
- package/dist/store/timeline.d.ts +26 -0
- package/dist/store/timeline.d.ts.map +1 -0
- package/dist/store/timeline.js +43 -0
- package/dist/store/timeline.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 +539 -0
- package/dist/sync/obsidian.js.map +1 -0
- package/package.json +84 -0
package/README.en.md
ADDED
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<h1 align="center">Memoark</h1>
|
|
3
|
+
<p align="center"><strong>Turn your Feishu work and AI-agent sessions into one private memory your agents can actually use. Local-first, you own it.</strong></p>
|
|
4
|
+
</p>
|
|
5
|
+
|
|
6
|
+
<p align="center">
|
|
7
|
+
<a href="README.md">简体中文</a> | English
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg"></a>
|
|
12
|
+
<img alt="Runtime: Bun" src="https://img.shields.io/badge/runtime-Bun-black">
|
|
13
|
+
<img alt="Language: TypeScript" src="https://img.shields.io/badge/lang-TypeScript-3178c6">
|
|
14
|
+
<img alt="Tests: 800+" src="https://img.shields.io/badge/tests-800%2B-success">
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="#quick-start">Quick Start</a> •
|
|
19
|
+
<a href="#features">Features</a> •
|
|
20
|
+
<a href="#use-cases">Use Cases</a> •
|
|
21
|
+
<a href="#architecture">Architecture</a> •
|
|
22
|
+
<a href="#cli-reference">CLI Reference</a> •
|
|
23
|
+
<a href="#roadmap">Roadmap</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<img src="docs/assets/web-ui-graph.jpeg" alt="Memoark knowledge graph — entities, decisions, tasks, and knowledge connected across your work" width="850">
|
|
28
|
+
<br>
|
|
29
|
+
<em>Your work, as a living knowledge graph — people, decisions, tasks, and knowledge, connected.</em>
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## The Problem
|
|
35
|
+
|
|
36
|
+
Your work memory has two homes, and your AI agents can't reach either.
|
|
37
|
+
|
|
38
|
+
- **Feishu (Lark)** holds your working relationships — DMs, group chats, emails, meetings, tasks. This is *what* you work on and *who* you work with.
|
|
39
|
+
- **AI agents** (Claude Code, Codex, OpenClaw) hold your building process — the decisions, discoveries, and dead-ends from every coding session.
|
|
40
|
+
|
|
41
|
+
But every time you open a new agent session, it knows nothing. You re-explain who you are, what the project is, what was decided last week, and why. The context is *somewhere* — buried in chat logs and session transcripts you'll never scroll through again.
|
|
42
|
+
|
|
43
|
+
**You don't have a memory problem. You have a fragmentation problem — and your agents pay for it every day.**
|
|
44
|
+
|
|
45
|
+
## The Solution
|
|
46
|
+
|
|
47
|
+
Memoark is a **local-first personal memory system** built on two equal input streams — your **Feishu work** and your **AI-agent sessions**. It extracts structured signals (entities, decisions, tasks, discoveries, knowledge, relationships) into one searchable knowledge graph on your own machine, then serves that memory back to any agent over **MCP**.
|
|
48
|
+
|
|
49
|
+
The result: your agents both **write to** and **read from** the same memory — so Claude Code, Codex, and any MCP client finally *know you and your work*.
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Feishu work AI-agent sessions
|
|
53
|
+
(DMs / groups / email (Claude Code / Codex
|
|
54
|
+
meetings / tasks) / OpenClaw)
|
|
55
|
+
│ │
|
|
56
|
+
└───────────────┬───────────────┘
|
|
57
|
+
▼ collect + extract (local)
|
|
58
|
+
┌──────────────────┐
|
|
59
|
+
│ Your core memory │ entities · decisions · tasks
|
|
60
|
+
│ (PGLite, local) │ knowledge · timeline · graph
|
|
61
|
+
└────────┬─────────┘
|
|
62
|
+
▼ MCP
|
|
63
|
+
Your agents know you
|
|
64
|
+
│
|
|
65
|
+
└──── the more agents work, the better it knows you ───┘
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> "I discussed a proposal with a colleague on Feishu yesterday, implemented part of it in Claude Code today, and have a review meeting next week."
|
|
69
|
+
>
|
|
70
|
+
> Memoark connects these three events automatically — across platforms, across time — and hands the whole thread to your agent on demand.
|
|
71
|
+
|
|
72
|
+
## Features
|
|
73
|
+
|
|
74
|
+
**🛰️ Full Feishu (Lark) Capture**
|
|
75
|
+
Your work lives in Feishu. Memoark collects across **7 sources** — DMs, group chats, email, calendar, docs, tasks, and message search — turning your working relationships into structured memory.
|
|
76
|
+
|
|
77
|
+
**🤖 Agents That Know You (MCP)**
|
|
78
|
+
Use Memoark as the memory layer for any MCP agent — Claude Code, Cursor, Windsurf. **17 built-in tools** let your agent query your history, read entity pages, and write new knowledge back. Agents are both producers and consumers of your memory.
|
|
79
|
+
|
|
80
|
+
**🔒 Private & Local-First**
|
|
81
|
+
Your data never leaves your machine. PGLite embedded database, optional local embeddings via Ollama, no cloud dependency. You own your memory.
|
|
82
|
+
|
|
83
|
+
**🧠 AI-Powered Signal Extraction**
|
|
84
|
+
An LLM pipeline extracts 7 types of structured signals from raw conversations: entities, timeline events, decisions, tasks, discoveries, knowledge, and relationships.
|
|
85
|
+
|
|
86
|
+
**🔍 Hybrid Semantic Search**
|
|
87
|
+
Full-text search + vector retrieval fused with Reciprocal Rank Fusion (RRF). Ask in natural language — powered by PGLite FTS + pgvector.
|
|
88
|
+
|
|
89
|
+
**🕸️ Knowledge Graph + Web UI**
|
|
90
|
+
See the connections between people, projects, and decisions. Browse a built-in web UI with dashboard, timeline, force-directed graph, and search.
|
|
91
|
+
|
|
92
|
+
**🔌 REST API**
|
|
93
|
+
Full Hono-powered HTTP API for all store operations. Integrate with any client.
|
|
94
|
+
|
|
95
|
+
## Use Cases
|
|
96
|
+
|
|
97
|
+
**Onboard your agent to a project in seconds**
|
|
98
|
+
Start a Claude Code session and ask *"what's the current state of the memoark project?"* — your agent pulls the aggregated decisions, open tasks, and recent timeline straight from your memory, no re-explaining.
|
|
99
|
+
|
|
100
|
+
**Recall a person or a thread**
|
|
101
|
+
*"What did I discuss with my colleague last week?"* — Memoark stitches together the Feishu DMs, the meeting, and the follow-up task into one answer.
|
|
102
|
+
|
|
103
|
+
**Auto-written work log**
|
|
104
|
+
Browse your timeline like a diary that writes itself — what you decided, what you shipped, and across which platforms.
|
|
105
|
+
|
|
106
|
+
## Why Memoark
|
|
107
|
+
|
|
108
|
+
| | Memoark | Pure RAG / vector search | Note apps (Obsidian / Notion) | GBrain | OpenHuman |
|
|
109
|
+
|---|:---:|:---:|:---:|:---:|:---:|
|
|
110
|
+
| Local-first & private | ✅ | depends | depends | ✅ | ✅ |
|
|
111
|
+
| Open source | ✅ | varies | partial | partial | ✅ |
|
|
112
|
+
| Feishu work capture (DM/group/email/meeting/task) | ✅ | ❌ | manual | ❌ | ❌ |
|
|
113
|
+
| AI-agent sessions as a source | ✅ | ❌ | ❌ | ✅ | ✅ |
|
|
114
|
+
| Agent-native: read **and** write over MCP | ✅ | ❌ | ❌ | ✅ | partial |
|
|
115
|
+
| Entity + relationship knowledge graph | ✅ | ❌ | manual | ✅ | partial |
|
|
116
|
+
| Structured signal extraction (not just chunks) | ✅ | ❌ | ❌ | ✅ | ✅ |
|
|
117
|
+
| Focused MCP surface (17 tools, not 40+) | ✅ | n/a | n/a | ❌ (40+) | varies |
|
|
118
|
+
|
|
119
|
+
> Pure RAG gives you vectors but no entities or relationships, so answers lack context. Note apps are powerful but rely on manual upkeep. GBrain is capable but heavy, with a sprawling MCP surface. Memoark keeps it local, focused, and agent-native — with Feishu work as a first-class source.
|
|
120
|
+
|
|
121
|
+
## Quick Start
|
|
122
|
+
|
|
123
|
+
### Prerequisites
|
|
124
|
+
|
|
125
|
+
- [Node.js](https://nodejs.org) >= 18 (for the `npx` / `npm` install)
|
|
126
|
+
- (Optional) [Ollama](https://ollama.ai) for local embeddings
|
|
127
|
+
|
|
128
|
+
### Install (recommended: npm)
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Run without installing
|
|
132
|
+
npx @andre.li/memoark --help
|
|
133
|
+
|
|
134
|
+
# Or install globally to get the `memoark` command
|
|
135
|
+
npm install -g @andre.li/memoark
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
> The npm package is `@andre.li/memoark` (scoped), but the command is still `memoark`.
|
|
139
|
+
|
|
140
|
+
### Install from source (development)
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
git clone https://github.com/AndreLYL/memoark.git
|
|
144
|
+
cd memoark
|
|
145
|
+
bun install
|
|
146
|
+
npm link # registers the `memoark` command globally
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Initialize Configuration
|
|
150
|
+
|
|
151
|
+
`memoark init` launches an **interactive configuration center** — a full-screen TUI (built with React + ink) that lets you generate and edit `memoark.yaml` without hand-writing YAML:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
memoark init
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Config center features:**
|
|
158
|
+
- 📋 **Sectioned editing**: Overview, LLM, Embedding, Sources, Privacy, Block Builder, and more
|
|
159
|
+
- ⌨️ **Keyboard-driven**: ↑/↓ or Tab to move between fields, Enter to edit, Ctrl+S to save, q / Esc to quit (auto-saves if dirty)
|
|
160
|
+
- 🔌 **Live connection checks**: validates your LLM / embedding API key and connectivity as you edit
|
|
161
|
+
- 💡 **Smart recommendations**: suggests local (Ollama) vs remote (OpenAI) embedding based on your hardware
|
|
162
|
+
- 🔒 **Secret masking**: API keys are always shown masked
|
|
163
|
+
- 🧭 **Auto-detection**: finds existing data sources (Claude Code, Codex, Hermes) and registers the `memoark` command
|
|
164
|
+
|
|
165
|
+
**Run modes:**
|
|
166
|
+
|
|
167
|
+
| Command / environment | Behavior |
|
|
168
|
+
|---|---|
|
|
169
|
+
| `memoark init` (in a TTY) | Full-screen TUI config center |
|
|
170
|
+
| `memoark init --no-tui` | Linear question-and-answer wizard (fallback) |
|
|
171
|
+
| `memoark init --auto` | Fully automatic, no prompts, uses detected defaults |
|
|
172
|
+
| `memoark init --force` | Overwrite an existing configuration |
|
|
173
|
+
| `MEMOARK_NO_TUI=1` | Force-disable the TUI (also auto-falls back in non-TTY environments) |
|
|
174
|
+
|
|
175
|
+
> `memoark config init` is equivalent to `memoark init`. A few advanced settings (e.g. Feishu) currently need to be edited directly in `memoark.yaml` (see [Configuration](#configuration)).
|
|
176
|
+
|
|
177
|
+
### Check Environment
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
memoark doctor
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Run Your First Extraction
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Extract from Feishu (your work source)
|
|
187
|
+
memoark extract --source feishu --since 3d
|
|
188
|
+
|
|
189
|
+
# Extract from Claude Code
|
|
190
|
+
memoark extract --source claude-code
|
|
191
|
+
|
|
192
|
+
# Extract from all enabled sources
|
|
193
|
+
memoark extract --source all
|
|
194
|
+
|
|
195
|
+
# Dry run (no LLM calls, just scan data volume)
|
|
196
|
+
memoark extract --source claude-code --dry-run
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
> Feishu requires a one-time `lark-cli` user login and a `feishu` block in `memoark.yaml`. See [Configuration](#configuration) for the full Feishu setup, including DM vs. group capture paths.
|
|
200
|
+
|
|
201
|
+
### Search Your Memory
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# Hybrid search (FTS + vector)
|
|
205
|
+
memoark search "auth middleware decision"
|
|
206
|
+
|
|
207
|
+
# FTS-only search
|
|
208
|
+
memoark search "JWT token" --mode fts
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Start the Server
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# HTTP API (default port 3927)
|
|
215
|
+
memoark serve
|
|
216
|
+
|
|
217
|
+
# MCP stdio (for AI agent integration — Claude Code, Cursor, etc.)
|
|
218
|
+
memoark serve --mcp
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Connect Your Agent (MCP)
|
|
222
|
+
|
|
223
|
+
Point any MCP client at Memoark so it can read and write your memory. For Claude Code:
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"mcpServers": {
|
|
228
|
+
"memoark": {
|
|
229
|
+
"command": "memoark",
|
|
230
|
+
"args": ["serve", "--mcp"]
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Then ask your agent things like *"search my memory for the auth refactor decision"* or *"what tasks are still open on project X?"* — it answers from your local memory.
|
|
237
|
+
|
|
238
|
+
### Browse the Web UI
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
cd web
|
|
242
|
+
bun install
|
|
243
|
+
bun run dev # dashboard, timeline, knowledge graph, search
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Architecture
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
250
|
+
│ Data Sources │
|
|
251
|
+
│ Feishu (DMs · groups · email · calendar · docs · tasks) │
|
|
252
|
+
│ AI Agents (Claude Code · Codex · Hermes) │
|
|
253
|
+
└───────────────────────────────┬─────────────────────────────────┘
|
|
254
|
+
│
|
|
255
|
+
┌─────────▼──────────┐
|
|
256
|
+
│ Signal Extraction │
|
|
257
|
+
│ Pipeline │
|
|
258
|
+
│ │
|
|
259
|
+
│ Collector │
|
|
260
|
+
│ → Dedup │
|
|
261
|
+
│ → Block Builder │
|
|
262
|
+
│ → Noise Filter │
|
|
263
|
+
│ → Signal Extractor │
|
|
264
|
+
│ → Privacy │
|
|
265
|
+
└─────────┬──────────┘
|
|
266
|
+
│
|
|
267
|
+
┌─────────▼──────────┐
|
|
268
|
+
│ Storage Layer │
|
|
269
|
+
│ PGLite + pgvector │
|
|
270
|
+
│ (Embedded PG) │
|
|
271
|
+
└─────────┬──────────┘
|
|
272
|
+
│
|
|
273
|
+
┌───────────────────┼───────────────────┐
|
|
274
|
+
│ │ │ │
|
|
275
|
+
┌────────▼─────┐ ┌───▼────┐ ┌────────▼───┐ ┌─────▼──────┐
|
|
276
|
+
│ CLI │ │ MCP │ │ REST API │ │ Web UI │
|
|
277
|
+
│ Management │ │ Server │ │ (Hono) │ │ (React) │
|
|
278
|
+
│ & Extraction │ │(stdio) │ │ │ │ │
|
|
279
|
+
└───────────────┘ └────────┘ └────────────┘ └────────────┘
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Signal Extraction Pipeline
|
|
283
|
+
|
|
284
|
+
| Stage | Description |
|
|
285
|
+
|-------|-------------|
|
|
286
|
+
| **Collector** | Fetches raw messages from configured data sources |
|
|
287
|
+
| **Dedup** | Eliminates duplicates via content hashing |
|
|
288
|
+
| **Block Builder** | Groups messages into conversation blocks by time and topic |
|
|
289
|
+
| **Noise Filter** | Scores block significance using rules (L1) + LLM (L2) |
|
|
290
|
+
| **Signal Extractor** | LLM-powered extraction of entities, decisions, tasks, discoveries, knowledge, timeline, links |
|
|
291
|
+
| **Privacy Processor** | Dual-track redaction — reversible or irreversible |
|
|
292
|
+
|
|
293
|
+
### Extracted Signal Types
|
|
294
|
+
|
|
295
|
+
| Signal | Description | Example |
|
|
296
|
+
|--------|-------------|---------|
|
|
297
|
+
| **Entities** | People, projects, tools, concepts | `project/memoark`, `tool/claude-code` |
|
|
298
|
+
| **Timeline** | Key events with timestamps | "2026-05-19: Completed multi-platform collector refactoring" |
|
|
299
|
+
| **Decisions** | Technical choices with reasoning | "Chose PGLite for embedded PostgreSQL with vector support" |
|
|
300
|
+
| **Tasks** | Action items with status | `[open] Implement token auto-refresh` |
|
|
301
|
+
| **Discoveries** | Insights, root causes, edge cases | "UUID v4 is not lexicographically sortable" |
|
|
302
|
+
| **Knowledge** | Reusable facts with provenance | "PGLite runs full Postgres in-process via WASM" |
|
|
303
|
+
| **Links** | Relationships between entities | `project/memoark --[depends_on]--> tool/pglite` |
|
|
304
|
+
|
|
305
|
+
### Storage Layer
|
|
306
|
+
|
|
307
|
+
| Component | Description |
|
|
308
|
+
|-----------|-------------|
|
|
309
|
+
| **PageStore** | CRUD for wiki-style pages with YAML frontmatter |
|
|
310
|
+
| **ChunkStore** | Recursive text chunking (300 words, 50-word overlap) with embedding reuse |
|
|
311
|
+
| **SearchEngine** | FTS via `tsvector` + vector cosine via `pgvector`, fused with RRF scoring |
|
|
312
|
+
| **GraphStore** | Directed link graph with BFS traversal, link types, backlinks |
|
|
313
|
+
| **TagStore** | Page tagging with conflict-safe upserts |
|
|
314
|
+
| **TimelineStore** | Chronological entries per page with dedup |
|
|
315
|
+
| **EmbeddingService** | Batch embedding via OpenAI or Ollama, stale-chunk detection |
|
|
316
|
+
|
|
317
|
+
## CLI Reference
|
|
318
|
+
|
|
319
|
+
### `memoark extract`
|
|
320
|
+
|
|
321
|
+
Extract signals from data sources.
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
memoark extract \
|
|
325
|
+
--source <name> # feishu, claude-code, codex, hermes, all
|
|
326
|
+
--format json|markdown # Output format (default: json)
|
|
327
|
+
--adapter store|file|gbrain|stdout # Output target (default: store)
|
|
328
|
+
--output <dir> # Output directory for file adapter
|
|
329
|
+
--since <date> # Process messages after this date (ISO 8601 or relative: 1d, 2h)
|
|
330
|
+
--limit <n> # Max messages to process
|
|
331
|
+
--dry-run # Test without LLM calls or writes
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### `memoark serve`
|
|
335
|
+
|
|
336
|
+
Start the Memoark server.
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# HTTP API (default port from config)
|
|
340
|
+
memoark serve
|
|
341
|
+
|
|
342
|
+
# MCP stdio transport (for AI agent integration)
|
|
343
|
+
memoark serve --mcp
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### `memoark search <query>`
|
|
347
|
+
|
|
348
|
+
Search your stored memory.
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
# Hybrid search (FTS + vector, default)
|
|
352
|
+
memoark search "authentication middleware"
|
|
353
|
+
|
|
354
|
+
# FTS-only search
|
|
355
|
+
memoark search "JWT token" --mode fts
|
|
356
|
+
|
|
357
|
+
# Limit results
|
|
358
|
+
memoark search "deployment" --limit 5
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### `memoark embed`
|
|
362
|
+
|
|
363
|
+
Generate embeddings for unembedded chunks.
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
# Embed all stale chunks
|
|
367
|
+
memoark embed
|
|
368
|
+
|
|
369
|
+
# Limit batch size
|
|
370
|
+
memoark embed --limit 100
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### `memoark doctor`
|
|
374
|
+
|
|
375
|
+
Diagnose configuration and environment.
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
memoark doctor
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### `memoark config init`
|
|
382
|
+
|
|
383
|
+
Equivalent to `memoark init` — launches the interactive configuration center to generate / edit `memoark.yaml` (supports `--auto` / `--no-tui` / `--force`).
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
memoark config init
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### `memoark sources list`
|
|
390
|
+
|
|
391
|
+
List available data sources.
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
memoark sources list
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### `memoark sources test <name>`
|
|
398
|
+
|
|
399
|
+
Test data source connectivity.
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
memoark sources test claude-code
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
## Configuration
|
|
406
|
+
|
|
407
|
+
### `memoark.yaml`
|
|
408
|
+
|
|
409
|
+
```yaml
|
|
410
|
+
# Privacy
|
|
411
|
+
privacy:
|
|
412
|
+
enabled: true
|
|
413
|
+
mode: reversible # reversible | irreversible
|
|
414
|
+
redact_phone: true
|
|
415
|
+
redact_id_card: true
|
|
416
|
+
redact_bank_card: true
|
|
417
|
+
replacement: "[REDACTED]"
|
|
418
|
+
|
|
419
|
+
# LLM (for signal extraction)
|
|
420
|
+
llm:
|
|
421
|
+
provider: openai
|
|
422
|
+
model: gpt-4o-mini
|
|
423
|
+
api_key: ${OPENAI_API_KEY}
|
|
424
|
+
|
|
425
|
+
# Block Builder
|
|
426
|
+
block_builder:
|
|
427
|
+
block_gap_minutes: 30
|
|
428
|
+
max_block_tokens: 4000
|
|
429
|
+
max_block_messages: 100
|
|
430
|
+
|
|
431
|
+
# Data Sources
|
|
432
|
+
sources:
|
|
433
|
+
# Feishu (Lark) — your primary work source
|
|
434
|
+
feishu:
|
|
435
|
+
enabled: true
|
|
436
|
+
auth_mode: user # user mode enables DM + message search
|
|
437
|
+
app_id: ${FEISHU_APP_ID}
|
|
438
|
+
app_secret: ${FEISHU_APP_SECRET}
|
|
439
|
+
sources:
|
|
440
|
+
messages: # group chats via OpenAPI
|
|
441
|
+
enabled: true
|
|
442
|
+
chat_ids: []
|
|
443
|
+
lookback_days: 3
|
|
444
|
+
message_search: # DMs + recent chats via lark-cli
|
|
445
|
+
enabled: true
|
|
446
|
+
chat_types: [p2p] # add `group` to include groups
|
|
447
|
+
lookback_days: 3
|
|
448
|
+
calendar: { enabled: true }
|
|
449
|
+
docs: { enabled: true }
|
|
450
|
+
tasks: { enabled: true }
|
|
451
|
+
# AI agent sessions
|
|
452
|
+
claude-code:
|
|
453
|
+
enabled: true
|
|
454
|
+
codex:
|
|
455
|
+
enabled: true
|
|
456
|
+
hermes:
|
|
457
|
+
enabled: true
|
|
458
|
+
|
|
459
|
+
# Store (PGLite)
|
|
460
|
+
store:
|
|
461
|
+
data_dir: ~/.memoark/data
|
|
462
|
+
|
|
463
|
+
# Embeddings
|
|
464
|
+
embedding:
|
|
465
|
+
provider: openai # openai | ollama
|
|
466
|
+
model: text-embedding-3-large
|
|
467
|
+
dimensions: 1536
|
|
468
|
+
api_key: ${OPENAI_API_KEY}
|
|
469
|
+
|
|
470
|
+
# Server
|
|
471
|
+
server:
|
|
472
|
+
http_port: 3927
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
> **Feishu DM vs. group capture:** `messages` uses the OpenAPI chat/message endpoints (best for known group `chat_id`s), while `message_search` uses `lark-cli im messages-search` in user mode (required for recent DMs and 1:1 bot chats). Enable both for full coverage, and complete the `lark-cli` user login first.
|
|
476
|
+
|
|
477
|
+
## Supported Sources
|
|
478
|
+
|
|
479
|
+
### Feishu (Lark)
|
|
480
|
+
|
|
481
|
+
Your primary work source — group messages, DMs, email, calendar events, docs, and tasks.
|
|
482
|
+
|
|
483
|
+
- **Auth**: `lark-cli` user-mode login (for DMs / message search) + app credentials
|
|
484
|
+
- **Data**: 7 sources — group chats, DMs, email, calendar, docs, tasks, message search
|
|
485
|
+
- **Why first**: Feishu carries the work itself — requirements, technical proposals, team decisions
|
|
486
|
+
|
|
487
|
+
### Claude Code
|
|
488
|
+
|
|
489
|
+
Extracts conversation transcripts from Claude Code agent sessions.
|
|
490
|
+
|
|
491
|
+
- **Location**: `~/.claude/projects/`
|
|
492
|
+
- **Data**: Agent conversations, decisions, discoveries, session logs
|
|
493
|
+
|
|
494
|
+
### Codex
|
|
495
|
+
|
|
496
|
+
Extracts session data from OpenAI Codex CLI.
|
|
497
|
+
|
|
498
|
+
- **Location**: `~/.codex/`
|
|
499
|
+
- **Data**: User/assistant messages with system-injection filtering
|
|
500
|
+
|
|
501
|
+
### Hermes
|
|
502
|
+
|
|
503
|
+
Extracts session data from OpenClaw Hermes agents.
|
|
504
|
+
|
|
505
|
+
- **Location**: `~/.openclaw/agents/`
|
|
506
|
+
- **Data**: Multi-agent sessions with automatic sub-agent discovery
|
|
507
|
+
|
|
508
|
+
## Roadmap
|
|
509
|
+
|
|
510
|
+
### Phase 1 — Signal Extraction (Complete)
|
|
511
|
+
|
|
512
|
+
- [x] Multi-platform collectors (Claude Code, Codex, Hermes, Feishu)
|
|
513
|
+
- [x] LLM-powered noise filtering and signal extraction
|
|
514
|
+
- [x] 7 signal types: entities, timeline, decisions, tasks, discoveries, knowledge, links
|
|
515
|
+
- [x] Dual-track privacy redaction (reversible + irreversible)
|
|
516
|
+
- [x] JSON and Markdown output formatters
|
|
517
|
+
- [x] File, GBrain, and Stdout adapters
|
|
518
|
+
- [x] CLI with extract, doctor, config, sources commands
|
|
519
|
+
|
|
520
|
+
### Phase 2 — Storage & Server (Complete)
|
|
521
|
+
|
|
522
|
+
- [x] PGLite embedded PostgreSQL with pgvector
|
|
523
|
+
- [x] PageStore, ChunkStore, TagStore, TimelineStore, GraphStore
|
|
524
|
+
- [x] Full-text search with `tsvector` (simple tokenizer for multilingual)
|
|
525
|
+
- [x] Vector search with `pgvector` cosine similarity
|
|
526
|
+
- [x] Hybrid RRF search fusing FTS + vector results
|
|
527
|
+
- [x] EmbeddingService (OpenAI / Ollama)
|
|
528
|
+
- [x] StoreAdapter — pipeline writes directly to PGLite
|
|
529
|
+
- [x] Hono REST API
|
|
530
|
+
- [x] MCP Server with 17 stdio tools
|
|
531
|
+
- [x] CLI serve, search, embed commands
|
|
532
|
+
|
|
533
|
+
### Phase 3 — Web UI (Complete)
|
|
534
|
+
|
|
535
|
+
- [x] Dashboard
|
|
536
|
+
- [x] Timeline view
|
|
537
|
+
- [x] Knowledge graph visualization (force-directed)
|
|
538
|
+
- [x] Search interface
|
|
539
|
+
- [x] Entity / page detail views
|
|
540
|
+
|
|
541
|
+
### Phase 4 — Context-Aware Extraction (Planned)
|
|
542
|
+
|
|
543
|
+
- [ ] ContextBuffer — share context across conversation blocks
|
|
544
|
+
- [ ] Weighted admission scoring (replaces binary noise filter)
|
|
545
|
+
- [ ] Narrative assembler — aggregate signals into per-entity narratives
|
|
546
|
+
|
|
547
|
+
### Phase 5 — Consolidation & Daemon (Planned)
|
|
548
|
+
|
|
549
|
+
- [ ] Memory consolidation ("dream cycle"): entity merge, link repair, pattern discovery
|
|
550
|
+
- [ ] Resident background service with scheduled extraction
|
|
551
|
+
- [ ] Natural language Q&A over stored memories
|
|
552
|
+
|
|
553
|
+
### Phase 6 — Sync & New Sources (Planned)
|
|
554
|
+
|
|
555
|
+
- [ ] Obsidian bidirectional sync
|
|
556
|
+
- [ ] WeChat chat history
|
|
557
|
+
- [ ] More platforms based on community demand
|
|
558
|
+
|
|
559
|
+
## Tech Stack
|
|
560
|
+
|
|
561
|
+
| Layer | Technology |
|
|
562
|
+
|-------|-----------|
|
|
563
|
+
| Language | TypeScript |
|
|
564
|
+
| Runtime | Bun |
|
|
565
|
+
| Database | PGLite (embedded PostgreSQL) |
|
|
566
|
+
| Vector Search | pgvector |
|
|
567
|
+
| Embeddings | OpenAI / Ollama |
|
|
568
|
+
| Web Framework | Hono |
|
|
569
|
+
| Web UI | React + Vite |
|
|
570
|
+
| MCP | @modelcontextprotocol/sdk |
|
|
571
|
+
| Linter | Biome |
|
|
572
|
+
| Tests | Vitest (800+ tests) |
|
|
573
|
+
|
|
574
|
+
## Development
|
|
575
|
+
|
|
576
|
+
```bash
|
|
577
|
+
# Run tests
|
|
578
|
+
bun run test
|
|
579
|
+
|
|
580
|
+
# Watch mode
|
|
581
|
+
bun run test:watch
|
|
582
|
+
|
|
583
|
+
# Type-check
|
|
584
|
+
bun run typecheck
|
|
585
|
+
|
|
586
|
+
# Lint
|
|
587
|
+
bun run lint
|
|
588
|
+
|
|
589
|
+
# Auto-fix lint issues
|
|
590
|
+
bun run lint:fix
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow and guidelines.
|
|
594
|
+
|
|
595
|
+
## Contributing
|
|
596
|
+
|
|
597
|
+
Contributions welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a PR.
|
|
598
|
+
|
|
599
|
+
## Community & Support
|
|
600
|
+
|
|
601
|
+
- 🐛 Found a bug or have a feature request? [Open an issue](https://github.com/AndreLYL/memoark/issues).
|
|
602
|
+
- 💡 Questions and ideas are welcome in the issue tracker.
|
|
603
|
+
|
|
604
|
+
## License
|
|
605
|
+
|
|
606
|
+
Licensed under the [Apache License, Version 2.0](LICENSE).
|