wogiflow 2.4.3 → 2.5.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.
@@ -32,6 +32,7 @@ const HOOK_TIMEOUTS = {
32
32
  STOP: 5, // Loop enforcement check
33
33
  SESSION_END: 10, // Session cleanup/logging
34
34
  TASK_COMPLETED: 10, // Post-task cleanup (Claude Code 2.1.33+)
35
+ TASK_CREATED: 5, // Task creation tracking (Claude Code 2.1.84+)
35
36
  TEAMMATE_IDLE: 5, // Task dispatch for idle agents (Claude Code 2.1.33+)
36
37
  CONFIG_CHANGE: 5, // Mid-session config change detection (Claude Code latest)
37
38
  INSTRUCTIONS_LOADED: 5 // Instructions loaded event (Claude Code latest)
@@ -55,6 +56,7 @@ const CLAUDE_CODE_EVENTS = [
55
56
  'ConfigChange', // Claude Code 2.1.63+ — mid-session config change detection
56
57
  'InstructionsLoaded', // Claude Code latest — fires when CLAUDE.md/.claude/rules loaded
57
58
  'PostCompact', // Claude Code 2.1.76+ — fires after context compaction completes
59
+ 'TaskCreated', // Claude Code 2.1.84+ — fires when a task is created via TaskCreate
58
60
  ];
59
61
 
60
62
  /**
@@ -69,6 +71,7 @@ const CLAUDE_CODE_EVENTS = [
69
71
  // 'ElicitationResult', // Claude Code 2.1.76+ — intercept/override elicitation responses before sending
70
72
  // 'CwdChanged', // Claude Code 2.1.83+ — fires when working directory changes (e.g., direnv)
71
73
  // 'FileChanged', // Claude Code 2.1.83+ — fires when watched files change on disk
74
+ // 'WorktreeCreate (http)', // Claude Code 2.1.84+ — WorktreeCreate now supports type:"http" transport
72
75
  // ];
73
76
 
74
77
  /**
@@ -204,6 +207,8 @@ class ClaudeCodeAdapter extends BaseAdapter {
204
207
  return this.transformInstructionsLoaded(coreResult);
205
208
  case 'PostCompact':
206
209
  return this.transformPostCompact(coreResult);
210
+ case 'TaskCreated':
211
+ return this.transformTaskCreated(coreResult);
207
212
  default:
208
213
  return { continue: true };
209
214
  }
@@ -506,6 +511,23 @@ Run: /wogi-start ${coreResult.nextTaskId}`;
506
511
  };
507
512
  }
508
513
 
514
+ /**
515
+ * Transform TaskCreated result (Claude Code 2.1.84+)
516
+ * Fires when a task is created via TaskCreate.
517
+ * Links native tasks to the active WogiFlow task for tracking.
518
+ */
519
+ transformTaskCreated(coreResult) {
520
+ return {
521
+ continue: true,
522
+ ...(coreResult.message && { systemMessage: coreResult.message }),
523
+ hookSpecificOutput: {
524
+ hookEventName: 'TaskCreated',
525
+ linked: coreResult.linked || false,
526
+ wogiTaskId: coreResult.wogiTaskId || null
527
+ }
528
+ };
529
+ }
530
+
509
531
  /**
510
532
  * Transform InstructionsLoaded result
511
533
  * Fires when CLAUDE.md or .claude/rules/*.md files are loaded into context.
@@ -641,6 +663,13 @@ Run: /wogi-start ${coreResult.nextTaskId}`;
641
663
  }];
642
664
  }
643
665
 
666
+ // TaskCreated hook — link native tasks to WogiFlow task (Claude Code 2.1.84+)
667
+ if (rules.taskCreated?.enabled !== false) {
668
+ hooks.TaskCreated = [{
669
+ hooks: [hookEntry('TaskCreated', 'task-created.js', HOOK_TIMEOUTS.TASK_CREATED)]
670
+ }];
671
+ }
672
+
644
673
  // WorktreeCreate hook — copy essential state to new worktree (Claude Code 2.1.50+)
645
674
  if (rules.worktreeLifecycle?.enabled !== false) {
646
675
  hooks.WorktreeCreate = [{
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Wogi Flow - Task Created (Core Module)
5
+ *
6
+ * CLI-agnostic task creation tracking logic.
7
+ * Called when a native task is created via TaskCreate (Claude Code 2.1.84+).
8
+ *
9
+ * Handles:
10
+ * - Linking native Claude Code tasks to the active WogiFlow task
11
+ * - Tracking subtask creation for progress visibility
12
+ * - Logging task creation events to session state
13
+ *
14
+ * Returns a standardized result that adapters transform for specific CLIs.
15
+ */
16
+
17
+ const path = require('node:path');
18
+ const { getConfig, PATHS, safeJsonParse } = require('../../flow-utils');
19
+
20
+ /**
21
+ * Check if task created handling is enabled
22
+ * @returns {boolean}
23
+ */
24
+ function isTaskCreatedEnabled() {
25
+ const config = getConfig();
26
+ return config.hooks?.rules?.taskCreated?.enabled !== false;
27
+ }
28
+
29
+ /**
30
+ * Handle task creation event
31
+ * @param {Object} input - Parsed hook input from Claude Code
32
+ * @returns {Object} Core result
33
+ */
34
+ async function handleTaskCreated(input) {
35
+ if (!isTaskCreatedEnabled()) {
36
+ return { enabled: false, message: null };
37
+ }
38
+
39
+ const result = {
40
+ enabled: true,
41
+ linked: false,
42
+ wogiTaskId: null,
43
+ message: null
44
+ };
45
+
46
+ try {
47
+ // Find the active WogiFlow task to link against
48
+ const readyPath = path.join(PATHS.state, 'ready.json');
49
+ const ready = safeJsonParse(readyPath, { inProgress: [] });
50
+
51
+ if (Array.isArray(ready.inProgress) && ready.inProgress.length > 0) {
52
+ const activeTask = ready.inProgress[0];
53
+ const wogiTaskId = typeof activeTask === 'string' ? activeTask : activeTask?.id;
54
+
55
+ if (wogiTaskId) {
56
+ result.linked = true;
57
+ result.wogiTaskId = wogiTaskId;
58
+ }
59
+ }
60
+
61
+ // Track creation in session state (fire-and-forget)
62
+ try {
63
+ const sessionStatePath = path.join(PATHS.state, 'session-state.json');
64
+ const sessionState = safeJsonParse(sessionStatePath, {});
65
+ if (!sessionState.nativeTasksCreated) {
66
+ sessionState.nativeTasksCreated = 0;
67
+ }
68
+ sessionState.nativeTasksCreated += 1;
69
+ sessionState.lastNativeTaskAt = new Date().toISOString();
70
+
71
+ const fs = require('node:fs');
72
+ fs.writeFileSync(sessionStatePath, JSON.stringify(sessionState, null, 2));
73
+ } catch (_err) {
74
+ // Non-critical — session state tracking is best-effort
75
+ }
76
+ } catch (err) {
77
+ result.message = `Task created handler error: ${err.message}`;
78
+ }
79
+
80
+ return result;
81
+ }
82
+
83
+ module.exports = { handleTaskCreated, isTaskCreatedEnabled };
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Wogi Flow - Claude Code TaskCreated Hook
5
+ *
6
+ * Called when a native task is created via TaskCreate (Claude Code 2.1.84+).
7
+ * Links native tasks to the active WogiFlow task for tracking.
8
+ */
9
+
10
+ const { handleTaskCreated } = require('../../core/task-created');
11
+ const { runHook } = require('../shared/hook-runner');
12
+
13
+ runHook('TaskCreated', async ({ parsedInput }) => {
14
+ return await handleTaskCreated(parsedInput);
15
+ }, { failMode: 'silent' });
@@ -267,6 +267,8 @@ const HOOK_VERSION_MAP = {
267
267
  InstructionsLoaded: { major: 2, minor: 1, patch: 72 },
268
268
  // Hooks added in 2.1.76+
269
269
  PostCompact: { major: 2, minor: 1, patch: 76 },
270
+ // Hooks added in 2.1.84+
271
+ TaskCreated: { major: 2, minor: 1, patch: 84 },
270
272
  };
271
273
 
272
274
  /**