karajan-code 1.10.0 → 1.10.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karajan-code",
3
- "version": "1.10.0",
3
+ "version": "1.10.1",
4
4
  "description": "Local multi-agent coding orchestrator with TDD, SonarQube, and code review pipeline",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0",
@@ -4,7 +4,7 @@ import { assertAgentsAvailable } from "../agents/availability.js";
4
4
  import { createActivityLog } from "../activity-log.js";
5
5
  import { printHeader, printEvent } from "../utils/display.js";
6
6
  import { resolveRole } from "../config.js";
7
- import { parseCardId, buildTaskFromCard, buildCompletionUpdates } from "../planning-game/adapter.js";
7
+ import { parseCardId } from "../planning-game/adapter.js";
8
8
 
9
9
  export async function runCommandHandler({ task, config, logger, flags }) {
10
10
  const requiredProviders = [
@@ -22,24 +22,10 @@ export async function runCommandHandler({ task, config, logger, flags }) {
22
22
  if (config.pipeline?.security?.enabled) requiredProviders.push(resolveRole(config, "security").provider);
23
23
  await assertAgentsAvailable(requiredProviders);
24
24
 
25
- // --- Planning Game: resolve card context ---
25
+ // --- Planning Game: resolve card ID ---
26
26
  const pgCardId = flags?.pgTask || parseCardId(task);
27
27
  const pgProject = flags?.pgProject || config.planning_game?.project_id || null;
28
- let pgCard = null;
29
- let enrichedTask = task;
30
-
31
- if (pgCardId && pgProject && config.planning_game?.enabled !== false) {
32
- try {
33
- const { fetchCard, updateCard } = await import("../planning-game/client.js");
34
- pgCard = await fetchCard({ projectId: pgProject, cardId: pgCardId });
35
- if (pgCard) {
36
- enrichedTask = buildTaskFromCard(pgCard);
37
- logger.info(`Planning Game: loaded card ${pgCardId} from project ${pgProject}`);
38
- }
39
- } catch (err) {
40
- logger.warn(`Planning Game: could not load card ${pgCardId}: ${err.message}`);
41
- }
42
- }
28
+ const enrichedTask = task;
43
29
 
44
30
  const jsonMode = flags?.json;
45
31
 
@@ -65,26 +51,8 @@ export async function runCommandHandler({ task, config, logger, flags }) {
65
51
  printHeader({ task: enrichedTask, config });
66
52
  }
67
53
 
68
- const startDate = new Date().toISOString();
69
54
  const result = await runFlow({ task: enrichedTask, config, logger, flags, emitter, pgTaskId: pgCardId || null, pgProject: pgProject || null });
70
55
 
71
- // --- Planning Game: update card on completion ---
72
- if (pgCard && pgProject && result?.approved) {
73
- try {
74
- const { updateCard } = await import("../planning-game/client.js");
75
- const updates = buildCompletionUpdates({
76
- approved: true,
77
- commits: result.git?.commits || [],
78
- startDate,
79
- codeveloper: config.planning_game?.codeveloper || null
80
- });
81
- await updateCard({ projectId: pgProject, cardId: pgCardId, firebaseId: pgCard.firebaseId, updates });
82
- logger.info(`Planning Game: updated ${pgCardId} to "${updates.status}"`);
83
- } catch (err) {
84
- logger.warn(`Planning Game: could not update card ${pgCardId}: ${err.message}`);
85
- }
86
- }
87
-
88
56
  if (jsonMode) {
89
57
  console.log(JSON.stringify(result, null, 2));
90
58
  }
@@ -157,6 +157,32 @@ export async function runFlow({ task, config, logger, flags = {}, emitter = null
157
157
 
158
158
  eventBase.sessionId = session.id;
159
159
 
160
+ // --- Planning Game: mark card as In Progress ---
161
+ let pgCard = null;
162
+ if (pgTaskId && pgProject && config.planning_game?.enabled !== false) {
163
+ try {
164
+ const { fetchCard, updateCard } = await import("./planning-game/client.js");
165
+ pgCard = await fetchCard({ projectId: pgProject, cardId: pgTaskId });
166
+ if (pgCard && pgCard.status !== "In Progress") {
167
+ await updateCard({
168
+ projectId: pgProject,
169
+ cardId: pgTaskId,
170
+ firebaseId: pgCard.firebaseId,
171
+ updates: {
172
+ status: "In Progress",
173
+ startDate: new Date().toISOString(),
174
+ developer: "dev_016",
175
+ codeveloper: config.planning_game?.codeveloper || null
176
+ }
177
+ });
178
+ logger.info(`Planning Game: ${pgTaskId} → In Progress`);
179
+ }
180
+ } catch (err) {
181
+ logger.warn(`Planning Game: could not update ${pgTaskId}: ${err.message}`);
182
+ }
183
+ }
184
+ session.pg_card = pgCard || null;
185
+
160
186
  emitProgress(
161
187
  emitter,
162
188
  makeEvent("session:start", eventBase, {
@@ -493,6 +519,30 @@ export async function runFlow({ task, config, logger, flags = {}, emitter = null
493
519
  }
494
520
  session.budget = budgetSummary();
495
521
  await markSessionStatus(session, "approved");
522
+
523
+ // --- Planning Game: mark card as To Validate ---
524
+ if (pgCard && pgProject) {
525
+ try {
526
+ const { updateCard } = await import("./planning-game/client.js");
527
+ const { buildCompletionUpdates } = await import("./planning-game/adapter.js");
528
+ const pgUpdates = buildCompletionUpdates({
529
+ approved: true,
530
+ commits: gitResult?.commits || [],
531
+ startDate: session.pg_card?.startDate || session.created_at,
532
+ codeveloper: config.planning_game?.codeveloper || null
533
+ });
534
+ await updateCard({
535
+ projectId: pgProject,
536
+ cardId: session.pg_task_id,
537
+ firebaseId: pgCard.firebaseId,
538
+ updates: pgUpdates
539
+ });
540
+ logger.info(`Planning Game: ${session.pg_task_id} → To Validate`);
541
+ } catch (err) {
542
+ logger.warn(`Planning Game: could not update ${session.pg_task_id} on completion: ${err.message}`);
543
+ }
544
+ }
545
+
496
546
  emitProgress(
497
547
  emitter,
498
548
  makeEvent("session:end", { ...eventBase, stage: "done" }, {