timsquad 2.0.0 → 3.3.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 +168 -234
- package/dist/commands/daemon.d.ts +7 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +140 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +251 -11
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/full.js +2 -2
- package/dist/commands/full.js.map +1 -1
- package/dist/commands/git/commit.d.ts.map +1 -1
- package/dist/commands/git/commit.js +1 -4
- package/dist/commands/git/commit.js.map +1 -1
- package/dist/commands/improve.d.ts +3 -0
- package/dist/commands/improve.d.ts.map +1 -0
- package/dist/commands/improve.js +286 -0
- package/dist/commands/improve.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +110 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts +3 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +316 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/log.d.ts +27 -0
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +1167 -2
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/meta-index.d.ts +3 -0
- package/dist/commands/meta-index.d.ts.map +1 -0
- package/dist/commands/meta-index.js +401 -0
- package/dist/commands/meta-index.js.map +1 -0
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +640 -100
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/retro.d.ts.map +1 -1
- package/dist/commands/retro.js +606 -58
- package/dist/commands/retro.js.map +1 -1
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +346 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +287 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/workflow.d.ts +3 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +607 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/daemon/context-writer.d.ts +16 -0
- package/dist/daemon/context-writer.d.ts.map +1 -0
- package/dist/daemon/context-writer.js +35 -0
- package/dist/daemon/context-writer.js.map +1 -0
- package/dist/daemon/entry.d.ts +7 -0
- package/dist/daemon/entry.d.ts.map +1 -0
- package/dist/daemon/entry.js +17 -0
- package/dist/daemon/entry.js.map +1 -0
- package/dist/daemon/event-queue.d.ts +52 -0
- package/dist/daemon/event-queue.d.ts.map +1 -0
- package/dist/daemon/event-queue.js +255 -0
- package/dist/daemon/event-queue.js.map +1 -0
- package/dist/daemon/file-watcher.d.ts +19 -0
- package/dist/daemon/file-watcher.d.ts.map +1 -0
- package/dist/daemon/file-watcher.js +87 -0
- package/dist/daemon/file-watcher.js.map +1 -0
- package/dist/daemon/index.d.ts +28 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +204 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/jsonl-watcher.d.ts +49 -0
- package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
- package/dist/daemon/jsonl-watcher.js +258 -0
- package/dist/daemon/jsonl-watcher.js.map +1 -0
- package/dist/daemon/meta-cache.d.ts +62 -0
- package/dist/daemon/meta-cache.d.ts.map +1 -0
- package/dist/daemon/meta-cache.js +240 -0
- package/dist/daemon/meta-cache.js.map +1 -0
- package/dist/daemon/shutdown.d.ts +21 -0
- package/dist/daemon/shutdown.d.ts.map +1 -0
- package/dist/daemon/shutdown.js +158 -0
- package/dist/daemon/shutdown.js.map +1 -0
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-composer.d.ts +38 -0
- package/dist/lib/agent-composer.d.ts.map +1 -0
- package/dist/lib/agent-composer.js +128 -0
- package/dist/lib/agent-composer.js.map +1 -0
- package/dist/lib/agent-generator.d.ts +22 -0
- package/dist/lib/agent-generator.d.ts.map +1 -0
- package/dist/lib/agent-generator.js +150 -0
- package/dist/lib/agent-generator.js.map +1 -0
- package/dist/lib/ast-parser.d.ts +11 -0
- package/dist/lib/ast-parser.d.ts.map +1 -0
- package/dist/lib/ast-parser.js +282 -0
- package/dist/lib/ast-parser.js.map +1 -0
- package/dist/lib/config.d.ts +6 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +27 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/meta-index.d.ts +19 -0
- package/dist/lib/meta-index.d.ts.map +1 -0
- package/dist/lib/meta-index.js +573 -0
- package/dist/lib/meta-index.js.map +1 -0
- package/dist/lib/project.js +1 -1
- package/dist/lib/project.js.map +1 -1
- package/dist/lib/skill-generator.d.ts +32 -0
- package/dist/lib/skill-generator.d.ts.map +1 -0
- package/dist/lib/skill-generator.js +187 -0
- package/dist/lib/skill-generator.js.map +1 -0
- package/dist/lib/template.d.ts +16 -2
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +175 -21
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/ui-index.d.ts +12 -0
- package/dist/lib/ui-index.d.ts.map +1 -0
- package/dist/lib/ui-index.js +239 -0
- package/dist/lib/ui-index.js.map +1 -0
- package/dist/lib/ui-parser.d.ts +12 -0
- package/dist/lib/ui-parser.d.ts.map +1 -0
- package/dist/lib/ui-parser.js +472 -0
- package/dist/lib/ui-parser.js.map +1 -0
- package/dist/lib/update-check.d.ts +6 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +121 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/upgrade-backup.d.ts +33 -0
- package/dist/lib/upgrade-backup.d.ts.map +1 -0
- package/dist/lib/upgrade-backup.js +101 -0
- package/dist/lib/upgrade-backup.js.map +1 -0
- package/dist/lib/version.d.ts +19 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +35 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/workflow-state.d.ts +48 -0
- package/dist/lib/workflow-state.d.ts.map +1 -0
- package/dist/lib/workflow-state.js +67 -0
- package/dist/lib/workflow-state.js.map +1 -0
- package/dist/types/config.d.ts +102 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +173 -9
- package/dist/types/config.js.map +1 -1
- package/dist/types/feedback.d.ts +59 -1
- package/dist/types/feedback.d.ts.map +1 -1
- package/dist/types/feedback.js +1 -4
- package/dist/types/feedback.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/meta-index.d.ts +146 -0
- package/dist/types/meta-index.d.ts.map +1 -0
- package/dist/types/meta-index.js +7 -0
- package/dist/types/meta-index.js.map +1 -0
- package/dist/types/project.d.ts +19 -3
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +24 -1
- package/dist/types/project.js.map +1 -1
- package/dist/types/task-log.d.ts +208 -0
- package/dist/types/task-log.d.ts.map +1 -0
- package/dist/types/task-log.js +6 -0
- package/dist/types/task-log.js.map +1 -0
- package/dist/types/ui-meta.d.ts +118 -0
- package/dist/types/ui-meta.d.ts.map +1 -0
- package/dist/types/ui-meta.js +7 -0
- package/dist/types/ui-meta.js.map +1 -0
- package/package.json +12 -4
- package/templates/base/agents/base/tsq-architect.md +68 -0
- package/templates/base/agents/base/tsq-dba.md +56 -0
- package/templates/base/agents/base/tsq-designer.md +72 -0
- package/templates/base/agents/base/tsq-developer.md +67 -0
- package/templates/base/agents/base/tsq-qa.md +55 -0
- package/templates/base/agents/base/tsq-security.md +65 -0
- package/templates/base/agents/overlays/domain/general-web/_common.md +11 -0
- package/templates/base/agents/overlays/platform/claude-code.md +12 -0
- package/templates/base/config.template.yaml +213 -0
- package/templates/base/knowledge/checklists/accessibility.md +37 -0
- package/templates/base/knowledge/checklists/architecture-review.md +28 -0
- package/templates/base/knowledge/checklists/database-standards.md +84 -0
- package/templates/base/knowledge/checklists/design-reference.md +97 -0
- package/templates/base/knowledge/checklists/security.md +50 -0
- package/templates/base/knowledge/checklists/ssot-validation.md +19 -0
- package/templates/base/knowledge/domains/_template.md +16 -0
- package/templates/base/knowledge/platforms/_template.md +16 -0
- package/templates/base/knowledge/templates/sequence-report.md +44 -0
- package/templates/base/knowledge/templates/task-result.md +105 -0
- package/templates/base/skills/_template/SKILL.md +59 -0
- package/templates/base/skills/_template/references/_template.md +35 -0
- package/templates/base/skills/_template/rules/_sections.md +34 -0
- package/templates/base/skills/_template/rules/_template.md +32 -0
- package/templates/base/skills/_template/scripts/_template.sh +31 -0
- package/templates/base/skills/architecture/SKILL.md +54 -0
- package/templates/base/skills/architecture/references/adr-template.md +50 -0
- package/templates/base/skills/architecture/references/api-design.md +64 -0
- package/templates/base/skills/backend/node/SKILL.md +81 -0
- package/templates/base/skills/backend/node/rules/async-patterns.md +81 -0
- package/templates/base/skills/backend/node/rules/deployment.md +33 -0
- package/templates/base/skills/backend/node/rules/env-config.md +41 -0
- package/templates/base/skills/backend/node/rules/error-handling.md +83 -0
- package/templates/base/skills/backend/node/rules/hono-app-setup.md +98 -0
- package/templates/base/skills/backend/node/rules/jwt-auth.md +76 -0
- package/templates/base/skills/backend/node/rules/middleware.md +56 -0
- package/templates/base/skills/backend/node/rules/testing.md +82 -0
- package/templates/base/skills/coding/SKILL.md +47 -0
- package/templates/base/skills/coding/rules/patterns.md +81 -0
- package/templates/base/skills/database/SKILL.md +98 -0
- package/templates/base/skills/database/prisma/SKILL.md +57 -0
- package/templates/base/skills/database/prisma/rules/queries.md +133 -0
- package/templates/base/skills/database/prisma/rules/schema-design.md +80 -0
- package/templates/base/skills/frontend/nextjs/SKILL.md +59 -0
- package/templates/base/skills/frontend/nextjs/rules/app-router.md +138 -0
- package/templates/base/skills/frontend/react/SKILL.md +86 -0
- package/templates/base/skills/frontend/react/rules/_sections.md +88 -0
- package/templates/base/skills/frontend/react/rules/anti-patterns.md +67 -0
- package/templates/base/skills/frontend/react/rules/async-api-routes.md +38 -0
- package/templates/base/skills/frontend/react/rules/async-defer-await.md +80 -0
- package/templates/base/skills/frontend/react/rules/async-dependencies.md +36 -0
- package/templates/base/skills/frontend/react/rules/async-parallel.md +28 -0
- package/templates/base/skills/frontend/react/rules/async-suspense-boundaries.md +99 -0
- package/templates/base/skills/frontend/react/rules/bundle-barrel-imports.md +59 -0
- package/templates/base/skills/frontend/react/rules/bundle-defer-third-party.md +49 -0
- package/templates/base/skills/frontend/react/rules/bundle-dynamic-imports.md +35 -0
- package/templates/base/skills/frontend/react/rules/component-conventions.md +74 -0
- package/templates/base/skills/frontend/react/rules/js-combine-iterations.md +32 -0
- package/templates/base/skills/frontend/react/rules/js-early-exit.md +50 -0
- package/templates/base/skills/frontend/react/rules/js-index-maps.md +37 -0
- package/templates/base/skills/frontend/react/rules/js-set-map-lookups.md +24 -0
- package/templates/base/skills/frontend/react/rules/rendering-conditional-render.md +40 -0
- package/templates/base/skills/frontend/react/rules/rendering-content-visibility.md +38 -0
- package/templates/base/skills/frontend/react/rules/rendering-hoist-jsx.md +46 -0
- package/templates/base/skills/frontend/react/rules/rerender-defer-reads.md +39 -0
- package/templates/base/skills/frontend/react/rules/rerender-derived-state.md +29 -0
- package/templates/base/skills/frontend/react/rules/rerender-memo.md +44 -0
- package/templates/base/skills/frontend/react/rules/rerender-transitions.md +40 -0
- package/templates/base/skills/frontend/react/rules/server-after-nonblocking.md +73 -0
- package/templates/base/skills/frontend/react/rules/server-cache-react.md +26 -0
- package/templates/base/skills/frontend/react/rules/server-parallel-fetching.md +79 -0
- package/templates/base/skills/frontend/react/rules/state-location.md +55 -0
- package/templates/base/skills/methodology/bdd/SKILL.md +69 -0
- package/templates/base/skills/methodology/bdd/rules/gherkin-patterns.md +113 -0
- package/templates/base/skills/methodology/ddd/SKILL.md +74 -0
- package/templates/base/skills/methodology/ddd/rules/strategic-patterns.md +98 -0
- package/templates/base/skills/methodology/debugging/SKILL.md +60 -0
- package/templates/base/skills/methodology/debugging/references/root-cause-tracing.md +84 -0
- package/templates/base/skills/methodology/tdd/SKILL.md +66 -0
- package/templates/base/skills/methodology/tdd/rules/real-world-example.md +88 -0
- package/templates/base/skills/methodology/tdd/rules/techniques.md +185 -0
- package/templates/base/skills/planning/SKILL.md +58 -0
- package/templates/base/skills/planning/references/prd-guide.md +47 -0
- package/templates/base/skills/planning/references/requirements-guide.md +46 -0
- package/templates/base/skills/prompt-engineering/SKILL.md +103 -0
- package/templates/base/skills/retrospective/SKILL.md +102 -0
- package/templates/base/skills/security/SKILL.md +55 -0
- package/templates/base/skills/security/rules/owasp-examples.md +119 -0
- package/templates/base/skills/security/scripts/check-secrets.sh +55 -0
- package/templates/base/skills/testing/SKILL.md +63 -0
- package/templates/base/skills/testing/references/testing-patterns.md +103 -0
- package/templates/base/skills/tsq-protocol/SKILL.md +51 -0
- package/templates/base/skills/typescript/SKILL.md +67 -0
- package/templates/base/skills/typescript/rules/type-patterns.md +135 -0
- package/templates/base/skills/typescript/rules/utility-types.md +76 -0
- package/templates/base/skills/ui-design/SKILL.md +70 -0
- package/templates/{common → base}/timsquad/feedback/routing-rules.yaml +1 -1
- package/templates/base/timsquad/process/phase-checklist.yaml +174 -0
- package/templates/{common → base}/timsquad/process/state-machine.xml +12 -0
- package/templates/{common → base}/timsquad/process/workflow-base.xml +124 -0
- package/templates/{common → base}/timsquad/retrospective/metrics/metrics-schema.json +46 -1
- package/templates/platforms/claude-code/CLAUDE.md.template +64 -0
- package/templates/platforms/claude-code/rules/adr-rules.md +32 -0
- package/templates/platforms/claude-code/rules/feedback-routing.md +18 -0
- package/templates/platforms/claude-code/rules/phase-management.md +23 -0
- package/templates/platforms/claude-code/rules/reporting-format.md +26 -0
- package/templates/platforms/claude-code/rules/sequence-management.md +72 -0
- package/templates/platforms/claude-code/rules/workspace-sync.md +33 -0
- package/templates/platforms/claude-code/settings.json +26 -0
- package/templates/project-types/api-backend/config.yaml +227 -0
- package/templates/project-types/api-backend/process/workflow.xml +214 -0
- package/templates/project-types/fintech/config.yaml +151 -0
- package/templates/project-types/fintech/process/workflow.xml +316 -0
- package/templates/project-types/infra/config.yaml +327 -0
- package/templates/project-types/infra/process/workflow.xml +296 -0
- package/templates/project-types/platform/config.yaml +254 -0
- package/templates/project-types/platform/process/workflow.xml +254 -0
- package/templates/project-types/web-app/config.yaml +198 -0
- package/templates/project-types/web-app/process/workflow.xml +210 -0
- package/templates/project-types/web-service/config.yaml +136 -0
- package/templates/project-types/web-service/process/workflow.xml +184 -0
- package/templates/common/CLAUDE.md.template +0 -254
- package/templates/common/claude/agents/tsq-dba.md +0 -290
- package/templates/common/claude/agents/tsq-designer.md +0 -304
- package/templates/common/claude/agents/tsq-developer.md +0 -118
- package/templates/common/claude/agents/tsq-planner.md +0 -90
- package/templates/common/claude/agents/tsq-prompter.md +0 -336
- package/templates/common/claude/agents/tsq-qa.md +0 -134
- package/templates/common/claude/agents/tsq-retro.md +0 -168
- package/templates/common/claude/agents/tsq-security.md +0 -190
- package/templates/common/claude/skills/architecture/SKILL.md +0 -123
- package/templates/common/claude/skills/backend/node/SKILL.md +0 -1015
- package/templates/common/claude/skills/coding/SKILL.md +0 -171
- package/templates/common/claude/skills/database/prisma/SKILL.md +0 -357
- package/templates/common/claude/skills/frontend/nextjs/SKILL.md +0 -279
- package/templates/common/claude/skills/frontend/react/SKILL.md +0 -1729
- package/templates/common/claude/skills/methodology/bdd/SKILL.md +0 -234
- package/templates/common/claude/skills/methodology/ddd/SKILL.md +0 -311
- package/templates/common/claude/skills/methodology/tdd/SKILL.md +0 -512
- package/templates/common/claude/skills/planning/SKILL.md +0 -90
- package/templates/common/claude/skills/security/SKILL.md +0 -234
- package/templates/common/claude/skills/testing/SKILL.md +0 -146
- package/templates/common/claude/skills/typescript/SKILL.md +0 -435
- package/templates/common/config.template.yaml +0 -131
- /package/templates/{common → base}/timsquad/architectures/clean/ARCHITECTURE.md +0 -0
- /package/templates/{common → base}/timsquad/architectures/clean/backend.xml +0 -0
- /package/templates/{common → base}/timsquad/architectures/clean/frontend.xml +0 -0
- /package/templates/{common → base}/timsquad/architectures/fsd/ARCHITECTURE.md +0 -0
- /package/templates/{common → base}/timsquad/architectures/fsd/frontend.xml +0 -0
- /package/templates/{common → base}/timsquad/architectures/hexagonal/ARCHITECTURE.md +0 -0
- /package/templates/{common → base}/timsquad/architectures/hexagonal/backend.xml +0 -0
- /package/templates/{common → base}/timsquad/constraints/competency-framework.xml +0 -0
- /package/templates/{common → base}/timsquad/constraints/ssot-schema.xml +0 -0
- /package/templates/{common → base}/timsquad/feedback/feedback-router.sh +0 -0
- /package/templates/{common → base}/timsquad/generators/data-design.xml +0 -0
- /package/templates/{common → base}/timsquad/generators/prd.xml +0 -0
- /package/templates/{common → base}/timsquad/generators/requirements.xml +0 -0
- /package/templates/{common → base}/timsquad/generators/service-spec.xml +0 -0
- /package/templates/{common → base}/timsquad/logs/_example.md +0 -0
- /package/templates/{common → base}/timsquad/logs/_template.md +0 -0
- /package/templates/{common → base}/timsquad/patterns/cqrs.xml +0 -0
- /package/templates/{common → base}/timsquad/patterns/event-sourcing.xml +0 -0
- /package/templates/{common → base}/timsquad/patterns/repository.xml +0 -0
- /package/templates/{common → base}/timsquad/process/validation-rules.xml +0 -0
- /package/templates/{common → base}/timsquad/retrospective/cycle-report.template.md +0 -0
- /package/templates/{common → base}/timsquad/retrospective/patterns/failure-patterns.md +0 -0
- /package/templates/{common → base}/timsquad/retrospective/patterns/success-patterns.md +0 -0
- /package/templates/{common → base}/timsquad/retrospective/retrospective-config.xml +0 -0
- /package/templates/{common → base}/timsquad/retrospective/retrospective-state.xml +0 -0
- /package/templates/{common → base}/timsquad/ssot/adr/ADR-000-template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/adr/ADR-001-example.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/data-design.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/deployment-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/env-config.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/error-codes.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/functional-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/glossary.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/integration-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/planning.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/prd.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/requirements.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/security-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/service-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/test-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/ui-ux-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/state/workspace.xml +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill & Knowledge selective deployment.
|
|
3
|
+
* Mirrors agent-generator.ts pattern — only deploy what the project type needs.
|
|
4
|
+
*/
|
|
5
|
+
import type { TimsquadConfig } from '../types/config.js';
|
|
6
|
+
import type { TemplateVariables } from './template.js';
|
|
7
|
+
/**
|
|
8
|
+
* Get skills to deploy for a project.
|
|
9
|
+
* Combines BASE_SKILLS + type-specific + domain-specific + stack-specific skills.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getActiveSkills(config: TimsquadConfig): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Deploy only active skills from templates to project.
|
|
14
|
+
* Each skill is a directory: SKILL.md + optional rules/
|
|
15
|
+
*/
|
|
16
|
+
export declare function deploySkills(templatesDir: string, destSkillsDir: string, activeSkills: string[], variables: TemplateVariables): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate skill structure and return warnings.
|
|
19
|
+
* - SKILL.md should be ≤120 lines (concise index, not exhaustive doc)
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateSkillStructure(skillDir: string): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Get knowledge files to deploy for a project.
|
|
24
|
+
* Combines BASE_KNOWLEDGE + type-specific + domain-specific knowledge.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getActiveKnowledge(config: TimsquadConfig): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Deploy only active knowledge files from templates to project.
|
|
29
|
+
* Each knowledge item maps to a .md file under knowledge/.
|
|
30
|
+
*/
|
|
31
|
+
export declare function deployKnowledge(templatesDir: string, destKnowledgeDir: string, activeKnowledge: string[], variables: TemplateVariables): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=skill-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-generator.d.ts","sourceRoot":"","sources":["../../src/lib/skill-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOvD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAShE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAsCD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBjE;AA+ED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAOnE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EAAE,EACzB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill & Knowledge selective deployment.
|
|
3
|
+
* Mirrors agent-generator.ts pattern — only deploy what the project type needs.
|
|
4
|
+
*/
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import { BASE_SKILLS, SKILL_PRESETS, BASE_KNOWLEDGE, KNOWLEDGE_PRESETS, DOMAIN_SKILL_MAP, DOMAIN_KNOWLEDGE_MAP, STACK_SKILL_MAP, } from '../types/config.js';
|
|
8
|
+
import { substituteVariables } from './template.js';
|
|
9
|
+
// ─────────────────────────────────────────────────
|
|
10
|
+
// Skills
|
|
11
|
+
// ─────────────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Get skills to deploy for a project.
|
|
14
|
+
* Combines BASE_SKILLS + type-specific + domain-specific + stack-specific skills.
|
|
15
|
+
*/
|
|
16
|
+
export function getActiveSkills(config) {
|
|
17
|
+
const typeSkills = SKILL_PRESETS[config.project.type] || [];
|
|
18
|
+
const domainSkills = config.project.domain
|
|
19
|
+
? (DOMAIN_SKILL_MAP[config.project.domain] || [])
|
|
20
|
+
: [];
|
|
21
|
+
const stackSkills = (config.project.stack || [])
|
|
22
|
+
.flatMap(s => STACK_SKILL_MAP[s] || []);
|
|
23
|
+
return [...new Set([...BASE_SKILLS, ...typeSkills, ...domainSkills, ...stackSkills])];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Deploy only active skills from templates to project.
|
|
27
|
+
* Each skill is a directory: SKILL.md + optional rules/
|
|
28
|
+
*/
|
|
29
|
+
export async function deploySkills(templatesDir, destSkillsDir, activeSkills, variables) {
|
|
30
|
+
const srcSkillsDir = path.join(templatesDir, 'base', 'skills');
|
|
31
|
+
if (!await fs.pathExists(srcSkillsDir))
|
|
32
|
+
return;
|
|
33
|
+
// Always deploy _template/
|
|
34
|
+
const templateDir = path.join(srcSkillsDir, '_template');
|
|
35
|
+
if (await fs.pathExists(templateDir)) {
|
|
36
|
+
await copySkillDir(templateDir, path.join(destSkillsDir, '_template'), variables);
|
|
37
|
+
}
|
|
38
|
+
// Deploy active skills
|
|
39
|
+
for (const skill of activeSkills) {
|
|
40
|
+
const srcPath = path.join(srcSkillsDir, skill);
|
|
41
|
+
const destPath = path.join(destSkillsDir, skill);
|
|
42
|
+
if (!await fs.pathExists(srcPath))
|
|
43
|
+
continue;
|
|
44
|
+
await copySkillDir(srcPath, destPath, variables);
|
|
45
|
+
}
|
|
46
|
+
// Remove inactive skills (if re-deploying / upgrading)
|
|
47
|
+
await removeInactiveSkills(destSkillsDir, activeSkills);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Copy a skill directory (SKILL.md + rules/ + references/ + scripts/)
|
|
51
|
+
*/
|
|
52
|
+
async function copySkillDir(srcDir, destDir, variables) {
|
|
53
|
+
await fs.ensureDir(destDir);
|
|
54
|
+
const entries = await fs.readdir(srcDir, { withFileTypes: true });
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
57
|
+
const destPath = path.join(destDir, entry.name);
|
|
58
|
+
if (entry.isDirectory()) {
|
|
59
|
+
await copySkillDir(srcPath, destPath, variables);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
63
|
+
const textExts = ['.md', '.yaml', '.yml', '.json', '.xml', '.txt'];
|
|
64
|
+
if (textExts.includes(ext)) {
|
|
65
|
+
const content = await fs.readFile(srcPath, 'utf-8');
|
|
66
|
+
const processed = substituteVariables(content, variables);
|
|
67
|
+
await fs.writeFile(destPath, processed, 'utf-8');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
await fs.copy(srcPath, destPath);
|
|
71
|
+
// Set executable permission for shell scripts
|
|
72
|
+
if (ext === '.sh') {
|
|
73
|
+
await fs.chmod(destPath, 0o755);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validate skill structure and return warnings.
|
|
81
|
+
* - SKILL.md should be ≤120 lines (concise index, not exhaustive doc)
|
|
82
|
+
*/
|
|
83
|
+
export function validateSkillStructure(skillDir) {
|
|
84
|
+
const warnings = [];
|
|
85
|
+
const skillMd = path.join(skillDir, 'SKILL.md');
|
|
86
|
+
if (!fs.pathExistsSync(skillMd))
|
|
87
|
+
return warnings;
|
|
88
|
+
const content = fs.readFileSync(skillMd, 'utf-8');
|
|
89
|
+
const lineCount = content.split('\n').length;
|
|
90
|
+
if (lineCount > 120) {
|
|
91
|
+
warnings.push(`${skillDir}: SKILL.md is ${lineCount} lines (max 120). ` +
|
|
92
|
+
`Consider moving detailed content to references/ or rules/.`);
|
|
93
|
+
}
|
|
94
|
+
return warnings;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Remove skill directories that are not in the active list.
|
|
98
|
+
* Preserves _template/ always.
|
|
99
|
+
*/
|
|
100
|
+
async function removeInactiveSkills(destSkillsDir, activeSkills) {
|
|
101
|
+
if (!await fs.pathExists(destSkillsDir))
|
|
102
|
+
return;
|
|
103
|
+
// Build a set of top-level directories to keep
|
|
104
|
+
const keepSet = new Set();
|
|
105
|
+
keepSet.add('_template');
|
|
106
|
+
for (const skill of activeSkills) {
|
|
107
|
+
// For nested skills like 'frontend/react', keep the top-level 'frontend'
|
|
108
|
+
const topLevel = skill.split('/')[0];
|
|
109
|
+
keepSet.add(topLevel);
|
|
110
|
+
}
|
|
111
|
+
const entries = await fs.readdir(destSkillsDir, { withFileTypes: true });
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
if (!entry.isDirectory())
|
|
114
|
+
continue;
|
|
115
|
+
if (keepSet.has(entry.name)) {
|
|
116
|
+
// For parent dirs like 'frontend/', check subdirectories
|
|
117
|
+
await removeInactiveSubSkills(path.join(destSkillsDir, entry.name), activeSkills, entry.name);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// Completely inactive top-level skill
|
|
121
|
+
await fs.remove(path.join(destSkillsDir, entry.name));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* For parent skill directories (e.g. frontend/, methodology/),
|
|
126
|
+
* remove inactive sub-skills while keeping active ones.
|
|
127
|
+
*/
|
|
128
|
+
async function removeInactiveSubSkills(parentDir, activeSkills, parentName) {
|
|
129
|
+
const entries = await fs.readdir(parentDir, { withFileTypes: true });
|
|
130
|
+
// Check if this directory itself is a skill (has SKILL.md)
|
|
131
|
+
const hasSelfSkill = entries.some(e => e.name === 'SKILL.md');
|
|
132
|
+
const isParentActive = activeSkills.includes(parentName);
|
|
133
|
+
// If parent itself is an active skill, keep it
|
|
134
|
+
if (hasSelfSkill && !isParentActive) {
|
|
135
|
+
// Remove only SKILL.md and rules/ from parent, keep subdirs
|
|
136
|
+
}
|
|
137
|
+
for (const entry of entries) {
|
|
138
|
+
if (!entry.isDirectory())
|
|
139
|
+
continue;
|
|
140
|
+
if (['rules', 'references', 'scripts'].includes(entry.name))
|
|
141
|
+
continue; // belongs to parent skill
|
|
142
|
+
const subSkillPath = `${parentName}/${entry.name}`;
|
|
143
|
+
if (!activeSkills.includes(subSkillPath)) {
|
|
144
|
+
await fs.remove(path.join(parentDir, entry.name));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// If parent directory is now empty (no SKILL.md, no subdirs), remove it
|
|
148
|
+
const remaining = await fs.readdir(parentDir);
|
|
149
|
+
if (remaining.length === 0) {
|
|
150
|
+
await fs.remove(parentDir);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ─────────────────────────────────────────────────
|
|
154
|
+
// Knowledge
|
|
155
|
+
// ─────────────────────────────────────────────────
|
|
156
|
+
/**
|
|
157
|
+
* Get knowledge files to deploy for a project.
|
|
158
|
+
* Combines BASE_KNOWLEDGE + type-specific + domain-specific knowledge.
|
|
159
|
+
*/
|
|
160
|
+
export function getActiveKnowledge(config) {
|
|
161
|
+
const typeKnowledge = KNOWLEDGE_PRESETS[config.project.type] || [];
|
|
162
|
+
const domainKnowledge = config.project.domain
|
|
163
|
+
? (DOMAIN_KNOWLEDGE_MAP[config.project.domain] || [])
|
|
164
|
+
: [];
|
|
165
|
+
return [...new Set([...BASE_KNOWLEDGE, ...typeKnowledge, ...domainKnowledge])];
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Deploy only active knowledge files from templates to project.
|
|
169
|
+
* Each knowledge item maps to a .md file under knowledge/.
|
|
170
|
+
*/
|
|
171
|
+
export async function deployKnowledge(templatesDir, destKnowledgeDir, activeKnowledge, variables) {
|
|
172
|
+
const srcKnowledgeDir = path.join(templatesDir, 'base', 'knowledge');
|
|
173
|
+
if (!await fs.pathExists(srcKnowledgeDir))
|
|
174
|
+
return;
|
|
175
|
+
for (const item of activeKnowledge) {
|
|
176
|
+
// item = 'checklists/security' → file = 'checklists/security.md'
|
|
177
|
+
const srcPath = path.join(srcKnowledgeDir, item + '.md');
|
|
178
|
+
const destPath = path.join(destKnowledgeDir, item + '.md');
|
|
179
|
+
if (!await fs.pathExists(srcPath))
|
|
180
|
+
continue;
|
|
181
|
+
const content = await fs.readFile(srcPath, 'utf-8');
|
|
182
|
+
const processed = substituteVariables(content, variables);
|
|
183
|
+
await fs.ensureDir(path.dirname(destPath));
|
|
184
|
+
await fs.writeFile(destPath, processed, 'utf-8');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=skill-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../src/lib/skill-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/template.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ProjectType, ProjectLevel } from '../types/index.js';
|
|
2
|
+
import type { TimsquadConfig } from '../types/config.js';
|
|
2
3
|
/**
|
|
3
4
|
* Template variables for substitution
|
|
4
5
|
*/
|
|
@@ -6,9 +7,14 @@ export interface TemplateVariables {
|
|
|
6
7
|
PROJECT_NAME: string;
|
|
7
8
|
PROJECT_TYPE: string;
|
|
8
9
|
PROJECT_LEVEL: string;
|
|
10
|
+
PROJECT_DOMAIN: string;
|
|
11
|
+
PROJECT_PLATFORM: string;
|
|
12
|
+
PROJECT_STACK: string;
|
|
9
13
|
DATE: string;
|
|
10
14
|
TIMESTAMP: string;
|
|
11
15
|
INIT_DATE: string;
|
|
16
|
+
ACTIVE_AGENTS: string;
|
|
17
|
+
DELEGATION_RULES: string;
|
|
12
18
|
}
|
|
13
19
|
/**
|
|
14
20
|
* Get templates directory path
|
|
@@ -17,11 +23,19 @@ export declare function getTemplatesDir(): string;
|
|
|
17
23
|
/**
|
|
18
24
|
* Create template variables
|
|
19
25
|
*/
|
|
20
|
-
export declare function createTemplateVariables(name: string, type: ProjectType, level: ProjectLevel): TemplateVariables;
|
|
26
|
+
export declare function createTemplateVariables(name: string, type: ProjectType, level: ProjectLevel, config?: TimsquadConfig): TemplateVariables;
|
|
21
27
|
/**
|
|
22
28
|
* Substitute variables in content
|
|
23
29
|
*/
|
|
24
30
|
export declare function substituteVariables(content: string, variables: TemplateVariables): string;
|
|
31
|
+
/**
|
|
32
|
+
* Copy and process a single file
|
|
33
|
+
*/
|
|
34
|
+
export declare function copyAndProcessFile(src: string, dest: string, variables: TemplateVariables): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Copy directory recursively with variable substitution
|
|
37
|
+
*/
|
|
38
|
+
export declare function copyDirectoryWithSubstitution(srcDir: string, destDir: string, variables: TemplateVariables): Promise<void>;
|
|
25
39
|
/**
|
|
26
40
|
* Get required SSOT documents for project
|
|
27
41
|
*/
|
|
@@ -29,5 +43,5 @@ export declare function getRequiredDocuments(type: ProjectType, level: ProjectLe
|
|
|
29
43
|
/**
|
|
30
44
|
* Initialize project from templates
|
|
31
45
|
*/
|
|
32
|
-
export declare function initializeProject(projectRoot: string, name: string, type: ProjectType, level: ProjectLevel): Promise<void>;
|
|
46
|
+
export declare function initializeProject(projectRoot: string, name: string, type: ProjectType, level: ProjectLevel, config?: TimsquadConfig, automationEnabled?: boolean): Promise<void>;
|
|
33
47
|
//# sourceMappingURL=template.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,CAAC,EAAE,cAAc,GACtB,iBAAiB,CA0BnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,MAAM,CASzF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAIrF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,CAAC,EAAE,cAAc,EACvB,iBAAiB,UAAO,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Gf"}
|
package/dist/lib/template.js
CHANGED
|
@@ -3,6 +3,8 @@ import { fileURLToPath } from 'url';
|
|
|
3
3
|
import fs from 'fs-extra';
|
|
4
4
|
import { REQUIRED_SSOT_BY_LEVEL, REQUIRED_SSOT_BY_TYPE } from '../types/project.js';
|
|
5
5
|
import { getDateString, getTimestamp } from '../utils/date.js';
|
|
6
|
+
import { getActiveAgents, generateAgentFiles, generateDelegationRules, formatActiveAgentsList } from './agent-generator.js';
|
|
7
|
+
import { getActiveSkills, deploySkills, getActiveKnowledge, deployKnowledge } from './skill-generator.js';
|
|
6
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
9
|
const __dirname = path.dirname(__filename);
|
|
8
10
|
/**
|
|
@@ -15,15 +17,28 @@ export function getTemplatesDir() {
|
|
|
15
17
|
/**
|
|
16
18
|
* Create template variables
|
|
17
19
|
*/
|
|
18
|
-
export function createTemplateVariables(name, type, level) {
|
|
20
|
+
export function createTemplateVariables(name, type, level, config) {
|
|
19
21
|
const now = new Date();
|
|
22
|
+
// 에이전트 관련 변수 생성
|
|
23
|
+
let activeAgentsText = '';
|
|
24
|
+
let delegationRulesText = '';
|
|
25
|
+
if (config) {
|
|
26
|
+
const activeAgents = getActiveAgents(config);
|
|
27
|
+
activeAgentsText = formatActiveAgentsList(activeAgents);
|
|
28
|
+
delegationRulesText = generateDelegationRules(activeAgents);
|
|
29
|
+
}
|
|
20
30
|
return {
|
|
21
31
|
PROJECT_NAME: name,
|
|
22
32
|
PROJECT_TYPE: type,
|
|
23
33
|
PROJECT_LEVEL: String(level),
|
|
34
|
+
PROJECT_DOMAIN: config?.project?.domain ?? 'general-web',
|
|
35
|
+
PROJECT_PLATFORM: config?.project?.platform ?? 'claude-code',
|
|
36
|
+
PROJECT_STACK: config?.project?.stack?.join(', ') ?? '',
|
|
24
37
|
DATE: getDateString(),
|
|
25
38
|
TIMESTAMP: getTimestamp(),
|
|
26
39
|
INIT_DATE: now.toISOString(),
|
|
40
|
+
ACTIVE_AGENTS: activeAgentsText,
|
|
41
|
+
DELEGATION_RULES: delegationRulesText,
|
|
27
42
|
};
|
|
28
43
|
}
|
|
29
44
|
/**
|
|
@@ -40,7 +55,7 @@ export function substituteVariables(content, variables) {
|
|
|
40
55
|
/**
|
|
41
56
|
* Copy and process a single file
|
|
42
57
|
*/
|
|
43
|
-
async function copyAndProcessFile(src, dest, variables) {
|
|
58
|
+
export async function copyAndProcessFile(src, dest, variables) {
|
|
44
59
|
const content = await fs.readFile(src, 'utf-8');
|
|
45
60
|
const processed = substituteVariables(content, variables);
|
|
46
61
|
await fs.ensureDir(path.dirname(dest));
|
|
@@ -49,7 +64,7 @@ async function copyAndProcessFile(src, dest, variables) {
|
|
|
49
64
|
/**
|
|
50
65
|
* Copy directory recursively with variable substitution
|
|
51
66
|
*/
|
|
52
|
-
async function copyDirectoryWithSubstitution(srcDir, destDir, variables) {
|
|
67
|
+
export async function copyDirectoryWithSubstitution(srcDir, destDir, variables) {
|
|
53
68
|
const entries = await fs.readdir(srcDir, { withFileTypes: true });
|
|
54
69
|
for (const entry of entries) {
|
|
55
70
|
const srcPath = path.join(srcDir, entry.name);
|
|
@@ -71,6 +86,10 @@ async function copyDirectoryWithSubstitution(srcDir, destDir, variables) {
|
|
|
71
86
|
const textExtensions = ['.md', '.yaml', '.yml', '.json', '.xml', '.sh', '.txt'];
|
|
72
87
|
if (textExtensions.includes(ext)) {
|
|
73
88
|
await copyAndProcessFile(srcPath, destPath, variables);
|
|
89
|
+
// Preserve executable permission for shell scripts
|
|
90
|
+
if (ext === '.sh') {
|
|
91
|
+
await fs.chmod(destPath, 0o755);
|
|
92
|
+
}
|
|
74
93
|
}
|
|
75
94
|
else {
|
|
76
95
|
await fs.copy(srcPath, destPath);
|
|
@@ -89,52 +108,103 @@ export function getRequiredDocuments(type, level) {
|
|
|
89
108
|
/**
|
|
90
109
|
* Initialize project from templates
|
|
91
110
|
*/
|
|
92
|
-
export async function initializeProject(projectRoot, name, type, level) {
|
|
111
|
+
export async function initializeProject(projectRoot, name, type, level, config, automationEnabled = true) {
|
|
93
112
|
const templatesDir = getTemplatesDir();
|
|
94
|
-
const variables = createTemplateVariables(name, type, level);
|
|
95
113
|
// Adjust level for fintech
|
|
96
114
|
const effectiveLevel = type === 'fintech' ? 3 : level;
|
|
97
|
-
const
|
|
98
|
-
// 1. Copy
|
|
99
|
-
const
|
|
115
|
+
const variables = createTemplateVariables(name, type, effectiveLevel, config);
|
|
116
|
+
// 1. Copy .claude/settings.json (개별 파일만)
|
|
117
|
+
const platformDir = path.join(templatesDir, 'platforms', 'claude-code');
|
|
100
118
|
const destClaudeDir = path.join(projectRoot, '.claude');
|
|
101
|
-
await
|
|
102
|
-
|
|
103
|
-
|
|
119
|
+
await fs.ensureDir(destClaudeDir);
|
|
120
|
+
const settingsPath = path.join(platformDir, 'settings.json');
|
|
121
|
+
if (await fs.pathExists(settingsPath)) {
|
|
122
|
+
await copyAndProcessFile(settingsPath, path.join(destClaudeDir, 'settings.json'), variables);
|
|
123
|
+
}
|
|
124
|
+
// 2. Deploy .claude/rules/ (메인 세션 전용 상세 규칙)
|
|
125
|
+
const srcRulesDir = path.join(platformDir, 'rules');
|
|
126
|
+
const destRulesDir = path.join(destClaudeDir, 'rules');
|
|
127
|
+
if (await fs.pathExists(srcRulesDir)) {
|
|
128
|
+
await copyDirectoryWithSubstitution(srcRulesDir, destRulesDir, variables);
|
|
129
|
+
}
|
|
130
|
+
// 3. Config 기반 에이전트 동적 생성 (활성 에이전트만 배치)
|
|
131
|
+
if (config) {
|
|
132
|
+
const activeAgents = getActiveAgents(config);
|
|
133
|
+
const destAgentsDir = path.join(destClaudeDir, 'agents');
|
|
134
|
+
await generateAgentFiles(templatesDir, destAgentsDir, activeAgents, variables, config);
|
|
135
|
+
// 3. Config 기반 스킬 선택적 배치 (타입에 맞는 스킬만)
|
|
136
|
+
const activeSkills = getActiveSkills(config);
|
|
137
|
+
await deploySkills(templatesDir, path.join(destClaudeDir, 'skills'), activeSkills, variables);
|
|
138
|
+
// 4. Config 기반 knowledge 선택적 배치 (타입에 맞는 체크리스트만)
|
|
139
|
+
const activeKnowledge = getActiveKnowledge(config);
|
|
140
|
+
await deployKnowledge(templatesDir, path.join(destClaudeDir, 'knowledge'), activeKnowledge, variables);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// config 없이 호출된 경우 전체 복사 (fallback)
|
|
144
|
+
await copyDirectoryWithSubstitution(platformDir, destClaudeDir, variables);
|
|
145
|
+
const baseAgentsDir = path.join(templatesDir, 'base', 'agents');
|
|
146
|
+
if (await fs.pathExists(baseAgentsDir)) {
|
|
147
|
+
await copyDirectoryWithSubstitution(baseAgentsDir, path.join(destClaudeDir, 'agents'), variables);
|
|
148
|
+
}
|
|
149
|
+
const baseSkillsDir = path.join(templatesDir, 'base', 'skills');
|
|
150
|
+
if (await fs.pathExists(baseSkillsDir)) {
|
|
151
|
+
await copyDirectoryWithSubstitution(baseSkillsDir, path.join(destClaudeDir, 'skills'), variables);
|
|
152
|
+
}
|
|
153
|
+
const baseKnowledgeDir = path.join(templatesDir, 'base', 'knowledge');
|
|
154
|
+
if (await fs.pathExists(baseKnowledgeDir)) {
|
|
155
|
+
await copyDirectoryWithSubstitution(baseKnowledgeDir, path.join(destClaudeDir, 'knowledge'), variables);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// 3. Copy common/timsquad to .timsquad
|
|
159
|
+
const commonTimsquadDir = path.join(templatesDir, 'base', 'timsquad');
|
|
104
160
|
const destTimsquadDir = path.join(projectRoot, '.timsquad');
|
|
105
|
-
await copyDirectoryWithSubstitution(commonTimsquadDir, destTimsquadDir,
|
|
106
|
-
//
|
|
107
|
-
const typeWorkflowDir = path.join(templatesDir, type, 'process');
|
|
161
|
+
await copyDirectoryWithSubstitution(commonTimsquadDir, destTimsquadDir, variables);
|
|
162
|
+
// 4. Copy type-specific workflow
|
|
163
|
+
const typeWorkflowDir = path.join(templatesDir, 'project-types', type, 'process');
|
|
108
164
|
if (await fs.pathExists(typeWorkflowDir)) {
|
|
109
165
|
const destProcessDir = path.join(destTimsquadDir, 'process');
|
|
110
|
-
await copyDirectoryWithSubstitution(typeWorkflowDir, destProcessDir,
|
|
166
|
+
await copyDirectoryWithSubstitution(typeWorkflowDir, destProcessDir, variables);
|
|
111
167
|
}
|
|
112
|
-
//
|
|
113
|
-
const claudeMdTemplate = path.join(templatesDir, '
|
|
168
|
+
// 5. Create CLAUDE.md from template
|
|
169
|
+
const claudeMdTemplate = path.join(templatesDir, 'platforms', 'claude-code', 'CLAUDE.md.template');
|
|
114
170
|
if (await fs.pathExists(claudeMdTemplate)) {
|
|
115
|
-
await copyAndProcessFile(claudeMdTemplate, path.join(projectRoot, 'CLAUDE.md'),
|
|
171
|
+
await copyAndProcessFile(claudeMdTemplate, path.join(projectRoot, 'CLAUDE.md'), variables);
|
|
116
172
|
}
|
|
117
173
|
// 5. Create additional directories
|
|
118
174
|
const additionalDirs = [
|
|
119
175
|
'.timsquad/logs',
|
|
120
176
|
'.timsquad/logs/quick',
|
|
177
|
+
'.timsquad/logs/sessions',
|
|
178
|
+
'.timsquad/logs/tasks',
|
|
179
|
+
'.timsquad/logs/sequences',
|
|
180
|
+
'.timsquad/logs/phases',
|
|
181
|
+
'.timsquad/reports',
|
|
121
182
|
'.timsquad/state',
|
|
183
|
+
'.timsquad/state/meta-index',
|
|
184
|
+
'.timsquad/state/meta-index/ui-index',
|
|
185
|
+
'.timsquad/.daemon',
|
|
122
186
|
'.timsquad/knowledge',
|
|
123
187
|
'.timsquad/retrospective/cycles',
|
|
124
188
|
'.timsquad/retrospective/metrics',
|
|
125
189
|
'.timsquad/retrospective/improvements/prompts',
|
|
126
190
|
'.timsquad/retrospective/improvements/templates',
|
|
191
|
+
'.claude/knowledge/platforms',
|
|
192
|
+
'.claude/knowledge/domains',
|
|
193
|
+
'.claude/knowledge/checklists',
|
|
194
|
+
'.claude/knowledge/templates',
|
|
127
195
|
];
|
|
128
196
|
for (const dir of additionalDirs) {
|
|
129
197
|
await fs.ensureDir(path.join(projectRoot, dir));
|
|
130
198
|
}
|
|
131
199
|
// 6. Create initial state files
|
|
132
|
-
await createInitialStateFiles(projectRoot, name, type, effectiveLevel);
|
|
200
|
+
await createInitialStateFiles(projectRoot, name, type, effectiveLevel, automationEnabled);
|
|
201
|
+
// 7. Create .gitignore (기존 파일이 없을 때만)
|
|
202
|
+
await createGitignore(projectRoot);
|
|
133
203
|
}
|
|
134
204
|
/**
|
|
135
205
|
* Create initial state files
|
|
136
206
|
*/
|
|
137
|
-
async function createInitialStateFiles(projectRoot, _name, _type, _level) {
|
|
207
|
+
async function createInitialStateFiles(projectRoot, _name, _type, _level, automationEnabled = true) {
|
|
138
208
|
// current-phase.json
|
|
139
209
|
const phaseData = {
|
|
140
210
|
current: 'planning',
|
|
@@ -142,10 +212,94 @@ async function createInitialStateFiles(projectRoot, _name, _type, _level) {
|
|
|
142
212
|
progress: 0,
|
|
143
213
|
};
|
|
144
214
|
await fs.writeJson(path.join(projectRoot, '.timsquad', 'state', 'current-phase.json'), phaseData, { spaces: 2 });
|
|
145
|
-
//
|
|
215
|
+
// workflow.json (자동화 워크플로우 상태)
|
|
216
|
+
const workflowData = {
|
|
217
|
+
schema_version: '1.0.0',
|
|
218
|
+
automation: {
|
|
219
|
+
sequence_log: automationEnabled,
|
|
220
|
+
phase_log: automationEnabled,
|
|
221
|
+
phase_gate: automationEnabled,
|
|
222
|
+
metrics: automationEnabled,
|
|
223
|
+
retro: automationEnabled,
|
|
224
|
+
},
|
|
225
|
+
current_phase: null,
|
|
226
|
+
sequences: {},
|
|
227
|
+
completed_phases: [],
|
|
228
|
+
};
|
|
229
|
+
await fs.writeJson(path.join(projectRoot, '.timsquad', 'state', 'workflow.json'), workflowData, { spaces: 2 });
|
|
230
|
+
// knowledge files (이하 기존 로직)
|
|
146
231
|
const knowledgeDir = path.join(projectRoot, '.timsquad', 'knowledge');
|
|
147
232
|
await fs.writeFile(path.join(knowledgeDir, 'tribal.md'), `# Tribal Knowledge\n\n## 코딩 컨벤션\n\n## 아키텍처 패턴\n`, 'utf-8');
|
|
148
233
|
await fs.writeFile(path.join(knowledgeDir, 'lessons.md'), `# Lessons Learned\n\n`, 'utf-8');
|
|
149
234
|
await fs.writeFile(path.join(knowledgeDir, 'constraints.md'), `# Project Constraints\n\n`, 'utf-8');
|
|
150
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Create .gitignore for TimSquad project
|
|
238
|
+
* .timsquad/, .claude/, CLAUDE.md 는 git 추적 대상으로 포함
|
|
239
|
+
* 런타임 생성 파일과 일반적 무시 대상만 제외
|
|
240
|
+
*/
|
|
241
|
+
async function createGitignore(projectRoot) {
|
|
242
|
+
const gitignorePath = path.join(projectRoot, '.gitignore');
|
|
243
|
+
// 기존 .gitignore가 있으면 건드리지 않음
|
|
244
|
+
if (await fs.pathExists(gitignorePath)) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const content = `# OS
|
|
248
|
+
.DS_Store
|
|
249
|
+
Thumbs.db
|
|
250
|
+
|
|
251
|
+
# Editor
|
|
252
|
+
.vscode/
|
|
253
|
+
.idea/
|
|
254
|
+
*.swp
|
|
255
|
+
*.swo
|
|
256
|
+
|
|
257
|
+
# Node
|
|
258
|
+
node_modules/
|
|
259
|
+
npm-debug.log*
|
|
260
|
+
yarn-error.log*
|
|
261
|
+
pnpm-debug.log*
|
|
262
|
+
|
|
263
|
+
# Build output
|
|
264
|
+
dist/
|
|
265
|
+
build/
|
|
266
|
+
.next/
|
|
267
|
+
out/
|
|
268
|
+
|
|
269
|
+
# Environment
|
|
270
|
+
.env
|
|
271
|
+
.env.local
|
|
272
|
+
.env.*.local
|
|
273
|
+
|
|
274
|
+
# Temp
|
|
275
|
+
*.tmp
|
|
276
|
+
*.temp
|
|
277
|
+
|
|
278
|
+
# ============================================================
|
|
279
|
+
# TimSquad - 아래 항목은 git에 포함됨 (ignore하지 않음)
|
|
280
|
+
# ============================================================
|
|
281
|
+
# CLAUDE.md → 프로젝트 에이전트 지시사항 (추적)
|
|
282
|
+
# .claude/ → 에이전트, 스킬, 훅 설정 (추적)
|
|
283
|
+
# .timsquad/ → SSOT, 설정, 프로세스 (추적)
|
|
284
|
+
#
|
|
285
|
+
# 단, 런타임 생성 로그/세션 데이터는 제외:
|
|
286
|
+
.timsquad/logs/sessions/
|
|
287
|
+
.timsquad/logs/quick/
|
|
288
|
+
.timsquad/logs/tasks/
|
|
289
|
+
.timsquad/logs/sequences/
|
|
290
|
+
.timsquad/logs/phases/
|
|
291
|
+
.timsquad/logs/*-session.md
|
|
292
|
+
.timsquad/logs/*-alerts.md
|
|
293
|
+
.timsquad/logs/workflow-automation.log
|
|
294
|
+
.timsquad/retrospective/metrics/latest.json
|
|
295
|
+
.timsquad/state/meta-index/
|
|
296
|
+
.timsquad/state/workflow.json
|
|
297
|
+
.timsquad/.daemon/
|
|
298
|
+
.timsquad/.daemon.pid
|
|
299
|
+
.timsquad/.daemon.log
|
|
300
|
+
.timsquad/.daemon.sock
|
|
301
|
+
.timsquad/.upgrade-backup/
|
|
302
|
+
`;
|
|
303
|
+
await fs.writeFile(gitignorePath, content, 'utf-8');
|
|
304
|
+
}
|
|
151
305
|
//# sourceMappingURL=template.js.map
|
package/dist/lib/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Index core library
|
|
3
|
+
* 프론트엔드 컴포넌트 구조 인덱싱, health 점수 관리
|
|
4
|
+
* 저장소: .timsquad/state/meta-index/ui-index/
|
|
5
|
+
*/
|
|
6
|
+
import type { UIModuleIndex, ComponentEntry, UIHealthScore, UIPendingEntry } from '../types/ui-meta.js';
|
|
7
|
+
export declare function getUIIndexDir(metaDir: string): string;
|
|
8
|
+
export declare function rebuildUIIndex(projectRoot: string, metaDir: string, excludePatterns?: string[]): Promise<UIModuleIndex>;
|
|
9
|
+
export declare function updateUIIndex(projectRoot: string, metaDir: string, changedFiles?: string[]): Promise<UIModuleIndex>;
|
|
10
|
+
export declare function calculateUIHealth(components: Record<string, ComponentEntry>): UIHealthScore;
|
|
11
|
+
export declare function appendUIPending(metaDir: string, entry: UIPendingEntry): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=ui-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-index.d.ts","sourceRoot":"","sources":["../../src/lib/ui-index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EACV,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC9B,MAAM,qBAAqB,CAAC;AAoB7B,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAID,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,aAAa,CAAC,CA4ExB;AAID,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC,CAyExB;AAID,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACzC,aAAa,CAuBf;AAID,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|