@aviaratech/ai-delivery 0.3.24 → 0.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CONTRIBUTING.md +157 -16
  2. package/README.md +20 -0
  3. package/dist/agentReadiness.test.d.ts +1 -0
  4. package/dist/agentReadiness.test.js +139 -0
  5. package/dist/agentReadiness.test.js.map +1 -0
  6. package/dist/cli.js +16 -5
  7. package/dist/cli.js.map +1 -1
  8. package/dist/contributorChecks.test.d.ts +1 -0
  9. package/dist/contributorChecks.test.js +1010 -0
  10. package/dist/contributorChecks.test.js.map +1 -0
  11. package/dist/currentConsumer.test.d.ts +1 -0
  12. package/dist/currentConsumer.test.js +832 -0
  13. package/dist/currentConsumer.test.js.map +1 -0
  14. package/dist/dependencyCompatibility.test.d.ts +1 -0
  15. package/dist/dependencyCompatibility.test.js +175 -0
  16. package/dist/dependencyCompatibility.test.js.map +1 -0
  17. package/dist/directoryIndependent.test.js +91 -1
  18. package/dist/directoryIndependent.test.js.map +1 -1
  19. package/dist/dispatch.js +6 -0
  20. package/dist/dispatch.js.map +1 -1
  21. package/dist/issue.d.ts +7 -0
  22. package/dist/issue.js +1 -1
  23. package/dist/issue.js.map +1 -1
  24. package/dist/issueJournal.test.js +88 -6
  25. package/dist/issueJournal.test.js.map +1 -1
  26. package/dist/mcp/tools.d.ts +7 -1
  27. package/dist/mcp/tools.js +20 -2
  28. package/dist/mcp/tools.js.map +1 -1
  29. package/dist/pluginInstaller.js +8 -2
  30. package/dist/pluginInstaller.js.map +1 -1
  31. package/dist/pluginInstaller.test.js +213 -2
  32. package/dist/pluginInstaller.test.js.map +1 -1
  33. package/dist/pluginPackaging.test.js +100 -6
  34. package/dist/pluginPackaging.test.js.map +1 -1
  35. package/dist/pr.d.ts +20 -13
  36. package/dist/pr.js +638 -66
  37. package/dist/pr.js.map +1 -1
  38. package/dist/pr.test.js +166 -7
  39. package/dist/pr.test.js.map +1 -1
  40. package/dist/prAssociation.test.d.ts +1 -0
  41. package/dist/prAssociation.test.js +1336 -0
  42. package/dist/prAssociation.test.js.map +1 -0
  43. package/dist/prDispatch.test.d.ts +1 -0
  44. package/dist/prDispatch.test.js +96 -0
  45. package/dist/prDispatch.test.js.map +1 -0
  46. package/dist/releaseReconciliation.test.js +6 -2
  47. package/dist/releaseReconciliation.test.js.map +1 -1
  48. package/dist/releaseWorkflow.test.d.ts +1 -0
  49. package/dist/releaseWorkflow.test.js +447 -0
  50. package/dist/releaseWorkflow.test.js.map +1 -0
  51. package/dist/services/agentReadinessService.js +2 -1
  52. package/dist/services/agentReadinessService.js.map +1 -1
  53. package/dist/stagedChecks.test.d.ts +1 -0
  54. package/dist/stagedChecks.test.js +228 -0
  55. package/dist/stagedChecks.test.js.map +1 -0
  56. package/package.json +9 -6
  57. package/plugins/ai-delivery/.claude-plugin/plugin.json +2 -2
  58. package/plugins/ai-delivery/plugin.json +1 -1
  59. package/plugins/ai-delivery/runtime/dist/THIRD-PARTY-NOTICES.md +1 -1
  60. package/plugins/ai-delivery/runtime/dist/cli.js +40 -40
  61. package/plugins/ai-delivery/runtime/package.json +1 -1
