@autocode-cli/autocode 0.22.0 → 0.23.0

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 (157) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{DFQ30pd7.js → 4sw7JTbp.js} +1 -1
  3. package/.output/public/_nuxt/{BvF9_V7p.js → B6pOO9Bz.js} +1 -1
  4. package/.output/public/_nuxt/{DBuWa6JT.js → BAAVMorC.js} +1 -1
  5. package/.output/public/_nuxt/{BBgAVlXU.js → BJ-MtkWm.js} +1 -1
  6. package/.output/public/_nuxt/{CWENDdnZ.js → BJz8iexS.js} +1 -1
  7. package/.output/public/_nuxt/{DykwyQae.js → BMCm0zjc.js} +1 -1
  8. package/.output/public/_nuxt/{BvUbqlcZ.js → BU6KT1Jg.js} +1 -1
  9. package/.output/public/_nuxt/{FIIaIpPb.js → BXorvbPI.js} +1 -1
  10. package/.output/public/_nuxt/{DwfwVH0w.js → BdgB0Sk8.js} +1 -1
  11. package/.output/public/_nuxt/{QtPIr4OQ.js → BiqphZN8.js} +1 -1
  12. package/.output/public/_nuxt/{Bsd2P-Xc.js → Bn2y2u4i.js} +1 -1
  13. package/.output/public/_nuxt/{Bu1Qq2g-.js → BtXQIoy8.js} +1 -1
  14. package/.output/public/_nuxt/{DRo5NaOZ.js → Byshfb8L.js} +1 -1
  15. package/.output/public/_nuxt/{D8RlVVzC.js → C10TWEVH.js} +1 -1
  16. package/.output/public/_nuxt/{DU0awelf.js → C2rmiAJ1.js} +1 -1
  17. package/.output/public/_nuxt/{Zzp33YZj.js → CMIuQb6D.js} +1 -1
  18. package/.output/public/_nuxt/{jYigECdj.js → CTbIP459.js} +1 -1
  19. package/.output/public/_nuxt/{D4lcVP-d.js → ClY4a-PO.js} +1 -1
  20. package/.output/public/_nuxt/{CjVJcaTo.js → D0HHOq4k.js} +3 -3
  21. package/.output/public/_nuxt/{DYYF8rpr.js → D1JH-OfY.js} +1 -1
  22. package/.output/public/_nuxt/{Bxcwuw3U.js → D9fas07B.js} +1 -1
  23. package/.output/public/_nuxt/{DaYBQX26.js → DAd8dbng.js} +1 -1
  24. package/.output/public/_nuxt/{iHS1jy-1.js → DNMLSDtV.js} +1 -1
  25. package/.output/public/_nuxt/{_HJO0SwU.js → DbZiOpag.js} +1 -1
  26. package/.output/public/_nuxt/{TB1o0NrH.js → DuqM_LGj.js} +1 -1
  27. package/.output/public/_nuxt/{CoGBQbLh.js → DxFm2Qrx.js} +1 -1
  28. package/.output/public/_nuxt/builds/latest.json +1 -1
  29. package/.output/public/_nuxt/builds/meta/35ace9c2-472c-4755-ae87-74fdb84336dd.json +1 -0
  30. package/.output/public/_nuxt/{BZUmpBmU.js → c4NRZ8AG.js} +1 -1
  31. package/.output/public/_nuxt/{BthlfLoK.js → g7WOzF8b.js} +1 -1
  32. package/.output/public/_nuxt/{TA-NBooC.js → kNuGsBnB.js} +1 -1
  33. package/.output/public/_nuxt/{DNUcHFTN.js → kZiZQgsI.js} +1 -1
  34. package/.output/public/_nuxt/{CTV7-Iux.js → mty-mFWB.js} +1 -1
  35. package/.output/public/_payload.json +1 -1
  36. package/.output/public/fake-features/cocktail-generator/cocktails.js +541 -0
  37. package/.output/public/fake-features/cocktail-generator/index.html +620 -0
  38. package/.output/public/index.html +1 -1
  39. package/.output/server/chunks/build/_name_-UJA12Rs2.mjs +1 -1
  40. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  41. package/.output/server/chunks/build/fetch-B5NxMLIO.mjs +1 -1
  42. package/.output/server/chunks/build/nuxt-link-Cq8xZgFP.mjs +1 -1
  43. package/.output/server/chunks/build/server.mjs +3 -3
  44. package/.output/server/chunks/build/styles.mjs +7 -7
  45. package/.output/server/chunks/build/usePipeline-ZPHbtOs6.mjs +1 -1
  46. package/.output/server/chunks/nitro/nitro.mjs +802 -379
  47. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  48. package/.output/server/chunks/routes/_ws.mjs +1 -1
  49. package/.output/server/chunks/routes/api/index.get2.mjs +6 -2
  50. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  51. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  52. package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
  53. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  54. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  55. package/.output/server/chunks/routes/api/issues/_id/comments.get.mjs +1 -2
  56. package/.output/server/chunks/routes/api/issues/_id/comments.get.mjs.map +1 -1
  57. package/.output/server/chunks/routes/api/issues/_id/comments.post.mjs +1 -2
  58. package/.output/server/chunks/routes/api/issues/_id/comments.post.mjs.map +1 -1
  59. package/.output/server/chunks/routes/api/issues/_id/full-history.get.mjs +1 -1
  60. package/.output/server/chunks/routes/api/issues/_id/full-terminal.get.mjs +1 -1
  61. package/.output/server/chunks/routes/api/issues/_id/history/_sessionId/log.get.mjs +1 -1
  62. package/.output/server/chunks/routes/api/issues/_id/history/_sessionId/prompt.get.mjs +1 -1
  63. package/.output/server/chunks/routes/api/issues/_id/history.get.mjs +1 -1
  64. package/.output/server/chunks/routes/api/issues/_id/log.get.mjs +1 -1
  65. package/.output/server/chunks/routes/api/issues/_id/move.post.mjs +1 -1
  66. package/.output/server/chunks/routes/api/issues/_id/next.post.mjs +1 -1
  67. package/.output/server/chunks/routes/api/issues/actionable.get.mjs +1 -1
  68. package/.output/server/chunks/routes/api/issues/autocomplete.post.mjs +1 -1
  69. package/.output/server/chunks/routes/api/issues/graph.get.mjs +1 -1
  70. package/.output/server/chunks/routes/api/pipelines/_name/activate.put.mjs +1 -1
  71. package/.output/server/chunks/routes/api/pipelines/_name/versions/_version/activate.put.mjs +1 -1
  72. package/.output/server/chunks/routes/api/pipelines/_name/versions/_version/finalize.post.mjs +1 -1
  73. package/.output/server/chunks/routes/api/pipelines/_name/versions/_version_.delete.mjs +1 -1
  74. package/.output/server/chunks/routes/api/pipelines/_name/versions/_version_.get.mjs +1 -1
  75. package/.output/server/chunks/routes/api/pipelines/_name/versions/_version_.put.mjs +1 -1
  76. package/.output/server/chunks/routes/api/pipelines/_name/versions.get.mjs +1 -1
  77. package/.output/server/chunks/routes/api/pipelines/_name/versions.post.mjs +1 -1
  78. package/.output/server/chunks/routes/api/pipelines/_name_.delete.mjs +1 -1
  79. package/.output/server/chunks/routes/api/pipelines/_name_.get.mjs +1 -1
  80. package/.output/server/chunks/routes/api/pipelines/_name_.put.mjs +1 -1
  81. package/.output/server/chunks/routes/api/stats.get.mjs +1 -1
  82. package/.output/server/chunks/routes/api/workflow/health.get.mjs +1 -1
  83. package/.output/server/chunks/routes/api/ws/status.get.mjs +1 -1
  84. package/.output/server/chunks/routes/renderer.mjs +1 -1
  85. package/.output/server/index.mjs +1 -1
  86. package/.output/server/node_modules/.prisma/client/index.js +6 -3
  87. package/.output/server/node_modules/.prisma/client/package.json +1 -1
  88. package/.output/server/package.json +1 -1
  89. package/bin/autocode +50 -0
  90. package/package.json +1 -1
  91. package/templates/prompts/_transition-decision.en.md +69 -0
  92. package/templates/prompts/_transition-decision.fr.md +69 -0
  93. package/templates/prompts/backlog.en.md +1 -3
  94. package/templates/prompts/backlog.fr.md +1 -3
  95. package/templates/prompts/changelog.en.md +1 -4
  96. package/templates/prompts/changelog.fr.md +1 -4
  97. package/templates/prompts/deploy-prod.en.md +1 -4
  98. package/templates/prompts/deploy-prod.fr.md +1 -4
  99. package/templates/prompts/deploy-staging.en.md +1 -4
  100. package/templates/prompts/deploy-staging.fr.md +1 -4
  101. package/templates/prompts/design.en.md +1 -4
  102. package/templates/prompts/design.fr.md +1 -4
  103. package/templates/prompts/dev.en.md +1 -4
  104. package/templates/prompts/dev.fr.md +1 -4
  105. package/templates/prompts/done.en.md +2 -3
  106. package/templates/prompts/done.fr.md +2 -3
  107. package/templates/prompts/git-commit.en.md +1 -4
  108. package/templates/prompts/git-commit.fr.md +1 -4
  109. package/templates/prompts/git-push.en.md +1 -4
  110. package/templates/prompts/git-push.fr.md +1 -4
  111. package/templates/prompts/git-tag.en.md +1 -4
  112. package/templates/prompts/git-tag.fr.md +1 -4
  113. package/templates/prompts/in-progress.en.md +2 -8
  114. package/templates/prompts/in-progress.fr.md +1 -7
  115. package/templates/prompts/qualification.en.md +1 -4
  116. package/templates/prompts/qualification.fr.md +0 -3
  117. package/templates/prompts/ready.en.md +3 -6
  118. package/templates/prompts/ready.fr.md +3 -6
  119. package/templates/prompts/retest-cypress.en.md +1 -4
  120. package/templates/prompts/retest-cypress.fr.md +1 -4
  121. package/templates/prompts/retest-playwright.en.md +1 -4
  122. package/templates/prompts/retest-playwright.fr.md +1 -4
  123. package/templates/prompts/retest-unit.en.md +1 -4
  124. package/templates/prompts/retest-unit.fr.md +1 -4
  125. package/templates/prompts/retest.en.md +1 -4
  126. package/templates/prompts/retest.fr.md +1 -4
  127. package/templates/prompts/review-best-practices.en.md +1 -4
  128. package/templates/prompts/review-best-practices.fr.md +1 -4
  129. package/templates/prompts/review-code.en.md +1 -4
  130. package/templates/prompts/review-code.fr.md +1 -4
  131. package/templates/prompts/review-consistency.en.md +1 -4
  132. package/templates/prompts/review-consistency.fr.md +1 -4
  133. package/templates/prompts/review-no-duplication.en.md +1 -4
  134. package/templates/prompts/review-no-duplication.fr.md +1 -4
  135. package/templates/prompts/review-security.en.md +1 -4
  136. package/templates/prompts/review-security.fr.md +1 -4
  137. package/templates/prompts/specification.en.md +1 -4
  138. package/templates/prompts/specification.fr.md +1 -4
  139. package/templates/prompts/splitter.en.md +1 -4
  140. package/templates/prompts/splitter.fr.md +0 -3
  141. package/templates/prompts/testing-cypress.en.md +1 -4
  142. package/templates/prompts/testing-cypress.fr.md +1 -4
  143. package/templates/prompts/testing-integration.en.md +1 -4
  144. package/templates/prompts/testing-integration.fr.md +1 -4
  145. package/templates/prompts/testing-playwright.en.md +1 -4
  146. package/templates/prompts/testing-playwright.fr.md +1 -4
  147. package/templates/prompts/testing-unit.en.md +1 -4
  148. package/templates/prompts/testing-unit.fr.md +1 -4
  149. package/templates/prompts/update-docs.en.md +1 -4
  150. package/templates/prompts/update-docs.fr.md +1 -4
  151. package/templates/prompts/validate-staging.en.md +1 -4
  152. package/templates/prompts/validate-staging.fr.md +1 -4
  153. package/.output/public/_nuxt/builds/meta/83d9a3fc-c99e-4e26-adef-e7f5b329b81a.json +0 -1
  154. package/.output/server/chunks/_/comments.service.mjs +0 -26
  155. package/.output/server/chunks/_/comments.service.mjs.map +0 -1
  156. /package/.output/public/_i18n/{zP5M_e1m → __ad3z6g}/en/messages.json +0 -0
  157. /package/.output/public/_i18n/{zP5M_e1m → __ad3z6g}/fr/messages.json +0 -0
