@christianmaf80/agentic-workflow 1.19.1-beta.10 → 1.19.2-beta.1

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 (118) hide show
  1. package/README.es.md +84 -13
  2. package/README.md +83 -12
  3. package/RELEASE_PROCESS.md +4 -3
  4. package/bin/cli.js +39 -18
  5. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/acceptance.md +6 -0
  6. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-scores.md +6 -0
  7. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/1-dev-agent-scaffold.md +6 -0
  8. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/2-dev-agent-manifest-command.md +6 -0
  9. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/3-dev-agent-marketplace-evidence.md +6 -0
  10. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/4-qa-agent-verify-build.md +6 -0
  11. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/analysis.md +6 -0
  12. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/architect/review.md +6 -0
  13. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/metrics.md +6 -0
  14. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/plan.md +6 -0
  15. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/researcher/research.md +6 -0
  16. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/results-acceptance.md +6 -0
  17. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/task.md +6 -0
  18. package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/verification.md +6 -0
  19. package/dist/agent/artifacts/2-scaffold-vscode-chat-ai-panel/acceptance.md +6 -0
  20. package/dist/agent/artifacts/2-scaffold-vscode-chat-ai-panel/task.md +6 -0
  21. package/dist/agent/artifacts/3-new-vscode-agentic-activitybar-chat/acceptance.md +6 -0
  22. package/dist/agent/artifacts/3-new-vscode-agentic-activitybar-chat/task.md +6 -0
  23. package/dist/agent/artifacts/4-copiar-estructura-agentic-cliente/acceptance.md +6 -0
  24. package/dist/agent/artifacts/4-copiar-estructura-agentic-cliente/architect/implementation.md +6 -0
  25. package/dist/agent/artifacts/5-reestructurar-src-para-extension-vscode/acceptance.md +6 -0
  26. package/dist/agent/artifacts/5-reestructurar-src-para-extension-vscode/agent-tasks/1-dev-agent-reestructurar-carpetas.md +1 -1
  27. package/dist/agent/artifacts/5-reestructurar-src-para-extension-vscode/task.md +6 -0
  28. package/dist/agent/artifacts/6-release-beta-11/task.md +6 -0
  29. package/dist/agent/artifacts/candidate/init.md +8 -4
  30. package/dist/agent/artifacts/candidate/task.md +6 -0
  31. package/dist/agent/artifacts/task-20260128-reorganize-structure/acceptance.md +6 -0
  32. package/dist/agent/artifacts/task-20260128-reorganize-structure/brief.md +1 -1
  33. package/dist/agent/artifacts/task-20260128-reorganize-structure/closure.md +3 -3
  34. package/dist/agent/artifacts/task-20260128-reorganize-structure/implementation.md +2 -2
  35. package/dist/agent/artifacts/task-20260128-reorganize-structure/task.md +6 -0
  36. package/dist/agent/index.md +3 -0
  37. package/dist/agent/rules/constitution/agents-behavior.md +0 -1
  38. package/dist/agent/rules/constitution/clean-code.md +6 -0
  39. package/dist/agent/rules/constitution/index.md +1 -1
  40. package/dist/agent/rules/constitution/runtime-integration.md +101 -0
  41. package/dist/agent/rules/index.md +0 -1
  42. package/dist/agent/rules/roles/architect.md +2 -1
  43. package/dist/agent/templates/acceptance.md +6 -0
  44. package/dist/agent/templates/init.md +18 -0
  45. package/dist/agent/templates/supplemental-report.md +6 -0
  46. package/dist/agent/templates/task.md +7 -0
  47. package/dist/agent/workflows/init.md +29 -10
  48. package/dist/agent/workflows/tasklifecycle-long/index.md +27 -27
  49. package/dist/agent/workflows/tasklifecycle-long/phase-0-acceptance-criteria.md +13 -3
  50. package/dist/agent/workflows/tasklifecycle-long/phase-1-research.md +6 -4
  51. package/dist/agent/workflows/tasklifecycle-long/phase-2-analysis.md +4 -4
  52. package/dist/agent/workflows/tasklifecycle-long/phase-3-planning.md +4 -4
  53. package/dist/agent/workflows/tasklifecycle-long/phase-4-implementation.md +4 -4
  54. package/dist/agent/workflows/tasklifecycle-long/phase-5-verification.md +4 -4
  55. package/dist/agent/workflows/tasklifecycle-long/phase-6-results-acceptance.md +4 -4
  56. package/dist/agent/workflows/tasklifecycle-long/phase-7-evaluation.md +4 -4
  57. package/dist/agent/workflows/tasklifecycle-long/phase-8-commit-push.md +2 -2
  58. package/dist/agent/workflows/tasklifecycle-short/index.md +12 -9
  59. package/dist/agent/workflows/tasklifecycle-short/short-phase-1-brief.md +2 -0
  60. package/dist/cli/commands/create.js +30 -5
  61. package/dist/cli/commands/create.js.map +1 -1
  62. package/dist/cli/commands/init.js +9 -3
  63. package/dist/cli/commands/init.js.map +1 -1
  64. package/dist/cli/commands/mcp.js +11 -0
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/commands/register-mcp.js +116 -0
  67. package/dist/cli/commands/register-mcp.js.map +1 -0
  68. package/dist/cli/index.js +1 -0
  69. package/dist/cli/index.js.map +1 -1
  70. package/dist/infrastructure/context/index.js +2 -0
  71. package/dist/infrastructure/context/index.js.map +1 -0
  72. package/dist/{core → infrastructure}/context/manager.js +0 -1
  73. package/dist/infrastructure/context/manager.js.map +1 -0
  74. package/dist/infrastructure/index.js +7 -0
  75. package/dist/infrastructure/index.js.map +1 -0
  76. package/dist/infrastructure/logger/index.js +41 -0
  77. package/dist/infrastructure/logger/index.js.map +1 -0
  78. package/dist/infrastructure/mapping/index.js +2 -0
  79. package/dist/infrastructure/mapping/index.js.map +1 -0
  80. package/dist/{core → infrastructure}/mapping/resolver.js +5 -5
  81. package/dist/infrastructure/mapping/resolver.js.map +1 -0
  82. package/dist/infrastructure/migration/backup.js.map +1 -0
  83. package/dist/infrastructure/migration/detector.js.map +1 -0
  84. package/dist/infrastructure/migration/index.js +4 -0
  85. package/dist/infrastructure/migration/index.js.map +1 -0
  86. package/dist/infrastructure/migration/transformer.js.map +1 -0
  87. package/dist/infrastructure/utils/backup.js.map +1 -0
  88. package/dist/infrastructure/utils/index.js +2 -0
  89. package/dist/infrastructure/utils/index.js.map +1 -0
  90. package/dist/runtime/index.js +4 -0
  91. package/dist/runtime/index.js.map +1 -0
  92. package/dist/runtime/runtime.js +254 -0
  93. package/dist/runtime/runtime.js.map +1 -0
  94. package/dist/runtime/task-loader.js +32 -0
  95. package/dist/runtime/task-loader.js.map +1 -0
  96. package/dist/runtime/task-resolver.js +201 -0
  97. package/dist/runtime/task-resolver.js.map +1 -0
  98. package/package.json +16 -9
  99. package/dist/agent/rules/constitution/GEMINI.location.md +0 -32
  100. package/dist/core/context/manager.js.map +0 -1
  101. package/dist/core/index.js +0 -2
  102. package/dist/core/index.js.map +0 -1
  103. package/dist/core/mapping/resolver.js.map +0 -1
  104. package/dist/core/migration/backup.js.map +0 -1
  105. package/dist/core/migration/detector.js.map +0 -1
  106. package/dist/core/migration/transformer.js.map +0 -1
  107. package/dist/core/utils/backup.js.map +0 -1
  108. package/dist/extension/extension.js +0 -6
  109. package/dist/extension/extension.js.map +0 -1
  110. package/dist/extension/views/index.js +0 -2
  111. package/dist/extension/views/index.js.map +0 -1
  112. package/dist/extension/views/main-view.js +0 -53
  113. package/dist/extension/views/main-view.js.map +0 -1
  114. package/media/agent-chat.svg +0 -20
  115. /package/dist/{core → infrastructure}/migration/backup.js +0 -0
  116. /package/dist/{core → infrastructure}/migration/detector.js +0 -0
  117. /package/dist/{core → infrastructure}/migration/transformer.js +0 -0
  118. /package/dist/{core → infrastructure}/utils/backup.js +0 -0
