aiwcli 0.12.7 → 0.12.8
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/templates/CLAUDE.md +27 -0
- package/dist/templates/_shared/.claude/{commands/handoff.md → skills/handoff/SKILL.md} +3 -2
- package/dist/templates/_shared/.claude/{commands/handoff-resume.md → skills/handoff-resume/SKILL.md} +2 -1
- package/dist/templates/_shared/handoff-system/CLAUDE.md +433 -421
- package/dist/templates/_shared/lib-ts/CLAUDE.md +3 -3
- package/dist/templates/_shared/lib-ts/base/constants.ts +324 -306
- package/dist/templates/_shared/lib-ts/base/inference.ts +3 -3
- package/dist/templates/_shared/lib-ts/context/CLAUDE.md +134 -0
- package/dist/templates/_shared/scripts/status_line.ts +26 -29
- package/dist/templates/cc-native/.claude/commands/cc-native/specdev.md +1 -1
- package/dist/templates/cc-native/.claude/settings.json +3 -2
- package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +64 -0
- package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/format.ts +597 -597
- package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/index.ts +26 -26
- package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/tracker.ts +107 -107
- package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/write.ts +119 -119
- package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +237 -247
- package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +76 -76
- package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +76 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +163 -156
- package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +116 -116
- package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +329 -329
- package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +149 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/CLAUDE.md +143 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/PLAN-ORCHESTRATOR.md +213 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-questions/PLAN-QUESTIONER.md +70 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-EVOLUTION.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-PATTERNS.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-STRUCTURE.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ASSUMPTION-TRACER.md +56 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CLARITY-AUDITOR.md +53 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-FEASIBILITY.md +66 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-GAPS.md +70 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-ORDERING.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CONSTRAINT-VALIDATOR.md +72 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-ADR-VALIDATOR.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-SCALE-MATCHER.md +64 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DEVILS-ADVOCATE.md +56 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DOCUMENTATION-PHILOSOPHY.md +86 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HANDOFF-READINESS.md +59 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HIDDEN-COMPLEXITY.md +58 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/INCREMENTAL-DELIVERY.md +66 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-DEPENDENCY.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-FMEA.md +66 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-PREMORTEM.md +71 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-REVERSIBILITY.md +74 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SCOPE-BOUNDARY.md +77 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SIMPLICITY-GUARDIAN.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SKEPTIC.md +68 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-BEHAVIOR-AUDITOR.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-CHARACTERIZATION.md +71 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-FIRST-VALIDATOR.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-PYRAMID-ANALYZER.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-COSTS.md +67 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-STAKEHOLDERS.md +65 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-COVERAGE.md +74 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-STRENGTH.md +69 -0
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/agent-selection.ts +163 -163
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/corroboration.ts +119 -119
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/graduation.ts +132 -132
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/orchestrator.ts +70 -70
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/output-builder.ts +130 -130
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/plan-questions.ts +102 -102
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/review-pipeline.ts +511 -511
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/agent.ts +74 -74
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/base/base-agent.ts +217 -217
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/index.ts +12 -12
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/claude-agent.ts +66 -66
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/codex-agent.ts +185 -185
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/gemini-agent.ts +39 -39
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/orchestrator-claude-agent.ts +196 -196
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/schemas.ts +201 -201
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/types.ts +23 -23
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/verdict.ts +72 -72
- package/dist/templates/cc-native/_cc-native/{workflows → plan-review/workflows}/specdev.md +9 -9
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +0 -21
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON schemas and prompt constants for plan reviewers.
|
|
3
|
-
* Centralized schema definitions used by Claude/Codex/Gemini agents and orchestrator.
|
|
4
|
-
* See cc-native-plan-review-spec.md §4.10
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
// Prompt Constants
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
/** Prefix for agent review prompts (embedded in stdin or --system-prompt) */
|
|
12
|
-
export const AGENT_REVIEW_PROMPT_PREFIX = `# SINGLE-TURN PLAN REVIEW
|
|
13
|
-
|
|
14
|
-
## CRITICAL: ONE TURN ONLY
|
|
15
|
-
You have exactly ONE response to complete this review. Do NOT attempt multi-step workflows, context queries, or phased analysis. Analyze the plan and output your review immediately.
|
|
16
|
-
|
|
17
|
-
## YOUR TASK
|
|
18
|
-
Review the plan below from your area of expertise. Then call StructuredOutput with your assessment.
|
|
19
|
-
|
|
20
|
-
## REQUIRED OUTPUT (all fields must have content)
|
|
21
|
-
Call StructuredOutput with:
|
|
22
|
-
- **verdict**: "pass" (no concerns), "warn" (some concerns), or "fail" (critical issues)
|
|
23
|
-
- **summary**: 2-3 sentences with your overall assessment and key findings (REQUIRED)
|
|
24
|
-
- **issues**: Array of concerns found. Format each as:
|
|
25
|
-
{"severity": "high/medium/low", "category": "...", "issue": "...", "suggested_fix": "...", "dimension": "..."}
|
|
26
|
-
- **dimension**: Classify each issue into exactly one dimension:
|
|
27
|
-
completeness, simplicity, security, performance, reliability,
|
|
28
|
-
maintainability, testability, scope, feasibility, or clarity.
|
|
29
|
-
Examples: "missing error handling" → reliability, "excessive abstraction" → simplicity,
|
|
30
|
-
"no test strategy" → testability, "missing deployment steps" → completeness,
|
|
31
|
-
"unclear interaction between components" → clarity.
|
|
32
|
-
- **missing_sections**: Topics the plan should address but doesn't
|
|
33
|
-
- **questions**: Things that need clarification before implementation
|
|
34
|
-
|
|
35
|
-
## IMPORTANT RULES
|
|
36
|
-
1. A "warn" verdict MUST include at least one issue explaining why
|
|
37
|
-
2. Summary MUST explain your reasoning, not just "looks good" or empty
|
|
38
|
-
3. Focus on your expertise area (architecture, security, performance, etc.)
|
|
39
|
-
4. Output StructuredOutput NOW - no other tools, no questions, no delays
|
|
40
|
-
5. Return ONLY your top 3 most critical issues. Prioritize high-severity over medium/low. Quality over quantity.
|
|
41
|
-
`;
|
|
42
|
-
|
|
43
|
-
/** Prefix for Codex/Gemini review prompts (legacy, may be deprecated) */
|
|
44
|
-
export const REVIEW_PROMPT_PREFIX = `You are a senior staff software engineer acting as a strict plan reviewer.
|
|
45
|
-
|
|
46
|
-
Review the PLAN below. Focus on:
|
|
47
|
-
- missing steps, unclear assumptions, edge cases
|
|
48
|
-
- security/privacy concerns
|
|
49
|
-
- testing/rollout/rollback completeness
|
|
50
|
-
- operational concerns (observability, failure modes)
|
|
51
|
-
`;
|
|
52
|
-
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// JSON Schemas
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
|
|
57
|
-
/** JSON schema for review structured output (agents: Claude, Codex, Gemini) */
|
|
58
|
-
export const REVIEW_SCHEMA: Record<string, unknown> = {
|
|
59
|
-
type: "object",
|
|
60
|
-
properties: {
|
|
61
|
-
verdict: { type: "string", enum: ["pass", "warn", "fail"] },
|
|
62
|
-
summary: { type: "string", minLength: 20 },
|
|
63
|
-
issues: {
|
|
64
|
-
type: "array",
|
|
65
|
-
items: {
|
|
66
|
-
type: "object",
|
|
67
|
-
properties: {
|
|
68
|
-
severity: { type: "string", enum: ["high", "medium", "low"] },
|
|
69
|
-
category: { type: "string" },
|
|
70
|
-
issue: { type: "string" },
|
|
71
|
-
suggested_fix: { type: "string" },
|
|
72
|
-
dimension: {
|
|
73
|
-
type: "string",
|
|
74
|
-
enum: [
|
|
75
|
-
"completeness", "simplicity", "security", "performance",
|
|
76
|
-
"reliability", "maintainability", "testability", "scope",
|
|
77
|
-
"feasibility", "clarity",
|
|
78
|
-
],
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
required: ["severity", "category", "issue", "suggested_fix", "dimension"],
|
|
82
|
-
additionalProperties: false,
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
missing_sections: { type: "array", items: { type: "string" } },
|
|
86
|
-
questions: { type: "array", items: { type: "string" } },
|
|
87
|
-
},
|
|
88
|
-
required: ["verdict", "summary", "issues", "missing_sections", "questions"],
|
|
89
|
-
additionalProperties: false,
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Build orchestrator JSON schema with enum-constrained agent names.
|
|
94
|
-
* Dynamic schema that restricts selectedAgents to valid agent names.
|
|
95
|
-
*/
|
|
96
|
-
export function buildOrchestratorSchema(
|
|
97
|
-
validAgentNames: string[],
|
|
98
|
-
categories: string[],
|
|
99
|
-
): Record<string, unknown> {
|
|
100
|
-
const itemsSchema: Record<string, unknown> = { type: "string" };
|
|
101
|
-
if (validAgentNames.length > 0) {
|
|
102
|
-
itemsSchema.enum = validAgentNames;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return {
|
|
106
|
-
type: "object",
|
|
107
|
-
properties: {
|
|
108
|
-
complexity: { type: "string", enum: ["simple", "medium", "high"] },
|
|
109
|
-
category: { type: "string", enum: categories },
|
|
110
|
-
selectedAgents: {
|
|
111
|
-
type: "array",
|
|
112
|
-
items: itemsSchema,
|
|
113
|
-
},
|
|
114
|
-
reasoning: { type: "string" },
|
|
115
|
-
skipReason: { type: "string" },
|
|
116
|
-
},
|
|
117
|
-
required: ["complexity", "category", "selectedAgents", "reasoning"],
|
|
118
|
-
additionalProperties: false,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
// Plan Questions Schema
|
|
124
|
-
// ---------------------------------------------------------------------------
|
|
125
|
-
|
|
126
|
-
/** Prefix for plan question generation prompts */
|
|
127
|
-
export const QUESTIONS_PROMPT_PREFIX = `# PLAN QUESTION GENERATION
|
|
128
|
-
|
|
129
|
-
## CRITICAL: ONE TURN ONLY
|
|
130
|
-
You have exactly ONE response. Do NOT attempt multi-step workflows or tool use beyond StructuredOutput.
|
|
131
|
-
|
|
132
|
-
## YOUR TASK
|
|
133
|
-
You are reviewing a plan that was written by another agent. You have NO access to the codebase, NO session history, and NO exploration context. You see ONLY the plan text.
|
|
134
|
-
|
|
135
|
-
This is intentional. Plans must be executable by a fresh agent in a new session. If the plan assumes knowledge that isn't written down, that's a gap.
|
|
136
|
-
|
|
137
|
-
## WHAT TO LOOK FOR
|
|
138
|
-
- Questions the plan doesn't answer but should
|
|
139
|
-
- Assumptions the plan makes without stating them
|
|
140
|
-
- Ambiguities where a reader could interpret something two ways
|
|
141
|
-
- Missing context that would be obvious to the author but not a new reader
|
|
142
|
-
|
|
143
|
-
## IMPORTANT
|
|
144
|
-
- Focus on questions that would change the implementation approach if answered differently
|
|
145
|
-
- Don't ask about things clearly stated in the plan
|
|
146
|
-
- Don't generate generic questions — every question should be specific to THIS plan
|
|
147
|
-
- Aim for 3-6 high-value questions
|
|
148
|
-
`;
|
|
149
|
-
|
|
150
|
-
/** JSON schema for plan question generation output */
|
|
151
|
-
export const QUESTIONS_SCHEMA: Record<string, unknown> = {
|
|
152
|
-
type: "object",
|
|
153
|
-
properties: {
|
|
154
|
-
questions: {
|
|
155
|
-
type: "array",
|
|
156
|
-
items: { type: "string" },
|
|
157
|
-
description: "Questions the user should answer before this plan is implemented",
|
|
158
|
-
},
|
|
159
|
-
assumptions: {
|
|
160
|
-
type: "array",
|
|
161
|
-
items: { type: "string" },
|
|
162
|
-
description: "Assumptions the plan makes that are not explicitly stated",
|
|
163
|
-
},
|
|
164
|
-
ambiguities: {
|
|
165
|
-
type: "array",
|
|
166
|
-
items: { type: "string" },
|
|
167
|
-
description: "Parts of the plan that could be interpreted multiple ways",
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
required: ["questions", "assumptions", "ambiguities"],
|
|
171
|
-
additionalProperties: false,
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
// ---------------------------------------------------------------------------
|
|
175
|
-
// Orchestrator Schemas
|
|
176
|
-
// ---------------------------------------------------------------------------
|
|
177
|
-
|
|
178
|
-
/** JSON schema for orchestrator structured output (static fallback) */
|
|
179
|
-
export const ORCHESTRATOR_SCHEMA: Record<string, unknown> = {
|
|
180
|
-
type: "object",
|
|
181
|
-
properties: {
|
|
182
|
-
complexity: { type: "string", enum: ["simple", "medium", "high"] },
|
|
183
|
-
category: {
|
|
184
|
-
type: "string",
|
|
185
|
-
enum: [
|
|
186
|
-
"code",
|
|
187
|
-
"infrastructure",
|
|
188
|
-
"documentation",
|
|
189
|
-
"life",
|
|
190
|
-
"business",
|
|
191
|
-
"design",
|
|
192
|
-
"research",
|
|
193
|
-
],
|
|
194
|
-
},
|
|
195
|
-
selectedAgents: { type: "array", items: { type: "string" } },
|
|
196
|
-
reasoning: { type: "string" },
|
|
197
|
-
skipReason: { type: "string" },
|
|
198
|
-
},
|
|
199
|
-
required: ["complexity", "category", "selectedAgents", "reasoning"],
|
|
200
|
-
additionalProperties: false,
|
|
201
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* JSON schemas and prompt constants for plan reviewers.
|
|
3
|
+
* Centralized schema definitions used by Claude/Codex/Gemini agents and orchestrator.
|
|
4
|
+
* See cc-native-plan-review-spec.md §4.10
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Prompt Constants
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
/** Prefix for agent review prompts (embedded in stdin or --system-prompt) */
|
|
12
|
+
export const AGENT_REVIEW_PROMPT_PREFIX = `# SINGLE-TURN PLAN REVIEW
|
|
13
|
+
|
|
14
|
+
## CRITICAL: ONE TURN ONLY
|
|
15
|
+
You have exactly ONE response to complete this review. Do NOT attempt multi-step workflows, context queries, or phased analysis. Analyze the plan and output your review immediately.
|
|
16
|
+
|
|
17
|
+
## YOUR TASK
|
|
18
|
+
Review the plan below from your area of expertise. Then call StructuredOutput with your assessment.
|
|
19
|
+
|
|
20
|
+
## REQUIRED OUTPUT (all fields must have content)
|
|
21
|
+
Call StructuredOutput with:
|
|
22
|
+
- **verdict**: "pass" (no concerns), "warn" (some concerns), or "fail" (critical issues)
|
|
23
|
+
- **summary**: 2-3 sentences with your overall assessment and key findings (REQUIRED)
|
|
24
|
+
- **issues**: Array of concerns found. Format each as:
|
|
25
|
+
{"severity": "high/medium/low", "category": "...", "issue": "...", "suggested_fix": "...", "dimension": "..."}
|
|
26
|
+
- **dimension**: Classify each issue into exactly one dimension:
|
|
27
|
+
completeness, simplicity, security, performance, reliability,
|
|
28
|
+
maintainability, testability, scope, feasibility, or clarity.
|
|
29
|
+
Examples: "missing error handling" → reliability, "excessive abstraction" → simplicity,
|
|
30
|
+
"no test strategy" → testability, "missing deployment steps" → completeness,
|
|
31
|
+
"unclear interaction between components" → clarity.
|
|
32
|
+
- **missing_sections**: Topics the plan should address but doesn't
|
|
33
|
+
- **questions**: Things that need clarification before implementation
|
|
34
|
+
|
|
35
|
+
## IMPORTANT RULES
|
|
36
|
+
1. A "warn" verdict MUST include at least one issue explaining why
|
|
37
|
+
2. Summary MUST explain your reasoning, not just "looks good" or empty
|
|
38
|
+
3. Focus on your expertise area (architecture, security, performance, etc.)
|
|
39
|
+
4. Output StructuredOutput NOW - no other tools, no questions, no delays
|
|
40
|
+
5. Return ONLY your top 3 most critical issues. Prioritize high-severity over medium/low. Quality over quantity.
|
|
41
|
+
`;
|
|
42
|
+
|
|
43
|
+
/** Prefix for Codex/Gemini review prompts (legacy, may be deprecated) */
|
|
44
|
+
export const REVIEW_PROMPT_PREFIX = `You are a senior staff software engineer acting as a strict plan reviewer.
|
|
45
|
+
|
|
46
|
+
Review the PLAN below. Focus on:
|
|
47
|
+
- missing steps, unclear assumptions, edge cases
|
|
48
|
+
- security/privacy concerns
|
|
49
|
+
- testing/rollout/rollback completeness
|
|
50
|
+
- operational concerns (observability, failure modes)
|
|
51
|
+
`;
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// JSON Schemas
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
|
|
57
|
+
/** JSON schema for review structured output (agents: Claude, Codex, Gemini) */
|
|
58
|
+
export const REVIEW_SCHEMA: Record<string, unknown> = {
|
|
59
|
+
type: "object",
|
|
60
|
+
properties: {
|
|
61
|
+
verdict: { type: "string", enum: ["pass", "warn", "fail"] },
|
|
62
|
+
summary: { type: "string", minLength: 20 },
|
|
63
|
+
issues: {
|
|
64
|
+
type: "array",
|
|
65
|
+
items: {
|
|
66
|
+
type: "object",
|
|
67
|
+
properties: {
|
|
68
|
+
severity: { type: "string", enum: ["high", "medium", "low"] },
|
|
69
|
+
category: { type: "string" },
|
|
70
|
+
issue: { type: "string" },
|
|
71
|
+
suggested_fix: { type: "string" },
|
|
72
|
+
dimension: {
|
|
73
|
+
type: "string",
|
|
74
|
+
enum: [
|
|
75
|
+
"completeness", "simplicity", "security", "performance",
|
|
76
|
+
"reliability", "maintainability", "testability", "scope",
|
|
77
|
+
"feasibility", "clarity",
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ["severity", "category", "issue", "suggested_fix", "dimension"],
|
|
82
|
+
additionalProperties: false,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
missing_sections: { type: "array", items: { type: "string" } },
|
|
86
|
+
questions: { type: "array", items: { type: "string" } },
|
|
87
|
+
},
|
|
88
|
+
required: ["verdict", "summary", "issues", "missing_sections", "questions"],
|
|
89
|
+
additionalProperties: false,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Build orchestrator JSON schema with enum-constrained agent names.
|
|
94
|
+
* Dynamic schema that restricts selectedAgents to valid agent names.
|
|
95
|
+
*/
|
|
96
|
+
export function buildOrchestratorSchema(
|
|
97
|
+
validAgentNames: string[],
|
|
98
|
+
categories: string[],
|
|
99
|
+
): Record<string, unknown> {
|
|
100
|
+
const itemsSchema: Record<string, unknown> = { type: "string" };
|
|
101
|
+
if (validAgentNames.length > 0) {
|
|
102
|
+
itemsSchema.enum = validAgentNames;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
type: "object",
|
|
107
|
+
properties: {
|
|
108
|
+
complexity: { type: "string", enum: ["simple", "medium", "high"] },
|
|
109
|
+
category: { type: "string", enum: categories },
|
|
110
|
+
selectedAgents: {
|
|
111
|
+
type: "array",
|
|
112
|
+
items: itemsSchema,
|
|
113
|
+
},
|
|
114
|
+
reasoning: { type: "string" },
|
|
115
|
+
skipReason: { type: "string" },
|
|
116
|
+
},
|
|
117
|
+
required: ["complexity", "category", "selectedAgents", "reasoning"],
|
|
118
|
+
additionalProperties: false,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// Plan Questions Schema
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
|
|
126
|
+
/** Prefix for plan question generation prompts */
|
|
127
|
+
export const QUESTIONS_PROMPT_PREFIX = `# PLAN QUESTION GENERATION
|
|
128
|
+
|
|
129
|
+
## CRITICAL: ONE TURN ONLY
|
|
130
|
+
You have exactly ONE response. Do NOT attempt multi-step workflows or tool use beyond StructuredOutput.
|
|
131
|
+
|
|
132
|
+
## YOUR TASK
|
|
133
|
+
You are reviewing a plan that was written by another agent. You have NO access to the codebase, NO session history, and NO exploration context. You see ONLY the plan text.
|
|
134
|
+
|
|
135
|
+
This is intentional. Plans must be executable by a fresh agent in a new session. If the plan assumes knowledge that isn't written down, that's a gap.
|
|
136
|
+
|
|
137
|
+
## WHAT TO LOOK FOR
|
|
138
|
+
- Questions the plan doesn't answer but should
|
|
139
|
+
- Assumptions the plan makes without stating them
|
|
140
|
+
- Ambiguities where a reader could interpret something two ways
|
|
141
|
+
- Missing context that would be obvious to the author but not a new reader
|
|
142
|
+
|
|
143
|
+
## IMPORTANT
|
|
144
|
+
- Focus on questions that would change the implementation approach if answered differently
|
|
145
|
+
- Don't ask about things clearly stated in the plan
|
|
146
|
+
- Don't generate generic questions — every question should be specific to THIS plan
|
|
147
|
+
- Aim for 3-6 high-value questions
|
|
148
|
+
`;
|
|
149
|
+
|
|
150
|
+
/** JSON schema for plan question generation output */
|
|
151
|
+
export const QUESTIONS_SCHEMA: Record<string, unknown> = {
|
|
152
|
+
type: "object",
|
|
153
|
+
properties: {
|
|
154
|
+
questions: {
|
|
155
|
+
type: "array",
|
|
156
|
+
items: { type: "string" },
|
|
157
|
+
description: "Questions the user should answer before this plan is implemented",
|
|
158
|
+
},
|
|
159
|
+
assumptions: {
|
|
160
|
+
type: "array",
|
|
161
|
+
items: { type: "string" },
|
|
162
|
+
description: "Assumptions the plan makes that are not explicitly stated",
|
|
163
|
+
},
|
|
164
|
+
ambiguities: {
|
|
165
|
+
type: "array",
|
|
166
|
+
items: { type: "string" },
|
|
167
|
+
description: "Parts of the plan that could be interpreted multiple ways",
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
required: ["questions", "assumptions", "ambiguities"],
|
|
171
|
+
additionalProperties: false,
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Orchestrator Schemas
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
|
|
178
|
+
/** JSON schema for orchestrator structured output (static fallback) */
|
|
179
|
+
export const ORCHESTRATOR_SCHEMA: Record<string, unknown> = {
|
|
180
|
+
type: "object",
|
|
181
|
+
properties: {
|
|
182
|
+
complexity: { type: "string", enum: ["simple", "medium", "high"] },
|
|
183
|
+
category: {
|
|
184
|
+
type: "string",
|
|
185
|
+
enum: [
|
|
186
|
+
"code",
|
|
187
|
+
"infrastructure",
|
|
188
|
+
"documentation",
|
|
189
|
+
"life",
|
|
190
|
+
"business",
|
|
191
|
+
"design",
|
|
192
|
+
"research",
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
selectedAgents: { type: "array", items: { type: "string" } },
|
|
196
|
+
reasoning: { type: "string" },
|
|
197
|
+
skipReason: { type: "string" },
|
|
198
|
+
},
|
|
199
|
+
required: ["complexity", "category", "selectedAgents", "reasoning"],
|
|
200
|
+
additionalProperties: false,
|
|
201
|
+
};
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reviewer interface and options for plan review implementations.
|
|
3
|
-
* See cc-native-plan-review-spec.md §4.9
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ReviewerResult, Verdict, ReviewData } from "
|
|
7
|
-
|
|
8
|
-
// Re-export for convenience
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/** Create a standard ReviewerResult. Shared by all reviewer implementations. */
|
|
12
|
-
export function makeResult(
|
|
13
|
-
name: string,
|
|
14
|
-
ok: boolean,
|
|
15
|
-
verdict: Verdict,
|
|
16
|
-
data: ReviewData | Record<string, unknown>,
|
|
17
|
-
raw: string,
|
|
18
|
-
err: string,
|
|
19
|
-
): ReviewerResult {
|
|
20
|
-
return { name, ok, verdict, data: data as Record<string, unknown>, raw, err };
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export {type Reviewer, type ReviewerResult, type ReviewOptions} from "
|
|
1
|
+
/**
|
|
2
|
+
* Reviewer interface and options for plan review implementations.
|
|
3
|
+
* See cc-native-plan-review-spec.md §4.9
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ReviewerResult, Verdict, ReviewData } from "../../../lib-ts/types.js";
|
|
7
|
+
|
|
8
|
+
// Re-export for convenience
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
/** Create a standard ReviewerResult. Shared by all reviewer implementations. */
|
|
12
|
+
export function makeResult(
|
|
13
|
+
name: string,
|
|
14
|
+
ok: boolean,
|
|
15
|
+
verdict: Verdict,
|
|
16
|
+
data: ReviewData | Record<string, unknown>,
|
|
17
|
+
raw: string,
|
|
18
|
+
err: string,
|
|
19
|
+
): ReviewerResult {
|
|
20
|
+
return { name, ok, verdict, data: data as Record<string, unknown>, raw, err };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export {type Reviewer, type ReviewerResult, type ReviewOptions} from "../../../lib-ts/types.js";
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure verdict aggregation logic.
|
|
3
|
-
* See cc-native-plan-review-spec.md §4.2
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ReviewDecisionResult, Verdict } from "
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Return the worst verdict from a list.
|
|
10
|
-
* Order: pass < warn < fail. skip→pass, error→warn.
|
|
11
|
-
*/
|
|
12
|
-
export function worstVerdict(verdicts: Verdict[]): Verdict {
|
|
13
|
-
const order: Record<Verdict, number> = {
|
|
14
|
-
pass: 0,
|
|
15
|
-
warn: 1,
|
|
16
|
-
fail: 2,
|
|
17
|
-
skip: 0,
|
|
18
|
-
error: 1,
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
let worst: Verdict = "pass";
|
|
22
|
-
for (const v of verdicts) {
|
|
23
|
-
if ((order[v] ?? 1) > (order[worst] ?? 0)) {
|
|
24
|
-
worst = v;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Normalize error → warn
|
|
29
|
-
if (worst === "error") return "warn";
|
|
30
|
-
return worst;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Verdict aggregation: fail veto triggers a block.
|
|
35
|
-
*
|
|
36
|
-
* Priority order:
|
|
37
|
-
* 1. Fail Veto: Any fail → deny (ISO 61508 zero-tolerance)
|
|
38
|
-
* 2. Acceptable: warns are informational only
|
|
39
|
-
*
|
|
40
|
-
* Error exclusion: Detectors that produce no signal (error/skip) are excluded
|
|
41
|
-
* from the denominator.
|
|
42
|
-
*
|
|
43
|
-
* @param allVerdicts - List of verdict strings from all reviewers
|
|
44
|
-
* @returns ReviewDecisionResult with should_deny, reason, and score
|
|
45
|
-
*/
|
|
46
|
-
export function computeReviewDecision(
|
|
47
|
-
allVerdicts: Verdict[],
|
|
48
|
-
): ReviewDecisionResult {
|
|
49
|
-
// Exclude non-signal verdicts
|
|
50
|
-
const signalVerdicts = allVerdicts.filter(
|
|
51
|
-
(v) => v === "pass" || v === "warn" || v === "fail",
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
if (signalVerdicts.length === 0) {
|
|
55
|
-
return { should_deny: false, reason: "no_signal", score: 0 };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Fail blocks unconditionally
|
|
59
|
-
const failCount = signalVerdicts.filter((v) => v === "fail").length;
|
|
60
|
-
if (failCount > 0) {
|
|
61
|
-
return { should_deny: true, reason: "fail_veto", score: 1 };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Warn also blocks — reviewers flagged concerns worth addressing
|
|
65
|
-
const warnCount = signalVerdicts.filter((v) => v === "warn").length;
|
|
66
|
-
const warnRatio = warnCount / signalVerdicts.length;
|
|
67
|
-
if (warnCount > 0) {
|
|
68
|
-
return { should_deny: true, reason: "warn_block", score: warnRatio };
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return { should_deny: false, reason: "acceptable", score: 0 };
|
|
72
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Pure verdict aggregation logic.
|
|
3
|
+
* See cc-native-plan-review-spec.md §4.2
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ReviewDecisionResult, Verdict } from "../../lib-ts/types.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Return the worst verdict from a list.
|
|
10
|
+
* Order: pass < warn < fail. skip→pass, error→warn.
|
|
11
|
+
*/
|
|
12
|
+
export function worstVerdict(verdicts: Verdict[]): Verdict {
|
|
13
|
+
const order: Record<Verdict, number> = {
|
|
14
|
+
pass: 0,
|
|
15
|
+
warn: 1,
|
|
16
|
+
fail: 2,
|
|
17
|
+
skip: 0,
|
|
18
|
+
error: 1,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
let worst: Verdict = "pass";
|
|
22
|
+
for (const v of verdicts) {
|
|
23
|
+
if ((order[v] ?? 1) > (order[worst] ?? 0)) {
|
|
24
|
+
worst = v;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Normalize error → warn
|
|
29
|
+
if (worst === "error") return "warn";
|
|
30
|
+
return worst;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Verdict aggregation: fail veto triggers a block.
|
|
35
|
+
*
|
|
36
|
+
* Priority order:
|
|
37
|
+
* 1. Fail Veto: Any fail → deny (ISO 61508 zero-tolerance)
|
|
38
|
+
* 2. Acceptable: warns are informational only
|
|
39
|
+
*
|
|
40
|
+
* Error exclusion: Detectors that produce no signal (error/skip) are excluded
|
|
41
|
+
* from the denominator.
|
|
42
|
+
*
|
|
43
|
+
* @param allVerdicts - List of verdict strings from all reviewers
|
|
44
|
+
* @returns ReviewDecisionResult with should_deny, reason, and score
|
|
45
|
+
*/
|
|
46
|
+
export function computeReviewDecision(
|
|
47
|
+
allVerdicts: Verdict[],
|
|
48
|
+
): ReviewDecisionResult {
|
|
49
|
+
// Exclude non-signal verdicts
|
|
50
|
+
const signalVerdicts = allVerdicts.filter(
|
|
51
|
+
(v) => v === "pass" || v === "warn" || v === "fail",
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
if (signalVerdicts.length === 0) {
|
|
55
|
+
return { should_deny: false, reason: "no_signal", score: 0 };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Fail blocks unconditionally
|
|
59
|
+
const failCount = signalVerdicts.filter((v) => v === "fail").length;
|
|
60
|
+
if (failCount > 0) {
|
|
61
|
+
return { should_deny: true, reason: "fail_veto", score: 1 };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Warn also blocks — reviewers flagged concerns worth addressing
|
|
65
|
+
const warnCount = signalVerdicts.filter((v) => v === "warn").length;
|
|
66
|
+
const warnRatio = warnCount / signalVerdicts.length;
|
|
67
|
+
if (warnCount > 0) {
|
|
68
|
+
return { should_deny: true, reason: "warn_block", score: warnRatio };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return { should_deny: false, reason: "acceptable", score: 0 };
|
|
72
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
Read this spec and interview me in detail using the AskUserQuestionTool about literally anything:
|
|
2
|
-
- Technical implementation
|
|
3
|
-
- UI & UX
|
|
4
|
-
- Concerns
|
|
5
|
-
- Tradeoffs, etc.
|
|
6
|
-
|
|
7
|
-
But make sure the questions are not obvious
|
|
8
|
-
|
|
9
|
-
Be very in-depth and continue interviewing me continually until it's complete, then write the spec to the file.
|
|
1
|
+
Read this spec and interview me in detail using the AskUserQuestionTool about literally anything:
|
|
2
|
+
- Technical implementation
|
|
3
|
+
- UI & UX
|
|
4
|
+
- Concerns
|
|
5
|
+
- Tradeoffs, etc.
|
|
6
|
+
|
|
7
|
+
But make sure the questions are not obvious
|
|
8
|
+
|
|
9
|
+
Be very in-depth and continue interviewing me continually until it's complete, then write the spec to the file.
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review artifact writing and formatting.
|
|
3
|
-
* Re-exports from artifacts/ subdirectory for backward compatibility.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
formatReviewMarkdown,
|
|
8
|
-
formatCombinedMarkdown,
|
|
9
|
-
buildInlineReviewSummary,
|
|
10
|
-
extractTopIssuesText,
|
|
11
|
-
buildHighIssuesDocument,
|
|
12
|
-
buildCorroborationReport,
|
|
13
|
-
generateReviewIndex,
|
|
14
|
-
buildCombinedJson,
|
|
15
|
-
writeCombinedArtifacts,
|
|
16
|
-
writeFile,
|
|
17
|
-
writeFileNonCritical,
|
|
18
|
-
writeReviewTracker,
|
|
19
|
-
extractPreviousHashes,
|
|
20
|
-
} from "./artifacts/index.js";
|
|
21
|
-
export type { ReviewTrackerEntry } from "./artifacts/index.js";
|