@neuralis/brain-core 0.2.1 → 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 (103) hide show
  1. package/README.md +8 -3
  2. package/app/filesystem/api/README.md +1 -1
  3. package/app/filesystem/api/index.ts +24 -24
  4. package/app/filesystem/store/README.md +1 -1
  5. package/app/filesystem/store/filesystemStore.ts +11 -3
  6. package/app/filesystem/store/listSlice.ts +1 -0
  7. package/app/filesystem/ui/FileEditor.tsx +42 -4
  8. package/app/filesystem/ui/GitControlPanel.tsx +0 -1
  9. package/app/filesystem/ui/GitDiffView.tsx +12 -5
  10. package/app/filesystem/ui/GitFileDiff.tsx +15 -9
  11. package/app/filesystem/ui/PendingChangesPanel.tsx +95 -34
  12. package/app/filesystem/ui/README.md +9 -9
  13. package/app/filesystem/ui/SourcesPanel.tsx +1 -3
  14. package/app/filesystem/ui/Toolbar.tsx +5 -4
  15. package/app/filesystem/ui/VectorHealthPanel.tsx +43 -14
  16. package/dist/app/host.js +40 -40
  17. package/dist/src/config/env.d.ts +4 -0
  18. package/dist/src/config/env.d.ts.map +1 -1
  19. package/dist/src/config/env.js +13 -0
  20. package/dist/src/config/env.js.map +1 -1
  21. package/dist/src/connectors/LocalDiskConnector.d.ts +9 -1
  22. package/dist/src/connectors/LocalDiskConnector.d.ts.map +1 -1
  23. package/dist/src/connectors/LocalDiskConnector.js +51 -2
  24. package/dist/src/connectors/LocalDiskConnector.js.map +1 -1
  25. package/dist/src/domain/healthTypes.d.ts +1 -7
  26. package/dist/src/domain/healthTypes.d.ts.map +1 -1
  27. package/dist/src/domain/pendingChange.d.ts +31 -0
  28. package/dist/src/domain/pendingChange.d.ts.map +1 -1
  29. package/dist/src/domain/pendingChange.js.map +1 -1
  30. package/dist/src/routes/health.js +2 -3
  31. package/dist/src/routes/health.js.map +1 -1
  32. package/dist/src/routes/pending.d.ts +7 -7
  33. package/dist/src/routes/pending.d.ts.map +1 -1
  34. package/dist/src/routes/pending.js +21 -21
  35. package/dist/src/routes/pending.js.map +1 -1
  36. package/dist/src/services/FilesystemService.d.ts +13 -61
  37. package/dist/src/services/FilesystemService.d.ts.map +1 -1
  38. package/dist/src/services/FilesystemService.js +47 -189
  39. package/dist/src/services/FilesystemService.js.map +1 -1
  40. package/dist/src/services/FilesystemUiService.d.ts +33 -1
  41. package/dist/src/services/FilesystemUiService.d.ts.map +1 -1
  42. package/dist/src/services/FilesystemUiService.js +50 -1
  43. package/dist/src/services/FilesystemUiService.js.map +1 -1
  44. package/dist/src/store/PendingChangeStore.d.ts +3 -0
  45. package/dist/src/store/PendingChangeStore.d.ts.map +1 -1
  46. package/dist/src/store/PendingChangeStore.js +84 -25
  47. package/dist/src/store/PendingChangeStore.js.map +1 -1
  48. package/dist/src/usecases/orphanedPending.d.ts +2 -2
  49. package/dist/src/usecases/orphanedPending.d.ts.map +1 -1
  50. package/dist/src/usecases/orphanedPending.js +5 -3
  51. package/dist/src/usecases/orphanedPending.js.map +1 -1
  52. package/dist/src/usecases/pendingListing.d.ts +34 -0
  53. package/dist/src/usecases/pendingListing.d.ts.map +1 -0
  54. package/dist/src/usecases/pendingListing.js +244 -0
  55. package/dist/src/usecases/pendingListing.js.map +1 -0
  56. package/dist/src/usecases/vectorMaintenance.d.ts +6 -9
  57. package/dist/src/usecases/vectorMaintenance.d.ts.map +1 -1
  58. package/dist/src/usecases/vectorMaintenance.js +4 -13
  59. package/dist/src/usecases/vectorMaintenance.js.map +1 -1
  60. package/dist/src/vector/InMemoryVectorIndex.d.ts.map +1 -1
  61. package/dist/src/vector/InMemoryVectorIndex.js +30 -9
  62. package/dist/src/vector/InMemoryVectorIndex.js.map +1 -1
  63. package/package.json +26 -4
  64. package/rules/brain-rules.md +1 -1
  65. package/skills/create-package/SKILL.md +3 -3
  66. package/skills/create-package/references/config-and-credentials.md +1 -1
  67. package/skills/create-package/references/runtime-and-build.md +1 -1
  68. package/skills/create-package/references/skills-and-context.md +25 -12
  69. package/skills/create-package/references/test-and-ship.md +9 -16
  70. package/skills/create-package/scripts/verify-loaded.sh +18 -27
  71. package/skills/git/SKILL.md +27 -29
  72. package/skills/manage-files/SKILL.md +37 -32
  73. package/skills/manage-files/scripts/upload.sh +7 -9
  74. package/skills/manage-files/scripts/write.sh +2 -6
  75. package/skills/manage-sources/SKILL.md +93 -95
  76. package/skills/manage-sources/scripts/reembed.sh +2 -6
  77. package/skills/manage-uri-policy/SKILL.md +30 -58
  78. package/skills/git/scripts/git.sh +0 -48
  79. package/skills/manage-files/scripts/approve.sh +0 -9
  80. package/skills/manage-files/scripts/list.sh +0 -9
  81. package/skills/manage-files/scripts/pending.sh +0 -23
  82. package/skills/manage-files/scripts/raw.sh +0 -11
  83. package/skills/manage-files/scripts/read.sh +0 -9
  84. package/skills/manage-files/scripts/search.sh +0 -15
  85. package/skills/manage-sources/scripts/browse.sh +0 -12
  86. package/skills/manage-sources/scripts/cancel.sh +0 -14
  87. package/skills/manage-sources/scripts/create.sh +0 -13
  88. package/skills/manage-sources/scripts/delete.sh +0 -17
  89. package/skills/manage-sources/scripts/discoverable.sh +0 -6
  90. package/skills/manage-sources/scripts/get.sh +0 -7
  91. package/skills/manage-sources/scripts/kind-schema.sh +0 -7
  92. package/skills/manage-sources/scripts/kinds.sh +0 -6
  93. package/skills/manage-sources/scripts/list.sh +0 -6
  94. package/skills/manage-sources/scripts/purge-index.sh +0 -18
  95. package/skills/manage-sources/scripts/reindex.sh +0 -13
  96. package/skills/manage-sources/scripts/reset.sh +0 -11
  97. package/skills/manage-sources/scripts/set-enabled.sh +0 -17
  98. package/skills/manage-sources/scripts/sync-status.sh +0 -14
  99. package/skills/manage-sources/scripts/sync.sh +0 -13
  100. package/skills/manage-sources/scripts/update.sh +0 -18
  101. package/skills/manage-uri-policy/scripts/manifests.sh +0 -20
  102. package/skills/manage-uri-policy/scripts/set-uri.sh +0 -66
  103. package/skills/manage-uri-policy/scripts/show-uri.sh +0 -23
