@esthernandez/vibe-doc 0.2.1 → 0.2.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 (31) hide show
  1. package/dist/classifier/index.js +9 -0
  2. package/dist/classifier/llm-prompt.d.ts.map +1 -1
  3. package/dist/classifier/llm-prompt.js +1 -0
  4. package/dist/classifier/scoring-engine.d.ts +2 -1
  5. package/dist/classifier/scoring-engine.d.ts.map +1 -1
  6. package/dist/classifier/scoring-engine.js +16 -0
  7. package/dist/classifier/signals.d.ts.map +1 -1
  8. package/dist/classifier/signals.js +46 -7
  9. package/dist/gap-analyzer/breadcrumbs.d.ts.map +1 -1
  10. package/dist/gap-analyzer/breadcrumbs.js +77 -0
  11. package/dist/gap-analyzer/matrix.d.ts +5 -1
  12. package/dist/gap-analyzer/matrix.d.ts.map +1 -1
  13. package/dist/gap-analyzer/matrix.js +51 -0
  14. package/dist/gap-analyzer/tier-assigner.d.ts.map +1 -1
  15. package/dist/gap-analyzer/tier-assigner.js +14 -2
  16. package/dist/scanner/file-scanner.d.ts.map +1 -1
  17. package/dist/scanner/file-scanner.js +10 -2
  18. package/dist/templates/embedded/adr.md +45 -0
  19. package/dist/templates/embedded/api-spec.md +55 -0
  20. package/dist/templates/embedded/changelog-contributing.md +67 -0
  21. package/dist/templates/embedded/data-model.md +55 -0
  22. package/dist/templates/embedded/deployment-procedure.md +63 -0
  23. package/dist/templates/embedded/install-guide.md +49 -0
  24. package/dist/templates/embedded/readme.md +55 -0
  25. package/dist/templates/embedded/runbook.md +55 -0
  26. package/dist/templates/embedded/skill-command-reference.md +77 -0
  27. package/dist/templates/embedded/test-plan.md +55 -0
  28. package/dist/templates/embedded/threat-model.md +47 -0
  29. package/dist/templates/index.d.ts.map +1 -1
  30. package/dist/templates/index.js +4 -0
  31. package/package.json +1 -1
