ac-framework 1.6.0 → 1.8.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 +299 -185
- package/bin/postinstall.js +8 -1
- package/framework/.agent/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.agent/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.agent/skills/brainstorming/SKILL.md +266 -38
- package/framework/.agent/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.agent/skills/code-review/SKILL.md +250 -0
- package/framework/.agent/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.agent/skills/documentation/SKILL.md +441 -0
- package/framework/.agent/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.agent/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.agent/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.agent/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.agent/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.agent/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.agent/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.agent/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.agent/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.agent/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.agent/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.agent/skills/testing-qa/SKILL.md +249 -0
- package/framework/.agent/workflows/ac-lite.md +192 -0
- package/framework/.agent/workflows/ac.md +402 -177
- package/framework/.amazonq/prompts/ac-lite.md +192 -0
- package/framework/.amazonq/prompts/ac.md +402 -177
- package/framework/.amazonq/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.amazonq/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.amazonq/skills/brainstorming/SKILL.md +266 -38
- package/framework/.amazonq/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.amazonq/skills/code-review/SKILL.md +250 -0
- package/framework/.amazonq/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.amazonq/skills/documentation/SKILL.md +441 -0
- package/framework/.amazonq/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.amazonq/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.amazonq/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.amazonq/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.amazonq/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.amazonq/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.amazonq/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.amazonq/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.amazonq/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.amazonq/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.amazonq/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.amazonq/skills/testing-qa/SKILL.md +249 -0
- package/framework/.antigravity/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.antigravity/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.antigravity/skills/api-design-principles/SKILL.md +528 -0
- package/framework/.antigravity/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/framework/.antigravity/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/framework/.antigravity/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/framework/.antigravity/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/framework/.antigravity/skills/brainstorming/SKILL.md +282 -0
- package/framework/.antigravity/skills/changelog-generator/SKILL.md +104 -0
- package/framework/.antigravity/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.antigravity/skills/code-maintainability/SKILL.md +1108 -0
- package/framework/.antigravity/skills/code-review/SKILL.md +250 -0
- package/framework/.antigravity/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.antigravity/skills/documentation/SKILL.md +441 -0
- package/framework/.antigravity/skills/error-handling-patterns/SKILL.md +641 -0
- package/framework/.antigravity/skills/interface-design/SKILL.md +310 -0
- package/framework/.antigravity/skills/interface-design/references/example.md +86 -0
- package/framework/.antigravity/skills/interface-design/references/principles.md +235 -0
- package/framework/.antigravity/skills/interface-design/references/validation.md +48 -0
- package/framework/.antigravity/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.antigravity/skills/openspec-apply-change/SKILL.md +172 -0
- package/framework/.antigravity/skills/openspec-archive-change/SKILL.md +130 -0
- package/framework/.antigravity/skills/openspec-bulk-archive-change/SKILL.md +262 -0
- package/framework/.antigravity/skills/openspec-continue-change/SKILL.md +134 -0
- package/framework/.antigravity/skills/openspec-explore/SKILL.md +306 -0
- package/framework/.antigravity/skills/openspec-ff-change/SKILL.md +117 -0
- package/framework/.antigravity/skills/openspec-new-change/SKILL.md +90 -0
- package/framework/.antigravity/skills/openspec-onboard/SKILL.md +529 -0
- package/framework/.antigravity/skills/openspec-sync-specs/SKILL.md +154 -0
- package/framework/.antigravity/skills/openspec-verify-change/SKILL.md +184 -0
- package/framework/.antigravity/skills/performance-optimizer/SKILL.md +43 -0
- package/framework/.antigravity/skills/project-constitution/SKILL.md +66 -0
- package/framework/.antigravity/skills/project-index/SKILL.md +234 -0
- package/framework/.antigravity/skills/project-index/scripts/scan_codebase.py +47 -0
- package/framework/.antigravity/skills/project-index/templates/agent-template.md +18 -0
- package/framework/.antigravity/skills/project-index/templates/skill-template.md +20 -0
- package/framework/.antigravity/skills/requirement-checklist/SKILL.md +90 -0
- package/framework/.antigravity/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.antigravity/skills/secure-coding-cybersecurity/SKILL.md +793 -0
- package/framework/.antigravity/skills/secure-coding-cybersecurity/references/ai_coding_pitfalls.md +44 -0
- package/framework/.antigravity/skills/secure-coding-cybersecurity/references/owasp_top_10_2025.md +28 -0
- package/framework/.antigravity/skills/secure-coding-cybersecurity/references/secure_coding_examples.md +102 -0
- package/framework/.antigravity/skills/secure-coding-cybersecurity/scripts/security_audit.py +46 -0
- package/framework/.antigravity/skills/skill-writer/SKILL.md +385 -0
- package/framework/.antigravity/skills/spec-analysis/SKILL.md +65 -0
- package/framework/.antigravity/skills/spec-clarification/SKILL.md +73 -0
- package/framework/.antigravity/skills/sync-index/SKILL.md +35 -0
- package/framework/.antigravity/skills/systematic-debugging/SKILL.md +296 -0
- package/framework/.antigravity/skills/test-generator/SKILL.md +41 -0
- package/framework/.antigravity/skills/testing-qa/SKILL.md +249 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/framework/.antigravity/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/framework/.antigravity/workflows/ac-lite.md +192 -0
- package/framework/.antigravity/workflows/ac.md +486 -0
- package/framework/.augment/commands/ac-lite.md +192 -0
- package/framework/.augment/commands/ac.md +402 -177
- package/framework/.augment/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.augment/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.augment/skills/brainstorming/SKILL.md +266 -38
- package/framework/.augment/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.augment/skills/code-review/SKILL.md +250 -0
- package/framework/.augment/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.augment/skills/documentation/SKILL.md +441 -0
- package/framework/.augment/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.augment/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.augment/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.augment/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.augment/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.augment/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.augment/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.augment/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.augment/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.augment/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.augment/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.augment/skills/testing-qa/SKILL.md +249 -0
- package/framework/.claude/commands/opsx/ac-lite.md +192 -0
- package/framework/.claude/commands/opsx/ac.md +402 -177
- package/framework/.claude/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.claude/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.claude/skills/brainstorming/SKILL.md +266 -38
- package/framework/.claude/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.claude/skills/code-review/SKILL.md +250 -0
- package/framework/.claude/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.claude/skills/documentation/SKILL.md +441 -0
- package/framework/.claude/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.claude/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.claude/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.claude/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.claude/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.claude/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.claude/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.claude/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.claude/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.claude/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.claude/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.claude/skills/testing-qa/SKILL.md +249 -0
- package/framework/.cline/commands/opsx/ac-lite.md +192 -0
- package/framework/.cline/commands/opsx/ac.md +486 -0
- package/framework/.cline/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.cline/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.cline/skills/brainstorming/SKILL.md +266 -38
- package/framework/.cline/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.cline/skills/code-review/SKILL.md +250 -0
- package/framework/.cline/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.cline/skills/documentation/SKILL.md +441 -0
- package/framework/.cline/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.cline/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.cline/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.cline/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.cline/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.cline/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.cline/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.cline/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.cline/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.cline/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.cline/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.cline/skills/testing-qa/SKILL.md +249 -0
- package/framework/.clinerules/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.clinerules/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.clinerules/skills/brainstorming/SKILL.md +266 -38
- package/framework/.clinerules/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.clinerules/skills/code-review/SKILL.md +250 -0
- package/framework/.clinerules/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.clinerules/skills/documentation/SKILL.md +441 -0
- package/framework/.clinerules/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.clinerules/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.clinerules/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.clinerules/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.clinerules/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.clinerules/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.clinerules/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.clinerules/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.clinerules/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.clinerules/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.clinerules/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.clinerules/skills/testing-qa/SKILL.md +249 -0
- package/framework/.clinerules/workflows/ac-lite.md +192 -0
- package/framework/.clinerules/workflows/ac.md +402 -177
- package/framework/.codebuddy/commands/opsx/ac-lite.md +192 -0
- package/framework/.codebuddy/commands/opsx/ac.md +402 -177
- package/framework/.codebuddy/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.codebuddy/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.codebuddy/skills/brainstorming/SKILL.md +266 -38
- package/framework/.codebuddy/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.codebuddy/skills/code-review/SKILL.md +250 -0
- package/framework/.codebuddy/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.codebuddy/skills/documentation/SKILL.md +441 -0
- package/framework/.codebuddy/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.codebuddy/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.codebuddy/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.codebuddy/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.codebuddy/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.codebuddy/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.codebuddy/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.codebuddy/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.codebuddy/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.codebuddy/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.codebuddy/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.codebuddy/skills/testing-qa/SKILL.md +249 -0
- package/framework/.codex/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.codex/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.codex/skills/brainstorming/SKILL.md +266 -38
- package/framework/.codex/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.codex/skills/code-review/SKILL.md +250 -0
- package/framework/.codex/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.codex/skills/documentation/SKILL.md +441 -0
- package/framework/.codex/skills/main-skill/SKILL.md +455 -0
- package/framework/.codex/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.codex/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.codex/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.codex/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.codex/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.codex/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.codex/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.codex/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.codex/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.codex/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.codex/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.codex/skills/testing-qa/SKILL.md +249 -0
- package/framework/.continue/prompts/ac-lite.md +192 -0
- package/framework/.continue/prompts/ac.md +486 -0
- package/framework/.continue/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.continue/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.continue/skills/brainstorming/SKILL.md +266 -38
- package/framework/.continue/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.continue/skills/code-review/SKILL.md +250 -0
- package/framework/.continue/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.continue/skills/documentation/SKILL.md +441 -0
- package/framework/.continue/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.continue/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.continue/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.continue/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.continue/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.continue/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.continue/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.continue/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.continue/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.continue/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.continue/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.continue/skills/testing-qa/SKILL.md +249 -0
- package/framework/.cospec/openspec/commands/ac-lite.md +192 -0
- package/framework/.cospec/openspec/commands/ac.md +402 -177
- package/framework/.cospec/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.cospec/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.cospec/skills/brainstorming/SKILL.md +266 -38
- package/framework/.cospec/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.cospec/skills/code-review/SKILL.md +250 -0
- package/framework/.cospec/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.cospec/skills/documentation/SKILL.md +441 -0
- package/framework/.cospec/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.cospec/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.cospec/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.cospec/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.cospec/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.cospec/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.cospec/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.cospec/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.cospec/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.cospec/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.cospec/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.cospec/skills/testing-qa/SKILL.md +249 -0
- package/framework/.crush/commands/opsx/ac-lite.md +192 -0
- package/framework/.crush/commands/opsx/ac.md +402 -177
- package/framework/.crush/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.crush/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.crush/skills/brainstorming/SKILL.md +266 -38
- package/framework/.crush/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.crush/skills/code-review/SKILL.md +250 -0
- package/framework/.crush/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.crush/skills/documentation/SKILL.md +441 -0
- package/framework/.crush/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.crush/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.crush/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.crush/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.crush/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.crush/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.crush/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.crush/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.crush/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.crush/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.crush/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.crush/skills/testing-qa/SKILL.md +249 -0
- package/framework/.cursor/commands/ac-lite.md +192 -0
- package/framework/.cursor/commands/ac.md +402 -177
- package/framework/.cursor/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.cursor/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.cursor/skills/brainstorming/SKILL.md +266 -38
- package/framework/.cursor/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.cursor/skills/code-review/SKILL.md +250 -0
- package/framework/.cursor/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.cursor/skills/documentation/SKILL.md +441 -0
- package/framework/.cursor/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.cursor/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.cursor/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.cursor/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.cursor/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.cursor/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.cursor/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.cursor/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.cursor/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.cursor/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.cursor/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.cursor/skills/testing-qa/SKILL.md +249 -0
- package/framework/.factory/commands/ac-lite.md +192 -0
- package/framework/.factory/commands/ac.md +402 -177
- package/framework/.factory/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.factory/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.factory/skills/brainstorming/SKILL.md +266 -38
- package/framework/.factory/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.factory/skills/code-review/SKILL.md +250 -0
- package/framework/.factory/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.factory/skills/documentation/SKILL.md +441 -0
- package/framework/.factory/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.factory/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.factory/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.factory/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.factory/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.factory/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.factory/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.factory/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.factory/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.factory/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.factory/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.factory/skills/testing-qa/SKILL.md +249 -0
- package/framework/.gemini/commands/opsx/ac-lite.md +192 -0
- package/framework/.gemini/commands/opsx/ac.md +486 -0
- package/framework/.gemini/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.gemini/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.gemini/skills/brainstorming/SKILL.md +266 -38
- package/framework/.gemini/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.gemini/skills/code-review/SKILL.md +250 -0
- package/framework/.gemini/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.gemini/skills/documentation/SKILL.md +441 -0
- package/framework/.gemini/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.gemini/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.gemini/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.gemini/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.gemini/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.gemini/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.gemini/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.gemini/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.gemini/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.gemini/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.gemini/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.gemini/skills/testing-qa/SKILL.md +249 -0
- package/framework/.github/prompts/ac-lite.md +192 -0
- package/framework/.github/prompts/ac.md +486 -0
- package/framework/.github/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.github/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.github/skills/brainstorming/SKILL.md +266 -38
- package/framework/.github/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.github/skills/code-review/SKILL.md +250 -0
- package/framework/.github/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.github/skills/documentation/SKILL.md +441 -0
- package/framework/.github/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.github/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.github/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.github/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.github/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.github/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.github/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.github/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.github/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.github/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.github/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.github/skills/testing-qa/SKILL.md +249 -0
- package/framework/.iflow/commands/ac-lite.md +192 -0
- package/framework/.iflow/commands/ac.md +402 -177
- package/framework/.iflow/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.iflow/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.iflow/skills/brainstorming/SKILL.md +266 -38
- package/framework/.iflow/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.iflow/skills/code-review/SKILL.md +250 -0
- package/framework/.iflow/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.iflow/skills/documentation/SKILL.md +441 -0
- package/framework/.iflow/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.iflow/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.iflow/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.iflow/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.iflow/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.iflow/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.iflow/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.iflow/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.iflow/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.iflow/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.iflow/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.iflow/skills/testing-qa/SKILL.md +249 -0
- package/framework/.kilocode/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.kilocode/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.kilocode/skills/brainstorming/SKILL.md +266 -38
- package/framework/.kilocode/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.kilocode/skills/code-review/SKILL.md +250 -0
- package/framework/.kilocode/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.kilocode/skills/documentation/SKILL.md +441 -0
- package/framework/.kilocode/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.kilocode/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.kilocode/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.kilocode/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.kilocode/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.kilocode/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.kilocode/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.kilocode/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.kilocode/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.kilocode/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.kilocode/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.kilocode/skills/testing-qa/SKILL.md +249 -0
- package/framework/.kilocode/workflows/ac-lite.md +192 -0
- package/framework/.kilocode/workflows/ac.md +402 -177
- package/framework/.kimi/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.kimi/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.kimi/skills/api-design-principles/SKILL.md +528 -0
- package/framework/.kimi/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/framework/.kimi/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/framework/.kimi/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/framework/.kimi/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/framework/.kimi/skills/brainstorming/SKILL.md +282 -0
- package/framework/.kimi/skills/changelog-generator/SKILL.md +104 -0
- package/framework/.kimi/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.kimi/skills/code-maintainability/SKILL.md +1108 -0
- package/framework/.kimi/skills/code-review/SKILL.md +250 -0
- package/framework/.kimi/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.kimi/skills/documentation/SKILL.md +441 -0
- package/framework/.kimi/skills/error-handling-patterns/SKILL.md +641 -0
- package/framework/.kimi/skills/interface-design/SKILL.md +310 -0
- package/framework/.kimi/skills/interface-design/references/example.md +86 -0
- package/framework/.kimi/skills/interface-design/references/principles.md +235 -0
- package/framework/.kimi/skills/interface-design/references/validation.md +48 -0
- package/framework/.kimi/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.kimi/skills/openspec-apply-change/SKILL.md +172 -0
- package/framework/.kimi/skills/openspec-archive-change/SKILL.md +130 -0
- package/framework/.kimi/skills/openspec-bulk-archive-change/SKILL.md +262 -0
- package/framework/.kimi/skills/openspec-continue-change/SKILL.md +134 -0
- package/framework/.kimi/skills/openspec-explore/SKILL.md +306 -0
- package/framework/.kimi/skills/openspec-ff-change/SKILL.md +117 -0
- package/framework/.kimi/skills/openspec-new-change/SKILL.md +90 -0
- package/framework/.kimi/skills/openspec-onboard/SKILL.md +529 -0
- package/framework/.kimi/skills/openspec-sync-specs/SKILL.md +154 -0
- package/framework/.kimi/skills/openspec-verify-change/SKILL.md +184 -0
- package/framework/.kimi/skills/performance-optimizer/SKILL.md +43 -0
- package/framework/.kimi/skills/project-constitution/SKILL.md +66 -0
- package/framework/.kimi/skills/project-index/SKILL.md +234 -0
- package/framework/.kimi/skills/project-index/scripts/scan_codebase.py +47 -0
- package/framework/.kimi/skills/project-index/templates/agent-template.md +18 -0
- package/framework/.kimi/skills/project-index/templates/skill-template.md +20 -0
- package/framework/.kimi/skills/requirement-checklist/SKILL.md +90 -0
- package/framework/.kimi/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.kimi/skills/secure-coding-cybersecurity/SKILL.md +793 -0
- package/framework/.kimi/skills/secure-coding-cybersecurity/references/ai_coding_pitfalls.md +44 -0
- package/framework/.kimi/skills/secure-coding-cybersecurity/references/owasp_top_10_2025.md +28 -0
- package/framework/.kimi/skills/secure-coding-cybersecurity/references/secure_coding_examples.md +102 -0
- package/framework/.kimi/skills/secure-coding-cybersecurity/scripts/security_audit.py +46 -0
- package/framework/.kimi/skills/skill-writer/SKILL.md +385 -0
- package/framework/.kimi/skills/spec-analysis/SKILL.md +65 -0
- package/framework/.kimi/skills/spec-clarification/SKILL.md +73 -0
- package/framework/.kimi/skills/sync-index/SKILL.md +35 -0
- package/framework/.kimi/skills/systematic-debugging/SKILL.md +296 -0
- package/framework/.kimi/skills/test-generator/SKILL.md +41 -0
- package/framework/.kimi/skills/testing-qa/SKILL.md +249 -0
- package/framework/.kimi/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/framework/.kimi/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/framework/.kimi/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/framework/.kimi/workflows/ac-lite.md +192 -0
- package/framework/.kimi/workflows/ac.md +486 -0
- package/framework/.kimi/workflows/opsx-apply.md +149 -0
- package/framework/.kimi/workflows/opsx-archive.md +154 -0
- package/framework/.kimi/workflows/opsx-bulk-archive.md +239 -0
- package/framework/.kimi/workflows/opsx-continue.md +111 -0
- package/framework/.kimi/workflows/opsx-explore.md +171 -0
- package/framework/.kimi/workflows/opsx-ff.md +91 -0
- package/framework/.kimi/workflows/opsx-new.md +66 -0
- package/framework/.kimi/workflows/opsx-onboard.md +522 -0
- package/framework/.kimi/workflows/opsx-sync.md +131 -0
- package/framework/.kimi/workflows/opsx-verify.md +161 -0
- package/framework/.opencode/command/ac-lite.md +192 -0
- package/framework/.opencode/command/ac.md +402 -177
- package/framework/.opencode/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.opencode/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.opencode/skills/brainstorming/SKILL.md +266 -38
- package/framework/.opencode/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.opencode/skills/code-review/SKILL.md +250 -0
- package/framework/.opencode/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.opencode/skills/documentation/SKILL.md +441 -0
- package/framework/.opencode/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.opencode/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.opencode/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.opencode/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.opencode/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.opencode/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.opencode/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.opencode/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.opencode/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.opencode/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.opencode/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.opencode/skills/testing-qa/SKILL.md +249 -0
- package/framework/.qoder/commands/opsx/ac-lite.md +192 -0
- package/framework/.qoder/commands/opsx/ac.md +402 -177
- package/framework/.qoder/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.qoder/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.qoder/skills/brainstorming/SKILL.md +266 -38
- package/framework/.qoder/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.qoder/skills/code-review/SKILL.md +250 -0
- package/framework/.qoder/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.qoder/skills/documentation/SKILL.md +441 -0
- package/framework/.qoder/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.qoder/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.qoder/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.qoder/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.qoder/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.qoder/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.qoder/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.qoder/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.qoder/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.qoder/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.qoder/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.qoder/skills/testing-qa/SKILL.md +249 -0
- package/framework/.qwen/commands/ac-lite.md +192 -0
- package/framework/.qwen/commands/ac.md +402 -177
- package/framework/.qwen/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.qwen/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.qwen/skills/brainstorming/SKILL.md +266 -38
- package/framework/.qwen/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.qwen/skills/code-review/SKILL.md +250 -0
- package/framework/.qwen/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.qwen/skills/documentation/SKILL.md +441 -0
- package/framework/.qwen/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.qwen/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.qwen/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.qwen/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.qwen/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.qwen/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.qwen/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.qwen/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.qwen/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.qwen/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.qwen/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.qwen/skills/testing-qa/SKILL.md +249 -0
- package/framework/.roo/commands/ac-lite.md +192 -0
- package/framework/.roo/commands/ac.md +402 -177
- package/framework/.roo/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.roo/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.roo/skills/brainstorming/SKILL.md +266 -38
- package/framework/.roo/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.roo/skills/code-review/SKILL.md +250 -0
- package/framework/.roo/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.roo/skills/documentation/SKILL.md +441 -0
- package/framework/.roo/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.roo/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.roo/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.roo/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.roo/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.roo/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.roo/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.roo/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.roo/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.roo/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.roo/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.roo/skills/testing-qa/SKILL.md +249 -0
- package/framework/.trae/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.trae/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.trae/skills/brainstorming/SKILL.md +266 -38
- package/framework/.trae/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.trae/skills/code-review/SKILL.md +250 -0
- package/framework/.trae/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.trae/skills/documentation/SKILL.md +441 -0
- package/framework/.trae/skills/main-skill/SKILL.md +455 -0
- package/framework/.trae/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.trae/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.trae/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.trae/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.trae/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.trae/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.trae/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.trae/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.trae/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.trae/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.trae/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.trae/skills/testing-qa/SKILL.md +249 -0
- package/framework/.windsurf/skills/acfm-memory/SKILL.md +312 -0
- package/framework/.windsurf/skills/acfm-spec-workflow/SKILL.md +269 -0
- package/framework/.windsurf/skills/brainstorming/SKILL.md +266 -38
- package/framework/.windsurf/skills/ci-deploy/SKILL.md +501 -0
- package/framework/.windsurf/skills/code-review/SKILL.md +250 -0
- package/framework/.windsurf/skills/context-synthesizer/SKILL.md +322 -0
- package/framework/.windsurf/skills/documentation/SKILL.md +441 -0
- package/framework/.windsurf/skills/microtask-decomposition/SKILL.md +368 -0
- package/framework/.windsurf/skills/openspec-apply-change/SKILL.md +23 -7
- package/framework/.windsurf/skills/openspec-archive-change/SKILL.md +22 -6
- package/framework/.windsurf/skills/openspec-bulk-archive-change/SKILL.md +25 -9
- package/framework/.windsurf/skills/openspec-continue-change/SKILL.md +20 -4
- package/framework/.windsurf/skills/openspec-explore/SKILL.md +17 -1
- package/framework/.windsurf/skills/openspec-ff-change/SKILL.md +21 -5
- package/framework/.windsurf/skills/openspec-new-change/SKILL.md +23 -7
- package/framework/.windsurf/skills/openspec-sync-specs/SKILL.md +20 -4
- package/framework/.windsurf/skills/openspec-verify-change/SKILL.md +24 -8
- package/framework/.windsurf/skills/research-retrieval/SKILL.md +357 -0
- package/framework/.windsurf/skills/testing-qa/SKILL.md +249 -0
- package/framework/.windsurf/workflows/ac-lite.md +192 -0
- package/framework/.windsurf/workflows/ac.md +402 -177
- package/framework/AGENTS.md +428 -135
- package/framework/CLAUDE.md +428 -135
- package/framework/GEMINI.md +428 -135
- package/framework/copilot-instructions.md +429 -136
- package/package.json +2 -1
- package/src/cli.js +2 -0
- package/src/commands/init.js +10 -12
- package/src/commands/memory.js +772 -0
- package/src/commands/spec.js +40 -8
- package/src/config/constants.js +10 -2
- package/src/config/ide-mapping.js +1 -0
- package/src/index.js +46 -0
- package/src/memory/autosave.js +382 -0
- package/src/memory/database.js +178 -0
- package/src/memory/engine.js +727 -0
- package/src/memory/index.js +62 -0
- package/src/memory/utils.js +128 -0
- package/src/services/spec-engine.js +170 -26
- package/src/ui/animations.js +82 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* memory/index.js — API pública del sistema de memoria autónoma
|
|
3
|
+
*
|
|
4
|
+
* Sistema de persistencia de conocimiento para agentes AI.
|
|
5
|
+
* Guarda automáticamente decisiones, patrones, bugfixes y insights.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Database
|
|
9
|
+
export { initDatabase, getDatabase, closeDatabase, isDatabaseInitialized } from './database.js';
|
|
10
|
+
|
|
11
|
+
// Core Engine
|
|
12
|
+
export {
|
|
13
|
+
saveMemory,
|
|
14
|
+
searchMemories,
|
|
15
|
+
getContext,
|
|
16
|
+
getTimeline,
|
|
17
|
+
getMemory,
|
|
18
|
+
updateMemory,
|
|
19
|
+
deleteMemory,
|
|
20
|
+
startSession,
|
|
21
|
+
endSession,
|
|
22
|
+
getStats,
|
|
23
|
+
findPatterns,
|
|
24
|
+
getConnections,
|
|
25
|
+
anticipateNeeds,
|
|
26
|
+
exportMemories,
|
|
27
|
+
importMemories,
|
|
28
|
+
pruneMemories
|
|
29
|
+
} from './engine.js';
|
|
30
|
+
|
|
31
|
+
// Utils
|
|
32
|
+
export {
|
|
33
|
+
redactPrivateContent,
|
|
34
|
+
extractKeywords,
|
|
35
|
+
textSimilarity,
|
|
36
|
+
truncate,
|
|
37
|
+
isCodeContent,
|
|
38
|
+
detectLanguage,
|
|
39
|
+
generateSummary,
|
|
40
|
+
sanitizeFTSQuery
|
|
41
|
+
} from './utils.js';
|
|
42
|
+
|
|
43
|
+
// Auto-save system
|
|
44
|
+
export { createAutoSaveHook, AutoSaveManager } from './autosave.js';
|
|
45
|
+
|
|
46
|
+
// Tipos de memoria válidos para referencia
|
|
47
|
+
export const MEMORY_TYPES = [
|
|
48
|
+
'architectural_decision',
|
|
49
|
+
'bugfix_pattern',
|
|
50
|
+
'api_pattern',
|
|
51
|
+
'performance_insight',
|
|
52
|
+
'security_fix',
|
|
53
|
+
'refactor_technique',
|
|
54
|
+
'dependency_note',
|
|
55
|
+
'workaround',
|
|
56
|
+
'convention',
|
|
57
|
+
'context_boundary',
|
|
58
|
+
'general_insight',
|
|
59
|
+
'session_summary'
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
export const IMPORTANCE_LEVELS = ['critical', 'high', 'medium', 'low'];
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils.js — Utilidades para el sistema de memoria
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Redacta contenido entre etiquetas <private>
|
|
7
|
+
*/
|
|
8
|
+
export function redactPrivateContent(content) {
|
|
9
|
+
if (!content) return content;
|
|
10
|
+
|
|
11
|
+
const privateRegex = /<private>[\s\S]*?<\/private>/gi;
|
|
12
|
+
return content.replace(privateRegex, '[REDACTED PRIVATE CONTENT]');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Extrae palabras clave de un texto
|
|
17
|
+
*/
|
|
18
|
+
export function extractKeywords(text, maxKeywords = 5) {
|
|
19
|
+
if (!text) return [];
|
|
20
|
+
|
|
21
|
+
const stopWords = new Set([
|
|
22
|
+
'el', 'la', 'los', 'las', 'un', 'una', 'unos', 'unas', 'de', 'del', 'al',
|
|
23
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
24
|
+
'en', 'y', 'o', 'pero', 'por', 'para', 'con', 'sin', 'sobre', 'entre',
|
|
25
|
+
'in', 'and', 'or', 'but', 'for', 'with', 'without', 'on', 'between',
|
|
26
|
+
'que', 'como', 'cuando', 'donde', 'quien', 'cual', 'esto', 'eso',
|
|
27
|
+
'that', 'what', 'when', 'where', 'who', 'which', 'this', 'that'
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
const wordCounts = text.toLowerCase()
|
|
31
|
+
.replace(/[^\w\s]/g, ' ')
|
|
32
|
+
.split(/\s+/)
|
|
33
|
+
.filter(w => w.length > 3 && !stopWords.has(w))
|
|
34
|
+
.reduce((acc, word) => {
|
|
35
|
+
acc[word] = (acc[word] || 0) + 1;
|
|
36
|
+
return acc;
|
|
37
|
+
}, {});
|
|
38
|
+
|
|
39
|
+
return Object.entries(wordCounts)
|
|
40
|
+
.sort((a, b) => b[1] - a[1])
|
|
41
|
+
.slice(0, maxKeywords)
|
|
42
|
+
.map(([word]) => word);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Calcula similitud simple entre dos textos (Jaccard)
|
|
47
|
+
*/
|
|
48
|
+
export function textSimilarity(text1, text2) {
|
|
49
|
+
const set1 = new Set(text1.toLowerCase().split(/\s+/));
|
|
50
|
+
const set2 = new Set(text2.toLowerCase().split(/\s+/));
|
|
51
|
+
|
|
52
|
+
const intersection = new Set([...set1].filter(x => set2.has(x)));
|
|
53
|
+
const union = new Set([...set1, ...set2]);
|
|
54
|
+
|
|
55
|
+
return intersection.size / union.size;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Trunca texto con ellipsis
|
|
60
|
+
*/
|
|
61
|
+
export function truncate(text, maxLength = 100) {
|
|
62
|
+
if (!text || text.length <= maxLength) return text;
|
|
63
|
+
return text.slice(0, maxLength - 3) + '...';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Detecta si un contenido parece código
|
|
68
|
+
*/
|
|
69
|
+
export function isCodeContent(text) {
|
|
70
|
+
const codeIndicators = [
|
|
71
|
+
/function\s+\w+\s*\(/,
|
|
72
|
+
/const\s+\w+\s*=/,
|
|
73
|
+
/let\s+\w+\s*=/,
|
|
74
|
+
/var\s+\w+\s*=/,
|
|
75
|
+
/import\s+.*\s+from/,
|
|
76
|
+
/export\s+(default\s+)?/,
|
|
77
|
+
/class\s+\w+/,
|
|
78
|
+
/if\s*\(.*\)\s*\{/,
|
|
79
|
+
/for\s*\(.*\)\s*\{/,
|
|
80
|
+
/```[\s\S]*```/
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
return codeIndicators.some(pattern => pattern.test(text));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Detecta lenguaje de programación
|
|
88
|
+
*/
|
|
89
|
+
export function detectLanguage(text) {
|
|
90
|
+
if (/\.tsx?/.test(text) || /interface\s+\w+/.test(text) || /:\s*(string|number|boolean)/.test(text)) {
|
|
91
|
+
return 'typescript';
|
|
92
|
+
}
|
|
93
|
+
if (/\.jsx?/.test(text) || /React\./.test(text) || /useState|useEffect/.test(text)) {
|
|
94
|
+
return 'javascript';
|
|
95
|
+
}
|
|
96
|
+
if (/\.py/.test(text) || /def\s+\w+\s*\(/.test(text) || /import\s+\w+/.test(text)) {
|
|
97
|
+
return 'python';
|
|
98
|
+
}
|
|
99
|
+
if (/\.go/.test(text) || /func\s+\w+\s*\(/.test(text) || /package\s+\w+/.test(text)) {
|
|
100
|
+
return 'go';
|
|
101
|
+
}
|
|
102
|
+
if (/\.rs/.test(text) || /fn\s+\w+\s*\(/.test(text) || /let\s+mut/.test(text)) {
|
|
103
|
+
return 'rust';
|
|
104
|
+
}
|
|
105
|
+
return 'unknown';
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Genera un resumen automático
|
|
110
|
+
*/
|
|
111
|
+
export function generateSummary(text, maxSentences = 2) {
|
|
112
|
+
if (!text) return '';
|
|
113
|
+
|
|
114
|
+
const sentences = text.split(/[.!?]+/).filter(s => s.trim().length > 10);
|
|
115
|
+
return sentences.slice(0, maxSentences).join('. ') + '.';
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Sanitiza input para FTS5
|
|
120
|
+
*/
|
|
121
|
+
export function sanitizeFTSQuery(query) {
|
|
122
|
+
// Escapar caracteres especiales de FTS5
|
|
123
|
+
return query
|
|
124
|
+
.replace(/"/g, '""')
|
|
125
|
+
.replace(/\*/g, '')
|
|
126
|
+
.replace(/^\^/g, '')
|
|
127
|
+
.replace(/\$/g, '');
|
|
128
|
+
}
|
|
@@ -9,10 +9,45 @@ import { readFile, readdir, stat, mkdir, rename, access, writeFile } from 'node:
|
|
|
9
9
|
import { resolve, join, dirname, relative } from 'node:path';
|
|
10
10
|
import { fileURLToPath } from 'node:url';
|
|
11
11
|
import yaml from 'js-yaml';
|
|
12
|
+
import { initDatabase, getContext, AutoSaveManager } from '../memory/index.js';
|
|
12
13
|
|
|
13
14
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
15
|
const SCHEMAS_DIR = resolve(__dirname, '../schemas');
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
// Default directory name for AC Framework spec-driven workflows
|
|
18
|
+
const ACFM_DIR = '.acfm';
|
|
19
|
+
// Legacy directory name for backward compatibility
|
|
20
|
+
const LEGACY_DIR = 'openspec';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Determine which spec directory to use for a project.
|
|
24
|
+
* Priority: .acfm/ > openspec/ (for backward compatibility)
|
|
25
|
+
* Returns the directory name (not full path)
|
|
26
|
+
*/
|
|
27
|
+
async function getSpecDir(cwd = process.cwd()) {
|
|
28
|
+
try {
|
|
29
|
+
// Check if .acfm exists
|
|
30
|
+
await access(join(cwd, ACFM_DIR));
|
|
31
|
+
return ACFM_DIR;
|
|
32
|
+
} catch {
|
|
33
|
+
try {
|
|
34
|
+
// Fall back to legacy openspec directory
|
|
35
|
+
await access(join(cwd, LEGACY_DIR));
|
|
36
|
+
return LEGACY_DIR;
|
|
37
|
+
} catch {
|
|
38
|
+
// Neither exists, default to new .acfm for new projects
|
|
39
|
+
return ACFM_DIR;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Get the effective spec directory name without async
|
|
46
|
+
* For use when we already know the project is initialized
|
|
47
|
+
*/
|
|
48
|
+
async function getSpecDirSync(cwd = process.cwd()) {
|
|
49
|
+
return await getSpecDir(cwd);
|
|
50
|
+
}
|
|
16
51
|
|
|
17
52
|
// ─── Schema Loading ──────────────────────────────────────────────────────────
|
|
18
53
|
|
|
@@ -72,10 +107,12 @@ export async function loadTemplate(schemaName, artifactId) {
|
|
|
72
107
|
// ─── Project Config ──────────────────────────────────────────────────────────
|
|
73
108
|
|
|
74
109
|
/**
|
|
75
|
-
* Read the project's
|
|
110
|
+
* Read the project's spec config.yaml
|
|
111
|
+
* Supports both .acfm/ (new) and openspec/ (legacy) directories
|
|
76
112
|
*/
|
|
77
113
|
export async function readProjectConfig(cwd = process.cwd()) {
|
|
78
|
-
const
|
|
114
|
+
const specDir = await getSpecDir(cwd);
|
|
115
|
+
const configPath = join(cwd, specDir, 'config.yaml');
|
|
79
116
|
try {
|
|
80
117
|
const content = await readFile(configPath, 'utf-8');
|
|
81
118
|
return yaml.load(content) || {};
|
|
@@ -86,11 +123,13 @@ export async function readProjectConfig(cwd = process.cwd()) {
|
|
|
86
123
|
}
|
|
87
124
|
|
|
88
125
|
/**
|
|
89
|
-
* Check if
|
|
126
|
+
* Check if spec system is initialized in the current project
|
|
127
|
+
* Supports both .acfm/ (new) and openspec/ (legacy) directories
|
|
90
128
|
*/
|
|
91
129
|
export async function isInitialized(cwd = process.cwd()) {
|
|
130
|
+
const specDir = await getSpecDir(cwd);
|
|
92
131
|
try {
|
|
93
|
-
await access(join(cwd,
|
|
132
|
+
await access(join(cwd, specDir, 'config.yaml'));
|
|
94
133
|
return true;
|
|
95
134
|
} catch {
|
|
96
135
|
return false;
|
|
@@ -100,13 +139,23 @@ export async function isInitialized(cwd = process.cwd()) {
|
|
|
100
139
|
// ─── Init ────────────────────────────────────────────────────────────────────
|
|
101
140
|
|
|
102
141
|
/**
|
|
103
|
-
* Initialize the
|
|
142
|
+
* Initialize the spec directory structure (.acfm/ by default)
|
|
143
|
+
* Creates .acfm/ directory with specs/ and changes/ subdirectories
|
|
104
144
|
*/
|
|
105
145
|
export async function initProject(cwd = process.cwd(), schemaName = 'spec-driven') {
|
|
106
146
|
// Validate schema exists
|
|
107
147
|
await loadSchema(schemaName);
|
|
108
148
|
|
|
109
|
-
|
|
149
|
+
// Check for legacy openspec directory - warn if found
|
|
150
|
+
try {
|
|
151
|
+
await access(join(cwd, LEGACY_DIR));
|
|
152
|
+
// Legacy directory exists, but we'll create new .acfm anyway
|
|
153
|
+
// This allows migration path
|
|
154
|
+
} catch {
|
|
155
|
+
// No legacy directory, proceed normally
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const base = join(cwd, ACFM_DIR);
|
|
110
159
|
await mkdir(join(base, 'specs'), { recursive: true });
|
|
111
160
|
await mkdir(join(base, 'changes'), { recursive: true });
|
|
112
161
|
|
|
@@ -114,11 +163,35 @@ export async function initProject(cwd = process.cwd(), schemaName = 'spec-driven
|
|
|
114
163
|
try {
|
|
115
164
|
await access(configPath);
|
|
116
165
|
// Already exists, don't overwrite
|
|
117
|
-
return { created: false, path: base };
|
|
166
|
+
return { created: false, path: base, dirName: ACFM_DIR };
|
|
118
167
|
} catch {
|
|
119
|
-
const configContent = `schema: ${schemaName}
|
|
168
|
+
const configContent = `schema: ${schemaName}
|
|
169
|
+
|
|
170
|
+
# Project context (optional)
|
|
171
|
+
# This is shown to AI when creating artifacts.
|
|
172
|
+
# Add your tech stack, conventions, style guides, domain knowledge, etc.
|
|
173
|
+
# Example:
|
|
174
|
+
# context: |
|
|
175
|
+
# Tech stack: TypeScript, React, Node.js
|
|
176
|
+
# We use conventional commits
|
|
177
|
+
# Domain: e-commerce platform
|
|
178
|
+
|
|
179
|
+
# Per-artifact rules (optional)
|
|
180
|
+
# Add custom rules for specific artifacts.
|
|
181
|
+
# Example:
|
|
182
|
+
# rules:
|
|
183
|
+
# proposal:
|
|
184
|
+
# - Keep proposals under 500 words
|
|
185
|
+
# - Always include a "Non-goals" section
|
|
186
|
+
# tasks:
|
|
187
|
+
# - Break tasks into chunks of max 2 hours
|
|
188
|
+
|
|
189
|
+
# Directory Configuration
|
|
190
|
+
# This project uses: .acfm/
|
|
191
|
+
# Legacy openspec/ directories are supported for backward compatibility.
|
|
192
|
+
`;
|
|
120
193
|
await writeFile(configPath, configContent, 'utf-8');
|
|
121
|
-
return { created: true, path: base };
|
|
194
|
+
return { created: true, path: base, dirName: ACFM_DIR };
|
|
122
195
|
}
|
|
123
196
|
}
|
|
124
197
|
|
|
@@ -126,9 +199,11 @@ export async function initProject(cwd = process.cwd(), schemaName = 'spec-driven
|
|
|
126
199
|
|
|
127
200
|
/**
|
|
128
201
|
* Get the changes directory path
|
|
202
|
+
* Supports both .acfm/ (new) and openspec/ (legacy) directories
|
|
129
203
|
*/
|
|
130
|
-
function changesDir(cwd) {
|
|
131
|
-
|
|
204
|
+
async function changesDir(cwd) {
|
|
205
|
+
const specDir = await getSpecDir(cwd);
|
|
206
|
+
return join(cwd, specDir, 'changes');
|
|
132
207
|
}
|
|
133
208
|
|
|
134
209
|
/**
|
|
@@ -137,13 +212,13 @@ function changesDir(cwd) {
|
|
|
137
212
|
export async function createChange(name, cwd = process.cwd(), schemaOverride = null) {
|
|
138
213
|
const config = await readProjectConfig(cwd);
|
|
139
214
|
if (!config) {
|
|
140
|
-
throw new Error('
|
|
215
|
+
throw new Error('Spec system not initialized. Run `acfm spec init` first.');
|
|
141
216
|
}
|
|
142
217
|
|
|
143
218
|
const schemaName = schemaOverride || config.schema || 'spec-driven';
|
|
144
219
|
const schema = await loadSchema(schemaName);
|
|
145
220
|
|
|
146
|
-
const changeDir = join(changesDir(cwd), name);
|
|
221
|
+
const changeDir = join(await changesDir(cwd), name);
|
|
147
222
|
|
|
148
223
|
// Check if already exists
|
|
149
224
|
try {
|
|
@@ -182,7 +257,7 @@ export async function createChange(name, cwd = process.cwd(), schemaOverride = n
|
|
|
182
257
|
* List all active (non-archived) changes
|
|
183
258
|
*/
|
|
184
259
|
export async function listChanges(cwd = process.cwd()) {
|
|
185
|
-
const dir = changesDir(cwd);
|
|
260
|
+
const dir = await changesDir(cwd);
|
|
186
261
|
let entries;
|
|
187
262
|
try {
|
|
188
263
|
entries = await readdir(dir, { withFileTypes: true });
|
|
@@ -284,7 +359,7 @@ async function isArtifactDone(changePath, artifact) {
|
|
|
284
359
|
* Get full status for a change, including per-artifact status
|
|
285
360
|
*/
|
|
286
361
|
export async function getChangeStatus(name, cwd = process.cwd()) {
|
|
287
|
-
const changePath = join(changesDir(cwd), name);
|
|
362
|
+
const changePath = join(await changesDir(cwd), name);
|
|
288
363
|
|
|
289
364
|
// Read change metadata
|
|
290
365
|
const metaPath = join(changePath, '.openspec.yaml');
|
|
@@ -341,10 +416,10 @@ export async function getChangeStatus(name, cwd = process.cwd()) {
|
|
|
341
416
|
* Get instructions for creating a specific artifact
|
|
342
417
|
*/
|
|
343
418
|
export async function getArtifactInstructions(artifactId, changeName, cwd = process.cwd()) {
|
|
344
|
-
const changePath = join(changesDir(cwd), changeName);
|
|
419
|
+
const changePath = join(await changesDir(cwd), changeName);
|
|
345
420
|
const config = await readProjectConfig(cwd);
|
|
346
421
|
if (!config) {
|
|
347
|
-
throw new Error('
|
|
422
|
+
throw new Error('Spec system not initialized. Run `acfm spec init` first.');
|
|
348
423
|
}
|
|
349
424
|
|
|
350
425
|
const metaPath = join(changePath, '.openspec.yaml');
|
|
@@ -382,17 +457,18 @@ export async function getArtifactInstructions(artifactId, changeName, cwd = proc
|
|
|
382
457
|
}
|
|
383
458
|
|
|
384
459
|
// Build dependencies (paths to completed artifact files the agent should read)
|
|
460
|
+
const specDir = await getSpecDir(cwd);
|
|
385
461
|
const dependencies = [];
|
|
386
462
|
for (const depId of artifact.dependencies) {
|
|
387
463
|
const depArtifact = schema.artifacts.find(a => a.id === depId);
|
|
388
464
|
if (depArtifact) {
|
|
389
|
-
const depPath = join(
|
|
465
|
+
const depPath = join(specDir, 'changes', changeName, depArtifact.outputPath);
|
|
390
466
|
dependencies.push(depPath);
|
|
391
467
|
}
|
|
392
468
|
}
|
|
393
469
|
|
|
394
470
|
// Build output path
|
|
395
|
-
const outputPath = join(
|
|
471
|
+
const outputPath = join(specDir, 'changes', changeName, artifact.outputPath);
|
|
396
472
|
|
|
397
473
|
// Build instruction from schema
|
|
398
474
|
const instruction = artifact.instruction || '';
|
|
@@ -400,6 +476,21 @@ export async function getArtifactInstructions(artifactId, changeName, cwd = proc
|
|
|
400
476
|
// Determine what this artifact unlocks
|
|
401
477
|
const unlocks = artifact.unlocks || [];
|
|
402
478
|
|
|
479
|
+
// NUEVO: Recuperar contexto de memoria relevante
|
|
480
|
+
let relevantMemories = [];
|
|
481
|
+
try {
|
|
482
|
+
initDatabase(); // Asegurar DB inicializada
|
|
483
|
+
relevantMemories = getContext({
|
|
484
|
+
projectPath: cwd,
|
|
485
|
+
changeName,
|
|
486
|
+
limit: 5,
|
|
487
|
+
lookbackDays: 30
|
|
488
|
+
});
|
|
489
|
+
} catch {
|
|
490
|
+
// Si memory no está inicializado, continuar sin contexto
|
|
491
|
+
relevantMemories = [];
|
|
492
|
+
}
|
|
493
|
+
|
|
403
494
|
return {
|
|
404
495
|
context,
|
|
405
496
|
rules,
|
|
@@ -408,6 +499,14 @@ export async function getArtifactInstructions(artifactId, changeName, cwd = proc
|
|
|
408
499
|
outputPath,
|
|
409
500
|
dependencies,
|
|
410
501
|
unlocks,
|
|
502
|
+
// NUEVO: Memorias relevantes para el contexto del agente
|
|
503
|
+
relevantMemories: relevantMemories.map(m => ({
|
|
504
|
+
id: m.id,
|
|
505
|
+
type: m.type,
|
|
506
|
+
content: m.content,
|
|
507
|
+
importance: m.importance,
|
|
508
|
+
fromChange: m.changeName
|
|
509
|
+
}))
|
|
411
510
|
};
|
|
412
511
|
}
|
|
413
512
|
|
|
@@ -415,10 +514,10 @@ export async function getArtifactInstructions(artifactId, changeName, cwd = proc
|
|
|
415
514
|
* Get instructions for the apply phase (implementing tasks)
|
|
416
515
|
*/
|
|
417
516
|
export async function getApplyInstructions(changeName, cwd = process.cwd()) {
|
|
418
|
-
const changePath = join(changesDir(cwd), changeName);
|
|
517
|
+
const changePath = join(await changesDir(cwd), changeName);
|
|
419
518
|
const config = await readProjectConfig(cwd);
|
|
420
519
|
if (!config) {
|
|
421
|
-
throw new Error('
|
|
520
|
+
throw new Error('Spec system not initialized. Run `acfm spec init` first.');
|
|
422
521
|
}
|
|
423
522
|
|
|
424
523
|
const metaPath = join(changePath, '.openspec.yaml');
|
|
@@ -453,10 +552,11 @@ export async function getApplyInstructions(changeName, cwd = process.cwd()) {
|
|
|
453
552
|
}
|
|
454
553
|
|
|
455
554
|
// Build context files — all completed artifacts
|
|
555
|
+
const specDir = await getSpecDir(cwd);
|
|
456
556
|
const contextFiles = [];
|
|
457
557
|
for (const artifact of schema.artifacts) {
|
|
458
558
|
if (doneMap[artifact.id]) {
|
|
459
|
-
const artifactPath = join(
|
|
559
|
+
const artifactPath = join(specDir, 'changes', changeName, artifact.outputPath);
|
|
460
560
|
contextFiles.push(artifactPath);
|
|
461
561
|
}
|
|
462
562
|
}
|
|
@@ -507,12 +607,56 @@ export async function getApplyInstructions(changeName, cwd = process.cwd()) {
|
|
|
507
607
|
instruction = `${remaining} of ${total} tasks remaining. Implement each pending task, following the specs and design. Mark tasks as [x] when complete.`;
|
|
508
608
|
}
|
|
509
609
|
|
|
610
|
+
// NUEVO: Recuperar contexto de memoria relevante para implementación
|
|
611
|
+
let relevantMemories = [];
|
|
612
|
+
let suggestedPatterns = [];
|
|
613
|
+
try {
|
|
614
|
+
initDatabase();
|
|
615
|
+
|
|
616
|
+
// Buscar patrones similares en memorias
|
|
617
|
+
relevantMemories = getContext({
|
|
618
|
+
projectPath: cwd,
|
|
619
|
+
changeName,
|
|
620
|
+
limit: 5,
|
|
621
|
+
lookbackDays: 30
|
|
622
|
+
});
|
|
623
|
+
|
|
624
|
+
// Buscar patrones de implementación específicos
|
|
625
|
+
const pendingTasks = tasks.filter(t => !t.done).map(t => t.task).join(' ');
|
|
626
|
+
if (pendingTasks) {
|
|
627
|
+
// Buscar memorias relacionadas con las tareas pendientes
|
|
628
|
+
const keywords = pendingTasks.toLowerCase().split(/\s+/).filter(w => w.length > 4);
|
|
629
|
+
if (keywords.length > 0) {
|
|
630
|
+
const { searchMemories } = await import('../memory/index.js');
|
|
631
|
+
suggestedPatterns = searchMemories(keywords.slice(0, 5).join(' OR '), {
|
|
632
|
+
type: 'refactor_technique',
|
|
633
|
+
limit: 3
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
} catch {
|
|
638
|
+
// Continuar sin contexto si hay error
|
|
639
|
+
}
|
|
640
|
+
|
|
510
641
|
return {
|
|
511
642
|
contextFiles,
|
|
512
643
|
progress: { total, complete, remaining },
|
|
513
644
|
state,
|
|
514
645
|
instruction,
|
|
515
646
|
tasks,
|
|
647
|
+
// NUEVO: Contexto de memoria para ayudar en implementación
|
|
648
|
+
relevantMemories: relevantMemories.map(m => ({
|
|
649
|
+
id: m.id,
|
|
650
|
+
type: m.type,
|
|
651
|
+
content: m.content,
|
|
652
|
+
importance: m.importance,
|
|
653
|
+
codeSnippet: m.codeSnippet
|
|
654
|
+
})),
|
|
655
|
+
suggestedPatterns: suggestedPatterns.map(m => ({
|
|
656
|
+
id: m.id,
|
|
657
|
+
content: m.content,
|
|
658
|
+
type: m.type
|
|
659
|
+
}))
|
|
516
660
|
};
|
|
517
661
|
}
|
|
518
662
|
|
|
@@ -522,7 +666,7 @@ export async function getApplyInstructions(changeName, cwd = process.cwd()) {
|
|
|
522
666
|
* Archive a completed change
|
|
523
667
|
*/
|
|
524
668
|
export async function archiveChange(name, cwd = process.cwd()) {
|
|
525
|
-
const changePath = join(changesDir(cwd), name);
|
|
669
|
+
const changePath = join(await changesDir(cwd), name);
|
|
526
670
|
|
|
527
671
|
// Verify change exists
|
|
528
672
|
try {
|
|
@@ -531,7 +675,7 @@ export async function archiveChange(name, cwd = process.cwd()) {
|
|
|
531
675
|
throw new Error(`Change "${name}" not found.`);
|
|
532
676
|
}
|
|
533
677
|
|
|
534
|
-
const archiveDir = join(changesDir(cwd), 'archive');
|
|
678
|
+
const archiveDir = join(await changesDir(cwd), 'archive');
|
|
535
679
|
await mkdir(archiveDir, { recursive: true });
|
|
536
680
|
|
|
537
681
|
const dateStr = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
|
|
@@ -571,7 +715,7 @@ export async function getGlobalStatus(cwd = process.cwd()) {
|
|
|
571
715
|
* Validate a change's artifacts for structural correctness
|
|
572
716
|
*/
|
|
573
717
|
export async function validateChange(name, cwd = process.cwd()) {
|
|
574
|
-
const changePath = join(changesDir(cwd), name);
|
|
718
|
+
const changePath = join(await changesDir(cwd), name);
|
|
575
719
|
const issues = [];
|
|
576
720
|
|
|
577
721
|
// Check change exists
|
package/src/ui/animations.js
CHANGED
|
@@ -6,6 +6,7 @@ const acGradient = gradient(['#6C5CE7', '#00CEC9', '#0984E3']);
|
|
|
6
6
|
const successGradient = gradient(['#00CEC9', '#00B894', '#55EFC4']);
|
|
7
7
|
const warmGradient = gradient(['#FDCB6E', '#E17055', '#D63031']);
|
|
8
8
|
const glowGradient = gradient(['#0984E3', '#00CEC9', '#55EFC4', '#00CEC9', '#0984E3']);
|
|
9
|
+
const diamondGradient = gradient(['#6C5CE7', '#A29BFE', '#00CEC9', '#A29BFE', '#6C5CE7']);
|
|
9
10
|
|
|
10
11
|
// ── Scanning / Loading ───────────────────────────────────────────
|
|
11
12
|
|
|
@@ -240,3 +241,84 @@ export async function stepHeader(stepNum, totalSteps, label) {
|
|
|
240
241
|
console.log(` ${stepBadge} ${chalk.hex('#DFE6E9')(label)}`);
|
|
241
242
|
console.log();
|
|
242
243
|
}
|
|
244
|
+
|
|
245
|
+
// ── Pulse Diamond Intro Animation ─────────────────────────────────
|
|
246
|
+
|
|
247
|
+
export async function pulseDiamondIntro(durationMs = 1800) {
|
|
248
|
+
// Simplified but impactful diamond frames
|
|
249
|
+
const diamondFrames = [
|
|
250
|
+
// Small
|
|
251
|
+
[' ◇ '],
|
|
252
|
+
// Growing
|
|
253
|
+
[' ◇◈◇ '],
|
|
254
|
+
// Medium
|
|
255
|
+
[' ◇◆◈◆◇ '],
|
|
256
|
+
// Large
|
|
257
|
+
[' ◇◆◈◉◈◆◇ ',
|
|
258
|
+
' ◇◆◈◆◇ '],
|
|
259
|
+
// Full with glow
|
|
260
|
+
[' ◇◇◆◈◉◈◆◇◇ ',
|
|
261
|
+
' ◇◆◈◉◈◆◇ ',
|
|
262
|
+
' ◇◇◆◈◉◈◆◇◇ '],
|
|
263
|
+
// Peak
|
|
264
|
+
[' ◇◇◆◈◉◈◉◈◆◇◇ ',
|
|
265
|
+
'◇◇◆◈◉◈◉◈◉◈◆◇◇',
|
|
266
|
+
' ◇◇◆◈◉◈◉◈◆◇◇ '],
|
|
267
|
+
// Hold peak
|
|
268
|
+
[' ◇◇◆◈◉◈◉◈◆◇◇ ',
|
|
269
|
+
'◇◇◆◈◉◈◉◈◉◈◆◇◇',
|
|
270
|
+
' ◇◇◆◈◉◈◉◈◆◇◇ '],
|
|
271
|
+
// Back to full
|
|
272
|
+
[' ◇◇◆◈◉◈◆◇◇ ',
|
|
273
|
+
' ◇◆◈◉◈◆◇ ',
|
|
274
|
+
' ◇◇◆◈◉◈◆◇◇ '],
|
|
275
|
+
// Medium
|
|
276
|
+
[' ◇◆◈◉◈◆◇ ',
|
|
277
|
+
' ◇◆◈◆◇ '],
|
|
278
|
+
// Small bright
|
|
279
|
+
[' ◆◈◆ '],
|
|
280
|
+
// Final sparkle
|
|
281
|
+
[' ✦◈✦ '],
|
|
282
|
+
];
|
|
283
|
+
|
|
284
|
+
const frameDelay = Math.floor(durationMs / diamondFrames.length);
|
|
285
|
+
|
|
286
|
+
console.log();
|
|
287
|
+
console.log();
|
|
288
|
+
|
|
289
|
+
// Animate diamond pulse
|
|
290
|
+
for (const frame of diamondFrames) {
|
|
291
|
+
// Clear and redraw
|
|
292
|
+
if (diamondFrames.indexOf(frame) > 0) {
|
|
293
|
+
for (let i = 0; i < 5; i++) {
|
|
294
|
+
process.stdout.write('\x1B[1A\x1B[2K');
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Top padding
|
|
299
|
+
console.log();
|
|
300
|
+
|
|
301
|
+
// Diamond lines centered
|
|
302
|
+
for (const line of frame) {
|
|
303
|
+
const centered = ' ' + line;
|
|
304
|
+
console.log(acGradient(centered));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Bottom padding
|
|
308
|
+
for (let i = 0; i < 4 - frame.length; i++) {
|
|
309
|
+
console.log();
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
await sleep(frameDelay);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Clear diamond and show final logo
|
|
316
|
+
for (let i = 0; i < 5; i++) {
|
|
317
|
+
process.stdout.write('\x1B[1A\x1B[2K');
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
console.log();
|
|
321
|
+
console.log(acGradient(' ◢◤◢◤ AC FRAMEWORK ◥◤◥◤'));
|
|
322
|
+
console.log(chalk.hex('#636E72')(' ───────────────────────────'));
|
|
323
|
+
console.log();
|
|
324
|
+
}
|