@kleber.mottajr/juninho 1.0.0-alpha.1

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 (38) hide show
  1. package/README.md +52 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +46 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/installer.d.ts +5 -0
  7. package/dist/installer.d.ts.map +1 -0
  8. package/dist/installer.js +85 -0
  9. package/dist/installer.js.map +1 -0
  10. package/dist/templates/agents.d.ts +2 -0
  11. package/dist/templates/agents.d.ts.map +1 -0
  12. package/dist/templates/agents.js +510 -0
  13. package/dist/templates/agents.js.map +1 -0
  14. package/dist/templates/commands.d.ts +2 -0
  15. package/dist/templates/commands.d.ts.map +1 -0
  16. package/dist/templates/commands.js +290 -0
  17. package/dist/templates/commands.js.map +1 -0
  18. package/dist/templates/docs.d.ts +3 -0
  19. package/dist/templates/docs.d.ts.map +1 -0
  20. package/dist/templates/docs.js +304 -0
  21. package/dist/templates/docs.js.map +1 -0
  22. package/dist/templates/plugins.d.ts +2 -0
  23. package/dist/templates/plugins.d.ts.map +1 -0
  24. package/dist/templates/plugins.js +470 -0
  25. package/dist/templates/plugins.js.map +1 -0
  26. package/dist/templates/skills.d.ts +2 -0
  27. package/dist/templates/skills.d.ts.map +1 -0
  28. package/dist/templates/skills.js +425 -0
  29. package/dist/templates/skills.js.map +1 -0
  30. package/dist/templates/state.d.ts +2 -0
  31. package/dist/templates/state.d.ts.map +1 -0
  32. package/dist/templates/state.js +97 -0
  33. package/dist/templates/state.js.map +1 -0
  34. package/dist/templates/tools.d.ts +2 -0
  35. package/dist/templates/tools.d.ts.map +1 -0
  36. package/dist/templates/tools.js +424 -0
  37. package/dist/templates/tools.js.map +1 -0
  38. package/package.json +20 -0
