@nextsparkjs/ai-workflow 0.1.0-beta.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/claude/_docs/workflows-optimizations.md +359 -0
- package/claude/agents/api-tester.md +634 -0
- package/claude/agents/architecture-supervisor.md +1351 -0
- package/claude/agents/backend-developer.md +997 -0
- package/claude/agents/backend-validator.md +417 -0
- package/claude/agents/bdd-docs-writer.md +737 -0
- package/claude/agents/block-developer.md +677 -0
- package/claude/agents/code-reviewer.md +1432 -0
- package/claude/agents/db-developer.md +721 -0
- package/claude/agents/db-validator.md +407 -0
- package/claude/agents/demo-video-generator.md +493 -0
- package/claude/agents/documentation-writer.md +1268 -0
- package/claude/agents/frontend-developer.md +1234 -0
- package/claude/agents/frontend-validator.md +777 -0
- package/claude/agents/functional-validator.md +630 -0
- package/claude/agents/mock-analyst.md +387 -0
- package/claude/agents/product-manager.md +963 -0
- package/claude/agents/qa-automation.md +1762 -0
- package/claude/agents/release-manager.md +634 -0
- package/claude/agents/selectors-translator.md +262 -0
- package/claude/agents/unit-test-writer.md +785 -0
- package/claude/agents/visual-comparator.md +329 -0
- package/claude/agents/workflow-maintainer.md +352 -0
- package/claude/commands/do/README.md +88 -0
- package/claude/commands/do/create-api.md +64 -0
- package/claude/commands/do/create-entity.md +66 -0
- package/claude/commands/do/create-migration.md +64 -0
- package/claude/commands/do/create-plugin.md +56 -0
- package/claude/commands/do/create-theme.md +70 -0
- package/claude/commands/do/mock-data.md +67 -0
- package/claude/commands/do/reset-db.md +71 -0
- package/claude/commands/do/setup-scheduled-action.md +75 -0
- package/claude/commands/do/sync-code-review.md +117 -0
- package/claude/commands/do/update-selectors.md +112 -0
- package/claude/commands/do/use-skills.md +90 -0
- package/claude/commands/do/validate-blocks.md +69 -0
- package/claude/commands/how-to/README.md +261 -0
- package/claude/commands/how-to/add-metadata.md +692 -0
- package/claude/commands/how-to/add-taxonomies.md +806 -0
- package/claude/commands/how-to/add-translations.md +571 -0
- package/claude/commands/how-to/create-api.md +577 -0
- package/claude/commands/how-to/create-block.md +575 -0
- package/claude/commands/how-to/create-child-entities.md +771 -0
- package/claude/commands/how-to/create-entity.md +597 -0
- package/claude/commands/how-to/create-migrations.md +605 -0
- package/claude/commands/how-to/create-plugin.md +654 -0
- package/claude/commands/how-to/customize-app.md +481 -0
- package/claude/commands/how-to/customize-dashboard.md +553 -0
- package/claude/commands/how-to/customize-theme.md +438 -0
- package/claude/commands/how-to/define-features-flows.md +632 -0
- package/claude/commands/how-to/deploy.md +507 -0
- package/claude/commands/how-to/handle-file-uploads.md +746 -0
- package/claude/commands/how-to/implement-search.md +1001 -0
- package/claude/commands/how-to/install-plugins.md +352 -0
- package/claude/commands/how-to/manage-test-coverage.md +984 -0
- package/claude/commands/how-to/run-tests.md +400 -0
- package/claude/commands/how-to/set-app-languages.md +601 -0
- package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
- package/claude/commands/how-to/set-scheduled-actions.md +527 -0
- package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
- package/claude/commands/how-to/setup-authentication.md +388 -0
- package/claude/commands/how-to/setup-claude-code.md +440 -0
- package/claude/commands/how-to/setup-database.md +274 -0
- package/claude/commands/how-to/setup-email-providers.md +598 -0
- package/claude/commands/how-to/setup-mobile-dev.md +627 -0
- package/claude/commands/how-to/start.md +500 -0
- package/claude/commands/how-to/use-devtools.md +639 -0
- package/claude/commands/how-to/use-superadmin.md +622 -0
- package/claude/commands/session/README.md +193 -0
- package/claude/commands/session/block-create.md +190 -0
- package/claude/commands/session/block-list.md +203 -0
- package/claude/commands/session/block-update.md +192 -0
- package/claude/commands/session/block-validate.md +218 -0
- package/claude/commands/session/changelog.md +115 -0
- package/claude/commands/session/close.md +225 -0
- package/claude/commands/session/commit.md +174 -0
- package/claude/commands/session/db-entity.md +206 -0
- package/claude/commands/session/db-fix.md +212 -0
- package/claude/commands/session/db-sample.md +206 -0
- package/claude/commands/session/demo.md +178 -0
- package/claude/commands/session/doc-bdd.md +207 -0
- package/claude/commands/session/doc-feature.md +218 -0
- package/claude/commands/session/doc-read.md +225 -0
- package/claude/commands/session/execute.md +204 -0
- package/claude/commands/session/explain.md +202 -0
- package/claude/commands/session/fix-bug.md +210 -0
- package/claude/commands/session/fix-build.md +182 -0
- package/claude/commands/session/fix-test.md +189 -0
- package/claude/commands/session/pending.md +232 -0
- package/claude/commands/session/refine.md +188 -0
- package/claude/commands/session/resume.md +192 -0
- package/claude/commands/session/review.md +192 -0
- package/claude/commands/session/scope-change.md +181 -0
- package/claude/commands/session/start-blocks.md +347 -0
- package/claude/commands/session/start.md +604 -0
- package/claude/commands/session/status.md +169 -0
- package/claude/commands/session/test-fix.md +221 -0
- package/claude/commands/session/test-run.md +203 -0
- package/claude/commands/session/test-write.md +242 -0
- package/claude/commands/session/validate.md +162 -0
- package/claude/config/context.json +40 -0
- package/claude/config/github.json +69 -0
- package/claude/config/github.schema.json +106 -0
- package/claude/config/team.json +46 -0
- package/claude/config/team.schema.json +106 -0
- package/claude/config/workspace.json +43 -0
- package/claude/config/workspace.schema.json +75 -0
- package/claude/skills/README.md +228 -0
- package/claude/skills/accessibility/SKILL.md +573 -0
- package/claude/skills/api-bypass-layers/SKILL.md +550 -0
- package/claude/skills/asana-integration/SKILL.md +499 -0
- package/claude/skills/better-auth/SKILL.md +666 -0
- package/claude/skills/billing-subscriptions/SKILL.md +660 -0
- package/claude/skills/block-decision-matrix/SKILL.md +359 -0
- package/claude/skills/clickup-integration/SKILL.md +434 -0
- package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
- package/claude/skills/create-plugin/SKILL.md +425 -0
- package/claude/skills/create-theme/SKILL.md +331 -0
- package/claude/skills/cypress-api/SKILL.md +511 -0
- package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
- package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
- package/claude/skills/cypress-e2e/SKILL.md +526 -0
- package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
- package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
- package/claude/skills/cypress-selectors/SKILL.md +309 -0
- package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
- package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
- package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
- package/claude/skills/database-migrations/SKILL.md +335 -0
- package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
- package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
- package/claude/skills/design-system/SKILL.md +682 -0
- package/claude/skills/documentation/SKILL.md +540 -0
- package/claude/skills/entity-api/SKILL.md +482 -0
- package/claude/skills/entity-system/SKILL.md +635 -0
- package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
- package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
- package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
- package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
- package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
- package/claude/skills/github/SKILL.md +467 -0
- package/claude/skills/i18n-nextintl/SKILL.md +302 -0
- package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
- package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
- package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
- package/claude/skills/impact-analysis/SKILL.md +203 -0
- package/claude/skills/jest-unit/SKILL.md +306 -0
- package/claude/skills/jest-unit/references/component-testing.md +371 -0
- package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
- package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
- package/claude/skills/jira-integration/SKILL.md +539 -0
- package/claude/skills/media-library/SKILL.md +743 -0
- package/claude/skills/mock-analysis/SKILL.md +276 -0
- package/claude/skills/monorepo-architecture/SKILL.md +162 -0
- package/claude/skills/nextjs-api-development/SKILL.md +364 -0
- package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
- package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
- package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
- package/claude/skills/notion-integration/SKILL.md +641 -0
- package/claude/skills/npm-development-workflow/SKILL.md +480 -0
- package/claude/skills/page-builder-blocks/SKILL.md +530 -0
- package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
- package/claude/skills/permissions-system/SKILL.md +619 -0
- package/claude/skills/plugins/SKILL.md +340 -0
- package/claude/skills/plugins/references/plugin-templates.md +414 -0
- package/claude/skills/plugins/references/plugin-testing.md +353 -0
- package/claude/skills/plugins/references/plugin-types.md +198 -0
- package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
- package/claude/skills/pom-patterns/SKILL.md +452 -0
- package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
- package/claude/skills/rate-limiting/SKILL.md +342 -0
- package/claude/skills/react-best-practices/AGENTS.md +2410 -0
- package/claude/skills/react-best-practices/README.md +123 -0
- package/claude/skills/react-best-practices/SKILL.md +125 -0
- package/claude/skills/react-best-practices/metadata.json +15 -0
- package/claude/skills/react-best-practices/rules/_sections.md +46 -0
- package/claude/skills/react-best-practices/rules/_template.md +28 -0
- package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/claude/skills/react-patterns/SKILL.md +688 -0
- package/claude/skills/registry-system/SKILL.md +331 -0
- package/claude/skills/scheduled-actions/SKILL.md +671 -0
- package/claude/skills/scope-enforcement/SKILL.md +542 -0
- package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
- package/claude/skills/server-actions/SKILL.md +493 -0
- package/claude/skills/service-layer/SKILL.md +587 -0
- package/claude/skills/session-management/SKILL.md +266 -0
- package/claude/skills/session-management/scripts/create-session.py +166 -0
- package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
- package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
- package/claude/skills/session-management/scripts/session-archive.sh +87 -0
- package/claude/skills/session-management/scripts/session-close.sh +133 -0
- package/claude/skills/session-management/scripts/session-init.sh +225 -0
- package/claude/skills/session-management/scripts/session-list.sh +163 -0
- package/claude/skills/session-management/scripts/split-plan.sh +116 -0
- package/claude/skills/shadcn-components/SKILL.md +586 -0
- package/claude/skills/shadcn-theming/SKILL.md +446 -0
- package/claude/skills/suspense-loading/SKILL.md +280 -0
- package/claude/skills/tailwind-theming/SKILL.md +507 -0
- package/claude/skills/tanstack-query/SKILL.md +608 -0
- package/claude/skills/test-coverage/SKILL.md +239 -0
- package/claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/claude/skills/zod-validation/SKILL.md +537 -0
- package/claude/templates/blocks/progress.md +86 -0
- package/claude/templates/iteration/changes.md +61 -0
- package/claude/templates/iteration/progress.md +55 -0
- package/claude/templates/log.md +31 -0
- package/claude/templates/story/context.md +77 -0
- package/claude/templates/story/pendings.md +37 -0
- package/claude/templates/story/plan.md +299 -0
- package/claude/templates/story/requirements.md +109 -0
- package/claude/templates/story/scope.json +10 -0
- package/claude/templates/story/tests.md +91 -0
- package/claude/templates/task/progress.md +58 -0
- package/claude/templates/task/requirements.md +54 -0
- package/claude/workflows/README.md +154 -0
- package/claude/workflows/blocks.md +614 -0
- package/claude/workflows/story.md +1207 -0
- package/claude/workflows/task.md +927 -0
- package/claude/workflows/tweak.md +527 -0
- package/cursor/.gitkeep +0 -0
- package/package.json +35 -0
- package/scripts/postinstall.mjs +198 -0
- package/scripts/setup.mjs +282 -0
- package/scripts/sync.mjs +209 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Session Management Skill
|
|
2
|
+
|
|
3
|
+
Sistema de gestión de sesiones de desarrollo para Claude Code.
|
|
4
|
+
|
|
5
|
+
## Conceptos Clave
|
|
6
|
+
|
|
7
|
+
### Tipos de Sesión
|
|
8
|
+
|
|
9
|
+
| Tipo | T-Shirt | Workflow | Carpeta | Descripción |
|
|
10
|
+
|------|---------|----------|---------|-------------|
|
|
11
|
+
| **Story** | L - XL | COMPLETE | `stories/` | Features complejos, múltiples iteraciones |
|
|
12
|
+
| **Task** | S - M | STANDARD | `tasks/` | Mejoras, bugs medianos |
|
|
13
|
+
| **Log** | XS | QUICK | `logs/` | Fixes rápidos, cambios triviales |
|
|
14
|
+
|
|
15
|
+
### Estructura de Carpetas
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
.claude/sessions/
|
|
19
|
+
├── scripts/ # Scripts de gestión
|
|
20
|
+
├── templates/ # Templates por tipo
|
|
21
|
+
│ ├── story/
|
|
22
|
+
│ ├── task/
|
|
23
|
+
│ ├── iteration/
|
|
24
|
+
│ └── log.md
|
|
25
|
+
├── stories/ # Sesiones COMPLETE
|
|
26
|
+
├── tasks/ # Sesiones STANDARD
|
|
27
|
+
├── logs/ # Sesiones QUICK
|
|
28
|
+
└── archive/ # Sesiones completadas
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Scripts Disponibles
|
|
34
|
+
|
|
35
|
+
### session-init.sh
|
|
36
|
+
|
|
37
|
+
Crea una nueva sesión con toda su estructura.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Sintaxis
|
|
41
|
+
.claude/skills/session-management/scripts/session-init.sh <type> <name> [tshirt]
|
|
42
|
+
|
|
43
|
+
# Parámetros
|
|
44
|
+
# type: story | task | log
|
|
45
|
+
# name: nombre descriptivo (sin fecha, se agrega auto)
|
|
46
|
+
# tshirt: xs | s | m | l | xl (opcional, default según type)
|
|
47
|
+
|
|
48
|
+
# Ejemplos
|
|
49
|
+
.claude/skills/session-management/scripts/session-init.sh story new-products-entity L
|
|
50
|
+
.claude/skills/session-management/scripts/session-init.sh task improve-search M
|
|
51
|
+
.claude/skills/session-management/scripts/session-init.sh log fix-typo
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Output:**
|
|
55
|
+
```
|
|
56
|
+
Creating story session: 2026-01-11-new-products-entity
|
|
57
|
+
|
|
58
|
+
Created: stories/2026-01-11-new-products-entity/
|
|
59
|
+
Files: context.md, requirements.md, plan.md, scope.json, pendings.md, tests.md
|
|
60
|
+
Iteration: iterations/01-initial/
|
|
61
|
+
Current: current/ -> iterations/01-initial/
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### session-list.sh
|
|
65
|
+
|
|
66
|
+
Lista sesiones activas con su estado.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Sintaxis
|
|
70
|
+
.claude/skills/session-management/scripts/session-list.sh [type] [--all]
|
|
71
|
+
|
|
72
|
+
# Ejemplos
|
|
73
|
+
.claude/skills/session-management/scripts/session-list.sh # Solo activas
|
|
74
|
+
.claude/skills/session-management/scripts/session-list.sh stories # Solo stories activas
|
|
75
|
+
.claude/skills/session-management/scripts/session-list.sh --all # Incluir archivadas
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Output:**
|
|
79
|
+
```
|
|
80
|
+
=== SESSION LIST ===
|
|
81
|
+
|
|
82
|
+
STORIES
|
|
83
|
+
2026-01-11-new-products-entity [L] iteration-02 (60%)
|
|
84
|
+
2026-01-08-refactor-auth [XL] iteration-01 (30%)
|
|
85
|
+
Total: 2 active
|
|
86
|
+
|
|
87
|
+
TASKS
|
|
88
|
+
2026-01-10-improve-search [M] (80%)
|
|
89
|
+
Total: 1 active
|
|
90
|
+
|
|
91
|
+
LOGS
|
|
92
|
+
2026-01-11-fix-typo-login
|
|
93
|
+
Total: 1 active
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### session-close.sh
|
|
97
|
+
|
|
98
|
+
Cierra una sesión activa (marca como completada).
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Sintaxis
|
|
102
|
+
.claude/skills/session-management/scripts/session-close.sh <session-path> [summary]
|
|
103
|
+
|
|
104
|
+
# Ejemplo
|
|
105
|
+
.claude/skills/session-management/scripts/session-close.sh stories/2026-01-11-new-products-entity "Feature completed"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### session-archive.sh
|
|
109
|
+
|
|
110
|
+
Mueve una sesión cerrada al archivo.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Sintaxis
|
|
114
|
+
.claude/skills/session-management/scripts/session-archive.sh <session-path>
|
|
115
|
+
|
|
116
|
+
# Ejemplo
|
|
117
|
+
.claude/skills/session-management/scripts/session-archive.sh stories/2026-01-11-new-products-entity
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### iteration-init.sh
|
|
121
|
+
|
|
122
|
+
Crea una nueva iteración dentro de una story.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Sintaxis
|
|
126
|
+
.claude/skills/session-management/scripts/iteration-init.sh <session-path> <reason> [name]
|
|
127
|
+
|
|
128
|
+
# Parámetros
|
|
129
|
+
# reason: scope-change | blocked | review-feedback | continuation
|
|
130
|
+
|
|
131
|
+
# Ejemplo
|
|
132
|
+
.claude/skills/session-management/scripts/iteration-init.sh stories/2026-01-11-new-products-entity scope-change "add-variants"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### iteration-close.sh
|
|
136
|
+
|
|
137
|
+
Cierra la iteración actual sin crear una nueva.
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Sintaxis
|
|
141
|
+
.claude/skills/session-management/scripts/iteration-close.sh <session-path> <status> [summary]
|
|
142
|
+
|
|
143
|
+
# Parámetros
|
|
144
|
+
# status: completed | blocked | paused
|
|
145
|
+
|
|
146
|
+
# Ejemplo
|
|
147
|
+
.claude/skills/session-management/scripts/iteration-close.sh stories/2026-01-11-new-products-entity completed "All ACs met"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Flujos de Uso
|
|
153
|
+
|
|
154
|
+
### Iniciar Nueva Sesión
|
|
155
|
+
|
|
156
|
+
1. **Evaluar complejidad** (T-Shirt sizing)
|
|
157
|
+
2. **Determinar tipo** de sesión:
|
|
158
|
+
- XS → `log`
|
|
159
|
+
- S-M → `task`
|
|
160
|
+
- L-XL → `story`
|
|
161
|
+
3. **Ejecutar script**:
|
|
162
|
+
```bash
|
|
163
|
+
./session-init.sh <type> <name> <tshirt>
|
|
164
|
+
```
|
|
165
|
+
4. **Completar templates** generados
|
|
166
|
+
|
|
167
|
+
### Retomar Sesión Existente
|
|
168
|
+
|
|
169
|
+
1. **Listar sesiones**:
|
|
170
|
+
```bash
|
|
171
|
+
./session-list.sh
|
|
172
|
+
```
|
|
173
|
+
2. **Leer archivos de la sesión**:
|
|
174
|
+
- `context.md` → Contexto general
|
|
175
|
+
- `requirements.md` → Qué hay que hacer
|
|
176
|
+
- `plan.md` → Cómo hacerlo
|
|
177
|
+
- `current/progress.md` → Estado actual
|
|
178
|
+
3. **Continuar desarrollo**
|
|
179
|
+
|
|
180
|
+
### Cambio de Scope
|
|
181
|
+
|
|
182
|
+
Cuando el alcance cambia significativamente:
|
|
183
|
+
|
|
184
|
+
1. **Crear nueva iteración**:
|
|
185
|
+
```bash
|
|
186
|
+
./iteration-init.sh <session> scope-change "descripción"
|
|
187
|
+
```
|
|
188
|
+
2. **Actualizar** `requirements.md` o `plan.md`
|
|
189
|
+
3. **Continuar** desde nueva iteración
|
|
190
|
+
|
|
191
|
+
### Cerrar Sesión
|
|
192
|
+
|
|
193
|
+
1. **Verificar** que todos los ACs están cumplidos
|
|
194
|
+
2. **Cerrar sesión**:
|
|
195
|
+
```bash
|
|
196
|
+
./session-close.sh <session> "summary"
|
|
197
|
+
```
|
|
198
|
+
3. **Archivar** (opcional):
|
|
199
|
+
```bash
|
|
200
|
+
./session-archive.sh <session>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Templates
|
|
206
|
+
|
|
207
|
+
### Story (COMPLETE)
|
|
208
|
+
|
|
209
|
+
| Archivo | Propósito | Cambia entre iteraciones? |
|
|
210
|
+
|---------|-----------|---------------------------|
|
|
211
|
+
| `context.md` | Info permanente del proyecto | No |
|
|
212
|
+
| `requirements.md` | ACs, user stories | Sí (git history) |
|
|
213
|
+
| `plan.md` | Plan técnico | Sí (git history) |
|
|
214
|
+
| `scope.json` | Paths permitidos | Sí |
|
|
215
|
+
| `pendings.md` | Pendientes globales | Sí (acumulativo) |
|
|
216
|
+
| `tests.md` | Selectores, traducciones | Sí (acumulativo) |
|
|
217
|
+
|
|
218
|
+
### Task (STANDARD)
|
|
219
|
+
|
|
220
|
+
| Archivo | Propósito |
|
|
221
|
+
|---------|-----------|
|
|
222
|
+
| `requirements.md` | Objetivo y ACs |
|
|
223
|
+
| `progress.md` | Estado actual |
|
|
224
|
+
|
|
225
|
+
### Log (QUICK)
|
|
226
|
+
|
|
227
|
+
| Archivo | Propósito |
|
|
228
|
+
|---------|-----------|
|
|
229
|
+
| `{date}-{name}.md` | Registro del fix |
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Placeholders en Templates
|
|
234
|
+
|
|
235
|
+
| Placeholder | Descripción | Ejemplo |
|
|
236
|
+
|-------------|-------------|---------|
|
|
237
|
+
| `{{SESSION_NAME}}` | Nombre sin fecha | new-products-entity |
|
|
238
|
+
| `{{SESSION_FULL}}` | Nombre completo | 2026-01-11-new-products-entity |
|
|
239
|
+
| `{{DATE}}` | Fecha de creación | 2026-01-11 |
|
|
240
|
+
| `{{TSHIRT}}` | T-Shirt size | L |
|
|
241
|
+
| `{{ITERATION}}` | Número de iteración | 01 |
|
|
242
|
+
| `{{ITERATION_NAME}}` | Nombre de iteración | initial |
|
|
243
|
+
| `{{CLICKUP_URL}}` | URL de tarea (manual) | - |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Integración con Comandos
|
|
248
|
+
|
|
249
|
+
Esta skill es utilizada por los comandos `/session:*`:
|
|
250
|
+
|
|
251
|
+
- `/session:start` → Usa `session-init.sh`
|
|
252
|
+
- `/session:resume` → Usa `session-list.sh` + lectura de archivos
|
|
253
|
+
- `/session:status` → Usa `session-list.sh`
|
|
254
|
+
- `/session:close` → Usa `session-close.sh`
|
|
255
|
+
- `/session:scope-change` → Usa `iteration-init.sh`
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Reducción de Tokens
|
|
260
|
+
|
|
261
|
+
| Operación | Sin Script | Con Script | Reducción |
|
|
262
|
+
|-----------|------------|------------|-----------|
|
|
263
|
+
| Crear story | ~2350 tokens | ~280 tokens | **88%** |
|
|
264
|
+
| Crear task | ~800 tokens | ~150 tokens | **81%** |
|
|
265
|
+
| Listar sesiones | ~500 tokens | ~100 tokens | **80%** |
|
|
266
|
+
| Nueva iteración | ~1200 tokens | ~200 tokens | **83%** |
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Create Session Script
|
|
4
|
+
|
|
5
|
+
Creates a new development session folder with all 8 template files.
|
|
6
|
+
Part of the session-management skill.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
python create-session.py --name "feature-name" [--version 1]
|
|
10
|
+
python create-session.py -n "user-authentication" -v 2
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import argparse
|
|
14
|
+
import os
|
|
15
|
+
import shutil
|
|
16
|
+
import sys
|
|
17
|
+
from datetime import datetime
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_project_root() -> Path:
|
|
22
|
+
"""Find the project root by looking for .claude directory."""
|
|
23
|
+
current = Path(__file__).resolve()
|
|
24
|
+
|
|
25
|
+
# Walk up the directory tree
|
|
26
|
+
for parent in current.parents:
|
|
27
|
+
if (parent / ".claude").is_dir():
|
|
28
|
+
return parent
|
|
29
|
+
|
|
30
|
+
# Fallback: check current working directory
|
|
31
|
+
cwd = Path.cwd()
|
|
32
|
+
if (cwd / ".claude").is_dir():
|
|
33
|
+
return cwd
|
|
34
|
+
|
|
35
|
+
print("Error: Could not find project root (.claude directory)")
|
|
36
|
+
sys.exit(1)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def validate_name(name: str) -> str:
|
|
40
|
+
"""Validate and normalize session name."""
|
|
41
|
+
# Convert to lowercase and replace spaces with hyphens
|
|
42
|
+
normalized = name.lower().strip().replace(" ", "-").replace("_", "-")
|
|
43
|
+
|
|
44
|
+
# Remove any characters that aren't alphanumeric or hyphens
|
|
45
|
+
cleaned = "".join(c for c in normalized if c.isalnum() or c == "-")
|
|
46
|
+
|
|
47
|
+
# Remove consecutive hyphens
|
|
48
|
+
while "--" in cleaned:
|
|
49
|
+
cleaned = cleaned.replace("--", "-")
|
|
50
|
+
|
|
51
|
+
# Remove leading/trailing hyphens
|
|
52
|
+
cleaned = cleaned.strip("-")
|
|
53
|
+
|
|
54
|
+
if not cleaned:
|
|
55
|
+
print("Error: Invalid session name. Must contain alphanumeric characters.")
|
|
56
|
+
sys.exit(1)
|
|
57
|
+
|
|
58
|
+
return cleaned
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def create_session(name: str, version: int = 1) -> None:
|
|
62
|
+
"""Create a new session folder with all template files."""
|
|
63
|
+
project_root = get_project_root()
|
|
64
|
+
templates_dir = project_root / ".claude" / "tools" / "sessions" / "templates"
|
|
65
|
+
sessions_dir = project_root / ".claude" / "sessions"
|
|
66
|
+
|
|
67
|
+
# Validate templates exist
|
|
68
|
+
if not templates_dir.is_dir():
|
|
69
|
+
print(f"Error: Templates directory not found: {templates_dir}")
|
|
70
|
+
sys.exit(1)
|
|
71
|
+
|
|
72
|
+
# Generate session name
|
|
73
|
+
date_str = datetime.now().strftime("%Y-%m-%d")
|
|
74
|
+
validated_name = validate_name(name)
|
|
75
|
+
session_name = f"{date_str}-{validated_name}-v{version}"
|
|
76
|
+
session_path = sessions_dir / session_name
|
|
77
|
+
|
|
78
|
+
# Check if session already exists
|
|
79
|
+
if session_path.exists():
|
|
80
|
+
print(f"Error: Session already exists: {session_path}")
|
|
81
|
+
print(f"Hint: Use --version {version + 1} to create a new version")
|
|
82
|
+
sys.exit(1)
|
|
83
|
+
|
|
84
|
+
# Create session directory
|
|
85
|
+
session_path.mkdir(parents=True, exist_ok=True)
|
|
86
|
+
print(f"Created session: {session_name}")
|
|
87
|
+
|
|
88
|
+
# Expected template files
|
|
89
|
+
template_files = [
|
|
90
|
+
"requirements.md",
|
|
91
|
+
"clickup_task.md",
|
|
92
|
+
"scope.json",
|
|
93
|
+
"plan.md",
|
|
94
|
+
"progress.md",
|
|
95
|
+
"context.md",
|
|
96
|
+
"tests.md",
|
|
97
|
+
"pendings.md",
|
|
98
|
+
]
|
|
99
|
+
|
|
100
|
+
# Copy templates
|
|
101
|
+
copied_count = 0
|
|
102
|
+
for template_file in template_files:
|
|
103
|
+
src = templates_dir / template_file
|
|
104
|
+
dst = session_path / template_file
|
|
105
|
+
|
|
106
|
+
if src.exists():
|
|
107
|
+
shutil.copy2(src, dst)
|
|
108
|
+
|
|
109
|
+
# Replace placeholders in the copied file
|
|
110
|
+
if dst.suffix in [".md", ".json"]:
|
|
111
|
+
content = dst.read_text()
|
|
112
|
+
content = content.replace("YYYY-MM-DD", date_str)
|
|
113
|
+
content = content.replace("[Feature Name]", name.title())
|
|
114
|
+
content = content.replace("feature-name", validated_name)
|
|
115
|
+
content = content.replace("feature-name-v1", session_name)
|
|
116
|
+
dst.write_text(content)
|
|
117
|
+
|
|
118
|
+
copied_count += 1
|
|
119
|
+
print(f" ✓ {template_file}")
|
|
120
|
+
else:
|
|
121
|
+
print(f" ✗ {template_file} (template not found)")
|
|
122
|
+
|
|
123
|
+
print(f"\nSession created with {copied_count}/{len(template_files)} files")
|
|
124
|
+
print(f"\nSession path: {session_path}")
|
|
125
|
+
print("\nNext steps:")
|
|
126
|
+
print(" 1. Edit requirements.md with business requirements")
|
|
127
|
+
print(" 2. Configure scope.json with file permissions")
|
|
128
|
+
print(" 3. Run /task:plan to create technical plan")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def main():
|
|
132
|
+
parser = argparse.ArgumentParser(
|
|
133
|
+
description="Create a new development session folder",
|
|
134
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
135
|
+
epilog="""
|
|
136
|
+
Examples:
|
|
137
|
+
python create-session.py --name "user-authentication"
|
|
138
|
+
python create-session.py -n "scheduled-actions" -v 2
|
|
139
|
+
python create-session.py --name "billing integration"
|
|
140
|
+
"""
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
parser.add_argument(
|
|
144
|
+
"-n", "--name",
|
|
145
|
+
required=True,
|
|
146
|
+
help="Session name (will be normalized to kebab-case)"
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
parser.add_argument(
|
|
150
|
+
"-v", "--version",
|
|
151
|
+
type=int,
|
|
152
|
+
default=1,
|
|
153
|
+
help="Session version number (default: 1)"
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
args = parser.parse_args()
|
|
157
|
+
|
|
158
|
+
if args.version < 1:
|
|
159
|
+
print("Error: Version must be a positive integer")
|
|
160
|
+
sys.exit(1)
|
|
161
|
+
|
|
162
|
+
create_session(args.name, args.version)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
if __name__ == "__main__":
|
|
166
|
+
main()
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# iteration-close.sh - Close the current iteration without creating a new one
|
|
4
|
+
#
|
|
5
|
+
# Usage: iteration-close.sh <session-path> <status> [summary]
|
|
6
|
+
# session-path: path to story (e.g., stories/2026-01-11-new-entity)
|
|
7
|
+
# status: completed | blocked | paused
|
|
8
|
+
# summary: optional summary message
|
|
9
|
+
#
|
|
10
|
+
# Examples:
|
|
11
|
+
# ./iteration-close.sh stories/2026-01-11-new-products-entity completed
|
|
12
|
+
# ./iteration-close.sh stories/2026-01-11-new-products-entity blocked "Waiting for API"
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
set -e
|
|
16
|
+
|
|
17
|
+
# Colors
|
|
18
|
+
RED='\033[0;31m'
|
|
19
|
+
GREEN='\033[0;32m'
|
|
20
|
+
YELLOW='\033[1;33m'
|
|
21
|
+
BLUE='\033[0;34m'
|
|
22
|
+
NC='\033[0m'
|
|
23
|
+
|
|
24
|
+
# Get script directory
|
|
25
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
|
+
SESSIONS_DIR="$(dirname "$SCRIPT_DIR")"
|
|
27
|
+
|
|
28
|
+
# Parse arguments
|
|
29
|
+
SESSION_PATH="$1"
|
|
30
|
+
STATUS="$2"
|
|
31
|
+
SUMMARY="${3:-Iteration closed}"
|
|
32
|
+
|
|
33
|
+
# Validate session path
|
|
34
|
+
if [[ -z "$SESSION_PATH" ]]; then
|
|
35
|
+
echo -e "${RED}Error: Session path is required${NC}"
|
|
36
|
+
echo "Usage: $0 <session-path> <status> [summary]"
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Validate status
|
|
41
|
+
if [[ ! "$STATUS" =~ ^(completed|blocked|paused)$ ]]; then
|
|
42
|
+
echo -e "${RED}Error: Invalid status '$STATUS'${NC}"
|
|
43
|
+
echo "Valid statuses: completed, blocked, paused"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Resolve full path
|
|
48
|
+
if [[ "$SESSION_PATH" != /* ]]; then
|
|
49
|
+
FULL_PATH="$SESSIONS_DIR/$SESSION_PATH"
|
|
50
|
+
else
|
|
51
|
+
FULL_PATH="$SESSION_PATH"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Check if session exists
|
|
55
|
+
if [[ ! -d "$FULL_PATH" ]]; then
|
|
56
|
+
echo -e "${RED}Error: Session not found: $FULL_PATH${NC}"
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Verify it's a story (has iterations folder)
|
|
61
|
+
if [[ ! -d "$FULL_PATH/iterations" ]]; then
|
|
62
|
+
echo -e "${RED}Error: Not a story session (no iterations folder)${NC}"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
CURRENT_DIR="$FULL_PATH/current"
|
|
67
|
+
CLOSED_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
68
|
+
|
|
69
|
+
# Find current iteration
|
|
70
|
+
CURRENT_PROGRESS=$(readlink "$CURRENT_DIR/progress.md" 2>/dev/null || echo "")
|
|
71
|
+
if [[ -z "$CURRENT_PROGRESS" ]]; then
|
|
72
|
+
echo -e "${RED}Error: No active iteration found${NC}"
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
ITERATION_DIR=$(dirname "$CURRENT_PROGRESS")
|
|
77
|
+
ITERATION_DIR=$(cd "$CURRENT_DIR" && cd "$ITERATION_DIR" && pwd)
|
|
78
|
+
ITERATION_NAME=$(basename "$ITERATION_DIR")
|
|
79
|
+
|
|
80
|
+
echo -e "${BLUE}Closing iteration: $ITERATION_NAME${NC}"
|
|
81
|
+
echo ""
|
|
82
|
+
|
|
83
|
+
# Create closed.json
|
|
84
|
+
cat > "$ITERATION_DIR/closed.json" << EOF
|
|
85
|
+
{
|
|
86
|
+
"iteration": "$ITERATION_NAME",
|
|
87
|
+
"status": "$STATUS",
|
|
88
|
+
"closedAt": "$CLOSED_AT",
|
|
89
|
+
"closedBy": "claude",
|
|
90
|
+
"summary": "$SUMMARY"
|
|
91
|
+
}
|
|
92
|
+
EOF
|
|
93
|
+
|
|
94
|
+
echo -e "${GREEN}Iteration closed: $ITERATION_NAME${NC}"
|
|
95
|
+
echo -e "${GREEN}Status: $STATUS${NC}"
|
|
96
|
+
echo -e "${GREEN}Created: closed.json${NC}"
|
|
97
|
+
echo ""
|
|
98
|
+
|
|
99
|
+
if [[ "$STATUS" == "blocked" ]]; then
|
|
100
|
+
echo -e "${YELLOW}Note: Iteration is blocked. Use iteration-init.sh when ready to continue.${NC}"
|
|
101
|
+
elif [[ "$STATUS" == "paused" ]]; then
|
|
102
|
+
echo -e "${YELLOW}Note: Iteration is paused. Use iteration-init.sh with 'continuation' reason to resume.${NC}"
|
|
103
|
+
else
|
|
104
|
+
echo -e "${BLUE}Session can now be archived with session-archive.sh${NC}"
|
|
105
|
+
fi
|