liteagents 2.8.0 → 2.8.2

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 (42) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +2 -5
  3. package/cli.js +11 -221
  4. package/installer/path-manager.js +0 -199
  5. package/package.json +2 -6
  6. package/packages/ampcode/commands/security.md +50 -12
  7. package/packages/ampcode/commands/ship.md +33 -11
  8. package/packages/claude/commands/git-commit.md +1 -1
  9. package/packages/claude/commands/security.md +50 -12
  10. package/packages/claude/commands/ship.md +33 -11
  11. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package-lock.json +5 -5
  12. package/packages/droid/commands/security.md +50 -12
  13. package/packages/droid/commands/ship.md +33 -11
  14. package/packages/opencode/command/security.md +50 -12
  15. package/packages/opencode/command/ship.md +33 -11
  16. package/postinstall.js +1 -1
  17. package/docs/.gitkeep +0 -1
  18. package/docs/CONTRIBUTING.md +0 -739
  19. package/docs/ERROR_HANDLING_IMPLEMENTATION.md +0 -327
  20. package/docs/INSTALLATION_DEMO.md +0 -691
  21. package/docs/INSTALLATION_LOCATIONS.md +0 -289
  22. package/docs/INSTALLER_GUIDE.md +0 -1586
  23. package/docs/INTEGRATION_ISSUES_9.1.md +0 -341
  24. package/docs/KNOWLEDGE_BASE.md +0 -727
  25. package/docs/LONG_TERM_MEMORY.md +0 -449
  26. package/docs/MIGRATION.md +0 -384
  27. package/docs/PACKAGE_BASELINE.md +0 -557
  28. package/docs/PACKAGE_VALIDATION_REPORT.md +0 -427
  29. package/docs/PASS_INTEGRATION.md +0 -307
  30. package/docs/PASS_QUICK_START.md +0 -150
  31. package/docs/PRIVACY.md +0 -203
  32. package/docs/PUBLISHING.md +0 -266
  33. package/docs/QUICK-START.md +0 -318
  34. package/docs/RELEASE_NOTES_1.2.0.md +0 -323
  35. package/docs/SECURITY.md +0 -317
  36. package/docs/SILENT_MODE_GUIDE.md +0 -526
  37. package/docs/SKILLS_CONVERSION.md +0 -154
  38. package/docs/TESTING.md +0 -582
  39. package/docs/TEST_COVERAGE.md +0 -347
  40. package/docs/TROUBLESHOOTING.md +0 -788
  41. package/docs/UPDATED_VARIANT_CONFIGURATION.md +0 -274
  42. package/docs/VARIANT_CONFIGURATION.md +0 -440
package/CHANGELOG.md CHANGED
@@ -17,6 +17,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
17
17
 
18
18
  ---
19
19
 