@@ -0,0 +1,228 @@
1
+ import assert from 'node:assert/strict';
2
+ import { execFileSync } from 'node:child_process';
3
+ import { createHash } from 'node:crypto';
4
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, symlinkSync, writeFileSync, } from 'node:fs';
5
+ import { tmpdir } from 'node:os';
6
+ import { join, resolve } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { test } from 'vitest';
9
+ const staged = (await import(new URL('../scripts/pre-commit.mjs', import.meta.url).href));
10
+ const hash = (bytes) => createHash('sha256').update(bytes).digest('hex');
11
+ function fixture(runner) {
12
+ const base = mkdtempSync(join(tmpdir(), 'staged-check-fixture-'));
13
+ const cwd = join(base, 'repo');
14
+ mkdirSync(join(cwd, 'scripts'), { recursive: true });
15
+ const git = (...args) => execFileSync('git', args, { cwd, encoding: 'utf8' }).trim();
16
+ git('init', '-q');
17
+ git('config', 'user.name', 'Synthetic Contributor');
18
+ git('config', 'user.email', 'contributor@example.test');
19
+ writeFileSync(join(cwd, 'partial.txt'), 'original\n');
20
+ writeFileSync(join(cwd, 'delete.txt'), 'tracked deletion\n');
21
+ writeFileSync(join(cwd, 'package-lock.json'), '{"synthetic":"original"}\n');
22
+ if (runner !== undefined)
23
+ writeFileSync(join(cwd, 'scripts/checks.mjs'), runner);
24
+ git('add', '.');
25
+ git('commit', '-qm', 'Synthetic baseline');
26
+ return { cwd, base, git, cleanup: () => rmSync(base, { recursive: true, force: true }) };
27
+ }
28
+ test('exact staged tree isolates partial edits, additions, deletions and lockfile changes without index/unstaged writes', () => {
29
+ const f = fixture();
30
+ try {
31
+ writeFileSync(join(f.cwd, 'partial.txt'), 'staged content\n');
32
+ writeFileSync(join(f.cwd, 'added.txt'), 'staged addition\n');
33
+ writeFileSync(join(f.cwd, 'package-lock.json'), '{"synthetic":"staged lock"}\n');
34
+ f.git('rm', '-q', 'delete.txt');
35
+ f.git('add', 'partial.txt', 'added.txt', 'package-lock.json');
36
+ writeFileSync(join(f.cwd, 'partial.txt'), 'unstaged content must survive\n');
37
+ writeFileSync(join(f.cwd, 'package-lock.json'), '{"synthetic":"unstaged lock"}\n');
38
+ writeFileSync(join(f.cwd, 'delete.txt'), 'unstaged recreated file\n');
39
+ writeFileSync(join(f.cwd, 'untracked.txt'), 'unrelated local file\n');
40
+ const index = join(f.cwd, '.git/index');
41
+ const before = hash(readFileSync(index));
42
+ const snapshot = staged.prepareStagedSnapshot(f.cwd, join(f.base, 'snapshot-owner'));
43
+ assert.equal(readFileSync(join(snapshot.snapshot, 'partial.txt'), 'utf8'), 'staged content\n');
44
+ assert.equal(readFileSync(join(snapshot.snapshot, 'added.txt'), 'utf8'), 'staged addition\n');
45
+ assert.equal(readFileSync(join(snapshot.snapshot, 'package-lock.json'), 'utf8'), '{"synthetic":"staged lock"}\n');
46
+ assert.equal(existsSync(join(snapshot.snapshot, 'delete.txt')), false);
47
+ assert.equal(existsSync(join(snapshot.snapshot, 'untracked.txt')), false);
48
+ assert.equal(snapshot.originalIndexSha256, before);
49
+ assert.equal(hash(readFileSync(index)), before);
50
+ assert.equal(readFileSync(join(f.cwd, 'partial.txt'), 'utf8'), 'unstaged content must survive\n');
51
+ assert.equal(readFileSync(join(f.cwd, 'package-lock.json'), 'utf8'), '{"synthetic":"unstaged lock"}\n');
52
+ assert.equal(readFileSync(join(f.cwd, 'delete.txt'), 'utf8'), 'unstaged recreated file\n');
53
+ assert.equal(readFileSync(join(f.cwd, 'untracked.txt'), 'utf8'), 'unrelated local file\n');
54
+ assert.match(snapshot.tree, /^[0-9a-f]{40}$/u);
55
+ }
56
+ finally {
57
+ f.cleanup();
58
+ }
59
+ });
60
+ function syntheticRunner(fullSuccess = true) {
61
+ return `import fs from 'node:fs';import path from 'node:path';
62
+ const args=process.argv.slice(2);const tree=args[args.indexOf('--staged-tree')+1],dir=args[args.indexOf('--results-dir')+1];
63
+ if(!args.includes('--install'))process.exit(8);
64
+ if(fs.readFileSync('package-lock.json','utf8')!=='{"synthetic":"original"}\\n')process.exit(9);
65
+ if(process.env.GH_TOKEN||process.env.NODE_OPTIONS||process.env.NODE_PATH)process.exit(10);
66
+ fs.mkdirSync(dir,{recursive:true});fs.writeFileSync(path.join(dir,'result.json'),JSON.stringify({fullSuccess:${fullSuccess},tree:{stagedGitTree:tree}}));`;
67
+ }
68
+ test('tracked entry executes staged runner rather than unstaged code and cleans only owned snapshot', async () => {
69
+ const f = fixture(syntheticRunner());
70
+ try {
71
+ writeFileSync(join(f.cwd, 'scripts/checks.mjs'), "throw Error('Unstaged runner must not execute');\n");
72
+ writeFileSync(join(f.cwd, 'package-lock.json'), '{"synthetic":"unstaged must not install"}\n');
73
+ const index = hash(readFileSync(join(f.cwd, '.git/index')));
74
+ const resultsDir = join(f.base, 'results');
75
+ const result = await staged.runStagedChecks({ cwd: f.cwd, resultsDir });
76
+ assert.equal(result.status, 'passed');
77
+ assert.equal(result.fullSuccess, true);
78
+ assert.equal(result.sourceIndexUnchanged, true);
79
+ assert.equal(result.cleanupConfirmed, true);
80
+ assert.equal(existsSync(result.ownedDirectory), false);
81
+ assert.equal(existsSync(join(resultsDir, 'full/result.json')), true);
82
+ assert.equal(hash(readFileSync(join(f.cwd, '.git/index'))), index);
83
+ assert.match(readFileSync(join(f.cwd, 'scripts/checks.mjs'), 'utf8'), /Unstaged runner/u);
84
+ assert.match(readFileSync(join(f.cwd, 'package-lock.json'), 'utf8'), /unstaged must not install/u);
85
+ await assert.rejects(staged.runStagedChecks({ cwd: f.cwd, resultsDir }), /Existing staged result/u);
86
+ }
87
+ finally {
88
+ f.cleanup();
89
+ }
90
+ });
91
+ test('fast or missing staged runner cannot become hook full success; unrelated source survives failure', async () => {
92
+ for (const runner of [undefined, syntheticRunner(false)]) {
93
+ const f = fixture(runner);
94
+ try {
95
+ const before = hash(readFileSync(join(f.cwd, '.git/index')));
96
+ const result = await staged.runStagedChecks({ cwd: f.cwd, resultsDir: join(f.base, 'result') });
97
+ assert.equal(result.fullSuccess, false);
98
+ assert.equal(result.status, 'failed');
99
+ assert.equal(result.cleanupConfirmed, true);
100
+ assert.equal(hash(readFileSync(join(f.cwd, '.git/index'))), before);
101
+ assert.equal(readFileSync(join(f.cwd, 'partial.txt'), 'utf8'), 'original\n');
102
+ }
103
+ finally {
104
+ f.cleanup();
105
+ }
106
+ }
107
+ });
108
+ test('unsafe staged symlink is refused before commands and cleanup preserves the source index', async () => {
109
+ const f = fixture(syntheticRunner());
110
+ try {
111
+ symlinkSync('../outside', join(f.cwd, 'link'));
112
+ f.git('add', 'link');
113
+ const before = hash(readFileSync(join(f.cwd, '.git/index')));
114
+ const result = await staged.runStagedChecks({ cwd: f.cwd, resultsDir: join(f.base, 'result') });
115
+ assert.equal(result.status, 'failed');
116
+ assert.match(result.error, /symlink index entry/u);
117
+ assert.equal(result.cleanupConfirmed, true);
118
+ assert.equal(hash(readFileSync(join(f.cwd, '.git/index'))), before);
119
+ }
120
+ finally {
121
+ f.cleanup();
122
+ }
123
+ });
124
+ test('staged graph cancellation preserves source and partial evidence after owned child cleanup', async () => {
125
+ const f = fixture("console.log('synthetic staged graph started');setInterval(()=>{},1000);\n");
126
+ const controller = new AbortController();
127
+ const timer = setTimeout(() => controller.abort(), 750);
128
+ try {
129
+ const before = hash(readFileSync(join(f.cwd, '.git/index')));
130
+ const resultsDir = join(f.base, 'result');
131
+ const result = await staged.runStagedChecks({ cwd: f.cwd, resultsDir, signal: controller.signal });
132
+ assert.equal(result.status, 'cancelled');
133
+ assert.equal(result.exitCode, 130);
134
+ assert.equal(result.sourceIndexUnchanged, true);
135
+ assert.equal(result.cleanupConfirmed, true);
136
+ assert.equal(hash(readFileSync(join(f.cwd, '.git/index'))), before);
137
+ assert.match(readFileSync(join(resultsDir, 'process/stdout.txt'), 'utf8'), /synthetic staged graph started/u);
138
+ }
139
+ finally {
140
+ clearTimeout(timer);
141
+ f.cleanup();
142
+ }
143
+ });
144
+ test('unconfirmed child completion preserves the owned snapshot and marks cleanup unproved', async () => {
145
+ const f = fixture(syntheticRunner());
146
+ let ownedDirectory;
147
+ try {
148
+ const before = hash(readFileSync(join(f.cwd, '.git/index')));
149
+ const result = await staged.runStagedChecks({
150
+ cwd: f.cwd,
151
+ resultsDir: join(f.base, 'uncertain'),
152
+ execute: async () => ({ status: 'failed', cleanupConfirmed: false }),
153
+ });
154
+ ownedDirectory = result.ownedDirectory;
155
+ assert.equal(result.fullSuccess, false);
156
+ assert.equal(result.cleanupConfirmed, false);
157
+ assert.equal(existsSync(ownedDirectory), true);
158
+ assert.match(result.error, /quiescence is unconfirmed/u);
159
+ assert.equal(hash(readFileSync(join(f.cwd, '.git/index'))), before);
160
+ }
161
+ finally {
162
+ // The injected executor launched no process; this fixture owns safe cleanup.
163
+ if (ownedDirectory)
164
+ rmSync(ownedDirectory, { recursive: true, force: true });
165
+ f.cleanup();
166
+ }
167
+ });
168
+ test('caller relative alternate index supplies the exact tree and preserves both indexes and unstaged bytes', () => {
169
+ const f = fixture();
170
+ const previous = process.env.GIT_INDEX_FILE;
171
+ try {
172
+ const primary = join(f.cwd, '.git/index');
173
+ const alternate = join(f.cwd, '.git/alternate-index');
174
+ writeFileSync(join(f.cwd, 'partial.txt'), 'primary staged\n');
175
+ f.git('add', 'partial.txt');
176
+ copyFileSync(primary, alternate);
177
+ writeFileSync(join(f.cwd, 'partial.txt'), 'alternate staged\n');
178
+ execFileSync('git', ['add', 'partial.txt'], { cwd: f.cwd, env: { ...process.env, GIT_INDEX_FILE: alternate } });
179
+ writeFileSync(join(f.cwd, 'partial.txt'), 'final unstaged bytes\n');
180
+ const primaryHash = hash(readFileSync(primary)), alternateHash = hash(readFileSync(alternate));
181
+ assert.notEqual(primaryHash, alternateHash);
182
+ process.env.GIT_INDEX_FILE = '.git/alternate-index';
183
+ const snapshot = staged.prepareStagedSnapshot(f.cwd, join(f.base, 'alternate-snapshot'));
184
+ assert.equal(snapshot.index, alternate);
185
+ assert.equal(snapshot.originalIndexSha256, alternateHash);
186
+ assert.equal(readFileSync(join(snapshot.snapshot, 'partial.txt'), 'utf8'), 'alternate staged\n');
187
+ assert.equal(hash(readFileSync(primary)), primaryHash);
188
+ assert.equal(hash(readFileSync(alternate)), alternateHash);
189
+ assert.equal(readFileSync(join(f.cwd, 'partial.txt'), 'utf8'), 'final unstaged bytes\n');
190
+ }
191
+ finally {
192
+ if (previous === undefined)
193
+ delete process.env.GIT_INDEX_FILE;
194
+ else
195
+ process.env.GIT_INDEX_FILE = previous;
196
+ f.cleanup();
197
+ }
198
+ });
199
+ test('synthetic commit -a and path-limited hooks validate the Git-supplied temporary commit index', () => {
200
+ const entry = fileURLToPath(new URL('../scripts/pre-commit.mjs', import.meta.url));
201
+ const quote = (value) => "'" + value.replaceAll("'", "'\\''") + "'";
202
+ for (const mode of ['all', 'path']) {
203
+ const f = fixture(syntheticRunner());
204
+ try {
205
+ const resultsDir = join(f.base, 'hook-results');
206
+ const hook = join(f.cwd, '.git/hooks/pre-commit');
207
+ writeFileSync(hook, `#!/bin/sh\nexec ${quote(process.execPath)} ${quote(entry)} --results-dir ${quote(resultsDir)}\n`);
208
+ chmodSync(hook, 0o755); // Only this disposable synthetic repository owns the hook.
209
+ writeFileSync(join(f.cwd, 'partial.txt'), `${mode} committed content\n`);
210
+ if (mode === 'path')
211
+ writeFileSync(join(f.cwd, 'delete.txt'), 'unrelated unstaged content\n');
212
+ f.git('commit', '-qm', `Synthetic ${mode} commit`, ...(mode === 'all' ? ['-a'] : ['--', 'partial.txt']));
213
+ const result = JSON.parse(readFileSync(join(resultsDir, 'staged.json'), 'utf8'));
214
+ assert.equal(result.fullSuccess, true);
215
+ assert.equal(result.sourceIndexUnchanged, true);
216
+ assert.equal(result.cleanupConfirmed, true);
217
+ assert.notEqual(resolve(result.sourceIndexPath), join(f.cwd, '.git/index'));
218
+ assert.equal(result.stagedTree, f.git('rev-parse', 'HEAD^{tree}'));
219
+ assert.equal(f.git('show', 'HEAD:partial.txt'), `${mode} committed content`);
220
+ if (mode === 'path')
221
+ assert.equal(readFileSync(join(f.cwd, 'delete.txt'), 'utf8'), 'unrelated unstaged content\n');
222
+ }
223
+ finally {
224
+ f.cleanup();
225
+ }
226
+ }
227
+ });
228
+ //# sourceMappingURL=stagedChecks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stagedChecks.test.js","sourceRoot":"","sources":["../src/stagedChecks.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aviaratech/ai-delivery",
3
- "version": "0.3.24",
3
+ "version": "0.3.25",
4
4
  "private": false,
