greprag 5.40.1 → 5.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/archive/glyph-font.d.ts +22 -0
  2. package/dist/archive/glyph-font.js +72 -0
  3. package/dist/archive/glyph-font.js.map +1 -0
  4. package/dist/archive/page-renderer.d.ts +67 -0
  5. package/dist/archive/page-renderer.js +197 -0
  6. package/dist/archive/page-renderer.js.map +1 -0
  7. package/dist/archive/png-codec.d.ts +21 -0
  8. package/dist/archive/png-codec.js +197 -0
  9. package/dist/archive/png-codec.js.map +1 -0
  10. package/dist/archive/transcript-extract.d.ts +39 -0
  11. package/dist/archive/transcript-extract.js +187 -0
  12. package/dist/archive/transcript-extract.js.map +1 -0
  13. package/dist/ccr-store.d.ts +49 -0
  14. package/dist/ccr-store.js +171 -0
  15. package/dist/ccr-store.js.map +1 -0
  16. package/dist/commands/archive.d.ts +81 -0
  17. package/dist/commands/archive.js +358 -0
  18. package/dist/commands/archive.js.map +1 -0
  19. package/dist/commands/context-governor.d.ts +82 -0
  20. package/dist/commands/context-governor.js +344 -0
  21. package/dist/commands/context-governor.js.map +1 -0
  22. package/dist/commands/crush-stats.d.ts +36 -0
  23. package/dist/commands/crush-stats.js +142 -0
  24. package/dist/commands/crush-stats.js.map +1 -0
  25. package/dist/commands/crush.d.ts +24 -0
  26. package/dist/commands/crush.js +183 -0
  27. package/dist/commands/crush.js.map +1 -0
  28. package/dist/commands/email.js +158 -9
  29. package/dist/commands/email.js.map +1 -1
  30. package/dist/commands/inbox-watch-supervisor.js +8 -65
  31. package/dist/commands/inbox-watch-supervisor.js.map +1 -1
  32. package/dist/commands/init.js +93 -0
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/commands/pipe-wrap.d.ts +75 -0
  35. package/dist/commands/pipe-wrap.js +255 -0
  36. package/dist/commands/pipe-wrap.js.map +1 -0
  37. package/dist/commands/watcher-registry.d.ts +1 -8
  38. package/dist/commands/watcher-registry.js +10 -47
  39. package/dist/commands/watcher-registry.js.map +1 -1
  40. package/dist/crush/adaptive-sizer.d.ts +40 -0
  41. package/dist/crush/adaptive-sizer.js +156 -0
  42. package/dist/crush/adaptive-sizer.js.map +1 -0
  43. package/dist/crush/crush-keywords.d.ts +40 -0
  44. package/dist/crush/crush-keywords.js +110 -0
  45. package/dist/crush/crush-keywords.js.map +1 -0
  46. package/dist/crush/crush-types.d.ts +38 -0
  47. package/dist/crush/crush-types.js +36 -0
  48. package/dist/crush/crush-types.js.map +1 -0
  49. package/dist/crush/index.d.ts +16 -0
  50. package/dist/crush/index.js +48 -0
  51. package/dist/crush/index.js.map +1 -0
  52. package/dist/crush/json-crusher.d.ts +38 -0
  53. package/dist/crush/json-crusher.js +250 -0
  54. package/dist/crush/json-crusher.js.map +1 -0
  55. package/dist/crush/json-detectors.d.ts +48 -0
  56. package/dist/crush/json-detectors.js +211 -0
  57. package/dist/crush/json-detectors.js.map +1 -0
  58. package/dist/crush/log-compressor.d.ts +60 -0
  59. package/dist/crush/log-compressor.js +394 -0
  60. package/dist/crush/log-compressor.js.map +1 -0
  61. package/dist/crush/search-compressor.d.ts +60 -0
  62. package/dist/crush/search-compressor.js +210 -0
  63. package/dist/crush/search-compressor.js.map +1 -0
  64. package/dist/email-pull.d.ts +25 -3
  65. package/dist/email-pull.js +25 -5
  66. package/dist/email-pull.js.map +1 -1
  67. package/dist/email-send.d.ts +4 -0
  68. package/dist/email-send.js +2 -0
  69. package/dist/email-send.js.map +1 -1
  70. package/dist/hook.js +49 -1
  71. package/dist/hook.js.map +1 -1
  72. package/dist/index.js +487 -449
  73. package/dist/index.js.map +1 -1
  74. package/dist/session-id.js +7 -12
  75. package/dist/session-id.js.map +1 -1
  76. package/package.json +2 -2
  77. package/skill/greprag/SKILL.md +2 -2
  78. package/skill/greprag/docs/email.md +28 -4
  79. package/skill/mechanic/SKILL.md +1 -1
  80. package/skill/templates/chip-spawn.md +4 -2
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ // adr: adr/crush-engine.md
3
+ /** greprag crush / greprag retrieve — pre-LLM tool-output compression.
4
+ *
5
+ * `greprag crush --type <log|search|json> [--ccr] [--query "words"]`
6
+ * reads stdin, writes crushed output to stdout. Designed to sit inside
7
+ * users' piped commands, so the contract is HARD:
8
+ *
9
+ * - Exit 0 ALWAYS, even on internal error (pass stdin through verbatim).
10
+ * - Token-validate-or-revert: if crushed output isn't fewer estimated
11
+ * tokens than the input, emit the input unchanged.
12
+ * - Below-threshold skip: log/search < 500B, json < 1KB pass through.
13
+ * - With --ccr: the ORIGINAL is stored in the local CCR store
14
+ * (~/.greprag/ccr.db; override GREPRAG_CCR_DB) and a trailing
15
+ * `<<ccr:HASH>>` marker (first 16 hex of sha256) is appended.
16
+ *
17
+ * `greprag retrieve <hash>` prints the stored original to stdout.
18
+ *
19
+ * Compressors come from the local crush mirror (canonical source:
20
+ * packages/core/src/crush — the CLI cannot import @greprag/core).
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.CRUSH_HELP = void 0;
24
+ exports.runCrush = runCrush;
25
+ exports.runRetrieve = runRetrieve;
26
+ const crush_1 = require("../crush");
27
+ const ccr_store_1 = require("../ccr-store");
28
+ const crush_stats_1 = require("./crush-stats");
29
+ exports.CRUSH_HELP = `greprag crush — compress tool output before it reaches the model.
30
+
31
+ Usage:
32
+ <command> | greprag crush --type <log|search|json> [--ccr] [--query "words"] [--stats]
33
+ greprag crush stats
34
+ greprag retrieve <hash>
35
+
36
+ Reads stdin, writes the crushed version to stdout.
37
+
38
+ Flags:
39
+ --type <log|search|json> What the input is:
40
+ log build/test output (pytest, npm, cargo, jest, make)
41
+ search grep/ripgrep output (file:line:content)
42
+ json JSON containing large arrays
43
+ --ccr Stash the ORIGINAL in the local CCR store and append
44
+ a trailing <<ccr:HASH>> marker. Recover the full
45
+ output later with: greprag retrieve <hash>
46
+ --query "words" Relevance hint — matches containing these words
47
+ score higher and survive compression (search/json).
48
+ --stats Append { ts, type, bytesIn, bytesOut } to the local
49
+ stats log (~/.greprag/crush-stats.jsonl; override
50
+ GREPRAG_CRUSH_STATS). Read it back with:
51
+ greprag crush stats
52
+
53
+ Contract (safe inside pipes):
54
+ - ALWAYS exits 0; on any internal error stdin passes through verbatim.
55
+ - If compression wouldn't save tokens, the input passes through unchanged.
56
+ - Small inputs (log/search < 500B, json < 1KB) pass through untouched.
57
+
58
+ CCR store: ~/.greprag/ccr.db (override with GREPRAG_CCR_DB).
59
+
60
+ Examples:
61
+ npm test 2>&1 | greprag crush --type log --ccr
62
+ rg -n "handleSms" | greprag crush --type search --query "handleSms tenant"
63
+ curl -s api/items | greprag crush --type json`;
64
+ /** Byte thresholds below which input passes through untouched. */
65
+ const MIN_BYTES = { log: 500, search: 500, json: 1024 };
66
+ function readStdin() {
67
+ return new Promise((resolve) => {
68
+ const chunks = [];
69
+ process.stdin.on('data', (c) => chunks.push(c));
70
+ process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
71
+ process.stdin.on('error', () => resolve(Buffer.concat(chunks).toString('utf8')));
72
+ });
73
+ }
74
+ function parseCrushArgs(args) {
75
+ const out = { type: null, ccr: false, query: '', stats: false, help: false };
76
+ for (let i = 0; i < args.length; i++) {
77
+ const a = args[i];
78
+ if (a === '--help' || a === '-h')
79
+ out.help = true;
80
+ else if (a === '--ccr')
81
+ out.ccr = true;
82
+ else if (a === '--stats')
83
+ out.stats = true;
84
+ else if (a === '--type')
85
+ out.type = args[++i] ?? null;
86
+ else if (a === '--query')
87
+ out.query = args[++i] ?? '';
88
+ }
89
+ return out;
90
+ }
91
+ function runCompressor(type, content, query) {
92
+ switch (type) {
93
+ case 'log':
94
+ return (0, crush_1.crushLog)(content);
95
+ case 'search':
96
+ return (0, crush_1.crushSearch)(content, query);
97
+ case 'json':
98
+ return (0, crush_1.crushJson)(content);
99
+ default:
100
+ throw new Error(`unknown --type '${type}' (expected log|search|json)`);
101
+ }
102
+ }
103
+ /** greprag crush — exit 0 always; on any failure stdin passes through. */
104
+ async function runCrush(args) {
105
+ const parsed = parseCrushArgs(args);
106
+ if (parsed.help || process.stdin.isTTY) {
107
+ // --help, or interactive invocation with nothing piped in.
108
+ console.log(exports.CRUSH_HELP);
109
+ return;
110
+ }
111
+ const original = await readStdin();
112
+ // Single exit point for output: writes stdout and (with --stats) appends a
113
+ // { ts, type, bytesIn, bytesOut } record. Passthroughs are recorded too so
114
+ // the ratios reflect real savings. Stats are best-effort — appendCrushStat
115
+ // swallows its own failures, the pipe contract is untouched.
116
+ const emit = (out) => {
117
+ process.stdout.write(out);
118
+ if (parsed.stats) {
119
+ (0, crush_stats_1.appendCrushStat)({
120
+ ts: new Date().toISOString(),
121
+ type: parsed.type || 'unknown',
122
+ bytesIn: Buffer.byteLength(original, 'utf8'),
123
+ bytesOut: Buffer.byteLength(out, 'utf8'),
124
+ });
125
+ }
126
+ };
127
+ try {
128
+ if (!parsed.type || !(parsed.type in MIN_BYTES)) {
129
+ throw new Error(`missing or invalid --type (expected log|search|json)`);
130
+ }
131
+ if (Buffer.byteLength(original, 'utf8') < MIN_BYTES[parsed.type]) {
132
+ emit(original);
133
+ return;
134
+ }
135
+ const result = runCompressor(parsed.type, original, parsed.query);
136
+ // Token-validate-or-revert: never emit something that costs >= the input.
137
+ if (result.stats.passthrough || (0, crush_1.estimateTokens)(result.output) >= (0, crush_1.estimateTokens)(original)) {
138
+ emit(original);
139
+ return;
140
+ }
141
+ let output = result.output;
142
+ if (parsed.ccr) {
143
+ const store = await ccr_store_1.CcrStore.open();
144
+ try {
145
+ const hash = store.put(original, parsed.type);
146
+ output += `\n${(0, ccr_store_1.ccrMarker)(hash)}`;
147
+ }
148
+ finally {
149
+ store.close();
150
+ }
151
+ }
152
+ emit(output);
153
+ }
154
+ catch (err) {
155
+ // HARD contract: never break the user's pipe. Verbatim passthrough.
156
+ console.error(`[greprag crush] ${err instanceof Error ? err.message : String(err)} — passing input through`);
157
+ emit(original);
158
+ }
159
+ }
160
+ /** greprag retrieve <hash> — print a CCR-stored original to stdout. */
161
+ async function runRetrieve(args) {
162
+ const arg = args.find((a) => !a.startsWith('--'));
163
+ if (!arg || args.includes('--help') || args.includes('-h')) {
164
+ console.log(exports.CRUSH_HELP);
165
+ if (!arg && !args.includes('--help') && !args.includes('-h'))
166
+ process.exitCode = 1;
167
+ return;
168
+ }
169
+ const store = await ccr_store_1.CcrStore.open();
170
+ try {
171
+ const content = store.get(arg);
172
+ if (content === null) {
173
+ console.error(`[greprag retrieve] no CCR entry for '${arg}'`);
174
+ process.exitCode = 1;
175
+ return;
176
+ }
177
+ process.stdout.write(content);
178
+ }
179
+ finally {
180
+ store.close();
181
+ }
182
+ }
183
+ //# sourceMappingURL=crush.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crush.js","sourceRoot":"","sources":["../../src/commands/crush.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;GAkBG;;;AAyFH,4BAyDC;AAGD,kCAmBC;AAtKD,oCAAyF;AACzF,4CAAmD;AACnD,+CAAgD;AAEnC,QAAA,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAkCsB,CAAC;AAEjD,kEAAkE;AAClE,MAAM,SAAS,GAA2B,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEhF,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC;AAUD,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,GAAG,GAAc,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;aAC7C,IAAI,CAAC,KAAK,OAAO;YAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;aAClC,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;aACtC,IAAI,CAAC,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;aACjD,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,KAAa;IACjE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAO,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;QAC3B,KAAK,QAAQ;YACX,OAAO,IAAA,mBAAW,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,IAAA,iBAAS,EAAC,OAAO,CAAC,CAAC;QAC5B;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,8BAA8B,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,0EAA0E;AACnE,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvC,2DAA2D;QAC3D,OAAO,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAC;IACnC,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAA,6BAAe,EAAC;gBACd,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;gBAC9B,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAC5C,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAElE,0EAA0E;QAC1E,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAA,sBAAc,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAA,sBAAc,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,QAAQ,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,oBAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,IAAI,KAAK,IAAA,qBAAS,EAAC,IAAI,CAAC,EAAE,CAAC;YACnC,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oEAAoE;QACpE,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC7G,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED,uEAAuE;AAChE,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,oBAAQ,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,wCAAwC,GAAG,GAAG,CAAC,CAAC;YAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -114,8 +114,15 @@ const EMAIL_HELP = `greprag email — the agent's real mailbox: drain inbound, s
114
114
 
