pilotswarm-sdk 0.2.0 → 0.2.1

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 (173) hide show
  1. package/dist/agent-loader.d.ts +9 -0
  2. package/dist/agent-loader.d.ts.map +1 -1
  3. package/dist/agent-loader.js +3 -0
  4. package/dist/agent-loader.js.map +1 -1
  5. package/dist/child-notifications.d.ts +10 -0
  6. package/dist/child-notifications.d.ts.map +1 -1
  7. package/dist/child-notifications.js +15 -1
  8. package/dist/child-notifications.js.map +1 -1
  9. package/dist/client.d.ts +2 -2
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +14 -20
  12. package/dist/client.js.map +1 -1
  13. package/dist/cms-migrations.d.ts.map +1 -1
  14. package/dist/cms-migrations.js +321 -0
  15. package/dist/cms-migrations.js.map +1 -1
  16. package/dist/cms.d.ts +132 -8
  17. package/dist/cms.d.ts.map +1 -1
  18. package/dist/cms.js +142 -6
  19. package/dist/cms.js.map +1 -1
  20. package/dist/duroxide-schema-migration.d.ts +19 -0
  21. package/dist/duroxide-schema-migration.d.ts.map +1 -0
  22. package/dist/duroxide-schema-migration.js +122 -0
  23. package/dist/duroxide-schema-migration.js.map +1 -0
  24. package/dist/facts-migrations.d.ts.map +1 -1
  25. package/dist/facts-migrations.js +923 -0
  26. package/dist/facts-migrations.js.map +1 -1
  27. package/dist/facts-store.d.ts +278 -28
  28. package/dist/facts-store.d.ts.map +1 -1
  29. package/dist/facts-store.js +262 -32
  30. package/dist/facts-store.js.map +1 -1
  31. package/dist/facts-tools.d.ts +8 -1
  32. package/dist/facts-tools.d.ts.map +1 -1
  33. package/dist/facts-tools.js +458 -25
  34. package/dist/facts-tools.js.map +1 -1
  35. package/dist/graph-store.d.ts +243 -0
  36. package/dist/graph-store.d.ts.map +1 -0
  37. package/dist/graph-store.js +63 -0
  38. package/dist/graph-store.js.map +1 -0
  39. package/dist/graph-tools.d.ts +47 -0
  40. package/dist/graph-tools.d.ts.map +1 -0
  41. package/dist/graph-tools.js +554 -0
  42. package/dist/graph-tools.js.map +1 -0
  43. package/dist/horizon-env.d.ts +61 -0
  44. package/dist/horizon-env.d.ts.map +1 -0
  45. package/dist/horizon-env.js +120 -0
  46. package/dist/horizon-env.js.map +1 -0
  47. package/dist/index.d.ts +15 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +10 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/inspect-tools.d.ts +2 -2
  52. package/dist/inspect-tools.d.ts.map +1 -1
  53. package/dist/inspect-tools.js +303 -6
  54. package/dist/inspect-tools.js.map +1 -1
  55. package/dist/knowledge-index.d.ts +33 -2
  56. package/dist/knowledge-index.d.ts.map +1 -1
  57. package/dist/knowledge-index.js +90 -19
  58. package/dist/knowledge-index.js.map +1 -1
  59. package/dist/managed-session.d.ts.map +1 -1
  60. package/dist/managed-session.js +61 -2
  61. package/dist/managed-session.js.map +1 -1
  62. package/dist/management-client.d.ts +81 -3
  63. package/dist/management-client.d.ts.map +1 -1
  64. package/dist/management-client.js +97 -20
  65. package/dist/management-client.js.map +1 -1
  66. package/dist/orchestration/agents.d.ts +4 -1
  67. package/dist/orchestration/agents.d.ts.map +1 -1
  68. package/dist/orchestration/agents.js +27 -4
  69. package/dist/orchestration/agents.js.map +1 -1
  70. package/dist/orchestration/index.d.ts +2 -2
  71. package/dist/orchestration/index.js +1 -1
  72. package/dist/orchestration/lifecycle.d.ts +3 -0
  73. package/dist/orchestration/lifecycle.d.ts.map +1 -1
  74. package/dist/orchestration/lifecycle.js +6 -1
  75. package/dist/orchestration/lifecycle.js.map +1 -1
  76. package/dist/orchestration/queue.d.ts.map +1 -1
  77. package/dist/orchestration/queue.js +10 -1
  78. package/dist/orchestration/queue.js.map +1 -1
  79. package/dist/orchestration/runtime.d.ts +1 -1
  80. package/dist/orchestration/state.d.ts +1 -0
  81. package/dist/orchestration/state.d.ts.map +1 -1
  82. package/dist/orchestration/state.js +1 -0
  83. package/dist/orchestration/state.js.map +1 -1
  84. package/dist/orchestration/turn.d.ts +2 -2
  85. package/dist/orchestration/turn.d.ts.map +1 -1
  86. package/dist/orchestration/turn.js +42 -12
  87. package/dist/orchestration/turn.js.map +1 -1
  88. package/dist/orchestration-registry.d.ts.map +1 -1
  89. package/dist/orchestration-registry.js +4 -2
  90. package/dist/orchestration-registry.js.map +1 -1
  91. package/dist/orchestration-version.d.ts +1 -1
  92. package/dist/orchestration-version.js +1 -1
  93. package/dist/orchestration.d.ts +2 -2
  94. package/dist/orchestration.js +1 -1
  95. package/dist/orchestration_1_0_46.d.ts +1 -1
  96. package/dist/orchestration_1_0_47.d.ts +1 -1
  97. package/dist/orchestration_1_0_48.d.ts +1 -1
  98. package/dist/orchestration_1_0_49.d.ts +1 -1
  99. package/dist/orchestration_1_0_50.d.ts +1 -1
  100. package/dist/orchestration_1_0_52/agents.d.ts +38 -0
  101. package/dist/orchestration_1_0_52/agents.d.ts.map +1 -0
  102. package/dist/orchestration_1_0_52/agents.js +735 -0
  103. package/dist/orchestration_1_0_52/agents.js.map +1 -0
  104. package/dist/orchestration_1_0_52/index.d.ts +24 -0
  105. package/dist/orchestration_1_0_52/index.d.ts.map +1 -0
  106. package/dist/orchestration_1_0_52/index.js +13 -0
  107. package/dist/orchestration_1_0_52/index.js.map +1 -0
  108. package/dist/orchestration_1_0_52/lifecycle.d.ts +38 -0
  109. package/dist/orchestration_1_0_52/lifecycle.d.ts.map +1 -0
  110. package/dist/orchestration_1_0_52/lifecycle.js +504 -0
  111. package/dist/orchestration_1_0_52/lifecycle.js.map +1 -0
  112. package/dist/orchestration_1_0_52/queue.d.ts +7 -0
  113. package/dist/orchestration_1_0_52/queue.d.ts.map +1 -0
  114. package/dist/orchestration_1_0_52/queue.js +635 -0
  115. package/dist/orchestration_1_0_52/queue.js.map +1 -0
  116. package/dist/orchestration_1_0_52/runtime.d.ts +29 -0
  117. package/dist/orchestration_1_0_52/runtime.d.ts.map +1 -0
  118. package/dist/orchestration_1_0_52/runtime.js +190 -0
  119. package/dist/orchestration_1_0_52/runtime.js.map +1 -0
  120. package/dist/orchestration_1_0_52/state.d.ts +124 -0
  121. package/dist/orchestration_1_0_52/state.d.ts.map +1 -0
  122. package/dist/orchestration_1_0_52/state.js +104 -0
  123. package/dist/orchestration_1_0_52/state.js.map +1 -0
  124. package/dist/orchestration_1_0_52/turn.d.ts +6 -0
  125. package/dist/orchestration_1_0_52/turn.d.ts.map +1 -0
  126. package/dist/orchestration_1_0_52/turn.js +834 -0
  127. package/dist/orchestration_1_0_52/turn.js.map +1 -0
  128. package/dist/orchestration_1_0_52/utils.d.ts +22 -0
  129. package/dist/orchestration_1_0_52/utils.d.ts.map +1 -0
  130. package/dist/orchestration_1_0_52/utils.js +226 -0
  131. package/dist/orchestration_1_0_52/utils.js.map +1 -0
  132. package/dist/resourcemgr-tools.d.ts +2 -2
  133. package/dist/resourcemgr-tools.d.ts.map +1 -1
  134. package/dist/resourcemgr-tools.js +1 -1
  135. package/dist/resourcemgr-tools.js.map +1 -1
  136. package/dist/session-dumper.d.ts +2 -2
  137. package/dist/session-dumper.d.ts.map +1 -1
  138. package/dist/session-dumper.js.map +1 -1
  139. package/dist/session-manager.d.ts +8 -2
  140. package/dist/session-manager.d.ts.map +1 -1
  141. package/dist/session-manager.js +86 -4
  142. package/dist/session-manager.js.map +1 -1
  143. package/dist/session-messages.d.ts +2 -2
  144. package/dist/session-messages.d.ts.map +1 -1
  145. package/dist/session-messages.js +0 -6
  146. package/dist/session-messages.js.map +1 -1
  147. package/dist/session-proxy.d.ts +47 -2
  148. package/dist/session-proxy.d.ts.map +1 -1
  149. package/dist/session-proxy.js +79 -59
  150. package/dist/session-proxy.js.map +1 -1
  151. package/dist/storage-config.d.ts +62 -0
  152. package/dist/storage-config.d.ts.map +1 -0
  153. package/dist/storage-config.js +138 -0
  154. package/dist/storage-config.js.map +1 -0
  155. package/dist/storage-providers.d.ts +25 -0
  156. package/dist/storage-providers.d.ts.map +1 -0
  157. package/dist/storage-providers.js +150 -0
  158. package/dist/storage-providers.js.map +1 -0
  159. package/dist/sweeper-tools.d.ts +2 -2
  160. package/dist/sweeper-tools.d.ts.map +1 -1
  161. package/dist/system-agents.d.ts +2 -2
  162. package/dist/system-agents.d.ts.map +1 -1
  163. package/dist/types.d.ts +103 -2
  164. package/dist/types.d.ts.map +1 -1
  165. package/dist/types.js.map +1 -1
  166. package/dist/worker.d.ts +5 -4
  167. package/dist/worker.d.ts.map +1 -1
  168. package/dist/worker.js +108 -33
  169. package/dist/worker.js.map +1 -1
  170. package/package.json +3 -1
  171. package/plugins/mgmt/agents/agent-tuner.agent.md +56 -4
  172. package/plugins/mgmt/agents/facts-manager.agent.md +81 -3
  173. package/plugins/mgmt/skills/graph-debug/SKILL.md +133 -0
@@ -7,6 +7,38 @@
7
7
  * - session cleanup when a session is deleted
8
8
  */
9
9
  import { runFactsMigrations } from "./facts-migrator.js";
10
+ /**
11
+ * Thrown when an enhanced/graph method is called on a store that does not
12
+ * support it. Providers don't grow throwing stubs (Liskov / ISP — 07 D1); this
13
+ * is retained only for callers that bypass the `isEnhancedFactStore` guard and
14
+ * hard-cast a base store.
15
+ */
16
+ export class EnhancedFactsUnsupportedError extends Error {
17
+ constructor(method) {
18
+ super(`${method} is not supported by this fact store. It is a base FactStore ` +
19
+ `(not an EnhancedFactStore). Guard with isEnhancedFactStore(store) before calling.`);
20
+ this.name = "EnhancedFactsUnsupportedError";
21
+ }
22
+ }
23
+ /**
24
+ * Structural type guard: is this store an `EnhancedFactStore` (search + embedder)
25
+ * rather than a plain `FactStore`? The runtime asks this once at worker boot and
26
+ * threads the answer through — it never sniffs per turn. Graph presence is a
27
+ * SEPARATE question (`!!graphStore`), not derived from the fact store.
28
+ */
29
+ export function isEnhancedFactStore(store) {
30
+ const s = store;
31
+ return typeof s.searchFacts === "function"
32
+ && typeof s.similarFacts === "function"
33
+ && typeof s.configureEmbedder === "function"
34
+ && typeof s.startEmbedder === "function"
35
+ && typeof s.stopEmbedder === "function"
36
+ && typeof s.embedderStatus === "function"
37
+ && typeof s.capabilities === "object"
38
+ && s.capabilities !== null
39
+ && typeof s.capabilities.search === "boolean"
40
+ && typeof s.capabilities.embedder === "boolean";
41
+ }
10
42
  const DEFAULT_SCHEMA = "pilotswarm_facts";
