@kiwidata/grimoire 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +8 -0
- package/AGENTS.md +217 -0
- package/README.md +748 -0
- package/bin/grimoire.js +2 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +42 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/archive.d.ts +3 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +22 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/branch-check.d.ts +3 -0
- package/dist/commands/branch-check.d.ts.map +1 -0
- package/dist/commands/branch-check.js +16 -0
- package/dist/commands/branch-check.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +22 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/ci.d.ts +3 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +18 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +10 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/docs.d.ts +3 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +11 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +13 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +21 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +22 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +15 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/map.d.ts +3 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +17 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/pr.d.ts +3 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +17 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +12 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-quality.d.ts +3 -0
- package/dist/commands/test-quality.d.ts.map +1 -0
- package/dist/commands/test-quality.js +37 -0
- package/dist/commands/test-quality.js.map +1 -0
- package/dist/commands/trace.d.ts +3 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +12 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +22 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +17 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/archive.d.ts +9 -0
- package/dist/core/archive.d.ts.map +1 -0
- package/dist/core/archive.js +92 -0
- package/dist/core/archive.js.map +1 -0
- package/dist/core/branch-check.d.ts +27 -0
- package/dist/core/branch-check.d.ts.map +1 -0
- package/dist/core/branch-check.js +205 -0
- package/dist/core/branch-check.js.map +1 -0
- package/dist/core/check.d.ts +24 -0
- package/dist/core/check.d.ts.map +1 -0
- package/dist/core/check.js +372 -0
- package/dist/core/check.js.map +1 -0
- package/dist/core/ci.d.ts +24 -0
- package/dist/core/ci.d.ts.map +1 -0
- package/dist/core/ci.js +162 -0
- package/dist/core/ci.js.map +1 -0
- package/dist/core/detect.d.ts +10 -0
- package/dist/core/detect.d.ts.map +1 -0
- package/dist/core/detect.js +368 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/diff.d.ts +29 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +197 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/doc-style.d.ts +16 -0
- package/dist/core/doc-style.d.ts.map +1 -0
- package/dist/core/doc-style.js +192 -0
- package/dist/core/doc-style.js.map +1 -0
- package/dist/core/docs.d.ts +6 -0
- package/dist/core/docs.d.ts.map +1 -0
- package/dist/core/docs.js +478 -0
- package/dist/core/docs.js.map +1 -0
- package/dist/core/health.d.ts +7 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +489 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/hooks.d.ts +5 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +168 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/init.d.ts +9 -0
- package/dist/core/init.d.ts.map +1 -0
- package/dist/core/init.js +563 -0
- package/dist/core/init.js.map +1 -0
- package/dist/core/list.d.ts +4 -0
- package/dist/core/list.d.ts.map +1 -0
- package/dist/core/list.js +170 -0
- package/dist/core/list.js.map +1 -0
- package/dist/core/log.d.ts +8 -0
- package/dist/core/log.d.ts.map +1 -0
- package/dist/core/log.js +150 -0
- package/dist/core/log.js.map +1 -0
- package/dist/core/map.d.ts +9 -0
- package/dist/core/map.d.ts.map +1 -0
- package/dist/core/map.js +302 -0
- package/dist/core/map.js.map +1 -0
- package/dist/core/pr.d.ts +9 -0
- package/dist/core/pr.d.ts.map +1 -0
- package/dist/core/pr.js +273 -0
- package/dist/core/pr.js.map +1 -0
- package/dist/core/shared-setup.d.ts +52 -0
- package/dist/core/shared-setup.d.ts.map +1 -0
- package/dist/core/shared-setup.js +221 -0
- package/dist/core/shared-setup.js.map +1 -0
- package/dist/core/status.d.ts +6 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +114 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/test-quality.d.ts +33 -0
- package/dist/core/test-quality.d.ts.map +1 -0
- package/dist/core/test-quality.js +378 -0
- package/dist/core/test-quality.js.map +1 -0
- package/dist/core/trace.d.ts +6 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +211 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/update.d.ts +10 -0
- package/dist/core/update.d.ts.map +1 -0
- package/dist/core/update.js +149 -0
- package/dist/core/update.js.map +1 -0
- package/dist/core/validate.d.ts +20 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +275 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +61 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +172 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fs.d.ts +17 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +38 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +35 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/spawn.d.ts +5 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +34 -0
- package/dist/utils/spawn.js.map +1 -0
- package/package.json +68 -0
- package/skills/grimoire-apply/SKILL.md +274 -0
- package/skills/grimoire-audit/SKILL.md +129 -0
- package/skills/grimoire-branch-guard/SKILL.md +111 -0
- package/skills/grimoire-bug/SKILL.md +160 -0
- package/skills/grimoire-bug-explore/SKILL.md +242 -0
- package/skills/grimoire-bug-report/SKILL.md +237 -0
- package/skills/grimoire-bug-session/SKILL.md +222 -0
- package/skills/grimoire-bug-triage/SKILL.md +274 -0
- package/skills/grimoire-commit/SKILL.md +150 -0
- package/skills/grimoire-discover/SKILL.md +297 -0
- package/skills/grimoire-draft/SKILL.md +202 -0
- package/skills/grimoire-plan/SKILL.md +329 -0
- package/skills/grimoire-pr/SKILL.md +134 -0
- package/skills/grimoire-pr-review/SKILL.md +240 -0
- package/skills/grimoire-refactor/SKILL.md +251 -0
- package/skills/grimoire-remove/SKILL.md +112 -0
- package/skills/grimoire-review/SKILL.md +247 -0
- package/skills/grimoire-verify/SKILL.md +223 -0
- package/skills/references/bug-classification.md +154 -0
- package/skills/references/build-vs-buy.md +77 -0
- package/skills/references/elicitation-personas.md +118 -0
- package/skills/references/refactor-register-format.md +88 -0
- package/skills/references/refactor-scan-categories.md +102 -0
- package/skills/references/schema-format.md +68 -0
- package/skills/references/security-compliance.md +110 -0
- package/skills/references/testing-contracts.md +93 -0
- package/templates/context.yml +110 -0
- package/templates/debt-exceptions.yml +61 -0
- package/templates/decision.md +50 -0
- package/templates/dupignore +93 -0
- package/templates/example.feature +24 -0
- package/templates/manifest.md +29 -0
- package/templates/mapignore +58 -0
- package/templates/mapkeys +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/core/pr.ts"],"names":[],"mappings":"AAYA,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AASD,wBAAsB,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFlE"}
|
package/dist/core/pr.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { execFile } from "node:child_process";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { simpleGit } from "simple-git";
|
|
7
|
+
import { loadConfig } from "../utils/config.js";
|
|
8
|
+
import { findProjectRoot, resolveChangePath } from "../utils/paths.js";
|
|
9
|
+
import { spawnWithStdin } from "../utils/spawn.js";
|
|
10
|
+
const execFileAsync = promisify(execFile);
|
|
11
|
+
export async function generatePr(options) {
|
|
12
|
+
const root = await findProjectRoot();
|
|
13
|
+
const config = await loadConfig(root);
|
|
14
|
+
const changesDir = join(root, ".grimoire", "changes");
|
|
15
|
+
// Find the change
|
|
16
|
+
const changeId = options.changeId ?? (await detectActiveChange(changesDir));
|
|
17
|
+
if (!changeId) {
|
|
18
|
+
throw new Error("No active change found. Specify a change ID.");
|
|
19
|
+
}
|
|
20
|
+
const changeDir = resolveChangePath(root, changeId);
|
|
21
|
+
// Read artifacts
|
|
22
|
+
const manifest = await readFileOrEmpty(join(changeDir, "manifest.md"));
|
|
23
|
+
const tasks = await readFileOrEmpty(join(changeDir, "tasks.md"));
|
|
24
|
+
const features = await readArtifactFiles(changeDir, "features", ".feature");
|
|
25
|
+
const decisions = await readArtifactFiles(changeDir, "decisions", ".md");
|
|
26
|
+
// Parse manifest
|
|
27
|
+
const whySection = extractSection(manifest, "Why");
|
|
28
|
+
const featureChanges = extractSection(manifest, "Feature Changes");
|
|
29
|
+
const scenarios = extractScenarios(features);
|
|
30
|
+
const decisionTitles = extractDecisionTitles(decisions);
|
|
31
|
+
const taskProgress = countTasks(tasks);
|
|
32
|
+
// Generate title
|
|
33
|
+
const manifestTitle = extractTitle(manifest);
|
|
34
|
+
const commitStyle = config.project.commit_style ?? "conventional";
|
|
35
|
+
const title = formatTitle(manifestTitle, changeId, commitStyle);
|
|
36
|
+
// Generate body
|
|
37
|
+
const body = composePrBody({
|
|
38
|
+
why: whySection,
|
|
39
|
+
featureChanges,
|
|
40
|
+
scenarios,
|
|
41
|
+
decisionTitles,
|
|
42
|
+
taskProgress,
|
|
43
|
+
changeId,
|
|
44
|
+
});
|
|
45
|
+
// Optional review
|
|
46
|
+
let reviewOutput;
|
|
47
|
+
if (options.review) {
|
|
48
|
+
reviewOutput = await runPostImplReview(root, config.llm.coding.command, body);
|
|
49
|
+
}
|
|
50
|
+
const output = { title, body, changeId, review: reviewOutput };
|
|
51
|
+
if (options.json) {
|
|
52
|
+
console.log(JSON.stringify(output, null, 2));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Display
|
|
56
|
+
console.log(chalk.bold("\nPR Preview\n"));
|
|
57
|
+
console.log(chalk.bold("Title: ") + title);
|
|
58
|
+
console.log(chalk.dim("─".repeat(60)));
|
|
59
|
+
console.log(body);
|
|
60
|
+
if (taskProgress.incomplete > 0) {
|
|
61
|
+
console.log(chalk.yellow(`\n⚠ ${taskProgress.incomplete} task(s) still incomplete — consider finishing before creating PR.`));
|
|
62
|
+
}
|
|
63
|
+
if (reviewOutput) {
|
|
64
|
+
console.log(chalk.dim("─".repeat(60)));
|
|
65
|
+
console.log(chalk.bold("\nPost-Implementation Review:\n"));
|
|
66
|
+
console.log(reviewOutput);
|
|
67
|
+
}
|
|
68
|
+
// Create PR if requested
|
|
69
|
+
if (options.create) {
|
|
70
|
+
await createPr(root, title, body);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log(chalk.dim("\nRun with --create to create the PR via gh/glab."));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function detectActiveChange(changesDir) {
|
|
77
|
+
let entries;
|
|
78
|
+
try {
|
|
79
|
+
entries = await readdir(changesDir, { withFileTypes: true });
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const changes = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
85
|
+
if (changes.length === 1)
|
|
86
|
+
return changes[0];
|
|
87
|
+
if (changes.length > 1) {
|
|
88
|
+
console.log(chalk.bold("Active changes:"));
|
|
89
|
+
for (const c of changes) {
|
|
90
|
+
console.log(` - ${c}`);
|
|
91
|
+
}
|
|
92
|
+
throw new Error("Multiple active changes. Specify one: grimoire pr <change-id>");
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
async function readFileOrEmpty(path) {
|
|
97
|
+
try {
|
|
98
|
+
return await readFile(path, "utf-8");
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return "";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function readArtifactFiles(changeDir, subdir, ext) {
|
|
105
|
+
const dir = join(changeDir, subdir);
|
|
106
|
+
try {
|
|
107
|
+
const files = await collectFiles(dir, ext);
|
|
108
|
+
const contents = [];
|
|
109
|
+
for (const f of files) {
|
|
110
|
+
contents.push(await readFile(f, "utf-8"));
|
|
111
|
+
}
|
|
112
|
+
return contents;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function collectFiles(dir, ext) {
|
|
119
|
+
const result = [];
|
|
120
|
+
const entries = await readdir(dir, { withFileTypes: true, recursive: true });
|
|
121
|
+
for (const entry of entries) {
|
|
122
|
+
if (entry.isFile() && entry.name.endsWith(ext)) {
|
|
123
|
+
const parent = entry.parentPath ?? entry.path;
|
|
124
|
+
result.push(join(parent, entry.name));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
function extractTitle(manifest) {
|
|
130
|
+
const match = manifest.match(/^#\s+Change:\s*(.+)/m);
|
|
131
|
+
return match ? match[1].trim() : "Untitled change";
|
|
132
|
+
}
|
|
133
|
+
function extractSection(content, heading) {
|
|
134
|
+
const regex = new RegExp(`^##\\s+${heading}\\s*\n([\\s\\S]*?)(?=^##\\s|$)`, "m");
|
|
135
|
+
const match = content.match(regex);
|
|
136
|
+
return match ? match[1].trim() : "";
|
|
137
|
+
}
|
|
138
|
+
function extractScenarios(features) {
|
|
139
|
+
const scenarios = [];
|
|
140
|
+
for (const content of features) {
|
|
141
|
+
const matches = content.matchAll(/^\s*Scenario(?:\s+Outline)?:\s*(.+)/gm);
|
|
142
|
+
for (const m of matches) {
|
|
143
|
+
scenarios.push(m[1].trim());
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return scenarios;
|
|
147
|
+
}
|
|
148
|
+
function extractDecisionTitles(decisions) {
|
|
149
|
+
const titles = [];
|
|
150
|
+
for (const content of decisions) {
|
|
151
|
+
const match = content.match(/^#\s+(.+)/m);
|
|
152
|
+
if (match)
|
|
153
|
+
titles.push(match[1].trim());
|
|
154
|
+
}
|
|
155
|
+
return titles;
|
|
156
|
+
}
|
|
157
|
+
function countTasks(tasks) {
|
|
158
|
+
const complete = (tasks.match(/- \[x\]/gi) || []).length;
|
|
159
|
+
const incomplete = (tasks.match(/- \[ \]/g) || []).length;
|
|
160
|
+
return { complete, incomplete };
|
|
161
|
+
}
|
|
162
|
+
function formatTitle(manifestTitle, changeId, style) {
|
|
163
|
+
const cleanTitle = manifestTitle.toLowerCase().replace(/[^a-z0-9\s-]/g, "");
|
|
164
|
+
const type = changeId.startsWith("fix-") ? "fix" : "feat";
|
|
165
|
+
if (style === "angular") {
|
|
166
|
+
// Try to extract scope from change-id
|
|
167
|
+
const parts = changeId.replace(/^(add|update|fix|remove)-/, "").split("-");
|
|
168
|
+
const scope = parts[0];
|
|
169
|
+
return `${type}(${scope}): ${cleanTitle}`;
|
|
170
|
+
}
|
|
171
|
+
return `${type}: ${cleanTitle}`;
|
|
172
|
+
}
|
|
173
|
+
function composePrBody(data) {
|
|
174
|
+
const sections = [];
|
|
175
|
+
sections.push("## Summary");
|
|
176
|
+
sections.push(data.why || "_No summary provided in manifest._");
|
|
177
|
+
sections.push("");
|
|
178
|
+
if (data.featureChanges) {
|
|
179
|
+
sections.push("## Changes");
|
|
180
|
+
sections.push(data.featureChanges);
|
|
181
|
+
sections.push("");
|
|
182
|
+
}
|
|
183
|
+
if (data.scenarios.length > 0) {
|
|
184
|
+
sections.push("## Scenarios");
|
|
185
|
+
for (const s of data.scenarios) {
|
|
186
|
+
sections.push(`- "${s}"`);
|
|
187
|
+
}
|
|
188
|
+
sections.push("");
|
|
189
|
+
}
|
|
190
|
+
if (data.decisionTitles.length > 0) {
|
|
191
|
+
sections.push("## Decisions");
|
|
192
|
+
for (const d of data.decisionTitles) {
|
|
193
|
+
sections.push(`- ${d}`);
|
|
194
|
+
}
|
|
195
|
+
sections.push("");
|
|
196
|
+
}
|
|
197
|
+
sections.push("## Test Plan");
|
|
198
|
+
sections.push("- [ ] All new feature scenarios pass");
|
|
199
|
+
sections.push("- [ ] No regressions in existing tests");
|
|
200
|
+
if (data.decisionTitles.length > 0) {
|
|
201
|
+
sections.push("- [ ] ADR confirmation criteria met");
|
|
202
|
+
}
|
|
203
|
+
sections.push("");
|
|
204
|
+
const total = data.taskProgress.complete + data.taskProgress.incomplete;
|
|
205
|
+
sections.push(`Tasks: ${data.taskProgress.complete}/${total} complete`);
|
|
206
|
+
sections.push("");
|
|
207
|
+
sections.push(`Change: ${data.changeId}`);
|
|
208
|
+
return sections.join("\n");
|
|
209
|
+
}
|
|
210
|
+
async function runPostImplReview(root, llmCommand, prBody) {
|
|
211
|
+
try {
|
|
212
|
+
const git = simpleGit(root);
|
|
213
|
+
const diff = await git.diff(["main...HEAD"]);
|
|
214
|
+
if (!diff.trim()) {
|
|
215
|
+
return "No diff found against main. Skipping review.";
|
|
216
|
+
}
|
|
217
|
+
// Truncate diff if very large
|
|
218
|
+
const maxDiffLen = 50_000;
|
|
219
|
+
const truncatedDiff = diff.length > maxDiffLen
|
|
220
|
+
? diff.slice(0, maxDiffLen) + "\n\n... (diff truncated)"
|
|
221
|
+
: diff;
|
|
222
|
+
const prompt = `Review this pull request for issues the design review might have missed now that real code exists.
|
|
223
|
+
|
|
224
|
+
PR Description:
|
|
225
|
+
${prBody}
|
|
226
|
+
|
|
227
|
+
Diff:
|
|
228
|
+
${truncatedDiff}
|
|
229
|
+
|
|
230
|
+
Focus on:
|
|
231
|
+
- Implementation doesn't match the scenarios described
|
|
232
|
+
- Missing error handling for edge cases in the scenarios
|
|
233
|
+
- Security issues in the actual code
|
|
234
|
+
- Dependencies added that weren't in the plan
|
|
235
|
+
- Files changed that aren't covered by the task list (scope creep)
|
|
236
|
+
- Test quality: are step definitions making real assertions?
|
|
237
|
+
|
|
238
|
+
Flag issues as **blocker** or **suggestion**. Be concise.`;
|
|
239
|
+
const output = await spawnWithStdin(llmCommand, ["--print"], prompt, root);
|
|
240
|
+
return output;
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
return `Review failed: ${err instanceof Error ? err.message : "unknown error"}`;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async function createPr(root, title, body) {
|
|
247
|
+
// Try gh first, then glab
|
|
248
|
+
for (const tool of ["gh", "glab"]) {
|
|
249
|
+
try {
|
|
250
|
+
await execFileAsync("which", [tool]);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const createCmd = tool === "gh"
|
|
256
|
+
? ["pr", "create", "--title", title, "--body", body]
|
|
257
|
+
: ["mr", "create", "--title", title, "--description", body];
|
|
258
|
+
try {
|
|
259
|
+
const { stdout } = await execFileAsync(tool, createCmd, {
|
|
260
|
+
cwd: root,
|
|
261
|
+
timeout: 30_000,
|
|
262
|
+
});
|
|
263
|
+
console.log(chalk.green(`\nPR created: ${stdout.trim()}`));
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
console.error(chalk.red(`\nFailed to create PR via ${tool}: ${err instanceof Error ? err.message : "unknown error"}`));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
console.error(chalk.red("\nNeither gh nor glab found. Install GitHub CLI (gh) or GitLab CLI (glab) to create PRs."));
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=pr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/core/pr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CavemanLevel } from "../utils/config.js";
|
|
2
|
+
export declare const GRIMOIRE_START_MARKER = "<!-- GRIMOIRE:START -->";
|
|
3
|
+
export declare const GRIMOIRE_END_MARKER = "<!-- GRIMOIRE:END -->";
|
|
4
|
+
export declare const GRIMOIRE_DIRS: string[];
|
|
5
|
+
export declare const TEMPLATE_FILES: Array<[string, string]>;
|
|
6
|
+
export declare const SKILL_AGENTS: Record<string, string>;
|
|
7
|
+
export declare const DEFAULT_SKILL_AGENT = "claude";
|
|
8
|
+
export declare const SKILL_NAMES: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Build a managed block from the package AGENTS.md content.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildManagedBlock(content: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Upsert grimoire-managed content into a file using start/end markers.
|
|
15
|
+
* If the file exists with markers, replace the managed section.
|
|
16
|
+
* If the file exists without markers, append the managed section.
|
|
17
|
+
* If the file doesn't exist, create it with the managed section.
|
|
18
|
+
*/
|
|
19
|
+
export declare function upsertManagedBlock(filePath: string, managedBlock: string, verb: "created" | "updated", label: string): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Build a caveman directive block for the given intensity level.
|
|
22
|
+
* Uses the upstream caveman skill format (github.com/JuliusBrussee/caveman).
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildCavemanDirective(level: CavemanLevel): string;
|
|
25
|
+
/**
|
|
26
|
+
* Read the package AGENTS.md and upsert its content into the project's AGENTS.md.
|
|
27
|
+
*/
|
|
28
|
+
export declare function upsertAgentsFile(root: string, packageRoot: string, verb: "created" | "updated", caveman?: CavemanLevel): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Ensure all grimoire directories exist (idempotent).
|
|
31
|
+
*/
|
|
32
|
+
export declare function ensureDirectories(root: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Copy template files from the package into the project.
|
|
35
|
+
* By default only creates missing templates. With force=true, overwrites all.
|
|
36
|
+
*/
|
|
37
|
+
export declare function installTemplates(root: string, packageRoot: string, force?: boolean): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate agent-specific instruction files (cursor, copilot).
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateAgentFiles(root: string, packageRoot: string, agents: string[], verb?: "created" | "updated"): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Auto-detect which agent files exist in the project.
|
|
44
|
+
* Covers cursor, copilot (instruction files) and claude, opencode, codex (skill dirs).
|
|
45
|
+
*/
|
|
46
|
+
export declare function detectAgentFiles(root: string): Promise<string[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Copy SKILL.md files from the package into each selected agent's skill directory.
|
|
49
|
+
* Unknown agents (cursor, copilot) are ignored — they use instruction files, not skills.
|
|
50
|
+
*/
|
|
51
|
+
export declare function installSkillFiles(root: string, packageRoot: string, skillNames: string[], verb: "created" | "updated", agents?: string[]): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=shared-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-setup.d.ts","sourceRoot":"","sources":["../../src/core/shared-setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,eAAO,MAAM,aAAa,UAOzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,eAAO,MAAM,WAAW,UAmBvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAmCjE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,OAAO,GAAE,YAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,GAAE,SAAS,GAAG,SAAqB,GACtC,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUtE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,MAAM,GAAE,MAAM,EAA0B,GACvC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { readFile, writeFile, copyFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { fileExists, escapeRegex } from "../utils/fs.js";
|
|
5
|
+
export const GRIMOIRE_START_MARKER = "<!-- GRIMOIRE:START -->";
|
|
6
|
+
export const GRIMOIRE_END_MARKER = "<!-- GRIMOIRE:END -->";
|
|
7
|
+
export const GRIMOIRE_DIRS = [
|
|
8
|
+
"features",
|
|
9
|
+
".grimoire/decisions",
|
|
10
|
+
".grimoire/docs",
|
|
11
|
+
".grimoire/changes",
|
|
12
|
+
".grimoire/archive",
|
|
13
|
+
".grimoire/bugs",
|
|
14
|
+
];
|
|
15
|
+
export const TEMPLATE_FILES = [
|
|
16
|
+
["decision.md", ".grimoire/decisions/template.md"],
|
|
17
|
+
["context.yml", ".grimoire/docs/context.yml"],
|
|
18
|
+
["debt-exceptions.yml", ".grimoire/debt-exceptions.yml"],
|
|
19
|
+
["mapignore", ".grimoire/mapignore"],
|
|
20
|
+
["mapkeys", ".grimoire/mapkeys"],
|
|
21
|
+
["dupignore", ".grimoire/dupignore"],
|
|
22
|
+
];
|
|
23
|
+
export const SKILL_AGENTS = {
|
|
24
|
+
claude: ".claude/skills",
|
|
25
|
+
opencode: ".opencode/skills",
|
|
26
|
+
codex: ".agents/skills",
|
|
27
|
+
};
|
|
28
|
+
export const DEFAULT_SKILL_AGENT = "claude";
|
|
29
|
+
export const SKILL_NAMES = [
|
|
30
|
+
"grimoire-draft",
|
|
31
|
+
"grimoire-plan",
|
|
32
|
+
"grimoire-apply",
|
|
33
|
+
"grimoire-verify",
|
|
34
|
+
"grimoire-audit",
|
|
35
|
+
"grimoire-remove",
|
|
36
|
+
"grimoire-discover",
|
|
37
|
+
"grimoire-review",
|
|
38
|
+
"grimoire-bug",
|
|
39
|
+
"grimoire-bug-report",
|
|
40
|
+
"grimoire-bug-triage",
|
|
41
|
+
"grimoire-bug-explore",
|
|
42
|
+
"grimoire-bug-session",
|
|
43
|
+
"grimoire-commit",
|
|
44
|
+
"grimoire-pr",
|
|
45
|
+
"grimoire-pr-review",
|
|
46
|
+
"grimoire-refactor",
|
|
47
|
+
"grimoire-branch-guard",
|
|
48
|
+
];
|
|
49
|
+
/**
|
|
50
|
+
* Build a managed block from the package AGENTS.md content.
|
|
51
|
+
*/
|
|
52
|
+
export function buildManagedBlock(content) {
|
|
53
|
+
return `${GRIMOIRE_START_MARKER}\n${content}\n${GRIMOIRE_END_MARKER}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Upsert grimoire-managed content into a file using start/end markers.
|
|
57
|
+
* If the file exists with markers, replace the managed section.
|
|
58
|
+
* If the file exists without markers, append the managed section.
|
|
59
|
+
* If the file doesn't exist, create it with the managed section.
|
|
60
|
+
*/
|
|
61
|
+
export async function upsertManagedBlock(filePath, managedBlock, verb, label) {
|
|
62
|
+
if (await fileExists(filePath)) {
|
|
63
|
+
const existing = await readFile(filePath, "utf-8");
|
|
64
|
+
if (existing.includes(GRIMOIRE_START_MARKER)) {
|
|
65
|
+
const updated = existing.replace(new RegExp(`${escapeRegex(GRIMOIRE_START_MARKER)}[\\s\\S]*?${escapeRegex(GRIMOIRE_END_MARKER)}`), managedBlock);
|
|
66
|
+
await writeFile(filePath, updated);
|
|
67
|
+
console.log(` ${chalk.blue("updated")} ${label} (grimoire section)`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
await writeFile(filePath, existing + "\n\n" + managedBlock + "\n");
|
|
71
|
+
console.log(` ${chalk.blue("appended")} ${label} (grimoire section)`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
await writeFile(filePath, managedBlock + "\n");
|
|
76
|
+
console.log(` ${chalk.green("created")} ${label}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Build a caveman directive block for the given intensity level.
|
|
81
|
+
* Uses the upstream caveman skill format (github.com/JuliusBrussee/caveman).
|
|
82
|
+
*/
|
|
83
|
+
export function buildCavemanDirective(level) {
|
|
84
|
+
if (level === "none")
|
|
85
|
+
return "";
|
|
86
|
+
const lines = [
|
|
87
|
+
"## Caveman Mode",
|
|
88
|
+
"",
|
|
89
|
+
`Respond terse like smart caveman at **${level}** intensity. All technical substance stay. Only fluff die.`,
|
|
90
|
+
"",
|
|
91
|
+
];
|
|
92
|
+
if (level === "lite") {
|
|
93
|
+
lines.push("Rules: No filler/hedging. Keep articles + full sentences. Professional but tight.");
|
|
94
|
+
}
|
|
95
|
+
else if (level === "full") {
|
|
96
|
+
lines.push("Rules: Drop articles (a/an/the), filler, pleasantries, hedging. Fragments OK. Short synonyms. Technical terms exact. Code blocks unchanged.");
|
|
97
|
+
}
|
|
98
|
+
else if (level === "ultra") {
|
|
99
|
+
lines.push("Rules: Abbreviate (DB/auth/config/req/res/fn/impl), strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code blocks unchanged.");
|
|
100
|
+
}
|
|
101
|
+
lines.push("", "Auto-clarity exception: revert to normal for security warnings, irreversible action confirmations, and multi-step sequences where fragments risk misread.", "", "Boundaries: code, commits, PRs written normally. Stop with \"stop caveman\" or \"normal mode\".", "", `<!-- caveman:${level} — based on github.com/JuliusBrussee/caveman -->`, "");
|
|
102
|
+
return lines.join("\n");
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Read the package AGENTS.md and upsert its content into the project's AGENTS.md.
|
|
106
|
+
*/
|
|
107
|
+
export async function upsertAgentsFile(root, packageRoot, verb, caveman = "none") {
|
|
108
|
+
const agentsPath = join(root, "AGENTS.md");
|
|
109
|
+
const grimoireAgents = await readFile(join(packageRoot, "AGENTS.md"), "utf-8");
|
|
110
|
+
const cavemanBlock = buildCavemanDirective(caveman);
|
|
111
|
+
const content = cavemanBlock ? cavemanBlock + grimoireAgents : grimoireAgents;
|
|
112
|
+
const managedBlock = buildManagedBlock(content);
|
|
113
|
+
await upsertManagedBlock(agentsPath, managedBlock, verb, "AGENTS.md");
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Ensure all grimoire directories exist (idempotent).
|
|
117
|
+
*/
|
|
118
|
+
export async function ensureDirectories(root) {
|
|
119
|
+
for (const dir of GRIMOIRE_DIRS) {
|
|
120
|
+
const fullPath = join(root, dir);
|
|
121
|
+
const existed = await fileExists(fullPath);
|
|
122
|
+
await mkdir(fullPath, { recursive: true });
|
|
123
|
+
if (!existed) {
|
|
124
|
+
console.log(` ${chalk.green("created")} ${dir}/`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Copy template files from the package into the project.
|
|
130
|
+
* By default only creates missing templates. With force=true, overwrites all.
|
|
131
|
+
*/
|
|
132
|
+
export async function installTemplates(root, packageRoot, force = false) {
|
|
133
|
+
for (const [src, dest] of TEMPLATE_FILES) {
|
|
134
|
+
const srcPath = join(packageRoot, "templates", src);
|
|
135
|
+
const destPath = join(root, dest);
|
|
136
|
+
if (await fileExists(destPath)) {
|
|
137
|
+
if (force) {
|
|
138
|
+
await copyFile(srcPath, destPath);
|
|
139
|
+
console.log(` ${chalk.blue("replaced")} ${dest}`);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.log(` ${chalk.yellow("exists")} ${dest}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
await copyFile(srcPath, destPath);
|
|
147
|
+
console.log(` ${chalk.green("created")} ${dest}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate agent-specific instruction files (cursor, copilot).
|
|
153
|
+
*/
|
|
154
|
+
export async function generateAgentFiles(root, packageRoot, agents, verb = "created") {
|
|
155
|
+
if (agents.length === 0)
|
|
156
|
+
return;
|
|
157
|
+
const grimoireAgents = await readFile(join(packageRoot, "AGENTS.md"), "utf-8");
|
|
158
|
+
const managedBlock = buildManagedBlock(grimoireAgents);
|
|
159
|
+
for (const agent of agents) {
|
|
160
|
+
switch (agent) {
|
|
161
|
+
case "cursor": {
|
|
162
|
+
const rulesDir = join(root, ".cursor", "rules");
|
|
163
|
+
await mkdir(rulesDir, { recursive: true });
|
|
164
|
+
const mdcPath = join(rulesDir, "grimoire.mdc");
|
|
165
|
+
const frontmatter = "---\ndescription: Grimoire spec-driven development workflow\nglobs:\nalwaysApply: true\n---\n\n";
|
|
166
|
+
await writeFile(mdcPath, frontmatter + grimoireAgents);
|
|
167
|
+
console.log(` ${chalk[verb === "created" ? "green" : "blue"](verb)} .cursor/rules/grimoire.mdc`);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case "copilot": {
|
|
171
|
+
const ghDir = join(root, ".github");
|
|
172
|
+
await mkdir(ghDir, { recursive: true });
|
|
173
|
+
const instructionsPath = join(ghDir, "copilot-instructions.md");
|
|
174
|
+
await upsertManagedBlock(instructionsPath, managedBlock, verb, ".github/copilot-instructions.md");
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
default:
|
|
178
|
+
console.log(` ${chalk.yellow("unknown")} agent type: ${agent} (supported: cursor, copilot)`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Auto-detect which agent files exist in the project.
|
|
184
|
+
* Covers cursor, copilot (instruction files) and claude, opencode, codex (skill dirs).
|
|
185
|
+
*/
|
|
186
|
+
export async function detectAgentFiles(root) {
|
|
187
|
+
const agents = [];
|
|
188
|
+
if (await fileExists(join(root, ".cursor", "rules", "grimoire.mdc")))
|
|
189
|
+
agents.push("cursor");
|
|
190
|
+
if (await fileExists(join(root, ".github", "copilot-instructions.md")))
|
|
191
|
+
agents.push("copilot");
|
|
192
|
+
for (const [name, dir] of Object.entries(SKILL_AGENTS)) {
|
|
193
|
+
if (await fileExists(join(root, dir)))
|
|
194
|
+
agents.push(name);
|
|
195
|
+
}
|
|
196
|
+
return agents;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Copy SKILL.md files from the package into each selected agent's skill directory.
|
|
200
|
+
* Unknown agents (cursor, copilot) are ignored — they use instruction files, not skills.
|
|
201
|
+
*/
|
|
202
|
+
export async function installSkillFiles(root, packageRoot, skillNames, verb, agents = [DEFAULT_SKILL_AGENT]) {
|
|
203
|
+
const sourceSkillsDir = join(packageRoot, "skills");
|
|
204
|
+
const targets = agents.filter((a) => a in SKILL_AGENTS);
|
|
205
|
+
if (targets.length === 0)
|
|
206
|
+
return;
|
|
207
|
+
for (const agent of targets) {
|
|
208
|
+
const relDir = SKILL_AGENTS[agent];
|
|
209
|
+
const skillsDir = join(root, relDir);
|
|
210
|
+
for (const skill of skillNames) {
|
|
211
|
+
const destDir = join(skillsDir, skill);
|
|
212
|
+
await mkdir(destDir, { recursive: true });
|
|
213
|
+
const src = join(sourceSkillsDir, skill, "SKILL.md");
|
|
214
|
+
const dest = join(destDir, "SKILL.md");
|
|
215
|
+
await copyFile(src, dest);
|
|
216
|
+
const color = verb === "created" ? chalk.green : chalk.blue;
|
|
217
|
+
console.log(` ${color(verb)} ${relDir}/${skill}/SKILL.md`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=shared-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-setup.js","sourceRoot":"","sources":["../../src/core/shared-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU;IACV,qBAAqB;IACrB,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,CAAC,aAAa,EAAE,iCAAiC,CAAC;IAClD,CAAC,aAAa,EAAE,4BAA4B,CAAC;IAC7C,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;IACxD,CAAC,WAAW,EAAE,qBAAqB,CAAC;IACpC,CAAC,SAAS,EAAE,mBAAmB,CAAC;IAChC,CAAC,WAAW,EAAE,qBAAqB,CAAC;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,kBAAkB;IAC5B,KAAK,EAAE,gBAAgB;CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,iBAAiB;IACjB,aAAa;IACb,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,GAAG,qBAAqB,KAAK,OAAO,KAAK,mBAAmB,EAAE,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,YAAoB,EACpB,IAA2B,EAC3B,KAAa;IAEb,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAC9B,IAAI,MAAM,CACR,GAAG,WAAW,CAAC,qBAAqB,CAAC,aAAa,WAAW,CAAC,mBAAmB,CAAC,EAAE,CACrF,EACD,YAAY,CACb,CAAC;YACF,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAmB;IACvD,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG;QACZ,iBAAiB;QACjB,EAAE;QACF,yCAAyC,KAAK,6DAA6D;QAC3G,EAAE;KACH,CAAC;IAEF,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,mFAAmF,CACpF,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,6IAA6I,CAC9I,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,6JAA6J,CAC9J,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,2JAA2J,EAC3J,EAAE,EACF,iGAAiG,EACjG,EAAE,EACF,gBAAgB,KAAK,kDAAkD,EACvE,EAAE,CACH,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,WAAmB,EACnB,IAA2B,EAC3B,UAAwB,MAAM;IAE9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,MAAM,QAAQ,CACnC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAC9B,OAAO,CACR,CAAC;IACF,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC;IAC9E,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,kBAAkB,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY;IAEZ,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,WAAmB,EACnB,QAAiB,KAAK;IAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,WAAmB,EACnB,MAAgB,EAChB,OAA8B,SAAS;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAEvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC/C,MAAM,WAAW,GACf,iGAAiG,CAAC;gBACpG,MAAM,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAClG,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACpC,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;gBAChE,MAAM,kBAAkB,CACtB,gBAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,iCAAiC,CAClC,CAAC;gBACF,MAAM;YACR,CAAC;YACD;gBACE,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,KAAK,+BAA+B,CACjF,CAAC;QACN,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,WAAmB,EACnB,UAAoB,EACpB,IAA2B,EAC3B,SAAmB,CAAC,mBAAmB,CAAC;IAExC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACvC,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACvC,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,KAAK,WAAW,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/core/status.ts"],"names":[],"mappings":"AAMA,UAAU,aAAa;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAqBD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAgHf"}
|