@autocode-cli/autocode 0.22.1 → 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/{D4ccGohf.js → 4sw7JTbp.js} +1 -1
  3. package/.output/public/_nuxt/{C8zYf6XG.js → B6pOO9Bz.js} +1 -1
  4. package/.output/public/_nuxt/{DyKP0gIs.js → BAAVMorC.js} +1 -1
  5. package/.output/public/_nuxt/{BWjtijDJ.js → BJ-MtkWm.js} +1 -1
  6. package/.output/public/_nuxt/{CHthacwI.js → BJz8iexS.js} +1 -1
  7. package/.output/public/_nuxt/{CeGEYC5e.js → BMCm0zjc.js} +1 -1
  8. package/.output/public/_nuxt/{BpbgMwRp.js → BU6KT1Jg.js} +1 -1
  9. package/.output/public/_nuxt/{BmRTYUr0.js → BXorvbPI.js} +1 -1
  10. package/.output/public/_nuxt/{DYmLAFAd.js → BdgB0Sk8.js} +1 -1
  11. package/.output/public/_nuxt/{Gta14GRt.js → BiqphZN8.js} +1 -1
  12. package/.output/public/_nuxt/{DkaRU1td.js → Bn2y2u4i.js} +1 -1
  13. package/.output/public/_nuxt/{BbW8KYxr.js → BtXQIoy8.js} +1 -1
  14. package/.output/public/_nuxt/{DJ2H_vRy.js → Byshfb8L.js} +1 -1
  15. package/.output/public/_nuxt/{DWbJWuyK.js → C10TWEVH.js} +1 -1
  16. package/.output/public/_nuxt/{CLj3in4y.js → C2rmiAJ1.js} +1 -1
  17. package/.output/public/_nuxt/{BtTUkw76.js → CMIuQb6D.js} +1 -1
  18. package/.output/public/_nuxt/{Dc16Qic7.js → CTbIP459.js} +1 -1
  19. package/.output/public/_nuxt/{CDadZeec.js → ClY4a-PO.js} +1 -1
  20. package/.output/public/_nuxt/{SqPShwdq.js → D0HHOq4k.js} +3 -3
  21. package/.output/public/_nuxt/{CbxAQSTv.js → D1JH-OfY.js} +1 -1
  22. package/.output/public/_nuxt/{CUEEgayd.js → D9fas07B.js} +1 -1
  23. package/.output/public/_nuxt/{B6NAkb0r.js → DAd8dbng.js} +1 -1
  24. package/.output/public/_nuxt/{BmOTLnHc.js → DNMLSDtV.js} +1 -1
  25. package/.output/public/_nuxt/{CEFhX48l.js → DbZiOpag.js} +1 -1
  26. package/.output/public/_nuxt/{BbhjDWRO.js → DuqM_LGj.js} +1 -1
  27. package/.output/public/_nuxt/{CAUTSIgP.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/{DFBRLek2.js → c4NRZ8AG.js} +1 -1
  31. package/.output/public/_nuxt/{BJ08PNmw.js → g7WOzF8b.js} +1 -1
  32. package/.output/public/_nuxt/{BFa6Ww2q.js → kNuGsBnB.js} +1 -1
  33. package/.output/public/_nuxt/{D_NTz30l.js → kZiZQgsI.js} +1 -1
  34. package/.output/public/_nuxt/{Ckqs5yhG.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 +5 -5
  45. package/.output/server/chunks/build/usePipeline-ZPHbtOs6.mjs +1 -1
  46. package/.output/server/chunks/nitro/nitro.mjs +707 -395
  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/15da26ff-7ede-4b62-b084-0737b9d90fb3.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/{xH8GmHpZ → __ad3z6g}/en/messages.json +0 -0
  157. /package/.output/public/_i18n/{xH8GmHpZ → __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": "15da26ff-7ede-4b62-b084-0737b9d90fb3",
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");
@@ -11500,7 +11512,7 @@ async function findByKey(key) {
11500
11512
  }
11501
11513
  });
11502
11514
  }
