devharness 0.9.4 → 0.9.5
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/build/command-recorder.d.ts +2 -0
- package/build/command-recorder.d.ts.map +1 -1
- package/build/command-recorder.js +4 -0
- package/build/command-recorder.js.map +1 -1
- package/build/config.d.ts +9 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +10 -0
- package/build/config.js.map +1 -1
- package/build/dashboard/dashboard-hub.js +2 -2
- package/build/dashboard/dashboard-hub.js.map +1 -1
- package/build/github/gh-cli.d.ts +41 -0
- package/build/github/gh-cli.d.ts.map +1 -0
- package/build/github/gh-cli.js +147 -0
- package/build/github/gh-cli.js.map +1 -0
- package/build/github/gh-cli.test.d.ts +2 -0
- package/build/github/gh-cli.test.d.ts.map +1 -0
- package/build/github/gh-cli.test.js +145 -0
- package/build/github/gh-cli.test.js.map +1 -0
- package/build/github/gh-issues.d.ts +105 -0
- package/build/github/gh-issues.d.ts.map +1 -0
- package/build/github/gh-issues.js +199 -0
- package/build/github/gh-issues.js.map +1 -0
- package/build/github/gh-issues.test.d.ts +2 -0
- package/build/github/gh-issues.test.d.ts.map +1 -0
- package/build/github/gh-issues.test.js +118 -0
- package/build/github/gh-issues.test.js.map +1 -0
- package/build/github/issue-actions.d.ts +34 -0
- package/build/github/issue-actions.d.ts.map +1 -0
- package/build/github/issue-actions.js +530 -0
- package/build/github/issue-actions.js.map +1 -0
- package/build/github/issue-actions.test.d.ts +2 -0
- package/build/github/issue-actions.test.d.ts.map +1 -0
- package/build/github/issue-actions.test.js +555 -0
- package/build/github/issue-actions.test.js.map +1 -0
- package/build/github/issue-body.d.ts +179 -0
- package/build/github/issue-body.d.ts.map +1 -0
- package/build/github/issue-body.js +181 -0
- package/build/github/issue-body.js.map +1 -0
- package/build/github/issue-body.test.d.ts +2 -0
- package/build/github/issue-body.test.d.ts.map +1 -0
- package/build/github/issue-body.test.js +157 -0
- package/build/github/issue-body.test.js.map +1 -0
- package/build/helpers/paths.d.ts +7 -0
- package/build/helpers/paths.d.ts.map +1 -1
- package/build/helpers/paths.js +10 -1
- package/build/helpers/paths.js.map +1 -1
- package/build/index.js +4 -1
- package/build/index.js.map +1 -1
- package/build/issue-tracker.d.ts +30 -0
- package/build/issue-tracker.d.ts.map +1 -1
- package/build/issue-tracker.js +91 -1
- package/build/issue-tracker.js.map +1 -1
- package/build/issue-tracker.test.js +76 -1
- package/build/issue-tracker.test.js.map +1 -1
- package/build/tool-response.d.ts +26 -0
- package/build/tool-response.d.ts.map +1 -1
- package/build/tool-response.js.map +1 -1
- package/build/tools/issues-tools.d.ts +29 -5
- package/build/tools/issues-tools.d.ts.map +1 -1
- package/build/tools/issues-tools.js +55 -5
- package/build/tools/issues-tools.js.map +1 -1
- package/build/tools/replay-sequence-reload.test.js +23 -7
- package/build/tools/replay-sequence-reload.test.js.map +1 -1
- package/docs/instructions.md +3 -1
- package/docs/messages.md +264 -0
- package/package.json +1 -1
- package/plugin/skills/devharness/SKILL.md +1 -1
- package/plugin/skills/devharness/references/tool-categories.md +8 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gh-issues.test.d.ts","sourceRoot":"","sources":["../../src/github/gh-issues.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { classifySync, resolveStatus, unionLabels, bodyHash, closedReasonFrom, markComment, commentGithubId, stripCommentMarker, } from './gh-issues.js';
|
|
3
|
+
const SYNCED_AT = new Date('2026-08-01T00:00:00.000Z');
|
|
4
|
+
const NOW = new Date('2026-08-11T00:00:00.000Z');
|
|
5
|
+
function local(body, overrides = {}) {
|
|
6
|
+
return { body, githubBodyHash: bodyHash(body), githubSyncedAt: SYNCED_AT, ...overrides };
|
|
7
|
+
}
|
|
8
|
+
describe('classifySync', () => {
|
|
9
|
+
it('does nothing when neither side moved', () => {
|
|
10
|
+
const issue = local('same');
|
|
11
|
+
const result = classifySync(issue, { updatedAt: '2026-07-01T00:00:00.000Z' }, 'same');
|
|
12
|
+
expect(result.action).toBe('none');
|
|
13
|
+
});
|
|
14
|
+
it('pulls when only the remote moved', () => {
|
|
15
|
+
const issue = local('same');
|
|
16
|
+
const result = classifySync(issue, { updatedAt: '2026-08-05T00:00:00.000Z' }, 'same');
|
|
17
|
+
expect(result).toMatchObject({ action: 'pull', remoteChanged: true, localChanged: false });
|
|
18
|
+
});
|
|
19
|
+
it('pushes when only the local moved', () => {
|
|
20
|
+
const issue = local('original');
|
|
21
|
+
const result = classifySync(issue, { updatedAt: '2026-07-01T00:00:00.000Z' }, 'edited locally');
|
|
22
|
+
expect(result).toMatchObject({ action: 'push', localChanged: true, remoteChanged: false });
|
|
23
|
+
});
|
|
24
|
+
it('reports a conflict when both moved', () => {
|
|
25
|
+
const issue = local('original');
|
|
26
|
+
const result = classifySync(issue, { updatedAt: '2026-08-05T00:00:00.000Z' }, 'edited locally');
|
|
27
|
+
expect(result).toMatchObject({ action: 'conflict', localChanged: true, remoteChanged: true });
|
|
28
|
+
});
|
|
29
|
+
it('adopts rather than conflicting on a first sync', () => {
|
|
30
|
+
// No baseline: the twelve issues stamped by hand are all in this state,
|
|
31
|
+
// and none of them should come back as a conflict.
|
|
32
|
+
const issue = { body: 'anything', githubBodyHash: undefined, githubSyncedAt: undefined };
|
|
33
|
+
const result = classifySync(issue, { updatedAt: '2026-08-05T00:00:00.000Z' }, 'anything');
|
|
34
|
+
expect(result).toMatchObject({ action: 'pull', firstSync: true });
|
|
35
|
+
});
|
|
36
|
+
it('reports missing-upstream when the number is gone', () => {
|
|
37
|
+
expect(classifySync(local('x'), undefined, 'x').action).toBe('missing-upstream');
|
|
38
|
+
});
|
|
39
|
+
it('ignores the sequence block, which is a projection not a local edit', () => {
|
|
40
|
+
// The caller strips the block before hashing; publishing must not make
|
|
41
|
+
// the next sync think the body changed.
|
|
42
|
+
const prose = '## Steps\n\nDo the thing.';
|
|
43
|
+
const issue = local(prose);
|
|
44
|
+
expect(classifySync(issue, { updatedAt: '2026-07-01T00:00:00.000Z' }, prose).action).toBe('none');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('resolveStatus', () => {
|
|
48
|
+
const openLocal = { type: 'bug', status: 'acknowledged', closedReason: undefined, startedAt: undefined, resolvedAt: undefined };
|
|
49
|
+
const closedLocal = { type: 'bug', status: 'fixed', closedReason: 'completed', startedAt: undefined, resolvedAt: new Date() };
|
|
50
|
+
it('closes locally when upstream is closed', () => {
|
|
51
|
+
const result = resolveStatus(openLocal, { state: 'CLOSED', stateReason: 'COMPLETED' }, NOW);
|
|
52
|
+
expect(result).toMatchObject({ status: 'fixed', closedReason: 'completed', resolvedAt: NOW });
|
|
53
|
+
});
|
|
54
|
+
it('maps a feature to implemented, not fixed', () => {
|
|
55
|
+
const result = resolveStatus({ ...openLocal, type: 'feature' }, { state: 'CLOSED', stateReason: 'COMPLETED' }, NOW);
|
|
56
|
+
expect(result.status).toBe('implemented');
|
|
57
|
+
});
|
|
58
|
+
it('copies not planned and duplicate through verbatim', () => {
|
|
59
|
+
expect(resolveStatus(openLocal, { state: 'CLOSED', stateReason: 'NOT_PLANNED' }, NOW).closedReason).toBe('not_planned');
|
|
60
|
+
expect(resolveStatus(openLocal, { state: 'CLOSED', stateReason: 'DUPLICATE' }, NOW).closedReason).toBe('duplicate');
|
|
61
|
+
});
|
|
62
|
+
it('leaves an open issue alone when upstream is open', () => {
|
|
63
|
+
expect(resolveStatus(openLocal, { state: 'OPEN', stateReason: null }, NOW)).toEqual({});
|
|
64
|
+
});
|
|
65
|
+
it('asks to close upstream when closed here but open there and never synced closed', () => {
|
|
66
|
+
const notYetPushed = { ...closedLocal, closedReason: undefined };
|
|
67
|
+
expect(resolveStatus(notYetPushed, { state: 'OPEN', stateReason: null }, NOW))
|
|
68
|
+
.toMatchObject({ closeUpstream: 'completed' });
|
|
69
|
+
});
|
|
70
|
+
it('follows a reopen from GitHub and clears the resolution', () => {
|
|
71
|
+
const result = resolveStatus(closedLocal, { state: 'OPEN', stateReason: null }, NOW);
|
|
72
|
+
expect(result).toMatchObject({ status: 'acknowledged', reopened: true });
|
|
73
|
+
expect(result.closedReason).toBeUndefined();
|
|
74
|
+
expect(result.resolvedAt).toBeUndefined();
|
|
75
|
+
// Never the other way round: a reopen must not become a close upstream.
|
|
76
|
+
expect(result.closeUpstream).toBeUndefined();
|
|
77
|
+
});
|
|
78
|
+
it('reopens to in_progress when work had already started', () => {
|
|
79
|
+
const result = resolveStatus({ ...closedLocal, startedAt: new Date() }, { state: 'OPEN', stateReason: null }, NOW);
|
|
80
|
+
expect(result.status).toBe('in_progress');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('unionLabels', () => {
|
|
84
|
+
it('adds upstream labels without removing local-only ones', () => {
|
|
85
|
+
expect(unionLabels(['inspect', 'agents'], ['bug', 'help wanted']))
|
|
86
|
+
.toEqual(['inspect', 'agents', 'bug', 'help wanted']);
|
|
87
|
+
});
|
|
88
|
+
it('does not duplicate labels present on both sides', () => {
|
|
89
|
+
expect(unionLabels(['bug', 'ui'], ['bug'])).toEqual(['bug', 'ui']);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('closedReasonFrom', () => {
|
|
93
|
+
it('normalises GitHub casing and spacing', () => {
|
|
94
|
+
expect(closedReasonFrom('NOT_PLANNED')).toBe('not_planned');
|
|
95
|
+
expect(closedReasonFrom('not planned')).toBe('not_planned');
|
|
96
|
+
expect(closedReasonFrom('DUPLICATE')).toBe('duplicate');
|
|
97
|
+
});
|
|
98
|
+
it('falls back to completed for anything else', () => {
|
|
99
|
+
expect(closedReasonFrom(null)).toBe('completed');
|
|
100
|
+
expect(closedReasonFrom('REOPENED')).toBe('completed');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('comment markers', () => {
|
|
104
|
+
it('round-trips an id through a comment body', () => {
|
|
105
|
+
const marked = markComment('IC_123', 'Reproduced on Firefox too.');
|
|
106
|
+
expect(commentGithubId(marked)).toBe('IC_123');
|
|
107
|
+
expect(stripCommentMarker(marked)).toBe('Reproduced on Firefox too.');
|
|
108
|
+
});
|
|
109
|
+
it('reports no id for a locally-authored comment', () => {
|
|
110
|
+
expect(commentGithubId('Just a local note.')).toBeNull();
|
|
111
|
+
});
|
|
112
|
+
it('survives a body that itself starts with an HTML comment', () => {
|
|
113
|
+
const marked = markComment('IC_9', '<!-- not a marker -->\nText');
|
|
114
|
+
expect(commentGithubId(marked)).toBe('IC_9');
|
|
115
|
+
expect(stripCommentMarker(marked)).toBe('<!-- not a marker -->\nText');
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=gh-issues.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gh-issues.test.js","sourceRoot":"","sources":["../../src/github/gh-issues.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The GitHub actions on the `issues` tool.
|
|
3
|
+
*
|
|
4
|
+
* Only `publish` and `sync` touch the network; `link` never does. Everything
|
|
5
|
+
* here is written so that failing offline costs nothing: reads happen first,
|
|
6
|
+
* local writes second, upstream writes last, and any gh failure aborts before
|
|
7
|
+
* the first local mutation.
|
|
8
|
+
*/
|
|
9
|
+
import { type RunGhOptions } from './gh-cli.js';
|
|
10
|
+
import { type IssueType } from '../issue-tracker.js';
|
|
11
|
+
export interface GithubActionArgs {
|
|
12
|
+
id?: number;
|
|
13
|
+
github?: number;
|
|
14
|
+
repo?: string;
|
|
15
|
+
confirm?: boolean;
|
|
16
|
+
take?: 'local' | 'remote';
|
|
17
|
+
fromComment?: number;
|
|
18
|
+
allowPrivilegedSteps?: boolean;
|
|
19
|
+
type?: IssueType;
|
|
20
|
+
}
|
|
21
|
+
export interface GithubActionDeps {
|
|
22
|
+
/** Injected so tests never spawn gh. Defaults to the real module. */
|
|
23
|
+
runOpts?: RunGhOptions;
|
|
24
|
+
}
|
|
25
|
+
/** Every handler funnels gh failures through here, so one taxonomy covers all. */
|
|
26
|
+
export declare function ghErrorResponse(err: unknown): any;
|
|
27
|
+
export declare function handlePublish(args: GithubActionArgs, deps?: GithubActionDeps): Promise<any>;
|
|
28
|
+
export declare function handleLink(args: GithubActionArgs): Promise<any>;
|
|
29
|
+
export declare function handleImport(args: GithubActionArgs, deps?: GithubActionDeps): Promise<any>;
|
|
30
|
+
export declare function handleSync(args: GithubActionArgs, deps?: GithubActionDeps): Promise<any>;
|
|
31
|
+
export declare function handlePullSequence(args: GithubActionArgs, deps?: GithubActionDeps & {
|
|
32
|
+
knownTools?: () => string[];
|
|
33
|
+
}): Promise<any>;
|
|
34
|
+
//# sourceMappingURL=issue-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-actions.d.ts","sourceRoot":"","sources":["../../src/github/issue-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAYnE,OAAO,EAKc,KAAK,SAAS,EAClC,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAoBjD;AAsED,wBAAsB,aAAa,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,CAiGrG;AAMD,wBAAsB,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAiBrE;AAUD,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,CAuDpG;AA6GD,wBAAsB,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,CAiGlG;AAMD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,gBAAgB,EACtB,IAAI,GAAE,gBAAgB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,MAAM,EAAE,CAAA;CAAO,GAC5D,OAAO,CAAC,GAAG,CAAC,CAoGd"}
|