20
+ ## [2.8.2] - 2026-05-24
21
+
22
+ Maintenance release: removes the last of the legacy 3-variant system, fixes the broken `liteag` alias and post-install message, and trims the shipped documentation down to the README plus an accurate installer guide. No changes to the installed agents/commands/skills.
23
+
24
+ ### Fixed
25
+ - **`npm test` (the CI publish gate) was failing, blocking releases.** The installer test suites still assumed the removed 3-variant system (Lite/Standard/Pro). The multi-tool suite has been rewritten for the single-variant installer (one `pro` package per tool), and the cross-platform suite's terminal checks no longer assert raw environment presence (`stdout` TTY, `TERM`, `SHELL`) — those failed whenever output is piped (i.e. always under the runner and in CI). They now verify the installer's graceful fallback instead. `npm test` passes 138/138, including under a minimal CI environment.
26
+ - **The `liteag` short alias was broken.** Its `cli.js` was a leftover 3-variant wrapper that defaulted to a non-existent `standard` variant, looked for a `.claude-plugin/plugin-standard.json` that no longer exists, and exited 1. It now simply forwards all arguments to the real interactive installer (`installer/cli.js`), so `liteag` and `liteagents` behave identically (check existing installs, backup, install, uninstall). The actual installer was not modified.
27
+ - **`postinstall` pointed at a command that doesn't exist.** The post-install message told users to run `$ agentic-kit`; the published bin is `liteagents`. Corrected.
28
+
29
+ ### Added
30
+ - **Content-integrity check in the multi-tool test suite.** It now pins the expected per-tool counts of agents, commands, skills, and plugins (counting `.md` dispatch entries and skill/plugin directories, not raw files). Accidentally adding or removing a command/skill/agent fails the publish gate with the exact delta until the expected number is updated deliberately — so the CI gate now protects what actually ships, not just installer plumbing.
31
+
32
+ ### Changed
33
+ - **Rewrote `docs/INSTALLER_GUIDE.md` to match the actual installer** (1586 → ~430 lines). Removed the entire fictional "Command-Line Flags" section (the installer takes no flags — it is interactive only), the Lite/Standard/Pro variant system, invented agent lists and component counts, and corrected the default install paths (`~/.config/opencode`, `~/.config/amp`, `~/.factory` — the old guide listed `~/.opencode`/`~/.ampcode`/`~/.droid`, none of which the installer uses). Added an accurate interactive walkthrough and an Uninstalling section, and dropped links to deleted/nonexistent docs.
34
+
35
+ ### Removed
36
+ - **Trimmed `docs/` to one guide.** Removed 20 internal/maintainer/stale docs (~7,500 lines) that shipped to users — implementation notes, QA/test reports, `pass`/publishing guides, the variant-era `MIGRATION.md`/`RELEASE_NOTES_1.2.0.md`, `KNOWLEDGE_BASE.md`, `CONTRIBUTING.md`, `PRIVACY.md` (telemetry is a no-op stub), `SECURITY.md`, etc. The README plus the rewritten `docs/INSTALLER_GUIDE.md` are the documentation now.
37
+ - **Stopped shipping `docs/` in the npm package** (dropped from `package.json` `files`, along with the broken root `QUICK-START.md`/`TROUBLESHOOTING.md` entries that never existed). End users get the README; the installer guide lives in the repo. Fixed the README's broken doc links and pointed `CLAUDE.md` and the package validator at the surviving guide.
38
+ - Stale `variant-system` npm keyword — there is one package per tool, not a variant matrix.
39
+ - Dead 3-variant migration code in `installer/path-manager.js` (`detectLegacyInstallation`, `countLegacyComponents`, `classifyVariantFromComponents`, `createManifestForLegacy`). These classified pre-1.2.0 installs into lite/standard/pro by counting `resources`/`hooks` dirs that no longer exist, and nothing in the installer ever called them. Verified the installer still installs, backs up, and uninstalls correctly after removal; `npm test` 138/138 and the installation-engine suite 60/60 still pass.
40
+ - Obsolete documentation describing removed features: `docs/VARIANT_CONFIGURATION.md`, `docs/UPDATED_VARIANT_CONFIGURATION.md` (the 3-variant matrix), `docs/SILENT_MODE_GUIDE.md` and `docs/INSTALLATION_DEMO.md` (a `--variant`/`--tools`/`--silent` flag CLI the installer never had — it is interactive only). Dropped the stale `VARIANT_CONFIGURATION.md` entry from `scripts/validate-package.js`.
41
+
42
+ ---
43
+
44
+ ## [2.8.1] - 2026-05-22
45
+
46
+ ### Changed
47
+ - **`/security` and `/ship` rewritten across all four tools (claude, opencode, ampcode, droid).** Both were thin stubs; they're now substantive, stack-agnostic gates that apply to libraries, CLIs, web apps, and services alike.
48
+ - `/security` leads with the six failure classes that recur in nearly every quickly-built app — secrets committed to the repo, data-access / tenant isolation, rate limiting (including authenticated write routes), error handling past the happy path, authorization-beyond-authentication (IDOR / privilege), and N+1 / unindexed data access — plus a trust-boundary pass (spoofable headers like `X-Forwarded-For`, services bound to `0.0.0.0`, unvalidated untrusted input) and severity-ranked, coverage-auditable output.
49
+ - `/ship` is now stack-adaptive: it detects the toolchain (`package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Makefile`) and runs only the checks that exist instead of assuming `npm run lint`/`build`/`migrate`, and adds gates for authorization, rate limiting, data-access scoping, error handling, and secret-scanning before deploy.
50
+
51
+ ### Fixed
52
+ - **`allowed-tools` permission syntax normalized to the canonical colon form** (`Bash(git:*)`) in the claude package's `ship.md`, `security.md`, and `git-commit.md` — the space form (`Bash(git *)`) is not a valid Claude Code permission wildcard. The opencode/ampcode/droid packages retain their existing space-form syntax (their runners parse `allowed-tools` differently, if at all), so there is no behavior change there.
53
+
54
+ ---
55
+
20
56
  ## [2.8.0] - 2026-05-18
21
57
 
22
58
  ### Added
package/README.md CHANGED
@@ -166,10 +166,7 @@ Results land in `.claude/friction/antigen_review.md` with projects, error patter
166
166
 
167
167
  | Document | Description |
168
168
  |----------|-------------|
169
- | **[INSTALLER_GUIDE.md](docs/INSTALLER_GUIDE.md)** | Complete installation guide with troubleshooting |
170
- | **[KNOWLEDGE_BASE.md](docs/KNOWLEDGE_BASE.md)** | Complete reference: agents, commands, architecture |
171
- | **[QUICK-START.md](QUICK-START.md)** | 15-minute onboarding guide |
172
- | **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** | Common issues and solutions |
169
+ | **[INSTALLER_GUIDE.md](docs/INSTALLER_GUIDE.md)** | Complete installation guide, troubleshooting, and FAQ |
173
170
  | **[subagentic-manual.md](packages/subagentic-manual.md)** | Detailed agent/command reference |
174
171
 
175
172
  ---
@@ -224,4 +221,4 @@ Apache-2.0 © 2026 hamr0 — see [LICENSE](LICENSE).
224
221
 
225
222
  ---
226
223
 
227
- **Need help?** Check [TROUBLESHOOTING.md](TROUBLESHOOTING.md) or [open an issue](https://github.com/hamr0/liteagents/issues)
224
+ **Need help?** See the [Installer Guide](docs/INSTALLER_GUIDE.md) or [open an issue](https://github.com/hamr0/liteagents/issues)
package/cli.js CHANGED
@@ -1,230 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Agentic Toolkit CLI Wrapper
4
+ * `liteag` short alias for the `liteagents` installer.
5
5
  *
6
- * This script provides npx support for the agentic-toolkit package.
7
- * It handles variant selection and provides helpful CLI output for users.
8
- *
9
- * Usage:
10
- * npx liteagents # Install standard variant (default)
11
- * npx liteagents --variant=lite # Install lite variant via flag
12
- * npx liteagents --variant=pro # Install pro variant via flag
13
- * npx agkit # Shorter alias
14
- * npx liteagents --help # Show help message
6
+ * Forwards all arguments to the interactive installer (installer/cli.js),
7
+ * which checks for existing installs, backs up, installs to each tool's
8
+ * path, and uninstalls. This wrapper adds no behavior of its own.
15
9
  */
16
10
 
17
- const fs = require('fs');
18
11
  const path = require('path');
12
+ const { spawnSync } = require('child_process');
19
13
 
20
- // ANSI color codes for terminal output
21
- const colors = {
22
- reset: '\x1b[0m',
23
- bright: '\x1b[1m',
24
- green: '\x1b[32m',
25
- blue: '\x1b[34m',
26
- yellow: '\x1b[33m',
27
- cyan: '\x1b[36m',
28
- magenta: '\x1b[35m'
29
- };
30
-
31
- // Parse command line arguments
32
- const args = process.argv.slice(2);
33
- const hasHelpFlag = args.includes('--help') || args.includes('-h');
34
- const variantFlag = args.find(arg => arg.startsWith('--variant='));
35
- const requestedVariant = variantFlag ? variantFlag.split('=')[1] : null;
36
-
37
- /**
38
- * Display help message
39
- */
40
- function showHelp() {
41
- console.log(`
42
- ${colors.bright}${colors.cyan}Agentic Toolkit${colors.reset} - AI-Driven Software Development Toolkit
43
-
44
- ${colors.bright}DESCRIPTION:${colors.reset}
45
- Comprehensive toolkit with 13 specialized agents and 14 powerful skills
46
- for agile software development, product management, and content creation.
47
-
48
- ${colors.bright}VARIANTS:${colors.reset}
49
- ${colors.green}lite${colors.reset} 3 agents, 0 skills - Minimal dependencies
50
- ${colors.blue}standard${colors.reset} 13 agents, 8 skills - Recommended for most users
51
- ${colors.magenta}pro${colors.reset} 13 agents, 14 skills - Maximum capabilities
52
-
53
- ${colors.bright}USAGE:${colors.reset}
54
- ${colors.cyan}npx liteagents${colors.reset} # Install standard variant (default)
55
- ${colors.cyan}npx liteagents --variant=lite${colors.reset} # Install lite variant via flag
56
- ${colors.cyan}npx liteagents --variant=pro${colors.reset} # Install pro variant via flag
57
- ${colors.cyan}npx agkit${colors.reset} # Shorter alias
58
-
59
- ${colors.bright}CLAUDE CODE MARKETPLACE:${colors.reset}
60
- You can also install this plugin directly in Claude Code:
61
-
62
- ${colors.cyan}/plugin marketplace add agentic-kit${colors.reset} # Standard variant
63
- ${colors.cyan}/plugin marketplace add agentic-kit-lite${colors.reset} # Lite variant
64
- ${colors.cyan}/plugin marketplace add agentic-kit-pro${colors.reset} # Pro variant
65
-
66
- ${colors.bright}AGENT INVOCATION:${colors.reset}
67
- After installation, invoke agents using:
68
- ${colors.cyan}@Master:${colors.reset} [your request]
69
- ${colors.cyan}@Orchestrator:${colors.reset} [your request]
70
- ${colors.cyan}@ProductManager:${colors.reset} [your request]
71
-
72
- ${colors.bright}MORE INFORMATION:${colors.reset}
73
- README: https://github.com/yourusername/agentic-toolkit#readme
74
- Documentation: See README.md, QUICK-START.md, and VARIANTS.md
75
- Issues: https://github.com/yourusername/agentic-toolkit/issues
76
-
77
- ${colors.bright}VERSION:${colors.reset}
78
- 1.0.0
79
- `);
80
- }
81
-
82
- /**
83
- * Display variant information
84
- */
85
- function showVariantInfo(variant) {
86
- const variantInfo = {
87
- lite: {
88
- name: 'Lite',
89
- color: colors.green,
90
- agents: 3,
91
- skills: 0,
92
- description: 'Minimal dependencies with 3 core agents',
93
- agents_list: ['Master', 'Orchestrator', 'Scrum Master']
94
- },
95
- standard: {
96
- name: 'Standard',
97
- color: colors.blue,
98
- agents: 13,
99
- skills: 8,
100
- description: 'All 13 agents with 8 core production skills',
101
- skills_list: ['PDF', 'DOCX', 'XLSX', 'PPTX', 'Canvas Design', 'Theme Factory', 'Brand Guidelines', 'Internal Communications']
102
- },
103
- pro: {
104
- name: 'Pro',
105
- color: colors.magenta,
106
- agents: 13,
107
- skills: 16,
108
- description: 'All 13 agents with complete skill set (16 skills)',
109
- skills_list: ['All Standard skills', '+ 8 advanced skills']
110
- }
111
- };
112
-
113
- const info = variantInfo[variant];
114
-
115
- console.log(`
116
- ${colors.bright}${info.color}Agentic Toolkit - ${info.name} Variant${colors.reset}
117
-
118
- ${colors.bright}SELECTED VARIANT:${colors.reset}
119
- ${info.color}${info.name}${colors.reset} - ${info.description}
120
-
121
- ${colors.bright}FEATURES:${colors.reset}
122
- Agents: ${colors.cyan}${info.agents}${colors.reset}
123
- Skills: ${colors.cyan}${info.skills}${colors.reset}
124
-
125
- ${colors.bright}INSTALLATION:${colors.reset}
126
- This plugin is now ready to use with Claude Code.
127
-
128
- ${colors.bright}GETTING STARTED:${colors.reset}
129
- 1. Verify installation by typing: ${colors.cyan}@Master: *help${colors.reset}
130
- 2. See available agents and their capabilities
131
- 3. Read QUICK-START.md for example workflows
132
-
133
- ${colors.bright}EXAMPLE COMMANDS:${colors.reset}
134
- ${colors.cyan}@Master:${colors.reset} Show me what you can do
135
- ${colors.cyan}@Orchestrator:${colors.reset} Help me plan a new feature
136
- ${colors.cyan}@ProductManager:${colors.reset} Create a PRD for user authentication
137
-
138
- ${colors.bright}DOCUMENTATION:${colors.reset}
139
- ${colors.yellow}README.md${colors.reset} - Full documentation
140
- ${colors.yellow}QUICK-START.md${colors.reset} - Getting started guide
141
- ${colors.yellow}VARIANTS.md${colors.reset} - Variant comparison
142
- ${colors.yellow}TROUBLESHOOTING.md${colors.reset} - Common issues and solutions
143
-
144
- ${colors.green}Installation successful!${colors.reset}
145
- `);
146
- }
147
-
148
- /**
149
- * Detect variant from npm package tag or flags
150
- */
151
- function detectVariant() {
152
- // Check for explicit variant flag
153
- if (requestedVariant) {
154
- if (['lite', 'standard', 'pro'].includes(requestedVariant)) {
155
- return requestedVariant;
156
- } else {
157
- console.error(`${colors.yellow}Warning:${colors.reset} Invalid variant '${requestedVariant}'. Using 'standard' instead.`);
158
- console.error(`Valid variants: lite, standard, pro`);
159
- return 'standard';
160
- }
161
- }
162
-
163
- // Check npm package tag (when installed via npm install agentic-kit@lite, etc.)
164
- // This would be available in process.env.npm_package_config_variant
165
- // For now, default to 'standard'
166
- return 'standard';
167
- }
168
-
169
- /**
170
- * Verify plugin manifest exists for selected variant
171
- */
172
- function verifyManifest(variant) {
173
- const manifestPath = path.join(__dirname, '.claude-plugin', `plugin-${variant}.json`);
174
-
175
- if (!fs.existsSync(manifestPath)) {
176
- console.error(`${colors.yellow}Warning:${colors.reset} Manifest file not found: ${manifestPath}`);
177
- console.error(`This may indicate an incomplete installation.`);
178
- return false;
179
- }
180
-
181
- try {
182
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
183
- if (manifest.variant !== variant) {
184
- console.error(`${colors.yellow}Warning:${colors.reset} Manifest variant mismatch. Expected '${variant}', found '${manifest.variant}'`);
185
- return false;
186
- }
187
- return true;
188
- } catch (error) {
189
- console.error(`${colors.yellow}Error:${colors.reset} Failed to parse manifest: ${error.message}`);
190
- return false;
191
- }
192
- }
193
-
194
- /**
195
- * Main CLI execution
196
- */
197
- function main() {
198
- // Show help if requested
199
- if (hasHelpFlag) {
200
- showHelp();
201
- process.exit(0);
202
- }
203
-
204
- // Detect which variant to use
205
- const variant = detectVariant();
206
-
207
- // Display welcome message
208
- console.log(`${colors.bright}${colors.cyan}Initializing Agentic Toolkit...${colors.reset}\n`);
209
-
210
- // Verify the manifest exists
211
- const manifestValid = verifyManifest(variant);
212
-
213
- if (!manifestValid) {
214
- console.error(`\n${colors.yellow}Installation may be incomplete. Please check the package contents.${colors.reset}`);
215
- console.error(`If problems persist, reinstall with: ${colors.cyan}npm install agentic-kit@${variant}${colors.reset}\n`);
216
- process.exit(1);
217
- }
218
-
219
- // Show variant information
220
- showVariantInfo(variant);
221
-
222
- // For Claude Code plugin installation, the actual plugin loading
223
- // is handled by Claude Code itself. This CLI just provides helpful
224
- // output and verification.
225
-
226
- process.exit(0);
227
- }
14
+ const installer = path.join(__dirname, 'installer', 'cli.js');
15
+ const result = spawnSync(process.execPath, [installer, ...process.argv.slice(2)], {
16
+ stdio: 'inherit'
17
+ });
228
18
 
229
- // Run the CLI
230
- main();
19
+ // Mirror the installer's exit code; treat signal termination as failure.
20
+ process.exit(result.status === null ? 1 : result.status);
@@ -223,205 +223,6 @@ class PathManager {
223
223
  return fullPath;
224
224
  }
225
225
 
226
- /**
227
- * Detect legacy installation (from version < 1.2.0)
228
- * Legacy installations don't have manifest.json
229
- *
230
- * @param {string} toolId - Tool identifier (claude, opencode, ampcode, droid)
231
- * @returns {Promise<Object>} Detection result with installation details
232
- */
233
- async detectLegacyInstallation(toolId) {
234
- const installPath = this.getDefaultPath(toolId);
235
- if (!installPath) {
236
- return { isLegacy: false, exists: false };
237
- }
238
-
239
- const fullPath = this.expandPath(installPath);
240
-
241
- try {
242
- // Check if directory exists
243
- const dirStats = await fs.promises.stat(fullPath);
244
- if (!dirStats.isDirectory()) {
245
- return { isLegacy: false, exists: false };
246
- }
247
-
248
- // Check for manifest.json
249
- const manifestPath = path.join(fullPath, 'manifest.json');
250
- const hasManifest = fs.existsSync(manifestPath);
251
-
252
- if (hasManifest) {
253
- // Has manifest, not a legacy installation
254
- return {
255
- isLegacy: false,
256
- exists: true,
257
- path: fullPath,
258
- reason: 'Installation has manifest.json (v1.2.0+)'
259
- };
260
- }
261
-
262
- // No manifest - this is a legacy installation
263
- // Count components to classify variant
264
- const components = await this.countLegacyComponents(fullPath);
265
-
266
- // Classify variant based on component counts
267
- const variant = this.classifyVariantFromComponents(components);
268
-
269
- return {
270
- isLegacy: true,
271
- exists: true,
272
- path: fullPath,
273
- components: components,
274
- suggestedVariant: variant,
275
- reason: 'No manifest.json found (pre-1.2.0 installation)'
276
- };
277
- } catch (error) {
278
- return {
279
- isLegacy: false,
280
- exists: false,
281
- error: error.message
282
- };
283
- }
284
- }
285
-
286
- /**
287
- * Count components in legacy installation
288
- *
289
- * @private
290
- * @param {string} installPath - Installation directory path
291
- * @returns {Promise<Object>} Component counts
292
- */
293
- async countLegacyComponents(installPath) {
294
- const components = {
295
- agents: 0,
296
- skills: 0,
297
- resources: 0,
298
- hooks: 0
299
- };
300
-
301
- // Count agents
302
- try {
303
- const agentsDir = path.join(installPath, 'agents');
304
- const agentFiles = await fs.promises.readdir(agentsDir);
305
- components.agents = agentFiles.filter(f => f.endsWith('.md')).length;
306
- } catch (error) {
307
- // Directory doesn't exist or can't read
308
- components.agents = 0;
309
- }
310
-
311
- // Count skills
312
- try {
313
- const skillsDir = path.join(installPath, 'skills');
314
- const skillFiles = await fs.promises.readdir(skillsDir);
315
- components.skills = skillFiles.filter(f => f.endsWith('.md')).length;
316
- } catch (error) {
317
- components.skills = 0;
318
- }
319
-
320
- // Count resources
321
- try {
322
- const resourcesDir = path.join(installPath, 'resources');
323
- const resourceFiles = await fs.promises.readdir(resourcesDir);
324
- components.resources = resourceFiles.length;
325
- } catch (error) {
326
- components.resources = 0;
327
- }
328
-
329
- // Count hooks
330
- try {
331
- const hooksDir = path.join(installPath, 'hooks');
332
- const hookFiles = await fs.promises.readdir(hooksDir);
333
- components.hooks = hookFiles.filter(f => f.endsWith('.js')).length;
334
- } catch (error) {
335
- components.hooks = 0;
336
- }
337
-
338
- return components;
339
- }
340
-
341
- /**
342
- * Classify variant based on component counts
343
- *
344
- * @private
345
- * @param {Object} components - Component counts
346
- * @returns {string} Suggested variant (lite, standard, pro, or custom)
347
- */
348
- classifyVariantFromComponents(components) {
349
- const { agents, skills } = components;
350
-
351
- // Lite: 3 agents, 0 skills
352
- if (agents === 3 && skills === 0) {
353
- return 'lite';
354
- }
355
-
356
- // Pro: 13 agents, 9+ skills
357
- if (agents >= 13 && skills >= 9) {
358
- return 'pro';
359
- }
360
-
361
- // Standard: 13 agents, 1-8 skills (or close to it)
362
- if (agents >= 10 && skills >= 1 && skills <= 8) {
363
- return 'standard';
364
- }
365
-
366
- // If 3 agents or fewer, likely lite
367
- if (agents <= 3) {
368
- return 'lite';
369
- }
370
-
371
- // If many agents (10+), likely standard or pro
372
- if (agents >= 10) {
373
- return skills >= 9 ? 'pro' : 'standard';
374
- }
375
-
376
- // Default to standard for anything in between
377
- return 'standard';
378
- }
379
-
380
- /**
381
- * Create manifest for legacy installation
382
- *
383
- * @param {string} toolId - Tool identifier
384
- * @param {Object} components - Component counts
385
- * @param {string} variant - Classified variant
386
- * @returns {Promise<Object>} Created manifest
387
- */
388
- async createManifestForLegacy(toolId, components, variant) {
389
- const installPath = this.expandPath(this.getDefaultPath(toolId));
390
- const manifestPath = path.join(installPath, 'manifest.json');
391
-
392
- const manifest = {
393
- tool: toolId,
394
- variant: variant,
395
- version: '1.2.0',
396
- installed_at: new Date().toISOString(),
397
- migrated_from: 'legacy',
398
- components: components,
399
- paths: {
400
- agents: path.join(installPath, 'agents'),
401
- skills: path.join(installPath, 'skills'),
402
- resources: path.join(installPath, 'resources'),
403
- hooks: path.join(installPath, 'hooks')
404
- },
405
- files: {
406
- total: components.agents + components.skills + components.resources + components.hooks,
407
- size: 'unknown'
408
- },
409
- migration: {
410
- from_version: 'unknown',
411
- migrated_at: new Date().toISOString(),
412
- migration_type: 'automatic'
413
- }
414
- };
415
-
416
- // Write manifest with secure permissions
417
- await fs.promises.writeFile(
418
- manifestPath,
419
- JSON.stringify(manifest, null, 2),
420
- { mode: 0o600 }
421
- );
422
-
423
- return manifest;
424
- }
425
226
  }
426
227
 
427
228
  module.exports = PathManager;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "liteagents",
3
- "version": "2.8.0",
3
+ "version": "2.8.2",
4
4
  "description": "AI development toolkit with 11 specialized agents and 23 commands including live-canvas UI design with click-to-annotate feedback. Simple one-question installer for Claude, Opencode, Ampcode, and Droid.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -42,8 +42,7 @@
42
42
  "xlsx",
43
43
  "pptx",
44
44
  "document-generation",
45
- "cli",
46
- "variant-system"
45
+ "cli"
47
46
  ],
48
47
  "author": "hamr0 <avoidaccess@msn.com>",
49
48
  "license": "Apache-2.0",
@@ -66,13 +65,10 @@
66
65
  "installer/",
67
66
  "packages/",
68
67
  "tools/",
69
- "docs/",
70
68
  "cli.js",
71
69
  "index.js",
72
70
  "postinstall.js",
73
71
  "README.md",
74
- "QUICK-START.md",
75
- "TROUBLESHOOTING.md",
76
72
  "CHANGELOG.md",
77
73
  "LICENSE"
78
74
  ],
@@ -3,19 +3,57 @@ name: security
3
3
  description: Scan security [target]
4
4
  usage: /security
5
5
  argument-hint: [file, directory, or leave empty for full scan]
6
- allowed-tools: Read, Grep, Glob
6
+ allowed-tools: Read, Grep, Glob, Bash(git log *), Bash(git grep *), Bash(rg *)
7
7
  ---
8
- Audit $ARGUMENTS for security vulnerabilities.
8
+ Audit $ARGUMENTS for security vulnerabilities. Adapt scope to what the target
9
+ actually is — a library, CLI, web app, and service won't all have every
10
+ category. Skip what genuinely doesn't apply; never invent findings to fill a
11
+ section.
9
12
 
10
- ## Check For
11
- - Injection: SQL, command, XSS, template
12
- - Auth: Weak passwords, session issues, CSRF
13
- - Data: Exposure, logging secrets, insecure storage
14
- - Config: Debug mode, default creds, missing headers
15
- - Dependencies: Known CVEs
13
+ ## The recurring six (check every project, where applicable)
14
+ These show up in nearly every quickly-built app regardless of stack:
15
+
16
+ 1. **Secrets in the repo.** Tokens / API keys / `.env` files committed to
17
+ tracked files or anywhere in git history. Verify `.env` is gitignored and
18
+ only a value-less `.env.example` is tracked; scan history (`git log -p`,
19
+ `git grep`) for leaked keys. Secrets must load from env / a secret store at
20
+ runtime — never hardcoded, never logged.
21
+ 2. **Data-access authorization (tenant isolation).** Every record read or
22
+ written must be scoped to the requesting principal — via DB-level rules
23
+ (RLS / row policies) and/or application-layer ownership checks. Flag any
24
+ query that trusts a client-supplied id without an ownership or role gate,
25
+ and any table/collection with a policy that's too broad or missing.
26
+ 3. **Rate limiting.** Every externally reachable endpoint and abuse-prone
27
+ inbound path is bounded — including **authenticated mutation/write routes**,
28
+ not just the obvious public GETs. Note any unbounded route.
29
+ 4. **Error handling past the happy path.** Third-party / IO / DB failures are
30
+ caught; nothing fails silently; no internal detail (stack traces, queries,
31
+ secrets) leaks to the client. Background/async work has its own catch.
32
+ 5. **Authorization beyond authentication (IDOR / privilege).** "Logged in" is
33
+ not "allowed to do this". Confirm ownership AND role/permission checks on
34
+ every state-changing or privileged action. Mentally swap an id in a request
35
+ — does it return 403, or does it leak/modify another user's data?
36
+ 6. **Inefficient data access (N+1 / unindexed).** Queries inside loops,
37
+ per-render repeated calls, missing indexes on filtered/joined columns.
38
+ Correct but falls over under load — a real availability risk.
39
+
40
+ ## Also scan for
41
+ - **Injection:** SQL, command, XSS, template, path traversal.
42
+ - **Auth/session:** weak token handling, CSRF, session fixation, predictable ids.
43
+ - **Trust boundaries:** spoofable headers (e.g. `X-Forwarded-For`) trusted
44
+ without a vetted proxy; unvalidated untrusted input (uploads, inbound mail,
45
+ webhooks); services bound to `0.0.0.0` that should be loopback-only.
46
+ - **Config:** debug mode on in prod, default creds, missing security headers,
47
+ permissive CORS.
48
+ - **Dependencies:** known CVEs; unmaintained or single-maintainer deps in
49
+ security-critical paths.
16
50
 
