ctxr-cli 0.1.0 → 0.2.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 (175) hide show
  1. package/dist/adapters/forge/github.d.ts +4 -1
  2. package/dist/adapters/forge/github.d.ts.map +1 -1
  3. package/dist/adapters/forge/github.js +41 -1
  4. package/dist/adapters/forge/github.js.map +1 -1
  5. package/dist/adapters/forge/types.d.ts +23 -0
  6. package/dist/adapters/forge/types.d.ts.map +1 -1
  7. package/dist/adapters/types.d.ts.map +1 -1
  8. package/dist/adapters/types.js +2 -1
  9. package/dist/adapters/types.js.map +1 -1
  10. package/dist/commands/check.d.ts +12 -4
  11. package/dist/commands/check.d.ts.map +1 -1
  12. package/dist/commands/check.js +28 -1
  13. package/dist/commands/check.js.map +1 -1
  14. package/dist/commands/entry-append.d.ts +25 -0
  15. package/dist/commands/entry-append.d.ts.map +1 -0
  16. package/dist/commands/entry-append.js +39 -0
  17. package/dist/commands/entry-append.js.map +1 -0
  18. package/dist/commands/graph-build.d.ts +5 -0
  19. package/dist/commands/graph-build.d.ts.map +1 -1
  20. package/dist/commands/graph-build.js +8 -5
  21. package/dist/commands/graph-build.js.map +1 -1
  22. package/dist/commands/graph-query.d.ts +15 -0
  23. package/dist/commands/graph-query.d.ts.map +1 -1
  24. package/dist/commands/graph-query.js +12 -2
  25. package/dist/commands/graph-query.js.map +1 -1
  26. package/dist/commands/identity.d.ts +24 -0
  27. package/dist/commands/identity.d.ts.map +1 -0
  28. package/dist/commands/identity.js +35 -0
  29. package/dist/commands/identity.js.map +1 -0
  30. package/dist/commands/init.d.ts.map +1 -1
  31. package/dist/commands/init.js +7 -7
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/rollup-stale.d.ts +18 -0
  34. package/dist/commands/rollup-stale.d.ts.map +1 -0
  35. package/dist/commands/rollup-stale.js +35 -0
  36. package/dist/commands/rollup-stale.js.map +1 -0
  37. package/dist/commands/rollup-write.d.ts +9 -1
  38. package/dist/commands/rollup-write.d.ts.map +1 -1
  39. package/dist/commands/rollup-write.js +17 -2
  40. package/dist/commands/rollup-write.js.map +1 -1
  41. package/dist/commands/session-capture.d.ts +25 -0
  42. package/dist/commands/session-capture.d.ts.map +1 -0
  43. package/dist/commands/session-capture.js +119 -0
  44. package/dist/commands/session-capture.js.map +1 -0
  45. package/dist/commands/session-land.d.ts +45 -0
  46. package/dist/commands/session-land.d.ts.map +1 -0
  47. package/dist/commands/session-land.js +140 -0
  48. package/dist/commands/session-land.js.map +1 -0
  49. package/dist/commands/session-list.d.ts.map +1 -1
  50. package/dist/commands/session-list.js +3 -2
  51. package/dist/commands/session-list.js.map +1 -1
  52. package/dist/commands/session-reap.d.ts.map +1 -1
  53. package/dist/commands/session-reap.js +3 -2
  54. package/dist/commands/session-reap.js.map +1 -1
  55. package/dist/commands/session-submit.d.ts +2 -0
  56. package/dist/commands/session-submit.d.ts.map +1 -1
  57. package/dist/commands/session-submit.js +6 -2
  58. package/dist/commands/session-submit.js.map +1 -1
  59. package/dist/commands/source-add-alt.d.ts +20 -0
  60. package/dist/commands/source-add-alt.d.ts.map +1 -0
  61. package/dist/commands/source-add-alt.js +48 -0
  62. package/dist/commands/source-add-alt.js.map +1 -0
  63. package/dist/commands/source-check.js +1 -1
  64. package/dist/commands/source-check.js.map +1 -1
  65. package/dist/commands/source-stamp.d.ts +24 -0
  66. package/dist/commands/source-stamp.d.ts.map +1 -0
  67. package/dist/commands/source-stamp.js +46 -0
  68. package/dist/commands/source-stamp.js.map +1 -0
  69. package/dist/commands/verify.js +2 -2
  70. package/dist/commands/verify.js.map +1 -1
  71. package/dist/config/defaults.d.ts +13 -0
  72. package/dist/config/defaults.d.ts.map +1 -1
  73. package/dist/config/defaults.js +13 -0
  74. package/dist/config/defaults.js.map +1 -1
  75. package/dist/config/schema.d.ts +31 -0
  76. package/dist/config/schema.d.ts.map +1 -1
  77. package/dist/config/schema.js +42 -0
  78. package/dist/config/schema.js.map +1 -1
  79. package/dist/core/agents-doc.d.ts.map +1 -1
  80. package/dist/core/agents-doc.js +3 -1
  81. package/dist/core/agents-doc.js.map +1 -1
  82. package/dist/core/checks/disclosure-checks.d.ts +4 -0
  83. package/dist/core/checks/disclosure-checks.d.ts.map +1 -0
  84. package/dist/core/checks/disclosure-checks.js +24 -0
  85. package/dist/core/checks/disclosure-checks.js.map +1 -0
  86. package/dist/core/checks/identity-checks.d.ts +6 -1
  87. package/dist/core/checks/identity-checks.d.ts.map +1 -1
  88. package/dist/core/checks/identity-checks.js +23 -19
  89. package/dist/core/checks/identity-checks.js.map +1 -1
  90. package/dist/core/checks/integrity-checks.js +2 -2
  91. package/dist/core/checks/integrity-checks.js.map +1 -1
  92. package/dist/core/checks/manifest.d.ts.map +1 -1
  93. package/dist/core/checks/manifest.js +2 -0
  94. package/dist/core/checks/manifest.js.map +1 -1
  95. package/dist/core/checks/organize-checks.d.ts +2 -0
  96. package/dist/core/checks/organize-checks.d.ts.map +1 -1
  97. package/dist/core/checks/organize-checks.js +24 -1
  98. package/dist/core/checks/organize-checks.js.map +1 -1
  99. package/dist/core/checks/write-lifecycle-checks.d.ts +4 -1
  100. package/dist/core/checks/write-lifecycle-checks.d.ts.map +1 -1
  101. package/dist/core/checks/write-lifecycle-checks.js +18 -2
  102. package/dist/core/checks/write-lifecycle-checks.js.map +1 -1
  103. package/dist/core/disclosure/leak-scan.d.ts +19 -0
  104. package/dist/core/disclosure/leak-scan.d.ts.map +1 -0
  105. package/dist/core/disclosure/leak-scan.js +31 -0
  106. package/dist/core/disclosure/leak-scan.js.map +1 -0
  107. package/dist/core/errors.d.ts +40 -0
  108. package/dist/core/errors.d.ts.map +1 -1
  109. package/dist/core/errors.js +128 -0
  110. package/dist/core/errors.js.map +1 -1
  111. package/dist/core/fs/fenced-region.d.ts +9 -0
  112. package/dist/core/fs/fenced-region.d.ts.map +1 -1
  113. package/dist/core/fs/fenced-region.js +40 -0
  114. package/dist/core/fs/fenced-region.js.map +1 -1
  115. package/dist/core/git/repo.d.ts +2 -0
  116. package/dist/core/git/repo.d.ts.map +1 -1
  117. package/dist/core/git/repo.js +4 -0
  118. package/dist/core/git/repo.js.map +1 -1
  119. package/dist/core/graph/document.d.ts +26 -0
  120. package/dist/core/graph/document.d.ts.map +1 -0
  121. package/dist/core/graph/document.js +67 -0
  122. package/dist/core/graph/document.js.map +1 -0
  123. package/dist/core/graph/model.d.ts +44 -2
  124. package/dist/core/graph/model.d.ts.map +1 -1
  125. package/dist/core/graph/model.js +65 -6
  126. package/dist/core/graph/model.js.map +1 -1
  127. package/dist/core/graph/persist.d.ts +4 -0
  128. package/dist/core/graph/persist.d.ts.map +1 -1
  129. package/dist/core/graph/persist.js +10 -0
  130. package/dist/core/graph/persist.js.map +1 -1
  131. package/dist/core/graph/query.d.ts +24 -0
  132. package/dist/core/graph/query.d.ts.map +1 -1
  133. package/dist/core/graph/query.js +45 -2
  134. package/dist/core/graph/query.js.map +1 -1
  135. package/dist/core/identity.d.ts +36 -4
  136. package/dist/core/identity.d.ts.map +1 -1
  137. package/dist/core/identity.js +119 -12
  138. package/dist/core/identity.js.map +1 -1
  139. package/dist/core/ingest/canonical-url.d.ts +11 -0
  140. package/dist/core/ingest/canonical-url.d.ts.map +1 -0
  141. package/dist/core/ingest/canonical-url.js +27 -0
  142. package/dist/core/ingest/canonical-url.js.map +1 -0
  143. package/dist/core/ingest/identity.d.ts +2 -0
  144. package/dist/core/ingest/identity.d.ts.map +1 -1
  145. package/dist/core/ingest/identity.js +2 -0
  146. package/dist/core/ingest/identity.js.map +1 -1
  147. package/dist/core/ingest/model.d.ts +9 -2
  148. package/dist/core/ingest/model.d.ts.map +1 -1
  149. package/dist/core/ingest/model.js +32 -3
  150. package/dist/core/ingest/model.js.map +1 -1
  151. package/dist/core/procedures.d.ts +32 -12
  152. package/dist/core/procedures.d.ts.map +1 -1
  153. package/dist/core/procedures.js +613 -75
  154. package/dist/core/procedures.js.map +1 -1
  155. package/dist/core/rollup.d.ts +29 -0
  156. package/dist/core/rollup.d.ts.map +1 -0
  157. package/dist/core/rollup.js +60 -0
  158. package/dist/core/rollup.js.map +1 -0
  159. package/dist/core/session.d.ts +14 -0
  160. package/dist/core/session.d.ts.map +1 -1
  161. package/dist/core/session.js +19 -0
  162. package/dist/core/session.js.map +1 -1
  163. package/dist/core/write-lifecycle/path-gate.d.ts +20 -0
  164. package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -0
  165. package/dist/core/write-lifecycle/path-gate.js +90 -0
  166. package/dist/core/write-lifecycle/path-gate.js.map +1 -0
  167. package/dist/prompt/inquirer-prompter.d.ts.map +1 -1
  168. package/dist/prompt/inquirer-prompter.js +4 -1
  169. package/dist/prompt/inquirer-prompter.js.map +1 -1
  170. package/dist/prompt/prompter.d.ts +9 -0
  171. package/dist/prompt/prompter.d.ts.map +1 -1
  172. package/dist/run.d.ts.map +1 -1
  173. package/dist/run.js +149 -4
  174. package/dist/run.js.map +1 -1
  175. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/graph/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/graph/model.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,10 @@ import type { Store } from '../store.js';
