@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.
- package/dist/id-generator.d.ts +114 -0
- package/dist/id-generator.d.ts.map +1 -0
- package/dist/id-generator.js +165 -0
- package/dist/id-generator.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +692 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/change-parser.d.ts +164 -0
- package/dist/parser/change-parser.d.ts.map +1 -0
- package/dist/parser/change-parser.js +339 -0
- package/dist/parser/change-parser.js.map +1 -0
- package/dist/parser/markdown-utils.d.ts +138 -0
- package/dist/parser/markdown-utils.d.ts.map +1 -0
- package/dist/parser/markdown-utils.js +283 -0
- package/dist/parser/markdown-utils.js.map +1 -0
- package/dist/parser/spec-parser.d.ts +116 -0
- package/dist/parser/spec-parser.d.ts.map +1 -0
- package/dist/parser/spec-parser.js +204 -0
- package/dist/parser/spec-parser.js.map +1 -0
- package/dist/parser/tasks-parser.d.ts +120 -0
- package/dist/parser/tasks-parser.d.ts.map +1 -0
- package/dist/parser/tasks-parser.js +176 -0
- package/dist/parser/tasks-parser.js.map +1 -0
- package/dist/watcher.d.ts +160 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +614 -0
- package/dist/watcher.js.map +1 -0
- package/dist/writer/index.d.ts +9 -0
- package/dist/writer/index.d.ts.map +1 -0
- package/dist/writer/index.js +9 -0
- package/dist/writer/index.js.map +1 -0
- package/dist/writer/spec-writer.d.ts +24 -0
- package/dist/writer/spec-writer.d.ts.map +1 -0
- package/dist/writer/spec-writer.js +75 -0
- package/dist/writer/spec-writer.js.map +1 -0
- package/dist/writer/tasks-writer.d.ts +33 -0
- package/dist/writer/tasks-writer.d.ts.map +1 -0
- package/dist/writer/tasks-writer.js +144 -0
- package/dist/writer/tasks-writer.js.map +1 -0
- 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
|
+
}
|