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.
- package/dist/archive/glyph-font.d.ts +22 -0
- package/dist/archive/glyph-font.js +72 -0
- package/dist/archive/glyph-font.js.map +1 -0
- package/dist/archive/page-renderer.d.ts +67 -0
- package/dist/archive/page-renderer.js +197 -0
- package/dist/archive/page-renderer.js.map +1 -0
- package/dist/archive/png-codec.d.ts +21 -0
- package/dist/archive/png-codec.js +197 -0
- package/dist/archive/png-codec.js.map +1 -0
- package/dist/archive/transcript-extract.d.ts +39 -0
- package/dist/archive/transcript-extract.js +187 -0
- package/dist/archive/transcript-extract.js.map +1 -0
- package/dist/ccr-store.d.ts +49 -0
- package/dist/ccr-store.js +171 -0
- package/dist/ccr-store.js.map +1 -0
- package/dist/commands/archive.d.ts +81 -0
- package/dist/commands/archive.js +358 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/context-governor.d.ts +82 -0
- package/dist/commands/context-governor.js +344 -0
- package/dist/commands/context-governor.js.map +1 -0
- package/dist/commands/crush-stats.d.ts +36 -0
- package/dist/commands/crush-stats.js +142 -0
- package/dist/commands/crush-stats.js.map +1 -0
- package/dist/commands/crush.d.ts +24 -0
- package/dist/commands/crush.js +183 -0
- package/dist/commands/crush.js.map +1 -0
- package/dist/commands/email.js +158 -9
- package/dist/commands/email.js.map +1 -1
- package/dist/commands/inbox-watch-supervisor.js +8 -65
- package/dist/commands/inbox-watch-supervisor.js.map +1 -1
- package/dist/commands/init.js +93 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pipe-wrap.d.ts +75 -0
- package/dist/commands/pipe-wrap.js +255 -0
- package/dist/commands/pipe-wrap.js.map +1 -0
- package/dist/commands/watcher-registry.d.ts +1 -8
- package/dist/commands/watcher-registry.js +10 -47
- package/dist/commands/watcher-registry.js.map +1 -1
- package/dist/crush/adaptive-sizer.d.ts +40 -0
- package/dist/crush/adaptive-sizer.js +156 -0
- package/dist/crush/adaptive-sizer.js.map +1 -0
- package/dist/crush/crush-keywords.d.ts +40 -0
- package/dist/crush/crush-keywords.js +110 -0
- package/dist/crush/crush-keywords.js.map +1 -0
- package/dist/crush/crush-types.d.ts +38 -0
- package/dist/crush/crush-types.js +36 -0
- package/dist/crush/crush-types.js.map +1 -0
- package/dist/crush/index.d.ts +16 -0
- package/dist/crush/index.js +48 -0
- package/dist/crush/index.js.map +1 -0
- package/dist/crush/json-crusher.d.ts +38 -0
- package/dist/crush/json-crusher.js +250 -0
- package/dist/crush/json-crusher.js.map +1 -0
- package/dist/crush/json-detectors.d.ts +48 -0
- package/dist/crush/json-detectors.js +211 -0
- package/dist/crush/json-detectors.js.map +1 -0
- package/dist/crush/log-compressor.d.ts +60 -0
- package/dist/crush/log-compressor.js +394 -0
- package/dist/crush/log-compressor.js.map +1 -0
- package/dist/crush/search-compressor.d.ts +60 -0
- package/dist/crush/search-compressor.js +210 -0
- package/dist/crush/search-compressor.js.map +1 -0
- package/dist/email-pull.d.ts +25 -3
- package/dist/email-pull.js +25 -5
- package/dist/email-pull.js.map +1 -1
- package/dist/email-send.d.ts +4 -0
- package/dist/email-send.js +2 -0
- package/dist/email-send.js.map +1 -1
- package/dist/hook.js +49 -1
- package/dist/hook.js.map +1 -1
- package/dist/index.js +487 -449
- package/dist/index.js.map +1 -1
- package/dist/session-id.js +7 -12
- package/dist/session-id.js.map +1 -1
- package/package.json +2 -2
- package/skill/greprag/SKILL.md +2 -2
- package/skill/greprag/docs/email.md +28 -4
- package/skill/mechanic/SKILL.md +1 -1
- 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":"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"}
|
package/dist/commands/email.js
CHANGED
|
@@ -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
|
-
|
|
154
|
-
|
|
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
|
-
|
|
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":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FH,4BA4BC;AAzHD,uCAAyB;AACzB,2CAA6B;AAC7B,sDAA+C;AAC/C,8CAGuB;AACvB,8CAEuB;AAEvB,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAElD,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC;gBAAE,SAAS;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAClE,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe;QACtD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;gEACgE;AAChE,SAAS,MAAM,CAAC,IAAc,EAAE,IAAY;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;iFA2B8D,CAAC;AAElF,mCAAmC;AAC5B,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEzF,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,kCAAkC,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAuC;IAChE,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAY,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,8BAA8B,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,kBAAkB,CAAC;QAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC;QAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC;YAChC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,cAAc,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YAC9E,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,GAAuC;IAC5E,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,2BAAU,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,4BAAe,EAAC;QAC1B,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAClC,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,IAAI,KAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IACxB,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,MAAM,IAAA,2BAAc,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5D,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAChB,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,IAAA,uBAAU,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,WAAW,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;YACpB,CAAC,CAAC,mCAAmC,WAAW,qBAAqB;YACrE,CAAC,CAAC,0CAA0C,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,GAAuC;IAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAExF,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,6CAA6C;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE9C,IAAI,QAAQ,GAAkB,UAAU,IAAI,IAAI,CAAC;IACjD,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,QAAQ,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC/G,CAAC;IACD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YAAC,QAAQ,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC/G,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC7F,CAAC;IAED,MAAM,IAAI,GAAgB;QACxB,EAAE;QACF,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE;QACzC,QAAQ;QACR,QAAQ;QACR,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI;QAC5C,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI;QACrC,WAAW;KACZ,CAAC;IAEF,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QAAC,OAAO,GAAG,IAAA,6BAAgB,EAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,4BAA6B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEjG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAQ,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,gBAAiB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
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
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
//
|
|
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))
|
|
303
|
-
(0, watcher_registry_1.watcherAuditLog)(`arm session=${session ?? 'tenant'} ppid=${process.ppid}
|
|
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)
|