@mytechtoday/augment-sdd 1.0.0 → 1.1.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/out/beads/BeadsAdapter.js +30 -0
- package/out/beads/BeadsAdapter.js.map +1 -0
- package/out/beads/ClassicBeadsAdapter.js +84 -0
- package/out/beads/ClassicBeadsAdapter.js.map +1 -0
- package/out/beads/PowerShellBeadsAdapter.js +118 -0
- package/out/beads/PowerShellBeadsAdapter.js.map +1 -0
- package/out/beads/getBeadsAdapter.js +94 -0
- package/out/beads/getBeadsAdapter.js.map +1 -0
- package/out/commands/executeBeadsBatch.js +29 -15
- package/out/commands/executeBeadsBatch.js.map +1 -1
- package/out/commands/generateBeads.js +25 -22
- package/out/commands/generateBeads.js.map +1 -1
- package/out/commands/initWizard.js +184 -0
- package/out/commands/initWizard.js.map +1 -0
- package/out/extension.js +10 -0
- package/out/extension.js.map +1 -1
- package/out/test/integration/executeBeadsBatch.test.js +83 -57
- package/out/test/integration/executeBeadsBatch.test.js.map +1 -1
- package/out/test/integration/generateBeads.test.js +156 -0
- package/out/test/integration/generateBeads.test.js.map +1 -0
- package/out/test/integration/generateOpenSpec.test.js +16 -39
- package/out/test/integration/generateOpenSpec.test.js.map +1 -1
- package/out/test/unit/ClassicBeadsAdapter.test.js +121 -0
- package/out/test/unit/ClassicBeadsAdapter.test.js.map +1 -0
- package/out/test/unit/PowerShellBeadsAdapter.test.js +120 -0
- package/out/test/unit/PowerShellBeadsAdapter.test.js.map +1 -0
- package/out/test/unit/getBeadsAdapter.test.js +97 -0
- package/out/test/unit/getBeadsAdapter.test.js.map +1 -0
- package/out/test/unit/initWizard.test.js +170 -0
- package/out/test/unit/initWizard.test.js.map +1 -0
- package/out/test/unit/runCli.test.js +11 -24
- package/out/test/unit/runCli.test.js.map +1 -1
- package/out/utils/detectCli.js +47 -1
- package/out/utils/detectCli.js.map +1 -1
- package/out/utils/runCli.js +9 -3
- package/out/utils/runCli.js.map +1 -1
- package/package.json +22 -1
- package/.eslintrc.json +0 -20
- package/src/commands/executeBeadsBatch.ts +0 -153
- package/src/commands/fullPipeline.ts +0 -120
- package/src/commands/generateBeads.ts +0 -127
- package/src/commands/generateOpenSpec.ts +0 -227
- package/src/dashboard/DashboardPanel.ts +0 -168
- package/src/extension.ts +0 -77
- package/src/parsers/parseBeadUpdates.ts +0 -26
- package/src/parsers/parseTasksMarkdown.ts +0 -61
- package/src/test/integration/executeBeadsBatch.test.ts +0 -129
- package/src/test/integration/generateOpenSpec.test.ts +0 -129
- package/src/test/runTest.ts +0 -15
- package/src/test/suite/index.ts +0 -37
- package/src/test/unit/parseBeadUpdates.test.ts +0 -48
- package/src/test/unit/parseTasksMarkdown.test.ts +0 -41
- package/src/test/unit/runCli.test.ts +0 -109
- package/src/utils/detectCli.ts +0 -28
- package/src/utils/getConfig.ts +0 -25
- package/src/utils/logger.ts +0 -42
- package/src/utils/runCli.ts +0 -102
- package/tsconfig.json +0 -18
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BeadsAdapter — backend-agnostic interface for Beads issue-tracking operations.
|
|
4
|
+
*
|
|
5
|
+
* Design (D1): All commands route through this interface so that adding a new
|
|
6
|
+
* backend requires only a new adapter file and a registry entry — no changes
|
|
7
|
+
* to any command file.
|
|
8
|
+
*
|
|
9
|
+
* Design (D7): workspaceRoot is injected via the concrete adapter constructor,
|
|
10
|
+
* not per-method, keeping method signatures clean and adapters easy to mock.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.BeadsParseError = void 0;
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Error type
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Thrown when a `--json` response from a Beads CLI cannot be parsed.
|
|
19
|
+
* The raw string is preserved on the instance so callers can log it for
|
|
20
|
+
* diagnosis (ps-fix spec §6 error handling table).
|
|
21
|
+
*/
|
|
22
|
+
class BeadsParseError extends Error {
|
|
23
|
+
constructor(raw) {
|
|
24
|
+
super(`BeadsParseError: could not parse JSON from beads output.\nRaw output: ${raw}`);
|
|
25
|
+
this.raw = raw;
|
|
26
|
+
this.name = 'BeadsParseError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.BeadsParseError = BeadsParseError;
|
|
30
|
+
//# sourceMappingURL=BeadsAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BeadsAdapter.js","sourceRoot":"","sources":["../../src/beads/BeadsAdapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AA4CH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAA4B,GAAW;QACrC,KAAK,CACH,yEAAyE,GAAG,EAAE,CAC/E,CAAC;QAHwB,QAAG,GAAH,GAAG,CAAQ;QAIrC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAPD,0CAOC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClassicBeadsAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* ClassicBeadsAdapter — BeadsAdapter implementation for the bd CLI.
|
|
6
|
+
*
|
|
7
|
+
* Delegates every method to `runCli('bd', [...args], workspaceRoot)` and
|
|
8
|
+
* parses `--json` output. The `bd` binary must be on PATH; the adapter does
|
|
9
|
+
* not verify this itself — callers obtain an instance via getBeadsAdapter()
|
|
10
|
+
* which handles detection and error messages.
|
|
11
|
+
*
|
|
12
|
+
* Tasks 2.1-2.6 (ps-fix spec):
|
|
13
|
+
* 2.1 Implements BeadsAdapter interface.
|
|
14
|
+
* 2.2 ready() — bd ready --json → Bead[].
|
|
15
|
+
* 2.3 create() — bd create … --json → id string.
|
|
16
|
+
* 2.4 update() — bd update <id> --status <status>.
|
|
17
|
+
* 2.5 close() — bd close <id> --reason <reason>.
|
|
18
|
+
* 2.6 search() — bd search <query> --json → Bead[].
|
|
19
|
+
*/
|
|
20
|
+
const BeadsAdapter_1 = require("./BeadsAdapter");
|
|
21
|
+
const runCli_1 = require("../utils/runCli");
|
|
22
|
+
class ClassicBeadsAdapter {
|
|
23
|
+
/**
|
|
24
|
+
* @param workspaceRoot Absolute path to the open workspace folder.
|
|
25
|
+
* Passed as `cwd` to every `bd` invocation.
|
|
26
|
+
*/
|
|
27
|
+
constructor(workspaceRoot) {
|
|
28
|
+
this.workspaceRoot = workspaceRoot;
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// BeadsAdapter implementation
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/** Task 2.2 — Fetch all ready beads, optionally limited. */
|
|
34
|
+
async ready(limit) {
|
|
35
|
+
const args = ['ready', '--json'];
|
|
36
|
+
if (limit !== undefined) {
|
|
37
|
+
args.push('--limit', String(limit));
|
|
38
|
+
}
|
|
39
|
+
const raw = await (0, runCli_1.runCli)('bd', args, this.workspaceRoot);
|
|
40
|
+
try {
|
|
41
|
+
return JSON.parse(raw);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
throw new BeadsAdapter_1.BeadsParseError(raw);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Task 2.3 — Create a new bead and return its generated id. */
|
|
48
|
+
async create(title, description = '', priority = 3) {
|
|
49
|
+
const args = [
|
|
50
|
+
'create', title,
|
|
51
|
+
'--description', description,
|
|
52
|
+
'--priority', String(priority),
|
|
53
|
+
'--json',
|
|
54
|
+
];
|
|
55
|
+
const raw = await (0, runCli_1.runCli)('bd', args, this.workspaceRoot);
|
|
56
|
+
try {
|
|
57
|
+
const result = JSON.parse(raw);
|
|
58
|
+
return result.id;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
throw new BeadsAdapter_1.BeadsParseError(raw);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Task 2.4 — Update a bead's status. */
|
|
65
|
+
async update(id, status) {
|
|
66
|
+
await (0, runCli_1.runCli)('bd', ['update', id, '--status', status], this.workspaceRoot);
|
|
67
|
+
}
|
|
68
|
+
/** Task 2.5 — Close a bead with an optional reason. */
|
|
69
|
+
async close(id, reason = 'Completed') {
|
|
70
|
+
await (0, runCli_1.runCli)('bd', ['close', id, '--reason', reason], this.workspaceRoot);
|
|
71
|
+
}
|
|
72
|
+
/** Task 2.6 — Search for beads matching a query string. */
|
|
73
|
+
async search(query) {
|
|
74
|
+
const raw = await (0, runCli_1.runCli)('bd', ['search', query, '--json'], this.workspaceRoot);
|
|
75
|
+
try {
|
|
76
|
+
return JSON.parse(raw);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
throw new BeadsAdapter_1.BeadsParseError(raw);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.ClassicBeadsAdapter = ClassicBeadsAdapter;
|
|
84
|
+
//# sourceMappingURL=ClassicBeadsAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassicBeadsAdapter.js","sourceRoot":"","sources":["../../src/beads/ClassicBeadsAdapter.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;GAeG;AACH,iDAAqE;AACrE,4CAAyC;AAEzC,MAAa,mBAAmB;IAC9B;;;OAGG;IACH,YAA6B,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;IAAG,CAAC;IAEtD,8EAA8E;IAC9E,8BAA8B;IAC9B,8EAA8E;IAE9E,4DAA4D;IAC5D,KAAK,CAAC,KAAK,CAAC,KAAc;QACxB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAA,eAAM,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,8BAAe,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,WAAW,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC;QACxD,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,WAAW;YAC5B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC9B,QAAQ;SACT,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,IAAA,eAAM,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;YACjD,OAAO,MAAM,CAAC,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,8BAAe,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAuC;QAC9D,MAAM,IAAA,eAAM,EAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7E,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,MAAM,GAAG,WAAW;QAC1C,MAAM,IAAA,eAAM,EAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5E,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,MAAM,GAAG,GAAG,MAAM,IAAA,eAAM,EAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,8BAAe,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF;AA7DD,kDA6DC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PowerShellBeadsAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* PowerShellBeadsAdapter — BeadsAdapter implementation for beads-query.ps1.
|
|
6
|
+
*
|
|
7
|
+
* Delegates every method to `pwsh` (PowerShell 7+) or `powershell` (PS 5.1
|
|
8
|
+
* fallback on Windows), invoking beads-query.ps1 with positional/named params
|
|
9
|
+
* and parsing the `-Json` output.
|
|
10
|
+
*
|
|
11
|
+
* Design:
|
|
12
|
+
* D1: shell: false is used so that Windows cmd.exe never sees the args;
|
|
13
|
+
* each element in the array reaches pwsh.exe verbatim.
|
|
14
|
+
* D2: The PowerShell executable is resolved once per instance (lazy cached
|
|
15
|
+
* Promise) so the async detection cost is paid at most once.
|
|
16
|
+
* D3: workspaceRoot and scriptPath are injected via the constructor; the
|
|
17
|
+
* factory (getBeadsAdapter.ts) is responsible for path resolution.
|
|
18
|
+
*
|
|
19
|
+
* Tasks 3.1-3.6 (ps-fix spec §2 PowerShellBeadsAdapter):
|
|
20
|
+
* 3.1 Implements BeadsAdapter interface.
|
|
21
|
+
* 3.2 ready() — pwsh -File <script> ready -Limit <n> -Json → Bead[].
|
|
22
|
+
* 3.3 create() — pwsh -File <script> create <title> -Description … -Json → id.
|
|
23
|
+
* 3.4 update() — pwsh -File <script> update <id> -Status <status>.
|
|
24
|
+
* 3.5 close() — pwsh -File <script> close <id> -Reason <reason>.
|
|
25
|
+
* 3.6 search() — pwsh -File <script> search <query> -Json → Bead[].
|
|
26
|
+
*/
|
|
27
|
+
const BeadsAdapter_1 = require("./BeadsAdapter");
|
|
28
|
+
const runCli_1 = require("../utils/runCli");
|
|
29
|
+
const detectCli_1 = require("../utils/detectCli");
|
|
30
|
+
class PowerShellBeadsAdapter {
|
|
31
|
+
/**
|
|
32
|
+
* @param workspaceRoot Absolute path to the open workspace folder (cwd for the script).
|
|
33
|
+
* @param scriptPath Absolute path to beads-query.ps1 to invoke.
|
|
34
|
+
*/
|
|
35
|
+
constructor(workspaceRoot, scriptPath) {
|
|
36
|
+
this.workspaceRoot = workspaceRoot;
|
|
37
|
+
this.scriptPath = scriptPath;
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Internal helpers
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the PowerShell executable once per instance.
|
|
44
|
+
* Preferred: pwsh (PowerShell 7+). Fallback: powershell (Windows PS 5.1).
|
|
45
|
+
*/
|
|
46
|
+
resolveShell() {
|
|
47
|
+
if (!this.shellPromise) {
|
|
48
|
+
this.shellPromise = (0, detectCli_1.detectCli)('pwsh').then(found => found ? 'pwsh' : 'powershell');
|
|
49
|
+
}
|
|
50
|
+
return this.shellPromise;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Invoke beads-query.ps1 with the given sub-command and optional extra args.
|
|
54
|
+
* Uses shell: false so Windows cmd.exe never mangles the argument array.
|
|
55
|
+
*/
|
|
56
|
+
async run(subCommand, extraArgs = []) {
|
|
57
|
+
const shell = await this.resolveShell();
|
|
58
|
+
const args = ['-File', this.scriptPath, subCommand, ...extraArgs];
|
|
59
|
+
// shell: false — each element reaches pwsh verbatim (no cmd.exe quoting layer).
|
|
60
|
+
return (0, runCli_1.runCli)(shell, args, this.workspaceRoot, 120000, undefined, false);
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// BeadsAdapter implementation
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
/** Task 3.2 — Fetch all ready beads, optionally limited. */
|
|
66
|
+
async ready(limit) {
|
|
67
|
+
const extra = ['-Json'];
|
|
68
|
+
if (limit !== undefined) {
|
|
69
|
+
extra.push('-Limit', String(limit));
|
|
70
|
+
}
|
|
71
|
+
const raw = await this.run('ready', extra);
|
|
72
|
+
try {
|
|
73
|
+
return JSON.parse(raw);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
throw new BeadsAdapter_1.BeadsParseError(raw);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Task 3.3 — Create a new bead and return its generated id. */
|
|
80
|
+
async create(title, description = '', priority = 3) {
|
|
81
|
+
const extra = [
|
|
82
|
+
title,
|
|
83
|
+
'-Description', description,
|
|
84
|
+
'-Priority', String(priority),
|
|
85
|
+
'-Json',
|
|
86
|
+
];
|
|
87
|
+
const raw = await this.run('create', extra);
|
|
88
|
+
try {
|
|
89
|
+
const result = JSON.parse(raw);
|
|
90
|
+
return result.id;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
throw new BeadsAdapter_1.BeadsParseError(raw);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Task 3.4 — Update a bead's status. */
|
|
97
|
+
async update(id, status) {
|
|
98
|
+
// beads-query.ps1 uses 'in-progress' (hyphen) for this status.
|
|
99
|
+
const psStatus = status === 'in_progress' ? 'in-progress' : status;
|
|
100
|
+
await this.run('update', [id, '-Status', psStatus]);
|
|
101
|
+
}
|
|
102
|
+
/** Task 3.5 — Close a bead with an optional reason. */
|
|
103
|
+
async close(id, reason = 'Completed') {
|
|
104
|
+
await this.run('close', [id, '-Reason', reason]);
|
|
105
|
+
}
|
|
106
|
+
/** Task 3.6 — Search for beads matching a query string. */
|
|
107
|
+
async search(query) {
|
|
108
|
+
const raw = await this.run('search', [query, '-Json']);
|
|
109
|
+
try {
|
|
110
|
+
return JSON.parse(raw);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
throw new BeadsAdapter_1.BeadsParseError(raw);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.PowerShellBeadsAdapter = PowerShellBeadsAdapter;
|
|
118
|
+
//# sourceMappingURL=PowerShellBeadsAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PowerShellBeadsAdapter.js","sourceRoot":"","sources":["../../src/beads/PowerShellBeadsAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
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.getBeadsAdapter = getBeadsAdapter;
|
|
37
|
+
/**
|
|
38
|
+
* getBeadsAdapter — factory that resolves the active Beads backend adapter.
|
|
39
|
+
*
|
|
40
|
+
* Design (D2): Config is read at invocation time (not at extension activation),
|
|
41
|
+
* so mid-session changes to augmentSdd.beadsBackend take effect immediately.
|
|
42
|
+
*
|
|
43
|
+
* Design (D3): "auto" default preserves zero-config upgrade for existing bd
|
|
44
|
+
* users; they never need to touch settings if bd is already on PATH.
|
|
45
|
+
*
|
|
46
|
+
* "auto" fallback chain (task 1.3):
|
|
47
|
+
* 1. bd found on PATH → ClassicBeadsAdapter
|
|
48
|
+
* 2. scripts/beads-query.ps1 exists in workspace → PowerShellBeadsAdapter
|
|
49
|
+
* 3. Neither → throw error with init instructions
|
|
50
|
+
*/
|
|
51
|
+
const vscode = __importStar(require("vscode"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const ClassicBeadsAdapter_1 = require("./ClassicBeadsAdapter");
|
|
55
|
+
const PowerShellBeadsAdapter_1 = require("./PowerShellBeadsAdapter");
|
|
56
|
+
const detectCli_1 = require("../utils/detectCli");
|
|
57
|
+
/**
|
|
58
|
+
* Return the correct BeadsAdapter for the current workspace and configuration.
|
|
59
|
+
*
|
|
60
|
+
* @param workspaceRoot Absolute path to the open workspace folder.
|
|
61
|
+
* @returns A fully-initialised adapter ready for use.
|
|
62
|
+
* @throws Error when backend = "auto" and no backend is found.
|
|
63
|
+
*/
|
|
64
|
+
async function getBeadsAdapter(workspaceRoot) {
|
|
65
|
+
// Read the setting at call time so mid-session changes are honoured (D2).
|
|
66
|
+
const config = vscode.workspace.getConfiguration('augmentSdd');
|
|
67
|
+
const backend = config.get('beadsBackend', 'auto');
|
|
68
|
+
if (backend === 'bd') {
|
|
69
|
+
// Explicit classic bd — callers are responsible for ensuring bd is on PATH.
|
|
70
|
+
return new ClassicBeadsAdapter_1.ClassicBeadsAdapter(workspaceRoot);
|
|
71
|
+
}
|
|
72
|
+
if (backend === 'beads-ps1') {
|
|
73
|
+
// Explicit PowerShell backend — script path derived from workspace root.
|
|
74
|
+
const scriptPath = path.join(workspaceRoot, 'scripts', 'beads-query.ps1');
|
|
75
|
+
return new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(workspaceRoot, scriptPath);
|
|
76
|
+
}
|
|
77
|
+
// -------------------------------------------------------------------------
|
|
78
|
+
// "auto" fallback chain (task 1.3)
|
|
79
|
+
// -------------------------------------------------------------------------
|
|
80
|
+
// Step 1: probe for the classic bd CLI on PATH.
|
|
81
|
+
const bdOnPath = await (0, detectCli_1.detectCli)('bd');
|
|
82
|
+
if (bdOnPath) {
|
|
83
|
+
return new ClassicBeadsAdapter_1.ClassicBeadsAdapter(workspaceRoot);
|
|
84
|
+
}
|
|
85
|
+
// Step 2: check for beads-query.ps1 in the workspace scripts folder.
|
|
86
|
+
const scriptPath = path.join(workspaceRoot, 'scripts', 'beads-query.ps1');
|
|
87
|
+
if (fs.existsSync(scriptPath)) {
|
|
88
|
+
return new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(workspaceRoot, scriptPath);
|
|
89
|
+
}
|
|
90
|
+
// Step 3: neither backend found — prompt the user to run augmentSdd.init.
|
|
91
|
+
throw new Error('Augment SDD: No Beads backend found. ' +
|
|
92
|
+
'Run the "Augment SDD: Init" command (augmentSdd.init) to configure a backend.');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=getBeadsAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBeadsAdapter.js","sourceRoot":"","sources":["../../src/beads/getBeadsAdapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,0CAqCC;AAlED;;;;;;;;;;;;;GAaG;AACH,+CAAiC;AACjC,2CAA6B;AAC7B,uCAAyB;AAEzB,+DAA4D;AAC5D,qEAAkE;AAClE,kDAA+C;AAE/C;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CAAC,aAAqB;IACzD,0EAA0E;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAS,cAAc,EAAE,MAAM,CAAC,CAAC;IAE3D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,4EAA4E;QAC5E,OAAO,IAAI,yCAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,yEAAyE;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC1E,OAAO,IAAI,+CAAsB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,4EAA4E;IAC5E,mCAAmC;IACnC,4EAA4E;IAE5E,gDAAgD;IAChD,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,yCAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,qEAAqE;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1E,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,+CAAsB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,0EAA0E;IAC1E,MAAM,IAAI,KAAK,CACb,uCAAuC;QACvC,+EAA+E,CAChF,CAAC;AACJ,CAAC"}
|
|
@@ -38,19 +38,22 @@ exports.executeBeadsBatch = executeBeadsBatch;
|
|
|
38
38
|
* executeBeadsBatch — Bead 7 command implementation.
|
|
39
39
|
*
|
|
40
40
|
* Steps (tasks 7.1-7.7):
|
|
41
|
-
* 7.1 Fetch
|
|
42
|
-
* 7.2
|
|
41
|
+
* 7.1 Fetch ready beads via adapter; exit gracefully if empty.
|
|
42
|
+
* 7.2 Limit to first N beads per augmentSdd.batchSize setting (default 3).
|
|
43
43
|
* 7.3 Build batch Auggie prompt with --- BEAD START --- sentinels.
|
|
44
44
|
* 7.4 Execute auggie --print --quiet via runCli.
|
|
45
45
|
* 7.5 Parse bd update sentinel lines from response.
|
|
46
|
-
* 7.6 Execute each
|
|
46
|
+
* 7.6 Execute each sentinel via adapter.update(); continue on partial failure.
|
|
47
47
|
* 7.7 Show warning if no sentinel lines were parsed from Auggie response.
|
|
48
|
+
*
|
|
49
|
+
* ps-fix tasks 7.2-7.3: uses getBeadsAdapter() for ready() and update().
|
|
48
50
|
*/
|
|
49
51
|
const vscode = __importStar(require("vscode"));
|
|
50
52
|
const runCli_1 = require("../utils/runCli");
|
|
51
53
|
const getConfig_1 = require("../utils/getConfig");
|
|
52
54
|
const logger_1 = require("../utils/logger");
|
|
53
55
|
const parseBeadUpdates_1 = require("../parsers/parseBeadUpdates");
|
|
56
|
+
const getBeadsAdapter_1 = require("../beads/getBeadsAdapter");
|
|
54
57
|
/** Entry point registered as `augmentSdd.executeBeadsBatch`. */
|
|
55
58
|
async function executeBeadsBatch() {
|
|
56
59
|
const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
|
|
@@ -58,11 +61,21 @@ async function executeBeadsBatch() {
|
|
|
58
61
|
vscode.window.showErrorMessage('Augment SDD: No workspace folder open.');
|
|
59
62
|
return;
|
|
60
63
|
}
|
|
61
|
-
// 7.
|
|
62
|
-
let
|
|
64
|
+
// ps-fix 7.2 — Obtain adapter once; reuse for ready() and update().
|
|
65
|
+
let adapter;
|
|
63
66
|
try {
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
adapter = await (0, getBeadsAdapter_1.getBeadsAdapter)(workspaceRoot);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
71
|
+
vscode.window.showErrorMessage(`Augment SDD: ${msg}`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// 7.1 Fetch ready beads; pass batchSize so the backend can limit server-side.
|
|
75
|
+
const batchSize = (0, getConfig_1.getConfig)('batchSize', 3);
|
|
76
|
+
let batch;
|
|
77
|
+
try {
|
|
78
|
+
batch = await adapter.ready(batchSize);
|
|
66
79
|
}
|
|
67
80
|
catch (err) {
|
|
68
81
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -73,13 +86,10 @@ async function executeBeadsBatch() {
|
|
|
73
86
|
}
|
|
74
87
|
return;
|
|
75
88
|
}
|
|
76
|
-
if (
|
|
89
|
+
if (batch.length === 0) {
|
|
77
90
|
vscode.window.showInformationMessage('Augment SDD: No beads ready.');
|
|
78
91
|
return;
|
|
79
92
|
}
|
|
80
|
-
// 7.2 Slice to batchSize
|
|
81
|
-
const batchSize = (0, getConfig_1.getConfig)('batchSize', 3);
|
|
82
|
-
const batch = beads.slice(0, batchSize);
|
|
83
93
|
(0, logger_1.log)(`executeBeadsBatch: ${batch.length} bead(s) selected (batchSize=${batchSize})`);
|
|
84
94
|
// 7.3 Build prompt
|
|
85
95
|
const prompt = buildBatchPrompt(batch);
|
|
@@ -115,15 +125,19 @@ async function executeBeadsBatch() {
|
|
|
115
125
|
}
|
|
116
126
|
return;
|
|
117
127
|
}
|
|
118
|
-
// 7.
|
|
128
|
+
// ps-fix 7.3 — Call adapter.update() for each sentinel; continue on failure.
|
|
119
129
|
let successCount = 0;
|
|
120
130
|
let failureCount = 0;
|
|
121
131
|
for (const updateCmd of updates) {
|
|
122
132
|
const parts = updateCmd.split(/\s+/);
|
|
123
|
-
// parts: ['bd', 'update', '<id>', '--status', '
|
|
124
|
-
const
|
|
133
|
+
// parts: ['bd', 'update', '<id>', '--status', '<status>']
|
|
134
|
+
const id = parts[2];
|
|
135
|
+
const rawStatus = parts[4] ?? 'done';
|
|
136
|
+
// Normalise sentinel status → adapter-compatible union value.
|
|
137
|
+
// auggie always emits 'done'; guard against 'in-progress' from future PS output.
|
|
138
|
+
const status = (rawStatus === 'in-progress' ? 'in_progress' : rawStatus);
|
|
125
139
|
try {
|
|
126
|
-
await
|
|
140
|
+
await adapter.update(id, status);
|
|
127
141
|
(0, logger_1.log)(`executeBeadsBatch: ✓ ${updateCmd}`);
|
|
128
142
|
successCount++;
|
|
129
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeBeadsBatch.js","sourceRoot":"","sources":["../../src/commands/executeBeadsBatch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"executeBeadsBatch.js","sourceRoot":"","sources":["../../src/commands/executeBeadsBatch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,8CAkHC;AAzID;;;;;;;;;;;;;GAaG;AACH,+CAAiC;AACjC,4CAAyC;AACzC,kDAA+C;AAC/C,4CAA2D;AAC3D,kEAA+D;AAC/D,8DAA2D;AAG3D,gEAAgE;AACzD,KAAK,UAAU,iBAAiB;IACrC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IACzE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,wCAAwC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,IAAI,OAAoD,CAAC;IACzD,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,IAAA,iCAAe,EAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAS,WAAW,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAA,YAAG,EAAC,oDAAoD,GAAG,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CACjD,6CAA6C,GAAG,EAAE,EAClD,WAAW,CACZ,CAAC;QACF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,IAAA,4BAAmB,GAAE,CAAC;QAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,IAAA,YAAG,EAAC,sBAAsB,KAAK,CAAC,MAAM,gCAAgC,SAAS,GAAG,CAAC,CAAC;IAEpF,mBAAmB;IACnB,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAA,YAAG,EAAC,oCAAoC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzD,iBAAiB;IACjB,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,qBAAS,EAAS,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,YAAY,GAAG,MAAM,IAAA,eAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAO,EAAE,YAAG,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAA,YAAG,EAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CACjD,yCAAyC,GAAG,EAAE,EAC9C,WAAW,CACZ,CAAC;QACF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,IAAA,4BAAmB,GAAE,CAAC;QAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAA,mCAAgB,EAAC,YAAY,CAAC,CAAC;IAC/C,IAAA,YAAG,EAAC,6BAA6B,OAAO,CAAC,MAAM,mBAAmB,CAAC,CAAC;IAEpE,iCAAiC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAA,YAAG,EAAC,mFAAmF,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CACnD,2FAA2F,EAC3F,WAAW,CACZ,CAAC;QACF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,IAAA,4BAAmB,GAAE,CAAC;QAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,0DAA0D;QAC1D,MAAM,EAAE,GAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QACrC,8DAA8D;QAC9D,iFAAiF;QACjF,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CACtC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACjC,IAAA,YAAG,EAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;YACzC,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAA,YAAG,EAAC,wBAAwB,SAAS,MAAM,GAAG,EAAE,CAAC,CAAC;YAClD,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAClC,iCAAiC,YAAY,uBAAuB,CACrE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CACnD,oCAAoC,YAAY,gBAAgB,YAAY,qBAAqB,EACjG,WAAW,CACZ,CAAC;QACF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,IAAA,4BAAmB,GAAE,CAAC;QAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,MAAM,GAAG;QACb,iEAAiE;QACjE,6DAA6D;QAC7D,EAAE;QACF,oEAAoE;QACpE,qCAAqC;QACrC,qHAAqH;QACrH,sCAAsC;QACtC,EAAE;QACF,+DAA+D;KAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7B,2BAA2B,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,WAAW,EAAE,CACpF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEf,OAAO,GAAG,MAAM,OAAO,QAAQ,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -40,16 +40,18 @@ exports.generateBeads = generateBeads;
|
|
|
40
40
|
* Steps (tasks 6.1–6.5):
|
|
41
41
|
* 6.1 Glob openspec/changes/{id}/tasks.md and select the most recently modified.
|
|
42
42
|
* 6.2 Parse using parseTasksMarkdown (heading-based regex, design D3).
|
|
43
|
-
* 6.3
|
|
44
|
-
* 6.4 Continue processing on individual
|
|
45
|
-
* 6.5
|
|
43
|
+
* 6.3 Create a bead for each task via the BeadsAdapter.
|
|
44
|
+
* 6.4 Continue processing on individual create failures; log each one.
|
|
45
|
+
* 6.5 Fetch adapter.ready() after all creates; display ready-bead count.
|
|
46
|
+
*
|
|
47
|
+
* ps-fix task 7.1: uses getBeadsAdapter() so the command is backend-agnostic.
|
|
46
48
|
*/
|
|
47
49
|
const vscode = __importStar(require("vscode"));
|
|
48
50
|
const fs = __importStar(require("fs"));
|
|
49
51
|
const path = __importStar(require("path"));
|
|
50
|
-
const runCli_1 = require("../utils/runCli");
|
|
51
52
|
const logger_1 = require("../utils/logger");
|
|
52
53
|
const parseTasksMarkdown_1 = require("../parsers/parseTasksMarkdown");
|
|
54
|
+
const getBeadsAdapter_1 = require("../beads/getBeadsAdapter");
|
|
53
55
|
/** Entry point registered as `augmentSdd.generateBeads`. */
|
|
54
56
|
async function generateBeads() {
|
|
55
57
|
const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
|
|
@@ -74,41 +76,42 @@ async function generateBeads() {
|
|
|
74
76
|
return;
|
|
75
77
|
}
|
|
76
78
|
(0, logger_1.log)(`Parsed ${tasks.length} task(s) from ${path.basename(path.dirname(tasksFile))}/tasks.md`);
|
|
77
|
-
//
|
|
79
|
+
// ps-fix 7.1 — Obtain adapter once; reuse for all operations.
|
|
80
|
+
let adapter;
|
|
81
|
+
try {
|
|
82
|
+
adapter = await (0, getBeadsAdapter_1.getBeadsAdapter)(workspaceRoot);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
86
|
+
vscode.window.showErrorMessage(`Augment SDD: ${msg}`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// 6.3–6.4 — Create beads via adapter; continue on individual failures.
|
|
78
90
|
let created = 0;
|
|
79
91
|
for (const task of tasks) {
|
|
80
92
|
try {
|
|
81
|
-
//
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const quotedDesc = `"${task.description.replace(/"/g, '\\"')}"`;
|
|
85
|
-
await (0, runCli_1.runCli)('bd', ['create', quotedTitle, '--description', quotedDesc], workspaceRoot, 30000, logger_1.log);
|
|
93
|
+
// Adapter args are passed as array elements — no shell quoting required.
|
|
94
|
+
const id = await adapter.create(task.title, task.description);
|
|
95
|
+
(0, logger_1.log)(`Created bead ${id}: ${task.title}`);
|
|
86
96
|
created++;
|
|
87
97
|
}
|
|
88
98
|
catch (err) {
|
|
89
99
|
const msg = err instanceof Error ? err.message : String(err);
|
|
90
|
-
(0, logger_1.log)(`
|
|
100
|
+
(0, logger_1.log)(`create failed for "${task.title}": ${msg}`);
|
|
91
101
|
// Do NOT break — spec 6.4 requires continuing with remaining tasks.
|
|
92
102
|
}
|
|
93
103
|
}
|
|
94
104
|
(0, logger_1.log)(`Created ${created}/${tasks.length} bead(s).`);
|
|
95
|
-
// 6.5 —
|
|
105
|
+
// 6.5 — Fetch ready beads via adapter and display count.
|
|
96
106
|
try {
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
const parsed = JSON.parse(readyJson);
|
|
101
|
-
readyCount = Array.isArray(parsed) ? parsed.length : 0;
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
(0, logger_1.log)('Warning: could not parse bd ready --json output as JSON array');
|
|
105
|
-
}
|
|
107
|
+
const readyBeads = await adapter.ready();
|
|
108
|
+
const readyCount = readyBeads.length;
|
|
106
109
|
vscode.window.showInformationMessage(`Augment SDD: Created ${created}/${tasks.length} bead(s). ` +
|
|
107
110
|
`${readyCount} bead(s) ready to execute.`);
|
|
108
111
|
}
|
|
109
112
|
catch (err) {
|
|
110
113
|
const msg = err instanceof Error ? err.message : String(err);
|
|
111
|
-
(0, logger_1.log)(`
|
|
114
|
+
(0, logger_1.log)(`adapter.ready() failed: ${msg}`);
|
|
112
115
|
const action = await vscode.window.showInformationMessage(`Augment SDD: Created ${created}/${tasks.length} bead(s). ` +
|
|
113
116
|
`(Could not retrieve ready count.)`, 'View Logs');
|
|
114
117
|
if (action === 'View Logs') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateBeads.js","sourceRoot":"","sources":["../../src/commands/generateBeads.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generateBeads.js","sourceRoot":"","sources":["../../src/commands/generateBeads.ts"],"names":[],"mappings":"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"}
|