@@ -106,6 +106,8 @@ function buildLowConfidenceClassification(ruleResults, inventory) {
106
106
  function mapCategoryToDeploymentContext(category, contexts) {
107
107
  const result = [];
108
108
  // Determine platform based on category
109
+ // TODO: these platform/environment/scale strings are untyped magic strings —
110
+ // worth promoting to enums when the classifier gets its next overhaul.
109
111
  let platform = 'cloud';
110
112
  if (category === scoring_engine_1.Category.MobileApplication) {
111
113
  platform = 'mobile';
@@ -113,6 +115,9 @@ function mapCategoryToDeploymentContext(category, contexts) {
113
115
  else if (category === scoring_engine_1.Category.InfrastructurePlatform) {
114
116
  platform = 'kubernetes';
115
117
  }
118
+ else if (category === scoring_engine_1.Category.ClaudeCodePlugin) {
119
+ platform = 'plugin';
120
+ }
116
121
  // Check for EdgeEmbedded context
117
122
  if (contexts.includes(scoring_engine_1.Context.EdgeEmbedded)) {
118
123
  platform = 'edge';
@@ -122,6 +127,10 @@ function mapCategoryToDeploymentContext(category, contexts) {
122
127
  if (contexts.includes(scoring_engine_1.Context.InternalTooling)) {
123
128
  environment = 'staging';
124
129
  }
130
+ if (category === scoring_engine_1.Category.ClaudeCodePlugin) {
131
+ // Plugins are distributed, not deployed in the SaaS sense
132
+ environment = 'distribution';
133
+ }
125
134
  // Determine scale based on contexts
126
135
  let scale = 'small';
127
136
  if (contexts.includes(scoring_engine_1.Context.CustomerFacing)) {
@@ -1 +1 @@
1
- {"version":3,"file":"llm-prompt.d.ts","sourceRoot":"","sources":["../../src/classifier/llm-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAA+B,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,aAAa,GACzB,MAAM,CA0DR"}
1
+ {"version":3,"file":"llm-prompt.d.ts","sourceRoot":"","sources":["../../src/classifier/llm-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAA+B,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,aAAa,GACzB,MAAM,CA2DR"}
@@ -39,6 +39,7 @@ Choose ONE primary category that best describes this project:
39
39
  - **MobileApplication**: Native or cross-platform mobile apps
40
40
  - **AIMLSystem**: ML/AI-focused projects with models, training, inference
41
41
  - **IntegrationConnector**: Adapters, SDKs, connectors for third-party services
42
+ - **ClaudeCodePlugin**: A Claude Code plugin or plugin marketplace — characterized by a .claude-plugin/plugin.json manifest, skills/*/SKILL.md files, commands/*.md files, or a .claude-plugin/marketplace.json. No runtime deployment in the traditional sense; distributed to users via npm or a marketplace.
42
43
 
43
44
  ## Operational Contexts
44
45
 
@@ -10,7 +10,8 @@ export declare enum Category {
10
10
  InfrastructurePlatform = "InfrastructurePlatform",
11
11
  MobileApplication = "MobileApplication",
12
12
  AIMLSystem = "AIMLSystem",
13
- IntegrationConnector = "IntegrationConnector"
13
+ IntegrationConnector = "IntegrationConnector",
14
+ ClaudeCodePlugin = "ClaudeCodePlugin"
14
15
  }
15
16
  export declare enum Context {
16
17
  Regulated = "Regulated",
@@ -1 +1 @@
1
- {"version":3,"file":"scoring-engine.d.ts","sourceRoot":"","sources":["../../src/classifier/scoring-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,oBAAY,QAAQ;IAClB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,sBAAsB,2BAA2B;IACjD,iBAAiB,sBAAsB;IACvC,UAAU,eAAe;IACzB,oBAAoB,yBAAyB;CAC9C;AAED,oBAAY,OAAO;IACjB,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EAAE,EACjB,mBAAmB,GAAE,MAAa,GACjC,aAAa,CAuMf"}
1
+ {"version":3,"file":"scoring-engine.d.ts","sourceRoot":"","sources":["../../src/classifier/scoring-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,oBAAY,QAAQ;IAClB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,sBAAsB,2BAA2B;IACjD,iBAAiB,sBAAsB;IACvC,UAAU,eAAe;IACzB,oBAAoB,yBAAyB;IAC7C,gBAAgB,qBAAqB;CACtC;AAED,oBAAY,OAAO;IACjB,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EAAE,EACjB,mBAAmB,GAAE,MAAa,GACjC,aAAa,CA0Nf"}
@@ -16,6 +16,7 @@ var Category;
16
16
  Category["MobileApplication"] = "MobileApplication";
17
17
  Category["AIMLSystem"] = "AIMLSystem";
18
18
  Category["IntegrationConnector"] = "IntegrationConnector";
19
+ Category["ClaudeCodePlugin"] = "ClaudeCodePlugin";
19
20
  })(Category || (exports.Category = Category = {}));
20
21
  var Context;
21
22
  (function (Context) {
@@ -160,6 +161,21 @@ function scoreClassification(signals, confidenceThreshold = 0.85) {
160
161
  case 'has-github-actions':
161
162
  contextScores[Context.InternalTooling] += 1 * w;
162
163
  break;
164
+ // Claude Code Plugin signals
165
+ // Weighted to dominate: plugin.json is an unambiguous marker that
166
+ // overrides any incidental web/framework signals in the repo.
167
+ case 'has-claude-plugin-manifest':
168
+ categoryScores[Category.ClaudeCodePlugin] += 20 * w;
169
+ break;
170
+ case 'has-claude-skill-files':
171
+ categoryScores[Category.ClaudeCodePlugin] += 8 * w;
172
+ break;
173
+ case 'has-claude-command-files':
174
+ categoryScores[Category.ClaudeCodePlugin] += 6 * w;
175
+ break;
176
+ case 'has-claude-marketplace':
177
+ categoryScores[Category.ClaudeCodePlugin] += 10 * w;
178
+ break;
163
179
  default:
164
180
  logger_1.logger.warn(`Unknown signal: ${signal.name}`);
165
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/classifier/signals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAgWrE"}
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/classifier/signals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAkZrE"}
@@ -12,16 +12,20 @@ const logger_1 = require("../utils/logger");
12
12
  */
13
13
  function extractSignals(inventory) {
14
14
  const signals = [];
15
+ // Normalize paths to forward slashes before any substring matching —
16
+ // otherwise Windows backslash paths break signal detection for anything
17
+ // that looks across path components (.github/workflows, .claude-plugin/...)
18
+ const norm = (s) => s.replace(/\\/g, '/').toLowerCase();
15
19
  // Source code patterns
16
- const sourceFiles = inventory.categories.sourceCode.files.join('|').toLowerCase();
17
- const configFiles = inventory.categories.configuration.files.join('|').toLowerCase();
18
- const infraFiles = inventory.categories.infrastructure.files.join('|').toLowerCase();
19
- const docFiles = inventory.categories.documentation.files.join('|').toLowerCase();
20
- const allFiles = inventory.categories.sourceCode.files
20
+ const sourceFiles = norm(inventory.categories.sourceCode.files.join('|'));
21
+ const configFiles = norm(inventory.categories.configuration.files.join('|'));
22
+ const infraFiles = norm(inventory.categories.infrastructure.files.join('|'));
23
+ const docFiles = norm(inventory.categories.documentation.files.join('|'));
24
+ const allFiles = norm(inventory.categories.sourceCode.files
21
25
  .concat(inventory.categories.configuration.files)
22
26
  .concat(inventory.categories.infrastructure.files)
23
- .join('|')
24
- .toLowerCase();
27
+ .concat(inventory.categories.documentation.files)
28
+ .join('|'));
25
29
  // Express/Fastify/Koa routes
26
30
  if (sourceFiles.includes('routes') || sourceFiles.includes('controller')) {
27
31
  if (allFiles.includes('express') ||
@@ -300,6 +304,41 @@ function extractSignals(inventory) {
300
304
  weight: 1,
301
305
  });
302
306
  }
307
+ // Claude Code Plugin manifest — the dominant signal for plugin repos.
308
+ // Path-anchored to avoid false positives on stray files named plugin.json.
309
+ if (configFiles.includes('.claude-plugin/plugin.json') ||
310
+ allFiles.includes('.claude-plugin/plugin.json')) {
311
+ signals.push({
312
+ name: 'has-claude-plugin-manifest',
313
+ source: 'file-scanner',
314
+ weight: 10,
315
+ });
316
+ }
317
+ // Claude Code marketplace manifest (multi-plugin repo)
318
+ if (configFiles.includes('.claude-plugin/marketplace.json') ||
319
+ allFiles.includes('.claude-plugin/marketplace.json')) {
320
+ signals.push({
321
+ name: 'has-claude-marketplace',
322
+ source: 'file-scanner',
323
+ weight: 8,
324
+ });
325
+ }
326
+ // SKILL.md files under a skills/ directory (plugin skill surface)
327
+ if (docFiles.match(/\/skills\/[^/|]+\/skill\.md/)) {
328
+ signals.push({
329
+ name: 'has-claude-skill-files',
330
+ source: 'file-scanner',
331
+ weight: 6,
332
+ });
333
+ }
334
+ // Command markdown files under a commands/ directory
335
+ if (docFiles.match(/\/commands\/[^/|]+\.md/)) {
336
+ signals.push({
337
+ name: 'has-claude-command-files',
338
+ source: 'file-scanner',
339
+ weight: 5,
340
+ });
341
+ }
303
342
  logger_1.logger.debug(`Extracted ${signals.length} signals from inventory`);
304
343
  return signals;
305
344
  }
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/gap-analyzer/breadcrumbs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAsT1D"}
1
+ {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/gap-analyzer/breadcrumbs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAuY1D"}
@@ -296,6 +296,83 @@ function getBreadcrumbs(docType) {
296
296
  'What indexing strategy do you use?',
297
297
  ],
298
298
  },
299
+ readme: {
300
+ docType: 'readme',
301
+ keywords: ['readme'],
302
+ filePatterns: ['**/README.md', '**/README', '**/README.*'],
303
+ gitPatterns: ['readme:', 'docs: readme', 'docs:readme'],
304
+ codePatterns: [],
305
+ // Single-file docs: presence of the file is the satisfaction signal.
306
+ // The generate-time template enforces the sections; the gap analyzer
307
+ // only needs to know "does a README exist anywhere?"
308
+ requiredSections: ['present'],
309
+ gapQuestions: [
310
+ 'What does your project actually do, in one sentence?',
311
+ 'How does a new user install and run it for the first time?',
312
+ 'What does a minimal working example look like?',
313
+ 'Where should someone go next after reading the README?',
314
+ ],
315
+ },
316
+ 'install-guide': {
317
+ docType: 'install-guide',
318
+ keywords: ['install', 'setup', 'getting-started'],
319
+ filePatterns: [
320
+ '**/INSTALL.md',
321
+ '**/INSTALLATION.md',
322
+ '**/docs/install*',
323
+ '**/docs/setup*',
324
+ '**/docs/getting-started*',
325
+ ],
326
+ gitPatterns: ['install:', 'setup:', 'docs: install'],
327
+ codePatterns: [],
328
+ requiredSections: ['present'],
329
+ gapQuestions: [
330
+ 'What does a user need before installing (OS, runtimes, accounts)?',
331
+ 'What is the exact command or set of steps to install?',
332
+ 'How does a user verify the install worked?',
333
+ 'What are the most common installation problems and fixes?',
334
+ ],
335
+ },
336
+ 'skill-command-reference': {
337
+ docType: 'skill-command-reference',
338
+ keywords: ['skill', 'command'],
339
+ filePatterns: [
340
+ '**/SKILL.md',
341
+ '**/skills/**',
342
+ '**/commands/**',
343
+ '**/docs/commands*',
344
+ '**/docs/skills*',
345
+ ],
346
+ gitPatterns: ['skill:', 'command:', 'docs: skill'],
347
+ codePatterns: ['SKILL.md', 'description:', 'commands/'],
348
+ requiredSections: ['present'],
349
+ gapQuestions: [
350
+ 'What skills or slash commands does this plugin expose?',
351
+ 'For each, what does it do and when should someone reach for it?',
352
+ 'What arguments or inputs does each command accept?',
353
+ 'What does typical output look like?',
354
+ ],
355
+ },
356
+ 'changelog-contributing': {
357
+ docType: 'changelog-contributing',
358
+ keywords: ['changelog', 'contributing', 'history'],
359
+ filePatterns: [
360
+ '**/CHANGELOG.md',
361
+ '**/CONTRIBUTING.md',
362
+ '**/HISTORY.md',
363
+ '**/docs/releases*',
364
+ '**/docs/contributing*',
365
+ ],
366
+ gitPatterns: ['release:', 'changelog:', 'docs: changelog'],
367
+ codePatterns: [],
368
+ requiredSections: ['present'],
369
+ gapQuestions: [
370
+ 'Where do you track notable changes between releases?',
371
+ 'How should a contributor get set up and propose changes?',
372
+ 'What is the review and merge process?',
373
+ 'Is there a code of conduct for contributors?',
374
+ ],
375
+ },
299
376
  };
300
377
  const breadcrumb = breadcrumbs[docType];
301
378
  if (!breadcrumb) {
@@ -9,7 +9,11 @@ export declare enum DocType {
9
9
  APISpec = "api-spec",
10
10
  DeploymentProcedure = "deployment-procedure",
11
11
  TestPlan = "test-plan",
12
- DataModel = "data-model"
12
+ DataModel = "data-model",
13
+ README = "readme",
14
+ InstallGuide = "install-guide",
15
+ SkillCommandReference = "skill-command-reference",
16
+ ChangelogContributing = "changelog-contributing"
13
17
  }
14
18
  export declare enum Tier {
15
19
  Required = "required",
@@ -1 +1 @@
1
- {"version":3,"file":"matrix.d.ts","sourceRoot":"","sources":["../../src/gap-analyzer/matrix.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,oBAAY,OAAO;IACjB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,WAAW,iBAAiB;IAC5B,OAAO,aAAa;IACpB,mBAAmB,yBAAyB;IAC5C,QAAQ,cAAc;IACtB,SAAS,eAAe;CACzB;AAED,oBAAY,IAAI;IACd,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,cAAc,EAAE,CAmDlB"}
1
+ {"version":3,"file":"matrix.d.ts","sourceRoot":"","sources":["../../src/gap-analyzer/matrix.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,oBAAY,OAAO;IACjB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,WAAW,iBAAiB;IAC5B,OAAO,aAAa;IACpB,mBAAmB,yBAAyB;IAC5C,QAAQ,cAAc;IACtB,SAAS,eAAe;IACxB,MAAM,WAAW;IACjB,YAAY,kBAAkB;IAC9B,qBAAqB,4BAA4B;IACjD,qBAAqB,2BAA2B;CACjD;AAED,oBAAY,IAAI;IACd,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAsHD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,cAAc,EAAE,CAmDlB"}
@@ -16,6 +16,10 @@ var DocType;
16
16
  DocType["DeploymentProcedure"] = "deployment-procedure";
17
17
  DocType["TestPlan"] = "test-plan";
18
18
  DocType["DataModel"] = "data-model";
19
+ DocType["README"] = "readme";
20
+ DocType["InstallGuide"] = "install-guide";
21
+ DocType["SkillCommandReference"] = "skill-command-reference";
22
+ DocType["ChangelogContributing"] = "changelog-contributing";
19
23
  })(DocType || (exports.DocType = DocType = {}));
20
24
  var Tier;
21
25
  (function (Tier) {
@@ -35,6 +39,7 @@ const BASE_MATRIX = {
35
39
  MobileApplication: Tier.Recommended,
36
40
  AIMLSystem: Tier.Recommended,
37
41
  IntegrationConnector: Tier.Recommended,
42
+ ClaudeCodePlugin: Tier.Recommended,
38
43
  },
39
44
  [DocType.Runbook]: {
40
45
  WebApplication: Tier.Required,
@@ -44,6 +49,7 @@ const BASE_MATRIX = {
44
49
  MobileApplication: Tier.Required,
45
50
  AIMLSystem: Tier.Required,
46
51
  IntegrationConnector: Tier.Recommended,
52
+ ClaudeCodePlugin: Tier.Optional,
47
53
  },
48
54
  [DocType.ThreatModel]: {
49
55
  WebApplication: Tier.Recommended,
@@ -53,6 +59,7 @@ const BASE_MATRIX = {
53
59
  MobileApplication: Tier.Required,
54
60
  AIMLSystem: Tier.Required,
55
61
  IntegrationConnector: Tier.Recommended,
62
+ ClaudeCodePlugin: Tier.Optional,
56
63
  },
57
64
  [DocType.APISpec]: {
58
65
  WebApplication: Tier.Required,
@@ -62,6 +69,7 @@ const BASE_MATRIX = {
62
69
  MobileApplication: Tier.Recommended,
63
70
  AIMLSystem: Tier.Recommended,
64
71
  IntegrationConnector: Tier.Required,
72
+ ClaudeCodePlugin: Tier.Optional,
65
73
  },
66
74
  [DocType.DeploymentProcedure]: {
67
75
  WebApplication: Tier.Required,
@@ -71,6 +79,7 @@ const BASE_MATRIX = {
71
79
  MobileApplication: Tier.Required,
72
80
  AIMLSystem: Tier.Required,
73
81
  IntegrationConnector: Tier.Recommended,
82
+ ClaudeCodePlugin: Tier.Optional,
74
83
  },
75
84
  [DocType.TestPlan]: {
76
85
  WebApplication: Tier.Recommended,
@@ -80,6 +89,7 @@ const BASE_MATRIX = {
80
89
  MobileApplication: Tier.Required,
81
90
  AIMLSystem: Tier.Required,
82
91
  IntegrationConnector: Tier.Recommended,
92
+ ClaudeCodePlugin: Tier.Recommended,
83
93
  },
84
94
  [DocType.DataModel]: {
85
95
  WebApplication: Tier.Required,
@@ -89,6 +99,47 @@ const BASE_MATRIX = {
89
99
  MobileApplication: Tier.Recommended,
90
100
  AIMLSystem: Tier.Required,
91
101
  IntegrationConnector: Tier.Optional,
102
+ ClaudeCodePlugin: Tier.Optional,
103
+ },
104
+ [DocType.README]: {
105
+ WebApplication: Tier.Required,
106
+ APIMicroservice: Tier.Required,
107
+ DataPipeline: Tier.Required,
108
+ InfrastructurePlatform: Tier.Required,
109
+ MobileApplication: Tier.Required,
110
+ AIMLSystem: Tier.Required,
111
+ IntegrationConnector: Tier.Required,
112
+ ClaudeCodePlugin: Tier.Required,
113
+ },
114
+ [DocType.InstallGuide]: {
115
+ WebApplication: Tier.Recommended,
116
+ APIMicroservice: Tier.Recommended,
117
+ DataPipeline: Tier.Recommended,
118
+ InfrastructurePlatform: Tier.Required,
119
+ MobileApplication: Tier.Required,
120
+ AIMLSystem: Tier.Recommended,
121
+ IntegrationConnector: Tier.Required,
122
+ ClaudeCodePlugin: Tier.Required,
123
+ },
124
+ [DocType.SkillCommandReference]: {
125
+ WebApplication: Tier.Optional,
126
+ APIMicroservice: Tier.Optional,
127
+ DataPipeline: Tier.Optional,
128
+ InfrastructurePlatform: Tier.Optional,
129
+ MobileApplication: Tier.Optional,
130
+ AIMLSystem: Tier.Optional,
131
+ IntegrationConnector: Tier.Recommended,
132
+ ClaudeCodePlugin: Tier.Required,
133
+ },
134
+ [DocType.ChangelogContributing]: {
135
+ WebApplication: Tier.Recommended,
136
+ APIMicroservice: Tier.Recommended,
137
+ DataPipeline: Tier.Recommended,
138
+ InfrastructurePlatform: Tier.Recommended,
139
+ MobileApplication: Tier.Recommended,
140
+ AIMLSystem: Tier.Recommended,
141
+ IntegrationConnector: Tier.Recommended,
142
+ ClaudeCodePlugin: Tier.Recommended,
92
143
  },
93
144
  };
94
145
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tier-assigner.d.ts","sourceRoot":"","sources":["../../src/gap-analyzer/tier-assigner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,cAAc,EAAE,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACnC,GAAG,EAAE,CA+BP;AAmGD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"tier-assigner.d.ts","sourceRoot":"","sources":["../../src/gap-analyzer/tier-assigner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,cAAc,EAAE,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACnC,GAAG,EAAE,CA+BP;AAiHD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -67,19 +67,31 @@ function searchForDocumentationEvidence(breadcrumb, inventory) {
67
67
  }
68
68
  /**
69
69
  * Simple glob pattern matcher
70
+ * Normalizes Windows backslashes to forward slashes so glob patterns
71
+ * that reference path segments (e.g., "** /docs/adr/**") work cross-platform.
70
72
  */
71
73
  function matchPattern(filePath, pattern) {
72
74
  const regex = patternToRegex(pattern);
73
- return regex.test(filePath.toLowerCase());
75
+ const normalized = filePath.replace(/\\/g, '/').toLowerCase();
76
+ return regex.test(normalized);
74
77
  }
75
78
  /**
76
79
  * Convert glob pattern to regex
80
+ *
81
+ * Uses a placeholder for `**` to prevent the subsequent `*` → `[^/]*`
82
+ * replacement from clobbering the `*` inside `.*`. A naive two-pass
83
+ * replacement silently produced `.[^/]*` for every `**` pattern,
84
+ * which broke glob matching for every doc type.
77
85
  */
78
86
  function patternToRegex(pattern) {
87
+ // Escape regex-special characters first
79
88
  const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
89
+ // Use a placeholder token that can't appear in a normal path
90
+ const DOUBLE_STAR = '\u0000DOUBLESTAR\u0000';
80
91
  const globRegex = escaped
81
- .replace(/\*\*/g, '.*')
92
+ .replace(/\*\*/g, DOUBLE_STAR)
82
93
  .replace(/\*/g, '[^/]*')
94
+ .replace(new RegExp(DOUBLE_STAR, 'g'), '.*')
83
95
  .replace(/\?/g, '.');
84
96
  return new RegExp(`^${globRegex}$`, 'i');
85
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../src/scanner/file-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,UAAU,cAAc;IACtB,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE,eAAe,CAAC;IAChC,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,eAAe,CAAC;IAChC,WAAW,EAAE,eAAe,CAAC;IAC7B,cAAc,EAAE,eAAe,CAAC;IAChC,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,eAAe,CAAC;CAC7B;AA8CD,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2B5E"}
1
+ {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../src/scanner/file-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,UAAU,cAAc;IACtB,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE,eAAe,CAAC;IAChC,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,eAAe,CAAC;IAChC,WAAW,EAAE,eAAe,CAAC;IAC7B,cAAc,EAAE,eAAe,CAAC;IAChC,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,eAAe,CAAC;CAC7B;AAmDD,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2B5E"}
@@ -46,6 +46,14 @@ function categorizeFile(filePath) {
46
46
  const n = filePath.replace(/\\/g, '/');
47
47
  if (n.endsWith('CLAUDE.md'))
48
48
  return 'configAsDocs';
49
+ // Claude Code plugin manifests (plugin.json, marketplace.json inside .claude-plugin/)
50
+ if (n.includes('/.claude-plugin/') && n.endsWith('.json'))
51
+ return 'packageConfigs';
52
+ // SKILL.md files and command docs are plugin surface area
53
+ if (n.match(/\/skills\/[^/]+\/SKILL\.md$/i))
54
+ return 'documentation';
55
+ if (n.match(/\/commands\/[^/]+\.md$/i))
56
+ return 'documentation';
49
57
  if (n.includes('/.ai/') || n.includes('/.agent/skills/'))
50
58
  return 'agentArtifacts';
51
59
  if (n.includes('/.claude/'))
@@ -64,7 +72,7 @@ function categorizeFile(filePath) {
64
72
  return 'apiSpecs';
65
73
  return 'sourceCode';
66
74
  }
67
- function walkDir(dir, maxDepth = 4, currentDepth = 0) {
75
+ function walkDir(dir, maxDepth = 6, currentDepth = 0) {
68
76
  const files = [];
69
77
  if (currentDepth > maxDepth)
70
78
  return files;
@@ -73,7 +81,7 @@ function walkDir(dir, maxDepth = 4, currentDepth = 0) {
73
81
  for (const entry of entries) {
74
82
  if (EXCLUDE_DIRS.has(entry.name))
75
83
  continue;
76
- if (entry.name.startsWith('.') && entry.name !== '.ai' && entry.name !== '.agent' && entry.name !== '.claude' && entry.name !== '.github')
84
+ if (entry.name.startsWith('.') && entry.name !== '.ai' && entry.name !== '.agent' && entry.name !== '.claude' && entry.name !== '.claude-plugin' && entry.name !== '.github')
77
85
  continue;
78
86
  const fullPath = path.join(dir, entry.name);
79
87
  if (entry.isFile()) {
@@ -0,0 +1,45 @@
1
+ ---
2
+ docType: adr
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Architecture Decision Record
8
+
9
+ ## Status
10
+
11
+ {{user.status}}
12
+
13
+ <!-- NEEDS INPUT: What is the status of this decision? (Proposed, Accepted, Deprecated, Superseded) -->
14
+
15
+ ## Context
16
+
17
+ {{extracted.context}}
18
+
19
+ {{user.context}}
20
+
21
+ <!-- NEEDS INPUT: What is the issue that motivated this decision or any context you should record here? -->
22
+
23
+ ## Decision
24
+
25
+ {{extracted.decision}}
26
+
27
+ {{user.decision}}
28
+
29
+ <!-- NEEDS INPUT: What is the change that we're proposing or have agreed to do? -->
30
+
31
+ ## Consequences
32
+
33
+ {{extracted.consequences}}
34
+
35
+ {{user.consequences}}
36
+
37
+ <!-- NEEDS INPUT: What becomes easier or more difficult to do because of this change? Include positive and negative consequences. -->
38
+
39
+ ## Alternatives
40
+
41
+ {{extracted.alternatives}}
42
+
43
+ {{user.alternatives}}
44
+
45
+ <!-- NEEDS INPUT: What other options did you consider and why were they rejected? -->
@@ -0,0 +1,55 @@
1
+ ---
2
+ docType: api-spec
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # API Specification
8
+
9
+ ## Base URL
10
+
11
+ {{extracted.base-url}}
12
+
13
+ {{user.base-url}}
14
+
15
+ <!-- NEEDS INPUT: What is the base URL for your API? Include protocol, hostname, and port. -->
16
+
17
+ ## Endpoints
18
+
19
+ {{extracted.endpoints}}
20
+
21
+ {{user.endpoints}}
22
+
23
+ <!-- NEEDS INPUT: List your primary endpoints. Include HTTP method, path, and brief description. -->
24
+
25
+ ## Request Format
26
+
27
+ {{extracted.request-format}}
28
+
29
+ {{user.request-format}}
30
+
31
+ <!-- NEEDS INPUT: Describe the request format. Include content-type, headers, body structure, and examples. -->
32
+
33
+ ## Response Format
34
+
35
+ {{extracted.response-format}}
36
+
37
+ {{user.response-format}}
38
+
39
+ <!-- NEEDS INPUT: Describe the response format. Include status codes, body structure, headers, and examples. -->
40
+
41
+ ## Error Handling
42
+
43
+ {{extracted.error-handling}}
44
+
45
+ {{user.error-handling}}
46
+
47
+ <!-- NEEDS INPUT: How do you handle errors? Include error codes, error message format, and common errors. -->
48
+
49
+ ## Authentication
50
+
51
+ {{extracted.authentication}}
52
+
53
+ {{user.authentication}}
54
+
55
+ <!-- NEEDS INPUT: How do clients authenticate? Include auth mechanisms, required headers, and token formats. -->
@@ -0,0 +1,67 @@
1
+ ---
2
+ docType: changelog-contributing
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Changelog and Contributing
8
+
9
+ ## Changelog
10
+
11
+ All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
12
+
13
+ ### Unreleased
14
+
15
+ {{user.unreleased}}
16
+
17
+ <!-- NEEDS INPUT: Changes that have landed on main but haven't shipped in a release yet. Group by Added / Changed / Deprecated / Removed / Fixed / Security. -->
18
+
19
+ ### {{user.latestVersion}} — {{user.latestDate}}
20
+
21
+ {{extracted.latestRelease}}
22
+
23
+ {{user.latestRelease}}
24
+
25
+ <!-- NEEDS INPUT: The most recent shipped version. Same Added/Changed/etc. grouping. -->
26
+
27
+ ### Prior Releases
28
+
29
+ {{extracted.priorReleases}}
30
+
31
+ {{user.priorReleases}}
32
+
33
+ <!-- NEEDS INPUT: Older releases in reverse chronological order. Keep summaries short — point to git tags or GitHub releases for full diffs. -->
34
+
35
+ ---
36
+
37
+ ## Contributing
38
+
39
+ ### How to Contribute
40
+
41
+ {{user.howToContribute}}
42
+
43
+ <!-- NEEDS INPUT: The high-level contributor path — fork, branch, change, PR. Link to the code of conduct and any contributor license terms. -->
44
+
45
+ ### Development Setup
46
+
47
+ {{user.devSetup}}
48
+
49
+ <!-- NEEDS INPUT: What a contributor needs to build and test locally. Prerequisites, install commands, how to run the test suite. This may overlap with the install guide — that's fine, contributors need it in one place. -->
50
+
51
+ ### Proposing a Change
52
+
53
+ {{user.proposingChange}}
54
+
55
+ <!-- NEEDS INPUT: Branching strategy, commit message format, PR template expectations, and any required checks (tests, linters, type checks) that must pass. -->
56
+
57
+ ### Review Process
58
+
59
+ {{user.reviewProcess}}
60
+
61
+ <!-- NEEDS INPUT: Who reviews PRs, what the turnaround looks like, and what approval is required before merge. -->
62
+
63
+ ### Code of Conduct
64
+
65
+ {{user.codeOfConduct}}
66
+
67
+ <!-- NEEDS INPUT: A link to the code of conduct or a short statement of expected behavior. -->
@@ -0,0 +1,55 @@
1
+ ---
2
+ docType: data-model
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Data Model
8
+
9
+ ## Entity Overview
10
+
11
+ {{extracted.entity-overview}}
12
+
13
+ {{user.entity-overview}}
14
+
15
+ <!-- NEEDS INPUT: What are the main entities/tables in your data model? Include brief descriptions of each. -->
16
+
17
+ ## Table Schemas
18
+
19
+ {{extracted.table-schemas}}
20
+
21
+ {{user.table-schemas}}
22
+
23
+ <!-- NEEDS INPUT: Describe the schema for each table. Include column names, types, and descriptions. -->
24
+
25
+ ## Relationships
26
+
27
+ {{extracted.relationships}}
28
+
29
+ {{user.relationships}}
30
+
31
+ <!-- NEEDS INPUT: What are the relationships between tables? Include foreign keys and cardinality. -->
32
+
33
+ ## Constraints
34
+
35
+ {{extracted.constraints}}
36
+
37
+ {{user.constraints}}
38
+
39
+ <!-- NEEDS INPUT: What constraints and validation rules exist? Include unique constraints, check constraints, and business rules. -->
40
+
41
+ ## Indexes
42
+
43
+ {{extracted.indexes}}
44
+
45
+ {{user.indexes}}
46
+
47
+ <!-- NEEDS INPUT: What indexes exist and why? Include primary keys, unique indexes, and performance indexes. -->
48
+
49
+ ## Migration Strategy
50
+
51
+ {{extracted.migration-strategy}}
52
+
53
+ {{user.migration-strategy}}
54
+
55
+ <!-- NEEDS INPUT: How do you handle schema migrations? Include versioning, rollback strategy, and zero-downtime deployment. -->
@@ -0,0 +1,63 @@
1
+ ---
2
+ docType: deployment-procedure
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Deployment Procedure
8
+
9
+ ## Prerequisites
10
+
11
+ {{extracted.prerequisites}}
12
+
13
+ {{user.prerequisites}}
14
+
15
+ <!-- NEEDS INPUT: What prerequisites must be met before deployment? Include access, tools, accounts, and configurations. -->
16
+
17
+ ## Build Process
18
+
19
+ {{extracted.build-process}}
20
+
21
+ {{user.build-process}}
22
+
23
+ <!-- NEEDS INPUT: What are the steps to build the application? Include compilation, dependency installation, and artifact generation. -->
24
+
25
+ ## Environment Setup
26
+
27
+ {{extracted.environment-setup}}
28
+
29
+ {{user.environment-setup}}
30
+
31
+ <!-- NEEDS INPUT: What environment variables, secrets, and configurations are required for each environment? -->
32
+
33
+ ## Testing Before Deploy
34
+
35
+ {{extracted.testing-before-deploy}}
36
+
37
+ {{user.testing-before-deploy}}
38
+
39
+ <!-- NEEDS INPUT: What tests and validations run before deployment? Include smoke tests, integration tests, and health checks. -->
40
+
41
+ ## Deployment Steps
42
+
43
+ {{extracted.deployment-steps}}
44
+
45
+ {{user.deployment-steps}}
46
+
47
+ <!-- NEEDS INPUT: What are the step-by-step deployment instructions? Include database migrations, service restarts, and traffic shifting. -->
48
+
49
+ ## Post-Deployment Checks
50
+
51
+ {{extracted.post-deployment-checks}}
52
+
53
+ {{user.post-deployment-checks}}
54
+
55
+ <!-- NEEDS INPUT: What checks verify the deployment was successful? Include health checks, endpoint tests, and monitoring. -->
56
+
57
+ ## Rollback Procedure
58
+
59
+ {{extracted.rollback-procedure}}
60
+
61
+ {{user.rollback-procedure}}
62
+
63
+ <!-- NEEDS INPUT: How do you rollback to the previous version? Include steps, data rollback, and communication plan. -->
@@ -0,0 +1,49 @@
1
+ ---
2
+ docType: install-guide
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Installation Guide
8
+
9
+ ## Prerequisites
10
+
11
+ {{extracted.prerequisites}}
12
+
13
+ {{user.prerequisites}}
14
+
15
+ <!-- NEEDS INPUT: What does a user need before they start? OS, runtime versions (Node 18+, Python 3.11+, etc.), required CLI tools, accounts, API keys. Be specific about minimum versions. -->
16
+
17
+ ## Install Steps
18
+
19
+ {{extracted.installSteps}}
20
+
21
+ {{user.installSteps}}
22
+
23
+ <!-- NEEDS INPUT: The exact ordered steps. For each step, include the command to run and the expected outcome. If there are multiple install paths (npm vs. git clone vs. marketplace), list them all. -->
24
+
25
+ ## Verification
26
+
27
+ {{user.verification}}
28
+
29
+ <!-- NEEDS INPUT: How does a user confirm the install worked? A command they can run (e.g., `vibe-doc --version`), a health-check URL, or a first-use command that should produce expected output. -->
30
+
31
+ ## Configuration
32
+
33
+ {{user.configuration}}
34
+
35
+ <!-- NEEDS INPUT: Any required configuration after install — env vars, config files, credentials. If none are required, say so explicitly. -->
36
+
37
+ ## Troubleshooting
38
+
39
+ {{extracted.troubleshooting}}
40
+
41
+ {{user.troubleshooting}}
42
+
43
+ <!-- NEEDS INPUT: The three to five most common installation failures and their fixes. Real users have hit these problems — write the fix, not a generic "contact support." -->
44
+
45
+ ## Uninstalling
46
+
47
+ {{user.uninstall}}
48
+
49
+ <!-- NEEDS INPUT: How to cleanly remove the project. Include any config files or data directories that need manual cleanup. -->
@@ -0,0 +1,55 @@
1
+ ---
2
+ docType: readme
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # {{user.projectName}}
8
+
9
+ {{extracted.tagline}}
10
+
11
+ {{user.tagline}}
12
+
13
+ <!-- NEEDS INPUT: One-sentence description of what this project is and who it's for. -->
14
+
15
+ ## Overview
16
+
17
+ {{extracted.overview}}
18
+
19
+ {{user.overview}}
20
+
21
+ <!-- NEEDS INPUT: A short paragraph explaining what the project does, the problem it solves, and the audience. Keep it under 100 words. -->
22
+
23
+ ## Installation
24
+
25
+ {{extracted.installation}}
26
+
27
+ {{user.installation}}
28
+
29
+ <!-- NEEDS INPUT: The shortest path to getting the project installed and working. Include prerequisites and the exact install command. -->
30
+
31
+ ## Usage
32
+
33
+ {{extracted.usage}}
34
+
35
+ {{user.usage}}
36
+
37
+ <!-- NEEDS INPUT: A minimal working example showing the most common use case. Prefer a code block or a short step list over prose. -->
38
+
39
+ ## Examples
40
+
41
+ {{user.examples}}
42
+
43
+ <!-- NEEDS INPUT: Two or three additional examples covering the next-most-common use cases. Link to a /docs or /examples folder if one exists. -->
44
+
45
+ ## Documentation
46
+
47
+ {{user.documentation}}
48
+
49
+ <!-- NEEDS INPUT: Where does a reader go next? Link to fuller docs, a command reference, a changelog, or a contributing guide. -->
50
+
51
+ ## License
52
+
53
+ {{user.license}}
54
+
55
+ <!-- NEEDS INPUT: The project's license (usually one line — e.g. "MIT" — and a link to LICENSE). -->
@@ -0,0 +1,55 @@
1
+ ---
2
+ docType: runbook
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Runbook
8
+
9
+ ## Service Overview
10
+
11
+ {{extracted.service-overview}}
12
+
13
+ {{user.service-overview}}
14
+
15
+ <!-- NEEDS INPUT: What does this service do? What is its primary responsibility? -->
16
+
17
+ ## Startup Procedure
18
+
19
+ {{extracted.startup-procedure}}
20
+
21
+ {{user.startup-procedure}}
22
+
23
+ <!-- NEEDS INPUT: What are the steps to start the service? Include environment setup, dependencies, configuration. -->
24
+
25
+ ## Health Checks
26
+
27
+ {{extracted.health-checks}}
28
+
29
+ {{user.health-checks}}
30
+
31
+ <!-- NEEDS INPUT: How do you verify the service is healthy? What are the key metrics or checks? -->
32
+
33
+ ## Common Issues
34
+
35
+ {{extracted.common-issues}}
36
+
37
+ {{user.common-issues}}
38
+
39
+ <!-- NEEDS INPUT: What are the most common problems and their solutions? -->
40
+
41
+ ## Rollback Procedure
42
+
43
+ {{extracted.rollback-procedure}}
44
+
45
+ {{user.rollback-procedure}}
46
+
47
+ <!-- NEEDS INPUT: How do you roll back to a previous version? What steps are required? -->
48
+
49
+ ## Escalation Path
50
+
51
+ {{extracted.escalation-path}}
52
+
53
+ {{user.escalation-path}}
54
+
55
+ <!-- NEEDS INPUT: Who should be contacted for different severity levels? What is the on-call process? -->
@@ -0,0 +1,77 @@
1
+ ---
2
+ docType: skill-command-reference
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Skill and Command Reference
8
+
9
+ This document lists every skill and command this plugin exposes, what each one does, and how to invoke it.
10
+
11
+ ## Skills
12
+
13
+ {{extracted.skillList}}
14
+
15
+ {{user.skillList}}
16
+
17
+ <!-- NEEDS INPUT: One entry per skill. For each: the skill name, a one-sentence description, when a user should reach for it, and a pointer to the underlying SKILL.md file if applicable. -->
18
+
19
+ ### Skill: {{user.skillName}}
20
+
21
+ **Purpose:** {{user.skillPurpose}}
22
+
23
+ **When to use:** {{user.skillWhenToUse}}
24
+
25
+ **Inputs:** {{user.skillInputs}}
26
+
27
+ **Example:**
28
+
29
+ ```
30
+ {{user.skillExample}}
31
+ ```
32
+
33
+ <!-- NEEDS INPUT: Repeat this block for each skill the plugin ships. -->
34
+
35
+ ## Commands
36
+
37
+ {{extracted.commandList}}
38
+
39
+ {{user.commandList}}
40
+
41
+ <!-- NEEDS INPUT: One entry per slash command. For each: the command, its purpose, arguments (required and optional), and a minimal example invocation. -->
42
+
43
+ ### Command: `{{user.commandName}}`
44
+
45
+ **Purpose:** {{user.commandPurpose}}
46
+
47
+ **Syntax:** `/{{user.commandName}} [arguments]`
48
+
49
+ **Arguments:**
50
+
51
+ {{user.commandArguments}}
52
+
53
+ <!-- NEEDS INPUT: List each argument with name, type, required/optional, and a one-line description. -->
54
+
55
+ **Example:**
56
+
57
+ ```
58
+ {{user.commandExample}}
59
+ ```
60
+
61
+ **Output:**
62
+
63
+ {{user.commandOutput}}
64
+
65
+ <!-- NEEDS INPUT: What the user sees when the command succeeds. A screenshot, an expected text snippet, or a description of the artifact created. -->
66
+
67
+ ## Composition
68
+
69
+ {{user.composition}}
70
+
71
+ <!-- NEEDS INPUT: If the plugin's commands chain together (e.g., /scan → /report → /generate), document the typical workflow here. Show the order and what each step hands to the next. -->
72
+
73
+ ## Errors and Edge Cases
74
+
75
+ {{user.errors}}
76
+
77
+ <!-- NEEDS INPUT: The most common failure modes (missing prerequisites, invalid inputs, environment issues) and how the user should respond. -->
@@ -0,0 +1,55 @@
1
+ ---
2
+ docType: test-plan
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Test Plan
8
+
9
+ ## Test Strategy
10
+
11
+ {{extracted.test-strategy}}
12
+
13
+ {{user.test-strategy}}
14
+
15
+ <!-- NEEDS INPUT: What is your overall testing strategy? Include testing levels, approach, and priorities. -->
16
+
17
+ ## Unit Tests
18
+
19
+ {{extracted.unit-tests}}
20
+
21
+ {{user.unit-tests}}
22
+
23
+ <!-- NEEDS INPUT: What components and functions are covered by unit tests? Include test coverage goals. -->
24
+
25
+ ## Integration Tests
26
+
27
+ {{extracted.integration-tests}}
28
+
29
+ {{user.integration-tests}}
30
+
31
+ <!-- NEEDS INPUT: What system interactions are tested? Include database, APIs, and third-party services. -->
32
+
33
+ ## E2E Tests
34
+
35
+ {{extracted.e2e-tests}}
36
+
37
+ {{user.e2e-tests}}
38
+
39
+ <!-- NEEDS INPUT: What critical user workflows are tested end-to-end? Include scenarios and acceptance criteria. -->
40
+
41
+ ## Performance Tests
42
+
43
+ {{extracted.performance-tests}}
44
+
45
+ {{user.performance-tests}}
46
+
47
+ <!-- NEEDS INPUT: What performance characteristics are tested? Include load tests, latency targets, and throughput. -->
48
+
49
+ ## Coverage Targets
50
+
51
+ {{extracted.coverage-targets}}
52
+
53
+ {{user.coverage-targets}}
54
+
55
+ <!-- NEEDS INPUT: What are your code coverage targets? Include overall target and critical areas. -->
@@ -0,0 +1,47 @@
1
+ ---
2
+ docType: threat-model
3
+ version: 1.0
4
+ templateVersion: 1
5
+ ---
6
+
7
+ # Threat Model
8
+
9
+ ## Asset Scope
10
+
11
+ {{extracted.asset-scope}}
12
+
13
+ {{user.asset-scope}}
14
+
15
+ <!-- NEEDS INPUT: What are the valuable assets you need to protect? Include data, infrastructure, and systems. -->
16
+
17
+ ## Threat Actors
18
+
19
+ {{extracted.threat-actors}}
20
+
21
+ {{user.threat-actors}}
22
+
23
+ <!-- NEEDS INPUT: Who are the potential threat actors? (e.g., external attackers, malicious insiders, nation-states) -->
24
+
25
+ ## Threat Scenarios
26
+
27
+ {{extracted.threat-scenarios}}
28
+
29
+ {{user.threat-scenarios}}
30
+
31
+ <!-- NEEDS INPUT: What are the specific threat scenarios you are concerned about? How might they compromise your assets? -->
32
+
33
+ ## Mitigations
34
+
35
+ {{extracted.mitigations}}
36
+
37
+ {{user.mitigations}}
38
+
39
+ <!-- NEEDS INPUT: What controls do you have in place to mitigate these threats? Include technical, process, and organizational controls. -->
40
+
41
+ ## Residual Risks
42
+
43
+ {{extracted.residual-risks}}
44
+
45
+ {{user.residual-risks}}
46
+
47
+ <!-- NEEDS INPUT: What risks remain after implementing mitigations? What is your risk tolerance? -->
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAYxC;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAgBxC;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -99,6 +99,10 @@ function listTemplates() {
99
99
  'deployment-procedure',
100
100
  'test-plan',
101
101
  'data-model',
102
+ 'readme',
103
+ 'install-guide',
104
+ 'skill-command-reference',
105
+ 'changelog-contributing',
102
106
  ];
103
107
  return templates;
104
108
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esthernandez/vibe-doc",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "AI-powered documentation gap analyzer and generator for modern codebases. Scans your project, classifies your architecture, and generates professional docs from your existing artifacts.",
5
5
  "author": "626Labs LLC",
6
6
  "license": "MIT",