@aviaratech/ai-delivery 0.3.20 → 0.3.22
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/README.md +82 -1
- package/dist/agent.d.ts +5 -1
- package/dist/agent.js +2 -1
- package/dist/agent.js.map +1 -1
- package/dist/cli.js +32 -1
- package/dist/cli.js.map +1 -1
- package/dist/cliResult.test.js +28 -0
- package/dist/cliResult.test.js.map +1 -1
- package/dist/dispatch.js +21 -6
- package/dist/dispatch.js.map +1 -1
- package/dist/github/relationships.d.ts +4 -1
- package/dist/github/relationships.js +30 -3
- package/dist/github/relationships.js.map +1 -1
- package/dist/issue.d.ts +79 -1
- package/dist/issue.js +432 -4
- package/dist/issue.js.map +1 -1
- package/dist/issueJournal.d.ts +104 -0
- package/dist/issueJournal.js +145 -0
- package/dist/issueJournal.js.map +1 -0
- package/dist/issueJournal.test.d.ts +1 -0
- package/dist/issueJournal.test.js +223 -0
- package/dist/issueJournal.test.js.map +1 -0
- package/dist/issueTracking.test.d.ts +1 -0
- package/dist/issueTracking.test.js +624 -0
- package/dist/issueTracking.test.js.map +1 -0
- package/dist/lifecycle.test.js +70 -6
- package/dist/lifecycle.test.js.map +1 -1
- package/dist/mcp/tools.d.ts +89 -0
- package/dist/mcp/tools.js +47 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/pr.d.ts +1 -1
- package/dist/pr.js +23 -0
- package/dist/pr.js.map +1 -1
- package/dist/setup.test.js +4 -2
- package/dist/setup.test.js.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
- package/plugins/ai-delivery/.claude-plugin/plugin.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'vitest';
|
|
3
|
+
import { getAiDeliveryMcpTool } from './mcp/tools.js';
|
|
4
|
+
import * as issue from './issue.js';
|
|
5
|
+
import { renderJournal, acceptanceCriteria, issueFollowUps } from './issueJournal.js';
|
|
6
|
+
import { execFileSync } from 'node:child_process';
|
|
7
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
test('journal tool validates all five typed templates before dispatch', () => {
|
|
11
|
+
const tool = getAiDeliveryMcpTool('issue_comment');
|
|
12
|
+
assert.ok(tool, 'issue_comment must be exposed');
|
|
13
|
+
const common = {
|
|
14
|
+
issueNumber: 17,
|
|
15
|
+
summary: 'Parser work is underway.',
|
|
16
|
+
status: 'In progress',
|
|
17
|
+
nextStep: 'Run checks',
|
|
18
|
+
nextDate: '2026-10-09',
|
|
19
|
+
keyNumbers: ['3 checks'],
|
|
20
|
+
evidence: ['https://github.com/example/widget/pull/23'],
|
|
21
|
+
};
|
|
22
|
+
for (const input of [
|
|
23
|
+
{ ...common, kind: 'start', outcome: 'Deliver a safe parser' },
|
|
24
|
+
{ ...common, kind: 'progress', done: ['Added validation'], decisionNeeded: 'None' },
|
|
25
|
+
{ ...common, kind: 'decision', decision: 'Use the existing parser', rationale: 'Preserves the contract' },
|
|
26
|
+
{ ...common, kind: 'blocker', blocker: 'Review pending', resolution: 'Independent acceptance' },
|
|
27
|
+
{
|
|
28
|
+
...common,
|
|
29
|
+
kind: 'closeout',
|
|
30
|
+
acceptance: [{ criterion: 'Reject malformed input', evidence: 'https://github.com/example/widget/pull/23' }],
|
|
31
|
+
followUps: [],
|
|
32
|
+
},
|
|
33
|
+
])
|
|
34
|
+
assert.equal(tool.inputSchema.safeParse(input).success, true);
|
|
35
|
+
for (const input of [
|
|
36
|
+
{ ...common, kind: 'progress' },
|
|
37
|
+
{ ...common, kind: 'start', outcome: '' },
|
|
38
|
+
{ ...common, kind: 'closeout', acceptance: [], followUps: [] },
|
|
39
|
+
{
|
|
40
|
+
...common,
|
|
41
|
+
kind: 'decision',
|
|
42
|
+
decision: 'Use parser',
|
|
43
|
+
rationale: 'Works',
|
|
44
|
+
evidence: ['/Users/operator/checks.log'],
|
|
45
|
+
},
|
|
46
|
+
{ ...common, kind: 'start', outcome: 'Deliver', nextDate: 'tomorrow' },
|
|
47
|
+
])
|
|
48
|
+
assert.equal(tool.inputSchema.safeParse(input).success, false);
|
|
49
|
+
});
|
|
50
|
+
test('canonical comment writes read back and recover a lost response without duplicates', async () => {
|
|
51
|
+
const comment = issue.commentIssue;
|
|
52
|
+
assert.ok(comment, 'canonical comment writer must exist');
|
|
53
|
+
const agent = await import('./agent.js');
|
|
54
|
+
assert.equal(agent.commentIssue, comment);
|
|
55
|
+
assert.equal(agent.ISSUE_COMMENT_BODY_LIMIT, 65536);
|
|
56
|
+
const root = mkdtempSync(join(tmpdir(), 'ai-delivery-journal-'));
|
|
57
|
+
execFileSync('git', ['init', '-q', '-b', 'main'], { cwd: root });
|
|
58
|
+
const stored = [];
|
|
59
|
+
let loseResponse = true;
|
|
60
|
+
let corruptReadback = false;
|
|
61
|
+
let authorCalls = 0;
|
|
62
|
+
const context = {
|
|
63
|
+
root,
|
|
64
|
+
repo: { owner: 'example', repo: 'widget' },
|
|
65
|
+
clients: {
|
|
66
|
+
role: 'author',
|
|
67
|
+
authenticatedAuthor: async () => {
|
|
68
|
+
authorCalls += 1;
|
|
69
|
+
return { actorLogin: 'operator', credentialIdentity: 'user:1' };
|
|
70
|
+
},
|
|
71
|
+
rest: {
|
|
72
|
+
issues: {
|
|
73
|
+
get: async () => ({ data: { number: 17, state: 'open' } }),
|
|
74
|
+
listComments: async () => ({ data: stored }),
|
|
75
|
+
createComment: async (input) => {
|
|
76
|
+
const id = 91 + stored.length;
|
|
77
|
+
const data = {
|
|
78
|
+
id,
|
|
79
|
+
body: input.body,
|
|
80
|
+
html_url: `https://github.com/example/widget/issues/17#issuecomment-${String(id)}`,
|
|
81
|
+
issue_url: 'https://api.github.com/repos/example/widget/issues/17',
|
|
82
|
+
user: { login: 'operator' },
|
|
83
|
+
};
|
|
84
|
+
stored.push(data);
|
|
85
|
+
if (loseResponse) {
|
|
86
|
+
loseResponse = false;
|
|
87
|
+
throw new Error('response lost');
|
|
88
|
+
}
|
|
89
|
+
return { data };
|
|
90
|
+
},
|
|
91
|
+
getComment: async (input) => ({
|
|
92
|
+
data: {
|
|
93
|
+
...stored.find((item) => item.id === input.comment_id),
|
|
94
|
+
...(corruptReadback ? { body: 'changed' } : {}),
|
|
95
|
+
},
|
|
96
|
+
}),
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
const input = {
|
|
102
|
+
issueNumber: 17,
|
|
103
|
+
kind: 'start',
|
|
104
|
+
summary: 'Implementation started.',
|
|
105
|
+
status: 'In progress',
|
|
106
|
+
outcome: 'Deliver validation',
|
|
107
|
+
keyNumbers: [],
|
|
108
|
+
evidence: [],
|
|
109
|
+
nextStep: 'Run checks',
|
|
110
|
+
nextDate: '2026-10-09',
|
|
111
|
+
};
|
|
112
|
+
try {
|
|
113
|
+
await assert.rejects(comment(context, input), /response lost/u);
|
|
114
|
+
const recovered = await comment(context, input);
|
|
115
|
+
assert.equal(recovered.commentId, 91);
|
|
116
|
+
assert.equal(recovered.reused, true);
|
|
117
|
+
assert.equal(stored.length, 1);
|
|
118
|
+
assert.match(recovered.body, /^Implementation started\./u);
|
|
119
|
+
corruptReadback = true;
|
|
120
|
+
await assert.rejects(comment(context, input), /readback/u);
|
|
121
|
+
corruptReadback = false;
|
|
122
|
+
const rawBody = `\r\n <details>\n<summary>Prior content</summary>\n<pre>${'🙂 & prior title/body\r\n'.repeat(600)}</pre>\n</details> \t\n`;
|
|
123
|
+
assert.ok(rawBody.length > 10000);
|
|
124
|
+
loseResponse = true;
|
|
125
|
+
await assert.rejects(comment(context, { issueNumber: 17, body: rawBody }), /response lost/u);
|
|
126
|
+
const rawRecovered = await comment(context, { issueNumber: 17, body: rawBody });
|
|
127
|
+
assert.equal(rawRecovered.body, rawBody, 'raw history content must remain exact and unwrapped');
|
|
128
|
+
assert.equal(rawRecovered.commentId, 92);
|
|
129
|
+
assert.equal(rawRecovered.reused, true);
|
|
130
|
+
assert.equal(stored.length, 2);
|
|
131
|
+
assert.equal(stored[1].body, rawBody, 'no journal marker or unrequested content is appended');
|
|
132
|
+
const maximumBody = '🙂'.repeat(32768);
|
|
133
|
+
assert.equal(maximumBody.length, 65536);
|
|
134
|
+
assert.equal((await comment(context, { issueNumber: 17, body: maximumBody })).body, maximumBody);
|
|
135
|
+
assert.equal(stored.length, 3);
|
|
136
|
+
const beforeInvalid = authorCalls;
|
|
137
|
+
for (const body of ['', ' \r\n\t ', 'x'.repeat(65537), `${maximumBody}🙂`])
|
|
138
|
+
await assert.rejects(comment(context, { issueNumber: 17, body }), /comment body/u);
|
|
139
|
+
await assert.rejects(comment(context, {
|
|
140
|
+
...input,
|
|
141
|
+
status: 'x'.repeat(9000),
|
|
142
|
+
outcome: 'x'.repeat(9000),
|
|
143
|
+
nextStep: 'x'.repeat(9000),
|
|
144
|
+
details: 'x'.repeat(9000),
|
|
145
|
+
keyNumbers: Array.from({ length: 4 }, () => 'x'.repeat(9000)),
|
|
146
|
+
}), /comment body/u);
|
|
147
|
+
await assert.rejects(comment(context, { issueNumber: 17, body: rawBody }, 'start:legacy'), /lifecycle journal key/u);
|
|
148
|
+
assert.equal(authorCalls, beforeInvalid, 'unsupported payloads fail before authentication or mutation');
|
|
149
|
+
assert.equal(stored.length, 3);
|
|
150
|
+
corruptReadback = true;
|
|
151
|
+
await assert.rejects(comment(context, { issueNumber: 17, body: rawBody }), /readback/u);
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
rmSync(root, { recursive: true, force: true });
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
test('length cap keeps the summary visible and moves every excess field into collapsed detail', () => {
|
|
158
|
+
const rendered = renderJournal({
|
|
159
|
+
issueNumber: 17,
|
|
160
|
+
kind: 'progress',
|
|
161
|
+
summary: 'Validation is implemented.',
|
|
162
|
+
status: 'In progress',
|
|
163
|
+
done: ['A'.repeat(900)],
|
|
164
|
+
decisionNeeded: 'None',
|
|
165
|
+
keyNumbers: ['7 tests'],
|
|
166
|
+
evidence: ['https://github.com/example/widget/pull/23'],
|
|
167
|
+
nextStep: 'Review',
|
|
168
|
+
nextDate: '2026-10-09',
|
|
169
|
+
lengthCap: 600,
|
|
170
|
+
});
|
|
171
|
+
assert.equal(rendered.split('\n')[0], 'Validation is implemented.');
|
|
172
|
+
assert.match(rendered, /<details>/u);
|
|
173
|
+
assert.match(rendered, /A{900}/u);
|
|
174
|
+
assert.match(rendered, /7 tests/u);
|
|
175
|
+
assert.match(rendered, /https:\/\/github.com\/example\/widget\/pull\/23/u);
|
|
176
|
+
});
|
|
177
|
+
test('automatic closeout selects acceptance checkboxes and declared follow-ups without swallowing other sections', () => {
|
|
178
|
+
const body = '## Outcome\nShip.\n\n## Acceptance Criteria\n- [ ] Validation works\n- [x] Recovery works\n\n## Follow-ups\n- Track post-release adoption: https://github.com/example/widget/issues/24\n\n## Non-goals\n- [ ] Not an acceptance criterion';
|
|
179
|
+
assert.deepEqual(acceptanceCriteria(body), ['Validation works', 'Recovery works']);
|
|
180
|
+
assert.deepEqual(issueFollowUps(body), ['Track post-release adoption: https://github.com/example/widget/issues/24']);
|
|
181
|
+
});
|
|
182
|
+
test('closeout accepts every readiness heading level and stops at the next heading', () => {
|
|
183
|
+
for (let level = 1; level <= 6; level += 1) {
|
|
184
|
+
for (let indent = 0; indent <= 3; indent += 1) {
|
|
185
|
+
const heading = `${' '.repeat(indent)}${'#'.repeat(level)}`;
|
|
186
|
+
const body = `${heading}\tAcceptance Criteria\n-[ ] Compact bullet\n*\t[X]\tTabbed bullet\n+ [x] Checked bullet\n###### Other section\n- [ ] Excluded\n${heading} Follow-ups\n- [ ] Deferred work\n# Other section\n- Excluded`;
|
|
187
|
+
assert.deepEqual(acceptanceCriteria(body), ['Compact bullet', 'Tabbed bullet', 'Checked bullet']);
|
|
188
|
+
assert.deepEqual(issueFollowUps(body), ['Deferred work']);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
test('journal evidence rejects local hosts and IP literals while accepting public DNS names', () => {
|
|
193
|
+
const tool = getAiDeliveryMcpTool('issue_comment');
|
|
194
|
+
const input = {
|
|
195
|
+
issueNumber: 17,
|
|
196
|
+
kind: 'start',
|
|
197
|
+
summary: 'Work started.',
|
|
198
|
+
status: 'Started',
|
|
199
|
+
outcome: 'Deliver validation',
|
|
200
|
+
keyNumbers: [],
|
|
201
|
+
nextStep: 'Run checks',
|
|
202
|
+
nextDate: null,
|
|
203
|
+
};
|
|
204
|
+
for (const host of [
|
|
205
|
+
'localhost',
|
|
206
|
+
'localhost.',
|
|
207
|
+
'api.localhost',
|
|
208
|
+
'runner.local',
|
|
209
|
+
'127.0.0.1',
|
|
210
|
+
'10.1.2.3',
|
|
211
|
+
'172.16.0.1',
|
|
212
|
+
'192.168.1.1',
|
|
213
|
+
'169.254.1.1',
|
|
214
|
+
'[::1]',
|
|
215
|
+
'[fd00::1]',
|
|
216
|
+
'[fe80::1]',
|
|
217
|
+
'8.8.8.8',
|
|
218
|
+
])
|
|
219
|
+
assert.equal(tool.inputSchema.safeParse({ ...input, evidence: [`https://${host}/evidence`] }).success, false, host);
|
|
220
|
+
for (const host of ['github.com', '10.docs.example.com'])
|
|
221
|
+
assert.equal(tool.inputSchema.safeParse({ ...input, evidence: [`https://${host}/evidence`] }).success, true, host);
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=issueJournal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueJournal.test.js","sourceRoot":"","sources":["../src/issueJournal.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|