@ranimontagna/agent-toolkit 0.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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +426 -0
  3. package/dist/bin/agent-toolkit.d.ts +2 -0
  4. package/dist/bin/agent-toolkit.js +14 -0
  5. package/dist/bin/agent-toolkit.js.map +1 -0
  6. package/dist/src/args.d.ts +1 -0
  7. package/dist/src/args.js +152 -0
  8. package/dist/src/args.js.map +1 -0
  9. package/dist/src/checksum.d.ts +2 -0
  10. package/dist/src/checksum.js +9 -0
  11. package/dist/src/checksum.js.map +1 -0
  12. package/dist/src/context.d.ts +3 -0
  13. package/dist/src/context.js +10 -0
  14. package/dist/src/context.js.map +1 -0
  15. package/dist/src/installers/caveman.d.ts +1 -0
  16. package/dist/src/installers/caveman.js +23 -0
  17. package/dist/src/installers/caveman.js.map +1 -0
  18. package/dist/src/installers/frontend-skills.d.ts +1 -0
  19. package/dist/src/installers/frontend-skills.js +82 -0
  20. package/dist/src/installers/frontend-skills.js.map +1 -0
  21. package/dist/src/installers/graphify.d.ts +1 -0
  22. package/dist/src/installers/graphify.js +58 -0
  23. package/dist/src/installers/graphify.js.map +1 -0
  24. package/dist/src/installers/gsd.d.ts +1 -0
  25. package/dist/src/installers/gsd.js +19 -0
  26. package/dist/src/installers/gsd.js.map +1 -0
  27. package/dist/src/installers/rtk.d.ts +1 -0
  28. package/dist/src/installers/rtk.js +158 -0
  29. package/dist/src/installers/rtk.js.map +1 -0
  30. package/dist/src/installers/superpowers.d.ts +1 -0
  31. package/dist/src/installers/superpowers.js +73 -0
  32. package/dist/src/installers/superpowers.js.map +1 -0
  33. package/dist/src/logger.d.ts +18 -0
  34. package/dist/src/logger.js +35 -0
  35. package/dist/src/logger.js.map +1 -0
  36. package/dist/src/main.d.ts +1 -0
  37. package/dist/src/main.js +104 -0
  38. package/dist/src/main.js.map +1 -0
  39. package/dist/src/menu.d.ts +1 -0
  40. package/dist/src/menu.js +98 -0
  41. package/dist/src/menu.js.map +1 -0
  42. package/dist/src/provenance.d.ts +1 -0
  43. package/dist/src/provenance.js +44 -0
  44. package/dist/src/provenance.js.map +1 -0
  45. package/dist/src/runtimes.d.ts +7 -0
  46. package/dist/src/runtimes.js +123 -0
  47. package/dist/src/runtimes.js.map +1 -0
  48. package/dist/src/skills.d.ts +12 -0
  49. package/dist/src/skills.js +247 -0
  50. package/dist/src/skills.js.map +1 -0
  51. package/dist/src/state.d.ts +51 -0
  52. package/dist/src/state.js +137 -0
  53. package/dist/src/state.js.map +1 -0
  54. package/dist/src/system.d.ts +21 -0
  55. package/dist/src/system.js +109 -0
  56. package/dist/src/system.js.map +1 -0
  57. package/dist/src/tool-lock.d.ts +60 -0
  58. package/dist/src/tool-lock.js +109 -0
  59. package/dist/src/tool-lock.js.map +1 -0
  60. package/dist/src/ui.d.ts +3 -0
  61. package/dist/src/ui.js +41 -0
  62. package/dist/src/ui.js.map +1 -0
  63. package/dist/src/usage.d.ts +1 -0
  64. package/dist/src/usage.js +66 -0
  65. package/dist/src/usage.js.map +1 -0
  66. package/package.json +50 -0
  67. package/setup-agent-toolkit.sh +20 -0
  68. package/skills/core/agent-toolkit-maintainer/SKILL.md +68 -0
  69. package/tools.lock.json +84 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ranielli Montagna
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,426 @@
1
+ # Agent Toolkit
2
+
3
+ Personal toolkit for setting up AI coding agents with the tools I use most:
4
+ RTK, Caveman, Superpowers, Graphify, GSD, third-party frontend skills and
5
+ bundled personal skills.
6
+
7
+ The installer source is written in TypeScript and compiled to a dependency-free
8
+ Node CLI in `dist/`. The Bash file is kept only as a compatibility wrapper, so
9
+ existing commands still work after building the project.
10
+
11
+ The repository includes CI, security gates, MIT licensing, portable agent
12
+ instructions and tests for the installer flows.
13
+
14
+ ## Runtimes
15
+
16
+ | Runtime | Support |
17
+ |---|---|
18
+ | Claude Code | Plugins and skills |
19
+ | Codex CLI | Plugins, skills and local automation |
20
+ | OpenCode | Skills plus package-driven tools |
21
+ | Gemini CLI | Extensions and native Agent Skills install |
22
+
23
+ ## Tools
24
+
25
+ | Tool | What it adds |
26
+ |---|---|
27
+ | RTK | Token-aware shell proxy for coding-agent sessions |
28
+ | Caveman | Terse response mode and optional agent integrations |
29
+ | Superpowers | Planning, TDD, debugging, review and delivery workflows |
30
+ | Graphify | Queryable knowledge graphs for codebases, docs and project context |
31
+ | GSD | Phase-based planning, execution, verification and project control |
32
+ | Frontend Skills | Third-party design skills installed through Agent Skills CLI |
33
+ | Custom Skills | Personal skills bundled in this repository |
34
+
35
+ Superpowers is installed automatically for Claude Code, Codex CLI and Gemini CLI.
36
+ OpenCode support is intentionally not automated yet for Superpowers because the
37
+ upstream install flow is not a stable single command. Caveman, GSD, Frontend
38
+ Skills and Custom Skills can target Claude Code, Codex CLI, OpenCode and Gemini
39
+ CLI. Graphify is installed through the official `graphifyy` package and
40
+ registers itself for the selected runtimes.
41
+
42
+ ## Repository Layout
43
+
44
+ ```text
45
+ bin/
46
+ agent-toolkit.ts Thin TypeScript entrypoint
47
+ .github/
48
+ workflows/
49
+ ci.yml Quality and security gates
50
+ AGENTS.md Shared project rules for coding agents
51
+ CLAUDE.md Pointer to AGENTS.md for Claude Code
52
+ src/
53
+ main.ts Installer orchestration
54
+ args.ts CLI flag parsing
55
+ menu.ts Interactive selection
56
+ runtimes.ts Runtime CLI checks
57
+ skills.ts Recursive skill discovery and installation
58
+ installers/ Tool-specific installers
59
+ dist/
60
+ bin/
61
+ agent-toolkit.js Compiled CLI used by npm and the wrapper
62
+ setup-agent-toolkit.sh Bash compatibility wrapper
63
+ package.json CLI metadata and test scripts
64
+ tools.lock.json Pinned external tool sources and RTK checksums
65
+ LICENSE MIT license
66
+ skills/
67
+ core/
68
+ agent-toolkit-maintainer/
69
+ SKILL.md
70
+ backend/
71
+ tests/
72
+ unit/
73
+ *.test.ts
74
+ test-agent-toolkit.sh
75
+ ```
76
+
77
+ ## Prerequisites
78
+
79
+ - Node.js 22+ for the full toolkit
80
+ - `npx` for Caveman, GSD and third-party frontend skills
81
+ - `git` for pinned third-party frontend skill sources
82
+ - `npm` when using `--install-missing-clis`
83
+ - `uv` for Graphify, or `pipx` when `GRAPHIFY_INSTALLER=pipx`
84
+ - `tar` or `unzip` only when RTK needs to be downloaded
85
+ - The runtime CLIs you want to target: `claude`, `codex`, `opencode`, and/or `gemini`
86
+
87
+ The installer can install missing selected runtime CLIs through npm when run
88
+ with `--install-missing-clis`.
89
+
90
+ Install development dependencies and build the CLI before running from a clone:
91
+
92
+ ```bash
93
+ npm install
94
+ npm run build
95
+ ```
96
+
97
+ ## Install
98
+
99
+ Run the published package directly:
100
+
101
+ ```bash
102
+ npx -y @ranimontagna/agent-toolkit
103
+ ```
104
+
105
+ Interactive runs ask which tools, runtimes and skill scopes to install. Pressing
106
+ Enter does not silently install the full kit; choose `all` explicitly when that
107
+ is what you want.
108
+
109
+ Run the full kit for Codex in one command:
110
+
111
+ ```bash
112
+ npx -y @ranimontagna/agent-toolkit --all --codex
113
+ ```
114
+
115
+ Run the full kit for every supported runtime:
116
+
117
+ ```bash
118
+ npx -y @ranimontagna/agent-toolkit --all --all-runtimes
119
+ ```
120
+
121
+ From a local clone, install development dependencies and build the CLI first:
122
+
123
+ ```bash
124
+ npm install
125
+ npm run build
126
+ bash setup-agent-toolkit.sh
127
+ ```
128
+
129
+ You can also call the compiled Node CLI directly from a built clone:
130
+
131
+ ```bash
132
+ node dist/bin/agent-toolkit.js
133
+ ```
134
+
135
+ Target one runtime:
136
+
137
+ ```bash
138
+ npx -y @ranimontagna/agent-toolkit --all --codex
139
+ ```
140
+
141
+ Install a single tool:
142
+
143
+ ```bash
144
+ npx -y @ranimontagna/agent-toolkit --gsd-only --all-runtimes
145
+ ```
146
+
147
+ Install Graphify for Codex only:
148
+
149
+ ```bash
150
+ npx -y @ranimontagna/agent-toolkit --graphify-only --codex
151
+ ```
152
+
153
+ Install only third-party frontend design skills for Codex:
154
+
155
+ ```bash
156
+ npx -y @ranimontagna/agent-toolkit --frontend-skills-only --codex
157
+ ```
158
+
159
+ Install only bundled skills into the current project:
160
+
161
+ ```bash
162
+ npx -y @ranimontagna/agent-toolkit --skills-only --all-runtimes --local
163
+ ```
164
+
165
+ Install only React-scoped skills:
166
+
167
+ ```bash
168
+ npx -y @ranimontagna/agent-toolkit --skills-only --codex --skills-scope frontend/react
169
+ ```
170
+
171
+ List available skills and their scope paths:
172
+
173
+ ```bash
174
+ npx -y @ranimontagna/agent-toolkit --skills-list
175
+ ```
176
+
177
+ Install missing selected CLIs before configuring them:
178
+
179
+ ```bash
180
+ npx -y @ranimontagna/agent-toolkit --all --gemini --install-missing-clis
181
+ ```
182
+
183
+ ## Flags
184
+
185
+ ```text
186
+ --all Install every tool without the menu
187
+ --rtk-only Install only RTK
188
+ --caveman-only Install only Caveman
189
+ --superpowers-only Install only Superpowers
190
+ --graphify-only Install only Graphify
191
+ --gsd-only Install only GSD
192
+ --frontend-skills-only Install only third-party frontend skills
193
+ --skills-only Install only Custom Skills
194
+ --no-rtk Skip RTK
195
+ --no-caveman Skip Caveman
196
+ --no-superpowers Skip Superpowers
197
+ --no-graphify Skip Graphify
198
+ --no-gsd Skip GSD
199
+ --no-frontend-skills Skip third-party frontend skills
200
+ --no-skills Skip Custom Skills
201
+
202
+ --all-runtimes Target Claude Code, Codex CLI, OpenCode and Gemini CLI
203
+ --claude Target only Claude Code
204
+ --codex Target only Codex CLI
205
+ --opencode Target only OpenCode
206
+ --gemini Target only Gemini CLI
207
+ --no-claude Skip Claude Code
208
+ --no-codex Skip Codex CLI
209
+ --no-opencode Skip OpenCode
210
+ --no-gemini Skip Gemini CLI
211
+
212
+ --global Install runtime assets into user config directories
213
+ --local Install runtime assets into the current project
214
+ --skills-dir DIR Use another source directory for skills
215
+ --skills-scope SCOPE Install skills under a relative scope path, repeatable
216
+ --skills-list List discovered skills and exit
217
+ --install-missing-clis Install selected runtime CLIs if missing
218
+ --allow-mutable-sources Allow explicit mutable source overrides like @latest
219
+ --help, -h Show help
220
+ ```
221
+
222
+ ## Configuration
223
+
224
+ The installer can be customized with environment variables:
225
+
226
+ ```text
227
+ RTK_INSTALL_DIR RTK binary install directory
228
+ CAVEMAN_PACKAGE Caveman package source
229
+ CAVEMAN_MODE minimal or all
230
+ GRAPHIFY_PACKAGE Python package used to install Graphify
231
+ GRAPHIFY_INSTALLER uv or pipx
232
+ GSD_PACKAGE GSD package source
233
+ SKILLS_CLI_PACKAGE npm package used for third-party skill installs
234
+ GSD_SCOPE global or local
235
+ TOOLS_LOCK_PATH External tool provenance lock path
236
+ ALLOW_MUTABLE_SOURCES Set to 1 to allow mutable source overrides
237
+ CUSTOM_SKILLS_DIR Source directory for custom skills
238
+ SKILLS_SCOPE Comma-separated skill scope filters
239
+ CLAUDE_CLI_PACKAGE npm package used to install Claude Code CLI
240
+ CODEX_CLI_PACKAGE npm package used to install Codex CLI
241
+ OPENCODE_CLI_PACKAGE npm package used to install OpenCode CLI
242
+ GEMINI_CLI_PACKAGE npm package used to install Gemini CLI
243
+ ```
244
+
245
+ Defaults:
246
+
247
+ ```text
248
+ CAVEMAN_PACKAGE=github:JuliusBrussee/caveman#655b7d9c5431f822264b7732e9901c5578ac84cf
249
+ GRAPHIFY_PACKAGE=graphifyy==0.8.31
250
+ GRAPHIFY_INSTALLER=uv
251
+ GSD_PACKAGE=get-shit-done-cc@1.42.3
252
+ SKILLS_CLI_PACKAGE=skills@1.5.10
253
+ CLAUDE_CLI_PACKAGE=@anthropic-ai/claude-code@2.1.162
254
+ CODEX_CLI_PACKAGE=@openai/codex@0.137.0
255
+ OPENCODE_CLI_PACKAGE=opencode-ai@1.15.13
256
+ GEMINI_CLI_PACKAGE=@google/gemini-cli@0.45.0
257
+ ```
258
+
259
+ These defaults come from `tools.lock.json`. Mutable overrides like `@latest`,
260
+ unpinned npm packages, or GitHub package sources without a full commit SHA are
261
+ blocked unless you pass `--allow-mutable-sources` or set
262
+ `ALLOW_MUTABLE_SOURCES=1`.
263
+
264
+ ## External Tool Provenance
265
+
266
+ The CI protects this repository's own dependency graph with `npm audit`,
267
+ registry signature checks, dependency review and Gitleaks. The installer also
268
+ protects tools downloaded later by reading `tools.lock.json` and rejecting
269
+ mutable external sources by default.
270
+
271
+ Current external sources:
272
+
273
+ | Tool | Locked source | Runtime verification |
274
+ |---|---|---|
275
+ | RTK | GitHub release `rtk-ai/rtk@v0.42.1` | Verifies the selected asset SHA-256 before extraction |
276
+ | Caveman | `JuliusBrussee/caveman` at commit `655b7d9c5431f822264b7732e9901c5578ac84cf` | Installs through an immutable GitHub npm spec |
277
+ | Graphify | `graphifyy==0.8.31` | Blocks unpinned package overrides |
278
+ | GSD | `get-shit-done-cc@1.42.3` | Blocks `@latest` unless explicitly allowed |
279
+ | Frontend Skills | `skills@1.5.10`, `pbakaus/impeccable` and `Leonxlnx/taste-skill` at pinned commits | Clones pinned refs, then installs selected skills through Agent Skills CLI |
280
+ | Runtime CLIs | Exact npm versions for Claude, Codex, OpenCode and Gemini | Used when `--install-missing-clis` is enabled |
281
+
282
+ Use `TOOLS_LOCK_PATH=/path/to/tools.lock.json` to test another lock file. Keep
283
+ that file committed if it represents the expected public installer behavior.
284
+
285
+ ## Adding Skills
286
+
287
+ Add personal skills under a scope path:
288
+
289
+ ```text
290
+ skills/<scope>/<skill-name>/SKILL.md
291
+ ```
292
+
293
+ Suggested organization:
294
+
295
+ ```text
296
+ skills/
297
+ core/
298
+ agent-toolkit-maintainer/
299
+ SKILL.md
300
+ frontend/
301
+ react/
302
+ react-component-architecture/
303
+ SKILL.md
304
+ backend/
305
+ node/
306
+ fastify-api-patterns/
307
+ SKILL.md
308
+ go/
309
+ go-service-patterns/
310
+ SKILL.md
311
+ ```
312
+
313
+ The installer discovers `SKILL.md` files recursively. The repository path is
314
+ used only for organization; runtime installs remain flat:
315
+
316
+ ```text
317
+ ~/.codex/skills/react-component-architecture/
318
+ ~/.codex/skills/fastify-api-patterns/
319
+ ~/.codex/skills/go-service-patterns/
320
+ ```
321
+
322
+ Third-party frontend design skills are not bundled as personal skills. The
323
+ `frontend-skills` tool installs them externally:
324
+
325
+ | Runtime folder | Skill name | Source |
326
+ |---|---|---|
327
+ | `impeccable` | `impeccable` | `pbakaus/impeccable`, Apache-2.0 |
328
+ | `design-taste-frontend` | `design-taste-frontend` | `Leonxlnx/taste-skill`, MIT |
329
+
330
+ Each skill should be concise and self-contained:
331
+
332
+ ```markdown
333
+ ---
334
+ name: my-skill
335
+ description: Use when doing a specific kind of task.
336
+ ---
337
+
338
+ # My Skill
339
+
340
+ Follow these steps...
341
+ ```
342
+
343
+ The installer validates the core Agent Skills requirements:
344
+
345
+ - each skill is a directory containing `SKILL.md`;
346
+ - `SKILL.md` starts with YAML frontmatter;
347
+ - `name` and `description` are required;
348
+ - `name` uses lowercase letters, numbers and hyphens only;
349
+ - `description` is non-empty and under 1024 characters.
350
+
351
+ For larger skills, put detailed supporting material in `references/`, scripts in
352
+ `scripts/`, and reusable assets in `assets/`.
353
+
354
+ Use `--skills-scope` to install only a subset:
355
+
356
+ ```bash
357
+ bash setup-agent-toolkit.sh --skills-only --codex --skills-scope backend/node
358
+ ```
359
+
360
+ Gemini CLI uses its native command:
361
+
362
+ ```bash
363
+ gemini skills install skills/<skill-name> --scope user --consent
364
+ ```
365
+
366
+ For local/project installs, the setup uses `--scope workspace`.
367
+
368
+ ## Verification
369
+
370
+ Run the full local check:
371
+
372
+ ```bash
373
+ npm run check
374
+ ```
375
+
376
+ Available quality scripts:
377
+
378
+ ```bash
379
+ npm run build # Compile TypeScript into dist/
380
+ npm run typecheck # Type-check source and unit tests
381
+ npm run lint # Biome lint and format checks
382
+ npm run lint:fix # Apply safe Biome fixes
383
+ npm run format # Format with Biome
384
+ npm run security # npm vulnerability audit and registry signature checks
385
+ npm run security:audit # Fail on moderate+ vulnerable dependencies
386
+ npm run security:signatures # Verify npm signatures and attestations
387
+ npm run test:unit # Vitest unit tests
388
+ npm run test:integration # Shell integration test
389
+ npm test # Unit + integration tests
390
+ ```
391
+
392
+ The shell integration test validates the wrapper, flags, fake runtime CLIs,
393
+ installer command wiring, skill discovery and public-safe reference checks.
394
+
395
+ The GitHub Actions CI runs four gates:
396
+
397
+ - `Check`: lint, typecheck, unit tests, build and integration tests;
398
+ - `Secret scan`: Gitleaks over full Git history;
399
+ - `Dependency audit`: `npm audit` and `npm audit signatures`;
400
+ - `Dependency review`: blocks PRs that add moderate-or-higher vulnerable dependencies.
401
+
402
+ These gates cover repository code, npm dependencies and pull-request dependency
403
+ changes. External tool version safety is handled by `tools.lock.json` plus
404
+ runtime provenance checks in the installer.
405
+
406
+ ## Maintenance
407
+
408
+ Keep this repository public-safe:
409
+
410
+ - do not add company-specific URLs, tokens, secrets or internal project names;
411
+ - prefer public package installers and configurable sources;
412
+ - keep the installer idempotent;
413
+ - cover pure module behavior with Vitest;
414
+ - keep the shell integration test around behavior that can regress;
415
+ - document what is automatic and what still depends on each runtime CLI.
416
+
417
+ Release a new npm version by updating `package.json`, pushing the change to
418
+ `main`, then pushing a matching tag:
419
+
420
+ ```bash
421
+ git tag v0.1.1
422
+ git push origin v0.1.1
423
+ ```
424
+
425
+ The `Release` workflow runs the full check and publishes the scoped package to
426
+ npm. Configure the repository secret `NPM_TOKEN` before pushing a release tag.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import process from "node:process";
3
+ import { err, InstallerError } from "../src/logger.js";
4
+ import { runInstaller } from "../src/main.js";
5
+ runInstaller().catch((error) => {
6
+ if (error instanceof InstallerError) {
7
+ err(error.message);
8
+ console.error("");
9
+ process.exit(1);
10
+ }
11
+ console.error(error);
12
+ process.exit(1);
13
+ });
14
+ //# sourceMappingURL=agent-toolkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-toolkit.js","sourceRoot":"","sources":["../../bin/agent-toolkit.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC7B,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function parseArgs(argv: string[]): boolean;
@@ -0,0 +1,152 @@
1
+ import path from "node:path";
2
+ import { die } from "./logger.js";
3
+ import { selectOnlyRuntime, selectOnlyTool, setAllRuntimes, setAllTools, splitList, state, } from "./state.js";
4
+ import { usage } from "./usage.js";
5
+ export function parseArgs(argv) {
6
+ for (let i = 0; i < argv.length; i += 1) {
7
+ const arg = argv[i];
8
+ if (!arg)
9
+ continue;
10
+ switch (arg) {
11
+ case "--all":
12
+ setAllTools(true);
13
+ state.nonInteractive = true;
14
+ break;
15
+ case "--rtk-only":
16
+ selectOnlyTool("rtk");
17
+ state.nonInteractive = true;
18
+ break;
19
+ case "--caveman-only":
20
+ selectOnlyTool("caveman");
21
+ state.nonInteractive = true;
22
+ break;
23
+ case "--superpowers-only":
24
+ selectOnlyTool("superpowers");
25
+ state.nonInteractive = true;
26
+ break;
27
+ case "--graphify-only":
28
+ selectOnlyTool("graphify");
29
+ state.nonInteractive = true;
30
+ break;
31
+ case "--gsd-only":
32
+ selectOnlyTool("gsd");
33
+ state.nonInteractive = true;
34
+ break;
35
+ case "--frontend-skills-only":
36
+ selectOnlyTool("frontend-skills");
37
+ state.nonInteractive = true;
38
+ break;
39
+ case "--skills-only":
40
+ selectOnlyTool("skills");
41
+ state.nonInteractive = true;
42
+ break;
43
+ case "--no-rtk":
44
+ state.tools.rtk = false;
45
+ state.nonInteractive = true;
46
+ break;
47
+ case "--no-caveman":
48
+ state.tools.caveman = false;
49
+ state.nonInteractive = true;
50
+ break;
51
+ case "--no-superpowers":
52
+ state.tools.superpowers = false;
53
+ state.nonInteractive = true;
54
+ break;
55
+ case "--no-graphify":
56
+ state.tools.graphify = false;
57
+ state.nonInteractive = true;
58
+ break;
59
+ case "--no-gsd":
60
+ state.tools.gsd = false;
61
+ state.nonInteractive = true;
62
+ break;
63
+ case "--no-frontend-skills":
64
+ state.tools["frontend-skills"] = false;
65
+ state.nonInteractive = true;
66
+ break;
67
+ case "--no-skills":
68
+ state.tools.skills = false;
69
+ state.nonInteractive = true;
70
+ break;
71
+ case "--all-runtimes":
72
+ setAllRuntimes(true);
73
+ state.nonInteractive = true;
74
+ break;
75
+ case "--claude":
76
+ selectOnlyRuntime("claude");
77
+ state.nonInteractive = true;
78
+ break;
79
+ case "--codex":
80
+ selectOnlyRuntime("codex");
81
+ state.nonInteractive = true;
82
+ break;
83
+ case "--opencode":
84
+ selectOnlyRuntime("opencode");
85
+ state.nonInteractive = true;
86
+ break;
87
+ case "--gemini":
88
+ selectOnlyRuntime("gemini");
89
+ state.nonInteractive = true;
90
+ break;
91
+ case "--no-claude":
92
+ state.runtimes.claude = false;
93
+ state.nonInteractive = true;
94
+ break;
95
+ case "--no-codex":
96
+ state.runtimes.codex = false;
97
+ state.nonInteractive = true;
98
+ break;
99
+ case "--no-opencode":
100
+ state.runtimes.opencode = false;
101
+ state.nonInteractive = true;
102
+ break;
103
+ case "--no-gemini":
104
+ state.runtimes.gemini = false;
105
+ state.nonInteractive = true;
106
+ break;
107
+ case "--global":
108
+ state.gsdScope = "global";
109
+ break;
110
+ case "--local":
111
+ state.gsdScope = "local";
112
+ break;
113
+ case "--skills-dir":
114
+ i += 1;
115
+ {
116
+ const skillsDir = argv[i];
117
+ if (!skillsDir)
118
+ die("--skills-dir requires a directory.");
119
+ state.customSkillsDir = path.resolve(skillsDir);
120
+ }
121
+ break;
122
+ case "--skills-scope":
123
+ i += 1;
124
+ {
125
+ const skillsScope = argv[i];
126
+ if (!skillsScope)
127
+ die("--skills-scope requires a scope path.");
128
+ state.skillScopes.push(...splitList(skillsScope));
129
+ }
130
+ state.nonInteractive = true;
131
+ break;
132
+ case "--skills-list":
133
+ state.listSkills = true;
134
+ state.nonInteractive = true;
135
+ break;
136
+ case "--install-missing-clis":
137
+ state.installMissingClis = true;
138
+ break;
139
+ case "--allow-mutable-sources":
140
+ state.allowMutableSources = true;
141
+ break;
142
+ case "--help":
143
+ case "-h":
144
+ console.log(usage());
145
+ return false;
146
+ default:
147
+ die(`Unknown flag: ${arg}. Use --help for usage.`);
148
+ }
149
+ }
150
+ return true;
151
+ }
152
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,SAAS,EACT,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,OAAO;gBACV,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,YAAY;gBACf,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,gBAAgB;gBACnB,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC1B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,oBAAoB;gBACvB,cAAc,CAAC,aAAa,CAAC,CAAC;gBAC9B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,iBAAiB;gBACpB,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC3B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,YAAY;gBACf,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,wBAAwB;gBAC3B,cAAc,CAAC,iBAAiB,CAAC,CAAC;gBAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,eAAe;gBAClB,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACzB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,UAAU;gBACb,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;gBACxB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,cAAc;gBACjB,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,kBAAkB;gBACrB,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;gBAChC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,eAAe;gBAClB,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAC7B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,UAAU;gBACb,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;gBACxB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,sBAAsB;gBACzB,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;gBACvC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,aAAa;gBAChB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC3B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,gBAAgB;gBACnB,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,UAAU;gBACb,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAC5B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,SAAS;gBACZ,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC3B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,YAAY;gBACf,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC9B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,UAAU;gBACb,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAC5B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,aAAa;gBAChB,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC9B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,YAAY;gBACf,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC7B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,eAAe;gBAClB,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAChC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,aAAa;gBAChB,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC9B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,UAAU;gBACb,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC1B,MAAM;YACR,KAAK,SAAS;gBACZ,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;gBACzB,MAAM;YACR,KAAK,cAAc;gBACjB,CAAC,IAAI,CAAC,CAAC;gBACP,CAAC;oBACC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,SAAS;wBAAE,GAAG,CAAC,oCAAoC,CAAC,CAAC;oBAC1D,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAClD,CAAC;gBACD,MAAM;YACR,KAAK,gBAAgB;gBACnB,CAAC,IAAI,CAAC,CAAC;gBACP,CAAC;oBACC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,WAAW;wBAAE,GAAG,CAAC,uCAAuC,CAAC,CAAC;oBAC/D,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;gBACpD,CAAC;gBACD,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,eAAe;gBAClB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;gBACxB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,wBAAwB;gBAC3B,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAChC,MAAM;YACR,KAAK,yBAAyB;gBAC5B,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBACjC,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrB,OAAO,KAAK,CAAC;YACf;gBACE,GAAG,CAAC,iBAAiB,GAAG,yBAAyB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function sha256File(filePath: string): string;
2
+ export declare function verifySha256File(filePath: string, expectedSha256: string): boolean;
@@ -0,0 +1,9 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs";
3
+ export function sha256File(filePath) {
4
+ return createHash("sha256").update(fs.readFileSync(filePath)).digest("hex");
5
+ }
6
+ export function verifySha256File(filePath, expectedSha256) {
7
+ return sha256File(filePath).toLowerCase() === expectedSha256.toLowerCase();
8
+ }
9
+ //# sourceMappingURL=checksum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/checksum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,cAAsB;IAEtB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const SRC_DIR: string;
2
+ export declare const REPO_ROOT: string;
3
+ export declare const HOME: string;
@@ -0,0 +1,10 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ export const SRC_DIR = path.dirname(fileURLToPath(import.meta.url));
5
+ export const REPO_ROOT = path.basename(SRC_DIR) === "src" &&
6
+ path.basename(path.dirname(SRC_DIR)) === "dist"
7
+ ? path.resolve(SRC_DIR, "..", "..")
8
+ : path.resolve(SRC_DIR, "..");
9
+ export const HOME = process.env.HOME || os.homedir();
10
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,SAAS,GACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK;IAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM;IAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;IACnC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function installCaveman(): boolean;