17
51
  ## Output
18
- Severity-ranked findings with:
19
- - Location (file:line)
20
- - Risk explanation
21
- - Remediation steps
52
+ Severity-ranked findings (Critical → High → Medium → Low), each with:
53
+ - **Location** (`file:line`)
54
+ - **Risk** — what an attacker actually gains
55
+ - **Remediation** — concrete, minimal fix
56
+
57
+ End with: which of the six classes were checked and found **clean**, and any
58
+ marked **N/A** for this target — so the scan's coverage is auditable, not just
59
+ its hits.
@@ -2,17 +2,39 @@
2
2
  name: ship
3
3
  description: Check pre-deployment
4
4
  usage: /ship
5
- allowed-tools: Bash(npm *), Bash(git *)
5
+ allowed-tools: Read, Grep, Glob, Bash(git *), Bash(npm *), Bash(pnpm *), Bash(yarn *), Bash(pytest *), Bash(python *), Bash(go *), Bash(cargo *), Bash(make *)
6
6
  ---
7
- Pre-deploy checklist:
7
+ Pre-deploy / pre-merge gate. **Detect the stack first** (look for
8
+ `package.json`, `pyproject.toml`/`setup.cfg`, `go.mod`, `Cargo.toml`,
9
+ `Makefile`) and run only the checks that actually exist — never assume a
10
+ script (`lint`, `build`, `migrate`) is present. Report each item as
11
+ **pass / fail / N/A**.
8
12
 
