@insureco/cli 0.1.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 (174) hide show
  1. package/README.md +168 -0
  2. package/dist/commands/backup.d.ts +11 -0
  3. package/dist/commands/backup.d.ts.map +1 -0
  4. package/dist/commands/backup.js +112 -0
  5. package/dist/commands/backup.js.map +1 -0
  6. package/dist/commands/config.d.ts +10 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +41 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/deploy.d.ts +16 -0
  11. package/dist/commands/deploy.d.ts.map +1 -0
  12. package/dist/commands/deploy.js +219 -0
  13. package/dist/commands/deploy.js.map +1 -0
  14. package/dist/commands/destroy.d.ts +12 -0
  15. package/dist/commands/destroy.d.ts.map +1 -0
  16. package/dist/commands/destroy.js +62 -0
  17. package/dist/commands/destroy.js.map +1 -0
  18. package/dist/commands/env.d.ts +7 -0
  19. package/dist/commands/env.d.ts.map +1 -0
  20. package/dist/commands/env.js +42 -0
  21. package/dist/commands/env.js.map +1 -0
  22. package/dist/commands/init-ai.d.ts +7 -0
  23. package/dist/commands/init-ai.d.ts.map +1 -0
  24. package/dist/commands/init-ai.js +257 -0
  25. package/dist/commands/init-ai.js.map +1 -0
  26. package/dist/commands/init.d.ts +8 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +228 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/link.d.ts +10 -0
  31. package/dist/commands/link.d.ts.map +1 -0
  32. package/dist/commands/link.js +193 -0
  33. package/dist/commands/link.js.map +1 -0
  34. package/dist/commands/login.d.ts +8 -0
  35. package/dist/commands/login.d.ts.map +1 -0
  36. package/dist/commands/login.js +164 -0
  37. package/dist/commands/login.js.map +1 -0
  38. package/dist/commands/logs.d.ts +16 -0
  39. package/dist/commands/logs.d.ts.map +1 -0
  40. package/dist/commands/logs.js +362 -0
  41. package/dist/commands/logs.js.map +1 -0
  42. package/dist/commands/preflight.d.ts +8 -0
  43. package/dist/commands/preflight.d.ts.map +1 -0
  44. package/dist/commands/preflight.js +188 -0
  45. package/dist/commands/preflight.js.map +1 -0
  46. package/dist/commands/program.d.ts +7 -0
  47. package/dist/commands/program.d.ts.map +1 -0
  48. package/dist/commands/program.js +59 -0
  49. package/dist/commands/program.js.map +1 -0
  50. package/dist/commands/push.d.ts +12 -0
  51. package/dist/commands/push.d.ts.map +1 -0
  52. package/dist/commands/push.js +171 -0
  53. package/dist/commands/push.js.map +1 -0
  54. package/dist/commands/register.d.ts +7 -0
  55. package/dist/commands/register.d.ts.map +1 -0
  56. package/dist/commands/register.js +124 -0
  57. package/dist/commands/register.js.map +1 -0
  58. package/dist/commands/rollback.d.ts +11 -0
  59. package/dist/commands/rollback.d.ts.map +1 -0
  60. package/dist/commands/rollback.js +172 -0
  61. package/dist/commands/rollback.js.map +1 -0
  62. package/dist/commands/sample.d.ts +11 -0
  63. package/dist/commands/sample.d.ts.map +1 -0
  64. package/dist/commands/sample.js +114 -0
  65. package/dist/commands/sample.js.map +1 -0
  66. package/dist/commands/services.d.ts +13 -0
  67. package/dist/commands/services.d.ts.map +1 -0
  68. package/dist/commands/services.js +95 -0
  69. package/dist/commands/services.js.map +1 -0
  70. package/dist/commands/status.d.ts +9 -0
  71. package/dist/commands/status.d.ts.map +1 -0
  72. package/dist/commands/status.js +170 -0
  73. package/dist/commands/status.js.map +1 -0
  74. package/dist/commands/troubleshoot.d.ts +19 -0
  75. package/dist/commands/troubleshoot.d.ts.map +1 -0
  76. package/dist/commands/troubleshoot.js +465 -0
  77. package/dist/commands/troubleshoot.js.map +1 -0
  78. package/dist/commands/versions.d.ts +16 -0
  79. package/dist/commands/versions.d.ts.map +1 -0
  80. package/dist/commands/versions.js +162 -0
  81. package/dist/commands/versions.js.map +1 -0
  82. package/dist/index.d.ts +3 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +294 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/lib/ai/client.d.ts +36 -0
  87. package/dist/lib/ai/client.d.ts.map +1 -0
  88. package/dist/lib/ai/client.js +140 -0
  89. package/dist/lib/ai/client.js.map +1 -0
  90. package/dist/lib/ai/generator.d.ts +17 -0
  91. package/dist/lib/ai/generator.d.ts.map +1 -0
  92. package/dist/lib/ai/generator.js +338 -0
  93. package/dist/lib/ai/generator.js.map +1 -0
  94. package/dist/lib/ai/prompts.d.ts +47 -0
  95. package/dist/lib/ai/prompts.d.ts.map +1 -0
  96. package/dist/lib/ai/prompts.js +247 -0
  97. package/dist/lib/ai/prompts.js.map +1 -0
  98. package/dist/lib/ai/scanner.d.ts +50 -0
  99. package/dist/lib/ai/scanner.d.ts.map +1 -0
  100. package/dist/lib/ai/scanner.js +237 -0
  101. package/dist/lib/ai/scanner.js.map +1 -0
  102. package/dist/lib/api.d.ts +18 -0
  103. package/dist/lib/api.d.ts.map +1 -0
  104. package/dist/lib/api.js +67 -0
  105. package/dist/lib/api.js.map +1 -0
  106. package/dist/lib/builder.d.ts +34 -0
  107. package/dist/lib/builder.d.ts.map +1 -0
  108. package/dist/lib/builder.js +132 -0
  109. package/dist/lib/builder.js.map +1 -0
  110. package/dist/lib/config.d.ts +20 -0
  111. package/dist/lib/config.d.ts.map +1 -0
  112. package/dist/lib/config.js +124 -0
  113. package/dist/lib/config.js.map +1 -0
  114. package/dist/lib/output.d.ts +12 -0
  115. package/dist/lib/output.d.ts.map +1 -0
  116. package/dist/lib/output.js +39 -0
  117. package/dist/lib/output.js.map +1 -0
  118. package/dist/lib/scaffold.d.ts +29 -0
  119. package/dist/lib/scaffold.d.ts.map +1 -0
  120. package/dist/lib/scaffold.js +166 -0
  121. package/dist/lib/scaffold.js.map +1 -0
  122. package/dist/lib/troubleshoot/analyzer.d.ts +14 -0
  123. package/dist/lib/troubleshoot/analyzer.d.ts.map +1 -0
  124. package/dist/lib/troubleshoot/analyzer.js +541 -0
  125. package/dist/lib/troubleshoot/analyzer.js.map +1 -0
  126. package/dist/lib/troubleshoot/auto-fix.d.ts +29 -0
  127. package/dist/lib/troubleshoot/auto-fix.d.ts.map +1 -0
  128. package/dist/lib/troubleshoot/auto-fix.js +373 -0
  129. package/dist/lib/troubleshoot/auto-fix.js.map +1 -0
  130. package/dist/lib/troubleshoot/index.d.ts +5 -0
  131. package/dist/lib/troubleshoot/index.d.ts.map +1 -0
  132. package/dist/lib/troubleshoot/index.js +6 -0
  133. package/dist/lib/troubleshoot/index.js.map +1 -0
  134. package/dist/lib/troubleshoot/log-fetcher.d.ts +43 -0
  135. package/dist/lib/troubleshoot/log-fetcher.d.ts.map +1 -0
  136. package/dist/lib/troubleshoot/log-fetcher.js +431 -0
  137. package/dist/lib/troubleshoot/log-fetcher.js.map +1 -0
  138. package/dist/lib/troubleshoot/redactor.d.ts +35 -0
  139. package/dist/lib/troubleshoot/redactor.d.ts.map +1 -0
  140. package/dist/lib/troubleshoot/redactor.js +208 -0
  141. package/dist/lib/troubleshoot/redactor.js.map +1 -0
  142. package/dist/lib/validators/catalog-validator.d.ts +3 -0
  143. package/dist/lib/validators/catalog-validator.d.ts.map +1 -0
  144. package/dist/lib/validators/catalog-validator.js +205 -0
  145. package/dist/lib/validators/catalog-validator.js.map +1 -0
  146. package/dist/lib/validators/dockerfile-validator.d.ts +4 -0
  147. package/dist/lib/validators/dockerfile-validator.d.ts.map +1 -0
  148. package/dist/lib/validators/dockerfile-validator.js +262 -0
  149. package/dist/lib/validators/dockerfile-validator.js.map +1 -0
  150. package/dist/lib/validators/env-validator.d.ts +3 -0
  151. package/dist/lib/validators/env-validator.d.ts.map +1 -0
  152. package/dist/lib/validators/env-validator.js +268 -0
  153. package/dist/lib/validators/env-validator.js.map +1 -0
  154. package/dist/lib/validators/git-validator.d.ts +3 -0
  155. package/dist/lib/validators/git-validator.d.ts.map +1 -0
  156. package/dist/lib/validators/git-validator.js +236 -0
  157. package/dist/lib/validators/git-validator.js.map +1 -0
  158. package/dist/lib/validators/health-detector.d.ts +4 -0
  159. package/dist/lib/validators/health-detector.d.ts.map +1 -0
  160. package/dist/lib/validators/health-detector.js +159 -0
  161. package/dist/lib/validators/health-detector.js.map +1 -0
  162. package/dist/lib/validators/index.d.ts +7 -0
  163. package/dist/lib/validators/index.d.ts.map +1 -0
  164. package/dist/lib/validators/index.js +7 -0
  165. package/dist/lib/validators/index.js.map +1 -0
  166. package/dist/lib/validators/route-validator.d.ts +3 -0
  167. package/dist/lib/validators/route-validator.d.ts.map +1 -0
  168. package/dist/lib/validators/route-validator.js +238 -0
  169. package/dist/lib/validators/route-validator.js.map +1 -0
  170. package/dist/types/index.d.ts +455 -0
  171. package/dist/types/index.d.ts.map +1 -0
  172. package/dist/types/index.js +37 -0
  173. package/dist/types/index.js.map +1 -0
  174. package/package.json +58 -0
