arboris-cli 1.1.0 → 1.1.1

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.mjs CHANGED
@@ -229,6 +229,10 @@ function formatStackList(manifest) {
229
229
  return ` ${stack.label.padEnd(14)} (${stack.id}) \u2014 ${count} skills`;
230
230
  }).join("\n");
231
231
  }
232
+ function hasSkillId(manifest, skillId) {
233
+ if (manifest.skills?.includes(skillId)) return true;
234
+ return Object.values(manifest.skillsByStack).some((ids) => ids.includes(skillId));
235
+ }
232
236
 
233
237
  // ../../cli/main.ts
234
238
  var PACKAGE_ROOT2 = resolvePackageRoot(import.meta.url);
@@ -238,10 +242,12 @@ function printHelp() {
238
242
 
239
243
  Usage:
240
244
  npx arboris-cli <techno> [options]
245
+ npx arboris-cli install <skill-id> [options]
241
246
  npx arboris-cli list
242
247
 
243
248
  Exemples:
244
249
  npx arboris-cli node
250
+ npx arboris-cli install fastapi-patterns
245
251
  npx arboris-cli node.js --agent cursor
246
252
  npx arboris-cli typescript --force
247
253
 
@@ -301,7 +307,7 @@ function parseArgs(argv) {
301
307
  }
302
308
  positional.push(arg);
303
309
  }
304
- return { command: positional[0] ?? null, options };
310
+ return { command: positional[0] ?? null, target: positional[1] ?? null, options };
305
311
  }
