@sudocode-ai/integration-openspec 0.1.14

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 (41) hide show
  1. package/dist/id-generator.d.ts +114 -0
  2. package/dist/id-generator.d.ts.map +1 -0
  3. package/dist/id-generator.js +165 -0
  4. package/dist/id-generator.js.map +1 -0
  5. package/dist/index.d.ts +29 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +692 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/parser/change-parser.d.ts +164 -0
  10. package/dist/parser/change-parser.d.ts.map +1 -0
  11. package/dist/parser/change-parser.js +339 -0
  12. package/dist/parser/change-parser.js.map +1 -0
  13. package/dist/parser/markdown-utils.d.ts +138 -0
  14. package/dist/parser/markdown-utils.d.ts.map +1 -0
  15. package/dist/parser/markdown-utils.js +283 -0
  16. package/dist/parser/markdown-utils.js.map +1 -0
  17. package/dist/parser/spec-parser.d.ts +116 -0
  18. package/dist/parser/spec-parser.d.ts.map +1 -0
  19. package/dist/parser/spec-parser.js +204 -0
  20. package/dist/parser/spec-parser.js.map +1 -0
  21. package/dist/parser/tasks-parser.d.ts +120 -0
  22. package/dist/parser/tasks-parser.d.ts.map +1 -0
  23. package/dist/parser/tasks-parser.js +176 -0
  24. package/dist/parser/tasks-parser.js.map +1 -0
  25. package/dist/watcher.d.ts +160 -0
  26. package/dist/watcher.d.ts.map +1 -0
  27. package/dist/watcher.js +614 -0
  28. package/dist/watcher.js.map +1 -0
  29. package/dist/writer/index.d.ts +9 -0
  30. package/dist/writer/index.d.ts.map +1 -0
  31. package/dist/writer/index.js +9 -0
  32. package/dist/writer/index.js.map +1 -0
  33. package/dist/writer/spec-writer.d.ts +24 -0
  34. package/dist/writer/spec-writer.d.ts.map +1 -0
  35. package/dist/writer/spec-writer.js +75 -0
  36. package/dist/writer/spec-writer.js.map +1 -0
  37. package/dist/writer/tasks-writer.d.ts +33 -0
  38. package/dist/writer/tasks-writer.d.ts.map +1 -0
  39. package/dist/writer/tasks-writer.js +144 -0
  40. package/dist/writer/tasks-writer.js.map +1 -0
  41. package/package.json +43 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Spec Writer for OpenSpec Integration
