@applica-software-guru/sdd-core 1.3.4 → 1.4.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.
Files changed (53) hide show
  1. package/dist/errors.d.ts +7 -0
  2. package/dist/errors.d.ts.map +1 -1
  3. package/dist/errors.js +17 -1
  4. package/dist/errors.js.map +1 -1
  5. package/dist/index.d.ts +9 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +27 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/prompt/apply-prompt-generator.d.ts +2 -1
  10. package/dist/prompt/apply-prompt-generator.d.ts.map +1 -1
  11. package/dist/prompt/apply-prompt-generator.js +51 -2
  12. package/dist/prompt/apply-prompt-generator.js.map +1 -1
  13. package/dist/prompt/draft-prompt-generator.d.ts +8 -0
  14. package/dist/prompt/draft-prompt-generator.d.ts.map +1 -0
  15. package/dist/prompt/draft-prompt-generator.js +59 -0
  16. package/dist/prompt/draft-prompt-generator.js.map +1 -0
  17. package/dist/remote/api-client.d.ts +38 -0
  18. package/dist/remote/api-client.d.ts.map +1 -0
  19. package/dist/remote/api-client.js +101 -0
  20. package/dist/remote/api-client.js.map +1 -0
  21. package/dist/remote/state.d.ts +4 -0
  22. package/dist/remote/state.d.ts.map +1 -0
  23. package/dist/remote/state.js +35 -0
  24. package/dist/remote/state.js.map +1 -0
  25. package/dist/remote/sync-engine.d.ts +11 -0
  26. package/dist/remote/sync-engine.d.ts.map +1 -0
  27. package/dist/remote/sync-engine.js +258 -0
  28. package/dist/remote/sync-engine.js.map +1 -0
  29. package/dist/remote/types.d.ts +93 -0
  30. package/dist/remote/types.d.ts.map +1 -0
  31. package/dist/remote/types.js +3 -0
  32. package/dist/remote/types.js.map +1 -0
  33. package/dist/sdd.d.ts +15 -0
  34. package/dist/sdd.d.ts.map +1 -1
  35. package/dist/sdd.js +99 -6
  36. package/dist/sdd.js.map +1 -1
  37. package/dist/types.d.ts +9 -4
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +1 -1
  40. package/src/errors.ts +16 -0
  41. package/src/index.ts +23 -1
  42. package/src/prompt/apply-prompt-generator.ts +61 -2
  43. package/src/prompt/draft-prompt-generator.ts +74 -0
  44. package/src/remote/api-client.ts +138 -0
  45. package/src/remote/state.ts +35 -0
  46. package/src/remote/sync-engine.ts +302 -0
  47. package/src/remote/types.ts +102 -0
  48. package/src/sdd.ts +114 -6
  49. package/src/types.ts +10 -4
  50. package/tests/api-client.test.ts +198 -0
  51. package/tests/cr.test.ts +27 -10
  52. package/tests/remote-state.test.ts +90 -0
  53. package/tests/sync-engine.test.ts +341 -0
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pushToRemote = pushToRemote;
7
+ exports.pullFromRemote = pullFromRemote;
8
+ exports.pullCRsFromRemote = pullCRsFromRemote;
9
+ exports.pullBugsFromRemote = pullBugsFromRemote;
10
+ exports.getRemoteStatus = getRemoteStatus;
11
+ const promises_1 = require("node:fs/promises");
12
+ const node_fs_1 = require("node:fs");
13
+ const node_path_1 = require("node:path");
14
+ const node_crypto_1 = require("node:crypto");
15
+ const gray_matter_1 = __importDefault(require("gray-matter"));
16
+ const config_manager_js_1 = require("../config/config-manager.js");
17
+ const story_parser_js_1 = require("../parser/story-parser.js");
18
+ const api_client_js_1 = require("./api-client.js");
19
+ const state_js_1 = require("./state.js");
20
+ function sha256(content) {
21
+ return (0, node_crypto_1.createHash)('sha256').update(content, 'utf-8').digest('hex');
22
+ }
23
+ /** Normalize path separators to forward slash for remote consistency */
24
+ function normalizePath(p) {
25
+ return p.split('\\').join('/');
26
+ }
27
+ /**
28
+ * Build a markdown file with frontmatter for a pulled document.
29
+ */
30
+ function buildStoryMarkdown(title, body, version, status = 'synced') {
31
+ const fm = {
32
+ title,
33
+ status,
34
+ author: 'remote',
35
+ 'last-modified': new Date().toISOString(),
36
+ version: `${version}.0`,
37
+ };
38
+ return gray_matter_1.default.stringify(body, fm);
39
+ }
40
+ /**
41
+ * Build a markdown file for a pulled change request.
42
+ */
43
+ function buildCRMarkdown(title, body, createdAt, status = 'draft') {
44
+ const fm = {
45
+ title,
46
+ status,
47
+ author: 'remote',
48
+ 'created-at': createdAt,
49
+ };
50
+ return gray_matter_1.default.stringify(body, fm);
51
+ }
52
+ /**
53
+ * Build a markdown file for a pulled bug.
54
+ */
55
+ function buildBugMarkdown(title, body, createdAt, status = 'open') {
56
+ const fm = {
57
+ title,
58
+ status,
59
+ author: 'remote',
60
+ 'created-at': createdAt,
61
+ };
62
+ return gray_matter_1.default.stringify(body, fm);
63
+ }
64
+ async function pushToRemote(root, options) {
65
+ const config = await (0, config_manager_js_1.readConfig)(root);
66
+ const api = (0, api_client_js_1.buildApiConfig)(config);
67
+ const files = await (0, story_parser_js_1.parseAllStoryFiles)(root);
68
+ const toPush = files.filter((f) => {
69
+ if (options?.paths && options.paths.length > 0)
70
+ return options.paths.includes(f.relativePath);
71
+ if (options?.all)
72
+ return true;
73
+ return f.frontmatter.status !== 'synced';
74
+ });
75
+ if (toPush.length === 0) {
76
+ return { created: 0, updated: 0, pushed: [] };
77
+ }
78
+ const documents = toPush.map((f) => ({
79
+ path: normalizePath(f.relativePath),
80
+ title: f.frontmatter.title,
81
+ content: f.body,
82
+ }));
83
+ const result = await (0, api_client_js_1.pushDocs)(api, documents);
84
+ // Update remote state
85
+ const state = await (0, state_js_1.readRemoteState)(root);
86
+ for (const doc of result.documents) {
87
+ const localPath = doc.path;
88
+ const absPath = (0, node_path_1.resolve)(root, localPath);
89
+ const rawContent = (0, node_fs_1.existsSync)(absPath) ? await (0, promises_1.readFile)(absPath, 'utf-8') : '';
90
+ state.documents[localPath] = {
91
+ remoteId: doc.id,
92
+ remoteVersion: doc.version,
93
+ localHash: sha256(rawContent),
94
+ lastSynced: new Date().toISOString(),
95
+ };
96
+ }
97
+ state.lastPush = new Date().toISOString();
98
+ await (0, state_js_1.writeRemoteState)(root, state);
99
+ // Mark local files as synced (drafts are excluded — they need AI enrichment first)
100
+ for (const f of toPush) {
101
+ if (f.frontmatter.status === 'draft')
102
+ continue;
103
+ const absPath = (0, node_path_1.resolve)(root, f.relativePath);
104
+ const content = await (0, promises_1.readFile)(absPath, 'utf-8');
105
+ const updated = content.replace(/^status:\s*(new|changed)/m, 'status: synced');
106
+ if (updated !== content) {
107
+ await (0, promises_1.writeFile)(absPath, updated, 'utf-8');
108
+ }
109
+ }
110
+ return {
111
+ created: result.created,
112
+ updated: result.updated,
113
+ pushed: toPush.map((f) => f.relativePath),
114
+ };
115
+ }
116
+ // ─── Pull Documents ──────────────────────────────────────────────────────
117
+ async function pullFromRemote(root) {
118
+ const config = await (0, config_manager_js_1.readConfig)(root);
119
+ const api = (0, api_client_js_1.buildApiConfig)(config);
120
+ const remoteDocs = await (0, api_client_js_1.pullDocs)(api);
121
+ const state = await (0, state_js_1.readRemoteState)(root);
122
+ const created = [];
123
+ const updated = [];
124
+ const conflicts = [];
125
+ for (const doc of remoteDocs) {
126
+ const localPath = doc.path;
127
+ const absPath = (0, node_path_1.resolve)(root, localPath);
128
+ const tracked = state.documents[localPath];
129
+ if (!(0, node_fs_1.existsSync)(absPath)) {
130
+ // New file — create locally, preserving remote status
131
+ const dir = (0, node_path_1.dirname)(absPath);
132
+ if (!(0, node_fs_1.existsSync)(dir)) {
133
+ await (0, promises_1.mkdir)(dir, { recursive: true });
134
+ }
135
+ const localStatus = doc.status === 'draft' ? 'draft' : 'synced';
136
+ const markdown = buildStoryMarkdown(doc.title, doc.content, doc.version, localStatus);
137
+ await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
138
+ created.push(localPath);
139
+ updateDocState(state, doc, localPath, markdown);
140
+ }
141
+ else if (!tracked || doc.version > tracked.remoteVersion) {
142
+ // Remote is newer — check for local changes
143
+ const localContent = await (0, promises_1.readFile)(absPath, 'utf-8');
144
+ const localHash = sha256(localContent);
145
+ if (tracked && localHash !== tracked.localHash) {
146
+ // Local file changed since last sync AND remote changed → conflict
147
+ conflicts.push({
148
+ path: localPath,
149
+ localVersion: tracked.remoteVersion.toString(),
150
+ remoteVersion: doc.version,
151
+ reason: 'Both local and remote have changes since last sync',
152
+ });
153
+ }
154
+ else {
155
+ // Local unchanged — safe to overwrite
156
+ const localStatus = doc.status === 'draft' ? 'draft' : 'synced';
157
+ const markdown = buildStoryMarkdown(doc.title, doc.content, doc.version, localStatus);
158
+ await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
159
+ updated.push(localPath);
160
+ updateDocState(state, doc, localPath, markdown);
161
+ }
162
+ }
163
+ // If versions match, skip
164
+ }
165
+ state.lastPull = new Date().toISOString();
166
+ await (0, state_js_1.writeRemoteState)(root, state);
167
+ return { created, updated, conflicts };
168
+ }
169
+ function updateDocState(state, doc, localPath, markdownContent) {
170
+ state.documents[localPath] = {
171
+ remoteId: doc.id,
172
+ remoteVersion: doc.version,
173
+ localHash: sha256(markdownContent),
174
+ lastSynced: new Date().toISOString(),
175
+ };
176
+ }
177
+ // ─── Pull CRs ────────────────────────────────────────────────────────────
178
+ async function pullCRsFromRemote(root) {
179
+ const config = await (0, config_manager_js_1.readConfig)(root);
180
+ const api = (0, api_client_js_1.buildApiConfig)(config);
181
+ const remoteCRs = await (0, api_client_js_1.fetchPendingCRs)(api);
182
+ const crDir = (0, node_path_1.resolve)(root, 'change-requests');
183
+ if (!(0, node_fs_1.existsSync)(crDir)) {
184
+ await (0, promises_1.mkdir)(crDir, { recursive: true });
185
+ }
186
+ let created = 0;
187
+ let updated = 0;
188
+ for (const cr of remoteCRs) {
189
+ const filename = `CR-${cr.id.substring(0, 8)}.md`;
190
+ const absPath = (0, node_path_1.resolve)(crDir, filename);
191
+ const crStatus = cr.status === 'draft' ? 'draft' : 'pending';
192
+ const markdown = buildCRMarkdown(cr.title, cr.body, cr.created_at, crStatus);
193
+ if ((0, node_fs_1.existsSync)(absPath)) {
194
+ updated++;
195
+ }
196
+ else {
197
+ created++;
198
+ }
199
+ await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
200
+ }
201
+ return { created, updated };
202
+ }
203
+ // ─── Pull Bugs ───────────────────────────────────────────────────────────
204
+ async function pullBugsFromRemote(root) {
205
+ const config = await (0, config_manager_js_1.readConfig)(root);
206
+ const api = (0, api_client_js_1.buildApiConfig)(config);
207
+ const remoteBugs = await (0, api_client_js_1.fetchOpenBugs)(api);
208
+ const bugsDir = (0, node_path_1.resolve)(root, 'bugs');
209
+ if (!(0, node_fs_1.existsSync)(bugsDir)) {
210
+ await (0, promises_1.mkdir)(bugsDir, { recursive: true });
211
+ }
212
+ let created = 0;
213
+ let updated = 0;
214
+ for (const bug of remoteBugs) {
215
+ const filename = `BUG-${bug.id.substring(0, 8)}.md`;
216
+ const absPath = (0, node_path_1.resolve)(bugsDir, filename);
217
+ const bugStatus = bug.status === 'draft' ? 'draft' : 'open';
218
+ const markdown = buildBugMarkdown(bug.title, bug.body, bug.created_at, bugStatus);
219
+ if ((0, node_fs_1.existsSync)(absPath)) {
220
+ updated++;
221
+ }
222
+ else {
223
+ created++;
224
+ }
225
+ await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
226
+ }
227
+ return { created, updated };
228
+ }
229
+ // ─── Remote Status ───────────────────────────────────────────────────────
230
+ async function getRemoteStatus(root) {
231
+ const config = await (0, config_manager_js_1.readConfig)(root);
232
+ if (!config.remote?.url) {
233
+ return { configured: false, url: null, connected: false, localPending: 0, remoteDocs: 0 };
234
+ }
235
+ const files = await (0, story_parser_js_1.parseAllStoryFiles)(root);
236
+ const localPending = files.filter((f) => f.frontmatter.status !== 'synced').length;
237
+ try {
238
+ const api = (0, api_client_js_1.buildApiConfig)(config);
239
+ const docs = await (0, api_client_js_1.pullDocs)(api);
240
+ return {
241
+ configured: true,
242
+ url: config.remote.url,
243
+ connected: true,
244
+ localPending,
245
+ remoteDocs: docs.length,
246
+ };
247
+ }
248
+ catch {
249
+ return {
250
+ configured: true,
251
+ url: config.remote.url,
252
+ connected: false,
253
+ localPending,
254
+ remoteDocs: 0,
255
+ };
256
+ }
257
+ }
258
+ //# sourceMappingURL=sync-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../src/remote/sync-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /** Mirrors the sdd-flow API response for documents */
2
+ export interface RemoteDocResponse {
3
+ id: string;
4
+ project_id: string;
5
+ path: string;
6
+ title: string;
7
+ status: string;
8
+ version: number;
9
+ content: string;
10
+ last_modified_by: string | null;
11
+ created_at: string;
12
+ updated_at: string;
13
+ }
14
+ /** Bulk push response from POST /cli/push-docs */
15
+ export interface RemoteDocBulkResponse {
16
+ created: number;
17
+ updated: number;
18
+ documents: RemoteDocResponse[];
19
+ }
20
+ /** Mirrors the sdd-flow API response for change requests */
21
+ export interface RemoteCRResponse {
22
+ id: string;
23
+ project_id: string;
24
+ title: string;
25
+ body: string;
26
+ status: string;
27
+ author_id: string;
28
+ assignee_id: string | null;
29
+ target_files: string[] | null;
30
+ closed_at: string | null;
31
+ created_at: string;
32
+ updated_at: string;
33
+ }
34
+ /** Mirrors the sdd-flow API response for bugs */
35
+ export interface RemoteBugResponse {
36
+ id: string;
37
+ project_id: string;
38
+ title: string;
39
+ body: string;
40
+ status: string;
41
+ severity: string;
42
+ author_id: string;
43
+ assignee_id: string | null;
44
+ closed_at: string | null;
45
+ created_at: string;
46
+ updated_at: string;
47
+ }
48
+ /** Tracks per-document remote sync state */
49
+ export interface RemoteDocState {
50
+ remoteId: string;
51
+ remoteVersion: number;
52
+ localHash: string;
53
+ lastSynced: string;
54
+ }
55
+ /** Persisted to .sdd/remote-state.json */
56
+ export interface RemoteState {
57
+ lastPull?: string;
58
+ lastPush?: string;
59
+ documents: Record<string, RemoteDocState>;
60
+ }
61
+ /** Result of a push operation */
62
+ export interface PushResult {
63
+ created: number;
64
+ updated: number;
65
+ pushed: string[];
66
+ }
67
+ /** A conflict detected during pull */
68
+ export interface PullConflict {
69
+ path: string;
70
+ localVersion: string;
71
+ remoteVersion: number;
72
+ reason: string;
73
+ }
74
+ /** Result of a pull operation */
75
+ export interface PullResult {
76
+ created: string[];
77
+ updated: string[];
78
+ conflicts: PullConflict[];
79
+ }
80
+ /** Result of a pull CRs/Bugs operation */
81
+ export interface PullEntitiesResult {
82
+ created: number;
83
+ updated: number;
84
+ }
85
+ /** Result of remote status check */
86
+ export interface RemoteStatusResult {
87
+ configured: boolean;
88
+ url: string | null;
89
+ connected: boolean;
90
+ localPending: number;
91
+ remoteDocs: number;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/remote/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/remote/types.ts"],"names":[],"mappings":""}
package/dist/sdd.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { StoryStatus, ValidationResult, SDDConfig, ChangeRequest, Bug } from "./types.js";
2
2
  import type { ProjectInfo } from "./scaffold/templates.js";
3
3
  import { type SyncAdaptersOptions, type SyncAdaptersResult } from "./scaffold/skill-adapters.js";
4
+ import type { PushResult, PullResult, PullEntitiesResult, RemoteStatusResult } from "./remote/types.js";
4
5
  export declare class SDD {
5
6
  private root;
6
7
  constructor(options: {
@@ -22,6 +23,20 @@ export declare class SDD {
22
23
  bugs(): Promise<Bug[]>;
23
24
  openBugs(): Promise<Bug[]>;
24
25
  markBugResolved(paths?: string[]): Promise<string[]>;
26
+ drafts(): Promise<{
27
+ docs: import("./types.js").StoryFile[];
28
+ crs: ChangeRequest[];
29
+ bugs: Bug[];
30
+ }>;
31
+ draftEnrichmentPrompt(): Promise<string | null>;
32
+ markDraftsEnriched(paths?: string[]): Promise<string[]>;
33
+ remoteStatus(): Promise<RemoteStatusResult>;
34
+ push(paths?: string[], options?: {
35
+ all?: boolean;
36
+ }): Promise<PushResult>;
37
+ pull(): Promise<PullResult>;
38
+ pullCRs(): Promise<PullEntitiesResult>;
39
+ pullBugs(): Promise<PullEntitiesResult>;
25
40
  private ensureInitialized;
26
41
  }
27
42
  //# sourceMappingURL=sdd.d.ts.map
package/dist/sdd.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdd.d.ts","sourceRoot":"","sources":["../src/sdd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAU/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,8BAA8B,CAAC;AAEtC,qBAAa,GAAG;IACd,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAI/B,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI3C,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAK9E,iBAAiB,IAAI,MAAM,EAAE;IAIvB,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAK5B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAc9B,OAAO,IAAI,OAAO,CAAC,OAAO,YAAY,EAAE,SAAS,EAAE,CAAC;IAMpD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUrC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAMrC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6B/C,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAK1C,qBAAqB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAKjD,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBlD,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKtB,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAK1B,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB1D,OAAO,CAAC,iBAAiB;CAK1B"}
1
+ {"version":3,"file":"sdd.d.ts","sourceRoot":"","sources":["../src/sdd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAW/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAExG,qBAAa,GAAG;IACd,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAI/B,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI3C,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAK9E,iBAAiB,IAAI,MAAM,EAAE;IAIvB,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAK5B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAc9B,OAAO,IAAI,OAAO,CAAC,OAAO,YAAY,EAAE,SAAS,EAAE,CAAC;IAMpD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcrC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAMrC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6B/C,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAK1C,qBAAqB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAKjD,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBlD,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKtB,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAK1B,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBpD,MAAM,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,YAAY,EAAE,SAAS,EAAE,CAAC;QAAC,GAAG,EAAE,aAAa,EAAE,CAAC;QAAC,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAchG,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS/C,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6CvD,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAK3C,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAKxE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAK3B,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAKtC,QAAQ,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAK7C,OAAO,CAAC,iBAAiB;CAK1B"}
package/dist/sdd.js CHANGED
@@ -7,12 +7,14 @@ const errors_js_1 = require("./errors.js");
7
7
  const story_parser_js_1 = require("./parser/story-parser.js");
8
8
  const prompt_generator_js_1 = require("./prompt/prompt-generator.js");
9
9
  const apply_prompt_generator_js_1 = require("./prompt/apply-prompt-generator.js");
10
+ const draft_prompt_generator_js_1 = require("./prompt/draft-prompt-generator.js");
10
11
  const validator_js_1 = require("./validate/validator.js");
11
12
  const init_js_1 = require("./scaffold/init.js");
12
13
  const config_manager_js_1 = require("./config/config-manager.js");
13
14
  const cr_parser_js_1 = require("./parser/cr-parser.js");
14
15
  const bug_parser_js_1 = require("./parser/bug-parser.js");
15
16
  const skill_adapters_js_1 = require("./scaffold/skill-adapters.js");
17
+ const sync_engine_js_1 = require("./remote/sync-engine.js");
16
18
  class SDD {
17
19
  root;
18
20
  constructor(options) {
@@ -47,7 +49,7 @@ class SDD {
47
49
  async pending() {
48
50
  this.ensureInitialized();
49
51
  const files = await (0, story_parser_js_1.parseAllStoryFiles)(this.root);
50
- return files.filter((f) => f.frontmatter.status !== "synced");
52
+ return files.filter((f) => f.frontmatter.status !== "synced" && f.frontmatter.status !== "draft");
51
53
  }
52
54
  async sync() {
53
55
  const pending = await this.pending();
@@ -55,12 +57,16 @@ class SDD {
55
57
  }
56
58
  async applyPrompt() {
57
59
  this.ensureInitialized();
58
- const [bugs, changeRequests, pendingFiles] = await Promise.all([
60
+ const [bugs, changeRequests, pendingFiles, drafts, allFiles, config] = await Promise.all([
59
61
  this.openBugs(),
60
62
  this.pendingChangeRequests(),
61
63
  this.pending(),
64
+ this.drafts(),
65
+ (0, story_parser_js_1.parseAllStoryFiles)(this.root),
66
+ (0, config_manager_js_1.readConfig)(this.root),
62
67
  ]);
63
- return (0, apply_prompt_generator_js_1.generateApplyPrompt)(bugs, changeRequests, pendingFiles, this.root);
68
+ const projectContext = allFiles.filter((f) => f.frontmatter.status !== "draft");
69
+ return (0, apply_prompt_generator_js_1.generateApplyPrompt)(bugs, changeRequests, pendingFiles, this.root, drafts, projectContext, config.description);
64
70
  }
65
71
  async validate() {
66
72
  this.ensureInitialized();
@@ -100,20 +106,20 @@ class SDD {
100
106
  }
101
107
  async pendingChangeRequests() {
102
108
  const all = await this.changeRequests();
103
- return all.filter((cr) => cr.frontmatter.status === "draft");
109
+ return all.filter((cr) => cr.frontmatter.status === "pending");
104
110
  }
105
111
  async markCRApplied(paths) {
106
112
  this.ensureInitialized();
107
113
  const all = await this.changeRequests();
108
114
  const marked = [];
109
115
  for (const cr of all) {
110
- if (cr.frontmatter.status === "applied")
116
+ if (cr.frontmatter.status !== "pending")
111
117
  continue;
112
118
  if (paths && paths.length > 0 && !paths.includes(cr.relativePath))
113
119
  continue;
114
120
  const absPath = (0, node_path_1.resolve)(this.root, cr.relativePath);
115
121
  const content = await (0, promises_1.readFile)(absPath, "utf-8");
116
- const updated = content.replace(/^status:\s*draft/m, "status: applied");
122
+ const updated = content.replace(/^status:\s*pending/m, "status: applied");
117
123
  await (0, promises_1.writeFile)(absPath, updated, "utf-8");
118
124
  marked.push(cr.relativePath);
119
125
  }
@@ -144,6 +150,93 @@ class SDD {
144
150
  }
145
151
  return marked;
146
152
  }
153
+ // ── Drafts ───────────────────────────────────────────────────────────
154
+ async drafts() {
155
+ this.ensureInitialized();
156
+ const [files, crs, bugs] = await Promise.all([
157
+ (0, story_parser_js_1.parseAllStoryFiles)(this.root),
158
+ this.changeRequests(),
159
+ this.bugs(),
160
+ ]);
161
+ return {
162
+ docs: files.filter((f) => f.frontmatter.status === "draft"),
163
+ crs: crs.filter((cr) => cr.frontmatter.status === "draft"),
164
+ bugs: bugs.filter((b) => b.frontmatter.status === "draft"),
165
+ };
166
+ }
167
+ async draftEnrichmentPrompt() {
168
+ this.ensureInitialized();
169
+ const drafts = await this.drafts();
170
+ const allFiles = await (0, story_parser_js_1.parseAllStoryFiles)(this.root);
171
+ const projectContext = allFiles.filter((f) => f.frontmatter.status !== "draft");
172
+ const config = await (0, config_manager_js_1.readConfig)(this.root);
173
+ return (0, draft_prompt_generator_js_1.generateDraftEnrichmentPrompt)(drafts, projectContext, config.description);
174
+ }
175
+ async markDraftsEnriched(paths) {
176
+ this.ensureInitialized();
177
+ const marked = [];
178
+ // Story files: draft → new
179
+ const files = await (0, story_parser_js_1.parseAllStoryFiles)(this.root);
180
+ for (const file of files) {
181
+ if (file.frontmatter.status !== "draft")
182
+ continue;
183
+ if (paths && paths.length > 0 && !paths.includes(file.relativePath))
184
+ continue;
185
+ const absPath = (0, node_path_1.resolve)(this.root, file.relativePath);
186
+ const content = await (0, promises_1.readFile)(absPath, "utf-8");
187
+ const updated = content.replace(/^status:\s*draft/m, "status: new");
188
+ await (0, promises_1.writeFile)(absPath, updated, "utf-8");
189
+ marked.push(file.relativePath);
190
+ }
191
+ // CRs: draft → pending
192
+ const crs = await this.changeRequests();
193
+ for (const cr of crs) {
194
+ if (cr.frontmatter.status !== "draft")
195
+ continue;
196
+ if (paths && paths.length > 0 && !paths.includes(cr.relativePath))
197
+ continue;
198
+ const absPath = (0, node_path_1.resolve)(this.root, cr.relativePath);
199
+ const content = await (0, promises_1.readFile)(absPath, "utf-8");
200
+ const updated = content.replace(/^status:\s*draft/m, "status: pending");
201
+ await (0, promises_1.writeFile)(absPath, updated, "utf-8");
202
+ marked.push(cr.relativePath);
203
+ }
204
+ // Bugs: draft → open
205
+ const allBugs = await this.bugs();
206
+ for (const bug of allBugs) {
207
+ if (bug.frontmatter.status !== "draft")
208
+ continue;
209
+ if (paths && paths.length > 0 && !paths.includes(bug.relativePath))
210
+ continue;
211
+ const absPath = (0, node_path_1.resolve)(this.root, bug.relativePath);
212
+ const content = await (0, promises_1.readFile)(absPath, "utf-8");
213
+ const updated = content.replace(/^status:\s*draft/m, "status: open");
214
+ await (0, promises_1.writeFile)(absPath, updated, "utf-8");
215
+ marked.push(bug.relativePath);
216
+ }
217
+ return marked;
218
+ }
219
+ // ── Remote sync ──────────────────────────────────────────────────────
220
+ async remoteStatus() {
221
+ this.ensureInitialized();
222
+ return (0, sync_engine_js_1.getRemoteStatus)(this.root);
223
+ }
224
+ async push(paths, options) {
225
+ this.ensureInitialized();
226
+ return (0, sync_engine_js_1.pushToRemote)(this.root, { paths, all: options?.all });
227
+ }
228
+ async pull() {
229
+ this.ensureInitialized();
230
+ return (0, sync_engine_js_1.pullFromRemote)(this.root);
231
+ }
232
+ async pullCRs() {
233
+ this.ensureInitialized();
234
+ return (0, sync_engine_js_1.pullCRsFromRemote)(this.root);
235
+ }
236
+ async pullBugs() {
237
+ this.ensureInitialized();
238
+ return (0, sync_engine_js_1.pullBugsFromRemote)(this.root);
239
+ }
147
240
  ensureInitialized() {
148
241
  if (!(0, config_manager_js_1.isSDDProject)(this.root)) {
149
242
  throw new errors_js_1.ProjectNotInitializedError(this.root);
package/dist/sdd.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdd.js","sourceRoot":"","sources":["../src/sdd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdd.js","sourceRoot":"","sources":["../src/sdd.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type StoryFileStatus = 'new' | 'changed' | 'deleted' | 'synced';
1
+ export type StoryFileStatus = 'draft' | 'new' | 'changed' | 'deleted' | 'synced';
2
2
  export interface StoryFrontmatter {
3
3
  title: string;
4
4
  status: StoryFileStatus;
@@ -41,18 +41,23 @@ export interface ValidationIssue {
41
41
  export interface StoryStatus {
42
42
  files: Array<{
43
43
  relativePath: string;
44
- status: 'new' | 'changed' | 'deleted' | 'synced';
44
+ status: StoryFileStatus;
45
45
  version: string;
46
46
  lastModified: string;
47
47
  }>;
48
48
  }
49
+ export interface RemoteConfig {
50
+ url: string;
51
+ 'api-key'?: string;
52
+ }
49
53
  export interface SDDConfig {
50
54
  description: string;
51
55
  'last-sync-commit'?: string;
52
56
  agent?: string;
53
57
  agents?: Record<string, string>;
58
+ remote?: RemoteConfig;
54
59
  }
55
- export type ChangeRequestStatus = 'draft' | 'applied';
60
+ export type ChangeRequestStatus = 'draft' | 'pending' | 'applied';
56
61
  export interface ChangeRequestFrontmatter {
57
62
  title: string;
58
63
  status: ChangeRequestStatus;
@@ -64,7 +69,7 @@ export interface ChangeRequest {
64
69
  frontmatter: ChangeRequestFrontmatter;
65
70
  body: string;
66
71
  }
67
- export type BugStatus = 'open' | 'resolved';
72
+ export type BugStatus = 'draft' | 'open' | 'resolved';
68
73
  export interface BugFrontmatter {
69
74
  title: string;
70
75
  status: BugStatus;