@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.
- package/README.md +112 -13
- package/dist/cli.js +40 -23
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -1
- package/dist/config.js.map +1 -1
- package/dist/installer.d.ts +2 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +180 -54
- package/dist/installer.js.map +1 -1
- package/dist/lint-detection.d.ts +26 -0
- package/dist/lint-detection.d.ts.map +1 -0
- package/dist/lint-detection.js +226 -0
- package/dist/lint-detection.js.map +1 -0
- package/dist/models.js +4 -4
- package/dist/models.js.map +1 -1
- package/dist/project-types.d.ts +52 -0
- package/dist/project-types.d.ts.map +1 -0
- package/dist/project-types.js +284 -0
- package/dist/project-types.js.map +1 -0
- package/dist/templates/agents.d.ts +2 -1
- package/dist/templates/agents.d.ts.map +1 -1
- package/dist/templates/agents.js +7 -5
- package/dist/templates/agents.js.map +1 -1
- package/dist/templates/commands.d.ts.map +1 -1
- package/dist/templates/commands.js +225 -150
- package/dist/templates/commands.js.map +1 -1
- package/dist/templates/docs.d.ts +2 -1
- package/dist/templates/docs.d.ts.map +1 -1
- package/dist/templates/docs.js +61 -14
- package/dist/templates/docs.js.map +1 -1
- package/dist/templates/plugins.d.ts +2 -1
- package/dist/templates/plugins.d.ts.map +1 -1
- package/dist/templates/plugins.js +167 -102
- package/dist/templates/plugins.js.map +1 -1
- package/dist/templates/skills.d.ts +2 -1
- package/dist/templates/skills.d.ts.map +1 -1
- package/dist/templates/skills.js +708 -195
- package/dist/templates/skills.js.map +1 -1
- package/dist/templates/support-scripts.d.ts +2 -1
- package/dist/templates/support-scripts.d.ts.map +1 -1
- package/dist/templates/support-scripts.js +468 -21
- package/dist/templates/support-scripts.js.map +1 -1
- package/dist/templates/tools.d.ts +2 -1
- package/dist/templates/tools.d.ts.map +1 -1
- package/dist/templates/tools.js +315 -74
- package/dist/templates/tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/templates/docs.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/templates/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
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":"
|
|
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"),
|
|
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
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
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":";;;;;
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/templates/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/templates/skills.ts"],"names":[],"mappings":"
|
|
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"}
|