2
2
  import type { GraphBuildResult } from './model.js';
3
3
  /** A derived artifact, atomically written, under the home directory's cache subpath (the default derived path). */
4
4
  export declare function graphFilePath(store: Store): string;
5
+ /** graph-context-document spec: the human-readable render lives beside the artifact; this is the path AGENTS.md and the skills name. */
6
+ export declare const GRAPH_DOCUMENT_RELATIVE_PATH = ".contexture/cache/graph.md";
7
+ export declare function graphDocumentPath(store: Store): string;
8
+ export declare function writeGraphDocument(store: Store, text: string): Promise<void>;
5
9
  export declare function writeGraph(store: Store, graph: GraphBuildResult): Promise<void>;
6
10
  export declare function readGraph(store: Store): Promise<GraphBuildResult | null>;
7
11
  //# sourceMappingURL=persist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAElD;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrF;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAO9E"}
1
+ {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAElD;AAED,wIAAwI;AACxI,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEtD;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrF;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAO9E"}
@@ -5,6 +5,16 @@ import { writeFileAtomic } from '../fs/atomic.js';
5
5
  export function graphFilePath(store) {
6
6
  return path.join(store.root, '.contexture', 'cache', 'graph.json');
7
7
  }
8
+ /** graph-context-document spec: the human-readable render lives beside the artifact; this is the path AGENTS.md and the skills name. */
9
+ export const GRAPH_DOCUMENT_RELATIVE_PATH = '.contexture/cache/graph.md';
10
+ export function graphDocumentPath(store) {
11
+ return path.join(store.root, ...GRAPH_DOCUMENT_RELATIVE_PATH.split('/'));
12
+ }
13
+ export async function writeGraphDocument(store, text) {
14
+ const filePath = graphDocumentPath(store);
15
+ await mkdir(path.dirname(filePath), { recursive: true });
16
+ await writeFileAtomic(filePath, text);
17
+ }
8
18
  export async function writeGraph(store, graph) {
9
19
  const filePath = graphFilePath(store);
10
20
  await mkdir(path.dirname(filePath), { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlD,mHAAmH;AACnH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAY,EAAE,KAAuB;IACpE,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAY;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAqB,CAAC;IACtF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlD,mHAAmH;AACnH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,wIAAwI;AACxI,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AAEzE,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAY,EAAE,IAAY;IACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAY,EAAE,KAAuB;IACpE,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAY;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAqB,CAAC;IACtF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -3,6 +3,8 @@ export type Direction = 'in' | 'out' | 'both';
3
3
  export interface NeighborsOptions {
4
4
  depth?: number;
5
5
  direction?: Direction;
6
+ /** graph-context-document spec: restrict traversal to edges of one type (a configured relation name, or the plain link type). */
7
+ type?: string;
6
8
  }
7
9
  export declare function neighbors(graph: GraphBuildResult, nodeId: string, opts?: NeighborsOptions): string[];
8
10
  export declare function shortestPath(graph: GraphBuildResult, from: string, to: string): string[] | null;
@@ -13,4 +15,26 @@ export interface HubEntry {
13
15
  export declare function hubs(graph: GraphBuildResult, top: number): HubEntry[];
14
16
  export declare function orphans(graph: GraphBuildResult): string[];
15
17
  export declare function subgraph(graph: GraphBuildResult, ids: readonly string[]): GraphBuildResult;
18
+ /** Incoming-edge count per node, every edge type included — the "backlinks" the document and hubs rank by. */
19
+ export declare function backlinkCounts(graph: GraphBuildResult): Map<string, number>;
20
+ export interface ClusterEntry {
21
+ cluster: string;
22
+ notes: number;
23
+ }
24
+ /** graph-context-document spec: every cluster with its note count, by cluster name. */
25
+ export declare function clusters(graph: GraphBuildResult): ClusterEntry[];
26
+ export interface BridgeEntry {
27
+ id: string;
28
+ cluster: string;
29
+ /** The distinct OTHER clusters this note links into, sorted. */
30
+ clusters: string[];
31
+ score: number;
32
+ }
33
+ /**
34
+ * graph-context-document spec (D4): a bridge score counts distinct other
35
+ * clusters a note links INTO, not cross-cluster links — ten links into one
36
+ * neighbor score 1, one link into each of four clusters scores 4. Ties break
37
+ * by id for determinism; a note that bridges nothing is not listed.
38
+ */
39
+ export declare function bridges(graph: GraphBuildResult, top: number): BridgeEntry[];
16
40
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/core/graph/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAgB9C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,MAAM,EAAE,CAoBxG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CA0B/F;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAQrE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAOzD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAO1F"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/core/graph/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAiB9C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iIAAiI;IACjI,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,MAAM,EAAE,CAoBxG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CA0B/F;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAQrE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAOzD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAO1F;AAED,8GAA8G;AAC9G,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAK3E;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uFAAuF;AACvF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAMhE;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAe3E"}
@@ -1,4 +1,4 @@
1
- function buildAdjacency(graph, direction) {
1
+ function buildAdjacency(graph, direction, type) {
2
2
  const adjacency = new Map();
3
3
  const add = (a, b) => {
4
4
  const list = adjacency.get(a) ?? [];
@@ -6,6 +6,8 @@ function buildAdjacency(graph, direction) {
6
6
  adjacency.set(a, list);
7
7
  };
8
8
  for (const edge of graph.edges) {
9
+ if (type !== undefined && edge.type !== type)
10
+ continue;
9
11
  if (direction === 'out' || direction === 'both')
10
12
  add(edge.src, edge.dst);
11
13
  if (direction === 'in' || direction === 'both')
@@ -15,7 +17,7 @@ function buildAdjacency(graph, direction) {
15
17
  }
16
18
  export function neighbors(graph, nodeId, opts = {}) {
17
19
  const depth = opts.depth ?? 1;
18
- const adjacency = buildAdjacency(graph, opts.direction ?? 'both');
20
+ const adjacency = buildAdjacency(graph, opts.direction ?? 'both', opts.type);
19
21
  let frontier = new Set([nodeId]);
20
22
  const visited = new Set([nodeId]);
21
23
  for (let i = 0; i < depth && frontier.size > 0; i += 1) {
@@ -88,4 +90,45 @@ export function subgraph(graph, ids) {
88
90
  dangling: graph.dangling.filter((d) => idSet.has(d.from)),
89
91
  };
90
92
  }
93
+ /** Incoming-edge count per node, every edge type included — the "backlinks" the document and hubs rank by. */
94
+ export function backlinkCounts(graph) {
95
+ const counts = new Map();
96
+ for (const node of graph.nodes)
97
+ counts.set(node.id, 0);
98
+ for (const edge of graph.edges)
99
+ counts.set(edge.dst, (counts.get(edge.dst) ?? 0) + 1);
100
+ return counts;
101
+ }
102
+ /** graph-context-document spec: every cluster with its note count, by cluster name. */
103
+ export function clusters(graph) {
104
+ const counts = new Map();
105
+ for (const node of graph.nodes)
106
+ counts.set(node.cluster, (counts.get(node.cluster) ?? 0) + 1);
107
+ return [...counts.entries()]
108
+ .map(([cluster, notes]) => ({ cluster, notes }))
109
+ .sort((a, b) => a.cluster.localeCompare(b.cluster));
110
+ }
111
+ /**
112
+ * graph-context-document spec (D4): a bridge score counts distinct other
113
+ * clusters a note links INTO, not cross-cluster links — ten links into one
114
+ * neighbor score 1, one link into each of four clusters scores 4. Ties break
115
+ * by id for determinism; a note that bridges nothing is not listed.
116
+ */
117
+ export function bridges(graph, top) {
118
+ const clusterOfNode = new Map(graph.nodes.map((n) => [n.id, n.cluster]));
119
+ const reach = new Map();
120
+ for (const edge of graph.edges) {
121
+ const from = clusterOfNode.get(edge.src);
122
+ const to = clusterOfNode.get(edge.dst);
123
+ if (from === undefined || to === undefined || from === to)
124
+ continue;
125
+ const set = reach.get(edge.src) ?? new Set();
126
+ set.add(to);
127
+ reach.set(edge.src, set);
128
+ }
129
+ return [...reach.entries()]
130
+ .map(([id, set]) => ({ id, cluster: clusterOfNode.get(id), clusters: [...set].sort(), score: set.size }))
131
+ .sort((a, b) => b.score - a.score || a.id.localeCompare(b.id))
132
+ .slice(0, top);
133
+ }
91
134
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/core/graph/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/core/graph/query.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,46 @@
1
1
  import type { StoreConfig } from '../config/schema.js';
2
2
  /**
3
- * agent-identity spec: three canonical, harness-neutral files — posture,
3
+ * agent-identity spec: three canonical, harness-neutral roles — posture,
4
4
  * durable world facts, durable user facts — kept distinct from retrievable
5
- * knowledge (excluded from every retrieval leg via config.identity.path
6
- * being a member of config.retrieval.exclude_paths). A harness's own
5
+ * knowledge (excluded from every retrieval leg via each resolved path being
6
+ * covered by config.retrieval.exclude_paths). A harness's own
7
7
  * identity-injection adapter decides how these reach a running agent; core
8
8
  * never reads their content itself.
9
+ *
10
+ * session-capture-command spec (D3): a role's path is CONFIGURABLE
11
+ * (`identity.files`) — a store whose runtime keeps its memory elsewhere
12
+ * points the role there, and every consumer below resolves through
13
+ * `identityFilePath`/`identityFilePaths` rather than assuming the canonical
14
+ * layout, so the relocated file IS the mechanism, not a copy of it.
9
15
  */
10
- export declare const IDENTITY_FILES: readonly ['posture.md', 'world-facts.md', 'user-facts.md'];
16
+ export declare const IDENTITY_ROLES: readonly ['posture', 'world-facts', 'user-facts'];
17
+ export type IdentityRole = (typeof IDENTITY_ROLES)[number];
18
+ /** The canonical filename each role resolves to under `identity.path` when no override is configured. */
19
+ export declare const IDENTITY_FILES: Record<IdentityRole, string>;
20
+ /** The store-relative path this role resolves to: its configured binding, or its canonical file under `identity.path`. */
21
+ export declare function identityFilePath(config: StoreConfig, role: IdentityRole): string;
11
22
  export declare function identityFilePaths(config: StoreConfig): string[];
12
23
  /** Creates any of the three canonical identity files that don't exist yet — never overwrites an existing one. */
13
24
  export declare function ensureIdentityFiles(root: string, config: StoreConfig): Promise<string[]>;
25
+ /**
26
+ * session-capture-command spec (D4): an entry is the text between two
27
+ * delimiter lines. The default delimiter ('') means an empty (blank) line,
28
+ * so paragraphs are entries and a heading-sectioned file's headings simply
29
+ * become part of the entry that follows them — no section vocabulary, no
30
+ * format detection.
31
+ */
32
+ export declare function splitEntries(text: string, delimiter: string): string[];
33
+ export declare function joinEntries(entries: readonly string[], delimiter: string): string;
34
+ export interface IdentityEntryResult {
35
+ /** The role's resolved, store-relative path. */
36
+ path: string;
37
+ /** The entry count after the edit. */
38
+ entries: number;
39
+ }
40
+ /** Appends a new entry at the end of the role's file, creating it (with no other entries) if it doesn't exist yet. */
41
+ export declare function addIdentityEntry(root: string, config: StoreConfig, role: IdentityRole, text: string): Promise<IdentityEntryResult>;
42
+ /** Replaces the single entry containing `match`; refuses, writing nothing, when zero or several entries match. */
43
+ export declare function replaceIdentityEntry(root: string, config: StoreConfig, role: IdentityRole, match: string, text: string): Promise<IdentityEntryResult>;
44
+ /** Removes the single entry containing `match`; refuses, writing nothing, when zero or several entries match. */
45
+ export declare function removeIdentityEntry(root: string, config: StoreConfig, role: IdentityRole, match: string): Promise<IdentityEntryResult>;
14
46
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,YAAI,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAU,CAAC;AAQzF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAE/D;AAED,iHAAiH;AACjH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAY9F"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,YAAI,SAAS,EAAE,aAAa,EAAE,YAAY,CAAU,CAAC;AAChF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,yGAAyG;AACzG,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAIvD,CAAC;AAQF,0HAA0H;AAC1H,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAIhF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAE/D;AAED,iHAAiH;AACjH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAY9F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBtE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjF;AAwBD,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sHAAsH;AACtH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQxI;AAED,kHAAkH;AAClH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAQ9B;AAED,iHAAiH;AACjH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,CAAC,CAQ9B"}
@@ -1,36 +1,143 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { mkdir } from 'node:fs/promises';
2
+ import { mkdir, readFile } from 'node:fs/promises';
3
3
  import path from 'node:path';
4
+ import { IdentityEntryMatchError } from './errors.js';
4
5
  import { writeFileAtomic } from './fs/atomic.js';
5
6
  /**
6
- * agent-identity spec: three canonical, harness-neutral files — posture,
7
+ * agent-identity spec: three canonical, harness-neutral roles — posture,
7
8
  * durable world facts, durable user facts — kept distinct from retrievable
8
- * knowledge (excluded from every retrieval leg via config.identity.path
9
- * being a member of config.retrieval.exclude_paths). A harness's own
9
+ * knowledge (excluded from every retrieval leg via each resolved path being
10
+ * covered by config.retrieval.exclude_paths). A harness's own
10
11
  * identity-injection adapter decides how these reach a running agent; core
11
12
  * never reads their content itself.
13
+ *
14
+ * session-capture-command spec (D3): a role's path is CONFIGURABLE
15
+ * (`identity.files`) — a store whose runtime keeps its memory elsewhere
16
+ * points the role there, and every consumer below resolves through
17
+ * `identityFilePath`/`identityFilePaths` rather than assuming the canonical
18
+ * layout, so the relocated file IS the mechanism, not a copy of it.
12
19
  */
13
- export const IDENTITY_FILES = ['posture.md', 'world-facts.md', 'user-facts.md'];
20
+ export const IDENTITY_ROLES = ['posture', 'world-facts', 'user-facts'];
21
+ /** The canonical filename each role resolves to under `identity.path` when no override is configured. */
22
+ export const IDENTITY_FILES = {
23
+ posture: 'posture.md',
24
+ 'world-facts': 'world-facts.md',
25
+ 'user-facts': 'user-facts.md',
26
+ };
14
27
  const TEMPLATES = {
15
- 'posture.md': '# Agent posture\n\nHow an agent should approach work in this store: tone, defaults, things to always or never do.\n',
16
- 'world-facts.md': '# Durable world facts\n\nFacts about the world (not the user) worth carrying into every session.\n',
17
- 'user-facts.md': '# Durable user facts\n\nFacts about the user worth carrying into every session.\n',
28
+ posture: '# Agent posture\n\nHow an agent should approach work in this store: tone, defaults, things to always or never do.\n',
29
+ 'world-facts': '# Durable world facts\n\nFacts about the world (not the user) worth carrying into every session.\n',
30
+ 'user-facts': '# Durable user facts\n\nFacts about the user worth carrying into every session.\n',
18
31
  };
32
+ /** The store-relative path this role resolves to: its configured binding, or its canonical file under `identity.path`. */
33
+ export function identityFilePath(config, role) {
34
+ const bound = config.identity.files[role];
35
+ const relative = bound ?? path.join(config.identity.path, IDENTITY_FILES[role]);
36
+ return relative.split(path.sep).join('/');
37
+ }
19
38
  export function identityFilePaths(config) {
20
- return IDENTITY_FILES.map((name) => path.join(config.identity.path, name).split(path.sep).join('/'));
39
+ return IDENTITY_ROLES.map((role) => identityFilePath(config, role));
21
40
  }
22
41
  /** Creates any of the three canonical identity files that don't exist yet — never overwrites an existing one. */
23
42
  export async function ensureIdentityFiles(root, config) {
24
43
  const created = [];
25
- for (const name of IDENTITY_FILES) {
26
- const relativePath = path.join(config.identity.path, name).split(path.sep).join('/');
44
+ for (const role of IDENTITY_ROLES) {
45
+ const relativePath = identityFilePath(config, role);
27
46
  const absolutePath = path.join(root, relativePath);
28
47
  if (!existsSync(absolutePath)) {
29
48
  await mkdir(path.dirname(absolutePath), { recursive: true });
30
- await writeFileAtomic(absolutePath, TEMPLATES[name]);
49
+ await writeFileAtomic(absolutePath, TEMPLATES[role]);
31
50
  created.push(relativePath);
32
51
  }
33
52
  }
34
53
  return created;
35
54
  }
55
+ /**
56
+ * session-capture-command spec (D4): an entry is the text between two
57
+ * delimiter lines. The default delimiter ('') means an empty (blank) line,
58
+ * so paragraphs are entries and a heading-sectioned file's headings simply
59
+ * become part of the entry that follows them — no section vocabulary, no
60
+ * format detection.
61
+ */
62
+ export function splitEntries(text, delimiter) {
63
+ const isDelimiterLine = (line) => (delimiter === '' ? line.trim() === '' : line === delimiter);
64
+ const entries = [];
65
+ let current = [];
66
+ // A single trailing newline is a file-formatting convention, not a blank final line — for a
67
+ // custom delimiter it would otherwise leak into the last entry as trailing junk.
68
+ const trimmed = text.endsWith('\n') ? text.slice(0, -1) : text;
69
+ for (const line of trimmed.split('\n')) {
70
+ if (isDelimiterLine(line)) {
71
+ if (current.length > 0) {
72
+ entries.push(current.join('\n'));
73
+ current = [];
74
+ }
75
+ }
76
+ else {
77
+ current.push(line);
78
+ }
79
+ }
80
+ if (current.length > 0)
81
+ entries.push(current.join('\n'));
82
+ return entries;
83
+ }
84
+ export function joinEntries(entries, delimiter) {
85
+ if (entries.length === 0)
86
+ return '';
87
+ const separator = delimiter === '' ? '\n\n' : `\n${delimiter}\n`;
88
+ return `${entries.join(separator)}\n`;
89
+ }
90
+ async function readEntries(absolutePath, delimiter) {
91
+ let text;
92
+ try {
93
+ text = await readFile(absolutePath, 'utf8');
94
+ }
95
+ catch (err) {
96
+ if (err.code === 'ENOENT')
97
+ return [];
98
+ throw err;
99
+ }
100
+ return splitEntries(text, delimiter);
101
+ }
102
+ function findUniqueMatch(entries, match, filePath) {
103
+ const indices = entries.reduce((acc, entry, index) => {
104
+ if (entry.includes(match))
105
+ acc.push(index);
106
+ return acc;
107
+ }, []);
108
+ if (indices.length !== 1) {
109
+ throw new IdentityEntryMatchError(filePath, match, indices.length);
110
+ }
111
+ return indices[0];
112
+ }
113
+ /** Appends a new entry at the end of the role's file, creating it (with no other entries) if it doesn't exist yet. */
114
+ export async function addIdentityEntry(root, config, role, text) {
115
+ const relativePath = identityFilePath(config, role);
116
+ const absolutePath = path.join(root, relativePath);
117
+ const entries = await readEntries(absolutePath, config.identity.entry_delimiter);
118
+ entries.push(text);
119
+ await mkdir(path.dirname(absolutePath), { recursive: true });
120
+ await writeFileAtomic(absolutePath, joinEntries(entries, config.identity.entry_delimiter));
121
+ return { path: relativePath, entries: entries.length };
122
+ }
123
+ /** Replaces the single entry containing `match`; refuses, writing nothing, when zero or several entries match. */
124
+ export async function replaceIdentityEntry(root, config, role, match, text) {
125
+ const relativePath = identityFilePath(config, role);
126
+ const absolutePath = path.join(root, relativePath);
127
+ const entries = await readEntries(absolutePath, config.identity.entry_delimiter);
128
+ const index = findUniqueMatch(entries, match, relativePath);
129
+ entries[index] = text;
130
+ await writeFileAtomic(absolutePath, joinEntries(entries, config.identity.entry_delimiter));
131
+ return { path: relativePath, entries: entries.length };
132
+ }
133
+ /** Removes the single entry containing `match`; refuses, writing nothing, when zero or several entries match. */
134
+ export async function removeIdentityEntry(root, config, role, match) {
135
+ const relativePath = identityFilePath(config, role);
136
+ const absolutePath = path.join(root, relativePath);
137
+ const entries = await readEntries(absolutePath, config.identity.entry_delimiter);
138
+ const index = findUniqueMatch(entries, match, relativePath);
139
+ entries.splice(index, 1);
140
+ await writeFileAtomic(absolutePath, joinEntries(entries, config.identity.entry_delimiter));
141
+ return { path: relativePath, entries: entries.length };
142
+ }
36
143
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAU,CAAC;AAEzF,MAAM,SAAS,GAAoD;IACjE,YAAY,EAAE,qHAAqH;IACnI,gBAAgB,EAAE,oGAAoG;IACtH,eAAe,EAAE,mFAAmF;CACrG,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,MAAmB;IACzE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * context-ingest spec (store-primitives-from-migration-audit D2): a pure,
3
+ * fixed-rule canonicalization for a URL source identity — scheme and host
4
+ * are lowercased by the URL parser itself, the fragment is dropped, the
5
+ * configured tracking parameters are stripped, and a trailing slash on the
6
+ * path is collapsed. A non-URL identity (e.g. `granola/abc123`) passes
7
+ * through unchanged — canonicalization only ever narrows what already
8
+ * looks like a URL.
9
+ */
10
+ export declare function canonicalizeSourceId(id: string, trackingParams: readonly string[]): string;
11
+ //# sourceMappingURL=canonical-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-url.d.ts","sourceRoot":"","sources":["../../../src/core/ingest/canonical-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAiB1F"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * context-ingest spec (store-primitives-from-migration-audit D2): a pure,
3
+ * fixed-rule canonicalization for a URL source identity — scheme and host
4
+ * are lowercased by the URL parser itself, the fragment is dropped, the
5
+ * configured tracking parameters are stripped, and a trailing slash on the
6
+ * path is collapsed. A non-URL identity (e.g. `granola/abc123`) passes
7
+ * through unchanged — canonicalization only ever narrows what already
8
+ * looks like a URL.
9
+ */
10
+ export function canonicalizeSourceId(id, trackingParams) {
11
+ let url;
12
+ try {
13
+ url = new URL(id);
14
+ }
15
+ catch {
16
+ return id;
17
+ }
18
+ url.hash = '';
19
+ for (const param of trackingParams) {
20
+ url.searchParams.delete(param);
21
+ }
22
+ if (url.pathname.length > 1 && url.pathname.endsWith('/')) {
23
+ url.pathname = url.pathname.slice(0, -1);
24
+ }
25
+ return `${url.protocol}//${url.host}${url.pathname}${url.search}`;
26
+ }
27
+ //# sourceMappingURL=canonical-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-url.js","sourceRoot":"","sources":["../../../src/core/ingest/canonical-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,cAAiC;IAChF,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC"}
@@ -10,6 +10,8 @@ export declare const SOURCE_TYPE_FIELD = "source_type";
10
10
  export declare const SOURCE_ID_FIELD = "source_id";
11
11
  export declare const SOURCE_HASH_FIELD = "source_hash";
12
12
  export declare const INGESTED_FIELD = "ingested";
13
+ /** store-primitives-from-migration-audit spec (D2): alternative source identities `source add-alt` appends — a later check against any of them reports `duplicate`. */
14
+ export declare const SOURCE_ALT_IDS_FIELD = "source_alt_ids";
13
15
  /** Whether a note already carries any source-identity field — a re-ingest guard, and capture's own invariant. */
14
16
  export declare function hasSourceIdentity(note: Pick<Note, 'frontmatter'>): boolean;
15
17
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/core/ingest/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,cAAc,aAAa,CAAC;AAIzC,iHAAiH;AACjH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,OAAO,CAE1E"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/core/ingest/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,uKAAuK;AACvK,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAIrD,iHAAiH;AACjH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,OAAO,CAE1E"}
@@ -9,6 +9,8 @@ export const SOURCE_TYPE_FIELD = 'source_type';
9
9
  export const SOURCE_ID_FIELD = 'source_id';
10
10
  export const SOURCE_HASH_FIELD = 'source_hash';
11
11
  export const INGESTED_FIELD = 'ingested';
12
+ /** store-primitives-from-migration-audit spec (D2): alternative source identities `source add-alt` appends — a later check against any of them reports `duplicate`. */
13
+ export const SOURCE_ALT_IDS_FIELD = 'source_alt_ids';
12
14
  const IDENTITY_FIELDS = [SOURCE_TYPE_FIELD, SOURCE_ID_FIELD, SOURCE_HASH_FIELD, INGESTED_FIELD];
13
15
  /** Whether a note already carries any source-identity field — a re-ingest guard, and capture's own invariant. */
14
16
  export function hasSourceIdentity(note) {
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/core/ingest/identity.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,eAAe,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAU,CAAC;AAEzG,iHAAiH;AACjH,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/core/ingest/identity.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AACzC,uKAAuK;AACvK,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,MAAM,eAAe,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAU,CAAC;AAEzG,iHAAiH;AACjH,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;AAClF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Note } from '../notes/list.js';
2
- export type SourceCheckVerdict = 'new' | 'already_ingested' | 'alternate_source_match' | 'multiple_matches';
2
+ export type SourceCheckVerdict = 'new' | 'already_ingested' | 'drift' | 'alternate_source_match' | 'multiple_matches';
3
3
  export interface SourceCheckResult {
4
4
  verdict: SourceCheckVerdict;
5
5
  /** The stage that produced the verdict, when a match stage was reached at all. */
@@ -12,6 +12,13 @@ export interface SourceCheckResult {
12
12
  * context-ingest spec: two-stage content-addressed dedupe, evaluated in
13
13
  * order, stopping (and reporting `multiple_matches` rather than guessing)
14
14
  * the moment either stage finds more than one match.
15
+ *
16
+ * store-primitives-from-migration-audit spec (D2): a source-id match
17
+ * (primary OR an alternate `source add-alt` recorded) whose recorded hash
18
+ * differs from the candidate's is `drift`, not `already_ingested` — the
19
+ * identity is the same, the content moved. Every id is compared in its
20
+ * canonicalized form (D2), so a URL varying only in case, tracking
21
+ * parameters, or a trailing slash still matches.
15
22
  */
16
- export declare function evaluateSourceCheck(notes: readonly Note[], candidateHash: string, sourceId: string): SourceCheckResult;
23
+ export declare function evaluateSourceCheck(notes: readonly Note[], candidateHash: string, sourceId: string, trackingParams?: readonly string[]): SourceCheckResult;
17
24
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/core/ingest/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC;AAE5G,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,kFAAkF;IAClF,KAAK,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC;IACrC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAkBtH"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/core/ingest/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI7C,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,GAAG,OAAO,GAAG,wBAAwB,GAAG,kBAAkB,CAAC;AAEtH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,kFAAkF;IAClF,KAAK,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC;IACrC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,SAAS,MAAM,EAAO,GACrC,iBAAiB,CA2BnB"}
@@ -1,15 +1,44 @@
1
- import { SOURCE_HASH_FIELD, SOURCE_ID_FIELD } from './identity.js';
1
+ import { canonicalizeSourceId } from './canonical-url.js';
2
+ import { SOURCE_ALT_IDS_FIELD, SOURCE_HASH_FIELD, SOURCE_ID_FIELD } from './identity.js';
3
+ function recordedIds(note) {
4
+ const ids = [];
5
+ const primary = note.frontmatter?.[SOURCE_ID_FIELD];
6
+ if (typeof primary === 'string')
7
+ ids.push(primary);
8
+ const alts = note.frontmatter?.[SOURCE_ALT_IDS_FIELD];
9
+ if (Array.isArray(alts)) {
10
+ for (const alt of alts)
11
+ if (typeof alt === 'string')
12
+ ids.push(alt);
13
+ }
14
+ return ids;
15
+ }
2
16
  /**
3
17
  * context-ingest spec: two-stage content-addressed dedupe, evaluated in
4
18
  * order, stopping (and reporting `multiple_matches` rather than guessing)
5
19
  * the moment either stage finds more than one match.
20
+ *
21
+ * store-primitives-from-migration-audit spec (D2): a source-id match
22
+ * (primary OR an alternate `source add-alt` recorded) whose recorded hash
23
+ * differs from the candidate's is `drift`, not `already_ingested` — the
24
+ * identity is the same, the content moved. Every id is compared in its
25
+ * canonicalized form (D2), so a URL varying only in case, tracking
26
+ * parameters, or a trailing slash still matches.
6
27
  */
7
- export function evaluateSourceCheck(notes, candidateHash, sourceId) {
8
- const idMatches = notes.filter((n) => n.frontmatter?.[SOURCE_ID_FIELD] === sourceId).map((n) => n.path);
28
+ export function evaluateSourceCheck(notes, candidateHash, sourceId, trackingParams = []) {
29
+ const canonicalCandidate = canonicalizeSourceId(sourceId, trackingParams);
30
+ const idMatches = notes
31
+ .filter((n) => recordedIds(n).some((id) => canonicalizeSourceId(id, trackingParams) === canonicalCandidate))
32
+ .map((n) => n.path);
9
33
  if (idMatches.length > 1) {
10
34
  return { verdict: 'multiple_matches', stage: 'source_id', matches: idMatches, hash: candidateHash };
11
35
  }
12
36
  if (idMatches.length === 1) {
37
+ const matched = notes.find((n) => n.path === idMatches[0]);
38
+ const recordedHash = matched?.frontmatter?.[SOURCE_HASH_FIELD];
39
+ if (typeof recordedHash === 'string' && recordedHash !== candidateHash) {
40
+ return { verdict: 'drift', stage: 'source_id', matches: idMatches, hash: candidateHash };
41
+ }
13
42
  return { verdict: 'already_ingested', stage: 'source_id', matches: idMatches, hash: candidateHash };
14
43
  }
15
44
  const hashMatches = notes.filter((n) => n.frontmatter?.[SOURCE_HASH_FIELD] === candidateHash).map((n) => n.path);
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/ingest/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAanE;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB,EAAE,aAAqB,EAAE,QAAgB;IACjG,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACtG,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,KAAK,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAC3G,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/ingest/model.ts"],"names":[],"mappings":"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"}