5
5
  "description": "Generic GitHub issue and pull request delivery CLI and MCP server",
6
6
  "homepage": "https://github.com/aviaratech/ai-delivery#readme",
@@ -46,17 +46,20 @@
46
46
  "access": "public"
47
47
  },
48
48
  "scripts": {
49
- "format": "oxfmt src scripts package.json tsconfig.json tsconfig.build.json vitest.config.ts .oxlintrc.json .oxfmtrc.json",
50
- "format:check": "oxfmt --check src scripts package.json tsconfig.json tsconfig.build.json vitest.config.ts .oxlintrc.json .oxfmtrc.json",
51
- "lint": "oxlint",
49
+ "format": "oxfmt --threads=1 src scripts package.json tsconfig.json tsconfig.build.json vitest.config.ts .oxlintrc.json .oxfmtrc.json",
50
+ "format:check": "oxfmt --threads=1 --check src scripts package.json tsconfig.json tsconfig.build.json vitest.config.ts .oxlintrc.json .oxfmtrc.json",
51
+ "lint": "oxlint --threads=1",
52
52
  "typecheck": "tsc -p tsconfig.json",
53
53
  "build": "tsc -p tsconfig.build.json && node scripts/build-plugin.mjs",
54
54
  "postbuild": "node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"",
55
55
  "test": "npm run build && vitest run",
56
- "checks": "npm run format:check && npm run lint && npm run typecheck && npm test"
56
+ "checks": "node scripts/current-qualification.mjs",
57
+ "checks:fast": "node scripts/checks.mjs --fast",
58
+ "checks:producer": "node scripts/current-qualification.mjs --producer-only",
59
+ "checks:resume": "node scripts/current-qualification.mjs"
57
60
  },
