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 +42 -4
- package/manifest.json +280 -1
- package/package.json +1 -1
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
|
|
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
|
-
|
|
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
|
|
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",
|