115
115
  greprag email List pending front-desk email (envelope only).
116
116
  greprag email pending Same — explicit list.
117
+ [--box <addr|domain|default>] Only one mailbox: a full address matches
118
+ exactly, a bare domain matches every box
119
+ on it, "default" = your greprag.com box
120
+ (incl. mail from before mailboxes).
121
+ greprag email boxes List your mailboxes with pending counts.
122
+ greprag email domains List your custom domains + verified status.
117
123
  greprag email pull --id <record> Pull ONE record's attachments to disk.
118
124
  greprag email pull --all-pending Pull EVERY pending record's attachments.
125
+ [--box <addr|domain|default>] Drain only one mailbox (with --all-pending).
119
126
  [--to <dir>] Save directory. Default resolution:
120
127
  --to > $GREPRAG_EMAIL_DIR > per-project
121
128
  anchor (email_dir) > ~/.greprag/email/<project>
@@ -126,6 +133,8 @@ const EMAIL_HELP = `greprag email — the agent's real mailbox: drain inbound, s
126
133
  [--attach <path>] Attach a local file (repeatable).
127
134
  [--cc <addr>] [--bcc <addr>] Extra recipients (repeatable / comma-sep).
128
135
  [--reply-to <addr>] Reply-To header.
136
+ [--from-name "<name>"] Display name on the From ("Travis Steward").
137
+ Falls back to the domain default.
129
138
  [--from <handle>] Send AS one of YOUR OWN greprag handles
130
139
  (default: your tenant's address). The
131
140
  server rejects any address that isn't
@@ -133,6 +142,12 @@ const EMAIL_HELP = `greprag email — the agent's real mailbox: drain inbound, s
133
142
  Send a real email FROM your travis@greprag.com address TO any recipient.
