@slope-dev/slope 1.53.0 → 1.54.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/commands/agent.d.ts +35 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +345 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/briefing.d.ts.map +1 -1
- package/dist/cli/commands/briefing.js +5 -3
- package/dist/cli/commands/briefing.js.map +1 -1
- package/dist/cli/commands/commit-ready.d.ts +29 -0
- package/dist/cli/commands/commit-ready.d.ts.map +1 -0
- package/dist/cli/commands/commit-ready.js +263 -0
- package/dist/cli/commands/commit-ready.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +97 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/gate.d.ts +2 -0
- package/dist/cli/commands/gate.d.ts.map +1 -0
- package/dist/cli/commands/gate.js +175 -0
- package/dist/cli/commands/gate.js.map +1 -0
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +4 -0
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +23 -6
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pr.d.ts +49 -0
- package/dist/cli/commands/pr.d.ts.map +1 -0
- package/dist/cli/commands/pr.js +214 -0
- package/dist/cli/commands/pr.js.map +1 -0
- package/dist/cli/commands/review-state.d.ts +1 -2
- package/dist/cli/commands/review-state.d.ts.map +1 -1
- package/dist/cli/commands/review-state.js +71 -25
- package/dist/cli/commands/review-state.js.map +1 -1
- package/dist/cli/commands/roadmap.d.ts.map +1 -1
- package/dist/cli/commands/roadmap.js +31 -4
- package/dist/cli/commands/roadmap.js.map +1 -1
- package/dist/cli/commands/sprint-plan.d.ts +21 -0
- package/dist/cli/commands/sprint-plan.d.ts.map +1 -0
- package/dist/cli/commands/sprint-plan.js +226 -0
- package/dist/cli/commands/sprint-plan.js.map +1 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +137 -0
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/ticket.d.ts +9 -0
- package/dist/cli/commands/ticket.d.ts.map +1 -0
- package/dist/cli/commands/ticket.js +168 -0
- package/dist/cli/commands/ticket.js.map +1 -0
- package/dist/cli/commands/version.d.ts.map +1 -1
- package/dist/cli/commands/version.js +33 -4
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/commands/vision.d.ts.map +1 -1
- package/dist/cli/commands/vision.js +14 -1
- package/dist/cli/commands/vision.js.map +1 -1
- package/dist/cli/guards/branch-before-commit.d.ts.map +1 -1
- package/dist/cli/guards/branch-before-commit.js +2 -1
- package/dist/cli/guards/branch-before-commit.js.map +1 -1
- package/dist/cli/guards/next-action.d.ts.map +1 -1
- package/dist/cli/guards/next-action.js +3 -2
- package/dist/cli/guards/next-action.js.map +1 -1
- package/dist/cli/guards/post-hole-enforcement.d.ts +18 -0
- package/dist/cli/guards/post-hole-enforcement.d.ts.map +1 -0
- package/dist/cli/guards/post-hole-enforcement.js +100 -0
- package/dist/cli/guards/post-hole-enforcement.js.map +1 -0
- package/dist/cli/guards/pr-review.d.ts +16 -1
- package/dist/cli/guards/pr-review.d.ts.map +1 -1
- package/dist/cli/guards/pr-review.js +87 -5
- package/dist/cli/guards/pr-review.js.map +1 -1
- package/dist/cli/guards/roadmap-edit-shipped.d.ts +12 -0
- package/dist/cli/guards/roadmap-edit-shipped.d.ts.map +1 -0
- package/dist/cli/guards/roadmap-edit-shipped.js +155 -0
- package/dist/cli/guards/roadmap-edit-shipped.js.map +1 -0
- package/dist/cli/index.js +40 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/registry.d.ts +1 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +57 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/core/analyzers/git.d.ts +14 -0
- package/dist/core/analyzers/git.d.ts.map +1 -1
- package/dist/core/analyzers/git.js +47 -0
- package/dist/core/analyzers/git.js.map +1 -1
- package/dist/core/formatter.d.ts.map +1 -1
- package/dist/core/formatter.js +51 -2
- package/dist/core/formatter.js.map +1 -1
- package/dist/core/guard.d.ts +1 -1
- package/dist/core/guard.d.ts.map +1 -1
- package/dist/core/guard.js +16 -0
- package/dist/core/guard.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/json-memory-backend.d.ts +23 -0
- package/dist/core/json-memory-backend.d.ts.map +1 -0
- package/dist/core/json-memory-backend.js +98 -0
- package/dist/core/json-memory-backend.js.map +1 -0
- package/dist/core/memory-backend.d.ts +30 -0
- package/dist/core/memory-backend.d.ts.map +1 -0
- package/dist/core/memory-backend.js +14 -0
- package/dist/core/memory-backend.js.map +1 -0
- package/dist/core/memory-types.d.ts +25 -0
- package/dist/core/memory-types.d.ts.map +1 -0
- package/dist/core/memory-types.js +4 -0
- package/dist/core/memory-types.js.map +1 -0
- package/dist/core/memory-validation.d.ts +4 -0
- package/dist/core/memory-validation.d.ts.map +1 -0
- package/dist/core/memory-validation.js +35 -0
- package/dist/core/memory-validation.js.map +1 -0
- package/dist/core/memory.d.ts +21 -37
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +97 -147
- package/dist/core/memory.js.map +1 -1
- package/dist/core/pi-settings.d.ts.map +1 -1
- package/dist/core/pi-settings.js +8 -0
- package/dist/core/pi-settings.js.map +1 -1
- package/dist/core/roadmap.d.ts +16 -2
- package/dist/core/roadmap.d.ts.map +1 -1
- package/dist/core/roadmap.js +81 -24
- package/dist/core/roadmap.js.map +1 -1
- package/dist/core/vision.d.ts +10 -0
- package/dist/core/vision.d.ts.map +1 -1
- package/dist/core/vision.js +68 -1
- package/dist/core/vision.js.map +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +18 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/sqlite-memory-backend.d.ts +43 -0
- package/dist/store/sqlite-memory-backend.d.ts.map +1 -0
- package/dist/store/sqlite-memory-backend.js +181 -0
- package/dist/store/sqlite-memory-backend.js.map +1 -0
- package/dist/store-pg/index.d.ts.map +1 -1
- package/dist/store-pg/index.js +23 -0
- package/dist/store-pg/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/pi-extension/dist/index.d.ts +19 -0
- package/packages/pi-extension/dist/index.js +339 -15
package/dist/core/index.js
CHANGED
|
@@ -25,7 +25,8 @@ export { checkStoreHealth } from './store-health.js';
|
|
|
25
25
|
// Tournament Review
|
|
26
26
|
export { buildTournamentReview, formatTournamentReview, } from './tournament.js';
|
|
27
27
|
// Roadmap
|
|
28
|
-
export { validateRoadmap, computeCriticalPath, findParallelOpportunities, parseRoadmap, formatRoadmapSummary, formatStrategicContext, } from './roadmap.js';
|
|
28
|
+
export { validateRoadmap, computeCriticalPath, findParallelOpportunities, parseRoadmap, castRoadmapStructure, formatRoadmapSummary, formatStrategicContext, findNextPlannedSprint, } from './roadmap.js';
|
|
29
|
+
export { extractSprintReferences, findShippedSprintsOnMain } from './analyzers/git.js';
|
|
29
30
|
export { loadConfig, createConfig, saveConfig, resolveConfigPath } from './config.js';
|
|
30
31
|
// Test Plan
|
|
31
32
|
export { parseTestPlan, getTestPlanSummary, getAreasNeedingTest } from './test-plan.js';
|
|
@@ -112,7 +113,7 @@ export { generateFirstSprint } from './generators/first-sprint.js';
|
|
|
112
113
|
export { generateCommonIssues } from './generators/common-issues.js';
|
|
113
114
|
export { generateRoadmap, generateRoadmapFromVision } from './generators/roadmap.js';
|
|
114
115
|
// Vision
|
|
115
|
-
export { loadVision, saveVision, validateVision, createVision, updateVision } from './vision.js';
|
|
116
|
+
export { loadVision, saveVision, validateVision, createVision, updateVision, renderVisionMarkdown, writeVisionMarkdown } from './vision.js';
|
|
116
117
|
// Transcript
|
|
117
118
|
export { getTranscriptPath, appendTurn, readTranscript, listTranscripts, } from './transcript.js';
|
|
118
119
|
// Initiative (Multi-Sprint Orchestration)
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,6BAA6B;AAmD7B,YAAY;AACZ,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,WAAW;AACX,OAAO,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,UAAU;AACV,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,aAAa;AACb,OAAO,EACL,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAOzB,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,UAAU;AACV,OAAO,EACL,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAOtB,YAAY;AACZ,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAQxB,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC;AAUvB,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,QAAQ;AACR,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AASzB,UAAU;AACV,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonMemoryBackend — file-backed implementation (legacy default).
|
|
3
|
+
*
|
|
4
|
+
* Wraps the original `.slope/memories.json` behavior in the MemoryBackend
|
|
5
|
+
* interface so callers can swap to a store-backed adapter without changing
|
|
6
|
+
* the memory.ts public API. Preserves atomic writes (temp + rename) and
|
|
7
|
+
* v0 → v1 migration.
|
|
8
|
+
*/
|
|
9
|
+
import type { MemoryBackend } from './memory-backend.js';
|
|
10
|
+
import type { Memory, MemoriesFile } from './memory-types.js';
|
|
11
|
+
export declare class JsonMemoryBackend implements MemoryBackend {
|
|
12
|
+
readonly kind: "json";
|
|
13
|
+
private path;
|
|
14
|
+
private cwd;
|
|
15
|
+
constructor(cwd: string);
|
|
16
|
+
load(): MemoriesFile;
|
|
17
|
+
saveAll(data: MemoriesFile): void;
|
|
18
|
+
add(memory: Memory): void;
|
|
19
|
+
remove(id: string): boolean;
|
|
20
|
+
update(id: string, fields: Partial<Pick<Memory, 'text' | 'category' | 'weight' | 'updatedAt'>>): Memory | null;
|
|
21
|
+
getById(id: string): Memory | undefined;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=json-memory-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-memory-backend.d.ts","sourceRoot":"","sources":["../../src/core/json-memory-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAM9D,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAKvB,IAAI,IAAI,YAAY;IAiCpB,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAOjC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS3B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;IAa9G,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGxC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonMemoryBackend — file-backed implementation (legacy default).
|
|
3
|
+
*
|
|
4
|
+
* Wraps the original `.slope/memories.json` behavior in the MemoryBackend
|
|
5
|
+
* interface so callers can swap to a store-backed adapter without changing
|
|
6
|
+
* the memory.ts public API. Preserves atomic writes (temp + rename) and
|
|
7
|
+
* v0 → v1 migration.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync, writeFileSync, renameSync, copyFileSync, mkdirSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { validateMemoryRow } from './memory-validation.js';
|
|
12
|
+
const MEMORIES_FILE = 'memories.json';
|
|
13
|
+
const CURRENT_VERSION = 1;
|
|
14
|
+
export class JsonMemoryBackend {
|
|
15
|
+
kind = 'json';
|
|
16
|
+
path;
|
|
17
|
+
cwd;
|
|
18
|
+
constructor(cwd) {
|
|
19
|
+
this.cwd = cwd;
|
|
20
|
+
this.path = join(cwd, '.slope', MEMORIES_FILE);
|
|
21
|
+
}
|
|
22
|
+
load() {
|
|
23
|
+
if (!existsSync(this.path)) {
|
|
24
|
+
return { version: CURRENT_VERSION, memories: [] };
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const raw = JSON.parse(readFileSync(this.path, 'utf8'));
|
|
28
|
+
if (raw && typeof raw === 'object' && 'version' in raw) {
|
|
29
|
+
const version = Number(raw.version);
|
|
30
|
+
if (version === 1) {
|
|
31
|
+
const memories = Array.isArray(raw.memories) ? raw.memories.map(validateMemoryRow) : [];
|
|
32
|
+
return { version: CURRENT_VERSION, memories };
|
|
33
|
+
}
|
|
34
|
+
// Unknown future version — back up before returning empty
|
|
35
|
+
const backupPath = `${this.path}.v${version}.bak`;
|
|
36
|
+
try {
|
|
37
|
+
copyFileSync(this.path, backupPath);
|
|
38
|
+
console.error(`SLOPE memory: unknown memories.json version=${version}; backed up to ${backupPath} and starting fresh.`);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
console.error(`SLOPE memory: unknown memories.json version=${version}; backup failed (${err.message}). Starting fresh.`);
|
|
42
|
+
}
|
|
43
|
+
return { version: CURRENT_VERSION, memories: [] };
|
|
44
|
+
}
|
|
45
|
+
// No version field — try v0 migration (plain array)
|
|
46
|
+
if (Array.isArray(raw)) {
|
|
47
|
+
return { version: CURRENT_VERSION, memories: raw.map(validateMemoryRow) };
|
|
48
|
+
}
|
|
49
|
+
return { version: CURRENT_VERSION, memories: [] };
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error(`SLOPE memory: failed to parse ${this.path} (${err.message}). Treating as empty.`);
|
|
53
|
+
return { version: CURRENT_VERSION, memories: [] };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
saveAll(data) {
|
|
57
|
+
mkdirSync(join(this.cwd, '.slope'), { recursive: true });
|
|
58
|
+
const tmp = `${this.path}.tmp.${process.pid}`;
|
|
59
|
+
writeFileSync(tmp, JSON.stringify(data, null, 2) + '\n');
|
|
60
|
+
renameSync(tmp, this.path);
|
|
61
|
+
}
|
|
62
|
+
add(memory) {
|
|
63
|
+
const data = this.load();
|
|
64
|
+
data.memories.push(memory);
|
|
65
|
+
this.saveAll(data);
|
|
66
|
+
}
|
|
67
|
+
remove(id) {
|
|
68
|
+
const data = this.load();
|
|
69
|
+
const idx = data.memories.findIndex(m => m.id === id);
|
|
70
|
+
if (idx === -1)
|
|
71
|
+
return false;
|
|
72
|
+
data.memories.splice(idx, 1);
|
|
73
|
+
this.saveAll(data);
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
update(id, fields) {
|
|
77
|
+
const data = this.load();
|
|
78
|
+
const mem = data.memories.find(m => m.id === id);
|
|
79
|
+
if (!mem)
|
|
80
|
+
return null;
|
|
81
|
+
if (fields.text !== undefined)
|
|
82
|
+
mem.text = fields.text;
|
|
83
|
+
if (fields.category !== undefined)
|
|
84
|
+
mem.category = fields.category;
|
|
85
|
+
if (fields.weight !== undefined)
|
|
86
|
+
mem.weight = Math.max(1, Math.min(10, fields.weight));
|
|
87
|
+
if (fields.updatedAt !== undefined)
|
|
88
|
+
mem.updatedAt = fields.updatedAt;
|
|
89
|
+
else
|
|
90
|
+
mem.updatedAt = new Date().toISOString();
|
|
91
|
+
this.saveAll(data);
|
|
92
|
+
return mem;
|
|
93
|
+
}
|
|
94
|
+
getById(id) {
|
|
95
|
+
return this.load().memories.find(m => m.id === id);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=json-memory-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-memory-backend.js","sourceRoot":"","sources":["../../src/core/json-memory-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryStore — pluggable backend for cross-session memory persistence.
|
|
3
|
+
*
|
|
4
|
+
* Resolves the architect finding from PR #293 (GH #294): the memory module
|
|
5
|
+
* was writing directly to `.slope/memories.json` via node:fs, bypassing the
|
|
6
|
+
* store-sqlite/store-pg abstraction that already handles sessions, claims,
|
|
7
|
+
* scorecards, and common-issues.
|
|
8
|
+
*
|
|
9
|
+
* The interface is sync to preserve the existing memory.ts public API
|
|
10
|
+
* (addMemory/searchMemories etc.) without forcing a synchronous-to-async
|
|
11
|
+
* migration of every call site (auto-memory hooks, CLI, briefing).
|
|
12
|
+
*/
|
|
13
|
+
import type { Memory, MemoriesFile } from './memory-types.js';
|
|
14
|
+
export interface MemoryBackend {
|
|
15
|
+
/** Read all memories. */
|
|
16
|
+
load(): MemoriesFile;
|
|
17
|
+
/** Replace all memories with the given file (used for import/migration). */
|
|
18
|
+
saveAll(data: MemoriesFile): void;
|
|
19
|
+
/** Insert a new memory. */
|
|
20
|
+
add(memory: Memory): void;
|
|
21
|
+
/** Remove by id. Returns true if removed, false if not found. */
|
|
22
|
+
remove(id: string): boolean;
|
|
23
|
+
/** Patch the memory in place; returns the updated row, or null if not found. */
|
|
24
|
+
update(id: string, fields: Partial<Pick<Memory, 'text' | 'category' | 'weight' | 'updatedAt'>>): Memory | null;
|
|
25
|
+
/** Lookup by id. */
|
|
26
|
+
getById(id: string): Memory | undefined;
|
|
27
|
+
/** Identify the backend (for diagnostics). */
|
|
28
|
+
readonly kind: 'json' | 'sqlite' | 'pg';
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=memory-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-backend.d.ts","sourceRoot":"","sources":["../../src/core/memory-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,IAAI,IAAI,YAAY,CAAC;IAErB,4EAA4E;IAC5E,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAElC,2BAA2B;IAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,iEAAiE;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5B,gFAAgF;IAChF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IAE/G,oBAAoB;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAExC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;CACzC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryStore — pluggable backend for cross-session memory persistence.
|
|
3
|
+
*
|
|
4
|
+
* Resolves the architect finding from PR #293 (GH #294): the memory module
|
|
5
|
+
* was writing directly to `.slope/memories.json` via node:fs, bypassing the
|
|
6
|
+
* store-sqlite/store-pg abstraction that already handles sessions, claims,
|
|
7
|
+
* scorecards, and common-issues.
|
|
8
|
+
*
|
|
9
|
+
* The interface is sync to preserve the existing memory.ts public API
|
|
10
|
+
* (addMemory/searchMemories etc.) without forcing a synchronous-to-async
|
|
11
|
+
* migration of every call site (auto-memory hooks, CLI, briefing).
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=memory-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-backend.js","sourceRoot":"","sources":["../../src/core/memory-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type MemoryCategory = 'workflow' | 'style' | 'project' | 'hazard' | 'other';
|
|
2
|
+
export type MemorySource = 'manual' | 'auto-guard' | 'auto-workflow';
|
|
3
|
+
export interface Memory {
|
|
4
|
+
id: string;
|
|
5
|
+
text: string;
|
|
6
|
+
category: MemoryCategory;
|
|
7
|
+
weight: number;
|
|
8
|
+
source: MemorySource;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
updatedAt: string;
|
|
11
|
+
/** Optional session that produced this memory (auto-* sources). */
|
|
12
|
+
sourceSessionId?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface MemoriesFile {
|
|
15
|
+
version: number;
|
|
16
|
+
memories: Memory[];
|
|
17
|
+
}
|
|
18
|
+
export interface MemorySearchOptions {
|
|
19
|
+
query?: string;
|
|
20
|
+
category?: MemoryCategory;
|
|
21
|
+
source?: MemorySource;
|
|
22
|
+
limit?: number;
|
|
23
|
+
minWeight?: number;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=memory-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-types.d.ts","sourceRoot":"","sources":["../../src/core/memory-types.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AACnF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,eAAe,CAAC;AAErE,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-types.js","sourceRoot":"","sources":["../../src/core/memory-types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,iDAAiD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-validation.d.ts","sourceRoot":"","sources":["../../src/core/memory-validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAgC,MAAM,mBAAmB,CAAC;AAS9E,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA0BxD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Shared validation for Memory rows — extracted so JsonMemoryBackend and
|
|
2
|
+
// SqliteMemoryBackend (in src/store/) can both import without circulars.
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
const VALID_CATEGORIES = ['workflow', 'style', 'project', 'hazard', 'other'];
|
|
5
|
+
const VALID_SOURCES = ['manual', 'auto-guard', 'auto-workflow'];
|
|
6
|
+
function nowISO() {
|
|
7
|
+
return new Date().toISOString();
|
|
8
|
+
}
|
|
9
|
+
/** Validate and normalize a Memory row. Throws TypeError on invalid category/source. */
|
|
10
|
+
export function validateMemoryRow(input) {
|
|
11
|
+
if (!input || typeof input !== 'object') {
|
|
12
|
+
throw new TypeError('Memory must be an object');
|
|
13
|
+
}
|
|
14
|
+
const m = input;
|
|
15
|
+
const category = m.category ?? 'other';
|
|
16
|
+
const source = m.source ?? 'manual';
|
|
17
|
+
if (!VALID_CATEGORIES.includes(category)) {
|
|
18
|
+
throw new TypeError(`Invalid memory category: ${category}`);
|
|
19
|
+
}
|
|
20
|
+
if (!VALID_SOURCES.includes(source)) {
|
|
21
|
+
throw new TypeError(`Invalid memory source: ${source}`);
|
|
22
|
+
}
|
|
23
|
+
const weight = typeof m.weight === 'number' ? m.weight : 5;
|
|
24
|
+
return {
|
|
25
|
+
id: typeof m.id === 'string' ? m.id : randomUUID(),
|
|
26
|
+
text: typeof m.text === 'string' ? m.text : '',
|
|
27
|
+
category,
|
|
28
|
+
weight: Math.max(1, Math.min(10, weight)),
|
|
29
|
+
source,
|
|
30
|
+
createdAt: typeof m.createdAt === 'string' ? m.createdAt : nowISO(),
|
|
31
|
+
updatedAt: typeof m.updatedAt === 'string' ? m.updatedAt : nowISO(),
|
|
32
|
+
...(typeof m.sourceSessionId === 'string' ? { sourceSessionId: m.sourceSessionId } : {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=memory-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-validation.js","sourceRoot":"","sources":["../../src/core/memory-validation.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,gBAAgB,GAAqB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC/F,MAAM,aAAa,GAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AAEhF,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,QAAQ,GAAI,CAAC,CAAC,QAA2B,IAAI,OAAO,CAAC;IAC3D,MAAM,MAAM,GAAI,CAAC,CAAC,MAAuB,IAAI,QAAQ,CAAC;IAEtD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE;QAClD,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC9C,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE;QACnE,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE;QACnE,GAAG,CAAC,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzF,CAAC;AACJ,CAAC"}
|
package/dist/core/memory.d.ts
CHANGED
|
@@ -1,47 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cross-session memory storage
|
|
3
|
-
*
|
|
2
|
+
* Cross-session memory storage — public API.
|
|
3
|
+
*
|
|
4
|
+
* As of S90 (GH #294), persistence routes through a MemoryBackend so the
|
|
5
|
+
* memory module no longer writes JSON directly. Behavior:
|
|
6
|
+
*
|
|
7
|
+
* - If `.slope/slope.db` exists, SqliteMemoryBackend is used. On first
|
|
8
|
+
* open it imports any existing `.slope/memories.json` into the store
|
|
9
|
+
* and renames the JSON to `.bak` (one-time migration).
|
|
10
|
+
* - Otherwise JsonMemoryBackend is used (legacy default for repos that
|
|
11
|
+
* haven't initialized the SQLite store).
|
|
12
|
+
*
|
|
13
|
+
* Public API signatures are unchanged — callers (auto-memory hooks, the
|
|
14
|
+
* memory CLI command, briefing) keep working without `await`.
|
|
4
15
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
text: string;
|
|
10
|
-
category: MemoryCategory;
|
|
11
|
-
weight: number;
|
|
12
|
-
source: MemorySource;
|
|
13
|
-
createdAt: string;
|
|
14
|
-
updatedAt: string;
|
|
15
|
-
/** Optional session that produced this memory (auto-* sources). */
|
|
16
|
-
sourceSessionId?: string;
|
|
17
|
-
}
|
|
16
|
+
import type { MemoryBackend } from './memory-backend.js';
|
|
17
|
+
import type { Memory, MemoriesFile, MemoryCategory, MemorySource, MemorySearchOptions } from './memory-types.js';
|
|
18
|
+
export type { Memory, MemoriesFile, MemoryCategory, MemorySource, MemorySearchOptions } from './memory-types.js';
|
|
19
|
+
export { validateMemoryRow as validateMemory } from './memory-validation.js';
|
|
18
20
|
export declare function detectSecret(text: string): string | null;
|
|
19
|
-
export interface MemoriesFile {
|
|
20
|
-
version: number;
|
|
21
|
-
memories: Memory[];
|
|
22
|
-
}
|
|
23
|
-
export interface MemorySearchOptions {
|
|
24
|
-
query?: string;
|
|
25
|
-
category?: MemoryCategory;
|
|
26
|
-
source?: MemorySource;
|
|
27
|
-
limit?: number;
|
|
28
|
-
minWeight?: number;
|
|
29
|
-
}
|
|
30
|
-
declare function validateMemory(m: unknown): Memory;
|
|
31
|
-
/** Public for callers that want to validate before pushing (e.g. import). */
|
|
32
|
-
export { validateMemory };
|
|
33
|
-
export declare function loadMemories(cwd: string): MemoriesFile;
|
|
34
|
-
/**
|
|
35
|
-
* Atomic write: write to temp file then rename. Reduces (but doesn't eliminate)
|
|
36
|
-
* the multi-agent last-write-wins window — concurrent writers each load,
|
|
37
|
-
* mutate, and write, so the loser's changes can still be lost. A future
|
|
38
|
-
* follow-up should layer this on the store interface with proper locking.
|
|
39
|
-
*/
|
|
40
|
-
export declare function saveMemories(cwd: string, data: MemoriesFile): void;
|
|
41
21
|
export declare class SecretDetectedError extends Error {
|
|
42
22
|
pattern: string;
|
|
43
23
|
constructor(pattern: string);
|
|
44
24
|
}
|
|
25
|
+
export declare function clearMemoryBackendCache(): void;
|
|
26
|
+
export declare function getMemoryBackend(cwd: string): MemoryBackend;
|
|
27
|
+
export declare function loadMemories(cwd: string): MemoriesFile;
|
|
28
|
+
export declare function saveMemories(cwd: string, data: MemoriesFile): void;
|
|
45
29
|
export declare function addMemory(cwd: string, text: string, options?: {
|
|
46
30
|
category?: MemoryCategory;
|
|
47
31
|
weight?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGjH,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGjH,OAAO,EAAE,iBAAiB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAY7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKxD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACzB,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAInC;AAkBD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAkC3D;AAQD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAEtD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAElE;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,MAAM,CAkBR;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,GAC7D,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,MAAM,EAAE,CAyBV;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzE"}
|