my-opencode-config 0.1.0-beta.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 (42) hide show
  1. package/README.md +53 -0
  2. package/dist/commands/auth.d.ts +8 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +148 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/config-templates.d.ts +4 -0
  7. package/dist/commands/config-templates.d.ts.map +1 -0
  8. package/dist/commands/config-templates.js +76 -0
  9. package/dist/commands/config-templates.js.map +1 -0
  10. package/dist/commands/models.d.ts +8 -0
  11. package/dist/commands/models.d.ts.map +1 -0
  12. package/dist/commands/models.js +126 -0
  13. package/dist/commands/models.js.map +1 -0
  14. package/dist/commands/plugins.d.ts +3 -0
  15. package/dist/commands/plugins.d.ts.map +1 -0
  16. package/dist/commands/plugins.js +27 -0
  17. package/dist/commands/plugins.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +225 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/types.d.ts +53 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +3 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/utils/config.d.ts +10 -0
  27. package/dist/utils/config.d.ts.map +1 -0
  28. package/dist/utils/config.js +153 -0
  29. package/dist/utils/config.js.map +1 -0
  30. package/dist/utils/logging.d.ts +16 -0
  31. package/dist/utils/logging.d.ts.map +1 -0
  32. package/dist/utils/logging.js +110 -0
  33. package/dist/utils/logging.js.map +1 -0
  34. package/dist/utils/opencode.d.ts +12 -0
  35. package/dist/utils/opencode.d.ts.map +1 -0
  36. package/dist/utils/opencode.js +142 -0
  37. package/dist/utils/opencode.js.map +1 -0
  38. package/dist/utils/prompts.d.ts +6 -0
  39. package/dist/utils/prompts.d.ts.map +1 -0
  40. package/dist/utils/prompts.js +72 -0
  41. package/dist/utils/prompts.js.map +1 -0
  42. package/package.json +43 -0
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.isOpenCodeInstalled = isOpenCodeInstalled;
37
+ exports.getOpenCodeVersion = getOpenCodeVersion;
38
+ exports.getOpenCodePath = getOpenCodePath;
39
+ exports.checkCommonPaths = checkCommonPaths;
40
+ exports.getOpenCodeStatus = getOpenCodeStatus;
41
+ exports.installOpenCode = installOpenCode;
42
+ const child_process_1 = require("child_process");
43
+ const util_1 = require("util");
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const fs = __importStar(require("fs/promises"));
47
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
48
+ // Check if opencode command exists in PATH
49
+ async function isOpenCodeInstalled() {
50
+ try {
51
+ // Try which command
52
+ const { stdout } = await execAsync('which opencode');
53
+ return stdout.trim().length > 0;
54
+ }
55
+ catch {
56
+ // Try where command (Windows)
57
+ try {
58
+ const { stdout } = await execAsync('where opencode');
59
+ return stdout.trim().length > 0;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ }
66
+ // Get OpenCode version if installed
67
+ async function getOpenCodeVersion() {
68
+ try {
69
+ const { stdout } = await execAsync('opencode --version');
70
+ const match = stdout.match(/v?(\d+\.\d+\.\d+)/);
71
+ return match ? match[1] : null;
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ // Get OpenCode binary path
78
+ async function getOpenCodePath() {
79
+ try {
80
+ const { stdout } = await execAsync('which opencode');
81
+ return stdout.trim() || null;
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
87
+ // Check common installation locations
88
+ async function checkCommonPaths() {
89
+ const possiblePaths = [
90
+ '/usr/local/bin/opencode',
91
+ '/usr/bin/opencode',
92
+ path.join(os.homedir(), '.local', 'bin', 'opencode'),
93
+ path.join(os.homedir(), '.cargo', 'bin', 'opencode'),
94
+ ];
95
+ for (const p of possiblePaths) {
96
+ try {
97
+ await fs.access(p);
98
+ return p;
99
+ }
100
+ catch {
101
+ continue;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ // Get full OpenCode status
107
+ async function getOpenCodeStatus() {
108
+ const installed = await isOpenCodeInstalled();
109
+ if (!installed) {
110
+ // Check common paths as fallback
111
+ const commonPath = await checkCommonPaths();
112
+ if (commonPath) {
113
+ return { installed: true, path: commonPath };
114
+ }
115
+ return { installed: false };
116
+ }
117
+ const version = await getOpenCodeVersion();
118
+ const cmdPath = await getOpenCodePath();
119
+ return { installed: true, version: version || undefined, path: cmdPath || undefined };
120
+ }
121
+ // Install OpenCode using official installer
122
+ async function installOpenCode() {
123
+ // The official install script requires interactive input
124
+ // For automated install, we need to handle this differently
125
+ try {
126
+ // Try non-interactive install
127
+ const installScript = `curl -fsSL https://opencode.ai/install | bash`;
128
+ await execAsync(installScript);
129
+ }
130
+ catch (error) {
131
+ throw new Error(`Failed to install OpenCode: ${error.message}\n\n` +
132
+ `Please install manually:\n` +
133
+ `1. Visit https://opencode.ai\n` +
134
+ `2. Download the installer for your platform\n` +
135
+ `3. Follow the installation instructions`);
136
+ }
137
+ // Verify installation
138
+ if (!(await isOpenCodeInstalled())) {
139
+ throw new Error('OpenCode installation failed. Please install manually.');
140
+ }
141
+ }
142
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/utils/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Model } from '../types';
2
+ export declare function promptConfirm(message: string): Promise<boolean>;
3
+ export declare function selectModel(message: string, models: Model[]): Promise<Model | null>;
4
+ export declare function selectModels(message: string, models: Model[], count: number): Promise<Model[]>;
5
+ export declare function withSpinner<T>(message: string, fn: () => Promise<T>): Promise<T>;
6
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMrE;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAczF;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,EAAE,CAAC,CAyBlB;AAgBD,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.promptConfirm = promptConfirm;
4
+ exports.selectModel = selectModel;
5
+ exports.selectModels = selectModels;
6
+ exports.withSpinner = withSpinner;
7
+ const prompts_1 = require("@clack/prompts");
8
+ async function promptConfirm(message) {
9
+ const value = await (0, prompts_1.confirm)({
10
+ message,
11
+ });
12
+ return value === true;
13
+ }
14
+ async function selectModel(message, models) {
15
+ const options = models.map(m => ({
16
+ value: m.id,
17
+ label: formatModelLabel(m),
18
+ }));
19
+ const selected = await (0, prompts_1.select)({
20
+ message,
21
+ options,
22
+ });
23
+ if (!selected)
24
+ return null;
25
+ return models.find(m => m.id === selected) || null;
26
+ }
27
+ async function selectModels(message, models, count) {
28
+ const selected = [];
29
+ for (let i = 0; i < count; i++) {
30
+ const remaining = models.filter(m => !selected.some(s => s.id === m.id));
31
+ if (remaining.length === 0)
32
+ break;
33
+ const remainingOptions = remaining.map(m => ({
34
+ value: m.id,
35
+ label: formatModelLabel(m),
36
+ }));
37
+ const selectedId = await (0, prompts_1.select)({
38
+ message: `${message} (${i + 1}/${count})`,
39
+ options: remainingOptions,
40
+ });
41
+ if (!selectedId)
42
+ break;
43
+ const model = models.find(m => m.id === selectedId);
44
+ if (model)
45
+ selected.push(model);
46
+ }
47
+ return selected;
48
+ }
49
+ function formatModelLabel(model) {
50
+ let label = `${model.name} (Score: ${model.score})`;
51
+ if (model.isFree) {
52
+ label += ' [FREE]';
53
+ }
54
+ if (model.isRecommended) {
55
+ label += ' ⭐';
56
+ }
57
+ return label;
58
+ }
59
+ async function withSpinner(message, fn) {
60
+ const s = (0, prompts_1.spinner)();
61
+ s.start(message);
62
+ try {
63
+ const result = await fn();
64
+ s.stop(message);
65
+ return result;
66
+ }
67
+ catch (error) {
68
+ s.stop(message);
69
+ throw error;
70
+ }
71
+ }
72
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "my-opencode-config",
3
+ "version": "0.1.0-beta.1",
4
+ "description": "The ultimate OpenCode setup CLI. Automate your configuration and unlock the power of free and premium models in seconds.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "my-opencode-config": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "test": "echo \"Error: no test specified\" && exit 1",
12
+ "test:e2e": "bash tests/e2e/run.sh"
13
+ },
14
+ "keywords": [
15
+ "opencode",
16
+ "cli",
17
+ "ai",
18
+ "configuration",
19
+ "wizard"
20
+ ],
21
+ "author": "YouXuf Khan <youxufkhan@github.com>",
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/youxufkhan/my-opencode-config.git"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/youxufkhan/my-opencode-config/issues"
29
+ },
30
+ "homepage": "https://github.com/youxufkhan/my-opencode-config#readme",
31
+ "engines": {
32
+ "node": ">=18.0.0"
33
+ },
34
+ "dependencies": {
35
+ "@clack/prompts": "^0.7.0",
36
+ "@types/node": "^20.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "typescript": "^5.0.0",
40
+ "ts-node": "^10.9.0",
41
+ "esbuild": "^0.19.0"
42
+ }
43
+ }