@tiic-tech/openworkflow 0.1.1 → 0.1.2
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/dist/adapters/codex/src/cleanCodexAdapter.js +4 -1
- package/dist/adapters/codex/src/cleanCodexAdapter.js.map +1 -1
- package/dist/adapters/codex/src/constants.d.ts +1 -0
- package/dist/adapters/codex/src/constants.js +2 -0
- package/dist/adapters/codex/src/constants.js.map +1 -0
- package/dist/adapters/codex/src/generateCommands.js +14 -9
- package/dist/adapters/codex/src/generateCommands.js.map +1 -1
- package/dist/adapters/codex/src/generateSkills.js +13 -0
- package/dist/adapters/codex/src/generateSkills.js.map +1 -1
- package/dist/adapters/codex/src/generatedFiles.js +1 -1
- package/dist/adapters/codex/src/manifest.js +11 -2
- package/dist/adapters/codex/src/manifest.js.map +1 -1
- package/dist/adapters/codex/src/templates.d.ts +0 -1
- package/dist/adapters/codex/src/templates.js +0 -1
- package/dist/adapters/codex/src/templates.js.map +1 -1
- package/dist/adapters/src/registry.d.ts +20 -0
- package/dist/adapters/src/registry.js +81 -0
- package/dist/adapters/src/registry.js.map +1 -0
- package/dist/cli/src/commands/brief.d.ts +46 -0
- package/dist/cli/src/commands/brief.js +294 -0
- package/dist/cli/src/commands/brief.js.map +1 -0
- package/dist/cli/src/commands/check.d.ts +42 -0
- package/dist/cli/src/commands/check.js +326 -0
- package/dist/cli/src/commands/check.js.map +1 -0
- package/dist/cli/src/commands/clean.js +46 -1
- package/dist/cli/src/commands/clean.js.map +1 -1
- package/dist/cli/src/commands/context.d.ts +1 -0
- package/dist/cli/src/commands/context.js +471 -0
- package/dist/cli/src/commands/context.js.map +1 -0
- package/dist/cli/src/commands/doctor.js +122 -12
- package/dist/cli/src/commands/doctor.js.map +1 -1
- package/dist/cli/src/commands/draft.d.ts +1 -0
- package/dist/cli/src/commands/draft.js +175 -0
- package/dist/cli/src/commands/draft.js.map +1 -0
- package/dist/cli/src/commands/gitAutomation.d.ts +1 -0
- package/dist/cli/src/commands/gitAutomation.js +378 -0
- package/dist/cli/src/commands/gitAutomation.js.map +1 -0
- package/dist/cli/src/commands/handoff.d.ts +22 -0
- package/dist/cli/src/commands/handoff.js +122 -0
- package/dist/cli/src/commands/handoff.js.map +1 -0
- package/dist/cli/src/commands/init.js +52 -1
- package/dist/cli/src/commands/init.js.map +1 -1
- package/dist/cli/src/commands/inspect.d.ts +23 -0
- package/dist/cli/src/commands/inspect.js +157 -0
- package/dist/cli/src/commands/inspect.js.map +1 -0
- package/dist/cli/src/commands/register.d.ts +1 -0
- package/dist/cli/src/commands/register.js +251 -0
- package/dist/cli/src/commands/register.js.map +1 -0
- package/dist/cli/src/commands/resume.d.ts +59 -0
- package/dist/cli/src/commands/resume.js +280 -0
- package/dist/cli/src/commands/resume.js.map +1 -0
- package/dist/cli/src/commands/shared.js +6 -2
- package/dist/cli/src/commands/shared.js.map +1 -1
- package/dist/cli/src/commands/summaries.d.ts +1 -0
- package/dist/cli/src/commands/summaries.js +77 -0
- package/dist/cli/src/commands/summaries.js.map +1 -0
- package/dist/cli/src/commands/summarize.d.ts +1 -0
- package/dist/cli/src/commands/summarize.js +316 -0
- package/dist/cli/src/commands/summarize.js.map +1 -0
- package/dist/cli/src/commands/sync.js +135 -12
- package/dist/cli/src/commands/sync.js.map +1 -1
- package/dist/cli/src/commands/validate.js +25 -1
- package/dist/cli/src/commands/validate.js.map +1 -1
- package/dist/cli/src/dev/verifyAgentE2E.d.ts +2 -0
- package/dist/cli/src/dev/verifyAgentE2E.js +391 -0
- package/dist/cli/src/dev/verifyAgentE2E.js.map +1 -0
- package/dist/cli/src/dev/verifyCleanCommand.js +213 -2
- package/dist/cli/src/dev/verifyCleanCommand.js.map +1 -1
- package/dist/cli/src/dev/verifyRuntimeSurface.js +4940 -54
- package/dist/cli/src/dev/verifyRuntimeSurface.js.map +1 -1
- package/dist/cli/src/dev/verifyWorkflowE2E.js +477 -45
- package/dist/cli/src/dev/verifyWorkflowE2E.js.map +1 -1
- package/dist/cli/src/index.js +184 -6
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/src/report.d.ts +26 -0
- package/dist/cli/src/report.js +17 -0
- package/dist/cli/src/report.js.map +1 -0
- package/dist/core/src/artifacts/readiness.d.ts +7 -0
- package/dist/core/src/artifacts/readiness.js +240 -0
- package/dist/core/src/artifacts/readiness.js.map +1 -0
- package/dist/core/src/artifacts/registry.d.ts +9 -2
- package/dist/core/src/artifacts/registry.js +687 -60
- package/dist/core/src/artifacts/registry.js.map +1 -1
- package/dist/core/src/commands/registry.js +1425 -146
- package/dist/core/src/commands/registry.js.map +1 -1
- package/dist/core/src/contracts/index.d.ts +1 -1
- package/dist/core/src/fs/index.d.ts +24 -0
- package/dist/core/src/fs/index.js +48 -1
- package/dist/core/src/fs/index.js.map +1 -1
- package/dist/core/src/git/autonomousSimulator.d.ts +46 -0
- package/dist/core/src/git/autonomousSimulator.js +163 -0
- package/dist/core/src/git/autonomousSimulator.js.map +1 -0
- package/dist/core/src/git/branchIdentity.d.ts +19 -0
- package/dist/core/src/git/branchIdentity.js +75 -0
- package/dist/core/src/git/branchIdentity.js.map +1 -0
- package/dist/core/src/git/draftPrPilot.d.ts +47 -0
- package/dist/core/src/git/draftPrPilot.js +196 -0
- package/dist/core/src/git/draftPrPilot.js.map +1 -0
- package/dist/core/src/git/localEvidenceReader.d.ts +21 -0
- package/dist/core/src/git/localEvidenceReader.js +142 -0
- package/dist/core/src/git/localEvidenceReader.js.map +1 -0
- package/dist/core/src/git/localGitAutomation.d.ts +68 -0
- package/dist/core/src/git/localGitAutomation.js +470 -0
- package/dist/core/src/git/localGitAutomation.js.map +1 -0
- package/dist/core/src/git/mergeReadinessCheckpoint.d.ts +31 -0
- package/dist/core/src/git/mergeReadinessCheckpoint.js +110 -0
- package/dist/core/src/git/mergeReadinessCheckpoint.js.map +1 -0
- package/dist/core/src/git/prReadySummary.d.ts +16 -0
- package/dist/core/src/git/prReadySummary.js +144 -0
- package/dist/core/src/git/prReadySummary.js.map +1 -0
- package/dist/core/src/git/remoteReadonlyPlanner.d.ts +60 -0
- package/dist/core/src/git/remoteReadonlyPlanner.js +223 -0
- package/dist/core/src/git/remoteReadonlyPlanner.js.map +1 -0
- package/dist/core/src/onboarding/agentsGuide.d.ts +32 -0
- package/dist/core/src/onboarding/agentsGuide.js +164 -0
- package/dist/core/src/onboarding/agentsGuide.js.map +1 -0
- package/dist/core/src/validators/validateOpenWorkflow.js +1331 -15
- package/dist/core/src/validators/validateOpenWorkflow.js.map +1 -1
- package/dist/core/src/validators/validateRepositoryContracts.js +2321 -306
- package/dist/core/src/validators/validateRepositoryContracts.js.map +1 -1
- package/dist/core/src/workflow/cleanOpenWorkflow.d.ts +2 -0
- package/dist/core/src/workflow/cleanOpenWorkflow.js +97 -8
- package/dist/core/src/workflow/cleanOpenWorkflow.js.map +1 -1
- package/dist/core/src/workflow/doctorOpenWorkflow.d.ts +7 -0
- package/dist/core/src/workflow/doctorOpenWorkflow.js +26 -0
- package/dist/core/src/workflow/doctorOpenWorkflow.js.map +1 -0
- package/dist/core/src/workflow/initOpenWorkflow.d.ts +7 -0
- package/dist/core/src/workflow/initOpenWorkflow.js +96 -8
- package/dist/core/src/workflow/initOpenWorkflow.js.map +1 -1
- package/dist/core/src/workflow/planningQueueResume.d.ts +105 -0
- package/dist/core/src/workflow/planningQueueResume.js +596 -0
- package/dist/core/src/workflow/planningQueueResume.js.map +1 -0
- package/dist/core/src/workflow/readWorkflowConfig.d.ts +6 -0
- package/dist/core/src/workflow/readWorkflowConfig.js +28 -0
- package/dist/core/src/workflow/readWorkflowConfig.js.map +1 -0
- package/dist/core/src/workflow/summaryHealth.d.ts +60 -0
- package/dist/core/src/workflow/summaryHealth.js +713 -0
- package/dist/core/src/workflow/summaryHealth.js.map +1 -0
- package/dist/core/src/workflow/syncOpenWorkflow.d.ts +22 -0
- package/dist/core/src/workflow/syncOpenWorkflow.js +235 -0
- package/dist/core/src/workflow/syncOpenWorkflow.js.map +1 -0
- package/package.json +2 -1
- package/references/artifact-authoring-templates.md +14 -12
- package/references/artifact-instruction-envelope.md +133 -0
- package/references/coder-continuous-growth-loop.md +68 -0
- package/references/gh-operation-governance.md +114 -0
- package/references/git-automation-governance.md +324 -0
- package/references/git-version-control-governance.md +227 -0
- package/references/internal-coder-protocol.md +202 -0
- package/references/issue-governance.md +115 -0
- package/references/planning-artifact-contracts.md +595 -0
- package/references/planning-skill-runtime-exposure.md +159 -0
- package/references/proto-redesign-artifact-contracts.md +217 -0
- package/references/proto2html-artifact-contracts.md +113 -0
- package/references/skill-system-lifecycle.md +198 -0
- package/references/validation-trust-domains.md +286 -0
- package/references/workflow-blueprint-runtime-alignment.md +287 -0
- package/schemas/atom-tasks.schema.json +101 -0
- package/schemas/candidate-changes.schema.json +323 -0
- package/schemas/current-state.schema.json +113 -0
- package/schemas/html-prototype.schema.json +288 -0
- package/schemas/openworkflow-contract.schema.json +9 -1
- package/schemas/proto-prompt-pack.schema.json +1333 -0
- package/schemas/prototype-evidence.schema.json +684 -142
- package/schemas/selected-change.schema.json +104 -0
- package/schemas/validation-target.schema.json +187 -1
- package/schemas/validation.schema.json +187 -1
- package/schemas/vision-session.schema.json +151 -0
- package/skills/analyze-changes/SKILL.md +92 -0
- package/skills/analyze-changes/agents/openai.yaml +4 -0
- package/skills/analyze-changes/references/analysis-protocol.md +116 -0
- package/skills/build-proto-prompt/SKILL.md +125 -0
- package/skills/build-proto-prompt/references/output-boundary.md +54 -0
- package/skills/build-proto-prompt/references/prompt-pack-compiler-protocol.md +80 -0
- package/skills/build-prototype/SKILL.md +162 -38
- package/skills/build-prototype/agents/openai.yaml +2 -2
- package/skills/build-prototype/references/philosophy-engine.md +61 -0
- package/skills/build-prototype/references/strategic-prompt-pack-protocol.md +365 -0
- package/skills/build-prototype/references/vision2prompt/01_input_contract.md +84 -0
- package/skills/build-prototype/references/vision2prompt/02_vision_decomposition.md +108 -0
- package/skills/build-prototype/references/vision2prompt/03_strategy_hypothesis_generation.md +89 -0
- package/skills/build-prototype/references/vision2prompt/04_product_system_extraction.md +78 -0
- package/skills/build-prototype/references/vision2prompt/05_prototype_prompt_schema.md +189 -0
- package/skills/build-prototype/references/vision2prompt/06_output_templates.md +125 -0
- package/skills/build-prototype/references/vision2prompt/07_quality_rubric.md +171 -0
- package/skills/build-validation/SKILL.md +136 -54
- package/skills/build-validation/references/prototype-validation-target-rubric.md +35 -0
- package/skills/build-validation/references/return-to-vision-gate.md +32 -0
- package/skills/build-vision/SKILL.md +192 -0
- package/skills/build-vision/references/proto-readiness-rubric.md +48 -0
- package/skills/build-vision/references/vision-interview-protocol.md +48 -0
- package/skills/coder/SKILL.md +204 -0
- package/skills/decompose-to-changes/SKILL.md +176 -0
- package/skills/decompose-to-changes/agents/openai.yaml +4 -0
- package/skills/decompose-to-changes/references/decomposition-protocol.md +278 -0
- package/skills/prompt2proto/SKILL.md +157 -0
- package/skills/prompt2proto/agents/openai.yaml +4 -0
- package/skills/prompt2proto/references/00_role_philosophy_engine.md +96 -0
- package/skills/prompt2proto/references/01_input_contract.md +53 -0
- package/skills/prompt2proto/references/02_prompt_pack_readiness.md +50 -0
- package/skills/prompt2proto/references/03_visual_translation_workflow.md +64 -0
- package/skills/prompt2proto/references/04_output_contract.md +67 -0
- package/skills/prompt2proto/references/05_quality_rubric.md +46 -0
- package/skills/proto2html/SKILL.md +136 -0
- package/skills/proto2html/agents/openai.yaml +4 -0
- package/skills/proto2html/references/proto2html-protocol.md +115 -0
- package/skills/run-team/SKILL.md +4 -0
- package/skills/select-change/SKILL.md +200 -0
- package/skills/select-change/agents/openai.yaml +4 -0
- package/skills/select-change/references/selection-protocol.md +281 -0
- package/skills/tune-prototype/SKILL.md +121 -0
- package/skills/tune-prototype/agents/openai.yaml +4 -0
- package/skills/tune-prototype/references/refined-prompt-pack-protocol.md +161 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface GeneratePrReadySummaryOptions {
|
|
2
|
+
root: string;
|
|
3
|
+
queuePath: string;
|
|
4
|
+
outputPath?: string;
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface GeneratePrReadySummaryResult {
|
|
8
|
+
ok: boolean;
|
|
9
|
+
dryRun: boolean;
|
|
10
|
+
queuePath: string;
|
|
11
|
+
outputPath: string;
|
|
12
|
+
content: string;
|
|
13
|
+
errors: string[];
|
|
14
|
+
warnings: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function generatePrReadySummary(options: GeneratePrReadySummaryOptions): Promise<GeneratePrReadySummaryResult>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { parseYaml } from "../contracts/yaml.js";
|
|
4
|
+
import { readLocalGitEvidence } from "./localEvidenceReader.js";
|
|
5
|
+
export async function generatePrReadySummary(options) {
|
|
6
|
+
const dryRun = options.dryRun !== false;
|
|
7
|
+
const queuePath = normalizeRepoPath(options.queuePath);
|
|
8
|
+
const defaultOutputPath = defaultSummaryPath(queuePath);
|
|
9
|
+
const outputPath = normalizeRepoPath(options.outputPath ?? defaultOutputPath);
|
|
10
|
+
const base = emptyResult(dryRun, queuePath, outputPath);
|
|
11
|
+
let queue;
|
|
12
|
+
try {
|
|
13
|
+
queue = asRecord(parseYaml(await readFile(join(options.root, queuePath), "utf8")));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
return { ...base, errors: [error instanceof Error ? error.message : String(error)] };
|
|
17
|
+
}
|
|
18
|
+
const changes = asArray(queue.changes).map((change) => asRecord(change));
|
|
19
|
+
const completed = changes.filter((change) => change.status === "done");
|
|
20
|
+
const remaining = changes.filter((change) => change.status !== "done");
|
|
21
|
+
const highRisk = changes.filter((change) => change.risk === "high");
|
|
22
|
+
const localEvidence = await readLocalGitEvidence(options.root, queue);
|
|
23
|
+
const validation = localEvidence.validationEvidence.map((item) => item.value);
|
|
24
|
+
const warnings = [
|
|
25
|
+
...base.warnings,
|
|
26
|
+
...localEvidence.warnings,
|
|
27
|
+
...(remaining.length > 0 ? ["candidate queue is not fully complete; PR-ready summary is a review packet, not a merge signal"] : []),
|
|
28
|
+
...(validation.length === 0 ? ["no validation evidence found in queue or completed candidates"] : []),
|
|
29
|
+
];
|
|
30
|
+
const content = renderSummary({
|
|
31
|
+
planId: scalar(queue.plan_id, "unknown-plan"),
|
|
32
|
+
title: scalar(queue.title, "Untitled candidate queue"),
|
|
33
|
+
branchBoundary: scalar(asRecord(queue.queue_policy).branch_boundary, "not recorded"),
|
|
34
|
+
queuePath,
|
|
35
|
+
completed,
|
|
36
|
+
remaining,
|
|
37
|
+
highRisk,
|
|
38
|
+
commitEvidence: localEvidence.commitEvidence,
|
|
39
|
+
validation,
|
|
40
|
+
warnings,
|
|
41
|
+
});
|
|
42
|
+
if (!dryRun) {
|
|
43
|
+
await mkdir(dirname(join(options.root, outputPath)), { recursive: true });
|
|
44
|
+
await writeFile(join(options.root, outputPath), content, "utf8");
|
|
45
|
+
}
|
|
46
|
+
return { ...base, ok: true, content, warnings };
|
|
47
|
+
}
|
|
48
|
+
function renderSummary(input) {
|
|
49
|
+
return [
|
|
50
|
+
`# PR Ready Summary - ${input.planId}`,
|
|
51
|
+
"",
|
|
52
|
+
"This is a local review handoff artifact. It does not mean a remote PR was opened, edited, pushed, merged, or approved.",
|
|
53
|
+
"",
|
|
54
|
+
"## Feat",
|
|
55
|
+
"",
|
|
56
|
+
`- Plan id: \`${input.planId}\``,
|
|
57
|
+
`- Title: ${input.title}`,
|
|
58
|
+
`- Branch boundary: \`${input.branchBoundary}\``,
|
|
59
|
+
`- Source queue: \`${input.queuePath}\``,
|
|
60
|
+
"",
|
|
61
|
+
"## Completed Changes",
|
|
62
|
+
"",
|
|
63
|
+
...renderCompleted(input.completed, input.commitEvidence),
|
|
64
|
+
"",
|
|
65
|
+
"## Deferred Or Blocked Changes",
|
|
66
|
+
"",
|
|
67
|
+
...renderRemaining(input.remaining),
|
|
68
|
+
"",
|
|
69
|
+
"## High-Risk Decisions",
|
|
70
|
+
"",
|
|
71
|
+
...renderHighRisk(input.highRisk),
|
|
72
|
+
"",
|
|
73
|
+
"## Validation",
|
|
74
|
+
"",
|
|
75
|
+
...renderList(input.validation, "- No validation evidence found."),
|
|
76
|
+
"",
|
|
77
|
+
"## Review Notes",
|
|
78
|
+
"",
|
|
79
|
+
"- This artifact is local evidence only.",
|
|
80
|
+
"- Remote PR creation or mutation requires separate gh operation governance and explicit user approval.",
|
|
81
|
+
...input.warnings.map((warning) => `- Warning: ${warning}`),
|
|
82
|
+
"",
|
|
83
|
+
].join("\n");
|
|
84
|
+
}
|
|
85
|
+
function renderCompleted(changes, commitEvidence) {
|
|
86
|
+
if (changes.length === 0) {
|
|
87
|
+
return ["- No completed changes recorded."];
|
|
88
|
+
}
|
|
89
|
+
return changes.map((change) => {
|
|
90
|
+
const candidateId = scalar(change.id, "unknown");
|
|
91
|
+
const selectedChangeId = scalar(asRecord(change.selection).selected_change_id, "not recorded");
|
|
92
|
+
const commits = commitEvidence.filter((item) => item.candidate_id === candidateId).map(formatCommitEvidence);
|
|
93
|
+
const commitText = commits.length > 0 ? `; ${commits.join("; ")}` : "; commit: not recorded";
|
|
94
|
+
return `- \`${candidateId}\` ${scalar(change.title, "Untitled change")} (selected: \`${selectedChangeId}\`${commitText})`;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function formatCommitEvidence(item) {
|
|
98
|
+
const path = item.evidence_path ? `, evidence: ${item.evidence_path}` : "";
|
|
99
|
+
return `commit: ${item.hash}${path}`;
|
|
100
|
+
}
|
|
101
|
+
function renderRemaining(changes) {
|
|
102
|
+
if (changes.length === 0) {
|
|
103
|
+
return ["- None."];
|
|
104
|
+
}
|
|
105
|
+
return changes.map((change) => `- \`${scalar(change.id, "unknown")}\` status \`${scalar(change.status, "unknown")}\`: ${scalar(change.title, "Untitled change")}`);
|
|
106
|
+
}
|
|
107
|
+
function renderHighRisk(changes) {
|
|
108
|
+
if (changes.length === 0) {
|
|
109
|
+
return ["- No high-risk candidates recorded."];
|
|
110
|
+
}
|
|
111
|
+
return changes.map((change) => `- \`${scalar(change.id, "unknown")}\` status \`${scalar(change.status, "unknown")}\`: ${scalar(change.title, "Untitled high-risk change")}`);
|
|
112
|
+
}
|
|
113
|
+
function renderList(values, empty) {
|
|
114
|
+
return values.length > 0 ? values.map((value) => `- \`${value}\``) : [empty];
|
|
115
|
+
}
|
|
116
|
+
function defaultSummaryPath(queuePath) {
|
|
117
|
+
const segments = queuePath.split("/");
|
|
118
|
+
segments[segments.length - 1] = "PR_READY_SUMMARY.md";
|
|
119
|
+
return segments.join("/");
|
|
120
|
+
}
|
|
121
|
+
function emptyResult(dryRun, queuePath, outputPath) {
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
dryRun,
|
|
125
|
+
queuePath,
|
|
126
|
+
outputPath,
|
|
127
|
+
content: "",
|
|
128
|
+
errors: [],
|
|
129
|
+
warnings: [],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function scalar(value, fallback) {
|
|
133
|
+
return typeof value === "string" && value.length > 0 ? value : fallback;
|
|
134
|
+
}
|
|
135
|
+
function asRecord(value) {
|
|
136
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
137
|
+
}
|
|
138
|
+
function asArray(value) {
|
|
139
|
+
return Array.isArray(value) ? value : [];
|
|
140
|
+
}
|
|
141
|
+
function normalizeRepoPath(path) {
|
|
142
|
+
return path.replace(/\\/g, "/").replace(/^\.?\//, "").replace(/\/+$/g, "");
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=prReadySummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prReadySummary.js","sourceRoot":"","sources":["../../../../packages/core/src/git/prReadySummary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type BranchIdentityAssessment } from "./branchIdentity.js";
|
|
2
|
+
import { type LocalGitCommitEvidence } from "./localEvidenceReader.js";
|
|
3
|
+
import { type MergeReadinessCheckpoint } from "./mergeReadinessCheckpoint.js";
|
|
4
|
+
export interface PlanRemoteReadonlyOptions {
|
|
5
|
+
root: string;
|
|
6
|
+
queuePath: string;
|
|
7
|
+
baseRef?: string;
|
|
8
|
+
targetRemote?: string;
|
|
9
|
+
targetBase?: string;
|
|
10
|
+
targetBranch?: string;
|
|
11
|
+
prSummaryPath?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PlanRemoteReadonlyResult {
|
|
14
|
+
ok: boolean;
|
|
15
|
+
mode: "remote-readonly-plan";
|
|
16
|
+
mutation_performed: false;
|
|
17
|
+
queuePath: string;
|
|
18
|
+
planId: string;
|
|
19
|
+
targetIdentity: {
|
|
20
|
+
remote: string;
|
|
21
|
+
remoteUrl: string | null;
|
|
22
|
+
base: string;
|
|
23
|
+
branch: string;
|
|
24
|
+
currentBranch: string | null;
|
|
25
|
+
branchBoundary: string | null;
|
|
26
|
+
branchMatchesCurrent: boolean | null;
|
|
27
|
+
branchOwnsPlan: boolean | null;
|
|
28
|
+
branchIdentity: BranchIdentityAssessment;
|
|
29
|
+
};
|
|
30
|
+
localState: {
|
|
31
|
+
head: string | null;
|
|
32
|
+
baseRef: string | null;
|
|
33
|
+
dirtyPaths: string[];
|
|
34
|
+
orderedCommits: Array<{
|
|
35
|
+
hash: string;
|
|
36
|
+
subject: string;
|
|
37
|
+
}>;
|
|
38
|
+
commitEvidence: LocalGitCommitEvidence[];
|
|
39
|
+
validationEvidence: string[];
|
|
40
|
+
simulatorEvidencePresent: boolean;
|
|
41
|
+
prSummaryPath: string;
|
|
42
|
+
prSummaryExists: boolean;
|
|
43
|
+
};
|
|
44
|
+
remoteState: {
|
|
45
|
+
branchHead: string | null;
|
|
46
|
+
baseHead: string | null;
|
|
47
|
+
};
|
|
48
|
+
prState: {
|
|
49
|
+
lookupAttempted: boolean;
|
|
50
|
+
available: boolean;
|
|
51
|
+
items: Array<Record<string, unknown>>;
|
|
52
|
+
warning: string | null;
|
|
53
|
+
};
|
|
54
|
+
mergeReadiness: MergeReadinessCheckpoint;
|
|
55
|
+
blockers: string[];
|
|
56
|
+
warnings: string[];
|
|
57
|
+
readOnlyPlan: string[];
|
|
58
|
+
rollbackPlan: string[];
|
|
59
|
+
}
|
|
60
|
+
export declare function planRemoteReadonly(options: PlanRemoteReadonlyOptions): Promise<PlanRemoteReadonlyResult>;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { access, readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { parseYaml } from "../contracts/yaml.js";
|
|
6
|
+
import { assessBranchIdentity, branchIdentityExceptionFrom } from "./branchIdentity.js";
|
|
7
|
+
import { readLocalGitEvidence } from "./localEvidenceReader.js";
|
|
8
|
+
import { buildMergeReadinessCheckpoint } from "./mergeReadinessCheckpoint.js";
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
10
|
+
export async function planRemoteReadonly(options) {
|
|
11
|
+
const queue = await loadQueue(options.root, options.queuePath);
|
|
12
|
+
const planId = stringValue(queue.plan_id) ?? "unknown-plan";
|
|
13
|
+
const queuePolicy = record(queue.queue_policy);
|
|
14
|
+
const branchBoundary = stringValue(queuePolicy.branch_boundary);
|
|
15
|
+
const currentBranch = await gitCaptureTrim(options.root, ["branch", "--show-current"]);
|
|
16
|
+
const branchIdentity = assessBranchIdentity(planId, branchBoundary, branchIdentityExceptionFrom(queuePolicy), "remote-plan");
|
|
17
|
+
const branchMatchesCurrent = branchBoundary ? currentBranch === branchBoundary : null;
|
|
18
|
+
const targetRemote = options.targetRemote ?? "origin";
|
|
19
|
+
const targetBase = options.targetBase ?? options.baseRef ?? "main";
|
|
20
|
+
const targetBranch = options.targetBranch ?? branchBoundary ?? currentBranch ?? "HEAD";
|
|
21
|
+
const baseRef = options.baseRef ?? targetBase;
|
|
22
|
+
const prSummaryPath = options.prSummaryPath ?? defaultPrSummaryPath(options.queuePath);
|
|
23
|
+
const remoteUrl = await gitCaptureTrim(options.root, ["remote", "get-url", targetRemote]);
|
|
24
|
+
const localHead = await gitCaptureTrim(options.root, ["rev-parse", "HEAD"]);
|
|
25
|
+
const dirtyPaths = await readDirtyPaths(options.root);
|
|
26
|
+
const orderedCommits = await readOrderedCommits(options.root, baseRef);
|
|
27
|
+
const localEvidence = await readLocalGitEvidence(options.root, queue);
|
|
28
|
+
const commitEvidence = localEvidence.commitEvidence;
|
|
29
|
+
const validationEvidence = localEvidence.validationEvidence.map((item) => item.value);
|
|
30
|
+
const simulatorEvidencePresent = hasSimulatorEvidence(queue);
|
|
31
|
+
const prSummaryExists = await exists(join(options.root, prSummaryPath));
|
|
32
|
+
const branchHead = parseLsRemoteHead(await gitCapture(options.root, ["ls-remote", "--heads", targetRemote, targetBranch]));
|
|
33
|
+
const baseHead = parseLsRemoteHead(await gitCapture(options.root, ["ls-remote", "--heads", targetRemote, targetBase]));
|
|
34
|
+
const prState = await readPrState(options.root, targetBranch, targetBase);
|
|
35
|
+
const mergeReadiness = await buildMergeReadinessCheckpoint({
|
|
36
|
+
root: options.root,
|
|
37
|
+
targetRemote,
|
|
38
|
+
targetBase,
|
|
39
|
+
targetBranch,
|
|
40
|
+
baseHead,
|
|
41
|
+
branchHead,
|
|
42
|
+
validationEvidence,
|
|
43
|
+
});
|
|
44
|
+
const blockers = [
|
|
45
|
+
...(!branchBoundary ? ["queue_policy.branch_boundary is missing"] : []),
|
|
46
|
+
...branchIdentity.errors,
|
|
47
|
+
...(branchBoundary && currentBranch !== branchBoundary ? [`current branch ${currentBranch ?? "(detached)"} does not match branch boundary ${branchBoundary}`] : []),
|
|
48
|
+
...(dirtyPaths.length > 0 ? ["working tree is not clean"] : []),
|
|
49
|
+
...(!remoteUrl ? [`target remote is unknown: ${targetRemote}`] : []),
|
|
50
|
+
...(!baseHead ? [`remote base head is unknown for ${targetRemote}/${targetBase}`] : []),
|
|
51
|
+
...(orderedCommits.length === 0 && commitEvidence.length === 0 ? ["no ordered local commits or queue commit evidence available"] : []),
|
|
52
|
+
...(!simulatorEvidencePresent ? ["simulator evidence is missing"] : []),
|
|
53
|
+
...(!prSummaryExists ? [`PR-ready summary is missing: ${prSummaryPath}`] : []),
|
|
54
|
+
...(validationEvidence.length === 0 ? ["validation evidence is missing"] : []),
|
|
55
|
+
...mergeReadiness.stopReasons.filter((reason) => reason.includes("merge conflict checkpoint")),
|
|
56
|
+
];
|
|
57
|
+
const warnings = [
|
|
58
|
+
...(!branchHead ? [`remote branch head is absent or unreadable for ${targetRemote}/${targetBranch}`] : []),
|
|
59
|
+
...branchIdentity.warnings,
|
|
60
|
+
...localEvidence.warnings,
|
|
61
|
+
...(prState.warning ? [prState.warning] : []),
|
|
62
|
+
"remote-readonly-plan is read-only and did not push, create PRs, edit PRs, merge, or mutate Issues",
|
|
63
|
+
];
|
|
64
|
+
return {
|
|
65
|
+
ok: blockers.length === 0,
|
|
66
|
+
mode: "remote-readonly-plan",
|
|
67
|
+
mutation_performed: false,
|
|
68
|
+
queuePath: options.queuePath,
|
|
69
|
+
planId,
|
|
70
|
+
targetIdentity: {
|
|
71
|
+
remote: targetRemote,
|
|
72
|
+
remoteUrl,
|
|
73
|
+
base: targetBase,
|
|
74
|
+
branch: targetBranch,
|
|
75
|
+
currentBranch,
|
|
76
|
+
branchBoundary,
|
|
77
|
+
branchMatchesCurrent,
|
|
78
|
+
branchOwnsPlan: branchIdentity.owns_plan,
|
|
79
|
+
branchIdentity,
|
|
80
|
+
},
|
|
81
|
+
localState: {
|
|
82
|
+
head: localHead,
|
|
83
|
+
baseRef,
|
|
84
|
+
dirtyPaths,
|
|
85
|
+
orderedCommits,
|
|
86
|
+
commitEvidence,
|
|
87
|
+
validationEvidence,
|
|
88
|
+
simulatorEvidencePresent,
|
|
89
|
+
prSummaryPath,
|
|
90
|
+
prSummaryExists,
|
|
91
|
+
},
|
|
92
|
+
remoteState: {
|
|
93
|
+
branchHead,
|
|
94
|
+
baseHead,
|
|
95
|
+
},
|
|
96
|
+
prState,
|
|
97
|
+
mergeReadiness,
|
|
98
|
+
blockers,
|
|
99
|
+
warnings,
|
|
100
|
+
readOnlyPlan: [
|
|
101
|
+
"verify target remote, branch, and base identity",
|
|
102
|
+
"compare local HEAD, ordered commits, and queue commit evidence",
|
|
103
|
+
"compare remote branch head and target base head",
|
|
104
|
+
"compute read-only merge readiness checkpoint without running git merge",
|
|
105
|
+
"inspect existing draft PR metadata when gh is available",
|
|
106
|
+
"produce a push and draft PR operation preview for a later approved mutation candidate",
|
|
107
|
+
"stop before any git push, gh pr create, gh pr edit, merge, or Issue mutation",
|
|
108
|
+
],
|
|
109
|
+
rollbackPlan: [
|
|
110
|
+
"for a later branch push: record previous remote ref and prefer revert PR recovery over force-push",
|
|
111
|
+
"for a later draft PR create: record PR URL and close guidance",
|
|
112
|
+
"for a later draft PR update: record previous managed-section digest and restore guidance",
|
|
113
|
+
"for merge or Issue mutation: no rollback is planned because those operations remain out of scope",
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
async function loadQueue(root, queuePath) {
|
|
118
|
+
return record(parseYaml(await readFile(join(root, queuePath), "utf8")));
|
|
119
|
+
}
|
|
120
|
+
async function readOrderedCommits(root, baseRef) {
|
|
121
|
+
try {
|
|
122
|
+
const { stdout } = await execFileAsync("git", ["log", "--reverse", "--pretty=format:%H%x09%s", `${baseRef}..HEAD`], { cwd: root });
|
|
123
|
+
return stdout.split("\n").filter(Boolean).map((line) => {
|
|
124
|
+
const [hash, ...subjectParts] = line.split("\t");
|
|
125
|
+
return { hash: hash ?? "", subject: subjectParts.join("\t") };
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function readDirtyPaths(root) {
|
|
133
|
+
const status = await gitCapture(root, ["status", "--porcelain"]);
|
|
134
|
+
return status.split("\n").map((line) => line.slice(3).trim()).filter(Boolean);
|
|
135
|
+
}
|
|
136
|
+
async function readPrState(root, head, base) {
|
|
137
|
+
try {
|
|
138
|
+
const { stdout } = await execFileAsync("gh", [
|
|
139
|
+
"pr",
|
|
140
|
+
"list",
|
|
141
|
+
"--head",
|
|
142
|
+
head,
|
|
143
|
+
"--base",
|
|
144
|
+
base,
|
|
145
|
+
"--state",
|
|
146
|
+
"all",
|
|
147
|
+
"--json",
|
|
148
|
+
"number,title,state,isDraft,url,headRefName,baseRefName,updatedAt",
|
|
149
|
+
"--limit",
|
|
150
|
+
"10",
|
|
151
|
+
], { cwd: root });
|
|
152
|
+
return {
|
|
153
|
+
lookupAttempted: true,
|
|
154
|
+
available: true,
|
|
155
|
+
items: array(JSON.parse(stdout)).map(record),
|
|
156
|
+
warning: null,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return {
|
|
161
|
+
lookupAttempted: true,
|
|
162
|
+
available: false,
|
|
163
|
+
items: [],
|
|
164
|
+
warning: "gh PR metadata is unavailable; remote git refs were still read without mutation",
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function gitCaptureTrim(root, args) {
|
|
169
|
+
const output = await gitCapture(root, args);
|
|
170
|
+
if (!output.trim()) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
return output.trim().split("\n")[0] ?? null;
|
|
174
|
+
}
|
|
175
|
+
async function gitCapture(root, args) {
|
|
176
|
+
try {
|
|
177
|
+
const { stdout } = await execFileAsync("git", args, { cwd: root });
|
|
178
|
+
return stdout;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return "";
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function exists(path) {
|
|
185
|
+
try {
|
|
186
|
+
await access(path);
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function parseLsRemoteHead(output) {
|
|
194
|
+
const first = output.trim().split("\n").find(Boolean);
|
|
195
|
+
if (!first) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
return first.split(/\s+/)[0] ?? null;
|
|
199
|
+
}
|
|
200
|
+
function hasSimulatorEvidence(queue) {
|
|
201
|
+
return array(queue.changes).map(record).some((candidate) => {
|
|
202
|
+
const id = stringValue(candidate.id) ?? "";
|
|
203
|
+
const title = (stringValue(candidate.title) ?? "").toLowerCase();
|
|
204
|
+
const status = stringValue(candidate.status);
|
|
205
|
+
const completionEvidence = array(record(candidate.completion).evidence);
|
|
206
|
+
return status === "done" && completionEvidence.length > 0 && (id === "G017" || title.includes("simulator"));
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
function defaultPrSummaryPath(queuePath) {
|
|
210
|
+
const parts = queuePath.split("/");
|
|
211
|
+
parts[parts.length - 1] = "PR_READY_SUMMARY.md";
|
|
212
|
+
return parts.join("/");
|
|
213
|
+
}
|
|
214
|
+
function record(value) {
|
|
215
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
216
|
+
}
|
|
217
|
+
function array(value) {
|
|
218
|
+
return Array.isArray(value) ? value : [];
|
|
219
|
+
}
|
|
220
|
+
function stringValue(value) {
|
|
221
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=remoteReadonlyPlanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteReadonlyPlanner.js","sourceRoot":"","sources":["../../../../packages/core/src/git/remoteReadonlyPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CleanResult } from "../workflow/cleanOpenWorkflow.js";
|
|
2
|
+
export declare const AGENTS_GUIDE_PATH = "AGENTS.md";
|
|
3
|
+
export declare const AGENTS_GUIDE_TEMPLATE_ID = "openworkflow.agents-guide.v1";
|
|
4
|
+
export declare const AGENTS_GUIDE_BEGIN = "<!-- BEGIN OPENWORKFLOW AGENT GUIDE generated-by: openworkflow; template-id: openworkflow.agents-guide.v1 -->";
|
|
5
|
+
export declare const AGENTS_GUIDE_END = "<!-- END OPENWORKFLOW AGENT GUIDE -->";
|
|
6
|
+
export interface AgentsGuideSyncResult {
|
|
7
|
+
path: string;
|
|
8
|
+
action: "created" | "appended" | "updated" | "unchanged";
|
|
9
|
+
}
|
|
10
|
+
export interface AgentsGuideDoctorResult {
|
|
11
|
+
ok: boolean;
|
|
12
|
+
warnings: string[];
|
|
13
|
+
errors: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare function renderAgentsGuide(): string;
|
|
16
|
+
export declare function syncAgentsGuide(root: string): Promise<AgentsGuideSyncResult>;
|
|
17
|
+
export declare function doctorAgentsGuide(root: string): Promise<AgentsGuideDoctorResult>;
|
|
18
|
+
export declare function cleanAgentsGuide(options: {
|
|
19
|
+
root: string;
|
|
20
|
+
yes: boolean;
|
|
21
|
+
}): Promise<CleanResult>;
|
|
22
|
+
export declare function hasAgentsGuide(content: string): boolean;
|
|
23
|
+
export declare function isAgentsGuideCurrent(content: string): boolean;
|
|
24
|
+
export declare function upsertAgentsGuide(existing: string | null): {
|
|
25
|
+
content: string;
|
|
26
|
+
changed: boolean;
|
|
27
|
+
action: "created" | "appended" | "updated" | "unchanged";
|
|
28
|
+
};
|
|
29
|
+
export declare function removeAgentsGuide(existing: string): {
|
|
30
|
+
content: string;
|
|
31
|
+
changed: boolean;
|
|
32
|
+
};
|