@@ -0,0 +1,41 @@
1
+ export class Logger {
2
+ static instance = null;
3
+ logs = [];
4
+ static getInstance() {
5
+ if (!Logger.instance) {
6
+ Logger.instance = new Logger();
7
+ }
8
+ return Logger.instance;
9
+ }
10
+ static info(source, message, context) {
11
+ Logger.getInstance().append('info', source, message, context);
12
+ }
13
+ static warn(source, message, context) {
14
+ Logger.getInstance().append('warn', source, message, context);
15
+ }
16
+ static error(source, message, context) {
17
+ Logger.getInstance().append('error', source, message, context);
18
+ }
19
+ static debug(source, message, context) {
20
+ Logger.getInstance().append('debug', source, message, context);
21
+ }
22
+ getLogs(limit = 100) {
23
+ if (limit <= 0) {
24
+ return [];
25
+ }
26
+ return this.logs.slice(-limit);
27
+ }
28
+ append(level, source, message, context) {
29
+ const entry = {
30
+ level,
31
+ source,
32
+ message,
33
+ context,
34
+ timestamp: new Date().toISOString()
35
+ };
36
+ this.logs.push(entry);
37
+ const contextText = context ? ` ${JSON.stringify(context)}` : '';
38
+ console.error(`[${level.toUpperCase()}] [${source}] ${message}${contextText}`);
39
+ }
40
+ }
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/logger/index.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,MAAM;IACT,MAAM,CAAC,QAAQ,GAAkB,IAAI,CAAC;IACtC,IAAI,GAAe,EAAE,CAAC;IAE9B,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAc,EAAE,OAAe,EAAE,OAAiC;QAC5E,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAc,EAAE,OAAe,EAAE,OAAiC;QAC5E,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAc,EAAE,OAAe,EAAE,OAAiC;QAC7E,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAc,EAAE,OAAe,EAAE,OAAiC;QAC7E,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,KAAK,GAAG,GAAG;QACjB,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAEO,MAAM,CAAC,KAAe,EAAE,MAAc,EAAE,OAAe,EAAE,OAAiC;QAChG,MAAM,KAAK,GAAa;YACtB,KAAK;YACL,MAAM;YACN,OAAO;YACP,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,MAAM,MAAM,KAAK,OAAO,GAAG,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './resolver.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/mapping/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
@@ -9,9 +9,9 @@ import { createRequire } from 'node:module';
9
9
  export async function resolveCorePath() {
10
10
  const __filename = fileURLToPath(import.meta.url);
11
11
  const __dirname = path.dirname(__filename);
12
- // Intentamos buscar el root del paquete subiendo niveles desde src/core/mapping
13
- // En desarrollo: agent-workflow/src/core/mapping -> ../../..
14
- // En producción (dist): agent-workflow/dist/core/mapping -> ../../..
12
+ // Intentamos buscar el root del paquete subiendo niveles desde src/infrastructure/mapping
13
+ // En desarrollo: agent-workflow/src/infrastructure/mapping -> ../../..
14
+ // En producción (dist): agent-workflow/dist/infrastructure/mapping -> ../../..
15
15
  return resolveCorePathFromDir(__dirname);
16
16
  }
