@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.
Files changed (211) hide show
  1. package/README.md +38 -38
  2. package/dist/cli/commands/comment.d.ts +1 -1
  3. package/dist/cli/commands/comment.js +11 -11
  4. package/dist/cli/commands/comment.js.map +1 -1
  5. package/dist/cli/commands/init.js +1 -1
  6. package/dist/cli/commands/init.js.map +1 -1
  7. package/dist/cli/commands/list.d.ts +1 -1
  8. package/dist/cli/commands/list.d.ts.map +1 -1
  9. package/dist/cli/commands/list.js +65 -22
  10. package/dist/cli/commands/list.js.map +1 -1
  11. package/dist/cli/commands/move.d.ts +1 -1
  12. package/dist/cli/commands/move.js +12 -12
  13. package/dist/cli/commands/move.js.map +1 -1
  14. package/dist/cli/commands/new.d.ts +1 -1
  15. package/dist/cli/commands/new.d.ts.map +1 -1
  16. package/dist/cli/commands/new.js +26 -13
  17. package/dist/cli/commands/new.js.map +1 -1
  18. package/dist/cli/commands/next.d.ts +1 -1
  19. package/dist/cli/commands/next.js +15 -15
  20. package/dist/cli/commands/next.js.map +1 -1
  21. package/dist/cli/commands/parent.d.ts +9 -0
  22. package/dist/cli/commands/parent.d.ts.map +1 -0
  23. package/dist/cli/commands/parent.js +94 -0
  24. package/dist/cli/commands/parent.js.map +1 -0
  25. package/dist/cli/commands/serve.js +8 -8
  26. package/dist/cli/commands/serve.js.map +1 -1
  27. package/dist/cli/commands/show.d.ts +1 -1
  28. package/dist/cli/commands/show.d.ts.map +1 -1
  29. package/dist/cli/commands/show.js +51 -31
  30. package/dist/cli/commands/show.js.map +1 -1
  31. package/dist/cli/commands/stats.js +2 -2
  32. package/dist/cli/commands/stats.js.map +1 -1
  33. package/dist/cli/commands/sync.js +3 -3
  34. package/dist/cli/commands/sync.js.map +1 -1
  35. package/dist/cli/parser.d.ts.map +1 -1
  36. package/dist/cli/parser.js +5 -3
  37. package/dist/cli/parser.js.map +1 -1
  38. package/dist/core/column.js +2 -2
  39. package/dist/core/column.js.map +1 -1
  40. package/dist/core/hierarchy.d.ts +97 -0
  41. package/dist/core/hierarchy.d.ts.map +1 -0
  42. package/dist/core/hierarchy.js +274 -0
  43. package/dist/core/hierarchy.js.map +1 -0
  44. package/dist/core/issue.d.ts +62 -0
  45. package/dist/core/issue.d.ts.map +1 -0
  46. package/dist/core/issue.js +247 -0
  47. package/dist/core/issue.js.map +1 -0
  48. package/dist/core/sync.d.ts +9 -9
  49. package/dist/core/sync.d.ts.map +1 -1
  50. package/dist/core/sync.js +61 -58
  51. package/dist/core/sync.js.map +1 -1
  52. package/dist/core/workflow.d.ts +22 -20
  53. package/dist/core/workflow.d.ts.map +1 -1
  54. package/dist/core/workflow.js +68 -51
  55. package/dist/core/workflow.js.map +1 -1
  56. package/dist/index.d.ts +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/server/api-autocomplete.test.d.ts +6 -0
  59. package/dist/server/api-autocomplete.test.d.ts.map +1 -0
  60. package/dist/server/api-autocomplete.test.js +249 -0
  61. package/dist/server/api-autocomplete.test.js.map +1 -0
  62. package/dist/server/api.d.ts.map +1 -1
  63. package/dist/server/api.js +216 -106
  64. package/dist/server/api.js.map +1 -1
  65. package/dist/server/dashboard/pages/column-prompt.d.ts +1 -1
  66. package/dist/server/dashboard/pages/column-prompt.d.ts.map +1 -1
  67. package/dist/server/dashboard/pages/column-prompt.js +11 -11
  68. package/dist/server/dashboard/pages/column-prompt.js.map +1 -1
  69. package/dist/server/dashboard/pages/column-terminal.d.ts +1 -1
  70. package/dist/server/dashboard/pages/column-terminal.d.ts.map +1 -1
  71. package/dist/server/dashboard/pages/column-terminal.js +14 -14
  72. package/dist/server/dashboard/pages/column-terminal.js.map +1 -1
  73. package/dist/server/dashboard/pages/index.d.ts +3 -1
  74. package/dist/server/dashboard/pages/index.d.ts.map +1 -1
  75. package/dist/server/dashboard/pages/index.js +3 -1
  76. package/dist/server/dashboard/pages/index.js.map +1 -1
  77. package/dist/server/dashboard/pages/issue-graph.d.ts +9 -0
  78. package/dist/server/dashboard/pages/issue-graph.d.ts.map +1 -0
  79. package/dist/server/dashboard/pages/issue-graph.js +581 -0
  80. package/dist/server/dashboard/pages/issue-graph.js.map +1 -0
  81. package/dist/server/dashboard/pages/issue-view.d.ts +8 -0
  82. package/dist/server/dashboard/pages/issue-view.d.ts.map +1 -0
  83. package/dist/server/dashboard/pages/{ticket-view.js → issue-view.js} +128 -128
  84. package/dist/server/dashboard/pages/issue-view.js.map +1 -0
  85. package/dist/server/dashboard/pages/main-dashboard.js +21 -21
  86. package/dist/server/dashboard/pages/main-dashboard.js.map +1 -1
  87. package/dist/server/dashboard/pages/new-issue.d.ts +8 -0
  88. package/dist/server/dashboard/pages/new-issue.d.ts.map +1 -0
  89. package/dist/server/dashboard/pages/new-issue.js +648 -0
  90. package/dist/server/dashboard/pages/new-issue.js.map +1 -0
  91. package/dist/server/dashboard/pages/new-issue.test.d.ts +6 -0
  92. package/dist/server/dashboard/pages/new-issue.test.d.ts.map +1 -0
  93. package/dist/server/dashboard/pages/new-issue.test.js +349 -0
  94. package/dist/server/dashboard/pages/new-issue.test.js.map +1 -0
  95. package/dist/server/dashboard/pages/pipeline-configurator.js +1 -1
  96. package/dist/server/dashboard/pages/shared.d.ts +2 -2
  97. package/dist/server/dashboard/pages/shared.d.ts.map +1 -1
  98. package/dist/server/dashboard/pages/shared.js +5 -5
  99. package/dist/server/dashboard/pages/shared.js.map +1 -1
  100. package/dist/server/dashboard/pages/stats-page.js +11 -11
  101. package/dist/server/dashboard/scripts/index.js +134 -134
  102. package/dist/server/dashboard/styles/board.d.ts +1 -1
  103. package/dist/server/dashboard/styles/board.js +10 -10
  104. package/dist/server/dashboard.d.ts +1 -1
  105. package/dist/server/dashboard.d.ts.map +1 -1
  106. package/dist/server/dashboard.js +1 -1
  107. package/dist/server/dashboard.js.map +1 -1
  108. package/dist/server/index.d.ts.map +1 -1
  109. package/dist/server/index.js +40 -24
  110. package/dist/server/index.js.map +1 -1
  111. package/dist/server/websocket.d.ts +6 -6
  112. package/dist/server/websocket.d.ts.map +1 -1
  113. package/dist/server/websocket.js +10 -10
  114. package/dist/server/websocket.js.map +1 -1
  115. package/dist/services/claude.d.ts +13 -13
  116. package/dist/services/claude.d.ts.map +1 -1
  117. package/dist/services/claude.js +98 -98
  118. package/dist/services/claude.js.map +1 -1
  119. package/dist/services/issue-io.d.ts +81 -0
  120. package/dist/services/issue-io.d.ts.map +1 -0
  121. package/dist/services/{ticket-io.js → issue-io.js} +54 -53
  122. package/dist/services/issue-io.js.map +1 -0
  123. package/dist/services/stats.d.ts +2 -0
  124. package/dist/services/stats.d.ts.map +1 -1
  125. package/dist/services/stats.js.map +1 -1
  126. package/dist/types/index.d.ts +6 -4
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/utils/fs.d.ts +2 -2
  129. package/dist/utils/fs.d.ts.map +1 -1
  130. package/dist/utils/fs.js +2 -2
  131. package/dist/utils/fs.js.map +1 -1
  132. package/package.json +3 -3
  133. package/templates/catalog.yaml +2 -2
  134. package/templates/prompts/api-endpoints-test.en.md +2 -2
  135. package/templates/prompts/api-endpoints-test.fr.md +2 -2
  136. package/templates/prompts/backlog.en.md +6 -6
  137. package/templates/prompts/backlog.fr.md +1 -1
  138. package/templates/prompts/changelog.en.md +6 -6
  139. package/templates/prompts/changelog.fr.md +3 -3
  140. package/templates/prompts/dashboard-responsive.en.md +1 -1
  141. package/templates/prompts/deploy-prod.en.md +3 -3
  142. package/templates/prompts/deploy-prod.fr.md +3 -3
  143. package/templates/prompts/deploy-staging.en.md +3 -3
  144. package/templates/prompts/deploy-staging.fr.md +3 -3
  145. package/templates/prompts/design.en.md +5 -5
  146. package/templates/prompts/design.fr.md +3 -3
  147. package/templates/prompts/dev.en.md +4 -4
  148. package/templates/prompts/dev.fr.md +3 -3
  149. package/templates/prompts/done.en.md +5 -5
  150. package/templates/prompts/done.fr.md +2 -2
  151. package/templates/prompts/error-handling-review.en.md +1 -1
  152. package/templates/prompts/error-handling-review.fr.md +1 -1
  153. package/templates/prompts/file-watcher-test.en.md +4 -4
  154. package/templates/prompts/file-watcher-test.fr.md +1 -1
  155. package/templates/prompts/git-commit.en.md +5 -5
  156. package/templates/prompts/git-commit.fr.md +3 -3
  157. package/templates/prompts/git-push.en.md +3 -3
  158. package/templates/prompts/git-push.fr.md +3 -3
  159. package/templates/prompts/git-tag.en.md +3 -3
  160. package/templates/prompts/git-tag.fr.md +3 -3
  161. package/templates/prompts/in-progress.en.md +6 -6
  162. package/templates/prompts/in-progress.fr.md +3 -3
  163. package/templates/prompts/qualification.en.md +8 -8
  164. package/templates/prompts/qualification.fr.md +3 -3
  165. package/templates/prompts/retest-cypress.en.md +3 -3
  166. package/templates/prompts/retest-cypress.fr.md +3 -3
  167. package/templates/prompts/retest-playwright.en.md +4 -4
  168. package/templates/prompts/retest-playwright.fr.md +3 -3
  169. package/templates/prompts/retest.en.md +4 -4
  170. package/templates/prompts/retest.fr.md +3 -3
  171. package/templates/prompts/review-best-practices.en.md +3 -3
  172. package/templates/prompts/review-best-practices.fr.md +3 -3
  173. package/templates/prompts/review-code.en.md +4 -4
  174. package/templates/prompts/review-code.fr.md +3 -3
  175. package/templates/prompts/review-consistency.en.md +3 -3
  176. package/templates/prompts/review-consistency.fr.md +3 -3
  177. package/templates/prompts/review-no-duplication.en.md +3 -3
  178. package/templates/prompts/review-no-duplication.fr.md +3 -3
  179. package/templates/prompts/review-security.en.md +4 -4
  180. package/templates/prompts/review-security.fr.md +3 -3
  181. package/templates/prompts/specification.en.md +5 -5
  182. package/templates/prompts/specification.fr.md +3 -3
  183. package/templates/prompts/splitter.en.md +13 -13
  184. package/templates/prompts/splitter.fr.md +3 -3
  185. package/templates/prompts/template-validation.en.md +1 -1
  186. package/templates/prompts/template-validation.fr.md +1 -1
  187. package/templates/prompts/testing-coverage.en.md +1 -1
  188. package/templates/prompts/testing-coverage.fr.md +1 -1
  189. package/templates/prompts/testing-cypress.en.md +4 -4
  190. package/templates/prompts/testing-cypress.fr.md +3 -3
  191. package/templates/prompts/testing-integration.en.md +4 -4
  192. package/templates/prompts/testing-integration.fr.md +3 -3
  193. package/templates/prompts/testing-playwright.en.md +4 -4
  194. package/templates/prompts/testing-playwright.fr.md +3 -3
  195. package/templates/prompts/testing-unit.en.md +4 -4
  196. package/templates/prompts/testing-unit.fr.md +3 -3
  197. package/templates/prompts/update-docs.en.md +3 -3
  198. package/templates/prompts/update-docs.fr.md +3 -3
  199. package/templates/prompts/validate-staging.en.md +3 -3
  200. package/templates/prompts/validate-staging.fr.md +3 -3
  201. package/templates/prompts/websocket-test.en.md +1 -1
  202. package/dist/core/ticket.d.ts +0 -50
  203. package/dist/core/ticket.d.ts.map +0 -1
  204. package/dist/core/ticket.js +0 -224
  205. package/dist/core/ticket.js.map +0 -1
  206. package/dist/server/dashboard/pages/ticket-view.d.ts +0 -8
  207. package/dist/server/dashboard/pages/ticket-view.d.ts.map +0 -1
  208. package/dist/server/dashboard/pages/ticket-view.js.map +0 -1
  209. package/dist/services/ticket-io.d.ts +0 -80
  210. package/dist/services/ticket-io.d.ts.map +0 -1
  211. 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;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5E;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,UAAQ,GACZ,kBAAkB,CA+BpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAchE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAQlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IACrD,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,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYvD"}
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"}
@@ -2,11 +2,13 @@
2
2
  * Workflow transitions logic
