@gitwhy-cli/whyspec 0.1.9 → 0.1.10
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/commands/capture.d.ts +4 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +34 -27
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +4 -3
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/plan.d.ts +2 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +5 -5
- package/dist/commands/plan.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* whyspec capture — Capture reasoning context for a change.
|
|
3
3
|
*
|
|
4
|
-
* --json mode: returns XML template + commits + files + Decision Bridge data
|
|
4
|
+
* --json mode: returns XML template + commits + files + Decision Bridge data
|
|
5
|
+
* and still writes ctx_<id>.md for agent workflows.
|
|
5
6
|
* Non-JSON mode: writes ctx_<id>.md with metadata header + XML template.
|
|
6
7
|
*/
|
|
7
8
|
export interface CaptureJsonOutput {
|
|
@@ -11,6 +12,8 @@ export interface CaptureJsonOutput {
|
|
|
11
12
|
decisions_to_make: string[];
|
|
12
13
|
change_name: string;
|
|
13
14
|
change_path: string;
|
|
15
|
+
context_id: string;
|
|
16
|
+
file_path: string;
|
|
14
17
|
}
|
|
15
18
|
export declare function captureCommand(name: string | undefined, options: {
|
|
16
19
|
json?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoCD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|
package/dist/commands/capture.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* whyspec capture — Capture reasoning context for a change.
|
|
3
3
|
*
|
|
4
|
-
* --json mode: returns XML template + commits + files + Decision Bridge data
|
|
4
|
+
* --json mode: returns XML template + commits + files + Decision Bridge data
|
|
5
|
+
* and still writes ctx_<id>.md for agent workflows.
|
|
5
6
|
* Non-JSON mode: writes ctx_<id>.md with metadata header + XML template.
|
|
6
7
|
*/
|
|
7
8
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
@@ -16,12 +17,31 @@ function readFileOrEmpty(filePath) {
|
|
|
16
17
|
return "";
|
|
17
18
|
return readFileSync(filePath, "utf-8");
|
|
18
19
|
}
|
|
20
|
+
function buildContextFile(changeName, contextId, template, commits) {
|
|
21
|
+
const branch = getCurrentBranch();
|
|
22
|
+
const repository = getRemoteUrl();
|
|
23
|
+
const commitList = commits.length > 0 ? commits.map((c) => c.slice(0, 7)).join(", ") : "none";
|
|
24
|
+
const metadataHeader = [
|
|
25
|
+
`# ${changeName}`,
|
|
26
|
+
"",
|
|
27
|
+
`**Context ID:** ${contextId}`,
|
|
28
|
+
`**Agent:** whyspec`,
|
|
29
|
+
...(repository ? [`**Repository:** ${repository}`] : []),
|
|
30
|
+
`**Branch:** ${branch}`,
|
|
31
|
+
`**Date:** ${new Date().toISOString()}`,
|
|
32
|
+
`**Change:** ${changeName}`,
|
|
33
|
+
`**Intent:** .gitwhy/changes/${changeName}/intent.md`,
|
|
34
|
+
`**Commits:** ${commitList}`,
|
|
35
|
+
"",
|
|
36
|
+
"---",
|
|
37
|
+
"",
|
|
38
|
+
].join("\n");
|
|
39
|
+
return metadataHeader + template + "\n";
|
|
40
|
+
}
|
|
19
41
|
export async function captureCommand(name, options) {
|
|
20
42
|
const repoRoot = process.cwd();
|
|
21
43
|
const gitwhyDir = join(repoRoot, ".gitwhy");
|
|
22
|
-
|
|
23
|
-
ensureGitwhyDir(repoRoot);
|
|
24
|
-
}
|
|
44
|
+
ensureGitwhyDir(repoRoot);
|
|
25
45
|
const change = resolveChange(gitwhyDir, name);
|
|
26
46
|
// Read planning artifacts
|
|
27
47
|
const intentContent = readFileOrEmpty(join(change.path, "intent.md"));
|
|
@@ -42,42 +62,29 @@ export async function captureCommand(name, options) {
|
|
|
42
62
|
catch {
|
|
43
63
|
// Gracefully handle if git operations fail
|
|
44
64
|
}
|
|
65
|
+
const template = renderContextXml();
|
|
66
|
+
const contextId = generateContextId();
|
|
67
|
+
const fileName = `${contextId}.md`;
|
|
68
|
+
const filePath = join(change.path, fileName);
|
|
69
|
+
const content = buildContextFile(change.name, contextId, template, commits);
|
|
70
|
+
writeFileSync(filePath, content);
|
|
45
71
|
if (options.json) {
|
|
46
72
|
const output = {
|
|
47
|
-
template
|
|
73
|
+
template,
|
|
48
74
|
commits,
|
|
49
75
|
files_changed: filesChanged,
|
|
50
76
|
decisions_to_make: allDecisions,
|
|
51
77
|
change_name: change.name,
|
|
52
78
|
change_path: `.gitwhy/changes/${change.name}`,
|
|
79
|
+
context_id: contextId,
|
|
80
|
+
file_path: `.gitwhy/changes/${change.name}/${fileName}`,
|
|
53
81
|
};
|
|
54
82
|
console.log(JSON.stringify(output, null, 2));
|
|
55
83
|
return;
|
|
56
84
|
}
|
|
57
|
-
// Non-JSON mode:
|
|
58
|
-
const contextId = generateContextId();
|
|
85
|
+
// Non-JSON mode: ctx_<id>.md has already been written above.
|
|
59
86
|
const branch = getCurrentBranch();
|
|
60
|
-
const repository = getRemoteUrl();
|
|
61
87
|
const commitList = commits.length > 0 ? commits.map((c) => c.slice(0, 7)).join(", ") : "none";
|
|
62
|
-
const metadataHeader = [
|
|
63
|
-
`# ${change.name}`,
|
|
64
|
-
"",
|
|
65
|
-
`**Context ID:** ${contextId}`,
|
|
66
|
-
`**Agent:** whyspec`,
|
|
67
|
-
...(repository ? [`**Repository:** ${repository}`] : []),
|
|
68
|
-
`**Branch:** ${branch}`,
|
|
69
|
-
`**Date:** ${new Date().toISOString()}`,
|
|
70
|
-
`**Change:** ${change.name}`,
|
|
71
|
-
`**Intent:** .gitwhy/changes/${change.name}/intent.md`,
|
|
72
|
-
`**Commits:** ${commitList}`,
|
|
73
|
-
"",
|
|
74
|
-
"---",
|
|
75
|
-
"",
|
|
76
|
-
].join("\n");
|
|
77
|
-
const content = metadataHeader + renderContextXml() + "\n";
|
|
78
|
-
const fileName = `${contextId}.md`;
|
|
79
|
-
const filePath = join(change.path, fileName);
|
|
80
|
-
writeFileSync(filePath, content);
|
|
81
88
|
if (allDecisions.length > 0) {
|
|
82
89
|
console.log(chalk.green("\n Decision Bridge resolved:"));
|
|
83
90
|
allDecisions.forEach((d) => console.log(` ${chalk.green("✓")} ${d}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAwEf"}
|
package/dist/commands/debug.js
CHANGED
|
@@ -19,9 +19,7 @@ export async function debugCommand(name, options) {
|
|
|
19
19
|
const slug = slugify(name);
|
|
20
20
|
const gitwhyDir = join(repoRoot, ".gitwhy");
|
|
21
21
|
const changePath = join(gitwhyDir, "changes", slug);
|
|
22
|
-
|
|
23
|
-
ensureGitwhyDir(repoRoot);
|
|
24
|
-
}
|
|
22
|
+
ensureGitwhyDir(repoRoot);
|
|
25
23
|
// Quick search for related contexts using first few words of the bug name.
|
|
26
24
|
const searchQuery = name.split(/\s+/).slice(0, 3).join(" ");
|
|
27
25
|
let relatedContexts = [];
|
|
@@ -44,6 +42,9 @@ export async function debugCommand(name, options) {
|
|
|
44
42
|
}
|
|
45
43
|
}
|
|
46
44
|
if (options.json) {
|
|
45
|
+
mkdirSync(changePath, { recursive: true });
|
|
46
|
+
writeFileSync(join(changePath, ".started"), new Date().toISOString());
|
|
47
|
+
writeFileSync(join(changePath, "debug.md"), fullTemplate);
|
|
47
48
|
const output = {
|
|
48
49
|
path: `.gitwhy/changes/${slug}`,
|
|
49
50
|
template: fullTemplate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAQ/D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAwB,EACxB,OAA2B;IAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAEpD,
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/plan.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* whyspec plan — Create a change plan with intent, design, and tasks.
|
|
3
3
|
*
|
|
4
|
-
* --json mode: returns templates + context/rules for agent consumption
|
|
4
|
+
* --json mode: returns templates + context/rules for agent consumption and
|
|
5
|
+
* creates the change directory anchor for agent workflows.
|
|
5
6
|
* Non-JSON mode: creates .gitwhy/changes/<name>/ with 3 template files.
|
|
6
7
|
*/
|
|
7
8
|
export interface PlanJsonOutput {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuDf"}
|
package/dist/commands/plan.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* whyspec plan — Create a change plan with intent, design, and tasks.
|
|
3
3
|
*
|
|
4
|
-
* --json mode: returns templates + context/rules for agent consumption
|
|
4
|
+
* --json mode: returns templates + context/rules for agent consumption and
|
|
5
|
+
* creates the change directory anchor for agent workflows.
|
|
5
6
|
* Non-JSON mode: creates .gitwhy/changes/<name>/ with 3 template files.
|
|
6
7
|
*/
|
|
7
8
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
@@ -16,16 +17,15 @@ export async function planCommand(name, options) {
|
|
|
16
17
|
const slug = slugify(name);
|
|
17
18
|
const gitwhyDir = join(repoRoot, ".gitwhy");
|
|
18
19
|
const changePath = join(gitwhyDir, "changes", slug);
|
|
19
|
-
|
|
20
|
-
ensureGitwhyDir(repoRoot);
|
|
21
|
-
}
|
|
20
|
+
ensureGitwhyDir(repoRoot);
|
|
22
21
|
// Duplicate detection
|
|
23
22
|
if (existsSync(changePath)) {
|
|
24
23
|
throw new Error(`Change "${slug}" already exists at ${changePath}`);
|
|
25
24
|
}
|
|
26
25
|
const config = readConfig(repoRoot);
|
|
27
26
|
if (options.json) {
|
|
28
|
-
|
|
27
|
+
mkdirSync(changePath, { recursive: true });
|
|
28
|
+
writeFileSync(join(changePath, ".started"), new Date().toISOString());
|
|
29
29
|
const output = {
|
|
30
30
|
path: `.gitwhy/changes/${slug}`,
|
|
31
31
|
templates: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED