@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.
Files changed (58) hide show
  1. package/out/beads/BeadsAdapter.js +30 -0
  2. package/out/beads/BeadsAdapter.js.map +1 -0
  3. package/out/beads/ClassicBeadsAdapter.js +84 -0
  4. package/out/beads/ClassicBeadsAdapter.js.map +1 -0
  5. package/out/beads/PowerShellBeadsAdapter.js +118 -0
  6. package/out/beads/PowerShellBeadsAdapter.js.map +1 -0
  7. package/out/beads/getBeadsAdapter.js +94 -0
  8. package/out/beads/getBeadsAdapter.js.map +1 -0
  9. package/out/commands/executeBeadsBatch.js +29 -15
  10. package/out/commands/executeBeadsBatch.js.map +1 -1
  11. package/out/commands/generateBeads.js +25 -22
  12. package/out/commands/generateBeads.js.map +1 -1
  13. package/out/commands/initWizard.js +184 -0
  14. package/out/commands/initWizard.js.map +1 -0
  15. package/out/extension.js +10 -0
  16. package/out/extension.js.map +1 -1
  17. package/out/test/integration/executeBeadsBatch.test.js +83 -57
  18. package/out/test/integration/executeBeadsBatch.test.js.map +1 -1
  19. package/out/test/integration/generateBeads.test.js +156 -0
  20. package/out/test/integration/generateBeads.test.js.map +1 -0
  21. package/out/test/integration/generateOpenSpec.test.js +16 -39
  22. package/out/test/integration/generateOpenSpec.test.js.map +1 -1
  23. package/out/test/unit/ClassicBeadsAdapter.test.js +121 -0
  24. package/out/test/unit/ClassicBeadsAdapter.test.js.map +1 -0
  25. package/out/test/unit/PowerShellBeadsAdapter.test.js +120 -0
  26. package/out/test/unit/PowerShellBeadsAdapter.test.js.map +1 -0
  27. package/out/test/unit/getBeadsAdapter.test.js +97 -0
  28. package/out/test/unit/getBeadsAdapter.test.js.map +1 -0
  29. package/out/test/unit/initWizard.test.js +170 -0
  30. package/out/test/unit/initWizard.test.js.map +1 -0
  31. package/out/test/unit/runCli.test.js +11 -24
  32. package/out/test/unit/runCli.test.js.map +1 -1
  33. package/out/utils/detectCli.js +47 -1
  34. package/out/utils/detectCli.js.map +1 -1
  35. package/out/utils/runCli.js +9 -3
  36. package/out/utils/runCli.js.map +1 -1
  37. package/package.json +22 -1
  38. package/.eslintrc.json +0 -20
  39. package/src/commands/executeBeadsBatch.ts +0 -153
  40. package/src/commands/fullPipeline.ts +0 -120
  41. package/src/commands/generateBeads.ts +0 -127
  42. package/src/commands/generateOpenSpec.ts +0 -227
  43. package/src/dashboard/DashboardPanel.ts +0 -168
  44. package/src/extension.ts +0 -77
  45. package/src/parsers/parseBeadUpdates.ts +0 -26
  46. package/src/parsers/parseTasksMarkdown.ts +0 -61
  47. package/src/test/integration/executeBeadsBatch.test.ts +0 -129
  48. package/src/test/integration/generateOpenSpec.test.ts +0 -129
  49. package/src/test/runTest.ts +0 -15
  50. package/src/test/suite/index.ts +0 -37
  51. package/src/test/unit/parseBeadUpdates.test.ts +0 -48
  52. package/src/test/unit/parseTasksMarkdown.test.ts +0 -41
  53. package/src/test/unit/runCli.test.ts +0 -109
  54. package/src/utils/detectCli.ts +0 -28
  55. package/src/utils/getConfig.ts +0 -25
  56. package/src/utils/logger.ts +0 -42
  57. package/src/utils/runCli.ts +0 -102
  58. 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 and JSON-parse bd ready --json; exit gracefully if empty.