17
17
  /**
@@ -20,7 +20,7 @@ export async function resolveCorePath() {
20
20
  */
21
21
  export async function resolveInstalledCorePath(cwd = process.cwd()) {
22
22
  try {
23
- const directNodeModules = path.join(cwd, 'node_modules', '@christian-marino-alvarez', 'agentic-workflow');
23
+ const directNodeModules = path.join(cwd, 'node_modules', '@christianmaf80', 'agentic-workflow');
24
24
  try {
25
25
  await fs.access(path.join(directNodeModules, 'package.json'));
26
26
  return await resolveCorePathFromPackageRoot(directNodeModules);
@@ -29,7 +29,7 @@ export async function resolveInstalledCorePath(cwd = process.cwd()) {
29
29
  // Fall back to node resolution from cwd.
30
30
  }
31
31
  const requireFromCwd = createRequire(path.join(cwd, 'package.json'));
32
- const pkgPath = requireFromCwd.resolve('@christian-marino-alvarez/agentic-workflow/package.json');
32
+ const pkgPath = requireFromCwd.resolve('@christianmaf80/agentic-workflow/package.json');
33
33
  const pkgRoot = path.dirname(pkgPath);
34
34
  return await resolveCorePathFromPackageRoot(pkgRoot);
35
35
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/infrastructure/mapping/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/infrastructure/migration/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAE5E,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/infrastructure/migration/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE1C,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxC,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,yBAAyB;IAC7B,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACxF,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzC,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,wBAAwB;IAC5B,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,0EAA0E;AAC/F,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './backup.js';
2
+ export * from './detector.js';
3
+ export * from './transformer.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/migration/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../../src/infrastructure/migration/transformer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,OAA4B;IAClF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhD,4CAA4C;IAC5C,MAAM,UAAU,GAAG;QACf,GAAG,IAAI;QACP,GAAG,OAAO;KACb,CAAC;IAEF,iEAAiE;IACjE,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAE5E,yBAAyB;IACzB,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,sCAAsC;QACtC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './backup.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './runtime.js';
2
+ export * from './task-resolver.js';
3
+ export * from './task-loader.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,254 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import crypto from 'node:crypto';
4
+ import { Logger } from '../infrastructure/logger/index.js';
5
+ import { loadTask } from './task-loader.js';
6
+ import { collectWorkspaceCandidates, ensureInitTaskFile, findWorkspaceRoot, resolveNextPhase, resolveTaskPath, resolveWorkflowsRootForTask, updateTaskPhase } from './task-resolver.js';
7
+ export class Runtime {
8
+ stateCache = new Map();
9
+ async run(params) {
10
+ const taskPath = requireString(params.taskPath, 'taskPath');
11
+ const agent = requireString(params.agent, 'agent');
12
+ Logger.info('MCP', 'Tool called: runtime.run', { taskPath, agent });
13
+ const resolved = await resolveTaskPath(taskPath);
14
+ await ensureInitTaskFile(resolved.resolvedPath, resolved.workspaceRoot);
15
+ const task = await loadTask(resolved.resolvedPath);
16
+ ensureOwner(task.owner, agent);
17
+ const statePath = await resolveStatePath(resolved.resolvedPath, params.statePath);
18
+ const state = {
19
+ version: 1,
20
+ runId: crypto.randomUUID(),
21
+ taskId: task.id,
22
+ taskTitle: task.title,
23
+ taskPath: resolved.resolvedPath,
24
+ phase: task.phase,
25
+ status: 'idle',
26
+ steps: [],
27
+ updatedAt: new Date().toISOString()
28
+ };
29
+ await this.writeState(statePath, state);
30
+ return { status: 'ok', runId: state.runId, phase: state.phase, statePath };
31
+ }
32
+ async resume(params) {
33
+ const taskPath = requireString(params.taskPath, 'taskPath');
34
+ const agent = requireString(params.agent, 'agent');
35
+ Logger.info('MCP', 'Tool called: runtime.resume', { taskPath, agent });
36
+ const resolved = await resolveTaskPath(taskPath);
37
+ const task = await loadTask(resolved.resolvedPath);
38
+ ensureOwner(task.owner, agent);
39
+ const statePath = await resolveStatePath(resolved.resolvedPath, params.statePath);
40
+ const state = await this.readState(statePath);
41
+ if (!state) {
42
+ throw new Error('No persisted state found to resume.');
43
+ }
44
+ return { status: 'ok', runId: state.runId, phase: state.phase, statePath };
45
+ }
46
+ async nextStep(params) {
47
+ const taskPath = requireString(params.taskPath, 'taskPath');
48
+ const agent = requireString(params.agent, 'agent');
49
+ Logger.info('MCP', 'Tool called: runtime.next_step', { taskPath, agent });
50
+ const resolved = await resolveTaskPath(taskPath);
51
+ const task = await loadTask(resolved.resolvedPath);
52
+ ensureOwner(task.owner, agent);
53
+ const statePath = await resolveStatePath(resolved.resolvedPath, params.statePath);
54
+ const state = await this.readState(statePath);
55
+ if (!state) {
56
+ throw new Error('No persisted state found to resume.');
57
+ }
58
+ const step = { status: 'completed', at: new Date().toISOString() };
59
+ state.steps.push(step);
60
+ state.updatedAt = step.at;
61
+ await this.writeState(statePath, state);
62
+ return { status: 'ok', runId: state.runId, phase: state.phase, step, statePath };
63
+ }
64
+ async completeStep() {
65
+ Logger.info('MCP', 'Tool called: runtime.complete_step');
66
+ this.clearCache();
67
+ return { status: 'ok', message: 'Step completion acknowledged.' };
68
+ }
69
+ async validateGate(params) {
70
+ const taskPath = requireString(params.taskPath, 'taskPath');
71
+ const agent = requireString(params.agent, 'agent');
72
+ const expectedPhase = params.expectedPhase;
73
+ Logger.info('MCP', 'Tool called: runtime.validate_gate', { taskPath, agent, expectedPhase });
74
+ const resolved = await resolveTaskPath(taskPath);
75
+ const task = await loadTask(resolved.resolvedPath);
76
+ if (task.owner !== agent) {
77
+ return { valid: false, reason: 'Agent mismatch.' };
78
+ }
79
+ if (expectedPhase && task.phase !== expectedPhase) {
80
+ return { valid: false, reason: `Phase mismatch. Current: ${task.phase}.` };
81
+ }
82
+ return { valid: true };
83
+ }
84
+ async advancePhase(params) {
85
+ const taskPath = requireString(params.taskPath, 'taskPath');
86
+ const agent = requireString(params.agent, 'agent');
87
+ const expectedPhase = params.expectedPhase;
88
+ Logger.info('MCP', 'Tool called: runtime.advance_phase', { taskPath, agent, expectedPhase: expectedPhase ?? null });
89
+ const resolved = await resolveTaskPath(taskPath);
90
+ const task = await loadTask(resolved.resolvedPath);
91
+ if (task.owner !== agent) {
92
+ throw new Error('Agent mismatch.');
93
+ }
94
+ if (expectedPhase && task.phase !== expectedPhase) {
95
+ Logger.warn('MCP', 'runtime.advance_phase expectedPhase mismatch; no phase update', {
96
+ expectedPhase,
97
+ taskPhase: task.phase,
98
+ taskId: task.id
99
+ });
100
+ return {
101
+ status: 'warning',
102
+ warning: 'expectedPhase mismatch; task phase retained',
103
+ previousPhase: task.phase,
104
+ currentPhase: task.phase,
105
+ updatedAt: null
106
+ };
107
+ }
108
+ const workflowsRoot = resolveWorkflowsRootForTask(resolved.resolvedPath);
109
+ let nextPhase;
110
+ try {
111
+ nextPhase = await resolveNextPhase(workflowsRoot, task.phase, task.strategy);
112
+ }
113
+ catch (error) {
114
+ const warning = formatError(error);
115
+ Logger.warn('MCP', 'runtime.advance_phase could not resolve next phase; no phase update', {
116
+ taskPhase: task.phase,
117
+ taskId: task.id,
118
+ strategy: task.strategy ?? null,
119
+ warning
120
+ });
121
+ return {
122
+ status: 'warning',
123
+ warning,
124
+ previousPhase: task.phase,
125
+ currentPhase: task.phase,
126
+ updatedAt: null
127
+ };
128
+ }
129
+ const updated = await updateTaskPhase(resolved.resolvedPath, task.phase, nextPhase, agent);
130
+ return {
131
+ status: 'ok',
132
+ previousPhase: task.phase,
133
+ currentPhase: nextPhase,
134
+ updatedAt: updated.updatedAt,
135
+ taskId: task.id,
136
+ emitEvent: {
137
+ type: 'phase_updated',
138
+ timestamp: updated.updatedAt,
139
+ runId: task.id,
140
+ phase: nextPhase,
141
+ payload: { previousPhase: task.phase }
142
+ }
143
+ };
144
+ }
145
+ async getState(params) {
146
+ const statePath = requireString(params.statePath, 'statePath');
147
+ Logger.info('MCP', 'Tool called: runtime.get_state', { statePath });
148
+ const state = await this.readState(statePath);
149
+ if (!state) {
150
+ throw new Error('No state found.');
151
+ }
152
+ let taskContent = '';
153
+ try {
154
+ if (state.taskPath) {
155
+ taskContent = await fs.readFile(state.taskPath, 'utf-8');
156
+ }
157
+ }
158
+ catch {
159
+ // Ignore if task file not found
160
+ }
161
+ return { ...state, taskContent };
162
+ }
163
+ async listWorkflows(params) {
164
+ const workflowsRoot = params.workflowsRoot ?? (await resolveDefaultWorkflowsRoot());
165
+ Logger.info('MCP', 'Tool called: runtime.list_workflows', { workflowsRoot });
166
+ const indexPath = path.join(workflowsRoot, 'index.md');
167
+ const raw = await fs.readFile(indexPath, 'utf-8');
168
+ const match = raw.match(/```yaml\n([\s\S]*?)```/);
169
+ if (!match) {
170
+ return { workflows: {} };
171
+ }
172
+ const yaml = match[1];
173
+ return { workflowsYaml: yaml };
174
+ }
175
+ async emitEvent(params) {
176
+ const event = params.event;
177
+ if (!event) {
178
+ throw new Error('Missing event payload.');
179
+ }
180
+ return { status: 'ok', emitEvent: event };
181
+ }
182
+ async chat(params) {
183
+ const message = requireString(params.message, 'message');
184
+ const role = params.role ?? 'user';
185
+ Logger.info('Runtime', `Chat message received from ${role}`, { message });
186
+ return {
187
+ status: 'ok',
188
+ emitEvent: {
189
+ type: 'chat_message',
190
+ timestamp: new Date().toISOString(),
191
+ runId: 'chat',
192
+ payload: { role, content: message }
193
+ }
194
+ };
195
+ }
196
+ async readLogs(params) {
197
+ const maxLogs = typeof params.limit === 'number' ? params.limit : 100;
198
+ const logs = Logger.getInstance().getLogs(maxLogs);
199
+ return { logs };
200
+ }
201
+ async readState(statePath) {
202
+ const cached = this.stateCache.get(statePath);
203
+ if (cached) {
204
+ return cached;
205
+ }
206
+ try {
207
+ const raw = await fs.readFile(path.resolve(statePath), 'utf-8');
208
+ const state = JSON.parse(raw);
209
+ this.stateCache.set(statePath, state);
210
+ return state;
211
+ }
212
+ catch {
213
+ return null;
214
+ }
215
+ }
216
+ async writeState(statePath, state) {
217
+ this.stateCache.set(statePath, state);
218
+ await fs.mkdir(path.dirname(statePath), { recursive: true });
219
+ await fs.writeFile(path.resolve(statePath), JSON.stringify(state, null, 2));
220
+ }
221
+ clearCache() {
222
+ this.stateCache.clear();
223
+ }
224
+ }
225
+ async function resolveStatePath(taskPath, override) {
226
+ if (override) {
227
+ return path.resolve(override);
228
+ }
229
+ const resolved = await resolveTaskPath(taskPath);
230
+ const workspaceRoot = resolved.workspaceRoot ?? path.dirname(resolved.resolvedPath);
231
+ return path.join(workspaceRoot, '.agent', 'runtime', 'state.json');
232
+ }
233
+ async function resolveDefaultWorkflowsRoot() {
234
+ const root = await findWorkspaceRoot(collectWorkspaceCandidates());
235
+ if (!root) {
236
+ throw new Error('No se encontró workspace para workflows.');
237
+ }
238
+ return path.join(root, '.agent', 'workflows');
239
+ }
240
+ function ensureOwner(owner, agent) {
241
+ if (owner !== agent) {
242
+ throw new Error(`Agent mismatch: expected "${owner}" but got "${agent}".`);
243
+ }
244
+ }
245
+ function requireString(value, field) {
246
+ if (!value || value.trim().length === 0) {
247
+ throw new Error(`${field} requerido`);
248
+ }
249
+ return value;
250
+ }
251
+ function formatError(error) {
252
+ return error instanceof Error ? error.message : String(error);
253
+ }
254
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import matter from 'gray-matter';
4
+ export async function loadTask(taskPath) {
5
+ const resolvedPath = path.resolve(taskPath);
6
+ const raw = await fs.readFile(resolvedPath, 'utf-8');
7
+ const { data, content } = matter(raw);
8
+ const meta = data;
9
+ const yaml = extractYamlBlock(content);
10
+ const task = yaml.task ?? {};
11
+ const id = task.id ?? meta.id ?? '';
12
+ const title = task.title ?? meta.title ?? '';
13
+ const phase = task.phase?.current ?? meta.phase?.current ?? '';
14
+ const owner = meta.owner ?? extractOwner(raw) ?? '';
15
+ const strategy = task.strategy ?? meta.strategy ?? '';
16
+ if (!id || !title || !phase || !owner) {
17
+ throw new Error('Task file missing required fields (id/title/owner/phase.current).');
18
+ }
19
+ return { id, title, owner, phase, strategy: strategy || undefined };
20
+ }
21
+ function extractYamlBlock(markdown) {
22
+ const match = markdown.match(/```yaml\n([\s\S]*?)```/);
23
+ if (!match) {
24
+ return {};
25
+ }
26
+ return matter(`---\n${match[1]}\n---`).data;
27
+ }
28
+ function extractOwner(markdown) {
29
+ const match = markdown.match(/^- owner:\s*(.+)\s*$/m);
30
+ return match ? match[1].trim() : undefined;
31
+ }
32
+ //# sourceMappingURL=task-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-loader.js","sourceRoot":"","sources":["../../src/runtime/task-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AA0BjC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAgB,CAAC;IAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAa,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAK,IAAY,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEtD,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,201 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import matter from 'gray-matter';
4
+ const WORKSPACE_ENV_VARS = ['PWD', 'INIT_CWD', 'AGENTIC_WORKSPACE', 'WORKSPACE'];
5
+ export function collectWorkspaceCandidates() {
6
+ const candidates = [process.cwd(), ...WORKSPACE_ENV_VARS.map((key) => process.env[key])]
7
+ .filter((value) => Boolean(value));
8
+ return Array.from(new Set(candidates.map((candidate) => path.resolve(candidate))));
9
+ }
10
+ export async function findWorkspaceRoot(candidates) {
11
+ for (const candidate of candidates) {
12
+ const resolved = await findWorkspaceRootFromDir(candidate);
13
+ if (resolved) {
14
+ return resolved;
15
+ }
16
+ }
17
+ return null;
18
+ }
19
+ export async function resolveTaskPath(taskPath) {
20
+ if (path.isAbsolute(taskPath)) {
21
+ const workspaceRoot = await findWorkspaceRoot([path.dirname(taskPath)]);
22
+ return { resolvedPath: taskPath, workspaceRoot };
23
+ }
24
+ const candidateRoots = collectWorkspaceCandidates();
25
+ const workspaceRoot = await findWorkspaceRoot(candidateRoots);
26
+ if (!workspaceRoot) {
27
+ const subject = taskPath.includes('init.md') ? 'el init' : 'el taskPath';
28
+ throw new Error(`No pude resolver ${subject}: no se encontró ".agent/" desde el cwd actual. Ejecuta el comando desde el workspace o pasa una ruta absoluta.`);
29
+ }
30
+ return { resolvedPath: path.resolve(workspaceRoot, taskPath), workspaceRoot };
31
+ }
32
+ export async function ensureInitTaskFile(taskPath, workspaceRoot) {
33
+ if (!isInitTaskPath(taskPath)) {
34
+ return;
35
+ }
36
+ const exists = await fileExists(taskPath);
37
+ if (exists) {
38
+ return;
39
+ }
40
+ if (!workspaceRoot) {
41
+ throw new Error('No se pudo resolver el workspace para crear init.md desde template.');
42
+ }
43
+ const templatePath = path.join(workspaceRoot, '.agent', 'templates', 'init.md');
44
+ const template = await fs.readFile(templatePath, 'utf-8');
45
+ await fs.mkdir(path.dirname(taskPath), { recursive: true });
46
+ await fs.writeFile(taskPath, template);
47
+ }
48
+ export async function resolveNextPhase(workflowsRoot, currentPhase, strategy) {
49
+ const normalizedStrategy = normalizeStrategy(strategy);
50
+ const strategies = normalizedStrategy ? [normalizedStrategy] : ['tasklifecycle-long', 'tasklifecycle-short'];
51
+ for (const strategyName of strategies) {
52
+ try {
53
+ const indexPath = path.join(workflowsRoot, strategyName, 'index.md');
54
+ const raw = await fs.readFile(indexPath, 'utf-8');
55
+ const match = raw.match(/```yaml\n([\s\S]*?)```/);
56
+ if (!match) {
57
+ continue;
58
+ }
59
+ const yaml = match[1];
60
+ const data = matter(`---\n${yaml}\n---`).data;
61
+ const phases = data.aliases?.[strategyName]?.phases;
62
+ if (!phases || typeof phases !== 'object') {
63
+ continue;
64
+ }
65
+ const phaseIds = Object.entries(phases)
66
+ .sort(([a], [b]) => {
67
+ const aNum = parseInt(a.split('_').pop() ?? '0', 10);
68
+ const bNum = parseInt(b.split('_').pop() ?? '0', 10);
69
+ return aNum - bNum;
70
+ })
71
+ .map(([, value]) => {
72
+ const id = value.id;
73
+ if (!id) {
74
+ throw new Error('Phase entry missing id.');
75
+ }
76
+ return id;
77
+ });
78
+ const index = phaseIds.indexOf(currentPhase);
79
+ if (index !== -1 && index < phaseIds.length - 1) {
80
+ return phaseIds[index + 1];
81
+ }
82
+ if (normalizedStrategy === 'tasklifecycle-short' && currentPhase === 'phase-0-acceptance-criteria' && phaseIds.length > 0) {
83
+ return phaseIds[0];
84
+ }
85
+ }
86
+ catch {
87
+ continue;
88
+ }
89
+ }
90
+ throw new Error(`No next phase found after ${currentPhase} in strategy ${normalizedStrategy ?? 'any'}.`);
91
+ }
92
+ export async function updateTaskPhase(taskPath, currentPhase, nextPhase, agent) {
93
+ const timestamp = new Date().toISOString();
94
+ const resolvedPath = path.resolve(taskPath);
95
+ const raw = await fs.readFile(resolvedPath, 'utf-8');
96
+ const lines = raw.split('\n');
97
+ let inYaml = false;
98
+ let activePhase = null;
99
+ for (let i = 0; i < lines.length; i += 1) {
100
+ const line = lines[i];
101
+ if (line.startsWith('```yaml')) {
102
+ inYaml = true;
103
+ continue;
104
+ }
105
+ if (inYaml && line.startsWith('```')) {
106
+ inYaml = false;
107
+ continue;
108
+ }
109
+ if (!inYaml) {
110
+ continue;
111
+ }
112
+ if (/^\s{6}phase-/.test(line)) {
113
+ const phaseMatch = line.match(/^\s{6}(phase-[^:]+):/);
114
+ activePhase = phaseMatch ? phaseMatch[1] : null;
115
+ continue;
116
+ }
117
+ if (/^\s{4}current:/.test(line)) {
118
+ lines[i] = line.replace(/current:.*$/, `current: "${nextPhase}"`);
119
+ continue;
120
+ }
121
+ if (/^\s{4}validated_by:/.test(line)) {
122
+ lines[i] = line.replace(/validated_by:.*$/, `validated_by: "${agent}"`);
123
+ continue;
124
+ }
125
+ if (/^\s{4}updated_at:/.test(line)) {
126
+ lines[i] = line.replace(/updated_at:.*$/, `updated_at: "${timestamp}"`);
127
+ continue;
128
+ }
129
+ if (activePhase !== currentPhase) {
130
+ continue;
131
+ }
132
+ if (/^\s{8}completed:/.test(line)) {
133
+ lines[i] = ' completed: true';
134
+ continue;
135
+ }
136
+ if (/^\s{8}validated_by:/.test(line)) {
137
+ lines[i] = ` validated_by: "${agent}"`;
138
+ continue;
139
+ }
140
+ if (/^\s{8}validated_at:/.test(line)) {
141
+ lines[i] = ` validated_at: "${timestamp}"`;
142
+ }
143
+ }
144
+ await fs.writeFile(resolvedPath, lines.join('\n'));
145
+ return { updatedAt: timestamp };
146
+ }
147
+ export function resolveWorkflowsRootForTask(taskPath) {
148
+ const root = path.dirname(path.resolve(taskPath));
149
+ const parts = root.split(path.sep);
150
+ const agentIndex = parts.lastIndexOf('.agent');
151
+ if (agentIndex === -1) {
152
+ return path.join(root, '.agent', 'workflows');
153
+ }
154
+ const base = parts.slice(0, agentIndex).join(path.sep);
155
+ return path.join(base || path.parse(root).root, '.agent', 'workflows');
156
+ }
157
+ async function findWorkspaceRootFromDir(startDir) {
158
+ let currentDir = path.resolve(startDir);
159
+ const root = path.parse(currentDir).root;
160
+ while (true) {
161
+ const agentDir = path.join(currentDir, '.agent');
162
+ if (await fileExists(agentDir)) {
163
+ return currentDir;
164
+ }
165
+ if (currentDir === root) {
166
+ return null;
167
+ }
168
+ currentDir = path.dirname(currentDir);
169
+ }
170
+ }
171
+ function isInitTaskPath(taskPath) {
172
+ const normalized = path.normalize(taskPath);
173
+ const initSuffix = path.join('.agent', 'artifacts', 'candidate', 'init.md');
174
+ return normalized.endsWith(initSuffix);
175
+ }
176
+ async function fileExists(targetPath) {
177
+ try {
178
+ await fs.access(targetPath);
179
+ return true;
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ function normalizeStrategy(strategy) {
186
+ if (!strategy) {
187
+ return null;
188
+ }
189
+ const normalized = strategy.trim().toLowerCase();
190
+ if (normalized === 'short') {
191
+ return 'tasklifecycle-short';
192
+ }
193
+ if (normalized === 'long') {
194
+ return 'tasklifecycle-long';
195
+ }
196
+ if (normalized === 'tasklifecycle-short' || normalized === 'tasklifecycle-long') {
197
+ return normalized;
198
+ }
199
+ return null;
200
+ }
201
+ //# sourceMappingURL=task-resolver.js.map