@flydocs/cli 0.5.0-beta.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/README.md +96 -0
- package/dist/cli.js +2666 -0
- package/package.json +32 -0
- package/template/.claude/CLAUDE.md +90 -0
- package/template/.claude/agents/README.md +19 -0
- package/template/.claude/agents/implementation-agent.md +29 -0
- package/template/.claude/agents/pm-agent.md +29 -0
- package/template/.claude/agents/research-agent.md +25 -0
- package/template/.claude/agents/review-agent.md +29 -0
- package/template/.claude/commands/activate.md +10 -0
- package/template/.claude/commands/attach.md +9 -0
- package/template/.claude/commands/block.md +10 -0
- package/template/.claude/commands/capture.md +10 -0
- package/template/.claude/commands/close.md +10 -0
- package/template/.claude/commands/flydocs-setup.md +598 -0
- package/template/.claude/commands/flydocs-update.md +27 -0
- package/template/.claude/commands/implement.md +10 -0
- package/template/.claude/commands/new-project.md +11 -0
- package/template/.claude/commands/project-update.md +10 -0
- package/template/.claude/commands/refine.md +10 -0
- package/template/.claude/commands/review.md +10 -0
- package/template/.claude/commands/start-session.md +10 -0
- package/template/.claude/commands/status.md +10 -0
- package/template/.claude/commands/validate.md +10 -0
- package/template/.claude/commands/wrap-session.md +10 -0
- package/template/.claude/settings.json +49 -0
- package/template/.claude/skills/README.md +293 -0
- package/template/.claude/skills/flydocs-cloud/SKILL.md +96 -0
- package/template/.claude/skills/flydocs-cloud/cursor-rule.mdc +50 -0
- package/template/.claude/skills/flydocs-cloud/scripts/assign.py +38 -0
- package/template/.claude/skills/flydocs-cloud/scripts/assign_cycle.py +44 -0
- package/template/.claude/skills/flydocs-cloud/scripts/assign_milestone.py +44 -0
- package/template/.claude/skills/flydocs-cloud/scripts/comment.py +39 -0
- package/template/.claude/skills/flydocs-cloud/scripts/create_issue.py +100 -0
- package/template/.claude/skills/flydocs-cloud/scripts/create_milestone.py +46 -0
- package/template/.claude/skills/flydocs-cloud/scripts/create_project.py +40 -0
- package/template/.claude/skills/flydocs-cloud/scripts/estimate.py +38 -0
- package/template/.claude/skills/flydocs-cloud/scripts/flydocs_api.py +277 -0
- package/template/.claude/skills/flydocs-cloud/scripts/get_issue.py +77 -0
- package/template/.claude/skills/flydocs-cloud/scripts/link.py +47 -0
- package/template/.claude/skills/flydocs-cloud/scripts/list_cycles.py +35 -0
- package/template/.claude/skills/flydocs-cloud/scripts/list_issues.py +105 -0
- package/template/.claude/skills/flydocs-cloud/scripts/list_milestones.py +40 -0
- package/template/.claude/skills/flydocs-cloud/scripts/list_projects.py +45 -0
- package/template/.claude/skills/flydocs-cloud/scripts/priority.py +38 -0
- package/template/.claude/skills/flydocs-cloud/scripts/project_update.py +59 -0
- package/template/.claude/skills/flydocs-cloud/scripts/transition.py +67 -0
- package/template/.claude/skills/flydocs-cloud/scripts/update_description.py +47 -0
- package/template/.claude/skills/flydocs-cloud/scripts/update_issue.py +111 -0
- package/template/.claude/skills/flydocs-context-graph/SKILL.md +87 -0
- package/template/.claude/skills/flydocs-context-graph/schema.md +78 -0
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_build.py +299 -0
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_context.py +338 -0
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_query.py +191 -0
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_session.py +161 -0
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_update.py +194 -0
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_utils.py +118 -0
- package/template/.claude/skills/flydocs-estimates/SKILL.md +384 -0
- package/template/.claude/skills/flydocs-estimates/references/provider-costs.md +152 -0
- package/template/.claude/skills/flydocs-figma/SKILL.md +377 -0
- package/template/.claude/skills/flydocs-figma/references/PROMPTING.md +108 -0
- package/template/.claude/skills/flydocs-figma/references/TROUBLESHOOTING.md +112 -0
- package/template/.claude/skills/flydocs-local/SKILL.md +103 -0
- package/template/.claude/skills/flydocs-local/cursor-rule.mdc +43 -0
- package/template/.claude/skills/flydocs-local/scripts/assign.py +20 -0
- package/template/.claude/skills/flydocs-local/scripts/comment.py +27 -0
- package/template/.claude/skills/flydocs-local/scripts/create_issue.py +44 -0
- package/template/.claude/skills/flydocs-local/scripts/estimate.py +37 -0
- package/template/.claude/skills/flydocs-local/scripts/flydocs_api.py +272 -0
- package/template/.claude/skills/flydocs-local/scripts/get_issue.py +20 -0
- package/template/.claude/skills/flydocs-local/scripts/link.py +41 -0
- package/template/.claude/skills/flydocs-local/scripts/list_issues.py +34 -0
- package/template/.claude/skills/flydocs-local/scripts/priority.py +37 -0
- package/template/.claude/skills/flydocs-local/scripts/project_update.py +67 -0
- package/template/.claude/skills/flydocs-local/scripts/status_summary.py +16 -0
- package/template/.claude/skills/flydocs-local/scripts/transition.py +24 -0
- package/template/.claude/skills/flydocs-local/scripts/update_description.py +35 -0
- package/template/.claude/skills/flydocs-local/scripts/update_issue.py +84 -0
- package/template/.claude/skills/flydocs-workflow/SKILL.md +85 -0
- package/template/.claude/skills/flydocs-workflow/cursor-rule.mdc +53 -0
- package/template/.claude/skills/flydocs-workflow/reference/comment-templates.md +131 -0
- package/template/.claude/skills/flydocs-workflow/reference/golden-rules.md +76 -0
- package/template/.claude/skills/flydocs-workflow/reference/priority-estimates.md +28 -0
- package/template/.claude/skills/flydocs-workflow/reference/status-workflow.md +50 -0
- package/template/.claude/skills/flydocs-workflow/session.md +128 -0
- package/template/.claude/skills/flydocs-workflow/stages/activate.md +46 -0
- package/template/.claude/skills/flydocs-workflow/stages/capture.md +50 -0
- package/template/.claude/skills/flydocs-workflow/stages/close.md +32 -0
- package/template/.claude/skills/flydocs-workflow/stages/implement.md +124 -0
- package/template/.claude/skills/flydocs-workflow/stages/refine.md +51 -0
- package/template/.claude/skills/flydocs-workflow/stages/review.md +86 -0
- package/template/.claude/skills/flydocs-workflow/stages/validate.md +90 -0
- package/template/.claude/skills/flydocs-workflow/templates/bug.md +95 -0
- package/template/.claude/skills/flydocs-workflow/templates/chore.md +75 -0
- package/template/.claude/skills/flydocs-workflow/templates/feature.md +93 -0
- package/template/.claude/skills/flydocs-workflow/templates/idea.md +84 -0
- package/template/.cursor/agents/implementation-agent.md +28 -0
- package/template/.cursor/agents/pm-agent.md +27 -0
- package/template/.cursor/agents/research-agent.md +23 -0
- package/template/.cursor/agents/review-agent.md +27 -0
- package/template/.cursor/hooks.json +29 -0
- package/template/.cursor/mcp.json +16 -0
- package/template/.env.example +44 -0
- package/template/.flydocs/config.json +104 -0
- package/template/.flydocs/hooks/auto-approve.py +71 -0
- package/template/.flydocs/hooks/post-edit.py +72 -0
- package/template/.flydocs/hooks/prefer-scripts.py +89 -0
- package/template/.flydocs/hooks/prompt-submit.py +277 -0
- package/template/.flydocs/scripts/generate_manifest.py +287 -0
- package/template/.flydocs/scripts/skill_manager.py +541 -0
- package/template/.flydocs/templates/README.md +46 -0
- package/template/.flydocs/templates/bug.md +166 -0
- package/template/.flydocs/templates/chore.md +110 -0
- package/template/.flydocs/templates/design-system/README.md +27 -0
- package/template/.flydocs/templates/design-system/component-patterns.md +92 -0
- package/template/.flydocs/templates/design-system/token-mapping.md +168 -0
- package/template/.flydocs/templates/feature.md +173 -0
- package/template/.flydocs/templates/idea.md +122 -0
- package/template/.flydocs/templates/instructions.md +228 -0
- package/template/.flydocs/templates/quick-capture.md +35 -0
- package/template/.flydocs/templates/scripts/check-design-system.template.mjs +179 -0
- package/template/.flydocs/version +1 -0
- package/template/AGENTS.md +95 -0
- package/template/CHANGELOG.md +271 -0
- package/template/flydocs/README.md +186 -0
- package/template/flydocs/context/project.md +51 -0
- package/template/flydocs/design-system/README.md +126 -0
- package/template/flydocs/design-system/component-patterns.md +173 -0
- package/template/flydocs/design-system/token-mapping.md +114 -0
- package/template/flydocs/knowledge/INDEX.md +100 -0
- package/template/flydocs/knowledge/README.md +62 -0
- package/template/flydocs/knowledge/product/personas.md +79 -0
- package/template/flydocs/knowledge/product/user-flows.md +88 -0
- package/template/manifest.json +221 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design System Validation Script
|
|
3
|
+
*
|
|
4
|
+
* Scans source files for design system violations.
|
|
5
|
+
* Configurable forbidden/allowed patterns.
|
|
6
|
+
*
|
|
7
|
+
* Usage: node scripts/check-design-system.mjs
|
|
8
|
+
*
|
|
9
|
+
* Configure by editing the FORBIDDEN_PATTERNS and ALLOWED_PATTERNS arrays.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import fs from 'node:fs'
|
|
13
|
+
import path from 'node:path'
|
|
14
|
+
|
|
15
|
+
const ROOT = process.cwd()
|
|
16
|
+
const SRC_DIR = path.join(ROOT, 'src')
|
|
17
|
+
|
|
18
|
+
const FILE_EXTENSIONS = new Set(['.ts', '.tsx', '.css', '.jsx', '.js'])
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Forbidden patterns - these will cause validation to fail
|
|
22
|
+
*
|
|
23
|
+
* Customize based on your design system:
|
|
24
|
+
* - Add patterns for hardcoded values you want to catch
|
|
25
|
+
* - Remove patterns that don't apply to your framework
|
|
26
|
+
*/
|
|
27
|
+
const FORBIDDEN_PATTERNS = [
|
|
28
|
+
{
|
|
29
|
+
name: 'Hardcoded spacing arbitrary values (p-/m-/gap-[..px])',
|
|
30
|
+
regex: /\b(p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|gap)-\[[0-9.]+px\]/g,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'Hardcoded radius arbitrary values (rounded-[..px])',
|
|
34
|
+
regex: /\brounded-\[[0-9.]+px\]/g,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Hardcoded hex colors (#fff/#ffffff)',
|
|
38
|
+
regex: /#[0-9a-fA-F]{3,8}/g,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Hardcoded rgba() colors',
|
|
42
|
+
regex: /rgba\(/g,
|
|
43
|
+
},
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Allowed patterns - these are exceptions that won't be flagged
|
|
48
|
+
*
|
|
49
|
+
* Common exceptions:
|
|
50
|
+
* - Layout/intrinsic sizing (w-[Xpx], h-[Xpx], max-w-[Xpx])
|
|
51
|
+
* - Specific one-off values that are documented
|
|
52
|
+
*/
|
|
53
|
+
const ALLOWED_PATTERNS = [
|
|
54
|
+
// Layout/intrinsic sizing whitelist
|
|
55
|
+
/\b(max-w|min-w|w|h|max-h|min-h)-\[[0-9.]+px\]/g,
|
|
56
|
+
// Thin borders
|
|
57
|
+
/\bborder-\[0\.5px\]/g,
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Paths to skip during validation
|
|
62
|
+
*
|
|
63
|
+
* Add paths that should not be checked:
|
|
64
|
+
* - Style definition files
|
|
65
|
+
* - Mocks and test utilities
|
|
66
|
+
* - Generated files
|
|
67
|
+
*/
|
|
68
|
+
const SKIP_PATH_FRAGMENTS = [
|
|
69
|
+
`${path.sep}src${path.sep}styles${path.sep}`,
|
|
70
|
+
`${path.sep}src${path.sep}mocks${path.sep}`,
|
|
71
|
+
`${path.sep}src${path.sep}test${path.sep}`,
|
|
72
|
+
`${path.sep}CLAUDE.md`,
|
|
73
|
+
`${path.sep}node_modules${path.sep}`,
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
function shouldSkipFile(filePath) {
|
|
77
|
+
return SKIP_PATH_FRAGMENTS.some((frag) => filePath.includes(frag))
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function listFilesRecursive(dirPath) {
|
|
81
|
+
const results = []
|
|
82
|
+
|
|
83
|
+
if (!fs.existsSync(dirPath)) {
|
|
84
|
+
return results
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true })
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
const fullPath = path.join(dirPath, entry.name)
|
|
90
|
+
if (entry.isDirectory()) {
|
|
91
|
+
results.push(...listFilesRecursive(fullPath))
|
|
92
|
+
continue
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const ext = path.extname(entry.name)
|
|
96
|
+
if (FILE_EXTENSIONS.has(ext)) {
|
|
97
|
+
results.push(fullPath)
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return results
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function maskAllowed(text) {
|
|
105
|
+
let masked = text
|
|
106
|
+
for (const allowed of ALLOWED_PATTERNS) {
|
|
107
|
+
masked = masked.replaceAll(allowed, '')
|
|
108
|
+
}
|
|
109
|
+
return masked
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function findMatches(content, regex) {
|
|
113
|
+
const matches = []
|
|
114
|
+
|
|
115
|
+
const re = new RegExp(regex.source, regex.flags)
|
|
116
|
+
let m
|
|
117
|
+
while ((m = re.exec(content)) !== null) {
|
|
118
|
+
matches.push({ index: m.index, match: m[0] })
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return matches
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function getLineInfo(content, index) {
|
|
125
|
+
const upToIndex = content.slice(0, index)
|
|
126
|
+
const line = upToIndex.split('\n').length
|
|
127
|
+
const lineStart = upToIndex.lastIndexOf('\n') + 1
|
|
128
|
+
const lineEnd = content.indexOf('\n', index)
|
|
129
|
+
const end = lineEnd === -1 ? content.length : lineEnd
|
|
130
|
+
const lineText = content.slice(lineStart, end)
|
|
131
|
+
return { line, lineText }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function main() {
|
|
135
|
+
if (!fs.existsSync(SRC_DIR)) {
|
|
136
|
+
console.error('Cannot find src/ directory to scan.')
|
|
137
|
+
process.exit(2)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const files = listFilesRecursive(SRC_DIR).filter((f) => !shouldSkipFile(f))
|
|
141
|
+
|
|
142
|
+
const violations = []
|
|
143
|
+
|
|
144
|
+
for (const filePath of files) {
|
|
145
|
+
const raw = fs.readFileSync(filePath, 'utf8')
|
|
146
|
+
const content = maskAllowed(raw)
|
|
147
|
+
|
|
148
|
+
for (const rule of FORBIDDEN_PATTERNS) {
|
|
149
|
+
const matches = findMatches(content, rule.regex)
|
|
150
|
+
for (const match of matches) {
|
|
151
|
+
const { line, lineText } = getLineInfo(raw, match.index)
|
|
152
|
+
violations.push({
|
|
153
|
+
file: path.relative(ROOT, filePath),
|
|
154
|
+
line,
|
|
155
|
+
rule: rule.name,
|
|
156
|
+
snippet: lineText.trim(),
|
|
157
|
+
})
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (violations.length === 0) {
|
|
163
|
+
console.log('✅ Design system check passed.')
|
|
164
|
+
return
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
console.error(`❌ Design system check failed: ${violations.length} violation(s) found.\n`)
|
|
168
|
+
for (const v of violations) {
|
|
169
|
+
console.error(` ${v.file}:${v.line}`)
|
|
170
|
+
console.error(` Rule: ${v.rule}`)
|
|
171
|
+
console.error(` Code: ${v.snippet}\n`)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
process.exit(1)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
main()
|
|
178
|
+
|
|
179
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.4.0
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# FlyDocs Agent Instructions
|
|
2
|
+
|
|
3
|
+
Prefer reading project documentation over guessing from training data.
|
|
4
|
+
When performing workflow, issue management, or process tasks, consult the
|
|
5
|
+
relevant documentation files before acting.
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
|
|
9
|
+
1. **Use scripts for all issue operations.** Create, transition, comment, assign — execute scripts, don't describe actions.
|
|
10
|
+
2. **Every status transition gets a comment.** No silent moves.
|
|
11
|
+
3. **Assignment required before In Progress.** Always assign before starting work.
|
|
12
|
+
4. **Checkboxes live in issue description, never comments.** Update the description to track progress.
|
|
13
|
+
5. **Session wrap posts a summary.** Summarize progress at end of session.
|
|
14
|
+
6. **No secrets in commits.** Never commit `.env`, credentials, or API keys.
|
|
15
|
+
|
|
16
|
+
## Workflow
|
|
17
|
+
|
|
18
|
+
The development lifecycle follows seven stages:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Capture → Refine → Activate → Implement → Review → Validate → Close
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
| Stage | What Happens |
|
|
25
|
+
|-------|--------------|
|
|
26
|
+
| Capture | Create issue from input (feature, bug, chore, idea) |
|
|
27
|
+
| Refine | Triage, fill template, set priority and estimate |
|
|
28
|
+
| Activate | Assign to person, transition to In Progress |
|
|
29
|
+
| Implement | Build incrementally, document decisions, self-review |
|
|
30
|
+
| Review | Code quality check against acceptance criteria |
|
|
31
|
+
| Validate | User acceptance testing, collect approval |
|
|
32
|
+
| Close | Verify approval, mark as Done |
|
|
33
|
+
|
|
34
|
+
Detailed procedures: `.claude/skills/flydocs-workflow/`
|
|
35
|
+
|
|
36
|
+
## Issue Operations
|
|
37
|
+
|
|
38
|
+
Scripts handle all issue management. The active backend (local files or cloud provider) determines the implementation.
|
|
39
|
+
|
|
40
|
+
**Available operations:** create issue, transition status, add comment, list issues, get issue details, assign, update description, status summary.
|
|
41
|
+
|
|
42
|
+
Script location: `.claude/skills/flydocs-local/scripts/` or `.claude/skills/flydocs-cloud/scripts/`
|
|
43
|
+
|
|
44
|
+
## Premium Skills
|
|
45
|
+
|
|
46
|
+
| Skill | Documentation |
|
|
47
|
+
|-------|---------------|
|
|
48
|
+
| Figma Integration | `.claude/skills/flydocs-figma/` — design extraction, token mapping |
|
|
49
|
+
| Cost Estimation | `.claude/skills/flydocs-estimates/` — AI token/labor estimates (opt-in) |
|
|
50
|
+
|
|
51
|
+
## Writing Style
|
|
52
|
+
|
|
53
|
+
When writing or editing any copy — product docs, marketing pages, website copy, wikis, etc:
|
|
54
|
+
|
|
55
|
+
- Write like a sharp colleague, not a brochure. Clear, confident, human.
|
|
56
|
+
- Active voice by default. "We built X" not "X was built to enable..."
|
|
57
|
+
- Vary sentence rhythm. Short sentences land. Longer ones can unpack an idea when needed.
|
|
58
|
+
- Kill corporate filler: "leverage", "utilize", "facilitate", "in order to", "it should be noted that", "best-in-class", "robust."
|
|
59
|
+
- Use "you" and "we" naturally. Talk to the reader, not past them.
|
|
60
|
+
- Technical accuracy matters — but explain concepts plainly before going deep.
|
|
61
|
+
- No emoji. No exclamation marks. No hype. Let the product speak through clarity, not enthusiasm.
|
|
62
|
+
- Prefer concrete over abstract. "Cuts deploy time from 20 minutes to 3" beats "dramatically accelerates deployment workflows."
|
|
63
|
+
- One idea per paragraph. If a sentence doesn't earn its place, cut it.
|
|
64
|
+
- Don't repeat the same stat or claim more than once per page. Cross-page repetition is fine — readers land on individual pages.
|
|
65
|
+
- When differentiating, name what the alternative does and where it falls short. Don't just assert we're better — show the specific gap.
|
|
66
|
+
|
|
67
|
+
## Project Context
|
|
68
|
+
|
|
69
|
+
| File | Purpose |
|
|
70
|
+
|------|---------|
|
|
71
|
+
| `flydocs/context/project.md` | Product scope, tech stack, active priorities |
|
|
72
|
+
| `.flydocs/config.json` | Configuration — tier, provider, labels, active projects |
|
|
73
|
+
|
|
74
|
+
<!-- flydocs:skills-manifest:start -->
|
|
75
|
+
## Skills Index
|
|
76
|
+
|
|
77
|
+
IMPORTANT: Prefer skill-led reasoning over pre-training reasoning.
|
|
78
|
+
Consult the relevant skill BEFORE writing code or making workflow decisions.
|
|
79
|
+
|
|
80
|
+
| Skill | Triggers | Entry |
|
|
81
|
+
|-------|----------|-------|
|
|
82
|
+
| flydocs-cloud | create issue, transition, comment, list issues, assign, update description, update issue, project update, Linear, cloud | .claude/skills/flydocs-cloud/SKILL.md |
|
|
83
|
+
| flydocs-estimates | estimate, cost, token usage, API cost, labor estimate, sizing, effort | .claude/skills/flydocs-estimates/SKILL.md |
|
|
84
|
+
| flydocs-figma | Figma, design, screenshot, token mapping, component from design, pixel-perfect, design system | .claude/skills/flydocs-figma/SKILL.md |
|
|
85
|
+
| flydocs-local | create issue, transition, comment, list issues, assign, update description, status summary, local | .claude/skills/flydocs-local/SKILL.md |
|
|
86
|
+
| flydocs-workflow | capture, refine, activate, implement, review, validate, close, session, workflow, transition, status, issue | .claude/skills/flydocs-workflow/SKILL.md |
|
|
87
|
+
<!-- flydocs:skills-manifest:end -->
|
|
88
|
+
|
|
89
|
+
## Platform Configuration
|
|
90
|
+
|
|
91
|
+
| Platform | Primary Config |
|
|
92
|
+
|----------|----------------|
|
|
93
|
+
| Claude Code | `.claude/CLAUDE.md` |
|
|
94
|
+
| Cursor | `.cursor/rules/*.mdc` |
|
|
95
|
+
| Codex / Windsurf / Others | This file (`AGENTS.md`) |
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to FlyDocs Core are documented here.
|
|
4
|
+
|
|
5
|
+
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
Versioning: [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## [0.4.0] — 2026-02-18
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Context Graph skill** (`flydocs-context-graph`) — relationship-aware knowledge
|
|
14
|
+
graph that connects skills, ADRs, issues, modules, and sessions. Implemented as
|
|
15
|
+
ADR-006 across five phases:
|
|
16
|
+
- `graph_build.py` — scans skills and ADRs, extracts cross-references, produces
|
|
17
|
+
`flydocs/context/graph.json`. Manual nodes/edges preserved on rebuild.
|
|
18
|
+
- `graph_query.py` — BFS traversal with depth, relationship type, and direction
|
|
19
|
+
filters. Outputs compressed markdown or JSON.
|
|
20
|
+
- `graph_update.py` — incremental add/remove for nodes and edges.
|
|
21
|
+
- `graph_context.py` — assembles compressed context block (~200-400 tokens) for
|
|
22
|
+
the prime hook given active issue and git branch.
|
|
23
|
+
- `graph_session.py` — records session outcomes as graph nodes with WORKED_ON
|
|
24
|
+
and PRODUCED edges for cross-session continuity.
|
|
25
|
+
- **Automatic context injection** — `prompt-submit.py` hook now calls `graph_context.py`
|
|
26
|
+
every prompt. Agents receive a temporal anchor (current date) and related decisions,
|
|
27
|
+
skills, and prior session summaries without any manual effort.
|
|
28
|
+
- **Skill ordering in manifest** — `generate_manifest.py` reads PRECEDES edges from
|
|
29
|
+
the graph and adds a "Loads After" column to the skills index table.
|
|
30
|
+
- **Install-time graph generation** — both fresh install and update paths call
|
|
31
|
+
`graph_build.py` after skill installation. Every FlyDocs project gets a context
|
|
32
|
+
graph automatically.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- **Session wrap procedure** — `session.md` now includes a step to record session
|
|
36
|
+
outcomes in the context graph via `graph_session.py`. Skips silently if not installed.
|
|
37
|
+
- **Session staleness policy** — session nodes within 7 days get full weight, linear
|
|
38
|
+
decay to 30 days, then excluded from context.
|
|
39
|
+
|
|
40
|
+
### Migration
|
|
41
|
+
- **`.gitignore` update** — `flydocs/context/graph.json` is automatically added to
|
|
42
|
+
`.gitignore` during update if missing. The graph is gitignored because it contains
|
|
43
|
+
session-specific data and can be rebuilt from sources.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## [0.3.10] — 2026-02-17
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
- **API null data crash** (FLY-178) — `flydocs_api.py` now normalizes `null` data
|
|
51
|
+
responses to empty dict before returning. Fixes `AttributeError` crashes in all
|
|
52
|
+
20+ scripts when Linear returns API errors. `create_issue.py` also retries without
|
|
53
|
+
labels when label IDs are rejected (stale config after team migration).
|
|
54
|
+
- **`assign_milestone.py` flag parsing** (FLY-179) — rewritten with argparse.
|
|
55
|
+
Now supports both positional (`assign_milestone.py REF UUID`) and flag
|
|
56
|
+
(`--milestone UUID`) syntax. Previously `--milestone` was captured as the
|
|
57
|
+
milestone ID value.
|
|
58
|
+
- **`list_milestones.py` missing fields** (FLY-180) — GraphQL query now includes
|
|
59
|
+
`sortOrder` and `project { id name }`. Output sorted by project then sortOrder.
|
|
60
|
+
- **Community skills recommendation UI** (FLY-48) — rendering artifacts resolved
|
|
61
|
+
by the `prompt_community_skills()` rewrite in 0.3.9.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## [0.3.9] — 2026-02-17
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
- **Skill search and install CLI** (ENG-443) — `flydocs skills` subcommand with
|
|
69
|
+
`search`, `add`, `remove`, and `list` operations. Search the curated community
|
|
70
|
+
skills catalog, install from known names or GitHub repo references, and manage
|
|
71
|
+
installed skills post-install. Platform skills (`flydocs-*`) are guarded from
|
|
72
|
+
modification. Installs validate SKILL.md frontmatter, copy cursor rules, update
|
|
73
|
+
config, and regenerate the skill manifest automatically.
|
|
74
|
+
- **Install.sh skill discovery update** (ENG-445) — community skill installation
|
|
75
|
+
now delegates to `skill_manager.py` (full directory download with validation)
|
|
76
|
+
instead of single-file curl. Added `--yes`/`-y` flag for non-interactive mode.
|
|
77
|
+
Enhanced stack detection: tsconfig.json (TypeScript), vitest, jest, testing-library.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## [0.3.8] — 2026-02-14
|
|
82
|
+
|
|
83
|
+
### Added
|
|
84
|
+
- **`create_issue.py --description-file` and stdin** — both cloud and local tiers now
|
|
85
|
+
accept `--description-file PATH` or piped stdin for issue descriptions. Eliminates
|
|
86
|
+
the two-step create + update_description workaround for long descriptions.
|
|
87
|
+
- **`update_issue.py --title`** — cloud tier bulk update script now supports renaming
|
|
88
|
+
issues via `--title "new title"`.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## [0.3.7] — 2026-02-11
|
|
93
|
+
|
|
94
|
+
### Added
|
|
95
|
+
- **Skill manifest generator** (ENG-442) — `generate_manifest.py` scans SKILL.md
|
|
96
|
+
frontmatter and produces a compressed skills index table. Injected into CLAUDE.md
|
|
97
|
+
and AGENTS.md between `<!-- flydocs:skills-manifest -->` markers. Bridges skill
|
|
98
|
+
discovery with on-demand retrieval — agents see triggers in always-loaded context.
|
|
99
|
+
- **`.flydocs/scripts/` owned directory** — shared utility scripts (not mechanism
|
|
100
|
+
scripts) now have a dedicated home, managed by manifest.json ownership.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## [0.3.6] — 2026-02-10
|
|
105
|
+
|
|
106
|
+
### Added
|
|
107
|
+
- **Milestone, project, and dueDate in issue output** — `list_issues.py` now returns
|
|
108
|
+
`milestone`, `milestoneId`, `milestoneSortOrder`, `project`, `projectId`, and `dueDate`
|
|
109
|
+
for every issue. `get_issue.py` returns the same fields (minus `milestoneSortOrder`).
|
|
110
|
+
Enables milestone-grouped dashboards and priority-based session planning.
|
|
111
|
+
|
|
112
|
+
### Changed
|
|
113
|
+
- **Session start workflow rewritten** — `session.md` now instructs agents to group issues
|
|
114
|
+
by milestone (in milestone order), identify the current milestone, suggest a starting point
|
|
115
|
+
based on priority cascade (blocked → in-progress → due soon → highest priority in current
|
|
116
|
+
milestone), and surface other product issues separately. Never shows issues outside
|
|
117
|
+
the product scope.
|
|
118
|
+
|
|
119
|
+
### Fixed
|
|
120
|
+
- **`create_milestone.py` missing projectId** — `ProjectMilestoneCreateInput` requires a
|
|
121
|
+
`projectId`. Script now defaults to first `activeProject` from config, with `--project`
|
|
122
|
+
flag to override.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## [0.3.5] — 2026-02-10
|
|
127
|
+
|
|
128
|
+
### Added
|
|
129
|
+
- **`list_projects.py` product scope** (ENG-475) — now respects `workspace.activeProjects`
|
|
130
|
+
config. `--all` bypasses product scope to show all team projects.
|
|
131
|
+
|
|
132
|
+
### Fixed
|
|
133
|
+
- **`list_projects.py` 400 error** (ENG-474) — state filter was using nested
|
|
134
|
+
`{type: {nin: [...]}}` instead of direct `StringComparator` `{nin: [...]}`.
|
|
135
|
+
Both `--active` (started only) and default (excludes completed/canceled) now work.
|
|
136
|
+
- **`list_projects.py --active`** — now correctly filters to only `started` projects
|
|
137
|
+
instead of being a no-op duplicate of the default behavior.
|
|
138
|
+
- **`assign_milestone.py` error handling** — null-safe check on API response prevents
|
|
139
|
+
`AttributeError` when GraphQL returns errors.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## [0.3.4] — 2026-02-10
|
|
144
|
+
|
|
145
|
+
### Added
|
|
146
|
+
- **`list_issues.py --milestone` filter** — filter issues by project milestone ID.
|
|
147
|
+
Get milestone IDs from `list_milestones.py`, then pass to `list_issues.py --milestone <ID>`
|
|
148
|
+
to see all issues within a specific milestone.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## [0.3.3] — 2026-02-10
|
|
153
|
+
|
|
154
|
+
### Fixed
|
|
155
|
+
- **Shell escaping in `update_description.py`** — descriptions with apostrophes,
|
|
156
|
+
parentheses, quotes, and other shell metacharacters no longer break when passed
|
|
157
|
+
via `--text`. Scripts now accept stdin as input, allowing safe heredoc piping:
|
|
158
|
+
`python3 update_description.py ENG-123 <<'EOF'`
|
|
159
|
+
- **Shell escaping in `comment.py`** — same stdin fallback added. Comment body
|
|
160
|
+
argument is now optional when piping via stdin.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## [0.3.2] — 2026-02-09
|
|
165
|
+
|
|
166
|
+
### Fixed
|
|
167
|
+
- **API connection reliability** — reduced socket timeout from 30s to 10s and increased
|
|
168
|
+
max retries from 3 to 5. Resolves intermittent hangs caused by DNS returning unreachable
|
|
169
|
+
Cloudflare edge IPs. Scripts now fail over to a working IP within seconds instead of
|
|
170
|
+
waiting 10-30s per attempt.
|
|
171
|
+
- **TimeoutError handling** — retry loop now catches `TimeoutError` in addition to
|
|
172
|
+
`URLError`, preventing unhandled socket timeouts from crashing scripts.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## [0.3.1] — 2026-02-08
|
|
177
|
+
|
|
178
|
+
### Fixed
|
|
179
|
+
- **`list_issues.py` product scope** — scoping via `activeProjects` and `product.labelIds`
|
|
180
|
+
now applies regardless of `--active` or `--status` flags. Previously, these flags
|
|
181
|
+
bypassed product scope entirely, returning all team issues.
|
|
182
|
+
|
|
183
|
+
### Added
|
|
184
|
+
- **`build_product_scope()` API helper** — new method on `FlyDocsClient` implements the
|
|
185
|
+
product scope cascade: `activeProjects` → `product.labelIds` → team-wide.
|
|
186
|
+
- **Multiple `activeProjects` support** — `list_issues.py` now uses OR logic when
|
|
187
|
+
multiple active projects are configured (was only using the first one).
|
|
188
|
+
- **Product label AND filtering** — when `product.labelIds` is set and no `activeProjects`
|
|
189
|
+
are configured, issues must have ALL specified labels to be included.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## [0.3.0] — 2026-02-08
|
|
194
|
+
|
|
195
|
+
### Added
|
|
196
|
+
- **`update_issue.py` bulk update script** — set multiple fields (priority, estimate,
|
|
197
|
+
assignee, state, description, comment) in a single API call instead of separate scripts.
|
|
198
|
+
- **`list_issues.py --active` flag** — returns all non-terminal issues (excludes Done,
|
|
199
|
+
Archived, Canceled, Duplicate). Replaces `status_summary.py`.
|
|
200
|
+
- **`list_issues.py` multi-status support** — comma-separated: `--status READY,IMPLEMENTING,BLOCKED`
|
|
201
|
+
- **`get_issue.py --fields` flag** — `basic` skips comment fetch for faster responses,
|
|
202
|
+
`full` includes comments (default).
|
|
203
|
+
- **In-process API caching** — issue ID resolution, team members, and active cycle
|
|
204
|
+
cached within each script invocation to reduce redundant API calls.
|
|
205
|
+
|
|
206
|
+
### Changed
|
|
207
|
+
- **`transition.py` optimized** — combined state update and cycle assignment into a
|
|
208
|
+
single `issueUpdate` mutation (was two separate calls for IMPLEMENTING transitions).
|
|
209
|
+
- **Session start efficiency** — single `list_issues.py --active` call replaces
|
|
210
|
+
per-status queries. Issues grouped by status in response.
|
|
211
|
+
|
|
212
|
+
### Removed
|
|
213
|
+
- **`status_summary.py`** — retired from cloud mechanism. Use `list_issues.py --active`
|
|
214
|
+
and group results by the status field instead.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## [0.2.1] — 2026-02-07
|
|
219
|
+
|
|
220
|
+
### Fixed
|
|
221
|
+
- **Commands not fully populating** — changed from additive `cp` to clear-then-copy
|
|
222
|
+
for `.claude/commands/` and `.cursor/commands/` directories.
|
|
223
|
+
- **`docflow-core.mdc` not cleaned up** — added to deprecated cursor rules list.
|
|
224
|
+
- **Config version not set on fresh install** — fresh install path now sets version
|
|
225
|
+
in `config.json`.
|
|
226
|
+
- **Template config version mismatch** — template `config.json` was `0.1.0`, now
|
|
227
|
+
synced with version file.
|
|
228
|
+
|
|
229
|
+
### Added
|
|
230
|
+
- **`--force` flag** — force update even when versions match.
|
|
231
|
+
- **Old cursor rule directories and commands** added to deprecated cleanup.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## [0.2.0] — 2026-02-06
|
|
236
|
+
|
|
237
|
+
### Added
|
|
238
|
+
- **Scenario-aware setup command** — `/flydocs-setup` rewritten as a comprehensive
|
|
239
|
+
agent prompt handling three scenarios: New Project, DocFlow Migration, FlyDocs Update.
|
|
240
|
+
Includes proactive repo scanning for PRDs and existing documentation.
|
|
241
|
+
- **Changelog and version tracking** — `CHANGELOG.md` included in every install.
|
|
242
|
+
`install.sh --update` now displays what changed between your version and the new one.
|
|
243
|
+
- **Legacy context migration** — `install.sh` safely moves pre-v1.0 separate context
|
|
244
|
+
files (`overview.md`, `stack.md`, `standards.md`) to a `legacy/` folder. The setup
|
|
245
|
+
command reads from legacy, consolidates into `project.md`, and cleans up.
|
|
246
|
+
- **Deprecated file cleanup** — `install.sh --update` detects and offers to remove
|
|
247
|
+
pre-v1.0 artifacts: old skills, rules, hooks, and cursor rules.
|
|
248
|
+
|
|
249
|
+
### Changed
|
|
250
|
+
- **Version file synced with manifest** — `.flydocs/version` now matches
|
|
251
|
+
`manifest.json` version field (was out of sync in 0.1.0).
|
|
252
|
+
|
|
253
|
+
### Removed
|
|
254
|
+
- Orphaned hook scripts: `session-end.py`, `linear-auto-approve.py`
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## [0.1.0] — 2026-01-15
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
- Initial release of FlyDocs Core
|
|
262
|
+
- Workflow skill (`flydocs-workflow`) with full lifecycle stages
|
|
263
|
+
- Mechanism skills: `flydocs-cloud` (Linear API) and `flydocs-local` (file-based)
|
|
264
|
+
- Premium skills: `flydocs-figma`, `flydocs-estimates`
|
|
265
|
+
- Agent definitions: PM, Implementation, Review, Research
|
|
266
|
+
- 16 slash commands for the full development workflow
|
|
267
|
+
- Hook scripts: auto-approve, prefer-scripts, post-edit, prompt-submit
|
|
268
|
+
- Issue templates: feature, bug, chore, idea
|
|
269
|
+
- Community skill suggestions based on detected stack
|
|
270
|
+
- `install.sh` with fresh install and update modes
|
|
271
|
+
- Remote installation via GitHub App token
|