42
- * 7.2 Slice first N beads per augmentSdd.batchSize setting (default 3).
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 parsed bd update command; continue on partial failure.
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.1 Fetch ready beads
62
- let beads;
64
+ // ps-fix 7.2 Obtain adapter once; reuse for ready() and update().
65
+ let adapter;
63
66
  try {
64
- const raw = await (0, runCli_1.runCli)('bd', ['ready', '--json'], workspaceRoot, 30000, logger_1.log);
65
- beads = JSON.parse(raw);
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 (beads.length === 0) {
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.6 Execute each sentinel command; continue on partial failure
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', 'done']
124
- const args = parts.slice(1); // drop 'bd'
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 (0, runCli_1.runCli)('bd', args, workspaceRoot, 30000, logger_1.log);
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":"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"}
1
+ {"version":3,"file":"executeBeadsBatch.js","sourceRoot":"","sources":["../../src/commands/executeBeadsBatch.ts"],"names":[],"mappings":"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"}
@@ -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 Execute bd create --title --description for each task.
44
- * 6.4 Continue processing on individual bd create failures; log each one.
45
- * 6.5 Run bd ready --json after all creates; display ready-bead count.
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
- // 6.3–6.4Create beads; continue on individual failures.
79
+ // ps-fix 7.1Obtain 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
- // Shell-quote title and description so spaces are preserved correctly
82
- // when spawn joins args into a shell command string (shell: true).
83
- const quotedTitle = `"${task.title.replace(/"/g, '\\"')}"`;
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)(`bd create failed for "${task.title}": ${msg}`);
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 — Run bd ready --json and display count.
105
+ // 6.5 — Fetch ready beads via adapter and display count.
96
106
  try {
97
- const readyJson = await (0, runCli_1.runCli)('bd', ['ready', '--json'], workspaceRoot, 30000, logger_1.log);
98
- let readyCount = 0;
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)(`bd ready --json failed: ${msg}`);
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,sCA+EC;AAjGD;;;;;;;;;GASG;AACH,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAC7B,4CAAyC;AACzC,4CAA2D;AAC3D,sEAAmE;AAEnE,4DAA4D;AACrD,KAAK,UAAU,aAAa;IACjC,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,kDAAkD;IAClD,MAAM,SAAS,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAC5B,uDAAuD;YACvD,oDAAoD,CACrD,CAAC;QACF,OAAO;IACT,CAAC;IACD,IAAA,YAAG,EAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;IAEpC,mCAAmC;IACnC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAA,uCAAkB,EAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAC5B,yEAAyE,OAAO,EAAE,CACnF,CAAC;QACF,OAAO;IACT,CAAC;IACD,IAAA,YAAG,EAAC,UAAU,KAAK,CAAC,MAAM,iBAAiB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC;IAE9F,2DAA2D;IAC3D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,sEAAsE;YACtE,mEAAmE;YACnE,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;YAC3D,MAAM,UAAU,GAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;YACjE,MAAM,IAAA,eAAM,EACV,IAAI,EACJ,CAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,EACpD,aAAa,EACb,KAAM,EACN,YAAG,CACJ,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,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,yBAAyB,IAAI,CAAC,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;YACpD,oEAAoE;QACtE,CAAC;IACH,CAAC;IACD,IAAA,YAAG,EAAC,WAAW,OAAO,IAAI,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;IAEnD,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAA,eAAM,EAAC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,KAAM,EAAE,YAAG,CAAC,CAAC;QACtF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAc,CAAC;YAClD,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,IAAA,YAAG,EAAC,+DAA+D,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAClC,wBAAwB,OAAO,IAAI,KAAK,CAAC,MAAM,YAAY;YAC3D,GAAG,UAAU,4BAA4B,CAC1C,CAAC;IACJ,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,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,sBAAsB,CACvD,wBAAwB,OAAO,IAAI,KAAK,CAAC,MAAM,YAAY;YAC3D,mCAAmC,EACnC,WAAW,CACZ,CAAC;QACF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,IAAA,4BAAmB,GAAE,CAAC;QAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,aAAqB;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAErD,MAAM,UAAU,GAA+C,EAAE,CAAC;IAElE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAClD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"generateBeads.js","sourceRoot":"","sources":["../../src/commands/generateBeads.ts"],"names":[],"mappings":"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"}