@atrib/recall 0.2.2 → 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/README.md +1 -1
- package/dist/index.d.ts +41 -0
- package/dist/index.js +119 -24
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -65,5 +65,5 @@ Or run via `npx`:
|
|
|
65
65
|
## What this does NOT do
|
|
66
66
|
|
|
67
67
|
- **No log-inclusion verification.** Local signature verification ≠ log commitment proof. Use the log API for inclusion proofs.
|
|
68
|
-
- **No graph derivation.** Returns records, not the §3.2.4 graph. For that, use `@atrib/trace` (causal chain) or query graph-node directly.
|
|
68
|
+
- **No graph derivation.** Returns records, not the [§3.2.4](../../atrib-spec.md#324-edge-derivation-rules) graph. For that, use `@atrib/trace` (causal chain) or query graph-node directly.
|
|
69
69
|
- **No write surface.** Read-only. Use `@atrib/emit` to sign new records.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import type { AtribRecord } from '@atrib/mcp';
|
|
3
3
|
export declare function loadRecords(path: string): AtribRecord[];
|
|
4
|
+
/**
|
|
5
|
+
* Load every `*.jsonl` file in `dir` and merge their records. Files that
|
|
6
|
+
* don't exist or aren't readable are silently skipped (a file rotated out
|
|
7
|
+
* mid-scan shouldn't error the whole call). Returns the union of records;
|
|
8
|
+
* de-duplication and ordering are caller responsibilities.
|
|
9
|
+
*
|
|
10
|
+
* Spec §5.9 establishes `~/.atrib/records/` as the well-known per-agent
|
|
11
|
+
* mirror namespace; every producer running under one identity writes a
|
|
12
|
+
* file there with the convention `<producer>-<agent>.jsonl`. Scanning the
|
|
13
|
+
* directory unifies recall across producers without recall having to know
|
|
14
|
+
* the naming scheme — any producer that follows §5.9 just shows up.
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadRecordsFromDir(dir: string): {
|
|
17
|
+
records: AtribRecord[];
|
|
18
|
+
files: string[];
|
|
19
|
+
};
|
|
4
20
|
interface RecallArgs {
|
|
5
21
|
context_id?: string;
|
|
6
22
|
event_type?: 'tool_call' | 'transaction';
|
|
@@ -44,10 +60,35 @@ export interface RecallResult {
|
|
|
44
60
|
* Always 0 when include_unverified=true was passed.
|
|
45
61
|
*/
|
|
46
62
|
filtered_out_by_verification: number;
|
|
63
|
+
/**
|
|
64
|
+
* Mirror files actually scanned. When ATRIB_RECORD_FILE was set, this is
|
|
65
|
+
* a single-element list (back-compat). Otherwise it lists every `*.jsonl`
|
|
66
|
+
* found in ATRIB_MIRROR_DIR.
|
|
67
|
+
*/
|
|
68
|
+
record_files: string[];
|
|
69
|
+
/**
|
|
70
|
+
* @deprecated Use `record_files`. Preserved as the first entry of
|
|
71
|
+
* `record_files` for callers still reading this field.
|
|
72
|
+
*/
|
|
47
73
|
record_file: string;
|
|
48
74
|
log_origin: string;
|
|
49
75
|
pagination_caveat: string;
|
|
50
76
|
records: RecallRecordFull[] | RecallRecordCompact[];
|
|
51
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Discover and load records per the mirror-discovery contract:
|
|
80
|
+
* - If `recordFile` is provided, load just that file.
|
|
81
|
+
* - Else if ATRIB_RECORD_FILE is set, load just that file (back-compat).
|
|
82
|
+
* - Else scan ATRIB_MIRROR_DIR (default ~/.atrib/records).
|
|
83
|
+
*
|
|
84
|
+
* Returns the union of records and the list of files scanned. Callers that
|
|
85
|
+
* dedupe should key on `record.signature` (signatures are unique per record
|
|
86
|
+
* per spec §1.4); the same record present in two mirrors will appear twice
|
|
87
|
+
* here unless the caller dedupes.
|
|
88
|
+
*/
|
|
89
|
+
export declare function discoverRecords(recordFile?: string): {
|
|
90
|
+
records: AtribRecord[];
|
|
91
|
+
files: string[];
|
|
92
|
+
};
|
|
52
93
|
export declare function recall(args: RecallArgs, recordFile?: string): Promise<RecallResult>;
|
|
53
94
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -4,11 +4,21 @@
|
|
|
4
4
|
* @atrib/recall — recall_my_attribution_history MCP server.
|
|
5
5
|
*
|
|
6
6
|
* Exposes a single tool to the host agent: recall_my_attribution_history.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* Reads signed-record jsonl mirrors (per spec §5.9), VERIFIES the Ed25519
|
|
8
|
+
* signature on each record before returning it, and tags every entry with
|
|
9
|
+
* signature_verified so the agent can distinguish provable past from tampered
|
|
10
|
+
* or partial mirror state.
|
|
11
|
+
*
|
|
12
|
+
* Mirror discovery (in priority order):
|
|
13
|
+
* 1. ATRIB_RECORD_FILE — single explicit jsonl file. Back-compat with
|
|
14
|
+
* pre-0.4.0 callers that pinned a specific producer's mirror.
|
|
15
|
+
* 2. ATRIB_MIRROR_DIR — directory; recall reads every `*.jsonl` inside.
|
|
16
|
+
* Default: ~/.atrib/records (the spec §5.9 well-known mirror namespace).
|
|
17
|
+
*
|
|
18
|
+
* Two on-disk shapes are accepted, matching D062 / spec §5.9:
|
|
19
|
+
* - Bare AtribRecord (legacy producers): {spec_version, ...}
|
|
20
|
+
* - Envelope (D062 sidecar form): {record: {...}, proof?, _local?}
|
|
21
|
+
* Both round-trip through verifyRecord; the parser picks the right inner shape.
|
|
12
22
|
*
|
|
13
23
|
* Trust scope: signature verification is local-only. A passing signature_verified
|
|
14
24
|
* proves the record was signed by the named creator_key; it does NOT prove the
|
|
@@ -16,8 +26,8 @@
|
|
|
16
26
|
* should fetch the inclusion proof from the log API.
|
|
17
27
|
*
|
|
18
28
|
* Configuration via environment variables:
|
|
19
|
-
* ATRIB_RECORD_FILE —
|
|
20
|
-
*
|
|
29
|
+
* ATRIB_RECORD_FILE — single explicit file (overrides directory scan).
|
|
30
|
+
* ATRIB_MIRROR_DIR — directory to scan. Default: ~/.atrib/records.
|
|
21
31
|
* ATRIB_LOG_ORIGIN — origin used in human-readable messages.
|
|
22
32
|
* Default: log.atrib.dev
|
|
23
33
|
*/
|
|
@@ -33,12 +43,38 @@ const EVENT_TYPE_SHORT_TO_URI = {
|
|
|
33
43
|
tool_call: EVENT_TYPE_TOOL_CALL_URI,
|
|
34
44
|
transaction: EVENT_TYPE_TRANSACTION_URI,
|
|
35
45
|
};
|
|
36
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
46
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
37
47
|
import { homedir } from 'node:os';
|
|
38
48
|
import { join } from 'node:path';
|
|
39
49
|
import { z } from 'zod';
|
|
40
|
-
const ATRIB_RECORD_FILE = process.env.ATRIB_RECORD_FILE
|
|
50
|
+
const ATRIB_RECORD_FILE = process.env.ATRIB_RECORD_FILE;
|
|
51
|
+
const ATRIB_MIRROR_DIR = process.env.ATRIB_MIRROR_DIR ?? join(homedir(), '.atrib', 'records');
|
|
41
52
|
const ATRIB_LOG_ORIGIN = process.env.ATRIB_LOG_ORIGIN ?? 'log.atrib.dev';
|
|
53
|
+
/**
|
|
54
|
+
* Pull the inner AtribRecord out of either on-disk shape (D062 envelope or
|
|
55
|
+
* legacy bare record). Returns null when the line is neither shape or is
|
|
56
|
+
* missing required fields. Same shape contract as the wrapper-side
|
|
57
|
+
* normalizeMirrorLine in @atrib/mcp-wrap.
|
|
58
|
+
*/
|
|
59
|
+
function extractRecord(parsed) {
|
|
60
|
+
if (!parsed || typeof parsed !== 'object')
|
|
61
|
+
return null;
|
|
62
|
+
const obj = parsed;
|
|
63
|
+
// D062 envelope: { record: {...}, proof?, _local?, written_at? }.
|
|
64
|
+
// Legacy bare: the AtribRecord fields sit at the top level.
|
|
65
|
+
const candidate = (typeof obj.record === 'object' && obj.record !== null)
|
|
66
|
+
? obj.record
|
|
67
|
+
: obj;
|
|
68
|
+
if (typeof candidate.spec_version === 'string' &&
|
|
69
|
+
typeof candidate.event_type === 'string' &&
|
|
70
|
+
typeof candidate.context_id === 'string' &&
|
|
71
|
+
typeof candidate.creator_key === 'string' &&
|
|
72
|
+
typeof candidate.chain_root === 'string' &&
|
|
73
|
+
typeof candidate.signature === 'string') {
|
|
74
|
+
return candidate;
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
42
78
|
export function loadRecords(path) {
|
|
43
79
|
if (!existsSync(path))
|
|
44
80
|
return [];
|
|
@@ -49,24 +85,64 @@ export function loadRecords(path) {
|
|
|
49
85
|
if (!trimmed)
|
|
50
86
|
continue;
|
|
51
87
|
try {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (parsed.spec_version &&
|
|
56
|
-
parsed.event_type &&
|
|
57
|
-
parsed.context_id &&
|
|
58
|
-
parsed.creator_key &&
|
|
59
|
-
parsed.chain_root &&
|
|
60
|
-
parsed.signature) {
|
|
61
|
-
out.push(parsed);
|
|
62
|
-
}
|
|
88
|
+
const rec = extractRecord(JSON.parse(trimmed));
|
|
89
|
+
if (rec)
|
|
90
|
+
out.push(rec);
|
|
63
91
|
}
|
|
64
92
|
catch {
|
|
65
|
-
// Malformed
|
|
93
|
+
// Malformed JSON; skip.
|
|
66
94
|
}
|
|
67
95
|
}
|
|
68
96
|
return out;
|
|
69
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Load every `*.jsonl` file in `dir` and merge their records. Files that
|
|
100
|
+
* don't exist or aren't readable are silently skipped (a file rotated out
|
|
101
|
+
* mid-scan shouldn't error the whole call). Returns the union of records;
|
|
102
|
+
* de-duplication and ordering are caller responsibilities.
|
|
103
|
+
*
|
|
104
|
+
* Spec §5.9 establishes `~/.atrib/records/` as the well-known per-agent
|
|
105
|
+
* mirror namespace; every producer running under one identity writes a
|
|
106
|
+
* file there with the convention `<producer>-<agent>.jsonl`. Scanning the
|
|
107
|
+
* directory unifies recall across producers without recall having to know
|
|
108
|
+
* the naming scheme — any producer that follows §5.9 just shows up.
|
|
109
|
+
*/
|
|
110
|
+
export function loadRecordsFromDir(dir) {
|
|
111
|
+
if (!existsSync(dir))
|
|
112
|
+
return { records: [], files: [] };
|
|
113
|
+
let entries = [];
|
|
114
|
+
try {
|
|
115
|
+
entries = readdirSync(dir).filter((name) => name.endsWith('.jsonl'));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return { records: [], files: [] };
|
|
119
|
+
}
|
|
120
|
+
const records = [];
|
|
121
|
+
const files = [];
|
|
122
|
+
for (const name of entries) {
|
|
123
|
+
const full = join(dir, name);
|
|
124
|
+
try {
|
|
125
|
+
const stat = statSync(full);
|
|
126
|
+
if (!stat.isFile())
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
const loaded = loadRecords(full);
|
|
133
|
+
if (loaded.length > 0) {
|
|
134
|
+
records.push(...loaded);
|
|
135
|
+
files.push(full);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Surface empty/unreadable files too so the operator can see them in
|
|
139
|
+
// the response if they care, but only if the file existed (which it
|
|
140
|
+
// does — readdirSync returned it).
|
|
141
|
+
files.push(full);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { records, files };
|
|
145
|
+
}
|
|
70
146
|
async function annotateVerification(records) {
|
|
71
147
|
return Promise.all(records.map(async (r) => {
|
|
72
148
|
let ok = false;
|
|
@@ -93,14 +169,32 @@ function compactify(records) {
|
|
|
93
169
|
return out;
|
|
94
170
|
});
|
|
95
171
|
}
|
|
96
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Discover and load records per the mirror-discovery contract:
|
|
174
|
+
* - If `recordFile` is provided, load just that file.
|
|
175
|
+
* - Else if ATRIB_RECORD_FILE is set, load just that file (back-compat).
|
|
176
|
+
* - Else scan ATRIB_MIRROR_DIR (default ~/.atrib/records).
|
|
177
|
+
*
|
|
178
|
+
* Returns the union of records and the list of files scanned. Callers that
|
|
179
|
+
* dedupe should key on `record.signature` (signatures are unique per record
|
|
180
|
+
* per spec §1.4); the same record present in two mirrors will appear twice
|
|
181
|
+
* here unless the caller dedupes.
|
|
182
|
+
*/
|
|
183
|
+
export function discoverRecords(recordFile) {
|
|
184
|
+
const explicit = recordFile ?? ATRIB_RECORD_FILE;
|
|
185
|
+
if (explicit) {
|
|
186
|
+
return { records: loadRecords(explicit), files: [explicit] };
|
|
187
|
+
}
|
|
188
|
+
return loadRecordsFromDir(ATRIB_MIRROR_DIR);
|
|
189
|
+
}
|
|
190
|
+
export async function recall(args, recordFile) {
|
|
97
191
|
// Defaults: compact=true (small responses) and include_unverified=false
|
|
98
192
|
// (no tampered records). The verbose+include-tampered combo is opt-in.
|
|
99
193
|
// Rationale: a poorly-written agent that doesn't check signature_verified
|
|
100
194
|
// would otherwise treat tampered records as provable. Default to safe.
|
|
101
195
|
const compact = args.compact !== false;
|
|
102
196
|
const includeUnverified = args.include_unverified === true;
|
|
103
|
-
const all =
|
|
197
|
+
const { records: all, files } = discoverRecords(recordFile);
|
|
104
198
|
let filtered = all;
|
|
105
199
|
if (args.context_id)
|
|
106
200
|
filtered = filtered.filter((r) => r.context_id === args.context_id);
|
|
@@ -133,7 +227,8 @@ export async function recall(args, recordFile = ATRIB_RECORD_FILE) {
|
|
|
133
227
|
total: filtered.length,
|
|
134
228
|
returned: verified.length,
|
|
135
229
|
filtered_out_by_verification: filteredOutByVerification,
|
|
136
|
-
|
|
230
|
+
record_files: files,
|
|
231
|
+
record_file: files[0] ?? '',
|
|
137
232
|
log_origin: ATRIB_LOG_ORIGIN,
|
|
138
233
|
pagination_caveat: 'offset is not stable when new records are appended. For consistent paging, capture the' +
|
|
139
234
|
' first-page timestamps and re-page using a context_id or event_type filter instead.',
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,sCAAsC;AAEtC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atrib/recall",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "MCP server for atrib. Lets agents query their own provable past from the local signed-record mirror with per-record signature verification.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
12
12
|
"zod": "^4.3.6",
|
|
13
|
-
"@atrib/mcp": "0.
|
|
13
|
+
"@atrib/mcp": "0.6.1"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@types/node": "^22.0.0",
|