memnant 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -101
- package/dist/cli/archive.d.ts.map +1 -1
- package/dist/cli/archive.js +16 -13
- package/dist/cli/archive.js.map +1 -1
- package/dist/cli/ask.d.ts.map +1 -1
- package/dist/cli/ask.js +16 -14
- package/dist/cli/ask.js.map +1 -1
- package/dist/cli/check-copy.d.ts.map +1 -1
- package/dist/cli/check-copy.js +10 -8
- package/dist/cli/check-copy.js.map +1 -1
- package/dist/cli/check-design.d.ts.map +1 -1
- package/dist/cli/check-design.js +10 -8
- package/dist/cli/check-design.js.map +1 -1
- package/dist/cli/costs.d.ts.map +1 -1
- package/dist/cli/costs.js +37 -20
- package/dist/cli/costs.js.map +1 -1
- package/dist/cli/default-action.d.ts.map +1 -1
- package/dist/cli/default-action.js +14 -7
- package/dist/cli/default-action.js.map +1 -1
- package/dist/cli/eval-persona.d.ts.map +1 -1
- package/dist/cli/eval-persona.js +11 -9
- package/dist/cli/eval-persona.js.map +1 -1
- package/dist/cli/export.d.ts.map +1 -1
- package/dist/cli/export.js +28 -20
- package/dist/cli/export.js.map +1 -1
- package/dist/cli/federated-search.d.ts.map +1 -1
- package/dist/cli/federated-search.js +14 -3
- package/dist/cli/federated-search.js.map +1 -1
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +31 -20
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/health.d.ts.map +1 -1
- package/dist/cli/health.js +11 -9
- package/dist/cli/health.js.map +1 -1
- package/dist/cli/import.d.ts.map +1 -1
- package/dist/cli/import.js +43 -37
- package/dist/cli/import.js.map +1 -1
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +34 -43
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ingest.d.ts.map +1 -1
- package/dist/cli/ingest.js +13 -11
- package/dist/cli/ingest.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +65 -23
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/instructions.d.ts.map +1 -1
- package/dist/cli/instructions.js +10 -10
- package/dist/cli/instructions.js.map +1 -1
- package/dist/cli/lint.d.ts.map +1 -1
- package/dist/cli/lint.js +14 -12
- package/dist/cli/lint.js.map +1 -1
- package/dist/cli/log.d.ts.map +1 -1
- package/dist/cli/log.js +48 -41
- package/dist/cli/log.js.map +1 -1
- package/dist/cli/patterns.d.ts.map +1 -1
- package/dist/cli/patterns.js +10 -8
- package/dist/cli/patterns.js.map +1 -1
- package/dist/cli/projects.d.ts.map +1 -1
- package/dist/cli/projects.js +16 -11
- package/dist/cli/projects.js.map +1 -1
- package/dist/cli/promote.d.ts.map +1 -1
- package/dist/cli/promote.js +13 -11
- package/dist/cli/promote.js.map +1 -1
- package/dist/cli/recall.d.ts.map +1 -1
- package/dist/cli/recall.js +28 -21
- package/dist/cli/recall.js.map +1 -1
- package/dist/cli/reindex.d.ts.map +1 -1
- package/dist/cli/reindex.js +23 -16
- package/dist/cli/reindex.js.map +1 -1
- package/dist/cli/replay.d.ts.map +1 -1
- package/dist/cli/replay.js +23 -16
- package/dist/cli/replay.js.map +1 -1
- package/dist/cli/retract.d.ts.map +1 -1
- package/dist/cli/retract.js +16 -13
- package/dist/cli/retract.js.map +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +1 -1
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/session.d.ts.map +1 -1
- package/dist/cli/session.js +25 -19
- package/dist/cli/session.js.map +1 -1
- package/dist/cli/setup.d.ts +5 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +57 -4
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/snapshot.d.ts.map +1 -1
- package/dist/cli/snapshot.js +13 -11
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/spec-diff.d.ts.map +1 -1
- package/dist/cli/spec-diff.js +30 -17
- package/dist/cli/spec-diff.js.map +1 -1
- package/dist/cli/specs.d.ts.map +1 -1
- package/dist/cli/specs.js +9 -8
- package/dist/cli/specs.js.map +1 -1
- package/dist/cli/stats.d.ts.map +1 -1
- package/dist/cli/stats.js +18 -11
- package/dist/cli/stats.js.map +1 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +18 -11
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/synthesise.d.ts.map +1 -1
- package/dist/cli/synthesise.js +10 -8
- package/dist/cli/synthesise.js.map +1 -1
- package/dist/cli/telegram.d.ts.map +1 -1
- package/dist/cli/telegram.js +1 -1
- package/dist/cli/telegram.js.map +1 -1
- package/dist/cli/test-persona.d.ts.map +1 -1
- package/dist/cli/test-persona.js +12 -10
- package/dist/cli/test-persona.js.map +1 -1
- package/dist/cli/webhook.d.ts.map +1 -1
- package/dist/cli/webhook.js +16 -14
- package/dist/cli/webhook.js.map +1 -1
- package/dist/config/load.d.ts +22 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +70 -0
- package/dist/config/load.js.map +1 -0
- package/dist/context/compile.js +1 -1
- package/dist/context/compile.js.map +1 -1
- package/dist/governor/plugins.d.ts.map +1 -1
- package/dist/governor/plugins.js +15 -7
- package/dist/governor/plugins.js.map +1 -1
- package/dist/graph/relationships.js +1 -1
- package/dist/graph/relationships.js.map +1 -1
- package/dist/ledger/database.d.ts.map +1 -1
- package/dist/ledger/database.js +10 -1
- package/dist/ledger/database.js.map +1 -1
- package/dist/ledger/migrations.d.ts.map +1 -1
- package/dist/ledger/migrations.js +21 -0
- package/dist/ledger/migrations.js.map +1 -1
- package/dist/ledger/records.js +1 -1
- package/dist/ledger/records.js.map +1 -1
- package/dist/ledger/stats.js +1 -1
- package/dist/ledger/stats.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/registry/federated-search.d.ts.map +1 -1
- package/dist/registry/federated-search.js +15 -21
- package/dist/registry/federated-search.js.map +1 -1
- package/dist/relevance/access.d.ts.map +1 -1
- package/dist/relevance/access.js +30 -12
- package/dist/relevance/access.js.map +1 -1
- package/dist/synthesis/patterns.js +1 -1
- package/dist/synthesis/patterns.js.map +1 -1
- package/dist/telegram/bot.d.ts.map +1 -1
- package/dist/telegram/bot.js +3 -7
- package/dist/telegram/bot.js.map +1 -1
- package/dist/vector/embedding-utils.d.ts +10 -0
- package/dist/vector/embedding-utils.d.ts.map +1 -0
- package/dist/vector/embedding-utils.js +15 -0
- package/dist/vector/embedding-utils.js.map +1 -0
- package/dist/vector/embeddings.d.ts +1 -3
- package/dist/vector/embeddings.d.ts.map +1 -1
- package/dist/vector/embeddings.js +3 -9
- package/dist/vector/embeddings.js.map +1 -1
- package/dist/vector/search.js +1 -1
- package/dist/vector/search.js.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -1,48 +1,38 @@
|
|
|
1
1
|
# memnant
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Project memory that works across every MCP client.
|
|
4
4
|
|
|
5
5
|
## The problem
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
But the real problem is bigger. Platform memory is locked to one client and one project. Claude Code's memory doesn't work in Cursor. Cursor's memory doesn't work in Windsurf. And none of them carry the framework fix you solved in project A into project B.
|
|
7
|
+
Platform memory is locked to one client and one project. Claude Code's memory doesn't work in Cursor. Cursor's memory doesn't work in Windsurf. None of them carry the framework fix you solved in project A into project B. And none of them know when a stored decision goes stale.
|
|
10
8
|
|
|
11
9
|
memnant is locked to nothing. It works across any MCP-compatible agent, any project, any session. Your engineering knowledge compounds everywhere you build.
|
|
12
10
|
|
|
13
|
-
## How it works
|
|
14
|
-
|
|
15
|
-
**It remembers.** The agent silently logs decisions, framework fixes, and rejections during conversation. Every record gets a vector embedding for semantic search. Ask "auth approach" and find the record where you chose JWTs over sessions.
|
|
16
|
-
|
|
17
|
-
**It compiles.** Sessions start and close automatically. At session start, memnant compiles context: last session's log, open TODOs, relevant decisions, framework fixes, staleness warnings. Three weeks away? One command. Full context. Under two minutes.
|
|
18
|
-
|
|
19
|
-
**It flags.** Codebase snapshots track file hashes and AST structure. When a file changes after a decision was logged about it, memnant computes semantic similarity between the record and the diff — not just "file changed", but "did the change actually affect this decision?" Records get a staleness confidence score, not a binary flag. Every other memory tool serves old decisions as current. memnant tracks validity with precision.
|
|
20
|
-
|
|
21
|
-
**It travels.** Export framework fixes from one project, import them into the next. The gotcha you solved once never bites you again — across any project, any codebase. No platform memory tool can do this because they're siloed by project. Your experience isn't.
|
|
22
|
-
|
|
23
11
|
## Quick start
|
|
24
12
|
|
|
25
13
|
```bash
|
|
26
14
|
npx memnant
|
|
27
15
|
```
|
|
28
16
|
|
|
29
|
-
First run creates your config and
|
|
17
|
+
First run creates your config, ledger, and auto-registers the MCP server for your agent. After that, it starts a session with compiled context.
|
|
18
|
+
|
|
19
|
+
That's it. The agent logs decisions silently as you work. Start your next session with full context.
|
|
20
|
+
|
|
21
|
+
### Manual MCP config
|
|
30
22
|
|
|
31
|
-
|
|
23
|
+
If auto-registration doesn't work for your setup, add memnant to your agent's MCP config:
|
|
32
24
|
|
|
33
25
|
```json
|
|
34
26
|
{
|
|
35
27
|
"mcpServers": {
|
|
36
28
|
"memnant": {
|
|
37
|
-
"command": "
|
|
38
|
-
"args": ["serve"]
|
|
29
|
+
"command": "npx",
|
|
30
|
+
"args": ["-y", "memnant", "serve"]
|
|
39
31
|
}
|
|
40
32
|
}
|
|
41
33
|
}
|
|
42
34
|
```
|
|
43
35
|
|
|
44
|
-
Start building. The agent logs decisions automatically. Start your next session with full context.
|
|
45
|
-
|
|
46
36
|
## What a session looks like
|
|
47
37
|
|
|
48
38
|
```
|
|
@@ -67,6 +57,18 @@ TODO: wire dashboard filters to snapshot queries
|
|
|
67
57
|
Session e8f3 started. Good building.
|
|
68
58
|
```
|
|
69
59
|
|
|
60
|
+
Three weeks away from a project. One command. Full context in under two minutes.
|
|
61
|
+
|
|
62
|
+
## How it works
|
|
63
|
+
|
|
64
|
+
**It remembers.** The agent silently logs decisions, framework fixes, and rejections during conversation. Every record gets a vector embedding for semantic search.
|
|
65
|
+
|
|
66
|
+
**It compiles.** Sessions start and close automatically. At session start, memnant compiles context: last session's log, open TODOs, relevant decisions, staleness warnings. Not a raw dump — the relevant subset.
|
|
67
|
+
|
|
68
|
+
**It flags.** Codebase snapshots track file hashes and AST structure. When a file changes, memnant scores whether the change actually affects related decisions — not a binary flag, a confidence score. `[stale 0.72]` means "this decision is probably still valid but the code it references changed."
|
|
69
|
+
|
|
70
|
+
**It travels.** Export framework fixes from one project, import them into the next. The gotcha you solved once never bites you again — across any project, any codebase.
|
|
71
|
+
|
|
70
72
|
## Fixes that travel
|
|
71
73
|
|
|
72
74
|
```bash
|
|
@@ -78,90 +80,33 @@ memnant import .../framework-fixes.portable.json
|
|
|
78
80
|
# → Imported 3 framework fixes (1 skipped as duplicate)
|
|
79
81
|
```
|
|
80
82
|
|
|
81
|
-
Framework fixes aren't project-specific. The caching bug you solved in your SaaS app applies to your next Next.js project. `memnant export` strips project-specific fields
|
|
83
|
+
Framework fixes aren't project-specific. The caching bug you solved in your SaaS app applies to your next Next.js project. `memnant export` strips project-specific fields. `memnant import` re-generates embeddings locally, deduplicates, and tags imports with their source.
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
## Beyond the basics
|
|
84
86
|
|
|
85
|
-
|
|
87
|
+
**Staleness scores.** Not binary stale/fresh — embedding-based confidence scores that compare the record against the actual diff. A renamed variable doesn't invalidate an architecture decision.
|
|
86
88
|
|
|
87
|
-
**
|
|
89
|
+
**Connection graph.** Records auto-link by semantic similarity. Supersession chains track when a new decision replaces an old one. Contradictions are flagged automatically.
|
|
88
90
|
|
|
89
|
-
**
|
|
91
|
+
**Synthesis.** Ask questions that span multiple records. "How did our auth approach evolve?" returns a synthesised answer with citations back to source records.
|
|
90
92
|
|
|
91
|
-
**
|
|
93
|
+
**Relevance decay.** Old records fade. Frequently accessed ones stay prominent. The ledger self-organises around what's actually useful.
|
|
92
94
|
|
|
93
|
-
**
|
|
95
|
+
**Cross-project search.** Search across all your memnant projects at once.
|
|
94
96
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
## As your ledger grows
|
|
97
|
+
## Under the hood
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
**Storage.** Single SQLite file at `.memnant/ledger.db`. Copy it to another machine and everything comes with you.
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|---|---|---|
|
|
103
|
-
| **Connection Graph** | Records auto-link, supersede, and contradict at write time | Records in the ledger |
|
|
104
|
-
| **Relevance Scoring** | 4-signal composite: similarity, recency, freshness, frequency | Configurable in memnant.yaml |
|
|
105
|
-
| **Semantic Staleness** | Embedding-based confidence scoring — flags decisions only when the diff is semantically related, not just because the file changed | Automatic |
|
|
106
|
-
| **Context Replay** | Record and replay the exact context served to agents in any session | Automatic |
|
|
107
|
-
| **Spec Diffing** | Auto-snapshot spec documents on change, unified diff between versions | Spec docs in `docs/` |
|
|
108
|
-
| **Synthesis** | Cross-record questions with citations | `ANTHROPIC_API_KEY` |
|
|
109
|
-
| **Spec Governor** | Copy audits, design checks, persona tests, CI lint | Spec docs in `docs/` |
|
|
110
|
-
| **Predictive Context** | File-aware search, branch detection, co-occurrence patterns | Builds over sessions |
|
|
111
|
-
| **Model Routing** | Route tasks to Haiku/Sonnet/Opus with tier-appropriate context | API keys |
|
|
112
|
-
| **Health Monitoring** | Staleness rate, contradictions, spec drift, status levels | — |
|
|
113
|
-
| **Continuous Governance** | Pre-commit hooks, override tracking, governance feedback | Spec docs + git hooks |
|
|
114
|
-
| **Telegram** | Triage from your phone | `MEMRANT_TELEGRAM_TOKEN` |
|
|
101
|
+
**Search.** Local vector embeddings via all-MiniLM-L6-v2. Semantic search on CPU. No API calls. Works on a plane.
|
|
115
102
|
|
|
116
|
-
|
|
103
|
+
**Integration.** MCP server over stdio. Plugs into Claude Code, Cursor, or any MCP-compatible agent. Auto-registers during init.
|
|
117
104
|
|
|
118
|
-
|
|
105
|
+
**Config.** `memnant.yaml` at your project root. Version-controlled. No dashboard, no account, no login.
|
|
119
106
|
|
|
120
|
-
|
|
121
|
-
npx memnant # auto-detect: init, start session, or status
|
|
122
|
-
memnant log --type decision # write a record
|
|
123
|
-
memnant recall "auth approach" # semantic search
|
|
124
|
-
memnant session start # compile context
|
|
125
|
-
memnant session close # capture what happened
|
|
126
|
-
memnant snapshot # codebase snapshot for staleness
|
|
127
|
-
memnant replay <session-id> # replay exact context served in a session
|
|
128
|
-
memnant spec-diff # see what changed between spec versions
|
|
129
|
-
memnant stats # ledger health dashboard
|
|
130
|
-
memnant eval-persona # automated persona test evaluation
|
|
131
|
-
memnant export # full ledger to markdown/JSON
|
|
132
|
-
memnant export --team # team sync export with builder identity
|
|
133
|
-
memnant search "query" # federated search across projects
|
|
134
|
-
memnant projects # list registered projects
|
|
135
|
-
memnant lint # validate against spec docs
|
|
136
|
-
memnant ingest <file> # import NotebookLM export
|
|
137
|
-
memnant webhook --event deploy # process CI/deploy/alert events
|
|
138
|
-
memnant costs # query API spend
|
|
139
|
-
```
|
|
107
|
+
**Export.** Markdown or JSON. Every record, every decision, every session log. Your history is never locked in.
|
|
140
108
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
## MCP tools
|
|
144
|
-
|
|
145
|
-
| Tool | Purpose |
|
|
146
|
-
|---|---|
|
|
147
|
-
| `memnant_recall` | Semantic search over the ledger |
|
|
148
|
-
| `memnant_log` | Write a record (auto-starts session) |
|
|
149
|
-
| `memnant_session_context` | Compiled context for session start |
|
|
150
|
-
| `memnant_session_close` | Close session with summary |
|
|
151
|
-
| `memnant_status` | Project status |
|
|
152
|
-
| `memnant_check_copy` | Copy audit against spec |
|
|
153
|
-
| `memnant_check_design` | Design system validation |
|
|
154
|
-
| `memnant_synthesise` | Cross-record questions with citations |
|
|
155
|
-
| `memnant_context_for_file` | Records relevant to a specific file |
|
|
156
|
-
| `memnant_project_brief` | Dynamic 500-token project summary |
|
|
157
|
-
| `memnant_stats` | Ledger health dashboard |
|
|
158
|
-
| `memnant_replay` | Replay exact context served in a session |
|
|
159
|
-
| `memnant_spec_diff` | Diff between spec document versions |
|
|
160
|
-
| `memnant_reindex` | Regenerate stale embeddings |
|
|
161
|
-
| `memnant_retract` | Retract a wrong or outdated record |
|
|
162
|
-
| `memnant_eval_persona` | Automated persona test evaluation |
|
|
163
|
-
| `memnant_federated_recall` | Search across multiple projects |
|
|
164
|
-
| `memnant_costs` | Query API spend by session, tier, or time |
|
|
109
|
+
**Runtime.** Node.js >= 20. All dependencies bundled (SQLite WASM, local embeddings, MCP SDK). Optional `ANTHROPIC_API_KEY` for synthesis — core functionality works fully offline.
|
|
165
110
|
|
|
166
111
|
## What it's not
|
|
167
112
|
|
|
@@ -175,17 +120,9 @@ memnant costs # query API spend
|
|
|
175
120
|
|
|
176
121
|
## Who it's for
|
|
177
122
|
|
|
178
|
-
Solo builders
|
|
179
|
-
|
|
180
|
-
The test: three weeks away from a project, `npx memnant` gives full context in under two minutes. Switch to a new project, `memnant import` brings your framework fixes with you.
|
|
181
|
-
|
|
182
|
-
## Dependencies
|
|
183
|
-
|
|
184
|
-
**Required:** Node.js >= 20
|
|
185
|
-
|
|
186
|
-
**Bundled:** SQLite (WASM, no native deps), local embeddings, MCP SDK
|
|
123
|
+
Solo builders and small teams shipping with AI agents. You work in sessions — days or weeks apart. You juggle multiple projects. You need your engineering knowledge to compound across everything you build, not reset every time you switch contexts.
|
|
187
124
|
|
|
188
|
-
|
|
125
|
+
If you only use one agent on one project, the built-in memory covers most of the same ground. memnant's edge is when your knowledge needs to work across multiple tools, multiple projects, or both.
|
|
189
126
|
|
|
190
127
|
## License
|
|
191
128
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/cli/archive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/cli/archive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoE7D"}
|
package/dist/cli/archive.js
CHANGED
|
@@ -4,19 +4,20 @@
|
|
|
4
4
|
* Archived records are excluded from recall, context compilation, and export.
|
|
5
5
|
* They are not deleted — they can be unarchived later.
|
|
6
6
|
*/
|
|
7
|
-
import { existsSync
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
8
|
import { join } from 'path';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function loadDb() {
|
|
9
|
+
async function loadDb() {
|
|
10
|
+
const { openDatabase } = await import('../ledger/database.js');
|
|
11
|
+
const { loadConfig, ConfigError } = await import('../config/load.js');
|
|
13
12
|
const cwd = process.cwd();
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
let config;
|
|
14
|
+
try {
|
|
15
|
+
config = loadConfig(cwd);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
console.error(err instanceof ConfigError ? err.message : String(err));
|
|
17
19
|
process.exit(1);
|
|
18
20
|
}
|
|
19
|
-
const config = yaml.load(readFileSync(configPath, 'utf-8'));
|
|
20
21
|
const dbPath = join(cwd, config.memory.db_path);
|
|
21
22
|
if (!existsSync(dbPath)) {
|
|
22
23
|
console.error(`Ledger database not found at ${config.memory.db_path}. Run \`memnant init\` to recreate.`);
|
|
@@ -39,12 +40,13 @@ export function registerArchiveCommand(program) {
|
|
|
39
40
|
.option('--id <id>', 'Archive a single record')
|
|
40
41
|
.option('--superseded', 'Archive all superseded records')
|
|
41
42
|
.option('--stale-older-than <duration>', 'Archive stale records older than duration (e.g. 90d)')
|
|
42
|
-
.action((opts) => {
|
|
43
|
+
.action(async (opts) => {
|
|
44
|
+
const { archiveRecord, archiveSuperseded, archiveStaleOlderThan } = await import('../ledger/admin.js');
|
|
43
45
|
if (!opts.id && !opts.superseded && !opts.staleOlderThan) {
|
|
44
46
|
console.error('Specify at least one: --id <id>, --superseded, or --stale-older-than <duration>');
|
|
45
47
|
process.exit(1);
|
|
46
48
|
}
|
|
47
|
-
const db = loadDb();
|
|
49
|
+
const db = await loadDb();
|
|
48
50
|
try {
|
|
49
51
|
if (opts.id) {
|
|
50
52
|
archiveRecord(db, opts.id);
|
|
@@ -73,12 +75,13 @@ export function registerArchiveCommand(program) {
|
|
|
73
75
|
.description('Restore archived records')
|
|
74
76
|
.option('--id <id>', 'Unarchive a single record')
|
|
75
77
|
.option('--all', 'Unarchive all archived records')
|
|
76
|
-
.action((opts) => {
|
|
78
|
+
.action(async (opts) => {
|
|
79
|
+
const { unarchiveRecord, unarchiveAll } = await import('../ledger/admin.js');
|
|
77
80
|
if (!opts.id && !opts.all) {
|
|
78
81
|
console.error('Specify at least one: --id <id> or --all');
|
|
79
82
|
process.exit(1);
|
|
80
83
|
}
|
|
81
|
-
const db = loadDb();
|
|
84
|
+
const db = await loadDb();
|
|
82
85
|
try {
|
|
83
86
|
if (opts.id) {
|
|
84
87
|
unarchiveRecord(db, opts.id);
|
package/dist/cli/archive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/cli/archive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/cli/archive.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/ask.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/cli/ask.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/cli/ask.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiHzD"}
|
package/dist/cli/ask.js
CHANGED
|
@@ -4,17 +4,8 @@
|
|
|
4
4
|
* Story 4.1: Intent classification, tier routing, context injection,
|
|
5
5
|
* and model provider integration.
|
|
6
6
|
*/
|
|
7
|
-
import { existsSync
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
8
|
import { join } from 'path';
|
|
9
|
-
import yaml from 'js-yaml';
|
|
10
|
-
import { openDatabase } from '../ledger/database.js';
|
|
11
|
-
import { insertRecord } from '../ledger/records.js';
|
|
12
|
-
import { generateEmbedding, serializeEmbedding } from '../vector/embeddings.js';
|
|
13
|
-
import { getActiveSession } from '../ledger/sessions.js';
|
|
14
|
-
import { classifyIntent, getApiKeyEnvVar } from '../orchestrator/router.js';
|
|
15
|
-
import { callModel } from '../orchestrator/providers.js';
|
|
16
|
-
import { buildTierContext } from '../orchestrator/context.js';
|
|
17
|
-
import { formatCostMetadata, serializeCostTag } from '../orchestrator/costs.js';
|
|
18
9
|
export function registerAskCommand(program) {
|
|
19
10
|
program
|
|
20
11
|
.command('ask')
|
|
@@ -23,13 +14,24 @@ export function registerAskCommand(program) {
|
|
|
23
14
|
.option('--tier <n>', 'Override automatic tier routing (1, 2, or 3)')
|
|
24
15
|
.option('--dry-run', 'Show routing decision and context without calling the model')
|
|
25
16
|
.action(async (message, opts) => {
|
|
17
|
+
const { openDatabase } = await import('../ledger/database.js');
|
|
18
|
+
const { insertRecord } = await import('../ledger/records.js');
|
|
19
|
+
const { generateEmbedding, serializeEmbedding } = await import('../vector/embeddings.js');
|
|
20
|
+
const { getActiveSession } = await import('../ledger/sessions.js');
|
|
21
|
+
const { classifyIntent, getApiKeyEnvVar } = await import('../orchestrator/router.js');
|
|
22
|
+
const { callModel } = await import('../orchestrator/providers.js');
|
|
23
|
+
const { buildTierContext } = await import('../orchestrator/context.js');
|
|
24
|
+
const { formatCostMetadata, serializeCostTag } = await import('../orchestrator/costs.js');
|
|
25
|
+
const { loadConfig, ConfigError } = await import('../config/load.js');
|
|
26
26
|
const cwd = process.cwd();
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
let config;
|
|
28
|
+
try {
|
|
29
|
+
config = loadConfig(cwd);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error(err instanceof ConfigError ? err.message : String(err));
|
|
30
33
|
process.exit(1);
|
|
31
34
|
}
|
|
32
|
-
const config = yaml.load(readFileSync(configPath, 'utf-8'));
|
|
33
35
|
const dbPath = join(cwd, config.memory.db_path);
|
|
34
36
|
if (!existsSync(dbPath)) {
|
|
35
37
|
console.error(`Ledger database not found at ${config.memory.db_path}. Run \`memnant init\` to recreate.`);
|
package/dist/cli/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/cli/ask.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/cli/ask.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-copy.d.ts","sourceRoot":"","sources":["../../src/cli/check-copy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"check-copy.d.ts","sourceRoot":"","sources":["../../src/cli/check-copy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkE/D"}
|
package/dist/cli/check-copy.js
CHANGED
|
@@ -5,23 +5,25 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync } from 'fs';
|
|
7
7
|
import { join } from 'path';
|
|
8
|
-
import yaml from 'js-yaml';
|
|
9
|
-
import { checkCopy } from '../governor/copy-check.js';
|
|
10
|
-
import { scanSpecs } from '../governor/specs.js';
|
|
11
8
|
export function registerCheckCopyCommand(program) {
|
|
12
9
|
program
|
|
13
10
|
.command('check-copy')
|
|
14
11
|
.description('Check text against the copy audit spec')
|
|
15
12
|
.argument('[text]', 'Text to check (or use --file)')
|
|
16
13
|
.option('--file <path>', 'Check an entire file')
|
|
17
|
-
.action((text, opts) => {
|
|
14
|
+
.action(async (text, opts) => {
|
|
15
|
+
const { checkCopy } = await import('../governor/copy-check.js');
|
|
16
|
+
const { scanSpecs } = await import('../governor/specs.js');
|
|
17
|
+
const { loadConfig, ConfigError } = await import('../config/load.js');
|
|
18
18
|
const cwd = process.cwd();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
let config;
|
|
20
|
+
try {
|
|
21
|
+
config = loadConfig(cwd);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
console.error(err instanceof ConfigError ? err.message : String(err));
|
|
22
25
|
process.exit(1);
|
|
23
26
|
}
|
|
24
|
-
const config = yaml.load(readFileSync(configPath, 'utf-8'));
|
|
25
27
|
const docsPath = join(cwd, config.governor.docs_path);
|
|
26
28
|
// Check if copy audit spec exists
|
|
27
29
|
const specs = scanSpecs(docsPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-copy.js","sourceRoot":"","sources":["../../src/cli/check-copy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"check-copy.js","sourceRoot":"","sources":["../../src/cli/check-copy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-design.d.ts","sourceRoot":"","sources":["../../src/cli/check-design.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"check-design.d.ts","sourceRoot":"","sources":["../../src/cli/check-design.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgEjE"}
|
package/dist/cli/check-design.js
CHANGED
|
@@ -5,22 +5,24 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
7
7
|
import { join, relative } from 'path';
|
|
8
|
-
import yaml from 'js-yaml';
|
|
9
|
-
import { checkDesign } from '../governor/design-check.js';
|
|
10
|
-
import { scanSpecs } from '../governor/specs.js';
|
|
11
8
|
export function registerCheckDesignCommand(program) {
|
|
12
9
|
program
|
|
13
10
|
.command('check-design')
|
|
14
11
|
.description('Check source files for banned components from the design system spec')
|
|
15
12
|
.argument('<path>', 'File or directory to check')
|
|
16
|
-
.action((targetPath) => {
|
|
13
|
+
.action(async (targetPath) => {
|
|
14
|
+
const { checkDesign } = await import('../governor/design-check.js');
|
|
15
|
+
const { scanSpecs } = await import('../governor/specs.js');
|
|
16
|
+
const { loadConfig, ConfigError } = await import('../config/load.js');
|
|
17
17
|
const cwd = process.cwd();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
let config;
|
|
19
|
+
try {
|
|
20
|
+
config = loadConfig(cwd);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(err instanceof ConfigError ? err.message : String(err));
|
|
21
24
|
process.exit(1);
|
|
22
25
|
}
|
|
23
|
-
const config = yaml.load(readFileSync(configPath, 'utf-8'));
|
|
24
26
|
const docsPath = join(cwd, config.governor.docs_path);
|
|
25
27
|
// Check if design system spec exists
|
|
26
28
|
const specs = scanSpecs(docsPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-design.js","sourceRoot":"","sources":["../../src/cli/check-design.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"check-design.js","sourceRoot":"","sources":["../../src/cli/check-design.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/costs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"costs.d.ts","sourceRoot":"","sources":["../../src/cli/costs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"costs.d.ts","sourceRoot":"","sources":["../../src/cli/costs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgH3D"}
|
package/dist/cli/costs.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* memnant costs — Query API spend by session, tier, or time period.
|
|
3
3
|
*/
|
|
4
|
-
import { existsSync
|
|
4
|
+
import { existsSync } from 'fs';
|
|
5
5
|
import { join } from 'path';
|
|
6
|
-
import yaml from 'js-yaml';
|
|
7
|
-
import { openDatabase } from '../ledger/database.js';
|
|
8
|
-
import { parseCostFromRecord } from '../orchestrator/costs.js';
|
|
9
6
|
export function registerCostsCommand(program) {
|
|
10
7
|
program
|
|
11
8
|
.command('costs')
|
|
@@ -14,33 +11,53 @@ export function registerCostsCommand(program) {
|
|
|
14
11
|
.option('--since <date>', 'Filter to records after YYYY-MM-DD')
|
|
15
12
|
.option('--group-by <field>', 'Group by: tier, model, session')
|
|
16
13
|
.option('--json', 'Output as JSON')
|
|
17
|
-
.action((opts) => {
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
const { openDatabase } = await import('../ledger/database.js');
|
|
16
|
+
const { parseCostFromRecord } = await import('../orchestrator/costs.js');
|
|
17
|
+
const { loadConfig, ConfigError } = await import('../config/load.js');
|
|
18
18
|
const cwd = process.cwd();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
let config;
|
|
20
|
+
try {
|
|
21
|
+
config = loadConfig(cwd);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
console.error(err instanceof ConfigError ? err.message : String(err));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
// Validate --since
|
|
28
|
+
if (opts.since && !/^\d{4}-\d{2}-\d{2}$/.test(opts.since)) {
|
|
29
|
+
console.error(`Invalid date format '${opts.since}'. Expected YYYY-MM-DD (e.g. 2025-01-01).`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
// Validate --group-by
|
|
33
|
+
if (opts.groupBy && !['tier', 'model', 'session'].includes(opts.groupBy)) {
|
|
34
|
+
console.error(`Invalid group-by field '${opts.groupBy}'. Valid values: tier, model, session`);
|
|
22
35
|
process.exit(1);
|
|
23
36
|
}
|
|
24
|
-
const config = yaml.load(readFileSync(configPath, 'utf-8'));
|
|
25
37
|
const dbPath = join(cwd, config.memory.db_path);
|
|
26
38
|
if (!existsSync(dbPath)) {
|
|
27
39
|
console.error(`Ledger database not found at ${config.memory.db_path}. Run \`memnant init\` to recreate.`);
|
|
28
40
|
process.exit(1);
|
|
29
41
|
}
|
|
30
42
|
const db = openDatabase(dbPath);
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
43
|
+
let rows;
|
|
44
|
+
try {
|
|
45
|
+
let query = "SELECT content_text, source_session, created_at FROM record WHERE type IN ('orchestrator_task', 'synthesis_cache') AND retracted_at IS NULL";
|
|
46
|
+
const params = [];
|
|
47
|
+
if (opts.session) {
|
|
48
|
+
query += ' AND source_session LIKE ?';
|
|
49
|
+
params.push(`${opts.session}%`);
|
|
50
|
+
}
|
|
51
|
+
if (opts.since) {
|
|
52
|
+
query += ' AND created_at >= ?';
|
|
53
|
+
params.push(opts.since + 'T00:00:00.000Z');
|
|
54
|
+
}
|
|
55
|
+
query += ' ORDER BY created_at ASC';
|
|
56
|
+
rows = db.all(query, params);
|
|
36
57
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
params.push(opts.since + 'T00:00:00.000Z');
|
|
58
|
+
finally {
|
|
59
|
+
db.close();
|
|
40
60
|
}
|
|
41
|
-
query += ' ORDER BY created_at ASC';
|
|
42
|
-
const rows = db.all(query, params);
|
|
43
|
-
db.close();
|
|
44
61
|
// Extract cost metadata from records
|
|
45
62
|
const costs = [];
|
|
46
63
|
for (const row of rows) {
|
package/dist/cli/costs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"costs.js","sourceRoot":"","sources":["../../src/cli/costs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"costs.js","sourceRoot":"","sources":["../../src/cli/costs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-action.d.ts","sourceRoot":"","sources":["../../src/cli/default-action.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"default-action.d.ts","sourceRoot":"","sources":["../../src/cli/default-action.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA4FnD"}
|