11503
- async function create$3(data, initialColumnId, initialColumnSlug = "backlog") {
11515
+ async function create$4(data, initialColumnId, initialColumnSlug = "backlog") {
11504
11516
  var _a, _b, _c, _d, _e;
11505
11517
  debug$1("issues", "create", { title: data.title, parentKey: data.parentKey, initialColumnSlug });
11506
11518
  let columnId = initialColumnId;
@@ -11725,14 +11737,61 @@ async function getAncestors(key) {
11725
11737
  }
11726
11738
  return ancestors;
11727
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
+ }
11728
11787
 
11729
- async function findByIssue$1(issueKey) {
11788
+ async function findByIssue$2(issueKey) {
11730
11789
  return prisma.issueHistory.findMany({
11731
11790
  where: { issueKey },
11732
11791
  orderBy: { at: "desc" }
11733
11792
  });
11734
11793
  }
11735
- async function create$2(issueKey, data) {
11794
+ async function create$3(issueKey, data) {
11736
11795
  var _a;
11737
11796
  debug$1("history", "create", {
11738
11797
  issueKey,
@@ -11796,7 +11855,7 @@ async function generateMonitoringReport() {
11796
11855
  });
11797
11856
  }
11798
11857
  }
11799
- const history = await findByIssue$1(issue.key);
11858
+ const history = await findByIssue$2(issue.key);
11800
11859
  const historyForLoop = history.map((h) => {
11801
11860
  var _a2;
11802
11861
  return {
@@ -11916,6 +11975,153 @@ function toKebabCase(str) {
11916
11975
  return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
11917
11976
  }
11918
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
+
11919
12125
  const WS_SERVER_URL = process.env.WS_SERVER_URL || "http://localhost:3001";
11920
12126
  function broadcast(message, _channel) {
11921
12127
  fetch(`${WS_SERVER_URL}/broadcast`, {
@@ -12284,7 +12490,7 @@ const _30Vdoj9BdcorODZX8NqnLz57uz8l9ngyL5Vaul6aAo = defineNitroPlugin(async (nit
12284
12490
  const localeSegment = detector.route(event.path);
12285
12491
  const pathLocale = isSupportedLocale(localeSegment) && localeSegment || void 0;
12286
12492
  const path = (pathLocale && url.pathname.slice(pathLocale.length + 1)) ?? url.pathname;
12287
- if (!url.pathname.includes("/_i18n/xH8GmHpZ") && !isExistingNuxtRoute(path)) {
12493
+ if (!url.pathname.includes("/_i18n/__ad3z6g") && !isExistingNuxtRoute(path)) {
12288
12494
  return;
12289
12495
  }
12290
12496
  const resolved = resolveRedirectPath(event, path, pathLocale, ctx.vueI18nOptions.defaultLocale, detector);
@@ -12310,7 +12516,7 @@ async function findBySessionId(sessionId) {
12310
12516
  include: { column: true }
12311
12517
  });
12312
12518
  }
12313
- async function findByIssue(issueKey) {
12519
+ async function findByIssue$1(issueKey) {
12314
12520
  return prisma.executionLog.findMany({
12315
12521
  where: { issueKey },
12316
12522
  orderBy: { createdAt: "desc" },
@@ -12324,7 +12530,7 @@ async function findByIssueAndColumnId(issueKey, columnId) {
12324
12530
  include: { column: true }
12325
12531
  });
12326
12532
  }
12327
- async function create$1(data) {
12533
+ async function create$2(data) {
12328
12534
  var _a, _b, _c;
12329
12535
  debug$1("execution-logs", "create", {
12330
12536
  sessionId: data.sessionId,
@@ -12407,8 +12613,11 @@ function toPromptIssue(issue, columnSlug) {
12407
12613
  };
12408
12614
  }
12409
12615
  async function moveAndProcessIssueById(key, targetColumnId, options = {}) {
12410
- debug$1("workflow", "=== moveAndProcessIssueById START ===", { key, targetColumnId, options });
12411
- const lang = options.lang || "fr";
12616
+ debug$1("workflow", "=== moveAndProcessIssueById START (move only, no Claude) ===", {
12617
+ key,
12618
+ targetColumnId,
12619
+ options
12620
+ });
12412
12621
  const force = options.force || false;
12413
12622
  const targetColumn = await findById(targetColumnId);
12414
12623
  if (!targetColumn) {
@@ -12416,139 +12625,40 @@ async function moveAndProcessIssueById(key, targetColumnId, options = {}) {
12416
12625
  return { success: false, error: `Column with ID '${targetColumnId}' not found` };
12417
12626
  }
12418
12627
  debug$1("workflow", "Target column loaded", { slug: targetColumn.slug, id: targetColumnId });
12419
- debug$1("workflow", "Acquiring Claude lock FIRST to serialize all operations", {
12420
- key,
12421
- targetColumnSlug: targetColumn.slug,
12422
- explanation: "Le lock est acquis AVANT le move pour \xE9viter les race conditions"
12423
- });
12424
- await acquireClaudeLock();
12425
- debug$1("workflow", "Claude lock acquired! We have exclusive access to this issue", {
12426
- key,
12427
- targetColumnSlug: targetColumn.slug
12428
- });
12429
- try {
12430
- const issue = await findByKey(key);
12431
- if (!issue) {
12432
- debug$1("workflow", "Issue not found, cannot proceed", { key });
12433
- return { success: false, error: `Issue '${key}' not found` };
12434
- }
12435
- debug$1("workflow", "Issue loaded (under lock)", { key, currentColumnId: issue.columnId });
12436
- if (issue.columnId === targetColumnId) {
12437
- debug$1("workflow", "Issue already in target column, no action needed", {
12438
- key,
12439
- columnSlug: targetColumn.slug,
12440
- explanation: "L'issue est d\xE9j\xE0 dans la colonne cible, on ne fait rien"
12441
- });
12442
- debug$1("workflow", "=== moveAndProcessIssueById END (already in column) ===", { key });
12443
- return { success: true, issue, actionExecuted: false };
12444
- }
12445
- const validation = await validateTransitionById(issue.columnId, targetColumnId, force);
12446
- debug$1("workflow", "Transition validation result", {
12447
- from: issue.columnId,
12448
- to: targetColumnId,
12449
- valid: validation.valid,
12450
- reason: validation.reason
12451
- });
12452
- if (!validation.valid) {
12453
- return { success: false, error: validation.reason };
12454
- }
12455
- const movedIssue = await moveToColumnById(key, targetColumnId);
12456
- debug$1("workflow", "Issue moved in DB (under lock)", {
12457
- key,
12458
- newColumnId: targetColumnId,
12459
- newColumnSlug: targetColumn.slug
12460
- });
12461
- const actionable = await isActionableColumnById(targetColumnId);
12462
- debug$1("workflow", "Column actionable check", {
12463
- columnSlug: targetColumn.slug,
12464
- actionable,
12465
- explanation: actionable ? "Colonne de travail \u2192 Claude doit traiter" : "Colonne non-actionable (backlog/done) \u2192 pas de traitement Claude"
12466
- });
12467
- if (!actionable) {
12468
- debug$1("workflow", "=== moveAndProcessIssueById END (non-actionable) ===", { key });
12469
- return { success: true, issue: movedIssue, actionExecuted: false };
12470
- }
12471
- const actionContent = await getColumnPrompt(targetColumn.slug, lang);
12472
- debug$1("workflow", "Column prompt loaded", {
12473
- columnSlug: targetColumn.slug,
12474
- promptLength: (actionContent == null ? void 0 : actionContent.length) || 0,
12475
- hasPrompt: !!actionContent
12476
- });
12477
- if (!actionContent) {
12478
- debug$1("workflow", "No prompt file for this column, skipping Claude", {
12479
- columnSlug: targetColumn.slug
12480
- });
12481
- debug$1("workflow", "=== moveAndProcessIssueById END (no prompt) ===", { key });
12482
- return { success: true, issue: movedIssue, actionExecuted: false };
12483
- }
12484
- const prompt = buildPrompt(toPromptIssue(movedIssue, targetColumn.slug), actionContent, lang);
12485
- debug$1("workflow", "Full prompt built", {
12486
- key,
12487
- columnSlug: targetColumn.slug,
12488
- totalLength: prompt.length
12489
- });
12490
- const sessionId = generateSessionId();
12491
- debug$1("workflow", "Creating ExecutionLog and started entry (verified, lock held)", {
12492
- sessionId,
12493
- key,
12494
- columnSlug: targetColumn.slug,
12495
- explanation: "On cr\xE9e ces records MAINTENANT car on a v\xE9rifi\xE9 que l'issue est toujours dans la bonne colonne"
12496
- });
12497
- await create$1({
12498
- sessionId,
12499
- issueKey: key,
12500
- columnId: targetColumnId,
12501
- prompt
12502
- });
12503
- debug$1("workflow", "ExecutionLog created", { sessionId });
12504
- await create$2(key, {
12505
- action: "started",
12506
- fromColumn: targetColumn.slug,
12507
- toColumn: targetColumn.slug,
12508
- sessionId
12509
- });
12510
- debug$1("workflow", 'History "started" entry created', {
12511
- sessionId,
12512
- columnSlug: targetColumn.slug,
12513
- explanation: "started = ex\xE9cution Claude initi\xE9e pour cette colonne"
12514
- });
12515
- debug$1("workflow", "Executing Claude CLI (lock already held)", {
12516
- key,
12517
- columnSlug: targetColumn.slug,
12518
- sessionId
12519
- });
12520
- const result = await executeClaudeCLIStreamWithoutLock(prompt, key, targetColumn.slug);
12521
- debug$1("workflow", "Claude CLI execution completed", {
12522
- success: result.success,
12523
- error: result.error,
12524
- duration: result.duration,
12525
- sessionId
12526
- });
12527
- if (result.output) {
12528
- await updateTerminalLog(sessionId, result.output);
12529
- debug$1("workflow", "Terminal log saved", { sessionId, outputLength: result.output.length });
12530
- }
12531
- if (!result.success) {
12532
- debug$1("workflow", "=== moveAndProcessIssueById END (Claude failed) ===", {
12533
- key,
12534
- error: result.error
12535
- });
12536
- return { success: true, issue: movedIssue, actionExecuted: false, error: result.error };
12537
- }
12538
- const updatedIssue = await findByKey(key);
12539
- debug$1("workflow", "=== moveAndProcessIssueById END (success) ===", {
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 });
12634
+ if (issue.columnId === targetColumnId) {
12635
+ debug$1("workflow", "Issue already in target column", {
12540
12636
  key,
12541
- actionExecuted: true,
12542
- sessionId
12637
+ columnSlug: targetColumn.slug
12543
12638
  });
12544
- return { success: true, issue: updatedIssue || movedIssue, actionExecuted: true };
12545
- } finally {
12546
- debug$1("workflow", "Releasing Claude lock", { key });
12547
- releaseClaudeLock();
12639
+ return { success: true, issue, actionExecuted: false };
12640
+ }
12641
+ const validation = await validateTransitionById(issue.columnId, targetColumnId, force);
12642
+ debug$1("workflow", "Transition validation", {
12643
+ from: issue.columnId,
12644
+ to: targetColumnId,
12645
+ valid: validation.valid,
12646
+ reason: validation.reason
12647
+ });
12648
+ if (!validation.valid) {
12649
+ return { success: false, error: validation.reason };
12548
12650
  }
12651
+ const movedIssue = await moveToColumnById(key, targetColumnId);
12652
+ debug$1("workflow", "Issue moved", {
12653
+ key,
12654
+ newColumnId: targetColumnId,
12655
+ newColumnSlug: targetColumn.slug
12656
+ });
12657
+ debug$1("workflow", "=== moveAndProcessIssueById END (move only) ===", { key });
12658
+ return { success: true, issue: movedIssue, actionExecuted: false };
12549
12659
  }
12550
12660
  async function moveToNextColumnAndProcess(key, options = {}) {
12551
- debug$1("workflow", "moveToNextColumnAndProcess called", { key, options });
12661
+ debug$1("workflow", "moveToNextColumnAndProcess called (move only, no Claude)", { key, options });
12552
12662
  const issue = await findByKey(key);
12553
12663
  if (!issue) {
12554
12664
  debug$1("workflow", "Issue not found for next", { key });
@@ -12666,6 +12776,7 @@ async function processIssueInCurrentColumn(key, options = {}) {
12666
12776
  });
12667
12777
  await acquireClaudeLock();
12668
12778
  debug$1("workflow", "Claude lock acquired! We have exclusive access", { key });
12779
+ let processingLockAcquired = false;
12669
12780
  try {
12670
12781
  const issue = await findByKey(key);
12671
12782
  if (!issue) {
@@ -12712,19 +12823,29 @@ async function processIssueInCurrentColumn(key, options = {}) {
12712
12823
  totalLength: prompt.length
12713
12824
  });
12714
12825
  const sessionId = generateSessionId();
12715
- debug$1("workflow", "Creating ExecutionLog and started entry (lock held)", {
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", {
12716
12837
  sessionId,
12717
12838
  key,
12718
12839
  columnSlug: column.slug
12719
12840
  });
12720
- await create$1({
12841
+ await create$2({
12721
12842
  sessionId,
12722
12843
  issueKey: key,
12723
12844
  columnId: issue.columnId,
12724
12845
  prompt
12725
12846
  });
12726
12847
  debug$1("workflow", "ExecutionLog created", { sessionId });
12727
- await create$2(key, {
12848
+ await create$3(key, {
12728
12849
  action: "started",
12729
12850
  fromColumn: column.slug,
12730
12851
  toColumn: column.slug,
@@ -12765,48 +12886,225 @@ async function processIssueInCurrentColumn(key, options = {}) {
12765
12886
  });
12766
12887
  return { success: true, issue: updatedIssue || issue, actionExecuted: true };
12767
12888
  } finally {
12889
+ if (processingLockAcquired) {
12890
+ debug$1("workflow", "Releasing processing lock", { key });
12891
+ await releaseProcessingLock(key);
12892
+ }
12768
12893
  debug$1("workflow", "Releasing Claude lock", { key });
12769
12894
  releaseClaudeLock();
12770
12895
  }
12771
12896
  }
12772
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;
12773
12922
  const processingIssues = /* @__PURE__ */ new Set();
12923
+ const retryCounters = /* @__PURE__ */ new Map();
12774
12924
  const _m6EoNY0Rbu7thvByPemFl2aPWPH21dK1tArqOtrho = defineNitroPlugin(() => {
12775
12925
  initLogger();
12776
- 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
+ });
12777
12930
  setInterval(async () => {
12778
- 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
+ });
12779
12952
  try {
12780
- debug$1("autoprocess", "Polling for actionable issue", {
12781
- 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
12782
13029
  });
12783
- const issue = await findActionableIssue({
12784
- 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
12785
13041
  });
12786
- if (!issue) {
12787
- 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 });
12788
13065
  return;
12789
13066
  }
12790
- processingIssues.add(issue.key);
12791
- debug$1("autoprocess", "Processing started", { key: issue.key, column: (_a = issue.column) == null ? void 0 : _a.slug });
12792
- try {
12793
- const result = await processIssueInCurrentColumn(issue.key, { lang: "fr" });
12794
- if (result.success && result.actionExecuted) {
12795
- debug$1("autoprocess", "Processing completed", { key: issue.key, success: true });
12796
- } else if (result.processing) {
12797
- debug$1("autoprocess", "Still processing", { key: issue.key });
12798
- } else if (result.error) {
12799
- debug$1("autoprocess", "Processing failed", { key: issue.key, error: result.error });
12800
- }
12801
- } finally {
12802
- processingIssues.delete(issue.key);
12803
- 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;
12804
13074
  }
12805
- } catch (error) {
12806
- 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;
12807
13083
  }
12808
- }, 1e4);
12809
- });
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
+ }
12810
13108
 
12811
13109
  const LOCKED_COLUMNS = {
12812
13110
  BACKLOG: "backlog",
@@ -13431,493 +13729,507 @@ _5RvkpiviNMus9JKZsnHvqoz9244BNkJ0VnObYMaX8dM
13431
13729
  const assets = {
13432
13730
  "/_payload.json": {
13433
13731
  "type": "application/json;charset=utf-8",
13434
- "etag": "\"45-B415aAqdYtKn59zkoXBR1cpDR4M\"",
13435
- "mtime": "2026-01-06T11:43:30.204Z",
13732
+ "etag": "\"45-eDFnLhbD2I45yhI6ynKqu7AwXuM\"",
13733
+ "mtime": "2026-01-06T14:50:44.817Z",
13436
13734
  "size": 69,
13437
13735
  "path": "../public/_payload.json"
13438
13736
  },
13439
13737
  "/favicon.svg": {
13440
13738
  "type": "image/svg+xml",
13441
13739
  "etag": "\"215-HjDVtWnXgjYQ6+j8KMWdIoIvKrs\"",
13442
- "mtime": "2026-01-06T11:43:30.270Z",
13740
+ "mtime": "2026-01-06T14:50:44.902Z",
13443
13741
  "size": 533,
13444
13742
  "path": "../public/favicon.svg"
13445
13743
  },
13446
13744
  "/index.html": {
13447
13745
  "type": "text/html;charset=utf-8",
13448
- "etag": "\"c04d-FYV1b31HFVswSnb76rrr7CFVQNk\"",
13449
- "mtime": "2026-01-06T11:43:30.199Z",
13746
+ "etag": "\"c04d-R3LeOlzfpHn/oCcGZ7RB5969ZQU\"",
13747
+ "mtime": "2026-01-06T14:50:44.809Z",
13450
13748
  "size": 49229,
13451
13749
  "path": "../public/index.html"
13452
13750
  },
13453
13751
  "/og-image.svg": {
13454
13752
  "type": "image/svg+xml",
13455
13753
  "etag": "\"b4c-fhZoPqCM0huQ6gtd05hPWO7BSd8\"",
13456
- "mtime": "2026-01-06T11:43:30.270Z",
13754
+ "mtime": "2026-01-06T14:50:44.902Z",
13457
13755
  "size": 2892,
13458
13756
  "path": "../public/og-image.svg"
13459
13757
  },
13460
13758
  "/robots.txt": {
13461
13759
  "type": "text/plain; charset=utf-8",
13462
13760
  "etag": "\"4c-qUUsbd/u0pG4q6fMxwyWT70X6zE\"",
13463
- "mtime": "2026-01-06T11:43:30.270Z",
13761
+ "mtime": "2026-01-06T14:50:44.902Z",
13464
13762
  "size": 76,
13465
13763
  "path": "../public/robots.txt"
13466
13764
  },
13467
- "/_nuxt/B6NAkb0r.js": {
13765
+ "/_nuxt/4sw7JTbp.js": {
13468
13766
  "type": "text/javascript; charset=utf-8",
13469
- "etag": "\"26b-TsdZcO9wWfyhD2iHlUUTyGgfdGo\"",
13470
- "mtime": "2026-01-06T11:43:30.255Z",
13471
- "size": 619,
13472
- "path": "../public/_nuxt/B6NAkb0r.js"
13767
+ "etag": "\"1a6-zZNwrfkXseAf2ybEK6EBCHaYQL4\"",
13768
+ "mtime": "2026-01-06T14:50:44.886Z",
13769
+ "size": 422,
13770
+ "path": "../public/_nuxt/4sw7JTbp.js"
13473
13771
  },
13474
- "/_nuxt/BFa6Ww2q.js": {
13772
+ "/_nuxt/B6pOO9Bz.js": {
13475
13773
  "type": "text/javascript; charset=utf-8",
13476
- "etag": "\"bee-mOPHyAIZHrQv05LAYNenEnh5HSg\"",
13477
- "mtime": "2026-01-06T11:43:30.255Z",
13478
- "size": 3054,
13479
- "path": "../public/_nuxt/BFa6Ww2q.js"
13774
+ "etag": "\"1b6d-4KTc+wVZiSK4UtPsVlvQWs4s6NU\"",
13775
+ "mtime": "2026-01-06T14:50:44.892Z",
13776
+ "size": 7021,
13777
+ "path": "../public/_nuxt/B6pOO9Bz.js"
13480
13778
  },
13481
- "/_nuxt/BJ08PNmw.js": {
13779
+ "/_nuxt/BAAVMorC.js": {
13482
13780
  "type": "text/javascript; charset=utf-8",
13483
- "etag": "\"632-s9qGYFtWiWnIGTVQ7phWUuNzDJ0\"",
13484
- "mtime": "2026-01-06T11:43:30.255Z",
13485
- "size": 1586,
13486
- "path": "../public/_nuxt/BJ08PNmw.js"
13781
+ "etag": "\"9ea-dBuxVB9NkQTiKj4mm6EwFOUEFts\"",
13782
+ "mtime": "2026-01-06T14:50:44.887Z",
13783
+ "size": 2538,
13784
+ "path": "../public/_nuxt/BAAVMorC.js"
13487
13785
  },
13488
- "/_nuxt/BWjtijDJ.js": {
13786
+ "/_nuxt/BJ-MtkWm.js": {
13489
13787
  "type": "text/javascript; charset=utf-8",
13490
- "etag": "\"7fe-CNbLEVA5MJCfm3mpCmV5F0jX8S0\"",
13491
- "mtime": "2026-01-06T11:43:30.255Z",
13788
+ "etag": "\"7fe-uI3UKrX8rBdLsC8V4L0H7dq2AWk\"",
13789
+ "mtime": "2026-01-06T14:50:44.887Z",
13492
13790
  "size": 2046,
13493
- "path": "../public/_nuxt/BWjtijDJ.js"
13791
+ "path": "../public/_nuxt/BJ-MtkWm.js"
13494
13792
  },
13495
- "/_nuxt/BbW8KYxr.js": {
13793
+ "/_nuxt/BJz8iexS.js": {
13496
13794
  "type": "text/javascript; charset=utf-8",
13497
- "etag": "\"6c4-JHqoQ+ERGZYVyoyxG9G+gGiZC7k\"",
13498
- "mtime": "2026-01-06T11:43:30.255Z",
13499
- "size": 1732,
13500
- "path": "../public/_nuxt/BbW8KYxr.js"
13501
- },
13502
- "/_nuxt/BbhjDWRO.js": {
13503
- "type": "text/javascript; charset=utf-8",
13504
- "etag": "\"2f360-sC1nfeGj85zsnqNpBs234ANAPf8\"",
13505
- "mtime": "2026-01-06T11:43:30.255Z",
13506
- "size": 193376,
13507
- "path": "../public/_nuxt/BbhjDWRO.js"
13795
+ "etag": "\"2830-Sml06yI9iVhVQGcIMmeqVzF76eY\"",
13796
+ "mtime": "2026-01-06T14:50:44.887Z",
13797
+ "size": 10288,
13798
+ "path": "../public/_nuxt/BJz8iexS.js"
13508
13799
  },
13509
- "/_nuxt/BmGeRwzG.js": {
13800
+ "/_nuxt/BMCm0zjc.js": {
13510
13801
  "type": "text/javascript; charset=utf-8",
13511
- "etag": "\"5b4d-PGjPxJdeDnQIP/b4YM+m2fvMHTg\"",
13512
- "mtime": "2026-01-06T11:43:30.256Z",
13513
- "size": 23373,
13514
- "path": "../public/_nuxt/BmGeRwzG.js"
13802
+ "etag": "\"98a-EBatDplkjaJe3PqI1svFVYH6CXE\"",
13803
+ "mtime": "2026-01-06T14:50:44.887Z",
13804
+ "size": 2442,
13805
+ "path": "../public/_nuxt/BMCm0zjc.js"
13515
13806
  },
13516
- "/_nuxt/BmOTLnHc.js": {
13807
+ "/_nuxt/BU6KT1Jg.js": {
13517
13808
  "type": "text/javascript; charset=utf-8",
13518
- "etag": "\"674-Xkv6PEbJedTlnAamM4d+QmBCAa0\"",
13519
- "mtime": "2026-01-06T11:43:30.256Z",
13520
- "size": 1652,
13521
- "path": "../public/_nuxt/BmOTLnHc.js"
13809
+ "etag": "\"12d6-JD8N0bgFurkoNQeYXg1jEBy5Lao\"",
13810
+ "mtime": "2026-01-06T14:50:44.887Z",
13811
+ "size": 4822,
13812
+ "path": "../public/_nuxt/BU6KT1Jg.js"
13522
13813
  },
13523
- "/_nuxt/BmRTYUr0.js": {
13814
+ "/_nuxt/BXorvbPI.js": {
13524
13815
  "type": "text/javascript; charset=utf-8",
13525
- "etag": "\"e59e-LgtzjL+x/rHYJW8JCkKWOPMhELk\"",
13526
- "mtime": "2026-01-06T11:43:30.256Z",
13816
+ "etag": "\"e59e-GFK8GxR5Wy0sAyEdY0/hnPUtdZA\"",
13817
+ "mtime": "2026-01-06T14:50:44.887Z",
13527
13818
  "size": 58782,
13528
- "path": "../public/_nuxt/BmRTYUr0.js"
13819
+ "path": "../public/_nuxt/BXorvbPI.js"
13529
13820
  },
13530
- "/_nuxt/BpbgMwRp.js": {
13821
+ "/_nuxt/BdgB0Sk8.js": {
13531
13822
  "type": "text/javascript; charset=utf-8",
13532
- "etag": "\"12d6-5BCfjuugS/Ve70YsCw7GgS0zric\"",
13533
- "mtime": "2026-01-06T11:43:30.256Z",
13534
- "size": 4822,
13535
- "path": "../public/_nuxt/BpbgMwRp.js"
13823
+ "etag": "\"87c-5oyJioUJm/uwS0DClUzGFgCIQ0A\"",
13824
+ "mtime": "2026-01-06T14:50:44.887Z",
13825
+ "size": 2172,
13826
+ "path": "../public/_nuxt/BdgB0Sk8.js"
13536
13827
  },
13537
- "/_nuxt/BtTUkw76.js": {
13828
+ "/_nuxt/BiqphZN8.js": {
13538
13829
  "type": "text/javascript; charset=utf-8",
13539
- "etag": "\"6f9-ax4taCJGO/LgHLk058vMdTaxaKY\"",
13540
- "mtime": "2026-01-06T11:43:30.256Z",
13541
- "size": 1785,
13542
- "path": "../public/_nuxt/BtTUkw76.js"
13830
+ "etag": "\"39e-UNADWkIxVA8jRso9MstacOuorHU\"",
13831
+ "mtime": "2026-01-06T14:50:44.888Z",
13832
+ "size": 926,
13833
+ "path": "../public/_nuxt/BiqphZN8.js"
13543
13834
  },
13544
- "/_nuxt/C0Rlrcoy.js": {
13835
+ "/_nuxt/BmGeRwzG.js": {
13545
13836
  "type": "text/javascript; charset=utf-8",
13546
- "etag": "\"9b9c-sPbZRCii4LQs1AA2sMQvCzqiMD4\"",
13547
- "mtime": "2026-01-06T11:43:30.256Z",
13548
- "size": 39836,
13549
- "path": "../public/_nuxt/C0Rlrcoy.js"
13837
+ "etag": "\"5b4d-PGjPxJdeDnQIP/b4YM+m2fvMHTg\"",
13838
+ "mtime": "2026-01-06T14:50:44.888Z",
13839
+ "size": 23373,
13840
+ "path": "../public/_nuxt/BmGeRwzG.js"
13550
13841
  },
13551
- "/_nuxt/C8zYf6XG.js": {
13842
+ "/_nuxt/Bn2y2u4i.js": {
13552
13843
  "type": "text/javascript; charset=utf-8",
13553
- "etag": "\"1b6d-PfiHsg19Z7Xsbq1tTYCPhVsKxcA\"",
13554
- "mtime": "2026-01-06T11:43:30.256Z",
13555
- "size": 7021,
13556
- "path": "../public/_nuxt/C8zYf6XG.js"
13844
+ "etag": "\"3e8-WHeabnfiP+QTXGdMld4eHAzE7tI\"",
13845
+ "mtime": "2026-01-06T14:50:44.888Z",
13846
+ "size": 1000,
13847
+ "path": "../public/_nuxt/Bn2y2u4i.js"
13557
13848
  },
13558
- "/_nuxt/CAUTSIgP.js": {
13849
+ "/_nuxt/BtXQIoy8.js": {
13559
13850
  "type": "text/javascript; charset=utf-8",
13560
- "etag": "\"78d-gdbkixxwba99wtLsRefPOKdEeEU\"",
13561
- "mtime": "2026-01-06T11:43:30.256Z",
13562
- "size": 1933,
13563
- "path": "../public/_nuxt/CAUTSIgP.js"
13851
+ "etag": "\"6c4-sL2PgE6efkzxhIDwMmy5oy4jtHM\"",
13852
+ "mtime": "2026-01-06T14:50:44.888Z",
13853
+ "size": 1732,
13854
+ "path": "../public/_nuxt/BtXQIoy8.js"
13564
13855
  },
13565
- "/_nuxt/CDadZeec.js": {
13856
+ "/_nuxt/Byshfb8L.js": {
13566
13857
  "type": "text/javascript; charset=utf-8",
13567
- "etag": "\"956-GFGipoziry/1v0w/FkfRkxnixak\"",
13568
- "mtime": "2026-01-06T11:43:30.256Z",
13569
- "size": 2390,
13570
- "path": "../public/_nuxt/CDadZeec.js"
13858
+ "etag": "\"2d8f-Kj382SCH4v5Y496bG1s6lO0x8nI\"",
13859
+ "mtime": "2026-01-06T14:50:44.888Z",
13860
+ "size": 11663,
13861
+ "path": "../public/_nuxt/Byshfb8L.js"
13571
13862
  },
13572
- "/_nuxt/CEFhX48l.js": {
13863
+ "/_nuxt/C0Rlrcoy.js": {
13573
13864
  "type": "text/javascript; charset=utf-8",
13574
- "etag": "\"6ff5-Z0hjGOkD/Kq/0dzK7fj83hDPXM8\"",
13575
- "mtime": "2026-01-06T11:43:30.257Z",
13576
- "size": 28661,
13577
- "path": "../public/_nuxt/CEFhX48l.js"
13865
+ "etag": "\"9b9c-sPbZRCii4LQs1AA2sMQvCzqiMD4\"",
13866
+ "mtime": "2026-01-06T14:50:44.888Z",
13867
+ "size": 39836,
13868
+ "path": "../public/_nuxt/C0Rlrcoy.js"
13578
13869
  },
13579
- "/_nuxt/CHthacwI.js": {
13870
+ "/_nuxt/C10TWEVH.js": {
13580
13871
  "type": "text/javascript; charset=utf-8",
13581
- "etag": "\"2830-lEIfUc5sFIVhkGH3/rPZwxFB0J0\"",
13582
- "mtime": "2026-01-06T11:43:30.257Z",
13583
- "size": 10288,
13584
- "path": "../public/_nuxt/CHthacwI.js"
13872
+ "etag": "\"2ae-Y7jWb48f6h/0Y3Fwl+3M/0rEDQM\"",
13873
+ "mtime": "2026-01-06T14:50:44.888Z",
13874
+ "size": 686,
13875
+ "path": "../public/_nuxt/C10TWEVH.js"
13585
13876
  },
13586
- "/_nuxt/CLj3in4y.js": {
13877
+ "/_nuxt/C2rmiAJ1.js": {
13587
13878
  "type": "text/javascript; charset=utf-8",
13588
- "etag": "\"1402-/H+l6N7XsqhdEyM3N6OnLqfAjyQ\"",
13589
- "mtime": "2026-01-06T11:43:30.257Z",
13879
+ "etag": "\"1402-VtJMhqcGSm79uhfUkCRKo8jelg0\"",
13880
+ "mtime": "2026-01-06T14:50:44.888Z",
13590
13881
  "size": 5122,
13591
- "path": "../public/_nuxt/CLj3in4y.js"
13882
+ "path": "../public/_nuxt/C2rmiAJ1.js"
13592
13883
  },
13593
- "/_nuxt/CUEEgayd.js": {
13884
+ "/_nuxt/CMIuQb6D.js": {
13594
13885
  "type": "text/javascript; charset=utf-8",
13595
- "etag": "\"308-Yo/t1JsVlqzulcorjyY8U6JQnLY\"",
13596
- "mtime": "2026-01-06T11:43:30.257Z",
13597
- "size": 776,
13598
- "path": "../public/_nuxt/CUEEgayd.js"
13599
- },
13600
- "/_nuxt/CbxAQSTv.js": {
13601
- "type": "text/javascript; charset=utf-8",
13602
- "etag": "\"13d6-soQlZbLe3/N22nHwjpiVLZF9YOU\"",
13603
- "mtime": "2026-01-06T11:43:30.257Z",
13604
- "size": 5078,
13605
- "path": "../public/_nuxt/CbxAQSTv.js"
13886
+ "etag": "\"6f9-E0xalMLGhpoIvFzrRNRUcVOZPPQ\"",
13887
+ "mtime": "2026-01-06T14:50:44.889Z",
13888
+ "size": 1785,
13889
+ "path": "../public/_nuxt/CMIuQb6D.js"
13606
13890
  },
13607
- "/_nuxt/CeGEYC5e.js": {
13891
+ "/_nuxt/CTbIP459.js": {
13608
13892
  "type": "text/javascript; charset=utf-8",
13609
- "etag": "\"98a-xKc68OZP7Ed6G6Dm7JrZnxj2D7E\"",
13610
- "mtime": "2026-01-06T11:43:30.257Z",
13611
- "size": 2442,
13612
- "path": "../public/_nuxt/CeGEYC5e.js"
13893
+ "etag": "\"1f50-bzGM5CjHWzcIvVcPXIRgOApFvVY\"",
13894
+ "mtime": "2026-01-06T14:50:44.889Z",
13895
+ "size": 8016,
13896
+ "path": "../public/_nuxt/CTbIP459.js"
13613
13897
  },
13614
- "/_nuxt/Ckqs5yhG.js": {
13898
+ "/_nuxt/ClY4a-PO.js": {
13615
13899
  "type": "text/javascript; charset=utf-8",
13616
- "etag": "\"ace-eQSmYtOOYhzDe7mhhIvjU331FLI\"",
13617
- "mtime": "2026-01-06T11:43:30.257Z",
13618
- "size": 2766,
13619
- "path": "../public/_nuxt/Ckqs5yhG.js"
13900
+ "etag": "\"956-BqhcYUwggrTF5yx381ja69macYw\"",
13901
+ "mtime": "2026-01-06T14:50:44.889Z",
13902
+ "size": 2390,
13903
+ "path": "../public/_nuxt/ClY4a-PO.js"
13620
13904
  },
13621
13905
  "/_nuxt/CtVoJCjv.js": {
13622
13906
  "type": "text/javascript; charset=utf-8",
13623
13907
  "etag": "\"60e1-nIA6Jbnn6uAHuDaU32OF/jkPj2w\"",
13624
- "mtime": "2026-01-06T11:43:30.257Z",
13908
+ "mtime": "2026-01-06T14:50:44.889Z",
13625
13909
  "size": 24801,
13626
13910
  "path": "../public/_nuxt/CtVoJCjv.js"
13627
13911
  },
13628
- "/_nuxt/D4ccGohf.js": {
13629
- "type": "text/javascript; charset=utf-8",
13630
- "etag": "\"1a6-rdyia4c8412BpkuJjFzupr1AKDk\"",
13631
- "mtime": "2026-01-06T11:43:30.257Z",
13632
- "size": 422,
13633
- "path": "../public/_nuxt/D4ccGohf.js"
13634
- },
13635
- "/_nuxt/DFBRLek2.js": {
13636
- "type": "text/javascript; charset=utf-8",
13637
- "etag": "\"1191-MpDIk6AKkPOlkhfd3T97xQcvwa4\"",
13638
- "mtime": "2026-01-06T11:43:30.257Z",
13639
- "size": 4497,
13640
- "path": "../public/_nuxt/DFBRLek2.js"
13641
- },
13642
- "/_nuxt/DJ2H_vRy.js": {
13912
+ "/_nuxt/D0HHOq4k.js": {
13643
13913
  "type": "text/javascript; charset=utf-8",
13644
- "etag": "\"2d8f-a5P0BK40xAeB6PP+Ph57cFm2BeI\"",
13645
- "mtime": "2026-01-06T11:43:30.257Z",
13646
- "size": 11663,
13647
- "path": "../public/_nuxt/DJ2H_vRy.js"
13914
+ "etag": "\"445ad-J95rD/IxPKFNtjS/APb/lFToxe0\"",
13915
+ "mtime": "2026-01-06T14:50:44.889Z",
13916
+ "size": 279981,
13917
+ "path": "../public/_nuxt/D0HHOq4k.js"
13648
13918
  },
13649
- "/_nuxt/DWbJWuyK.js": {
13919
+ "/_nuxt/D1JH-OfY.js": {
13650
13920
  "type": "text/javascript; charset=utf-8",
13651
- "etag": "\"2ae-HhUKbs3HvdebiD/Mtfbc/fUYlBg\"",
13652
- "mtime": "2026-01-06T11:43:30.260Z",
13653
- "size": 686,
13654
- "path": "../public/_nuxt/DWbJWuyK.js"
13921
+ "etag": "\"13d6-Y7qMDm6aU0g8xgoyL/+hWbBaHC4\"",
13922
+ "mtime": "2026-01-06T14:50:44.890Z",
13923
+ "size": 5078,
13924
+ "path": "../public/_nuxt/D1JH-OfY.js"
13655
13925
  },
13656
- "/_nuxt/DYmLAFAd.js": {
13926
+ "/_nuxt/D9fas07B.js": {
13657
13927
  "type": "text/javascript; charset=utf-8",
13658
- "etag": "\"87c-9rbURteNXfoHb+DYxFWMsunewb0\"",
13659
- "mtime": "2026-01-06T11:43:30.260Z",
13660
- "size": 2172,
13661
- "path": "../public/_nuxt/DYmLAFAd.js"
13928
+ "etag": "\"308-754sf8ITAmwt2UZDCRAgAjkWcfU\"",
13929
+ "mtime": "2026-01-06T14:50:44.890Z",
13930
+ "size": 776,
13931
+ "path": "../public/_nuxt/D9fas07B.js"
13662
13932
  },
13663
- "/_nuxt/D_NTz30l.js": {
13933
+ "/_nuxt/DAd8dbng.js": {
13664
13934
  "type": "text/javascript; charset=utf-8",
13665
- "etag": "\"c24-i4vSsr+p8MKYFnBLjeaRwPccp+o\"",
13666
- "mtime": "2026-01-06T11:43:30.260Z",
13667
- "size": 3108,
13668
- "path": "../public/_nuxt/D_NTz30l.js"
13935
+ "etag": "\"26b-yCmekgopV/bvIEFzbT0E/Sj8gtM\"",
13936
+ "mtime": "2026-01-06T14:50:44.890Z",
13937
+ "size": 619,
13938
+ "path": "../public/_nuxt/DAd8dbng.js"
13669
13939
  },
13670
- "/_nuxt/Dc16Qic7.js": {
13940
+ "/_nuxt/DNMLSDtV.js": {
13671
13941
  "type": "text/javascript; charset=utf-8",
13672
- "etag": "\"1f50-bgc4fyd1j/fOUD0geQLCY1VaJoc\"",
13673
- "mtime": "2026-01-06T11:43:30.260Z",
13674
- "size": 8016,
13675
- "path": "../public/_nuxt/Dc16Qic7.js"
13942
+ "etag": "\"674-qhgSRv4NpNefdWVSL7oaJxo7vpM\"",
13943
+ "mtime": "2026-01-06T14:50:44.890Z",
13944
+ "size": 1652,
13945
+ "path": "../public/_nuxt/DNMLSDtV.js"
13676
13946
  },
13677
- "/_nuxt/DkaRU1td.js": {
13947
+ "/_nuxt/DbZiOpag.js": {
13678
13948
  "type": "text/javascript; charset=utf-8",
13679
- "etag": "\"3e8-zhBnwMKgp5vfP+LX2wllgy+5mhs\"",
13680
- "mtime": "2026-01-06T11:43:30.260Z",
13681
- "size": 1000,
13682
- "path": "../public/_nuxt/DkaRU1td.js"
13949
+ "etag": "\"6ff5-eX+fPELwPiVIMMoio67ssZ4juB0\"",
13950
+ "mtime": "2026-01-06T14:50:44.890Z",
13951
+ "size": 28661,
13952
+ "path": "../public/_nuxt/DbZiOpag.js"
13683
13953
  },
13684
- "/_nuxt/DyKP0gIs.js": {
13954
+ "/_nuxt/DuqM_LGj.js": {
13685
13955
  "type": "text/javascript; charset=utf-8",
13686
- "etag": "\"9ea-KNQD1y7m7fi68MsqchGdJ9wb4zk\"",
13687
- "mtime": "2026-01-06T11:43:30.260Z",
13688
- "size": 2538,
13689
- "path": "../public/_nuxt/DyKP0gIs.js"
13956
+ "etag": "\"2f360-zLn4IQ6Gt6gixWU/fts1XUMPo6o\"",
13957
+ "mtime": "2026-01-06T14:50:44.890Z",
13958
+ "size": 193376,
13959
+ "path": "../public/_nuxt/DuqM_LGj.js"
13690
13960
  },
13691
- "/_nuxt/Gta14GRt.js": {
13961
+ "/_nuxt/DxFm2Qrx.js": {
13692
13962
  "type": "text/javascript; charset=utf-8",
13693
- "etag": "\"39e-797sCfd4f0gtZhoMLt70+v1aBKY\"",
13694
- "mtime": "2026-01-06T11:43:30.260Z",
13695
- "size": 926,
13696
- "path": "../public/_nuxt/Gta14GRt.js"
13963
+ "etag": "\"78d-CMpCytM2qfwFTin0tSvf9UkJso8\"",
13964
+ "mtime": "2026-01-06T14:50:44.890Z",
13965
+ "size": 1933,
13966
+ "path": "../public/_nuxt/DxFm2Qrx.js"
13697
13967
  },
13698
13968
  "/_nuxt/IssueHeader.BKYJE9Ko.css": {
13699
13969
  "type": "text/css; charset=utf-8",
13700
13970
  "etag": "\"4a1-cNhs83r9kPH36WuqXuq0TmsK7qM\"",
13701
- "mtime": "2026-01-06T11:43:30.260Z",
13971
+ "mtime": "2026-01-06T14:50:44.890Z",
13702
13972
  "size": 1185,
13703
13973
  "path": "../public/_nuxt/IssueHeader.BKYJE9Ko.css"
13704
13974
  },
13705
13975
  "/_nuxt/LangSwitcher.DDTh1sNN.css": {
13706
13976
  "type": "text/css; charset=utf-8",
13707
13977
  "etag": "\"2b5-PbdPNItC3+BzxiC+s9FMK4GX5Hg\"",
13708
- "mtime": "2026-01-06T11:43:30.260Z",
13978
+ "mtime": "2026-01-06T14:50:44.890Z",
13709
13979
  "size": 693,
13710
13980
  "path": "../public/_nuxt/LangSwitcher.DDTh1sNN.css"
13711
13981
  },
13712
- "/_nuxt/SqPShwdq.js": {
13713
- "type": "text/javascript; charset=utf-8",
13714
- "etag": "\"445ad-GfsHiG0o4uttWFUWWVDIyOM2vxs\"",
13715
- "mtime": "2026-01-06T11:43:30.262Z",
13716
- "size": 279981,
13717
- "path": "../public/_nuxt/SqPShwdq.js"
13718
- },
13719
13982
  "/_nuxt/_id_.CYj9w2Sw.css": {
13720
13983
  "type": "text/css; charset=utf-8",
13721
13984
  "etag": "\"147-FPzJs5si7nasSxfswldrOJcSWQc\"",
13722
- "mtime": "2026-01-06T11:43:30.261Z",
13985
+ "mtime": "2026-01-06T14:50:44.890Z",
13723
13986
  "size": 327,
13724
13987
  "path": "../public/_nuxt/_id_.CYj9w2Sw.css"
13725
13988
  },
13726
13989
  "/_nuxt/_name_.OOW3Ydwv.css": {
13727
13990
  "type": "text/css; charset=utf-8",
13728
13991
  "etag": "\"29e5-SV28LM5C6hUKzP0u2eg0Y7G9EF8\"",
13729
- "mtime": "2026-01-06T11:43:30.261Z",
13992
+ "mtime": "2026-01-06T14:50:44.890Z",
13730
13993
  "size": 10725,
13731
13994
  "path": "../public/_nuxt/_name_.OOW3Ydwv.css"
13732
13995
  },
13733
13996
  "/_nuxt/autocreate.-iJ9Pxhm.css": {
13734
13997
  "type": "text/css; charset=utf-8",
13735
13998
  "etag": "\"ce7-/4F3SaPlMwTbSTDcvVlRCgyWVuo\"",
13736
- "mtime": "2026-01-06T11:43:30.261Z",
13999
+ "mtime": "2026-01-06T14:50:44.890Z",
13737
14000
  "size": 3303,
13738
14001
  "path": "../public/_nuxt/autocreate.-iJ9Pxhm.css"
13739
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
+ },
13740
14010
  "/_nuxt/changelog.CziWegef.css": {
13741
14011
  "type": "text/css; charset=utf-8",
13742
14012
  "etag": "\"943-Wd23/oRkMR3dPNniVkYvKH4iYZU\"",
13743
- "mtime": "2026-01-06T11:43:30.261Z",
14013
+ "mtime": "2026-01-06T14:50:44.890Z",
13744
14014
  "size": 2371,
13745
14015
  "path": "../public/_nuxt/changelog.CziWegef.css"
13746
14016
  },
13747
14017
  "/_nuxt/comments.BcvjcN1z.css": {
13748
14018
  "type": "text/css; charset=utf-8",
13749
14019
  "etag": "\"e51-p2ulj0SgvCmnXgDs2Pt+HZCPV68\"",
13750
- "mtime": "2026-01-06T11:43:30.261Z",
14020
+ "mtime": "2026-01-06T14:50:44.891Z",
13751
14021
  "size": 3665,
13752
14022
  "path": "../public/_nuxt/comments.BcvjcN1z.css"
13753
14023
  },
13754
14024
  "/_nuxt/default.BaZU2Ea8.css": {
13755
14025
  "type": "text/css; charset=utf-8",
13756
14026
  "etag": "\"1221-mqSxKm41WTP6Dlwr1Ua3eHfN+Go\"",
13757
- "mtime": "2026-01-06T11:43:30.261Z",
14027
+ "mtime": "2026-01-06T14:50:44.891Z",
13758
14028
  "size": 4641,
13759
14029
  "path": "../public/_nuxt/default.BaZU2Ea8.css"
13760
14030
  },
13761
14031
  "/_nuxt/entry.CzscD3wg.css": {
13762
14032
  "type": "text/css; charset=utf-8",
13763
14033
  "etag": "\"727b-yFKgcl3fUZnijzu9dws3tloA4MM\"",
13764
- "mtime": "2026-01-06T11:43:30.261Z",
14034
+ "mtime": "2026-01-06T14:50:44.891Z",
13765
14035
  "size": 29307,
13766
14036
  "path": "../public/_nuxt/entry.CzscD3wg.css"
13767
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
+ },
13768
14045
  "/_nuxt/graph.BbpRRv0M.css": {
13769
14046
  "type": "text/css; charset=utf-8",
13770
14047
  "etag": "\"627-nt3GDdORgjzH4esnRuCHd1lImMY\"",
13771
- "mtime": "2026-01-06T11:43:30.261Z",
14048
+ "mtime": "2026-01-06T14:50:44.891Z",
13772
14049
  "size": 1575,
13773
14050
  "path": "../public/_nuxt/graph.BbpRRv0M.css"
13774
14051
  },
13775
14052
  "/_nuxt/index.CDND7dpO.css": {
13776
14053
  "type": "text/css; charset=utf-8",
13777
14054
  "etag": "\"38fb-KxIT9Gz+y8Wmb70FrCU7cXx7l0o\"",
13778
- "mtime": "2026-01-06T11:43:30.261Z",
14055
+ "mtime": "2026-01-06T14:50:44.891Z",
13779
14056
  "size": 14587,
13780
14057
  "path": "../public/_nuxt/index.CDND7dpO.css"
13781
14058
  },
13782
14059
  "/_nuxt/index.COVdL_Kx.css": {
13783
14060
  "type": "text/css; charset=utf-8",
13784
14061
  "etag": "\"c13-0P9BCBpSGAwz9eBjyp4Y8XCHLE8\"",
13785
- "mtime": "2026-01-06T11:43:30.261Z",
14062
+ "mtime": "2026-01-06T14:50:44.891Z",
13786
14063
  "size": 3091,
13787
14064
  "path": "../public/_nuxt/index.COVdL_Kx.css"
13788
14065
  },
13789
14066
  "/_nuxt/index.CTkgb9uR.css": {
13790
14067
  "type": "text/css; charset=utf-8",
13791
14068
  "etag": "\"1f2b-mxpyAvUZ7skCVAxrZq8J8SDKzUI\"",
13792
- "mtime": "2026-01-06T11:43:30.261Z",
14069
+ "mtime": "2026-01-06T14:50:44.891Z",
13793
14070
  "size": 7979,
13794
14071
  "path": "../public/_nuxt/index.CTkgb9uR.css"
13795
14072
  },
13796
14073
  "/_nuxt/index.DkNg_n4G.css": {
13797
14074
  "type": "text/css; charset=utf-8",
13798
14075
  "etag": "\"136-9XyHqK+b/ydB9ueq6YFewVPmSW4\"",
13799
- "mtime": "2026-01-06T11:43:30.262Z",
14076
+ "mtime": "2026-01-06T14:50:44.891Z",
13800
14077
  "size": 310,
13801
14078
  "path": "../public/_nuxt/index.DkNg_n4G.css"
13802
14079
  },
14080
+ "/_nuxt/kNuGsBnB.js": {
14081
+ "type": "text/javascript; charset=utf-8",
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"
14093
+ },
13803
14094
  "/_nuxt/kanban.BuPOCLgG.css": {
13804
14095
  "type": "text/css; charset=utf-8",
13805
14096
  "etag": "\"13c2-QYyqf5fyeEnrqYohP0pQB5QGRLs\"",
13806
- "mtime": "2026-01-06T11:43:30.262Z",
14097
+ "mtime": "2026-01-06T14:50:44.891Z",
13807
14098
  "size": 5058,
13808
14099
  "path": "../public/_nuxt/kanban.BuPOCLgG.css"
13809
14100
  },
13810
14101
  "/_nuxt/landing.D5KkDm1b.css": {
13811
14102
  "type": "text/css; charset=utf-8",
13812
14103
  "etag": "\"393-IP7IMSuvaLw71bURxWfVx2E2Q7I\"",
13813
- "mtime": "2026-01-06T11:43:30.262Z",
14104
+ "mtime": "2026-01-06T14:50:44.891Z",
13814
14105
  "size": 915,
13815
14106
  "path": "../public/_nuxt/landing.D5KkDm1b.css"
13816
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
+ },
13817
14115
  "/_nuxt/new.BFERdqdm.css": {
13818
14116
  "type": "text/css; charset=utf-8",
13819
14117
  "etag": "\"e38-t4k/fVPiMoh//7XTa7VA8WixSHw\"",
13820
- "mtime": "2026-01-06T11:43:30.262Z",
14118
+ "mtime": "2026-01-06T14:50:44.891Z",
13821
14119
  "size": 3640,
13822
14120
  "path": "../public/_nuxt/new.BFERdqdm.css"
13823
14121
  },
13824
14122
  "/_nuxt/new.BzaiohPo.css": {
13825
14123
  "type": "text/css; charset=utf-8",
13826
14124
  "etag": "\"71f-Sf1vS7pI6TH0XyyA8vE15d1t2SE\"",
13827
- "mtime": "2026-01-06T11:43:30.262Z",
14125
+ "mtime": "2026-01-06T14:50:44.891Z",
13828
14126
  "size": 1823,
13829
14127
  "path": "../public/_nuxt/new.BzaiohPo.css"
13830
14128
  },
13831
14129
  "/_nuxt/prompt.CbFHjm-L.css": {
13832
14130
  "type": "text/css; charset=utf-8",
13833
14131
  "etag": "\"55f-faq16m4XDEEcy8d4uHQam/6TmYM\"",
13834
- "mtime": "2026-01-06T11:43:30.262Z",
14132
+ "mtime": "2026-01-06T14:50:44.891Z",
13835
14133
  "size": 1375,
13836
14134
  "path": "../public/_nuxt/prompt.CbFHjm-L.css"
13837
14135
  },
13838
14136
  "/_nuxt/prompt.DM4VdPnn.css": {
13839
14137
  "type": "text/css; charset=utf-8",
13840
14138
  "etag": "\"98d-6SgyexayLVWpB/uiTxJddZCOSNs\"",
13841
- "mtime": "2026-01-06T11:43:30.262Z",
14139
+ "mtime": "2026-01-06T14:50:44.891Z",
13842
14140
  "size": 2445,
13843
14141
  "path": "../public/_nuxt/prompt.DM4VdPnn.css"
13844
14142
  },
13845
14143
  "/_nuxt/prompt.DZ0wdOji.css": {
13846
14144
  "type": "text/css; charset=utf-8",
13847
14145
  "etag": "\"5e1-PqnnCsmh+l9VGfHth+8ur20eqFQ\"",
13848
- "mtime": "2026-01-06T11:43:30.262Z",
14146
+ "mtime": "2026-01-06T14:50:44.892Z",
13849
14147
  "size": 1505,
13850
14148
  "path": "../public/_nuxt/prompt.DZ0wdOji.css"
13851
14149
  },
13852
14150
  "/_nuxt/stats.CXzKxZ71.css": {
13853
14151
  "type": "text/css; charset=utf-8",
13854
14152
  "etag": "\"132a-6OE0a+UmTHJMBzCVvnrjAUSGRT8\"",
13855
- "mtime": "2026-01-06T11:43:30.262Z",
14153
+ "mtime": "2026-01-06T14:50:44.892Z",
13856
14154
  "size": 4906,
13857
14155
  "path": "../public/_nuxt/stats.CXzKxZ71.css"
13858
14156
  },
13859
14157
  "/_nuxt/terminal.BL0EPPyU.css": {
13860
14158
  "type": "text/css; charset=utf-8",
13861
14159
  "etag": "\"79d-a+4LEiyc04ntLd9WPiqFIj0AKbk\"",
13862
- "mtime": "2026-01-06T11:43:30.262Z",
14160
+ "mtime": "2026-01-06T14:50:44.892Z",
13863
14161
  "size": 1949,
13864
14162
  "path": "../public/_nuxt/terminal.BL0EPPyU.css"
13865
14163
  },
13866
14164
  "/_nuxt/terminal.D3JI44PH.css": {
13867
14165
  "type": "text/css; charset=utf-8",
13868
14166
  "etag": "\"7e5-uC0ih9QvDsN9w6zGgrvIQiV6FfE\"",
13869
- "mtime": "2026-01-06T11:43:30.263Z",
14167
+ "mtime": "2026-01-06T14:50:44.892Z",
13870
14168
  "size": 2021,
13871
14169
  "path": "../public/_nuxt/terminal.D3JI44PH.css"
13872
14170
  },
13873
14171
  "/_nuxt/terminal.YXDzS4Ng.css": {
13874
14172
  "type": "text/css; charset=utf-8",
13875
14173
  "etag": "\"763-YHR0QMT8SZXOv2Y07u5ZMWZP7d4\"",
13876
- "mtime": "2026-01-06T11:43:30.263Z",
14174
+ "mtime": "2026-01-06T14:50:44.892Z",
13877
14175
  "size": 1891,
13878
14176
  "path": "../public/_nuxt/terminal.YXDzS4Ng.css"
13879
14177
  },
13880
14178
  "/_nuxt/builds/latest.json": {
13881
14179
  "type": "application/json",
13882
- "etag": "\"47-y59L0wMauddRHlPIB9rgI2b1UsI\"",
13883
- "mtime": "2026-01-06T11:43:30.232Z",
14180
+ "etag": "\"47-gkCJUlo2Gb7FGRjvI4LH7O/1nF0\"",
14181
+ "mtime": "2026-01-06T14:50:44.860Z",
13884
14182
  "size": 71,
13885
14183
  "path": "../public/_nuxt/builds/latest.json"
13886
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
+ },
13887
14199
  "/media/podcast/en.m4a": {
13888
14200
  "type": "audio/mp4",
13889
14201
  "etag": "\"1c00c86-MbX28IpSmI393JWCzCz6rlkdYS0\"",
13890
- "mtime": "2026-01-06T11:43:30.305Z",
14202
+ "mtime": "2026-01-06T14:50:44.944Z",
13891
14203
  "size": 29363334,
13892
14204
  "path": "../public/media/podcast/en.m4a"
13893
14205
  },
13894
14206
  "/media/podcast/fr.m4a": {
13895
14207
  "type": "audio/mp4",
13896
14208
  "etag": "\"1619637-vBY2YSdzI9Lseb+qriWqqUgyYdI\"",
13897
- "mtime": "2026-01-06T11:43:30.299Z",
14209
+ "mtime": "2026-01-06T14:50:44.937Z",
13898
14210
  "size": 23172663,
13899
14211
  "path": "../public/media/podcast/fr.m4a"
13900
14212
  },
13901
- "/_i18n/xH8GmHpZ/en/messages.json": {
14213
+ "/_i18n/__ad3z6g/en/messages.json": {
13902
14214
  "type": "application/json",
13903
14215
  "etag": "\"399f-q0zYHcJCee9l9+ayCAjo0PQBXII\"",
13904
- "mtime": "2026-01-06T11:43:30.210Z",
14216
+ "mtime": "2026-01-06T14:50:44.824Z",
13905
14217
  "size": 14751,
13906
- "path": "../public/_i18n/xH8GmHpZ/en/messages.json"
14218
+ "path": "../public/_i18n/__ad3z6g/en/messages.json"
13907
14219
  },
13908
- "/_i18n/xH8GmHpZ/fr/messages.json": {
14220
+ "/_i18n/__ad3z6g/fr/messages.json": {
13909
14221
  "type": "application/json",
13910
14222
  "etag": "\"3f33-0xMEfoD3ECgVH1/tTkqNIQbF0kk\"",
13911
- "mtime": "2026-01-06T11:43:30.209Z",
14223
+ "mtime": "2026-01-06T14:50:44.824Z",
13912
14224
  "size": 16179,
13913
- "path": "../public/_i18n/xH8GmHpZ/fr/messages.json"
14225
+ "path": "../public/_i18n/__ad3z6g/fr/messages.json"
13914
14226
  },
13915
- "/_nuxt/builds/meta/15da26ff-7ede-4b62-b084-0737b9d90fb3.json": {
14227
+ "/_nuxt/builds/meta/35ace9c2-472c-4755-ae87-74fdb84336dd.json": {
13916
14228
  "type": "application/json",
13917
- "etag": "\"8e-vK8ULgLZHI/PiFYBm4HL58SIUqQ\"",
13918
- "mtime": "2026-01-06T11:43:30.227Z",
14229
+ "etag": "\"8e-5J0RF5Xz2HGZ6nAfd32V1HyT+u0\"",
14230
+ "mtime": "2026-01-06T14:50:44.855Z",
13919
14231
  "size": 142,
13920
- "path": "../public/_nuxt/builds/meta/15da26ff-7ede-4b62-b084-0737b9d90fb3.json"
14232
+ "path": "../public/_nuxt/builds/meta/35ace9c2-472c-4755-ae87-74fdb84336dd.json"
13921
14233
  }
13922
14234
  };
13923
14235
 
@@ -14773,5 +15085,5 @@ setupGracefulShutdown(listener, nitroApp);
14773
15085
  }
14774
15086
  const nodeServer = {};
14775
15087
 
14776
- 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 };
14777
15089
  //# sourceMappingURL=nitro.mjs.map