@kleber.mottajr/juninho 1.1.0 → 1.3.0

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 (49) hide show
  1. package/README.md +112 -13
  2. package/dist/cli.js +40 -23
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +7 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +8 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/installer.d.ts +2 -0
  9. package/dist/installer.d.ts.map +1 -1
  10. package/dist/installer.js +180 -54
  11. package/dist/installer.js.map +1 -1
  12. package/dist/lint-detection.d.ts +26 -0
  13. package/dist/lint-detection.d.ts.map +1 -0
  14. package/dist/lint-detection.js +226 -0
  15. package/dist/lint-detection.js.map +1 -0
  16. package/dist/models.js +4 -4
  17. package/dist/models.js.map +1 -1
  18. package/dist/project-types.d.ts +52 -0
  19. package/dist/project-types.d.ts.map +1 -0
  20. package/dist/project-types.js +284 -0
  21. package/dist/project-types.js.map +1 -0
  22. package/dist/templates/agents.d.ts +2 -1
  23. package/dist/templates/agents.d.ts.map +1 -1
  24. package/dist/templates/agents.js +7 -5
  25. package/dist/templates/agents.js.map +1 -1
  26. package/dist/templates/commands.d.ts.map +1 -1
  27. package/dist/templates/commands.js +225 -150
  28. package/dist/templates/commands.js.map +1 -1
  29. package/dist/templates/docs.d.ts +2 -1
  30. package/dist/templates/docs.d.ts.map +1 -1
  31. package/dist/templates/docs.js +61 -14
  32. package/dist/templates/docs.js.map +1 -1
  33. package/dist/templates/plugins.d.ts +2 -1
  34. package/dist/templates/plugins.d.ts.map +1 -1
  35. package/dist/templates/plugins.js +167 -102
  36. package/dist/templates/plugins.js.map +1 -1
  37. package/dist/templates/skills.d.ts +2 -1
  38. package/dist/templates/skills.d.ts.map +1 -1
  39. package/dist/templates/skills.js +708 -195
  40. package/dist/templates/skills.js.map +1 -1
  41. package/dist/templates/support-scripts.d.ts +2 -1
  42. package/dist/templates/support-scripts.d.ts.map +1 -1
  43. package/dist/templates/support-scripts.js +468 -21
  44. package/dist/templates/support-scripts.js.map +1 -1
  45. package/dist/templates/tools.d.ts +2 -1
  46. package/dist/templates/tools.d.ts.map +1 -1
  47. package/dist/templates/tools.js +315 -74
  48. package/dist/templates/tools.js.map +1 -1
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/templates/docs.ts"],"names":[],"mappings":";;;;;AAUA,8BASC;AAED,8CA2HC;AAhJD,2BAA4D;AAC5D,gDAAuB;AACvB,4CAA6C;AAQ7C,SAAgB,SAAS,CAAC,UAAkB;IAC1C,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;IAC5D,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAA;IAChF,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;IAChF,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,aAAa,CAAC,CAAA;IAC7F,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,cAAc,CAAC,CAAA;IAC/F,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,YAAY,CAAC,CAAA;IAC3F,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,aAAa,CAAC,CAAA;IAC7F,IAAA,kBAAa,EAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,aAAa,CAAC,CAAA;AAC/F,CAAC;AAED,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,MAAuB;IAC3E,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,0BAAc,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IAEvD,IAAI,QAAQ,GAA4B,EAAE,CAAA;IAC1C,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;YACxC,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG;QACtB,GAAG,EAAE;YACH,+EAA+E;YAC/E,6EAA6E;YAC7E,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,8BAA8B,CAAC;aACvD;SACF;QACD,KAAK,EAAE;YACL,8CAA8C;YAC9C,6EAA6E;YAC7E,WAAW,EAAE;gBACX,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,KAAK,EAAE,OAAO,EAAI,sCAAsC;oBACxD,IAAI,EAAE,OAAO,EAAK,gDAAgD;oBAClE,IAAI,EAAE,OAAO,EAAK,2CAA2C;oBAC7D,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,OAAO;iBAClB;aACF;YACD,iBAAiB,EAAE;gBACjB,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,OAAO,EAAG,sCAAsC;oBACvD,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,OAAO,EAAI,2CAA2C;oBAC5D,QAAQ,EAAE,OAAO;iBAClB;aACF;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO,EAAI,4BAA4B;oBAC7C,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO,EAAI,gDAAgD;oBACjE,KAAK,EAAE,OAAO,EAAG,4BAA4B;oBAC7C,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,WAAW,EAAE;gBACX,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,UAAU,EAAE;oBACV,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,UAAU,EAAE;oBACV,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,MAAM;iBACjB;aACF;SACF;KACF,CAAA;IAED,4FAA4F;IAC5F,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IAEnD,IAAA,kBAAa,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,SAAS,CAChB,IAA6B,EAC7B,QAAiC;IAEjC,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAA;IAEnD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAEjC,IACE,WAAW,KAAK,IAAI;YACpB,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3B,OAAO,KAAK,IAAI;YAChB,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,OAAkC,EAClC,WAAsC,CACvC,CAAA;QACH,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,iFAAiF;AAEjF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JjB,CAAA;AAED,iFAAiF;AAEjF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAA;AAED,iFAAiF;AAEjF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsChB,CAAA;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcrB,CAAA;AAED,MAAM,cAAc,GAAG;;;;;;;;;;CAUtB,CAAA;AAED,MAAM,YAAY,GAAG;;;;;;;;;;CAUpB,CAAA;AAED,MAAM,aAAa,GAAG;;;;;;;;;;CAUrB,CAAA;AAED,MAAM,aAAa,GAAG;;;;;;;;;;CAUrB,CAAA"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/templates/docs.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export declare function writePlugins(projectDir: string): void;
1
+ import type { ProjectType } from "../project-types.js";
2
+ export declare function writePlugins(projectDir: string, projectType?: ProjectType, isKotlin?: boolean): void;
2
3
  //# sourceMappingURL=plugins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/templates/plugins.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAerD"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/templates/plugins.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,WAA2B,EACxC,QAAQ,GAAE,OAAe,GACxB,IAAI,CAqBN"}
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.writePlugins = writePlugins;
7
7
  const fs_1 = require("fs");