package/README.md ADDED
@@ -0,0 +1,168 @@
1
+ # @insureco/cli
2
+
3
+ Developer CLI for the InsurEco Tawa platform. Deploy, manage, and monitor services with a single tool.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g @insureco/cli
9
+ ```
10
+
11
+ Or use without installing:
12
+
13
+ ```bash
14
+ npx @insureco/cli deploy
15
+ ```
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ # Login to the platform
21
+ iec login
22
+
23
+ # Option 1: AI-powered setup (recommended)
24
+ iec init --ai
25
+
26
+ # Option 2: Use a starter template
27
+ iec sample --nextjs
28
+ cd my-service
29
+
30
+ # Check everything is configured correctly
31
+ iec preflight
32
+
33
+ # Deploy to sandbox
34
+ iec deploy
35
+ ```
36
+
37
+ ## Commands
38
+
39
+ ### Setup & Configuration
40
+
41
+ | Command | Description |
42
+ |---------|-------------|
43
+ | `iec login` | Authenticate with the platform |
44
+ | `iec logout` | Sign out |
45
+ | `iec whoami` | Show current user |
46
+ | `iec config` | View/set CLI configuration |
47
+ | `iec init` | Scaffold new service |
48
+ | `iec init --ai` | AI-powered interactive setup |
49
+ | `iec sample --api` | Scaffold Express/Hono API starter |
50
+ | `iec sample --nextjs` | Scaffold Next.js starter |
51
+ | `iec sample --crosspod` | Scaffold two services with pod-to-pod auth demo |
52
+
53
+ ### Deployment
54
+
55
+ | Command | Description |
56
+ |---------|-------------|
57
+ | `iec preflight` | Run pre-deployment checks |
58
+ | `iec register` | Register service with Koko |
59
+ | `iec link` | Connect repo to iec-builder |
60
+ | `iec deploy` | Build and deploy (via GitHub) |
61
+ | `iec push` | Push code directly to builder (no GitHub needed) |
62
+ | `iec rollback <version>` | Redeploy a previous version |
63
+ | `iec versions` | List deployable versions |
64
+ | `iec destroy` | Delete deployment |
65
+
66
+ ### Monitoring
67
+
68
+ | Command | Description |
69
+ |---------|-------------|
70
+ | `iec status` | Show service and build status |
71
+ | `iec logs` | Stream container logs |
72
+ | `iec logs --build <id>` | View build logs |
73
+ | `iec builds` | List recent builds |
74
+
75
+ ### Data Management
76
+
77
+ | Command | Description |
78
+ |---------|-------------|
79
+ | `iec env` | Manage environments |
80
+ | `iec program` | View programs |
81
+ | `iec backup` | Manage backups |
82
+ | `iec restore` | Restore from backup |
83
+
84
+ ## Configuration
85
+
86
+ ### Global Config (`~/.iec/config.yaml`)
87
+
88
+ ```yaml
89
+ koko_url: https://janus.tawa.insureco.io/koko
90
+ builder_url: https://builder.tawa.insureco.io
91
+ registry: registry.digitalocean.com/insureco
92
+ ```
93
+
94
+ ### Project Config (`catalog-info.yaml`)
95
+
96
+ ```yaml
97
+ apiVersion: backstage.io/v1alpha1
98
+ kind: Component
99
+ metadata:
100
+ name: my-service
101
+ description: My awesome service
102
+ annotations:
103
+ insureco.io/framework: nextjs
104
+ insureco.io/node-version: "20"
105
+ spec:
106
+ type: service
107
+ lifecycle: production
108
+ owner: my-team
109
+ routes:
110
+ - path: /api/users
111
+ methods: [GET, POST]
112
+ auth: required
113
+ ```
114
+
115
+ ## Environment Flags
116
+
117
+ ```bash
118
+ iec deploy # Deploy to sandbox (default)
119
+ iec deploy --prod # Deploy to production
120
+ iec deploy --uat # Deploy to UAT
121
+ iec deploy --watch # Watch build progress
122
+ ```
123
+
124
+ ## Development
125
+
126
+ ```bash
127
+ # Install dependencies
128
+ npm install
129
+
130
+ # Run in development
131
+ npm run dev
132
+
133
+ # Build
134
+ npm run build
135
+
136
+ # Run built CLI
137
+ npm start
138
+ ```
139
+
140
+ ## Publishing
141
+
142
+ Releases are automated via GitHub Actions. To publish a new version:
143
+
144
+ ```bash
145
+ # 1. Bump version in package.json
146
+ # 2. Commit and tag
147
+ git add -A && git commit -m "chore: release v0.2.0"
148
+ git tag v0.2.0
149
+ git push && git push --tags
150
+ ```
151
+
152
+ The GitHub Action will automatically publish to npm when a `v*` tag is pushed.
153
+
154
+ ### Manual Publishing
155
+
156
+ ```bash
157
+ npm login
158
+ npm publish
159
+ ```
160
+
161
+ ## Requirements
162
+
163
+ - Node.js 20+
164
+ - npm or pnpm
165
+
166
+ ## License
167
+
168
+ MIT
@@ -0,0 +1,11 @@
1
+ interface BackupOptions {
2
+ type?: 'mongodb' | 'redis' | 'neo4j';
3
+ database?: string;
4
+ }
5
+ interface RestoreOptions {
6
+ confirm?: boolean;
7
+ }
8
+ export declare function backupCommand(options: BackupOptions): Promise<void>;
9
+ export declare function restoreCommand(backupId: string, options: RestoreOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAkBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAkCf"}
@@ -0,0 +1,112 @@
1
+ import { log, formatTable, spinner } from '../lib/output.js';
2
+ const BACKUP_API_URL = 'http://jefferson.daryx.com:8090';
3
+ export async function backupCommand(options) {
4
+ if (options.type) {
5
+ // Trigger manual backup
6
+ await triggerBackup(options.type, options.database);
7
+ }
8
+ else {
9
+ // Show backup status
10
+ await showBackupStatus();
11
+ }
12
+ }
13
+ export async function restoreCommand(backupId, options) {
14
+ if (!options.confirm) {
15
+ log.error('Restore requires --confirm flag');
16
+ log.dim('This is a destructive operation that will overwrite existing data');
17
+ process.exit(1);
18
+ }
19
+ const sp = spinner(`Restoring backup ${backupId}`);
20
+ try {
21
+ const response = await fetch(`${BACKUP_API_URL}/api/restore`, {
22
+ method: 'POST',
23
+ headers: { 'Content-Type': 'application/json' },
24
+ body: JSON.stringify({ backupId, confirm: true }),
25
+ });
26
+ const result = (await response.json());
27
+ if (!result.success) {
28
+ sp.stop(false);
29
+ log.error(`Restore failed: ${result.error?.message}`);
30
+ process.exit(1);
31
+ }
32
+ sp.stop(true);
33
+ log.success(`Restore started: job ${result.data?.jobId}`);
34
+ log.dim('Monitor progress with: iec backup --status');
35
+ }
36
+ catch (error) {
37
+ sp.stop(false);
38
+ if (error instanceof Error) {
39
+ log.error(`Failed to start restore: ${error.message}`);
40
+ }
41
+ process.exit(1);
42
+ }
43
+ }
44
+ async function showBackupStatus() {
45
+ log.info('Backup status');
46
+ log.info('');
47
+ try {
48
+ const response = await fetch(`${BACKUP_API_URL}/api/status`);
49
+ const result = (await response.json());
50
+ if (!result.success || !result.data) {
51
+ log.error(`Failed to get status: ${result.error?.message}`);
52
+ process.exit(1);
53
+ }
54
+ const { lastRun, nextScheduled, storage } = result.data;
55
+ log.info('Last backups:');
56
+ const lastRunRows = Object.entries(lastRun).map(([type, info]) => {
57
+ const typed = info;
58
+ return [
59
+ type,
60
+ typed.status,
61
+ new Date(typed.timestamp).toLocaleString(),
62
+ `${typed.durationSec}s`,
63
+ ];
64
+ });
65
+ console.log(formatTable(['TYPE', 'STATUS', 'TIMESTAMP', 'DURATION'], lastRunRows));
66
+ log.info('');
67
+ log.info('Next scheduled:');
68
+ for (const [type, timestamp] of Object.entries(nextScheduled)) {
69
+ log.dim(` ${type}: ${new Date(timestamp).toLocaleString()}`);
70
+ }
71
+ log.info('');
72
+ log.info('Storage:');
73
+ log.dim(` Provider: ${storage.provider}`);
74
+ log.dim(` Bucket: ${storage.bucket}`);
75
+ log.dim(` Used: ${(storage.usedBytes / 1024 / 1024 / 1024).toFixed(2)} GB`);
76
+ log.dim(` Backups: ${storage.backupCount}`);
77
+ }
78
+ catch (error) {
79
+ if (error instanceof Error) {
80
+ log.error(`Failed to connect to backup service: ${error.message}`);
81
+ log.dim(`Backup service URL: ${BACKUP_API_URL}`);
82
+ }
83
+ process.exit(1);
84
+ }
85
+ }
86
+ async function triggerBackup(type, database) {
87
+ const sp = spinner(`Triggering ${type} backup`);
88
+ try {
89
+ const response = await fetch(`${BACKUP_API_URL}/api/backups`, {
90
+ method: 'POST',
91
+ headers: { 'Content-Type': 'application/json' },
92
+ body: JSON.stringify({ type, database }),
93
+ });
94
+ const result = (await response.json());
95
+ if (!result.success) {
96
+ sp.stop(false);
97
+ log.error(`Backup failed: ${result.error?.message}`);
98
+ process.exit(1);
99
+ }
100
+ sp.stop(true);
101
+ log.success(`Backup started: job ${result.data?.jobId}`);
102
+ log.dim('Monitor progress with: iec backup');
103
+ }
104
+ catch (error) {
105
+ sp.stop(false);
106
+ if (error instanceof Error) {
107
+ log.error(`Failed to trigger backup: ${error.message}`);
108
+ }
109
+ process.exit(1);
110
+ }
111
+ }
112
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface ConfigSetOptions {
2
+ kokoUrl?: string;
3
+ builderUrl?: string;
4
+ registry?: string;
5
+ kubeconfig?: string;
6
+ anthropicKey?: string;
7
+ }
8
+ export declare function configCommand(options: ConfigSetOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5E"}
@@ -0,0 +1,41 @@
1
+ import { loadConfig, saveConfig, CONFIG_PATH } from '../lib/config.js';
2
+ import { log } from '../lib/output.js';
3
+ export async function configCommand(options) {
4
+ const hasUpdates = options.kokoUrl !== undefined ||
5
+ options.builderUrl !== undefined ||
6
+ options.registry !== undefined ||
7
+ options.kubeconfig !== undefined ||
8
+ options.anthropicKey !== undefined;
9
+ if (hasUpdates) {
10
+ await setConfig(options);
11
+ }
12
+ else {
13
+ await showConfig();
14
+ }
15
+ }
16
+ async function showConfig() {
17
+ const config = await loadConfig();
18
+ log.info('Current configuration');
19
+ log.dim(`Config file: ${CONFIG_PATH}`);
20
+ log.info('');
21
+ log.dim(` koko_url: ${config.koko_url}`);
22
+ log.dim(` builder_url: ${config.builder_url}`);
23
+ log.dim(` registry: ${config.registry}`);
24
+ log.dim(` kubeconfig: ${config.kubeconfig}`);
25
+ log.dim(` anthropic_key: ${config.anthropic_api_key ? '***configured***' : '(not set)'}`);
26
+ }
27
+ async function setConfig(options) {
28
+ const config = await loadConfig();
29
+ const newConfig = {
30
+ ...config,
31
+ ...(options.kokoUrl && { koko_url: options.kokoUrl }),
32
+ ...(options.builderUrl && { builder_url: options.builderUrl }),
33
+ ...(options.registry && { registry: options.registry }),
34
+ ...(options.kubeconfig && { kubeconfig: options.kubeconfig }),
35
+ ...(options.anthropicKey && { anthropic_api_key: options.anthropicKey }),
36
+ };
37
+ await saveConfig(newConfig);
38
+ log.success('Configuration updated');
39
+ log.dim(`Saved to ${CONFIG_PATH}`);
40
+ }
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAWtC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAyB;IAC3D,MAAM,UAAU,GACd,OAAO,CAAC,OAAO,KAAK,SAAS;QAC7B,OAAO,CAAC,UAAU,KAAK,SAAS;QAChC,OAAO,CAAC,QAAQ,KAAK,SAAS;QAC9B,OAAO,CAAC,UAAU,KAAK,SAAS;QAChC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAA;IAEpC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IAEjC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACjC,GAAG,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAA;IACtC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACZ,GAAG,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/C,GAAG,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAClD,GAAG,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/C,GAAG,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACjD,GAAG,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AAC7F,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAyB;IAChD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IAEjC,MAAM,SAAS,GAAW;QACxB,GAAG,MAAM;QACT,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9D,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvD,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;KACzE,CAAA;IAED,MAAM,UAAU,CAAC,SAAS,CAAC,CAAA;IAC3B,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpC,GAAG,CAAC,GAAG,CAAC,YAAY,WAAW,EAAE,CAAC,CAAA;AACpC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Environment } from '../types/index.js';
2
+ interface DeployOptions {
3
+ branch?: string;
4
+ watch?: boolean;
5
+ env?: Environment;
6
+ prod?: boolean;
7
+ sandbox?: boolean;
8
+ uat?: boolean;
9
+ }
10
+ export declare function deployCommand(options: DeployOptions): Promise<void>;
11
+ export declare function listBuildsCommand(options: {
12
+ service?: string;
13
+ limit?: number;
14
+ }): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAsB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAExE,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuHzE;AA8DD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCpG"}
@@ -0,0 +1,219 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { parse } from 'yaml';
4
+ import { loadLinkedService } from '../lib/config.js';
5
+ import { BuilderClient } from '../lib/builder.js';
6
+ import { KokoClient } from '../lib/api.js';
7
+ import { log, spinner, formatTable } from '../lib/output.js';
8
+ export async function deployCommand(options) {
9
+ // Check if linked
10
+ const linkedService = await loadLinkedService();
11
+ let serviceId;
12
+ let serviceName;
13
+ if (linkedService) {
14
+ serviceId = linkedService.serviceId;
15
+ serviceName = linkedService.serviceName;
16
+ }
17
+ else {
18
+ // Try to get from catalog-info.yaml
19
+ try {
20
+ const catalogPath = join(process.cwd(), 'catalog-info.yaml');
21
+ const content = await readFile(catalogPath, 'utf-8');
22
+ const catalogInfo = parse(content);
23
+ serviceName = catalogInfo.metadata.name;
24
+ serviceId = serviceName; // Use name as ID for lookup
25
+ }
26
+ catch {
27
+ log.error('Not linked to iec-builder');
28
+ log.dim('Run "iec link" first to connect this service');
29
+ process.exit(1);
30
+ }
31
+ }
32
+ const branch = options.branch || linkedService?.branch || 'main';
33
+ // Resolve environment from flags (shorthand flags take precedence)
34
+ let environment = 'sandbox'; // default
35
+ if (options.prod) {
36
+ environment = 'prod';
37
+ }
38
+ else if (options.sandbox) {
39
+ environment = 'sandbox';
40
+ }
41
+ else if (options.uat) {
42
+ environment = 'uat';
43
+ }
44
+ else if (options.env) {
45
+ environment = options.env;
46
+ }
47
+ // Check if service is registered in Koko (required before deploy)
48
+ const spCheck = spinner('Checking service registration');
49
+ try {
50
+ const koko = await KokoClient.create();
51
+ const kokoResult = await koko.getService(serviceName);
52
+ if (!kokoResult.success || !kokoResult.data) {
53
+ spCheck.stop(false);
54
+ log.error(`Service "${serviceName}" is not registered in Koko`);
55
+ log.info('');
56
+ log.info('You must register the service before deploying:');
57
+ log.dim(' iec register');
58
+ log.info('');
59
+ log.info('Then link it to the builder:');
60
+ log.dim(' iec link');
61
+ log.info('');
62
+ log.info('Finally, deploy:');
63
+ log.dim(' iec deploy');
64
+ process.exit(1);
65
+ }
66
+ spCheck.stop(true);
67
+ log.dim(` Registered in Koko: ${kokoResult.data.id}`);
68
+ }
69
+ catch (error) {
70
+ spCheck.stop(false);
71
+ if (error instanceof Error) {
72
+ log.warning(`Could not verify Koko registration: ${error.message}`);
73
+ log.dim('Proceeding with deploy (Koko may be unavailable)');
74
+ }
75
+ }
76
+ log.info(`Deploying ${serviceName}`);
77
+ log.dim(` Branch: ${branch}`);
78
+ log.dim(` Environment: ${environment}`);
79
+ const sp = spinner('Triggering build');
80
+ try {
81
+ const builder = await BuilderClient.create();
82
+ // Trigger build
83
+ const result = await builder.triggerBuild({
84
+ serviceId,
85
+ branch,
86
+ environment,
87
+ });
88
+ if (!result.success || !result.data) {
89
+ sp.stop(false);
90
+ log.error(`Failed to trigger build: ${result.error?.message || 'Unknown error'}`);
91
+ process.exit(1);
92
+ }
93
+ sp.stop(true);
94
+ const { buildId, message } = result.data;
95
+ log.success(`Build triggered: ${buildId.substring(0, 8)}`);
96
+ log.dim(` ${message}`);
97
+ if (options.watch) {
98
+ log.info('');
99
+ log.info('Watching build progress...');
100
+ log.dim('Press Ctrl+C to stop watching');
101
+ log.info('');
102
+ await watchBuild(builder, buildId);
103
+ }
104
+ else {
105
+ log.info('');
106
+ log.info('To watch progress:');
107
+ log.dim(` iec status --build ${buildId}`);
108
+ log.info('');
109
+ log.info('To view logs:');
110
+ log.dim(` iec logs --build ${buildId}`);
111
+ }
112
+ }
113
+ catch (error) {
114
+ sp.stop(false);
115
+ if (error instanceof Error) {
116
+ log.error(`Deploy failed: ${error.message}`);
117
+ }
118
+ process.exit(1);
119
+ }
120
+ }
121
+ async function watchBuild(builder, buildId) {
122
+ const terminalStates = ['completed', 'failed'];
123
+ let lastStatus = '';
124
+ while (true) {
125
+ const result = await builder.getBuild(buildId);
126
+ if (!result.success || !result.data) {
127
+ log.error('Failed to get build status');
128
+ process.exit(1);
129
+ }
130
+ const build = result.data;
131
+ if (build.status !== lastStatus) {
132
+ lastStatus = build.status;
133
+ printBuildStatus(build);
134
+ }
135
+ if (terminalStates.includes(build.status)) {
136
+ log.info('');
137
+ if (build.status === 'completed') {
138
+ log.success('Build completed successfully!');
139
+ if (build.imageTag) {
140
+ log.dim(` Image: ${build.imageTag}`);
141
+ }
142
+ }
143
+ else {
144
+ log.error('Build failed');
145
+ if (build.error) {
146
+ log.dim(` Error: ${build.error}`);
147
+ }
148
+ log.info('');
149
+ log.info('View full logs:');
150
+ log.dim(` iec logs --build ${buildId}`);
151
+ process.exit(1);
152
+ }
153
+ break;
154
+ }
155
+ // Poll every 2 seconds
156
+ await new Promise(resolve => setTimeout(resolve, 2000));
157
+ }
158
+ }
159
+ function printBuildStatus(build) {
160
+ const statusEmoji = {
161
+ queued: '\u23f3', // hourglass
162
+ cloning: '\ud83d\udce5', // inbox
163
+ building: '\ud83d\udd28', // hammer
164
+ pushing: '\ud83d\udce4', // outbox
165
+ deploying: '\ud83d\ude80', // rocket
166
+ completed: '\u2705', // check
167
+ failed: '\u274c', // x
168
+ };
169
+ const emoji = statusEmoji[build.status] || '\u2022';
170
+ log.info(`${emoji} ${build.status}`);
171
+ }
172
+ // List recent builds
173
+ export async function listBuildsCommand(options) {
174
+ const builder = await BuilderClient.create();
175
+ let serviceId = options.service;
176
+ // Try to get service from linked config
177
+ if (!serviceId) {
178
+ const linkedService = await loadLinkedService();
179
+ if (linkedService) {
180
+ serviceId = linkedService.serviceId;
181
+ }
182
+ }
183
+ const sp = spinner('Fetching builds');
184
+ const result = await builder.listBuilds(serviceId);
185
+ sp.stop(true);
186
+ if (!result.success || !result.data) {
187
+ log.error(`Failed to list builds: ${result.error?.message || 'Unknown error'}`);
188
+ process.exit(1);
189
+ }
190
+ const builds = result.data.slice(0, options.limit || 10);
191
+ if (builds.length === 0) {
192
+ log.warning('No builds found');
193
+ return;
194
+ }
195
+ const rows = builds.map(b => [
196
+ b.id.substring(0, 8),
197
+ b.status,
198
+ b.branch,
199
+ b.commitSha?.substring(0, 7) || '-',
200
+ formatTime(b.createdAt),
201
+ ]);
202
+ console.log(formatTable(['BUILD', 'STATUS', 'BRANCH', 'COMMIT', 'CREATED'], rows));
203
+ }
204
+ function formatTime(isoString) {
205
+ const date = new Date(isoString);
206
+ const now = new Date();
207
+ const diffMs = now.getTime() - date.getTime();
208
+ const diffMins = Math.floor(diffMs / 60000);
209
+ if (diffMins < 1)
210
+ return 'just now';
211
+ if (diffMins < 60)
212
+ return `${diffMins}m ago`;
213
+ const diffHours = Math.floor(diffMins / 60);
214
+ if (diffHours < 24)
215
+ return `${diffHours}h ago`;
216
+ const diffDays = Math.floor(diffHours / 24);
217
+ return `${diffDays}d ago`;
218
+ }
219
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Environment } from '../types/index.js';
2
+ interface DestroyOptions {
3
+ namespace?: string;
4
+ env?: Environment;
5
+ prod?: boolean;
6
+ sandbox?: boolean;
7
+ uat?: boolean;
8
+ force?: boolean;
9
+ }
10
+ export declare function destroyCommand(options: DestroyOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=destroy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D3E"}