@@ -10001,7 +10001,7 @@ function _expandFromEnv(value) {
10001
10001
  const _inlineRuntimeConfig = {
10002
10002
  "app": {
10003
10003
  "baseURL": "/",
10004
- "buildId": "83d9a3fc-c99e-4e26-adef-e7f5b329b81a",
10004
+ "buildId": "35ace9c2-472c-4755-ae87-74fdb84336dd",
10005
10005
  "buildAssetsDir": "/_nuxt/",
10006
10006
  "cdnURL": ""
10007
10007
  },
@@ -10518,7 +10518,7 @@ async function errorHandler(error, event) {
10518
10518
  * Released under the MIT License.
10519
10519
  */
10520
10520
  const _create = Object.create;
10521
- const create$4 = (obj = null) => _create(obj);
10521
+ const create$5 = (obj = null) => _create(obj);
10522
10522
  /* eslint-enable */
10523
10523
  /**
10524
10524
  * Useful Utilities By Evan you
@@ -10553,7 +10553,7 @@ function deepCopy(src, des) {
10553
10553
  // if src[key] is an object/array, set des[key]
10554
10554
  // to empty object/array to prevent setting by reference
10555
10555
  if (isObject(src[key]) && !isObject(des[key])) {
10556
- des[key] = Array.isArray(src[key]) ? [] : create$4();
10556
+ des[key] = Array.isArray(src[key]) ? [] : create$5();
10557
10557
  }
10558
10558
  if (isNotObjectOrIsArray(des[key]) || isNotObjectOrIsArray(src[key])) {
10559
10559
  // replace with src[key] when:
@@ -10572,18 +10572,18 @@ function deepCopy(src, des) {
10572
10572
  const __nuxtMock = { runWithContext: async (fn) => await fn() };
10573
10573
  const merger = createDefu((obj, key, value) => {
10574
10574
  if (key === "messages" || key === "datetimeFormats" || key === "numberFormats") {
10575
- obj[key] ??= create$4(null);
10575
+ obj[key] ??= create$5(null);
10576
10576
  deepCopy(value, obj[key]);
10577
10577
  return true;
10578
10578
  }
10579
10579
  });
10580
10580
  async function loadVueI18nOptions(vueI18nConfigs) {
10581
10581
  const nuxtApp = __nuxtMock;
10582
- let vueI18nOptions = { messages: create$4(null) };
10582
+ let vueI18nOptions = { messages: create$5(null) };
10583
10583
  for (const configFile of vueI18nConfigs) {
10584
10584
  const resolver = await configFile().then((x) => x.default);
10585
10585
  const resolved = isFunction(resolver) ? await nuxtApp.runWithContext(() => resolver()) : resolver;
10586
- vueI18nOptions = merger(create$4(null), resolved, vueI18nOptions);
10586
+ vueI18nOptions = merger(create$5(null), resolved, vueI18nOptions);
10587
10587
  }
10588
10588
  vueI18nOptions.fallbackLocale ??= false;
10589
10589
  return vueI18nOptions;
@@ -10960,10 +10960,17 @@ function writeToFile(message) {
10960
10960
  } catch {
10961
10961
  }
10962
10962
  }
10963
- function debug$1(module, message, data) {
10963
+ function debug$1(module, message, data, options) {
10964
10964
  if (!isDebugEnabled()) return;
10965
10965
  const dataStr = data !== void 0 ? " " + JSON.stringify(data) : "";
10966
- const line = `[${timestamp()}] [${module}] ${message}${dataStr}`;
10966
+ let line = `[${timestamp()}] [${module}] ${message}${dataStr}`;
10967
+ if (options == null ? void 0 : options.trace) {
10968
+ const stack = new Error().stack;
10969
+ if (stack) {
10970
+ const frames = stack.split("\n").slice(2).map((l) => " " + l.trim()).join("\n");
10971
+ line += "\n" + frames;
10972
+ }
10973
+ }
10967
10974
  writeToFile(line);
10968
10975
  }
10969
10976
  function initLogger() {
@@ -10982,7 +10989,12 @@ function initLogger() {
10982
10989
  let isClaudeRunning = false;
10983
10990
  const claudeQueue = [];
10984
10991
  async function acquireClaudeLock() {
10985
- debug$1("claude", "Acquiring lock...");
10992
+ debug$1(
10993
+ "claude",
10994
+ "Acquiring lock...",
10995
+ { queueLength: claudeQueue.length, isRunning: isClaudeRunning },
10996
+ { trace: true }
10997
+ );
10986
10998
  if (!isClaudeRunning) {
10987
10999
  isClaudeRunning = true;
10988
11000
  debug$1("claude", "Lock acquired immediately");
@@ -11074,10 +11086,8 @@ Ce commentaire doit r\xE9sumer ce que tu as fait, les fichiers modifi\xE9s, les
11074
11086
  R\xE9pond moi dans la langue : ${lang} (m\xEAme si tu dois travailler en anglais)
11075
11087
  `;
11076
11088
  }
11077
- async function executeClaudeCLIStream(prompt, issueKey, columnSlug) {
11078
- debug$1("claude", "executeClaudeCLIStream called", { issueKey, columnSlug });
11079
- await acquireClaudeLock();
11080
- debug$1("claude", "Lock acquired, starting execution", { issueKey, columnSlug });
11089
+ async function executeClaudeCLIStreamWithoutLock(prompt, issueKey, columnSlug) {
11090
+ debug$1("claude", "executeClaudeCLIStreamWithoutLock called", { issueKey, columnSlug });
11081
11091
  const startTime = Date.now();
11082
11092
  let model = "";
11083
11093
  let tokensInput = 0;
@@ -11193,7 +11203,6 @@ async function executeClaudeCLIStream(prompt, issueKey, columnSlug) {
11193
11203
  duration,
11194
11204
  sessionId: sessionId || void 0
11195
11205
  });
11196
- releaseClaudeLock();
11197
11206
  if (code === 0) {
11198
11207
  resolve({
11199
11208
  success: true,
@@ -11219,7 +11228,6 @@ async function executeClaudeCLIStream(prompt, issueKey, columnSlug) {
11219
11228
  error: error.message,
11220
11229
  sessionId: sessionId || void 0
11221
11230
  });
11222
- releaseClaudeLock();
11223
11231
  resolve({
11224
11232
  success: false,
11225
11233
  error: error.message,
@@ -11504,7 +11512,7 @@ async function findByKey(key) {
11504
11512
  }
11505
11513
  });
11506
11514
  }
11507
- async function create$3(data, initialColumnId, initialColumnSlug = "backlog") {
11515
+ async function create$4(data, initialColumnId, initialColumnSlug = "backlog") {
11508
11516
  var _a, _b, _c, _d, _e;
11509
11517
  debug$1("issues", "create", { title: data.title, parentKey: data.parentKey, initialColumnSlug });
11510
11518
  let columnId = initialColumnId;
@@ -11729,14 +11737,61 @@ async function getAncestors(key) {
11729
11737
  }
11730
11738
  return ancestors;
11731
11739
  }
11740
+ const LOCK_TTL_MS = 10 * 60 * 1e3;
11741
+ async function acquireProcessingLock(key, columnId, sessionId) {
11742
+ const cutoff = new Date(Date.now() - LOCK_TTL_MS);
11743
+ const issue = await prisma.issue.findUnique({
11744
+ where: { key },
11745
+ select: {
11746
+ processingColumnId: true,
11747
+ processingStartedAt: true,
11748
+ processingSessionId: true
11749
+ }
11750
+ });
11751
+ if (!issue) {
11752
+ debug$1("issues", "acquireProcessingLock - issue not found", { key });
11753
+ return false;
11754
+ }
11755
+ if (issue.processingColumnId === columnId && issue.processingStartedAt && issue.processingStartedAt > cutoff) {
11756
+ debug$1("issues", "Processing lock already held", {
11757
+ key,
11758
+ columnId,
11759
+ existingSessionId: issue.processingSessionId,
11760
+ startedAt: issue.processingStartedAt,
11761
+ ttlRemainingMs: issue.processingStartedAt.getTime() + LOCK_TTL_MS - Date.now()
11762
+ });
11763
+ return false;
11764
+ }
11765
+ await prisma.issue.update({
11766
+ where: { key },
11767
+ data: {
11768
+ processingColumnId: columnId,
11769
+ processingStartedAt: /* @__PURE__ */ new Date(),
11770
+ processingSessionId: sessionId
11771
+ }
11772
+ });
11773
+ debug$1("issues", "Processing lock acquired", { key, columnId, sessionId });
11774
+ return true;
11775
+ }
11776
+ async function releaseProcessingLock(key) {
11777
+ await prisma.issue.update({
11778
+ where: { key },
11779
+ data: {
11780
+ processingColumnId: null,
11781
+ processingStartedAt: null,
11782
+ processingSessionId: null
11783
+ }
11784
+ });
11785
+ debug$1("issues", "Processing lock released", { key });
11786
+ }
11732
11787
 
