wogiflow 2.17.0 → 2.18.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 (111) hide show
  1. package/.claude/commands/wogi-audit.md +212 -17
  2. package/.claude/commands/wogi-research.md +37 -0
  3. package/.claude/commands/wogi-review.md +200 -22
  4. package/.claude/commands/wogi-start.md +45 -0
  5. package/.claude/docs/claude-code-compatibility.md +46 -1
  6. package/.claude/docs/intent-grounded-review.md +209 -0
  7. package/.claude/settings.json +34 -1
  8. package/.workflow/agents/logic-adversary.md +8 -0
  9. package/.workflow/templates/claude-md.hbs +18 -0
  10. package/lib/installer.js +22 -0
  11. package/lib/utils.js +29 -3
  12. package/lib/workspace-changelog.js +2 -1
  13. package/lib/workspace-channel-server.js +4 -6
  14. package/lib/workspace-contracts.js +5 -4
  15. package/lib/workspace-events.js +8 -7
  16. package/lib/workspace-gates.js +4 -3
  17. package/lib/workspace-integration-tests.js +2 -1
  18. package/lib/workspace-intelligence.js +3 -2
  19. package/lib/workspace-locks.js +2 -1
  20. package/lib/workspace-messages.js +7 -6
  21. package/lib/workspace-routing.js +14 -26
  22. package/lib/workspace-session.js +7 -6
  23. package/lib/workspace-sync.js +9 -8
  24. package/package.json +4 -2
  25. package/scripts/base-workflow-step.js +1 -1
  26. package/scripts/flow +19 -0
  27. package/scripts/flow-adaptive-learning.js +1 -1
  28. package/scripts/flow-aggregate.js +2 -1
  29. package/scripts/flow-architect-pass.js +3 -3
  30. package/scripts/flow-archive-runs.js +372 -0
  31. package/scripts/flow-ask.js +1 -1
  32. package/scripts/flow-ast-grep.js +216 -0
  33. package/scripts/flow-audit-gates.js +1 -1
  34. package/scripts/flow-auto-learn.js +8 -11
  35. package/scripts/flow-bug.js +2 -2
  36. package/scripts/flow-capture-gate.js +644 -0
  37. package/scripts/flow-capture.js +4 -3
  38. package/scripts/flow-cli-flags.js +95 -0
  39. package/scripts/flow-community-sync.js +2 -1
  40. package/scripts/flow-community.js +6 -6
  41. package/scripts/flow-conclusion-classifier.js +310 -0
  42. package/scripts/flow-config-defaults.js +3 -3
  43. package/scripts/flow-constants.js +8 -11
  44. package/scripts/flow-context-scoring.js +1 -0
  45. package/scripts/flow-correction-detector.js +344 -3
  46. package/scripts/flow-damage-control.js +1 -1
  47. package/scripts/flow-decisions-merge.js +1 -0
  48. package/scripts/flow-done-gates.js +20 -0
  49. package/scripts/flow-done-report.js +2 -2
  50. package/scripts/flow-done.js +4 -4
  51. package/scripts/flow-epics.js +5 -11
  52. package/scripts/flow-health.js +145 -1
  53. package/scripts/flow-id.js +92 -0
  54. package/scripts/flow-io.js +15 -5
  55. package/scripts/flow-knowledge-router.js +2 -1
  56. package/scripts/flow-links.js +1 -1
  57. package/scripts/flow-log-manager.js +2 -1
  58. package/scripts/flow-logic-adversary.js +4 -4
  59. package/scripts/flow-long-input-cli.js +6 -0
  60. package/scripts/flow-long-input-stories.js +1 -1
  61. package/scripts/flow-loop-retry-learning.js +1 -1
  62. package/scripts/flow-mcp-capabilities.js +2 -3
  63. package/scripts/flow-mcp-docs.js +2 -1
  64. package/scripts/flow-memory-blocks.js +2 -1
  65. package/scripts/flow-memory-sync.js +1 -1
  66. package/scripts/flow-memory.js +767 -0
  67. package/scripts/flow-migrate-igr.js +1 -1
  68. package/scripts/flow-migrate.js +2 -1
  69. package/scripts/flow-model-adapter.js +1 -1
  70. package/scripts/flow-model-config.js +5 -1
  71. package/scripts/flow-model-profile.js +2 -1
  72. package/scripts/flow-orchestrate.js +3 -3
  73. package/scripts/flow-output.js +29 -0
  74. package/scripts/flow-parallel.js +10 -9
  75. package/scripts/flow-pattern-enforcer.js +2 -1
  76. package/scripts/flow-permissions-audit.js +124 -0
  77. package/scripts/flow-plugin-registry.js +2 -2
  78. package/scripts/flow-progress.js +5 -1
  79. package/scripts/flow-project-analyzer.js +1 -1
  80. package/scripts/flow-promote.js +510 -0
  81. package/scripts/flow-registries.js +86 -0
  82. package/scripts/flow-request-log.js +133 -0
  83. package/scripts/flow-research-protocol.js +0 -1
  84. package/scripts/flow-revision-tracker.js +2 -1
  85. package/scripts/flow-roadmap.js +2 -1
  86. package/scripts/flow-rules-sync.js +3 -7
  87. package/scripts/flow-session-end.js +3 -1
  88. package/scripts/flow-session-learning.js +6 -13
  89. package/scripts/flow-session-state.js +2 -2
  90. package/scripts/flow-setup-hooks.js +2 -1
  91. package/scripts/flow-skill-create.js +1 -1
  92. package/scripts/flow-skill-freshness.js +6 -7
  93. package/scripts/flow-skill-learn.js +1 -1
  94. package/scripts/flow-step-coverage.js +1 -1
  95. package/scripts/flow-step-security.js +1 -1
  96. package/scripts/flow-story.js +58 -10
  97. package/scripts/flow-sys.js +204 -0
  98. package/scripts/flow-task-hierarchy.js +88 -0
  99. package/scripts/flow-tech-debt.js +2 -1
  100. package/scripts/flow-test-api.js +1 -1
  101. package/scripts/flow-utils.js +60 -890
  102. package/scripts/hooks/core/bugfix-scope-gate.js +5 -4
  103. package/scripts/hooks/core/deploy-gate.js +1 -1
  104. package/scripts/hooks/core/pre-tool-helpers.js +72 -0
  105. package/scripts/hooks/core/pre-tool-orchestrator.js +442 -0
  106. package/scripts/hooks/core/routing-gate.js +8 -0
  107. package/scripts/hooks/core/session-end.js +28 -0
  108. package/scripts/hooks/entry/claude-code/pre-tool-use.js +48 -492
  109. package/scripts/hooks/entry/shared/hook-runner.js +1 -1
  110. package/scripts/registries/schema-registry.js +1 -1
  111. package/scripts/registries/service-registry.js +1 -1
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Wogi Flow - Hierarchical Task Utilities
5
+ *
6
+ * Helpers for traversing epic → feature → story → task hierarchies stored
7
+ * in ready.json. Extracted from flow-utils.js (wf-94cc3b72 epic —
8
+ * flow-utils decomposition).
9
+ *
10
+ * Pure functions — no filesystem side effects.
11
+ */
12
+
13
+ 'use strict';
14
+
15
+ /**
16
+ * Normalize a task object to include optional hierarchical fields.
17
+ * Ensures backward compatibility with existing tasks.
18
+ * @param {Object|string} task - Task object (or legacy string ID)
19
+ * @returns {Object|string} Normalized task with all optional fields, or
20
+ * passthrough for legacy string IDs.
21
+ */
22
+ function normalizeTask(task) {
23
+ if (!task || typeof task === 'string') {
24
+ return task; // Can't normalize string IDs (legacy format)
25
+ }
26
+
27
+ return {
28
+ ...task,
29
+ // Default level based on type if not set
30
+ level: task.level || (task.type === 'epic' ? 'L0' : task.type === 'story' ? 'L1' : 'L2'),
31
+ // Use existing parent field (backward compatible)
32
+ parent: task.parent || null,
33
+ // Child task IDs
34
+ children: task.children || [],
35
+ // Progress tracking for hierarchical items
36
+ progress: task.progress || null
37
+ };
38
+ }
39
+
40
+ /**
41
+ * Find all tasks with a given parent ID.
42
+ * @param {Object} readyData - Ready.json data
43
+ * @param {string} parentId - Parent task ID
44
+ * @returns {Object[]} Array of child tasks
45
+ */
46
+ function findAllWithParent(readyData, parentId) {
47
+ const children = [];
48
+ const lists = ['ready', 'inProgress', 'blocked', 'recentlyCompleted'];
49
+
50
+ for (const listName of lists) {
51
+ const list = readyData[listName] || [];
52
+ for (const task of list) {
53
+ if (task && typeof task !== 'string' && task.parent === parentId) {
54
+ children.push(task);
55
+ }
56
+ }
57
+ }
58
+
59
+ return children;
60
+ }
61
+
62
+ /**
63
+ * Find a task in all lists by ID.
64
+ * @param {Object} readyData - Ready.json data
65
+ * @param {string} taskId - Task ID to find
66
+ * @returns {Object|null} Task object or null if not found
67
+ */
68
+ function findTaskInAllLists(readyData, taskId) {
69
+ const lists = ['ready', 'inProgress', 'blocked', 'recentlyCompleted'];
70
+
71
+ for (const listName of lists) {
72
+ const list = readyData[listName] || [];
73
+ for (const task of list) {
74
+ const id = typeof task === 'string' ? task : task.id;
75
+ if (id === taskId) {
76
+ return typeof task === 'string' ? { id: task } : task;
77
+ }
78
+ }
79
+ }
80
+
81
+ return null;
82
+ }
83
+
84
+ module.exports = {
85
+ normalizeTask,
86
+ findAllWithParent,
87
+ findTaskInAllLists,
88
+ };
@@ -35,7 +35,8 @@ const {
35
35
  fileExists,
36
36
  getProjectRoot,
37
37
  ensureDir,
38
- generateTaskId, PATHS
38
+ generateTaskId, PATHS,
39
+ getTodayDate
39
40
  } = require('./flow-utils');
40
41
  const { success: printSuccess, warn: printWarn } = require('./flow-output');
41
42
 
@@ -697,7 +697,7 @@ function stopAPIServer(serverProcess) {
697
697
  // Process group kill failed — try direct kill
698
698
  try {
699
699
  serverProcess.kill('SIGTERM');
700
- } catch (err2) {
700
+ } catch (_err) {
701
701
  // Already dead
702
702
  }
703
703
  }