@cluesmith/codev 3.0.0 → 3.0.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.
- package/LICENSE +201 -0
- package/bin/af.js +2 -2
- package/bin/afx.js +8 -0
- package/bin/consult.js +2 -1
- package/bin/team.js +2 -1
- package/{dashboard/dist/assets/index-nr0cXxtf.css → dashboard-dist/assets/index-BWYZtvwm.css} +1 -1
- package/dashboard-dist/assets/index-Dn9zmcKp.js +195 -0
- package/dashboard-dist/assets/index-Dn9zmcKp.js.map +1 -0
- package/{dashboard/dist → dashboard-dist}/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +13 -14
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts +4 -4
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +23 -12
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/attach.js +8 -8
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/bench.d.ts +1 -1
- package/dist/agent-farm/commands/bench.js +1 -1
- package/dist/agent-farm/commands/cron.js +1 -1
- package/dist/agent-farm/commands/cron.js.map +1 -1
- package/dist/agent-farm/commands/db.d.ts +3 -3
- package/dist/agent-farm/commands/db.js +4 -4
- package/dist/agent-farm/commands/db.js.map +1 -1
- package/dist/agent-farm/commands/open.js +2 -2
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/rename.js +1 -1
- package/dist/agent-farm/commands/rename.js.map +1 -1
- package/dist/agent-farm/commands/send.js +3 -3
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/shell.js +3 -3
- package/dist/agent-farm/commands/shell.js.map +1 -1
- package/dist/agent-farm/commands/spawn-roles.d.ts +8 -4
- package/dist/agent-farm/commands/spawn-roles.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-roles.js +48 -28
- package/dist/agent-farm/commands/spawn-roles.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +80 -13
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts +6 -6
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +90 -53
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +48 -3
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/team-update.d.ts +1 -1
- package/dist/agent-farm/commands/team-update.js +1 -1
- package/dist/agent-farm/commands/team.d.ts +1 -1
- package/dist/agent-farm/commands/team.js +1 -1
- package/dist/agent-farm/commands/tower-cloud.d.ts +2 -2
- package/dist/agent-farm/commands/tower-cloud.js +3 -3
- package/dist/agent-farm/commands/tower-cloud.js.map +1 -1
- package/dist/agent-farm/commands/tower.js +2 -2
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/lib/cloud-config.js +2 -2
- package/dist/agent-farm/lib/cloud-config.js.map +1 -1
- package/dist/agent-farm/lib/tower-client.d.ts +6 -230
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +6 -293
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +1 -1
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/message-write.d.ts +24 -0
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -0
- package/dist/agent-farm/servers/message-write.js +63 -0
- package/dist/agent-farm/servers/message-write.js.map +1 -0
- package/dist/agent-farm/servers/overview.d.ts +4 -1
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +38 -5
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/send-buffer.d.ts +4 -3
- package/dist/agent-farm/servers/send-buffer.d.ts.map +1 -1
- package/dist/agent-farm/servers/send-buffer.js +7 -4
- package/dist/agent-farm/servers/send-buffer.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron-parser.js +1 -1
- package/dist/agent-farm/servers/tower-cron-parser.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +4 -5
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +6 -5
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +19 -16
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +2 -2
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +47 -18
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +2 -2
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +9 -6
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +12 -6
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/types.d.ts +9 -0
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +11 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +21 -0
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/harness.d.ts +85 -0
- package/dist/agent-farm/utils/harness.d.ts.map +1 -0
- package/dist/agent-farm/utils/harness.js +212 -0
- package/dist/agent-farm/utils/harness.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.js +2 -2
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +37 -3
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +220 -150
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +54 -8
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/artifacts.d.ts +69 -0
- package/dist/commands/porch/artifacts.d.ts.map +1 -0
- package/dist/commands/porch/artifacts.js +368 -0
- package/dist/commands/porch/artifacts.js.map +1 -0
- package/dist/commands/porch/checks.d.ts +8 -1
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +98 -1
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/index.d.ts +12 -7
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +216 -61
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +72 -74
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/porch/notify.d.ts +2 -2
- package/dist/commands/porch/notify.js +5 -5
- package/dist/commands/porch/notify.js.map +1 -1
- package/dist/commands/porch/prompts.d.ts +2 -1
- package/dist/commands/porch/prompts.d.ts.map +1 -1
- package/dist/commands/porch/prompts.js +19 -7
- package/dist/commands/porch/prompts.js.map +1 -1
- package/dist/commands/porch/state.d.ts +27 -2
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +96 -9
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/commands/porch/types.d.ts +8 -0
- package/dist/commands/porch/types.d.ts.map +1 -1
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +7 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/forge-contracts.d.ts +9 -0
- package/dist/lib/forge-contracts.d.ts.map +1 -1
- package/dist/lib/forge-contracts.js.map +1 -1
- package/dist/lib/forge.js +1 -1
- package/dist/lib/forge.js.map +1 -1
- package/dist/lib/team-github.d.ts +49 -0
- package/dist/lib/team-github.d.ts.map +1 -1
- package/dist/lib/team-github.js +115 -6
- package/dist/lib/team-github.js.map +1 -1
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +2 -0
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/ws-protocol.d.ts +10 -8
- package/dist/terminal/ws-protocol.d.ts.map +1 -1
- package/dist/terminal/ws-protocol.js +3 -0
- package/dist/terminal/ws-protocol.js.map +1 -1
- package/package.json +28 -25
- package/scripts/forge/gitea/auth-status.sh +0 -0
- package/scripts/forge/gitea/issue-comment.sh +0 -0
- package/scripts/forge/gitea/issue-list.sh +0 -0
- package/scripts/forge/gitea/issue-view.sh +0 -0
- package/scripts/forge/gitea/pr-exists.sh +4 -1
- package/scripts/forge/gitea/pr-list.sh +0 -0
- package/scripts/forge/gitea/pr-merge.sh +0 -0
- package/scripts/forge/gitea/pr-view.sh +0 -0
- package/scripts/forge/gitea/recently-closed.sh +0 -0
- package/scripts/forge/gitea/recently-merged.sh +0 -0
- package/scripts/forge/gitea/repo-archive.sh +0 -0
- package/scripts/forge/gitea/user-identity.sh +0 -0
- package/scripts/forge/github/auth-status.sh +0 -0
- package/scripts/forge/github/issue-comment.sh +0 -0
- package/scripts/forge/github/issue-list.sh +2 -2
- package/scripts/forge/github/issue-view.sh +0 -0
- package/scripts/forge/github/on-it-timestamps.sh +0 -0
- package/scripts/forge/github/pr-diff.sh +0 -0
- package/scripts/forge/github/pr-exists.sh +3 -1
- package/scripts/forge/github/pr-list.sh +2 -2
- package/scripts/forge/github/pr-merge.sh +0 -0
- package/scripts/forge/github/pr-search.sh +0 -0
- package/scripts/forge/github/pr-view.sh +0 -0
- package/scripts/forge/github/recently-closed.sh +0 -0
- package/scripts/forge/github/recently-merged.sh +0 -0
- package/scripts/forge/github/repo-archive.sh +0 -0
- package/scripts/forge/github/team-activity.sh +0 -0
- package/scripts/forge/github/user-identity.sh +0 -0
- package/scripts/forge/gitlab/auth-status.sh +0 -0
- package/scripts/forge/gitlab/issue-comment.sh +0 -0
- package/scripts/forge/gitlab/issue-list.sh +0 -0
- package/scripts/forge/gitlab/issue-view.sh +0 -0
- package/scripts/forge/gitlab/pr-diff.sh +0 -0
- package/scripts/forge/gitlab/pr-exists.sh +3 -1
- package/scripts/forge/gitlab/pr-list.sh +0 -0
- package/scripts/forge/gitlab/pr-merge.sh +0 -0
- package/scripts/forge/gitlab/pr-search.sh +0 -0
- package/scripts/forge/gitlab/pr-view.sh +0 -0
- package/scripts/forge/gitlab/recently-closed.sh +0 -0
- package/scripts/forge/gitlab/recently-merged.sh +0 -0
- package/scripts/forge/gitlab/repo-archive.sh +0 -0
- package/scripts/forge/gitlab/user-identity.sh +0 -0
- package/scripts/postinstall.mjs +51 -0
- package/skeleton/.claude/skills/afx/SKILL.md +144 -0
- package/skeleton/.claude/skills/codev/SKILL.md +3 -3
- package/skeleton/.claude/skills/consult/SKILL.md +1 -1
- package/skeleton/.claude/skills/porch/SKILL.md +2 -2
- package/skeleton/DEPENDENCIES.md +1 -1
- package/skeleton/builders.md +4 -4
- package/skeleton/protocol-schema.json +2 -2
- package/skeleton/protocols/air/builder-prompt.md +6 -6
- package/skeleton/protocols/air/prompts/pr.md +17 -5
- package/skeleton/protocols/air/protocol.md +1 -2
- package/skeleton/protocols/aspir/builder-prompt.md +28 -6
- package/skeleton/protocols/aspir/prompts/review.md +11 -0
- package/skeleton/protocols/aspir/protocol.json +9 -1
- package/skeleton/protocols/aspir/protocol.md +1 -1
- package/skeleton/protocols/aspir/templates/plan.md +0 -20
- package/skeleton/protocols/aspir/templates/spec.md +0 -28
- package/skeleton/protocols/bugfix/builder-prompt.md +6 -6
- package/skeleton/protocols/bugfix/prompts/pr.md +16 -4
- package/skeleton/protocols/experiment/builder-prompt.md +15 -0
- package/skeleton/protocols/experiment/protocol.md +1 -6
- package/skeleton/protocols/maintain/builder-prompt.md +12 -11
- package/skeleton/protocols/maintain/prompts/maintain.md +88 -0
- package/skeleton/protocols/maintain/prompts/review.md +84 -0
- package/skeleton/protocols/maintain/protocol.json +14 -68
- package/skeleton/protocols/maintain/protocol.md +111 -409
- package/skeleton/protocols/maintain/templates/maintenance-run.md +18 -49
- package/skeleton/protocols/protocol-schema.json +1 -1
- package/skeleton/protocols/research/builder-prompt.md +85 -0
- package/skeleton/protocols/research/protocol.json +118 -0
- package/skeleton/protocols/research/protocol.md +169 -0
- package/skeleton/protocols/spike/builder-prompt.md +1 -1
- package/skeleton/protocols/spike/protocol.md +4 -4
- package/skeleton/protocols/spir/builder-prompt.md +28 -5
- package/skeleton/protocols/spir/prompts/review.md +11 -0
- package/skeleton/protocols/spir/protocol.json +9 -1
- package/skeleton/protocols/spir/protocol.md +2 -2
- package/skeleton/protocols/spir/templates/plan.md +0 -20
- package/skeleton/protocols/spir/templates/spec.md +0 -28
- package/skeleton/resources/commands/agent-farm.md +84 -84
- package/skeleton/resources/commands/codev.md +1 -1
- package/skeleton/resources/commands/consult.md +16 -7
- package/skeleton/resources/commands/overview.md +14 -15
- package/skeleton/resources/risk-triage.md +1 -1
- package/skeleton/resources/workflow-reference.md +14 -14
- package/skeleton/roles/architect.md +39 -39
- package/skeleton/roles/builder.md +22 -14
- package/skeleton/templates/AGENTS.md +5 -3
- package/skeleton/templates/CLAUDE.md +5 -3
- package/skeleton/templates/cheatsheet.md +12 -12
- package/templates/3d-viewer.html +16 -18
- package/templates/tower.html +1 -1
- package/dashboard/dist/assets/index-CTrlY11L.js +0 -194
- package/dashboard/dist/assets/index-CTrlY11L.js.map +0 -1
- package/skeleton/.claude/skills/af/SKILL.md +0 -146
- package/skeleton/porch/prompts/understand.md +0 -61
- package/skeleton/porch/prompts/verify.md +0 -58
- package/skeleton/protocols/maintain/prompts/audit.md +0 -111
- package/skeleton/protocols/maintain/prompts/clean.md +0 -91
- package/skeleton/protocols/maintain/prompts/sync.md +0 -113
- package/skeleton/protocols/maintain/prompts/verify.md +0 -110
- package/skeleton/protocols/tick/builder-prompt.md +0 -65
- package/skeleton/protocols/tick/consult-types/impl-review.md +0 -72
- package/skeleton/protocols/tick/consult-types/plan-review.md +0 -59
- package/skeleton/protocols/tick/consult-types/pr-review.md +0 -72
- package/skeleton/protocols/tick/consult-types/spec-review.md +0 -55
- package/skeleton/protocols/tick/protocol.json +0 -151
- package/skeleton/protocols/tick/protocol.md +0 -277
- package/skeleton/protocols/tick/templates/plan.md +0 -67
- package/skeleton/protocols/tick/templates/review.md +0 -89
- package/skeleton/protocols/tick/templates/spec.md +0 -61
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact Resolver — pluggable backend for codev artifact access.
|
|
3
|
+
*
|
|
4
|
+
* Decouples porch from filesystem assumptions. Two backends:
|
|
5
|
+
* - LocalResolver: reads from codev/specs/, codev/plans/ (default, backward compatible)
|
|
6
|
+
* - CliResolver: shells out to a configurable CLI command (e.g. `my-tool get`)
|
|
7
|
+
*
|
|
8
|
+
* Spec 559: Porch Artifact Resolver
|
|
9
|
+
*/
|
|
10
|
+
import { execFileSync } from 'node:child_process';
|
|
11
|
+
import * as fs from 'node:fs';
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
import { globSync } from 'glob';
|
|
14
|
+
import { loadConfig } from '../../lib/config.js';
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Shared Helpers
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Check if artifact content has pre-approval frontmatter.
|
|
20
|
+
* Looks for YAML frontmatter with `approved:` and `validated:` fields.
|
|
21
|
+
* Used by both LocalResolver and CliResolver for consistency.
|
|
22
|
+
*/
|
|
23
|
+
export function isPreApprovedContent(content) {
|
|
24
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
25
|
+
if (!frontmatterMatch)
|
|
26
|
+
return false;
|
|
27
|
+
const frontmatter = frontmatterMatch[1];
|
|
28
|
+
const hasApproved = /^approved:\s*.+$/m.test(frontmatter);
|
|
29
|
+
// Accept both inline YAML arrays (validated: [a, b]) and block YAML lists (validated:\n - a)
|
|
30
|
+
const hasValidated = /^validated:\s*(\[.+\]|$)/m.test(frontmatter);
|
|
31
|
+
return hasApproved && hasValidated;
|
|
32
|
+
}
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Local Resolver (default — reads from codev/ directory)
|
|
35
|
+
// =============================================================================
|
|
36
|
+
export class LocalResolver {
|
|
37
|
+
workspaceRoot;
|
|
38
|
+
constructor(workspaceRoot) {
|
|
39
|
+
this.workspaceRoot = workspaceRoot;
|
|
40
|
+
}
|
|
41
|
+
findSpecBaseName(projectId, _title) {
|
|
42
|
+
const specsDir = path.join(this.workspaceRoot, 'codev', 'specs');
|
|
43
|
+
if (!fs.existsSync(specsDir))
|
|
44
|
+
return null;
|
|
45
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
46
|
+
try {
|
|
47
|
+
const files = fs.readdirSync(specsDir);
|
|
48
|
+
const specFile = files.find(f => {
|
|
49
|
+
if (!f.endsWith('.md'))
|
|
50
|
+
return false;
|
|
51
|
+
const numMatch = f.match(/^(\d+)/);
|
|
52
|
+
if (!numMatch)
|
|
53
|
+
return false;
|
|
54
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
55
|
+
});
|
|
56
|
+
return specFile ? specFile.replace(/\.md$/, '') : null;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
getSpecContent(projectId, title) {
|
|
63
|
+
const baseName = this.findSpecBaseName(projectId, title);
|
|
64
|
+
if (!baseName)
|
|
65
|
+
return null;
|
|
66
|
+
const filePath = path.join(this.workspaceRoot, 'codev', 'specs', `${baseName}.md`);
|
|
67
|
+
try {
|
|
68
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getPlanContent(projectId, title) {
|
|
75
|
+
// Try new location first: codev/projects/<id>-<name>/plan.md
|
|
76
|
+
const projectsDir = path.join(this.workspaceRoot, 'codev', 'projects');
|
|
77
|
+
if (fs.existsSync(projectsDir)) {
|
|
78
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
79
|
+
try {
|
|
80
|
+
const dirs = fs.readdirSync(projectsDir);
|
|
81
|
+
const projDir = dirs.find(d => {
|
|
82
|
+
const numMatch = d.match(/^(\d+)/);
|
|
83
|
+
if (!numMatch)
|
|
84
|
+
return false;
|
|
85
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
86
|
+
});
|
|
87
|
+
if (projDir) {
|
|
88
|
+
const planPath = path.join(projectsDir, projDir, 'plan.md');
|
|
89
|
+
if (fs.existsSync(planPath)) {
|
|
90
|
+
return fs.readFileSync(planPath, 'utf-8');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch { /* continue to legacy */ }
|
|
95
|
+
}
|
|
96
|
+
// Legacy location: codev/plans/<id>-*.md
|
|
97
|
+
const plansDir = path.join(this.workspaceRoot, 'codev', 'plans');
|
|
98
|
+
if (!fs.existsSync(plansDir))
|
|
99
|
+
return null;
|
|
100
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
101
|
+
try {
|
|
102
|
+
const files = fs.readdirSync(plansDir);
|
|
103
|
+
const planFile = files.find(f => {
|
|
104
|
+
if (!f.endsWith('.md'))
|
|
105
|
+
return false;
|
|
106
|
+
const numMatch = f.match(/^(\d+)/);
|
|
107
|
+
if (!numMatch)
|
|
108
|
+
return false;
|
|
109
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
110
|
+
});
|
|
111
|
+
if (planFile) {
|
|
112
|
+
return fs.readFileSync(path.join(plansDir, planFile), 'utf-8');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch { /* ignore */ }
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
getReviewContent(projectId, _title) {
|
|
119
|
+
const reviewsDir = path.join(this.workspaceRoot, 'codev', 'reviews');
|
|
120
|
+
if (!fs.existsSync(reviewsDir))
|
|
121
|
+
return null;
|
|
122
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
123
|
+
try {
|
|
124
|
+
const files = fs.readdirSync(reviewsDir);
|
|
125
|
+
const reviewFile = files.find(f => {
|
|
126
|
+
if (!f.endsWith('.md'))
|
|
127
|
+
return false;
|
|
128
|
+
const numMatch = f.match(/^(\d+)/);
|
|
129
|
+
if (!numMatch)
|
|
130
|
+
return false;
|
|
131
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
132
|
+
});
|
|
133
|
+
if (reviewFile) {
|
|
134
|
+
return fs.readFileSync(path.join(reviewsDir, reviewFile), 'utf-8');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch { /* ignore */ }
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
hasPreApproval(artifactGlob) {
|
|
141
|
+
const matches = globSync(artifactGlob, { cwd: this.workspaceRoot });
|
|
142
|
+
if (matches.length === 0)
|
|
143
|
+
return false;
|
|
144
|
+
const filePath = path.join(this.workspaceRoot, matches[0]);
|
|
145
|
+
try {
|
|
146
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
147
|
+
return isPreApprovedContent(content);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// =============================================================================
|
|
155
|
+
// CLI Resolver (shells out to a configurable CLI command)
|
|
156
|
+
// =============================================================================
|
|
157
|
+
/** Sentinel value for cached negative results (CLI returned error) */
|
|
158
|
+
const NEGATIVE_CACHE = Symbol('negative');
|
|
159
|
+
export class CliResolver {
|
|
160
|
+
scope;
|
|
161
|
+
command;
|
|
162
|
+
cache = new Map();
|
|
163
|
+
extraEnv;
|
|
164
|
+
constructor(scope, command, workspaceRoot) {
|
|
165
|
+
this.scope = scope;
|
|
166
|
+
this.command = command;
|
|
167
|
+
// Read data repo env vars from .env if not already in process.env.
|
|
168
|
+
// af_builder.sh injects these into builder worktree .env files.
|
|
169
|
+
this.extraEnv = {};
|
|
170
|
+
const dataRepo = process.env.CODEV_ARTIFACTS_DATA_REPO;
|
|
171
|
+
if (!dataRepo && workspaceRoot) {
|
|
172
|
+
const envPath = path.join(workspaceRoot, '.env');
|
|
173
|
+
try {
|
|
174
|
+
const envContent = fs.readFileSync(envPath, 'utf-8');
|
|
175
|
+
const match = envContent.match(/^CODEV_ARTIFACTS_DATA_REPO=(.+)$/m);
|
|
176
|
+
if (match?.[1]?.trim()) {
|
|
177
|
+
this.extraEnv.CODEV_ARTIFACTS_DATA_REPO = match[1].trim();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch { /* .env may not exist */ }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
findSpecBaseName(projectId, _title) {
|
|
184
|
+
const children = this.listChildren('specs');
|
|
185
|
+
if (!children)
|
|
186
|
+
return null;
|
|
187
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
188
|
+
const match = children.find(name => {
|
|
189
|
+
const numMatch = name.match(/^(\d+)/);
|
|
190
|
+
if (!numMatch)
|
|
191
|
+
return false;
|
|
192
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
193
|
+
});
|
|
194
|
+
return match || null;
|
|
195
|
+
}
|
|
196
|
+
getSpecContent(projectId, _title) {
|
|
197
|
+
const baseName = this.findSpecBaseName(projectId, _title);
|
|
198
|
+
if (!baseName)
|
|
199
|
+
return null;
|
|
200
|
+
return this.getContent(`specs/${baseName}`);
|
|
201
|
+
}
|
|
202
|
+
getPlanContent(projectId, _title) {
|
|
203
|
+
const baseName = this.findPlanBaseName(projectId);
|
|
204
|
+
if (!baseName)
|
|
205
|
+
return null;
|
|
206
|
+
return this.getContent(`plans/${baseName}`);
|
|
207
|
+
}
|
|
208
|
+
getReviewContent(projectId, _title) {
|
|
209
|
+
const baseName = this.findReviewBaseName(projectId);
|
|
210
|
+
if (!baseName)
|
|
211
|
+
return null;
|
|
212
|
+
return this.getContent(`reviews/${baseName}`);
|
|
213
|
+
}
|
|
214
|
+
hasPreApproval(artifactGlob) {
|
|
215
|
+
// Determine artifact type from glob path (e.g., "codev/specs/0559-*.md" or "codev/plans/0559-*.md")
|
|
216
|
+
const typeMatch = artifactGlob.match(/\b(specs|plans|reviews)\b/);
|
|
217
|
+
const idMatch = artifactGlob.match(/(?:specs|plans|reviews)\/0*(\d+)/);
|
|
218
|
+
if (!idMatch)
|
|
219
|
+
return false;
|
|
220
|
+
const projectId = idMatch[1];
|
|
221
|
+
let content = null;
|
|
222
|
+
const artifactType = typeMatch?.[1] || 'specs';
|
|
223
|
+
if (artifactType === 'plans') {
|
|
224
|
+
content = this.getPlanContent(projectId, '');
|
|
225
|
+
}
|
|
226
|
+
else if (artifactType === 'reviews') {
|
|
227
|
+
content = this.getReviewContent(projectId, '');
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
content = this.getSpecContent(projectId, '');
|
|
231
|
+
}
|
|
232
|
+
if (!content)
|
|
233
|
+
return false;
|
|
234
|
+
return isPreApprovedContent(content);
|
|
235
|
+
}
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
// Internal helpers
|
|
238
|
+
// ---------------------------------------------------------------------------
|
|
239
|
+
findPlanBaseName(projectId) {
|
|
240
|
+
const children = this.listChildren('plans');
|
|
241
|
+
if (!children)
|
|
242
|
+
return null;
|
|
243
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
244
|
+
const match = children.find(name => {
|
|
245
|
+
const numMatch = name.match(/^(\d+)/);
|
|
246
|
+
if (!numMatch)
|
|
247
|
+
return false;
|
|
248
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
249
|
+
});
|
|
250
|
+
return match || null;
|
|
251
|
+
}
|
|
252
|
+
findReviewBaseName(projectId) {
|
|
253
|
+
const children = this.listChildren('reviews');
|
|
254
|
+
if (!children)
|
|
255
|
+
return null;
|
|
256
|
+
const normalizedId = projectId.replace(/^0+/, '') || '0';
|
|
257
|
+
const match = children.find(name => {
|
|
258
|
+
const numMatch = name.match(/^(\d+)/);
|
|
259
|
+
if (!numMatch)
|
|
260
|
+
return false;
|
|
261
|
+
return (numMatch[1].replace(/^0+/, '') || '0') === normalizedId;
|
|
262
|
+
});
|
|
263
|
+
return match || null;
|
|
264
|
+
}
|
|
265
|
+
listChildren(subPath) {
|
|
266
|
+
const cacheKey = `list:${subPath}`;
|
|
267
|
+
if (this.cache.has(cacheKey)) {
|
|
268
|
+
const cached = this.cache.get(cacheKey);
|
|
269
|
+
if (cached === NEGATIVE_CACHE)
|
|
270
|
+
return null;
|
|
271
|
+
const items = cached.split('\n').filter(Boolean);
|
|
272
|
+
return items.length > 0 ? items : null;
|
|
273
|
+
}
|
|
274
|
+
const scopePath = `${this.scope}/${subPath}`;
|
|
275
|
+
try {
|
|
276
|
+
const output = execFileSync(this.command, ['get', '--list', scopePath], {
|
|
277
|
+
encoding: 'utf-8',
|
|
278
|
+
timeout: 5000,
|
|
279
|
+
env: { ...process.env, ...this.extraEnv },
|
|
280
|
+
}).trim();
|
|
281
|
+
// Cache both non-empty and empty results (empty = scope exists but has no children)
|
|
282
|
+
this.cache.set(cacheKey, output);
|
|
283
|
+
const items = output ? output.split('\n').filter(Boolean) : [];
|
|
284
|
+
return items.length > 0 ? items : null;
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
this.handleError(err, scopePath);
|
|
288
|
+
// Cache failures as negative to avoid repeated CLI timeouts
|
|
289
|
+
this.cache.set(cacheKey, NEGATIVE_CACHE);
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
getContent(subPath) {
|
|
294
|
+
const cacheKey = `content:${subPath}`;
|
|
295
|
+
if (this.cache.has(cacheKey)) {
|
|
296
|
+
const cached = this.cache.get(cacheKey);
|
|
297
|
+
return cached === NEGATIVE_CACHE ? null : cached;
|
|
298
|
+
}
|
|
299
|
+
const scopePath = `${this.scope}/${subPath}`;
|
|
300
|
+
try {
|
|
301
|
+
const output = execFileSync(this.command, ['get', scopePath], {
|
|
302
|
+
encoding: 'utf-8',
|
|
303
|
+
timeout: 5000,
|
|
304
|
+
env: { ...process.env, ...this.extraEnv },
|
|
305
|
+
});
|
|
306
|
+
this.cache.set(cacheKey, output);
|
|
307
|
+
return output;
|
|
308
|
+
}
|
|
309
|
+
catch (err) {
|
|
310
|
+
this.handleError(err, scopePath);
|
|
311
|
+
// Cache failures as negative to avoid repeated CLI timeouts
|
|
312
|
+
this.cache.set(cacheKey, NEGATIVE_CACHE);
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
handleError(err, scopePath) {
|
|
317
|
+
if (err && typeof err === 'object' && 'code' in err) {
|
|
318
|
+
if (err.code === 'ENOENT') {
|
|
319
|
+
throw new Error(`CLI command '${this.command}' not found. Ensure it is installed and on PATH.`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Non-zero exit — log warning for debugging
|
|
323
|
+
if (err && typeof err === 'object' && 'stderr' in err) {
|
|
324
|
+
const stderr = err.stderr;
|
|
325
|
+
if (stderr) {
|
|
326
|
+
console.error(`[porch] ${this.command} get ${scopePath}: ${stderr.trim()}`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// =============================================================================
|
|
332
|
+
// Factory
|
|
333
|
+
// =============================================================================
|
|
334
|
+
/**
|
|
335
|
+
* Create the appropriate artifact resolver for this workspace.
|
|
336
|
+
* Reads config via loadConfig() (v3.0.0 unified config — .codev/config.json).
|
|
337
|
+
*
|
|
338
|
+
* @param workspaceRoot - The top-level workspace (where .codev/config.json lives).
|
|
339
|
+
* Always used to load config; also used as the .env source
|
|
340
|
+
* for the CLI backend.
|
|
341
|
+
* @param artifactRoot - Optional override for where the local backend reads
|
|
342
|
+
* specs/plans/reviews from. When the project lives in a
|
|
343
|
+
* builder worktree (`.builders/<slug>/`), pass that
|
|
344
|
+
* worktree's root so artifact lookups find files there
|
|
345
|
+
* instead of the top-level `codev/` directory (bugfix #676).
|
|
346
|
+
* Defaults to workspaceRoot.
|
|
347
|
+
*/
|
|
348
|
+
export function getResolver(workspaceRoot, artifactRoot) {
|
|
349
|
+
const config = loadConfig(workspaceRoot);
|
|
350
|
+
const artifacts = config.artifacts;
|
|
351
|
+
if (artifacts?.backend === 'cli') {
|
|
352
|
+
if (!artifacts.command) {
|
|
353
|
+
throw new Error(`.codev/config.json has artifacts.backend: "cli" but no artifacts.command.\n` +
|
|
354
|
+
`Add: "artifacts": { "backend": "cli", "command": "my-tool", "scope": "org/project" }`);
|
|
355
|
+
}
|
|
356
|
+
if (!artifacts.scope) {
|
|
357
|
+
throw new Error(`.codev/config.json has artifacts.backend: "cli" but no artifacts.scope.\n` +
|
|
358
|
+
`Add: "artifacts": { "backend": "cli", "command": "${artifacts.command}", "scope": "org/project" }`);
|
|
359
|
+
}
|
|
360
|
+
return new CliResolver(artifacts.scope, artifacts.command, workspaceRoot);
|
|
361
|
+
}
|
|
362
|
+
if (artifacts?.backend && artifacts.backend !== 'local') {
|
|
363
|
+
throw new Error(`.codev/config.json has unknown artifacts.backend: "${artifacts.backend}".\n` +
|
|
364
|
+
`Valid values: "local" (default), "cli"`);
|
|
365
|
+
}
|
|
366
|
+
return new LocalResolver(artifactRoot ?? workspaceRoot);
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/commands/porch/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* with timeout support.
|
|
6
6
|
*/
|
|
7
7
|
import type { CheckResult, CheckDef } from './types.js';
|
|
8
|
+
import type { ArtifactResolver } from './artifacts.js';
|
|
8
9
|
/** Environment variables passed to check commands */
|
|
9
10
|
export interface CheckEnv {
|
|
10
11
|
PROJECT_ID: string;
|
|
@@ -14,6 +15,12 @@ export interface CheckEnv {
|
|
|
14
15
|
* Run a single check command
|
|
15
16
|
*/
|
|
16
17
|
export declare function runCheck(name: string, command: string, cwd: string, env: CheckEnv, timeoutMs?: number): Promise<CheckResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Try to run an artifact-dependent check programmatically via the resolver.
|
|
20
|
+
* Returns a CheckResult if the check name is recognized, null otherwise
|
|
21
|
+
* (caller should fall back to shell execution).
|
|
22
|
+
*/
|
|
23
|
+
export declare function runArtifactCheck(name: string, command: string, resolver: ArtifactResolver, env: CheckEnv): CheckResult | null;
|
|
17
24
|
/**
|
|
18
25
|
* Run multiple checks for a phase.
|
|
19
26
|
* Accepts either Record<string, string> (legacy) or Record<string, CheckDef>.
|
|
@@ -22,7 +29,7 @@ export declare function runCheck(name: string, command: string, cwd: string, env
|
|
|
22
29
|
* command dispatcher instead of running the protocol.json command directly.
|
|
23
30
|
* This allows per-project forge configuration while keeping protocol JSON unchanged.
|
|
24
31
|
*/
|
|
25
|
-
export declare function runPhaseChecks(checks: Record<string, string | CheckDef>, cwd: string, env: CheckEnv, timeoutMs?: number): Promise<CheckResult[]>;
|
|
32
|
+
export declare function runPhaseChecks(checks: Record<string, string | CheckDef>, cwd: string, env: CheckEnv, timeoutMs?: number, resolver?: ArtifactResolver, overriddenChecks?: Set<string>): Promise<CheckResult[]>;
|
|
26
33
|
/**
|
|
27
34
|
* Format check results for terminal output
|
|
28
35
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAYvD,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,EACb,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,WAAW,CAAC,CAsFtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,QAAQ,GACZ,WAAW,GAAG,IAAI,CAqFpB;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,EACb,SAAS,GAAE,MAA2B,EACtC,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,CAwCxB;AA+CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAwBjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAE/D"}
|
|
@@ -94,6 +94,91 @@ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIME
|
|
|
94
94
|
});
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Try to run an artifact-dependent check programmatically via the resolver.
|
|
99
|
+
* Returns a CheckResult if the check name is recognized, null otherwise
|
|
100
|
+
* (caller should fall back to shell execution).
|
|
101
|
+
*/
|
|
102
|
+
export function runArtifactCheck(name, command, resolver, env) {
|
|
103
|
+
const startTime = Date.now();
|
|
104
|
+
const { PROJECT_ID: projectId, PROJECT_TITLE: title } = env;
|
|
105
|
+
switch (name) {
|
|
106
|
+
case 'plan_exists': {
|
|
107
|
+
const content = resolver.getPlanContent(projectId, title);
|
|
108
|
+
return {
|
|
109
|
+
name,
|
|
110
|
+
command,
|
|
111
|
+
passed: content !== null,
|
|
112
|
+
output: content !== null ? 'Plan found via resolver' : undefined,
|
|
113
|
+
error: content === null ? 'Plan not found' : undefined,
|
|
114
|
+
duration_ms: Date.now() - startTime,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
case 'has_phases_json': {
|
|
118
|
+
const content = resolver.getPlanContent(projectId, title);
|
|
119
|
+
if (content === null) {
|
|
120
|
+
return { name, command, passed: false, error: 'Plan not found', duration_ms: Date.now() - startTime };
|
|
121
|
+
}
|
|
122
|
+
const has = /"phases"\s*:/.test(content);
|
|
123
|
+
return {
|
|
124
|
+
name,
|
|
125
|
+
command,
|
|
126
|
+
passed: has,
|
|
127
|
+
output: has ? 'Found phases JSON block' : undefined,
|
|
128
|
+
error: has ? undefined : 'No "phases": found in plan',
|
|
129
|
+
duration_ms: Date.now() - startTime,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
case 'min_two_phases': {
|
|
133
|
+
const content = resolver.getPlanContent(projectId, title);
|
|
134
|
+
if (content === null) {
|
|
135
|
+
return { name, command, passed: false, error: 'Plan not found', duration_ms: Date.now() - startTime };
|
|
136
|
+
}
|
|
137
|
+
const matches = content.match(/"id":\s*"[^"]*"/g);
|
|
138
|
+
const count = matches ? matches.length : 0;
|
|
139
|
+
return {
|
|
140
|
+
name,
|
|
141
|
+
command,
|
|
142
|
+
passed: count >= 2,
|
|
143
|
+
output: `Found ${count} phase(s)`,
|
|
144
|
+
error: count < 2 ? `Only ${count} phase(s) found, need at least 2` : undefined,
|
|
145
|
+
duration_ms: Date.now() - startTime,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
case 'review_has_arch_updates': {
|
|
149
|
+
const content = resolver.getReviewContent(projectId, title);
|
|
150
|
+
if (content === null) {
|
|
151
|
+
return { name, command, passed: false, error: 'Review not found', duration_ms: Date.now() - startTime };
|
|
152
|
+
}
|
|
153
|
+
const has = content.includes('## Architecture Updates');
|
|
154
|
+
return {
|
|
155
|
+
name,
|
|
156
|
+
command,
|
|
157
|
+
passed: has,
|
|
158
|
+
output: has ? 'Found Architecture Updates section' : undefined,
|
|
159
|
+
error: has ? undefined : 'Missing "## Architecture Updates" section in review',
|
|
160
|
+
duration_ms: Date.now() - startTime,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
case 'review_has_lessons_updates': {
|
|
164
|
+
const content = resolver.getReviewContent(projectId, title);
|
|
165
|
+
if (content === null) {
|
|
166
|
+
return { name, command, passed: false, error: 'Review not found', duration_ms: Date.now() - startTime };
|
|
167
|
+
}
|
|
168
|
+
const has = content.includes('## Lessons Learned Updates');
|
|
169
|
+
return {
|
|
170
|
+
name,
|
|
171
|
+
command,
|
|
172
|
+
passed: has,
|
|
173
|
+
output: has ? 'Found Lessons Learned Updates section' : undefined,
|
|
174
|
+
error: has ? undefined : 'Missing "## Lessons Learned Updates" section in review',
|
|
175
|
+
duration_ms: Date.now() - startTime,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
default:
|
|
179
|
+
return null; // Not an artifact check — fall through to shell execution
|
|
180
|
+
}
|
|
181
|
+
}
|
|
97
182
|
/**
|
|
98
183
|
* Run multiple checks for a phase.
|
|
99
184
|
* Accepts either Record<string, string> (legacy) or Record<string, CheckDef>.
|
|
@@ -102,10 +187,22 @@ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIME
|
|
|
102
187
|
* command dispatcher instead of running the protocol.json command directly.
|
|
103
188
|
* This allows per-project forge configuration while keeping protocol JSON unchanged.
|
|
104
189
|
*/
|
|
105
|
-
export async function runPhaseChecks(checks, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
190
|
+
export async function runPhaseChecks(checks, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS, resolver, overriddenChecks) {
|
|
106
191
|
const results = [];
|
|
107
192
|
for (const [name, checkVal] of Object.entries(checks)) {
|
|
108
193
|
const command = typeof checkVal === 'string' ? checkVal : checkVal.command;
|
|
194
|
+
// Try resolver-based check first (handles artifact-dependent checks programmatically).
|
|
195
|
+
// Skip resolver fast-path if the user overrode this check via .codev/config.json —
|
|
196
|
+
// their custom command should run instead.
|
|
197
|
+
if (resolver && !overriddenChecks?.has(name)) {
|
|
198
|
+
const artifactResult = runArtifactCheck(name, command, resolver, env);
|
|
199
|
+
if (artifactResult) {
|
|
200
|
+
results.push(artifactResult);
|
|
201
|
+
if (!artifactResult.passed)
|
|
202
|
+
break;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
109
206
|
const checkCwd = typeof checkVal === 'object' && checkVal.cwd
|
|
110
207
|
? path.resolve(cwd, checkVal.cwd)
|
|
111
208
|
: cwd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,42 +4,47 @@
|
|
|
4
4
|
* Claude calls porch as a tool; porch returns prescriptive instructions.
|
|
5
5
|
* All commands produce clear, actionable output.
|
|
6
6
|
*/
|
|
7
|
+
import { type ArtifactResolver } from './artifacts.js';
|
|
7
8
|
/**
|
|
8
9
|
* porch status <id>
|
|
9
10
|
* Shows current state and prescriptive next steps.
|
|
10
11
|
*/
|
|
11
|
-
export declare function status(workspaceRoot: string, projectId: string): Promise<void>;
|
|
12
|
+
export declare function status(workspaceRoot: string, projectId: string, resolver?: ArtifactResolver): Promise<void>;
|
|
12
13
|
/**
|
|
13
14
|
* porch check <id>
|
|
14
15
|
* Runs the phase checks and reports results.
|
|
15
16
|
*/
|
|
16
|
-
export declare function check(workspaceRoot: string, projectId: string): Promise<void>;
|
|
17
|
+
export declare function check(workspaceRoot: string, projectId: string, resolver?: ArtifactResolver): Promise<void>;
|
|
17
18
|
/**
|
|
18
19
|
* porch done <id>
|
|
19
20
|
* Advances to next phase if checks pass. Refuses if checks fail.
|
|
20
21
|
*/
|
|
21
|
-
export declare function done(workspaceRoot: string, projectId: string
|
|
22
|
+
export declare function done(workspaceRoot: string, projectId: string, resolver?: ArtifactResolver, options?: {
|
|
23
|
+
pr?: number;
|
|
24
|
+
branch?: string;
|
|
25
|
+
merged?: number;
|
|
26
|
+
}): Promise<void>;
|
|
22
27
|
/**
|
|
23
28
|
* porch gate <id>
|
|
24
29
|
* Requests human approval for current gate.
|
|
25
30
|
*/
|
|
26
|
-
export declare function gate(workspaceRoot: string, projectId: string): Promise<void>;
|
|
31
|
+
export declare function gate(workspaceRoot: string, projectId: string, resolver?: ArtifactResolver): Promise<void>;
|
|
27
32
|
/**
|
|
28
33
|
* porch approve <id> <gate> --a-human-explicitly-approved-this
|
|
29
34
|
* Human approves a gate. Requires explicit flag to prevent automated approvals.
|
|
30
35
|
*/
|
|
31
|
-
export declare function approve(workspaceRoot: string, projectId: string, gateName: string, hasHumanFlag: boolean): Promise<void>;
|
|
36
|
+
export declare function approve(workspaceRoot: string, projectId: string, gateName: string, hasHumanFlag: boolean, resolver?: ArtifactResolver): Promise<void>;
|
|
32
37
|
/**
|
|
33
38
|
* porch rollback <id> <phase>
|
|
34
39
|
* Rewinds project to an earlier phase, clearing downstream gates and resetting build state.
|
|
35
40
|
*/
|
|
36
|
-
export declare function rollback(workspaceRoot: string, projectId: string, targetPhase: string): Promise<void>;
|
|
41
|
+
export declare function rollback(workspaceRoot: string, projectId: string, targetPhase: string, resolver?: ArtifactResolver): Promise<void>;
|
|
37
42
|
/**
|
|
38
43
|
* porch init <protocol> <id> <name>
|
|
39
44
|
* Initialize a new project.
|
|
40
45
|
*
|
|
41
46
|
* Idempotent: if status.yaml already exists, preserves it and reports
|
|
42
|
-
* current state. This supports `
|
|
47
|
+
* current state. This supports `afx spawn --resume` where the builder
|
|
43
48
|
* may re-run `porch init` after a session restart.
|
|
44
49
|
*/
|
|
45
50
|
export declare function init(workspaceRoot: string, protocolName: string, projectId: string, projectName: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqCH,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA+EnF;;;GAGG;AACH,wBAAsB,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FjH;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhH;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgL5K;AAsED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD/G;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAiGf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Ef;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AA4DD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwIvD"}
|