@gramatr/mcp 0.13.74 → 0.13.75
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/dist/bin/brain.d.ts +8 -0
- package/dist/bin/brain.d.ts.map +1 -1
- package/dist/bin/brain.js +195 -8
- package/dist/bin/brain.js.map +1 -1
- package/dist/bin/upload-manifest.d.ts +117 -0
- package/dist/bin/upload-manifest.d.ts.map +1 -0
- package/dist/bin/upload-manifest.js +198 -0
- package/dist/bin/upload-manifest.js.map +1 -0
- package/package.json +1 -1
package/dist/bin/brain.d.ts
CHANGED
|
@@ -81,6 +81,8 @@ export interface ParsedArgs {
|
|
|
81
81
|
metadata: string[];
|
|
82
82
|
tags?: string;
|
|
83
83
|
onDuplicate?: string;
|
|
84
|
+
manifest?: string;
|
|
85
|
+
resume?: string;
|
|
84
86
|
}
|
|
85
87
|
export declare function parseUploadArgs(args: string[]): ParsedArgs;
|
|
86
88
|
export interface ValidatedConfig {
|
|
@@ -111,6 +113,12 @@ export interface UploadFileOptions {
|
|
|
111
113
|
entityId?: string;
|
|
112
114
|
entityName?: string;
|
|
113
115
|
config: ValidatedConfig;
|
|
116
|
+
/**
|
|
117
|
+
* Pre-read file bytes. When provided, `uploadFile` will not re-read the file
|
|
118
|
+
* from disk — the caller (e.g. the resume/manifest loop) has already loaded
|
|
119
|
+
* and hashed it. Saves one filesystem round-trip per file in batch mode.
|
|
120
|
+
*/
|
|
121
|
+
prereadBuffer?: Buffer;
|
|
114
122
|
}
|
|
115
123
|
export interface UploadResult {
|
|
116
124
|
file: string;
|
package/dist/bin/brain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/bin/brain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;
|
|
1
|
+
{"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/bin/brain.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/brain.js
CHANGED
|
@@ -40,6 +40,9 @@
|
|
|
40
40
|
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
41
41
|
import { extname, basename, join, resolve } from 'node:path';
|
|
42
42
|
import { callTool } from '../proxy/local-client.js';
|
|
43
|
+
import { MANIFEST_SCHEMA, decideResume, fileExists, indexManifestByPath, readManifest, sha256Hex, writeManifestAtomic, } from './upload-manifest.js';
|
|
44
|
+
// CLI version stamped into manifests. Synced with @gramatr/mcp package.json.
|
|
45
|
+
const CLI_VERSION = '0.13.75';
|
|
43
46
|
// ── Supported extensions ────────────────────────────────────────────────────
|
|
44
47
|
export const SUPPORTED_EXTENSIONS = new Set(['.txt', '.md', '.csv', '.pdf', '.docx']);
|
|
45
48
|
// ── Text extraction (kept for backwards-compatibility tests) ────────────────
|
|
@@ -124,6 +127,8 @@ const VALUE_FLAGS = new Set([
|
|
|
124
127
|
'--metadata',
|
|
125
128
|
'--tags',
|
|
126
129
|
'--on-duplicate',
|
|
130
|
+
'--manifest',
|
|
131
|
+
'--resume',
|
|
127
132
|
]);
|
|
128
133
|
// Repeatable flags — collect every occurrence into an array.
|
|
129
134
|
const REPEATABLE_FLAGS = new Set(['--metadata']);
|
|
@@ -183,6 +188,12 @@ export function parseUploadArgs(args) {
|
|
|
183
188
|
case '--on-duplicate':
|
|
184
189
|
out.onDuplicate = v;
|
|
185
190
|
break;
|
|
191
|
+
case '--manifest':
|
|
192
|
+
out.manifest = v;
|
|
193
|
+
break;
|
|
194
|
+
case '--resume':
|
|
195
|
+
out.resume = v;
|
|
196
|
+
break;
|
|
186
197
|
}
|
|
187
198
|
i += 2;
|
|
188
199
|
continue;
|
|
@@ -350,13 +361,18 @@ export async function uploadFile(filePath, options) {
|
|
|
350
361
|
return { file: filePath, skipped: true };
|
|
351
362
|
}
|
|
352
363
|
let buffer;
|
|
353
|
-
|
|
354
|
-
buffer =
|
|
364
|
+
if (options.prereadBuffer) {
|
|
365
|
+
buffer = options.prereadBuffer;
|
|
355
366
|
}
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
367
|
+
else {
|
|
368
|
+
try {
|
|
369
|
+
buffer = readFileSync(filePath);
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
373
|
+
process.stderr.write(`[gramatr] ✗ ${filePath}: ${message}\n`);
|
|
374
|
+
return { file: filePath, error: message };
|
|
375
|
+
}
|
|
360
376
|
}
|
|
361
377
|
if (buffer.length === 0) {
|
|
362
378
|
process.stderr.write(`[gramatr] skipping ${filePath} (empty content)\n`);
|
|
@@ -455,6 +471,16 @@ function printBrainHelp() {
|
|
|
455
471
|
reuse — append observation to existing entity
|
|
456
472
|
new-version — create "<name> v2" / v3 / ...
|
|
457
473
|
|
|
474
|
+
Resume / manifest:
|
|
475
|
+
--manifest <path> Write a JSON manifest of upload outcomes to <path>,
|
|
476
|
+
atomically updated after each file. Schema:
|
|
477
|
+
gmtr.upload-manifest.v1 (see docs).
|
|
478
|
+
--resume <path> Read a prior manifest and skip files that completed
|
|
479
|
+
last run (per content hash). Files with status=error
|
|
480
|
+
are retried; files whose content has changed are
|
|
481
|
+
re-uploaded. Files no longer on disk are recorded
|
|
482
|
+
as skipped (file_missing).
|
|
483
|
+
|
|
458
484
|
Other flags:
|
|
459
485
|
--dry-run Preflight only — show what would be uploaded
|
|
460
486
|
--recursive With --dir, walk subdirectories
|
|
@@ -472,6 +498,8 @@ function printBrainHelp() {
|
|
|
472
498
|
brain upload --dir ./docs --scope team --team-id <team-uuid>
|
|
473
499
|
brain upload --dir ./research --recursive --metadata source=arxiv --metadata year=2026
|
|
474
500
|
brain upload report.pdf --public
|
|
501
|
+
brain upload --dir ./docs --manifest /tmp/upload.json
|
|
502
|
+
brain upload --dir ./docs --manifest /tmp/upload.json --resume /tmp/upload.json
|
|
475
503
|
|
|
476
504
|
NOTE: bulk_upload requires ClamAV to be deployed on the server. Until then,
|
|
477
505
|
every upload returns av_unconfigured (fail-closed by design).
|
|
@@ -551,17 +579,176 @@ export async function runBrain(args) {
|
|
|
551
579
|
entityName: parsed.entityName,
|
|
552
580
|
config,
|
|
553
581
|
};
|
|
582
|
+
// ── Manifest + resume setup ────────────────────────────────────────────────
|
|
583
|
+
// The manifest is the durable record of this run's outcomes. `--resume`
|
|
584
|
+
// loads a prior manifest so unchanged files can be skipped without a
|
|
585
|
+
// network call (the O(changed) win); `--manifest` writes after each file
|
|
586
|
+
// so a crash mid-batch leaves a recoverable partial.
|
|
587
|
+
let priorIndex;
|
|
588
|
+
if (parsed.resume) {
|
|
589
|
+
try {
|
|
590
|
+
const prior = readManifest(parsed.resume);
|
|
591
|
+
priorIndex = indexManifestByPath(prior);
|
|
592
|
+
process.stderr.write(`[gramatr] resume — loaded ${prior.files.length} prior entr${prior.files.length === 1 ? 'y' : 'ies'} from ${parsed.resume}\n`);
|
|
593
|
+
}
|
|
594
|
+
catch (err) {
|
|
595
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
596
|
+
process.stderr.write(`[gramatr] ✗ Cannot read --resume manifest ${parsed.resume}: ${msg}\n`);
|
|
597
|
+
return 1;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
// Seed the in-memory manifest with prior entries — we re-emit them so the
|
|
601
|
+
// output manifest is a complete record of the union of runs.
|
|
602
|
+
const manifest = {
|
|
603
|
+
schema: MANIFEST_SCHEMA,
|
|
604
|
+
version: CLI_VERSION,
|
|
605
|
+
started_at: new Date().toISOString(),
|
|
606
|
+
finished_at: null,
|
|
607
|
+
scope: {
|
|
608
|
+
scope: config.scope,
|
|
609
|
+
...(config.teamId ? { team_id: config.teamId } : {}),
|
|
610
|
+
...(config.orgId ? { org_id: config.orgId } : {}),
|
|
611
|
+
...(config.projectId ? { project_id: config.projectId } : {}),
|
|
612
|
+
},
|
|
613
|
+
files: [],
|
|
614
|
+
};
|
|
615
|
+
// Maintain a path → index map so we can upsert entries in O(1).
|
|
616
|
+
const fileIndex = new Map();
|
|
617
|
+
if (priorIndex) {
|
|
618
|
+
for (const [p, entry] of priorIndex) {
|
|
619
|
+
fileIndex.set(p, manifest.files.length);
|
|
620
|
+
manifest.files.push(entry);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
const upsertEntry = (entry) => {
|
|
624
|
+
const idx = fileIndex.get(entry.path);
|
|
625
|
+
if (idx === undefined) {
|
|
626
|
+
fileIndex.set(entry.path, manifest.files.length);
|
|
627
|
+
manifest.files.push(entry);
|
|
628
|
+
}
|
|
629
|
+
else {
|
|
630
|
+
manifest.files[idx] = entry;
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
const flushManifest = () => {
|
|
634
|
+
if (!parsed.manifest)
|
|
635
|
+
return;
|
|
636
|
+
try {
|
|
637
|
+
writeManifestAtomic(parsed.manifest, manifest);
|
|
638
|
+
}
|
|
639
|
+
catch (err) {
|
|
640
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
641
|
+
process.stderr.write(`[gramatr] ⚠ failed to write manifest ${parsed.manifest}: ${msg}\n`);
|
|
642
|
+
}
|
|
643
|
+
};
|
|
554
644
|
let hasError = false;
|
|
555
645
|
let hasValidationReject = false;
|
|
556
646
|
for (const filePath of filePaths) {
|
|
557
|
-
|
|
647
|
+
// Hash the file (or detect missing) before deciding to upload — this is
|
|
648
|
+
// the O(changed) check that makes resume cheap.
|
|
649
|
+
let buffer = null;
|
|
650
|
+
let currentSha = null;
|
|
651
|
+
let size = 0;
|
|
652
|
+
let readError = null;
|
|
653
|
+
if (fileExists(filePath)) {
|
|
654
|
+
try {
|
|
655
|
+
buffer = readFileSync(filePath);
|
|
656
|
+
currentSha = sha256Hex(buffer);
|
|
657
|
+
size = buffer.length;
|
|
658
|
+
}
|
|
659
|
+
catch (err) {
|
|
660
|
+
// Capture so we can record an error entry without invoking the server.
|
|
661
|
+
readError = err instanceof Error ? err.message : String(err);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
if (readError !== null) {
|
|
665
|
+
process.stderr.write(`[gramatr] ✗ ${filePath}: ${readError}\n`);
|
|
666
|
+
upsertEntry({
|
|
667
|
+
path: filePath,
|
|
668
|
+
sha256: '',
|
|
669
|
+
size: 0,
|
|
670
|
+
status: 'error',
|
|
671
|
+
entity_id: null,
|
|
672
|
+
scan_result: null,
|
|
673
|
+
reason: readError,
|
|
674
|
+
completed_at: new Date().toISOString(),
|
|
675
|
+
});
|
|
676
|
+
flushManifest();
|
|
677
|
+
hasError = true;
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
680
|
+
const decision = decideResume(filePath, currentSha, priorIndex?.get(filePath));
|
|
681
|
+
if (decision.kind === 'skip-missing') {
|
|
682
|
+
process.stderr.write(`[gramatr] ↷ ${basename(filePath)}: ${decision.note}\n`);
|
|
683
|
+
upsertEntry({
|
|
684
|
+
path: filePath,
|
|
685
|
+
sha256: '',
|
|
686
|
+
size: 0,
|
|
687
|
+
status: 'skipped',
|
|
688
|
+
entity_id: null,
|
|
689
|
+
scan_result: null,
|
|
690
|
+
reason: 'file_missing',
|
|
691
|
+
completed_at: new Date().toISOString(),
|
|
692
|
+
});
|
|
693
|
+
flushManifest();
|
|
694
|
+
continue;
|
|
695
|
+
}
|
|
696
|
+
if (decision.kind === 'skip-previous') {
|
|
697
|
+
process.stderr.write(`[gramatr] ↷ ${basename(filePath)}: ${decision.note}\n`);
|
|
698
|
+
// Refresh completed_at so the manifest reflects this run's pass.
|
|
699
|
+
upsertEntry({ ...decision.entry, completed_at: new Date().toISOString() });
|
|
700
|
+
flushManifest();
|
|
701
|
+
// Previously-rejected files do NOT bump this run's exit code — we are
|
|
702
|
+
// not re-attempting them, so they are not "this run's" failures.
|
|
703
|
+
continue;
|
|
704
|
+
}
|
|
705
|
+
// ── Actually upload ────────────────────────────────────────────────────
|
|
706
|
+
const result = await uploadFile(filePath, buffer ? { ...options, prereadBuffer: buffer } : options);
|
|
707
|
+
let status;
|
|
708
|
+
let entityId = result.entityId ?? null;
|
|
709
|
+
let scanResult = null;
|
|
710
|
+
let reason = null;
|
|
558
711
|
if (result.validationReason) {
|
|
712
|
+
status = 'rejected';
|
|
713
|
+
reason = result.validationReason;
|
|
559
714
|
hasValidationReject = true;
|
|
560
715
|
}
|
|
561
716
|
else if (result.error) {
|
|
717
|
+
status = 'error';
|
|
718
|
+
reason = result.error;
|
|
562
719
|
hasError = true;
|
|
563
720
|
}
|
|
564
|
-
|
|
721
|
+
else if (result.skipped) {
|
|
722
|
+
// Empty file or unsupported extension — recorded as skipped without a
|
|
723
|
+
// server entity_id.
|
|
724
|
+
status = 'skipped';
|
|
725
|
+
reason = 'unsupported_or_empty';
|
|
726
|
+
}
|
|
727
|
+
else if (result.wasDuplicate) {
|
|
728
|
+
// on_duplicate=reuse path — server attached observation to existing entity.
|
|
729
|
+
// For on_duplicate=skip the server returns was_duplicate=true with no new
|
|
730
|
+
// observation, which is captured here as 'skipped'.
|
|
731
|
+
status = config.onDuplicate === 'skip' ? 'skipped' : 'reused';
|
|
732
|
+
scanResult = 'clean';
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
status = 'uploaded';
|
|
736
|
+
scanResult = 'clean';
|
|
737
|
+
}
|
|
738
|
+
upsertEntry({
|
|
739
|
+
path: filePath,
|
|
740
|
+
sha256: currentSha || '',
|
|
741
|
+
size,
|
|
742
|
+
status,
|
|
743
|
+
entity_id: entityId,
|
|
744
|
+
scan_result: scanResult,
|
|
745
|
+
reason,
|
|
746
|
+
completed_at: new Date().toISOString(),
|
|
747
|
+
});
|
|
748
|
+
flushManifest();
|
|
749
|
+
}
|
|
750
|
+
manifest.finished_at = new Date().toISOString();
|
|
751
|
+
flushManifest();
|
|
565
752
|
// Validator rejection takes precedence — distinct exit code so scripts can
|
|
566
753
|
// differentiate "server said no" from "transport blew up".
|
|
567
754
|
if (hasValidationReject)
|
package/dist/bin/brain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/bin/brain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/bin/brain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* upload-manifest — JSON manifest schema + atomic IO for `gramatr brain upload`.
|
|
3
|
+
*
|
|
4
|
+
* Epic #1904 PR 5. Records the outcome of every file in a bulk upload run so
|
|
5
|
+
* that:
|
|
6
|
+
* - a crashed batch can be resumed without re-uploading completed files
|
|
7
|
+
* - unchanged files can be skipped without a network round-trip
|
|
8
|
+
* - the operator has a full audit trail (entity_id, scan_result, reason)
|
|
9
|
+
*
|
|
10
|
+
* The manifest is single-writer (the CLI process). No locking. Atomic writes
|
|
11
|
+
* are achieved by writing `<path>.tmp` then renaming over the target — POSIX
|
|
12
|
+
* `rename(2)` is atomic on the same filesystem.
|
|
13
|
+
*
|
|
14
|
+
* `finished_at` is null until the run completes. A crashed run leaves it null,
|
|
15
|
+
* which is the signal `--resume` uses to confirm there is recoverable state.
|
|
16
|
+
*/
|
|
17
|
+
export declare const MANIFEST_SCHEMA = "gmtr.upload-manifest.v1";
|
|
18
|
+
export type ManifestEntryStatus = 'uploaded' | 'reused' | 'skipped' | 'rejected' | 'error';
|
|
19
|
+
export interface UploadManifestEntry {
|
|
20
|
+
/** Absolute path on the uploader's filesystem at the time of the run. */
|
|
21
|
+
path: string;
|
|
22
|
+
/** Hex sha256 of the file's bytes at the time of the run. */
|
|
23
|
+
sha256: string;
|
|
24
|
+
/** File size in bytes. */
|
|
25
|
+
size: number;
|
|
26
|
+
/** Outcome — see ManifestEntryStatus. */
|
|
27
|
+
status: ManifestEntryStatus;
|
|
28
|
+
/** Server entity_id for uploaded/reused/skipped; null otherwise. */
|
|
29
|
+
entity_id: string | null;
|
|
30
|
+
/** Server scan_result (e.g. "clean", "infected", "unconfigured"); null when unknown. */
|
|
31
|
+
scan_result: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* For status=rejected: the UploadValidationError reason.
|
|
34
|
+
* For status=error: the error message.
|
|
35
|
+
* For status=skipped via missing-file: "file_missing".
|
|
36
|
+
* Otherwise null.
|
|
37
|
+
*/
|
|
38
|
+
reason: string | null;
|
|
39
|
+
/** ISO-8601 timestamp of when this file's processing completed. */
|
|
40
|
+
completed_at: string;
|
|
41
|
+
}
|
|
42
|
+
export interface UploadManifestScope {
|
|
43
|
+
scope: 'user' | 'team' | 'org' | 'public';
|
|
44
|
+
team_id?: string;
|
|
45
|
+
org_id?: string;
|
|
46
|
+
project_id?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface UploadManifest {
|
|
49
|
+
schema: typeof MANIFEST_SCHEMA;
|
|
50
|
+
version: string;
|
|
51
|
+
started_at: string;
|
|
52
|
+
finished_at: string | null;
|
|
53
|
+
scope: UploadManifestScope;
|
|
54
|
+
files: UploadManifestEntry[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Domain-specific error thrown by the manifest parser. Distinct from generic
|
|
58
|
+
* `Error` so callers (and rubric dimension B1) can identify it precisely.
|
|
59
|
+
*/
|
|
60
|
+
export declare class ManifestSchemaError extends Error {
|
|
61
|
+
constructor(message: string);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Compute the hex sha256 digest of a buffer. Stable across runs and platforms.
|
|
65
|
+
*/
|
|
66
|
+
export declare function sha256Hex(buffer: Buffer): string;
|
|
67
|
+
/**
|
|
68
|
+
* Validate that an arbitrary value matches the gmtr.upload-manifest.v1 schema.
|
|
69
|
+
* Returns the manifest typed if valid, throws Error with a specific message
|
|
70
|
+
* otherwise. Forgiving on unknown fields (forward-compat) but strict on the
|
|
71
|
+
* required ones.
|
|
72
|
+
*/
|
|
73
|
+
export declare function parseManifest(value: unknown): UploadManifest;
|
|
74
|
+
/**
|
|
75
|
+
* Write the manifest to `path` atomically:
|
|
76
|
+
* 1. Serialize JSON
|
|
77
|
+
* 2. Write to `<path>.tmp`
|
|
78
|
+
* 3. fs.renameSync into place (POSIX-atomic on same filesystem)
|
|
79
|
+
*
|
|
80
|
+
* A reader observing `path` will always see either the previous full contents
|
|
81
|
+
* or the new full contents — never a partially-written file.
|
|
82
|
+
*/
|
|
83
|
+
export declare function writeManifestAtomic(path: string, manifest: UploadManifest): void;
|
|
84
|
+
/**
|
|
85
|
+
* Read and validate a manifest from disk. Throws if the file does not exist
|
|
86
|
+
* or fails schema validation.
|
|
87
|
+
*/
|
|
88
|
+
export declare function readManifest(path: string): UploadManifest;
|
|
89
|
+
/**
|
|
90
|
+
* Build a Map<absolutePath, entry> from a manifest's files array. Last entry
|
|
91
|
+
* wins (the manifest is append/upsert per file, so duplicates should not occur,
|
|
92
|
+
* but be defensive).
|
|
93
|
+
*/
|
|
94
|
+
export declare function indexManifestByPath(manifest: UploadManifest): Map<string, UploadManifestEntry>;
|
|
95
|
+
export type ResumeDecision = {
|
|
96
|
+
kind: 'upload';
|
|
97
|
+
} | {
|
|
98
|
+
kind: 'skip-previous';
|
|
99
|
+
entry: UploadManifestEntry;
|
|
100
|
+
note: string;
|
|
101
|
+
} | {
|
|
102
|
+
kind: 'skip-missing';
|
|
103
|
+
note: string;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Decide what to do with a file given the resume manifest's record (if any).
|
|
107
|
+
*
|
|
108
|
+
* - Not in manifest → upload
|
|
109
|
+
* - Path no longer exists on disk → skip-missing
|
|
110
|
+
* - In manifest, status=error → upload (retry)
|
|
111
|
+
* - In manifest, hash differs from current bytes → upload (re-upload)
|
|
112
|
+
* - In manifest, hash matches, status terminal → skip-previous
|
|
113
|
+
*/
|
|
114
|
+
export declare function decideResume(filePath: string, currentSha256: string | null, prior: UploadManifestEntry | undefined): ResumeDecision;
|
|
115
|
+
/** True iff a file currently exists at the given path. */
|
|
116
|
+
export declare function fileExists(path: string): boolean;
|
|
117
|
+
//# sourceMappingURL=upload-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-manifest.d.ts","sourceRoot":"","sources":["../../src/bin/upload-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,QAAQ,GACR,SAAS,GACT,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,oEAAoE;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wFAAwF;IACxF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAID;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAcD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAsD5D;AAID;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAIhF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAUzD;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAI9F;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,KAAK,EAAE,mBAAmB,GAAG,SAAS,GACrC,cAAc,CA8BhB;AAID,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* upload-manifest — JSON manifest schema + atomic IO for `gramatr brain upload`.
|
|
3
|
+
*
|
|
4
|
+
* Epic #1904 PR 5. Records the outcome of every file in a bulk upload run so
|
|
5
|
+
* that:
|
|
6
|
+
* - a crashed batch can be resumed without re-uploading completed files
|
|
7
|
+
* - unchanged files can be skipped without a network round-trip
|
|
8
|
+
* - the operator has a full audit trail (entity_id, scan_result, reason)
|
|
9
|
+
*
|
|
10
|
+
* The manifest is single-writer (the CLI process). No locking. Atomic writes
|
|
11
|
+
* are achieved by writing `<path>.tmp` then renaming over the target — POSIX
|
|
12
|
+
* `rename(2)` is atomic on the same filesystem.
|
|
13
|
+
*
|
|
14
|
+
* `finished_at` is null until the run completes. A crashed run leaves it null,
|
|
15
|
+
* which is the signal `--resume` uses to confirm there is recoverable state.
|
|
16
|
+
*/
|
|
17
|
+
import { createHash } from 'node:crypto';
|
|
18
|
+
import { existsSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
19
|
+
export const MANIFEST_SCHEMA = 'gmtr.upload-manifest.v1';
|
|
20
|
+
// ── Errors ──────────────────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Domain-specific error thrown by the manifest parser. Distinct from generic
|
|
23
|
+
* `Error` so callers (and rubric dimension B1) can identify it precisely.
|
|
24
|
+
*/
|
|
25
|
+
export class ManifestSchemaError extends Error {
|
|
26
|
+
constructor(message) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = 'ManifestSchemaError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// ── sha256 ──────────────────────────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Compute the hex sha256 digest of a buffer. Stable across runs and platforms.
|
|
34
|
+
*/
|
|
35
|
+
export function sha256Hex(buffer) {
|
|
36
|
+
return createHash('sha256').update(buffer).digest('hex');
|
|
37
|
+
}
|
|
38
|
+
// ── Schema validation ───────────────────────────────────────────────────────
|
|
39
|
+
const VALID_STATUSES = new Set([
|
|
40
|
+
'uploaded',
|
|
41
|
+
'reused',
|
|
42
|
+
'skipped',
|
|
43
|
+
'rejected',
|
|
44
|
+
'error',
|
|
45
|
+
]);
|
|
46
|
+
const VALID_SCOPES = new Set(['user', 'team', 'org', 'public']);
|
|
47
|
+
/**
|
|
48
|
+
* Validate that an arbitrary value matches the gmtr.upload-manifest.v1 schema.
|
|
49
|
+
* Returns the manifest typed if valid, throws Error with a specific message
|
|
50
|
+
* otherwise. Forgiving on unknown fields (forward-compat) but strict on the
|
|
51
|
+
* required ones.
|
|
52
|
+
*/
|
|
53
|
+
export function parseManifest(value) {
|
|
54
|
+
if (typeof value !== 'object' || value === null) {
|
|
55
|
+
throw new ManifestSchemaError('manifest must be a JSON object');
|
|
56
|
+
}
|
|
57
|
+
const obj = value;
|
|
58
|
+
if (obj.schema !== MANIFEST_SCHEMA) {
|
|
59
|
+
throw new ManifestSchemaError(`manifest.schema must be "${MANIFEST_SCHEMA}", got ${JSON.stringify(obj.schema)}`);
|
|
60
|
+
}
|
|
61
|
+
if (typeof obj.version !== 'string') {
|
|
62
|
+
throw new ManifestSchemaError('manifest.version must be a string');
|
|
63
|
+
}
|
|
64
|
+
if (typeof obj.started_at !== 'string') {
|
|
65
|
+
throw new ManifestSchemaError('manifest.started_at must be a string');
|
|
66
|
+
}
|
|
67
|
+
if (obj.finished_at !== null && typeof obj.finished_at !== 'string') {
|
|
68
|
+
throw new ManifestSchemaError('manifest.finished_at must be a string or null');
|
|
69
|
+
}
|
|
70
|
+
if (typeof obj.scope !== 'object' || obj.scope === null) {
|
|
71
|
+
throw new ManifestSchemaError('manifest.scope must be an object');
|
|
72
|
+
}
|
|
73
|
+
const scope = obj.scope;
|
|
74
|
+
if (typeof scope.scope !== 'string' || !VALID_SCOPES.has(scope.scope)) {
|
|
75
|
+
throw new ManifestSchemaError(`manifest.scope.scope must be one of user|team|org|public`);
|
|
76
|
+
}
|
|
77
|
+
if (!Array.isArray(obj.files)) {
|
|
78
|
+
throw new ManifestSchemaError('manifest.files must be an array');
|
|
79
|
+
}
|
|
80
|
+
for (let i = 0; i < obj.files.length; i++) {
|
|
81
|
+
const e = obj.files[i];
|
|
82
|
+
if (typeof e !== 'object' || e === null) {
|
|
83
|
+
throw new ManifestSchemaError(`manifest.files[${i}] must be an object`);
|
|
84
|
+
}
|
|
85
|
+
for (const k of ['path', 'sha256', 'completed_at']) {
|
|
86
|
+
if (typeof e[k] !== 'string') {
|
|
87
|
+
throw new ManifestSchemaError(`manifest.files[${i}].${k} must be a string`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (typeof e.size !== 'number') {
|
|
91
|
+
throw new ManifestSchemaError(`manifest.files[${i}].size must be a number`);
|
|
92
|
+
}
|
|
93
|
+
if (typeof e.status !== 'string' || !VALID_STATUSES.has(e.status)) {
|
|
94
|
+
throw new ManifestSchemaError(`manifest.files[${i}].status must be one of ${[...VALID_STATUSES].join('|')}`);
|
|
95
|
+
}
|
|
96
|
+
if (e.entity_id !== null && typeof e.entity_id !== 'string') {
|
|
97
|
+
throw new ManifestSchemaError(`manifest.files[${i}].entity_id must be a string or null`);
|
|
98
|
+
}
|
|
99
|
+
if (e.scan_result !== null && typeof e.scan_result !== 'string') {
|
|
100
|
+
throw new ManifestSchemaError(`manifest.files[${i}].scan_result must be a string or null`);
|
|
101
|
+
}
|
|
102
|
+
if (e.reason !== null && typeof e.reason !== 'string') {
|
|
103
|
+
throw new ManifestSchemaError(`manifest.files[${i}].reason must be a string or null`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
// ── Atomic IO ───────────────────────────────────────────────────────────────
|
|
109
|
+
/**
|
|
110
|
+
* Write the manifest to `path` atomically:
|
|
111
|
+
* 1. Serialize JSON
|
|
112
|
+
* 2. Write to `<path>.tmp`
|
|
113
|
+
* 3. fs.renameSync into place (POSIX-atomic on same filesystem)
|
|
114
|
+
*
|
|
115
|
+
* A reader observing `path` will always see either the previous full contents
|
|
116
|
+
* or the new full contents — never a partially-written file.
|
|
117
|
+
*/
|
|
118
|
+
export function writeManifestAtomic(path, manifest) {
|
|
119
|
+
const tmp = `${path}.tmp`;
|
|
120
|
+
writeFileSync(tmp, JSON.stringify(manifest, null, 2), 'utf8');
|
|
121
|
+
renameSync(tmp, path);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Read and validate a manifest from disk. Throws if the file does not exist
|
|
125
|
+
* or fails schema validation.
|
|
126
|
+
*/
|
|
127
|
+
export function readManifest(path) {
|
|
128
|
+
const raw = readFileSync(path, 'utf8');
|
|
129
|
+
let parsed;
|
|
130
|
+
try {
|
|
131
|
+
parsed = JSON.parse(raw);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
135
|
+
throw new ManifestSchemaError(`manifest at ${path} is not valid JSON: ${msg}`);
|
|
136
|
+
}
|
|
137
|
+
return parseManifest(parsed);
|
|
138
|
+
}
|
|
139
|
+
// ── Resume index ────────────────────────────────────────────────────────────
|
|
140
|
+
/**
|
|
141
|
+
* Build a Map<absolutePath, entry> from a manifest's files array. Last entry
|
|
142
|
+
* wins (the manifest is append/upsert per file, so duplicates should not occur,
|
|
143
|
+
* but be defensive).
|
|
144
|
+
*/
|
|
145
|
+
export function indexManifestByPath(manifest) {
|
|
146
|
+
const map = new Map();
|
|
147
|
+
for (const e of manifest.files)
|
|
148
|
+
map.set(e.path, e);
|
|
149
|
+
return map;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Decide what to do with a file given the resume manifest's record (if any).
|
|
153
|
+
*
|
|
154
|
+
* - Not in manifest → upload
|
|
155
|
+
* - Path no longer exists on disk → skip-missing
|
|
156
|
+
* - In manifest, status=error → upload (retry)
|
|
157
|
+
* - In manifest, hash differs from current bytes → upload (re-upload)
|
|
158
|
+
* - In manifest, hash matches, status terminal → skip-previous
|
|
159
|
+
*/
|
|
160
|
+
export function decideResume(filePath, currentSha256, prior) {
|
|
161
|
+
if (currentSha256 === null) {
|
|
162
|
+
return {
|
|
163
|
+
kind: 'skip-missing',
|
|
164
|
+
note: 'file removed since last run',
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (!prior)
|
|
168
|
+
return { kind: 'upload' };
|
|
169
|
+
if (prior.status === 'error')
|
|
170
|
+
return { kind: 'upload' };
|
|
171
|
+
if (prior.sha256 !== currentSha256)
|
|
172
|
+
return { kind: 'upload' };
|
|
173
|
+
// Terminal statuses with matching hash — safe to skip.
|
|
174
|
+
let note;
|
|
175
|
+
switch (prior.status) {
|
|
176
|
+
case 'uploaded':
|
|
177
|
+
note = `previously uploaded as entity ${prior.entity_id ?? 'unknown'}`;
|
|
178
|
+
break;
|
|
179
|
+
case 'reused':
|
|
180
|
+
note = `previously reused entity ${prior.entity_id ?? 'unknown'}`;
|
|
181
|
+
break;
|
|
182
|
+
case 'skipped':
|
|
183
|
+
note = `previously skipped (entity ${prior.entity_id ?? 'unknown'})`;
|
|
184
|
+
break;
|
|
185
|
+
case 'rejected':
|
|
186
|
+
note = `previously rejected: ${prior.reason ?? 'unknown'}`;
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
note = `previously ${prior.status}`;
|
|
190
|
+
}
|
|
191
|
+
return { kind: 'skip-previous', entry: prior, note };
|
|
192
|
+
}
|
|
193
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
194
|
+
/** True iff a file currently exists at the given path. */
|
|
195
|
+
export function fileExists(path) {
|
|
196
|
+
return existsSync(path);
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=upload-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-manifest.js","sourceRoot":"","sources":["../../src/bin/upload-manifest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gramatr/mcp",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.75",
|
|
4
4
|
"description": "grāmatr — Intelligence middleware for AI agents. Pre-classifies every request, injects relevant memory and behavioral context, enforces data quality, and maintains session continuity across Claude, ChatGPT, Codex, Cursor, Gemini, and any MCP-compatible client.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": {
|