@jonit-dev/night-watch-cli 1.5.9 → 1.7.0
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.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +39 -11
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +23 -0
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/slice.d.ts +26 -0
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/commands/slice.js +175 -0
- package/dist/commands/slice.js.map +1 -0
- package/dist/commands/state.d.ts +8 -0
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/commands/state.js +56 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/uninstall.js +2 -2
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +11 -13
- package/dist/server/index.js.map +1 -1
- package/dist/storage/json-state-migrator.d.ts +24 -0
- package/dist/storage/json-state-migrator.d.ts.map +1 -0
- package/dist/storage/json-state-migrator.js +197 -0
- package/dist/storage/json-state-migrator.js.map +1 -0
- package/dist/storage/repositories/index.d.ts +23 -0
- package/dist/storage/repositories/index.d.ts.map +1 -0
- package/dist/storage/repositories/index.js +37 -0
- package/dist/storage/repositories/index.js.map +1 -0
- package/dist/storage/repositories/interfaces.d.ts +37 -0
- package/dist/storage/repositories/interfaces.d.ts.map +1 -0
- package/dist/storage/repositories/interfaces.js +6 -0
- package/dist/storage/repositories/interfaces.js.map +1 -0
- package/dist/storage/repositories/sqlite/execution-history-repository.d.ts +21 -0
- package/dist/storage/repositories/sqlite/execution-history-repository.d.ts.map +1 -0
- package/dist/storage/repositories/sqlite/execution-history-repository.js +94 -0
- package/dist/storage/repositories/sqlite/execution-history-repository.js.map +1 -0
- package/dist/storage/repositories/sqlite/prd-state-repository.d.ts +17 -0
- package/dist/storage/repositories/sqlite/prd-state-repository.d.ts.map +1 -0
- package/dist/storage/repositories/sqlite/prd-state-repository.js +74 -0
- package/dist/storage/repositories/sqlite/prd-state-repository.js.map +1 -0
- package/dist/storage/repositories/sqlite/project-registry-repository.d.ts +16 -0
- package/dist/storage/repositories/sqlite/project-registry-repository.d.ts.map +1 -0
- package/dist/storage/repositories/sqlite/project-registry-repository.js +34 -0
- package/dist/storage/repositories/sqlite/project-registry-repository.js.map +1 -0
- package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts +14 -0
- package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +1 -0
- package/dist/storage/repositories/sqlite/roadmap-state-repository.js +47 -0
- package/dist/storage/repositories/sqlite/roadmap-state-repository.js.map +1 -0
- package/dist/storage/sqlite/client.d.ts +23 -0
- package/dist/storage/sqlite/client.d.ts.map +1 -0
- package/dist/storage/sqlite/client.js +47 -0
- package/dist/storage/sqlite/client.js.map +1 -0
- package/dist/storage/sqlite/migrations.d.ts +11 -0
- package/dist/storage/sqlite/migrations.d.ts.map +1 -0
- package/dist/storage/sqlite/migrations.js +57 -0
- package/dist/storage/sqlite/migrations.js.map +1 -0
- package/dist/templates/slicer-prompt.d.ts +54 -0
- package/dist/templates/slicer-prompt.d.ts.map +1 -0
- package/dist/templates/slicer-prompt.js +163 -0
- package/dist/templates/slicer-prompt.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/execution-history.d.ts +11 -5
- package/dist/utils/execution-history.d.ts.map +1 -1
- package/dist/utils/execution-history.js +27 -130
- package/dist/utils/execution-history.js.map +1 -1
- package/dist/utils/prd-states.d.ts +1 -2
- package/dist/utils/prd-states.d.ts.map +1 -1
- package/dist/utils/prd-states.js +10 -42
- package/dist/utils/prd-states.js.map +1 -1
- package/dist/utils/registry.d.ts +9 -4
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +21 -33
- package/dist/utils/registry.js.map +1 -1
- package/dist/utils/roadmap-scanner.d.ts +34 -2
- package/dist/utils/roadmap-scanner.d.ts.map +1 -1
- package/dist/utils/roadmap-scanner.js +218 -105
- package/dist/utils/roadmap-scanner.js.map +1 -1
- package/dist/utils/roadmap-state.d.ts +13 -6
- package/dist/utils/roadmap-state.d.ts.map +1 -1
- package/dist/utils/roadmap-state.js +50 -27
- package/dist/utils/roadmap-state.js.map +1 -1
- package/package.json +9 -4
- package/scripts/night-watch-cron.sh +65 -24
- package/scripts/night-watch-slicer-cron.sh +90 -0
- package/templates/night-watch-slicer.md +219 -0
- package/templates/night-watch.config.json +1 -0
- package/web/dist/assets/{index-CP0r6Epl.js → index-D4AfwSvr.js} +52 -52
- package/web/dist/assets/index-Dx_ZY5CY.css +1 -0
- package/web/dist/index.html +2 -2
|
@@ -1,154 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Execution history ledger for Night Watch CLI
|
|
3
|
-
* Stores PRD execution records in
|
|
3
|
+
* Stores PRD execution records in the SQLite repository layer.
|
|
4
4
|
* Decoupled from PRD file paths — keyed by project directory + PRD filename.
|
|
5
5
|
*/
|
|
6
|
-
import * as fs from "fs";
|
|
7
6
|
import * as os from "os";
|
|
8
7
|
import * as path from "path";
|
|
9
8
|
import { GLOBAL_CONFIG_DIR, HISTORY_FILE_NAME, MAX_HISTORY_RECORDS_PER_PRD, } from "../constants.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const HISTORY_LOCK_STALE_MS = 30000;
|
|
13
|
-
const HISTORY_LOCK_POLL_MS = 25;
|
|
14
|
-
const sleepState = new Int32Array(new SharedArrayBuffer(4));
|
|
9
|
+
import { getRepositories, resetRepositories } from "../storage/repositories/index.js";
|
|
10
|
+
import { closeDb } from "../storage/sqlite/client.js";
|
|
15
11
|
/**
|
|
16
|
-
* Get the path to the history file
|
|
12
|
+
* Get the path to the history file.
|
|
13
|
+
* Kept for backward compatibility.
|
|
17
14
|
*/
|
|
18
15
|
export function getHistoryPath() {
|
|
19
16
|
const base = process.env.NIGHT_WATCH_HOME || path.join(os.homedir(), GLOBAL_CONFIG_DIR);
|
|
20
17
|
return path.join(base, HISTORY_FILE_NAME);
|
|
21
18
|
}
|
|
22
|
-
function sleepMs(ms) {
|
|
23
|
-
Atomics.wait(sleepState, 0, 0, ms);
|
|
24
|
-
}
|
|
25
|
-
function acquireHistoryLock(historyPath) {
|
|
26
|
-
const lockPath = `${historyPath}${HISTORY_LOCK_SUFFIX}`;
|
|
27
|
-
fs.mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
28
|
-
const deadline = Date.now() + HISTORY_LOCK_TIMEOUT_MS;
|
|
29
|
-
while (true) {
|
|
30
|
-
try {
|
|
31
|
-
return fs.openSync(lockPath, "wx");
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
const err = error;
|
|
35
|
-
if (err.code !== "EEXIST") {
|
|
36
|
-
throw err;
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const lockStats = fs.statSync(lockPath);
|
|
40
|
-
if (Date.now() - lockStats.mtimeMs > HISTORY_LOCK_STALE_MS) {
|
|
41
|
-
fs.unlinkSync(lockPath);
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
// Lock may have disappeared between checks; retry.
|
|
47
|
-
}
|
|
48
|
-
if (Date.now() >= deadline) {
|
|
49
|
-
throw new Error(`Timed out acquiring execution history lock: ${lockPath}`);
|
|
50
|
-
}
|
|
51
|
-
sleepMs(HISTORY_LOCK_POLL_MS);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function releaseHistoryLock(lockFd, historyPath) {
|
|
56
|
-
const lockPath = `${historyPath}${HISTORY_LOCK_SUFFIX}`;
|
|
57
|
-
try {
|
|
58
|
-
fs.closeSync(lockFd);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
// Ignore close errors; lock cleanup still attempted.
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
fs.unlinkSync(lockPath);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// Ignore lock cleanup errors.
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function loadHistoryFromPath(historyPath) {
|
|
71
|
-
if (!fs.existsSync(historyPath)) {
|
|
72
|
-
return {};
|
|
73
|
-
}
|
|
74
|
-
try {
|
|
75
|
-
const content = fs.readFileSync(historyPath, "utf-8");
|
|
76
|
-
const parsed = JSON.parse(content);
|
|
77
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
78
|
-
return {};
|
|
79
|
-
}
|
|
80
|
-
return parsed;
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
return {};
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
function saveHistoryAtomic(historyPath, history) {
|
|
87
|
-
const dir = path.dirname(historyPath);
|
|
88
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
89
|
-
const tmpPath = path.join(dir, `${HISTORY_FILE_NAME}.${process.pid}.${Date.now()}.tmp`);
|
|
90
|
-
try {
|
|
91
|
-
fs.writeFileSync(tmpPath, JSON.stringify(history, null, 2) + "\n");
|
|
92
|
-
fs.renameSync(tmpPath, historyPath);
|
|
93
|
-
}
|
|
94
|
-
finally {
|
|
95
|
-
if (fs.existsSync(tmpPath)) {
|
|
96
|
-
fs.rmSync(tmpPath, { force: true });
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
19
|
/**
|
|
101
|
-
* Load execution history from
|
|
20
|
+
* Load execution history from the SQLite repository.
|
|
21
|
+
* Returns the full IExecutionHistory structure reconstructed from the DB.
|
|
102
22
|
*/
|
|
103
23
|
export function loadHistory() {
|
|
104
|
-
|
|
24
|
+
const { executionHistory } = getRepositories();
|
|
25
|
+
return executionHistory.getAllHistory();
|
|
105
26
|
}
|
|
106
27
|
/**
|
|
107
|
-
* Save execution history to
|
|
28
|
+
* Save execution history to the repository.
|
|
29
|
+
* Full replace: clears all existing records then inserts all records from the
|
|
30
|
+
* provided IExecutionHistory structure in a single transaction.
|
|
108
31
|
*/
|
|
109
32
|
export function saveHistory(history) {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
try {
|
|
113
|
-
saveHistoryAtomic(historyPath, history);
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
releaseHistoryLock(lockFd, historyPath);
|
|
117
|
-
}
|
|
33
|
+
const { executionHistory } = getRepositories();
|
|
34
|
+
executionHistory.replaceAll(history);
|
|
118
35
|
}
|
|
119
36
|
/**
|
|
120
37
|
* Record a PRD execution result.
|
|
121
38
|
* Appends a record and trims to MAX_HISTORY_RECORDS_PER_PRD.
|
|
122
39
|
*/
|
|
123
40
|
export function recordExecution(projectDir, prdFile, outcome, exitCode, attempt = 1) {
|
|
124
|
-
const historyPath = getHistoryPath();
|
|
125
|
-
const lockFd = acquireHistoryLock(historyPath);
|
|
126
41
|
const resolved = path.resolve(projectDir);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
137
|
-
outcome,
|
|
138
|
-
exitCode,
|
|
139
|
-
attempt,
|
|
140
|
-
};
|
|
141
|
-
history[resolved][prdFile].records.push(record);
|
|
142
|
-
// Trim to max records (keep most recent)
|
|
143
|
-
const records = history[resolved][prdFile].records;
|
|
144
|
-
if (records.length > MAX_HISTORY_RECORDS_PER_PRD) {
|
|
145
|
-
history[resolved][prdFile].records = records.slice(records.length - MAX_HISTORY_RECORDS_PER_PRD);
|
|
146
|
-
}
|
|
147
|
-
saveHistoryAtomic(historyPath, history);
|
|
148
|
-
}
|
|
149
|
-
finally {
|
|
150
|
-
releaseHistoryLock(lockFd, historyPath);
|
|
151
|
-
}
|
|
42
|
+
const { executionHistory } = getRepositories();
|
|
43
|
+
const record = {
|
|
44
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
45
|
+
outcome,
|
|
46
|
+
exitCode,
|
|
47
|
+
attempt,
|
|
48
|
+
};
|
|
49
|
+
executionHistory.addRecord(resolved, prdFile, record);
|
|
50
|
+
executionHistory.trimRecords(resolved, prdFile, MAX_HISTORY_RECORDS_PER_PRD);
|
|
152
51
|
}
|
|
153
52
|
/**
|
|
154
53
|
* Get the most recent execution record for a PRD.
|
|
@@ -156,12 +55,9 @@ export function recordExecution(projectDir, prdFile, outcome, exitCode, attempt
|
|
|
156
55
|
*/
|
|
157
56
|
export function getLastExecution(projectDir, prdFile) {
|
|
158
57
|
const resolved = path.resolve(projectDir);
|
|
159
|
-
const
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
return null;
|
|
163
|
-
}
|
|
164
|
-
return prdHistory.records[prdHistory.records.length - 1];
|
|
58
|
+
const { executionHistory } = getRepositories();
|
|
59
|
+
const records = executionHistory.getRecords(resolved, prdFile);
|
|
60
|
+
return records.length > 0 ? records[0] : null;
|
|
165
61
|
}
|
|
166
62
|
/**
|
|
167
63
|
* Check if a PRD is in cooldown after a recent non-success execution.
|
|
@@ -180,4 +76,5 @@ export function isInCooldown(projectDir, prdFile, cooldownPeriod) {
|
|
|
180
76
|
const age = now - last.timestamp;
|
|
181
77
|
return age < cooldownPeriod;
|
|
182
78
|
}
|
|
79
|
+
export { closeDb, resetRepositories };
|
|
183
80
|
//# sourceMappingURL=execution-history.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-history.js","sourceRoot":"","sources":["../../src/utils/execution-history.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"execution-history.js","sourceRoot":"","sources":["../../src/utils/execution-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PRD state persistence for Night Watch CLI
|
|
3
|
-
* Tracks pending-review (and future) PRD states
|
|
4
|
-
* so PRD files do not need to move directories.
|
|
3
|
+
* Tracks pending-review (and future) PRD states via the SQLite repository layer.
|
|
5
4
|
*/
|
|
6
5
|
export interface IPrdStateEntry {
|
|
7
6
|
status: "pending-review";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd-states.d.ts","sourceRoot":"","sources":["../../src/utils/prd-states.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prd-states.d.ts","sourceRoot":"","sources":["../../src/utils/prd-states.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AAExE,wBAAgB,aAAa,IAAI,UAAU,CAG1C;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAGzF;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,IAAI,CAGN;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGvE;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,GACvB,MAAM,EAAE,CAKV"}
|
package/dist/utils/prd-states.js
CHANGED
|
@@ -1,55 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PRD state persistence for Night Watch CLI
|
|
3
|
-
* Tracks pending-review (and future) PRD states
|
|
4
|
-
* so PRD files do not need to move directories.
|
|
3
|
+
* Tracks pending-review (and future) PRD states via the SQLite repository layer.
|
|
5
4
|
*/
|
|
6
|
-
import
|
|
7
|
-
import * as os from "os";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
import { GLOBAL_CONFIG_DIR, PRD_STATES_FILE_NAME } from "../constants.js";
|
|
10
|
-
function prdStatesPath() {
|
|
11
|
-
return path.join(os.homedir(), GLOBAL_CONFIG_DIR, PRD_STATES_FILE_NAME);
|
|
12
|
-
}
|
|
5
|
+
import { getRepositories } from "../storage/repositories/index.js";
|
|
13
6
|
export function readPrdStates() {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
return {};
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
const raw = fs.readFileSync(filePath, "utf-8");
|
|
20
|
-
return JSON.parse(raw);
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
7
|
+
const { prdState } = getRepositories();
|
|
8
|
+
return prdState.readAll();
|
|
25
9
|
}
|
|
26
10
|
export function getPrdStatesForProject(projectDir) {
|
|
27
|
-
const
|
|
28
|
-
return
|
|
11
|
+
const { prdState } = getRepositories();
|
|
12
|
+
return prdState.getAll(projectDir);
|
|
29
13
|
}
|
|
30
14
|
export function writePrdState(projectDir, prdName, entry) {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
34
|
-
const all = readPrdStates();
|
|
35
|
-
if (!all[projectDir]) {
|
|
36
|
-
all[projectDir] = {};
|
|
37
|
-
}
|
|
38
|
-
all[projectDir][prdName] = entry;
|
|
39
|
-
fs.writeFileSync(filePath, JSON.stringify(all, null, 2), "utf-8");
|
|
15
|
+
const { prdState } = getRepositories();
|
|
16
|
+
prdState.set(projectDir, prdName, entry);
|
|
40
17
|
}
|
|
41
18
|
export function clearPrdState(projectDir, prdName) {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
return;
|
|
45
|
-
const all = readPrdStates();
|
|
46
|
-
if (!all[projectDir])
|
|
47
|
-
return;
|
|
48
|
-
delete all[projectDir][prdName];
|
|
49
|
-
if (Object.keys(all[projectDir]).length === 0) {
|
|
50
|
-
delete all[projectDir];
|
|
51
|
-
}
|
|
52
|
-
fs.writeFileSync(filePath, JSON.stringify(all, null, 2), "utf-8");
|
|
19
|
+
const { prdState } = getRepositories();
|
|
20
|
+
prdState.delete(projectDir, prdName);
|
|
53
21
|
}
|
|
54
22
|
export function listPrdStatesByStatus(projectDir, status) {
|
|
55
23
|
const states = getPrdStatesForProject(projectDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd-states.js","sourceRoot":"","sources":["../../src/utils/prd-states.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prd-states.js","sourceRoot":"","sources":["../../src/utils/prd-states.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAUnE,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,OAAe,EACf,KAAqB;IAErB,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IACvC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,OAAe;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,MAAwB;IAExB,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/utils/registry.d.ts
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Global project registry for Night Watch CLI
|
|
3
|
-
* Manages
|
|
3
|
+
* Manages project entries via the SQLite repository layer.
|
|
4
4
|
*/
|
|
5
|
+
import { resetRepositories } from "../storage/repositories/index.js";
|
|
6
|
+
import { closeDb } from "../storage/sqlite/client.js";
|
|
5
7
|
export interface IRegistryEntry {
|
|
6
8
|
name: string;
|
|
7
9
|
path: string;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
|
-
* Get the path to the global registry file
|
|
12
|
+
* Get the path to the global registry file.
|
|
13
|
+
* Kept for backward compatibility.
|
|
11
14
|
*/
|
|
12
15
|
export declare function getRegistryPath(): string;
|
|
13
16
|
/**
|
|
14
|
-
* Load
|
|
17
|
+
* Load all registry entries from the SQLite repository.
|
|
15
18
|
*/
|
|
16
19
|
export declare function loadRegistry(): IRegistryEntry[];
|
|
17
20
|
/**
|
|
18
|
-
* Save
|
|
21
|
+
* Save a full set of registry entries (full replace).
|
|
22
|
+
* Deletes all existing entries then upserts each provided entry in a transaction.
|
|
19
23
|
*/
|
|
20
24
|
export declare function saveRegistry(entries: IRegistryEntry[]): void;
|
|
21
25
|
/**
|
|
@@ -36,4 +40,5 @@ export declare function validateRegistry(): {
|
|
|
36
40
|
valid: IRegistryEntry[];
|
|
37
41
|
invalid: IRegistryEntry[];
|
|
38
42
|
};
|
|
43
|
+
export { closeDb, resetRepositories };
|
|
39
44
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAmB,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,cAAc,EAAE,CAG/C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAM5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAmBlE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAczF;AAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/utils/registry.js
CHANGED
|
@@ -1,47 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Global project registry for Night Watch CLI
|
|
3
|
-
* Manages
|
|
3
|
+
* Manages project entries via the SQLite repository layer.
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from "fs";
|
|
6
6
|
import * as os from "os";
|
|
7
7
|
import * as path from "path";
|
|
8
8
|
import { CONFIG_FILE_NAME, GLOBAL_CONFIG_DIR, REGISTRY_FILE_NAME } from "../constants.js";
|
|
9
|
+
import { getRepositories, resetRepositories } from "../storage/repositories/index.js";
|
|
10
|
+
import { closeDb } from "../storage/sqlite/client.js";
|
|
9
11
|
import { getProjectName } from "./status-data.js";
|
|
10
12
|
/**
|
|
11
|
-
* Get the path to the global registry file
|
|
13
|
+
* Get the path to the global registry file.
|
|
14
|
+
* Kept for backward compatibility.
|
|
12
15
|
*/
|
|
13
16
|
export function getRegistryPath() {
|
|
14
17
|
const base = process.env.NIGHT_WATCH_HOME || path.join(os.homedir(), GLOBAL_CONFIG_DIR);
|
|
15
18
|
return path.join(base, REGISTRY_FILE_NAME);
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
18
|
-
* Load
|
|
21
|
+
* Load all registry entries from the SQLite repository.
|
|
19
22
|
*/
|
|
20
23
|
export function loadRegistry() {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
const content = fs.readFileSync(registryPath, "utf-8");
|
|
27
|
-
const parsed = JSON.parse(content);
|
|
28
|
-
if (!Array.isArray(parsed)) {
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
return parsed;
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return [];
|
|
35
|
-
}
|
|
24
|
+
const { projectRegistry } = getRepositories();
|
|
25
|
+
return projectRegistry.getAll();
|
|
36
26
|
}
|
|
37
27
|
/**
|
|
38
|
-
* Save
|
|
28
|
+
* Save a full set of registry entries (full replace).
|
|
29
|
+
* Deletes all existing entries then upserts each provided entry in a transaction.
|
|
39
30
|
*/
|
|
40
31
|
export function saveRegistry(entries) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
const { projectRegistry } = getRepositories();
|
|
33
|
+
projectRegistry.clear();
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
projectRegistry.upsert(entry);
|
|
36
|
+
}
|
|
45
37
|
}
|
|
46
38
|
/**
|
|
47
39
|
* Register a project in the global registry.
|
|
@@ -49,7 +41,8 @@ export function saveRegistry(entries) {
|
|
|
49
41
|
*/
|
|
50
42
|
export function registerProject(projectDir) {
|
|
51
43
|
const resolvedPath = path.resolve(projectDir);
|
|
52
|
-
const
|
|
44
|
+
const { projectRegistry } = getRepositories();
|
|
45
|
+
const entries = projectRegistry.getAll();
|
|
53
46
|
const existing = entries.find((e) => e.path === resolvedPath);
|
|
54
47
|
if (existing) {
|
|
55
48
|
return existing;
|
|
@@ -59,8 +52,7 @@ export function registerProject(projectDir) {
|
|
|
59
52
|
const nameExists = entries.some((e) => e.name === name);
|
|
60
53
|
const finalName = nameExists ? `${name}-${path.basename(resolvedPath)}` : name;
|
|
61
54
|
const entry = { name: finalName, path: resolvedPath };
|
|
62
|
-
|
|
63
|
-
saveRegistry(entries);
|
|
55
|
+
projectRegistry.upsert(entry);
|
|
64
56
|
return entry;
|
|
65
57
|
}
|
|
66
58
|
/**
|
|
@@ -69,13 +61,8 @@ export function registerProject(projectDir) {
|
|
|
69
61
|
*/
|
|
70
62
|
export function unregisterProject(projectDir) {
|
|
71
63
|
const resolvedPath = path.resolve(projectDir);
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
if (filtered.length === entries.length) {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
saveRegistry(filtered);
|
|
78
|
-
return true;
|
|
64
|
+
const { projectRegistry } = getRepositories();
|
|
65
|
+
return projectRegistry.remove(resolvedPath);
|
|
79
66
|
}
|
|
80
67
|
/**
|
|
81
68
|
* Validate all registry entries.
|
|
@@ -95,4 +82,5 @@ export function validateRegistry() {
|
|
|
95
82
|
}
|
|
96
83
|
return { valid, invalid };
|
|
97
84
|
}
|
|
85
|
+
export { closeDb, resetRepositories };
|
|
98
86
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,19 @@ export interface IScanResult {
|
|
|
37
37
|
/** List of errors encountered */
|
|
38
38
|
errors: string[];
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of slicing a single roadmap item
|
|
42
|
+
*/
|
|
43
|
+
export interface ISliceResult {
|
|
44
|
+
/** Whether slicing was successful */
|
|
45
|
+
sliced: boolean;
|
|
46
|
+
/** The created PRD file path (relative to PRD dir) */
|
|
47
|
+
file?: string;
|
|
48
|
+
/** Error message if slicing failed */
|
|
49
|
+
error?: string;
|
|
50
|
+
/** The roadmap item that was processed */
|
|
51
|
+
item?: IRoadmapItem;
|
|
52
|
+
}
|
|
40
53
|
/**
|
|
41
54
|
* Get the current status of the roadmap scanner
|
|
42
55
|
*
|
|
@@ -46,13 +59,32 @@ export interface IScanResult {
|
|
|
46
59
|
*/
|
|
47
60
|
export declare function getRoadmapStatus(projectDir: string, config: INightWatchConfig): IRoadmapStatus;
|
|
48
61
|
/**
|
|
49
|
-
*
|
|
62
|
+
* Slice a single roadmap item into a PRD using the AI provider
|
|
63
|
+
*
|
|
64
|
+
* @param projectDir - The project directory
|
|
65
|
+
* @param prdDir - The PRD directory
|
|
66
|
+
* @param item - The roadmap item to slice
|
|
67
|
+
* @param config - The Night Watch configuration
|
|
68
|
+
* @returns The slice result
|
|
69
|
+
*/
|
|
70
|
+
export declare function sliceRoadmapItem(projectDir: string, prdDir: string, item: IRoadmapItem, config: INightWatchConfig): Promise<ISliceResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Slice the next unprocessed roadmap item
|
|
73
|
+
*
|
|
74
|
+
* @param projectDir - The project directory
|
|
75
|
+
* @param config - The Night Watch configuration
|
|
76
|
+
* @returns The slice result
|
|
77
|
+
*/
|
|
78
|
+
export declare function sliceNextItem(projectDir: string, config: INightWatchConfig): Promise<ISliceResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Scan the roadmap and slice ONE item
|
|
81
|
+
* This is now async and processes only a single item per call
|
|
50
82
|
*
|
|
51
83
|
* @param projectDir - The project directory
|
|
52
84
|
* @param config - The Night Watch configuration
|
|
53
85
|
* @returns The scan result with created, skipped, and error lists
|
|
54
86
|
*/
|
|
55
|
-
export declare function scanRoadmap(projectDir: string, config: INightWatchConfig): IScanResult
|
|
87
|
+
export declare function scanRoadmap(projectDir: string, config: INightWatchConfig): Promise<IScanResult>;
|
|
56
88
|
/**
|
|
57
89
|
* Check if there are new (unprocessed) items in the roadmap
|
|
58
90
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap-scanner.d.ts","sourceRoot":"","sources":["../../src/utils/roadmap-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"roadmap-scanner.d.ts","sourceRoot":"","sources":["../../src/utils/roadmap-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,iBAAiB,EAAY,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAajE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACrE,+CAA+C;IAC/C,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,cAAc,CA+EhB;AA8CD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAiHvB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAqFvB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,WAAW,CAAC,CA2BtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAGT"}
|