@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,114 @@
1
+ /**
2
+ * OpenSpec ID Generator
3
+ *
4
+ * Generates deterministic, path-based IDs for OpenSpec entities.
5
+ * IDs are stable across syncs - the same input always produces the same output.
6
+ *
7
+ * ID Format:
8
+ * - Specs: os-xxxx (e.g., os-a1b2)
9
+ * - Changes: osc-xxxx (e.g., osc-c3d4)
10
+ */
11
+ /** Default prefix for OpenSpec spec IDs */
12
+ export declare const DEFAULT_SPEC_PREFIX = "os";
13
+ /** Default prefix for OpenSpec change IDs */
14
+ export declare const DEFAULT_CHANGE_PREFIX = "osc";
15
+ /**
16
+ * Generate a deterministic spec ID from a capability name.
17
+ *
18
+ * The ID is generated by hashing "openspec-spec-{capability}" and
19
+ * taking the first 4 hex characters.
20
+ *
21
+ * @param capability - The capability name (e.g., "cli-init")
22
+ * @param prefix - ID prefix (default: "os")
23
+ * @returns Deterministic spec ID (e.g., "os-a1b2")
24
+ *
25
+ * @example
26
+ * generateSpecId("cli-init") // Returns same ID every time
27
+ * generateSpecId("cli-init", "os") // Same as above, explicit prefix
28
+ * generateSpecId("cli-init", "spec") // "spec-a1b2"
29
+ */
30
+ export declare function generateSpecId(capability: string, prefix?: string): string;
31
+ /**
32
+ * Generate a deterministic change ID from a change name.
33
+ *
34
+ * The ID is generated by hashing "openspec-change-{changeName}" and
35
+ * taking the first 4 hex characters.
36
+ *
37
+ * @param changeName - The change name (e.g., "add-feature")
38
+ * @param prefix - ID prefix (default: "osc")
39
+ * @returns Deterministic change ID (e.g., "osc-c3d4")
40
+ *
41
+ * @example
42
+ * generateChangeId("add-feature") // Returns same ID every time
43
+ * generateChangeId("add-feature", "osc") // Same as above, explicit prefix
44
+ * generateChangeId("add-feature", "ch") // "ch-c3d4"
45
+ */
46
+ export declare function generateChangeId(changeName: string, prefix?: string): string;
47
+ /**
48
+ * Parsed result from an OpenSpec ID
49
+ */
50
+ export interface ParsedOpenSpecId {
51
+ /** Entity type: 'spec' or 'change' */
52
+ type: "spec" | "change";
53
+ /** The original name used to generate this ID (if recoverable) */
54
+ name: string;
55
+ /** The hash portion of the ID */
56
+ hash: string;
57
+ /** The prefix portion of the ID */
58
+ prefix: string;
59
+ }
60
+ /**
61
+ * Parse an OpenSpec ID to extract its components.
62
+ *
63
+ * Note: This only extracts structural information from the ID.
64
+ * The original name cannot be recovered from the hash alone -
65
+ * it must be provided or looked up separately.
66
+ *
67
+ * OpenSpec IDs require at least a 2-character prefix to distinguish
68
+ * them from sudocode IDs (which use single-character prefixes like s- and i-).
69
+ *
70
+ * @param id - The OpenSpec ID to parse (e.g., "os-a1b2" or "osc-c3d4")
71
+ * @returns Parsed ID components, or null if invalid format
72
+ *
73
+ * @example
74
+ * parseOpenSpecId("os-a1b2")
75
+ * // Returns: { type: "spec", name: "", hash: "a1b2", prefix: "os" }
76
+ *
77
+ * parseOpenSpecId("osc-c3d4")
78
+ * // Returns: { type: "change", name: "", hash: "c3d4", prefix: "osc" }
79
+ *
80
+ * parseOpenSpecId("invalid")
81
+ * // Returns: null
82
+ *
83
+ * parseOpenSpecId("s-abcd")
84
+ * // Returns: null (sudocode format, not OpenSpec)
85
+ */
86
+ export declare function parseOpenSpecId(id: string): ParsedOpenSpecId | null;
87
+ /**
88
+ * Verify that a given ID matches the expected ID for a name.
89
+ *
90
+ * Useful for validating that an ID was generated correctly.
91
+ *
92
+ * @param id - The ID to verify
93
+ * @param name - The name that should produce this ID
94
+ * @param type - Entity type ('spec' or 'change')
95
+ * @returns True if the ID matches what would be generated from the name
96
+ *
97
+ * @example
98
+ * verifyOpenSpecId("os-a1b2", "cli-init", "spec") // true or false
99
+ */
100
+ export declare function verifyOpenSpecId(id: string, name: string, type: "spec" | "change"): boolean;
101
+ /**
102
+ * Check if a string is a valid OpenSpec ID format.
103
+ *
104
+ * @param id - The string to check
105
+ * @returns True if the string matches OpenSpec ID format
106
+ *
107
+ * @example
108
+ * isOpenSpecId("os-a1b2") // true
109
+ * isOpenSpecId("osc-c3d4") // true
110
+ * isOpenSpecId("invalid") // false
111
+ * isOpenSpecId("s-abcd") // false (sudocode format, not OpenSpec)
112
+ */
113
+ export declare function isOpenSpecId(id: string): boolean;
114
+ //# sourceMappingURL=id-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,6CAA6C;AAC7C,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAkB3C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAA4B,GACnC,MAAM,CAUR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAA8B,GACrC,MAAM,CAUR;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA2BnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,QAAQ,GACtB,OAAO,CAYT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * OpenSpec ID Generator
3
+ *
4
+ * Generates deterministic, path-based IDs for OpenSpec entities.
5
+ * IDs are stable across syncs - the same input always produces the same output.
6
+ *
7
+ * ID Format:
8
+ * - Specs: os-xxxx (e.g., os-a1b2)
9
+ * - Changes: osc-xxxx (e.g., osc-c3d4)
10
+ */
11
+ import { createHash } from "crypto";
12
+ /** Default prefix for OpenSpec spec IDs */
13
+ export const DEFAULT_SPEC_PREFIX = "os";
14
+ /** Default prefix for OpenSpec change IDs */
15
+ export const DEFAULT_CHANGE_PREFIX = "osc";
16
+ /** Default hash length (4 hex characters) */
17
+ const DEFAULT_HASH_LENGTH = 4;
18
+ /**
19
+ * Generate a deterministic hash from an input string.
20
+ * Uses SHA256 and takes the first N hex characters.
21
+ *
22
+ * @param input - The input string to hash
23
+ * @param length - Number of hex characters to return (default: 4)
24
+ * @returns Lowercase hex hash substring
25
+ */
26
+ function generateHash(input, length = DEFAULT_HASH_LENGTH) {
27
+ const hash = createHash("sha256").update(input).digest("hex");
28
+ return hash.substring(0, length).toLowerCase();
29
+ }
30
+ /**
31
+ * Generate a deterministic spec ID from a capability name.
32
+ *
33
+ * The ID is generated by hashing "openspec-spec-{capability}" and
34
+ * taking the first 4 hex characters.
35
+ *
36
+ * @param capability - The capability name (e.g., "cli-init")
37
+ * @param prefix - ID prefix (default: "os")
38
+ * @returns Deterministic spec ID (e.g., "os-a1b2")
39
+ *
40
+ * @example
41
+ * generateSpecId("cli-init") // Returns same ID every time
42
+ * generateSpecId("cli-init", "os") // Same as above, explicit prefix
43
+ * generateSpecId("cli-init", "spec") // "spec-a1b2"
44
+ */
45
+ export function generateSpecId(capability, prefix = DEFAULT_SPEC_PREFIX) {
46
+ if (!capability || capability.trim() === "") {
47
+ throw new Error("Capability name is required for spec ID generation");
48
+ }
49
+ const normalizedCapability = capability.trim().toLowerCase();
50
+ const hashInput = `openspec-spec-${normalizedCapability}`;
51
+ const hash = generateHash(hashInput);
52
+ return `${prefix}-${hash}`;
53
+ }
54
+ /**
55
+ * Generate a deterministic change ID from a change name.
56
+ *
57
+ * The ID is generated by hashing "openspec-change-{changeName}" and
58
+ * taking the first 4 hex characters.
59
+ *
60
+ * @param changeName - The change name (e.g., "add-feature")
61
+ * @param prefix - ID prefix (default: "osc")
62
+ * @returns Deterministic change ID (e.g., "osc-c3d4")
63
+ *
64
+ * @example
65
+ * generateChangeId("add-feature") // Returns same ID every time
66
+ * generateChangeId("add-feature", "osc") // Same as above, explicit prefix
67
+ * generateChangeId("add-feature", "ch") // "ch-c3d4"
68
+ */
69
+ export function generateChangeId(changeName, prefix = DEFAULT_CHANGE_PREFIX) {
70
+ if (!changeName || changeName.trim() === "") {
71
+ throw new Error("Change name is required for change ID generation");
72
+ }
73
+ const normalizedChangeName = changeName.trim().toLowerCase();
74
+ const hashInput = `openspec-change-${normalizedChangeName}`;
75
+ const hash = generateHash(hashInput);
76
+ return `${prefix}-${hash}`;
77
+ }
78
+ /**
79
+ * Parse an OpenSpec ID to extract its components.
80
+ *
81
+ * Note: This only extracts structural information from the ID.
82
+ * The original name cannot be recovered from the hash alone -
83
+ * it must be provided or looked up separately.
84
+ *
85
+ * OpenSpec IDs require at least a 2-character prefix to distinguish
86
+ * them from sudocode IDs (which use single-character prefixes like s- and i-).
87
+ *
88
+ * @param id - The OpenSpec ID to parse (e.g., "os-a1b2" or "osc-c3d4")
89
+ * @returns Parsed ID components, or null if invalid format
90
+ *
91
+ * @example
92
+ * parseOpenSpecId("os-a1b2")
93
+ * // Returns: { type: "spec", name: "", hash: "a1b2", prefix: "os" }
94
+ *
95
+ * parseOpenSpecId("osc-c3d4")
96
+ * // Returns: { type: "change", name: "", hash: "c3d4", prefix: "osc" }
97
+ *
98
+ * parseOpenSpecId("invalid")
99
+ * // Returns: null
100
+ *
101
+ * parseOpenSpecId("s-abcd")
102
+ * // Returns: null (sudocode format, not OpenSpec)
103
+ */
104
+ export function parseOpenSpecId(id) {
105
+ if (!id || typeof id !== "string") {
106
+ return null;
107
+ }
108
+ // Match pattern: prefix-hash where prefix is at least 2 characters
109
+ // This distinguishes OpenSpec IDs (os-, osc-) from sudocode IDs (s-, i-)
110
+ const match = id.match(/^([a-z]{2,})-([0-9a-f]{4,})$/i);
111
+ if (!match) {
112
+ return null;
113
+ }
114
+ const [, prefix, hash] = match;
115
+ const normalizedPrefix = prefix.toLowerCase();
116
+ // Determine type based on prefix
117
+ // Default change prefix is "osc", default spec prefix is "os"
118
+ // For custom prefixes, we use "osc" as the canonical change prefix
119
+ const isChange = normalizedPrefix === DEFAULT_CHANGE_PREFIX;
120
+ return {
121
+ type: isChange ? "change" : "spec",
122
+ name: "", // Cannot recover name from hash - must be looked up
123
+ hash: hash.toLowerCase(),
124
+ prefix: normalizedPrefix,
125
+ };
126
+ }
127
+ /**
128
+ * Verify that a given ID matches the expected ID for a name.
129
+ *
130
+ * Useful for validating that an ID was generated correctly.
131
+ *
132
+ * @param id - The ID to verify
133
+ * @param name - The name that should produce this ID
134
+ * @param type - Entity type ('spec' or 'change')
135
+ * @returns True if the ID matches what would be generated from the name
136
+ *
137
+ * @example
138
+ * verifyOpenSpecId("os-a1b2", "cli-init", "spec") // true or false
139
+ */
140
+ export function verifyOpenSpecId(id, name, type) {
141
+ const parsed = parseOpenSpecId(id);
142
+ if (!parsed) {
143
+ return false;
144
+ }
145
+ const expectedId = type === "spec"
146
+ ? generateSpecId(name, parsed.prefix)
147
+ : generateChangeId(name, parsed.prefix);
148
+ return id.toLowerCase() === expectedId.toLowerCase();
149
+ }
150
+ /**
151
+ * Check if a string is a valid OpenSpec ID format.
152
+ *
153
+ * @param id - The string to check
154
+ * @returns True if the string matches OpenSpec ID format
155
+ *
156
+ * @example
157
+ * isOpenSpecId("os-a1b2") // true
158
+ * isOpenSpecId("osc-c3d4") // true
159
+ * isOpenSpecId("invalid") // false
160
+ * isOpenSpecId("s-abcd") // false (sudocode format, not OpenSpec)
161
+ */
162
+ export function isOpenSpecId(id) {
163
+ return parseOpenSpecId(id) !== null;
164
+ }
165
+ //# sourceMappingURL=id-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OpenSpec Integration Plugin for sudocode
3
+ *
4
+ * Provides integration with OpenSpec - a standardized specification format
5
+ * for AI-assisted development. Syncs specs and issues to sudocode.
6
+ */
7
+ import type { IntegrationPlugin } from "@sudocode-ai/types";
8
+ /**
9
+ * OpenSpec specific configuration options
10
+ */
11
+ export interface OpenSpecOptions {
12
+ /** Path to the OpenSpec directory (relative to project root) */
13
+ path: string;
14
+ /** Prefix for spec IDs imported from OpenSpec (default: "os") */
15
+ spec_prefix?: string;
16
+ /** Prefix for issue IDs imported from OpenSpec (default: "osi") */
17
+ issue_prefix?: string;
18
+ }
19
+ /**
20
+ * OpenSpec integration plugin
21
+ */
22
+ declare const openSpecPlugin: IntegrationPlugin;
23
+ export default openSpecPlugin;
24
+ export { generateSpecId, generateChangeId, parseOpenSpecId, verifyOpenSpecId, isOpenSpecId, DEFAULT_SPEC_PREFIX, DEFAULT_CHANGE_PREFIX, type ParsedOpenSpecId, } from "./id-generator.js";
25
+ export { parseSpecFile, extractCapability, parseRequirements, parseScenarios, parseGivenWhenThen, SPEC_PATTERNS, type ParsedOpenSpecSpec, type ParsedRequirement, type ParsedScenario, } from "./parser/spec-parser.js";
26
+ export { parseTasks, parseTasksContent, getAllTasks, getIncompleteTasks, getTaskStats, calculateCompletionPercentage, isTasksFile, TASK_PATTERNS, type ParsedTask, type ParsedTasksFile, } from "./parser/tasks-parser.js";
27
+ export { parseChangeDirectory, extractChangeName, detectArchiveStatus, parseProposal, extractTitleFromWhatChanges, formatTitle, parseChangeTasks, scanAffectedSpecs, isChangeDirectory, scanChangeDirectories, parseAllChanges, CHANGE_PATTERNS, type ParsedOpenSpecChange, } from "./parser/change-parser.js";
28
+ export { OpenSpecWatcher, type OpenSpecWatcherOptions, type ChangeCallback, } from "./watcher.js";
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,iBAAiB,EASlB,MAAM,oBAAoB,CAAC;AAqB5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA+BD;;GAEG;AACH,QAAA,MAAM,cAAc,EAAE,iBA6FrB,CAAC;AAqqBF,eAAe,cAAc,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,6BAA6B,EAC7B,WAAW,EACX,aAAa,EACb,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,2BAA2B,EAC3B,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC"}