3
+ *
4
+ * Writes updates to spec.md files in OpenSpec directories.
5
+ * Used for bidirectional sync when sudocode specs are updated.
6
+ */
7
+ /**
8
+ * Update a spec.md file with new content
9
+ *
10
+ * @param filePath - Path to the spec.md file
11
+ * @param content - New content to write
12
+ * @returns true if file was updated
13
+ */
14
+ export declare function updateSpecContent(filePath: string, content: string): boolean;
15
+ /**
16
+ * Update the title in a spec.md file
17
+ * The title is typically the first H1 heading
18
+ *
19
+ * @param filePath - Path to the spec.md file
20
+ * @param newTitle - New title to set
21
+ * @returns true if title was updated
22
+ */
23
+ export declare function updateSpecTitle(filePath: string, newTitle: string): boolean;
24
+ //# sourceMappingURL=spec-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-writer.d.ts","sourceRoot":"","sources":["../../src/writer/spec-writer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAsB5E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgC3E"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Spec Writer for OpenSpec Integration
3
+ *
4
+ * Writes updates to spec.md files in OpenSpec directories.
5
+ * Used for bidirectional sync when sudocode specs are updated.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync } from "fs";
8
+ /**
9
+ * Update a spec.md file with new content
10
+ *
11
+ * @param filePath - Path to the spec.md file
12
+ * @param content - New content to write
13
+ * @returns true if file was updated
14
+ */
15
+ export function updateSpecContent(filePath, content) {
16
+ if (!existsSync(filePath)) {
17
+ console.log(`[spec-writer] File not found: ${filePath}`);
18
+ return false;
19
+ }
20
+ try {
21
+ const existingContent = readFileSync(filePath, "utf-8");
22
+ // Only write if content actually changed
23
+ if (existingContent.trim() === content.trim()) {
24
+ console.log(`[spec-writer] No changes needed for ${filePath}`);
25
+ return false;
26
+ }
27
+ writeFileSync(filePath, content);
28
+ console.log(`[spec-writer] Updated spec at ${filePath}`);
29
+ return true;
30
+ }
31
+ catch (error) {
32
+ console.error(`[spec-writer] Error updating ${filePath}:`, error);
33
+ return false;
34
+ }
35
+ }
36
+ /**
37
+ * Update the title in a spec.md file
38
+ * The title is typically the first H1 heading
39
+ *
40
+ * @param filePath - Path to the spec.md file
41
+ * @param newTitle - New title to set
42
+ * @returns true if title was updated
43
+ */
44
+ export function updateSpecTitle(filePath, newTitle) {
45
+ if (!existsSync(filePath)) {
46
+ return false;
47
+ }
48
+ try {
49
+ const content = readFileSync(filePath, "utf-8");
50
+ const lines = content.split("\n");
51
+ // Find and update the first H1 heading
52
+ for (let i = 0; i < lines.length; i++) {
53
+ if (lines[i].match(/^#\s+/)) {
54
+ const existingTitle = lines[i].replace(/^#\s+/, "").trim();
55
+ if (existingTitle === newTitle.trim()) {
56
+ return false; // No change needed
57
+ }
58
+ lines[i] = `# ${newTitle.trim()}`;
59
+ writeFileSync(filePath, lines.join("\n"));
60
+ console.log(`[spec-writer] Updated title in ${filePath}`);
61
+ return true;
62
+ }
63
+ }
64
+ // No H1 found, prepend one
65
+ lines.unshift(`# ${newTitle.trim()}`);
66
+ writeFileSync(filePath, lines.join("\n"));
67
+ console.log(`[spec-writer] Added title to ${filePath}`);
68
+ return true;
69
+ }
70
+ catch (error) {
71
+ console.error(`[spec-writer] Error updating title:`, error);
72
+ return false;
73
+ }
74
+ }
75
+ //# sourceMappingURL=spec-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-writer.js","sourceRoot":"","sources":["../../src/writer/spec-writer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAExD,yCAAyC;QACzC,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAgB;IAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3D,IAAI,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtC,OAAO,KAAK,CAAC,CAAC,mBAAmB;gBACnC,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Tasks Writer for OpenSpec Integration
3
+ *
4
+ * Writes updates to tasks.md files in OpenSpec change directories.
5
+ * Used for bidirectional sync when sudocode issues are updated.
6
+ */
7
+ /**
8
+ * Update all task checkboxes in a tasks.md file
9
+ *
10
+ * @param filePath - Path to the tasks.md file
11
+ * @param completed - Whether all tasks should be marked as completed
12
+ * @returns true if file was updated, false if no changes needed or file doesn't exist
13
+ */
14
+ export declare function updateAllTasksCompletion(filePath: string, completed: boolean): boolean;
15
+ /**
16
+ * Update a specific task by line number
17
+ *
18
+ * @param filePath - Path to the tasks.md file
19
+ * @param lineNumber - 1-indexed line number of the task
20
+ * @param completed - Whether the task should be marked as completed
21
+ * @returns true if task was updated
22
+ */
23
+ export declare function updateTaskByLine(filePath: string, lineNumber: number, completed: boolean): boolean;
24
+ /**
25
+ * Update a task by matching its description
26
+ *
27
+ * @param filePath - Path to the tasks.md file
28
+ * @param description - Task description to match (case-insensitive)
29
+ * @param completed - Whether the task should be marked as completed
30
+ * @returns true if task was found and updated
31
+ */
32
+ export declare function updateTaskByDescription(filePath: string, description: string, completed: boolean): boolean;
33
+ //# sourceMappingURL=tasks-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-writer.d.ts","sourceRoot":"","sources":["../../src/writer/tasks-writer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,GACjB,OAAO,CA2CT;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,GACjB,OAAO,CA0CT;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,OAAO,GACjB,OAAO,CA0CT"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Tasks Writer for OpenSpec Integration
3
+ *
4
+ * Writes updates to tasks.md files in OpenSpec change directories.
5
+ * Used for bidirectional sync when sudocode issues are updated.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync } from "fs";
8
+ import { TASK_PATTERNS } from "../parser/tasks-parser.js";
9
+ /**
10
+ * Update all task checkboxes in a tasks.md file
11
+ *
12
+ * @param filePath - Path to the tasks.md file
13
+ * @param completed - Whether all tasks should be marked as completed
14
+ * @returns true if file was updated, false if no changes needed or file doesn't exist
15
+ */
16
+ export function updateAllTasksCompletion(filePath, completed) {
17
+ if (!existsSync(filePath)) {
18
+ console.log(`[tasks-writer] File not found: ${filePath}`);
19
+ return false;
20
+ }
21
+ try {
22
+ const content = readFileSync(filePath, "utf-8");
23
+ const lines = content.split("\n");
24
+ let modified = false;
25
+ const updatedLines = lines.map((line) => {
26
+ const match = line.match(TASK_PATTERNS.TASK_LINE);
27
+ if (match) {
28
+ const [, leadingSpace, checkbox, description] = match;
29
+ const isCompleted = checkbox.toLowerCase() === "x";
30
+ // Only modify if state needs to change
31
+ if (completed && !isCompleted) {
32
+ modified = true;
33
+ return `${leadingSpace}- [x] ${description}`;
34
+ }
35
+ else if (!completed && isCompleted) {
36
+ modified = true;
37
+ return `${leadingSpace}- [ ] ${description}`;
38
+ }
39
+ }
40
+ return line;
41
+ });
42
+ if (modified) {
43
+ writeFileSync(filePath, updatedLines.join("\n"));
44
+ console.log(`[tasks-writer] Updated tasks in ${filePath} to completed=${completed}`);
45
+ return true;
46
+ }
47
+ console.log(`[tasks-writer] No changes needed for ${filePath}`);
48
+ return false;
49
+ }
50
+ catch (error) {
51
+ console.error(`[tasks-writer] Error updating ${filePath}:`, error);
52
+ return false;
53
+ }
54
+ }
55
+ /**
56
+ * Update a specific task by line number
57
+ *
58
+ * @param filePath - Path to the tasks.md file
59
+ * @param lineNumber - 1-indexed line number of the task
60
+ * @param completed - Whether the task should be marked as completed
61
+ * @returns true if task was updated
62
+ */
63
+ export function updateTaskByLine(filePath, lineNumber, completed) {
64
+ if (!existsSync(filePath)) {
65
+ return false;
66
+ }
67
+ try {
68
+ const content = readFileSync(filePath, "utf-8");
69
+ const lines = content.split("\n");
70
+ const lineIndex = lineNumber - 1; // Convert to 0-indexed
71
+ if (lineIndex < 0 || lineIndex >= lines.length) {
72
+ console.error(`[tasks-writer] Line ${lineNumber} out of range`);
73
+ return false;
74
+ }
75
+ const line = lines[lineIndex];
76
+ const match = line.match(TASK_PATTERNS.TASK_LINE);
77
+ if (!match) {
78
+ console.error(`[tasks-writer] Line ${lineNumber} is not a task line`);
79
+ return false;
80
+ }
81
+ const [, leadingSpace, checkbox, description] = match;
82
+ const isCompleted = checkbox.toLowerCase() === "x";
83
+ // Only modify if state needs to change
84
+ if (completed !== isCompleted) {
85
+ const newCheckbox = completed ? "x" : " ";
86
+ lines[lineIndex] = `${leadingSpace}- [${newCheckbox}] ${description}`;
87
+ writeFileSync(filePath, lines.join("\n"));
88
+ console.log(`[tasks-writer] Updated task at line ${lineNumber} to completed=${completed}`);
89
+ return true;
90
+ }
91
+ return false;
92
+ }
93
+ catch (error) {
94
+ console.error(`[tasks-writer] Error updating task:`, error);
95
+ return false;
96
+ }
97
+ }
98
+ /**
99
+ * Update a task by matching its description
100
+ *
101
+ * @param filePath - Path to the tasks.md file
102
+ * @param description - Task description to match (case-insensitive)
103
+ * @param completed - Whether the task should be marked as completed
104
+ * @returns true if task was found and updated
105
+ */
106
+ export function updateTaskByDescription(filePath, description, completed) {
107
+ if (!existsSync(filePath)) {
108
+ return false;
109
+ }
110
+ try {
111
+ const content = readFileSync(filePath, "utf-8");
112
+ const lines = content.split("\n");
113
+ const searchLower = description.toLowerCase().trim();
114
+ let modified = false;
115
+ const updatedLines = lines.map((line) => {
116
+ if (modified)
117
+ return line; // Only update first match
118
+ const match = line.match(TASK_PATTERNS.TASK_LINE);
119
+ if (match) {
120
+ const [, leadingSpace, checkbox, taskDesc] = match;
121
+ if (taskDesc.toLowerCase().trim() === searchLower) {
122
+ const isCompleted = checkbox.toLowerCase() === "x";
123
+ if (completed !== isCompleted) {
124
+ modified = true;
125
+ const newCheckbox = completed ? "x" : " ";
126
+ return `${leadingSpace}- [${newCheckbox}] ${taskDesc}`;
127
+ }
128
+ }
129
+ }
130
+ return line;
131
+ });
132
+ if (modified) {
133
+ writeFileSync(filePath, updatedLines.join("\n"));
134
+ console.log(`[tasks-writer] Updated task "${description}" to completed=${completed}`);
135
+ return true;
136
+ }
137
+ return false;
138
+ }
139
+ catch (error) {
140
+ console.error(`[tasks-writer] Error updating task:`, error);
141
+ return false;
142
+ }
143
+ }
144
+ //# sourceMappingURL=tasks-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-writer.js","sourceRoot":"","sources":["../../src/writer/tasks-writer.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@sudocode-ai/integration-openspec",
3
+ "version": "0.1.14",
4
+ "description": "OpenSpec integration plugin for sudocode",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "test": "vitest --run",
20
+ "clean": "rm -rf dist"
21
+ },
22
+ "keywords": [
23
+ "sudocode",
24
+ "integration",
25
+ "openspec",
26
+ "plugin"
27
+ ],
28
+ "author": "sudocode-ai",
29
+ "license": "Apache-2.0",
30
+ "dependencies": {
31
+ "chokidar": "^4.0.3"
32
+ },
33
+ "peerDependencies": {
34
+ "@sudocode-ai/types": "^0.1.14"
35
+ },
36
+ "devDependencies": {
37
+ "@fission-ai/openspec": "^0.16.0",
38
+ "@sudocode-ai/types": "*",
39
+ "@types/node": "^22.10.2",
40
+ "typescript": "^5.8.3",
41
+ "vitest": "^3.2.4"
42
+ }
43
+ }