@principles/core 1.235.0 → 1.237.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/principle-tree-ledger.d.ts.map +1 -1
- package/dist/principle-tree-ledger.js +55 -30
- package/dist/principle-tree-ledger.js.map +1 -1
- package/dist/runtime-v2/__tests__/feedback/create-report.test.js +51 -0
- package/dist/runtime-v2/__tests__/feedback/create-report.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.js +1 -1
- package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/feedback/render-markdown.test.js +1 -1
- package/dist/runtime-v2/__tests__/feedback/render-markdown.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +109 -0
- package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
- package/dist/runtime-v2/activation/activation-dispatcher.d.ts +11 -0
- package/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
- package/dist/runtime-v2/activation/activation-dispatcher.js +60 -6
- package/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
- package/dist/runtime-v2/activation/activation-types.d.ts +4 -0
- package/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +34 -0
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js +5 -0
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.d.ts +2 -0
- package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.d.ts.map +1 -0
- package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.js +221 -0
- package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.js.map +1 -0
- package/dist/runtime-v2/feedback/__tests__/mailto-url.test.d.ts +11 -0
- package/dist/runtime-v2/feedback/__tests__/mailto-url.test.d.ts.map +1 -0
- package/dist/runtime-v2/feedback/__tests__/mailto-url.test.js +160 -0
- package/dist/runtime-v2/feedback/__tests__/mailto-url.test.js.map +1 -0
- package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.d.ts +2 -0
- package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.d.ts.map +1 -0
- package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.js +342 -0
- package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.js.map +1 -0
- package/dist/runtime-v2/feedback/create-report.d.ts +7 -1
- package/dist/runtime-v2/feedback/create-report.d.ts.map +1 -1
- package/dist/runtime-v2/feedback/create-report.js +65 -7
- package/dist/runtime-v2/feedback/create-report.js.map +1 -1
- package/dist/runtime-v2/feedback/feedback-types.d.ts +18 -1
- package/dist/runtime-v2/feedback/feedback-types.d.ts.map +1 -1
- package/dist/runtime-v2/feedback/feedback-types.js +19 -12
- package/dist/runtime-v2/feedback/feedback-types.js.map +1 -1
- package/dist/runtime-v2/feedback/index.d.ts +3 -1
- package/dist/runtime-v2/feedback/index.d.ts.map +1 -1
- package/dist/runtime-v2/feedback/index.js +7 -1
- package/dist/runtime-v2/feedback/index.js.map +1 -1
- package/dist/runtime-v2/feedback/pending-agent-draft-store.d.ts +106 -0
- package/dist/runtime-v2/feedback/pending-agent-draft-store.d.ts.map +1 -0
- package/dist/runtime-v2/feedback/pending-agent-draft-store.js +220 -0
- package/dist/runtime-v2/feedback/pending-agent-draft-store.js.map +1 -0
- package/dist/runtime-v2/feedback/privacy-preview.d.ts +16 -0
- package/dist/runtime-v2/feedback/privacy-preview.d.ts.map +1 -1
- package/dist/runtime-v2/feedback/privacy-preview.js +54 -0
- package/dist/runtime-v2/feedback/privacy-preview.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +5 -0
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +9 -0
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.d.ts +2 -0
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.d.ts.map +1 -0
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.js +459 -0
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.js.map +1 -0
- package/dist/runtime-v2/runner/base-peer-runner.d.ts +27 -0
- package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.js +138 -0
- package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/dist/runtime-v2/runner/peer-runner-types.d.ts +9 -0
- package/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
- package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.d.ts +2 -0
- package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.d.ts.map +1 -0
- package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.js +225 -0
- package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.js.map +1 -0
- package/dist/runtime-v2/store/pain/index.d.ts +3 -0
- package/dist/runtime-v2/store/pain/index.d.ts.map +1 -0
- package/dist/runtime-v2/store/pain/index.js +2 -0
- package/dist/runtime-v2/store/pain/index.js.map +1 -0
- package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.d.ts +70 -0
- package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.d.ts.map +1 -0
- package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.js +154 -0
- package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.js.map +1 -0
- package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.js +41 -0
- package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.d.ts +2 -0
- package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.d.ts.map +1 -0
- package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js +442 -0
- package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js.map +1 -0
- package/dist/runtime-v2/store/task/index.d.ts +1 -0
- package/dist/runtime-v2/store/task/index.d.ts.map +1 -1
- package/dist/runtime-v2/store/task/index.js.map +1 -1
- package/dist/runtime-v2/store/task/sqlite-task-store.d.ts +45 -0
- package/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
- package/dist/runtime-v2/store/task/sqlite-task-store.js +205 -0
- package/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
- package/dist/runtime-v2/store/task/task-types.d.ts +60 -0
- package/dist/runtime-v2/store/task/task-types.d.ts.map +1 -0
- package/dist/runtime-v2/store/task/task-types.js +2 -0
- package/dist/runtime-v2/store/task/task-types.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendingAgentDraftStore tests (Task 11).
|
|
3
|
+
*
|
|
4
|
+
* Verifies insertPendingDraft (incl. idempotency), getUnconsumedByTaskId,
|
|
5
|
+
* markConsumed, and listPending against a real SQLite database.
|
|
6
|
+
*
|
|
7
|
+
* ERR checklist:
|
|
8
|
+
* - EP-01 / ERR-001, ERR-005: agent_draft JSON parsed as unknown; no `as`
|
|
9
|
+
* casts on row data — only `as unknown` then narrowed via isRecord/typeof.
|
|
10
|
+
* - EP-03 / ERR-002: write failures return { ok: false, error } (rc-9).
|
|
11
|
+
* - EP-03 / ERR-009, ERR-010: corrupt agent_draft JSON fails loud (rc-3).
|
|
12
|
+
* - EP-05 / ERR-015: insertPendingDraft reads fresh state via SELECT before
|
|
13
|
+
* INSERT/UPDATE; markConsumed uses UPDATE ... WHERE.
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import * as os from 'node:os';
|
|
18
|
+
import * as fs from 'node:fs';
|
|
19
|
+
import { SqliteConnection } from '../../store/sqlite-connection.js';
|
|
20
|
+
import { PendingAgentDraftStore, } from '../pending-agent-draft-store.js';
|
|
21
|
+
function createTestConnection() {
|
|
22
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-test-pending-draft-'));
|
|
23
|
+
return new SqliteConnection(tmpDir);
|
|
24
|
+
}
|
|
25
|
+
function makeDraft(overrides = {}) {
|
|
26
|
+
return {
|
|
27
|
+
summary: 'peer runner failed',
|
|
28
|
+
observedFailure: 'Error: permanent failure',
|
|
29
|
+
commandSummary: 'last tool call: write_file',
|
|
30
|
+
...overrides,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
describe('PendingAgentDraftStore', () => {
|
|
34
|
+
let connection = null;
|
|
35
|
+
let store = null;
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
connection = createTestConnection();
|
|
38
|
+
// Touch getDb() so initSchema() runs (creates pending_agent_drafts table).
|
|
39
|
+
connection.getDb();
|
|
40
|
+
store = new PendingAgentDraftStore(connection);
|
|
41
|
+
});
|
|
42
|
+
afterEach(() => {
|
|
43
|
+
connection?.close();
|
|
44
|
+
});
|
|
45
|
+
describe('insertPendingDraft', () => {
|
|
46
|
+
it('creates a new row with correct fields and returns ok with pad- prefixed id', () => {
|
|
47
|
+
const result = store.insertPendingDraft({
|
|
48
|
+
taskId: 'task-1',
|
|
49
|
+
painId: 'pain-1',
|
|
50
|
+
agentDraft: makeDraft(),
|
|
51
|
+
});
|
|
52
|
+
expect(result.ok).toBe(true);
|
|
53
|
+
if (result.ok) {
|
|
54
|
+
expect(result.id).toMatch(/^pad-/);
|
|
55
|
+
}
|
|
56
|
+
const row = store.getUnconsumedByTaskId('task-1');
|
|
57
|
+
expect(row).not.toBeNull();
|
|
58
|
+
if (!row)
|
|
59
|
+
throw new Error('row is null');
|
|
60
|
+
expect(row.taskId).toBe('task-1');
|
|
61
|
+
expect(row.painId).toBe('pain-1');
|
|
62
|
+
expect(row.consumedAt).toBeNull();
|
|
63
|
+
expect(row.createdAt).toMatch(/^\d{4}-\d{2}-\d{2}T/);
|
|
64
|
+
expect(row.agentDraft.summary).toBe('peer runner failed');
|
|
65
|
+
expect(row.agentDraft.observedFailure).toBe('Error: permanent failure');
|
|
66
|
+
expect(row.agentDraft.commandSummary).toBe('last tool call: write_file');
|
|
67
|
+
});
|
|
68
|
+
it('persists painId as null when not provided', () => {
|
|
69
|
+
store.insertPendingDraft({
|
|
70
|
+
taskId: 'task-no-pain',
|
|
71
|
+
agentDraft: makeDraft(),
|
|
72
|
+
});
|
|
73
|
+
const row = store.getUnconsumedByTaskId('task-no-pain');
|
|
74
|
+
expect(row).not.toBeNull();
|
|
75
|
+
if (!row)
|
|
76
|
+
throw new Error('row is null');
|
|
77
|
+
expect(row.painId).toBeNull();
|
|
78
|
+
});
|
|
79
|
+
it('serializes agentDraft as JSON in the database', () => {
|
|
80
|
+
store.insertPendingDraft({
|
|
81
|
+
taskId: 'task-1',
|
|
82
|
+
agentDraft: makeDraft({ summary: 'special chars: "quotes" \\backslash' }),
|
|
83
|
+
});
|
|
84
|
+
// Read raw row to verify JSON serialization.
|
|
85
|
+
const db = connection.getDb();
|
|
86
|
+
const rawRow = db
|
|
87
|
+
.prepare('SELECT agent_draft FROM pending_agent_drafts WHERE task_id = ?')
|
|
88
|
+
.get('task-1');
|
|
89
|
+
expect(rawRow).toBeDefined();
|
|
90
|
+
if (!rawRow)
|
|
91
|
+
throw new Error('rawRow is null');
|
|
92
|
+
const parsed = JSON.parse(rawRow.agent_draft);
|
|
93
|
+
expect(parsed.summary).toBe('special chars: "quotes" \\backslash');
|
|
94
|
+
});
|
|
95
|
+
it('is idempotent: same taskId second insert updates the existing row, does not create a new one', () => {
|
|
96
|
+
const draft1 = makeDraft({ summary: 'first attempt' });
|
|
97
|
+
const r1 = store.insertPendingDraft({ taskId: 'task-idem', painId: 'pain-1', agentDraft: draft1 });
|
|
98
|
+
expect(r1.ok).toBe(true);
|
|
99
|
+
// Brief delay so createdAt differs (ISO millisecond precision).
|
|
100
|
+
// Use a unique draft so we can verify the update.
|
|
101
|
+
const draft2 = makeDraft({ summary: 'second attempt', observedFailure: 'new failure' });
|
|
102
|
+
const r2 = store.insertPendingDraft({ taskId: 'task-idem', painId: 'pain-2', agentDraft: draft2 });
|
|
103
|
+
expect(r2.ok).toBe(true);
|
|
104
|
+
// The id should be preserved (UPDATE, not INSERT).
|
|
105
|
+
if (r1.ok && r2.ok) {
|
|
106
|
+
expect(r2.id).toBe(r1.id);
|
|
107
|
+
}
|
|
108
|
+
// Count rows for this taskId — should be exactly 1.
|
|
109
|
+
const db = connection.getDb();
|
|
110
|
+
const countRow = db
|
|
111
|
+
.prepare('SELECT COUNT(*) as cnt FROM pending_agent_drafts WHERE task_id = ?')
|
|
112
|
+
.get('task-idem');
|
|
113
|
+
expect(countRow.cnt).toBe(1);
|
|
114
|
+
// The single row should reflect the updated values.
|
|
115
|
+
const row = store.getUnconsumedByTaskId('task-idem');
|
|
116
|
+
expect(row).not.toBeNull();
|
|
117
|
+
if (!row)
|
|
118
|
+
throw new Error('row is null');
|
|
119
|
+
expect(row.agentDraft.summary).toBe('second attempt');
|
|
120
|
+
expect(row.agentDraft.observedFailure).toBe('new failure');
|
|
121
|
+
expect(row.painId).toBe('pain-2');
|
|
122
|
+
});
|
|
123
|
+
it('idempotent update preserves the original row id', () => {
|
|
124
|
+
const r1 = store.insertPendingDraft({
|
|
125
|
+
taskId: 'task-idem-id',
|
|
126
|
+
agentDraft: makeDraft({ summary: 'v1' }),
|
|
127
|
+
});
|
|
128
|
+
expect(r1.ok).toBe(true);
|
|
129
|
+
const originalId = r1.ok ? r1.id : '';
|
|
130
|
+
// Three successive updates — id must stay the same.
|
|
131
|
+
const r2 = store.insertPendingDraft({
|
|
132
|
+
taskId: 'task-idem-id',
|
|
133
|
+
agentDraft: makeDraft({ summary: 'v2' }),
|
|
134
|
+
});
|
|
135
|
+
const r3 = store.insertPendingDraft({
|
|
136
|
+
taskId: 'task-idem-id',
|
|
137
|
+
agentDraft: makeDraft({ summary: 'v3' }),
|
|
138
|
+
});
|
|
139
|
+
expect(r2.ok && r2.id).toBe(originalId);
|
|
140
|
+
expect(r3.ok && r3.id).toBe(originalId);
|
|
141
|
+
const row = store.getUnconsumedByTaskId('task-idem-id');
|
|
142
|
+
expect(row).not.toBeNull();
|
|
143
|
+
if (!row)
|
|
144
|
+
throw new Error('row is null');
|
|
145
|
+
expect(row.id).toBe(originalId);
|
|
146
|
+
expect(row.agentDraft.summary).toBe('v3');
|
|
147
|
+
});
|
|
148
|
+
it('after markConsumed, a new insert creates a fresh row (partial unique index allows it)', () => {
|
|
149
|
+
const r1 = store.insertPendingDraft({
|
|
150
|
+
taskId: 'task-cycle',
|
|
151
|
+
agentDraft: makeDraft({ summary: 'first' }),
|
|
152
|
+
});
|
|
153
|
+
expect(r1.ok).toBe(true);
|
|
154
|
+
const firstId = r1.ok ? r1.id : '';
|
|
155
|
+
// Mark consumed — frees the partial unique index slot for this taskId.
|
|
156
|
+
expect(store.markConsumed(firstId).ok).toBe(true);
|
|
157
|
+
// A new insert should succeed and create a NEW row (different id).
|
|
158
|
+
const r2 = store.insertPendingDraft({
|
|
159
|
+
taskId: 'task-cycle',
|
|
160
|
+
agentDraft: makeDraft({ summary: 'second' }),
|
|
161
|
+
});
|
|
162
|
+
expect(r2.ok).toBe(true);
|
|
163
|
+
const secondId = r2.ok ? r2.id : '';
|
|
164
|
+
expect(secondId).not.toBe(firstId);
|
|
165
|
+
// getUnconsumedByTaskId should return the NEW row, not the consumed one.
|
|
166
|
+
const row = store.getUnconsumedByTaskId('task-cycle');
|
|
167
|
+
expect(row).not.toBeNull();
|
|
168
|
+
if (!row)
|
|
169
|
+
throw new Error('row is null');
|
|
170
|
+
expect(row.id).toBe(secondId);
|
|
171
|
+
expect(row.agentDraft.summary).toBe('second');
|
|
172
|
+
// The consumed row should still exist in the table (just with consumed_at set).
|
|
173
|
+
const db = connection.getDb();
|
|
174
|
+
const countRow = db
|
|
175
|
+
.prepare('SELECT COUNT(*) as cnt FROM pending_agent_drafts WHERE task_id = ?')
|
|
176
|
+
.get('task-cycle');
|
|
177
|
+
expect(countRow.cnt).toBe(2);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('getUnconsumedByTaskId', () => {
|
|
181
|
+
it('returns null when no row exists', () => {
|
|
182
|
+
const row = store.getUnconsumedByTaskId('nonexistent');
|
|
183
|
+
expect(row).toBeNull();
|
|
184
|
+
});
|
|
185
|
+
it('returns null after the only row is consumed', () => {
|
|
186
|
+
store.insertPendingDraft({ taskId: 'task-1', agentDraft: makeDraft() });
|
|
187
|
+
const row = store.getUnconsumedByTaskId('task-1');
|
|
188
|
+
expect(row).not.toBeNull();
|
|
189
|
+
if (!row)
|
|
190
|
+
throw new Error('row is null');
|
|
191
|
+
expect(store.markConsumed(row.id).ok).toBe(true);
|
|
192
|
+
expect(store.getUnconsumedByTaskId('task-1')).toBeNull();
|
|
193
|
+
});
|
|
194
|
+
it('returns the unconsumed row when both a consumed and unconsumed row exist for the same taskId', () => {
|
|
195
|
+
// Insert, consume, then insert again — leaves one consumed + one pending.
|
|
196
|
+
const r1 = store.insertPendingDraft({
|
|
197
|
+
taskId: 'task-multi',
|
|
198
|
+
agentDraft: makeDraft({ summary: 'consumed' }),
|
|
199
|
+
});
|
|
200
|
+
expect(r1.ok).toBe(true);
|
|
201
|
+
expect(store.markConsumed(r1.ok ? r1.id : '').ok).toBe(true);
|
|
202
|
+
const r2 = store.insertPendingDraft({
|
|
203
|
+
taskId: 'task-multi',
|
|
204
|
+
agentDraft: makeDraft({ summary: 'pending' }),
|
|
205
|
+
});
|
|
206
|
+
expect(r2.ok).toBe(true);
|
|
207
|
+
const row = store.getUnconsumedByTaskId('task-multi');
|
|
208
|
+
expect(row).not.toBeNull();
|
|
209
|
+
if (!row)
|
|
210
|
+
throw new Error('row is null');
|
|
211
|
+
expect(row.agentDraft.summary).toBe('pending');
|
|
212
|
+
expect(row.consumedAt).toBeNull();
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe('markConsumed', () => {
|
|
216
|
+
it('sets consumed_at on an existing row', () => {
|
|
217
|
+
const r = store.insertPendingDraft({ taskId: 'task-1', agentDraft: makeDraft() });
|
|
218
|
+
expect(r.ok).toBe(true);
|
|
219
|
+
const id = r.ok ? r.id : '';
|
|
220
|
+
const markResult = store.markConsumed(id);
|
|
221
|
+
expect(markResult.ok).toBe(true);
|
|
222
|
+
// The row should no longer be returned by getUnconsumedByTaskId.
|
|
223
|
+
expect(store.getUnconsumedByTaskId('task-1')).toBeNull();
|
|
224
|
+
// But it should still exist with consumed_at set.
|
|
225
|
+
const db = connection.getDb();
|
|
226
|
+
const rawRow = db
|
|
227
|
+
.prepare('SELECT consumed_at FROM pending_agent_drafts WHERE id = ?')
|
|
228
|
+
.get(id);
|
|
229
|
+
expect(rawRow).toBeDefined();
|
|
230
|
+
if (!rawRow)
|
|
231
|
+
throw new Error('rawRow is null');
|
|
232
|
+
expect(rawRow.consumed_at).not.toBeNull();
|
|
233
|
+
expect(rawRow.consumed_at).toMatch(/^\d{4}-\d{2}-\d{2}T/);
|
|
234
|
+
});
|
|
235
|
+
it('returns ok:true for a non-existent id (silent success per spec)', () => {
|
|
236
|
+
const result = store.markConsumed('pad-does-not-exist');
|
|
237
|
+
expect(result.ok).toBe(true);
|
|
238
|
+
});
|
|
239
|
+
it('is idempotent: marking an already-consumed row again still returns ok', () => {
|
|
240
|
+
const r = store.insertPendingDraft({ taskId: 'task-1', agentDraft: makeDraft() });
|
|
241
|
+
expect(r.ok).toBe(true);
|
|
242
|
+
const id = r.ok ? r.id : '';
|
|
243
|
+
expect(store.markConsumed(id).ok).toBe(true);
|
|
244
|
+
// Second mark — should still succeed (consumed_at just refreshes).
|
|
245
|
+
const second = store.markConsumed(id);
|
|
246
|
+
expect(second.ok).toBe(true);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
describe('listPending', () => {
|
|
250
|
+
it('returns empty array when no rows exist', () => {
|
|
251
|
+
expect(store.listPending()).toEqual([]);
|
|
252
|
+
});
|
|
253
|
+
it('returns only unconsumed rows, ordered by created_at DESC', () => {
|
|
254
|
+
// Insert three drafts with distinct taskIds. Use raw SQL to set
|
|
255
|
+
// deterministic created_at values so the ORDER BY is unambiguous.
|
|
256
|
+
const db = connection.getDb();
|
|
257
|
+
const baseDraft = JSON.stringify(makeDraft());
|
|
258
|
+
db.prepare('INSERT INTO pending_agent_drafts (id, task_id, pain_id, agent_draft, created_at, consumed_at) VALUES (?, ?, ?, ?, ?, ?)').run('pad-old', 'task-old', null, baseDraft, '2026-07-01T00:00:00Z', null);
|
|
259
|
+
db.prepare('INSERT INTO pending_agent_drafts (id, task_id, pain_id, agent_draft, created_at, consumed_at) VALUES (?, ?, ?, ?, ?, ?)').run('pad-mid', 'task-mid', null, baseDraft, '2026-07-02T00:00:00Z', null);
|
|
260
|
+
db.prepare('INSERT INTO pending_agent_drafts (id, task_id, pain_id, agent_draft, created_at, consumed_at) VALUES (?, ?, ?, ?, ?, ?)').run('pad-new', 'task-new', null, baseDraft, '2026-07-03T00:00:00Z', null);
|
|
261
|
+
// Mark the middle one consumed — it should be excluded.
|
|
262
|
+
expect(store.markConsumed('pad-mid').ok).toBe(true);
|
|
263
|
+
const rows = store.listPending();
|
|
264
|
+
expect(rows).toHaveLength(2);
|
|
265
|
+
// DESC order: newest first.
|
|
266
|
+
if (!rows[0])
|
|
267
|
+
throw new Error('rows[0] is null');
|
|
268
|
+
if (!rows[1])
|
|
269
|
+
throw new Error('rows[1] is null');
|
|
270
|
+
expect(rows[0].id).toBe('pad-new');
|
|
271
|
+
expect(rows[1].id).toBe('pad-old');
|
|
272
|
+
});
|
|
273
|
+
it('respects the limit parameter', () => {
|
|
274
|
+
for (let i = 0; i < 5; i++) {
|
|
275
|
+
store.insertPendingDraft({ taskId: `task-${i}`, agentDraft: makeDraft() });
|
|
276
|
+
}
|
|
277
|
+
const rows = store.listPending({ limit: 2 });
|
|
278
|
+
expect(rows).toHaveLength(2);
|
|
279
|
+
});
|
|
280
|
+
it('defaults to limit=100 when no filter provided', () => {
|
|
281
|
+
for (let i = 0; i < 110; i++) {
|
|
282
|
+
store.insertPendingDraft({ taskId: `task-${i}`, agentDraft: makeDraft() });
|
|
283
|
+
}
|
|
284
|
+
const rows = store.listPending();
|
|
285
|
+
expect(rows).toHaveLength(100);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe('agentDraft JSON round-trip (rc-1: treat as unknown)', () => {
|
|
289
|
+
it('preserves nested string fields through serialize/deserialize', () => {
|
|
290
|
+
const draft = {
|
|
291
|
+
summary: 'complex summary with "quotes"',
|
|
292
|
+
observedFailure: 'multi\nline\nfailure',
|
|
293
|
+
commandSummary: 'cmd: foo --bar baz',
|
|
294
|
+
};
|
|
295
|
+
store.insertPendingDraft({ taskId: 'task-complex', agentDraft: draft });
|
|
296
|
+
const row = store.getUnconsumedByTaskId('task-complex');
|
|
297
|
+
expect(row).not.toBeNull();
|
|
298
|
+
if (!row)
|
|
299
|
+
throw new Error('row is null');
|
|
300
|
+
expect(row.agentDraft.summary).toBe(draft.summary);
|
|
301
|
+
expect(row.agentDraft.observedFailure).toBe(draft.observedFailure);
|
|
302
|
+
expect(row.agentDraft.commandSummary).toBe(draft.commandSummary);
|
|
303
|
+
});
|
|
304
|
+
it('preserves a draft with only the required summary field', () => {
|
|
305
|
+
const draft = { summary: 'minimal' };
|
|
306
|
+
store.insertPendingDraft({ taskId: 'task-min', agentDraft: draft });
|
|
307
|
+
const row = store.getUnconsumedByTaskId('task-min');
|
|
308
|
+
expect(row).not.toBeNull();
|
|
309
|
+
if (!row)
|
|
310
|
+
throw new Error('row is null');
|
|
311
|
+
expect(row.agentDraft.summary).toBe('minimal');
|
|
312
|
+
expect(row.agentDraft.observedFailure).toBeUndefined();
|
|
313
|
+
expect(row.agentDraft.commandSummary).toBeUndefined();
|
|
314
|
+
});
|
|
315
|
+
it('fails loud when agent_draft is corrupt JSON (rc-3: no silent fallback)', () => {
|
|
316
|
+
// Insert a row with invalid JSON directly via raw SQL.
|
|
317
|
+
const db = connection.getDb();
|
|
318
|
+
db.prepare('INSERT INTO pending_agent_drafts (id, task_id, pain_id, agent_draft, created_at, consumed_at) VALUES (?, ?, ?, ?, ?, ?)').run('pad-corrupt', 'task-corrupt', null, '{not valid json', '2026-07-04T00:00:00Z', null);
|
|
319
|
+
// getUnconsumedByTaskId should throw (fail loud) rather than return
|
|
320
|
+
// a row with a raw string masquerading as AgentDraftPayload.
|
|
321
|
+
expect(() => store.getUnconsumedByTaskId('task-corrupt')).toThrow(/corrupt agent_draft JSON/);
|
|
322
|
+
// listPending should also throw on the same corrupt row.
|
|
323
|
+
expect(() => store.listPending()).toThrow(/corrupt agent_draft JSON/);
|
|
324
|
+
});
|
|
325
|
+
it('fails loud when agent_draft JSON does not match AgentDraftPayload shape (rc-3)', () => {
|
|
326
|
+
const db = connection.getDb();
|
|
327
|
+
// summary is missing — fails isAgentDraftPayload validation.
|
|
328
|
+
db.prepare('INSERT INTO pending_agent_drafts (id, task_id, pain_id, agent_draft, created_at, consumed_at) VALUES (?, ?, ?, ?, ?, ?)').run('pad-shape', 'task-shape', null, '{"observedFailure":"x"}', '2026-07-04T00:00:00Z', null);
|
|
329
|
+
expect(() => store.getUnconsumedByTaskId('task-shape')).toThrow(/failed shape validation/);
|
|
330
|
+
});
|
|
331
|
+
it('fails loud when agent_draft is empty string (rc-3: corrupt JSON)', () => {
|
|
332
|
+
const db = connection.getDb();
|
|
333
|
+
// Empty string is a string (passes the typeof guard) but is not valid
|
|
334
|
+
// JSON — JSON.parse('') throws SyntaxError. The store must fail loud
|
|
335
|
+
// rather than return a row whose agentDraft is an empty string.
|
|
336
|
+
db.prepare('INSERT INTO pending_agent_drafts (id, task_id, pain_id, agent_draft, created_at, consumed_at) VALUES (?, ?, ?, ?, ?, ?)').run('pad-empty', 'task-empty', null, '', '2026-07-04T00:00:00Z', null);
|
|
337
|
+
// Empty string fails JSON.parse — should fail loud as corrupt JSON.
|
|
338
|
+
expect(() => store.getUnconsumedByTaskId('task-empty')).toThrow(/corrupt agent_draft JSON/);
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
//# sourceMappingURL=pending-agent-draft-store.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-agent-draft-store.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FeedbackReport, ValidationError } from './feedback-types.js';
|
|
2
|
+
import type { PendingAgentDraftStore } from './pending-agent-draft-store.js';
|
|
2
3
|
export type CreateReportResult = {
|
|
3
4
|
ok: true;
|
|
4
5
|
report: FeedbackReport;
|
|
@@ -9,6 +10,11 @@ export type CreateReportResult = {
|
|
|
9
10
|
/**
|
|
10
11
|
* Create a FeedbackReport from untrusted input + diagnostics.
|
|
11
12
|
* No `as` casts on untrusted values. Failure paths return structured errors.
|
|
13
|
+
*
|
|
14
|
+
* `maintainerEmail` (optional): when provided as a non-empty string, a
|
|
15
|
+
* `mailto:` URL is built into `report.outputs.mailtoUrl`. When omitted or
|
|
16
|
+
* empty, `mailtoUrl` is ''. The email value itself is not validated for
|
|
17
|
+
* shape — callers decide what address to pass.
|
|
12
18
|
*/
|
|
13
|
-
export declare function createFeedbackReport(input: unknown, diagnostics: unknown): CreateReportResult;
|
|
19
|
+
export declare function createFeedbackReport(input: unknown, diagnostics: unknown, maintainerEmail?: string, pendingAgentDraftStore?: PendingAgentDraftStore): CreateReportResult;
|
|
14
20
|
//# sourceMappingURL=create-report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-report.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/feedback/create-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EAId,eAAe,
|
|
1
|
+
{"version":3,"file":"create-report.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/feedback/create-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EAId,eAAe,EAIhB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAiI7C;;;;;;;;GAQG;AAEH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,OAAO,EACpB,eAAe,CAAC,EAAE,MAAM,EACxB,sBAAsB,CAAC,EAAE,sBAAsB,GAC9C,kBAAkB,CA6KpB"}
|
|
@@ -8,7 +8,7 @@ import { isRecord, isString, isUserSeverity, normalizeFeedbackDraftInput, } from
|
|
|
8
8
|
import { redactAbsolutePaths, redactTokenLikeValues, redactEnvLikeValues, redactSensitiveFields, } from './redact-sensitive.js';
|
|
9
9
|
import { renderReportMarkdown } from './render-markdown.js';
|
|
10
10
|
import { buildGitHubIssueDraftUrl } from './render-github-url.js';
|
|
11
|
-
import { buildPrivacyPreview, buildEmailText } from './privacy-preview.js';
|
|
11
|
+
import { buildPrivacyPreview, buildEmailText, buildMailtoUrl } from './privacy-preview.js';
|
|
12
12
|
const MAX_DESCRIPTION_FOR_REDACT = 8000;
|
|
13
13
|
const MAX_STEPS_FOR_REDACT = 8000;
|
|
14
14
|
const MAX_CONTEXT_REFS = 12;
|
|
@@ -137,8 +137,14 @@ function collectDiagnostics(diagnostics) {
|
|
|
137
137
|
/**
|
|
138
138
|
* Create a FeedbackReport from untrusted input + diagnostics.
|
|
139
139
|
* No `as` casts on untrusted values. Failure paths return structured errors.
|
|
140
|
+
*
|
|
141
|
+
* `maintainerEmail` (optional): when provided as a non-empty string, a
|
|
142
|
+
* `mailto:` URL is built into `report.outputs.mailtoUrl`. When omitted or
|
|
143
|
+
* empty, `mailtoUrl` is ''. The email value itself is not validated for
|
|
144
|
+
* shape — callers decide what address to pass.
|
|
140
145
|
*/
|
|
141
|
-
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/max-params -- Task 13: pendingAgentDraftStore added for agent draft merge
|
|
147
|
+
export function createFeedbackReport(input, diagnostics, maintainerEmail, pendingAgentDraftStore) {
|
|
142
148
|
// Step 1: validate and normalize the input
|
|
143
149
|
const norm = normalizeFeedbackDraftInput(input);
|
|
144
150
|
if (!norm.ok) {
|
|
@@ -172,11 +178,44 @@ export function createFeedbackReport(input, diagnostics) {
|
|
|
172
178
|
if (typeof actualInput === 'string' && actualBehavior !== actualInput) {
|
|
173
179
|
redactionNotes.push('actualBehavior was redacted');
|
|
174
180
|
}
|
|
181
|
+
// Task 13: If taskId is provided and a pending agent draft exists, merge it.
|
|
182
|
+
// User-provided agentDraft (from input.agentDraft) takes priority — the
|
|
183
|
+
// agent draft from the store is a fallback for when the user didn't write one.
|
|
184
|
+
let mergedAgentDraft = draft.agentDraft;
|
|
185
|
+
let consumedDraftId;
|
|
186
|
+
if (draft.taskId && pendingAgentDraftStore) {
|
|
187
|
+
try {
|
|
188
|
+
const pendingDraft = pendingAgentDraftStore.getUnconsumedByTaskId(draft.taskId);
|
|
189
|
+
if (pendingDraft) {
|
|
190
|
+
consumedDraftId = pendingDraft.id;
|
|
191
|
+
if (!mergedAgentDraft) {
|
|
192
|
+
// User didn't provide agentDraft — use the store's draft
|
|
193
|
+
mergedAgentDraft = {
|
|
194
|
+
summary: pendingDraft.agentDraft.summary,
|
|
195
|
+
};
|
|
196
|
+
if (pendingDraft.agentDraft.observedFailure) {
|
|
197
|
+
mergedAgentDraft.observedFailure = pendingDraft.agentDraft.observedFailure;
|
|
198
|
+
}
|
|
199
|
+
if (pendingDraft.agentDraft.commandSummary) {
|
|
200
|
+
mergedAgentDraft.commandSummary = pendingDraft.agentDraft.commandSummary;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// If user provided agentDraft, we still mark the store's draft as consumed
|
|
204
|
+
// (the user's report supersedes the agent's draft — no need to keep it pending)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
// rc-9: don't silently swallow store errors — record to redactionNotes
|
|
209
|
+
// and continue without the agent draft. The report still gets created.
|
|
210
|
+
redactionNotes.push(`agent draft lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
175
213
|
// Step 4: scrub the diagnosticSummary via redactSensitiveFields (defense in
|
|
176
214
|
// depth — versions and platform should already be low-sensitivity, but
|
|
177
215
|
// user-injected values must not leak tokens through the field structure).
|
|
178
216
|
const scrubbed = redactSensitiveFields(diagnosticSummary);
|
|
179
217
|
const safeDiagnostic = scrubbed.ok
|
|
218
|
+
// runtime-contract-exempt: ERR-001 redactSensitiveFields is a shape-preserving recursive redactor — it only replaces string values and truncates, never changes object structure. The output is guaranteed to match the input's DiagnosticSummary shape by construction.
|
|
180
219
|
? scrubbed.value
|
|
181
220
|
: diagnosticSummary;
|
|
182
221
|
if (scrubbed.ok) {
|
|
@@ -191,15 +230,18 @@ export function createFeedbackReport(input, diagnostics) {
|
|
|
191
230
|
// Step 6: build contextRefs from the context object
|
|
192
231
|
const contextRefs = [];
|
|
193
232
|
if (draft.context) {
|
|
194
|
-
|
|
233
|
+
const ctxSource = draft.context.source;
|
|
234
|
+
pushContextRef(contextRefs, 'source', { id: ctxSource, label: ctxSource !== undefined ? `source=${ctxSource}` : undefined });
|
|
235
|
+
pushContextRef(contextRefs, 'sourceDetail', { id: draft.context.sourceDetail });
|
|
195
236
|
pushContextRef(contextRefs, 'page', { id: draft.context.page });
|
|
196
237
|
pushContextRef(contextRefs, 'painId', { id: draft.context.painId });
|
|
197
238
|
pushContextRef(contextRefs, 'principleId', { id: draft.context.principleId });
|
|
198
239
|
pushContextRef(contextRefs, 'approvalId', { id: draft.context.approvalId });
|
|
199
240
|
pushContextRef(contextRefs, 'activationId', { id: draft.context.activationId });
|
|
200
241
|
pushContextRef(contextRefs, 'updateAttemptId', { id: draft.context.updateAttemptId });
|
|
242
|
+
pushContextRef(contextRefs, 'taskId', { id: draft.context.taskId });
|
|
201
243
|
}
|
|
202
|
-
if (
|
|
244
|
+
if (mergedAgentDraft) {
|
|
203
245
|
pushContextRef(contextRefs, 'agentDraft', { id: 'present', label: 'agentDraft attached' });
|
|
204
246
|
}
|
|
205
247
|
// Step 7: build the privacy preview
|
|
@@ -227,13 +269,13 @@ export function createFeedbackReport(input, diagnostics) {
|
|
|
227
269
|
diagnosticSummary: safeDiagnostic,
|
|
228
270
|
contextRefs,
|
|
229
271
|
privacy,
|
|
230
|
-
outputs: { markdown: '', emailText: '', githubIssueUrl: '' },
|
|
272
|
+
outputs: { markdown: '', emailText: '', githubIssueUrl: '', mailtoUrl: '' },
|
|
231
273
|
};
|
|
232
274
|
// Surface the agent-attached evidence in the report so it propagates to
|
|
233
275
|
// markdown, emailText, and any later consumer.
|
|
234
276
|
// Redact sensitive values (paths/tokens/env) from agentDraft string fields.
|
|
235
|
-
if (
|
|
236
|
-
const ad =
|
|
277
|
+
if (mergedAgentDraft) {
|
|
278
|
+
const ad = mergedAgentDraft;
|
|
237
279
|
report.agentDraft = {
|
|
238
280
|
summary: redactEnvLikeValues(redactAbsolutePaths(redactTokenLikeValues(ad.summary))),
|
|
239
281
|
};
|
|
@@ -252,6 +294,22 @@ export function createFeedbackReport(input, diagnostics) {
|
|
|
252
294
|
const shortSummary = `type=${draft.type}; ${description.slice(0, 200)}`;
|
|
253
295
|
const urlResult = buildGitHubIssueDraftUrl(redactedTitle, draft.type, shortSummary);
|
|
254
296
|
report.outputs.githubIssueUrl = urlResult.ok ? urlResult.url : '';
|
|
297
|
+
// Step 11: build the mailto: URL when a maintainer email is provided.
|
|
298
|
+
// buildMailtoUrl returns '' for empty/missing email, so the output is
|
|
299
|
+
// always a string (callers without an email get an empty mailtoUrl).
|
|
300
|
+
report.outputs.mailtoUrl = buildMailtoUrl(report, maintainerEmail ?? '');
|
|
301
|
+
// Task 13: Mark the pending agent draft as consumed now that the report
|
|
302
|
+
// has been successfully built. Idempotent — safe to call even if the
|
|
303
|
+
// draft was already consumed or never existed.
|
|
304
|
+
if (consumedDraftId && pendingAgentDraftStore) {
|
|
305
|
+
try {
|
|
306
|
+
pendingAgentDraftStore.markConsumed(consumedDraftId);
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
// rc-9: record the failure but don't fail the report creation
|
|
310
|
+
report.privacy.redactionNotes.push(`agent draft markConsumed failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
255
313
|
return { ok: true, report };
|
|
256
314
|
}
|
|
257
315
|
//# sourceMappingURL=create-report.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-report.js","sourceRoot":"","sources":["../../../src/runtime-v2/feedback/create-report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-report.js","sourceRoot":"","sources":["../../../src/runtime-v2/feedback/create-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,21 @@ export type FeedbackType = 'bug' | 'confusing' | 'privacy_concern' | 'feature_re
|
|
|
2
2
|
export type UserSeverity = 'low' | 'medium' | 'high';
|
|
3
3
|
export type FeedbackSource = 'console' | 'cli' | 'agent';
|
|
4
4
|
export interface FeedbackContext {
|
|
5
|
-
source
|
|
5
|
+
source?: FeedbackSource;
|
|
6
|
+
/**
|
|
7
|
+
* P1-3 (rc-9): Preserves the original `source` value when it is not a valid
|
|
8
|
+
* FeedbackSource enum. For example, `source=failed_tasks_page` is mapped to
|
|
9
|
+
* `source='console'` with `sourceDetail='failed_tasks_page'` so the
|
|
10
|
+
* maintainer can see the concrete entry point without losing the enum.
|
|
11
|
+
*/
|
|
12
|
+
sourceDetail?: string;
|
|
6
13
|
page?: string;
|
|
7
14
|
painId?: string;
|
|
8
15
|
principleId?: string;
|
|
9
16
|
approvalId?: string;
|
|
10
17
|
activationId?: string;
|
|
11
18
|
updateAttemptId?: string;
|
|
19
|
+
taskId?: string;
|
|
12
20
|
}
|
|
13
21
|
export interface AgentDraft {
|
|
14
22
|
summary: string;
|
|
@@ -38,6 +46,12 @@ export interface FeedbackDraftInput {
|
|
|
38
46
|
userSeverity?: unknown;
|
|
39
47
|
context?: unknown;
|
|
40
48
|
agentDraft?: unknown;
|
|
49
|
+
/**
|
|
50
|
+
* Task 13: top-level taskId shortcut, independent from context.taskId.
|
|
51
|
+
* When provided, createFeedbackReport uses it to look up a pending agent
|
|
52
|
+
* draft in PendingAgentDraftStore and merge it into the report.
|
|
53
|
+
*/
|
|
54
|
+
taskId?: unknown;
|
|
41
55
|
}
|
|
42
56
|
/**
|
|
43
57
|
* The narrowed shape returned by `normalizeFeedbackDraftInput` on success.
|
|
@@ -49,6 +63,8 @@ export interface NormalizedDraft {
|
|
|
49
63
|
userText: FeedbackUserText;
|
|
50
64
|
context?: FeedbackContext;
|
|
51
65
|
agentDraft?: AgentDraft;
|
|
66
|
+
/** Task 13: top-level taskId (validated string), separate from context.taskId. */
|
|
67
|
+
taskId?: string;
|
|
52
68
|
}
|
|
53
69
|
export interface RecentEvent {
|
|
54
70
|
type: string;
|
|
@@ -92,6 +108,7 @@ export interface FeedbackReport {
|
|
|
92
108
|
markdown: string;
|
|
93
109
|
emailText: string;
|
|
94
110
|
githubIssueUrl: string;
|
|
111
|
+
mailtoUrl: string;
|
|
95
112
|
};
|
|
96
113
|
}
|
|
97
114
|
export type ValidationError = {
|