package/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # juninho
2
+
3
+ Bootstrap the **Agentic Coding Framework** (framework.md) into any [OpenCode](https://opencode.ai) project in a single command.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g @kleber.mottajr/juninho
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```bash
14
+ # Navigate to your project
15
+ cd my-opencode-project
16
+
17
+ # Run setup — one command, everything configured
18
+ juninho setup
19
+
20
+ # Output:
21
+ # [juninho] Installing Agentic Coding Framework...
22
+ # [juninho] ✓ Framework installed successfully!
23
+ # [juninho] Open OpenCode — /plan, /spec and /implement are ready.
24
+ ```
25
+
26
+ ## What it does
27
+
28
+ `juninho setup` automatically creates:
29
+
30
+ - **7 agents** in `.opencode/agents/` (planner, spec-writer, implementer, validator, reviewer, plan-reviewer, unify)
31
+ - **5 skills** in `.opencode/skills/` (test-writing, page-creation, api-route-creation, server-action-creation, schema-migration)
32
+ - **10 plugins** in `.opencode/plugins/` (auto-discovered by OpenCode)
33
+ - **4 tools** in `.opencode/tools/` (find-pattern, next-version, lsp, ast-grep)
34
+ - **7 slash commands** in `.opencode/commands/` (/plan, /spec, /implement, /init-deep, /start-work, /handoff, /ulw-loop)
35
+ - **State files** for persistent context and execution tracking
36
+ - **Docs scaffold** with AGENTS.md, domain index, and manifest
37
+
38
+ Then patches `opencode.json` with agent definitions and Context7 MCP.
39
+
40
+ ## Idempotency
41
+
42
+ Running `juninho setup` twice is safe — it detects `.opencode/.juninho-installed` and skips if already configured. Use `--force` to reinstall.
43
+
44
+ ## Re-install
45
+
46
+ ```bash
47
+ juninho setup --force
48
+ ```
49
+
50
+ ## License
51
+
52
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const installer_js_1 = require("./installer.js");
8
+ const path_1 = __importDefault(require("path"));
9
+ const args = process.argv.slice(2);
10
+ const command = args[0] ?? "setup";
11
+ const forceFlag = args.includes("--force");
12
+ const targetDir = args.find(a => !a.startsWith("--") && a !== command) ?? process.cwd();
13
+ if (command === "setup") {
14
+ (0, installer_js_1.runSetup)(path_1.default.resolve(targetDir), { force: forceFlag })
15
+ .then(() => process.exit(0))
16
+ .catch((e) => {
17
+ console.error("[juninho] Error:", e.message);
18
+ process.exit(1);
19
+ });
20
+ }
21
+ else if (command === "--help" || command === "-h") {
22
+ console.log(`
23
+ juninho — Agentic Coding Framework bootstrapper for OpenCode
24
+
25
+ Usage:
26
+ juninho [setup] [project-dir] [--force]
27
+
28
+ Commands:
29
+ setup Install the framework into a project (default)
30
+
31
+ Options:
32
+ --force Reinstall even if already configured
33
+ --help Show this help message
34
+
35
+ Examples:
36
+ juninho setup
37
+ juninho setup ./my-project
38
+ juninho setup --force
39
+ `);
40
+ }
41
+ else {
42
+ console.error(`[juninho] Unknown command: ${command}`);
43
+ console.error("Run 'juninho --help' for usage.");
44
+ process.exit(1);
45
+ }
46
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +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,OAAO,CAAA;AAClC,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,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;IACxB,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,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiBb,CAAC,CAAA;AACF,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"}
@@ -0,0 +1,5 @@
1
+ export interface SetupOptions {
2
+ force?: boolean;
3
+ }
4
+ export declare function runSetup(projectDir: string, options?: SetupOptions): Promise<void>;
5
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD5F"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runSetup = runSetup;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ const agents_js_1 = require("./templates/agents.js");
10
+ const skills_js_1 = require("./templates/skills.js");
11
+ const plugins_js_1 = require("./templates/plugins.js");
12
+ const tools_js_1 = require("./templates/tools.js");
13
+ const commands_js_1 = require("./templates/commands.js");
14
+ const state_js_1 = require("./templates/state.js");
15
+ const docs_js_1 = require("./templates/docs.js");
16
+ async function runSetup(projectDir, options = {}) {
17
+ const marker = path_1.default.join(projectDir, ".opencode", ".juninho-installed");
18
+ if ((0, fs_1.existsSync)(marker) && !options.force) {
19
+ console.log("[juninho] Framework already installed. Use --force to reinstall.");
20
+ return;
21
+ }
22
+ console.log("[juninho] Installing Agentic Coding Framework...");
23
+ console.log(`[juninho] Target: ${projectDir}`);
24
+ // Step 1: Create directory structure
25
+ createDirectories(projectDir);
26
+ console.log("[juninho] ✓ Directories created");
27
+ // Step 2: Write agents
28
+ (0, agents_js_1.writeAgents)(projectDir);
29
+ console.log("[juninho] ✓ Agents created (7)");
30
+ // Step 3: Write skills
31
+ (0, skills_js_1.writeSkills)(projectDir);
32
+ console.log("[juninho] ✓ Skills created (5)");
33
+ // Step 4: Write plugins
34
+ (0, plugins_js_1.writePlugins)(projectDir);
35
+ console.log("[juninho] ✓ Plugins created (10)");
36
+ // Step 5: Write tools
37
+ (0, tools_js_1.writeTools)(projectDir);
38
+ console.log("[juninho] ✓ Tools created (4)");
39
+ // Step 6: Write commands
40
+ (0, commands_js_1.writeCommands)(projectDir);
41
+ console.log("[juninho] ✓ Commands created (7)");
42
+ // Step 7: Write state files
43
+ (0, state_js_1.writeState)(projectDir);
44
+ console.log("[juninho] ✓ State files created");
45
+ // Step 8: Write docs
46
+ (0, docs_js_1.writeDocs)(projectDir);
47
+ console.log("[juninho] ✓ Docs scaffold created");
48
+ // Step 9: Patch opencode.json
49
+ (0, docs_js_1.patchOpencodeJson)(projectDir);
50
+ console.log("[juninho] ✓ opencode.json patched");
51
+ // Step 10: Write marker
52
+ (0, fs_1.writeFileSync)(marker, new Date().toISOString());
53
+ console.log("");
54
+ console.log("[juninho] ✓ Framework installed successfully!");
55
+ console.log("[juninho] Open OpenCode — /plan, /spec and /implement are ready.");
56
+ console.log("[juninho] Agents available: @planner, @spec-writer, @implementer, @validator, @reviewer, @unify");
57
+ }
58
+ function createDirectories(projectDir) {
59
+ const dirs = [
60
+ ".opencode",
61
+ ".opencode/agents",
62
+ ".opencode/skills",
63
+ ".opencode/skills/test-writing",
64
+ ".opencode/skills/page-creation",
65
+ ".opencode/skills/api-route-creation",
66
+ ".opencode/skills/server-action-creation",
67
+ ".opencode/skills/schema-migration",
68
+ ".opencode/plugins",
69
+ ".opencode/tools",
70
+ ".opencode/commands",
71
+ ".opencode/state",
72
+ "docs",
73
+ "docs/principles",
74
+ "docs/domain",
75
+ "docs/specs",
76
+ "worktrees",
77
+ ];
78
+ for (const dir of dirs) {
79
+ const fullPath = path_1.default.join(projectDir, dir);
80
+ if (!(0, fs_1.existsSync)(fullPath)) {
81
+ (0, fs_1.mkdirSync)(fullPath, { recursive: true });
82
+ }
83
+ }
84
+ }
85
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function writeAgents(projectDir: string): void;
2
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAUpD"}