deja-cli 0.1.2__tar.gz → 0.2.0__tar.gz
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.
- deja_cli-0.2.0/.github/workflows/ci.yml +29 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/PKG-INFO +4 -1
- {deja_cli-0.1.2 → deja_cli-0.2.0}/README.pypi.md +3 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/config/default.yaml +8 -1
- deja_cli-0.2.0/deja/__init__.py +11 -0
- deja_cli-0.2.0/deja/cloud.py +644 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/config.py +10 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/core/extractor.py +36 -8
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/core/reflection.py +76 -8
- deja_cli-0.2.0/deja/core/store/__init__.py +608 -0
- deja_cli-0.2.0/deja/core/store/_helpers.py +196 -0
- deja_cli-0.2.0/deja/core/store/_schema.py +504 -0
- deja_cli-0.2.0/deja/core/store/connection.py +222 -0
- deja_cli-0.2.0/deja/core/store/model.py +225 -0
- deja_cli-0.2.0/deja/core/store/policy.py +126 -0
- deja_cli-0.2.0/deja/core/store/queries.py +87 -0
- deja_cli-0.2.0/deja/core/store/repos/__init__.py +21 -0
- deja_cli-0.2.0/deja/core/store/repos/memories.py +671 -0
- deja_cli-0.2.0/deja/core/store/repos/observations.py +118 -0
- deja_cli-0.2.0/deja/core/store/repos/reflection.py +66 -0
- deja_cli-0.2.0/deja/core/store/services/__init__.py +46 -0
- deja_cli-0.2.0/deja/core/store/services/load.py +168 -0
- deja_cli-0.2.0/deja/core/store/services/maintenance.py +309 -0
- deja_cli-0.2.0/deja/core/store/services/ranking.py +171 -0
- deja_cli-0.2.0/deja/core/store/services/save.py +256 -0
- deja_cli-0.2.0/deja/core/store/services/search.py +246 -0
- deja_cli-0.2.0/deja/ingest/watchers/base.py +493 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/ingest/watchers/claude_code.py +4 -5
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/ingest/watchers/codex_cli.py +4 -5
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/ingest/watchers/gemini_cli.py +4 -5
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/_helpers.py +10 -7
- deja_cli-0.2.0/deja/interfaces/cli/cloud.py +326 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/memory.py +82 -26
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/setup.py +2 -2
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/watch.py +52 -1
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/mcp_server.py +44 -22
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/web.py +8 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/llm/embedding.py +18 -7
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/llm/factory.py +11 -9
- deja_cli-0.2.0/deja/llm/providers/ollama.py +41 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/pyproject.toml +1 -1
- deja_cli-0.1.2/deja/cloud.py +0 -212
- deja_cli-0.1.2/deja/core/store.py +0 -1474
- deja_cli-0.1.2/deja/ingest/watchers/base.py +0 -143
- deja_cli-0.1.2/deja/interfaces/cli/cloud.py +0 -151
- deja_cli-0.1.2/deja/llm/providers/__init__.py +0 -0
- deja_cli-0.1.2/deja/llm/providers/ollama.py +0 -30
- {deja_cli-0.1.2 → deja_cli-0.2.0}/.gitignore +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/LICENSE +0 -0
- {deja_cli-0.1.2/deja → deja_cli-0.2.0/deja/core}/__init__.py +0 -0
- {deja_cli-0.1.2/deja/core → deja_cli-0.2.0/deja/ingest}/__init__.py +0 -0
- {deja_cli-0.1.2/deja/ingest → deja_cli-0.2.0/deja/ingest/watchers}/__init__.py +0 -0
- {deja_cli-0.1.2/deja/ingest/watchers → deja_cli-0.2.0/deja/interfaces}/__init__.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/__init__.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/backfill.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/maintenance.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/session.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/cli/transfer.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/interfaces/web_ui/index.html +0 -0
- {deja_cli-0.1.2/deja/interfaces → deja_cli-0.2.0/deja/llm}/__init__.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/llm/base.py +0 -0
- {deja_cli-0.1.2/deja/llm → deja_cli-0.2.0/deja/llm/providers}/__init__.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/llm/providers/anthropic.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/deja/main.py +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/hooks/deja-post-fail.sh +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/hooks/deja-precompact.sh +0 -0
- {deja_cli-0.1.2 → deja_cli-0.2.0}/hooks/deja-recall.sh +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.12", "3.13"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Install uv
|
|
20
|
+
uses: astral-sh/setup-uv@v4
|
|
21
|
+
|
|
22
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
23
|
+
run: uv python install ${{ matrix.python-version }}
|
|
24
|
+
|
|
25
|
+
- name: Install dependencies
|
|
26
|
+
run: uv sync --dev
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: uv run pytest tests/ -v
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deja-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Local-first persistent memory CLI for coding agents
|
|
5
5
|
Author-email: Mike <mike@bigtreeproduction.com>
|
|
6
6
|
License: MIT
|
|
@@ -56,6 +56,8 @@ deja save "Auth tokens stored in localStorage, not cookies" --type decision --pr
|
|
|
56
56
|
deja save "Prisma migrations fail silently if DB_URL has wrong port" --type gotcha --project myapp
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
> Each memory is one piece of info — max 2000 chars. If your save is longer, split it into 2+ memories, each one specific fact.
|
|
60
|
+
|
|
59
61
|
**Load at session start:**
|
|
60
62
|
```bash
|
|
61
63
|
deja load --project myapp --context "what you're working on"
|
|
@@ -89,6 +91,7 @@ deja setup claude-code # Claude Code — global config + recall hooks
|
|
|
89
91
|
deja setup gemini-cli # Gemini CLI
|
|
90
92
|
deja setup codex # Codex CLI
|
|
91
93
|
deja setup cursor # Cursor
|
|
94
|
+
deja setup windsurf # Windsurf
|
|
92
95
|
```
|
|
93
96
|
|
|
94
97
|
## MCP Server
|
|
@@ -24,6 +24,8 @@ deja save "Auth tokens stored in localStorage, not cookies" --type decision --pr
|
|
|
24
24
|
deja save "Prisma migrations fail silently if DB_URL has wrong port" --type gotcha --project myapp
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
> Each memory is one piece of info — max 2000 chars. If your save is longer, split it into 2+ memories, each one specific fact.
|
|
28
|
+
|
|
27
29
|
**Load at session start:**
|
|
28
30
|
```bash
|
|
29
31
|
deja load --project myapp --context "what you're working on"
|
|
@@ -57,6 +59,7 @@ deja setup claude-code # Claude Code — global config + recall hooks
|
|
|
57
59
|
deja setup gemini-cli # Gemini CLI
|
|
58
60
|
deja setup codex # Codex CLI
|
|
59
61
|
deja setup cursor # Cursor
|
|
62
|
+
deja setup windsurf # Windsurf
|
|
60
63
|
```
|
|
61
64
|
|
|
62
65
|
## MCP Server
|
|
@@ -65,4 +65,11 @@ cloud:
|
|
|
65
65
|
enabled: false # set to true after deja login
|
|
66
66
|
endpoint: https://api.deja.sh
|
|
67
67
|
web_url: https://www.deja.sh # browser login opens this — must be www, not apex (apex forwarding drops query params)
|
|
68
|
-
sync_on_save: false # push to cloud on every deja save (
|
|
68
|
+
sync_on_save: false # push to cloud synchronously on every deja save (blocks until HTTP completes)
|
|
69
|
+
# Pull cloud changes opportunistically on every `deja load`. Off by default
|
|
70
|
+
# (contract change 2026-04-19) — reads are local-only unless you opt in.
|
|
71
|
+
# Cross-machine workflow (recommended): leave this off and run
|
|
72
|
+
# `deja sync --pull` on session start (Cursor/Claude Desktop plugin hook,
|
|
73
|
+
# shell rc, or cron). One-off: `deja load --pull` for a single pull.
|
|
74
|
+
# Restore pre-2026-04-19 auto-pull-on-every-load: set this to true.
|
|
75
|
+
pull_on_load: false
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
# Package-level logger. All deja modules use logging.getLogger(__name__) which
|
|
4
|
+
# inherits from this root "deja" logger. Default handler writes to stderr with
|
|
5
|
+
# the same "[deja] ..." format the codebase used previously via print().
|
|
6
|
+
_logger = logging.getLogger("deja")
|
|
7
|
+
if not _logger.handlers:
|
|
8
|
+
_handler = logging.StreamHandler() # stderr by default
|
|
9
|
+
_handler.setFormatter(logging.Formatter("[deja] %(message)s"))
|
|
10
|
+
_logger.addHandler(_handler)
|
|
11
|
+
_logger.setLevel(logging.INFO)
|