58
61
  "dependencies": {
59
- "@modelcontextprotocol/sdk": "^1.29.0",
62
+ "@modelcontextprotocol/sdk": "^1.31.0",
60
63
  "@octokit/auth-app": "^8.2.0",
61
64
  "@octokit/graphql": "^9.0.3",
62
65
  "@octokit/rest": "^22.0.1",
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "ai-delivery",
3
- "version": "0.3.24",
3
+ "version": "0.3.25",
4
4
  "description": "GitHub issue and pull request delivery tools for prepared worktrees and evidence-based handoff.",
5
5
  "author": { "name": "AviaraTech", "url": "https://github.com/aviaratech" },
6
6
  "homepage": "https://github.com/aviaratech/ai-delivery#readme",
7
7
  "repository": "https://github.com/aviaratech/ai-delivery",
8
8
  "license": "MIT",
9
9
  "deliveryCapabilityVersion": 2,
10
- "packageVersion": "0.3.24"
10
+ "packageVersion": "0.3.25"
11
11
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "ai-delivery",
4
- "version": "0.3.24",
4
+ "version": "0.3.25",
5
5
  "description": "GitHub issue and pull request delivery tools for prepared worktrees and evidence-based handoff.",
6
6
  "author": { "name": "AviaraTech", "url": "https://github.com/aviaratech" },
7
7
  "homepage": "https://github.com/aviaratech/ai-delivery#readme",
@@ -2,7 +2,7 @@
2
2
 
3
3
  The app bundles dependencies which contain the following licenses:
4
4
 
5
- ## @modelcontextprotocol/sdk - 1.30.1 (MIT)
5
+ ## @modelcontextprotocol/sdk - 1.31.0 (MIT)
6
6
 
7
7
  MIT License
8
8