@dforce2055/dai 0.7.0 → 0.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/.env.example +9 -3
- package/CHANGELOG.md +65 -0
- package/README.md +12 -6
- package/VERSION +1 -1
- package/cli/dai.mjs +127 -49
- package/cli/lib/args.mjs +13 -2
- package/cli/lib/bootstrap.mjs +69 -19
- package/cli/lib/http.mjs +61 -0
- package/cli/lib/jira-fields.mjs +143 -0
- package/cli/lib/pm-jira.mjs +52 -12
- package/docs/adr/0014-copilot-agent-skills.md +99 -0
- package/docs/adr/0015-jira-corporativo.md +104 -0
- package/docs/adr/README.md +4 -0
- package/package.json +1 -1
- package/skills/dai-review/SKILL.md +1 -1
- package/skills/doc-to-backlog/SKILL.md +1 -1
- package/skills/grill-epic/SKILL.md +13 -5
- package/skills/grill-intent/SKILL.md +1 -1
- package/skills/grill-user-story/SKILL.md +16 -3
- package/skills/link-us/SKILL.md +1 -1
- package/skills/tdd/SKILL.md +1 -1
- package/templates/jira-fields.example.json +49 -0
- package/templates/skill.md +8 -4
package/skills/tdd/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tdd
|
|
3
|
-
description: Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions "red-green-refactor", wants integration tests, or asks for test-first development.
|
|
3
|
+
description: "Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions \"red-green-refactor\", wants integration tests, or asks for test-first development."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Test-Driven Development
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comentario": [
|
|
3
|
+
"Molde de .dai/jira-fields.json — los campos PROPIOS que tu Jira exige al crear un issue.",
|
|
4
|
+
"Copialo a .dai/jira-fields.json y ajustalo. Si tu Jira no exige campos propios, no lo",
|
|
5
|
+
"necesitás: sin archivo, dai publica igual que siempre (ADR-0015).",
|
|
6
|
+
"",
|
|
7
|
+
"Se declara por issuetype porque los campos obligatorios de una Story y de una Epic casi",
|
|
8
|
+
"nunca son los mismos. Un campo declarado TIENE que resolver a un valor (por 'default' o",
|
|
9
|
+
"por --field): se declara porque Jira lo exige. Si es opcional, no lo declares.",
|
|
10
|
+
"",
|
|
11
|
+
" field el id de Jira (requerido). Lo ves en la URL al editar el campo, o te lo dice",
|
|
12
|
+
" el error 400 de Jira cuando falta.",
|
|
13
|
+
" shape cómo se envuelve el valor para la API:",
|
|
14
|
+
" select → {\"value\": X} un desplegable (el caso típico)",
|
|
15
|
+
" text → X texto plano",
|
|
16
|
+
" multi → [{\"value\": X}] lista (el valor se parte por comas)",
|
|
17
|
+
" raw → JSON tal cual escape hatch para cualquier forma rara",
|
|
18
|
+
" Si lo omitís: con 'options' es select; sin 'options', text.",
|
|
19
|
+
" default el valor si no pasás --field. Omitilo cuando el valor cambia SIEMPRE según",
|
|
20
|
+
" la US: así dai te lo pide en vez de inventar uno.",
|
|
21
|
+
" options los valores válidos. dai los valida ANTES de llamar a Jira: un typo da un",
|
|
22
|
+
" error local con la lista, no un 400 críptico.",
|
|
23
|
+
"",
|
|
24
|
+
"Uso:",
|
|
25
|
+
" dai publish us.md (usa los defaults)",
|
|
26
|
+
" dai publish us.md --field clasificacion=Corrección",
|
|
27
|
+
" dai publish us.md --parent PROJ-42 (la cuelga de su épica)",
|
|
28
|
+
" dai publish epica.md --issuetype Epic --field clasificacion=Mejora",
|
|
29
|
+
"",
|
|
30
|
+
"Verificá que parsee con: dai doctor"
|
|
31
|
+
],
|
|
32
|
+
|
|
33
|
+
"Story": {
|
|
34
|
+
"clasificacion": {
|
|
35
|
+
"field": "customfield_10042",
|
|
36
|
+
"shape": "select",
|
|
37
|
+
"default": "Mejora",
|
|
38
|
+
"options": ["Mejora", "Corrección"]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
"Epic": {
|
|
43
|
+
"clasificacion": {
|
|
44
|
+
"field": "customfield_10042",
|
|
45
|
+
"shape": "select",
|
|
46
|
+
"options": ["Mejora", "Corrección"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
package/templates/skill.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
MOLDE DE SKILL · dai
|
|
3
3
|
─────────────────────────────────────────────────────────────────
|
|
4
|
-
Formato: Agent Skills
|
|
5
|
-
|
|
6
|
-
`dai skills install --from <repo|path>` (ADR-0013).
|
|
4
|
+
Formato: Agent Skills (SKILL.md) — un estándar abierto que leen Claude, Copilot y
|
|
5
|
+
Cursor. dai lo INGIERE y lo distribuye a los 3 (Claude y Copilot copia cruda · Cursor
|
|
6
|
+
`skillToCursor`), con `dai skills install --from <repo|path>` (ADR-0013 · ADR-0014).
|
|
7
7
|
|
|
8
8
|
Estructura del repo/dir fuente:
|
|
9
9
|
skills/
|
|
@@ -15,13 +15,17 @@
|
|
|
15
15
|
- frontmatter con `name` y `description` (ambos obligatorios, en una línea).
|
|
16
16
|
- `name`: slug en kebab-case, IGUAL al nombre del directorio.
|
|
17
17
|
- `description`: una frase — con esto el agente decide CUÁNDO usar la skill.
|
|
18
|
+
- ambos, YAML VÁLIDO. Ojo: los asistentes parsean el frontmatter con YAML de
|
|
19
|
+
verdad, y un `: ` (dos puntos + espacio) suelto en la descripción hace que YAML
|
|
20
|
+
la lea como un mapa y DESCARTE LA SKILL ENTERA. Por eso la descripción va
|
|
21
|
+
SIEMPRE entre comillas dobles: te deja escribir la frase que quieras.
|
|
18
22
|
|
|
19
23
|
dai NO valida el CONTENIDO (qué dice la skill, qué hacen sus scripts): eso es
|
|
20
24
|
criterio del equipo. Las instalás bajo tu propio riesgo.
|
|
21
25
|
-->
|
|
22
26
|
---
|
|
23
27
|
name: mi-skill
|
|
24
|
-
description: Qué hace la skill y cuándo conviene invocarla
|
|
28
|
+
description: "Qué hace la skill y cuándo conviene invocarla: concreto y orientado al disparador. Las comillas dobles no son decorativas — sin ellas, un ': ' rompe el YAML."
|
|
25
29
|
---
|
|
26
30
|
|
|
27
31
|
# <Título de la skill>
|