@rsaglobaltech/specgate 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +91 -42
- package/dist/packages/core/src/domain/AgentPrompt.js +12 -0
- package/dist/packages/core/src/domain/AgentPrompt.js.map +1 -1
- package/dist/packages/core/src/domain/Clarification.js +178 -0
- package/dist/packages/core/src/domain/Clarification.js.map +1 -0
- package/dist/packages/core/src/domain/DraftChecklist.js +16 -16
- package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessRun.js.map +1 -1
- package/dist/packages/core/src/domain/RequirementPlan.js +11 -0
- package/dist/packages/core/src/domain/RequirementPlan.js.map +1 -1
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +15 -3
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +5 -0
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
- package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js +4 -1
- package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js.map +1 -1
- package/dist/packages/core/test/unit/clarification.test.js +161 -0
- package/dist/packages/core/test/unit/clarification.test.js.map +1 -0
- package/dist/packages/core/test/unit/rework.test.js +62 -0
- package/dist/packages/core/test/unit/rework.test.js.map +1 -0
- package/dist/scripts/answer.js +10 -0
- package/dist/scripts/answer.js.map +1 -0
- package/dist/scripts/ask.js +10 -0
- package/dist/scripts/ask.js.map +1 -0
- package/dist/scripts/brief_add.js +10 -0
- package/dist/scripts/brief_add.js.map +1 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js +124 -1
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/harness/RunCommand.js +135 -5
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ClarifyCommands.js +275 -0
- package/dist/scripts/cli/commands/spec/ClarifyCommands.js.map +1 -0
- package/dist/scripts/cli/commands/spec/DraftCommand.js +44 -4
- package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +5 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StudioCommand.js +194 -1
- package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
- package/dist/scripts/docs/record-journey.js +1 -0
- package/dist/scripts/docs/record-journey.js.map +1 -1
- package/dist/scripts/docs/record-terminal.js +18 -0
- package/dist/scripts/docs/record-terminal.js.map +1 -1
- package/dist/scripts/draft/drafting-guide.js +11 -1
- package/dist/scripts/draft/drafting-guide.js.map +1 -1
- package/dist/scripts/harness/prompt.js +2 -0
- package/dist/scripts/harness/prompt.js.map +1 -1
- package/dist/scripts/lib/brief-add.js +197 -0
- package/dist/scripts/lib/brief-add.js.map +1 -0
- package/dist/scripts/lib/change-impact.js +156 -0
- package/dist/scripts/lib/change-impact.js.map +1 -0
- package/dist/scripts/lib/change-review.js +145 -0
- package/dist/scripts/lib/change-review.js.map +1 -0
- package/dist/scripts/lib/clarification.js +319 -0
- package/dist/scripts/lib/clarification.js.map +1 -0
- package/dist/scripts/lib/harness-guard.js +18 -0
- package/dist/scripts/lib/harness-guard.js.map +1 -1
- package/dist/scripts/lib/in-flight.js +17 -11
- package/dist/scripts/lib/in-flight.js.map +1 -1
- package/dist/scripts/lib/live-detail.js +3 -2
- package/dist/scripts/lib/live-detail.js.map +1 -1
- package/dist/scripts/lib/live-model.js +35 -4
- package/dist/scripts/lib/live-model.js.map +1 -1
- package/dist/scripts/lib/live-page.js +80 -15
- package/dist/scripts/lib/live-page.js.map +1 -1
- package/dist/scripts/lib/screen-requirements.js +149 -0
- package/dist/scripts/lib/screen-requirements.js.map +1 -0
- package/dist/scripts/lib/studio-app-page.js +960 -0
- package/dist/scripts/lib/studio-app-page.js.map +1 -0
- package/dist/scripts/lib/studio-app.js +362 -0
- package/dist/scripts/lib/studio-app.js.map +1 -0
- package/dist/scripts/lib/studio-route.js +933 -0
- package/dist/scripts/lib/studio-route.js.map +1 -0
- package/dist/scripts/lib/surface.js +52 -0
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/questions.js +10 -0
- package/dist/scripts/questions.js.map +1 -0
- package/package.json +1 -1
- package/templates/harness/harness.config.yaml.tpl +10 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BriefAddCommand = exports.AskCommand = exports.AnswerCommand = exports.QuestionsCommand = void 0;
|
|
37
|
+
const project_root_1 = require("../../../lib/project-root");
|
|
38
|
+
const diagnostics_1 = require("../../../lib/diagnostics");
|
|
39
|
+
const agent_1 = require("../../../lib/agent");
|
|
40
|
+
const command_1 = require("../../../lib/command");
|
|
41
|
+
const harness_events_1 = require("../../../lib/harness-events");
|
|
42
|
+
const clarification_1 = require("../../../lib/clarification");
|
|
43
|
+
const brief_add_1 = require("../../../lib/brief-add");
|
|
44
|
+
const HarnessEvents_1 = require("../../../../packages/core/src/domain/HarnessEvents");
|
|
45
|
+
const ui = __importStar(require("../../../lib/ui"));
|
|
46
|
+
function parse(argv, io, shape, command) {
|
|
47
|
+
const out = { words: [], dir: ".", reviewed: false };
|
|
48
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
49
|
+
const a = argv[i];
|
|
50
|
+
if (a === "--project-dir")
|
|
51
|
+
out.dir = argv[++i] || ".";
|
|
52
|
+
else if (a === "--change")
|
|
53
|
+
out.change = argv[++i];
|
|
54
|
+
else if (a === "--reviewed")
|
|
55
|
+
out.reviewed = true;
|
|
56
|
+
else if (a === "--json")
|
|
57
|
+
continue;
|
|
58
|
+
else if (a.startsWith("-")) {
|
|
59
|
+
io.usage(shape, [
|
|
60
|
+
(0, diagnostics_1.error)("unknown_flag", `Unknown flag for ${command}: ${a}`, {
|
|
61
|
+
fix: `specgate ${command} --help`,
|
|
62
|
+
}),
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
out.words.push(a);
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
function project(dir, io, shape) {
|
|
71
|
+
try {
|
|
72
|
+
return (0, project_root_1.resolveProjectDir)(dir);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return io.usage(shape, [
|
|
76
|
+
(0, diagnostics_1.error)("project_not_found", err.message, {
|
|
77
|
+
fix: "Run from inside a spec-driven project, or pass --project-dir.",
|
|
78
|
+
}),
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
class QuestionsCommand extends command_1.BaseCommand {
|
|
83
|
+
execute() {
|
|
84
|
+
const argv = this.args;
|
|
85
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
86
|
+
process.stdout.write("Usage:\n specgate questions [--project-dir <path>] [--json]\n\n" +
|
|
87
|
+
"Everything waiting for an answer: the open questions of every open change and of\n" +
|
|
88
|
+
"docs/specs/questions.md, with what each blocks, and the requirements in\n" +
|
|
89
|
+
"Needs Clarification no open question names. Answer with specgate answer.\n");
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
const shape = { questions: null };
|
|
93
|
+
const io = (0, agent_1.agentIo)((0, agent_1.wantsJson)(argv));
|
|
94
|
+
const p = parse(argv, io, shape, "questions");
|
|
95
|
+
const dir = project(p.dir, io, shape);
|
|
96
|
+
const w = (0, clarification_1.waiting)(dir);
|
|
97
|
+
io.emit({
|
|
98
|
+
questions: {
|
|
99
|
+
open: w.questions.map((q) => ({
|
|
100
|
+
id: q.id,
|
|
101
|
+
change: q.change,
|
|
102
|
+
text: q.text,
|
|
103
|
+
blocks: q.blocks,
|
|
104
|
+
file: q.file,
|
|
105
|
+
line: q.line,
|
|
106
|
+
})),
|
|
107
|
+
waitingWithoutQuestion: w.requirements,
|
|
108
|
+
},
|
|
109
|
+
}, () => {
|
|
110
|
+
process.stdout.write(ui.header("questions"));
|
|
111
|
+
if (w.questions.length === 0 && w.requirements.length === 0) {
|
|
112
|
+
process.stdout.write(ui.ok("Nothing waits for an answer.") + "\n");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
for (const q of w.questions) {
|
|
116
|
+
process.stdout.write(` ${q.id} ${ui.muted(q.change)} ${q.text}\n` +
|
|
117
|
+
` ${ui.muted(q.blocks.length ? `blocks ${q.blocks.join(", ")}` : "blocks nothing")}` +
|
|
118
|
+
` ${ui.muted(`→ specgate answer ${q.id} "…"${q.change !== "project" ? ` --change ${q.change}` : ""}`)}\n`);
|
|
119
|
+
}
|
|
120
|
+
if (w.requirements.length) {
|
|
121
|
+
process.stdout.write(`\n ${ui.muted("Needs Clarification with no open question:")}\n`);
|
|
122
|
+
for (const r of w.requirements) {
|
|
123
|
+
process.stdout.write(` ${r.requirement} ${r.title} ${ui.muted(`→ specgate ask ${r.requirement} "…"`)}\n`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.QuestionsCommand = QuestionsCommand;
|
|
130
|
+
class AnswerCommand extends command_1.BaseCommand {
|
|
131
|
+
execute() {
|
|
132
|
+
const argv = this.args;
|
|
133
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
134
|
+
process.stdout.write('Usage:\n specgate answer <Q> "<answer>" [--change <id>] [--project-dir <path>] [--json]\n' +
|
|
135
|
+
" specgate answer <Q> --reviewed [--change <id>]\n\n" +
|
|
136
|
+
"Writes the answer into the question's row, adds it to assumptions.md as an\n" +
|
|
137
|
+
"assumption to review, and lists the requirements to revise. The draft checklist\n" +
|
|
138
|
+
"waits until --reviewed says the requirements reflect it. --change picks the\n" +
|
|
139
|
+
"change when more than one has that question.\n");
|
|
140
|
+
process.exit(0);
|
|
141
|
+
}
|
|
142
|
+
const shape = { answer: null };
|
|
143
|
+
const io = (0, agent_1.agentIo)((0, agent_1.wantsJson)(argv));
|
|
144
|
+
const p = parse(argv, io, shape, "answer");
|
|
145
|
+
const [id, ...rest] = p.words;
|
|
146
|
+
const text = rest.join(" ").trim();
|
|
147
|
+
if (!id || (!p.reviewed && !text)) {
|
|
148
|
+
io.usage(shape, [
|
|
149
|
+
(0, diagnostics_1.error)("missing_argument", 'answer needs a question id and the answer: specgate answer Q4 "…"', {
|
|
150
|
+
fix: "specgate questions lists the open ones.",
|
|
151
|
+
}),
|
|
152
|
+
]);
|
|
153
|
+
}
|
|
154
|
+
const dir = project(p.dir, io, shape);
|
|
155
|
+
if (p.reviewed) {
|
|
156
|
+
const r = (0, clarification_1.reviewed)(dir, id, p.change);
|
|
157
|
+
if (!r.ok)
|
|
158
|
+
io.fail(shape, [(0, diagnostics_1.error)(r.code, r.message, { fix: "specgate questions" })]);
|
|
159
|
+
else
|
|
160
|
+
io.emit({ answer: { question: id, change: r.change, reviewed: r.ids } }, () => process.stdout.write(ui.ok(`${r.ids.join(", ")} decided — ${id}'s answer is in the specification.`) + "\n"));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const r = (0, clarification_1.answer)(dir, id, text, p.change);
|
|
164
|
+
if (!r.ok) {
|
|
165
|
+
io.fail(shape, [
|
|
166
|
+
(0, diagnostics_1.error)(r.code, r.message, {
|
|
167
|
+
fix: r.changes && r.changes.length > 1 ? `--change ${r.changes[0]}` : "specgate questions",
|
|
168
|
+
}),
|
|
169
|
+
]);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
io.emit({
|
|
173
|
+
answer: {
|
|
174
|
+
question: r.question,
|
|
175
|
+
change: r.change,
|
|
176
|
+
assumption: r.assumption,
|
|
177
|
+
revise: r.revise,
|
|
178
|
+
},
|
|
179
|
+
}, () => process.stdout.write(ui.ok(`${r.question} answered in ${r.change}; ${r.assumption} added to review.`) +
|
|
180
|
+
"\n" +
|
|
181
|
+
(r.revise.length
|
|
182
|
+
? ` Revise ${r.revise.join(", ")} so they say it, then: specgate answer ${r.question} --reviewed\n`
|
|
183
|
+
: ` Then: specgate answer ${r.question} --reviewed\n`)));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.AnswerCommand = AnswerCommand;
|
|
187
|
+
class AskCommand extends command_1.BaseCommand {
|
|
188
|
+
execute() {
|
|
189
|
+
const argv = this.args;
|
|
190
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
191
|
+
process.stdout.write('Usage:\n specgate ask <REQ> "<question>" [--project-dir <path>] [--json]\n\n' +
|
|
192
|
+
"Asks instead of guessing: adds the question to the change that defines the\n" +
|
|
193
|
+
"requirement (docs/specs/questions.md when a capability does) and sets it\n" +
|
|
194
|
+
"Needs Clarification. Inside the harness it only records the question: the\n" +
|
|
195
|
+
"harness stops the requirement and writes it into the project.\n");
|
|
196
|
+
process.exit(0);
|
|
197
|
+
}
|
|
198
|
+
const shape = { ask: null };
|
|
199
|
+
const io = (0, agent_1.agentIo)((0, agent_1.wantsJson)(argv));
|
|
200
|
+
const p = parse(argv, io, shape, "ask");
|
|
201
|
+
const [req, ...rest] = p.words;
|
|
202
|
+
const text = rest.join(" ").trim();
|
|
203
|
+
if (!req || !/^REQ-\d+$/.test(req) || !text) {
|
|
204
|
+
io.usage(shape, [
|
|
205
|
+
(0, diagnostics_1.error)("missing_argument", 'ask needs a requirement and the question: specgate ask REQ-007 "…"', {
|
|
206
|
+
fix: "specgate ask --help",
|
|
207
|
+
}),
|
|
208
|
+
]);
|
|
209
|
+
}
|
|
210
|
+
// Inside the harness the agent may not edit the specification: the
|
|
211
|
+
// question becomes an event, and the harness writes it (REQ-189).
|
|
212
|
+
const eventsFile = process.env[HarnessEvents_1.EVENTS_FILE_VAR];
|
|
213
|
+
if (eventsFile && process.env[HarnessEvents_1.EVENTS_REQ_VAR]) {
|
|
214
|
+
(0, harness_events_1.appendEvent)(eventsFile, { type: "question", text }, process.env[HarnessEvents_1.EVENTS_REQ_VAR] || req, Number(process.env[HarnessEvents_1.EVENTS_ATTEMPT_VAR]) || undefined);
|
|
215
|
+
io.emit({ ask: { requirement: req, recorded: "harness" } }, () => process.stdout.write(ui.ok(`Question recorded for ${req}. Stop here: the harness asks the person and ends this attempt.`) + "\n"));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const dir = project(p.dir, io, shape);
|
|
219
|
+
const r = (0, clarification_1.ask)(dir, req, text);
|
|
220
|
+
if (!r.ok) {
|
|
221
|
+
io.fail(shape, [
|
|
222
|
+
(0, diagnostics_1.error)(r.code, r.message, { fix: "specgate status lists the requirements." }),
|
|
223
|
+
]);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
io.emit({ ask: { requirement: req, change: r.change, question: r.question, file: r.file } }, () => process.stdout.write(ui.ok(`${r.question} added to ${r.file}; ${req} is Needs Clarification.`) +
|
|
227
|
+
"\n" +
|
|
228
|
+
` Answer with: specgate answer ${r.question} "…"${r.change !== "project" ? ` --change ${r.change}` : ""}\n`));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.AskCommand = AskCommand;
|
|
232
|
+
class BriefAddCommand extends command_1.BaseCommand {
|
|
233
|
+
execute() {
|
|
234
|
+
const argv = this.args;
|
|
235
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
236
|
+
process.stdout.write('Usage:\n specgate brief add <module> "<text>" [--project-dir <path>] [--json]\n\n' +
|
|
237
|
+
"A new requirement for a module the brief lists: appends the line to the brief\n" +
|
|
238
|
+
"under Additions, and adds a requirement quoting it to the module's open change\n" +
|
|
239
|
+
"(draft-<module> or <module>-additions, created when there is none). Its title\n" +
|
|
240
|
+
"and statement are yours to write; specgate draft --check asks for them.\n");
|
|
241
|
+
process.exit(0);
|
|
242
|
+
}
|
|
243
|
+
const shape = { brief: null };
|
|
244
|
+
const io = (0, agent_1.agentIo)((0, agent_1.wantsJson)(argv));
|
|
245
|
+
const p = parse(argv, io, shape, "brief add");
|
|
246
|
+
const [module, ...rest] = p.words;
|
|
247
|
+
const text = rest.join(" ").trim();
|
|
248
|
+
if (!module || !text) {
|
|
249
|
+
io.usage(shape, [
|
|
250
|
+
(0, diagnostics_1.error)("missing_argument", 'brief add needs a module and the text: specgate brief add fichas "…"', {
|
|
251
|
+
fix: "specgate brief add --help",
|
|
252
|
+
}),
|
|
253
|
+
]);
|
|
254
|
+
}
|
|
255
|
+
const dir = project(p.dir, io, shape);
|
|
256
|
+
const r = (0, brief_add_1.briefAdd)(dir, module, text, new Date().toISOString().slice(0, 10));
|
|
257
|
+
if (!r.ok) {
|
|
258
|
+
io.fail(shape, [(0, diagnostics_1.error)(r.code, r.message, { fix: r.fix })]);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
io.emit({
|
|
262
|
+
brief: {
|
|
263
|
+
module,
|
|
264
|
+
change: r.change,
|
|
265
|
+
requirement: r.requirement,
|
|
266
|
+
created: r.created,
|
|
267
|
+
delta: r.delta,
|
|
268
|
+
},
|
|
269
|
+
}, () => process.stdout.write(ui.ok(`${r.requirement} added to ${r.change}${r.created ? " (new change)" : ""}.`) +
|
|
270
|
+
"\n" +
|
|
271
|
+
` Write its title, statement and a scenario in ${r.delta}, then: specgate draft --check ${r.change}\n`));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.BriefAddCommand = BriefAddCommand;
|
|
275
|
+
//# sourceMappingURL=ClarifyCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClarifyCommands.js","sourceRoot":"","sources":["../../../../../scripts/cli/commands/spec/ClarifyCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,7 @@ const DraftChecklist_1 = require("../../../../packages/core/src/domain/DraftChec
|
|
|
73
73
|
const ChangeWorkspace_1 = require("../../../../packages/core/src/infrastructure/ChangeWorkspace");
|
|
74
74
|
const ChangeTemplates_1 = require("../../../../packages/core/src/domain/ChangeTemplates");
|
|
75
75
|
const IdsAcrossBranches_1 = require("../../../../packages/core/src/infrastructure/IdsAcrossBranches");
|
|
76
|
+
const HarnessConfigFile_1 = require("../../../../packages/core/src/infrastructure/HarnessConfigFile");
|
|
76
77
|
const DiskLanguageRepository_1 = require("../../../../packages/core/src/infrastructure/DiskLanguageRepository");
|
|
77
78
|
const drafting_guide_1 = require("../../../draft/drafting-guide");
|
|
78
79
|
const confined_agent_1 = require("../../../draft/confined-agent");
|
|
@@ -107,6 +108,7 @@ function usage() {
|
|
|
107
108
|
" --agent <cmd> Your agent's command. It gets the drafting guide on standard input,\n" +
|
|
108
109
|
" or in a file if the command contains {prompt_file}. Whatever it writes\n" +
|
|
109
110
|
" outside the draft is undone.\n" +
|
|
111
|
+
" --profile <name> The agent of that profile in .harness/profiles.yaml, instead of --agent.\n" +
|
|
110
112
|
" [--max-requirements <n>] [--project-dir <dir>] [--json]\n\n" +
|
|
111
113
|
"The checklist (ADR-0029):\n" +
|
|
112
114
|
" D1 every requirement has a scenario D5 a cited law or standard names its source\n" +
|
|
@@ -165,6 +167,8 @@ function parseArgs(argv) {
|
|
|
165
167
|
}
|
|
166
168
|
else if (a === "--agent")
|
|
167
169
|
o.agent = value();
|
|
170
|
+
else if (a === "--profile")
|
|
171
|
+
o.profile = value();
|
|
168
172
|
else if (a === "--new-brief")
|
|
169
173
|
o.newBrief = true;
|
|
170
174
|
else if (a === "--project-dir")
|
|
@@ -183,7 +187,10 @@ function parseArgs(argv) {
|
|
|
183
187
|
if (o.check && o.module) {
|
|
184
188
|
throw new Error("give a module or --check <change-id>, not both");
|
|
185
189
|
}
|
|
186
|
-
if (o.
|
|
190
|
+
if (o.profile && o.agent) {
|
|
191
|
+
throw new Error("give --agent or --profile, not both");
|
|
192
|
+
}
|
|
193
|
+
if (o.checkBrief && (o.module || o.agent || o.profile || o.newBrief)) {
|
|
187
194
|
throw new Error("--check only checks the brief: run it on its own");
|
|
188
195
|
}
|
|
189
196
|
if (o.module && !ChangeWorkspace_1.CHANGE_ID_RE.test(o.module)) {
|
|
@@ -659,6 +666,18 @@ class DraftCommand extends command_1.BaseCommand {
|
|
|
659
666
|
]);
|
|
660
667
|
}
|
|
661
668
|
const opts = o;
|
|
669
|
+
if (opts.profile) {
|
|
670
|
+
try {
|
|
671
|
+
opts.agent = (0, HarnessConfigFile_1.resolveProfileAgent)((0, project_root_1.resolveProjectDir)(opts.projectDir), opts.profile);
|
|
672
|
+
}
|
|
673
|
+
catch (err) {
|
|
674
|
+
io0.usage({ draft: null }, [
|
|
675
|
+
(0, diagnostics_1.error)("draft_profile", err.message, {
|
|
676
|
+
fix: "Name a profile .harness/profiles.yaml declares, or pass --agent.",
|
|
677
|
+
}),
|
|
678
|
+
]);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
662
681
|
if (opts.checkBrief)
|
|
663
682
|
return this.checkBrief(opts);
|
|
664
683
|
if (opts.check)
|
|
@@ -1060,14 +1079,27 @@ class DraftCommand extends command_1.BaseCommand {
|
|
|
1060
1079
|
]);
|
|
1061
1080
|
}
|
|
1062
1081
|
const listed = (0, DraftChecklist_1.briefModules)(brief.text);
|
|
1082
|
+
// Drafts opened before this one and still unwritten stop growing once it
|
|
1083
|
+
// takes the next ids: only the last range can (REQ-197).
|
|
1084
|
+
const waiting = unwrittenDrafts(projectDir, `draft-${opts.module}`);
|
|
1063
1085
|
const opened = openDraft(projectDir, opts.module, brief.rel, opts);
|
|
1064
|
-
const
|
|
1086
|
+
const ahead = waiting.length
|
|
1065
1087
|
? [
|
|
1066
|
-
(0, diagnostics_1.info)("
|
|
1067
|
-
fix:
|
|
1088
|
+
(0, diagnostics_1.info)("draft_other_unwritten", `${waiting.join(", ")} ${waiting.length === 1 ? "is" : "are"} not written yet; ${opened.changeId} now holds the last id range, so ${waiting.length === 1 ? "it" : "they"} can no longer grow.`, {
|
|
1089
|
+
fix: `Write ${waiting[0]} first, or before opening the next module grow it with specgate draft ${waiting[0].replace(/^draft-/, "")} --reserve <n>.`,
|
|
1068
1090
|
}),
|
|
1069
1091
|
]
|
|
1070
1092
|
: [];
|
|
1093
|
+
const notes = [
|
|
1094
|
+
...ahead,
|
|
1095
|
+
...(listed.length > 0 && !listed.includes(opts.module)
|
|
1096
|
+
? [
|
|
1097
|
+
(0, diagnostics_1.info)("draft_module_not_in_brief", `${opts.module} is not among the brief's modules (${listed.join(", ")}).`, {
|
|
1098
|
+
fix: "Add it to `modules:` in the brief's front matter, so `specgate propose --from-brief` lists it.",
|
|
1099
|
+
}),
|
|
1100
|
+
]
|
|
1101
|
+
: []),
|
|
1102
|
+
];
|
|
1071
1103
|
if (opts.agent)
|
|
1072
1104
|
return this.withAgent(opts, projectDir, brief.rel, opened.created);
|
|
1073
1105
|
io.emit({
|
|
@@ -1322,4 +1354,12 @@ function writeBriefFindings(findings) {
|
|
|
1322
1354
|
out.write(ui.fix(d.fix));
|
|
1323
1355
|
}
|
|
1324
1356
|
}
|
|
1357
|
+
/** Open drafts other than `except` whose deltas hold no requirement yet (REQ-197). */
|
|
1358
|
+
function unwrittenDrafts(projectDir, except) {
|
|
1359
|
+
return (0, ChangeWorkspace_1.listChangeIds)(projectDir).filter((change) => {
|
|
1360
|
+
if (!change.startsWith("draft-") || change === except)
|
|
1361
|
+
return false;
|
|
1362
|
+
return !(0, ChangeWorkspace_1.listDeltas)(projectDir, change).some((d) => /^###\s+Requirement:\s+REQ-\d+\s+[—–-]\s+[^<\s]/m.test(fs.readFileSync(d.file, "utf8")));
|
|
1363
|
+
});
|
|
1364
|
+
}
|
|
1325
1365
|
//# sourceMappingURL=DraftCommand.js.map
|