@gramatr/mcp 0.13.72 → 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.
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/bin/brain.ts"],"names":[],"mappings":"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"}
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
- try {
354
- buffer = readFileSync(filePath);
364
+ if (options.prereadBuffer) {
365
+ buffer = options.prereadBuffer;
355
366
  }
356
- catch (err) {
357
- const message = err instanceof Error ? err.message : String(err);
358
- process.stderr.write(`[gramatr] ${filePath}: ${message}\n`);
359
- return { file: filePath, error: message };
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
- const result = await uploadFile(filePath, options);
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)
@@ -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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAiDzD,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,+EAA+E;AAE/E,MAAM,cAAc,GAAqC,IAAI,GAAG,CAAC;IAC/D,UAAU;IACV,QAAQ;IACR,SAAS;IACT,UAAU;IACV,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACnC,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,eAAe,UAAU,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,mBAAmB,CAAC,mCAAmC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,IAAI,mBAAmB,CAAC,+CAA+C,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,mBAAmB,CAAC,kCAAkC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,mBAAmB,CAAC,0DAA0D,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,mBAAmB,CAAC,iCAAiC,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAA4B,CAAC;QAClD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAU,EAAE,CAAC;YAC5D,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAA6B,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,KAAuB,CAAC;AACjC,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,QAAwB;IACxE,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,mBAAmB,CAAC,eAAe,IAAI,uBAAuB,GAAG,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAwB;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,EAA+B,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,aAA4B,EAC5B,KAAsC;IAEtC,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,6BAA6B;SACpC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAE9D,uDAAuD;IACvD,IAAI,IAAY,CAAC;IACjB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,IAAI,GAAG,iCAAiC,KAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YACvE,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,GAAG,4BAA4B,KAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YAClE,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,GAAG,8BAA8B,KAAK,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC;YACrE,MAAM;QACR,KAAK,UAAU;YACb,IAAI,GAAG,wBAAwB,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC3D,MAAM;QACR;YACE,IAAI,GAAG,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC;AAED,+EAA+E;AAE/E,0DAA0D;AAC1D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -3,11 +3,51 @@
3
3
  *
4
4
  * Enforces behavioral gates on dangerous git operations:
5
5
  * 1. git push to main/master — denied (use a PR)
6
- * 2. git tag — denied unless binaries are built for current version
7
- * 3. git push --force / git reset --hard — denied (requires explicit user approval)
6
+ * 2. git tag — denied unless binaries are built for current version.
7
+ * Supports both single-package npm libs and Turborepo / pnpm-workspace
8
+ * monorepos. Each workspace package that declares a `dist/`-targeted
9
+ * entry (`main`, `module`, `exports`, `bin`, `types` referencing
10
+ * `dist/...`) is verified independently. App packages that build to
11
+ * `.next/`, `out/`, etc. declare no `dist/` entry and are skipped.
12
+ * Stale builds — any `src/**\/*.ts` newer than the most recent file in
13
+ * `dist/` — are also rejected so a `git pull && git tag` without a
14
+ * rebuild is caught.
15
+ * 3. git push --force / git reset --hard — denied (requires explicit
16
+ * user approval)
8
17
  *
9
18
  * All other Bash commands are allowed unconditionally.
19
+ *
20
+ * No external deps: pure Node built-ins (fs, path).
21
+ */
22
+ export interface BuildCheckResult {
23
+ ok: boolean;
24
+ reason?: string;
25
+ }
26
+ /**
27
+ * True iff workDir is a monorepo (pnpm-workspace.yaml present, or
28
+ * package.json declares a non-empty `workspaces` array).
29
+ */
30
+ export declare function isMonorepo(workDir: string): boolean;
31
+ /**
32
+ * Returns absolute paths to each workspace package directory.
33
+ * Source priority: pnpm-workspace.yaml, then package.json `workspaces`.
34
+ */
35
+ export declare function listWorkspacePackages(workDir: string): string[];
36
+ /**
37
+ * True iff the package.json declares any `dist/`-targeted entry.
38
+ */
39
+ export declare function packageDeclaresDistEntry(pkgJson: Record<string, unknown>): boolean;
40
+ /**
41
+ * Verify a single package: dist/ exists, has .js files, and no src/**\/*.ts
42
+ * is newer than the newest dist/ file. Packages that don't declare a
43
+ * dist/ entry are skipped (ok:true).
44
+ */
45
+ export declare function verifyPackageBuilt(pkgPath: string): BuildCheckResult;
46
+ /**
47
+ * Top-level entry — verify build artifacts for the working tree before a
48
+ * tag is allowed. Single-package and monorepo aware.
10
49
  */
50
+ export declare function verifyBuildBeforeTag(workDir: string, version: string): BuildCheckResult;
11
51
  /**
12
52
  * Check whether a Bash command triggers any git behavioral gate.
13
53
  * Exported for direct unit testing.
@@ -1 +1 @@
1
- {"version":3,"file":"git-gate.d.ts","sourceRoot":"","sources":["../../src/hooks/git-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0DH;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAmErC;AAID,wBAAsB,cAAc,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB1E"}
1
+ {"version":3,"file":"git-gate.d.ts","sourceRoot":"","sources":["../../src/hooks/git-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAqBH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyCD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAmBnD;AA4FD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAyC/D;AAkBD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAQlF;AA+CD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA6CpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAqBvF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAoErC;AAID,wBAAsB,cAAc,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB1E"}
@@ -3,12 +3,23 @@
3
3
  *
4
4
  * Enforces behavioral gates on dangerous git operations:
5
5
  * 1. git push to main/master — denied (use a PR)
6
- * 2. git tag — denied unless binaries are built for current version
7
- * 3. git push --force / git reset --hard — denied (requires explicit user approval)
6
+ * 2. git tag — denied unless binaries are built for current version.
7
+ * Supports both single-package npm libs and Turborepo / pnpm-workspace
8
+ * monorepos. Each workspace package that declares a `dist/`-targeted
9
+ * entry (`main`, `module`, `exports`, `bin`, `types` referencing
10
+ * `dist/...`) is verified independently. App packages that build to
11
+ * `.next/`, `out/`, etc. declare no `dist/` entry and are skipped.
12
+ * Stale builds — any `src/**\/*.ts` newer than the most recent file in
13
+ * `dist/` — are also rejected so a `git pull && git tag` without a
14
+ * rebuild is caught.
15
+ * 3. git push --force / git reset --hard — denied (requires explicit
16
+ * user approval)
8
17
  *
9
18
  * All other Bash commands are allowed unconditionally.
19
+ *
20
+ * No external deps: pure Node built-ins (fs, path).
10
21
  */
11
- import { existsSync, readFileSync } from "node:fs";
22
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
12
23
  import { join } from "node:path";
13
24
  import { HOOK_STDIN_DEFAULT_TIMEOUT_MS } from "./generated/hook-timeouts.js";
14
25
  // ── Stdin ──
@@ -44,6 +55,313 @@ function buildPreToolUseOutput(allow, reason) {
44
55
  },
45
56
  };
