ariadna 1.2.1 → 1.2.2
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.
- checksums.yaml +4 -4
- data/data/agents/ariadna-backend-executor.md +5 -5
- data/data/agents/ariadna-codebase-mapper.md +5 -5
- data/data/agents/ariadna-debugger.md +13 -13
- data/data/agents/ariadna-executor.md +5 -5
- data/data/agents/ariadna-frontend-executor.md +5 -5
- data/data/agents/ariadna-integration-checker.md +1 -1
- data/data/agents/ariadna-phase-researcher.md +1 -1
- data/data/agents/ariadna-planner.md +17 -17
- data/data/agents/ariadna-project-researcher.md +10 -10
- data/data/agents/ariadna-research-synthesizer.md +11 -11
- data/data/agents/ariadna-roadmapper.md +8 -8
- data/data/agents/ariadna-test-executor.md +5 -5
- data/data/agents/ariadna-verifier.md +4 -4
- data/data/ariadna/references/decimal-phase-calculation.md +2 -2
- data/data/ariadna/references/git-integration.md +4 -4
- data/data/ariadna/references/git-planning-commit.md +7 -7
- data/data/ariadna/references/model-profile-resolution.md +1 -1
- data/data/ariadna/references/model-profiles.md +2 -2
- data/data/ariadna/references/planning-config.md +13 -13
- data/data/ariadna/references/tdd.md +2 -2
- data/data/ariadna/templates/DEBUG.md +2 -2
- data/data/ariadna/templates/UAT.md +3 -3
- data/data/ariadna/templates/codebase/architecture.md +1 -1
- data/data/ariadna/templates/codebase/concerns.md +1 -1
- data/data/ariadna/templates/codebase/conventions.md +1 -1
- data/data/ariadna/templates/codebase/integrations.md +1 -1
- data/data/ariadna/templates/codebase/stack.md +1 -1
- data/data/ariadna/templates/codebase/structure.md +1 -1
- data/data/ariadna/templates/codebase/testing.md +1 -1
- data/data/ariadna/templates/context.md +2 -2
- data/data/ariadna/templates/continue-here.md +1 -1
- data/data/ariadna/templates/debug-subagent-prompt.md +2 -2
- data/data/ariadna/templates/discovery.md +2 -2
- data/data/ariadna/templates/milestone-archive.md +4 -4
- data/data/ariadna/templates/milestone.md +1 -1
- data/data/ariadna/templates/phase-prompt.md +19 -19
- data/data/ariadna/templates/planner-subagent-prompt.md +9 -9
- data/data/ariadna/templates/project.md +2 -2
- data/data/ariadna/templates/requirements.md +1 -1
- data/data/ariadna/templates/research-project/ARCHITECTURE.md +1 -1
- data/data/ariadna/templates/research-project/FEATURES.md +1 -1
- data/data/ariadna/templates/research-project/PITFALLS.md +1 -1
- data/data/ariadna/templates/research-project/STACK.md +1 -1
- data/data/ariadna/templates/research-project/SUMMARY.md +1 -1
- data/data/ariadna/templates/research.md +2 -2
- data/data/ariadna/templates/roadmap.md +1 -1
- data/data/ariadna/templates/state.md +4 -4
- data/data/ariadna/templates/summary.md +1 -1
- data/data/ariadna/templates/user-setup.md +2 -2
- data/data/ariadna/templates/verification-report.md +1 -1
- data/data/ariadna/workflows/add-phase.md +5 -5
- data/data/ariadna/workflows/add-todo.md +7 -7
- data/data/ariadna/workflows/audit-milestone.md +7 -7
- data/data/ariadna/workflows/check-todos.md +4 -4
- data/data/ariadna/workflows/complete-milestone.md +18 -18
- data/data/ariadna/workflows/diagnose-issues.md +4 -4
- data/data/ariadna/workflows/discovery-phase.md +4 -4
- data/data/ariadna/workflows/discuss-phase.md +2 -2
- data/data/ariadna/workflows/execute-phase.md +4 -4
- data/data/ariadna/workflows/execute-plan.md +19 -19
- data/data/ariadna/workflows/help.md +18 -18
- data/data/ariadna/workflows/insert-phase.md +6 -6
- data/data/ariadna/workflows/list-phase-assumptions.md +1 -1
- data/data/ariadna/workflows/map-codebase.md +22 -22
- data/data/ariadna/workflows/new-milestone.md +16 -16
- data/data/ariadna/workflows/new-project.md +39 -39
- data/data/ariadna/workflows/pause-work.md +4 -4
- data/data/ariadna/workflows/plan-milestone-gaps.md +4 -4
- data/data/ariadna/workflows/plan-phase.md +3 -3
- data/data/ariadna/workflows/progress.md +6 -6
- data/data/ariadna/workflows/quick.md +6 -6
- data/data/ariadna/workflows/remove-phase.md +3 -3
- data/data/ariadna/workflows/research-phase.md +4 -4
- data/data/ariadna/workflows/resume-project.md +9 -9
- data/data/ariadna/workflows/set-profile.md +2 -2
- data/data/ariadna/workflows/settings.md +4 -4
- data/data/ariadna/workflows/transition.md +11 -11
- data/data/ariadna/workflows/verify-phase.md +2 -2
- data/data/ariadna/workflows/verify-work.md +8 -8
- data/data/commands/ariadna/add-phase.md +2 -2
- data/data/commands/ariadna/add-todo.md +1 -1
- data/data/commands/ariadna/audit-milestone.md +6 -6
- data/data/commands/ariadna/check-todos.md +2 -2
- data/data/commands/ariadna/complete-milestone.md +11 -11
- data/data/commands/ariadna/debug.md +3 -3
- data/data/commands/ariadna/discuss-phase.md +2 -2
- data/data/commands/ariadna/execute-phase.md +2 -2
- data/data/commands/ariadna/insert-phase.md +2 -2
- data/data/commands/ariadna/list-phase-assumptions.md +2 -2
- data/data/commands/ariadna/map-codebase.md +7 -7
- data/data/commands/ariadna/new-milestone.md +10 -10
- data/data/commands/ariadna/new-project.md +6 -6
- data/data/commands/ariadna/pause-work.md +1 -1
- data/data/commands/ariadna/plan-milestone-gaps.md +5 -5
- data/data/commands/ariadna/quick.md +2 -2
- data/data/commands/ariadna/remove-phase.md +2 -2
- data/data/commands/ariadna/research-phase.md +6 -6
- data/data/commands/ariadna/verify-work.md +2 -2
- data/data/statusline/ariadna-statusline.sh +47 -0
- data/data/templates.md +1 -1
- data/exe/ariadna +2 -1
- data/lib/ariadna/installer.rb +30 -1
- data/lib/ariadna/tools/config_manager.rb +5 -5
- data/lib/ariadna/tools/git_integration.rb +2 -2
- data/lib/ariadna/tools/init.rb +61 -61
- data/lib/ariadna/tools/phase_manager.rb +11 -11
- data/lib/ariadna/tools/roadmap_analyzer.rb +5 -5
- data/lib/ariadna/tools/state_manager.rb +14 -14
- data/lib/ariadna/tools/template_filler.rb +5 -5
- data/lib/ariadna/tools/utilities.rb +4 -4
- data/lib/ariadna/tools/verification.rb +4 -4
- data/lib/ariadna/uninstaller.rb +17 -0
- data/lib/ariadna/version.rb +1 -1
- metadata +2 -1
|
@@ -32,10 +32,10 @@ Extract implementation decisions that downstream agents need — researcher and
|
|
|
32
32
|
Phase number: $ARGUMENTS (required)
|
|
33
33
|
|
|
34
34
|
**Load project state:**
|
|
35
|
-
@.
|
|
35
|
+
@.ariadna_planning/STATE.md
|
|
36
36
|
|
|
37
37
|
**Load roadmap:**
|
|
38
|
-
@.
|
|
38
|
+
@.ariadna_planning/ROADMAP.md
|
|
39
39
|
</context>
|
|
40
40
|
|
|
41
41
|
<process>
|
|
@@ -44,8 +44,8 @@ Phase: $ARGUMENTS
|
|
|
44
44
|
- `--team` — Use team-based execution with domain-specialized agents instead of wave-based execution.
|
|
45
45
|
- `--no-team` — Force wave-based execution even when auto-detection would choose team mode.
|
|
46
46
|
|
|
47
|
-
@.
|
|
48
|
-
@.
|
|
47
|
+
@.ariadna_planning/ROADMAP.md
|
|
48
|
+
@.ariadna_planning/STATE.md
|
|
49
49
|
</context>
|
|
50
50
|
|
|
51
51
|
<process>
|
|
@@ -23,8 +23,8 @@ Purpose: Handle urgent work discovered during execution without renumbering enti
|
|
|
23
23
|
<context>
|
|
24
24
|
Arguments: $ARGUMENTS (format: <after-phase-number> <description>)
|
|
25
25
|
|
|
26
|
-
@.
|
|
27
|
-
@.
|
|
26
|
+
@.ariadna_planning/ROADMAP.md
|
|
27
|
+
@.ariadna_planning/STATE.md
|
|
28
28
|
</context>
|
|
29
29
|
|
|
30
30
|
<process>
|
|
@@ -24,10 +24,10 @@ Output: Conversational output only (no file creation) - ends with "What do you t
|
|
|
24
24
|
Phase number: $ARGUMENTS (required)
|
|
25
25
|
|
|
26
26
|
**Load project state first:**
|
|
27
|
-
@.
|
|
27
|
+
@.ariadna_planning/STATE.md
|
|
28
28
|
|
|
29
29
|
**Load roadmap:**
|
|
30
|
-
@.
|
|
30
|
+
@.ariadna_planning/ROADMAP.md
|
|
31
31
|
</context>
|
|
32
32
|
|
|
33
33
|
<process>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ariadna:map-codebase
|
|
3
|
-
description: Analyze codebase with parallel mapper agents to produce .
|
|
3
|
+
description: Analyze codebase with parallel mapper agents to produce .ariadna_planning/codebase/ documents
|
|
4
4
|
argument-hint: "[optional: specific area to map, e.g., 'api' or 'auth']"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
@@ -14,9 +14,9 @@ allowed-tools:
|
|
|
14
14
|
<objective>
|
|
15
15
|
Analyze existing codebase using parallel ariadna-codebase-mapper agents to produce structured codebase documents.
|
|
16
16
|
|
|
17
|
-
Each mapper agent explores a focus area and **writes documents directly** to `.
|
|
17
|
+
Each mapper agent explores a focus area and **writes documents directly** to `.ariadna_planning/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
|
|
18
18
|
|
|
19
|
-
Output: .
|
|
19
|
+
Output: .ariadna_planning/codebase/ folder with 7 structured documents about the codebase state.
|
|
20
20
|
</objective>
|
|
21
21
|
|
|
22
22
|
<execution_context>
|
|
@@ -27,7 +27,7 @@ Output: .planning/codebase/ folder with 7 structured documents about the codebas
|
|
|
27
27
|
Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specific subsystem)
|
|
28
28
|
|
|
29
29
|
**Load project state if exists:**
|
|
30
|
-
Check for .
|
|
30
|
+
Check for .ariadna_planning/STATE.md - loads context if project already initialized
|
|
31
31
|
|
|
32
32
|
**This command can run:**
|
|
33
33
|
- Before /ariadna:new-project (brownfield codebases) - creates codebase map first
|
|
@@ -49,8 +49,8 @@ Check for .planning/STATE.md - loads context if project already initialized
|
|
|
49
49
|
</when_to_use>
|
|
50
50
|
|
|
51
51
|
<process>
|
|
52
|
-
1. Check if .
|
|
53
|
-
2. Create .
|
|
52
|
+
1. Check if .ariadna_planning/codebase/ already exists (offer to refresh or skip)
|
|
53
|
+
2. Create .ariadna_planning/codebase/ directory structure
|
|
54
54
|
3. Spawn 4 parallel ariadna-codebase-mapper agents:
|
|
55
55
|
- Agent 1: tech focus → writes STACK.md, INTEGRATIONS.md
|
|
56
56
|
- Agent 2: arch focus → writes ARCHITECTURE.md, STRUCTURE.md
|
|
@@ -63,7 +63,7 @@ Check for .planning/STATE.md - loads context if project already initialized
|
|
|
63
63
|
</process>
|
|
64
64
|
|
|
65
65
|
<success_criteria>
|
|
66
|
-
- [ ] .
|
|
66
|
+
- [ ] .ariadna_planning/codebase/ directory created
|
|
67
67
|
- [ ] All 7 codebase documents written by mapper agents
|
|
68
68
|
- [ ] Documents follow template structure
|
|
69
69
|
- [ ] Parallel agents completed without errors
|
|
@@ -15,11 +15,11 @@ Start a new milestone: questioning → research (optional) → requirements →
|
|
|
15
15
|
Brownfield equivalent of new-project. Project exists, PROJECT.md has history. Gathers "what's next", updates PROJECT.md, then runs requirements → roadmap cycle.
|
|
16
16
|
|
|
17
17
|
**Creates/Updates:**
|
|
18
|
-
- `.
|
|
19
|
-
- `.
|
|
20
|
-
- `.
|
|
21
|
-
- `.
|
|
22
|
-
- `.
|
|
18
|
+
- `.ariadna_planning/PROJECT.md` — updated with new milestone goals
|
|
19
|
+
- `.ariadna_planning/research/` — domain research (optional, NEW features only)
|
|
20
|
+
- `.ariadna_planning/REQUIREMENTS.md` — scoped requirements for this milestone
|
|
21
|
+
- `.ariadna_planning/ROADMAP.md` — phase structure (continues numbering)
|
|
22
|
+
- `.ariadna_planning/STATE.md` — reset for new milestone
|
|
23
23
|
|
|
24
24
|
**After:** `/ariadna:plan-phase [N]` to start execution.
|
|
25
25
|
</objective>
|
|
@@ -36,13 +36,13 @@ Brownfield equivalent of new-project. Project exists, PROJECT.md has history. Ga
|
|
|
36
36
|
Milestone name: $ARGUMENTS (optional - will prompt if not provided)
|
|
37
37
|
|
|
38
38
|
**Load project context:**
|
|
39
|
-
@.
|
|
40
|
-
@.
|
|
41
|
-
@.
|
|
42
|
-
@.
|
|
39
|
+
@.ariadna_planning/PROJECT.md
|
|
40
|
+
@.ariadna_planning/STATE.md
|
|
41
|
+
@.ariadna_planning/MILESTONES.md
|
|
42
|
+
@.ariadna_planning/config.json
|
|
43
43
|
|
|
44
44
|
**Load milestone context (if exists, from /ariadna:discuss-milestone):**
|
|
45
|
-
@.
|
|
45
|
+
@.ariadna_planning/MILESTONE-CONTEXT.md
|
|
46
46
|
</context>
|
|
47
47
|
|
|
48
48
|
<process>
|
|
@@ -19,12 +19,12 @@ allowed-tools:
|
|
|
19
19
|
Initialize a new project through streamlined flow: questioning → requirements → roadmap. Research skipped by default (Rails conventions pre-loaded); use --research for non-standard domains.
|
|
20
20
|
|
|
21
21
|
**Creates:**
|
|
22
|
-
- `.
|
|
23
|
-
- `.
|
|
24
|
-
- `.
|
|
25
|
-
- `.
|
|
26
|
-
- `.
|
|
27
|
-
- `.
|
|
22
|
+
- `.ariadna_planning/PROJECT.md` — project context
|
|
23
|
+
- `.ariadna_planning/config.json` — workflow preferences (opinionated defaults)
|
|
24
|
+
- `.ariadna_planning/research/` — domain research (only with --research flag)
|
|
25
|
+
- `.ariadna_planning/REQUIREMENTS.md` — scoped requirements
|
|
26
|
+
- `.ariadna_planning/ROADMAP.md` — phase structure
|
|
27
|
+
- `.ariadna_planning/STATE.md` — project memory
|
|
28
28
|
|
|
29
29
|
**After this command:** Run `/ariadna:plan-phase 1` to start planning.
|
|
30
30
|
</objective>
|
|
@@ -23,15 +23,15 @@ One command creates all fix phases — no manual `/ariadna:add-phase` per gap.
|
|
|
23
23
|
|
|
24
24
|
<context>
|
|
25
25
|
**Audit results:**
|
|
26
|
-
Glob: .
|
|
26
|
+
Glob: .ariadna_planning/v*-MILESTONE-AUDIT.md (use most recent)
|
|
27
27
|
|
|
28
28
|
**Original intent (for prioritization):**
|
|
29
|
-
@.
|
|
30
|
-
@.
|
|
29
|
+
@.ariadna_planning/PROJECT.md
|
|
30
|
+
@.ariadna_planning/REQUIREMENTS.md
|
|
31
31
|
|
|
32
32
|
**Current state:**
|
|
33
|
-
@.
|
|
34
|
-
@.
|
|
33
|
+
@.ariadna_planning/ROADMAP.md
|
|
34
|
+
@.ariadna_planning/STATE.md
|
|
35
35
|
</context>
|
|
36
36
|
|
|
37
37
|
<process>
|
|
@@ -18,7 +18,7 @@ Execute small, ad-hoc tasks with Ariadna guarantees (atomic commits, STATE.md tr
|
|
|
18
18
|
Quick mode is the same system with a shorter path:
|
|
19
19
|
- Spawns ariadna-planner (quick mode) + ariadna-executor(s)
|
|
20
20
|
- Skips ariadna-phase-researcher, ariadna-plan-checker, ariadna-verifier
|
|
21
|
-
- Quick tasks live in `.
|
|
21
|
+
- Quick tasks live in `.ariadna_planning/quick/` separate from planned phases
|
|
22
22
|
- Updates STATE.md "Quick Tasks Completed" table (NOT ROADMAP.md)
|
|
23
23
|
|
|
24
24
|
Use when: You know exactly what to do and the task is small enough to not need research or verification.
|
|
@@ -29,7 +29,7 @@ Use when: You know exactly what to do and the task is small enough to not need r
|
|
|
29
29
|
</execution_context>
|
|
30
30
|
|
|
31
31
|
<context>
|
|
32
|
-
@.
|
|
32
|
+
@.ariadna_planning/STATE.md
|
|
33
33
|
</context>
|
|
34
34
|
|
|
35
35
|
<process>
|
|
@@ -22,8 +22,8 @@ Output: Phase deleted, all subsequent phases renumbered, git commit as historica
|
|
|
22
22
|
<context>
|
|
23
23
|
Phase: $ARGUMENTS
|
|
24
24
|
|
|
25
|
-
@.
|
|
26
|
-
@.
|
|
25
|
+
@.ariadna_planning/ROADMAP.md
|
|
26
|
+
@.ariadna_planning/STATE.md
|
|
27
27
|
</context>
|
|
28
28
|
|
|
29
29
|
<process>
|
|
@@ -55,7 +55,7 @@ PHASE_INFO=$(ariadna-tools roadmap get-phase "${phase_number}")
|
|
|
55
55
|
## 2. Check Existing Research
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
ls .
|
|
58
|
+
ls .ariadna_planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
**If exists:** Offer: 1) Update research, 2) View existing, 3) Skip. Wait for response.
|
|
@@ -67,9 +67,9 @@ ls .planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null
|
|
|
67
67
|
```bash
|
|
68
68
|
# Phase section already loaded in PHASE_INFO
|
|
69
69
|
echo "$PHASE_INFO" | jq -r '.section'
|
|
70
|
-
cat .
|
|
71
|
-
cat .
|
|
72
|
-
grep -A30 "### Decisions Made" .
|
|
70
|
+
cat .ariadna_planning/REQUIREMENTS.md 2>/dev/null
|
|
71
|
+
cat .ariadna_planning/phases/${PHASE}-*/*-CONTEXT.md 2>/dev/null
|
|
72
|
+
grep -A30 "### Decisions Made" .ariadna_planning/STATE.md 2>/dev/null
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Present summary with phase description, requirements, prior decisions.
|
|
@@ -129,7 +129,7 @@ Before declaring complete, verify:
|
|
|
129
129
|
</quality_gate>
|
|
130
130
|
|
|
131
131
|
<output>
|
|
132
|
-
Write to: .
|
|
132
|
+
Write to: .ariadna_planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
|
|
133
133
|
</output>
|
|
134
134
|
```
|
|
135
135
|
|
|
@@ -158,7 +158,7 @@ Continue research for Phase {phase_number}: {phase_name}
|
|
|
158
158
|
</objective>
|
|
159
159
|
|
|
160
160
|
<prior_state>
|
|
161
|
-
Research file: @.
|
|
161
|
+
Research file: @.ariadna_planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
|
|
162
162
|
</prior_state>
|
|
163
163
|
|
|
164
164
|
<checkpoint_response>
|
|
@@ -29,8 +29,8 @@ Phase: $ARGUMENTS (optional)
|
|
|
29
29
|
- If provided: Test specific phase (e.g., "4")
|
|
30
30
|
- If not provided: Check for active sessions or prompt for phase
|
|
31
31
|
|
|
32
|
-
@.
|
|
33
|
-
@.
|
|
32
|
+
@.ariadna_planning/STATE.md
|
|
33
|
+
@.ariadna_planning/ROADMAP.md
|
|
34
34
|
</context>
|
|
35
35
|
|
|
36
36
|
<process>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Ariadna statusline for Claude Code
|
|
3
|
+
|
|
4
|
+
input=$(cat)
|
|
5
|
+
|
|
6
|
+
# Require jq
|
|
7
|
+
if ! command -v jq &>/dev/null; then
|
|
8
|
+
echo "ariadna: jq required for statusline"
|
|
9
|
+
exit 0
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
MODEL=$(echo "$input" | jq -r '.model.display_name // "unknown"')
|
|
13
|
+
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
|
|
14
|
+
CWD=$(echo "$input" | jq -r '.cwd // ""')
|
|
15
|
+
|
|
16
|
+
# Scale to 80% effective limit (Claude Code compresses at ~80%)
|
|
17
|
+
SCALED=$(( PCT * 100 / 80 ))
|
|
18
|
+
[ "$SCALED" -gt 100 ] && SCALED=100
|
|
19
|
+
|
|
20
|
+
# Color based on scaled percentage
|
|
21
|
+
if [ "$SCALED" -ge 80 ]; then
|
|
22
|
+
COLOR='\033[31m' # Red
|
|
23
|
+
elif [ "$SCALED" -ge 60 ]; then
|
|
24
|
+
COLOR='\033[33m' # Yellow
|
|
25
|
+
else
|
|
26
|
+
COLOR='\033[32m' # Green
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# Progress bar (10 chars)
|
|
30
|
+
FILLED=$(( SCALED / 10 ))
|
|
31
|
+
EMPTY=$(( 10 - FILLED ))
|
|
32
|
+
BAR=$(printf "%${FILLED}s" | tr ' ' '█')$(printf "%${EMPTY}s" | tr ' ' '░')
|
|
33
|
+
|
|
34
|
+
# Phase info from STATE.md
|
|
35
|
+
PHASE=""
|
|
36
|
+
if [ -n "$CWD" ] && [ -f "$CWD/.ariadna_planning/STATE.md" ]; then
|
|
37
|
+
PHASE=$(grep -m1 '^Phase:' "$CWD/.ariadna_planning/STATE.md" | sed 's/^Phase:[[:space:]]*//')
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Build output
|
|
41
|
+
DIM='\033[2m'
|
|
42
|
+
RESET='\033[0m'
|
|
43
|
+
if [ -n "$PHASE" ]; then
|
|
44
|
+
echo -e "${DIM}${MODEL}${RESET} │ ${PHASE} ${COLOR}${BAR}${RESET} ${PCT}%"
|
|
45
|
+
else
|
|
46
|
+
echo -e "${DIM}${MODEL}${RESET} ${COLOR}${BAR}${RESET} ${PCT}%"
|
|
47
|
+
fi
|
data/data/templates.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Context
|
|
4
4
|
|
|
5
|
-
The templates in `data/ariadna/templates/codebase/` are used by Ariadna's codebase mapping agents to generate `.
|
|
5
|
+
The templates in `data/ariadna/templates/codebase/` are used by Ariadna's codebase mapping agents to generate `.ariadna_planning/codebase/` documents when analyzing a Rails project. Currently, all templates except `architecture.md` are generic/framework-agnostic with JavaScript/TypeScript examples (Next.js, Vitest, npm, etc.). Since Ariadna is targeting Ruby on Rails applications, these templates should use Rails-specific terminology, examples, tools, and patterns.
|
|
6
6
|
|
|
7
7
|
`architecture.md` has already been updated and serves as the reference for style and approach.
|
|
8
8
|
|
data/exe/ariadna
CHANGED
|
@@ -9,6 +9,7 @@ case command
|
|
|
9
9
|
when "install"
|
|
10
10
|
global = ARGV.include?("--global") || ARGV.include?("-g")
|
|
11
11
|
local = ARGV.include?("--local") || ARGV.include?("-l")
|
|
12
|
+
force_statusline = ARGV.include?("--force-statusline")
|
|
12
13
|
|
|
13
14
|
unless global || local
|
|
14
15
|
warn "Usage: ariadna install --global (install to ~/.claude/)"
|
|
@@ -16,7 +17,7 @@ when "install"
|
|
|
16
17
|
exit 1
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
Ariadna::Installer.new(local: local).install
|
|
20
|
+
Ariadna::Installer.new(local: local, force_statusline: force_statusline).install
|
|
20
21
|
when "uninstall"
|
|
21
22
|
require "ariadna/uninstaller"
|
|
22
23
|
global = ARGV.include?("--global") || ARGV.include?("-g")
|
data/lib/ariadna/installer.rb
CHANGED
|
@@ -7,9 +7,10 @@ module Ariadna
|
|
|
7
7
|
MANIFEST_NAME = "ariadna-manifest.json"
|
|
8
8
|
PATCHES_DIR = "ariadna-local-patches"
|
|
9
9
|
|
|
10
|
-
def initialize(target_dir: nil, local: false)
|
|
10
|
+
def initialize(target_dir: nil, local: false, force_statusline: false)
|
|
11
11
|
@local = local
|
|
12
12
|
@target_dir = target_dir || default_target_dir
|
|
13
|
+
@force_statusline = force_statusline
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
def install
|
|
@@ -23,6 +24,7 @@ module Ariadna
|
|
|
23
24
|
copy_guides
|
|
24
25
|
copy_content
|
|
25
26
|
write_version
|
|
27
|
+
install_statusline
|
|
26
28
|
write_manifest
|
|
27
29
|
|
|
28
30
|
report_local_patches
|
|
@@ -135,6 +137,7 @@ module Ariadna
|
|
|
135
137
|
keys << rel
|
|
136
138
|
end
|
|
137
139
|
end
|
|
140
|
+
keys << "ariadna-statusline.sh"
|
|
138
141
|
keys
|
|
139
142
|
end
|
|
140
143
|
|
|
@@ -154,6 +157,28 @@ module Ariadna
|
|
|
154
157
|
end
|
|
155
158
|
end
|
|
156
159
|
|
|
160
|
+
# --- Statusline ---
|
|
161
|
+
|
|
162
|
+
def install_statusline
|
|
163
|
+
src = File.join(source_dir, "statusline", "ariadna-statusline.sh")
|
|
164
|
+
dest = File.join(@target_dir, "ariadna-statusline.sh")
|
|
165
|
+
|
|
166
|
+
FileUtils.cp(src, dest)
|
|
167
|
+
FileUtils.chmod(0o755, dest)
|
|
168
|
+
|
|
169
|
+
settings_path = File.join(@target_dir, "settings.json")
|
|
170
|
+
settings = File.exist?(settings_path) ? JSON.parse(File.read(settings_path)) : {}
|
|
171
|
+
|
|
172
|
+
if settings.key?("statusLine") && !@force_statusline
|
|
173
|
+
puts " i Existing statusLine config found \u2014 skipping (use --force-statusline to replace)"
|
|
174
|
+
return
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
settings["statusLine"] = { "type" => "command", "command" => dest }
|
|
178
|
+
File.write(settings_path, JSON.pretty_generate(settings))
|
|
179
|
+
puts " \u2713 Installed statusline"
|
|
180
|
+
end
|
|
181
|
+
|
|
157
182
|
# --- Copy operations ---
|
|
158
183
|
|
|
159
184
|
def copy_commands
|
|
@@ -226,6 +251,10 @@ module Ariadna
|
|
|
226
251
|
entries[rel] = Digest::SHA256.file(file).hexdigest
|
|
227
252
|
end
|
|
228
253
|
end
|
|
254
|
+
|
|
255
|
+
statusline_path = File.join(@target_dir, "ariadna-statusline.sh")
|
|
256
|
+
entries["ariadna-statusline.sh"] = Digest::SHA256.file(statusline_path).hexdigest if File.exist?(statusline_path)
|
|
257
|
+
|
|
229
258
|
entries
|
|
230
259
|
end
|
|
231
260
|
|
|
@@ -21,7 +21,7 @@ module Ariadna
|
|
|
21
21
|
}.freeze
|
|
22
22
|
|
|
23
23
|
def self.load_config(cwd = Dir.pwd)
|
|
24
|
-
config_path = File.join(cwd, ".
|
|
24
|
+
config_path = File.join(cwd, ".ariadna_planning", "config.json")
|
|
25
25
|
return DEFAULTS.dup unless File.exist?(config_path)
|
|
26
26
|
|
|
27
27
|
raw = File.read(config_path)
|
|
@@ -77,8 +77,8 @@ module Ariadna
|
|
|
77
77
|
|
|
78
78
|
def self.ensure_section(argv, raw: false)
|
|
79
79
|
cwd = Dir.pwd
|
|
80
|
-
config_path = File.join(cwd, ".
|
|
81
|
-
planning_dir = File.join(cwd, ".
|
|
80
|
+
config_path = File.join(cwd, ".ariadna_planning", "config.json")
|
|
81
|
+
planning_dir = File.join(cwd, ".ariadna_planning")
|
|
82
82
|
|
|
83
83
|
FileUtils.mkdir_p(planning_dir) unless File.directory?(planning_dir)
|
|
84
84
|
|
|
@@ -105,7 +105,7 @@ module Ariadna
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
File.write(config_path, JSON.pretty_generate(defaults))
|
|
108
|
-
Output.json({ created: true, path: ".
|
|
108
|
+
Output.json({ created: true, path: ".ariadna_planning/config.json" }, raw: raw, raw_value: "created")
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
def self.set(argv, raw: false)
|
|
@@ -114,7 +114,7 @@ module Ariadna
|
|
|
114
114
|
Output.error("Usage: config-set <key.path> <value>") unless key_path
|
|
115
115
|
|
|
116
116
|
cwd = Dir.pwd
|
|
117
|
-
config_path = File.join(cwd, ".
|
|
117
|
+
config_path = File.join(cwd, ".ariadna_planning", "config.json")
|
|
118
118
|
|
|
119
119
|
config = {}
|
|
120
120
|
if File.exist?(config_path)
|
|
@@ -22,14 +22,14 @@ module Ariadna
|
|
|
22
22
|
return
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
if git_ignored?(cwd, ".
|
|
25
|
+
if git_ignored?(cwd, ".ariadna_planning")
|
|
26
26
|
Output.json({ committed: false, hash: nil, reason: "skipped_gitignored" }, raw: raw, raw_value: "skipped")
|
|
27
27
|
return
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# Stage files
|
|
31
31
|
if files.empty?
|
|
32
|
-
exec_git(cwd, ["add", ".
|
|
32
|
+
exec_git(cwd, ["add", ".ariadna_planning/"])
|
|
33
33
|
else
|
|
34
34
|
files.each { |f| exec_git(cwd, ["add", f]) }
|
|
35
35
|
end
|