3
3
  */
4
4
  import { getColumnBySlug, getColumnByIndex, getColumns } from './column.js';
5
- import { getTicket, moveTicket as moveTicketCore } from './ticket.js';
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 a ticket
52
+ * Get available transitions for an issue
38
53
  */
39
- export function getAvailableTransitions(ticket) {
40
- const currentColumn = getColumnBySlug(ticket.column_slug);
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(ticket) {
56
- const currentColumn = getColumnBySlug(ticket.column_slug);
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 !== ticket.column_slug);
76
+ return columns.filter(c => c.slug !== issue.column_slug);
62
77
  }
63
78
  /**
64
- * Check if ticket can advance to next column
79
+ * Check if issue can advance to next column
65
80
  */
66
- export function canAdvance(ticket) {
67
- const currentColumn = getColumnBySlug(ticket.column_slug);
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 ticket is in final column (done)
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(ticket) {
77
- const currentColumn = getColumnBySlug(ticket.column_slug);
92
+ export function isComplete(issue) {
93
+ const currentColumn = getColumnBySlug(issue.column_slug);
78
94
  if (!currentColumn)
79
95
  return false;
80
- const columns = getColumns();
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 ticket is in backlog
99
+ * Check if issue is in backlog
100
+ * Uses name-based detection: column name contains "backlog"
86
101
  */
87
- export function isInBacklog(ticket) {
88
- const currentColumn = getColumnBySlug(ticket.column_slug);
89
- return currentColumn?.index === 0;
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(ticket) {
95
- const currentColumn = getColumnBySlug(ticket.column_slug);
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(tickets) {
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 tickets per column
115
- for (const ticket of tickets) {
116
- const count = stats.get(ticket.column_slug) || 0;
117
- stats.set(ticket.column_slug, count + 1);
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(tickets) {
141
+ export function getWorkflowSummary(issues) {
125
142
  const columns = getColumns();
126
- const stats = getColumnStats(tickets);
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: tickets.length,
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: tickets.filter(t => {
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 a ticket to the next column
161
+ * Transition an issue to the next column
145
162
  */
146
- export function advanceTicket(rootDir, key) {
147
- const ticket = getTicket(rootDir, key);
148
- if (!ticket) {
149
- return { success: false, error: `Ticket '${key}' not found` };
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(ticket)) {
152
- return { success: false, error: `Ticket '${key}' cannot advance (already complete)` };
168
+ if (!canAdvance(issue)) {
169
+ return { success: false, error: `Issue '${key}' cannot advance (already complete)` };
153
170
  }
154
- const currentColumn = getColumnBySlug(ticket.column_slug);
171
+ const currentColumn = getColumnBySlug(issue.column_slug);
155
172
  const nextColumn = getColumnByIndex(currentColumn.index + 1);
156
- const updated = moveTicketCore(rootDir, key, nextColumn.slug);
173
+ const updated = moveIssue(rootDir, key, nextColumn.slug);
157
174
  if (!updated) {
158
- return { success: false, error: `Failed to move ticket '${key}'` };
175
+ return { success: false, error: `Failed to move issue '${key}'` };
159
176
  }
160
- return { success: true, ticket: updated };
177
+ return { success: true, issue: updated };
161
178
  }
162
179
  /**
163
- * Force transition a ticket to any column
180
+ * Force transition an issue to any column
164
181
  */
165
- export function forceTransition(rootDir, key, toColumnSlug) {
166
- const ticket = getTicket(rootDir, key);
167
- if (!ticket) {
168
- return { success: false, error: `Ticket '${key}' not found` };
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 = moveTicketCore(rootDir, key, toColumnSlug, true);
187
+ const updated = moveIssue(rootDir, key, toColumnSlug, true);
171
188
  if (!updated) {
172
- return { success: false, error: `Failed to move ticket '${key}' to '${toColumnSlug}'` };
189
+ return { success: false, error: `Failed to move issue '${key}' to '${toColumnSlug}'` };
173
190
  }
174
- return { success: true, ticket: updated };
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":"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"}
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/core/workflow.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * AutoCode CLI - Entry Point
4
4
  *
5
- * Filesystem-based ticket system with web dashboard
5
+ * Filesystem-based issue tracker with web dashboard
6
6
  */
7
7
  export {};
8
8
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * AutoCode CLI - Entry Point
4
4
  *
5
- * Filesystem-based ticket system with web dashboard
5
+ * Filesystem-based issue tracker with web dashboard
6
6
  */
7
7
  import { runCLI } from './cli/parser.js';
8
8
  runCLI().catch((error) => {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Unit tests for the /api/issues/autocomplete endpoint
3
+ * Tests the autocomplete API handler logic
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=api-autocomplete.test.d.ts.map
@@ -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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"}
@@ -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;AAswCjE;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,OAAO,CAAC,CAqClB"}
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"}