@kleber.mottajr/juninho 1.0.1 → 1.2.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 +53 -29
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +5 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +7 -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 +178 -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 +200 -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 +47 -0
  19. package/dist/project-types.d.ts.map +1 -0
  20. package/dist/project-types.js +251 -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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # juninho
2
2
 
3
- Bootstrap the **Agentic Coding Framework** (framework.md) into any [OpenCode](https://opencode.ai) project in a single command.
3
+ Bootstrap the **Agentic Coding Framework** into any [OpenCode](https://opencode.ai) project in a single command. Multi-stack support for Node.js, Python, Go, Java/Kotlin, and generic projects.
4
4
 
5
5
  ## Install
6
6
 
@@ -14,29 +14,115 @@ npm install -g @kleber.mottajr/juninho
14
14
  # Navigate to your project
15
15
  cd my-opencode-project
16
16
 
17
- # Run setup — one command, everything configured
17
+ # Run setup — auto-detects project type
18
18
  juninho setup
19
19
 
20
+ # Or specify type explicitly
21
+ juninho setup --type python
22
+
20
23
  # Output:
21
24
  # [juninho] Installing Agentic Coding Framework...
25
+ # [juninho] ✓ Project type: Python
22
26
  # [juninho] ✓ Framework installed successfully!
23
27
  # [juninho] Open OpenCode — /j.plan, /j.spec and /j.implement are ready.
24
28
  ```
25
29
 
26
- ## What it does
30
+ ### Supported project types
27
31
 
28
- `juninho setup` automatically creates:
32
+ | Type | Detection | Skills |
33
+ |------|-----------|--------|
34
+ | `node-nextjs` | `package.json` with `next` dep | 9 (all skills) |
35
+ | `node-generic` | `package.json` without `next` | 5 |
36
+ | `python` | `pyproject.toml`, `requirements.txt`, `setup.py` | 5 |
37
+ | `go` | `go.mod` | 5 |
38
+ | `java` | `pom.xml`, `build.gradle`, `build.gradle.kts` | 5 |
39
+ | `generic` | Fallback | 4 |
29
40
 
30
- - **9 agents** in `.opencode/agents/` (j.planner, j.spec-writer, j.implementer, j.validator, j.reviewer, j.plan-reviewer, j.unify, j.explore, j.librarian)
31
- - **9 skills** in `.opencode/skills/` (j.test-writing, j.page-creation, j.api-route-creation, j.server-action-creation, j.schema-migration, j.agents-md-writing, j.domain-doc-writing, j.principle-doc-writing, j.shell-script-writing)
32
- - **11 plugins** in `.opencode/plugins/` (auto-discovered by OpenCode)
33
- - **4 tools** in `.opencode/tools/` (find-pattern, next-version, lsp, ast-grep)
34
- - **14 slash commands** in `.opencode/commands/` (/j.plan, /j.spec, /j.implement, /j.sync-docs, /j.init-deep, /j.start-work, /j.handoff, /j.ulw-loop, /j.check, /j.lint, /j.test, /j.pr-review, /j.status, /j.unify)
35
- - **State files** for persistent context and execution tracking
36
- - **Docs scaffold** with AGENTS.md, domain index, principles docs, and manifest
37
- - **Support scripts** in `.opencode/scripts/` for pre-commit, related tests, structure lint, and full checks
41
+ Java projects with Kotlin (`build.gradle.kts` with kotlin plugin or `.kt` files) automatically get Kotlin-specific lint (ktlint/detekt), test patterns, and skills.
42
+
43
+ ---
44
+
45
+ ## How It Works
46
+
47
+ The framework orchestrates a multi-agent AI workflow for spec-driven development. The developer never codes directly — instead, specialized agents handle planning, implementation, validation, and closeout through slash commands.
48
+
49
+ ### Specification & Planning
50
+
51
+ `/j.spec` conducts a 5-phase interview (Discovery → Requirements → Contract → Data → Review) with background codebase and external research. `/j.plan` runs 3 phases: Metis (intent analysis), Prometheus (interview + decomposition), and Momus (executability review). Both require explicit developer approval.
52
+
53
+ ![Spec & Plan Sequence](juninho-seq-spec-plan.png)
54
+
55
+ ### Implementation, Verification & Closeout
56
+
57
+ `/j.implement` executes wave-by-wave with git worktrees for parallelism. Each task follows the READ → ACT → COMMIT → VALIDATE loop. `@j.validator` gates every task against the spec. Pre-commit hooks run lint + related tests. `/j.check` runs repo-wide verification. `/j.unify` reconciles delivery, merges worktrees, updates docs, and creates a PR.
58
+
59
+ ![Implement Sequence](juninho-seq-implement.png)
60
+
61
+ ### Context Injection & Plugin Architecture
62
+
63
+ 12 plugins intercept every tool call across 5 tiers to inject context and enforce quality. External knowledge flows through Context7 (library docs) and Context-Mode (semantic search) MCP servers.
38
64
 
39
- Then patches `opencode.json` with agent definitions and Context7 MCP.
65
+ ![Context Injection Sequence](juninho-seq-context.png)
66
+
67
+ | Tier | Mechanism | What it provides |
68
+ |------|-----------|-----------------|
69
+ | **1** | `j.directory-agents-injector` | Hierarchical AGENTS.md (root → parent → current dir) |
70
+ | **2** | `j.carl-inject` (CARL) | Content-aware principles + domain docs via keyword matching (≤8KB) |
71
+ | **3** | `j.skill-inject` | File pattern → SKILL.md injection (e.g., `*.test.ts` → test-writing skill) |
72
+ | **4** | Plan `<skills>` declarations | Per-task required skills from plan.md |
73
+ | **5** | State files + `j.memory` | Cross-session persistent context |
74
+
75
+ ### Agent Roles
76
+
77
+ | Agent | Model | Role |
78
+ |-------|-------|------|
79
+ | `@j.spec-writer` | Strong | 5-phase interview → spec.md |
80
+ | `@j.planner` | Strong | 3-phase planning → plan.md |
81
+ | `@j.implementer` | Medium | Wave execution, READ→ACT→COMMIT→VALIDATE |
82
+ | `@j.validator` | Medium | Spec-first validation, BLOCK/FIX/NOTE/APPROVED |
83
+ | `@j.plan-reviewer` | Medium | Executability gate for plans |
84
+ | `@j.reviewer` | Medium | Post-PR advisory review (read-only) |
85
+ | `@j.unify` | Medium | Closeout: merge, docs, PR |
86
+ | `@j.explore` | Weak | Read-only codebase research |
87
+ | `@j.librarian` | Weak | External docs via Context7 + Context-Mode MCP |
88
+
89
+ ---
90
+
91
+ ## What it creates
92
+
93
+ `juninho setup` automatically generates:
94
+
95
+ - **9 agents** in `.opencode/agents/`
96
+ - **4–9 skills** in `.opencode/skills/` (filtered by project type)
97
+ - **12 plugins** in `.opencode/plugins/` (auto-discovered by OpenCode)
98
+ - **4 tools** in `.opencode/tools/` (find-pattern, next-version, lsp, ast-grep)
99
+ - **15 slash commands** in `.opencode/commands/`
100
+ - **State files** for persistent context and execution tracking
101
+ - **Docs scaffold** with AGENTS.md, domain index, principles docs, and manifest
102
+ - **Support scripts** in `.opencode/scripts/` for pre-commit, related tests, structure lint, and full checks
103
+ - **skill-map.json** for dynamic skill-to-pattern mapping
104
+
105
+ Then patches `opencode.json` with agent definitions, Context7 MCP, and Context-Mode MCP.
106
+
107
+ ### Slash Commands
108
+
109
+ | Command | Description |
110
+ |---------|-------------|
111
+ | `/j.spec` | Feature specification via 5-phase interview |
112
+ | `/j.plan` | Strategic planning with 3-phase process |
113
+ | `/j.implement` | Execute plan wave-by-wave with validation |
114
+ | `/j.check` | Repo-wide verification (typecheck + lint + tests) |
115
+ | `/j.unify` | Closeout: merge worktrees, update docs, create PR |
116
+ | `/j.pr-review` | Advisory post-PR code review |
117
+ | `/j.start-work` | Begin work session with context loading |
118
+ | `/j.handoff` | End-of-session handoff document |
119
+ | `/j.status` | Show execution state and task progress |
120
+ | `/j.ulw-loop` | Ultra work loop (parallel implementation) |
121
+ | `/j.init-deep` | Deep codebase initialization (AGENTS.md hierarchy) |
122
+ | `/j.sync-docs` | Refresh domain/principles documentation |
123
+ | `/j.finish-setup` | Scan codebase, generate dynamic skills + docs |
124
+ | `/j.lint` | Run structure lint on staged files |
125
+ | `/j.test` | Run tests related to staged files |
40
126
 
41
127
  ## Idempotency
42
128
 
@@ -48,6 +134,19 @@ Running `juninho setup` twice is safe — it detects `.opencode/.juninho-install
48
134
  juninho setup --force
49
135
  ```
50
136
 
137
+ ## CLI Options
138
+
139
+ ```bash
140
+ juninho setup [dir] [options]
141
+
142
+ Options:
143
+ --force Force reinstall even if already configured
144
+ --type <value> Project type: node-nextjs, node-generic, python, go, java, generic
145
+ --no-tty Non-interactive mode (skip prompts)
146
+ --version Show version number
147
+ --help Show help
148
+ ```
149
+
51
150
  ## License
52
151
 
53
152
  MIT
package/dist/cli.js CHANGED
@@ -6,45 +6,69 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const installer_js_1 = require("./installer.js");
8
8
  const path_1 = __importDefault(require("path"));
9
+ const project_types_js_1 = require("./project-types.js");
10
+ const { version: VERSION } = require("../package.json");
9
11
  const args = process.argv.slice(2);
10
12
  const command = args[0] ?? "";
11
13
  const forceFlag = args.includes("--force");
12
- const targetDir = args.find(a => !a.startsWith("--") && a !== command) ?? process.cwd();
13
- const VERSION = "1.0.0-alpha.5";
14
+ // Parse --type flag
15
+ const typeIdx = args.indexOf("--type");
16
+ const typeValue = typeIdx !== -1 ? args[typeIdx + 1] : undefined;
17
+ const targetDir = args.find((a, i) => !a.startsWith("--") && a !== command && i !== typeIdx + 1) ?? process.cwd();
14
18
  function showHelp() {
15
- console.log(`
16
- juninho v${VERSION} — Agentic Coding Framework bootstrapper for OpenCode
17
-
18
- Usage:
19
- juninho <command> [project-dir] [options]
20
-
21
- Commands:
22
- setup [dir] [--force] Install the framework into a project
23
-
24
- Options:
25
- --force Reinstall even if already configured
26
- --help, -h Show this help message
27
-
28
- Model Tiers:
29
- Strong → Planning & spec writing (default: claude-opus-4.6)
30
- Medium → Implementation & review (default: claude-sonnet-4.6)
31
- Weak → Research & exploration (default: claude-haiku-4.5)
32
-
33
- During setup, juninho detects available models via 'opencode models'
34
- and lets you choose the best model for each tier.
35
- To reconfigure models, run 'juninho setup --force'.
36
-
37
- Examples:
38
- juninho setup Install with auto-detected models
39
- juninho setup ./my-project Install into a specific directory
40
- juninho setup --force Reinstall & reconfigure models
19
+ console.log(`
20
+ juninho v${VERSION} — Agentic Coding Framework bootstrapper for OpenCode
21
+
22
+ Usage:
23
+ juninho <command> [project-dir] [options]
24
+
25
+ Commands:
26
+ setup [dir] [--force] Install the framework into a project
27
+
28
+ Options:
29
+ --force Reinstall even if already configured
30
+ --type <type> Set project type (skips auto-detection)
31
+ Values: ${project_types_js_1.VALID_PROJECT_TYPES.join(", ")}
32
+ --version, -v Show juninho version
33
+ --help, -h Show this help message
34
+
35
+ Model Tiers:
36
+ Strong → Planning & spec writing (default: claude-opus-4.6)
37
+ Medium → Implementation & review (default: claude-sonnet-4.6)
38
+ Weak → Research & exploration (default: claude-haiku-4.5)
39
+
40
+ During setup, juninho detects available models via 'opencode models'
41
+ and lets you choose the best model for each tier.
42
+ To reconfigure models, run 'juninho setup --force'.
43
+
44
+ Examples:
45
+ juninho setup Auto-detect stack and models
46
+ juninho setup ./my-project Install into a specific directory
47
+ juninho setup --type python Force Python project type
48
+ juninho setup --type java ./spring-app Java/Kotlin project (Kotlin auto-detected)
49
+ juninho setup --force Reinstall & reconfigure models
41
50
  `);
42
51
  }
52
+ function showVersion() {
53
+ console.log(VERSION);
54
+ }
43
55
  if (command === "" || command === "--help" || command === "-h") {
44
56
  showHelp();
45
57
  }
58
+ else if (command === "--version" || command === "-v") {
59
+ showVersion();
60
+ }
46
61
  else if (command === "setup") {
47
- (0, installer_js_1.runSetup)(path_1.default.resolve(targetDir), { force: forceFlag })
62
+ // Validate --type if provided
63
+ if (typeValue !== undefined && !project_types_js_1.VALID_PROJECT_TYPES.includes(typeValue)) {
64
+ console.error(`[juninho] Invalid project type: ${typeValue}`);
65
+ console.error(`[juninho] Valid types: ${project_types_js_1.VALID_PROJECT_TYPES.join(", ")}`);
66
+ process.exit(1);
67
+ }
68
+ (0, installer_js_1.runSetup)(path_1.default.resolve(targetDir), {
69
+ force: forceFlag,
70
+ type: typeValue,
71
+ })
48
72
  .then(() => process.exit(0))
49
73
  .catch((e) => {
50
74
  console.error("[juninho] Error:", e.message);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,iDAAyC;AACzC,gDAAuB;AAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;AAEvF,MAAM,OAAO,GAAG,eAAe,CAAA;AAE/B,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;WACH,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAyBjB,CAAC,CAAA;AACF,CAAC;AAED,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IAC/D,QAAQ,EAAE,CAAA;AACZ,CAAC;KAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;IAC/B,IAAA,uBAAQ,EAAC,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SACpD,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACN,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAA;IACtD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,iDAAyC;AACzC,gDAAuB;AACvB,yDAA0E;AAE1E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAA;AAE9E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE1C,oBAAoB;AACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACtC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAEhE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,OAAO,GAAG,CAAC,CACpE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;AAElB,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;WACH,OAAO;;;;;;;;;;;oCAWkB,sCAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;CAmBjE,CAAC,CAAA;AACF,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAED,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IAC/D,QAAQ,EAAE,CAAA;AACZ,CAAC;KAAM,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IACvD,WAAW,EAAE,CAAA;AACf,CAAC;KAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;IAC/B,8BAA8B;IAC9B,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,sCAAmB,CAAC,QAAQ,CAAC,SAAwB,CAAC,EAAE,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAA;QAC7D,OAAO,CAAC,KAAK,CAAC,0BAA0B,sCAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAA,uBAAQ,EAAC,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAChC,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAoC;KAC3C,CAAC;SACC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACN,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAA;IACtD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
package/dist/config.d.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  * Contains the user's chosen models for each tier (strong/medium/weak).
6
6
  */
7
7
  import { type ModelTier } from "./models.js";
8
+ import type { ProjectType } from "./project-types.js";
8
9
  export interface JuninhoConfig {
9
10
  /** Model ID for strong-tier agents (planner, spec-writer) */
10
11
  strong: string;
@@ -12,6 +13,10 @@ export interface JuninhoConfig {
12
13
  medium: string;
13
14
  /** Model ID for weak-tier agents (explore, librarian) */
14
15
  weak: string;
16
+ /** Detected or user-selected project type */
17
+ projectType?: ProjectType;
18
+ /** Whether the java project uses Kotlin */
19
+ isKotlin?: boolean;
15
20
  }
16
21
  /**
17
22
  * Load saved configuration from .opencode/juninho-config.json.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,aAAa,CAAA;AAG9D,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAA;CACb;AAQD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAanE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAM1E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CA6B/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAM/E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,aAAa,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAQD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAmBnE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAM1E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CA6B/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAM/E"}
package/dist/config.js CHANGED
@@ -32,7 +32,13 @@ function loadConfig(projectDir) {
32
32
  try {
33
33
  const data = JSON.parse((0, fs_1.readFileSync)(p, "utf-8"));
34
34
  if (data.strong && data.medium && data.weak) {
35
- return { strong: data.strong, medium: data.medium, weak: data.weak };
35
+ return {
36
+ strong: data.strong,
37
+ medium: data.medium,
38
+ weak: data.weak,
39
+ projectType: data.projectType,
40
+ isKotlin: data.isKotlin,
41
+ };
36
42
  }
37
43
  return null;
38
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AA0BH,gCAaC;AAMD,gCAMC;AAUD,sCA6BC;AAKD,wCAMC;AAnGD,2BAAuE;AACvE,gDAAuB;AACvB,2CAA8D;AAC9D,iDAAwD;AAWxD,MAAM,eAAe,GAAG,qBAAqB,CAAA;AAE7C,SAAS,UAAU,CAAC,UAAkB;IACpC,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,CAAA;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,UAAkB;IAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IAChC,IAAI,CAAC,IAAA,eAAU,EAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAE/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QACjD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;QACtE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,UAAkB,EAAE,MAAqB;IAClE,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;IAC9C,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,IAAA,kBAAa,EAAC,UAAU,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,UAAkB;IAC9C,wBAAwB;IACxB,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IAEvB,mBAAmB;IACnB,MAAM,SAAS,GAAG,IAAA,sCAAuB,GAAE,CAAA;IAC3C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,4BAAgB,EAAC,SAAS,CAAC,CAAA;QACxC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;SAChC,CAAA;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,IAAI,KAAK,CACb,kDAAkD;QAClD,iEAAiE;QACjE,IAAI;QACJ,uBAAuB;QACvB,6DAA6D;QAC7D,sDAAsD;QACtD,IAAI;QACJ,eAAe;QACf,+DAA+D;QAC/D,oFAAoF,CACrF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAqB;IAClD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
+ import { type ProjectType } from "./project-types.js";
1
2
  export interface SetupOptions {
2
3
  force?: boolean;
4
+ type?: ProjectType;
3
5
  }
4
6
  export declare function runSetup(projectDir: string, options?: SetupOptions): Promise<void>;
5
7
  //# sourceMappingURL=installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAqLD,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E5F"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,KAAK,WAAW,EAMjB,MAAM,oBAAoB,CAAA;AAO3B,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAmTD,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH5F"}