@sudocode-ai/cli 0.1.2 → 0.1.4
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/cli/feedback-commands.d.ts.map +1 -1
- package/dist/cli/feedback-commands.js +4 -0
- package/dist/cli/feedback-commands.js.map +1 -1
- package/dist/cli/init-commands.d.ts +0 -2
- package/dist/cli/init-commands.d.ts.map +1 -1
- package/dist/cli/init-commands.js +0 -8
- package/dist/cli/init-commands.js.map +1 -1
- package/dist/cli/issue-commands.d.ts.map +1 -1
- package/dist/cli/issue-commands.js +4 -2
- package/dist/cli/issue-commands.js.map +1 -1
- package/dist/cli/spec-commands.d.ts.map +1 -1
- package/dist/cli/spec-commands.js +3 -2
- package/dist/cli/spec-commands.js.map +1 -1
- package/dist/cli/sync-commands.d.ts.map +1 -1
- package/dist/cli/sync-commands.js +0 -2
- package/dist/cli/sync-commands.js.map +1 -1
- package/dist/cli.js +4 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +41 -0
- package/dist/config.js.map +1 -0
- package/dist/id-generator.d.ts +41 -9
- package/dist/id-generator.d.ts.map +1 -1
- package/dist/id-generator.js +104 -52
- package/dist/id-generator.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +9 -9
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +18 -46
- package/dist/markdown.js.map +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +6 -5
- package/dist/sync.js.map +1 -1
- package/package.json +2 -2
package/dist/config.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { VERSION } from "./version.js";
|
|
4
|
+
/**
|
|
5
|
+
* Read config file (version-controlled)
|
|
6
|
+
*/
|
|
7
|
+
function readConfig(outputDir) {
|
|
8
|
+
const configPath = path.join(outputDir, "config.json");
|
|
9
|
+
if (!fs.existsSync(configPath)) {
|
|
10
|
+
// Create default config if not exists
|
|
11
|
+
const defaultConfig = {
|
|
12
|
+
version: VERSION,
|
|
13
|
+
};
|
|
14
|
+
writeConfig(outputDir, defaultConfig);
|
|
15
|
+
return defaultConfig;
|
|
16
|
+
}
|
|
17
|
+
const content = fs.readFileSync(configPath, "utf8");
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Write config file (version-controlled)
|
|
22
|
+
*/
|
|
23
|
+
function writeConfig(outputDir, config) {
|
|
24
|
+
const configPath = path.join(outputDir, "config.json");
|
|
25
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf8");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get current config
|
|
29
|
+
*/
|
|
30
|
+
export function getConfig(outputDir) {
|
|
31
|
+
return readConfig(outputDir);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Update config (version-controlled)
|
|
35
|
+
*/
|
|
36
|
+
export function updateConfig(outputDir, updates) {
|
|
37
|
+
const config = readConfig(outputDir);
|
|
38
|
+
Object.assign(config, updates);
|
|
39
|
+
writeConfig(outputDir, config);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,SAAS,UAAU,CAAC,SAAiB;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,sCAAsC;QACtC,MAAM,aAAa,GAAW;YAC5B,OAAO,EAAE,OAAO;SACjB,CAAC;QACF,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACtC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,SAAiB,EAAE,MAAc;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACvD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,OAAwB;IAExB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/id-generator.d.ts
CHANGED
|
@@ -1,24 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ID generation utilities
|
|
3
|
+
*
|
|
4
|
+
* Supports two ID formats:
|
|
5
|
+
* 1. Legacy: SPEC-001, ISSUE-001 (sequential numbers)
|
|
6
|
+
* 2. Hash-based: s-x7k9, i-a3f2 (UUID-derived base36 hashes)
|
|
7
|
+
*
|
|
8
|
+
* New entities use hash-based IDs for better distributed workflow support.
|
|
9
|
+
* Legacy IDs remain supported indefinitely.
|
|
3
10
|
*/
|
|
4
11
|
import type Database from "better-sqlite3";
|
|
5
|
-
import type { Config } from "@sudocode-ai/types";
|
|
6
12
|
/**
|
|
7
|
-
*
|
|
13
|
+
* Calculate adaptive hash length based on entity count
|
|
14
|
+
* Uses birthday paradox probability to determine safe length
|
|
15
|
+
*
|
|
16
|
+
* Target: Keep collision probability under 25%
|
|
17
|
+
* Base36 namespace sizes:
|
|
18
|
+
* - 4 chars: ~1.7M namespace → ~980 items at 25% collision prob
|
|
19
|
+
* - 5 chars: ~60M namespace → ~5.9K items at 25% collision prob
|
|
20
|
+
* - 6 chars: ~2.2B namespace → ~35K items at 25% collision prob
|
|
21
|
+
* - 7 chars: ~78B namespace → ~212K items at 25% collision prob
|
|
22
|
+
* - 8 chars: ~2.8T namespace → ~1M+ items at 25% collision prob
|
|
8
23
|
*/
|
|
9
|
-
export declare function
|
|
24
|
+
export declare function getAdaptiveHashLength(count: number): number;
|
|
10
25
|
/**
|
|
11
|
-
*
|
|
26
|
+
* Convert UUID to base36 hash
|
|
27
|
+
* Takes first N hex digits of SHA256(UUID) and converts to base36
|
|
12
28
|
*/
|
|
13
|
-
export declare function
|
|
29
|
+
export declare function hashUUIDToBase36(uuid: string, length: number): string;
|
|
14
30
|
/**
|
|
15
|
-
*
|
|
31
|
+
* Check if ID is legacy format (SPEC-001, ISSUE-001)
|
|
16
32
|
*/
|
|
17
|
-
export declare function
|
|
33
|
+
export declare function isLegacyID(id: string): boolean;
|
|
18
34
|
/**
|
|
19
|
-
*
|
|
35
|
+
* Check if ID is hash format (i-x7k9, s-a3f2)
|
|
20
36
|
*/
|
|
21
|
-
export declare function
|
|
37
|
+
export declare function isHashID(id: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Generate spec ID and UUID
|
|
40
|
+
* Returns hash-based ID derived from UUID
|
|
41
|
+
*/
|
|
42
|
+
export declare function generateSpecId(db: Database.Database, outputDir: string): {
|
|
43
|
+
id: string;
|
|
44
|
+
uuid: string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Generate issue ID and UUID
|
|
48
|
+
* Returns hash-based ID derived from UUID
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateIssueId(db: Database.Database, outputDir: string): {
|
|
51
|
+
id: string;
|
|
52
|
+
uuid: string;
|
|
53
|
+
};
|
|
22
54
|
/**
|
|
23
55
|
* Generate a UUID v4
|
|
24
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA2BrE;AAoCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAU9B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAU9B;AA8DD;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
package/dist/id-generator.js
CHANGED
|
@@ -1,25 +1,118 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ID generation utilities
|
|
3
|
+
*
|
|
4
|
+
* Supports two ID formats:
|
|
5
|
+
* 1. Legacy: SPEC-001, ISSUE-001 (sequential numbers)
|
|
6
|
+
* 2. Hash-based: s-x7k9, i-a3f2 (UUID-derived base36 hashes)
|
|
7
|
+
*
|
|
8
|
+
* New entities use hash-based IDs for better distributed workflow support.
|
|
9
|
+
* Legacy IDs remain supported indefinitely.
|
|
3
10
|
*/
|
|
4
|
-
import * as fs from "fs";
|
|
5
|
-
import * as path from "path";
|
|
6
11
|
import * as crypto from "crypto";
|
|
7
|
-
import { VERSION } from "./version.js";
|
|
8
12
|
/**
|
|
9
|
-
*
|
|
13
|
+
* Calculate adaptive hash length based on entity count
|
|
14
|
+
* Uses birthday paradox probability to determine safe length
|
|
15
|
+
*
|
|
16
|
+
* Target: Keep collision probability under 25%
|
|
17
|
+
* Base36 namespace sizes:
|
|
18
|
+
* - 4 chars: ~1.7M namespace → ~980 items at 25% collision prob
|
|
19
|
+
* - 5 chars: ~60M namespace → ~5.9K items at 25% collision prob
|
|
20
|
+
* - 6 chars: ~2.2B namespace → ~35K items at 25% collision prob
|
|
21
|
+
* - 7 chars: ~78B namespace → ~212K items at 25% collision prob
|
|
22
|
+
* - 8 chars: ~2.8T namespace → ~1M+ items at 25% collision prob
|
|
23
|
+
*/
|
|
24
|
+
export function getAdaptiveHashLength(count) {
|
|
25
|
+
if (count < 980)
|
|
26
|
+
return 4; // i-x7k9
|
|
27
|
+
if (count < 5900)
|
|
28
|
+
return 5; // i-x7k9p
|
|
29
|
+
if (count < 35000)
|
|
30
|
+
return 6; // i-x7k9p1
|
|
31
|
+
if (count < 212000)
|
|
32
|
+
return 7; // i-x7k9p1a
|
|
33
|
+
return 8; // i-x7k9p1a4
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert UUID to base36 hash
|
|
37
|
+
* Takes first N hex digits of SHA256(UUID) and converts to base36
|
|
38
|
+
*/
|
|
39
|
+
export function hashUUIDToBase36(uuid, length) {
|
|
40
|
+
// Remove hyphens from UUID
|
|
41
|
+
const cleanUUID = uuid.replace(/-/g, "");
|
|
42
|
+
// Hash the UUID with SHA256 for better distribution
|
|
43
|
+
const hash = crypto.createHash("sha256").update(cleanUUID).digest("hex");
|
|
44
|
+
// Take enough hex chars to generate desired base36 length
|
|
45
|
+
// Each base36 char needs ~1.29 hex chars (log(36)/log(16))
|
|
46
|
+
const hexCharsNeeded = Math.ceil(length * 1.29);
|
|
47
|
+
const hexSubstring = hash.substring(0, hexCharsNeeded);
|
|
48
|
+
// Convert hex to bigint, then to base36
|
|
49
|
+
const bigInt = BigInt("0x" + hexSubstring);
|
|
50
|
+
let result = bigInt.toString(36).toLowerCase();
|
|
51
|
+
// Pad with zeros if needed
|
|
52
|
+
if (result.length < length) {
|
|
53
|
+
result = result.padStart(length, "0");
|
|
54
|
+
}
|
|
55
|
+
// Truncate to exact length if needed
|
|
56
|
+
if (result.length > length) {
|
|
57
|
+
result = result.substring(0, length);
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate hash-based ID from UUID with collision checking
|
|
63
|
+
*/
|
|
64
|
+
function generateHashIDFromUUID(db, uuid, entityType, count) {
|
|
65
|
+
const prefix = entityType === "spec" ? "s" : "i";
|
|
66
|
+
const baseLength = getAdaptiveHashLength(count);
|
|
67
|
+
// Try progressively longer hashes on collision (very rare)
|
|
68
|
+
for (let length = baseLength; length <= 8; length++) {
|
|
69
|
+
const hash = hashUUIDToBase36(uuid, length);
|
|
70
|
+
const candidate = `${prefix}-${hash}`;
|
|
71
|
+
// Check if this ID already exists
|
|
72
|
+
const table = entityType === "spec" ? "specs" : "issues";
|
|
73
|
+
const existsStmt = db.prepare(`SELECT COUNT(*) as count FROM ${table} WHERE id = ?`);
|
|
74
|
+
const result = existsStmt.get(candidate);
|
|
75
|
+
if (result.count === 0) {
|
|
76
|
+
return candidate;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Failed to generate unique hash ID for ${entityType} after trying lengths ${baseLength}-8`);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if ID is legacy format (SPEC-001, ISSUE-001)
|
|
83
|
+
*/
|
|
84
|
+
export function isLegacyID(id) {
|
|
85
|
+
return /^(SPEC|ISSUE)-\d+$/.test(id);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if ID is hash format (i-x7k9, s-a3f2)
|
|
89
|
+
*/
|
|
90
|
+
export function isHashID(id) {
|
|
91
|
+
return /^[is]-[0-9a-z]{4,8}$/.test(id);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate spec ID and UUID
|
|
95
|
+
* Returns hash-based ID derived from UUID
|
|
10
96
|
*/
|
|
11
97
|
export function generateSpecId(db, outputDir) {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
98
|
+
const uuid = crypto.randomUUID();
|
|
99
|
+
// Count existing specs for adaptive length
|
|
100
|
+
const countStmt = db.prepare(`SELECT COUNT(*) as count FROM specs`);
|
|
101
|
+
const result = countStmt.get();
|
|
102
|
+
const id = generateHashIDFromUUID(db, uuid, "spec", result.count);
|
|
103
|
+
return { id, uuid };
|
|
15
104
|
}
|
|
16
105
|
/**
|
|
17
|
-
* Generate
|
|
106
|
+
* Generate issue ID and UUID
|
|
107
|
+
* Returns hash-based ID derived from UUID
|
|
18
108
|
*/
|
|
19
109
|
export function generateIssueId(db, outputDir) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
110
|
+
const uuid = crypto.randomUUID();
|
|
111
|
+
// Count existing issues for adaptive length
|
|
112
|
+
const countStmt = db.prepare(`SELECT COUNT(*) as count FROM issues`);
|
|
113
|
+
const result = countStmt.get();
|
|
114
|
+
const id = generateHashIDFromUUID(db, uuid, "issue", result.count);
|
|
115
|
+
return { id, uuid };
|
|
23
116
|
}
|
|
24
117
|
/**
|
|
25
118
|
* Get next spec number from database
|
|
@@ -73,47 +166,6 @@ function getNextIssueNumber(db) {
|
|
|
73
166
|
const result = countStmt.get();
|
|
74
167
|
return result.count + 1;
|
|
75
168
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Read config file (version-controlled)
|
|
78
|
-
*/
|
|
79
|
-
function readConfig(outputDir) {
|
|
80
|
-
const configPath = path.join(outputDir, "config.json");
|
|
81
|
-
if (!fs.existsSync(configPath)) {
|
|
82
|
-
// Create default config if not exists
|
|
83
|
-
const defaultConfig = {
|
|
84
|
-
version: VERSION,
|
|
85
|
-
id_prefix: {
|
|
86
|
-
spec: "SPEC",
|
|
87
|
-
issue: "ISSUE",
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
writeConfig(outputDir, defaultConfig);
|
|
91
|
-
return defaultConfig;
|
|
92
|
-
}
|
|
93
|
-
const content = fs.readFileSync(configPath, "utf8");
|
|
94
|
-
return JSON.parse(content);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Write config file (version-controlled)
|
|
98
|
-
*/
|
|
99
|
-
function writeConfig(outputDir, config) {
|
|
100
|
-
const configPath = path.join(outputDir, "config.json");
|
|
101
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf8");
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Get current config
|
|
105
|
-
*/
|
|
106
|
-
export function getConfig(outputDir) {
|
|
107
|
-
return readConfig(outputDir);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Update config (version-controlled)
|
|
111
|
-
*/
|
|
112
|
-
export function updateConfig(outputDir, updates) {
|
|
113
|
-
const config = readConfig(outputDir);
|
|
114
|
-
Object.assign(config, updates);
|
|
115
|
-
writeConfig(outputDir, config);
|
|
116
|
-
}
|
|
117
169
|
/**
|
|
118
170
|
* Generate a UUID v4
|
|
119
171
|
*/
|
package/dist/id-generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
package/dist/markdown.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Markdown parser with frontmatter support
|
|
3
3
|
*/
|
|
4
4
|
import type Database from "better-sqlite3";
|
|
5
|
-
import type { LocationAnchor
|
|
5
|
+
import type { LocationAnchor } from "@sudocode-ai/types";
|
|
6
6
|
export interface ParsedMarkdown<T extends object = Record<string, any>> {
|
|
7
7
|
/**
|
|
8
8
|
* Parsed frontmatter data
|
|
@@ -69,19 +69,19 @@ export declare function parseMarkdownFile<T extends object = Record<string, any>
|
|
|
69
69
|
/**
|
|
70
70
|
* Extract cross-references from markdown content
|
|
71
71
|
* Supports formats:
|
|
72
|
-
* - [[
|
|
73
|
-
* - [[@
|
|
74
|
-
* - [[
|
|
75
|
-
* - [[
|
|
76
|
-
* - [[
|
|
77
|
-
* - [[
|
|
72
|
+
* - [[i-x7k9]] or [[s-14sh]] - hash-based entity reference
|
|
73
|
+
* - [[@i-x7k9]] - entity reference with @ prefix (for clarity)
|
|
74
|
+
* - [[i-x7k9|Display Text]] - with custom display text
|
|
75
|
+
* - [[i-x7k9]]{ blocks } - with relationship type (shorthand)
|
|
76
|
+
* - [[i-x7k9]]{ type: blocks } - with relationship type (explicit)
|
|
77
|
+
* - [[i-x7k9|Display]]{ blocks } - combination of display text and type
|
|
78
78
|
*
|
|
79
79
|
* If db is provided, validates references against the database and determines entity type.
|
|
80
80
|
* Only returns references to entities that actually exist.
|
|
81
81
|
*
|
|
82
|
-
* If
|
|
82
|
+
* If db is not provided, determines entity type from hash-based ID prefix (i- or s-).
|
|
83
83
|
*/
|
|
84
|
-
export declare function extractCrossReferences(content: string, db?: Database.Database
|
|
84
|
+
export declare function extractCrossReferences(content: string, db?: Database.Database): CrossReference[];
|
|
85
85
|
/**
|
|
86
86
|
* Stringify frontmatter and content back to markdown
|
|
87
87
|
*/
|
package/dist/markdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/markdown.js
CHANGED
|
@@ -5,7 +5,6 @@ import matter from "gray-matter";
|
|
|
5
5
|
import * as fs from "fs";
|
|
6
6
|
import { getSpec } from "./operations/specs.js";
|
|
7
7
|
import { getIssue } from "./operations/issues.js";
|
|
8
|
-
import { getConfig } from "./id-generator.js";
|
|
9
8
|
import { createFeedbackAnchor } from "./operations/feedback-anchors.js";
|
|
10
9
|
/**
|
|
11
10
|
* Parse markdown file with YAML frontmatter
|
|
@@ -15,18 +14,8 @@ import { createFeedbackAnchor } from "./operations/feedback-anchors.js";
|
|
|
15
14
|
*/
|
|
16
15
|
export function parseMarkdown(content, db, outputDir) {
|
|
17
16
|
const parsed = matter(content);
|
|
18
|
-
// Load metadata if outputDir is provided
|
|
19
|
-
let config;
|
|
20
|
-
if (outputDir && db) {
|
|
21
|
-
try {
|
|
22
|
-
config = getConfig(outputDir);
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
// Ignore - will fall back to default heuristics
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
17
|
// Extract cross-references from content
|
|
29
|
-
const references = extractCrossReferences(parsed.content, db
|
|
18
|
+
const references = extractCrossReferences(parsed.content, db);
|
|
30
19
|
return {
|
|
31
20
|
data: parsed.data,
|
|
32
21
|
content: parsed.content,
|
|
@@ -69,28 +58,27 @@ function feedbackAnchorToLocationAnchor(feedbackAnchor) {
|
|
|
69
58
|
/**
|
|
70
59
|
* Extract cross-references from markdown content
|
|
71
60
|
* Supports formats:
|
|
72
|
-
* - [[
|
|
73
|
-
* - [[@
|
|
74
|
-
* - [[
|
|
75
|
-
* - [[
|
|
76
|
-
* - [[
|
|
77
|
-
* - [[
|
|
61
|
+
* - [[i-x7k9]] or [[s-14sh]] - hash-based entity reference
|
|
62
|
+
* - [[@i-x7k9]] - entity reference with @ prefix (for clarity)
|
|
63
|
+
* - [[i-x7k9|Display Text]] - with custom display text
|
|
64
|
+
* - [[i-x7k9]]{ blocks } - with relationship type (shorthand)
|
|
65
|
+
* - [[i-x7k9]]{ type: blocks } - with relationship type (explicit)
|
|
66
|
+
* - [[i-x7k9|Display]]{ blocks } - combination of display text and type
|
|
78
67
|
*
|
|
79
68
|
* If db is provided, validates references against the database and determines entity type.
|
|
80
69
|
* Only returns references to entities that actually exist.
|
|
81
70
|
*
|
|
82
|
-
* If
|
|
71
|
+
* If db is not provided, determines entity type from hash-based ID prefix (i- or s-).
|
|
83
72
|
*/
|
|
84
|
-
export function extractCrossReferences(content, db
|
|
73
|
+
export function extractCrossReferences(content, db) {
|
|
85
74
|
const references = [];
|
|
86
75
|
// Pattern: [[optional-@][entity-id][|display-text]]optional-metadata
|
|
87
|
-
//
|
|
88
|
-
// - [[
|
|
89
|
-
// - [[
|
|
90
|
-
// - [[
|
|
91
|
-
// - [[
|
|
92
|
-
|
|
93
|
-
const refPattern = /\[\[(@)?([a-z]+-\d+)(?:\|([^\]]+))?\]\](?:\{\s*(?:type:\s*)?([a-z-]+)\s*\})?/gi;
|
|
76
|
+
// Supports hash-based IDs only:
|
|
77
|
+
// - [[i-x7k9]] or [[s-14sh]]
|
|
78
|
+
// - [[i-x7k9|Display Text]]
|
|
79
|
+
// - [[i-x7k9]]{ blocks }
|
|
80
|
+
// - [[i-x7k9]]{ type: depends-on }
|
|
81
|
+
const refPattern = /\[\[(@)?([is]-[0-9a-z]{4,8})(?:\|([^\]]+))?\]\](?:\{\s*(?:type:\s*)?([a-z-]+)\s*\})?/gi;
|
|
94
82
|
let match;
|
|
95
83
|
while ((match = refPattern.exec(content)) !== null) {
|
|
96
84
|
const hasAt = match[1] === "@";
|
|
@@ -139,25 +127,9 @@ export function extractCrossReferences(content, db, config) {
|
|
|
139
127
|
}
|
|
140
128
|
}
|
|
141
129
|
else {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const issuePrefix = config.id_prefix.issue.toLowerCase();
|
|
146
|
-
if (hasAt || id.toLowerCase().startsWith(issuePrefix + "-")) {
|
|
147
|
-
type = "issue";
|
|
148
|
-
}
|
|
149
|
-
else if (id.toLowerCase().startsWith(specPrefix + "-")) {
|
|
150
|
-
type = "spec";
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
// TODO: Check the actual entity ID.
|
|
154
|
-
// TODO: No issue resolved - skip the reference.
|
|
155
|
-
type = "spec";
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
type = hasAt || id.startsWith("issue-") ? "issue" : "spec";
|
|
160
|
-
}
|
|
130
|
+
// Determine type from hash-based ID prefix
|
|
131
|
+
// Hash IDs always use i- for issues, s- for specs
|
|
132
|
+
const type = id.startsWith("i-") ? "issue" : "spec";
|
|
161
133
|
references.push({
|
|
162
134
|
match: match[0],
|
|
163
135
|
id,
|
package/dist/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAsB3C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAsB3C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAoED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAoKrB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,OAAO,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CA0DrB"}
|
package/dist/sync.js
CHANGED
|
@@ -26,12 +26,13 @@ function cleanFrontmatterForMarkdown(data) {
|
|
|
26
26
|
function initializeFrontmatter(db, data, entityType, mdPath, outputDir, user) {
|
|
27
27
|
const now = new Date().toISOString();
|
|
28
28
|
const initialized = { ...data };
|
|
29
|
-
// Generate ID if missing
|
|
29
|
+
// Generate ID and UUID if missing
|
|
30
30
|
if (!initialized.id) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
const generated = entityType === "spec"
|
|
32
|
+
? generateSpecId(db, outputDir)
|
|
33
|
+
: generateIssueId(db, outputDir);
|
|
34
|
+
initialized.id = generated.id;
|
|
35
|
+
initialized.uuid = generated.uuid;
|
|
35
36
|
}
|
|
36
37
|
// Extract title from content if missing
|
|
37
38
|
if (!initialized.title) {
|