8
8
  const path_1 = __importDefault(require("path"));
9
- function writePlugins(projectDir) {
9
+ function writePlugins(projectDir, projectType = "node-nextjs", isKotlin = false) {
10
10
  const pluginsDir = path_1.default.join(projectDir, ".opencode", "plugins");
11
11
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.env-protection.ts"), ENV_PROTECTION);
12
12
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.auto-format.ts"), AUTO_FORMAT);
13
13
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.plan-autoload.ts"), PLAN_AUTOLOAD);
14
14
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.carl-inject.ts"), CARL_INJECT);
15
- (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.skill-inject.ts"), SKILL_INJECT);
15
+ (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.skill-inject.ts"), skillInject(projectType, isKotlin));
16
16
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.intent-gate.ts"), INTENT_GATE);
17
17
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.todo-enforcer.ts"), TODO_ENFORCER);
18
18
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.comment-checker.ts"), COMMENT_CHECKER);
@@ -20,6 +20,8 @@ function writePlugins(projectDir) {
20
20
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.hashline-edit.ts"), HASHLINE_EDIT);
21
21
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.directory-agents-injector.ts"), DIR_AGENTS_INJECTOR);
22
22
  (0, fs_1.writeFileSync)(path_1.default.join(pluginsDir, "j.memory.ts"), MEMORY);
23
+ // Write initial skill-map.json for dynamic extension by /j.finish-setup
24
+ (0, fs_1.writeFileSync)(path_1.default.join(projectDir, ".opencode", "state", "skill-map.json"), JSON.stringify(getBaseSkillMap(projectType, isKotlin), null, 2) + "\n");
23
25
  }
24
26
  // ─── Env Protection ──────────────────────────────────────────────────────────
25
27
  const ENV_PROTECTION = `import type { Plugin } from "@opencode-ai/plugin"
@@ -270,7 +272,7 @@ function stripCodeBlocks(text: string): string {
270
272
  function extractKeywords(text: string): Set<string> {
271
273
  // Extract meaningful words from text (stripped of code) for matching
272
274
  const words = new Set<string>()
273
- for (const w of text.split(/[^a-zA-Z0-9_-]+/).filter((w) => w.length >= 3)) {
275
+ for (const w of text.split(/[^a-zA-Z0-9_-]+/).filter((w) => w.length >= 3)) {
274
276
  words.add(w.toLowerCase())
275
277
  }
276
278
  return words
@@ -281,26 +283,26 @@ function extractPathKeywords(filePath: string): Set<string> {
281
283
  const parts = filePath.replace(/\\\\/g, "/").split("/")
282
284
  const words = new Set<string>()
283
285
  for (const part of parts) {
284
- for (const w of part.split(/[^a-zA-Z0-9_-]+/).filter((w) => w.length >= 3)) {
286
+ for (const w of part.split(/[^a-zA-Z0-9_-]+/).filter((w) => w.length >= 3)) {
285
287
  words.add(w.toLowerCase())
286
288
  }
287
289
  }
288
290
  return words
289
291
  }
290
292
 
291
- function escapeRegex(value: string): string {
292
- return value.replace(/[.*+?^$()|[\\]{}]/g, "\\$&")
293
- }
294
-
295
- function matchKeyword(keyword: string, textWords: Set<string>, rawText: string): boolean {
296
- // Word-boundary matching — "auth" matches "auth" but NOT "authorize" or "author"
297
- // First check exact set membership (fast path), then regex fallback for
298
- // short tokens and multi-word recall terms.
299
- if (textWords.has(keyword)) return true
300
-
301
- const pattern = new RegExp("\\b" + escapeRegex(keyword) + "\\b", "i")
302
- return pattern.test(rawText)
303
- }
293
+ function escapeRegex(value: string): string {
294
+ return value.replace(/[.*+?^$()|[\\]{}]/g, "\\$&")
295
+ }
296
+
297
+ function matchKeyword(keyword: string, textWords: Set<string>, rawText: string): boolean {
298
+ // Word-boundary matching — "auth" matches "auth" but NOT "authorize" or "author"
299
+ // First check exact set membership (fast path), then regex fallback for
300
+ // short tokens and multi-word recall terms.
301
+ if (textWords.has(keyword)) return true
302
+
303
+ const pattern = new RegExp("\\b" + escapeRegex(keyword) + "\\b", "i")
304
+ return pattern.test(rawText)
305
+ }
304
306
 
305
307
  // ── ContextCollector — budget-aware dedup singleton ──
306
308
 
@@ -366,7 +368,7 @@ export default (async ({ directory }: { directory: string }) => {
366
368
  return extractKeywords(stripCodeBlocks(taskText))
367
369
  }
368
370
 
369
- function matchAgainstSources(keywords: Set<string>, rawText: string): string[] {
371
+ function matchAgainstSources(keywords: Set<string>, rawText: string): string[] {
370
372
  const manifestPath = path.join(directory, "docs", "principles", "manifest")
371
373
  const indexPath = path.join(directory, "docs", "domain", "INDEX.md")
372
374
  const addedKeys: string[] = []
@@ -380,7 +382,7 @@ export default (async ({ directory }: { directory: string }) => {
380
382
  const dedupKey = \`principle:\${entry.key}\`
381
383
  if (collector.has(dedupKey)) continue
382
384
 
383
- const matched = entry.recall.some((kw) => matchKeyword(kw, keywords, rawText))
385
+ const matched = entry.recall.some((kw) => matchKeyword(kw, keywords, rawText))
384
386
  if (!matched) continue
385
387
 
386
388
  const entryFilePath = path.join(directory, entry.file)
@@ -399,7 +401,7 @@ export default (async ({ directory }: { directory: string }) => {
399
401
  const domains = parseDomainIndex(index)
400
402
 
401
403
  for (const entry of domains) {
402
- const matched = entry.keywords.some((kw) => matchKeyword(kw, keywords, rawText))
404
+ const matched = entry.keywords.some((kw) => matchKeyword(kw, keywords, rawText))
403
405
  if (!matched) continue
404
406
 
405
407
  for (const file of entry.files.slice(0, 3)) {
@@ -443,21 +445,21 @@ export default (async ({ directory }: { directory: string }) => {
443
445
  const contentKw = extractKeywords(strippedContent)
444
446
  for (const kw of contentKw) allKeywords.add(kw)
445
447
 
446
- // Signal 3: Path keywords (secondary — cheap, complements content)
447
- const pathKw = extractPathKeywords(filePath)
448
- for (const kw of pathKw) allKeywords.add(kw)
449
-
450
- if (allKeywords.size === 0) return
451
-
452
- const rawSignal = [
453
- strippedContent,
454
- filePath,
455
- ...Array.from(taskKw),
456
- ...Array.from(pathKw),
457
- ].join(" ").toLowerCase()
458
-
459
- // ── Match and inject ──
460
- const addedKeys = matchAgainstSources(allKeywords, rawSignal)
448
+ // Signal 3: Path keywords (secondary — cheap, complements content)
449
+ const pathKw = extractPathKeywords(filePath)
450
+ for (const kw of pathKw) allKeywords.add(kw)
451
+
452
+ if (allKeywords.size === 0) return
453
+
454
+ const rawSignal = [
455
+ strippedContent,
456
+ filePath,
457
+ ...Array.from(taskKw),
458
+ ...Array.from(pathKw),
459
+ ].join(" ").toLowerCase()
460
+
461
+ // ── Match and inject ──
462
+ const addedKeys = matchAgainstSources(allKeywords, rawSignal)
461
463
  if (addedKeys.length === 0) return
462
464
 
463
465
  const newEntries = collector.getNewEntries(addedKeys)
@@ -481,73 +483,136 @@ export default (async ({ directory }: { directory: string }) => {
481
483
  }
482
484
  }) satisfies Plugin
483
485
  `;
484
- // ─── Skill Inject ────────────────────────────────────────────────────────────
485
- const SKILL_INJECT = `import type { Plugin } from "@opencode-ai/plugin"
486
- import { existsSync, readFileSync } from "fs"
487
- import path from "path"
488
-
489
- // Injects skill instructions via tool.execute.after on Read + Write.
490
- // Read: full skill content when reading a file matching a pattern (agent
491
- // sees instructions BEFORE creating or editing matching artifacts).
492
- // Write: short reminder after writing a matching file.
493
- // This is Tier 3 of the context architecture.
494
-
495
- const SKILL_MAP: Array<{ pattern: RegExp; skill: string }> = [
496
- { pattern: /\\.test\\.(ts|tsx|js|jsx)$/, skill: "j.test-writing" },
497
- { pattern: /app\\/.*\\/page\\.(tsx|jsx)$/, skill: "j.page-creation" },
498
- { pattern: /app\\/api\\/.*\\.(ts|js)$/, skill: "j.api-route-creation" },
499
- { pattern: /actions\\.(ts|js)$/, skill: "j.server-action-creation" },
500
- { pattern: /schema\\.prisma$/, skill: "j.schema-migration" },
501
- { pattern: /(^|\\/)AGENTS\\.md$/, skill: "j.agents-md-writing" },
502
- { pattern: /docs\\/domain\\/.*\\.md$/, skill: "j.domain-doc-writing" },
503
- { pattern: /docs\\/principles\\/.*(?:\\.md|manifest)$/, skill: "j.principle-doc-writing" },
504
- { pattern: /(^|\\/)(\\.opencode\\/scripts|scripts)\\/.*\\.sh$/, skill: "j.shell-script-writing" },
505
- { pattern: /(^|\\/)pre-commit$/, skill: "j.shell-script-writing" },
506
- ]
507
-
508
- export default (async ({ directory }: { directory: string }) => {
509
- const injectedSkills = new Set<string>()
510
-
511
- return {
512
- "tool.execute.after": async (
513
- input: { tool: string; sessionID: string; callID: string; args: any },
514
- output: { title: string; output: string; metadata: any }
515
- ) => {
516
- const filePath: string = input.args?.path ?? input.args?.file_path ?? ""
517
- if (!filePath) return
518
-
519
- const match = SKILL_MAP.find(({ pattern }) => pattern.test(filePath))
520
- if (!match) return
521
-
522
- const key = \`\${input.sessionID}:\${match.skill}\`
523
-
524
- if (input.tool === "Read") {
525
- // Full injection on Read — agent sees skill instructions before writing
526
- if (injectedSkills.has(key)) return
527
- injectedSkills.add(key)
528
-
529
- const skillPath = path.join(directory, ".opencode", "skills", match.skill, "SKILL.md")
530
- if (!existsSync(skillPath)) return
531
-
532
- const skillContent = readFileSync(skillPath, "utf-8")
533
- output.output +=
534
- \`\\n\\n[skill-inject] Skill activated for \${match.skill}:\\n\\n\${skillContent}\`
535
- } else if (["Write", "Edit", "MultiEdit"].includes(input.tool)) {
536
- // Short reminder on Write — only if skill was never injected via Read
537
- if (injectedSkills.has(key)) return
538
-
539
- const skillPath = path.join(directory, ".opencode", "skills", match.skill, "SKILL.md")
540
- if (!existsSync(skillPath)) return
541
-
542
- injectedSkills.add(key)
543
- output.output +=
544
- \`\\n\\n[skill-inject] IMPORTANT: Skill "\${match.skill}" exists for this file type. \` +
545
- \`Read the matching file first to receive full skill instructions.\`
546
- }
547
- },
548
- }
549
- }) satisfies Plugin
550
- `;
486
+ // ─── Skill Inject (reads from skill-map.json for dynamic extension) ─────────
487
+ function getBaseSkillMap(projectType, isKotlin) {
488
+ // Universal patterns (all types)
489
+ const universal = [
490
+ { pattern: "(^|\\/)AGENTS\\.md$", skill: "j.agents-md-writing" },
491
+ { pattern: "docs\\/domain\\/.*\\.md$", skill: "j.domain-doc-writing" },
492
+ { pattern: "docs\\/principles\\/.*(?:\\.md|manifest)$", skill: "j.principle-doc-writing" },
493
+ { pattern: "(^|\\/)(\\.opencode\\/scripts|scripts)\\/.*\\.sh$", skill: "j.shell-script-writing" },
494
+ { pattern: "(^|\\/)pre-commit$", skill: "j.shell-script-writing" },
495
+ ];
496
+ if (projectType === "java" && isKotlin) {
497
+ return [
498
+ { pattern: "Test\\.kt$", skill: "j.test-writing" },
499
+ { pattern: "Tests\\.kt$", skill: "j.test-writing" },
500
+ { pattern: "IT\\.kt$", skill: "j.test-writing" },
501
+ { pattern: "Test\\.java$", skill: "j.test-writing" },
502
+ ...universal,
503
+ ];
504
+ }
505
+ switch (projectType) {
506
+ case "node-nextjs":
507
+ return [
508
+ { pattern: "\\.test\\.(ts|tsx|js|jsx)$", skill: "j.test-writing" },
509
+ { pattern: "\\.spec\\.(ts|tsx|js|jsx)$", skill: "j.test-writing" },
510
+ { pattern: "app\\/.*\\/page\\.(tsx|jsx)$", skill: "j.page-creation" },
511
+ { pattern: "app\\/api\\/.*\\.(ts|js)$", skill: "j.api-route-creation" },
512
+ { pattern: "actions\\.(ts|js)$", skill: "j.server-action-creation" },
513
+ { pattern: "schema\\.prisma$", skill: "j.schema-migration" },
514
+ ...universal,
515
+ ];
516
+ case "node-generic":
517
+ return [
518
+ { pattern: "\\.test\\.(ts|tsx|js|jsx)$", skill: "j.test-writing" },
519
+ { pattern: "\\.spec\\.(ts|tsx|js|jsx)$", skill: "j.test-writing" },
520
+ ...universal,
521
+ ];
522
+ case "python":
523
+ return [
524
+ { pattern: "test_.*\\.py$", skill: "j.test-writing" },
525
+ { pattern: ".*_test\\.py$", skill: "j.test-writing" },
526
+ ...universal,
527
+ ];
528
+ case "go":
529
+ return [
530
+ { pattern: "_test\\.go$", skill: "j.test-writing" },
531
+ ...universal,
532
+ ];
533
+ case "java":
534
+ return [
535
+ { pattern: "Test\\.java$", skill: "j.test-writing" },
536
+ { pattern: "Tests\\.java$", skill: "j.test-writing" },
537
+ { pattern: "IT\\.java$", skill: "j.test-writing" },
538
+ ...universal,
539
+ ];
540
+ case "generic":
541
+ default:
542
+ return [...universal];
543
+ }
544
+ }
545
+ function skillInject(projectType, isKotlin) {
546
+ const fallbackJson = JSON.stringify(getBaseSkillMap(projectType, isKotlin));
547
+ // Build the plugin source as a plain string to avoid template escaping issues
548
+ const lines = [
549
+ 'import type { Plugin } from "@opencode-ai/plugin"',
550
+ 'import { existsSync, readFileSync } from "fs"',
551
+ 'import path from "path"',
552
+ '',
553
+ '// Injects skill instructions via tool.execute.after on Read + Write.',
554
+ '// SKILL_MAP is loaded from .opencode/state/skill-map.json for dynamic',
555
+ '// extension by /j.finish-setup. Falls back to hardcoded base patterns.',
556
+ '',
557
+ 'interface SkillMapEntry { pattern: string; skill: string }',
558
+ '',
559
+ 'function loadSkillMap(directory: string): Array<{ pattern: RegExp; skill: string }> {',
560
+ ' const mapPath = path.join(directory, ".opencode", "state", "skill-map.json")',
561
+ ' let entries: SkillMapEntry[] = []',
562
+ '',
563
+ ' if (existsSync(mapPath)) {',
564
+ ' try { entries = JSON.parse(readFileSync(mapPath, "utf-8")) } catch { entries = [] }',
565
+ ' }',
566
+ '',
567
+ ` if (entries.length === 0) { entries = ${fallbackJson} }`,
568
+ '',
569
+ ' return entries.map((e) => ({ pattern: new RegExp(e.pattern), skill: e.skill }))',
570
+ '}',
571
+ '',
572
+ 'export default (async ({ directory }: { directory: string }) => {',
573
+ ' const injectedSkills = new Set<string>()',
574
+ ' const skillMap = loadSkillMap(directory)',
575
+ '',
576
+ ' return {',
577
+ ' "tool.execute.after": async (',
578
+ ' input: { tool: string; sessionID: string; callID: string; args: any },',
579
+ ' output: { title: string; output: string; metadata: any }',
580
+ ' ) => {',
581
+ ' const filePath: string = input.args?.path ?? input.args?.file_path ?? ""',
582
+ ' if (!filePath) return',
583
+ '',
584
+ ' const match = skillMap.find(({ pattern }) => pattern.test(filePath))',
585
+ ' if (!match) return',
586
+ '',
587
+ ' const key = `${input.sessionID}:${match.skill}`',
588
+ '',
589
+ ' if (input.tool === "Read") {',
590
+ ' if (injectedSkills.has(key)) return',
591
+ ' injectedSkills.add(key)',
592
+ '',
593
+ ' const skillPath = path.join(directory, ".opencode", "skills", match.skill, "SKILL.md")',
594
+ ' if (!existsSync(skillPath)) return',
595
+ '',
596
+ ' const skillContent = readFileSync(skillPath, "utf-8")',
597
+ ' output.output +=',
598
+ ' `\\n\\n[skill-inject] Skill activated for ${match.skill}:\\n\\n${skillContent}`',
599
+ ' } else if (["Write", "Edit", "MultiEdit"].includes(input.tool)) {',
600
+ ' if (injectedSkills.has(key)) return',
601
+ '',
602
+ ' const skillPath = path.join(directory, ".opencode", "skills", match.skill, "SKILL.md")',
603
+ ' if (!existsSync(skillPath)) return',
604
+ '',
605
+ ' injectedSkills.add(key)',
606
+ ' output.output +=',
607
+ ' `\\n\\n[skill-inject] IMPORTANT: Skill "${match.skill}" exists for this file type. ` +',
608
+ ' `Read the matching file first to receive full skill instructions.`',
609
+ ' }',
610
+ ' },',
611
+ ' }',
612
+ '}) satisfies Plugin',
613
+ ];
614
+ return lines.join('\n') + '\n';
615
+ }
551
616
  // ─── Intent Gate ─────────────────────────────────────────────────────────────
552
617
  const INTENT_GATE = `import type { Plugin } from "@opencode-ai/plugin"
553
618
  import { existsSync, readFileSync } from "fs"
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/templates/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/templates/plugins.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export declare function writeSkills(projectDir: string): void;
1
+ import type { ProjectType } from "../project-types.js";
2
+ export declare function writeSkills(projectDir: string, projectType?: ProjectType, isKotlin?: boolean): void;
2
3
  //# sourceMappingURL=skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/templates/skills.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAYpD"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/templates/skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGtD,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,WAA2B,EACxC,QAAQ,GAAE,OAAe,GACxB,IAAI,CA2BN"}