@mindfoldhq/trellis 0.1.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/LICENSE +110 -0
- package/README.md +149 -0
- package/bin/trellis.js +3 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +42 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +236 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/configurators/claude.d.ts +35 -0
- package/dist/configurators/claude.d.ts.map +1 -0
- package/dist/configurators/claude.js +83 -0
- package/dist/configurators/claude.js.map +1 -0
- package/dist/configurators/cursor.d.ts +8 -0
- package/dist/configurators/cursor.d.ts.map +1 -0
- package/dist/configurators/cursor.js +22 -0
- package/dist/configurators/cursor.js.map +1 -0
- package/dist/configurators/templates.d.ts +40 -0
- package/dist/configurators/templates.d.ts.map +1 -0
- package/dist/configurators/templates.js +67 -0
- package/dist/configurators/templates.js.map +1 -0
- package/dist/configurators/workflow.d.ts +16 -0
- package/dist/configurators/workflow.d.ts.map +1 -0
- package/dist/configurators/workflow.js +169 -0
- package/dist/configurators/workflow.js.map +1 -0
- package/dist/constants/paths.d.ts +69 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +80 -0
- package/dist/constants/paths.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/agents/check.txt +120 -0
- package/dist/templates/agents/debug.txt +121 -0
- package/dist/templates/agents/dispatch.txt +201 -0
- package/dist/templates/agents/implement.txt +114 -0
- package/dist/templates/agents/index.d.ts +35 -0
- package/dist/templates/agents/index.d.ts.map +1 -0
- package/dist/templates/agents/index.js +71 -0
- package/dist/templates/agents/index.js.map +1 -0
- package/dist/templates/agents/research.txt +258 -0
- package/dist/templates/commands/claude/start.md.txt +127 -0
- package/dist/templates/commands/common/before-backend-dev.txt +13 -0
- package/dist/templates/commands/common/before-frontend-dev.txt +13 -0
- package/dist/templates/commands/common/break-loop.txt +107 -0
- package/dist/templates/commands/common/check-backend.txt +13 -0
- package/dist/templates/commands/common/check-cross-layer.txt +153 -0
- package/dist/templates/commands/common/check-frontend.txt +13 -0
- package/dist/templates/commands/common/create-command.txt +154 -0
- package/dist/templates/commands/common/finish-work.txt +129 -0
- package/dist/templates/commands/common/integrate-skill.txt +219 -0
- package/dist/templates/commands/common/onboard-developer.txt +355 -0
- package/dist/templates/commands/common/record-agent-flow.txt +62 -0
- package/dist/templates/commands/cursor/start.md.txt +94 -0
- package/dist/templates/commands/index.d.ts +46 -0
- package/dist/templates/commands/index.d.ts.map +1 -0
- package/dist/templates/commands/index.js +151 -0
- package/dist/templates/commands/index.js.map +1 -0
- package/dist/templates/extract.d.ts +22 -0
- package/dist/templates/extract.d.ts.map +1 -0
- package/dist/templates/extract.js +34 -0
- package/dist/templates/extract.js.map +1 -0
- package/dist/templates/hooks/index.d.ts +33 -0
- package/dist/templates/hooks/index.d.ts.map +1 -0
- package/dist/templates/hooks/index.js +53 -0
- package/dist/templates/hooks/index.js.map +1 -0
- package/dist/templates/hooks/inject-subagent-context.py +620 -0
- package/dist/templates/hooks/settings.json +16 -0
- package/dist/templates/markdown/agent-traces-index.md.txt +124 -0
- package/dist/templates/markdown/agents.md.txt +18 -0
- package/dist/templates/markdown/gitignore.txt +3 -0
- package/dist/templates/markdown/index.d.ts +26 -0
- package/dist/templates/markdown/index.d.ts.map +1 -0
- package/dist/templates/markdown/index.js +33 -0
- package/dist/templates/markdown/index.js.map +1 -0
- package/dist/templates/markdown/init-agent.md.txt +315 -0
- package/dist/templates/markdown/structure/backend/database-guidelines.md.txt +51 -0
- package/dist/templates/markdown/structure/backend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/structure/backend/error-handling.md.txt +51 -0
- package/dist/templates/markdown/structure/backend/index.md.txt +38 -0
- package/dist/templates/markdown/structure/backend/logging-guidelines.md.txt +51 -0
- package/dist/templates/markdown/structure/backend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/structure/frontend/component-guidelines.md.txt +59 -0
- package/dist/templates/markdown/structure/frontend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/structure/frontend/hook-guidelines.md.txt +51 -0
- package/dist/templates/markdown/structure/frontend/index.md.txt +39 -0
- package/dist/templates/markdown/structure/frontend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/structure/frontend/state-management.md.txt +51 -0
- package/dist/templates/markdown/structure/frontend/type-safety.md.txt +51 -0
- package/dist/templates/markdown/structure/guides/code-reuse-thinking-guide.md.txt +92 -0
- package/dist/templates/markdown/structure/guides/cross-layer-thinking-guide.md.txt +94 -0
- package/dist/templates/markdown/structure/guides/index.md.txt +79 -0
- package/dist/templates/markdown/workflow.md.txt +335 -0
- package/dist/templates/scripts/add-session.sh.txt +384 -0
- package/dist/templates/scripts/common/developer.sh.txt +130 -0
- package/dist/templates/scripts/common/git-context.sh.txt +237 -0
- package/dist/templates/scripts/common/paths.sh.txt +201 -0
- package/dist/templates/scripts/create-bootstrap.sh.txt +298 -0
- package/dist/templates/scripts/feature.sh.txt +700 -0
- package/dist/templates/scripts/get-context.sh.txt +7 -0
- package/dist/templates/scripts/get-developer.sh.txt +15 -0
- package/dist/templates/scripts/index.d.ts +25 -0
- package/dist/templates/scripts/index.d.ts.map +1 -0
- package/dist/templates/scripts/index.js +28 -0
- package/dist/templates/scripts/index.js.map +1 -0
- package/dist/templates/scripts/init-developer.sh.txt +34 -0
- package/dist/types/ai-tools.d.ts +35 -0
- package/dist/types/ai-tools.d.ts.map +1 -0
- package/dist/types/ai-tools.js +31 -0
- package/dist/types/ai-tools.js.map +1 -0
- package/dist/utils/file-writer.d.ts +23 -0
- package/dist/utils/file-writer.d.ts.map +1 -0
- package/dist/utils/file-writer.js +140 -0
- package/dist/utils/file-writer.js.map +1 -0
- package/dist/utils/project-detector.d.ts +16 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +186 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Add a new session to progress file and update index.md
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# ./.trellis/scripts/add-session.sh --title "Title" --commit "hash" --summary "Summary"
|
|
6
|
+
# echo "content" | ./.trellis/scripts/add-session.sh --title "Title" --commit "hash"
|
|
7
|
+
|
|
8
|
+
set -e
|
|
9
|
+
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
source "$SCRIPT_DIR/common/paths.sh"
|
|
12
|
+
source "$SCRIPT_DIR/common/developer.sh"
|
|
13
|
+
|
|
14
|
+
MAX_LINES=2000
|
|
15
|
+
TODAY=$(date +%Y-%m-%d)
|
|
16
|
+
|
|
17
|
+
# Ensure developer is initialized
|
|
18
|
+
ensure_developer
|
|
19
|
+
|
|
20
|
+
DEVELOPER=$(get_developer)
|
|
21
|
+
REPO_ROOT=$(get_repo_root)
|
|
22
|
+
DEV_DIR="$REPO_ROOT/$DIR_WORKFLOW/$DIR_PROGRESS/$DEVELOPER"
|
|
23
|
+
INDEX_FILE="$DEV_DIR/index.md"
|
|
24
|
+
|
|
25
|
+
# =============================================================================
|
|
26
|
+
# Helper Functions
|
|
27
|
+
# =============================================================================
|
|
28
|
+
|
|
29
|
+
get_latest_progress_info() {
|
|
30
|
+
local latest_file=""
|
|
31
|
+
local latest_num=0
|
|
32
|
+
|
|
33
|
+
for f in "$DEV_DIR"/progress-*.md; do
|
|
34
|
+
if [[ -f "$f" ]]; then
|
|
35
|
+
local num=$(basename "$f" | sed 's/progress-\([0-9]*\)\.md/\1/')
|
|
36
|
+
if [[ "$num" -gt "$latest_num" ]]; then
|
|
37
|
+
latest_num=$num
|
|
38
|
+
latest_file="$f"
|
|
39
|
+
fi
|
|
40
|
+
fi
|
|
41
|
+
done
|
|
42
|
+
|
|
43
|
+
if [[ -n "$latest_file" ]]; then
|
|
44
|
+
local lines=$(wc -l < "$latest_file" | tr -d ' ')
|
|
45
|
+
echo "$latest_file:$latest_num:$lines"
|
|
46
|
+
else
|
|
47
|
+
echo ":0:0"
|
|
48
|
+
fi
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get_current_session() {
|
|
52
|
+
local line=$(grep "Total Sessions" "$INDEX_FILE" 2>/dev/null | head -1)
|
|
53
|
+
echo "$line" | sed 's/.*: //' | tr -d ' '
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
count_progress_files() {
|
|
57
|
+
local result=""
|
|
58
|
+
local progress_info=$(get_latest_progress_info)
|
|
59
|
+
local active_num=$(echo "$progress_info" | cut -d: -f2)
|
|
60
|
+
local active_file="progress-$active_num.md"
|
|
61
|
+
|
|
62
|
+
for f in $(ls -v "$DEV_DIR"/progress-*.md 2>/dev/null | sort -t- -k2 -n -r); do
|
|
63
|
+
if [[ -f "$f" ]]; then
|
|
64
|
+
local filename=$(basename "$f")
|
|
65
|
+
local lines=$(wc -l < "$f" | tr -d ' ')
|
|
66
|
+
|
|
67
|
+
local status="Archived"
|
|
68
|
+
if [[ "$filename" == "$active_file" ]]; then
|
|
69
|
+
status="Active"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
result="${result}| \`$filename\` | ~$lines | $status |
|
|
73
|
+
"
|
|
74
|
+
fi
|
|
75
|
+
done
|
|
76
|
+
echo "$result" | sed '/^$/d'
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
create_new_progress_file() {
|
|
80
|
+
local num=$1
|
|
81
|
+
local prev_num=$((num - 1))
|
|
82
|
+
local new_file="$DEV_DIR/progress-$num.md"
|
|
83
|
+
|
|
84
|
+
cat > "$new_file" << EOF
|
|
85
|
+
# Agent Progress - $DEVELOPER (Part $num)
|
|
86
|
+
|
|
87
|
+
> Continuation from \`progress-$prev_num.md\` (archived at ~$MAX_LINES lines)
|
|
88
|
+
> Started: $TODAY
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
EOF
|
|
93
|
+
echo "$new_file"
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
generate_session_content() {
|
|
97
|
+
local session_num=$1
|
|
98
|
+
local title=$2
|
|
99
|
+
local commit=$3
|
|
100
|
+
local summary=$4
|
|
101
|
+
local extra_content=$5
|
|
102
|
+
|
|
103
|
+
local commit_table=""
|
|
104
|
+
if [[ -n "$commit" && "$commit" != "-" ]]; then
|
|
105
|
+
commit_table="| Hash | Message |
|
|
106
|
+
|------|---------|"
|
|
107
|
+
IFS=',' read -ra COMMITS <<< "$commit"
|
|
108
|
+
for c in "${COMMITS[@]}"; do
|
|
109
|
+
c=$(echo "$c" | tr -d ' ')
|
|
110
|
+
commit_table="$commit_table
|
|
111
|
+
| \`$c\` | (see git log) |"
|
|
112
|
+
done
|
|
113
|
+
else
|
|
114
|
+
commit_table="(No commits - planning session)"
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
cat << EOF
|
|
118
|
+
|
|
119
|
+
## Session $session_num: $title
|
|
120
|
+
|
|
121
|
+
**Date**: $TODAY
|
|
122
|
+
**Feature**: $title
|
|
123
|
+
|
|
124
|
+
### Summary
|
|
125
|
+
|
|
126
|
+
$summary
|
|
127
|
+
|
|
128
|
+
### Main Changes
|
|
129
|
+
|
|
130
|
+
$extra_content
|
|
131
|
+
|
|
132
|
+
### Git Commits
|
|
133
|
+
|
|
134
|
+
$commit_table
|
|
135
|
+
|
|
136
|
+
### Testing
|
|
137
|
+
|
|
138
|
+
- [OK] (Add test results)
|
|
139
|
+
|
|
140
|
+
### Status
|
|
141
|
+
|
|
142
|
+
[OK] **Completed**
|
|
143
|
+
|
|
144
|
+
### Next Steps
|
|
145
|
+
|
|
146
|
+
- None - feature complete
|
|
147
|
+
EOF
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
# =============================================================================
|
|
151
|
+
# Update Index.md
|
|
152
|
+
# =============================================================================
|
|
153
|
+
|
|
154
|
+
update_index() {
|
|
155
|
+
local title="$1"
|
|
156
|
+
local commit="$2"
|
|
157
|
+
local new_session="$3"
|
|
158
|
+
local active_file="$4"
|
|
159
|
+
|
|
160
|
+
# Format commit for display
|
|
161
|
+
local commit_display="-"
|
|
162
|
+
if [[ -n "$commit" && "$commit" != "-" ]]; then
|
|
163
|
+
commit_display=$(echo "$commit" | sed 's/,/, /g' | sed 's/\([a-f0-9]\{7,\}\)/`\1`/g')
|
|
164
|
+
fi
|
|
165
|
+
|
|
166
|
+
local files_table=$(count_progress_files)
|
|
167
|
+
|
|
168
|
+
echo "Updating index.md for session $new_session..."
|
|
169
|
+
echo " Title: $title"
|
|
170
|
+
echo " Commit: $commit_display"
|
|
171
|
+
echo " Active File: $active_file"
|
|
172
|
+
echo ""
|
|
173
|
+
|
|
174
|
+
if ! grep -q "@@@auto:current-status" "$INDEX_FILE"; then
|
|
175
|
+
echo "Error: Markers not found in index.md. Please ensure markers exist." >&2
|
|
176
|
+
exit 1
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
local tmp_file=$(mktemp)
|
|
180
|
+
|
|
181
|
+
local in_current_status=false
|
|
182
|
+
local in_active_documents=false
|
|
183
|
+
local in_session_history=false
|
|
184
|
+
local header_written=false
|
|
185
|
+
|
|
186
|
+
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
187
|
+
if [[ "$line" == *"@@@auto:current-status"* ]]; then
|
|
188
|
+
echo "$line" >> "$tmp_file"
|
|
189
|
+
in_current_status=true
|
|
190
|
+
echo "- **Active File**: \`$active_file\`" >> "$tmp_file"
|
|
191
|
+
echo "- **Total Sessions**: $new_session" >> "$tmp_file"
|
|
192
|
+
echo "- **Last Active**: $TODAY" >> "$tmp_file"
|
|
193
|
+
continue
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
if [[ "$line" == *"@@@/auto:current-status"* ]]; then
|
|
197
|
+
in_current_status=false
|
|
198
|
+
echo "$line" >> "$tmp_file"
|
|
199
|
+
continue
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
if [[ "$line" == *"@@@auto:active-documents"* ]]; then
|
|
203
|
+
echo "$line" >> "$tmp_file"
|
|
204
|
+
in_active_documents=true
|
|
205
|
+
echo "| File | Lines | Status |" >> "$tmp_file"
|
|
206
|
+
echo "|------|-------|--------|" >> "$tmp_file"
|
|
207
|
+
echo "$files_table" >> "$tmp_file"
|
|
208
|
+
continue
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
if [[ "$line" == *"@@@/auto:active-documents"* ]]; then
|
|
212
|
+
in_active_documents=false
|
|
213
|
+
echo "$line" >> "$tmp_file"
|
|
214
|
+
continue
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
if [[ "$line" == *"@@@auto:session-history"* ]]; then
|
|
218
|
+
echo "$line" >> "$tmp_file"
|
|
219
|
+
in_session_history=true
|
|
220
|
+
header_written=false
|
|
221
|
+
continue
|
|
222
|
+
fi
|
|
223
|
+
|
|
224
|
+
if [[ "$line" == *"@@@/auto:session-history"* ]]; then
|
|
225
|
+
in_session_history=false
|
|
226
|
+
echo "$line" >> "$tmp_file"
|
|
227
|
+
continue
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
if $in_current_status; then
|
|
231
|
+
continue
|
|
232
|
+
fi
|
|
233
|
+
|
|
234
|
+
if $in_active_documents; then
|
|
235
|
+
continue
|
|
236
|
+
fi
|
|
237
|
+
|
|
238
|
+
if $in_session_history; then
|
|
239
|
+
echo "$line" >> "$tmp_file"
|
|
240
|
+
if [[ "$line" == "|---"* ]] && ! $header_written; then
|
|
241
|
+
echo "| $new_session | $TODAY | $title | $commit_display |" >> "$tmp_file"
|
|
242
|
+
header_written=true
|
|
243
|
+
fi
|
|
244
|
+
continue
|
|
245
|
+
fi
|
|
246
|
+
|
|
247
|
+
echo "$line" >> "$tmp_file"
|
|
248
|
+
done < "$INDEX_FILE"
|
|
249
|
+
|
|
250
|
+
mv "$tmp_file" "$INDEX_FILE"
|
|
251
|
+
|
|
252
|
+
echo "[OK] Updated index.md successfully!"
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
# =============================================================================
|
|
256
|
+
# Main Function
|
|
257
|
+
# =============================================================================
|
|
258
|
+
|
|
259
|
+
add_session() {
|
|
260
|
+
local title=""
|
|
261
|
+
local commit="-"
|
|
262
|
+
local summary="(Add summary)"
|
|
263
|
+
local content_file=""
|
|
264
|
+
local extra_content="(Add details)"
|
|
265
|
+
|
|
266
|
+
while [[ $# -gt 0 ]]; do
|
|
267
|
+
case $1 in
|
|
268
|
+
--title)
|
|
269
|
+
title="$2"
|
|
270
|
+
shift 2
|
|
271
|
+
;;
|
|
272
|
+
--commit)
|
|
273
|
+
commit="$2"
|
|
274
|
+
shift 2
|
|
275
|
+
;;
|
|
276
|
+
--summary)
|
|
277
|
+
summary="$2"
|
|
278
|
+
shift 2
|
|
279
|
+
;;
|
|
280
|
+
--content-file)
|
|
281
|
+
content_file="$2"
|
|
282
|
+
shift 2
|
|
283
|
+
;;
|
|
284
|
+
*)
|
|
285
|
+
shift
|
|
286
|
+
;;
|
|
287
|
+
esac
|
|
288
|
+
done
|
|
289
|
+
|
|
290
|
+
if [[ -z "$title" ]]; then
|
|
291
|
+
echo "Error: --title is required" >&2
|
|
292
|
+
echo "Usage: $0 --title \"Session Title\" [--commit \"hash1,hash2\"] [--summary \"Brief summary\"]" >&2
|
|
293
|
+
exit 1
|
|
294
|
+
fi
|
|
295
|
+
|
|
296
|
+
if [[ -n "$content_file" && -f "$content_file" ]]; then
|
|
297
|
+
extra_content=$(cat "$content_file")
|
|
298
|
+
elif [[ ! -t 0 ]]; then
|
|
299
|
+
extra_content=$(cat)
|
|
300
|
+
fi
|
|
301
|
+
|
|
302
|
+
local progress_info=$(get_latest_progress_info)
|
|
303
|
+
local current_file=$(echo "$progress_info" | cut -d: -f1)
|
|
304
|
+
local current_num=$(echo "$progress_info" | cut -d: -f2)
|
|
305
|
+
local current_lines=$(echo "$progress_info" | cut -d: -f3)
|
|
306
|
+
local current_session=$(get_current_session)
|
|
307
|
+
local new_session=$((current_session + 1))
|
|
308
|
+
|
|
309
|
+
local session_content=$(generate_session_content "$new_session" "$title" "$commit" "$summary" "$extra_content")
|
|
310
|
+
local content_lines=$(echo "$session_content" | wc -l | tr -d ' ')
|
|
311
|
+
|
|
312
|
+
echo "========================================" >&2
|
|
313
|
+
echo "ADD SESSION" >&2
|
|
314
|
+
echo "========================================" >&2
|
|
315
|
+
echo "" >&2
|
|
316
|
+
echo "Session: $new_session" >&2
|
|
317
|
+
echo "Title: $title" >&2
|
|
318
|
+
echo "Commit: $commit" >&2
|
|
319
|
+
echo "" >&2
|
|
320
|
+
echo "Current progress file: progress-$current_num.md" >&2
|
|
321
|
+
echo "Current lines: $current_lines" >&2
|
|
322
|
+
echo "New content lines: $content_lines" >&2
|
|
323
|
+
echo "Total after append: $((current_lines + content_lines))" >&2
|
|
324
|
+
echo "" >&2
|
|
325
|
+
|
|
326
|
+
local target_file="$current_file"
|
|
327
|
+
local target_num=$current_num
|
|
328
|
+
|
|
329
|
+
if [[ $((current_lines + content_lines)) -gt $MAX_LINES ]]; then
|
|
330
|
+
target_num=$((current_num + 1))
|
|
331
|
+
echo "[!] Exceeds $MAX_LINES lines, creating progress-$target_num.md" >&2
|
|
332
|
+
target_file=$(create_new_progress_file "$target_num")
|
|
333
|
+
echo "Created: $target_file" >&2
|
|
334
|
+
fi
|
|
335
|
+
|
|
336
|
+
echo "$session_content" >> "$target_file"
|
|
337
|
+
echo "[OK] Appended session to $(basename "$target_file")" >&2
|
|
338
|
+
|
|
339
|
+
echo "" >&2
|
|
340
|
+
|
|
341
|
+
# Update index.md directly
|
|
342
|
+
local active_file="progress-$target_num.md"
|
|
343
|
+
update_index "$title" "$commit" "$new_session" "$active_file"
|
|
344
|
+
|
|
345
|
+
echo "" >&2
|
|
346
|
+
echo "========================================" >&2
|
|
347
|
+
echo "[OK] Session $new_session added successfully!" >&2
|
|
348
|
+
echo "========================================" >&2
|
|
349
|
+
echo "" >&2
|
|
350
|
+
echo "Files updated:" >&2
|
|
351
|
+
echo " - $(basename "$target_file")" >&2
|
|
352
|
+
echo " - index.md" >&2
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
show_help() {
|
|
356
|
+
echo "Usage: $0 --title \"Title\" [options]"
|
|
357
|
+
echo ""
|
|
358
|
+
echo "Add a new session to progress file and update index.md automatically."
|
|
359
|
+
echo ""
|
|
360
|
+
echo "Options:"
|
|
361
|
+
echo " --title TEXT Session title (required)"
|
|
362
|
+
echo " --commit HASHES Comma-separated commit hashes (optional)"
|
|
363
|
+
echo " --summary TEXT Brief summary of the session (optional)"
|
|
364
|
+
echo " --content-file Path to file with detailed content (optional)"
|
|
365
|
+
echo ""
|
|
366
|
+
echo "You can also pipe content via stdin:"
|
|
367
|
+
echo " echo \"Details\" | $0 --title \"Title\" --commit \"abc123\""
|
|
368
|
+
echo ""
|
|
369
|
+
echo "Examples:"
|
|
370
|
+
echo " $0 --title \"Fix login bug\" --commit \"abc1234\" --summary \"Fixed auth issue\""
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
# =============================================================================
|
|
374
|
+
# Main Entry
|
|
375
|
+
# =============================================================================
|
|
376
|
+
|
|
377
|
+
case "${1:-}" in
|
|
378
|
+
--help|-h|help)
|
|
379
|
+
show_help
|
|
380
|
+
;;
|
|
381
|
+
*)
|
|
382
|
+
add_session "$@"
|
|
383
|
+
;;
|
|
384
|
+
esac
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Developer management utilities
|
|
3
|
+
#
|
|
4
|
+
# Usage: source this file in other scripts
|
|
5
|
+
# source "$(dirname "$0")/common/developer.sh"
|
|
6
|
+
#
|
|
7
|
+
# Provides:
|
|
8
|
+
# init_developer - Initialize developer
|
|
9
|
+
# ensure_developer - Ensure developer is initialized (exit if not)
|
|
10
|
+
# show_developer_info - Show developer information
|
|
11
|
+
|
|
12
|
+
# Ensure paths.sh is loaded
|
|
13
|
+
if ! type get_repo_root &>/dev/null; then
|
|
14
|
+
source "$(dirname "${BASH_SOURCE[0]}")/paths.sh"
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# =============================================================================
|
|
18
|
+
# Developer Initialization
|
|
19
|
+
# =============================================================================
|
|
20
|
+
|
|
21
|
+
init_developer() {
|
|
22
|
+
local name="$1"
|
|
23
|
+
local repo_root="${2:-$(get_repo_root)}"
|
|
24
|
+
|
|
25
|
+
if [[ -z "$name" ]]; then
|
|
26
|
+
echo "Error: developer name is required" >&2
|
|
27
|
+
return 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
local dev_file="$repo_root/$DIR_WORKFLOW/$FILE_DEVELOPER"
|
|
31
|
+
local progress_dir="$repo_root/$DIR_WORKFLOW/$DIR_PROGRESS/$name"
|
|
32
|
+
|
|
33
|
+
# Create .developer file
|
|
34
|
+
cat > "$dev_file" << EOF
|
|
35
|
+
name=$name
|
|
36
|
+
initialized_at=$(date -Iseconds)
|
|
37
|
+
EOF
|
|
38
|
+
|
|
39
|
+
# Create directory structure
|
|
40
|
+
mkdir -p "$progress_dir/$DIR_FEATURES"
|
|
41
|
+
mkdir -p "$progress_dir/$DIR_FEATURES/$DIR_ARCHIVE"
|
|
42
|
+
|
|
43
|
+
# Create initial progress file
|
|
44
|
+
local progress_file="$progress_dir/progress-1.md"
|
|
45
|
+
if [[ ! -f "$progress_file" ]]; then
|
|
46
|
+
cat > "$progress_file" << PROGRESS_EOF
|
|
47
|
+
# Agent Progress - $name (Part 1)
|
|
48
|
+
|
|
49
|
+
> AI development session progress tracking
|
|
50
|
+
> Started: $(date +%Y-%m-%d)
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
PROGRESS_EOF
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Create index.md with markers for auto-update
|
|
58
|
+
local index_file="$progress_dir/index.md"
|
|
59
|
+
if [[ ! -f "$index_file" ]]; then
|
|
60
|
+
cat > "$index_file" << INDEX_EOF
|
|
61
|
+
# Agent Progress Index - $name
|
|
62
|
+
|
|
63
|
+
> Progress tracking for AI development sessions.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Current Status
|
|
68
|
+
|
|
69
|
+
<!-- @@@auto:current-status -->
|
|
70
|
+
- **Active File**: \`progress-1.md\`
|
|
71
|
+
- **Total Sessions**: 0
|
|
72
|
+
- **Last Active**: -
|
|
73
|
+
<!-- @@@/auto:current-status -->
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Active Documents
|
|
78
|
+
|
|
79
|
+
<!-- @@@auto:active-documents -->
|
|
80
|
+
| File | Lines | Status |
|
|
81
|
+
|------|-------|--------|
|
|
82
|
+
| \`progress-1.md\` | ~0 | Active |
|
|
83
|
+
<!-- @@@/auto:active-documents -->
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Session History
|
|
88
|
+
|
|
89
|
+
<!-- @@@auto:session-history -->
|
|
90
|
+
| # | Date | Title | Commits |
|
|
91
|
+
|---|------|-------|---------|
|
|
92
|
+
<!-- @@@/auto:session-history -->
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Notes
|
|
97
|
+
|
|
98
|
+
- Sessions are appended to progress files
|
|
99
|
+
- New progress file created when current exceeds 2000 lines
|
|
100
|
+
- Use \`add-session.sh\` to record sessions
|
|
101
|
+
INDEX_EOF
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
echo "Developer initialized: $name"
|
|
105
|
+
echo " .developer file: $dev_file"
|
|
106
|
+
echo " Progress dir: $progress_dir"
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
ensure_developer() {
|
|
110
|
+
local repo_root="${1:-$(get_repo_root)}"
|
|
111
|
+
|
|
112
|
+
if ! check_developer "$repo_root"; then
|
|
113
|
+
echo "Error: Developer not initialized." >&2
|
|
114
|
+
echo "Run: ./.trellis/scripts/init-developer.sh <your-name>" >&2
|
|
115
|
+
exit 1
|
|
116
|
+
fi
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
show_developer_info() {
|
|
120
|
+
local repo_root="${1:-$(get_repo_root)}"
|
|
121
|
+
local developer=$(get_developer "$repo_root")
|
|
122
|
+
|
|
123
|
+
if [[ -z "$developer" ]]; then
|
|
124
|
+
echo "Developer: (not initialized)"
|
|
125
|
+
else
|
|
126
|
+
echo "Developer: $developer"
|
|
127
|
+
echo "Features dir: $(get_features_dir "$repo_root")"
|
|
128
|
+
echo "Progress dir: $(get_progress_dir "$repo_root")"
|
|
129
|
+
fi
|
|
130
|
+
}
|