@flydocs/cli 0.6.0-alpha.3 → 0.6.0-alpha.30
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/dist/cli.js +2054 -470
- package/package.json +1 -1
- package/template/.claude/CLAUDE.md +43 -48
- package/template/.claude/agents/implementation-agent.md +1 -1
- package/template/.claude/agents/pm-agent.md +1 -1
- package/template/.claude/commands/activate.md +1 -1
- package/template/.claude/commands/attach.md +1 -1
- package/template/.claude/commands/block.md +2 -2
- package/template/.claude/commands/capture.md +1 -1
- package/template/.claude/commands/close.md +1 -1
- package/template/.claude/commands/flydocs-setup.md +359 -72
- package/template/.claude/commands/flydocs-upgrade.md +26 -27
- package/template/.claude/commands/implement.md +1 -1
- package/template/.claude/commands/knowledge.md +61 -0
- package/template/.claude/commands/new-project.md +1 -1
- package/template/.claude/commands/onboard.md +275 -0
- package/template/.claude/commands/project-update.md +1 -1
- package/template/.claude/commands/refine.md +1 -1
- package/template/.claude/commands/review.md +1 -1
- package/template/.claude/commands/start-session.md +1 -1
- package/template/.claude/commands/status.md +1 -1
- package/template/.claude/commands/validate.md +1 -1
- package/template/.claude/commands/wrap-session.md +1 -1
- package/template/.claude/hooks/auto-approve.py +212 -0
- package/template/.claude/hooks/post-pr-check.py +108 -0
- package/template/.claude/hooks/post-transition-check.py +281 -0
- package/template/.claude/hooks/prompt-submit.py +554 -0
- package/template/.claude/hooks/session-start.py +262 -0
- package/template/.claude/hooks/stop-gate.py +162 -0
- package/template/.claude/settings.json +41 -4
- package/template/.claude/skills/README.md +23 -25
- package/template/.claude/skills/flydocs-workflow/SKILL.md +134 -42
- package/template/.claude/skills/flydocs-workflow/cursor-rule.mdc +9 -8
- package/template/.claude/skills/flydocs-workflow/reference/comment-templates.md +1 -0
- package/template/.claude/skills/flydocs-workflow/reference/golden-rules.md +28 -17
- package/template/.claude/skills/flydocs-workflow/reference/graph-schema.md +116 -0
- package/template/.claude/skills/flydocs-workflow/reference/pr-workflow.md +120 -0
- package/template/.claude/skills/flydocs-workflow/reference/priority-estimates.md +37 -15
- package/template/.claude/skills/flydocs-workflow/reference/service-descriptor-schema.md +260 -0
- package/template/.claude/skills/flydocs-workflow/reference/status-workflow.md +26 -26
- package/template/.claude/skills/flydocs-workflow/scripts/_local/__init__.py +0 -0
- package/template/.claude/skills/{flydocs-local/scripts/flydocs_api.py → flydocs-workflow/scripts/_local/file_store.py} +137 -47
- package/template/.claude/skills/flydocs-workflow/scripts/flydocs_api.py +724 -0
- package/template/{.flydocs → .claude/skills/flydocs-workflow}/scripts/generate_manifest.py +4 -4
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_build.py +132 -1
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_query.py +18 -5
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_session.py +1 -10
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_update.py +4 -4
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_utils.py +2 -1
- package/template/.claude/skills/flydocs-workflow/scripts/issues.py +738 -0
- package/template/.claude/skills/flydocs-workflow/scripts/projects.py +144 -0
- package/template/.claude/skills/flydocs-workflow/scripts/pull_services.py +128 -0
- package/template/.claude/skills/flydocs-workflow/scripts/push_service.py +132 -0
- package/template/.claude/skills/flydocs-workflow/scripts/session.py +54 -0
- package/template/.claude/skills/flydocs-workflow/scripts/test_enforcement.py +225 -0
- package/template/.claude/skills/flydocs-workflow/scripts/workspace.py +902 -0
- package/template/.claude/skills/flydocs-workflow/session.md +87 -29
- package/template/.claude/skills/flydocs-workflow/stages/activate.md +18 -7
- package/template/.claude/skills/flydocs-workflow/stages/capture.md +10 -5
- package/template/.claude/skills/flydocs-workflow/stages/close.md +4 -3
- package/template/.claude/skills/flydocs-workflow/stages/implement.md +33 -9
- package/template/.claude/skills/flydocs-workflow/stages/refine.md +22 -6
- package/template/.claude/skills/flydocs-workflow/stages/review.md +16 -4
- package/template/.claude/skills/flydocs-workflow/stages/validate.md +3 -1
- package/template/.claude/skills/flydocs-workflow/templates/pr/default.md +33 -0
- package/template/.cursor/agents/implementation-agent.md +1 -1
- package/template/.cursor/agents/pm-agent.md +2 -2
- package/template/.cursor/hooks.json +10 -3
- package/template/.env.example +6 -6
- package/template/.flydocs/config.json +5 -18
- package/template/.flydocs/templates/README.md +13 -14
- package/template/.flydocs/templates/bug.md +17 -153
- package/template/.flydocs/templates/chore.md +10 -98
- package/template/.flydocs/templates/feature.md +12 -158
- package/template/.flydocs/templates/idea.md +11 -111
- package/template/.flydocs/templates/quick-capture.md +4 -8
- package/template/.flydocs/version +1 -1
- package/template/AGENTS.md +44 -32
- package/template/CHANGELOG.md +37 -0
- package/template/flydocs/README.md +1 -3
- package/template/flydocs/context/project.md +6 -3
- package/template/flydocs/design-system/README.md +3 -3
- package/template/flydocs/knowledge/INDEX.md +38 -53
- package/template/flydocs/knowledge/README.md +60 -9
- package/template/flydocs/knowledge/templates/decision.md +47 -0
- package/template/flydocs/knowledge/templates/feature.md +35 -0
- package/template/flydocs/knowledge/templates/note.md +25 -0
- package/template/manifest.json +24 -20
- package/template/.claude/skills/flydocs-cloud/SKILL.md +0 -113
- package/template/.claude/skills/flydocs-cloud/cursor-rule.mdc +0 -50
- package/template/.claude/skills/flydocs-cloud/scripts/assign.py +0 -22
- package/template/.claude/skills/flydocs-cloud/scripts/assign_cycle.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/assign_milestone.py +0 -22
- package/template/.claude/skills/flydocs-cloud/scripts/comment.py +0 -29
- package/template/.claude/skills/flydocs-cloud/scripts/create_issue.py +0 -66
- package/template/.claude/skills/flydocs-cloud/scripts/create_milestone.py +0 -35
- package/template/.claude/skills/flydocs-cloud/scripts/create_project.py +0 -33
- package/template/.claude/skills/flydocs-cloud/scripts/create_team.py +0 -39
- package/template/.claude/skills/flydocs-cloud/scripts/estimate.py +0 -29
- package/template/.claude/skills/flydocs-cloud/scripts/flydocs_api.py +0 -210
- package/template/.claude/skills/flydocs-cloud/scripts/get_issue.py +0 -24
- package/template/.claude/skills/flydocs-cloud/scripts/link.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/list_cycles.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/list_issues.py +0 -44
- package/template/.claude/skills/flydocs-cloud/scripts/list_labels.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/list_milestones.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/list_projects.py +0 -31
- package/template/.claude/skills/flydocs-cloud/scripts/list_providers.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/list_teams.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/priority.py +0 -29
- package/template/.claude/skills/flydocs-cloud/scripts/project_update.py +0 -45
- package/template/.claude/skills/flydocs-cloud/scripts/set_labels.py +0 -68
- package/template/.claude/skills/flydocs-cloud/scripts/set_provider.py +0 -46
- package/template/.claude/skills/flydocs-cloud/scripts/set_team.py +0 -41
- package/template/.claude/skills/flydocs-cloud/scripts/transition.py +0 -26
- package/template/.claude/skills/flydocs-cloud/scripts/update_description.py +0 -36
- package/template/.claude/skills/flydocs-cloud/scripts/update_issue.py +0 -82
- package/template/.claude/skills/flydocs-context-graph/SKILL.md +0 -87
- package/template/.claude/skills/flydocs-context-graph/schema.md +0 -78
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_context.py +0 -338
- package/template/.claude/skills/flydocs-context7/SKILL.md +0 -105
- package/template/.claude/skills/flydocs-context7/cursor-rule.mdc +0 -49
- package/template/.claude/skills/flydocs-context7/scripts/context7.py +0 -293
- package/template/.claude/skills/flydocs-estimates/SKILL.md +0 -384
- package/template/.claude/skills/flydocs-figma/SKILL.md +0 -377
- package/template/.claude/skills/flydocs-figma/references/PROMPTING.md +0 -108
- package/template/.claude/skills/flydocs-figma/references/TROUBLESHOOTING.md +0 -112
- package/template/.claude/skills/flydocs-local/SKILL.md +0 -103
- package/template/.claude/skills/flydocs-local/cursor-rule.mdc +0 -43
- package/template/.claude/skills/flydocs-local/scripts/assign.py +0 -20
- package/template/.claude/skills/flydocs-local/scripts/comment.py +0 -27
- package/template/.claude/skills/flydocs-local/scripts/create_issue.py +0 -44
- package/template/.claude/skills/flydocs-local/scripts/estimate.py +0 -37
- package/template/.claude/skills/flydocs-local/scripts/get_issue.py +0 -20
- package/template/.claude/skills/flydocs-local/scripts/link.py +0 -41
- package/template/.claude/skills/flydocs-local/scripts/list_issues.py +0 -34
- package/template/.claude/skills/flydocs-local/scripts/priority.py +0 -37
- package/template/.claude/skills/flydocs-local/scripts/project_update.py +0 -67
- package/template/.claude/skills/flydocs-local/scripts/status_summary.py +0 -16
- package/template/.claude/skills/flydocs-local/scripts/transition.py +0 -24
- package/template/.claude/skills/flydocs-local/scripts/update_description.py +0 -35
- package/template/.claude/skills/flydocs-local/scripts/update_issue.py +0 -84
- package/template/.flydocs/hooks/auto-approve.py +0 -71
- package/template/.flydocs/hooks/prompt-submit.py +0 -277
- package/template/.flydocs/scripts/skill_manager.py +0 -541
- /package/template/{.flydocs → .claude}/hooks/post-edit.py +0 -0
- /package/template/.claude/skills/{flydocs-estimates/references → flydocs-workflow/reference}/provider-costs.md +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{bug.md → issues/bug.md} +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{chore.md → issues/chore.md} +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{feature.md → issues/feature.md} +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{idea.md → issues/idea.md} +0 -0
|
@@ -186,8 +186,8 @@ def build_manifest(skills, loads_after=None):
|
|
|
186
186
|
MARKER_START,
|
|
187
187
|
"## Skills Index",
|
|
188
188
|
"",
|
|
189
|
-
"
|
|
190
|
-
"
|
|
189
|
+
"Consult the workflow skill for **issue operations and status transitions only**.",
|
|
190
|
+
"For general coding tasks, skip this \u2014 just write code.",
|
|
191
191
|
"",
|
|
192
192
|
"| Skill | Triggers | Entry | Loads After |",
|
|
193
193
|
"|-------|----------|-------|-------------|",
|
|
@@ -205,8 +205,8 @@ def build_manifest(skills, loads_after=None):
|
|
|
205
205
|
MARKER_START,
|
|
206
206
|
"## Skills Index",
|
|
207
207
|
"",
|
|
208
|
-
"
|
|
209
|
-
"
|
|
208
|
+
"Consult the workflow skill for **issue operations and status transitions only**.",
|
|
209
|
+
"For general coding tasks, skip this \u2014 just write code.",
|
|
210
210
|
"",
|
|
211
211
|
"| Skill | Triggers | Entry |",
|
|
212
212
|
"|-------|----------|-------|",
|
package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_build.py
RENAMED
|
@@ -5,7 +5,7 @@ Scans skills (SKILL.md frontmatter) and ADRs (decisions/*.md cross-references)
|
|
|
5
5
|
to produce flydocs/context/graph.json. Preserves manually-added nodes and edges.
|
|
6
6
|
|
|
7
7
|
Usage:
|
|
8
|
-
python3 .claude/skills/flydocs-
|
|
8
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_build.py [--root PATH]
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
import argparse
|
|
@@ -201,6 +201,129 @@ def classify_relationship(context):
|
|
|
201
201
|
return "RELATES_TO"
|
|
202
202
|
|
|
203
203
|
|
|
204
|
+
# --- Service descriptor scanning ---
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def scan_service_descriptor(root):
|
|
208
|
+
"""Scan flydocs/context/service.json and return repo node + edges."""
|
|
209
|
+
nodes = {}
|
|
210
|
+
edges = []
|
|
211
|
+
|
|
212
|
+
service_file = root / "flydocs" / "context" / "service.json"
|
|
213
|
+
if not service_file.is_file():
|
|
214
|
+
return nodes, edges
|
|
215
|
+
|
|
216
|
+
import json
|
|
217
|
+
try:
|
|
218
|
+
data = json.loads(service_file.read_text(encoding="utf-8"))
|
|
219
|
+
except (json.JSONDecodeError, OSError):
|
|
220
|
+
return nodes, edges
|
|
221
|
+
|
|
222
|
+
if data.get("version") not in (1, 2):
|
|
223
|
+
return nodes, edges
|
|
224
|
+
|
|
225
|
+
repo_slug = data.get("repoSlug", "")
|
|
226
|
+
if not repo_slug:
|
|
227
|
+
return nodes, edges
|
|
228
|
+
|
|
229
|
+
node_id = f"repo:{repo_slug}"
|
|
230
|
+
nodes[node_id] = {
|
|
231
|
+
"type": "repo",
|
|
232
|
+
"label": data.get("name", repo_slug),
|
|
233
|
+
"path": "flydocs/context/service.json",
|
|
234
|
+
"purpose": data.get("purpose", ""),
|
|
235
|
+
"stack": data.get("stack", []),
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
# Create CONSUMES edges from dependencies
|
|
239
|
+
for dep in data.get("dependencies", []):
|
|
240
|
+
service = dep.get("service", "")
|
|
241
|
+
if not service:
|
|
242
|
+
continue
|
|
243
|
+
target_id = f"repo:{service}"
|
|
244
|
+
edges.append({
|
|
245
|
+
"from": node_id,
|
|
246
|
+
"to": target_id,
|
|
247
|
+
"rel": "CONSUMES",
|
|
248
|
+
"weight": 1.0,
|
|
249
|
+
"interface": dep.get("interface", ""),
|
|
250
|
+
"description": dep.get("description", ""),
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
return nodes, edges
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def scan_sibling_descriptors(root):
|
|
257
|
+
"""Scan sibling repos' service.json files for cross-repo edges.
|
|
258
|
+
|
|
259
|
+
Only reads descriptors from sibling directories that have .flydocs/ and
|
|
260
|
+
flydocs/context/service.json. Does NOT generate descriptors for other repos.
|
|
261
|
+
"""
|
|
262
|
+
nodes = {}
|
|
263
|
+
edges = []
|
|
264
|
+
|
|
265
|
+
parent = root.parent
|
|
266
|
+
if not parent.is_dir():
|
|
267
|
+
return nodes, edges
|
|
268
|
+
|
|
269
|
+
try:
|
|
270
|
+
siblings = sorted(parent.iterdir())
|
|
271
|
+
except PermissionError:
|
|
272
|
+
return nodes, edges
|
|
273
|
+
|
|
274
|
+
for sibling in siblings:
|
|
275
|
+
if sibling == root or not sibling.is_dir():
|
|
276
|
+
continue
|
|
277
|
+
try:
|
|
278
|
+
if not (sibling / ".git").exists():
|
|
279
|
+
continue
|
|
280
|
+
except PermissionError:
|
|
281
|
+
continue
|
|
282
|
+
|
|
283
|
+
service_file = sibling / "flydocs" / "context" / "service.json"
|
|
284
|
+
if not service_file.is_file():
|
|
285
|
+
continue
|
|
286
|
+
|
|
287
|
+
import json
|
|
288
|
+
try:
|
|
289
|
+
data = json.loads(service_file.read_text(encoding="utf-8"))
|
|
290
|
+
except (json.JSONDecodeError, OSError):
|
|
291
|
+
continue
|
|
292
|
+
|
|
293
|
+
if data.get("version") not in (1, 2):
|
|
294
|
+
continue
|
|
295
|
+
|
|
296
|
+
repo_slug = data.get("repoSlug", "")
|
|
297
|
+
if not repo_slug:
|
|
298
|
+
continue
|
|
299
|
+
|
|
300
|
+
node_id = f"repo:{repo_slug}"
|
|
301
|
+
nodes[node_id] = {
|
|
302
|
+
"type": "repo",
|
|
303
|
+
"label": data.get("name", repo_slug),
|
|
304
|
+
"path": str(service_file),
|
|
305
|
+
"purpose": data.get("purpose", ""),
|
|
306
|
+
"stack": data.get("stack", []),
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
# Create CONSUMES edges from this sibling's dependencies
|
|
310
|
+
for dep in data.get("dependencies", []):
|
|
311
|
+
service = dep.get("service", "")
|
|
312
|
+
if not service:
|
|
313
|
+
continue
|
|
314
|
+
target_id = f"repo:{service}"
|
|
315
|
+
edges.append({
|
|
316
|
+
"from": node_id,
|
|
317
|
+
"to": target_id,
|
|
318
|
+
"rel": "CONSUMES",
|
|
319
|
+
"weight": 1.0,
|
|
320
|
+
"interface": dep.get("interface", ""),
|
|
321
|
+
"description": dep.get("description", ""),
|
|
322
|
+
})
|
|
323
|
+
|
|
324
|
+
return nodes, edges
|
|
325
|
+
|
|
326
|
+
|
|
204
327
|
# --- Graph merge ---
|
|
205
328
|
|
|
206
329
|
|
|
@@ -263,15 +386,21 @@ def main():
|
|
|
263
386
|
# Scan sources
|
|
264
387
|
skill_nodes, skill_edges = scan_skills(root)
|
|
265
388
|
adr_nodes, adr_edges = scan_adrs(root)
|
|
389
|
+
service_nodes, service_edges = scan_service_descriptor(root)
|
|
390
|
+
sibling_nodes, sibling_edges = scan_sibling_descriptors(root)
|
|
266
391
|
|
|
267
392
|
# Merge all scanned nodes and edges
|
|
268
393
|
all_nodes = {}
|
|
269
394
|
all_nodes.update(skill_nodes)
|
|
270
395
|
all_nodes.update(adr_nodes)
|
|
396
|
+
all_nodes.update(service_nodes)
|
|
397
|
+
all_nodes.update(sibling_nodes)
|
|
271
398
|
|
|
272
399
|
all_edges = []
|
|
273
400
|
all_edges.extend(skill_edges)
|
|
274
401
|
all_edges.extend(adr_edges)
|
|
402
|
+
all_edges.extend(service_edges)
|
|
403
|
+
all_edges.extend(sibling_edges)
|
|
275
404
|
|
|
276
405
|
# Merge with existing graph (preserving manual entries)
|
|
277
406
|
graph = merge_graph(existing, all_nodes, all_edges)
|
|
@@ -280,6 +409,7 @@ def main():
|
|
|
280
409
|
save_graph(root, graph)
|
|
281
410
|
|
|
282
411
|
# Report
|
|
412
|
+
repo_count = len(service_nodes) + len(sibling_nodes)
|
|
283
413
|
output_json({
|
|
284
414
|
"success": True,
|
|
285
415
|
"path": str(graph_path_for_report(root)),
|
|
@@ -287,6 +417,7 @@ def main():
|
|
|
287
417
|
"edges": len(graph["edges"]),
|
|
288
418
|
"skills": len(skill_nodes),
|
|
289
419
|
"decisions": len(adr_nodes),
|
|
420
|
+
"repos": repo_count,
|
|
290
421
|
})
|
|
291
422
|
|
|
292
423
|
|
package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_query.py
RENAMED
|
@@ -5,7 +5,7 @@ Returns related nodes for a given starting node, filtered by depth and
|
|
|
5
5
|
relationship type. Output as compressed markdown or JSON.
|
|
6
6
|
|
|
7
7
|
Usage:
|
|
8
|
-
python3 .claude/skills/flydocs-
|
|
8
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_query.py \\
|
|
9
9
|
--node decision:001 [--depth 2] [--rel EXTENDS] [--reverse] [--format md|json]
|
|
10
10
|
"""
|
|
11
11
|
|
|
@@ -91,6 +91,7 @@ def format_markdown(graph, start_node, results):
|
|
|
91
91
|
|
|
92
92
|
# Type display order
|
|
93
93
|
type_labels = {
|
|
94
|
+
"repo": "Repos",
|
|
94
95
|
"decision": "Decisions",
|
|
95
96
|
"skill": "Skills",
|
|
96
97
|
"module": "Modules",
|
|
@@ -99,7 +100,7 @@ def format_markdown(graph, start_node, results):
|
|
|
99
100
|
"concept": "Concepts",
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
for node_type in ["decision", "skill", "module", "issue", "session", "concept"]:
|
|
103
|
+
for node_type in ["repo", "decision", "skill", "module", "issue", "session", "concept"]:
|
|
103
104
|
entries = by_type.get(node_type, [])
|
|
104
105
|
if not entries:
|
|
105
106
|
continue
|
|
@@ -109,9 +110,21 @@ def format_markdown(graph, start_node, results):
|
|
|
109
110
|
|
|
110
111
|
for node_id, node, rel, depth in entries:
|
|
111
112
|
node_label = node.get("label", node_id)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
# Repo nodes show purpose; others show status
|
|
114
|
+
if node_type == "repo":
|
|
115
|
+
purpose = node.get("purpose", "")
|
|
116
|
+
extra = f" — {purpose}" if purpose else ""
|
|
117
|
+
iface = ""
|
|
118
|
+
# Check if the edge that reached this node has interface info
|
|
119
|
+
for e in graph.get("edges", []):
|
|
120
|
+
if (e.get("from") == node_id or e.get("to") == node_id) and e.get("interface"):
|
|
121
|
+
iface = f" via {e['interface']}"
|
|
122
|
+
break
|
|
123
|
+
lines.append(f"- {node_id}: {node_label} ({rel}){iface}{extra}")
|
|
124
|
+
else:
|
|
125
|
+
status = node.get("status", "")
|
|
126
|
+
status_str = f" [{status}]" if status else ""
|
|
127
|
+
lines.append(f"- {node_id}: {node_label} ({rel}){status_str}")
|
|
115
128
|
|
|
116
129
|
lines.append("")
|
|
117
130
|
|
package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_session.py
RENAMED
|
@@ -6,7 +6,7 @@ worked on and decisions produced. Supports cross-session continuity by
|
|
|
6
6
|
building the temporal layer that graph_context.py traverses.
|
|
7
7
|
|
|
8
8
|
Usage:
|
|
9
|
-
python3 .claude/skills/flydocs-
|
|
9
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_session.py \
|
|
10
10
|
--summary "Completed Phase 1, started Phase 2" \
|
|
11
11
|
[--issue FLY-56] [--issue FLY-174] \
|
|
12
12
|
[--decision 006] \
|
|
@@ -35,15 +35,6 @@ from graph_utils import (
|
|
|
35
35
|
DEFAULT_RETENTION_DAYS = 30
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def generate_session_id(session_date):
|
|
39
|
-
"""Generate a session ID like session:2026-02-17-a.
|
|
40
|
-
|
|
41
|
-
If a session with the same date exists, increment the sequence letter.
|
|
42
|
-
"""
|
|
43
|
-
base = f"session:{session_date}"
|
|
44
|
-
return base
|
|
45
|
-
|
|
46
|
-
|
|
47
38
|
def find_next_session_id(graph, session_date):
|
|
48
39
|
"""Find the next available session ID for a given date."""
|
|
49
40
|
nodes = graph.get("nodes", {})
|
package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_update.py
RENAMED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"""Incrementally add or remove nodes and edges in the context graph.
|
|
3
3
|
|
|
4
4
|
Usage:
|
|
5
|
-
python3 .claude/skills/flydocs-
|
|
5
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_update.py \\
|
|
6
6
|
add-node <ID> --type <TYPE> [--label STR] [--path STR]
|
|
7
7
|
|
|
8
|
-
python3 .claude/skills/flydocs-
|
|
8
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_update.py \\
|
|
9
9
|
remove-node <ID>
|
|
10
10
|
|
|
11
|
-
python3 .claude/skills/flydocs-
|
|
11
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_update.py \\
|
|
12
12
|
add-edge <FROM> <TO> <REL> [--weight N] [--manual]
|
|
13
13
|
|
|
14
|
-
python3 .claude/skills/flydocs-
|
|
14
|
+
python3 .claude/skills/flydocs-workflow/scripts/graph_update.py \\
|
|
15
15
|
remove-edge <FROM> <TO> <REL>
|
|
16
16
|
"""
|
|
17
17
|
|
package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_utils.py
RENAMED
|
@@ -11,10 +11,11 @@ from pathlib import Path
|
|
|
11
11
|
|
|
12
12
|
GRAPH_REL_PATH = os.path.join("flydocs", "context", "graph.json")
|
|
13
13
|
|
|
14
|
-
VALID_NODE_TYPES = {"skill", "decision", "issue", "module", "session", "concept"}
|
|
14
|
+
VALID_NODE_TYPES = {"skill", "decision", "issue", "module", "session", "concept", "repo"}
|
|
15
15
|
VALID_REL_TYPES = {
|
|
16
16
|
"EXTENDS", "IMPLEMENTS", "DELEGATES_TO", "PRECEDES", "MODIFIES",
|
|
17
17
|
"WORKED_ON", "PRODUCED", "RELATES_TO", "SUPERSEDES", "BLOCKS",
|
|
18
|
+
"PROVIDES", "CONSUMES",
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
|