@slicenfer/project-memory-runtime-core 0.3.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.
Files changed (61) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +12 -0
  3. package/dist/activation/engine.d.ts +27 -0
  4. package/dist/activation/engine.d.ts.map +1 -0
  5. package/dist/activation/engine.js +294 -0
  6. package/dist/activation/engine.js.map +1 -0
  7. package/dist/checkpoints.d.ts +12 -0
  8. package/dist/checkpoints.d.ts.map +1 -0
  9. package/dist/checkpoints.js +94 -0
  10. package/dist/checkpoints.js.map +1 -0
  11. package/dist/compiler/deterministic.d.ts +7 -0
  12. package/dist/compiler/deterministic.d.ts.map +1 -0
  13. package/dist/compiler/deterministic.js +385 -0
  14. package/dist/compiler/deterministic.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +4 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/ingestion/service.d.ts +7 -0
  20. package/dist/ingestion/service.d.ts.map +1 -0
  21. package/dist/ingestion/service.js +5 -0
  22. package/dist/ingestion/service.js.map +1 -0
  23. package/dist/recall/packet.d.ts +13 -0
  24. package/dist/recall/packet.d.ts.map +1 -0
  25. package/dist/recall/packet.js +155 -0
  26. package/dist/recall/packet.js.map +1 -0
  27. package/dist/runtime.d.ts +53 -0
  28. package/dist/runtime.d.ts.map +1 -0
  29. package/dist/runtime.js +708 -0
  30. package/dist/runtime.js.map +1 -0
  31. package/dist/scope.d.ts +6 -0
  32. package/dist/scope.d.ts.map +1 -0
  33. package/dist/scope.js +50 -0
  34. package/dist/scope.js.map +1 -0
  35. package/dist/storage/migrations/001_init.sql +113 -0
  36. package/dist/storage/migrations/002_constraints.sql +148 -0
  37. package/dist/storage/migrations/003_event_provenance.sql +36 -0
  38. package/dist/storage/migrations/004_event_capture_path.sql +37 -0
  39. package/dist/storage/migrations/005_activation_indices.sql +15 -0
  40. package/dist/storage/migrations/006_session_checkpoints.sql +54 -0
  41. package/dist/storage/migrations.d.ts +6 -0
  42. package/dist/storage/migrations.d.ts.map +1 -0
  43. package/dist/storage/migrations.js +19 -0
  44. package/dist/storage/migrations.js.map +1 -0
  45. package/dist/storage/sqlite.d.ts +36 -0
  46. package/dist/storage/sqlite.d.ts.map +1 -0
  47. package/dist/storage/sqlite.js +601 -0
  48. package/dist/storage/sqlite.js.map +1 -0
  49. package/dist/types.d.ts +294 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +36 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/utils.d.ts +16 -0
  54. package/dist/utils.d.ts.map +1 -0
  55. package/dist/utils.js +36 -0
  56. package/dist/utils.js.map +1 -0
  57. package/dist/validation.d.ts +24 -0
  58. package/dist/validation.d.ts.map +1 -0
  59. package/dist/validation.js +323 -0
  60. package/dist/validation.js.map +1 -0
  61. package/package.json +52 -0