306
312
  async function runList() {
307
313
  const manifest = await loadCliManifest();
@@ -309,7 +315,34 @@ async function runList() {
309
315
  console.log(formatStackList(manifest));
310
316
  console.log("\nExemple: npx arboris-cli node");
311
317
  }
312
- async function runInstall(stackInput, options) {
318
+ async function runInstallSkill(skillId, options) {
319
+ const manifest = await loadCliManifest();
320
+ if (!hasSkillId(manifest, skillId)) {
321
+ console.error(`Skill inconnu: "${skillId}"`);
322
+ process.exit(1);
323
+ }
324
+ console.log(
325
+ `${options.dryRun ? "[dry-run] " : ""}Installation de ${skillId} \u2192 ${options.agent} (${options.cwd})`
326
+ );
327
+ if (options.dryRun) return;
328
+ const result = await installSkillToWorkspace({
329
+ skillId,
330
+ agent: options.agent,
331
+ workspaceRoot: options.cwd,
332
+ skillsDir: SKILLS_DIR,
333
+ force: options.force
334
+ });
335
+ if (!result.ok) {
336
+ console.error(`\xC9chec: ${result.error}`);
337
+ process.exit(1);
338
+ }
339
+ if (result.skipped) {
340
+ console.log(`\u2298 D\xE9j\xE0 pr\xE9sent: ${result.path}`);
341
+ return;
342
+ }
343
+ console.log(`\u2713 ${result.path}`);
344
+ }
345
+ async function runInstallStack(stackInput, options) {
313
346
  const manifest = await loadCliManifest();
314
347
  const stackId = resolveStackId(stackInput, manifest);
315
348
  if (!stackId) {
@@ -364,7 +397,7 @@ Termin\xE9: ${summary.installed.length} install\xE9s, ${summary.skipped.length}
364
397
  }
365
398
  async function main() {
366
399
  try {
367
- const { command, options } = parseArgs(process.argv.slice(2));
400
+ const { command, target, options } = parseArgs(process.argv.slice(2));
368
401
  if (options.help || !command) {
369
402
  printHelp();
370
403
  process.exit(command ? 0 : 1);
@@ -373,7 +406,12 @@ async function main() {
373
406
  await runList();
374
407
  return;
375
408
  }
376
- await runInstall(command, options);
409
+ if (command === "install") {
410
+ if (!target) throw new Error("Usage: npx arboris-cli install <skill-id>");
411
+ await runInstallSkill(target, options);
412
+ return;
413
+ }
414
+ await runInstallStack(command, options);
377
415
  } catch (error) {
378
416
  console.error(error instanceof Error ? error.message : String(error));
379
417
  process.exit(1);
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-07-02T13:29:05.519Z",
3
+ "generatedAt": "2026-07-02T13:42:29.838Z",
4
4
  "stacks": [
5
5
  {
6
6
  "id": "node",
@@ -55,6 +55,285 @@
55
55
  "label": "Prisma"
56
56
  }
57
57
  ],
58
+ "skills": [
59
+ "accessibility",
60
+ "agent-architecture-audit",
61
+ "agent-eval",
62
+ "agent-harness-construction",
63
+ "agent-introspection-debugging",
64
+ "agent-payment-x402",
65
+ "agent-self-evaluation",
66
+ "agent-sort",
67
+ "agentic-engineering",
68
+ "agentic-os",
69
+ "ai-first-engineering",
70
+ "ai-regression-testing",
71
+ "android-clean-architecture",
72
+ "angular-developer",
73
+ "api-connector-builder",
74
+ "api-design",
75
+ "architecture-decision-records",
76
+ "article-writing",
77
+ "automation-audit-ops",
78
+ "autonomous-agent-harness",
79
+ "autonomous-loops",
80
+ "backend-patterns",
81
+ "benchmark",
82
+ "benchmark-methodology",
83
+ "benchmark-optimization-loop",
84
+ "blender-motion-state-inspection",
85
+ "blueprint",
86
+ "brand-discovery",
87
+ "brand-voice",
88
+ "browser-qa",
89
+ "bun-runtime",
90
+ "canary-watch",
91
+ "carrier-relationship-management",
92
+ "cisco-ios-patterns",
93
+ "ck",
94
+ "claude-devfleet",
95
+ "click-path-audit",
96
+ "clickhouse-io",
97
+ "code-tour",
98
+ "codebase-onboarding",
99
+ "codehealth-mcp",
100
+ "coding-standards",
101
+ "competitive-platform-analysis",
102
+ "competitive-report-structure",
103
+ "compose-multiplatform-patterns",
104
+ "config-gc",
105
+ "configure-ecc",
106
+ "connections-optimizer",
107
+ "content-engine",
108
+ "content-hash-cache-pattern",
109
+ "context-budget",
110
+ "continuous-agent-loop",
111
+ "continuous-learning",
112
+ "continuous-learning-v2",
113
+ "cost-aware-llm-pipeline",
114
+ "cost-tracking",
115
+ "council",
116
+ "cpp-coding-standards",
117
+ "cpp-testing",
118
+ "crosspost",
119
+ "csharp-testing",
120
+ "customer-billing-ops",
121
+ "customs-trade-compliance",
122
+ "dart-flutter-patterns",
123
+ "dashboard-builder",
124
+ "data-scraper-agent",
125
+ "data-throughput-accelerator",
126
+ "database-migrations",
127
+ "deep-research",
128
+ "defi-amm-security",
129
+ "delivery-gate",
130
+ "deployment-patterns",
131
+ "design-system",
132
+ "django-celery",
133
+ "django-patterns",
134
+ "django-security",
135
+ "django-tdd",
136
+ "django-verification",
137
+ "dmux-workflows",
138
+ "docker-patterns",
139
+ "documentation-lookup",
140
+ "dotnet-patterns",
141
+ "dynamic-workflow-mode",
142
+ "e2e-testing",
143
+ "ecc-guide",
144
+ "ecc-recipes",
145
+ "ecc-tools-cost-audit",
146
+ "email-ops",
147
+ "energy-procurement",
148
+ "enterprise-agent-ops",
149
+ "error-handling",
150
+ "eval-harness",
151
+ "evm-token-decimals",
152
+ "exa-search",
153
+ "fal-ai-media",
154
+ "fastapi-patterns",
155
+ "finance-billing-ops",
156
+ "flox-environments",
157
+ "flutter-dart-code-review",
158
+ "foundation-models-on-device",
159
+ "frontend-a11y",
160
+ "frontend-design-direction",
161
+ "frontend-patterns",
162
+ "frontend-slides",
163
+ "fsharp-testing",
164
+ "gan-style-harness",
165
+ "gateguard",
166
+ "generating-python-installer",
167
+ "gget",
168
+ "git-workflow",
169
+ "github-ops",
170
+ "golang-patterns",
171
+ "golang-testing",
172
+ "google-workspace-ops",
173
+ "growth-log",
174
+ "healthcare-cdss-patterns",
175
+ "healthcare-emr-patterns",
176
+ "healthcare-eval-harness",
177
+ "healthcare-phi-compliance",
178
+ "hermes-imports",
179
+ "hexagonal-architecture",
180
+ "hipaa-compliance",
181
+ "homelab-network-readiness",
182
+ "homelab-network-setup",
183
+ "homelab-pihole-dns",
184
+ "homelab-vlan-segmentation",
185
+ "homelab-wireguard-vpn",
186
+ "hookify-rules",
187
+ "inherit-legacy-style",
188
+ "intent-driven-development",
189
+ "inventory-demand-planning",
190
+ "investor-materials",
191
+ "investor-outreach",
192
+ "ios-icon-gen",
193
+ "iterative-retrieval",
194
+ "ito-basket-compare",
195
+ "ito-data-atlas-agent",
196
+ "ito-market-intelligence",
197
+ "ito-trade-planner",
198
+ "java-coding-standards",
199
+ "jira-integration",
200
+ "jpa-patterns",
201
+ "knowledge-ops",
202
+ "kotlin-coroutines-flows",
203
+ "kotlin-exposed-patterns",
204
+ "kotlin-ktor-patterns",
205
+ "kotlin-patterns",
206
+ "kotlin-testing",
207
+ "kubernetes-patterns",
208
+ "laravel-patterns",
209
+ "laravel-plugin-discovery",
210
+ "laravel-security",
211
+ "laravel-tdd",
212
+ "laravel-verification",
213
+ "latency-critical-systems",
214
+ "lead-intelligence",
215
+ "liquid-glass-design",
216
+ "literature-review",
217
+ "llm-trading-agent-security",
218
+ "logistics-exception-management",
219
+ "loop-design-check",
220
+ "mailtrap-email-integration",
221
+ "make-interfaces-feel-better",
222
+ "manim-video",
223
+ "market-research",
224
+ "marketing-campaign",
225
+ "mcp-server-patterns",
226
+ "messages-ops",
227
+ "ml-adoption-playbook",
228
+ "mle-workflow",
229
+ "motion-advanced",
230
+ "motion-foundations",
231
+ "motion-patterns",
232
+ "motion-ui",
233
+ "mysql-patterns",
234
+ "nanoclaw-repl",
235
+ "nestjs-patterns",
236
+ "netmiko-ssh-automation",
237
+ "network-bgp-diagnostics",
238
+ "network-config-validation",
239
+ "network-interface-health",
240
+ "nextjs-turbopack",
241
+ "nodejs-keccak256",
242
+ "nutrient-document-processing",
243
+ "nuxt4-patterns",
244
+ "openclaw-persona-forge",
245
+ "opensource-pipeline",
246
+ "orch-add-feature",
247
+ "orch-build-mvp",
248
+ "orch-change-feature",
249
+ "orch-fix-defect",
250
+ "orch-pipeline",
251
+ "orch-refine-code",
252
+ "parallel-execution-optimizer",
253
+ "perl-patterns",
254
+ "perl-security",
255
+ "perl-testing",
256
+ "plan-orchestrate",
257
+ "plankton-code-quality",
258
+ "postgres-patterns",
259
+ "prediction-market-oracle-research",
260
+ "prediction-market-risk-review",
261
+ "prisma-patterns",
262
+ "product-capability",
263
+ "product-lens",
264
+ "production-audit",
265
+ "production-scheduling",
266
+ "project-flow-ops",
267
+ "prompt-optimizer",
268
+ "pubmed-database",
269
+ "python-patterns",
270
+ "python-testing",
271
+ "pytorch-patterns",
272
+ "quality-nonconformance",
273
+ "quarkus-patterns",
274
+ "quarkus-security",
275
+ "quarkus-tdd",
276
+ "quarkus-verification",
277
+ "ralphinho-rfc-pipeline",
278
+ "react-native-patterns",
279
+ "react-patterns",
280
+ "react-performance",
281
+ "react-testing",
282
+ "recsys-pipeline-architect",
283
+ "recursive-decision-ledger",
284
+ "redis-patterns",
285
+ "regex-vs-llm-structured-text",
286
+ "remotion-video-creation",
287
+ "repo-scan",
288
+ "research-ops",
289
+ "returns-reverse-logistics",
290
+ "rules-distill",
291
+ "rust-patterns",
292
+ "rust-testing",
293
+ "safety-guard",
294
+ "santa-method",
295
+ "scholar-evaluation",
296
+ "search-first",
297
+ "security-bounty-hunter",
298
+ "security-review",
299
+ "security-scan",
300
+ "seo",
301
+ "skill-comply",
302
+ "skill-scout",
303
+ "skill-stocktake",
304
+ "social-graph-ranker",
305
+ "social-publisher",
306
+ "springboot-patterns",
307
+ "springboot-security",
308
+ "springboot-tdd",
309
+ "springboot-verification",
310
+ "strategic-compact",
311
+ "swift-actor-persistence",
312
+ "swift-concurrency-6-2",
313
+ "swift-protocol-di-testing",
314
+ "swiftui-patterns",
315
+ "taste",
316
+ "tdd-workflow",
317
+ "team-agent-orchestration",
318
+ "team-builder",
319
+ "terminal-ops",
320
+ "tinystruct-patterns",
321
+ "token-budget-advisor",
322
+ "ui-demo",
323
+ "ui-to-vue",
324
+ "uncloud",
325
+ "unified-notifications-ops",
326
+ "uspto-database",
327
+ "verification-loop",
328
+ "video-editing",
329
+ "videodb",
330
+ "visa-doc-translate",
331
+ "vite-patterns",
332
+ "vue-patterns",
333
+ "windows-desktop-e2e",
334
+ "workspace-surface-audit",
335
+ "x-api"
336
+ ],
58
337
  "skillsByStack": {
59
338
  "node": [
60
339
  "ai-regression-testing",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arboris-cli",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Installe les skills IA recommandés pour ta stack (Node, React, TypeScript…).",
5
5
  "type": "module",
6
6
  "bin": {