11733
- async function findByIssue$1(issueKey) {
11788
+ async function findByIssue$2(issueKey) {
11734
11789
  return prisma.issueHistory.findMany({
11735
11790
  where: { issueKey },
11736
11791
  orderBy: { at: "desc" }
11737
11792
  });
11738
11793
  }
11739
- async function create$2(issueKey, data) {
11794
+ async function create$3(issueKey, data) {
11740
11795
  var _a;
11741
11796
  debug$1("history", "create", {
11742
11797
  issueKey,
@@ -11800,7 +11855,7 @@ async function generateMonitoringReport() {
11800
11855
  });
11801
11856
  }
11802
11857
  }
11803
- const history = await findByIssue$1(issue.key);
11858
+ const history = await findByIssue$2(issue.key);
11804
11859
  const historyForLoop = history.map((h) => {
11805
11860
  var _a2;
11806
11861
  return {
@@ -11920,6 +11975,153 @@ function toKebabCase(str) {
11920
11975
  return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
11921
11976
  }
11922
11977
 
11978
+ async function getTransitionDecision(context) {
11979
+ var _a;
11980
+ const { issue, history, lastComment, lang = "fr" } = context;
11981
+ debug$1("transition-decider", "Getting transition decision", {
11982
+ issueKey: issue.key,
11983
+ currentColumn: (_a = issue.column) == null ? void 0 : _a.slug,
11984
+ columnsCount: context.columns.length,
11985
+ historyCount: history.length,
11986
+ hasLastComment: !!lastComment
11987
+ });
11988
+ const promptTemplate = await loadDecisionPrompt(lang);
11989
+ if (!promptTemplate) {
11990
+ debug$1("transition-decider", "No prompt template found, defaulting to NEXT");
11991
+ return { action: "NEXT", reason: "No decision prompt template" };
11992
+ }
11993
+ const prompt = buildDecisionPrompt(promptTemplate, context);
11994
+ debug$1("transition-decider", "Calling LLM for decision", {
11995
+ promptLength: prompt.length
11996
+ });
11997
+ const response = await callLLM(prompt);
11998
+ if (!response) {
11999
+ debug$1("transition-decider", "LLM call failed, defaulting to RETRY");
12000
+ return { action: "RETRY", reason: "LLM call failed" };
12001
+ }
12002
+ const decision = parseDecisionResponse(response);
12003
+ debug$1("transition-decider", "Decision made", {
12004
+ action: decision.action,
12005
+ targetColumn: decision.targetColumn,
12006
+ reason: decision.reason
12007
+ });
12008
+ return decision;
12009
+ }
12010
+ async function loadDecisionPrompt(lang) {
12011
+ const promptDir = join$1(process.cwd(), "templates", "prompts");
12012
+ const promptFile = `_transition-decision.${lang}.md`;
12013
+ const promptPath = join$1(promptDir, promptFile);
12014
+ try {
12015
+ const content = await readFile$1(promptPath, "utf-8");
12016
+ return content;
12017
+ } catch (error) {
12018
+ debug$1("transition-decider", "Failed to load prompt template", {
12019
+ path: promptPath,
12020
+ error: String(error)
12021
+ });
12022
+ if (lang !== "fr") {
12023
+ return loadDecisionPrompt("fr");
12024
+ }
12025
+ return null;
12026
+ }
12027
+ }
12028
+ function buildDecisionPrompt(template, context) {
12029
+ var _a, _b;
12030
+ const { issue, columns, history, lastComment } = context;
12031
+ const columnsList = columns.map((c) => `- ${c.slug}`).join("\n");
12032
+ const historyText = history.slice(0, 10).map((h) => {
12033
+ const date = new Date(h.at).toISOString();
12034
+ return `[${date}] ${h.action}: ${h.fromColumn} \u2192 ${h.toColumn}`;
12035
+ }).join("\n");
12036
+ const commentText = lastComment ? `Auteur: ${lastComment.author}
12037
+ Date: ${new Date(lastComment.createdAt).toISOString()}
12038
+ Contenu:
12039
+ ${lastComment.content}` : "Aucun commentaire";
12040
+ return template.replace("{key}", issue.key).replace("{title}", issue.title).replace("{currentColumn}", (_b = (_a = issue.column) == null ? void 0 : _a.slug) != null ? _b : "unknown").replace("{columnsList}", columnsList).replace("{history}", historyText || "Aucun historique").replace("{lastComment}", commentText);
12041
+ }
12042
+ async function callLLM(prompt) {
12043
+ var _a, _b;
12044
+ const config = useRuntimeConfig();
12045
+ if (!config.anthropicApiKey) {
12046
+ debug$1("transition-decider", "Anthropic API key not configured");
12047
+ return null;
12048
+ }
12049
+ try {
12050
+ const response = await fetch("https://api.anthropic.com/v1/messages", {
12051
+ method: "POST",
12052
+ headers: {
12053
+ "Content-Type": "application/json",
12054
+ "x-api-key": config.anthropicApiKey,
12055
+ "anthropic-version": "2023-06-01"
12056
+ },
12057
+ body: JSON.stringify({
12058
+ // Use haiku for speed - this is a simple decision task
12059
+ model: "claude-3-5-haiku-20241022",
12060
+ max_tokens: 256,
12061
+ messages: [
12062
+ {
12063
+ role: "user",
12064
+ content: prompt
12065
+ }
12066
+ ]
12067
+ })
12068
+ });
12069
+ if (!response.ok) {
12070
+ const errorText = await response.text();
12071
+ debug$1("transition-decider", "Anthropic API error", {
12072
+ status: response.status,
12073
+ error: errorText
12074
+ });
12075
+ return null;
12076
+ }
12077
+ const data = await response.json();
12078
+ const textContent = (_a = data.content) == null ? void 0 : _a.find((c) => c.type === "text");
12079
+ return (_b = textContent == null ? void 0 : textContent.text) != null ? _b : null;
12080
+ } catch (error) {
12081
+ debug$1("transition-decider", "LLM call failed", { error: String(error) });
12082
+ return null;
12083
+ }
12084
+ }
12085
+ function parseDecisionResponse(response) {
12086
+ const trimmed = response.trim();
12087
+ const moveMatch = trimmed.match(/^MOVE\s+(\S+)\s*\[([^\]]+)\]/i);
12088
+ if (moveMatch) {
12089
+ return {
12090
+ action: "MOVE",
12091
+ targetColumn: moveMatch[1],
12092
+ reason: moveMatch[2]
12093
+ };
12094
+ }
12095
+ const actionMatch = trimmed.match(/^(NEXT|RETRY|BLOCKED)\s*\[([^\]]+)\]/i);
12096
+ if (actionMatch) {
12097
+ return {
12098
+ action: actionMatch[1].toUpperCase(),
12099
+ reason: actionMatch[2]
12100
+ };
12101
+ }
12102
+ if (/^NEXT/i.test(trimmed)) {
12103
+ return { action: "NEXT", reason: trimmed };
12104
+ }
12105
+ if (/^RETRY/i.test(trimmed)) {
12106
+ return { action: "RETRY", reason: trimmed };
12107
+ }
12108
+ if (/^BLOCKED/i.test(trimmed)) {
12109
+ return { action: "BLOCKED", reason: trimmed };
12110
+ }
12111
+ if (/^MOVE/i.test(trimmed)) {
12112
+ const columnMatch = trimmed.match(/MOVE\s+(\S+)/i);
12113
+ return {
12114
+ action: "MOVE",
12115
+ targetColumn: columnMatch == null ? void 0 : columnMatch[1],
12116
+ reason: trimmed
12117
+ };
12118
+ }
12119
+ debug$1("transition-decider", "Could not parse response, defaulting to RETRY", {
12120
+ response: trimmed
12121
+ });
12122
+ return { action: "RETRY", reason: `Unparseable response: ${trimmed}` };
12123
+ }
12124
+
11923
12125
  const WS_SERVER_URL = process.env.WS_SERVER_URL || "http://localhost:3001";
11924
12126
  function broadcast(message, _channel) {
11925
12127
  fetch(`${WS_SERVER_URL}/broadcast`, {
@@ -12288,7 +12490,7 @@ const _30Vdoj9BdcorODZX8NqnLz57uz8l9ngyL5Vaul6aAo = defineNitroPlugin(async (nit
12288
12490
  const localeSegment = detector.route(event.path);
12289
12491
  const pathLocale = isSupportedLocale(localeSegment) && localeSegment || void 0;
12290
12492
  const path = (pathLocale && url.pathname.slice(pathLocale.length + 1)) ?? url.pathname;
12291
- if (!url.pathname.includes("/_i18n/zP5M_e1m") && !isExistingNuxtRoute(path)) {
12493
+ if (!url.pathname.includes("/_i18n/__ad3z6g") && !isExistingNuxtRoute(path)) {
12292
12494
  return;
12293
12495
  }
12294
12496
  const resolved = resolveRedirectPath(event, path, pathLocale, ctx.vueI18nOptions.defaultLocale, detector);
@@ -12314,7 +12516,7 @@ async function findBySessionId(sessionId) {
12314
12516
  include: { column: true }
12315
12517
  });
12316
12518
  }
12317
- async function findByIssue(issueKey) {
12519
+ async function findByIssue$1(issueKey) {
12318
12520
  return prisma.executionLog.findMany({
12319
12521
  where: { issueKey },
12320
12522
  orderBy: { createdAt: "desc" },
@@ -12328,7 +12530,7 @@ async function findByIssueAndColumnId(issueKey, columnId) {
12328
12530
  include: { column: true }
12329
12531
  });
12330
12532
  }
12331
- async function create$1(data) {
12533
+ async function create$2(data) {
12332
12534
  var _a, _b, _c;
12333
12535
  debug$1("execution-logs", "create", {
12334
12536
  sessionId: data.sessionId,
@@ -12411,77 +12613,52 @@ function toPromptIssue(issue, columnSlug) {
12411
12613
  };
12412
12614
  }
12413
12615
  async function moveAndProcessIssueById(key, targetColumnId, options = {}) {
12414
- debug$1("workflow", "moveAndProcessIssueById called", { key, targetColumnId, options });
12415
- const lang = options.lang || "fr";
12616
+ debug$1("workflow", "=== moveAndProcessIssueById START (move only, no Claude) ===", {
12617
+ key,
12618
+ targetColumnId,
12619
+ options
12620
+ });
12416
12621
  const force = options.force || false;
12417
- const issue = await findByKey(key);
12418
- if (!issue) {
12419
- debug$1("workflow", "Issue not found", { key });
12420
- return { success: false, error: `Issue '${key}' not found` };
12421
- }
12422
- debug$1("workflow", "Issue found", { key, currentColumnId: issue.columnId });
12423
12622
  const targetColumn = await findById(targetColumnId);
12424
12623
  if (!targetColumn) {
12425
12624
  debug$1("workflow", "Target column not found", { targetColumnId });
12426
12625
  return { success: false, error: `Column with ID '${targetColumnId}' not found` };
12427
12626
  }
12428
- debug$1("workflow", "Target column", { slug: targetColumn.slug, id: targetColumnId });
12627
+ debug$1("workflow", "Target column loaded", { slug: targetColumn.slug, id: targetColumnId });
12628
+ const issue = await findByKey(key);
12629
+ if (!issue) {
12630
+ debug$1("workflow", "Issue not found", { key });
12631
+ return { success: false, error: `Issue '${key}' not found` };
12632
+ }
12633
+ debug$1("workflow", "Issue loaded", { key, currentColumnId: issue.columnId });
12429
12634
  if (issue.columnId === targetColumnId) {
12430
- debug$1("workflow", "Already in target column, skipping", { key, columnId: targetColumnId });
12635
+ debug$1("workflow", "Issue already in target column", {
12636
+ key,
12637
+ columnSlug: targetColumn.slug
12638
+ });
12431
12639
  return { success: true, issue, actionExecuted: false };
12432
12640
  }
12433
12641
  const validation = await validateTransitionById(issue.columnId, targetColumnId, force);
12434
- debug$1("workflow", "Transition validation", { valid: validation.valid, reason: validation.reason });
12642
+ debug$1("workflow", "Transition validation", {
12643
+ from: issue.columnId,
12644
+ to: targetColumnId,
12645
+ valid: validation.valid,
12646
+ reason: validation.reason
12647
+ });
12435
12648
  if (!validation.valid) {
12436
12649
  return { success: false, error: validation.reason };
12437
12650
  }
12438
12651
  const movedIssue = await moveToColumnById(key, targetColumnId);
12439
- debug$1("workflow", "Issue moved in DB", { key, newColumnId: targetColumnId });
12440
- const actionable = await isActionableColumnById(targetColumnId);
12441
- debug$1("workflow", "Column actionable check", { actionable, columnSlug: targetColumn.slug });
12442
- if (!actionable) {
12443
- return { success: true, issue: movedIssue, actionExecuted: false };
12444
- }
12445
- const actionContent = await getColumnPrompt(targetColumn.slug, lang);
12446
- debug$1("workflow", "Prompt loaded", {
12447
- columnSlug: targetColumn.slug,
12448
- promptLength: (actionContent == null ? void 0 : actionContent.length) || 0
12449
- });
12450
- if (!actionContent) {
12451
- debug$1("workflow", "No prompt content, skipping Claude execution");
12452
- return { success: true, issue: movedIssue, actionExecuted: false };
12453
- }
12454
- const prompt = buildPrompt(toPromptIssue(movedIssue, targetColumn.slug), actionContent, lang);
12455
- const sessionId = generateSessionId();
12456
- debug$1("workflow", "Session created", { sessionId, key, columnSlug: targetColumn.slug });
12457
- await create$1({
12458
- sessionId,
12459
- issueKey: key,
12460
- columnId: targetColumnId,
12461
- prompt
12462
- });
12463
- debug$1("workflow", "Calling Claude CLI", { key, columnSlug: targetColumn.slug, sessionId });
12464
- const result = await executeClaudeCLIStream(prompt, key, targetColumn.slug);
12465
- debug$1("workflow", "Claude CLI returned", { success: result.success, error: result.error });
12466
- if (result.output) {
12467
- await updateTerminalLog(sessionId, result.output);
12468
- }
12469
- await create$2(key, {
12470
- action: "started",
12471
- fromColumn: targetColumn.slug,
12472
- toColumn: targetColumn.slug,
12473
- sessionId
12652
+ debug$1("workflow", "Issue moved", {
12653
+ key,
12654
+ newColumnId: targetColumnId,
12655
+ newColumnSlug: targetColumn.slug
12474
12656
  });
12475
- debug$1("workflow", "History entry created", { action: "started", sessionId });
12476
- if (!result.success) {
12477
- return { success: true, issue: movedIssue, actionExecuted: false, error: result.error };
12478
- }
12479
- const updatedIssue = await findByKey(key);
12480
- debug$1("workflow", "moveAndProcessIssueById completed", { key, actionExecuted: true });
12481
- return { success: true, issue: updatedIssue || movedIssue, actionExecuted: true };
12657
+ debug$1("workflow", "=== moveAndProcessIssueById END (move only) ===", { key });
12658
+ return { success: true, issue: movedIssue, actionExecuted: false };
12482
12659
  }
12483
12660
  async function moveToNextColumnAndProcess(key, options = {}) {
12484
- debug$1("workflow", "moveToNextColumnAndProcess called", { key, options });
12661
+ debug$1("workflow", "moveToNextColumnAndProcess called (move only, no Claude)", { key, options });
12485
12662
  const issue = await findByKey(key);
12486
12663
  if (!issue) {
12487
12664
  debug$1("workflow", "Issue not found for next", { key });
@@ -12591,111 +12768,343 @@ async function findActionableIssue(options = {}) {
12591
12768
  return sorted[0] || null;
12592
12769
  }
12593
12770
  async function processIssueInCurrentColumn(key, options = {}) {
12594
- debug$1("workflow", "processIssueInCurrentColumn called", { key, options });
12771
+ debug$1("workflow", "=== processIssueInCurrentColumn START ===", { key, options });
12595
12772
  const lang = options.lang || "fr";
12596
- const issue = await findByKey(key);
12597
- if (!issue) {
12598
- debug$1("workflow", "Issue not found for current column processing", { key });
12599
- return { success: false, error: `Issue '${key}' not found` };
12600
- }
12601
- const column = await findById(issue.columnId);
12602
- if (!column) {
12603
- debug$1("workflow", "Column not found", { key, columnId: issue.columnId });
12604
- return { success: false, error: `Column not found for issue '${key}'` };
12605
- }
12606
- debug$1("workflow", "Processing in current column", { key, columnSlug: column.slug });
12607
- const actionable = await isActionableColumnById(issue.columnId);
12608
- debug$1("workflow", "Current column actionable check", { actionable, columnSlug: column.slug });
12609
- if (!actionable) {
12610
- return { success: true, issue, actionExecuted: false };
12611
- }
12612
- const actionContent = await getColumnPrompt(column.slug, lang);
12613
- debug$1("workflow", "Prompt loaded for current column", {
12614
- columnSlug: column.slug,
12615
- promptLength: (actionContent == null ? void 0 : actionContent.length) || 0
12616
- });
12617
- if (!actionContent) {
12618
- debug$1("workflow", "No prompt content for current column");
12619
- return { success: true, issue, actionExecuted: false };
12620
- }
12621
- const prompt = buildPrompt(toPromptIssue(issue, column.slug), actionContent, lang);
12622
- const sessionId = generateSessionId();
12623
- debug$1("workflow", "Session created for current column", {
12624
- sessionId,
12773
+ debug$1("workflow", "Acquiring Claude lock FIRST (before any state check)", {
12625
12774
  key,
12626
- columnSlug: column.slug
12627
- });
12628
- await create$1({
12629
- sessionId,
12630
- issueKey: key,
12631
- columnId: issue.columnId,
12632
- prompt
12775
+ explanation: "Le lock est acquis EN PREMIER pour s\xE9rialiser toutes les op\xE9rations"
12633
12776
  });
12777
+ await acquireClaudeLock();
12778
+ debug$1("workflow", "Claude lock acquired! We have exclusive access", { key });
12779
+ let processingLockAcquired = false;
12634
12780
  try {
12635
- debug$1("workflow", "Calling Claude CLI for current column", {
12781
+ const issue = await findByKey(key);
12782
+ if (!issue) {
12783
+ debug$1("workflow", "Issue not found", { key });
12784
+ return { success: false, error: `Issue '${key}' not found` };
12785
+ }
12786
+ const column = await findById(issue.columnId);
12787
+ if (!column) {
12788
+ debug$1("workflow", "Column not found for issue", { key, columnId: issue.columnId });
12789
+ return { success: false, error: `Column not found for issue '${key}'` };
12790
+ }
12791
+ debug$1("workflow", "Issue and column loaded (under lock)", {
12792
+ key,
12793
+ columnId: issue.columnId,
12794
+ columnSlug: column.slug
12795
+ });
12796
+ const actionable = await isActionableColumnById(issue.columnId);
12797
+ debug$1("workflow", "Column actionable check", {
12798
+ columnSlug: column.slug,
12799
+ actionable,
12800
+ explanation: actionable ? "Colonne de travail \u2192 Claude doit traiter" : "Colonne non-actionable (backlog/done) \u2192 pas de traitement Claude"
12801
+ });
12802
+ if (!actionable) {
12803
+ debug$1("workflow", "=== processIssueInCurrentColumn END (non-actionable) ===", { key });
12804
+ return { success: true, issue, actionExecuted: false };
12805
+ }
12806
+ const actionContent = await getColumnPrompt(column.slug, lang);
12807
+ debug$1("workflow", "Column prompt loaded", {
12808
+ columnSlug: column.slug,
12809
+ promptLength: (actionContent == null ? void 0 : actionContent.length) || 0,
12810
+ hasPrompt: !!actionContent
12811
+ });
12812
+ if (!actionContent) {
12813
+ debug$1("workflow", "No prompt file for this column, skipping Claude", {
12814
+ columnSlug: column.slug
12815
+ });
12816
+ debug$1("workflow", "=== processIssueInCurrentColumn END (no prompt) ===", { key });
12817
+ return { success: true, issue, actionExecuted: false };
12818
+ }
12819
+ const prompt = buildPrompt(toPromptIssue(issue, column.slug), actionContent, lang);
12820
+ debug$1("workflow", "Full prompt built", {
12821
+ key,
12822
+ columnSlug: column.slug,
12823
+ totalLength: prompt.length
12824
+ });
12825
+ const sessionId = generateSessionId();
12826
+ const lockAcquired = await acquireProcessingLock(key, issue.columnId, sessionId);
12827
+ if (!lockAcquired) {
12828
+ debug$1("workflow", "SKIP: Processing lock not acquired (already processing this column)", {
12829
+ key,
12830
+ columnSlug: column.slug,
12831
+ sessionId
12832
+ });
12833
+ return { success: true, issue, actionExecuted: false, skipped: true };
12834
+ }
12835
+ processingLockAcquired = true;
12836
+ debug$1("workflow", "Processing lock acquired, creating ExecutionLog and started entry", {
12837
+ sessionId,
12838
+ key,
12839
+ columnSlug: column.slug
12840
+ });
12841
+ await create$2({
12842
+ sessionId,
12843
+ issueKey: key,
12844
+ columnId: issue.columnId,
12845
+ prompt
12846
+ });
12847
+ debug$1("workflow", "ExecutionLog created", { sessionId });
12848
+ await create$3(key, {
12849
+ action: "started",
12850
+ fromColumn: column.slug,
12851
+ toColumn: column.slug,
12852
+ sessionId
12853
+ });
12854
+ debug$1("workflow", 'History "started" entry created', {
12855
+ sessionId,
12856
+ columnSlug: column.slug
12857
+ });
12858
+ debug$1("workflow", "Executing Claude CLI (lock already held)", {
12636
12859
  key,
12637
12860
  columnSlug: column.slug,
12638
12861
  sessionId
12639
12862
  });
12640
- const result = await executeClaudeCLIStream(prompt, key, column.slug);
12641
- debug$1("workflow", "Claude CLI returned for current column", {
12863
+ const result = await executeClaudeCLIStreamWithoutLock(prompt, key, column.slug);
12864
+ debug$1("workflow", "Claude CLI execution completed", {
12642
12865
  success: result.success,
12643
- error: result.error
12866
+ error: result.error,
12867
+ duration: result.duration,
12868
+ sessionId
12644
12869
  });
12645
12870
  if (result.output) {
12646
12871
  await updateTerminalLog(sessionId, result.output);
12872
+ debug$1("workflow", "Terminal log saved", { sessionId, outputLength: result.output.length });
12647
12873
  }
12648
- await create$2(key, {
12649
- action: "started",
12650
- fromColumn: column.slug,
12651
- toColumn: column.slug,
12874
+ if (!result.success) {
12875
+ debug$1("workflow", "=== processIssueInCurrentColumn END (Claude failed) ===", {
12876
+ key,
12877
+ error: result.error
12878
+ });
12879
+ return { success: true, issue, actionExecuted: false, error: result.error };
12880
+ }
12881
+ const updatedIssue = await findByKey(key);
12882
+ debug$1("workflow", "=== processIssueInCurrentColumn END (success) ===", {
12883
+ key,
12884
+ actionExecuted: true,
12652
12885
  sessionId
12653
12886
  });
12654
- debug$1("workflow", "History entry created for current column", { action: "started", sessionId });
12655
- return { success: true, issue, actionExecuted: result.success };
12656
- } catch (err) {
12657
- debug$1("workflow", "Claude processing failed", { key, error: String(err) });
12658
- return { success: false, error: String(err) };
12887
+ return { success: true, issue: updatedIssue || issue, actionExecuted: true };
12888
+ } finally {
12889
+ if (processingLockAcquired) {
12890
+ debug$1("workflow", "Releasing processing lock", { key });
12891
+ await releaseProcessingLock(key);
12892
+ }
12893
+ debug$1("workflow", "Releasing Claude lock", { key });
12894
+ releaseClaudeLock();
12659
12895
  }
12660
12896
  }
12661
12897
 
12898
+ async function findByIssue(issueKey) {
12899
+ debug$1("comments", "findByIssue", { issueKey });
12900
+ return prisma.comment.findMany({
12901
+ where: { issueKey },
12902
+ orderBy: { createdAt: "desc" }
12903
+ });
12904
+ }
12905
+ async function create$1(issueKey, data) {
12906
+ const id = String(Date.now());
12907
+ debug$1("comments", "create", { issueKey, author: data.author, contentLength: data.content.length });
12908
+ const comment = await prisma.comment.create({
12909
+ data: {
12910
+ id,
12911
+ issueKey,
12912
+ content: data.content,
12913
+ author: data.author
12914
+ }
12915
+ });
12916
+ debug$1("comments", "created", { id: comment.id, issueKey });
12917
+ return comment;
12918
+ }
12919
+
12920
+ const POLL_INTERVAL_MS = 1e4;
12921
+ const MAX_RETRY_COUNT = 3;
12662
12922
  const processingIssues = /* @__PURE__ */ new Set();
12923
+ const retryCounters = /* @__PURE__ */ new Map();
12663
12924
  const _m6EoNY0Rbu7thvByPemFl2aPWPH21dK1tArqOtrho = defineNitroPlugin(() => {
12664
12925
  initLogger();
12665
- debug$1("autoprocess", "Plugin started, polling every 10s");
12926
+ debug$1("autoprocess", "Plugin started with LLM Decider architecture", {
12927
+ pollInterval: POLL_INTERVAL_MS,
12928
+ maxRetries: MAX_RETRY_COUNT
12929
+ });
12666
12930
  setInterval(async () => {
12667
- var _a;
12931
+ await pollAndProcess();
12932
+ }, POLL_INTERVAL_MS);
12933
+ });
12934
+ async function pollAndProcess() {
12935
+ var _a;
12936
+ try {
12937
+ debug$1("autoprocess", "Polling for actionable issue", {
12938
+ excludeKeys: Array.from(processingIssues)
12939
+ });
12940
+ const issue = await findActionableIssue({
12941
+ excludeKeys: Array.from(processingIssues)
12942
+ });
12943
+ if (!issue) {
12944
+ debug$1("autoprocess", "No actionable issue found");
12945
+ return;
12946
+ }
12947
+ processingIssues.add(issue.key);
12948
+ debug$1("autoprocess", "Found actionable issue", {
12949
+ key: issue.key,
12950
+ column: (_a = issue.column) == null ? void 0 : _a.slug
12951
+ });
12668
12952
  try {
12669
- debug$1("autoprocess", "Polling for actionable issue", {
12670
- excludeKeys: Array.from(processingIssues)
12953
+ await processIssueWithDecider(issue.key);
12954
+ } finally {
12955
+ processingIssues.delete(issue.key);
12956
+ debug$1("autoprocess", "Issue released from processing", { key: issue.key });
12957
+ }
12958
+ } catch (error) {
12959
+ debug$1("autoprocess", "Error in polling loop", { error: String(error) });
12960
+ }
12961
+ }
12962
+ async function processIssueWithDecider(key) {
12963
+ var _a;
12964
+ debug$1("autoprocess", "=== START processIssueWithDecider ===", { key });
12965
+ debug$1("autoprocess", "Step 1: Executing Claude CLI", { key });
12966
+ const result = await processIssueInCurrentColumn(key, { lang: "fr" });
12967
+ if (!result.success) {
12968
+ debug$1("autoprocess", "Claude execution failed", { key, error: result.error });
12969
+ return;
12970
+ }
12971
+ if (!result.actionExecuted) {
12972
+ debug$1("autoprocess", "No action executed (no prompt or non-actionable)", { key });
12973
+ return;
12974
+ }
12975
+ debug$1("autoprocess", "Claude CLI completed", { key });
12976
+ debug$1("autoprocess", "Step 2: Gathering context for LLM decider", { key });
12977
+ const issue = await findByKey(key);
12978
+ if (!issue) {
12979
+ debug$1("autoprocess", "Issue not found after processing", { key });
12980
+ return;
12981
+ }
12982
+ const columns = await findActiveColumns();
12983
+ const history = await findByIssue$2(key);
12984
+ const comments = await findByIssue(key);
12985
+ const lastComment = comments.length > 0 ? comments[0] : null;
12986
+ debug$1("autoprocess", "Context gathered", {
12987
+ key,
12988
+ currentColumn: (_a = issue.column) == null ? void 0 : _a.slug,
12989
+ columnsCount: columns.length,
12990
+ historyCount: history.length,
12991
+ hasLastComment: !!lastComment
12992
+ });
12993
+ debug$1("autoprocess", "Step 3: Calling LLM decider", { key });
12994
+ const decision = await getTransitionDecision({
12995
+ issue,
12996
+ columns,
12997
+ history,
12998
+ lastComment,
12999
+ lang: "fr"
13000
+ });
13001
+ debug$1("autoprocess", "LLM decision received", {
13002
+ key,
13003
+ action: decision.action,
13004
+ targetColumn: decision.targetColumn,
13005
+ reason: decision.reason
13006
+ });
13007
+ debug$1("autoprocess", "Step 4: Executing decision", {
13008
+ key,
13009
+ action: decision.action
13010
+ });
13011
+ await executeDecision(key, issue.columnId, decision);
13012
+ debug$1("autoprocess", "=== END processIssueWithDecider ===", { key });
13013
+ }
13014
+ async function executeDecision(key, currentColumnId, decision) {
13015
+ const retryKey = `${key}:${currentColumnId}`;
13016
+ switch (decision.action) {
13017
+ case "NEXT": {
13018
+ retryCounters.delete(retryKey);
13019
+ const nextColumn = await findNextById(currentColumnId);
13020
+ if (!nextColumn) {
13021
+ debug$1("autoprocess", "NEXT: No next column (already at end)", { key });
13022
+ return;
13023
+ }
13024
+ debug$1("autoprocess", "NEXT: Moving to next column", {
13025
+ key,
13026
+ from: currentColumnId,
13027
+ to: nextColumn.slug,
13028
+ reason: decision.reason
12671
13029
  });
12672
- const issue = await findActionableIssue({
12673
- excludeKeys: Array.from(processingIssues)
13030
+ await moveToColumnById(key, nextColumn.id);
13031
+ break;
13032
+ }
13033
+ case "RETRY": {
13034
+ const currentRetries = (retryCounters.get(retryKey) || 0) + 1;
13035
+ retryCounters.set(retryKey, currentRetries);
13036
+ debug$1("autoprocess", "RETRY: Staying in current column", {
13037
+ key,
13038
+ retryCount: currentRetries,
13039
+ maxRetries: MAX_RETRY_COUNT,
13040
+ reason: decision.reason
12674
13041
  });
12675
- if (!issue) {
12676
- debug$1("autoprocess", "No actionable issue found");
13042
+ if (currentRetries >= MAX_RETRY_COUNT) {
13043
+ debug$1("autoprocess", "RETRY: Max retries reached, auto-blocking", {
13044
+ key,
13045
+ retryCount: currentRetries
13046
+ });
13047
+ await markAsBlocked(key, `Auto-blocked after ${currentRetries} retries: ${decision.reason}`);
13048
+ retryCounters.delete(retryKey);
13049
+ }
13050
+ break;
13051
+ }
13052
+ case "BLOCKED": {
13053
+ retryCounters.delete(retryKey);
13054
+ debug$1("autoprocess", "BLOCKED: Marking issue as blocked", {
13055
+ key,
13056
+ reason: decision.reason
13057
+ });
13058
+ await markAsBlocked(key, decision.reason);
13059
+ break;
13060
+ }
13061
+ case "MOVE": {
13062
+ retryCounters.delete(retryKey);
13063
+ if (!decision.targetColumn) {
13064
+ debug$1("autoprocess", "MOVE: No target column specified", { key });
12677
13065
  return;
12678
13066
  }
12679
- processingIssues.add(issue.key);
12680
- debug$1("autoprocess", "Processing started", { key: issue.key, column: (_a = issue.column) == null ? void 0 : _a.slug });
12681
- try {
12682
- const result = await processIssueInCurrentColumn(issue.key, { lang: "fr" });
12683
- if (result.success && result.actionExecuted) {
12684
- debug$1("autoprocess", "Processing completed", { key: issue.key, success: true });
12685
- } else if (result.processing) {
12686
- debug$1("autoprocess", "Still processing", { key: issue.key });
12687
- } else if (result.error) {
12688
- debug$1("autoprocess", "Processing failed", { key: issue.key, error: result.error });
12689
- }
12690
- } finally {
12691
- processingIssues.delete(issue.key);
12692
- debug$1("autoprocess", "Issue released", { key: issue.key });
13067
+ const targetColumn = await findBySlugInActivePipeline(decision.targetColumn);
13068
+ if (!targetColumn) {
13069
+ debug$1("autoprocess", "MOVE: Target column not found", {
13070
+ key,
13071
+ targetSlug: decision.targetColumn
13072
+ });
13073
+ return;
12693
13074
  }
12694
- } catch (error) {
12695
- debug$1("autoprocess", "Error in polling loop", { error: String(error) });
13075
+ debug$1("autoprocess", "MOVE: Moving to specific column", {
13076
+ key,
13077
+ from: currentColumnId,
13078
+ to: targetColumn.slug,
13079
+ reason: decision.reason
13080
+ });
13081
+ await moveToColumnById(key, targetColumn.id);
13082
+ break;
12696
13083
  }
12697
- }, 1e4);
12698
- });
13084
+ }
13085
+ }
13086
+ async function markAsBlocked(key, reason) {
13087
+ var _a, _b, _c, _d;
13088
+ debug$1("autoprocess", "Marking issue as blocked", { key, reason });
13089
+ await create$1({
13090
+ issueKey: key,
13091
+ author: "AutoProcess",
13092
+ content: `\u{1F6AB} **Issue bloqu\xE9e par AutoProcess**
13093
+
13094
+ Raison: ${reason}
13095
+
13096
+ Intervention humaine requise.`
13097
+ });
13098
+ const issue = await findByKey(key);
13099
+ if (issue) {
13100
+ await create$3(key, {
13101
+ action: "blocked",
13102
+ fromColumn: (_b = (_a = issue.column) == null ? void 0 : _a.slug) != null ? _b : "unknown",
13103
+ toColumn: (_d = (_c = issue.column) == null ? void 0 : _c.slug) != null ? _d : "unknown"
13104
+ });
13105
+ }
13106
+ debug$1("autoprocess", "Issue marked as blocked", { key });
13107
+ }
12699
13108
 
12700
13109
  const LOCKED_COLUMNS = {
12701
13110
  BACKLOG: "backlog",
@@ -13320,493 +13729,507 @@ _5RvkpiviNMus9JKZsnHvqoz9244BNkJ0VnObYMaX8dM
13320
13729
  const assets = {
13321
13730
  "/_payload.json": {
13322
13731
  "type": "application/json;charset=utf-8",
13323
- "etag": "\"45-NOFnG931MHt+b2R4gYsHrMucCTg\"",
13324
- "mtime": "2026-01-06T00:39:38.729Z",
13732
+ "etag": "\"45-eDFnLhbD2I45yhI6ynKqu7AwXuM\"",
13733
+ "mtime": "2026-01-06T14:50:44.817Z",
13325
13734
  "size": 69,
13326
13735
  "path": "../public/_payload.json"
13327
13736
  },
13328
13737
  "/favicon.svg": {
13329
13738
  "type": "image/svg+xml",
13330
13739
  "etag": "\"215-HjDVtWnXgjYQ6+j8KMWdIoIvKrs\"",
13331
- "mtime": "2026-01-06T00:39:38.803Z",
13740
+ "mtime": "2026-01-06T14:50:44.902Z",
13332
13741
  "size": 533,
13333
13742
  "path": "../public/favicon.svg"
13334
13743
  },
13335
13744
  "/index.html": {
13336
13745
  "type": "text/html;charset=utf-8",
13337
- "etag": "\"c04d-SDsnkpp/h/PmzeX2GHHclFBoPzA\"",
13338
- "mtime": "2026-01-06T00:39:38.721Z",
13746
+ "etag": "\"c04d-R3LeOlzfpHn/oCcGZ7RB5969ZQU\"",
13747
+ "mtime": "2026-01-06T14:50:44.809Z",
13339
13748
  "size": 49229,
13340
13749
  "path": "../public/index.html"
13341
13750
  },
13342
13751
  "/og-image.svg": {
13343
13752
  "type": "image/svg+xml",
13344
13753
  "etag": "\"b4c-fhZoPqCM0huQ6gtd05hPWO7BSd8\"",
13345
- "mtime": "2026-01-06T00:39:38.803Z",
13754
+ "mtime": "2026-01-06T14:50:44.902Z",
13346
13755
  "size": 2892,
13347
13756
  "path": "../public/og-image.svg"
13348
13757
  },
13349
13758
  "/robots.txt": {
13350
13759
  "type": "text/plain; charset=utf-8",
13351
13760
  "etag": "\"4c-qUUsbd/u0pG4q6fMxwyWT70X6zE\"",
13352
- "mtime": "2026-01-06T00:39:38.803Z",
13761
+ "mtime": "2026-01-06T14:50:44.902Z",
13353
13762
  "size": 76,
13354
13763
  "path": "../public/robots.txt"
13355
13764
  },
13356
- "/_nuxt/BBgAVlXU.js": {
13765
+ "/_nuxt/4sw7JTbp.js": {
13357
13766
  "type": "text/javascript; charset=utf-8",
13358
- "etag": "\"7fe-rG+ArPpC6iwrxZWM7mb98pIA7TI\"",
13359
- "mtime": "2026-01-06T00:39:38.792Z",
13360
- "size": 2046,
13361
- "path": "../public/_nuxt/BBgAVlXU.js"
13362
- },
13363
- "/_nuxt/BZUmpBmU.js": {
13364
- "type": "text/javascript; charset=utf-8",
13365
- "etag": "\"1191-XKjOSpeiwj08QeV6ZoFJjHXrkvs\"",
13366
- "mtime": "2026-01-06T00:39:38.792Z",
13367
- "size": 4497,
13368
- "path": "../public/_nuxt/BZUmpBmU.js"
13767
+ "etag": "\"1a6-zZNwrfkXseAf2ybEK6EBCHaYQL4\"",
13768
+ "mtime": "2026-01-06T14:50:44.886Z",
13769
+ "size": 422,
13770
+ "path": "../public/_nuxt/4sw7JTbp.js"
13369
13771
  },
13370
- "/_nuxt/BmGeRwzG.js": {
13772
+ "/_nuxt/B6pOO9Bz.js": {
13371
13773
  "type": "text/javascript; charset=utf-8",
13372
- "etag": "\"5b4d-PGjPxJdeDnQIP/b4YM+m2fvMHTg\"",
13373
- "mtime": "2026-01-06T00:39:38.792Z",
13374
- "size": 23373,
13375
- "path": "../public/_nuxt/BmGeRwzG.js"
13774
+ "etag": "\"1b6d-4KTc+wVZiSK4UtPsVlvQWs4s6NU\"",
13775
+ "mtime": "2026-01-06T14:50:44.892Z",
13776
+ "size": 7021,
13777
+ "path": "../public/_nuxt/B6pOO9Bz.js"
13376
13778
  },
13377
- "/_nuxt/Bsd2P-Xc.js": {
13779
+ "/_nuxt/BAAVMorC.js": {
13378
13780
  "type": "text/javascript; charset=utf-8",
13379
- "etag": "\"3e8-iNYfZOwLe//9/BPuTZ15ifZ0BkM\"",
13380
- "mtime": "2026-01-06T00:39:38.792Z",
13381
- "size": 1000,
13382
- "path": "../public/_nuxt/Bsd2P-Xc.js"
13781
+ "etag": "\"9ea-dBuxVB9NkQTiKj4mm6EwFOUEFts\"",
13782
+ "mtime": "2026-01-06T14:50:44.887Z",
13783
+ "size": 2538,
13784
+ "path": "../public/_nuxt/BAAVMorC.js"
13383
13785
  },
13384
- "/_nuxt/BthlfLoK.js": {
13786
+ "/_nuxt/BJ-MtkWm.js": {
13385
13787
  "type": "text/javascript; charset=utf-8",
13386
- "etag": "\"632-7JG6b46Rz2kA5W4saqVW5vFYrdA\"",
13387
- "mtime": "2026-01-06T00:39:38.795Z",
13388
- "size": 1586,
13389
- "path": "../public/_nuxt/BthlfLoK.js"
13788
+ "etag": "\"7fe-uI3UKrX8rBdLsC8V4L0H7dq2AWk\"",
13789
+ "mtime": "2026-01-06T14:50:44.887Z",
13790
+ "size": 2046,
13791
+ "path": "../public/_nuxt/BJ-MtkWm.js"
13390
13792
  },
13391
- "/_nuxt/Bu1Qq2g-.js": {
13793
+ "/_nuxt/BJz8iexS.js": {
13392
13794
  "type": "text/javascript; charset=utf-8",
13393
- "etag": "\"6c4-8cUQK1BKLg8mktTjKZXw2ELemfA\"",
13394
- "mtime": "2026-01-06T00:39:38.793Z",
13395
- "size": 1732,
13396
- "path": "../public/_nuxt/Bu1Qq2g-.js"
13795
+ "etag": "\"2830-Sml06yI9iVhVQGcIMmeqVzF76eY\"",
13796
+ "mtime": "2026-01-06T14:50:44.887Z",
13797
+ "size": 10288,
13798
+ "path": "../public/_nuxt/BJz8iexS.js"
13397
13799
  },
13398
- "/_nuxt/BvF9_V7p.js": {
13800
+ "/_nuxt/BMCm0zjc.js": {
13399
13801
  "type": "text/javascript; charset=utf-8",
13400
- "etag": "\"1b6d-RjQqa0HW4ChNln+JvvVrYphzSfg\"",
13401
- "mtime": "2026-01-06T00:39:38.793Z",
13402
- "size": 7021,
13403
- "path": "../public/_nuxt/BvF9_V7p.js"
13802
+ "etag": "\"98a-EBatDplkjaJe3PqI1svFVYH6CXE\"",
13803
+ "mtime": "2026-01-06T14:50:44.887Z",
13804
+ "size": 2442,
13805
+ "path": "../public/_nuxt/BMCm0zjc.js"
13404
13806
  },
13405
- "/_nuxt/BvUbqlcZ.js": {
13807
+ "/_nuxt/BU6KT1Jg.js": {
13406
13808
  "type": "text/javascript; charset=utf-8",
13407
- "etag": "\"12d6-T0kbfz9OnDrJUUlx9R/2yeWMbrI\"",
13408
- "mtime": "2026-01-06T00:39:38.793Z",
13809
+ "etag": "\"12d6-JD8N0bgFurkoNQeYXg1jEBy5Lao\"",
13810
+ "mtime": "2026-01-06T14:50:44.887Z",
13409
13811
  "size": 4822,
13410
- "path": "../public/_nuxt/BvUbqlcZ.js"
13812
+ "path": "../public/_nuxt/BU6KT1Jg.js"
13411
13813
  },
13412
- "/_nuxt/Bxcwuw3U.js": {
13814
+ "/_nuxt/BXorvbPI.js": {
13413
13815
  "type": "text/javascript; charset=utf-8",
13414
- "etag": "\"308-Tnt9wXQAp2Euj7z4wuBUTjLyhFY\"",
13415
- "mtime": "2026-01-06T00:39:38.793Z",
13416
- "size": 776,
13417
- "path": "../public/_nuxt/Bxcwuw3U.js"
13816
+ "etag": "\"e59e-GFK8GxR5Wy0sAyEdY0/hnPUtdZA\"",
13817
+ "mtime": "2026-01-06T14:50:44.887Z",
13818
+ "size": 58782,
13819
+ "path": "../public/_nuxt/BXorvbPI.js"
13418
13820
  },
13419
- "/_nuxt/C0Rlrcoy.js": {
13821
+ "/_nuxt/BdgB0Sk8.js": {
13420
13822
  "type": "text/javascript; charset=utf-8",
13421
- "etag": "\"9b9c-sPbZRCii4LQs1AA2sMQvCzqiMD4\"",
13422
- "mtime": "2026-01-06T00:39:38.793Z",
13423
- "size": 39836,
13424
- "path": "../public/_nuxt/C0Rlrcoy.js"
13823
+ "etag": "\"87c-5oyJioUJm/uwS0DClUzGFgCIQ0A\"",
13824
+ "mtime": "2026-01-06T14:50:44.887Z",
13825
+ "size": 2172,
13826
+ "path": "../public/_nuxt/BdgB0Sk8.js"
13425
13827
  },
13426
- "/_nuxt/CTV7-Iux.js": {
13828
+ "/_nuxt/BiqphZN8.js": {
13427
13829
  "type": "text/javascript; charset=utf-8",
13428
- "etag": "\"ace-9+fkD8ALLNT5ixCmoC1z+kFZCDU\"",
13429
- "mtime": "2026-01-06T00:39:38.793Z",
13430
- "size": 2766,
13431
- "path": "../public/_nuxt/CTV7-Iux.js"
13830
+ "etag": "\"39e-UNADWkIxVA8jRso9MstacOuorHU\"",
13831
+ "mtime": "2026-01-06T14:50:44.888Z",
13832
+ "size": 926,
13833
+ "path": "../public/_nuxt/BiqphZN8.js"
13432
13834
  },
13433
- "/_nuxt/CWENDdnZ.js": {
13835
+ "/_nuxt/BmGeRwzG.js": {
13434
13836
  "type": "text/javascript; charset=utf-8",
13435
- "etag": "\"2830-BwyrlWqOip1uCMFEsdN1mLpaOG8\"",
13436
- "mtime": "2026-01-06T00:39:38.793Z",
13437
- "size": 10288,
13438
- "path": "../public/_nuxt/CWENDdnZ.js"
13837
+ "etag": "\"5b4d-PGjPxJdeDnQIP/b4YM+m2fvMHTg\"",
13838
+ "mtime": "2026-01-06T14:50:44.888Z",
13839
+ "size": 23373,
13840
+ "path": "../public/_nuxt/BmGeRwzG.js"
13439
13841
  },
13440
- "/_nuxt/CjVJcaTo.js": {
13842
+ "/_nuxt/Bn2y2u4i.js": {
13441
13843
  "type": "text/javascript; charset=utf-8",
13442
- "etag": "\"445ad-2DBttz5m/WmA2/+G4GaJ+PrR2y4\"",
13443
- "mtime": "2026-01-06T00:39:38.794Z",
13444
- "size": 279981,
13445
- "path": "../public/_nuxt/CjVJcaTo.js"
13844
+ "etag": "\"3e8-WHeabnfiP+QTXGdMld4eHAzE7tI\"",
13845
+ "mtime": "2026-01-06T14:50:44.888Z",
13846
+ "size": 1000,
13847
+ "path": "../public/_nuxt/Bn2y2u4i.js"
13446
13848
  },
13447
- "/_nuxt/CoGBQbLh.js": {
13849
+ "/_nuxt/BtXQIoy8.js": {
13448
13850
  "type": "text/javascript; charset=utf-8",
13449
- "etag": "\"78d-kqGa0mL/IHj36XprgC8aaCcmOwY\"",
13450
- "mtime": "2026-01-06T00:39:38.794Z",
13451
- "size": 1933,
13452
- "path": "../public/_nuxt/CoGBQbLh.js"
13851
+ "etag": "\"6c4-sL2PgE6efkzxhIDwMmy5oy4jtHM\"",
13852
+ "mtime": "2026-01-06T14:50:44.888Z",
13853
+ "size": 1732,
13854
+ "path": "../public/_nuxt/BtXQIoy8.js"
13453
13855
  },
13454
- "/_nuxt/CtVoJCjv.js": {
13856
+ "/_nuxt/Byshfb8L.js": {
13455
13857
  "type": "text/javascript; charset=utf-8",
13456
- "etag": "\"60e1-nIA6Jbnn6uAHuDaU32OF/jkPj2w\"",
13457
- "mtime": "2026-01-06T00:39:38.794Z",
13458
- "size": 24801,
13459
- "path": "../public/_nuxt/CtVoJCjv.js"
13858
+ "etag": "\"2d8f-Kj382SCH4v5Y496bG1s6lO0x8nI\"",
13859
+ "mtime": "2026-01-06T14:50:44.888Z",
13860
+ "size": 11663,
13861
+ "path": "../public/_nuxt/Byshfb8L.js"
13460
13862
  },
13461
- "/_nuxt/D4lcVP-d.js": {
13863
+ "/_nuxt/C0Rlrcoy.js": {
13462
13864
  "type": "text/javascript; charset=utf-8",
13463
- "etag": "\"956-Mo0ckdD3ZVi7vZCx6fosCMTgaNM\"",
13464
- "mtime": "2026-01-06T00:39:38.794Z",
13465
- "size": 2390,
13466
- "path": "../public/_nuxt/D4lcVP-d.js"
13865
+ "etag": "\"9b9c-sPbZRCii4LQs1AA2sMQvCzqiMD4\"",
13866
+ "mtime": "2026-01-06T14:50:44.888Z",
13867
+ "size": 39836,
13868
+ "path": "../public/_nuxt/C0Rlrcoy.js"
13467
13869
  },
13468
- "/_nuxt/D8RlVVzC.js": {
13870
+ "/_nuxt/C10TWEVH.js": {
13469
13871
  "type": "text/javascript; charset=utf-8",
13470
- "etag": "\"2ae-wel3lCGTdf+AnYnJxQKEK+fm10g\"",
13471
- "mtime": "2026-01-06T00:39:38.794Z",
13872
+ "etag": "\"2ae-Y7jWb48f6h/0Y3Fwl+3M/0rEDQM\"",
13873
+ "mtime": "2026-01-06T14:50:44.888Z",
13472
13874
  "size": 686,
13473
- "path": "../public/_nuxt/D8RlVVzC.js"
13875
+ "path": "../public/_nuxt/C10TWEVH.js"
13474
13876
  },
13475
- "/_nuxt/DBuWa6JT.js": {
13877
+ "/_nuxt/C2rmiAJ1.js": {
13476
13878
  "type": "text/javascript; charset=utf-8",
13477
- "etag": "\"9ea-5MfqusJtsQfjzUXyRLeJkDxx75g\"",
13478
- "mtime": "2026-01-06T00:39:38.794Z",
13479
- "size": 2538,
13480
- "path": "../public/_nuxt/DBuWa6JT.js"
13879
+ "etag": "\"1402-VtJMhqcGSm79uhfUkCRKo8jelg0\"",
13880
+ "mtime": "2026-01-06T14:50:44.888Z",
13881
+ "size": 5122,
13882
+ "path": "../public/_nuxt/C2rmiAJ1.js"
13481
13883
  },
13482
- "/_nuxt/DFQ30pd7.js": {
13884
+ "/_nuxt/CMIuQb6D.js": {
13483
13885
  "type": "text/javascript; charset=utf-8",
13484
- "etag": "\"1a6-U7fVYNReMPIpJOf/IRvFRTLrsBY\"",
13485
- "mtime": "2026-01-06T00:39:38.795Z",
13486
- "size": 422,
13487
- "path": "../public/_nuxt/DFQ30pd7.js"
13886
+ "etag": "\"6f9-E0xalMLGhpoIvFzrRNRUcVOZPPQ\"",
13887
+ "mtime": "2026-01-06T14:50:44.889Z",
13888
+ "size": 1785,
13889
+ "path": "../public/_nuxt/CMIuQb6D.js"
13488
13890
  },
13489
- "/_nuxt/DNUcHFTN.js": {
13891
+ "/_nuxt/CTbIP459.js": {
13490
13892
  "type": "text/javascript; charset=utf-8",
13491
- "etag": "\"c24-vkYBYbi2LrYYfX1u5FOkimZMmv8\"",
13492
- "mtime": "2026-01-06T00:39:38.795Z",
13493
- "size": 3108,
13494
- "path": "../public/_nuxt/DNUcHFTN.js"
13893
+ "etag": "\"1f50-bzGM5CjHWzcIvVcPXIRgOApFvVY\"",
13894
+ "mtime": "2026-01-06T14:50:44.889Z",
13895
+ "size": 8016,
13896
+ "path": "../public/_nuxt/CTbIP459.js"
13495
13897
  },
13496
- "/_nuxt/DRo5NaOZ.js": {
13898
+ "/_nuxt/ClY4a-PO.js": {
13497
13899
  "type": "text/javascript; charset=utf-8",
13498
- "etag": "\"2d8f-TtvAlWa+lzPm9uCCf+9wGOiNdSQ\"",
13499
- "mtime": "2026-01-06T00:39:38.795Z",
13500
- "size": 11663,
13501
- "path": "../public/_nuxt/DRo5NaOZ.js"
13900
+ "etag": "\"956-BqhcYUwggrTF5yx381ja69macYw\"",
13901
+ "mtime": "2026-01-06T14:50:44.889Z",
13902
+ "size": 2390,
13903
+ "path": "../public/_nuxt/ClY4a-PO.js"
13502
13904
  },
13503
- "/_nuxt/DU0awelf.js": {
13905
+ "/_nuxt/CtVoJCjv.js": {
13504
13906
  "type": "text/javascript; charset=utf-8",
13505
- "etag": "\"1402-fNgI9ieHWLNBG4OxQpZQV60SA3A\"",
13506
- "mtime": "2026-01-06T00:39:38.795Z",
13507
- "size": 5122,
13508
- "path": "../public/_nuxt/DU0awelf.js"
13907
+ "etag": "\"60e1-nIA6Jbnn6uAHuDaU32OF/jkPj2w\"",
13908
+ "mtime": "2026-01-06T14:50:44.889Z",
13909
+ "size": 24801,
13910
+ "path": "../public/_nuxt/CtVoJCjv.js"
13911
+ },
13912
+ "/_nuxt/D0HHOq4k.js": {
13913
+ "type": "text/javascript; charset=utf-8",
13914
+ "etag": "\"445ad-J95rD/IxPKFNtjS/APb/lFToxe0\"",
13915
+ "mtime": "2026-01-06T14:50:44.889Z",
13916
+ "size": 279981,
13917
+ "path": "../public/_nuxt/D0HHOq4k.js"
13509
13918
  },
13510
- "/_nuxt/DYYF8rpr.js": {
13919
+ "/_nuxt/D1JH-OfY.js": {
13511
13920
  "type": "text/javascript; charset=utf-8",
13512
- "etag": "\"13d6-WHJDxUYU+Ldb5UCZadJnwNqjv3I\"",
13513
- "mtime": "2026-01-06T00:39:38.795Z",
13921
+ "etag": "\"13d6-Y7qMDm6aU0g8xgoyL/+hWbBaHC4\"",
13922
+ "mtime": "2026-01-06T14:50:44.890Z",
13514
13923
  "size": 5078,
13515
- "path": "../public/_nuxt/DYYF8rpr.js"
13924
+ "path": "../public/_nuxt/D1JH-OfY.js"
13516
13925
  },
13517
- "/_nuxt/DaYBQX26.js": {
13926
+ "/_nuxt/D9fas07B.js": {
13518
13927
  "type": "text/javascript; charset=utf-8",
13519
- "etag": "\"26b-UAfwwbaENw9UPQcKuvPjdaTsK6A\"",
13520
- "mtime": "2026-01-06T00:39:38.795Z",
13928
+ "etag": "\"308-754sf8ITAmwt2UZDCRAgAjkWcfU\"",
13929
+ "mtime": "2026-01-06T14:50:44.890Z",
13930
+ "size": 776,
13931
+ "path": "../public/_nuxt/D9fas07B.js"
13932
+ },
13933
+ "/_nuxt/DAd8dbng.js": {
13934
+ "type": "text/javascript; charset=utf-8",
13935
+ "etag": "\"26b-yCmekgopV/bvIEFzbT0E/Sj8gtM\"",
13936
+ "mtime": "2026-01-06T14:50:44.890Z",
13521
13937
  "size": 619,
13522
- "path": "../public/_nuxt/DaYBQX26.js"
13938
+ "path": "../public/_nuxt/DAd8dbng.js"
13523
13939
  },
13524
- "/_nuxt/DwfwVH0w.js": {
13940
+ "/_nuxt/DNMLSDtV.js": {
13525
13941
  "type": "text/javascript; charset=utf-8",
13526
- "etag": "\"87c-Rmf3yWeSuVu8RoiWOjaAHCn6Chw\"",
13527
- "mtime": "2026-01-06T00:39:38.795Z",
13528
- "size": 2172,
13529
- "path": "../public/_nuxt/DwfwVH0w.js"
13942
+ "etag": "\"674-qhgSRv4NpNefdWVSL7oaJxo7vpM\"",
13943
+ "mtime": "2026-01-06T14:50:44.890Z",
13944
+ "size": 1652,
13945
+ "path": "../public/_nuxt/DNMLSDtV.js"
13530
13946
  },
13531
- "/_nuxt/DykwyQae.js": {
13947
+ "/_nuxt/DbZiOpag.js": {
13532
13948
  "type": "text/javascript; charset=utf-8",
13533
- "etag": "\"98a-zeqeb5n2o3qLtdeXjy0TAXeKcHw\"",
13534
- "mtime": "2026-01-06T00:39:38.795Z",
13535
- "size": 2442,
13536
- "path": "../public/_nuxt/DykwyQae.js"
13949
+ "etag": "\"6ff5-eX+fPELwPiVIMMoio67ssZ4juB0\"",
13950
+ "mtime": "2026-01-06T14:50:44.890Z",
13951
+ "size": 28661,
13952
+ "path": "../public/_nuxt/DbZiOpag.js"
13537
13953
  },
13538
- "/_nuxt/FIIaIpPb.js": {
13954
+ "/_nuxt/DuqM_LGj.js": {
13539
13955
  "type": "text/javascript; charset=utf-8",
13540
- "etag": "\"e59e-cFM2hDriI/NJDlOlnDYIoX6JfOI\"",
13541
- "mtime": "2026-01-06T00:39:38.795Z",
13542
- "size": 58782,
13543
- "path": "../public/_nuxt/FIIaIpPb.js"
13956
+ "etag": "\"2f360-zLn4IQ6Gt6gixWU/fts1XUMPo6o\"",
13957
+ "mtime": "2026-01-06T14:50:44.890Z",
13958
+ "size": 193376,
13959
+ "path": "../public/_nuxt/DuqM_LGj.js"
13960
+ },
13961
+ "/_nuxt/DxFm2Qrx.js": {
13962
+ "type": "text/javascript; charset=utf-8",
13963
+ "etag": "\"78d-CMpCytM2qfwFTin0tSvf9UkJso8\"",
13964
+ "mtime": "2026-01-06T14:50:44.890Z",
13965
+ "size": 1933,
13966
+ "path": "../public/_nuxt/DxFm2Qrx.js"
13544
13967
  },
13545
13968
  "/_nuxt/IssueHeader.BKYJE9Ko.css": {
13546
13969
  "type": "text/css; charset=utf-8",
13547
13970
  "etag": "\"4a1-cNhs83r9kPH36WuqXuq0TmsK7qM\"",
13548
- "mtime": "2026-01-06T00:39:38.795Z",
13971
+ "mtime": "2026-01-06T14:50:44.890Z",
13549
13972
  "size": 1185,
13550
13973
  "path": "../public/_nuxt/IssueHeader.BKYJE9Ko.css"
13551
13974
  },
13552
13975
  "/_nuxt/LangSwitcher.DDTh1sNN.css": {
13553
13976
  "type": "text/css; charset=utf-8",
13554
13977
  "etag": "\"2b5-PbdPNItC3+BzxiC+s9FMK4GX5Hg\"",
13555
- "mtime": "2026-01-06T00:39:38.795Z",
13978
+ "mtime": "2026-01-06T14:50:44.890Z",
13556
13979
  "size": 693,
13557
13980
  "path": "../public/_nuxt/LangSwitcher.DDTh1sNN.css"
13558
13981
  },
13559
- "/_nuxt/QtPIr4OQ.js": {
13560
- "type": "text/javascript; charset=utf-8",
13561
- "etag": "\"39e-SpOTuDR9vyKPqDZss5Ag9gwWXgw\"",
13562
- "mtime": "2026-01-06T00:39:38.795Z",
13563
- "size": 926,
13564
- "path": "../public/_nuxt/QtPIr4OQ.js"
13565
- },
13566
- "/_nuxt/TA-NBooC.js": {
13567
- "type": "text/javascript; charset=utf-8",
13568
- "etag": "\"bee-tHOlvjerDRUowE2UNaSqNiYCCpY\"",
13569
- "mtime": "2026-01-06T00:39:38.795Z",
13570
- "size": 3054,
13571
- "path": "../public/_nuxt/TA-NBooC.js"
13572
- },
13573
- "/_nuxt/TB1o0NrH.js": {
13574
- "type": "text/javascript; charset=utf-8",
13575
- "etag": "\"2f360-KUuFiVwIHadqr4dgkKK0ZjarLVM\"",
13576
- "mtime": "2026-01-06T00:39:38.795Z",
13577
- "size": 193376,
13578
- "path": "../public/_nuxt/TB1o0NrH.js"
13579
- },
13580
- "/_nuxt/Zzp33YZj.js": {
13581
- "type": "text/javascript; charset=utf-8",
13582
- "etag": "\"6f9-oTScnDTkRfVDYOYsWHbfJHVDDPo\"",
13583
- "mtime": "2026-01-06T00:39:38.795Z",
13584
- "size": 1785,
13585
- "path": "../public/_nuxt/Zzp33YZj.js"
13586
- },
13587
- "/_nuxt/_HJO0SwU.js": {
13588
- "type": "text/javascript; charset=utf-8",
13589
- "etag": "\"6ff5-Nfjl9liyr9jprgdImaOHwDzE/vU\"",
13590
- "mtime": "2026-01-06T00:39:38.795Z",
13591
- "size": 28661,
13592
- "path": "../public/_nuxt/_HJO0SwU.js"
13593
- },
13594
13982
  "/_nuxt/_id_.CYj9w2Sw.css": {
13595
13983
  "type": "text/css; charset=utf-8",
13596
13984
  "etag": "\"147-FPzJs5si7nasSxfswldrOJcSWQc\"",
13597
- "mtime": "2026-01-06T00:39:38.796Z",
13985
+ "mtime": "2026-01-06T14:50:44.890Z",
13598
13986
  "size": 327,
13599
13987
  "path": "../public/_nuxt/_id_.CYj9w2Sw.css"
13600
13988
  },
13601
13989
  "/_nuxt/_name_.OOW3Ydwv.css": {
13602
13990
  "type": "text/css; charset=utf-8",
13603
13991
  "etag": "\"29e5-SV28LM5C6hUKzP0u2eg0Y7G9EF8\"",
13604
- "mtime": "2026-01-06T00:39:38.796Z",
13992
+ "mtime": "2026-01-06T14:50:44.890Z",
13605
13993
  "size": 10725,
13606
13994
  "path": "../public/_nuxt/_name_.OOW3Ydwv.css"
13607
13995
  },
13608
13996
  "/_nuxt/autocreate.-iJ9Pxhm.css": {
13609
13997
  "type": "text/css; charset=utf-8",
13610
13998
  "etag": "\"ce7-/4F3SaPlMwTbSTDcvVlRCgyWVuo\"",
13611
- "mtime": "2026-01-06T00:39:38.796Z",
13999
+ "mtime": "2026-01-06T14:50:44.890Z",
13612
14000
  "size": 3303,
13613
14001
  "path": "../public/_nuxt/autocreate.-iJ9Pxhm.css"
13614
14002
  },
14003
+ "/_nuxt/c4NRZ8AG.js": {
14004
+ "type": "text/javascript; charset=utf-8",
14005
+ "etag": "\"1191-K9RwO0UOoRGL/cE0T+hlSR0olOw\"",
14006
+ "mtime": "2026-01-06T14:50:44.890Z",
14007
+ "size": 4497,
14008
+ "path": "../public/_nuxt/c4NRZ8AG.js"
14009
+ },
13615
14010
  "/_nuxt/changelog.CziWegef.css": {
13616
14011
  "type": "text/css; charset=utf-8",
13617
14012
  "etag": "\"943-Wd23/oRkMR3dPNniVkYvKH4iYZU\"",
13618
- "mtime": "2026-01-06T00:39:38.796Z",
14013
+ "mtime": "2026-01-06T14:50:44.890Z",
13619
14014
  "size": 2371,
13620
14015
  "path": "../public/_nuxt/changelog.CziWegef.css"
13621
14016
  },
13622
14017
  "/_nuxt/comments.BcvjcN1z.css": {
13623
14018
  "type": "text/css; charset=utf-8",
13624
14019
  "etag": "\"e51-p2ulj0SgvCmnXgDs2Pt+HZCPV68\"",
13625
- "mtime": "2026-01-06T00:39:38.796Z",
14020
+ "mtime": "2026-01-06T14:50:44.891Z",
13626
14021
  "size": 3665,
13627
14022
  "path": "../public/_nuxt/comments.BcvjcN1z.css"
13628
14023
  },
13629
14024
  "/_nuxt/default.BaZU2Ea8.css": {
13630
14025
  "type": "text/css; charset=utf-8",
13631
14026
  "etag": "\"1221-mqSxKm41WTP6Dlwr1Ua3eHfN+Go\"",
13632
- "mtime": "2026-01-06T00:39:38.796Z",
14027
+ "mtime": "2026-01-06T14:50:44.891Z",
13633
14028
  "size": 4641,
13634
14029
  "path": "../public/_nuxt/default.BaZU2Ea8.css"
13635
14030
  },
13636
14031
  "/_nuxt/entry.CzscD3wg.css": {
13637
14032
  "type": "text/css; charset=utf-8",
13638
14033
  "etag": "\"727b-yFKgcl3fUZnijzu9dws3tloA4MM\"",
13639
- "mtime": "2026-01-06T00:39:38.796Z",
14034
+ "mtime": "2026-01-06T14:50:44.891Z",
13640
14035
  "size": 29307,
13641
14036
  "path": "../public/_nuxt/entry.CzscD3wg.css"
13642
14037
  },
14038
+ "/_nuxt/g7WOzF8b.js": {
14039
+ "type": "text/javascript; charset=utf-8",
14040
+ "etag": "\"632-0GCqzcAzUE645Ub3dJJmYW6CQC8\"",
14041
+ "mtime": "2026-01-06T14:50:44.891Z",
14042
+ "size": 1586,
14043
+ "path": "../public/_nuxt/g7WOzF8b.js"
14044
+ },
13643
14045
  "/_nuxt/graph.BbpRRv0M.css": {
13644
14046
  "type": "text/css; charset=utf-8",
13645
14047
  "etag": "\"627-nt3GDdORgjzH4esnRuCHd1lImMY\"",
13646
- "mtime": "2026-01-06T00:39:38.796Z",
14048
+ "mtime": "2026-01-06T14:50:44.891Z",
13647
14049
  "size": 1575,
13648
14050
  "path": "../public/_nuxt/graph.BbpRRv0M.css"
13649
14051
  },
13650
- "/_nuxt/iHS1jy-1.js": {
13651
- "type": "text/javascript; charset=utf-8",
13652
- "etag": "\"674-NgzFLbd7LUlq3F9oucJnOwMMk1Y\"",
13653
- "mtime": "2026-01-06T00:39:38.796Z",
13654
- "size": 1652,
13655
- "path": "../public/_nuxt/iHS1jy-1.js"
13656
- },
13657
14052
  "/_nuxt/index.CDND7dpO.css": {
13658
14053
  "type": "text/css; charset=utf-8",
13659
14054
  "etag": "\"38fb-KxIT9Gz+y8Wmb70FrCU7cXx7l0o\"",
13660
- "mtime": "2026-01-06T00:39:38.796Z",
14055
+ "mtime": "2026-01-06T14:50:44.891Z",
13661
14056
  "size": 14587,
13662
14057
  "path": "../public/_nuxt/index.CDND7dpO.css"
13663
14058
  },
13664
14059
  "/_nuxt/index.COVdL_Kx.css": {
13665
14060
  "type": "text/css; charset=utf-8",
13666
14061
  "etag": "\"c13-0P9BCBpSGAwz9eBjyp4Y8XCHLE8\"",
13667
- "mtime": "2026-01-06T00:39:38.796Z",
14062
+ "mtime": "2026-01-06T14:50:44.891Z",
13668
14063
  "size": 3091,
13669
14064
  "path": "../public/_nuxt/index.COVdL_Kx.css"
13670
14065
  },
13671
14066
  "/_nuxt/index.CTkgb9uR.css": {
13672
14067
  "type": "text/css; charset=utf-8",
13673
14068
  "etag": "\"1f2b-mxpyAvUZ7skCVAxrZq8J8SDKzUI\"",
13674
- "mtime": "2026-01-06T00:39:38.796Z",
14069
+ "mtime": "2026-01-06T14:50:44.891Z",
13675
14070
  "size": 7979,
13676
14071
  "path": "../public/_nuxt/index.CTkgb9uR.css"
13677
14072
  },
13678
14073
  "/_nuxt/index.DkNg_n4G.css": {
13679
14074
  "type": "text/css; charset=utf-8",
13680
14075
  "etag": "\"136-9XyHqK+b/ydB9ueq6YFewVPmSW4\"",
13681
- "mtime": "2026-01-06T00:39:38.796Z",
14076
+ "mtime": "2026-01-06T14:50:44.891Z",
13682
14077
  "size": 310,
13683
14078
  "path": "../public/_nuxt/index.DkNg_n4G.css"
13684
14079
  },
13685
- "/_nuxt/jYigECdj.js": {
14080
+ "/_nuxt/kNuGsBnB.js": {
13686
14081
  "type": "text/javascript; charset=utf-8",
13687
- "etag": "\"1f50-QoMiNI6yzEV8dbsBXOxio/g+6yU\"",
13688
- "mtime": "2026-01-06T00:39:38.796Z",
13689
- "size": 8016,
13690
- "path": "../public/_nuxt/jYigECdj.js"
14082
+ "etag": "\"bee-5NMUQlpVEy5D/RNAAPC3z/VDR6g\"",
14083
+ "mtime": "2026-01-06T14:50:44.891Z",
14084
+ "size": 3054,
14085
+ "path": "../public/_nuxt/kNuGsBnB.js"
14086
+ },
14087
+ "/_nuxt/kZiZQgsI.js": {
14088
+ "type": "text/javascript; charset=utf-8",
14089
+ "etag": "\"c24-WF/8R2+irFEPVTF5tL4QX+lISyk\"",
14090
+ "mtime": "2026-01-06T14:50:44.891Z",
14091
+ "size": 3108,
14092
+ "path": "../public/_nuxt/kZiZQgsI.js"
13691
14093
  },
13692
14094
  "/_nuxt/kanban.BuPOCLgG.css": {
13693
14095
  "type": "text/css; charset=utf-8",
13694
14096
  "etag": "\"13c2-QYyqf5fyeEnrqYohP0pQB5QGRLs\"",
13695
- "mtime": "2026-01-06T00:39:38.796Z",
14097
+ "mtime": "2026-01-06T14:50:44.891Z",
13696
14098
  "size": 5058,
13697
14099
  "path": "../public/_nuxt/kanban.BuPOCLgG.css"
13698
14100
  },
13699
14101
  "/_nuxt/landing.D5KkDm1b.css": {
13700
14102
  "type": "text/css; charset=utf-8",
13701
14103
  "etag": "\"393-IP7IMSuvaLw71bURxWfVx2E2Q7I\"",
13702
- "mtime": "2026-01-06T00:39:38.796Z",
14104
+ "mtime": "2026-01-06T14:50:44.891Z",
13703
14105
  "size": 915,
13704
14106
  "path": "../public/_nuxt/landing.D5KkDm1b.css"
13705
14107
  },
14108
+ "/_nuxt/mty-mFWB.js": {
14109
+ "type": "text/javascript; charset=utf-8",
14110
+ "etag": "\"ace-+/NputUsXyCMIA7MdsqVSBWBSqw\"",
14111
+ "mtime": "2026-01-06T14:50:44.891Z",
14112
+ "size": 2766,
14113
+ "path": "../public/_nuxt/mty-mFWB.js"
14114
+ },
13706
14115
  "/_nuxt/new.BFERdqdm.css": {
13707
14116
  "type": "text/css; charset=utf-8",
13708
14117
  "etag": "\"e38-t4k/fVPiMoh//7XTa7VA8WixSHw\"",
13709
- "mtime": "2026-01-06T00:39:38.796Z",
14118
+ "mtime": "2026-01-06T14:50:44.891Z",
13710
14119
  "size": 3640,
13711
14120
  "path": "../public/_nuxt/new.BFERdqdm.css"
13712
14121
  },
13713
14122
  "/_nuxt/new.BzaiohPo.css": {
13714
14123
  "type": "text/css; charset=utf-8",
13715
14124
  "etag": "\"71f-Sf1vS7pI6TH0XyyA8vE15d1t2SE\"",
13716
- "mtime": "2026-01-06T00:39:38.796Z",
14125
+ "mtime": "2026-01-06T14:50:44.891Z",
13717
14126
  "size": 1823,
13718
14127
  "path": "../public/_nuxt/new.BzaiohPo.css"
13719
14128
  },
13720
14129
  "/_nuxt/prompt.CbFHjm-L.css": {
13721
14130
  "type": "text/css; charset=utf-8",
13722
14131
  "etag": "\"55f-faq16m4XDEEcy8d4uHQam/6TmYM\"",
13723
- "mtime": "2026-01-06T00:39:38.797Z",
14132
+ "mtime": "2026-01-06T14:50:44.891Z",
13724
14133
  "size": 1375,
13725
14134
  "path": "../public/_nuxt/prompt.CbFHjm-L.css"
13726
14135
  },
13727
14136
  "/_nuxt/prompt.DM4VdPnn.css": {
13728
14137
  "type": "text/css; charset=utf-8",
13729
14138
  "etag": "\"98d-6SgyexayLVWpB/uiTxJddZCOSNs\"",
13730
- "mtime": "2026-01-06T00:39:38.797Z",
14139
+ "mtime": "2026-01-06T14:50:44.891Z",
13731
14140
  "size": 2445,
13732
14141
  "path": "../public/_nuxt/prompt.DM4VdPnn.css"
13733
14142
  },
13734
14143
  "/_nuxt/prompt.DZ0wdOji.css": {
13735
14144
  "type": "text/css; charset=utf-8",
13736
14145
  "etag": "\"5e1-PqnnCsmh+l9VGfHth+8ur20eqFQ\"",
13737
- "mtime": "2026-01-06T00:39:38.797Z",
14146
+ "mtime": "2026-01-06T14:50:44.892Z",
13738
14147
  "size": 1505,
13739
14148
  "path": "../public/_nuxt/prompt.DZ0wdOji.css"
13740
14149
  },
13741
14150
  "/_nuxt/stats.CXzKxZ71.css": {
13742
14151
  "type": "text/css; charset=utf-8",
13743
14152
  "etag": "\"132a-6OE0a+UmTHJMBzCVvnrjAUSGRT8\"",
13744
- "mtime": "2026-01-06T00:39:38.797Z",
14153
+ "mtime": "2026-01-06T14:50:44.892Z",
13745
14154
  "size": 4906,
13746
14155
  "path": "../public/_nuxt/stats.CXzKxZ71.css"
13747
14156
  },
13748
14157
  "/_nuxt/terminal.BL0EPPyU.css": {
13749
14158
  "type": "text/css; charset=utf-8",
13750
14159
  "etag": "\"79d-a+4LEiyc04ntLd9WPiqFIj0AKbk\"",
13751
- "mtime": "2026-01-06T00:39:38.797Z",
14160
+ "mtime": "2026-01-06T14:50:44.892Z",
13752
14161
  "size": 1949,
13753
14162
  "path": "../public/_nuxt/terminal.BL0EPPyU.css"
13754
14163
  },
13755
14164
  "/_nuxt/terminal.D3JI44PH.css": {
13756
14165
  "type": "text/css; charset=utf-8",
13757
14166
  "etag": "\"7e5-uC0ih9QvDsN9w6zGgrvIQiV6FfE\"",
13758
- "mtime": "2026-01-06T00:39:38.797Z",
14167
+ "mtime": "2026-01-06T14:50:44.892Z",
13759
14168
  "size": 2021,
13760
14169
  "path": "../public/_nuxt/terminal.D3JI44PH.css"
13761
14170
  },
13762
14171
  "/_nuxt/terminal.YXDzS4Ng.css": {
13763
14172
  "type": "text/css; charset=utf-8",
13764
14173
  "etag": "\"763-YHR0QMT8SZXOv2Y07u5ZMWZP7d4\"",
13765
- "mtime": "2026-01-06T00:39:38.797Z",
14174
+ "mtime": "2026-01-06T14:50:44.892Z",
13766
14175
  "size": 1891,
13767
14176
  "path": "../public/_nuxt/terminal.YXDzS4Ng.css"
13768
14177
  },
13769
14178
  "/_nuxt/builds/latest.json": {
13770
14179
  "type": "application/json",
13771
- "etag": "\"47-ScZUmXGi5XqPgZTKopAWbRgN6UU\"",
13772
- "mtime": "2026-01-06T00:39:38.768Z",
14180
+ "etag": "\"47-gkCJUlo2Gb7FGRjvI4LH7O/1nF0\"",
14181
+ "mtime": "2026-01-06T14:50:44.860Z",
13773
14182
  "size": 71,
13774
14183
  "path": "../public/_nuxt/builds/latest.json"
13775
14184
  },
14185
+ "/fake-features/cocktail-generator/cocktails.js": {
14186
+ "type": "text/javascript; charset=utf-8",
14187
+ "etag": "\"43d6-0s3qVKkQ2tk2pol1LWTezlL6k5A\"",
14188
+ "mtime": "2026-01-06T14:50:44.902Z",
14189
+ "size": 17366,
14190
+ "path": "../public/fake-features/cocktail-generator/cocktails.js"
14191
+ },
14192
+ "/fake-features/cocktail-generator/index.html": {
14193
+ "type": "text/html; charset=utf-8",
14194
+ "etag": "\"4d80-t887lMYESnthojImevzITTCSIGE\"",
14195
+ "mtime": "2026-01-06T14:50:44.902Z",
14196
+ "size": 19840,
14197
+ "path": "../public/fake-features/cocktail-generator/index.html"
14198
+ },
13776
14199
  "/media/podcast/en.m4a": {
13777
14200
  "type": "audio/mp4",
13778
14201
  "etag": "\"1c00c86-MbX28IpSmI393JWCzCz6rlkdYS0\"",
13779
- "mtime": "2026-01-06T00:39:38.842Z",
14202
+ "mtime": "2026-01-06T14:50:44.944Z",
13780
14203
  "size": 29363334,
13781
14204
  "path": "../public/media/podcast/en.m4a"
13782
14205
  },
13783
14206
  "/media/podcast/fr.m4a": {
13784
14207
  "type": "audio/mp4",
13785
14208
  "etag": "\"1619637-vBY2YSdzI9Lseb+qriWqqUgyYdI\"",
13786
- "mtime": "2026-01-06T00:39:38.832Z",
14209
+ "mtime": "2026-01-06T14:50:44.937Z",
13787
14210
  "size": 23172663,
13788
14211
  "path": "../public/media/podcast/fr.m4a"
13789
14212
  },
13790
- "/_i18n/zP5M_e1m/en/messages.json": {
14213
+ "/_i18n/__ad3z6g/en/messages.json": {
13791
14214
  "type": "application/json",
13792
14215
  "etag": "\"399f-q0zYHcJCee9l9+ayCAjo0PQBXII\"",
13793
- "mtime": "2026-01-06T00:39:38.736Z",
14216
+ "mtime": "2026-01-06T14:50:44.824Z",
13794
14217
  "size": 14751,
13795
- "path": "../public/_i18n/zP5M_e1m/en/messages.json"
14218
+ "path": "../public/_i18n/__ad3z6g/en/messages.json"
13796
14219
  },
13797
- "/_i18n/zP5M_e1m/fr/messages.json": {
14220
+ "/_i18n/__ad3z6g/fr/messages.json": {
13798
14221
  "type": "application/json",
13799
14222
  "etag": "\"3f33-0xMEfoD3ECgVH1/tTkqNIQbF0kk\"",
13800
- "mtime": "2026-01-06T00:39:38.736Z",
14223
+ "mtime": "2026-01-06T14:50:44.824Z",
13801
14224
  "size": 16179,
13802
- "path": "../public/_i18n/zP5M_e1m/fr/messages.json"
14225
+ "path": "../public/_i18n/__ad3z6g/fr/messages.json"
13803
14226
  },
13804
- "/_nuxt/builds/meta/83d9a3fc-c99e-4e26-adef-e7f5b329b81a.json": {
14227
+ "/_nuxt/builds/meta/35ace9c2-472c-4755-ae87-74fdb84336dd.json": {
13805
14228
  "type": "application/json",
13806
- "etag": "\"8e-mV4TmgAmhoynfpo4pN1RqutqPiY\"",
13807
- "mtime": "2026-01-06T00:39:38.763Z",
14229
+ "etag": "\"8e-5J0RF5Xz2HGZ6nAfd32V1HyT+u0\"",
14230
+ "mtime": "2026-01-06T14:50:44.855Z",
13808
14231
  "size": 142,
13809
- "path": "../public/_nuxt/builds/meta/83d9a3fc-c99e-4e26-adef-e7f5b329b81a.json"
14232
+ "path": "../public/_nuxt/builds/meta/35ace9c2-472c-4755-ae87-74fdb84336dd.json"
13810
14233
  }
13811
14234
  };
13812
14235
 
@@ -14662,5 +15085,5 @@ setupGracefulShutdown(listener, nitroApp);
14662
15085
  }
14663
15086
  const nodeServer = {};
14664
15087
 
14665
- export { defineWebSocketHandler as $, findByIssue as A, parseChanges as B, findBySessionId as C, moveAndProcessIssueById as D, moveToNextColumnAndProcess as E, findActionableIssue as F, executeClaudePrompt as G, parseClaudeJson as H, findAll$1 as I, create$3 as J, findDraft as K, remove as L, findByNameAndVersion as M, createDraft as N, updateDraft as O, getLatestVersion as P, activate as Q, listVersions as R, finalizeDraft as S, findAll as T, create as U, initStats as V, getStats as W, isInitialized as X, generateMonitoringReport as Y, getHealthStatus as Z, useWebSocketServer as _, sendStream as a, unregisterClient as a0, handleMessage as a1, registerClient as a2, buildAssetsURL as a3, appRootTag as a4, appRootAttrs as a5, appSpaLoaderTag as a6, appSpaLoaderAttrs as a7, getResponseStatusText as a8, getResponseStatus as a9, createDefu as aA, isEqual as aB, withoutTrailingSlash as aC, parsePath as aD, parseQuery as aE, setCookie as aF, deleteCookie as aG, withTrailingSlash as aH, hash$1 as aI, isLockedColumn as aJ, isBacklogColumn as aK, isDoneColumn as aL, nodeServer as aM, appId as aa, defineRenderHandler as ab, publicAssetsURL as ac, appTeleportTag as ad, appTeleportAttrs as ae, appHead as af, destr as ag, getRouteRules as ah, useNitroApp as ai, hasProtocol as aj, isScriptProtocol as ak, joinURL as al, withQuery as am, sanitizeStatusCode as an, getContext as ao, $fetch$1 as ap, baseURL as aq, createHooks as ar, executeAsync as as, toRouteMatcher as at, createRouter$1 as au, defu as av, getRequestURL as aw, getCookie as ax, getRequestHeader as ay, klona as az, getRouterParam as b, createError$1 as c, defineEventHandler as d, getColumnPrompt as e, findActiveColumns as f, getQuery as g, getServerConfig as h, debug$1 as i, findByKey as j, update as k, findBySlugInActivePipeline as l, findByIssueAndColumnId as m, notifyIssueUpdate as n, getAncestors as o, prisma as p, archive as q, readBody as r, setResponseHeaders as s, notifyRefresh as t, useRuntimeConfig as u, exists as v, readMultipartFormData as w, setHeader as x, getChildren as y, findByIssue$1 as z };
15088
+ export { getHealthStatus as $, create$1 as A, findByIssue$2 as B, findByIssue$1 as C, parseChanges as D, findBySessionId as E, moveAndProcessIssueById as F, moveToNextColumnAndProcess as G, findActionableIssue as H, executeClaudePrompt as I, parseClaudeJson as J, findAll$1 as K, create$4 as L, findDraft as M, remove as N, findByNameAndVersion as O, createDraft as P, updateDraft as Q, getLatestVersion as R, activate as S, listVersions as T, finalizeDraft as U, findAll as V, create as W, initStats as X, getStats as Y, isInitialized as Z, generateMonitoringReport as _, sendStream as a, useWebSocketServer as a0, defineWebSocketHandler as a1, unregisterClient as a2, handleMessage as a3, registerClient as a4, buildAssetsURL as a5, appRootTag as a6, appRootAttrs as a7, appSpaLoaderTag as a8, appSpaLoaderAttrs as a9, getRequestHeader as aA, klona as aB, createDefu as aC, isEqual as aD, withoutTrailingSlash as aE, parsePath as aF, parseQuery as aG, setCookie as aH, deleteCookie as aI, withTrailingSlash as aJ, hash$1 as aK, isLockedColumn as aL, isBacklogColumn as aM, isDoneColumn as aN, nodeServer as aO, getResponseStatusText as aa, getResponseStatus as ab, appId as ac, defineRenderHandler as ad, publicAssetsURL as ae, appTeleportTag as af, appTeleportAttrs as ag, appHead as ah, destr as ai, getRouteRules as aj, useNitroApp as ak, hasProtocol as al, isScriptProtocol as am, joinURL as an, withQuery as ao, sanitizeStatusCode as ap, getContext as aq, $fetch$1 as ar, baseURL as as, createHooks as at, executeAsync as au, toRouteMatcher as av, createRouter$1 as aw, defu as ax, getRequestURL as ay, getCookie as az, getRouterParam as b, createError$1 as c, defineEventHandler as d, getColumnPrompt as e, findActiveColumns as f, getQuery as g, getServerConfig as h, debug$1 as i, findByKey as j, update as k, findBySlugInActivePipeline as l, findByIssueAndColumnId as m, notifyIssueUpdate as n, getAncestors as o, prisma as p, archive as q, readBody as r, setResponseHeaders as s, notifyRefresh as t, useRuntimeConfig as u, exists as v, readMultipartFormData as w, setHeader as x, getChildren as y, findByIssue as z };
14666
15089
  //# sourceMappingURL=nitro.mjs.map