memnant 1.0.0 → 1.0.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/README.md +9 -86
- 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/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 +61 -15
- 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.map +1 -1
- package/dist/cli/setup.js +32 -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 +1 -1
package/README.md
CHANGED
|
@@ -4,21 +4,19 @@ Shared project memory for any 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.
|
|
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
11
|
## How it works
|
|
14
12
|
|
|
15
|
-
**It remembers.** The agent silently logs decisions, framework fixes, and rejections during conversation. Every record gets a vector embedding for semantic search.
|
|
13
|
+
**It remembers.** The agent silently logs decisions, framework fixes, and rejections during conversation. Every record gets a vector embedding for semantic search.
|
|
16
14
|
|
|
17
|
-
**It compiles.** Sessions start and close automatically. At session start, memnant compiles context: last session's log, open TODOs, relevant decisions,
|
|
15
|
+
**It compiles.** Sessions start and close automatically. At session start, memnant compiles context: last session's log, open TODOs, relevant decisions, staleness warnings. Three weeks away? One command. Full context.
|
|
18
16
|
|
|
19
|
-
**It flags.** Codebase snapshots track file hashes and AST structure. When a file changes
|
|
17
|
+
**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.
|
|
20
18
|
|
|
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.
|
|
19
|
+
**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.
|
|
22
20
|
|
|
23
21
|
## Quick start
|
|
24
22
|
|
|
@@ -88,80 +86,13 @@ Platform memory is siloed by project. Your experience isn't.
|
|
|
88
86
|
|
|
89
87
|
**Search.** Local vector embeddings via all-MiniLM-L6-v2. Semantic search on CPU. No API calls. Works on a plane.
|
|
90
88
|
|
|
91
|
-
**Integration.** MCP server over stdio.
|
|
89
|
+
**Integration.** MCP server over stdio. Plugs into Claude Code, Cursor, or any MCP-compatible agent.
|
|
92
90
|
|
|
93
91
|
**Config.** `memnant.yaml` at your project root. Version-controlled. No dashboard, no account, no login.
|
|
94
92
|
|
|
95
93
|
**Export.** Markdown or JSON. Every record, every decision, every session log. Your history is never locked in.
|
|
96
94
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
The core loop is four things: remember, compile, flag, travel. As records accumulate, memnant has depth that earns its way in.
|
|
100
|
-
|
|
101
|
-
| Capability | What it does | Requires |
|
|
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` |
|
|
115
|
-
|
|
116
|
-
Every capability is independent. Use what you need. Ignore the rest.
|
|
117
|
-
|
|
118
|
-
## Core commands
|
|
119
|
-
|
|
120
|
-
```bash
|
|
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
|
-
```
|
|
140
|
-
|
|
141
|
-
36 commands total. Full reference in the [docs](docs/).
|
|
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 |
|
|
95
|
+
**Runtime.** Node.js >= 20. All dependencies bundled (SQLite WASM, local embeddings, MCP SDK). Optional `ANTHROPIC_API_KEY` for synthesis and model routing — core functionality works fully offline.
|
|
165
96
|
|
|
166
97
|
## What it's not
|
|
167
98
|
|
|
@@ -175,17 +106,9 @@ memnant costs # query API spend
|
|
|
175
106
|
|
|
176
107
|
## Who it's for
|
|
177
108
|
|
|
178
|
-
Solo builders shipping multiple products with AI agents. You work in sessions — days or weeks apart. You juggle 3-4 projects. You
|
|
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
|
|
109
|
+
Solo builders shipping multiple products with AI agents. You work in sessions — days or weeks apart. You juggle 3-4 projects. You need your engineering knowledge to compound across everything you build, not reset every time you switch projects.
|
|
187
110
|
|
|
188
|
-
|
|
111
|
+
The test: three weeks away from a project, `npx memnant` gives full context in under two minutes.
|
|
189
112
|
|
|
190
113
|
## License
|
|
191
114
|
|
|
@@ -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"}
|
|
@@ -6,13 +6,8 @@
|
|
|
6
6
|
* 2. memnant.yaml exists, no active session → start session + print context
|
|
7
7
|
* 3. Active session exists → show session status
|
|
8
8
|
*/
|
|
9
|
-
import { existsSync
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
10
|
import { join } from 'path';
|
|
11
|
-
import yaml from 'js-yaml';
|
|
12
|
-
import { openDatabase } from '../ledger/database.js';
|
|
13
|
-
import { createSession, getActiveSession, getSessionRecordCounts } from '../ledger/sessions.js';
|
|
14
|
-
import { compileContext, formatContextAsMarkdown } from '../context/compile.js';
|
|
15
|
-
import { getLastSnapshotDate } from '../snapshot/scanner.js';
|
|
16
11
|
export async function defaultAction() {
|
|
17
12
|
const cwd = process.cwd();
|
|
18
13
|
const configPath = join(cwd, 'memnant.yaml');
|
|
@@ -28,12 +23,22 @@ export async function defaultAction() {
|
|
|
28
23
|
await tempProgram.parseAsync(['init'], { from: 'user' });
|
|
29
24
|
return;
|
|
30
25
|
}
|
|
31
|
-
const
|
|
26
|
+
const { loadConfig, ConfigError } = await import('../config/load.js');
|
|
27
|
+
let config;
|
|
28
|
+
try {
|
|
29
|
+
config = loadConfig(cwd);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error(err instanceof ConfigError ? err.message : String(err));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
32
35
|
const dbPath = join(cwd, config.memory.db_path);
|
|
33
36
|
if (!existsSync(dbPath)) {
|
|
34
37
|
console.error(`Ledger database not found at ${config.memory.db_path}. Run \`memnant init\` to recreate.`);
|
|
35
38
|
process.exit(1);
|
|
36
39
|
}
|
|
40
|
+
const { openDatabase } = await import('../ledger/database.js');
|
|
41
|
+
const { createSession, getActiveSession, getSessionRecordCounts } = await import('../ledger/sessions.js');
|
|
37
42
|
const db = openDatabase(dbPath);
|
|
38
43
|
try {
|
|
39
44
|
const active = getActiveSession(db, config.project.id);
|
|
@@ -57,6 +62,8 @@ export async function defaultAction() {
|
|
|
57
62
|
}
|
|
58
63
|
else {
|
|
59
64
|
// State 2: No active session → start session + print context
|
|
65
|
+
const { compileContext, formatContextAsMarkdown } = await import('../context/compile.js');
|
|
66
|
+
const { getLastSnapshotDate } = await import('../snapshot/scanner.js');
|
|
60
67
|
const docsPath = join(cwd, config.governor.docs_path);
|
|
61
68
|
const ctx = await compileContext(db, { docsPath, projectRoot: cwd });
|
|
62
69
|
// Snapshot age reminder
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-action.js","sourceRoot":"","sources":["../../src/cli/default-action.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"default-action.js","sourceRoot":"","sources":["../../src/cli/default-action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-persona.d.ts","sourceRoot":"","sources":["../../src/cli/eval-persona.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"eval-persona.d.ts","sourceRoot":"","sources":["../../src/cli/eval-persona.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyGjE"}
|