@autocode-cli/autocode 0.1.14 → 0.1.17
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 +38 -38
- package/dist/cli/commands/comment.d.ts +1 -1
- package/dist/cli/commands/comment.js +11 -11
- package/dist/cli/commands/comment.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +65 -22
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/move.d.ts +1 -1
- package/dist/cli/commands/move.js +12 -12
- package/dist/cli/commands/move.js.map +1 -1
- package/dist/cli/commands/new.d.ts +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +26 -13
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -1
- package/dist/cli/commands/next.js +15 -15
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/parent.d.ts +9 -0
- package/dist/cli/commands/parent.d.ts.map +1 -0
- package/dist/cli/commands/parent.js +94 -0
- package/dist/cli/commands/parent.js.map +1 -0
- package/dist/cli/commands/serve.js +8 -8
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/show.d.ts +1 -1
- package/dist/cli/commands/show.d.ts.map +1 -1
- package/dist/cli/commands/show.js +51 -31
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/stats.js +2 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/sync.js +3 -3
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +5 -3
- package/dist/cli/parser.js.map +1 -1
- package/dist/core/column.js +2 -2
- package/dist/core/column.js.map +1 -1
- package/dist/core/hierarchy.d.ts +97 -0
- package/dist/core/hierarchy.d.ts.map +1 -0
- package/dist/core/hierarchy.js +274 -0
- package/dist/core/hierarchy.js.map +1 -0
- package/dist/core/issue.d.ts +62 -0
- package/dist/core/issue.d.ts.map +1 -0
- package/dist/core/issue.js +247 -0
- package/dist/core/issue.js.map +1 -0
- package/dist/core/sync.d.ts +9 -9
- package/dist/core/sync.d.ts.map +1 -1
- package/dist/core/sync.js +61 -58
- package/dist/core/sync.js.map +1 -1
- package/dist/core/workflow.d.ts +22 -20
- package/dist/core/workflow.d.ts.map +1 -1
- package/dist/core/workflow.js +68 -51
- package/dist/core/workflow.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/server/api-autocomplete.test.d.ts +6 -0
- package/dist/server/api-autocomplete.test.d.ts.map +1 -0
- package/dist/server/api-autocomplete.test.js +249 -0
- package/dist/server/api-autocomplete.test.js.map +1 -0
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +216 -106
- package/dist/server/api.js.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.d.ts +1 -1
- package/dist/server/dashboard/pages/column-prompt.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.js +11 -11
- package/dist/server/dashboard/pages/column-prompt.js.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.js +14 -14
- package/dist/server/dashboard/pages/column-terminal.js.map +1 -1
- package/dist/server/dashboard/pages/index.d.ts +3 -1
- package/dist/server/dashboard/pages/index.d.ts.map +1 -1
- package/dist/server/dashboard/pages/index.js +3 -1
- package/dist/server/dashboard/pages/index.js.map +1 -1
- package/dist/server/dashboard/pages/issue-graph.d.ts +9 -0
- package/dist/server/dashboard/pages/issue-graph.d.ts.map +1 -0
- package/dist/server/dashboard/pages/issue-graph.js +581 -0
- package/dist/server/dashboard/pages/issue-graph.js.map +1 -0
- package/dist/server/dashboard/pages/issue-view.d.ts +8 -0
- package/dist/server/dashboard/pages/issue-view.d.ts.map +1 -0
- package/dist/server/dashboard/pages/{ticket-view.js → issue-view.js} +128 -128
- package/dist/server/dashboard/pages/issue-view.js.map +1 -0
- package/dist/server/dashboard/pages/main-dashboard.js +21 -21
- package/dist/server/dashboard/pages/main-dashboard.js.map +1 -1
- package/dist/server/dashboard/pages/new-issue.d.ts +8 -0
- package/dist/server/dashboard/pages/new-issue.d.ts.map +1 -0
- package/dist/server/dashboard/pages/new-issue.js +648 -0
- package/dist/server/dashboard/pages/new-issue.js.map +1 -0
- package/dist/server/dashboard/pages/new-issue.test.d.ts +6 -0
- package/dist/server/dashboard/pages/new-issue.test.d.ts.map +1 -0
- package/dist/server/dashboard/pages/new-issue.test.js +349 -0
- package/dist/server/dashboard/pages/new-issue.test.js.map +1 -0
- package/dist/server/dashboard/pages/pipeline-configurator.js +1 -1
- package/dist/server/dashboard/pages/shared.d.ts +2 -2
- package/dist/server/dashboard/pages/shared.d.ts.map +1 -1
- package/dist/server/dashboard/pages/shared.js +5 -5
- package/dist/server/dashboard/pages/shared.js.map +1 -1
- package/dist/server/dashboard/pages/stats-page.js +11 -11
- package/dist/server/dashboard/scripts/index.js +134 -134
- package/dist/server/dashboard/styles/board.d.ts +1 -1
- package/dist/server/dashboard/styles/board.js +10 -10
- package/dist/server/dashboard.d.ts +1 -1
- package/dist/server/dashboard.d.ts.map +1 -1
- package/dist/server/dashboard.js +1 -1
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +40 -24
- package/dist/server/index.js.map +1 -1
- package/dist/server/websocket.d.ts +6 -6
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +10 -10
- package/dist/server/websocket.js.map +1 -1
- package/dist/services/claude.d.ts +13 -13
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +98 -98
- package/dist/services/claude.js.map +1 -1
- package/dist/services/issue-io.d.ts +81 -0
- package/dist/services/issue-io.d.ts.map +1 -0
- package/dist/services/{ticket-io.js → issue-io.js} +54 -53
- package/dist/services/issue-io.js.map +1 -0
- package/dist/services/stats.d.ts +2 -0
- package/dist/services/stats.d.ts.map +1 -1
- package/dist/services/stats.js.map +1 -1
- package/dist/types/index.d.ts +6 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/fs.d.ts +2 -2
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +2 -2
- package/dist/utils/fs.js.map +1 -1
- package/package.json +3 -3
- package/templates/catalog.yaml +2 -2
- package/templates/prompts/api-endpoints-test.en.md +2 -2
- package/templates/prompts/api-endpoints-test.fr.md +2 -2
- package/templates/prompts/backlog.en.md +6 -6
- package/templates/prompts/backlog.fr.md +1 -1
- package/templates/prompts/changelog.en.md +6 -6
- package/templates/prompts/changelog.fr.md +3 -3
- package/templates/prompts/dashboard-responsive.en.md +1 -1
- package/templates/prompts/deploy-prod.en.md +3 -3
- package/templates/prompts/deploy-prod.fr.md +3 -3
- package/templates/prompts/deploy-staging.en.md +3 -3
- package/templates/prompts/deploy-staging.fr.md +3 -3
- package/templates/prompts/design.en.md +5 -5
- package/templates/prompts/design.fr.md +3 -3
- package/templates/prompts/dev.en.md +4 -4
- package/templates/prompts/dev.fr.md +3 -3
- package/templates/prompts/done.en.md +5 -5
- package/templates/prompts/done.fr.md +2 -2
- package/templates/prompts/error-handling-review.en.md +1 -1
- package/templates/prompts/error-handling-review.fr.md +1 -1
- package/templates/prompts/file-watcher-test.en.md +4 -4
- package/templates/prompts/file-watcher-test.fr.md +1 -1
- package/templates/prompts/git-commit.en.md +5 -5
- package/templates/prompts/git-commit.fr.md +3 -3
- package/templates/prompts/git-push.en.md +3 -3
- package/templates/prompts/git-push.fr.md +3 -3
- package/templates/prompts/git-tag.en.md +3 -3
- package/templates/prompts/git-tag.fr.md +3 -3
- package/templates/prompts/in-progress.en.md +6 -6
- package/templates/prompts/in-progress.fr.md +3 -3
- package/templates/prompts/qualification.en.md +8 -8
- package/templates/prompts/qualification.fr.md +3 -3
- package/templates/prompts/retest-cypress.en.md +3 -3
- package/templates/prompts/retest-cypress.fr.md +3 -3
- package/templates/prompts/retest-playwright.en.md +4 -4
- package/templates/prompts/retest-playwright.fr.md +3 -3
- package/templates/prompts/retest.en.md +4 -4
- package/templates/prompts/retest.fr.md +3 -3
- package/templates/prompts/review-best-practices.en.md +3 -3
- package/templates/prompts/review-best-practices.fr.md +3 -3
- package/templates/prompts/review-code.en.md +4 -4
- package/templates/prompts/review-code.fr.md +3 -3
- package/templates/prompts/review-consistency.en.md +3 -3
- package/templates/prompts/review-consistency.fr.md +3 -3
- package/templates/prompts/review-no-duplication.en.md +3 -3
- package/templates/prompts/review-no-duplication.fr.md +3 -3
- package/templates/prompts/review-security.en.md +4 -4
- package/templates/prompts/review-security.fr.md +3 -3
- package/templates/prompts/specification.en.md +5 -5
- package/templates/prompts/specification.fr.md +3 -3
- package/templates/prompts/splitter.en.md +13 -13
- package/templates/prompts/splitter.fr.md +3 -3
- package/templates/prompts/template-validation.en.md +1 -1
- package/templates/prompts/template-validation.fr.md +1 -1
- package/templates/prompts/testing-coverage.en.md +1 -1
- package/templates/prompts/testing-coverage.fr.md +1 -1
- package/templates/prompts/testing-cypress.en.md +4 -4
- package/templates/prompts/testing-cypress.fr.md +3 -3
- package/templates/prompts/testing-integration.en.md +4 -4
- package/templates/prompts/testing-integration.fr.md +3 -3
- package/templates/prompts/testing-playwright.en.md +4 -4
- package/templates/prompts/testing-playwright.fr.md +3 -3
- package/templates/prompts/testing-unit.en.md +4 -4
- package/templates/prompts/testing-unit.fr.md +3 -3
- package/templates/prompts/update-docs.en.md +3 -3
- package/templates/prompts/update-docs.fr.md +3 -3
- package/templates/prompts/validate-staging.en.md +3 -3
- package/templates/prompts/validate-staging.fr.md +3 -3
- package/templates/prompts/websocket-test.en.md +1 -1
- package/dist/core/ticket.d.ts +0 -50
- package/dist/core/ticket.d.ts.map +0 -1
- package/dist/core/ticket.js +0 -224
- package/dist/core/ticket.js.map +0 -1
- package/dist/server/dashboard/pages/ticket-view.d.ts +0 -8
- package/dist/server/dashboard/pages/ticket-view.d.ts.map +0 -1
- package/dist/server/dashboard/pages/ticket-view.js.map +0 -1
- package/dist/services/ticket-io.d.ts +0 -80
- package/dist/services/ticket-io.d.ts.map +0 -1
- package/dist/services/ticket-io.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/core/workflow.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/core/workflow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE3E;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,UAAQ,EACb,KAAK,CAAC,EAAE,KAAK,GACZ,kBAAkB,CA6CpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAc9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAQhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAMhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAIhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAIjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAUhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAqBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYrD"}
|
package/dist/core/workflow.js
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* Workflow transitions logic
|
|
3
3
|
*/
|
|
4
4
|
import { getColumnBySlug, getColumnByIndex, getColumns } from './column.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getIssue, moveIssue } from './issue.js';
|
|
6
|
+
import { isDoneColumn, isBacklogColumn, isEligibleForCompletion } from './hierarchy.js';
|
|
7
|
+
import { getConfig } from '../utils/config.js';
|
|
6
8
|
/**
|
|
7
9
|
* Validate a workflow transition
|
|
8
10
|
*/
|
|
9
|
-
export function validateTransition(fromSlug, toSlug, force = false) {
|
|
11
|
+
export function validateTransition(fromSlug, toSlug, force = false, issue) {
|
|
10
12
|
const fromColumn = getColumnBySlug(fromSlug);
|
|
11
13
|
const toColumn = getColumnBySlug(toSlug);
|
|
12
14
|
if (!fromColumn) {
|
|
@@ -21,6 +23,19 @@ export function validateTransition(fromSlug, toSlug, force = false) {
|
|
|
21
23
|
reason: `Destination column '${toSlug}' not found`,
|
|
22
24
|
};
|
|
23
25
|
}
|
|
26
|
+
// Check completion constraint for Done column (identified by name)
|
|
27
|
+
if (issue && isDoneColumn(toColumn) && !force) {
|
|
28
|
+
const config = getConfig();
|
|
29
|
+
const { eligible, blockers } = isEligibleForCompletion(config.root, issue.key);
|
|
30
|
+
if (!eligible) {
|
|
31
|
+
const blockerList = blockers.slice(0, 3).join(', ');
|
|
32
|
+
const more = blockers.length > 3 ? `... (+${blockers.length - 3} more)` : '';
|
|
33
|
+
return {
|
|
34
|
+
valid: false,
|
|
35
|
+
reason: `Cannot complete: ${blockers.length} descendant(s) not done: ${blockerList}${more}`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
24
39
|
if (force) {
|
|
25
40
|
return { valid: true };
|
|
26
41
|
}
|
|
@@ -34,10 +49,10 @@ export function validateTransition(fromSlug, toSlug, force = false) {
|
|
|
34
49
|
return { valid: true };
|
|
35
50
|
}
|
|
36
51
|
/**
|
|
37
|
-
* Get available transitions for
|
|
52
|
+
* Get available transitions for an issue
|
|
38
53
|
*/
|
|
39
|
-
export function getAvailableTransitions(
|
|
40
|
-
const currentColumn = getColumnBySlug(
|
|
54
|
+
export function getAvailableTransitions(issue) {
|
|
55
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
41
56
|
if (!currentColumn)
|
|
42
57
|
return [];
|
|
43
58
|
const columns = getColumns();
|
|
@@ -52,47 +67,49 @@ export function getAvailableTransitions(ticket) {
|
|
|
52
67
|
/**
|
|
53
68
|
* Get all possible transitions (including forced)
|
|
54
69
|
*/
|
|
55
|
-
export function getAllPossibleTransitions(
|
|
56
|
-
const currentColumn = getColumnBySlug(
|
|
70
|
+
export function getAllPossibleTransitions(issue) {
|
|
71
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
57
72
|
if (!currentColumn)
|
|
58
73
|
return [];
|
|
59
74
|
const columns = getColumns();
|
|
60
75
|
// All columns except current
|
|
61
|
-
return columns.filter(c => c.slug !==
|
|
76
|
+
return columns.filter(c => c.slug !== issue.column_slug);
|
|
62
77
|
}
|
|
63
78
|
/**
|
|
64
|
-
* Check if
|
|
79
|
+
* Check if issue can advance to next column
|
|
65
80
|
*/
|
|
66
|
-
export function canAdvance(
|
|
67
|
-
const currentColumn = getColumnBySlug(
|
|
81
|
+
export function canAdvance(issue) {
|
|
82
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
68
83
|
if (!currentColumn)
|
|
69
84
|
return false;
|
|
70
85
|
const nextColumn = getColumnByIndex(currentColumn.index + 1);
|
|
71
86
|
return nextColumn !== undefined;
|
|
72
87
|
}
|
|
73
88
|
/**
|
|
74
|
-
* Check if
|
|
89
|
+
* Check if issue is in final column (done)
|
|
90
|
+
* Uses name-based detection: column name is exactly "done"
|
|
75
91
|
*/
|
|
76
|
-
export function isComplete(
|
|
77
|
-
const currentColumn = getColumnBySlug(
|
|
92
|
+
export function isComplete(issue) {
|
|
93
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
78
94
|
if (!currentColumn)
|
|
79
95
|
return false;
|
|
80
|
-
|
|
81
|
-
const maxIndex = Math.max(...columns.map(c => c.index));
|
|
82
|
-
return currentColumn.index === maxIndex;
|
|
96
|
+
return isDoneColumn(currentColumn);
|
|
83
97
|
}
|
|
84
98
|
/**
|
|
85
|
-
* Check if
|
|
99
|
+
* Check if issue is in backlog
|
|
100
|
+
* Uses name-based detection: column name contains "backlog"
|
|
86
101
|
*/
|
|
87
|
-
export function isInBacklog(
|
|
88
|
-
const currentColumn = getColumnBySlug(
|
|
89
|
-
|
|
102
|
+
export function isInBacklog(issue) {
|
|
103
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
104
|
+
if (!currentColumn)
|
|
105
|
+
return false;
|
|
106
|
+
return isBacklogColumn(currentColumn);
|
|
90
107
|
}
|
|
91
108
|
/**
|
|
92
109
|
* Get workflow progress percentage
|
|
93
110
|
*/
|
|
94
|
-
export function getProgress(
|
|
95
|
-
const currentColumn = getColumnBySlug(
|
|
111
|
+
export function getProgress(issue) {
|
|
112
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
96
113
|
if (!currentColumn)
|
|
97
114
|
return 0;
|
|
98
115
|
const columns = getColumns();
|
|
@@ -104,73 +121,73 @@ export function getProgress(ticket) {
|
|
|
104
121
|
/**
|
|
105
122
|
* Get column statistics
|
|
106
123
|
*/
|
|
107
|
-
export function getColumnStats(
|
|
124
|
+
export function getColumnStats(issues) {
|
|
108
125
|
const stats = new Map();
|
|
109
126
|
const columns = getColumns();
|
|
110
127
|
// Initialize all columns with 0
|
|
111
128
|
for (const column of columns) {
|
|
112
129
|
stats.set(column.slug, 0);
|
|
113
130
|
}
|
|
114
|
-
// Count
|
|
115
|
-
for (const
|
|
116
|
-
const count = stats.get(
|
|
117
|
-
stats.set(
|
|
131
|
+
// Count issues per column
|
|
132
|
+
for (const issue of issues) {
|
|
133
|
+
const count = stats.get(issue.column_slug) || 0;
|
|
134
|
+
stats.set(issue.column_slug, count + 1);
|
|
118
135
|
}
|
|
119
136
|
return stats;
|
|
120
137
|
}
|
|
121
138
|
/**
|
|
122
139
|
* Get workflow summary
|
|
123
140
|
*/
|
|
124
|
-
export function getWorkflowSummary(
|
|
141
|
+
export function getWorkflowSummary(issues) {
|
|
125
142
|
const columns = getColumns();
|
|
126
|
-
const stats = getColumnStats(
|
|
143
|
+
const stats = getColumnStats(issues);
|
|
127
144
|
const byColumn = columns.map(column => ({
|
|
128
145
|
column,
|
|
129
146
|
count: stats.get(column.slug) || 0,
|
|
130
147
|
}));
|
|
131
148
|
const maxIndex = Math.max(...columns.map(c => c.index));
|
|
132
149
|
return {
|
|
133
|
-
total:
|
|
150
|
+
total: issues.length,
|
|
134
151
|
byColumn,
|
|
135
152
|
backlog: byColumn.find(b => b.column.index === 0)?.count || 0,
|
|
136
153
|
completed: byColumn.find(b => b.column.index === maxIndex)?.count || 0,
|
|
137
|
-
inProgress:
|
|
154
|
+
inProgress: issues.filter(t => {
|
|
138
155
|
const col = getColumnBySlug(t.column_slug);
|
|
139
156
|
return col && col.index > 0 && col.index < maxIndex;
|
|
140
157
|
}).length,
|
|
141
158
|
};
|
|
142
159
|
}
|
|
143
160
|
/**
|
|
144
|
-
* Transition
|
|
161
|
+
* Transition an issue to the next column
|
|
145
162
|
*/
|
|
146
|
-
export function
|
|
147
|
-
const
|
|
148
|
-
if (!
|
|
149
|
-
return { success: false, error: `
|
|
163
|
+
export function advanceIssue(rootDir, key) {
|
|
164
|
+
const issue = getIssue(rootDir, key);
|
|
165
|
+
if (!issue) {
|
|
166
|
+
return { success: false, error: `Issue '${key}' not found` };
|
|
150
167
|
}
|
|
151
|
-
if (!canAdvance(
|
|
152
|
-
return { success: false, error: `
|
|
168
|
+
if (!canAdvance(issue)) {
|
|
169
|
+
return { success: false, error: `Issue '${key}' cannot advance (already complete)` };
|
|
153
170
|
}
|
|
154
|
-
const currentColumn = getColumnBySlug(
|
|
171
|
+
const currentColumn = getColumnBySlug(issue.column_slug);
|
|
155
172
|
const nextColumn = getColumnByIndex(currentColumn.index + 1);
|
|
156
|
-
const updated =
|
|
173
|
+
const updated = moveIssue(rootDir, key, nextColumn.slug);
|
|
157
174
|
if (!updated) {
|
|
158
|
-
return { success: false, error: `Failed to move
|
|
175
|
+
return { success: false, error: `Failed to move issue '${key}'` };
|
|
159
176
|
}
|
|
160
|
-
return { success: true,
|
|
177
|
+
return { success: true, issue: updated };
|
|
161
178
|
}
|
|
162
179
|
/**
|
|
163
|
-
* Force transition
|
|
180
|
+
* Force transition an issue to any column
|
|
164
181
|
*/
|
|
165
|
-
export function
|
|
166
|
-
const
|
|
167
|
-
if (!
|
|
168
|
-
return { success: false, error: `
|
|
182
|
+
export function forceTransitionIssue(rootDir, key, toColumnSlug) {
|
|
183
|
+
const issue = getIssue(rootDir, key);
|
|
184
|
+
if (!issue) {
|
|
185
|
+
return { success: false, error: `Issue '${key}' not found` };
|
|
169
186
|
}
|
|
170
|
-
const updated =
|
|
187
|
+
const updated = moveIssue(rootDir, key, toColumnSlug, true);
|
|
171
188
|
if (!updated) {
|
|
172
|
-
return { success: false, error: `Failed to move
|
|
189
|
+
return { success: false, error: `Failed to move issue '${key}' to '${toColumnSlug}'` };
|
|
173
190
|
}
|
|
174
|
-
return { success: true,
|
|
191
|
+
return { success: true, issue: updated };
|
|
175
192
|
}
|
|
176
193
|
//# sourceMappingURL=workflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/core/workflow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/core/workflow.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-autocomplete.test.d.ts","sourceRoot":"","sources":["../../src/server/api-autocomplete.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the /api/issues/autocomplete endpoint
|
|
3
|
+
* Tests the autocomplete API handler logic
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
6
|
+
// Mock the claude service
|
|
7
|
+
vi.mock('../services/claude.js', () => ({
|
|
8
|
+
executeClaudePrompt: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
/**
|
|
11
|
+
* Helper to simulate the autocomplete handler logic
|
|
12
|
+
* (extracted from api.ts for unit testing)
|
|
13
|
+
*/
|
|
14
|
+
function processAutocompleteRequest(body, claudeResult) {
|
|
15
|
+
// Validate input
|
|
16
|
+
if (!body || !body.title || !body.title.trim()) {
|
|
17
|
+
return { success: false, error: 'Title is required', status: 400 };
|
|
18
|
+
}
|
|
19
|
+
const lang = body.lang || 'fr';
|
|
20
|
+
const title = body.title.trim();
|
|
21
|
+
// Check Claude result
|
|
22
|
+
if (!claudeResult.success) {
|
|
23
|
+
return { success: false, error: claudeResult.error || 'Claude failed', status: 500 };
|
|
24
|
+
}
|
|
25
|
+
// Parse JSON response
|
|
26
|
+
const output = claudeResult.output?.trim() || '';
|
|
27
|
+
const jsonStr = output.replace(/^```json?\n?/, '').replace(/\n?```$/, '').trim();
|
|
28
|
+
try {
|
|
29
|
+
const data = JSON.parse(jsonStr);
|
|
30
|
+
return { success: true, data };
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return { success: false, error: 'Failed to parse Claude response', status: 500 };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
describe('/api/issues/autocomplete endpoint', () => {
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
vi.clearAllMocks();
|
|
39
|
+
});
|
|
40
|
+
describe('Input validation', () => {
|
|
41
|
+
it('should reject request without body', () => {
|
|
42
|
+
const result = processAutocompleteRequest(null, { success: true, output: '{}' });
|
|
43
|
+
expect(result.success).toBe(false);
|
|
44
|
+
expect(result.error).toBe('Title is required');
|
|
45
|
+
expect(result.status).toBe(400);
|
|
46
|
+
});
|
|
47
|
+
it('should reject request without title', () => {
|
|
48
|
+
const result = processAutocompleteRequest({}, { success: true, output: '{}' });
|
|
49
|
+
expect(result.success).toBe(false);
|
|
50
|
+
expect(result.error).toBe('Title is required');
|
|
51
|
+
expect(result.status).toBe(400);
|
|
52
|
+
});
|
|
53
|
+
it('should reject request with empty title', () => {
|
|
54
|
+
const result = processAutocompleteRequest({ title: '' }, { success: true, output: '{}' });
|
|
55
|
+
expect(result.success).toBe(false);
|
|
56
|
+
expect(result.error).toBe('Title is required');
|
|
57
|
+
expect(result.status).toBe(400);
|
|
58
|
+
});
|
|
59
|
+
it('should reject request with whitespace-only title', () => {
|
|
60
|
+
const result = processAutocompleteRequest({ title: ' ' }, { success: true, output: '{}' });
|
|
61
|
+
expect(result.success).toBe(false);
|
|
62
|
+
expect(result.error).toBe('Title is required');
|
|
63
|
+
expect(result.status).toBe(400);
|
|
64
|
+
});
|
|
65
|
+
it('should accept request with valid title', () => {
|
|
66
|
+
const claudeOutput = JSON.stringify({
|
|
67
|
+
description: 'Test description',
|
|
68
|
+
priority: 'P2',
|
|
69
|
+
labels: ['feature'],
|
|
70
|
+
acceptance_criteria: ['Criterion 1'],
|
|
71
|
+
semver: 'minor',
|
|
72
|
+
});
|
|
73
|
+
const result = processAutocompleteRequest({ title: 'Add user authentication' }, { success: true, output: claudeOutput });
|
|
74
|
+
expect(result.success).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe('Language handling', () => {
|
|
78
|
+
it('should default to French when no language specified', () => {
|
|
79
|
+
const claudeOutput = JSON.stringify({ description: 'Description en francais' });
|
|
80
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: claudeOutput });
|
|
81
|
+
expect(result.success).toBe(true);
|
|
82
|
+
// Language is used in prompt construction, not in response
|
|
83
|
+
});
|
|
84
|
+
it('should accept English language', () => {
|
|
85
|
+
const claudeOutput = JSON.stringify({ description: 'English description' });
|
|
86
|
+
const result = processAutocompleteRequest({ title: 'Test', lang: 'en' }, { success: true, output: claudeOutput });
|
|
87
|
+
expect(result.success).toBe(true);
|
|
88
|
+
});
|
|
89
|
+
it('should accept French language', () => {
|
|
90
|
+
const claudeOutput = JSON.stringify({ description: 'Description francaise' });
|
|
91
|
+
const result = processAutocompleteRequest({ title: 'Test', lang: 'fr' }, { success: true, output: claudeOutput });
|
|
92
|
+
expect(result.success).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('Claude response handling', () => {
|
|
96
|
+
it('should return error when Claude fails', () => {
|
|
97
|
+
const result = processAutocompleteRequest({ title: 'Test issue' }, { success: false, error: 'Claude timeout' });
|
|
98
|
+
expect(result.success).toBe(false);
|
|
99
|
+
expect(result.error).toBe('Claude timeout');
|
|
100
|
+
expect(result.status).toBe(500);
|
|
101
|
+
});
|
|
102
|
+
it('should return default error when Claude fails without message', () => {
|
|
103
|
+
const result = processAutocompleteRequest({ title: 'Test issue' }, { success: false });
|
|
104
|
+
expect(result.success).toBe(false);
|
|
105
|
+
expect(result.error).toBe('Claude failed');
|
|
106
|
+
expect(result.status).toBe(500);
|
|
107
|
+
});
|
|
108
|
+
it('should parse valid JSON response', () => {
|
|
109
|
+
const expectedData = {
|
|
110
|
+
description: 'A detailed description',
|
|
111
|
+
priority: 'P1',
|
|
112
|
+
labels: ['bug', 'urgent'],
|
|
113
|
+
acceptance_criteria: ['Fix the bug', 'Add tests'],
|
|
114
|
+
semver: 'patch',
|
|
115
|
+
};
|
|
116
|
+
const result = processAutocompleteRequest({ title: 'Fix login bug' }, { success: true, output: JSON.stringify(expectedData) });
|
|
117
|
+
expect(result.success).toBe(true);
|
|
118
|
+
expect(result.data).toEqual(expectedData);
|
|
119
|
+
});
|
|
120
|
+
it('should handle JSON wrapped in markdown code blocks', () => {
|
|
121
|
+
const expectedData = { description: 'Test', priority: 'P2' };
|
|
122
|
+
const wrappedOutput = '```json\n' + JSON.stringify(expectedData) + '\n```';
|
|
123
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: wrappedOutput });
|
|
124
|
+
expect(result.success).toBe(true);
|
|
125
|
+
expect(result.data).toEqual(expectedData);
|
|
126
|
+
});
|
|
127
|
+
it('should handle JSON wrapped in code blocks with json tag', () => {
|
|
128
|
+
const expectedData = { description: 'Test', priority: 'P2' };
|
|
129
|
+
const wrappedOutput = '```json\n' + JSON.stringify(expectedData) + '\n```';
|
|
130
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: wrappedOutput });
|
|
131
|
+
expect(result.success).toBe(true);
|
|
132
|
+
expect(result.data).toEqual(expectedData);
|
|
133
|
+
});
|
|
134
|
+
it('should fail to parse JSON wrapped in code blocks without json tag', () => {
|
|
135
|
+
// Note: Current implementation only handles ```json blocks, not plain ```
|
|
136
|
+
// This is a known limitation of the regex /^```json?\n?/
|
|
137
|
+
const expectedData = { description: 'Test', priority: 'P2' };
|
|
138
|
+
const wrappedOutput = '```\n' + JSON.stringify(expectedData) + '\n```';
|
|
139
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: wrappedOutput });
|
|
140
|
+
// The ```\n prefix is not removed, so JSON.parse will fail
|
|
141
|
+
expect(result.success).toBe(false);
|
|
142
|
+
expect(result.error).toBe('Failed to parse Claude response');
|
|
143
|
+
});
|
|
144
|
+
it('should return error for invalid JSON response', () => {
|
|
145
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: 'not valid json' });
|
|
146
|
+
expect(result.success).toBe(false);
|
|
147
|
+
expect(result.error).toBe('Failed to parse Claude response');
|
|
148
|
+
expect(result.status).toBe(500);
|
|
149
|
+
});
|
|
150
|
+
it('should handle empty Claude output', () => {
|
|
151
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: '' });
|
|
152
|
+
expect(result.success).toBe(false);
|
|
153
|
+
expect(result.error).toBe('Failed to parse Claude response');
|
|
154
|
+
});
|
|
155
|
+
it('should handle undefined Claude output', () => {
|
|
156
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: undefined });
|
|
157
|
+
expect(result.success).toBe(false);
|
|
158
|
+
expect(result.error).toBe('Failed to parse Claude response');
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('Response data structure', () => {
|
|
162
|
+
it('should return all expected fields when Claude provides them', () => {
|
|
163
|
+
const claudeOutput = JSON.stringify({
|
|
164
|
+
description: 'Implement user authentication with OAuth2',
|
|
165
|
+
priority: 'P1',
|
|
166
|
+
labels: ['feature', 'security'],
|
|
167
|
+
acceptance_criteria: [
|
|
168
|
+
'Users can log in with Google',
|
|
169
|
+
'Users can log in with GitHub',
|
|
170
|
+
'Session is persisted for 7 days',
|
|
171
|
+
],
|
|
172
|
+
semver: 'minor',
|
|
173
|
+
});
|
|
174
|
+
const result = processAutocompleteRequest({ title: 'Add OAuth authentication' }, { success: true, output: claudeOutput });
|
|
175
|
+
expect(result.success).toBe(true);
|
|
176
|
+
expect(result.data).toHaveProperty('description');
|
|
177
|
+
expect(result.data).toHaveProperty('priority');
|
|
178
|
+
expect(result.data).toHaveProperty('labels');
|
|
179
|
+
expect(result.data).toHaveProperty('acceptance_criteria');
|
|
180
|
+
expect(result.data).toHaveProperty('semver');
|
|
181
|
+
});
|
|
182
|
+
it('should handle partial response from Claude', () => {
|
|
183
|
+
const claudeOutput = JSON.stringify({
|
|
184
|
+
description: 'Simple description',
|
|
185
|
+
priority: 'P2',
|
|
186
|
+
// Missing labels, acceptance_criteria, semver
|
|
187
|
+
});
|
|
188
|
+
const result = processAutocompleteRequest({ title: 'Simple task' }, { success: true, output: claudeOutput });
|
|
189
|
+
expect(result.success).toBe(true);
|
|
190
|
+
expect(result.data).toHaveProperty('description');
|
|
191
|
+
expect(result.data).toHaveProperty('priority');
|
|
192
|
+
});
|
|
193
|
+
it('should preserve label array order', () => {
|
|
194
|
+
const labels = ['bug', 'urgent', 'api'];
|
|
195
|
+
const claudeOutput = JSON.stringify({
|
|
196
|
+
description: 'Test',
|
|
197
|
+
priority: 'P0',
|
|
198
|
+
labels,
|
|
199
|
+
acceptance_criteria: [],
|
|
200
|
+
semver: 'patch',
|
|
201
|
+
});
|
|
202
|
+
const result = processAutocompleteRequest({ title: 'Critical API bug' }, { success: true, output: claudeOutput });
|
|
203
|
+
expect(result.success).toBe(true);
|
|
204
|
+
expect(result.data.labels).toEqual(labels);
|
|
205
|
+
});
|
|
206
|
+
it('should preserve acceptance criteria array order', () => {
|
|
207
|
+
const criteria = ['Step 1', 'Step 2', 'Step 3'];
|
|
208
|
+
const claudeOutput = JSON.stringify({
|
|
209
|
+
description: 'Test',
|
|
210
|
+
priority: 'P2',
|
|
211
|
+
labels: [],
|
|
212
|
+
acceptance_criteria: criteria,
|
|
213
|
+
semver: 'minor',
|
|
214
|
+
});
|
|
215
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: claudeOutput });
|
|
216
|
+
expect(result.success).toBe(true);
|
|
217
|
+
expect(result.data.acceptance_criteria).toEqual(criteria);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe('Edge cases', () => {
|
|
221
|
+
it('should trim whitespace from title before processing', () => {
|
|
222
|
+
const claudeOutput = JSON.stringify({ description: 'Test', priority: 'P2' });
|
|
223
|
+
const result = processAutocompleteRequest({ title: ' Add feature ' }, { success: true, output: claudeOutput });
|
|
224
|
+
expect(result.success).toBe(true);
|
|
225
|
+
});
|
|
226
|
+
it('should handle title with special characters', () => {
|
|
227
|
+
const claudeOutput = JSON.stringify({ description: 'Test', priority: 'P2' });
|
|
228
|
+
const result = processAutocompleteRequest({ title: 'Fix bug #123 & add feature <test>' }, { success: true, output: claudeOutput });
|
|
229
|
+
expect(result.success).toBe(true);
|
|
230
|
+
});
|
|
231
|
+
it('should handle very long titles', () => {
|
|
232
|
+
const longTitle = 'A'.repeat(1000);
|
|
233
|
+
const claudeOutput = JSON.stringify({ description: 'Test', priority: 'P2' });
|
|
234
|
+
const result = processAutocompleteRequest({ title: longTitle }, { success: true, output: claudeOutput });
|
|
235
|
+
expect(result.success).toBe(true);
|
|
236
|
+
});
|
|
237
|
+
it('should handle unicode in title', () => {
|
|
238
|
+
const claudeOutput = JSON.stringify({ description: 'Test', priority: 'P2' });
|
|
239
|
+
const result = processAutocompleteRequest({ title: 'Ajouter fonctionnalite avec emojis et accents ete cafe' }, { success: true, output: claudeOutput });
|
|
240
|
+
expect(result.success).toBe(true);
|
|
241
|
+
});
|
|
242
|
+
it('should handle JSON with extra whitespace', () => {
|
|
243
|
+
const claudeOutput = ' \n {"description": "Test", "priority": "P2"} \n ';
|
|
244
|
+
const result = processAutocompleteRequest({ title: 'Test' }, { success: true, output: claudeOutput });
|
|
245
|
+
expect(result.success).toBe(true);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
//# sourceMappingURL=api-autocomplete.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-autocomplete.test.js","sourceRoot":"","sources":["../../src/server/api-autocomplete.test.ts"],"names":[],"mappings":"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"}
|
package/dist/server/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAw4CjE;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,OAAO,CAAC,CAqClB"}
|