134
143
  --body-file - reads the body from stdin.
135
144
 
145
+ greprag email domain add <domain> Register a custom sending domain;
146
+ prints the DNS records to set.
147
+ greprag email domain verify <domain> Check the records are live; flips the
148
+ domain verified when all resolve.
149
+ greprag email domain remove <domain> Release the domain.
150
+
136
151
  Attachments (pull) are saved as <subject-slug>-<index>.<ext>. Re-pulls are
137
152
  idempotent. Tier-3 junk images triage dropped are not fetchable.
138
153
 
@@ -150,8 +165,18 @@ async function runEmail(args) {
150
165
  console.error('Not configured. Run: greprag init');
151
166
  process.exit(1);
152
167
  }
153
- if (!sub || sub === 'pending') {
154
- await listPending(cfg);
168
+ // Bare `greprag email --box x` is the pending list too — flags imply it.
169
+ if (!sub || sub === 'pending' || sub.startsWith('--')) {
170
+ const rest = sub === 'pending' ? args.slice(1) : args;
171
+ await listPending(cfg, getFlag(rest, '--box') || null);
172
+ return;
173
+ }
174
+ if (sub === 'boxes') {
175
+ await listBoxes(cfg);
176
+ return;
177
+ }
178
+ if (sub === 'domains') {
179
+ await listDomains(cfg);
155
180
  return;
156
181
  }
157
182
  if (sub === 'pull') {
@@ -162,16 +187,25 @@ async function runEmail(args) {
162
187
  await runSend(args.slice(1), cfg);
163
188
  return;
164
189
  }
190
+ if (sub === 'domain') {
191
+ await runDomain(args.slice(1), cfg);
192
+ return;
193
+ }
165
194
  console.error(`Unknown "email ${sub}". Run \`greprag email --help\`.`);
166
195
  process.exit(1);
167
196
  }
168
- async function listPending(cfg) {
169
- const pending = await (0, email_pull_1.fetchPending)(cfg.apiUrl, cfg.apiKey);
197
+ async function listPending(cfg, box) {
198
+ const pending = await (0, email_pull_1.fetchPending)(cfg.apiUrl, cfg.apiKey, 50, box);
170
199
  if (pending.length === 0) {
171
- console.log('No pending email.');
200
+ console.log(box ? `No pending email in box "${box}".` : 'No pending email.');
172
201
  return;
173
202
  }
174
- console.log(`${pending.length} pending email message(s):\n`);
203
+ // Show the mailbox column only when it disambiguates — more than one
204
+ // distinct box in the listing (legacy NULL counts as its own).
205
+ const distinctBoxes = new Set(pending.map(p => p.mailbox || '(default)'));
206
+ const showBox = distinctBoxes.size > 1;
207
+ const scope = box ? ` in box "${box}"` : '';
208
+ console.log(`${pending.length} pending email message(s)${scope}:\n`);
175
209
  for (const p of pending) {
176
210
  const from = p.from || '(unknown sender)';
177
211
  const subject = p.subject || '(no subject)';
@@ -179,18 +213,50 @@ async function listPending(cfg) {
179
213
  ? ` · ${p.attachment_count} attachment${p.attachment_count === 1 ? '' : 's'}`
180
214
  : '';
181
215
  const verdict = p.trust_verdict ? ` · trust: ${p.trust_verdict}` : '';
216
+ const boxCol = showBox ? ` · box: ${p.mailbox || '(default)'}` : '';
182
217
  const date = new Date(p.created_at).toLocaleString();
183
218
  console.log(`[${from}] ${date} ${p.id.slice(0, 8)}`);
184
- console.log(` "${subject}"${att}${verdict}`);
219
+ console.log(` "${subject}"${att}${verdict}${boxCol}`);
185
220
  }
186
221
  console.log(`\nPull attachments: greprag email pull --all-pending (or --id <record>)`);
187
222
  }
223
+ async function listBoxes(cfg) {
224
+ const boxes = await (0, email_pull_1.fetchBoxes)(cfg.apiUrl, cfg.apiKey);
225
+ if (boxes.length === 0) {
226
+ console.log('No pending email in any mailbox.');
227
+ return;
228
+ }
229
+ console.log(`${boxes.length} mailbox(es) with pending email:\n`);
230
+ for (const b of boxes) {
231
+ const def = b.is_default ? ' · default' : '';
232
+ console.log(` ${b.mailbox} ${b.pending} pending${def}`);
233
+ }
234
+ console.log(`\nRead one box: greprag email pending --box <addr|domain|default>`);
235
+ }
236
+ async function listDomains(cfg) {
237
+ const domains = await (0, email_pull_1.fetchDomains)(cfg.apiUrl, cfg.apiKey);
238
+ if (domains.length === 0) {
239
+ console.log('No custom domains registered.');
240
+ return;
241
+ }
242
+ console.log(`${domains.length} custom domain(s):\n`);
243
+ for (const d of domains) {
244
+ const status = d.verified ? 'verified' : 'pending verification';
245
+ const fwd = d.forward_to ? ` · mirrors to ${d.forward_to}` : '';
246
+ console.log(` ${d.domain} · ${status}${fwd}`);
247
+ }
248
+ }
188
249
  async function runPull(args, cfg) {
189
250
  const id = getFlag(args, '--id');
190
251
  const allPending = args.includes('--all-pending');
191
252
  const quiet = args.includes('--quiet');
253
+ const box = getFlag(args, '--box') || null;
192
254
  if (!id && !allPending) {
193
- console.error('Usage: greprag email pull (--id <record> | --all-pending) [--to <dir>] [--quiet]');
255
+ console.error('Usage: greprag email pull (--id <record> | --all-pending) [--box <addr|domain|default>] [--to <dir>] [--quiet]');
256
+ process.exit(1);
257
+ }
258
+ if (box && !allPending) {
259
+ console.error('--box composes with --all-pending (a single --id record is already one mailbox).');
194
260
  process.exit(1);
195
261
  }
196
262
  const anchor = (0, project_anchor_1.readAnchor)(process.cwd());
@@ -203,7 +269,7 @@ async function runPull(args, cfg) {
203
269
  let saved;
204
270
  let recordCount;
205
271
  if (allPending) {
206
- const r = await (0, email_pull_1.pullAllPending)(cfg.apiUrl, cfg.apiKey, dir);
272
+ const r = await (0, email_pull_1.pullAllPending)(cfg.apiUrl, cfg.apiKey, dir, box);
207
273
  saved = r.saved;
208
274
  recordCount = r.records;
209
275
  }
@@ -283,6 +349,7 @@ async function runSend(args, cfg) {
283
349
  bcc: getAll(args, '--bcc'),
284
350
  replyTo: getFlag(args, '--reply-to') || null,
285
351
  from: getFlag(args, '--from') || null,
352
+ fromName: getFlag(args, '--from-name') || null,
286
353
  attachPaths,
287
354
  };
288
355
  let payload;
@@ -307,4 +374,86 @@ async function runSend(args, cfg) {
307
374
  process.exit(1);
308
375
  }
309
376
  }
377
+ async function domainApi(cfg, method, path, body) {
378
+ const res = await fetch(`${cfg.apiUrl}${path}`, {
379
+ method,
380
+ headers: {
381
+ Authorization: `Bearer ${cfg.apiKey}`,
382
+ ...(body ? { 'Content-Type': 'application/json' } : {}),
383
+ },
384
+ body: body ? JSON.stringify(body) : undefined,
385
+ });
386
+ let json = {};
387
+ try {
388
+ json = await res.json();
389
+ }
390
+ catch { /* non-JSON error body */ }
391
+ return { status: res.status, json };
392
+ }
393
+ /** Print DNS records as an aligned type / name / value table. */
394
+ function printRecordsTable(records) {
395
+ const rows = [
396
+ ['TYPE', 'NAME', 'VALUE'],
397
+ ...records.map(r => [r.type, r.name, r.value]),
398
+ ];
399
+ const w0 = Math.max(...rows.map(r => r[0].length));
400
+ const w1 = Math.max(...rows.map(r => r[1].length));
401
+ for (const [t, n, v] of rows) {
402
+ console.log(` ${t.padEnd(w0)} ${n.padEnd(w1)} ${v}`);
403
+ }
404
+ }
405
+ async function runDomain(args, cfg) {
406
+ const verb = args[0];
407
+ const domain = args[1];
408
+ if (!verb || ['--help', '-h', 'help'].includes(verb)) {
409
+ console.log(EMAIL_HELP);
410
+ return;
411
+ }
412
+ if (!domain) {
413
+ console.error(`Usage: greprag email domain <add|verify|remove> <domain>`);
414
+ process.exit(1);
415
+ }
416
+ if (verb === 'add') {
417
+ const { status, json } = await domainApi(cfg, 'POST', '/v1/email/domains', { domain });
418
+ if (status === 200 || status === 201) {
419
+ const records = json.records || [];
420
+ console.log(json.existing
421
+ ? `${domain} is already registered to you (verified: ${json.verified ? 'yes' : 'no'}).`
422
+ : `Registered ${domain}. Add these DNS records at your DNS host:`);
423
+ if (records.length > 0)
424
+ printRecordsTable(records);
425
+ console.log(`\nThen run: greprag email domain verify ${domain}`);
426
+ return;
427
+ }
428
+ console.error(`Add failed (${status}): ${json.error || 'unknown error'}`);
429
+ process.exit(1);
430
+ }
431
+ if (verb === 'verify') {
432
+ const { status, json } = await domainApi(cfg, 'POST', `/v1/email/domains/${encodeURIComponent(domain)}/verify`);
433
+ if (status === 200 && json.verified) {
434
+ console.log(`${domain} is verified. Send with: greprag email send --from <you>@${domain} ...`);
435
+ return;
436
+ }
437
+ if (status === 200) {
438
+ const missing = json.missing || [];
439
+ console.log(`${domain} is NOT verified yet — ${missing.length} record(s) not live:`);
440
+ printRecordsTable(missing);
441
+ console.log(`\nDNS can take a while to propagate; re-run verify after it settles.`);
442
+ return;
443
+ }
444
+ console.error(`Verify failed (${status}): ${json.error || 'unknown error'}`);
445
+ process.exit(1);
446
+ }
447
+ if (verb === 'remove') {
448
+ const { status, json } = await domainApi(cfg, 'DELETE', `/v1/email/domains/${encodeURIComponent(domain)}`);
449
+ if (status === 200) {
450
+ console.log(`Released ${domain}.`);
451
+ return;
452
+ }
453
+ console.error(`Remove failed (${status}): ${json.error || 'unknown error'}`);
454
+ process.exit(1);
455
+ }
456
+ console.error(`Unknown "email domain ${verb}". Use add | verify | remove.`);
457
+ process.exit(1);
458
+ }
310
459
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/commands/email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/commands/email.ts"],"names":[],"mappings":"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"}
@@ -102,21 +102,12 @@ const SUPERVISOR_BACKOFF_FACTOR = 2;
102
102
  // 60s of uninterrupted child life resets the backoff so a long-lived
103
103
  // child that finally dies retries fast, not slowly.
104
104
  const SUPERVISOR_HEALTHY_RESET_MS = 60_000;
105
- // ---- Monitor-task liveness probe (2026-06-10) ----------------------------
106
- // The pipe binding (bindToConsumer) catches the harness CLOSING the pipe
107
- // (session end/reload) and --owner-pid catches claude.exe dying but a
108
- // TaskStop (and the host restart on a model switch) kills only the Monitor
109
- // task's bash layers: claude.exe survives, the harness keeps the pipe's read
110
- // end open, and the sh→supervisor→child stack orphans (reproduced live
111
- // 2026-06-10: TaskStop killed bash 7604/17948; sh 14148 + node 11556/12776
112
- // survived and needed a manual taskkill — the reaper read them `ok→keep
113
- // via=owner=…:live-claude`). The arm command stamps the Monitor bash's
114
- // Windows PID (`--monitor-pid`, from /proc/$$/winpid); this probe tests it
115
- // with ONE pidAlive() syscall per tick — never a process-table snapshot (the
116
- // 2026-06-05b lesson) — and on death stops the whole watcher through the
117
- // normal terminal teardown (goodbye + pidfile removal, no respawn).
118
- // Env-overridable for tests. adr: adr/monitor-resilience.md (2026-06-10)
119
- const MONITOR_PROBE_MS = Number(process.env.GREPRAG_WATCH_MONITOR_PROBE_MS) || 15_000;
105
+ // The --monitor-pid monitor-task liveness probe (ff681bb, 2026-06-10) was
106
+ // reverted 2026-06-11: /proc/$$/winpid stamped the transient arm-line bash, not
107
+ // the persistent Monitor task, so the probe false-killed live watchers
108
+ // (terminal stop, no respawn) "constantly dying". The pipe binding
109
+ // (bindToConsumer) + --owner-pid reaper remain the supervision layers.
110
+ // adr: adr/monitor-resilience.md
120
111
  // Rebuild settle (2026-06-10): `npm run build` swaps dist/ under every running
121
112
  // watcher; the child crashes (a lazy `require` loads a half-written module) and
122
113
  // an immediate respawn loads a partially-emitted entry file → a crash-loop wave
@@ -175,18 +166,6 @@ function ownerPidFromArgv(argv) {
175
166
  }
176
167
  return undefined;
177
168
  }
178
- /** The Monitor task's bash PID forwarded by the arm command
179
- * (`--monitor-pid N`, Windows pid space via /proc/$$/winpid). 0 = the arm-time
180
- * "no stamp" fallback → undefined. */
181
- function monitorPidFromArgv(argv) {
182
- const i = argv.indexOf('--monitor-pid');
183
- if (i >= 0 && i + 1 < argv.length) {
184
- const n = Number(argv[i + 1]);
185
- if (Number.isFinite(n) && n > 0)
186
- return n;
187
- }
188
- return undefined;
189
- }
190
169
  /** Entry-script mtime, or null when unstatable (deleted mid-rebuild, exotic
191
170
  * launcher). Null disables the rebuild-settle branch — fail-open. */
192
171
  function entryMtimeMs(entry) {
@@ -297,10 +276,9 @@ async function runSupervisor() {
297
276
  // see a live, locally-consumed watcher without asking the cloud registry
298
277
  // (which counts orphans as armed). Removed on terminal exit below — and, if a
299
278
  // hard kill skips that, swept by the SessionStart reaper. adr: adr/monitor-resilience.md
300
- const monitorPid = monitorPidFromArgv(process.argv.slice(2));
301
279
  if (session)
302
- (0, watcher_registry_1.writeWatcherPidfile)(session, process.pid, ownerPidFromArgv(process.argv.slice(2)), monitorPid);
303
- (0, watcher_registry_1.watcherAuditLog)(`arm session=${session ?? 'tenant'} ppid=${process.ppid} monitorPid=${monitorPid ?? 'none'} (launcher shell; reaper severs this watcher if ppid exits below a claude.exe)`);
280
+ (0, watcher_registry_1.writeWatcherPidfile)(session, process.pid, ownerPidFromArgv(process.argv.slice(2)));
281
+ (0, watcher_registry_1.watcherAuditLog)(`arm session=${session ?? 'tenant'} ppid=${process.ppid} (launcher shell; reaper severs this watcher if ppid exits below a claude.exe)`);
304
282
  // Visibility only: the reaper kills via OS taskkill/tree-kill, which leaves NO
305
283
  // teardown log below. So "an `arm` line with no matching `exit` line" == killed
306
284
  // externally (reaper); an `exit reason=consumer-gone` line == the pipe binding
@@ -316,34 +294,6 @@ async function runSupervisor() {
316
294
  if (typeof heartbeat.unref === 'function')
317
295
  heartbeat.unref();
318
296
  }
319
- // Monitor-task liveness probe (see MONITOR_PROBE_MS above). The stamp is
320
- // verified at arm time: a stamp that is ALREADY dead is unusable (wrong pid
321
- // space, pasted into a non-bash shell, or recycled before we started) — the
322
- // probe is then disabled rather than trusted, so a bad stamp can NEVER
323
- // false-kill a live watcher; the pipe probe + reaper still cover it. A stamp
324
- // that was verified alive and LATER dies is the Monitor task ending: stop
325
- // everything through the normal terminal teardown.
326
- let monitorGone = false;
327
- let monitorProbe = null;
328
- if (monitorPid) {
329
- if (!(0, watcher_registry_1.pidAlive)(monitorPid)) {
330
- (0, watcher_registry_1.watcherAuditLog)(`monitor-pid-unverifiable session=${session ?? 'tenant'} monitorPid=${monitorPid} (dead at arm — probe disabled, falling back to pipe probe + reaper)`);
331
- }
332
- else {
333
- monitorProbe = setInterval(() => {
334
- if (monitorGone || shutdownRequested)
335
- return;
336
- if (!(0, watcher_registry_1.pidAlive)(monitorPid)) {
337
- monitorGone = true;
338
- (0, watcher_registry_1.watcherAuditLog)(`monitor-gone session=${session ?? 'tenant'} monitorPid=${monitorPid} (Monitor task died — owner may still be alive; terminal stop, no respawn)`);
339
- console.error(`${LOG_PREFIX} Monitor task (pid ${monitorPid}) is gone — stopping watcher (no respawn).`);
340
- forward('SIGTERM');
341
- }
342
- }, MONITOR_PROBE_MS);
343
- if (typeof monitorProbe.unref === 'function')
344
- monitorProbe.unref();
345
- }
346
- }
347
297
  // Entry-script mtime at the moment each child is (re)spawned — the rebuild
348
298
  // detector's baseline. Null when unstatable (branch disabled, fail-open).
349
299
  const entryScript = process.argv[1];
@@ -446,14 +396,7 @@ async function runSupervisor() {
446
396
  // exit; respawns `continue`). Stop the heartbeat and fire a best-effort goodbye
447
397
  // so the ghost is pruned instantly instead of waiting out the lease TTL. The
448
398
  // DELETE both closes the live WS in the InboxDO and drops the lease row.
449
- // A monitor-gone trip is the root cause whenever it fired, regardless of which
450
- // break path the loop took (the probe routes through forward(), so the loop
451
- // sees a generic shutdown) — name it in the audit trail.
452
- if (monitorGone)
453
- terminalReason = 'monitor-gone(task-dead)';
454
399
  (0, watcher_registry_1.watcherAuditLog)(`exit session=${session ?? 'tenant'} reason=${terminalReason}`);
455
- if (monitorProbe)
456
- clearInterval(monitorProbe);
457
400
  if (heartbeat)
458
401
  clearInterval(heartbeat);
459
402
  if (session)