@@ -0,0 +1,323 @@
1
+ import { SESSION_CHECKPOINT_STATUSES, SESSION_CHECKPOINT_SOURCES, STABLE_OUTCOME_TYPES, } from "./types.js";
2
+ const CLAIM_TYPES = new Set(["fact", "decision", "thread"]);
3
+ const ASSERTION_KINDS = new Set([
4
+ "fact",
5
+ "hypothesis",
6
+ "instruction",
7
+ "preference",
8
+ "todo",
9
+ "outcome",
10
+ ]);
11
+ const CARDINALITIES = new Set(["singleton", "set"]);
12
+ const VERIFICATION_STATUSES = new Set([
13
+ "unverified",
14
+ "inferred",
15
+ "user_confirmed",
16
+ "system_verified",
17
+ "outcome_verified",
18
+ "disputed",
19
+ ]);
20
+ const CLAIM_STATUSES = new Set(["active", "stale", "superseded", "archived"]);
21
+ const THREAD_STATUSES = new Set(["open", "resolved", "blocked"]);
22
+ const OUTCOME_TYPES = new Set(STABLE_OUTCOME_TYPES);
23
+ const SESSION_CHECKPOINT_STATUS_VALUES = new Set(SESSION_CHECKPOINT_STATUSES);
24
+ const SESSION_CHECKPOINT_SOURCE_VALUES = new Set(SESSION_CHECKPOINT_SOURCES);
25
+ const EVENT_TYPES = new Set([
26
+ "user_message",
27
+ "agent_message",
28
+ "file_edit",
29
+ "command_result",
30
+ "test_result",
31
+ "build_result",
32
+ "lint_result",
33
+ "benchmark_result",
34
+ "deploy_result",
35
+ "git_commit",
36
+ "git_revert",
37
+ "pr_opened",
38
+ "pr_merged",
39
+ "pr_closed",
40
+ "issue_link",
41
+ "issue_closed",
42
+ "issue_reopened",
43
+ "human_edit_after_agent",
44
+ "manual_override",
45
+ "session_start",
46
+ "session_end",
47
+ "user_confirmation",
48
+ ]);
49
+ const EVENT_SOURCE_KINDS = new Set(["user", "agent", "system", "operator", "imported"]);
50
+ const EVENT_TRUST_LEVELS = new Set(["low", "medium", "high"]);
51
+ const EVENT_CAPTURE_PATHS = new Set([
52
+ "fixture.user_confirmation",
53
+ "fixture.user_message",
54
+ "claude_code.hook.user_confirmation",
55
+ "claude_code.hook.user_message",
56
+ "import.transcript",
57
+ "system.tool_observation",
58
+ "operator.manual",
59
+ ]);
60
+ const ALLOWED_STATUS_TRANSITIONS = {
61
+ active: new Set(["stale", "superseded", "archived"]),
62
+ stale: new Set(["active", "superseded", "archived"]),
63
+ superseded: new Set(["archived"]),
64
+ archived: new Set(["active"]),
65
+ };
66
+ const CAPTURE_PATH_RULES = {
67
+ "fixture.user_confirmation": {
68
+ sourceKind: "user",
69
+ trustLevel: "high",
70
+ eventTypes: ["user_confirmation"],
71
+ },
72
+ "fixture.user_message": {
73
+ sourceKind: "user",
74
+ trustLevel: "medium",
75
+ eventTypes: ["user_message"],
76
+ },
77
+ "claude_code.hook.user_confirmation": {
78
+ sourceKind: "user",
79
+ trustLevel: "high",
80
+ eventTypes: ["user_confirmation"],
81
+ },
82
+ "claude_code.hook.user_message": {
83
+ sourceKind: "user",
84
+ trustLevel: "medium",
85
+ eventTypes: ["user_message"],
86
+ },
87
+ "import.transcript": {
88
+ sourceKind: "imported",
89
+ trustLevel: "low",
90
+ eventTypes: ["user_message", "agent_message", "user_confirmation", "session_start", "session_end"],
91
+ },
92
+ "system.tool_observation": {
93
+ sourceKind: "system",
94
+ trustLevel: "high",
95
+ eventTypes: [
96
+ "file_edit",
97
+ "command_result",
98
+ "test_result",
99
+ "build_result",
100
+ "lint_result",
101
+ "benchmark_result",
102
+ "deploy_result",
103
+ "git_commit",
104
+ "git_revert",
105
+ "issue_link",
106
+ "issue_closed",
107
+ "issue_reopened",
108
+ ],
109
+ },
110
+ "operator.manual": {
111
+ sourceKind: "operator",
112
+ trustLevel: "high",
113
+ eventTypes: ["user_confirmation", "manual_override", "human_edit_after_agent"],
114
+ },
115
+ };
116
+ const TRUSTED_USER_CONFIRMATION_CAPTURE_PATHS = new Set([
117
+ "fixture.user_confirmation",
118
+ "claude_code.hook.user_confirmation",
119
+ "operator.manual",
120
+ ]);
121
+ const TRUSTED_USER_MESSAGE_CAPTURE_PATHS = new Set([
122
+ "fixture.user_message",
123
+ "claude_code.hook.user_message",
124
+ ]);
125
+ const TRUSTED_NEGATIVE_LIFECYCLE_CAPTURE_PATHS = new Set([
126
+ "operator.manual",
127
+ ]);
128
+ export const DEFAULT_ALLOWED_CAPTURE_PATHS = [
129
+ "fixture.user_confirmation",
130
+ "fixture.user_message",
131
+ "import.transcript",
132
+ "system.tool_observation",
133
+ "operator.manual",
134
+ ];
135
+ export class RuntimeInvariantError extends Error {
136
+ constructor(message) {
137
+ super(message);
138
+ this.name = "RuntimeInvariantError";
139
+ }
140
+ }
141
+ function assertEnumValue(value, allowed, label) {
142
+ if (!allowed.has(value)) {
143
+ throw new RuntimeInvariantError(`invalid ${label}: ${value}`);
144
+ }
145
+ }
146
+ function assertRange(value, min, max, label) {
147
+ if (Number.isNaN(value) || value < min || value > max) {
148
+ throw new RuntimeInvariantError(`${label} must be between ${min} and ${max}`);
149
+ }
150
+ }
151
+ function eventMemoryHints(event) {
152
+ const hints = event.metadata?.memory_hints;
153
+ return hints && typeof hints === "object" ? hints : undefined;
154
+ }
155
+ export function assertEventType(eventType) {
156
+ assertEnumValue(eventType, EVENT_TYPES, "event_type");
157
+ }
158
+ export function assertCapturePath(capturePath) {
159
+ assertEnumValue(capturePath, EVENT_CAPTURE_PATHS, "capture_path");
160
+ }
161
+ export function assertVerificationStatus(status) {
162
+ assertEnumValue(status, VERIFICATION_STATUSES, "verification_status");
163
+ }
164
+ export function assertOutcomeType(outcomeType) {
165
+ assertEnumValue(outcomeType, OUTCOME_TYPES, "outcome_type");
166
+ }
167
+ export function assertClaimTransitionAllowed(fromStatus, toStatus, reason) {
168
+ if (fromStatus === toStatus)
169
+ return;
170
+ if (!ALLOWED_STATUS_TRANSITIONS[fromStatus]?.has(toStatus)) {
171
+ throw new RuntimeInvariantError(`illegal claim status transition: ${fromStatus} -> ${toStatus} (${reason})`);
172
+ }
173
+ }
174
+ export function validateClaimRecord(claim) {
175
+ assertEnumValue(claim.type, CLAIM_TYPES, "claim.type");
176
+ assertEnumValue(claim.assertion_kind, ASSERTION_KINDS, "claim.assertion_kind");
177
+ assertEnumValue(claim.cardinality, CARDINALITIES, "claim.cardinality");
178
+ assertVerificationStatus(claim.verification_status);
179
+ assertEnumValue(claim.status, CLAIM_STATUSES, "claim.status");
180
+ if (claim.thread_status) {
181
+ assertEnumValue(claim.thread_status, THREAD_STATUSES, "claim.thread_status");
182
+ }
183
+ assertRange(claim.confidence, 0, 1, "claim.confidence");
184
+ assertRange(claim.importance, 0, 1, "claim.importance");
185
+ assertRange(claim.outcome_score, -1, 1, "claim.outcome_score");
186
+ if (!Array.isArray(claim.source_event_ids) || claim.source_event_ids.length === 0) {
187
+ throw new RuntimeInvariantError("claim.source_event_ids must contain at least one event id");
188
+ }
189
+ if (claim.verification_status === "disputed" && claim.status === "active") {
190
+ throw new RuntimeInvariantError("disputed claims must not remain active");
191
+ }
192
+ if (claim.type !== "thread" && claim.thread_status) {
193
+ throw new RuntimeInvariantError("non-thread claims must not set thread_status");
194
+ }
195
+ if (claim.thread_status === "resolved" && claim.status !== "archived") {
196
+ throw new RuntimeInvariantError("resolved threads must be archived");
197
+ }
198
+ if (claim.type !== "thread" && claim.resolved_at) {
199
+ throw new RuntimeInvariantError("non-thread claims must not set resolved_at");
200
+ }
201
+ }
202
+ export function validateOutcomeRecord(outcome) {
203
+ assertOutcomeType(outcome.outcome_type);
204
+ assertRange(outcome.strength, 0, 1, "outcome.strength");
205
+ if (!Array.isArray(outcome.related_event_ids) || outcome.related_event_ids.length === 0) {
206
+ throw new RuntimeInvariantError("outcome.related_event_ids must contain at least one event id");
207
+ }
208
+ }
209
+ export function assertSessionCheckpointStatus(status) {
210
+ assertEnumValue(status, SESSION_CHECKPOINT_STATUS_VALUES, "session_checkpoint.status");
211
+ }
212
+ export function validateSessionCheckpointRecord(checkpoint) {
213
+ assertSessionCheckpointStatus(checkpoint.status);
214
+ assertEnumValue(checkpoint.source, SESSION_CHECKPOINT_SOURCE_VALUES, "session_checkpoint.source");
215
+ if (!checkpoint.project_id) {
216
+ throw new RuntimeInvariantError("session_checkpoint.project_id is required");
217
+ }
218
+ if (!checkpoint.session_id) {
219
+ throw new RuntimeInvariantError("session_checkpoint.session_id is required");
220
+ }
221
+ if (!checkpoint.summary) {
222
+ throw new RuntimeInvariantError("session_checkpoint.summary is required");
223
+ }
224
+ if (!checkpoint.packet_hash) {
225
+ throw new RuntimeInvariantError("session_checkpoint.packet_hash is required");
226
+ }
227
+ if (!Array.isArray(checkpoint.hot_claim_ids)) {
228
+ throw new RuntimeInvariantError("session_checkpoint.hot_claim_ids must be an array");
229
+ }
230
+ if (!Array.isArray(checkpoint.hot_files)) {
231
+ throw new RuntimeInvariantError("session_checkpoint.hot_files must be an array");
232
+ }
233
+ if (!Array.isArray(checkpoint.evidence_refs)) {
234
+ throw new RuntimeInvariantError("session_checkpoint.evidence_refs must be an array");
235
+ }
236
+ if (checkpoint.hot_file_digests &&
237
+ typeof checkpoint.hot_file_digests !== "object") {
238
+ throw new RuntimeInvariantError("session_checkpoint.hot_file_digests must be an object");
239
+ }
240
+ }
241
+ export function validateEventRecord(event) {
242
+ assertEventType(event.event_type);
243
+ if (event.capture_path) {
244
+ assertCapturePath(event.capture_path);
245
+ const rule = CAPTURE_PATH_RULES[event.capture_path];
246
+ if (!rule.eventTypes.includes(event.event_type)) {
247
+ throw new RuntimeInvariantError(`capture_path ${event.capture_path} does not allow event_type ${event.event_type}`);
248
+ }
249
+ if (event.source_kind && event.source_kind !== rule.sourceKind) {
250
+ throw new RuntimeInvariantError(`capture_path ${event.capture_path} requires source_kind=${rule.sourceKind}`);
251
+ }
252
+ if (event.trust_level && event.trust_level !== rule.trustLevel) {
253
+ throw new RuntimeInvariantError(`capture_path ${event.capture_path} requires trust_level=${rule.trustLevel}`);
254
+ }
255
+ }
256
+ if (event.source_kind) {
257
+ assertEnumValue(event.source_kind, EVENT_SOURCE_KINDS, "source_kind");
258
+ }
259
+ if (event.trust_level) {
260
+ assertEnumValue(event.trust_level, EVENT_TRUST_LEVELS, "trust_level");
261
+ }
262
+ if (eventMemoryHints(event)?.family_hint && !event.capture_path) {
263
+ throw new RuntimeInvariantError("family_hint requires capture_path");
264
+ }
265
+ }
266
+ export function assertCapturePathAllowed(capturePath, allowedCapturePaths) {
267
+ if (!allowedCapturePaths.has(capturePath)) {
268
+ throw new RuntimeInvariantError(`capture_path ${capturePath} is not allowed by this runtime instance`);
269
+ }
270
+ }
271
+ export function deriveEventProvenance(event) {
272
+ if (!event.capture_path)
273
+ return event;
274
+ const rule = CAPTURE_PATH_RULES[event.capture_path];
275
+ return {
276
+ ...event,
277
+ source_kind: rule.sourceKind,
278
+ trust_level: rule.trustLevel,
279
+ };
280
+ }
281
+ export function hasTrustedUserConfirmationCapturePath(event) {
282
+ const capturePath = event.capture_path;
283
+ return (event.event_type === "user_confirmation" &&
284
+ capturePath !== undefined &&
285
+ TRUSTED_USER_CONFIRMATION_CAPTURE_PATHS.has(capturePath));
286
+ }
287
+ export function hasTrustedUserMessageCapturePath(event) {
288
+ const capturePath = event.capture_path;
289
+ return (event.event_type === "user_message" &&
290
+ capturePath !== undefined &&
291
+ TRUSTED_USER_MESSAGE_CAPTURE_PATHS.has(capturePath));
292
+ }
293
+ export function hasTrustedNegativeLifecycleCapturePath(event) {
294
+ const capturePath = event.capture_path;
295
+ return ((event.event_type === "manual_override" ||
296
+ event.event_type === "human_edit_after_agent") &&
297
+ capturePath !== undefined &&
298
+ TRUSTED_NEGATIVE_LIFECYCLE_CAPTURE_PATHS.has(capturePath));
299
+ }
300
+ export function isExplicitVerificationStatus(status) {
301
+ return status === "system_verified" || status === "user_confirmed";
302
+ }
303
+ export function familyHintAllowedForEvent(family, event) {
304
+ if (family === "current_strategy" || family === "rejected_strategy") {
305
+ return hasTrustedUserConfirmationCapturePath(event);
306
+ }
307
+ return hasTrustedUserConfirmationCapturePath(event) || hasTrustedUserMessageCapturePath(event);
308
+ }
309
+ export function resolutionRuleSummary(rule) {
310
+ switch (rule.type) {
311
+ case "issue_closed":
312
+ return `issue_closed:${rule.issue_id}`;
313
+ case "pr_merged":
314
+ return `pr_merged:${rule.pr_id}`;
315
+ case "branch_deleted":
316
+ return `branch_deleted:${rule.branch}`;
317
+ case "commit_contains":
318
+ return `commit_contains:${rule.pattern}`;
319
+ case "test_pass":
320
+ return `test_pass:${rule.test_name}`;
321
+ }
322
+ }
323
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@slicenfer/project-memory-runtime-core",
3
+ "version": "0.3.0",
4
+ "description": "Core runtime for Project Memory Runtime — evidence-backed lifecycle memory for AI coding agents",
5
+ "license": "GPL-3.0-only",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/nicepkg/project-memory-runtime.git",
9
+ "directory": "packages/runtime"
10
+ },
11
+ "homepage": "https://github.com/nicepkg/project-memory-runtime",
12
+ "keywords": [
13
+ "ai",
14
+ "memory",
15
+ "runtime",
16
+ "sqlite",
17
+ "evidence",
18
+ "claims",
19
+ "outcomes",
20
+ "lifecycle"
21
+ ],
22
+ "engines": {
23
+ "node": ">=20"
24
+ },
25
+ "type": "module",
26
+ "main": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "import": "./dist/index.js",
31
+ "types": "./dist/index.d.ts"
32
+ }
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "README.md"
37
+ ],
38
+ "dependencies": {
39
+ "better-sqlite3": "^11.10.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/better-sqlite3": "^7.6.11",
43
+ "@types/node": "^22.10.2",
44
+ "typescript": "^5.6.3"
45
+ },
46
+ "scripts": {
47
+ "build": "pnpm exec tsc -p tsconfig.json && node ./scripts/copy-sql-assets.mjs",
48
+ "clean": "rm -rf dist",
49
+ "test": "pnpm run build && node --test tests/runtime-smoke.test.mjs tests/outcome-visualization.test.mjs tests/activation-engine.test.mjs tests/contracts.test.mjs",
50
+ "typecheck": "pnpm exec tsc -p tsconfig.json --noEmit"
51
+ }
52
+ }