46
57
  }
58
+ // ── Workspace / build verification helpers (exported for tests) ──
59
+ /**
60
+ * True iff workDir is a monorepo (pnpm-workspace.yaml present, or
61
+ * package.json declares a non-empty `workspaces` array).
62
+ */
63
+ export function isMonorepo(workDir) {
64
+ if (existsSync(join(workDir, "pnpm-workspace.yaml")))
65
+ return true;
66
+ try {
67
+ const pkg = JSON.parse(readFileSync(join(workDir, "package.json"), "utf8"));
68
+ if (Array.isArray(pkg.workspaces) && pkg.workspaces.length > 0)
69
+ return true;
70
+ if (pkg.workspaces &&
71
+ typeof pkg.workspaces === "object" &&
72
+ Array.isArray(pkg.workspaces.packages) &&
73
+ (pkg.workspaces.packages.length ?? 0) > 0) {
74
+ return true;
75
+ }
76
+ }
77
+ catch {
78
+ // ignore
79
+ }
80
+ return false;
81
+ }
82
+ /**
83
+ * Tiny YAML extractor: returns the strings from `packages:` array entries.
84
+ * Handles the simple shape used by pnpm-workspace.yaml. Returns null if the
85
+ * file uses something more complex (so callers can fall back).
86
+ */
87
+ function readPnpmWorkspacePatterns(workDir) {
88
+ const yamlPath = join(workDir, "pnpm-workspace.yaml");
89
+ if (!existsSync(yamlPath))
90
+ return null;
91
+ let body;
92
+ try {
93
+ body = readFileSync(yamlPath, "utf8");
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ const lines = body.split(/\r?\n/);
99
+ const patterns = [];
100
+ let inPackages = false;
101
+ for (const raw of lines) {
102
+ const line = raw.replace(/#.*$/, "").trimEnd();
103
+ if (!line.trim())
104
+ continue;
105
+ if (/^packages\s*:/.test(line)) {
106
+ inPackages = true;
107
+ continue;
108
+ }
109
+ if (inPackages) {
110
+ // Top-level key (no leading whitespace, ends with ':') ends the array.
111
+ if (/^[A-Za-z0-9_-]+\s*:/.test(line)) {
112
+ inPackages = false;
113
+ continue;
114
+ }
115
+ const m = line.match(/^\s*-\s*(?:"([^"]+)"|'([^']+)'|(\S+))\s*$/);
116
+ if (m) {
117
+ patterns.push(m[1] ?? m[2] ?? m[3] ?? "");
118
+ }
119
+ else {
120
+ // Unknown shape inside packages: bail out.
121
+ return null;
122
+ }
123
+ }
124
+ }
125
+ return patterns;
126
+ }
127
+ /**
128
+ * Expand a simple glob pattern into directory paths. Supports literal
129
+ * segments and single `*` wildcard segments only. Returns empty list if
130
+ * the pattern uses anything more complex (`**`, character classes, etc.)
131
+ * — caller can decide what to do.
132
+ */
133
+ function expandSimpleGlob(workDir, pattern) {
134
+ // Reject `**` and character classes: too complex.
135
+ if (pattern.includes("**") || /[\[\]{}]/.test(pattern))
136
+ return null;
137
+ const segments = pattern.split("/").filter((s) => s.length > 0);
138
+ let current = [workDir];
139
+ for (const seg of segments) {
140
+ const next = [];
141
+ if (seg === "*") {
142
+ for (const dir of current) {
143
+ let entries;
144
+ try {
145
+ entries = readdirSync(dir);
146
+ }
147
+ catch {
148
+ continue;
149
+ }
150
+ for (const entry of entries) {
151
+ const full = join(dir, entry);
152
+ try {
153
+ if (statSync(full).isDirectory())
154
+ next.push(full);
155
+ }
156
+ catch {
157
+ // skip unreadable
158
+ }
159
+ }
160
+ }
161
+ }
162
+ else if (seg.includes("*")) {
163
+ // Partial wildcard inside a segment — treat as too complex.
164
+ return null;
165
+ }
166
+ else {
167
+ for (const dir of current) {
168
+ const full = join(dir, seg);
169
+ try {
170
+ if (statSync(full).isDirectory())
171
+ next.push(full);
172
+ }
173
+ catch {
174
+ // skip
175
+ }
176
+ }
177
+ }
178
+ current = next;
179
+ }
180
+ return current;
181
+ }
182
+ /**
183
+ * Returns absolute paths to each workspace package directory.
184
+ * Source priority: pnpm-workspace.yaml, then package.json `workspaces`.
185
+ */
186
+ export function listWorkspacePackages(workDir) {
187
+ let patterns = readPnpmWorkspacePatterns(workDir);
188
+ if (!patterns) {
189
+ try {
190
+ const pkg = JSON.parse(readFileSync(join(workDir, "package.json"), "utf8"));
191
+ if (Array.isArray(pkg.workspaces)) {
192
+ patterns = pkg.workspaces.filter((p) => typeof p === "string");
193
+ }
194
+ else if (pkg.workspaces &&
195
+ typeof pkg.workspaces === "object" &&
196
+ Array.isArray(pkg.workspaces.packages)) {
197
+ patterns = (pkg.workspaces.packages).filter((p) => typeof p === "string");
198
+ }
199
+ }
200
+ catch {
201
+ patterns = null;
202
+ }
203
+ }
204
+ if (!patterns || patterns.length === 0)
205
+ return [];
206
+ const out = new Set();
207
+ for (const pat of patterns) {
208
+ const expanded = expandSimpleGlob(workDir, pat);
209
+ if (expanded === null) {
210
+ process.stderr.write(`[git-gate] complex glob "${pat}" — falling back to single-package check\n`);
211
+ return [];
212
+ }
213
+ for (const dir of expanded) {
214
+ // Only count directories that have a package.json
215
+ if (existsSync(join(dir, "package.json")))
216
+ out.add(dir);
217
+ }
218
+ }
219
+ return Array.from(out);
220
+ }
221
+ /**
222
+ * Walk an `exports` map looking for any string referencing `dist/`.
223
+ */
224
+ function exportsReferenceDist(value) {
225
+ if (typeof value === "string") {
226
+ return /(^|\/)dist\//.test(value);
227
+ }
228
+ if (Array.isArray(value)) {
229
+ return value.some(exportsReferenceDist);
230
+ }
231
+ if (value && typeof value === "object") {
232
+ return Object.values(value).some(exportsReferenceDist);
233
+ }
234
+ return false;
235
+ }
236
+ /**
237
+ * True iff the package.json declares any `dist/`-targeted entry.
238
+ */
239
+ export function packageDeclaresDistEntry(pkgJson) {
240
+ for (const field of ["main", "module", "types", "typings"]) {
241
+ const v = pkgJson[field];
242
+ if (typeof v === "string" && /(^|\/)dist\//.test(v))
243
+ return true;
244
+ }
245
+ if (exportsReferenceDist(pkgJson.exports))
246
+ return true;
247
+ if (exportsReferenceDist(pkgJson.bin))
248
+ return true;
249
+ return false;
250
+ }
251
+ /**
252
+ * Recursively find the newest mtime (ms) under a directory. Returns 0 if
253
+ * nothing matches. `predicate` filters file paths.
254
+ */
255
+ function newestMtimeUnder(dir, predicate, acc = { mtime: 0, path: "" }) {
256
+ let entries;
257
+ try {
258
+ entries = readdirSync(dir);
259
+ }
260
+ catch {
261
+ return acc;
262
+ }
263
+ for (const entry of entries) {
264
+ const full = join(dir, entry);
265
+ let s;
266
+ try {
267
+ s = statSync(full);
268
+ }
269
+ catch {
270
+ continue;
271
+ }
272
+ if (s.isDirectory()) {
273
+ // Skip nested node_modules
274
+ if (entry === "node_modules")
275
+ continue;
276
+ newestMtimeUnder(full, predicate, acc);
277
+ }
278
+ else if (s.isFile() && predicate(full)) {
279
+ const m = s.mtimeMs;
280
+ if (m > acc.mtime) {
281
+ acc.mtime = m;
282
+ acc.path = full;
283
+ }
284
+ }
285
+ }
286
+ return acc;
287
+ }
288
+ /**
289
+ * Returns true iff dist/ contains at least one .js file.
290
+ */
291
+ function distHasJs(distDir) {
292
+ return newestMtimeUnder(distDir, (p) => p.endsWith(".js")).mtime > 0;
293
+ }
294
+ /**
295
+ * Verify a single package: dist/ exists, has .js files, and no src/**\/*.ts
296
+ * is newer than the newest dist/ file. Packages that don't declare a
297
+ * dist/ entry are skipped (ok:true).
298
+ */
299
+ export function verifyPackageBuilt(pkgPath) {
300
+ const pkgJsonPath = join(pkgPath, "package.json");
301
+ let pkgJson;
302
+ try {
303
+ pkgJson = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
304
+ }
305
+ catch {
306
+ // Not a real package — skip silently.
307
+ return { ok: true };
308
+ }
309
+ if (!packageDeclaresDistEntry(pkgJson))
310
+ return { ok: true };
311
+ const pkgName = typeof pkgJson.name === "string" && pkgJson.name.length > 0 ? pkgJson.name : pkgPath;
312
+ const distDir = join(pkgPath, "dist");
313
+ if (!existsSync(distDir)) {
314
+ return {
315
+ ok: false,
316
+ reason: `Run pnpm build before tagging. No dist/ directory in ${pkgName}.`,
317
+ };
318
+ }
319
+ const newestDist = newestMtimeUnder(distDir, (p) => p.endsWith(".js"));
320
+ if (newestDist.mtime === 0) {
321
+ return {
322
+ ok: false,
323
+ reason: `Run pnpm build before tagging. No .js files in dist/ for ${pkgName}.`,
324
+ };
325
+ }
326
+ const srcDir = join(pkgPath, "src");
327
+ if (existsSync(srcDir)) {
328
+ const newestSrc = newestMtimeUnder(srcDir, (p) => (p.endsWith(".ts") || p.endsWith(".tsx")) && !p.endsWith(".d.ts"));
329
+ if (newestSrc.mtime > newestDist.mtime) {
330
+ return {
331
+ ok: false,
332
+ reason: `Stale build for ${pkgName}: ${newestSrc.path} newer than dist/. ` +
333
+ `Re-run pnpm build.`,
334
+ };
335
+ }
336
+ }
337
+ return { ok: true };
338
+ }
339
+ /**
340
+ * Top-level entry — verify build artifacts for the working tree before a
341
+ * tag is allowed. Single-package and monorepo aware.
342
+ */
343
+ export function verifyBuildBeforeTag(workDir, version) {
344
+ if (!version) {
345
+ return {
346
+ ok: false,
347
+ reason: "Cannot read version from package.json. Run pnpm build before tagging.",
348
+ };
349
+ }
350
+ if (isMonorepo(workDir)) {
351
+ const pkgs = listWorkspacePackages(workDir);
352
+ if (pkgs.length === 0) {
353
+ // Fallback to single-package mode if we couldn't enumerate.
354
+ return verifyPackageBuilt(workDir);
355
+ }
356
+ for (const pkg of pkgs) {
357
+ const r = verifyPackageBuilt(pkg);
358
+ if (!r.ok)
359
+ return r;
360
+ }
361
+ return { ok: true };
362
+ }
363
+ return verifyPackageBuilt(workDir);
364
+ }
47
365
  /**
48
366
  * Check whether a Bash command triggers any git behavioral gate.
49
367
  * Exported for direct unit testing.
@@ -81,21 +399,10 @@ export function checkGitCommand(command, cwd) {
81
399
  if (/git\s+tag\b/.test(trimmed)) {
82
400
  const workDir = cwd || process.cwd();
83
401
  if (!existsSync(join(workDir, "Cargo.toml"))) {
402
+ let version;
84
403
  try {
85
404
  const pkg = JSON.parse(readFileSync(join(workDir, "package.json"), "utf8"));
86
- const version = pkg.version;
87
- if (!version) {
88
- return {
89
- allow: false,
90
- reason: "Cannot read version from package.json. Run pnpm build before tagging.",
91
- };
92
- }
93
- if (!existsSync(join(workDir, "dist"))) {
94
- return {
95
- allow: false,
96
- reason: `Run pnpm build and build-all-targets before tagging v${version}. No dist/ directory found.`,
97
- };
98
- }
405
+ version = pkg.version;
99
406
  }
100
407
  catch {
101
408
  return {
@@ -103,6 +410,16 @@ export function checkGitCommand(command, cwd) {
103
410
  reason: "Run pnpm build and build-all-targets before tagging. Could not verify build artifacts.",
104
411
  };
105
412
  }
413
+ if (!version) {
414
+ return {
415
+ allow: false,
416
+ reason: "Cannot read version from package.json. Run pnpm build before tagging.",
417
+ };
418
+ }
419
+ const result = verifyBuildBeforeTag(workDir, version);
420
+ if (!result.ok) {
421
+ return { allow: false, reason: result.reason };
422
+ }
106
423
  }
107
424
  }
108
425
  return { allow: true };
@@ -1 +1 @@
1
- {"version":3,"file":"git-gate.js","sourceRoot":"","sources":["../../src/hooks/git-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-gate.js","sourceRoot":"","sources":["../../src/hooks/git-gate.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.72",
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": {