claude-code-arcane 2.9.8 → 2.9.9
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/CHANGELOG.md +14 -0
- package/agents/business/business-ops-lead.md +1 -14
- package/agents/game/gameplay-programmer.md +3 -4
- package/agents/game/technical-artist.md +3 -4
- package/dist/cli.js +41 -6
- package/docs/USER-GUIDE.md +1 -1
- package/docs/coordination-rules.md +1 -1
- package/docs/directory-structure.md +93 -122
- package/package.json +1 -1
- package/profiles/backend-go.yaml +1 -0
- package/rules/gamedev/engine-code.md +1 -1
- package/rules/gamedev/shader-code.md +1 -2
- package/rules/gamedev/vn-code.md +3 -2
- package/rules/implementation-workflow.md +1 -1
- package/rules/{ai-code.md → llm-code.md} +5 -5
- package/skills/agent-designer/README.md +2 -1
- package/skills/agent-designer/agent_evaluator.py +0 -5
- package/skills/ai-sdk-setup/SKILL.md +4 -4
- package/skills/architecture-decision/SKILL.md +3 -4
- package/skills/architecture-review/SKILL.md +1 -1
- package/skills/asset-audit/SKILL.md +0 -1
- package/skills/balance-check/SKILL.md +1 -1
- package/skills/brainstorm/SKILL.md +3 -3
- package/skills/brainstorm/references/next-steps-pipeline.md +8 -9
- package/skills/consistency-check/SKILL.md +2 -2
- package/skills/design-system/SKILL.md +1 -1
- package/skills/design-system/references/post-design-validation.md +2 -3
- package/skills/frontend-dev/SKILL.md +27 -28
- package/skills/frontend-dev/references/asset-prompt-guide.md +1 -1
- package/skills/frontend-dev/references/motion-recipes.md +1 -1
- package/skills/help/SKILL.md +1 -2
- package/skills/hotfix/SKILL.md +2 -2
- package/skills/milestone-review/SKILL.md +1 -1
- package/skills/patch-notes/SKILL.md +1 -1
- package/skills/playtest-report/SKILL.md +2 -3
- package/skills/playwright-pro/CLAUDE.md +2 -2
- package/skills/playwright-pro/SKILL.md +13 -9
- package/skills/playwright-pro/agents/migration-planner.md +2 -2
- package/skills/playwright-pro/agents/test-architect.md +1 -2
- package/skills/playwright-pro/agents/test-debugger.md +1 -1
- package/skills/playwright-pro/hooks/detect-playwright.sh +1 -1
- package/skills/playwright-pro/skills/browserstack/SKILL.md +5 -5
- package/skills/playwright-pro/skills/migrate/SKILL.md +1 -1
- package/skills/playwright-pro/skills/report/SKILL.md +2 -2
- package/skills/playwright-pro/skills/testrail/SKILL.md +5 -5
- package/skills/playwright-pro/templates/README.md +2 -2
- package/skills/prototype/SKILL.md +1 -1
- package/skills/quick-design/SKILL.md +1 -1
- package/skills/release-checklist/SKILL.md +0 -1
- package/skills/security-audit/SKILL.md +1 -1
- package/skills/self-improving-agent/CLAUDE.md +12 -12
- package/skills/self-improving-agent/SKILL.md +16 -12
- package/skills/self-improving-agent/agents/memory-analyst.md +1 -1
- package/skills/self-improving-agent/hooks/error-capture.sh +2 -2
- package/skills/self-improving-agent/reference/memory-architecture.md +2 -2
- package/skills/self-improving-agent/reference/promotion-rules.md +3 -3
- package/skills/self-improving-agent/reference/rules-directory-patterns.md +1 -1
- package/skills/self-improving-agent/settings.json +5 -5
- package/skills/self-improving-agent/skills/extract/SKILL.md +7 -7
- package/skills/self-improving-agent/skills/promote/SKILL.md +5 -5
- package/skills/self-improving-agent/skills/remember/SKILL.md +9 -9
- package/skills/self-improving-agent/skills/review/SKILL.md +7 -7
- package/skills/self-improving-agent/skills/status/SKILL.md +8 -8
- package/skills/senior-ml-engineer/references/llm_integration_guide.md +14 -31
- package/skills/senior-prompt-engineer/SKILL.md +10 -10
- package/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +1 -1
- package/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +43 -40
- package/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +23 -66
- package/skills/shader-dev/reference/fluid-simulation.md +4 -4
- package/skills/shader-dev/reference/simulation-physics.md +6 -6
- package/skills/shader-dev/reference/voxel-rendering.md +1 -1
- package/skills/shader-dev/techniques/ambient-occlusion.md +1 -1
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +2 -2
- package/skills/shader-dev/techniques/domain-warping.md +2 -2
- package/skills/shader-dev/techniques/fluid-simulation.md +45 -45
- package/skills/shader-dev/techniques/multipass-buffer.md +24 -24
- package/skills/shader-dev/techniques/normal-estimation.md +1 -1
- package/skills/shader-dev/techniques/particle-system.md +16 -16
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +1 -1
- package/skills/shader-dev/techniques/post-processing.md +7 -7
- package/skills/shader-dev/techniques/sdf-3d.md +1 -1
- package/skills/shader-dev/techniques/simulation-physics.md +24 -24
- package/skills/shader-dev/techniques/sound-synthesis.md +2 -2
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +1 -1
- package/skills/shader-dev/techniques/voxel-rendering.md +60 -60
- package/skills/smoke-check/SKILL.md +1 -1
- package/skills/sprint-plan/SKILL.md +1 -2
- package/skills/start/SKILL.md +7 -7
- package/skills/story-done/SKILL.md +1 -1
- package/skills/test-helpers/SKILL.md +7 -2
- package/skills/test-setup/SKILL.md +1 -1
- package/skills/ue-actor-component-architecture/SKILL.md +0 -1
- package/skills/ue-ai-navigation/SKILL.md +0 -1
- package/skills/ue-animation-system/SKILL.md +0 -1
- package/skills/ue-async-threading/SKILL.md +0 -1
- package/skills/ue-audio-system/SKILL.md +0 -1
- package/skills/ue-blueprints/SKILL.md +0 -1
- package/skills/ue-character-movement/SKILL.md +0 -1
- package/skills/ue-cpp-foundations/SKILL.md +0 -1
- package/skills/ue-data-assets-tables/SKILL.md +0 -1
- package/skills/ue-editor-tools/SKILL.md +0 -1
- package/skills/ue-game-features/SKILL.md +0 -1
- package/skills/ue-gameplay-abilities/SKILL.md +0 -1
- package/skills/ue-gameplay-framework/SKILL.md +0 -1
- package/skills/ue-input-system/SKILL.md +0 -1
- package/skills/ue-mass-entity/SKILL.md +0 -1
- package/skills/ue-materials-rendering/SKILL.md +0 -1
- package/skills/ue-module-build-system/SKILL.md +0 -1
- package/skills/ue-naming-conventions/SKILL.md +0 -1
- package/skills/ue-networking-replication/SKILL.md +0 -1
- package/skills/ue-niagara-effects/SKILL.md +0 -1
- package/skills/ue-packaging/SKILL.md +0 -1
- package/skills/ue-physics-collision/SKILL.md +0 -1
- package/skills/ue-procedural-generation/SKILL.md +0 -1
- package/skills/ue-project-context/SKILL.md +0 -1
- package/skills/ue-sequencer-cinematics/SKILL.md +0 -1
- package/skills/ue-serialization-savegames/SKILL.md +0 -1
- package/skills/ue-state-trees/SKILL.md +0 -1
- package/skills/ue-testing-debugging/SKILL.md +0 -1
- package/skills/ue-ui-umg-slate/SKILL.md +0 -1
- package/skills/ue-world-level-streaming/SKILL.md +0 -1
- package/skills/ux-review/SKILL.md +1 -1
- package/docs/RELEASE-SETUP.md +0 -99
- package/docs/presentations/arcane-overview-12.pptx +0 -0
- package/docs/presentations/arcane-overview.pptx +0 -0
- package/docs/presentations/build_arcane_deck.py +0 -310
- package/docs/presentations/build_arcane_deck_12.py +0 -399
- package/docs/trusted-publishing-setup.md +0 -163
|
@@ -383,7 +383,6 @@ Validate before considering the work done:
|
|
|
383
383
|
- [ ] Input Action value types match how the action is consumed
|
|
384
384
|
- [ ] No legacy `BindAction`/`BindAxis` or direct key polling remains
|
|
385
385
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
386
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
387
386
|
|
|
388
387
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
389
388
|
|
|
@@ -465,7 +465,6 @@ Validate before considering the work done:
|
|
|
465
465
|
- [ ] Processor execution order and dependencies are declared explicitly
|
|
466
466
|
- [ ] Mass is justified by entity count; a plain actor would not do
|
|
467
467
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
468
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
469
468
|
|
|
470
469
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
471
470
|
|
|
@@ -515,7 +515,6 @@ Validate before considering the work done:
|
|
|
515
515
|
- [ ] Instruction count and texture samplers stay within the platform budget
|
|
516
516
|
- [ ] Dynamic material instances are created once and cached, not per frame
|
|
517
517
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
518
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
519
518
|
|
|
520
519
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
521
520
|
|
|
@@ -476,7 +476,6 @@ Validate before considering the work done:
|
|
|
476
476
|
- [ ] Module type and loading phase are correct for what the module does
|
|
477
477
|
- [ ] The project still builds for every target platform it claims to support
|
|
478
478
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
479
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
480
479
|
|
|
481
480
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
482
481
|
|
|
@@ -130,7 +130,6 @@ Validate before considering the work done:
|
|
|
130
130
|
- [ ] Any rename ran with clean source control and a Fix Up Redirectors pass afterwards
|
|
131
131
|
- [ ] The agreed convention is written into `docs/unreal/project-context.md`
|
|
132
132
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
133
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
134
133
|
|
|
135
134
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks asset references or leaves the project inconsistent; fix it before handing the work over.
|
|
136
135
|
|
|
@@ -440,7 +440,6 @@ Validate before considering the work done:
|
|
|
440
440
|
- [ ] Server RPCs validate all client input; nothing trusts the client
|
|
441
441
|
- [ ] Replication conditions and update frequency were set per property, not left default
|
|
442
442
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
443
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
444
443
|
|
|
445
444
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
446
445
|
|
|
@@ -520,7 +520,6 @@ Validate before considering the work done:
|
|
|
520
520
|
- [ ] GPU simulation is used where the effect is heavy and does not need CPU readback
|
|
521
521
|
- [ ] Effects are pooled or auto-destroyed rather than leaking components
|
|
522
522
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
523
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
524
523
|
|
|
525
524
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
526
525
|
|
|
@@ -104,7 +104,6 @@ Validate before considering the work done:
|
|
|
104
104
|
- [ ] The packaged executable was launched and verified, not just cooked successfully
|
|
105
105
|
- [ ] No credentials or internal config were staged into the build
|
|
106
106
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
107
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
108
107
|
|
|
109
108
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that produces a broken or unshippable build; fix it before handing the work over.
|
|
110
109
|
|
|
@@ -412,7 +412,6 @@ Validate before considering the work done:
|
|
|
412
412
|
- [ ] Traces use the narrowest channel and shape that answers the question
|
|
413
413
|
- [ ] Complex collision is avoided on anything queried frequently
|
|
414
414
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
415
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
416
415
|
|
|
417
416
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
418
417
|
|
|
@@ -494,7 +494,6 @@ Validate before considering the work done:
|
|
|
494
494
|
- [ ] Instanced meshes are used for repeated geometry rather than individual actors
|
|
495
495
|
- [ ] Runtime generation is budgeted and spread across frames
|
|
496
496
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
497
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
498
497
|
|
|
499
498
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
500
499
|
|
|
@@ -293,7 +293,6 @@ Validate before considering the work done:
|
|
|
293
293
|
- [ ] Coding conventions reflect what the codebase really does, not aspirations
|
|
294
294
|
- [ ] Every other `ue-*` skill can answer its Context Check from this document
|
|
295
295
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
296
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
297
296
|
|
|
298
297
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
299
298
|
|
|
@@ -495,7 +495,6 @@ Validate before considering the work done:
|
|
|
495
495
|
- [ ] Sequences are bound through spawnables or resolvable bindings, not fragile references
|
|
496
496
|
- [ ] Render settings are separated from in-game playback settings
|
|
497
497
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
498
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
499
498
|
|
|
500
499
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
501
500
|
|
|
@@ -513,7 +513,6 @@ Validate before considering the work done:
|
|
|
513
513
|
- [ ] Saving is asynchronous and cannot corrupt an existing file on failure
|
|
514
514
|
- [ ] Only owned state is serialized — no raw object pointers to transient actors
|
|
515
515
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
516
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
517
516
|
|
|
518
517
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
519
518
|
|
|
@@ -478,7 +478,6 @@ Validate before considering the work done:
|
|
|
478
478
|
- [ ] Transitions are driven by conditions and events, not by side effects in tasks
|
|
479
479
|
- [ ] The schema chosen matches the owner type of the tree
|
|
480
480
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
481
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
482
481
|
|
|
483
482
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
484
483
|
|
|
@@ -508,7 +508,6 @@ Validate before considering the work done:
|
|
|
508
508
|
- [ ] Tests run headless in CI without requiring a human in the editor
|
|
509
509
|
- [ ] Logging uses a dedicated category at an appropriate verbosity
|
|
510
510
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
511
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
512
511
|
|
|
513
512
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
514
513
|
|
|
@@ -419,7 +419,6 @@ Validate before considering the work done:
|
|
|
419
419
|
- [ ] Focus, navigation and gamepad input were verified, not just mouse
|
|
420
420
|
- [ ] Widgets are pooled or properly removed rather than accumulating
|
|
421
421
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
422
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
423
422
|
|
|
424
423
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
425
424
|
|
|
@@ -507,7 +507,6 @@ Validate before considering the work done:
|
|
|
507
507
|
- [ ] Data layers are used for state variation instead of duplicated levels
|
|
508
508
|
- [ ] Level transitions handle actors that must survive travel
|
|
509
509
|
- [ ] Conventions in `docs/unreal/project-context.md` were read and followed
|
|
510
|
-
- [ ] The Common Mistakes section of this skill was reviewed against the change
|
|
511
510
|
|
|
512
511
|
**PASS** — every item holds. **CONCERNS** — the work stands but at least one item is unresolved and worth flagging to the user. **FAIL** — an item is violated in a way that breaks correctness, replication or the frame budget; fix it before handing the work over.
|
|
513
512
|
|
|
@@ -65,7 +65,7 @@ Report: completeness (X/Y sections), quality issues (BLOCKING/ADVISORY with fix)
|
|
|
65
65
|
## Protocol
|
|
66
66
|
|
|
67
67
|
- Read-only — never edits files
|
|
68
|
-
- APPROVED →
|
|
68
|
+
- APPROVED → the spec is ready for implementation
|
|
69
69
|
- NEEDS REVISION → offer to help draft missing sections
|
|
70
70
|
- MAJOR REVISION → redirect to `/ux-design`
|
|
71
71
|
- Verdict is advisory — user decides whether to proceed
|
package/docs/RELEASE-SETUP.md
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
# Release Setup Guide
|
|
2
|
-
|
|
3
|
-
Arcane usa **semantic-release** para publicar automaticamente a npm en cada push a `main`. Esta guia explica como configurar los secrets necesarios para que el pipeline funcione.
|
|
4
|
-
|
|
5
|
-
## Arquitectura del release
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
Push a main → GitHub Actions → build + test → semantic-release → npm publish + GitHub Release
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
semantic-release analiza los commits (conventional commits) para determinar la version:
|
|
12
|
-
- `fix:` → patch (1.0.0 → 1.0.1)
|
|
13
|
-
- `feat:` → minor (1.0.0 → 1.1.0)
|
|
14
|
-
- `BREAKING CHANGE:` → major (1.0.0 → 2.0.0)
|
|
15
|
-
- `chore:`, `docs:`, `test:`, `refactor:` → no release
|
|
16
|
-
|
|
17
|
-
## Prerequisitos
|
|
18
|
-
|
|
19
|
-
- Cuenta en [npmjs.com](https://www.npmjs.com) con acceso al paquete `claude-code-arcane`
|
|
20
|
-
- Acceso de admin al repositorio en GitHub
|
|
21
|
-
|
|
22
|
-
## Paso 1: Crear token en npm
|
|
23
|
-
|
|
24
|
-
1. Ir a **https://www.npmjs.com** y loguearse
|
|
25
|
-
2. Click en el avatar (arriba a la derecha) → **Access Tokens**
|
|
26
|
-
3. Click **Generate New Token** → elegir **Granular Access Token**
|
|
27
|
-
4. Configurar:
|
|
28
|
-
- **Token name:** `arcane-release`
|
|
29
|
-
- **Expiration:** sin expiracion (o la que se prefiera)
|
|
30
|
-
- **Packages and scopes:** seleccionar **Read and write**
|
|
31
|
-
- **Select packages:** elegir `claude-code-arcane`
|
|
32
|
-
5. Click **Generate Token**
|
|
33
|
-
6. **Copiar el token** — solo se muestra una vez
|
|
34
|
-
|
|
35
|
-
## Paso 2: Agregar secret en GitHub
|
|
36
|
-
|
|
37
|
-
1. Ir a [Settings > Secrets > Actions](https://github.com/SebastianLuser/Claude-Code-Arcane/settings/secrets/actions)
|
|
38
|
-
2. Click **New repository secret**
|
|
39
|
-
3. Completar:
|
|
40
|
-
- **Name:** `NPM_TOKEN`
|
|
41
|
-
- **Secret:** pegar el token copiado en el paso anterior
|
|
42
|
-
4. Click **Add secret**
|
|
43
|
-
|
|
44
|
-
> **Nota:** `GITHUB_TOKEN` se provee automaticamente por GitHub Actions, no hace falta configurarlo.
|
|
45
|
-
|
|
46
|
-
## Paso 3: Verificar
|
|
47
|
-
|
|
48
|
-
1. Hacer un push a `main` con un commit tipo `feat:` o `fix:`
|
|
49
|
-
2. Ir a [Actions](https://github.com/SebastianLuser/Claude-Code-Arcane/actions) y verificar que el workflow **Release** corre exitosamente
|
|
50
|
-
3. Verificar en npm que la nueva version aparece: `npm view claude-code-arcane version`
|
|
51
|
-
4. Verificar que se creo un [GitHub Release](https://github.com/SebastianLuser/Claude-Code-Arcane/releases) con changelog automatico
|
|
52
|
-
|
|
53
|
-
## Archivos de configuracion
|
|
54
|
-
|
|
55
|
-
| Archivo | Proposito |
|
|
56
|
-
|---------|-----------|
|
|
57
|
-
| `.releaserc.json` | Configuracion de semantic-release (plugins, branches) |
|
|
58
|
-
| `.github/workflows/release.yml` | Workflow de GitHub Actions que ejecuta semantic-release |
|
|
59
|
-
| `.github/workflows/ci.yml` | CI separado (build + test + typecheck) |
|
|
60
|
-
|
|
61
|
-
## Troubleshooting
|
|
62
|
-
|
|
63
|
-
### El workflow falla con "NPM_TOKEN is not set"
|
|
64
|
-
El secret no esta configurado. Seguir el Paso 2.
|
|
65
|
-
|
|
66
|
-
### El workflow corre pero no publica
|
|
67
|
-
semantic-release solo publica si hay commits que justifiquen un bump de version. Commits tipo `chore:`, `docs:`, `test:` no generan release. Usar `feat:` o `fix:`.
|
|
68
|
-
|
|
69
|
-
### Error "npm ERR! 403 Forbidden"
|
|
70
|
-
El token no tiene permisos de escritura sobre el paquete, o expiro. Regenerar siguiendo el Paso 1.
|
|
71
|
-
|
|
72
|
-
### El CHANGELOG.md no se actualiza
|
|
73
|
-
semantic-release commitea el changelog automaticamente con `[skip ci]` para no generar un loop. Si no aparece, verificar que el plugin `@semantic-release/git` este en `.releaserc.json`.
|
|
74
|
-
|
|
75
|
-
## Hybrid Distribution
|
|
76
|
-
|
|
77
|
-
Ademas del release automatico, Arcane soporta distribucion hibrida:
|
|
78
|
-
|
|
79
|
-
- **GitHub source:** `npx claude-code-arcane install backend-ts --source github` baja contenido directamente del repo
|
|
80
|
-
- **Cache local:** contenido descargado se cachea en `~/.arcane/cache/`
|
|
81
|
-
- **Bundled fallback:** si GitHub no esta disponible, usa el contenido empaquetado en npm
|
|
82
|
-
- **Auto:** `--source auto` (default) intenta GitHub → cache → bundled
|
|
83
|
-
|
|
84
|
-
Variable de entorno: `ARCANE_SOURCE=bundled|github|auto`
|
|
85
|
-
|
|
86
|
-
## Smart Update
|
|
87
|
-
|
|
88
|
-
`arcane update` compara el contenido instalado con la ultima version disponible:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
arcane update # actualiza contenido (three-way merge)
|
|
92
|
-
arcane update --dry-run # muestra que cambiaria sin aplicar
|
|
93
|
-
arcane update --force # sobreescribe incluso archivos modificados localmente
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
El three-way merge detecta:
|
|
97
|
-
- Cambios upstream que no fueron tocados localmente → **actualiza**
|
|
98
|
-
- Archivos customizados localmente sin cambios upstream → **preserva**
|
|
99
|
-
- Conflictos (ambos cambiaron) → **backup + actualiza + avisa**
|
|
Binary file
|
|
Binary file
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Genera la presentacion ejecutiva de Claude Code Arcane (8 slides, 16:9)."""
|
|
3
|
-
import os
|
|
4
|
-
from pptx import Presentation
|
|
5
|
-
from pptx.util import Inches, Pt, Emu
|
|
6
|
-
from pptx.dml.color import RGBColor
|
|
7
|
-
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
|
|
8
|
-
from pptx.enum.shapes import MSO_SHAPE
|
|
9
|
-
from pptx.oxml.ns import qn
|
|
10
|
-
|
|
11
|
-
# ---------- Tema (paleta Arcane: indigo profundo + cian) ----------
|
|
12
|
-
BG = RGBColor(0x1E, 0x1B, 0x4B) # indigo-950 fondo
|
|
13
|
-
PANEL = RGBColor(0x2A, 0x25, 0x60) # panel
|
|
14
|
-
PANEL2 = RGBColor(0x31, 0x2E, 0x81) # panel mas claro
|
|
15
|
-
VIOLET = RGBColor(0x5B, 0x4F, 0xE8) # acento violeta
|
|
16
|
-
CYAN = RGBColor(0x22, 0xD3, 0xEE) # acento cian
|
|
17
|
-
WHITE = RGBColor(0xF8, 0xFA, 0xFC)
|
|
18
|
-
LIGHT = RGBColor(0xE5, 0xE7, 0xEB)
|
|
19
|
-
MUTED = RGBColor(0x9C, 0xA3, 0xC4)
|
|
20
|
-
GREEN = RGBColor(0x34, 0xD3, 0x99)
|
|
21
|
-
AMBER = RGBColor(0xFB, 0xBF, 0x24)
|
|
22
|
-
FONT = "Calibri"
|
|
23
|
-
FONT_H = "Calibri"
|
|
24
|
-
|
|
25
|
-
prs = Presentation()
|
|
26
|
-
prs.slide_width = Inches(13.333)
|
|
27
|
-
prs.slide_height = Inches(7.5)
|
|
28
|
-
BLANK = prs.slide_layouts[6]
|
|
29
|
-
SW, SH = prs.slide_width, prs.slide_height
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def slide():
|
|
33
|
-
s = prs.slides.add_slide(BLANK)
|
|
34
|
-
r = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, SW, SH)
|
|
35
|
-
r.fill.solid(); r.fill.fore_color.rgb = BG
|
|
36
|
-
r.line.fill.background()
|
|
37
|
-
r.shadow.inherit = False
|
|
38
|
-
return s
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def rect(s, x, y, w, h, color, line=None, radius=False, line_w=1.0):
|
|
42
|
-
shp = MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE
|
|
43
|
-
sp = s.shapes.add_shape(shp, Inches(x), Inches(y), Inches(w), Inches(h))
|
|
44
|
-
if color is None:
|
|
45
|
-
sp.fill.background()
|
|
46
|
-
else:
|
|
47
|
-
sp.fill.solid(); sp.fill.fore_color.rgb = color
|
|
48
|
-
if line is None:
|
|
49
|
-
sp.line.fill.background()
|
|
50
|
-
else:
|
|
51
|
-
sp.line.color.rgb = line; sp.line.width = Pt(line_w)
|
|
52
|
-
sp.shadow.inherit = False
|
|
53
|
-
return sp
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def txt(s, x, y, w, h, runs, align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.TOP,
|
|
57
|
-
space_after=4, line_spacing=1.0):
|
|
58
|
-
"""runs: lista de parrafos; cada parrafo es lista de (texto, size, color, bold)."""
|
|
59
|
-
tb = s.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
|
|
60
|
-
tf = tb.text_frame; tf.word_wrap = True
|
|
61
|
-
tf.vertical_anchor = anchor
|
|
62
|
-
for i, para in enumerate(runs):
|
|
63
|
-
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
|
|
64
|
-
p.alignment = align
|
|
65
|
-
p.space_after = Pt(space_after); p.space_before = Pt(0)
|
|
66
|
-
p.line_spacing = line_spacing
|
|
67
|
-
for (t, sz, col, bold) in para:
|
|
68
|
-
r = p.add_run(); r.text = t
|
|
69
|
-
r.font.size = Pt(sz); r.font.color.rgb = col
|
|
70
|
-
r.font.bold = bold; r.font.name = FONT
|
|
71
|
-
return tb
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def badge(s, n):
|
|
75
|
-
c = s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(12.55), Inches(6.85), Inches(0.42), Inches(0.42))
|
|
76
|
-
c.fill.solid(); c.fill.fore_color.rgb = VIOLET; c.line.fill.background(); c.shadow.inherit = False
|
|
77
|
-
tf = c.text_frame; tf.word_wrap = False
|
|
78
|
-
p = tf.paragraphs[0]; p.alignment = PP_ALIGN.CENTER
|
|
79
|
-
r = p.add_run(); r.text = str(n)
|
|
80
|
-
r.font.size = Pt(12); r.font.bold = True; r.font.color.rgb = WHITE; r.font.name = FONT
|
|
81
|
-
tf.vertical_anchor = MSO_ANCHOR.MIDDLE
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def footer(s):
|
|
85
|
-
txt(s, 0.55, 7.0, 5, 0.35, [[("Claude Code Arcane", 9, MUTED, False)]])
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def kicker(s, text, color=CYAN):
|
|
89
|
-
rect(s, 0.55, 0.55, 0.12, 0.55, color)
|
|
90
|
-
txt(s, 0.8, 0.5, 11, 0.5, [[(text, 13, color, True)]])
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def title(s, text, y=0.95, size=34):
|
|
94
|
-
txt(s, 0.78, y, 11.8, 1.0, [[(text, size, WHITE, True)]])
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
# ================= SLIDE 1 — Portada =================
|
|
98
|
-
s = slide()
|
|
99
|
-
rect(s, 0, 0, 13.333, 7.5, None)
|
|
100
|
-
# barra de acento lateral
|
|
101
|
-
rect(s, 0, 0, 0.25, 7.5, VIOLET)
|
|
102
|
-
rect(s, 0.25, 0, 0.08, 7.5, CYAN)
|
|
103
|
-
txt(s, 1.0, 1.7, 11.5, 0.6, [[("CLAUDE CODE", 20, CYAN, True)]])
|
|
104
|
-
txt(s, 1.0, 2.15, 11.5, 1.4, [[("Arcane", 88, WHITE, True)]])
|
|
105
|
-
txt(s, 1.05, 3.65, 11, 0.6,
|
|
106
|
-
[[("Un gestor de paquetes de configuracion para Claude Code", 22, LIGHT, False)]])
|
|
107
|
-
txt(s, 1.05, 4.25, 11, 0.5,
|
|
108
|
-
[[("Instala solo las capacidades que tu proyecto necesita — con un comando.", 15, MUTED, False)]])
|
|
109
|
-
|
|
110
|
-
# dashboard de metricas
|
|
111
|
-
metrics = [("322", "Skills"), ("86", "Agentes"), ("29", "Profiles"), ("19", "Rules")]
|
|
112
|
-
mx, mw, gap = 1.0, 2.7, 0.25
|
|
113
|
-
for i, (num, lbl) in enumerate(metrics):
|
|
114
|
-
x = mx + i * (mw + gap)
|
|
115
|
-
rect(s, x, 5.3, mw, 1.35, PANEL, radius=True)
|
|
116
|
-
rect(s, x, 5.3, 0.1, 1.35, CYAN if i % 2 else VIOLET, radius=False)
|
|
117
|
-
txt(s, x, 5.45, mw, 0.8, [[(num, 44, WHITE, True)]], align=PP_ALIGN.CENTER)
|
|
118
|
-
txt(s, x, 6.2, mw, 0.4, [[(lbl.upper(), 13, CYAN, True)]], align=PP_ALIGN.CENTER)
|
|
119
|
-
|
|
120
|
-
# ================= SLIDE 2 — El problema =================
|
|
121
|
-
s = slide()
|
|
122
|
-
kicker(s, "POR QUE EXISTE")
|
|
123
|
-
title(s, "El problema que resuelve")
|
|
124
|
-
problems = [
|
|
125
|
-
("Configuracion manual", "Copiar .claude/ a mano en cada proyecto: repetitivo y diverge con el tiempo."),
|
|
126
|
-
("Todo-o-nada", "Un mega-repo cargaria las 322 skills en CADA proyecto: mas tokens, mas ruido, mas latencia."),
|
|
127
|
-
("Sin estandarizacion", "Cada dev configura su Claude distinto. No hay fuente de verdad compartida."),
|
|
128
|
-
("Sin actualizacion", "Una mejora en una skill nunca llega a los proyectos que ya la copiaron."),
|
|
129
|
-
]
|
|
130
|
-
y = 2.05
|
|
131
|
-
for i, (h, d) in enumerate(problems):
|
|
132
|
-
rect(s, 0.78, y, 11.7, 1.0, PANEL, radius=True)
|
|
133
|
-
rect(s, 0.78, y, 0.1, 1.0, VIOLET)
|
|
134
|
-
txt(s, 1.05, y + 0.13, 3.4, 0.8, [[(h, 17, CYAN, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
135
|
-
txt(s, 4.5, y + 0.13, 7.8, 0.8, [[(d, 13.5, LIGHT, False)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
136
|
-
y += 1.15
|
|
137
|
-
txt(s, 0.78, 6.75, 11.8, 0.5,
|
|
138
|
-
[[("Falta una forma modular, versionada y compartible de configurar Claude Code.", 15, WHITE, True)]])
|
|
139
|
-
badge(s, 2); footer(s)
|
|
140
|
-
|
|
141
|
-
# ================= SLIDE 3 — Idea central =================
|
|
142
|
-
s = slide()
|
|
143
|
-
kicker(s, "LA IDEA CENTRAL")
|
|
144
|
-
title(s, "npm, pero para las capacidades de Claude Code")
|
|
145
|
-
txt(s, 0.78, 2.0, 11.7, 1.0,
|
|
146
|
-
[[("En vez de instalar librerias de codigo, instalas ", 17, LIGHT, False),
|
|
147
|
-
("capacidades", 17, CYAN, True),
|
|
148
|
-
(": hacer commits, disenar APIs, correr un sprint, auditar seguridad — adaptadas a tu stack.", 17, LIGHT, False)]],
|
|
149
|
-
line_spacing=1.15)
|
|
150
|
-
|
|
151
|
-
# comando hero estilo terminal
|
|
152
|
-
rect(s, 0.78, 3.25, 11.7, 1.5, RGBColor(0x14, 0x11, 0x33), radius=True, line=VIOLET, line_w=1.5)
|
|
153
|
-
txt(s, 1.1, 3.45, 11, 0.4, [[("terminal", 11, MUTED, False)]])
|
|
154
|
-
txt(s, 1.1, 3.85, 11, 0.7,
|
|
155
|
-
[[("$ ", 26, CYAN, True), ("npx claude-code-arcane install ", 26, WHITE, True),
|
|
156
|
-
("backend-ts", 26, GREEN, True), ("+agile", 26, AMBER, True), ("+testing", 26, AMBER, True)]])
|
|
157
|
-
|
|
158
|
-
cols = [("backend-ts", "base", GREEN), ("+agile", "addon", AMBER), ("+testing", "addon", AMBER)]
|
|
159
|
-
cx = 0.78
|
|
160
|
-
for name, kind, col in cols:
|
|
161
|
-
rect(s, cx, 5.05, 3.0, 1.1, PANEL, radius=True)
|
|
162
|
-
txt(s, cx, 5.2, 3.0, 0.5, [[(name, 18, col, True)]], align=PP_ALIGN.CENTER)
|
|
163
|
-
txt(s, cx, 5.7, 3.0, 0.4, [[(kind.upper(), 12, MUTED, True)]], align=PP_ALIGN.CENTER)
|
|
164
|
-
cx += 3.25
|
|
165
|
-
txt(s, 0.78, 6.45, 11.7, 0.5,
|
|
166
|
-
[[("base + addon + addon -> solo lo que ESE proyecto necesita.", 15, WHITE, True)]])
|
|
167
|
-
badge(s, 3); footer(s)
|
|
168
|
-
|
|
169
|
-
# ================= SLIDE 4 — Como funciona =================
|
|
170
|
-
s = slide()
|
|
171
|
-
kicker(s, "ARQUITECTURA")
|
|
172
|
-
title(s, "Como funciona")
|
|
173
|
-
steps = [
|
|
174
|
-
("1", "Resuelve el contenido", "GitHub -> cache local -> bundled (funciona offline)"),
|
|
175
|
-
("2", "Carga core.yaml siempre", "21 skills base + 15 hooks + permisos de seguridad"),
|
|
176
|
-
("3", "Mergea los profiles", "Combina los profiles pedidos con +"),
|
|
177
|
-
("4", "Deduplica", "Un skill repetido se copia una sola vez"),
|
|
178
|
-
("5", "Genera .claude/", "settings.json + manifest + skills, agents, rules, hooks"),
|
|
179
|
-
]
|
|
180
|
-
y = 2.05
|
|
181
|
-
for num, h, d in steps:
|
|
182
|
-
rect(s, 0.78, y, 11.7, 0.84, PANEL, radius=True)
|
|
183
|
-
c = s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(0.98), Inches(y + 0.17), Inches(0.5), Inches(0.5))
|
|
184
|
-
c.fill.solid(); c.fill.fore_color.rgb = VIOLET; c.line.fill.background(); c.shadow.inherit = False
|
|
185
|
-
ctf = c.text_frame; ctf.vertical_anchor = MSO_ANCHOR.MIDDLE
|
|
186
|
-
cp = ctf.paragraphs[0]; cp.alignment = PP_ALIGN.CENTER
|
|
187
|
-
cr = cp.add_run(); cr.text = num; cr.font.size = Pt(20); cr.font.bold = True
|
|
188
|
-
cr.font.color.rgb = WHITE; cr.font.name = FONT
|
|
189
|
-
txt(s, 1.75, y + 0.05, 4.0, 0.74, [[(h, 16, CYAN, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
190
|
-
txt(s, 5.9, y + 0.05, 6.4, 0.74, [[(d, 13, LIGHT, False)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
191
|
-
y += 0.95
|
|
192
|
-
badge(s, 4); footer(s)
|
|
193
|
-
|
|
194
|
-
# ================= SLIDE 5 — 4 piezas =================
|
|
195
|
-
s = slide()
|
|
196
|
-
kicker(s, "SEPARACION DE RESPONSABILIDADES")
|
|
197
|
-
title(s, "Cuatro piezas, cuatro responsabilidades")
|
|
198
|
-
cards = [
|
|
199
|
-
("Skills", "Acciones que Claude ejecuta", "/commit · /code-review", CYAN),
|
|
200
|
-
("Agents", "Personas que Claude adopta", "backend-architect · game-designer", VIOLET),
|
|
201
|
-
("Hooks", "Automatizacion invisible (eventos)", "valida commits · escanea secrets", GREEN),
|
|
202
|
-
("Rules", "Estandares que Claude obedece", "\"Clean architecture en backend\"", AMBER),
|
|
203
|
-
]
|
|
204
|
-
positions = [(0.78, 2.05), (6.93, 2.05), (0.78, 4.25), (6.93, 4.25)]
|
|
205
|
-
cw, ch = 5.6, 2.0
|
|
206
|
-
for (name, what, ex, col), (x, y) in zip(cards, positions):
|
|
207
|
-
rect(s, x, y, cw, ch, PANEL, radius=True)
|
|
208
|
-
rect(s, x, y, cw, 0.12, col)
|
|
209
|
-
txt(s, x + 0.3, y + 0.25, cw - 0.6, 0.5, [[(name, 24, col, True)]])
|
|
210
|
-
txt(s, x + 0.3, y + 0.85, cw - 0.6, 0.5, [[(what, 14.5, LIGHT, False)]])
|
|
211
|
-
txt(s, x + 0.3, y + 1.4, cw - 0.6, 0.5, [[(ex, 13, MUTED, True)]])
|
|
212
|
-
txt(s, 0.78, 6.55, 11.7, 0.5,
|
|
213
|
-
[[("Todo en Markdown + YAML: legible, diffeable en git, editable por cualquiera.", 14, WHITE, True)]])
|
|
214
|
-
badge(s, 5); footer(s)
|
|
215
|
-
|
|
216
|
-
# ================= SLIDE 6 — Por que gana =================
|
|
217
|
-
s = slide()
|
|
218
|
-
kicker(s, "DIFERENCIADORES")
|
|
219
|
-
title(s, "Por que Arcane gana")
|
|
220
|
-
# encabezados
|
|
221
|
-
rect(s, 0.78, 2.0, 5.7, 0.55, PANEL2, radius=True)
|
|
222
|
-
rect(s, 6.63, 2.0, 5.85, 0.55, PANEL2, radius=True)
|
|
223
|
-
txt(s, 1.0, 2.05, 5.3, 0.45, [[("ALTERNATIVA", 13, MUTED, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
224
|
-
txt(s, 6.85, 2.05, 5.4, 0.45, [[("COMO GANA ARCANE", 13, CYAN, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
225
|
-
rows = [
|
|
226
|
-
("Config a mano", "Un comando, versionado, reproducible"),
|
|
227
|
-
("Mega-repo monolitico", "Selectivo por profile + dedup (menos tokens)"),
|
|
228
|
-
("Copiar config entre proyectos", "Smart update con three-way merge (no pisa tus cambios)"),
|
|
229
|
-
("Claude \"vanilla\"", "Hooks + rules + 86 agentes especializados"),
|
|
230
|
-
]
|
|
231
|
-
y = 2.65
|
|
232
|
-
for a, b in rows:
|
|
233
|
-
rect(s, 0.78, y, 5.7, 0.7, PANEL, radius=True)
|
|
234
|
-
rect(s, 6.63, y, 5.85, 0.7, PANEL, radius=True)
|
|
235
|
-
txt(s, 1.0, y + 0.05, 5.3, 0.6, [[(a, 14, LIGHT, False)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
236
|
-
txt(s, 6.85, y + 0.05, 5.4, 0.6, [[(b, 13.5, WHITE, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
237
|
-
y += 0.8
|
|
238
|
-
rect(s, 0.78, y + 0.05, 11.7, 0.7, VIOLET, radius=True)
|
|
239
|
-
txt(s, 0.78, y + 0.1, 11.7, 0.6,
|
|
240
|
-
[[("Trata la configuracion de IA como software de primera clase: versionado, modular, testeable y distribuido.",
|
|
241
|
-
14, WHITE, True)]], align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
|
|
242
|
-
badge(s, 6); footer(s)
|
|
243
|
-
|
|
244
|
-
# ================= SLIDE 7 — Pros y contras =================
|
|
245
|
-
s = slide()
|
|
246
|
-
kicker(s, "EVALUACION HONESTA")
|
|
247
|
-
title(s, "Trade-offs")
|
|
248
|
-
# Fortalezas
|
|
249
|
-
rect(s, 0.78, 2.0, 5.7, 4.6, PANEL, radius=True)
|
|
250
|
-
rect(s, 0.78, 2.0, 5.7, 0.6, RGBColor(0x14, 0x3D, 0x2E), radius=True)
|
|
251
|
-
txt(s, 1.05, 2.05, 5.3, 0.5, [[("FORTALEZAS", 16, GREEN, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
252
|
-
pros = [
|
|
253
|
-
"Eficiencia de tokens (solo lo relevante)",
|
|
254
|
-
"Un comando, cero friccion (npx)",
|
|
255
|
-
"Reproducible (manifest = snapshot exacto)",
|
|
256
|
-
"Estandarizacion de equipo",
|
|
257
|
-
"Auto-actualizable sin pisar tus cambios",
|
|
258
|
-
"Testeable (framework skills-selftest)",
|
|
259
|
-
]
|
|
260
|
-
y = 2.85
|
|
261
|
-
for p in pros:
|
|
262
|
-
txt(s, 1.05, y, 5.2, 0.5, [[("+ ", 14, GREEN, True), (p, 13.5, LIGHT, False)]])
|
|
263
|
-
y += 0.6
|
|
264
|
-
# Costos
|
|
265
|
-
rect(s, 6.93, 2.0, 5.55, 4.6, PANEL, radius=True)
|
|
266
|
-
rect(s, 6.93, 2.0, 5.55, 0.6, RGBColor(0x4A, 0x39, 0x12), radius=True)
|
|
267
|
-
txt(s, 7.2, 2.05, 5.1, 0.5, [[("COSTOS / TRADE-OFFS", 16, AMBER, True)]], anchor=MSO_ANCHOR.MIDDLE)
|
|
268
|
-
cons = [
|
|
269
|
-
"Mantener 322 skills con calidad consistente",
|
|
270
|
-
"Skills son prompts -> no deterministas",
|
|
271
|
-
"Dependencia de la API de Claude Code",
|
|
272
|
-
"Curva de aprendizaje para combinar profiles",
|
|
273
|
-
]
|
|
274
|
-
y = 2.95
|
|
275
|
-
for c in cons:
|
|
276
|
-
txt(s, 7.2, y, 5.0, 0.6, [[("! ", 14, AMBER, True), (c, 13.5, LIGHT, False)]])
|
|
277
|
-
y += 0.75
|
|
278
|
-
badge(s, 7); footer(s)
|
|
279
|
-
|
|
280
|
-
# ================= SLIDE 8 — Cierre =================
|
|
281
|
-
s = slide()
|
|
282
|
-
rect(s, 0, 0, 0.25, 7.5, VIOLET)
|
|
283
|
-
rect(s, 0.25, 0, 0.08, 7.5, CYAN)
|
|
284
|
-
kicker(s, "PRODUCTION-GRADE")
|
|
285
|
-
title(s, "No es un script: es infraestructura", size=32)
|
|
286
|
-
feats = [
|
|
287
|
-
("Distribucion hibrida", "GitHub -> cache -> bundled. Funciona incluso offline."),
|
|
288
|
-
("Smart update", "Three-way merge: actualiza sin pisar tus customizaciones."),
|
|
289
|
-
("Worktree-aware", "Comparte hooks/docs, copia skills por rama."),
|
|
290
|
-
("Auto-release", "semantic-release: conventional commits -> publish a npm."),
|
|
291
|
-
]
|
|
292
|
-
positions = [(0.78, 2.15), (6.93, 2.15), (0.78, 3.75), (6.93, 3.75)]
|
|
293
|
-
for (h, d), (x, y) in zip(feats, positions):
|
|
294
|
-
rect(s, x, y, 5.6, 1.4, PANEL, radius=True)
|
|
295
|
-
rect(s, x, y, 0.1, 1.4, CYAN)
|
|
296
|
-
txt(s, x + 0.3, y + 0.18, 5.1, 0.5, [[(h, 17, CYAN, True)]])
|
|
297
|
-
txt(s, x + 0.3, y + 0.68, 5.1, 0.6, [[(d, 13, LIGHT, False)]])
|
|
298
|
-
|
|
299
|
-
rect(s, 0.78, 5.55, 11.7, 1.3, VIOLET, radius=True)
|
|
300
|
-
txt(s, 0.78, 5.7, 11.7, 0.55,
|
|
301
|
-
[[("Configuracion de IA, modular y versionada — un comando para empezar.", 19, WHITE, True)]],
|
|
302
|
-
align=PP_ALIGN.CENTER)
|
|
303
|
-
txt(s, 0.78, 6.25, 11.7, 0.5,
|
|
304
|
-
[[("npx claude-code-arcane install <profile>", 22, WHITE, True)]], align=PP_ALIGN.CENTER)
|
|
305
|
-
badge(s, 8); footer(s)
|
|
306
|
-
|
|
307
|
-
out = os.path.join(os.path.dirname(os.path.abspath(__file__)), "arcane-overview.pptx")
|
|
308
|
-
prs.save(out)
|
|
309
|
-
print("OK ->", out)
|
|
310
|
-
print("Slides:", len(prs.slides._sldIdLst))
|