11
43
  function sqlForSchema(schema) {
12
44
  return {
@@ -19,6 +51,11 @@ function sqlForSchema(schema) {
19
51
  getSessionFactsStats: `${schema}.facts_get_session_facts_stats`,
20
52
  getFactsStatsForSessions: `${schema}.facts_get_facts_stats_for_sessions`,
21
53
  getSharedFactsStats: `${schema}.facts_get_shared_facts_stats`,
54
+ readUncrawledFacts: `${schema}.facts_read_uncrawled`,
55
+ markFactsCrawled: `${schema}.facts_mark_crawled`,
56
+ purgeExpiredFacts: `${schema}.facts_purge_expired`,
57
+ factsTombstoneStats: `${schema}.facts_tombstone_stats`,
58
+ forcePurgeFacts: `${schema}.facts_force_purge`,
22
59
  },
23
60
  };
24
61
  }
@@ -38,12 +75,120 @@ function normalizeLikePattern(pattern) {
38
75
  return pattern.replaceAll("*", "%");
39
76
  return pattern;
40
77
  }
78
+ // Specifier for the OPTIONAL horizon provider peer. The `: string` annotation is
79
+ // load-bearing: it widens the type away from a string literal so TypeScript does
80
+ // NOT eagerly type-resolve `import(HORIZON_STORE_PACKAGE)` at compile time.
81
+ // Resolving it would pull @pilotswarm/horizon-store's emitted .d.ts into this
82
+ // compile, which re-imports `pilotswarm-sdk` and cycles back onto THIS package's
83
+ // own dist/ — a TS5055 self-overwrite once dist/ exists. The peer is loaded
84
+ // purely structurally at runtime (`mod` is `any`), so nothing is lost. Do NOT
85
+ // inline this back to a string literal.
86
+ const HORIZON_STORE_PACKAGE = "@pilotswarm/horizon-store";
41
87
  export async function createFactStoreForUrl(storeUrl, schema, opts = {}) {
42
- if (storeUrl.startsWith("postgres://") || storeUrl.startsWith("postgresql://")) {
43
- return PgFactStore.create(storeUrl, schema, opts);
88
+ if (!(storeUrl.startsWith("postgres://") || storeUrl.startsWith("postgresql://"))) {
89
+ throw new Error("PilotSwarm facts require a PostgreSQL store. " +
90
+ `Received unsupported store URL: ${storeUrl}`);
91
+ }
92
+ if (opts.provider === "horizon") {
93
+ // Guarded dynamic import: the SDK builds/runs without the provider
94
+ // package. A missing package is a clear, actionable error ONLY when the
95
+ // horizon provider is explicitly selected.
96
+ let mod;
97
+ try {
98
+ mod = await import(HORIZON_STORE_PACKAGE);
99
+ }
100
+ catch (err) {
101
+ throw new Error("factsProvider 'horizon' requires the @pilotswarm/horizon-store package, " +
102
+ `which could not be loaded: ${err?.message || String(err)}. ` +
103
+ "Install it, or unset enhancedFactsDatabaseUrl / factsProvider to use the default PgFactStore.");
104
+ }
105
+ const HorizonDBFactStore = mod.HorizonDBFactStore;
106
+ if (!HorizonDBFactStore?.create) {
107
+ throw new Error("@pilotswarm/horizon-store did not export HorizonDBFactStore.create");
108
+ }
109
+ // Do NOT forward the global `useManagedIdentity` flag into the horizon
110
+ // provider. MI is the auth axis for the duroxide/CMS/PgFactStore layer;
111
+ // the horizon enhanced-facts store is a SEPARATE URL that carries its
112
+ // own embedded credentials and does not support AAD token auth yet
113
+ // (it would reject the flag, hard-crashing a valid global-MI + horizon
114
+ // deployment). Warn so the operator knows the horizon URL must carry creds.
115
+ if (opts.useManagedIdentity) {
116
+ console.warn("[facts] useManagedIdentity is set globally but the horizon facts provider does not " +
117
+ "support managed identity; the enhancedFactsDatabaseUrl must carry embedded credentials.");
118
+ }
119
+ return HorizonDBFactStore.create({
120
+ connectionString: storeUrl,
121
+ schema,
122
+ graphName: schema,
123
+ embedding: opts.embedding,
124
+ embeddingDim: opts.embedding?.dim,
125
+ });
44
126
  }
45
- throw new Error("PilotSwarm facts require a PostgreSQL store. " +
46
- `Received unsupported store URL: ${storeUrl}`);
127
+ return PgFactStore.create(storeUrl, schema, {
128
+ useManagedIdentity: opts.useManagedIdentity,
129
+ aadUser: opts.aadUser,
130
+ });
131
+ }
132
+ /**
133
+ * Construct an optional `GraphStore` provider (enhancedfactstore 07 D2/P3).
134
+ *
135
+ * SYMMETRIC peer of `createFactStoreForUrl` — its own URL, its own provider, no
136
+ * `factStore` argument and no instance reuse. Returns `undefined` when no graph
137
+ * URL is configured (⇒ no graph store, no graph tools). The only provider today
138
+ * is `@pilotswarm/horizon-store`'s AGE-backed `HorizonDBGraphStore`, loaded via a
139
+ * guarded dynamic import so the SDK builds/runs without it.
140
+ */
141
+ export async function createGraphStoreForUrl(graphUrl, schema, opts = {}) {
142
+ if (!graphUrl)
143
+ return undefined;
144
+ if (!(graphUrl.startsWith("postgres://") || graphUrl.startsWith("postgresql://"))) {
145
+ throw new Error("PilotSwarm graph store requires a PostgreSQL (Apache AGE) URL. " +
146
+ `Received unsupported graph URL: ${graphUrl}`);
147
+ }
148
+ let mod;
149
+ try {
150
+ mod = await import(HORIZON_STORE_PACKAGE);
151
+ }
152
+ catch (err) {
153
+ throw new Error("graphDatabaseUrl requires the @pilotswarm/horizon-store package, " +
154
+ `which could not be loaded: ${err?.message || String(err)}. ` +
155
+ "Install it, or unset graphDatabaseUrl to run without a graph store.");
156
+ }
157
+ const HorizonDBGraphStore = mod.HorizonDBGraphStore;
158
+ if (!HorizonDBGraphStore?.create) {
159
+ throw new Error("@pilotswarm/horizon-store did not export HorizonDBGraphStore.create");
160
+ }
161
+ // As with the facts provider: never forward the global MI flag into the
162
+ // horizon graph store. The graph URL carries its own credentials; horizon
163
+ // does not support AAD token auth and would reject the flag.
164
+ if (opts.useManagedIdentity) {
165
+ console.warn("[graph] useManagedIdentity is set globally but the horizon graph provider does not " +
166
+ "support managed identity; the graphDatabaseUrl must carry embedded credentials.");
167
+ }
168
+ return HorizonDBGraphStore.create({
169
+ connectionString: graphUrl,
170
+ schema,
171
+ graphName: schema,
172
+ registrySchema: opts.registrySchema,
173
+ namespaceCacheTtlMs: opts.namespaceCacheTtlMs,
174
+ });
175
+ }
176
+ /**
177
+ * Resolve where the facts store physically lives + which provider serves it,
178
+ * shared by the worker, client, and management-client so they cannot drift
179
+ * (enhancedfactstore 07 P3). Resolution is most-specific-first:
180
+ * url = enhancedFactsDatabaseUrl ?? cmsFactsDatabaseUrl ?? store
181
+ * provider = factsProvider ?? (enhancedFactsDatabaseUrl ? "horizon" : "pg")
182
+ * schema = horizon ? (enhancedFactsSchema ?? factsSchema) : factsSchema
183
+ */
184
+ export function resolveFactsTarget(cfg) {
185
+ const cmsFactsUrl = cfg.cmsFactsDatabaseUrl ?? cfg.store;
186
+ const url = cfg.enhancedFactsDatabaseUrl ?? cmsFactsUrl;
187
+ const provider = cfg.factsProvider ?? (cfg.enhancedFactsDatabaseUrl ? "horizon" : "pg");
188
+ const schema = provider === "horizon"
189
+ ? (cfg.enhancedFactsSchema ?? cfg.factsSchema)
190
+ : cfg.factsSchema;
191
+ return { url, provider, schema };
47
192
  }
48
193
  export class PgFactStore {
49
194
  pool;
@@ -80,23 +225,29 @@ export class PgFactStore {
80
225
  this.initialized = true;
81
226
  }
82
227
  async storeFact(input) {
83
- const shared = input.shared === true;
84
- const scopeKey = computeScopeKey(input.key, shared, input.sessionId);
85
- await this.pool.query(`SELECT ${this.sql.fn.storeFact}($1, $2, $3, $4, $5, $6, $7, $8)`, [
86
- scopeKey,
87
- input.key,
88
- JSON.stringify(input.value),
89
- input.agentId ?? null,
90
- input.sessionId ?? null,
91
- shared,
92
- !shared,
93
- input.tags ?? [],
94
- ]);
95
- return {
96
- key: input.key,
97
- shared,
98
- stored: true,
228
+ const inputs = Array.isArray(input) ? input : [input];
229
+ if (inputs.length === 0)
230
+ return { stored: 0, facts: [] };
231
+ const facts = inputs.map((input) => {
232
+ const shared = input.shared === true;
233
+ return {
234
+ scopeKey: computeScopeKey(input.key, shared, input.sessionId),
235
+ key: input.key,
236
+ value: input.value,
237
+ agentId: input.agentId ?? null,
238
+ sessionId: input.sessionId ?? null,
239
+ shared,
240
+ transient: !shared,
241
+ tags: input.tags ?? [],
242
+ };
243
+ });
244
+ await this.pool.query(`SELECT ${this.sql.fn.storeFact}($1::jsonb)`, [JSON.stringify(facts)]);
245
+ const storedFacts = facts.map((fact) => ({ key: fact.key, shared: fact.shared, stored: true }));
246
+ const result = {
247
+ stored: facts.length,
248
+ facts: storedFacts,
99
249
  };
250
+ return Array.isArray(input) ? result : result.facts[0];
100
251
  }
101
252
  async readFacts(query, access) {
102
253
  const readerSessionId = access?.readerSessionId ?? null;
@@ -105,7 +256,11 @@ export class PgFactStore {
105
256
  const scope = query.scope ?? "accessible";
106
257
  const keyPattern = normalizeLikePattern(query.keyPattern) ?? null;
107
258
  const maxRows = query.limit ?? 50;
108
- const { rows } = await this.pool.query(`SELECT * FROM ${this.sql.fn.readFacts}($1, $2, $3, $4, $5, $6, $7, $8, $9)`, [
259
+ // Distinguish "no scopeKeys filter" (undefined null) from "read exactly
260
+ // these facts" (an array — even empty → narrows). An empty array must
261
+ // return nothing, never widen the read (governance: scopeKeys only narrows).
262
+ const scopeKeys = query.scopeKeys === undefined ? null : query.scopeKeys;
263
+ const { rows } = await this.pool.query(`SELECT * FROM ${this.sql.fn.readFacts}($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`, [
109
264
  scope,
110
265
  readerSessionId,
111
266
  grantedSessionIds.length > 0 ? grantedSessionIds : null,
@@ -115,25 +270,25 @@ export class PgFactStore {
115
270
  query.agentId ?? null,
116
271
  maxRows,
117
272
  unrestricted,
273
+ scopeKeys,
118
274
  ]);
119
275
  return {
120
276
  count: rows.length,
121
- facts: rows.map((row) => ({
122
- key: row.key,
123
- value: row.value,
124
- agentId: row.agent_id ?? null,
125
- sessionId: row.session_id ?? null,
126
- shared: row.shared === true,
127
- tags: Array.isArray(row.tags) ? row.tags : [],
128
- createdAt: row.created_at,
129
- updatedAt: row.updated_at,
130
- })),
277
+ facts: rows.map(mapFactRow),
131
278
  };
132
279
  }
133
280
  async deleteFact(input) {
281
+ if (input.pattern === true) {
282
+ const keyPattern = normalizeLikePattern(input.key);
283
+ if (!keyPattern)
284
+ throw new Error("deleteFact pattern mode requires key");
285
+ const scope = input.scope ?? (input.shared === true ? "shared" : "session");
286
+ const { rows } = await this.pool.query(`SELECT ${this.sql.fn.deleteFact}($1, $2, $3, $4, $5) AS deleted_count`, [keyPattern, true, scope, input.sessionId ?? null, input.unrestricted === true]);
287
+ return { keyPattern, scope, deleted: Number(rows[0]?.deleted_count) || 0 };
288
+ }
134
289
  const shared = input.shared === true;
135
290
  const scopeKey = computeScopeKey(input.key, shared, input.sessionId);
136
- const { rows } = await this.pool.query(`SELECT ${this.sql.fn.deleteFact}($1) AS deleted_count`, [scopeKey]);
291
+ const { rows } = await this.pool.query(`SELECT ${this.sql.fn.deleteFact}($1, $2, $3, $4, $5) AS deleted_count`, [scopeKey, false, null, null, false]);
137
292
  return {
138
293
  key: input.key,
139
294
  shared,
@@ -158,6 +313,55 @@ export class PgFactStore {
158
313
  const { rows } = await this.pool.query(`SELECT * FROM ${this.sql.fn.getSharedFactsStats}()`);
159
314
  return rows.map(rowToFactsStatsRow);
160
315
  }
316
+ async readUncrawledFacts(opts = {}) {
317
+ // Literal key prefix (NOT a LIKE pattern) — the proc uses starts_with so
318
+ // any `_` / `%` in the namespace are matched literally, not as wildcards.
319
+ const nsPrefix = opts.namespace ?? null;
320
+ const limit = opts.limit ?? 20;
321
+ const { rows } = await this.pool.query(`SELECT * FROM ${this.sql.fn.readUncrawledFacts}($1, $2)`, [nsPrefix, limit]);
322
+ return {
323
+ count: rows.length,
324
+ facts: rows.map(mapFactRow),
325
+ };
326
+ }
327
+ async markFactsCrawled(stamps) {
328
+ // Coerce etag like the SQL does (it accepts numeric strings): LLM tool
329
+ // JSON frequently serializes numbers as strings. Reject only genuinely
330
+ // missing / non-numeric receipts so harvester bugs still surface loudly.
331
+ const normalized = stamps.map((s) => {
332
+ const etag = Number(s?.etag);
333
+ if (!s || typeof s.scopeKey !== "string" || !Number.isInteger(etag) || etag <= 0) {
334
+ throw new Error("markFactsCrawled: every stamp requires { scopeKey, etag } " +
335
+ "(the receipt returned by readUncrawledFacts).");
336
+ }
337
+ return { scopeKey: s.scopeKey, etag };
338
+ });
339
+ if (normalized.length === 0)
340
+ return { marked: 0, skipped: 0 };
341
+ const { rows } = await this.pool.query(`SELECT * FROM ${this.sql.fn.markFactsCrawled}($1::jsonb)`, [JSON.stringify(normalized)]);
342
+ return {
343
+ marked: Number(rows[0]?.marked) || 0,
344
+ skipped: Number(rows[0]?.skipped) || 0,
345
+ };
346
+ }
347
+ async purgeExpiredFacts(ttlSeconds, limit = 1000) {
348
+ const { rows } = await this.pool.query(`SELECT ${this.sql.fn.purgeExpiredFacts}($1, $2) AS purged`, [Math.max(0, Math.floor(ttlSeconds)), Math.max(1, Math.floor(limit))]);
349
+ return Number(rows[0]?.purged) || 0;
350
+ }
351
+ async getFactsTombstoneStats(ttlSeconds = 21_600) {
352
+ const { rows } = await this.pool.query(`SELECT * FROM ${this.sql.fn.factsTombstoneStats}($1)`, [Math.max(0, Math.floor(ttlSeconds))]);
353
+ return mapTombstoneStatsRow(rows[0] ?? {});
354
+ }
355
+ async forcePurgeFacts(input) {
356
+ const cutoff = input.cutoff instanceof Date ? input.cutoff : new Date(input.cutoff);
357
+ const { rows } = await this.pool.query(`SELECT ${this.sql.fn.forcePurgeFacts}($1, $2, $3, $4) AS purged`, [
358
+ cutoff,
359
+ input.onlyUnreconciled === true,
360
+ input.keyPrefix ?? null,
361
+ Math.max(1, Math.floor(input.limit ?? 1000)),
362
+ ]);
363
+ return Number(rows[0]?.purged) || 0;
364
+ }
161
365
  async close() {
162
366
  try {
163
367
  await this.pool.end();
@@ -165,6 +369,32 @@ export class PgFactStore {
165
369
  catch { }
166
370
  }
167
371
  }
372
+ /** Map a PG facts row to a FactRecord (shared by readFacts + readUncrawledFacts). */
373
+ function mapFactRow(row) {
374
+ return {
375
+ scopeKey: row.scope_key,
376
+ key: row.key,
377
+ value: row.value,
378
+ agentId: row.agent_id ?? null,
379
+ sessionId: row.session_id ?? null,
380
+ shared: row.shared === true,
381
+ tags: Array.isArray(row.tags) ? row.tags : [],
382
+ createdAt: row.created_at,
383
+ updatedAt: row.updated_at,
384
+ deletedAt: row.deleted_at ? new Date(row.deleted_at) : null,
385
+ etag: Number(row.etag ?? 0),
386
+ };
387
+ }
388
+ function mapTombstoneStatsRow(row) {
389
+ const age = row.oldest_unreconciled_age_seconds;
390
+ return {
391
+ pendingTotal: Number(row.pending_total ?? 0),
392
+ unreconciled: Number(row.unreconciled ?? 0),
393
+ ttlBlocked: Number(row.ttl_blocked ?? 0),
394
+ oldestUnreconciledAgeSeconds: age == null ? null : Number(age),
395
+ reconciledUnswept: Number(row.reconciled_unswept ?? 0),
396
+ };
397
+ }
168
398
  /** Map a PG row to FactsStatsRow. Used by all three facts-stats procs. */
169
399
  function rowToFactsStatsRow(row) {
170
400
  const ns = String(row.namespace ?? "(other)");
@@ -1 +1 @@
1
- {"version":3,"file":"facts-store.js","sourceRoot":"","sources":["../src/facts-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facts-store.js","sourceRoot":"","sources":["../src/facts-store.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from "@github/copilot-sdk";
2
- import type { FactStore } from "./facts-store.js";
2
+ import type { EnhancedFactStore, FactStore } from "./facts-store.js";
3
3
  export declare function createFactTools(opts: {
4
4
  factStore: FactStore;
5
5
  getDescendantSessionIds?: (sessionId: string) => Promise<string[]>;
@@ -18,5 +18,12 @@ export declare function createFactTools(opts: {
18
18
  sourceSessionId: string | null;
19
19
  agentId: string | null;
20
20
  }) => Promise<void>;
21
+ /**
22
+ * When the store is an EnhancedFactStore (search capability), the search
23
+ * tools (`facts_search`, `facts_similar`) and the skills-scoped
24
+ * `search_skills` pull tool are appended (enhancedfactstore 07 P4/§1.6).
25
+ * `search_skills` is omitted for the facts-manager (it owns the namespace).
26
+ */
27
+ enhancedFactStore?: EnhancedFactStore;
21
28
  }): Tool<any>[];
22
29
  //# sourceMappingURL=facts-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"facts-tools.d.ts","sourceRoot":"","sources":["../src/facts-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAgDlD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,sEAAsE;IACtE,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAiPd"}
1
+ {"version":3,"file":"facts-tools.d.ts","sourceRoot":"","sources":["../src/facts-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAuFrE,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,sEAAsE;IACtE,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7H;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACzC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CA6oBd"}