@@ -30,6 +30,7 @@
30
30
  */
31
31
  import type { PendingChangeRecord, PendingPreviewContent } from '../domain/pendingChange.js';
32
32
  export type PendingChangeFilter = {
33
+ uri?: string;
33
34
  userId?: string;
34
35
  agentId?: string;
35
36
  sourceSlug?: string;
@@ -50,6 +51,8 @@ export declare class PendingChangeStore {
50
51
  private readonly projectsRoot;
51
52
  private readonly jsonl;
52
53
  constructor(projectsRoot: string);
54
+ /** A single operation may hold this data snapshot; it contains no permissions. */
55
+ snapshot(projectId: string, uri?: string): Promise<PendingChangeRecord[]>;
53
56
  /** Append a new pending-change record (idempotent at the log level — folding
54
57
  * by `id` collapses duplicates). Cheap; safe to fire-and-forget off the
55
58
  * stream critical path. */
@@ -1 +1 @@
1
- {"version":3,"file":"PendingChangeStore.d.ts","sourceRoot":"","sources":["../../../src/store/PendingChangeStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PendingChangeStore.d.ts","sourceRoot":"","sources":["../../../src/store/PendingChangeStore.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@
30
30
  */
31
31
  import { assertRecordFormat, FORMAT_VERSION_FIELD, JsonlAppender } from '@neuralis/package-system/data';
32
32
  import { child, containedOrThrow, ensureDir, parentOf, resolvePackageDataDir } from '@neuralis/package-system/paths';
33
+ import { getPendingJournalCacheBytes } from '../config/env.js';
33
34
  import { computeContentHash } from '../domain/contentHash.js';
34
35
  import { PENDING_CHANGES_FORMAT } from './dataFormats.js';
35
36
  /** Field-level filter shared by the journal fold AND the dual-source merge in
@@ -37,6 +38,8 @@ import { PENDING_CHANGES_FORMAT } from './dataFormats.js';
37
38
  * the same caller filters. Does NOT enforce the per-record security floor —
38
39
  * that is the service's owner-isolation + uri-policy pass. */
39
40
  export function matchesPendingFilter(rec, filter) {
41
+ if (filter.uri && rec.uri !== filter.uri)
42
+ return false;
40
43
  if (filter.userId && rec.userId !== filter.userId)
41
44
  return false;
42
45
  if (filter.agentId && rec.agentId !== filter.agentId)
@@ -63,9 +66,71 @@ function safeBlobId(id) {
63
66
  export class PendingChangeStore {
64
67
  projectsRoot;
65
68
  jsonl = new JsonlAppender();
69
+ #folds = new Map();
70
+ #refreshes = new Map();
66
71
  constructor(projectsRoot) {
67
72
  this.projectsRoot = projectsRoot;
68
73
  }
74
+ /** Data only: every listing and mutation must run its own fresh authority gates. */
75
+ async #acquire(projectId) {
76
+ const active = this.#refreshes.get(projectId);
77
+ if (active)
78
+ return active;
79
+ const budget = getPendingJournalCacheBytes();
80
+ const refresh = this.#refresh(projectId, budget);
81
+ this.#refreshes.set(projectId, refresh);
82
+ try {
83
+ return await refresh;
84
+ }
85
+ finally {
86
+ if (this.#refreshes.get(projectId) === refresh)
87
+ this.#refreshes.delete(projectId);
88
+ }
89
+ }
90
+ async #refresh(projectId, budget) {
91
+ let fold = this.#folds.get(projectId) ?? { byId: new Map(), byUri: new Map(), bytes: 0, receipt: null };
92
+ this.#folds.delete(projectId);
93
+ let resetApplied = false;
94
+ const delta = await this.jsonl.readDelta(this.#changesPath(projectId), fold.receipt, (rec, reset) => {
95
+ if (reset && !resetApplied) {
96
+ fold = { byId: new Map(), byUri: new Map(), bytes: 0, receipt: null };
97
+ resetApplied = true;
98
+ }
99
+ if (!rec || typeof rec.id !== 'string' || rec.projectId !== projectId)
100
+ return;
101
+ const old = fold.byId.get(rec.id);
102
+ if (old) {
103
+ fold.bytes -= Buffer.byteLength(JSON.stringify(old), 'utf8') + 128;
104
+ fold.byUri.get(old.uri)?.delete(old.id);
105
+ if (!fold.byUri.get(old.uri)?.size)
106
+ fold.byUri.delete(old.uri);
107
+ }
108
+ fold.byId.set(rec.id, rec);
109
+ const ids = fold.byUri.get(rec.uri) ?? new Set();
110
+ ids.add(rec.id);
111
+ fold.byUri.set(rec.uri, ids);
112
+ fold.bytes += Buffer.byteLength(JSON.stringify(rec), 'utf8') + 128;
113
+ });
114
+ if (delta.reset && !resetApplied)
115
+ fold = { byId: new Map(), byUri: new Map(), bytes: 0, receipt: null };
116
+ fold.receipt = delta.receipt;
117
+ let retained = [...this.#folds.values()].reduce((sum, entry) => sum + entry.bytes, 0);
118
+ while (retained + Math.min(fold.bytes, budget) > budget && this.#folds.size) {
119
+ const key = this.#folds.keys().next().value;
120
+ if (key === undefined)
121
+ break;
122
+ retained -= this.#folds.get(key).bytes;
123
+ this.#folds.delete(key);
124
+ }
125
+ if (fold.bytes <= budget)
126
+ this.#folds.set(projectId, fold);
127
+ return fold;
128
+ }
129
+ /** A single operation may hold this data snapshot; it contains no permissions. */
130
+ async snapshot(projectId, uri) {
131
+ const fold = await this.#acquire(projectId);
132
+ return uri ? [...(fold.byUri.get(uri) ?? [])].map((id) => fold.byId.get(id)) : [...fold.byId.values()];
133
+ }
69
134
  #pendingDir(projectId) {
70
135
  return containedOrThrow(resolvePackageDataDir(this.projectsRoot, projectId, 'brain-core'), '_pending', 'pending-change log path');
71
136
  }
@@ -100,20 +165,18 @@ export class PendingChangeStore {
100
165
  * stream critical path. */
101
166
  async record(rec) {
102
167
  await this.jsonl.append(this.#changesPath(rec.projectId), rec);
168
+ if (this.#folds.has(rec.projectId) || this.#refreshes.has(rec.projectId)) {
169
+ await this.#refreshes.get(rec.projectId);
170
+ await this.#acquire(rec.projectId);
171
+ }
103
172
  }
104
173
  /** Fold id → latest record for the project, applying `filter`. Returns only
105
174
  * `pending_review` rows unless `filter.status` overrides. Missing file → []. */
106
175
  async listPending(projectId, filter = {}) {
107
- const all = await this.jsonl.readAll(this.#changesPath(projectId));
108
- const latest = new Map();
109
- for (const rec of all) {
110
- if (!rec || typeof rec.id !== 'string')
111
- continue;
112
- latest.set(rec.id, rec);
113
- }
176
+ const all = await this.snapshot(projectId, filter.uri);
114
177
  const wantStatus = filter.status ?? 'pending_review';
115
178
  const out = [];
116
- for (const rec of latest.values()) {
179
+ for (const rec of all) {
117
180
  if (rec.status !== wantStatus)
118
181
  continue;
119
182
  if (!matchesPendingFilter(rec, filter))
@@ -125,13 +188,7 @@ export class PendingChangeStore {
125
188
  }
126
189
  /** Read the single latest record for an id (any status), or null. */
127
190
  async getLatest(projectId, id) {
128
- const all = await this.jsonl.readAll(this.#changesPath(projectId));
129
- let found = null;
130
- for (const rec of all) {
131
- if (rec?.id === id)
132
- found = rec;
133
- }
134
- return found;
191
+ return (await this.#acquire(projectId)).byId.get(id) ?? null;
135
192
  }
136
193
  async #transition(projectId, id, status, by, nowIso) {
137
194
  const current = await this.getLatest(projectId, id);
@@ -233,16 +290,18 @@ export class PendingChangeStore {
233
290
  * whole compaction (kernel `RecordNewerError`, nothing written); reads and
234
291
  * appends are unaffected. */
235
292
  async compact(projectId) {
236
- const all = await this.jsonl.readAll(this.#changesPath(projectId));
237
- const latest = new Map();
238
- for (const rec of all) {
239
- if (!rec?.id)
240
- continue;
241
- const stored = rec[FORMAT_VERSION_FIELD];
242
- assertRecordFormat(PENDING_CHANGES_FORMAT.kind, typeof stored === 'number' ? stored : undefined, PENDING_CHANGES_FORMAT.version);
243
- latest.set(rec.id, rec);
244
- }
245
- await this.jsonl.compact(this.#changesPath(projectId), [...latest.values()]);
293
+ await this.jsonl.compact(this.#changesPath(projectId), (all) => {
294
+ const latest = new Map();
295
+ for (const rec of all) {
296
+ if (!rec?.id)
297
+ continue;
298
+ const stored = rec[FORMAT_VERSION_FIELD];
299
+ assertRecordFormat(PENDING_CHANGES_FORMAT.kind, typeof stored === 'number' ? stored : undefined, PENDING_CHANGES_FORMAT.version);
300
+ latest.set(rec.id, rec);
301
+ }
302
+ return [...latest.values()];
303
+ });
304
+ this.#folds.delete(projectId);
246
305
  }
247
306
  }
248
307
  //# sourceMappingURL=PendingChangeStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PendingChangeStore.js","sourceRoot":"","sources":["../../../src/store/PendingChangeStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PendingChangeStore.js","sourceRoot":"","sources":["../../../src/store/PendingChangeStore.ts"],"names":[],"mappings":"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"}
@@ -63,7 +63,7 @@ export declare function classifyTargetState(deps: OrphanProbeDeps, projectId: st
63
63
  export declare function baselineUnrecoverable(deps: OrphanProbeDeps, projectId: string, rec: PendingChangeRecord): Promise<boolean>;
64
64
  /** The orphan predicate. A probe failure degrades to NOT orphaned (the safe,
65
65
  * won't-wrongly-discard direction). */
66
- export declare function isOrphanedPending(deps: OrphanProbeDeps, projectId: string, rec: PendingChangeRecord): Promise<boolean>;
66
+ export declare function isOrphanedPending(deps: OrphanProbeDeps, projectId: string, rec: PendingChangeRecord, onUnavailable?: () => void): Promise<boolean>;
67
67
  /**
68
68
  * Which of ALREADY-LISTED records are orphaned, as their ids.
69
69
  *
@@ -74,5 +74,5 @@ export declare function isOrphanedPending(deps: OrphanProbeDeps, projectId: stri
74
74
  * `pendingOrphanProbeConcurrency` probes run at once and each degrades to NOT-orphaned
75
75
  * on failure, so one bad record can never make another look discardable.
76
76
  */
77
- export declare function selectOrphanedPendingIds(deps: OrphanProbeDeps, projectId: string, records: readonly PendingChangeRecord[]): Promise<string[]>;
77
+ export declare function selectOrphanedPendingIds(deps: OrphanProbeDeps, projectId: string, records: readonly PendingChangeRecord[], signal?: AbortSignal, onUnavailable?: () => void): Promise<string[]>;
78
78
  //# sourceMappingURL=orphanedPending.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orphanedPending.d.ts","sourceRoot":"","sources":["../../../src/usecases/orphanedPending.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAMtE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAEjF,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC;8DAC0D;IAC1D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;IAChD,iFAAiF;IACjF,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/F,yFAAyF;IACzF,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5E;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;CAChD,CAAC;AA0BF;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,WAAW,CAAC,CA8CtB;AAED;;iBAEiB;AACjB,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;uCACuC;AACvC,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,mBAAmB,EAAE,GACtC,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB"}
1
+ {"version":3,"file":"orphanedPending.d.ts","sourceRoot":"","sources":["../../../src/usecases/orphanedPending.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAMtE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAEjF,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC;8DAC0D;IAC1D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;IAChD,iFAAiF;IACjF,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/F,yFAAyF;IACzF,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5E;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;CAChD,CAAC;AA0BF;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,WAAW,CAAC,CA8CtB;AAED;;iBAEiB;AACjB,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;uCACuC;AACvC,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,EACxB,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,MAAM,CAAC,EAAE,WAAW,EACpB,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB"}
@@ -130,8 +130,10 @@ export async function baselineUnrecoverable(deps, projectId, rec) {
130
130
  }
131
131
  /** The orphan predicate. A probe failure degrades to NOT orphaned (the safe,
132
132
  * won't-wrongly-discard direction). */
133
- export async function isOrphanedPending(deps, projectId, rec) {
133
+ export async function isOrphanedPending(deps, projectId, rec, onUnavailable) {
134
134
  const state = await classifyTargetState(deps, projectId, rec).catch(() => 'unavailable');
135
+ if (state === 'unavailable')
136
+ onUnavailable?.();
135
137
  const targetUnreadable = state === 'missing' || state === 'unresolvable';
136
138
  if (!targetUnreadable)
137
139
  return false;
@@ -149,9 +151,9 @@ export async function isOrphanedPending(deps, projectId, rec) {
149
151
  * `pendingOrphanProbeConcurrency` probes run at once and each degrades to NOT-orphaned
150
152
  * on failure, so one bad record can never make another look discardable.
151
153
  */
152
- export async function selectOrphanedPendingIds(deps, projectId, records) {
154
+ export async function selectOrphanedPendingIds(deps, projectId, records, signal, onUnavailable) {
153
155
  const concurrency = Math.max(1, Math.floor(getBrainConfigNumber('pendingOrphanProbeConcurrency', undefined, ORPHAN_PROBE_CONCURRENCY)));
154
- const flags = await mapWithConcurrency(records, concurrency, (rec) => isOrphanedPending(deps, projectId, rec).catch(() => false));
156
+ const flags = await mapWithConcurrency(records, concurrency, (rec) => { signal?.throwIfAborted(); return isOrphanedPending(deps, projectId, rec, onUnavailable).catch(() => { onUnavailable?.(); return false; }); });
155
157
  return records.filter((_, i) => flags[i]).map((rec) => rec.id);
156
158
  }
157
159
  //# sourceMappingURL=orphanedPending.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orphanedPending.js","sourceRoot":"","sources":["../../../src/usecases/orphanedPending.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orphanedPending.js","sourceRoot":"","sources":["../../../src/usecases/orphanedPending.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ExecutionContext } from '../domain/ExecutionContext.js';
2
+ import type { FilesystemNode } from '../domain/types.js';
3
+ import { type PendingChangeRecord, type PendingChangePage, type PendingCount, type PendingRepairPage } from '../domain/pendingChange.js';
4
+ import { type PendingChangeFilter, type PendingChangeStore } from '../store/PendingChangeStore.js';
5
+ import type { VectorIndexPort } from '../vector/types.js';
6
+ import { type OrphanProbeDeps } from './orphanedPending.js';
7
+ export type PendingPageFilter = PendingChangeFilter & {
8
+ limit?: number;
9
+ cursor?: string;
10
+ };
11
+ export type PendingListingPorts = {
12
+ store?: PendingChangeStore;
13
+ vector: VectorIndexPort<FilesystemNode>;
14
+ visible(rec: PendingChangeRecord): Promise<boolean>;
15
+ orphan: OrphanProbeDeps;
16
+ discard(id: string): Promise<{
17
+ ok: boolean;
18
+ error?: string;
19
+ discarded?: boolean;
20
+ }>;
21
+ warn(branch: 'journal' | 'vector', error: unknown): void;
22
+ };
23
+ /** Complete current reconstruction before slicing; backend offsets never enter public cursors. */
24
+ export declare function listPendingPage(ports: PendingListingPorts, ctx: ExecutionContext, filter?: PendingPageFilter, options?: {
25
+ orphans?: boolean;
26
+ count?: boolean;
27
+ signal?: AbortSignal;
28
+ }): Promise<PendingChangePage | PendingCount>;
29
+ /** One visible batch, sequential fresh discard gates; a started effect always finishes. */
30
+ export declare function repairPendingPage(ports: PendingListingPorts, ctx: ExecutionContext, filter?: PendingPageFilter, options?: {
31
+ dryRun?: boolean;
32
+ signal?: AbortSignal;
33
+ }): Promise<PendingRepairPage>;
34
+ //# sourceMappingURL=pendingListing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingListing.d.ts","sourceRoot":"","sources":["../../../src/usecases/pendingListing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAc,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACrJ,OAAO,EAAwB,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzH,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGtF,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnF,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1D,CAAC;AA0EF,kGAAkG;AAClG,wBAAsB,eAAe,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,EACrF,MAAM,GAAE,iBAAsB,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,GAAG,YAAY,CAAC,CAmEvJ;AAED,2FAA2F;AAC3F,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,EACvF,MAAM,GAAE,iBAAsB,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwCtH"}
@@ -0,0 +1,244 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { ackHintFor } from '../domain/pendingChange.js';
3
+ import { matchesPendingFilter } from '../store/PendingChangeStore.js';
4
+ import { pendingRecordFromNode } from './pendingReview.js';
5
+ import { pickUriNode } from './chunkUpsert.js';
6
+ import { selectOrphanedPendingIds } from './orphanedPending.js';
7
+ import { getPendingRepairBatchSize } from '../config/env.js';
8
+ const FIELDS = ['id', 'uri', 'status', 'version.changedAt', 'version.diff', 'version.baseline.content_hash', 'version.baseline.uri', 'version.baseline.status', 'projectId', 'userId', 'agentId', 'createdAt', 'updatedAt', 'content_hash'];
9
+ function scopeKey(ctx, filter) {
10
+ const { cursor: _cursor, limit: _limit, ...selection } = filter;
11
+ return createHash('sha256').update(JSON.stringify([ctx.projectId, ctx.userId, ctx.agentId,
12
+ ctx.role, ctx.priority, ctx.rolePriorities, ctx.conversationId, [...(ctx.grantedFeatures ?? [])].sort(),
13
+ Object.entries(selection).sort(([a], [b]) => a.localeCompare(b))])).digest('hex');
14
+ }
15
+ function decodeCursor(raw, scope) {
16
+ if (!raw)
17
+ return null;
18
+ if (raw.length > 4096 || !/^[A-Za-z0-9_-]+$/.test(raw))
19
+ return false;
20
+ try {
21
+ const value = JSON.parse(Buffer.from(raw, 'base64url').toString('utf8'));
22
+ if (!value || typeof value !== 'object' || Array.isArray(value))
23
+ return false;
24
+ const item = value;
25
+ if (Object.keys(item).sort().join(',') !== 'after,branches,scope,v' || item.v !== 1
26
+ || typeof item.after !== 'string' || !item.after || item.after.length > 1024
27
+ || item.scope !== scope || typeof item.branches !== 'string' || !['jv', 'j', 'v', ''].includes(item.branches))
28
+ return false;
29
+ return { v: 1, after: item.after, scope, branches: item.branches };
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ function encodeCursor(after, scope, branches) {
36
+ return Buffer.from(JSON.stringify({ v: 1, after, scope, branches })).toString('base64url');
37
+ }
38
+ function restart() {
39
+ return { changes: [], complete: false, partial: false, restartRequired: true, hasMoreAvailable: false };
40
+ }
41
+ function newer(a, b) {
42
+ return a.updatedAt > b.updatedAt || a.updatedAt === b.updatedAt && a.id > b.id;
43
+ }
44
+ /** Id equality is insufficient: terminal suppression needs positive generation evidence. */
45
+ function shadows(terminal, vector) {
46
+ return terminal.uri === vector.uri && terminal.userId === vector.userId
47
+ && terminal.agentId === vector.agentId && terminal.createdAt === vector.createdAt
48
+ && terminal.baselineHash === vector.baselineHash && terminal.baselineUri === vector.baselineUri
49
+ && !!terminal.snapshotHash && terminal.snapshotHash === vector.snapshotHash;
50
+ }
51
+ async function scanVector(ports, ctx, uri, status = 'pending_review', signal) {
52
+ await ports.vector.ensureAgentCollection(ctx.agentId);
53
+ const must = [{ field: 'projectId', equals: ctx.projectId }, { field: 'status', equals: status }, ...(uri ? [{ field: 'uri', equals: uri }] : [])];
54
+ const out = [];
55
+ let cursor;
56
+ do {
57
+ signal?.throwIfAborted();
58
+ const page = await ports.vector.scroll({ filter: { must, mustNot: [{ field: 'category', equals: 'chunk' }] },
59
+ payloadFields: ['uri', 'projectId'], limit: 1000, ...(cursor ? { cursor } : {}) });
60
+ for (const point of page.points)
61
+ if (point.payload?.projectId === ctx.projectId && point.payload.uri)
62
+ out.push(point);
63
+ if (page.nextCursor && page.nextCursor === cursor)
64
+ throw new Error('Pending vector cursor did not advance');
65
+ cursor = page.nextCursor;
66
+ await new Promise(resolve => setImmediate(resolve));
67
+ } while (cursor);
68
+ const uris = [...new Set(out.map((point) => point.payload.uri))];
69
+ const twins = [];
70
+ for (let start = 0; start < uris.length; start += 1000) {
71
+ let twinCursor;
72
+ do {
73
+ signal?.throwIfAborted();
74
+ const page = await ports.vector.scroll({ filter: {
75
+ must: [{ field: 'projectId', equals: ctx.projectId }],
76
+ mustMatchAny: [{ field: 'uri', values: uris.slice(start, start + 1000) }],
77
+ mustNot: [{ field: 'category', equals: 'chunk' }],
78
+ }, payloadFields: FIELDS, limit: 1000, ...(twinCursor ? { cursor: twinCursor } : {}) });
79
+ for (const point of page.points)
80
+ if (point.payload?.projectId === ctx.projectId && point.payload.uri)
81
+ twins.push(point);
82
+ if (page.nextCursor && page.nextCursor === twinCursor)
83
+ throw new Error('Pending twin cursor did not advance');
84
+ twinCursor = page.nextCursor;
85
+ await new Promise(resolve => setImmediate(resolve));
86
+ } while (twinCursor);
87
+ }
88
+ return twins;
89
+ }
90
+ /** Complete current reconstruction before slicing; backend offsets never enter public cursors. */
91
+ export async function listPendingPage(ports, ctx, filter = {}, options = {}) {
92
+ options.signal?.throwIfAborted();
93
+ const scope = scopeKey(ctx, filter);
94
+ const cursor = decodeCursor(filter.cursor, scope);
95
+ if (cursor === false)
96
+ return options.count ? { ...restart(), count: 0, exact: false } : restart();
97
+ const [journal, vector] = await Promise.allSettled([
98
+ ports.store ? ports.store.snapshot(ctx.projectId, filter.uri) : Promise.resolve([]),
99
+ scanVector(ports, ctx, filter.uri, filter.status ?? 'pending_review', options.signal),
100
+ ]);
101
+ options.signal?.throwIfAborted();
102
+ const unavailable = [];
103
+ if (journal.status === 'rejected') {
104
+ unavailable.push('journal');
105
+ ports.warn('journal', journal.reason);
106
+ }
107
+ if (vector.status === 'rejected') {
108
+ unavailable.push('vector');
109
+ ports.warn('vector', vector.reason);
110
+ }
111
+ const visible = async (rec, branch) => {
112
+ try {
113
+ return await ports.visible(rec);
114
+ }
115
+ catch (error) {
116
+ if (!unavailable.includes(branch)) {
117
+ unavailable.push(branch);
118
+ ports.warn(branch, error);
119
+ }
120
+ return false;
121
+ }
122
+ };
123
+ const status = filter.status ?? 'pending_review';
124
+ const allJournal = journal.status === 'fulfilled' ? journal.value : [];
125
+ const byId = new Map(allJournal.map((rec) => [rec.id, rec]));
126
+ const byUri = new Map();
127
+ let visited = 0;
128
+ for (const rec of allJournal) {
129
+ if (++visited % 256 === 0)
130
+ await new Promise(resolve => setImmediate(resolve));
131
+ options.signal?.throwIfAborted();
132
+ if (rec.status !== status || !matchesPendingFilter(rec, filter) || !await visible(rec, 'journal'))
133
+ continue;
134
+ const old = byUri.get(rec.uri);
135
+ if (!old || newer(rec, old))
136
+ byUri.set(rec.uri, rec);
137
+ }
138
+ if (vector.status === 'fulfilled') {
139
+ const groups = new Map();
140
+ for (const point of vector.value) {
141
+ if (++visited % 256 === 0)
142
+ await new Promise(resolve => setImmediate(resolve));
143
+ options.signal?.throwIfAborted();
144
+ const rec = pendingRecordFromNode(point.payload);
145
+ if (!matchesPendingFilter(rec, filter) || !await visible(rec, 'vector'))
146
+ continue;
147
+ const group = groups.get(rec.uri) ?? [];
148
+ group.push(point);
149
+ groups.set(rec.uri, group);
150
+ }
151
+ for (const [uri, points] of groups) {
152
+ const winner = pickUriNode(points.sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
153
+ if (!winner || winner.payload.status !== status || byUri.has(uri))
154
+ continue;
155
+ const rec = pendingRecordFromNode(winner.payload);
156
+ const sameId = byId.get(rec.id);
157
+ if (status === 'pending_review' && sameId && sameId.status !== 'pending_review') {
158
+ if (shadows(sameId, rec))
159
+ continue;
160
+ rec.conflict = 'PENDING_GENERATION_CHANGED';
161
+ }
162
+ byUri.set(uri, rec);
163
+ }
164
+ }
165
+ const branches = `${journal.status === 'fulfilled' && !unavailable.includes('journal') ? 'j' : ''}${vector.status === 'fulfilled' && !unavailable.includes('vector') ? 'v' : ''}`;
166
+ if (cursor && cursor.branches !== branches)
167
+ return options.count ? { ...restart(), count: 0, exact: false } : restart();
168
+ const rows = [...byUri.values()].sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0);
169
+ const partial = unavailable.length > 0;
170
+ if (options.count)
171
+ return { count: rows.length, exact: !partial, complete: !partial, partial,
172
+ hasMoreAvailable: false, ...(partial ? { unavailable } : {}) };
173
+ const eligible = cursor ? rows.filter((rec) => rec.id > cursor.after) : rows;
174
+ const limit = Number.isInteger(filter.limit) && (filter.limit ?? 0) > 0 ? Math.min(filter.limit, 1000) : 500;
175
+ const changes = eligible.slice(0, limit);
176
+ const hasMoreAvailable = eligible.length > changes.length;
177
+ const nextCursor = hasMoreAvailable ? encodeCursor(changes[changes.length - 1].id, scope, branches) : undefined;
178
+ let classificationPartial = false;
179
+ const orphanIds = options.orphans ? await selectOrphanedPendingIds(ports.orphan, ctx.projectId, changes.filter((rec) => !rec.conflict), options.signal, () => { classificationPartial = true; }) : undefined;
180
+ return { changes, ...(orphanIds ? { orphanIds } : {}), ...(nextCursor ? { nextCursor } : {}),
181
+ complete: !partial && !classificationPartial && !hasMoreAvailable, partial: partial || classificationPartial, hasMoreAvailable, ...(partial ? { unavailable } : {}) };
182
+ }
183
+ /** One visible batch, sequential fresh discard gates; a started effect always finishes. */
184
+ export async function repairPendingPage(ports, ctx, filter = {}, options = {}) {
185
+ const started = Date.now();
186
+ const limit = getPendingRepairBatchSize();
187
+ const page = await listPendingPage(ports, ctx, { ...filter, limit }, { orphans: true, signal: options.signal });
188
+ const result = { ok: true, scannedVisible: 0, orphaned: 0, attempted: 0, discarded: 0,
189
+ refused: 0, failed: 0, reasons: {}, legacyUnknownDraft: 0, durationMs: 0,
190
+ complete: page.complete, partial: page.partial, hasMoreAvailable: page.hasMoreAvailable,
191
+ ...(page.unavailable ? { unavailable: page.unavailable } : {}), ...(page.restartRequired ? { restartRequired: true } : {}) };
192
+ const orphaned = new Set(page.orphanIds);
193
+ let last;
194
+ for (const rec of page.changes) {
195
+ if (options.signal?.aborted) {
196
+ result.stopped = true;
197
+ result.complete = false;
198
+ break;
199
+ }
200
+ result.scannedVisible += 1;
201
+ last = rec.id;
202
+ if (!orphaned.has(rec.id)) {
203
+ if (ackHintFor(rec))
204
+ result.legacyUnknownDraft += 1;
205
+ if (rec.conflict) {
206
+ result.refused += 1;
207
+ result.reasons.PENDING_GENERATION_CHANGED = (result.reasons.PENDING_GENERATION_CHANGED ?? 0) + 1;
208
+ }
209
+ continue;
210
+ }
211
+ result.orphaned += 1;
212
+ if (options.dryRun)
213
+ continue;
214
+ result.attempted += 1;
215
+ try {
216
+ const reply = await ports.discard(rec.id);
217
+ if (reply.ok && reply.discarded !== false)
218
+ result.discarded += 1;
219
+ else if (!reply.ok) {
220
+ result.refused += 1;
221
+ const reason = ['FORBIDDEN', 'NOT_FOUND', 'NOT_ORPHANED', 'PENDING_GENERATION_CHANGED'].includes(reply.error ?? '') ? reply.error : 'REFUSED';
222
+ result.reasons[reason] = (result.reasons[reason] ?? 0) + 1;
223
+ }
224
+ }
225
+ catch {
226
+ result.failed += 1;
227
+ result.reasons.FAILED = (result.reasons.FAILED ?? 0) + 1;
228
+ }
229
+ }
230
+ if (result.stopped) {
231
+ result.hasMoreAvailable = true;
232
+ if (last) {
233
+ const branches = page.unavailable?.includes('journal') ? 'v' : page.unavailable?.includes('vector') ? 'j' : 'jv';
234
+ result.nextCursor = encodeCursor(last, scopeKey(ctx, filter), branches);
235
+ }
236
+ else if (filter.cursor)
237
+ result.nextCursor = filter.cursor;
238
+ }
239
+ else if (page.nextCursor)
240
+ result.nextCursor = page.nextCursor;
241
+ result.durationMs = Date.now() - started;
242
+ return result;
243
+ }
244
+ //# sourceMappingURL=pendingListing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingListing.js","sourceRoot":"","sources":["../../../src/usecases/pendingListing.ts"],"names":[],"mappings":"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"}