opencastle 0.27.3 → 0.29.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 +12 -3
- package/bin/cli.mjs +13 -5
- package/dist/cli/convoy/engine.d.ts.map +1 -1
- package/dist/cli/convoy/engine.js +2 -11
- package/dist/cli/convoy/engine.js.map +1 -1
- package/dist/cli/convoy/engine.test.js +2 -1
- package/dist/cli/convoy/engine.test.js.map +1 -1
- package/dist/cli/convoy/export.d.ts +1 -3
- package/dist/cli/convoy/export.d.ts.map +1 -1
- package/dist/cli/convoy/export.js +9 -88
- package/dist/cli/convoy/export.js.map +1 -1
- package/dist/cli/convoy/export.test.js +7 -186
- package/dist/cli/convoy/export.test.js.map +1 -1
- package/dist/cli/convoy/issues.js +3 -3
- package/dist/cli/convoy/issues.js.map +1 -1
- package/dist/cli/convoy/issues.test.js +4 -3
- package/dist/cli/convoy/issues.test.js.map +1 -1
- package/dist/cli/convoy/pipeline.d.ts.map +1 -1
- package/dist/cli/convoy/pipeline.js +0 -21
- package/dist/cli/convoy/pipeline.js.map +1 -1
- package/dist/cli/convoy/pipeline.test.js +0 -21
- package/dist/cli/convoy/pipeline.test.js.map +1 -1
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +32 -8
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/destroy.d.ts.map +1 -1
- package/dist/cli/destroy.js +13 -0
- package/dist/cli/destroy.js.map +1 -1
- package/dist/cli/dispute.d.ts +3 -0
- package/dist/cli/dispute.d.ts.map +1 -0
- package/dist/cli/dispute.js +25 -0
- package/dist/cli/dispute.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +14 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/eject.d.ts.map +1 -1
- package/dist/cli/eject.js +14 -0
- package/dist/cli/eject.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +14 -0
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/log.d.ts +0 -11
- package/dist/cli/log.d.ts.map +1 -1
- package/dist/cli/log.js +2 -114
- package/dist/cli/log.js.map +1 -1
- package/dist/cli/pipeline.d.ts +3 -0
- package/dist/cli/pipeline.d.ts.map +1 -0
- package/dist/cli/pipeline.js +321 -0
- package/dist/cli/pipeline.js.map +1 -0
- package/dist/cli/plan.d.ts +37 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +321 -161
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/run.js +2 -2
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +16 -0
- package/dist/cli/update.js.map +1 -1
- package/dist/cli/validate.d.ts +3 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +60 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +1 -3
- package/dist/cli/watch.js.map +1 -1
- package/package.json +5 -4
- package/src/cli/convoy/engine.test.ts +2 -1
- package/src/cli/convoy/engine.ts +2 -5
- package/src/cli/convoy/export.test.ts +7 -224
- package/src/cli/convoy/export.ts +10 -106
- package/src/cli/convoy/issues.test.ts +3 -2
- package/src/cli/convoy/issues.ts +3 -3
- package/src/cli/convoy/pipeline.test.ts +0 -25
- package/src/cli/convoy/pipeline.ts +0 -19
- package/src/cli/dashboard.ts +33 -8
- package/src/cli/destroy.ts +15 -0
- package/src/cli/dispute.ts +28 -0
- package/src/cli/doctor.ts +16 -1
- package/src/cli/eject.ts +16 -0
- package/src/cli/init.ts +16 -0
- package/src/cli/log.ts +2 -120
- package/src/cli/pipeline.ts +362 -0
- package/src/cli/plan.ts +357 -153
- package/src/cli/run.ts +2 -2
- package/src/cli/update.ts +18 -0
- package/src/cli/validate.ts +65 -0
- package/src/cli/watch.ts +1 -3
- package/src/dashboard/dist/_astro/index.Je1YjU_y.css +1 -0
- package/src/dashboard/dist/data/convoy-list.json +54 -9
- package/src/dashboard/dist/data/convoys/demo-api-v2.json +177 -0
- package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +239 -0
- package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +328 -0
- package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +187 -0
- package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +153 -0
- package/src/dashboard/dist/data/convoys/demo-docs-update.json +154 -0
- package/src/dashboard/dist/data/convoys/demo-perf-opt.json +227 -0
- package/src/dashboard/dist/data/events.ndjson +115 -0
- package/src/dashboard/dist/data/overall-stats.json +56 -13
- package/src/dashboard/dist/data/pipelines.ndjson +5285 -0
- package/src/dashboard/dist/index.html +165 -1392
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/dashboard/public/data/convoy-list.json +54 -9
- package/src/dashboard/public/data/convoys/demo-api-v2.json +177 -0
- package/src/dashboard/public/data/convoys/demo-auth-revamp.json +239 -0
- package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +328 -0
- package/src/dashboard/public/data/convoys/demo-data-pipeline.json +187 -0
- package/src/dashboard/public/data/convoys/demo-deploy-ci.json +153 -0
- package/src/dashboard/public/data/convoys/demo-docs-update.json +154 -0
- package/src/dashboard/public/data/convoys/demo-perf-opt.json +227 -0
- package/src/dashboard/public/data/events.ndjson +115 -0
- package/src/dashboard/public/data/overall-stats.json +56 -13
- package/src/dashboard/public/data/pipelines.ndjson +5285 -0
- package/src/dashboard/scripts/etl.test.ts +4 -62
- package/src/dashboard/scripts/etl.ts +11 -10
- package/src/dashboard/scripts/generate-demo-db.ts +482 -115
- package/src/dashboard/src/pages/index.astro +235 -1638
- package/src/dashboard/src/styles/dashboard.css +473 -7
- package/src/orchestrator/prompts/brainstorm.prompt.md +1 -0
- package/src/orchestrator/prompts/fix-convoy.prompt.md +79 -0
- package/src/orchestrator/prompts/generate-convoy.prompt.md +60 -58
- package/src/orchestrator/prompts/generate-prd.prompt.md +126 -0
- package/src/orchestrator/prompts/validate-convoy.prompt.md +89 -0
- package/src/orchestrator/prompts/validate-prd.prompt.md +83 -0
- package/dist/cli/convoy/log-merge.test.d.ts +0 -2
- package/dist/cli/convoy/log-merge.test.d.ts.map +0 -1
- package/dist/cli/convoy/log-merge.test.js +0 -147
- package/dist/cli/convoy/log-merge.test.js.map +0 -1
- package/src/cli/convoy/log-merge.test.ts +0 -179
- package/src/dashboard/dist/_astro/index.6L3_HsPT.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdtempSync, rmSync, realpathSync, readFileSync, existsSync
|
|
1
|
+
import { mkdtempSync, rmSync, realpathSync, readFileSync, existsSync } from 'node:fs'
|
|
2
2
|
import { tmpdir } from 'node:os'
|
|
3
3
|
import { join } from 'node:path'
|
|
4
4
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
|
|
@@ -47,14 +47,13 @@ describe('runEtl — no database', () => {
|
|
|
47
47
|
it('returns zero counts when db is missing', async () => {
|
|
48
48
|
const dbPath = join(tmpDir, 'nonexistent.db')
|
|
49
49
|
const result = await runEtl({ dbPath, outputDir })
|
|
50
|
-
expect(result).toEqual({ convoyCount: 0
|
|
50
|
+
expect(result).toEqual({ convoyCount: 0 })
|
|
51
51
|
})
|
|
52
52
|
|
|
53
|
-
it('creates the output directory
|
|
53
|
+
it('creates the output directory when db is missing', async () => {
|
|
54
54
|
const dbPath = join(tmpDir, 'nonexistent.db')
|
|
55
55
|
await runEtl({ dbPath, outputDir })
|
|
56
56
|
expect(existsSync(outputDir)).toBe(true)
|
|
57
|
-
expect(existsSync(join(outputDir, 'convoys'))).toBe(true)
|
|
58
57
|
})
|
|
59
58
|
})
|
|
60
59
|
|
|
@@ -120,10 +119,9 @@ describe('runEtl — with seeded database', () => {
|
|
|
120
119
|
}
|
|
121
120
|
})
|
|
122
121
|
|
|
123
|
-
it('returns correct convoy
|
|
122
|
+
it('returns correct convoy count', async () => {
|
|
124
123
|
const result = await runEtl({ dbPath, outputDir })
|
|
125
124
|
expect(result.convoyCount).toBe(2)
|
|
126
|
-
expect(result.taskCount).toBe(2)
|
|
127
125
|
})
|
|
128
126
|
|
|
129
127
|
it('overall-stats.json has correct convoy counts', async () => {
|
|
@@ -151,60 +149,4 @@ describe('runEtl — with seeded database', () => {
|
|
|
151
149
|
expect(item).toHaveProperty('total_cost_usd')
|
|
152
150
|
}
|
|
153
151
|
})
|
|
154
|
-
|
|
155
|
-
it('creates per-convoy detail JSON files', async () => {
|
|
156
|
-
await runEtl({ dbPath, outputDir })
|
|
157
|
-
const detailPath = join(outputDir, 'convoys', 'convoy-abc.json')
|
|
158
|
-
expect(existsSync(detailPath)).toBe(true)
|
|
159
|
-
const detail = JSON.parse(readFileSync(detailPath, 'utf8'))
|
|
160
|
-
expect(detail.convoy.id).toBe('convoy-abc')
|
|
161
|
-
expect(detail.convoy.name).toBe('Test Convoy')
|
|
162
|
-
expect(detail.convoy.status).toBe('done')
|
|
163
|
-
expect(detail.convoy).toHaveProperty('branch')
|
|
164
|
-
expect(detail.convoy).toHaveProperty('total_tokens')
|
|
165
|
-
expect(detail.convoy).toHaveProperty('total_cost_usd')
|
|
166
|
-
expect(detail).toHaveProperty('taskSummary')
|
|
167
|
-
expect(detail.taskSummary).toHaveProperty('total')
|
|
168
|
-
expect(Array.isArray(detail.tasks)).toBe(true)
|
|
169
|
-
})
|
|
170
|
-
|
|
171
|
-
it('detail file has correct task fields', async () => {
|
|
172
|
-
await runEtl({ dbPath, outputDir })
|
|
173
|
-
const detail = JSON.parse(
|
|
174
|
-
readFileSync(join(outputDir, 'convoys', 'convoy-abc.json'), 'utf8'),
|
|
175
|
-
)
|
|
176
|
-
expect(detail.tasks).toHaveLength(2)
|
|
177
|
-
for (const task of detail.tasks) {
|
|
178
|
-
expect(task).toHaveProperty('id')
|
|
179
|
-
expect(task).toHaveProperty('phase')
|
|
180
|
-
expect(task).toHaveProperty('agent')
|
|
181
|
-
expect(task).toHaveProperty('model')
|
|
182
|
-
expect(task).toHaveProperty('status')
|
|
183
|
-
expect(task).toHaveProperty('retries')
|
|
184
|
-
expect(task).toHaveProperty('started_at')
|
|
185
|
-
expect(task).toHaveProperty('finished_at')
|
|
186
|
-
expect(task).toHaveProperty('total_tokens')
|
|
187
|
-
expect(task).toHaveProperty('cost_usd')
|
|
188
|
-
expect(task).toHaveProperty('review_level')
|
|
189
|
-
expect(task).toHaveProperty('review_verdict')
|
|
190
|
-
expect(task).toHaveProperty('drift_score')
|
|
191
|
-
}
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
it('creates detail file for each convoy', async () => {
|
|
195
|
-
await runEtl({ dbPath, outputDir })
|
|
196
|
-
expect(existsSync(join(outputDir, 'convoys', 'convoy-abc.json'))).toBe(true)
|
|
197
|
-
expect(existsSync(join(outputDir, 'convoys', 'convoy-def.json'))).toBe(true)
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
it('detail file includes artifacts and events fields', async () => {
|
|
201
|
-
await runEtl({ dbPath, outputDir })
|
|
202
|
-
const detail = JSON.parse(
|
|
203
|
-
readFileSync(join(outputDir, 'convoys', 'convoy-abc.json'), 'utf8'),
|
|
204
|
-
)
|
|
205
|
-
expect(Array.isArray(detail.artifacts)).toBe(true)
|
|
206
|
-
expect(typeof detail.artifact_count).toBe('number')
|
|
207
|
-
expect(typeof detail.has_more_events).toBe('boolean')
|
|
208
|
-
expect(Array.isArray(detail.events)).toBe(true)
|
|
209
|
-
})
|
|
210
152
|
})
|
|
@@ -12,7 +12,6 @@ export interface EtlOptions {
|
|
|
12
12
|
|
|
13
13
|
export interface EtlResult {
|
|
14
14
|
convoyCount: number
|
|
15
|
-
taskCount: number
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
const EMPTY_OVERALL_STATS = {
|
|
@@ -28,7 +27,6 @@ export async function runEtl(options: EtlOptions): Promise<EtlResult> {
|
|
|
28
27
|
const { dbPath, outputDir } = options
|
|
29
28
|
|
|
30
29
|
mkdirSync(outputDir, { recursive: true })
|
|
31
|
-
mkdirSync(resolve(outputDir, 'convoys'), { recursive: true })
|
|
32
30
|
|
|
33
31
|
if (!existsSync(dbPath)) {
|
|
34
32
|
console.warn(` \u26a0 No convoy database found at ${dbPath}. Writing empty JSON files.`)
|
|
@@ -38,7 +36,7 @@ export async function runEtl(options: EtlOptions): Promise<EtlResult> {
|
|
|
38
36
|
'utf8',
|
|
39
37
|
)
|
|
40
38
|
writeFileSync(resolve(outputDir, 'convoy-list.json'), JSON.stringify([], null, 2), 'utf8')
|
|
41
|
-
return { convoyCount: 0
|
|
39
|
+
return { convoyCount: 0 }
|
|
42
40
|
}
|
|
43
41
|
|
|
44
42
|
const { createConvoyStore } = await import('../../cli/convoy/store.js')
|
|
@@ -65,6 +63,7 @@ export async function runEtl(options: EtlOptions): Promise<EtlResult> {
|
|
|
65
63
|
name: c.name,
|
|
66
64
|
status: c.status,
|
|
67
65
|
created_at: c.created_at,
|
|
66
|
+
started_at: c.started_at,
|
|
68
67
|
finished_at: c.finished_at,
|
|
69
68
|
total_tokens: c.total_tokens,
|
|
70
69
|
total_cost_usd: c.total_cost_usd,
|
|
@@ -75,21 +74,23 @@ export async function runEtl(options: EtlOptions): Promise<EtlResult> {
|
|
|
75
74
|
'utf8',
|
|
76
75
|
)
|
|
77
76
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
mkdirSync(resolve(outputDir, 'convoys'), { recursive: true })
|
|
78
|
+
let detailCount = 0
|
|
79
|
+
for (const c of allConvoys) {
|
|
80
|
+
const detail = store.getConvoyDetails(c.id)
|
|
81
81
|
if (detail) {
|
|
82
|
-
totalTasks += detail.tasks.length
|
|
83
82
|
writeFileSync(
|
|
84
|
-
resolve(outputDir, 'convoys',
|
|
83
|
+
resolve(outputDir, 'convoys', c.id + '.json'),
|
|
85
84
|
JSON.stringify(detail, null, 2),
|
|
86
85
|
'utf8',
|
|
87
86
|
)
|
|
87
|
+
detailCount++
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
console.log(`ETL complete: ${allConvoys.length} convoys
|
|
92
|
-
|
|
91
|
+
console.log(`ETL complete: ${allConvoys.length} convoys summarized, ${detailCount} detail files generated.`)
|
|
92
|
+
|
|
93
|
+
return { convoyCount: allConvoys.length }
|
|
93
94
|
} finally {
|
|
94
95
|
store.close()
|
|
95
96
|
}
|