wogiflow 1.0.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.
- package/.workflow/agents/reviewer.md +81 -0
- package/.workflow/agents/security.md +94 -0
- package/.workflow/agents/story-writer.md +58 -0
- package/.workflow/bridges/base-bridge.js +395 -0
- package/.workflow/bridges/claude-bridge.js +434 -0
- package/.workflow/bridges/index.js +130 -0
- package/.workflow/lib/assumption-detector.js +481 -0
- package/.workflow/lib/config-substitution.js +371 -0
- package/.workflow/lib/failure-categories.js +478 -0
- package/.workflow/state/app-map.md.template +15 -0
- package/.workflow/state/architecture.md.template +24 -0
- package/.workflow/state/component-index.json.template +5 -0
- package/.workflow/state/decisions.md.template +15 -0
- package/.workflow/state/feedback-patterns.md.template +9 -0
- package/.workflow/state/knowledge-sync.json.template +6 -0
- package/.workflow/state/progress.md.template +14 -0
- package/.workflow/state/ready.json.template +7 -0
- package/.workflow/state/request-log.md.template +14 -0
- package/.workflow/state/session-state.json.template +11 -0
- package/.workflow/state/stack.md.template +33 -0
- package/.workflow/state/testing.md.template +36 -0
- package/.workflow/templates/claude-md.hbs +257 -0
- package/.workflow/templates/correction-report.md +67 -0
- package/.workflow/templates/gemini-md.hbs +52 -0
- package/README.md +1802 -0
- package/bin/flow +205 -0
- package/lib/index.js +33 -0
- package/lib/installer.js +467 -0
- package/lib/release-channel.js +269 -0
- package/lib/skill-registry.js +526 -0
- package/lib/upgrader.js +401 -0
- package/lib/utils.js +305 -0
- package/package.json +64 -0
- package/scripts/flow +985 -0
- package/scripts/flow-adaptive-learning.js +1259 -0
- package/scripts/flow-aggregate.js +488 -0
- package/scripts/flow-archive +133 -0
- package/scripts/flow-auto-context.js +1015 -0
- package/scripts/flow-auto-learn.js +615 -0
- package/scripts/flow-bridge.js +223 -0
- package/scripts/flow-browser-suggest.js +316 -0
- package/scripts/flow-bug.js +247 -0
- package/scripts/flow-cascade.js +711 -0
- package/scripts/flow-changelog +85 -0
- package/scripts/flow-checkpoint.js +483 -0
- package/scripts/flow-cli.js +403 -0
- package/scripts/flow-code-intelligence.js +760 -0
- package/scripts/flow-complexity.js +502 -0
- package/scripts/flow-config-set.js +152 -0
- package/scripts/flow-constants.js +157 -0
- package/scripts/flow-context +152 -0
- package/scripts/flow-context-init.js +482 -0
- package/scripts/flow-context-monitor.js +384 -0
- package/scripts/flow-context-scoring.js +886 -0
- package/scripts/flow-correct.js +458 -0
- package/scripts/flow-damage-control.js +985 -0
- package/scripts/flow-deps +101 -0
- package/scripts/flow-diff.js +700 -0
- package/scripts/flow-done +151 -0
- package/scripts/flow-done.js +489 -0
- package/scripts/flow-durable-session.js +1541 -0
- package/scripts/flow-entropy-monitor.js +345 -0
- package/scripts/flow-export-profile +349 -0
- package/scripts/flow-export-scanner.js +1046 -0
- package/scripts/flow-figma-confirm.js +400 -0
- package/scripts/flow-figma-extract.js +496 -0
- package/scripts/flow-figma-generate.js +683 -0
- package/scripts/flow-figma-index.js +909 -0
- package/scripts/flow-figma-match.js +617 -0
- package/scripts/flow-figma-mcp-server.js +518 -0
- package/scripts/flow-figma-pipeline.js +414 -0
- package/scripts/flow-file-ops.js +301 -0
- package/scripts/flow-gate-confidence.js +825 -0
- package/scripts/flow-guided-edit.js +659 -0
- package/scripts/flow-health +185 -0
- package/scripts/flow-health.js +413 -0
- package/scripts/flow-hooks.js +556 -0
- package/scripts/flow-http-client.js +249 -0
- package/scripts/flow-hybrid-detect.js +167 -0
- package/scripts/flow-hybrid-interactive.js +591 -0
- package/scripts/flow-hybrid-test.js +152 -0
- package/scripts/flow-import-profile +439 -0
- package/scripts/flow-init +253 -0
- package/scripts/flow-instruction-richness.js +827 -0
- package/scripts/flow-jira-integration.js +579 -0
- package/scripts/flow-knowledge-router.js +522 -0
- package/scripts/flow-knowledge-sync.js +589 -0
- package/scripts/flow-linear-integration.js +631 -0
- package/scripts/flow-links.js +774 -0
- package/scripts/flow-log-manager.js +559 -0
- package/scripts/flow-loop-enforcer.js +1246 -0
- package/scripts/flow-loop-retry-learning.js +630 -0
- package/scripts/flow-lsp.js +923 -0
- package/scripts/flow-map-index +348 -0
- package/scripts/flow-map-sync +201 -0
- package/scripts/flow-memory-blocks.js +668 -0
- package/scripts/flow-memory-compactor.js +350 -0
- package/scripts/flow-memory-db.js +1110 -0
- package/scripts/flow-memory-sync.js +484 -0
- package/scripts/flow-metrics.js +353 -0
- package/scripts/flow-migrate-ids.js +370 -0
- package/scripts/flow-model-adapter.js +802 -0
- package/scripts/flow-model-router.js +884 -0
- package/scripts/flow-models.js +1231 -0
- package/scripts/flow-morning.js +517 -0
- package/scripts/flow-multi-approach.js +660 -0
- package/scripts/flow-new-feature +86 -0
- package/scripts/flow-onboard +1042 -0
- package/scripts/flow-orchestrate-llm.js +459 -0
- package/scripts/flow-orchestrate.js +3592 -0
- package/scripts/flow-output.js +123 -0
- package/scripts/flow-parallel-detector.js +399 -0
- package/scripts/flow-parallel-dispatch.js +987 -0
- package/scripts/flow-parallel.js +428 -0
- package/scripts/flow-pattern-enforcer.js +600 -0
- package/scripts/flow-prd-manager.js +282 -0
- package/scripts/flow-progress.js +323 -0
- package/scripts/flow-project-analyzer.js +975 -0
- package/scripts/flow-prompt-composer.js +487 -0
- package/scripts/flow-providers.js +1381 -0
- package/scripts/flow-queue.js +308 -0
- package/scripts/flow-ready +82 -0
- package/scripts/flow-ready.js +189 -0
- package/scripts/flow-regression.js +396 -0
- package/scripts/flow-response-parser.js +450 -0
- package/scripts/flow-resume.js +284 -0
- package/scripts/flow-rules-sync.js +439 -0
- package/scripts/flow-run-trace.js +718 -0
- package/scripts/flow-safety.js +587 -0
- package/scripts/flow-search +104 -0
- package/scripts/flow-security.js +481 -0
- package/scripts/flow-session-end +106 -0
- package/scripts/flow-session-end.js +437 -0
- package/scripts/flow-session-state.js +671 -0
- package/scripts/flow-setup-hooks +216 -0
- package/scripts/flow-setup-hooks.js +377 -0
- package/scripts/flow-skill-create.js +329 -0
- package/scripts/flow-skill-creator.js +572 -0
- package/scripts/flow-skill-generator.js +1046 -0
- package/scripts/flow-skill-learn.js +880 -0
- package/scripts/flow-skill-matcher.js +578 -0
- package/scripts/flow-spec-generator.js +820 -0
- package/scripts/flow-stack-wizard.js +895 -0
- package/scripts/flow-standup +162 -0
- package/scripts/flow-start +74 -0
- package/scripts/flow-start.js +235 -0
- package/scripts/flow-status +110 -0
- package/scripts/flow-status.js +301 -0
- package/scripts/flow-step-browser.js +83 -0
- package/scripts/flow-step-changelog.js +217 -0
- package/scripts/flow-step-comments.js +306 -0
- package/scripts/flow-step-complexity.js +234 -0
- package/scripts/flow-step-coverage.js +218 -0
- package/scripts/flow-step-knowledge.js +193 -0
- package/scripts/flow-step-pr-tests.js +364 -0
- package/scripts/flow-step-regression.js +89 -0
- package/scripts/flow-step-review.js +516 -0
- package/scripts/flow-step-security.js +162 -0
- package/scripts/flow-step-silent-failures.js +290 -0
- package/scripts/flow-step-simplifier.js +346 -0
- package/scripts/flow-story +105 -0
- package/scripts/flow-story.js +500 -0
- package/scripts/flow-suspend.js +252 -0
- package/scripts/flow-sync-daemon.js +654 -0
- package/scripts/flow-task-analyzer.js +606 -0
- package/scripts/flow-team-dashboard.js +748 -0
- package/scripts/flow-team-sync.js +752 -0
- package/scripts/flow-team.js +977 -0
- package/scripts/flow-tech-options.js +528 -0
- package/scripts/flow-templates.js +812 -0
- package/scripts/flow-tiered-learning.js +728 -0
- package/scripts/flow-trace +204 -0
- package/scripts/flow-transcript-chunking.js +1106 -0
- package/scripts/flow-transcript-digest.js +7918 -0
- package/scripts/flow-transcript-language.js +465 -0
- package/scripts/flow-transcript-parsing.js +1085 -0
- package/scripts/flow-transcript-stories.js +2194 -0
- package/scripts/flow-update-map +224 -0
- package/scripts/flow-utils.js +2242 -0
- package/scripts/flow-verification.js +644 -0
- package/scripts/flow-verify.js +1177 -0
- package/scripts/flow-voice-input.js +638 -0
- package/scripts/flow-watch +168 -0
- package/scripts/flow-workflow-steps.js +521 -0
- package/scripts/flow-workflow.js +1029 -0
- package/scripts/flow-worktree.js +489 -0
- package/scripts/hooks/adapters/base-adapter.js +102 -0
- package/scripts/hooks/adapters/claude-code.js +359 -0
- package/scripts/hooks/adapters/index.js +79 -0
- package/scripts/hooks/core/component-check.js +341 -0
- package/scripts/hooks/core/index.js +35 -0
- package/scripts/hooks/core/loop-check.js +241 -0
- package/scripts/hooks/core/session-context.js +294 -0
- package/scripts/hooks/core/task-gate.js +177 -0
- package/scripts/hooks/core/validation.js +230 -0
- package/scripts/hooks/entry/claude-code/post-tool-use.js +65 -0
- package/scripts/hooks/entry/claude-code/pre-tool-use.js +89 -0
- package/scripts/hooks/entry/claude-code/session-end.js +87 -0
- package/scripts/hooks/entry/claude-code/session-start.js +46 -0
- package/scripts/hooks/entry/claude-code/stop.js +43 -0
- package/scripts/postinstall.js +139 -0
- package/templates/browser-test-flow.json +56 -0
- package/templates/bug-report.md +43 -0
- package/templates/component-detail.md +42 -0
- package/templates/component.stories.tsx +49 -0
- package/templates/context/constraints.md +83 -0
- package/templates/context/conventions.md +177 -0
- package/templates/context/stack.md +60 -0
- package/templates/correction-report.md +90 -0
- package/templates/feature-proposal.md +35 -0
- package/templates/hybrid/_base.md +254 -0
- package/templates/hybrid/_patterns.md +45 -0
- package/templates/hybrid/create-component.md +127 -0
- package/templates/hybrid/create-file.md +56 -0
- package/templates/hybrid/create-hook.md +145 -0
- package/templates/hybrid/create-service.md +70 -0
- package/templates/hybrid/fix-bug.md +33 -0
- package/templates/hybrid/modify-file.md +55 -0
- package/templates/story.md +68 -0
- package/templates/task.json +56 -0
- package/templates/trace.md +69 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wogi Flow - Constants
|
|
5
|
+
*
|
|
6
|
+
* Centralized magic numbers and configuration constants.
|
|
7
|
+
* Extracted from various files to improve maintainability.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const { TIMEOUTS, LIMITS, THRESHOLDS } = require('./flow-constants');
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ============================================================
|
|
14
|
+
// Timeout Constants (milliseconds)
|
|
15
|
+
// ============================================================
|
|
16
|
+
|
|
17
|
+
const TIMEOUTS = {
|
|
18
|
+
// Command execution
|
|
19
|
+
DEFAULT_COMMAND: 120000, // 2 minutes - default shell command timeout
|
|
20
|
+
QUICK_COMMAND: 30000, // 30 seconds - quick operations
|
|
21
|
+
LONG_COMMAND: 300000, // 5 minutes - build/test operations
|
|
22
|
+
|
|
23
|
+
// HTTP requests
|
|
24
|
+
HTTP_DEFAULT: 30000, // 30 seconds - general HTTP requests
|
|
25
|
+
HTTP_QUICK: 5000, // 5 seconds - health checks
|
|
26
|
+
HTTP_LONG: 60000, // 1 minute - large requests
|
|
27
|
+
HTTP_PROVIDER: 120000, // 2 minutes - LLM provider requests
|
|
28
|
+
|
|
29
|
+
// File locking
|
|
30
|
+
LOCK_STALE: 60000, // 1 minute - lock considered stale
|
|
31
|
+
LOCK_CLEANUP_STALE: 30000, // 30 seconds - cleanup threshold
|
|
32
|
+
LOCK_RETRY_DELAY: 100, // 100ms - delay between lock retries
|
|
33
|
+
|
|
34
|
+
// LSP/Language Server
|
|
35
|
+
LSP_DEFAULT: 5000, // 5 seconds - LSP operations
|
|
36
|
+
LSP_ENRICH: 2000, // 2 seconds - LSP enrichment
|
|
37
|
+
|
|
38
|
+
// Polling
|
|
39
|
+
POLL_INTERVAL: 1000, // 1 second - default polling interval
|
|
40
|
+
ENDPOINT_CHECK: 3000, // 3 seconds - endpoint availability check
|
|
41
|
+
|
|
42
|
+
// Caching
|
|
43
|
+
CACHE_TTL: 300000, // 5 minutes - default cache TTL for integrations
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// ============================================================
|
|
47
|
+
// Limit Constants
|
|
48
|
+
// ============================================================
|
|
49
|
+
|
|
50
|
+
const LIMITS = {
|
|
51
|
+
// Retries
|
|
52
|
+
LOCK_MAX_RETRIES: 5,
|
|
53
|
+
HTTP_MAX_RETRIES: 3,
|
|
54
|
+
TASK_MAX_RETRIES: 5,
|
|
55
|
+
|
|
56
|
+
// History/Storage
|
|
57
|
+
MAX_SESSION_HISTORY: 50,
|
|
58
|
+
MAX_RECENT_FILES: 20,
|
|
59
|
+
MAX_RECENT_DECISIONS: 10,
|
|
60
|
+
MAX_REQUEST_LOG_ENTRIES: 100,
|
|
61
|
+
MAX_WORKFLOW_ITERATIONS: 100,
|
|
62
|
+
|
|
63
|
+
// Content
|
|
64
|
+
MAX_REGEX_LENGTH: 100, // Prevent ReDoS
|
|
65
|
+
MAX_INPUT_LENGTH: 10000, // Max string for regex testing
|
|
66
|
+
MAX_OUTPUT_SIZE: 1024 * 1024, // 1MB output limit
|
|
67
|
+
|
|
68
|
+
// File operations
|
|
69
|
+
MAX_FILE_WALK_DEPTH: 10,
|
|
70
|
+
MAX_CONCURRENT_TASKS: 5,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// ============================================================
|
|
74
|
+
// Threshold Constants
|
|
75
|
+
// ============================================================
|
|
76
|
+
|
|
77
|
+
const THRESHOLDS = {
|
|
78
|
+
// Success rates (percentages)
|
|
79
|
+
SUCCESS_RATE_HIGH: 90,
|
|
80
|
+
SUCCESS_RATE_MEDIUM: 70,
|
|
81
|
+
SUCCESS_RATE_LOW: 50,
|
|
82
|
+
|
|
83
|
+
// Confidence scores
|
|
84
|
+
CONFIDENCE_HIGH: 0.8,
|
|
85
|
+
CONFIDENCE_MEDIUM: 0.5,
|
|
86
|
+
CONFIDENCE_LOW: 0.3,
|
|
87
|
+
|
|
88
|
+
// Context management
|
|
89
|
+
CONTEXT_WARN_PERCENT: 70,
|
|
90
|
+
CONTEXT_CRITICAL_PERCENT: 85,
|
|
91
|
+
|
|
92
|
+
// Small fix threshold (files)
|
|
93
|
+
SMALL_FIX_FILES: 3,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// ============================================================
|
|
97
|
+
// Retry Backoff Constants
|
|
98
|
+
// ============================================================
|
|
99
|
+
|
|
100
|
+
const BACKOFF = {
|
|
101
|
+
BASE_DELAY: 1000, // 1 second base
|
|
102
|
+
MAX_DELAY: 30000, // 30 seconds max
|
|
103
|
+
MULTIPLIER: 2, // Exponential multiplier
|
|
104
|
+
JITTER: 0.1, // 10% jitter
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// ============================================================
|
|
108
|
+
// Known Config Keys (for validation)
|
|
109
|
+
// ============================================================
|
|
110
|
+
|
|
111
|
+
const KNOWN_CONFIG_KEYS = [
|
|
112
|
+
'hybrid',
|
|
113
|
+
'parallel',
|
|
114
|
+
'worktree',
|
|
115
|
+
'qualityGates',
|
|
116
|
+
'testing',
|
|
117
|
+
'componentRules',
|
|
118
|
+
'mandatorySteps',
|
|
119
|
+
'phases',
|
|
120
|
+
'corrections',
|
|
121
|
+
'skills',
|
|
122
|
+
'autoContext',
|
|
123
|
+
'metrics',
|
|
124
|
+
'figmaAnalyzer',
|
|
125
|
+
'learning',
|
|
126
|
+
'hooks',
|
|
127
|
+
'project',
|
|
128
|
+
'projectType',
|
|
129
|
+
'contextMonitor',
|
|
130
|
+
'requestLog',
|
|
131
|
+
'sessionState',
|
|
132
|
+
'priorities',
|
|
133
|
+
'morningBriefing',
|
|
134
|
+
'commits',
|
|
135
|
+
'enforcement',
|
|
136
|
+
'damageControl',
|
|
137
|
+
'storyDecomposition',
|
|
138
|
+
'specificationMode',
|
|
139
|
+
];
|
|
140
|
+
|
|
141
|
+
module.exports = {
|
|
142
|
+
TIMEOUTS,
|
|
143
|
+
LIMITS,
|
|
144
|
+
THRESHOLDS,
|
|
145
|
+
BACKOFF,
|
|
146
|
+
KNOWN_CONFIG_KEYS,
|
|
147
|
+
|
|
148
|
+
// Legacy exports for backwards compatibility
|
|
149
|
+
DEFAULT_COMMAND_TIMEOUT_MS: TIMEOUTS.DEFAULT_COMMAND,
|
|
150
|
+
QUICK_COMMAND_TIMEOUT_MS: TIMEOUTS.QUICK_COMMAND,
|
|
151
|
+
LOCK_STALE_THRESHOLD_MS: TIMEOUTS.LOCK_STALE,
|
|
152
|
+
CLEANUP_LOCK_STALE_MS: TIMEOUTS.LOCK_CLEANUP_STALE,
|
|
153
|
+
LOCK_RETRY_DELAY_MS: TIMEOUTS.LOCK_RETRY_DELAY,
|
|
154
|
+
LOCK_MAX_RETRIES: LIMITS.LOCK_MAX_RETRIES,
|
|
155
|
+
MAX_SESSION_HISTORY: LIMITS.MAX_SESSION_HISTORY,
|
|
156
|
+
MAX_WORKFLOW_ITERATIONS: LIMITS.MAX_WORKFLOW_ITERATIONS,
|
|
157
|
+
};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Wogi Flow - Load Task Context
|
|
4
|
+
# Gather all context needed to implement a task
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
WORKFLOW_DIR=".workflow"
|
|
9
|
+
|
|
10
|
+
# Colors
|
|
11
|
+
GREEN='\033[0;32m'
|
|
12
|
+
YELLOW='\033[1;33m'
|
|
13
|
+
CYAN='\033[0;36m'
|
|
14
|
+
RED='\033[0;31m'
|
|
15
|
+
NC='\033[0m'
|
|
16
|
+
|
|
17
|
+
if [ -z "$1" ]; then
|
|
18
|
+
echo "Usage: flow context <task-id>"
|
|
19
|
+
echo ""
|
|
20
|
+
echo "Loads all context for implementing a task:"
|
|
21
|
+
echo " - Task story and acceptance criteria"
|
|
22
|
+
echo " - Related request-log entries"
|
|
23
|
+
echo " - Referenced component docs"
|
|
24
|
+
echo " - Relevant decisions"
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
TASK_ID="$1"
|
|
29
|
+
|
|
30
|
+
echo -e "${CYAN}═══════════════════════════════════════${NC}"
|
|
31
|
+
echo -e "${CYAN} Context for: $TASK_ID${NC}"
|
|
32
|
+
echo -e "${CYAN}═══════════════════════════════════════${NC}"
|
|
33
|
+
echo ""
|
|
34
|
+
|
|
35
|
+
# Find the task story file
|
|
36
|
+
STORY_FILE=""
|
|
37
|
+
for file in "$WORKFLOW_DIR/changes"/*/"$TASK_ID.md" "$WORKFLOW_DIR/changes"/*/*.md; do
|
|
38
|
+
if [ -f "$file" ] && grep -q "$TASK_ID" "$file" 2>/dev/null; then
|
|
39
|
+
STORY_FILE="$file"
|
|
40
|
+
break
|
|
41
|
+
fi
|
|
42
|
+
done
|
|
43
|
+
|
|
44
|
+
# 1. Task Story
|
|
45
|
+
echo -e "${GREEN}📋 STORY${NC}"
|
|
46
|
+
echo "─────────────────────────────────────"
|
|
47
|
+
if [ -n "$STORY_FILE" ] && [ -f "$STORY_FILE" ]; then
|
|
48
|
+
cat "$STORY_FILE"
|
|
49
|
+
else
|
|
50
|
+
# Try to find in tasks.json
|
|
51
|
+
for tasks_file in "$WORKFLOW_DIR/changes"/*/tasks.json; do
|
|
52
|
+
if [ -f "$tasks_file" ]; then
|
|
53
|
+
task_info=$(python3 -c "
|
|
54
|
+
import json
|
|
55
|
+
with open('$tasks_file') as f:
|
|
56
|
+
data = json.load(f)
|
|
57
|
+
for task in data.get('tasks', []):
|
|
58
|
+
if task.get('id') == '$TASK_ID':
|
|
59
|
+
print(f\"Title: {task.get('title', 'N/A')}\")
|
|
60
|
+
print(f\"Status: {task.get('status', 'N/A')}\")
|
|
61
|
+
print(f\"Priority: {task.get('priority', 'N/A')}\")
|
|
62
|
+
us = task.get('userStory', {})
|
|
63
|
+
if us:
|
|
64
|
+
print(f\"\\nUser Story:\")
|
|
65
|
+
print(f\" As a {us.get('asA', '?')}\")
|
|
66
|
+
print(f\" I want {us.get('iWant', '?')}\")
|
|
67
|
+
print(f\" So that {us.get('soThat', '?')}\")
|
|
68
|
+
print(f\"\\nDescription: {task.get('description', 'N/A')}\")
|
|
69
|
+
ac = task.get('acceptanceCriteria', [])
|
|
70
|
+
if ac:
|
|
71
|
+
print(f\"\\nAcceptance Criteria:\")
|
|
72
|
+
for c in ac:
|
|
73
|
+
if isinstance(c, dict):
|
|
74
|
+
print(f\" {c.get('scenario', 'Scenario')}:\")
|
|
75
|
+
print(f\" Given {c.get('given', '?')}\")
|
|
76
|
+
print(f\" When {c.get('when', '?')}\")
|
|
77
|
+
print(f\" Then {c.get('then', '?')}\")
|
|
78
|
+
else:
|
|
79
|
+
print(f\" - {c}\")
|
|
80
|
+
break
|
|
81
|
+
" 2>/dev/null || true)
|
|
82
|
+
if [ -n "$task_info" ]; then
|
|
83
|
+
echo "$task_info"
|
|
84
|
+
break
|
|
85
|
+
fi
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
88
|
+
fi
|
|
89
|
+
echo ""
|
|
90
|
+
|
|
91
|
+
# 2. Related Request Log Entries
|
|
92
|
+
echo -e "${GREEN}📜 RELATED HISTORY${NC}"
|
|
93
|
+
echo "─────────────────────────────────────"
|
|
94
|
+
if [ -f "$WORKFLOW_DIR/state/request-log.md" ]; then
|
|
95
|
+
# Search for task ID or related tags
|
|
96
|
+
related=$(grep -B1 -A5 "$TASK_ID" "$WORKFLOW_DIR/state/request-log.md" 2>/dev/null | head -30 || true)
|
|
97
|
+
if [ -n "$related" ]; then
|
|
98
|
+
echo "$related"
|
|
99
|
+
else
|
|
100
|
+
echo "No related entries found in request-log"
|
|
101
|
+
fi
|
|
102
|
+
fi
|
|
103
|
+
echo ""
|
|
104
|
+
|
|
105
|
+
# 3. Referenced Components
|
|
106
|
+
echo -e "${GREEN}🧩 COMPONENTS${NC}"
|
|
107
|
+
echo "─────────────────────────────────────"
|
|
108
|
+
if [ -f "$WORKFLOW_DIR/state/app-map.md" ]; then
|
|
109
|
+
echo "Available components:"
|
|
110
|
+
grep "^|" "$WORKFLOW_DIR/state/app-map.md" | grep -v "^| ---" | grep -v "^| Component" | grep -v "^| Screen" | grep -v "^| Modal" | head -15
|
|
111
|
+
fi
|
|
112
|
+
echo ""
|
|
113
|
+
|
|
114
|
+
# 4. Relevant Decisions
|
|
115
|
+
echo -e "${GREEN}📏 DECISIONS${NC}"
|
|
116
|
+
echo "─────────────────────────────────────"
|
|
117
|
+
if [ -f "$WORKFLOW_DIR/state/decisions.md" ]; then
|
|
118
|
+
# Show component and coding standards sections
|
|
119
|
+
head -50 "$WORKFLOW_DIR/state/decisions.md" | tail -40
|
|
120
|
+
fi
|
|
121
|
+
echo ""
|
|
122
|
+
|
|
123
|
+
# 5. Dependencies
|
|
124
|
+
echo -e "${GREEN}🔗 DEPENDENCIES${NC}"
|
|
125
|
+
echo "─────────────────────────────────────"
|
|
126
|
+
for tasks_file in "$WORKFLOW_DIR/changes"/*/tasks.json; do
|
|
127
|
+
if [ -f "$tasks_file" ]; then
|
|
128
|
+
python3 -c "
|
|
129
|
+
import json
|
|
130
|
+
with open('$tasks_file') as f:
|
|
131
|
+
data = json.load(f)
|
|
132
|
+
for task in data.get('tasks', []):
|
|
133
|
+
if task.get('id') == '$TASK_ID':
|
|
134
|
+
deps = task.get('dependencies', [])
|
|
135
|
+
if deps:
|
|
136
|
+
print('Depends on:')
|
|
137
|
+
for d in deps:
|
|
138
|
+
print(f' - {d}')
|
|
139
|
+
else:
|
|
140
|
+
print('No dependencies')
|
|
141
|
+
break
|
|
142
|
+
" 2>/dev/null || true
|
|
143
|
+
fi
|
|
144
|
+
done
|
|
145
|
+
echo ""
|
|
146
|
+
|
|
147
|
+
echo -e "${CYAN}═══════════════════════════════════════${NC}"
|
|
148
|
+
echo ""
|
|
149
|
+
echo "Ready to implement. Remember to:"
|
|
150
|
+
echo " 1. Follow acceptance criteria exactly"
|
|
151
|
+
echo " 2. Check app-map before creating components"
|
|
152
|
+
echo " 3. Log changes to request-log"
|