citadel-ai 10.0.0 → 10.2.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/dist/cli/ide-rules.js +26 -7
- package/dist/cli/ide-rules.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/init.js +4 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/skills.d.ts +1 -0
- package/dist/cli/skills.js +261 -0
- package/dist/cli/skills.js.map +1 -0
- package/dist/cli/update.js +3 -0
- package/dist/cli/update.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/ide-rules.js
CHANGED
|
@@ -47,6 +47,22 @@ When acting as an agent, state who you are: "${'\u2699\uFE0F'} UNCLE BOB (Backen
|
|
|
47
47
|
3. **Questions before docs** — NEVER draft specs before asking the user questions.
|
|
48
48
|
4. **Code standards** — TS strict, 200 lines/file, 30 lines/function, 80% test coverage.
|
|
49
49
|
5. **Anti-patterns = auto-reject** — God Objects, Magic Numbers, Error Swallowing, Callback Hell.
|
|
50
|
+
6. **Loop breaker** — If you've tried the same type of fix 2+ times without success, STOP and follow the STUCK PROTOCOL below.
|
|
51
|
+
|
|
52
|
+
## STUCK PROTOCOL
|
|
53
|
+
|
|
54
|
+
⚠️ If you are going in circles (same error recurring, same type of fix attempted 2+ times, UI not matching expectations):
|
|
55
|
+
|
|
56
|
+
1. **STOP coding.** Do not attempt another fix.
|
|
57
|
+
2. **Diagnose out loud:** Write what you THINK the current state is (layout, data flow, error state).
|
|
58
|
+
3. **Ask the user to confirm:** "Is this what you see? Send a screenshot if possible."
|
|
59
|
+
4. **Identify the gap** between your mental model and reality.
|
|
60
|
+
5. **Propose ONE targeted change.** Not 3. Not 10. One.
|
|
61
|
+
6. **If still stuck after that:** Log the issue in \`.citadel/vault/SESSION_LOG.md\` and suggest:
|
|
62
|
+
- A different approach entirely (not a variation of the same fix)
|
|
63
|
+
- Breaking the problem into smaller parts
|
|
64
|
+
- Searching the web for the specific error/behavior
|
|
65
|
+
- Taking a snapshot and starting a fresh chat with clean context
|
|
50
66
|
|
|
51
67
|
## THE AGENTS
|
|
52
68
|
|
|
@@ -54,19 +70,22 @@ ${rosterCompact}
|
|
|
54
70
|
|
|
55
71
|
## PHASED CONTEXT LOADING
|
|
56
72
|
|
|
57
|
-
⚠️ DO NOT read all
|
|
73
|
+
⚠️ DO NOT read all files at once. Load ONLY what you need per phase:
|
|
58
74
|
|
|
59
75
|
| Phase | Read these files | Purpose |
|
|
60
76
|
|-------|-----------------|---------|
|
|
77
|
+
| ALWAYS | \`.citadel/skills/rules_essential.md\` | P0 rules — architecture, code quality, security |
|
|
61
78
|
| Inception (Gate 0) | \`.citadel/teams/c-suite.md\` | C-levels ask questions, then draft specs |
|
|
62
|
-
| Pre-Design (Gate 1) | \`.citadel/teams/cpo-makers.md\` | Product
|
|
63
|
-
| Pre-Build (Gate 2) | \`.citadel/teams/cto-makers.md\` +
|
|
64
|
-
| Build | \`.citadel/teams/cto-makers.md\` +
|
|
65
|
-
|
|
|
66
|
-
|
|
|
79
|
+
| Pre-Design (Gate 1) | \`.citadel/teams/cpo-makers.md\` + \`skills/skills_uiux.md\` | Product + UX |
|
|
80
|
+
| Pre-Build (Gate 2) | \`.citadel/teams/cto-makers.md\` + \`skills/skills_backend.md\` | Architecture |
|
|
81
|
+
| Build backend | \`.citadel/teams/cto-makers.md\` + \`skills/skills_backend.md\` + \`skills/skills_data.md\` | Backend + data |
|
|
82
|
+
| Build frontend | \`.citadel/teams/cto-makers.md\` + \`skills/skills_frontend.md\` + \`skills/skills_uiux.md\` | Frontend + UI |
|
|
83
|
+
| Build mobile/PWA | \`.citadel/teams/cto-makers.md\` + \`skills/skills_mobile.md\` + \`skills/skills_uiux.md\` | Mobile |
|
|
84
|
+
| Review | \`.citadel/teams/cto-checkers.md\` + relevant skills | Checkers validate |
|
|
85
|
+
| Security | \`.citadel/teams/ciso-all.md\` + \`skills/skills_security.md\` | Full security review |
|
|
67
86
|
| Ship (Gate 4) | \`.citadel/teams/cto-makers.md\` (KELSEY only) | Deploy |
|
|
68
87
|
|
|
69
|
-
|
|
88
|
+
**rules_essential.md is read EVERY time.** Other skills only when relevant.
|
|
70
89
|
|
|
71
90
|
## WORKFLOW
|
|
72
91
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-rules.js","sourceRoot":"","sources":["../../src/cli/ide-rules.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,yDAAyD;AACzD,kEAAkE;AAElE,OAAO,EAAc,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,4CAA4C;AAC5C,SAAS,SAAS,CAAC,CAAkB;IACnC,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,UAAU,GAAG,CAAC;AACtE,CAAC;AAED,6CAA6C;AAC7C,SAAS,aAAa,CAAC,KAAa,EAAE,MAAyB;IAC7D,IAAI,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;QACnD,OAAO,IAAI,KAAK,CAAC,CAAC,UAAU,MAAM,CAAC;QACnC,OAAO,IAAI,cAAc,CAAC,CAAC,KAAK,MAAM,CAAC;QACvC,OAAO,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4CAA4C;AAC5C,SAAS,iBAAiB;IACxB,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE3C,kDAAkD;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,aAAa,GAAG,eAAe,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7D,aAAa,IAAI,qBAAqB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,aAAa,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;IAChF,aAAa,IAAI,uBAAuB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,aAAa,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;IAElF,OAAO,kBAAkB,CAAC,CAAC,KAAK;;gDAEc,CAAC,CAAC,KAAK;+CACR,cAAc
|
|
1
|
+
{"version":3,"file":"ide-rules.js","sourceRoot":"","sources":["../../src/cli/ide-rules.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,yDAAyD;AACzD,kEAAkE;AAElE,OAAO,EAAc,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,4CAA4C;AAC5C,SAAS,SAAS,CAAC,CAAkB;IACnC,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,UAAU,GAAG,CAAC;AACtE,CAAC;AAED,6CAA6C;AAC7C,SAAS,aAAa,CAAC,KAAa,EAAE,MAAyB;IAC7D,IAAI,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;QACnD,OAAO,IAAI,KAAK,CAAC,CAAC,UAAU,MAAM,CAAC;QACnC,OAAO,IAAI,cAAc,CAAC,CAAC,KAAK,MAAM,CAAC;QACvC,OAAO,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4CAA4C;AAC5C,SAAS,iBAAiB;IACxB,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE3C,kDAAkD;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,aAAa,GAAG,eAAe,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7D,aAAa,IAAI,qBAAqB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,aAAa,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;IAChF,aAAa,IAAI,uBAAuB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,aAAa,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;IAElF,OAAO,kBAAkB,CAAC,CAAC,KAAK;;gDAEc,CAAC,CAAC,KAAK;+CACR,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4B3D,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiHd,CAAC;AACF,CAAC;AAED,0CAA0C;AAC1C,SAAS,cAAc,CAAC,WAAmB;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzC,gCAAgC;IAChC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,aAAa,CACvD,gCAAgC,EAChC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CACvC,EAAE,OAAO,CAAC,CAAC;IAEZ,+BAA+B;IAC/B,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,aAAa,CAC1D,mBAAmB,EACnB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CACzD,EAAE,OAAO,CAAC,CAAC;IAEZ,kCAAkC;IAClC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAC5D,qBAAqB,EACrB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAC3D,EAAE,OAAO,CAAC,CAAC;IAEZ,aAAa;IACb,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,aAAa,CAC1D,mBAAmB,EACnB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CACzD,EAAE,OAAO,CAAC,CAAC;IAEZ,eAAe;IACf,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAC5D,qBAAqB,EACrB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAC3D,EAAE,OAAO,CAAC,CAAC;IAEZ,aAAa;IACb,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,aAAa,CAC1D,mBAAmB,EACnB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CACzD,EAAE,OAAO,CAAC,CAAC;IAEZ,eAAe;IACf,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAC5D,qBAAqB,EACrB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAC3D,EAAE,OAAO,CAAC,CAAC;IAEZ,wCAAwC;IACxC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,aAAa,CACxD,0CAA0C,EAC1C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CACnC,EAAE,OAAO,CAAC,CAAC;IAEZ,aAAa;IACb,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,aAAa,CAC1D,mBAAmB,EACnB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CACzD,EAAE,OAAO,CAAC,CAAC;IAEZ,eAAe;IACf,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAC5D,qBAAqB,EACrB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAC3D,EAAE,OAAO,CAAC,CAAC;AACd,CAAC;AAED,6BAA6B;AAE7B,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,oGAAoG,EAAE,OAAO,CAAC,CAAC;IAC9J,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,iJAAiJ,EAAE,OAAO,CAAC,CAAC;IAC5M,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,uJAAuJ,EAAE,OAAO,CAAC,CAAC;IACnN,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,2GAA2G,EAAE,OAAO,CAAC,CAAC;IACzK,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,+FAA+F,EAAE,OAAO,CAAC,CAAC;AAC7J,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,4EAA4E,EAAE,OAAO,CAAC,CAAC;IACtI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,uGAAuG,EAAE,OAAO,CAAC,CAAC;IAClK,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,0DAA0D,EAAE,OAAO,CAAC,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/B,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3B,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChC,eAAe,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -55,7 +55,7 @@ After init, you can also use slash commands in your IDE:
|
|
|
55
55
|
`);
|
|
56
56
|
}
|
|
57
57
|
else if (cmd === 'version' || cmd === '--version' || cmd === '-v') {
|
|
58
|
-
console.log('citadel-ai v10.
|
|
58
|
+
console.log('citadel-ai v10.2.0');
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
61
61
|
console.log(`Unknown command: ${cmd}\nRun: npx citadel-ai help`);
|
package/dist/cli/init.js
CHANGED
|
@@ -6,6 +6,7 @@ import { GateSystem } from '../core/gates.js';
|
|
|
6
6
|
import { getAgentCount, AGENT_REGISTRY } from '../agents/registry.js';
|
|
7
7
|
import { banner } from '../ui/terminal.js';
|
|
8
8
|
import { installAllIDEs, writeTeamFiles } from './ide-rules.js';
|
|
9
|
+
import { writeSkills } from './skills.js';
|
|
9
10
|
function ask(q) {
|
|
10
11
|
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
11
12
|
return new Promise(r => { rl.question(q, a => { rl.close(); r(a.trim()); }); });
|
|
@@ -239,7 +240,7 @@ export async function initCommand(targetPath) {
|
|
|
239
240
|
}
|
|
240
241
|
console.log('\n⏳ Installing CITADEL...\n');
|
|
241
242
|
// Scaffold
|
|
242
|
-
for (const d of [cp, join(cp, 'memory'), join(cp, 'gates'), join(cp, 'specs'), join(cp, 'agents'), join(cp, 'teams'), join(cp, 'vault')]) {
|
|
243
|
+
for (const d of [cp, join(cp, 'memory'), join(cp, 'gates'), join(cp, 'specs'), join(cp, 'agents'), join(cp, 'teams'), join(cp, 'vault'), join(cp, 'skills')]) {
|
|
243
244
|
mkdirSync(d, { recursive: true });
|
|
244
245
|
}
|
|
245
246
|
// Config
|
|
@@ -253,6 +254,7 @@ export async function initCommand(targetPath) {
|
|
|
253
254
|
// Content
|
|
254
255
|
writeAgentPersonas(cp);
|
|
255
256
|
writeTeamFiles(cp);
|
|
257
|
+
writeSkills(cp);
|
|
256
258
|
writeSpecTemplates(cp);
|
|
257
259
|
writeVaultTemplates(cp);
|
|
258
260
|
writeGettingStarted(pp);
|
|
@@ -271,6 +273,7 @@ export async function initCommand(targetPath) {
|
|
|
271
273
|
const c = getAgentCount();
|
|
272
274
|
console.log(` ✅ ${c.total} agents installed (.citadel/agents/)
|
|
273
275
|
✅ 10 team files for phased loading (.citadel/teams/)
|
|
276
|
+
✅ 7 skills files — engineering standards (.citadel/skills/)
|
|
274
277
|
✅ Spec templates (.citadel/specs/)
|
|
275
278
|
✅ Project vault — live memory (.citadel/vault/)
|
|
276
279
|
✅ Getting started guide (.citadel/GETTING_STARTED.md)
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function writeSkills(citadelPath: string): void;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════
|
|
2
|
+
// CITADEL — Engineering Standards & Skills
|
|
3
|
+
// Written to .citadel/skills/ — loaded per context by agents
|
|
4
|
+
// ═══════════════════════════════════════════════════════════════
|
|
5
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
export function writeSkills(citadelPath) {
|
|
8
|
+
const d = join(citadelPath, 'skills');
|
|
9
|
+
mkdirSync(d, { recursive: true });
|
|
10
|
+
// ══════════════════════════════════════════
|
|
11
|
+
// ESSENTIAL — loaded EVERY response by every agent
|
|
12
|
+
// Target: < 800 tokens
|
|
13
|
+
// ══════════════════════════════════════════
|
|
14
|
+
writeFileSync(join(d, 'rules_essential.md'), `# Essential Rules (P0 — Always Active)
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
- Business logic in service layer ONLY. Never in controllers, routes, or DB layer.
|
|
18
|
+
- Max 200 lines per file. Max 30 lines per function. No exceptions.
|
|
19
|
+
- One file = one responsibility. If you need a comment to explain what the file does, the file does too much.
|
|
20
|
+
- No framework lock-in. Abstractions at boundaries (DB, API, external services).
|
|
21
|
+
|
|
22
|
+
## Code Quality
|
|
23
|
+
- TypeScript strict mode. No \`any\` unless explicitly justified in a comment.
|
|
24
|
+
- Every function: typed input, typed output, typed errors. No implicit types.
|
|
25
|
+
- Named constants for all values. Zero magic numbers, zero magic strings.
|
|
26
|
+
- Error handling: explicit, typed, NEVER swallowed. Every catch must log or rethrow.
|
|
27
|
+
- No nested callbacks > 2 levels. Use async/await.
|
|
28
|
+
- Naming: intention-revealing. \`getUserById\` not \`getData\`. \`isActive\` not \`flag\`.
|
|
29
|
+
|
|
30
|
+
## Security
|
|
31
|
+
- Secrets in env vars ONLY. Never in code, comments, config files, or logs.
|
|
32
|
+
- All user input: validated + sanitized before use. No trust.
|
|
33
|
+
- Auth: bcrypt/argon2 for passwords. JWT with short expiry (15min) + refresh rotation.
|
|
34
|
+
- No PII in logs. Ever. Mask or hash.
|
|
35
|
+
|
|
36
|
+
## Testing
|
|
37
|
+
- Every public function has at least one test.
|
|
38
|
+
- Test pyramid: 70% unit, 20% integration, 10% e2e.
|
|
39
|
+
- Tests must be fast, independent, repeatable. No order dependency.
|
|
40
|
+
|
|
41
|
+
## Before Writing Code
|
|
42
|
+
- Read \`.citadel/vault/ARCHITECTURE.md\` — don't contradict existing decisions.
|
|
43
|
+
- Read \`.citadel/vault/CODE_INVENTORY.md\` — know what exists before creating new files.
|
|
44
|
+
- If something similar exists, extend it. Don't duplicate.
|
|
45
|
+
`, 'utf-8');
|
|
46
|
+
// ══════════════════════════════════════════
|
|
47
|
+
// BACKEND SKILLS — loaded when building backend
|
|
48
|
+
// ══════════════════════════════════════════
|
|
49
|
+
writeFileSync(join(d, 'skills_backend.md'), `# Backend Engineering Skills
|
|
50
|
+
|
|
51
|
+
## API Design
|
|
52
|
+
- RESTful: proper HTTP methods (GET=read, POST=create, PUT=replace, PATCH=update, DELETE=delete).
|
|
53
|
+
- Status codes: 200 OK, 201 Created, 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 422 Unprocessable, 500 Internal.
|
|
54
|
+
- Error response schema: \`{ error: { code: string, message: string, details?: object } }\`
|
|
55
|
+
- Pagination on all list endpoints: \`?page=1&limit=20\` → response includes \`{ data, total, page, pages }\`.
|
|
56
|
+
- Version APIs: \`/api/v1/\` from day 1.
|
|
57
|
+
- Rate limiting: document in API spec, return 429 Too Many Requests.
|
|
58
|
+
|
|
59
|
+
## Service Layer Pattern
|
|
60
|
+
\`\`\`
|
|
61
|
+
controller (HTTP) → service (business logic) → repository (data access) → DB
|
|
62
|
+
\`\`\`
|
|
63
|
+
- Controllers: parse request, call service, format response. ZERO logic.
|
|
64
|
+
- Services: all business rules, validation, orchestration. Testable without HTTP.
|
|
65
|
+
- Repositories: data access only. No business logic. Swappable.
|
|
66
|
+
|
|
67
|
+
## Error Handling
|
|
68
|
+
- Custom error classes: \`NotFoundError\`, \`ValidationError\`, \`AuthError\`, \`ConflictError\`.
|
|
69
|
+
- Global error handler catches and formats. Services throw typed errors.
|
|
70
|
+
- Never return 200 with an error body. Use proper status codes.
|
|
71
|
+
|
|
72
|
+
## Database
|
|
73
|
+
- Migrations: timestamped, reversible (UP + DOWN), idempotent.
|
|
74
|
+
- Every table: \`id\` (UUID or auto-increment), \`created_at\`, \`updated_at\`.
|
|
75
|
+
- Foreign keys on every relationship. Indexes on every query predicate.
|
|
76
|
+
- Soft delete (\`deleted_at\`) for user-facing data. Hard delete only for ephemeral data.
|
|
77
|
+
- Connection pooling. Never open/close per request.
|
|
78
|
+
|
|
79
|
+
## Async & Performance
|
|
80
|
+
- N+1 queries: detect and eliminate. Use \`JOIN\` or batch loading.
|
|
81
|
+
- Long operations: queue them (background job). Never block the request.
|
|
82
|
+
- Cache strategy: define TTL per endpoint. Invalidate on write.
|
|
83
|
+
- API response time budget: p95 < 200ms.
|
|
84
|
+
`, 'utf-8');
|
|
85
|
+
// ══════════════════════════════════════════
|
|
86
|
+
// FRONTEND SKILLS — loaded when building frontend
|
|
87
|
+
// ══════════════════════════════════════════
|
|
88
|
+
writeFileSync(join(d, 'skills_frontend.md'), `# Frontend Engineering Skills
|
|
89
|
+
|
|
90
|
+
## Components
|
|
91
|
+
- Max 150 lines per component. Split smart (logic) vs dumb (display).
|
|
92
|
+
- State flows down (props). Events flow up (callbacks). No prop drilling > 2 levels.
|
|
93
|
+
- Every component handles 4 states: loading, empty, success, error.
|
|
94
|
+
- No inline styles. Use design tokens, CSS variables, or utility classes (Tailwind).
|
|
95
|
+
- Accessibility: semantic HTML, ARIA labels, keyboard navigation, focus management.
|
|
96
|
+
|
|
97
|
+
## State Management
|
|
98
|
+
- Local state first (useState). Lift only when 2+ components need the same data.
|
|
99
|
+
- Server state: use React Query/SWR/TanStack. Don't put API data in global state.
|
|
100
|
+
- URL is state: filters, pagination, tabs belong in the URL (shareable, bookmarkable).
|
|
101
|
+
|
|
102
|
+
## Performance
|
|
103
|
+
- Core Web Vitals targets: LCP < 2.5s, FID < 100ms, CLS < 0.1.
|
|
104
|
+
- Images: lazy loading, proper sizing, WebP/AVIF format, width+height attributes.
|
|
105
|
+
- Bundle: code-split per route. No single 500KB bundle.
|
|
106
|
+
- Fonts: \`font-display: swap\`. Preload critical fonts.
|
|
107
|
+
|
|
108
|
+
## Forms
|
|
109
|
+
- Validation: client-side for UX, server-side for security. Both. Always.
|
|
110
|
+
- Error messages: what went wrong + how to fix it. Not just "Invalid input."
|
|
111
|
+
- Disable submit button during submission. Show loading state.
|
|
112
|
+
- Preserve user input on error. Never clear the form on validation failure.
|
|
113
|
+
|
|
114
|
+
## Mobile / Responsive
|
|
115
|
+
- Mobile-first CSS: default styles = mobile, \`@media (min-width)\` for larger screens.
|
|
116
|
+
- Touch targets: minimum 44x44px. No tiny buttons.
|
|
117
|
+
- Test on real device widths: 375px (iPhone SE), 390px (iPhone 14), 768px (iPad).
|
|
118
|
+
- No horizontal scrolling. Ever.
|
|
119
|
+
`, 'utf-8');
|
|
120
|
+
// ══════════════════════════════════════════
|
|
121
|
+
// UI/UX SKILLS — loaded when designing/building UI
|
|
122
|
+
// ══════════════════════════════════════════
|
|
123
|
+
writeFileSync(join(d, 'skills_uiux.md'), `# UI/UX Skills
|
|
124
|
+
|
|
125
|
+
## Design Principles (Dieter Rams — Less but Better)
|
|
126
|
+
- Remove until only the essential remains. If it doesn't serve the user's intent, delete it.
|
|
127
|
+
- Max 3 primary actions per screen. One should be obviously the main one.
|
|
128
|
+
- Consistency: same action = same pattern everywhere. Don't invent new UI for existing patterns.
|
|
129
|
+
- Progressive disclosure: show the minimum, reveal details on demand.
|
|
130
|
+
|
|
131
|
+
## Layout
|
|
132
|
+
- Visual hierarchy: size, weight, color, spacing — in that order of impact.
|
|
133
|
+
- Whitespace is a feature. Dense UI = cognitive overload.
|
|
134
|
+
- Alignment: everything on a grid. No "close enough."
|
|
135
|
+
- Z-pattern (landing pages) or F-pattern (content pages) for reading flow.
|
|
136
|
+
|
|
137
|
+
## Colors & Typography
|
|
138
|
+
- Max 2 font families. One for headings, one for body. Or one for everything.
|
|
139
|
+
- Type scale: 12 / 14 / 16 / 18 / 20 / 24 / 30 / 36 / 48. Don't invent random sizes.
|
|
140
|
+
- Color: one primary, one secondary, one danger, one success, grays for everything else.
|
|
141
|
+
- Contrast ratio: 4.5:1 minimum for text (WCAG AA). Use a contrast checker.
|
|
142
|
+
|
|
143
|
+
## Interaction
|
|
144
|
+
- Feedback for every action: click → visual response within 100ms.
|
|
145
|
+
- Loading states: skeleton screens > spinners > blank pages.
|
|
146
|
+
- Error states: explain what happened, why, and how to fix it. With a clear action button.
|
|
147
|
+
- Empty states: not just "No data." Explain what this page will show and how to get started.
|
|
148
|
+
|
|
149
|
+
## Mobile PWA
|
|
150
|
+
- 60fps scrolling. Test on mid-range devices, not just your MacBook.
|
|
151
|
+
- Bottom navigation for primary actions (thumb zone). Not top menus.
|
|
152
|
+
- Swipe gestures for common actions (back, delete, archive) — but always with a button fallback.
|
|
153
|
+
- Offline: show cached data + "You're offline" banner. Don't blank the screen.
|
|
154
|
+
`, 'utf-8');
|
|
155
|
+
// ══════════════════════════════════════════
|
|
156
|
+
// DATA SKILLS — loaded when designing data layer
|
|
157
|
+
// ══════════════════════════════════════════
|
|
158
|
+
writeFileSync(join(d, 'skills_data.md'), `# Data Engineering Skills
|
|
159
|
+
|
|
160
|
+
## Schema Design
|
|
161
|
+
- 3NF minimum. Denormalize only with documented reason (performance, read pattern).
|
|
162
|
+
- Every relationship has a foreign key constraint. No orphaned records.
|
|
163
|
+
- Naming: \`snake_case\` for tables and columns. Plural for tables (\`users\`, not \`user\`).
|
|
164
|
+
- Boolean columns: \`is_active\`, \`has_access\`. Verb prefix.
|
|
165
|
+
- Timestamp columns: \`_at\` suffix (\`created_at\`, \`updated_at\`, \`deleted_at\`).
|
|
166
|
+
- Enum columns: use DB-level enums or check constraints. Not free text.
|
|
167
|
+
|
|
168
|
+
## Queries
|
|
169
|
+
- SELECT only the columns you need. No \`SELECT *\` in production code.
|
|
170
|
+
- Every WHERE clause: check if an index exists. Add one if not.
|
|
171
|
+
- JOIN: prefer explicit INNER/LEFT JOIN over implicit comma-joins.
|
|
172
|
+
- Explain plan: run on every complex query before shipping.
|
|
173
|
+
- N+1: if you query inside a loop, you have a bug.
|
|
174
|
+
|
|
175
|
+
## Migrations
|
|
176
|
+
- One migration per logical change. Not one giant migration.
|
|
177
|
+
- Every UP has a DOWN. Test both.
|
|
178
|
+
- No destructive changes without a backup plan: rename → create new + migrate → drop old.
|
|
179
|
+
- Naming: \`YYYYMMDDHHMMSS_description.sql\` for ordering.
|
|
180
|
+
|
|
181
|
+
## Data Quality
|
|
182
|
+
- Null strategy: define per column. \`NOT NULL\` by default, nullable only when intentional.
|
|
183
|
+
- Validation at ingestion point. Never trust upstream data.
|
|
184
|
+
- Referential integrity: FK constraints, not "we'll check in the app."
|
|
185
|
+
- Audit trail: who changed what, when. At minimum \`updated_by\` + \`updated_at\`.
|
|
186
|
+
`, 'utf-8');
|
|
187
|
+
// ══════════════════════════════════════════
|
|
188
|
+
// SECURITY SKILLS — loaded during security review
|
|
189
|
+
// ══════════════════════════════════════════
|
|
190
|
+
writeFileSync(join(d, 'skills_security.md'), `# Security Skills
|
|
191
|
+
|
|
192
|
+
## OWASP Top 10 Checklist
|
|
193
|
+
- [ ] Injection: parameterized queries. No string concatenation for SQL.
|
|
194
|
+
- [ ] Broken Auth: bcrypt/argon2, JWT short expiry, refresh rotation, rate limiting on login.
|
|
195
|
+
- [ ] Sensitive Data Exposure: encrypt PII at rest (AES-256-GCM), TLS 1.3 in transit.
|
|
196
|
+
- [ ] XXE: disable external entity processing in XML parsers.
|
|
197
|
+
- [ ] Broken Access Control: check permissions server-side on every request. Never trust the client.
|
|
198
|
+
- [ ] Security Misconfiguration: no default credentials, no debug mode in production, no verbose errors exposed.
|
|
199
|
+
- [ ] XSS: escape all output. Use framework auto-escaping. CSP headers.
|
|
200
|
+
- [ ] Insecure Deserialization: validate and sanitize all incoming data structures.
|
|
201
|
+
- [ ] Known Vulnerabilities: audit dependencies weekly (\`npm audit\`, \`snyk\`).
|
|
202
|
+
- [ ] Insufficient Logging: log auth events, access failures, data modifications. Not PII.
|
|
203
|
+
|
|
204
|
+
## Auth Patterns
|
|
205
|
+
- Passwords: bcrypt (cost 12+) or argon2id. Never MD5/SHA for passwords.
|
|
206
|
+
- JWT: sign with RS256 or ES256. Short expiry (15min). Refresh tokens: single-use, stored server-side, rotate on use.
|
|
207
|
+
- Sessions: httpOnly + secure + sameSite cookies. No tokens in localStorage.
|
|
208
|
+
- MFA: TOTP (Google Authenticator style) or WebAuthn. SMS as fallback only.
|
|
209
|
+
- Rate limiting: 5 failed logins → account lockout for 15min. Exponential backoff.
|
|
210
|
+
|
|
211
|
+
## Data Protection
|
|
212
|
+
- Encryption at rest: AES-256-GCM for PII columns or full-disk encryption.
|
|
213
|
+
- Encryption in transit: TLS 1.3 minimum. HSTS header. No mixed content.
|
|
214
|
+
- Key management: rotate every 90 days. Store in vault (AWS KMS, HashiCorp Vault), never in code.
|
|
215
|
+
- Logs: sanitize PII before logging. No passwords, tokens, or personal data in log output.
|
|
216
|
+
- Backups: encrypted, tested monthly, stored in separate region.
|
|
217
|
+
|
|
218
|
+
## Headers
|
|
219
|
+
\`\`\`
|
|
220
|
+
Strict-Transport-Security: max-age=31536000; includeSubDomains
|
|
221
|
+
Content-Security-Policy: default-src 'self'
|
|
222
|
+
X-Content-Type-Options: nosniff
|
|
223
|
+
X-Frame-Options: DENY
|
|
224
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
225
|
+
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
226
|
+
\`\`\`
|
|
227
|
+
`, 'utf-8');
|
|
228
|
+
// ══════════════════════════════════════════
|
|
229
|
+
// MOBILE SKILLS — loaded when building mobile/PWA
|
|
230
|
+
// ══════════════════════════════════════════
|
|
231
|
+
writeFileSync(join(d, 'skills_mobile.md'), `# Mobile / PWA Skills
|
|
232
|
+
|
|
233
|
+
## Performance
|
|
234
|
+
- 60fps: measure on mid-range devices. Avoid layout thrashing.
|
|
235
|
+
- Bundle: < 200KB initial JS. Code-split aggressively per route.
|
|
236
|
+
- Images: responsive srcset, lazy loading, AVIF/WebP with fallback.
|
|
237
|
+
- Animations: CSS transforms + opacity only (GPU-composited). No animating width/height/top/left.
|
|
238
|
+
- Service worker: precache critical assets. Cache-first for static, network-first for API.
|
|
239
|
+
|
|
240
|
+
## Offline-First
|
|
241
|
+
- App must render without network. Show cached data.
|
|
242
|
+
- Queue actions offline, sync when back online (optimistic UI).
|
|
243
|
+
- "You're offline" indicator: visible but not blocking.
|
|
244
|
+
- Conflict resolution strategy: last-write-wins or prompt user.
|
|
245
|
+
|
|
246
|
+
## PWA Requirements
|
|
247
|
+
- \`manifest.json\`: name, short_name, icons (192 + 512), start_url, display: standalone.
|
|
248
|
+
- Service worker: registered, handles fetch events, updates cleanly.
|
|
249
|
+
- HTTPS required. No PWA without it.
|
|
250
|
+
- Install prompt: defer until user engagement (don't show on first visit).
|
|
251
|
+
|
|
252
|
+
## Touch & Mobile UX
|
|
253
|
+
- Touch targets: 44x44px minimum. 48px preferred.
|
|
254
|
+
- Bottom navigation: primary actions within thumb reach.
|
|
255
|
+
- Pull-to-refresh for list screens.
|
|
256
|
+
- Haptic feedback on critical actions (iOS: UIImpactFeedbackGenerator, web: navigator.vibrate).
|
|
257
|
+
- Deep link every screen: any URL should open the right view.
|
|
258
|
+
- Handle: slow network, no network, low battery, background/foreground transitions.
|
|
259
|
+
`, 'utf-8');
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,2CAA2C;AAC3C,6DAA6D;AAC7D,kEAAkE;AAElE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElC,6CAA6C;IAC7C,mDAAmD;IACnD,uBAAuB;IACvB,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9C,EAAE,OAAO,CAAC,CAAC;IAEV,6CAA6C;IAC7C,gDAAgD;IAChD,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC7C,EAAE,OAAO,CAAC,CAAC;IAEV,6CAA6C;IAC7C,kDAAkD;IAClD,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9C,EAAE,OAAO,CAAC,CAAC;IAEV,6CAA6C;IAC7C,mDAAmD;IACnD,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B1C,EAAE,OAAO,CAAC,CAAC;IAEV,6CAA6C;IAC7C,iDAAiD;IACjD,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B1C,EAAE,OAAO,CAAC,CAAC;IAEV,6CAA6C;IAC7C,kDAAkD;IAClD,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC9C,EAAE,OAAO,CAAC,CAAC;IAEV,6CAA6C;IAC7C,kDAAkD;IAClD,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B5C,EAAE,OAAO,CAAC,CAAC;AACZ,CAAC"}
|
package/dist/cli/update.js
CHANGED
|
@@ -3,6 +3,7 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { AGENT_REGISTRY } from '../agents/registry.js';
|
|
4
4
|
import { getAgentCount } from '../agents/registry.js';
|
|
5
5
|
import { installAllIDEs, writeTeamFiles } from './ide-rules.js';
|
|
6
|
+
import { writeSkills } from './skills.js';
|
|
6
7
|
import { writeFileSync } from 'node:fs';
|
|
7
8
|
import { banner } from '../ui/terminal.js';
|
|
8
9
|
function writeAgentPersonas(cp) {
|
|
@@ -49,6 +50,8 @@ export async function updateCommand() {
|
|
|
49
50
|
console.log(' ✅ .citadel/agents/ — 42 agent personas updated');
|
|
50
51
|
writeTeamFiles(cp);
|
|
51
52
|
console.log(' ✅ .citadel/teams/ — 10 team files updated');
|
|
53
|
+
writeSkills(cp);
|
|
54
|
+
console.log(' ✅ .citadel/skills/ — 7 engineering standards updated');
|
|
52
55
|
installAllIDEs(pp);
|
|
53
56
|
console.log(' ✅ CLAUDE.md — updated');
|
|
54
57
|
console.log(' ✅ .cursorrules — updated');
|
package/dist/cli/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
|