9
- - [ ] Tests pass (`npm test`)
10
- - [ ] Lint clean (`npm run lint`)
11
- - [ ] Build succeeds (`npm run build`)
12
- - [ ] No console.log/debugger statements
13
- - [ ] Env vars documented
14
- - [ ] No hardcoded secrets
15
- - [ ] Error handling complete
16
- - [ ] Migrations ready
13
+ ## Checklist
14
+ - [ ] **Tests pass** — run the project's real test command (`npm test`,
15
+ `pytest`, `go test ./...`, `cargo test`, `make test`).
16
+ - [ ] **Lint / format clean** — only if a linter or formatter is configured.
17
+ - [ ] **Build succeeds** — only if the project has a build step.
18
+ - [ ] **No debug leftovers** — stray `console.log` / `print` / `debugger` /
19
+ `dbg!` / commented-out blocks / blocker `TODO`s in the changed files.
20
+ - [ ] **No hardcoded secrets** — scan the diff. Secrets load from env / a
21
+ secret store; `.env` is gitignored and only a value-less `.env.example`
22
+ is tracked.
23
+ - [ ] **Error handling complete** — every new IO / network / DB call has a
24
+ failure path; nothing fails silently; no internal detail leaks to clients.
25
+ - [ ] **Authorization** — new endpoints/actions check **ownership + role**,
26
+ not just authentication (no IDOR via id-swapping).
27
+ - [ ] **Rate limiting** — new externally reachable routes, including
28
+ authenticated writes, are bounded.
29
+ - [ ] **Data access scoped & scales** — new queries are constrained to the
30
+ requesting principal (no cross-tenant leak) and avoid obvious N+1 /
31
+ unindexed scans on hot paths.
32
+ - [ ] **Migrations ready** — only if the project has a schema / migrations.
33
+ - [ ] **Docs & config in sync** — `.env.example`, README, and any
34
+ threat-model / PRD updated for new config or new attack surface.
35
+ - [ ] **Clean tree, correct branch, in sync with `origin`.**
17
36
 
18
- Run checks and report: Ready 🚀 or Blocked 🛑 with issues.
37
+ For any security-sensitive change in the diff, run **`/security`** on the
38
+ changed files before shipping.
39
+
40
+ Report: **Ready 🚀** or **Blocked 🛑** with the specific failing items.
@@ -2,7 +2,7 @@
2
2
  name: git-commit
3
3
  description: Analyze changes and commit
4
4
  usage: /git-commit
5
- allowed-tools: Bash(git *)
5
+ allowed-tools: Bash(git:*)
6
6
  ---
7
7
  1. Run `git diff --staged` to see changes
8
8
  2. Analyze what was changed and why