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
@@ -0,0 +1,138 @@
1
+ export const DEFAULT_RUNTIME_STORAGE_PROVIDER = "postgres";
2
+ export const DEFAULT_DUROXIDE_STORAGE_PROVIDER = "postgres";
3
+ export const DEFAULT_DUROXIDE_SCHEMA = "ps_duroxide";
4
+ export const DEFAULT_CMS_SCHEMA = "copilot_sessions";
5
+ export const DEFAULT_FACTS_SCHEMA = "pilotswarm_facts";
6
+ export const DEFAULT_HORIZON_FACTS_SCHEMA = "horizon_facts";
7
+ const TRUE_VALUES = new Set(["1", "true", "yes", "on"]);
8
+ function trimmed(value) {
9
+ const t = value?.trim();
10
+ return t ? t : undefined;
11
+ }
12
+ function first(...values) {
13
+ for (const value of values) {
14
+ const t = trimmed(value);
15
+ if (t)
16
+ return t;
17
+ }
18
+ return undefined;
19
+ }
20
+ function boolFromEnv(value) {
21
+ const t = trimmed(value)?.toLowerCase();
22
+ if (t === undefined)
23
+ return undefined;
24
+ return TRUE_VALUES.has(t);
25
+ }
26
+ function parseNonNegativeNumber(value, name) {
27
+ const t = trimmed(value);
28
+ if (t === undefined)
29
+ return undefined;
30
+ const parsed = Number(t);
31
+ if (!Number.isFinite(parsed) || parsed < 0) {
32
+ throw new Error(`${name} must be a non-negative number, got ${JSON.stringify(t)}`);
33
+ }
34
+ return parsed;
35
+ }
36
+ function embeddingFromEnv(env, prefix) {
37
+ const stem = prefix === "PILOTSWARM" ? "PILOTSWARM_EMBED" : "HORIZON_EMBED";
38
+ const url = trimmed(env[`${stem}_URL`]);
39
+ const model = trimmed(env[`${stem}_MODEL`]);
40
+ const dimRaw = trimmed(env[`${stem}_DIM`]);
41
+ const dim = Number.parseInt(dimRaw ?? "", 10);
42
+ if (!url || !model || !Number.isFinite(dim) || dim <= 0)
43
+ return undefined;
44
+ const embedding = { url, model, dim };
45
+ const apiKey = trimmed(env[`${stem}_API_KEY`]);
46
+ if (apiKey)
47
+ embedding.apiKey = apiKey;
48
+ const apiKeyHeader = trimmed(env[`${stem}_API_KEY_HEADER`]);
49
+ if (apiKeyHeader)
50
+ embedding.apiKeyHeader = apiKeyHeader;
51
+ const bearerRaw = trimmed(env[`${stem}_BEARER`])?.toLowerCase();
52
+ if (bearerRaw !== undefined) {
53
+ embedding.bearer = TRUE_VALUES.has(bearerRaw);
54
+ }
55
+ else if (apiKeyHeader?.toLowerCase() === "authorization") {
56
+ embedding.bearer = true;
57
+ }
58
+ return embedding;
59
+ }
60
+ function normalizeRuntimeProvider(raw) {
61
+ if (!raw)
62
+ return undefined;
63
+ if (raw === "pg")
64
+ return "postgres";
65
+ if (raw === "horizon")
66
+ return "horizondb";
67
+ return raw;
68
+ }
69
+ export function resolveStorageConfig(input = {}) {
70
+ const env = input.env ?? process.env;
71
+ const options = input.options ?? {};
72
+ if (options.storageConfig)
73
+ return options.storageConfig;
74
+ const databaseUrl = first(options.store, env.DATABASE_URL);
75
+ if (!databaseUrl) {
76
+ throw new Error("Storage config requires a store URL via options.store or DATABASE_URL.");
77
+ }
78
+ const explicitRuntimeProvider = normalizeRuntimeProvider(first(env.PILOTSWARM_RUNTIME_PROVIDER));
79
+ const legacySelectsHorizon = !explicitRuntimeProvider && (options.factsProvider === "horizon"
80
+ || options.factsProvider === "horizondb"
81
+ || !!trimmed(options.enhancedFactsDatabaseUrl)
82
+ || !!trimmed(env.HORIZON_DATABASE_URL));
83
+ const runtimeProvider = normalizeRuntimeProvider(first(explicitRuntimeProvider, legacySelectsHorizon ? "horizondb" : undefined, DEFAULT_RUNTIME_STORAGE_PROVIDER)) ?? DEFAULT_RUNTIME_STORAGE_PROVIDER;
84
+ const useManagedIdentity = options.useManagedIdentity
85
+ ?? boolFromEnv(env.PILOTSWARM_USE_MANAGED_IDENTITY)
86
+ ?? false;
87
+ const aadDbUser = first(options.aadDbUser, env.PILOTSWARM_AAD_DB_USER, env.AAD_DB_USER);
88
+ const runtimeUrl = first(env.PILOTSWARM_RUNTIME_URL, databaseUrl);
89
+ const sessionCatalogUrl = first(options.cmsFactsDatabaseUrl, env.PILOTSWARM_SESSION_CATALOG_URL, env.PILOTSWARM_RUNTIME_SESSION_CATALOG_URL);
90
+ const explicitFactStoreUrl = first(options.enhancedFactsDatabaseUrl, env.PILOTSWARM_FACTSTORE_URL, env.PILOTSWARM_RUNTIME_FACTS_URL, runtimeProvider === "horizondb" ? env.HORIZON_DATABASE_URL : undefined);
91
+ const factStoreUrl = explicitFactStoreUrl ?? first(options.cmsFactsDatabaseUrl);
92
+ const graphUrl = first(options.graphDatabaseUrl, env.PILOTSWARM_GRAPH_URL, env.HORIZON_GRAPH_DATABASE_URL);
93
+ const graphEnabled = options.graphDatabaseUrl != null
94
+ || graphUrl != null
95
+ || boolFromEnv(env.PILOTSWARM_GRAPH_ENABLED) === true;
96
+ const embedding = options.horizonEmbed
97
+ ?? embeddingFromEnv(env, "PILOTSWARM")
98
+ ?? (runtimeProvider === "horizondb" ? embeddingFromEnv(env, "HORIZON") : undefined);
99
+ const runtimeFactsSchema = runtimeProvider === "horizondb"
100
+ ? first(options.enhancedFactsSchema, options.factsSchema, env.PILOTSWARM_FACTS_SCHEMA, env.HORIZON_FACTS_SCHEMA, DEFAULT_HORIZON_FACTS_SCHEMA)
101
+ : first(options.factsSchema, env.PILOTSWARM_FACTS_SCHEMA, DEFAULT_FACTS_SCHEMA);
102
+ const runtime = {
103
+ provider: runtimeProvider,
104
+ url: runtimeUrl,
105
+ ...(sessionCatalogUrl ? { sessionCatalogUrl } : {}),
106
+ ...(factStoreUrl ? { factStoreUrl } : {}),
107
+ cmsSchema: first(options.cmsSchema, env.PILOTSWARM_CMS_SCHEMA, DEFAULT_CMS_SCHEMA),
108
+ factsSchema: runtimeFactsSchema,
109
+ ...(embedding ? { embedding } : {}),
110
+ ...(graphEnabled ? {
111
+ graph: {
112
+ enabled: true,
113
+ ...(graphUrl ? { url: graphUrl } : {}),
114
+ schema: first(options.graphSchema, env.PILOTSWARM_GRAPH_SCHEMA, env.HORIZON_GRAPH_SCHEMA, "horizon_graph"),
115
+ ...(first(options.graphRegistrySchema, env.PILOTSWARM_GRAPH_REGISTRY_SCHEMA, env.HORIZON_GRAPH_REGISTRY_SCHEMA)
116
+ ? { registrySchema: first(options.graphRegistrySchema, env.PILOTSWARM_GRAPH_REGISTRY_SCHEMA, env.HORIZON_GRAPH_REGISTRY_SCHEMA) }
117
+ : {}),
118
+ ...(options.graphNamespaceCacheTtlMs != null
119
+ ? { namespaceCacheTtlMs: options.graphNamespaceCacheTtlMs }
120
+ : (() => {
121
+ const parsed = parseNonNegativeNumber(first(env.PILOTSWARM_GRAPH_NAMESPACE_CACHE_TTL_MS, env.HORIZON_NAMESPACE_CACHE_TTL_MS), "PILOTSWARM_GRAPH_NAMESPACE_CACHE_TTL_MS");
122
+ return parsed != null ? { namespaceCacheTtlMs: parsed } : {};
123
+ })()),
124
+ },
125
+ } : {}),
126
+ useManagedIdentity,
127
+ ...(aadDbUser ? { aadDbUser } : {}),
128
+ };
129
+ const duroxide = {
130
+ provider: first(env.PILOTSWARM_DUROXIDE_PROVIDER, DEFAULT_DUROXIDE_STORAGE_PROVIDER),
131
+ url: first(env.PILOTSWARM_DUROXIDE_URL, runtime.url),
132
+ schema: first(options.duroxideSchema, env.PILOTSWARM_DUROXIDE_SCHEMA, DEFAULT_DUROXIDE_SCHEMA),
133
+ useManagedIdentity,
134
+ ...(aadDbUser ? { aadDbUser } : {}),
135
+ };
136
+ return { runtime, duroxide };
137
+ }
138
+ //# sourceMappingURL=storage-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-config.js","sourceRoot":"","sources":["../src/storage-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type SessionCatalog } from "./cms.js";
2
+ import { type EnhancedFactStore, type FactStore } from "./facts-store.js";
3
+ import type { GraphStore } from "./graph-store.js";
4
+ import { type DuroxideStorageConfig, type RuntimeStorageConfig } from "./storage-config.js";
5
+ export interface RuntimeStorageProvider {
6
+ id: string;
7
+ capabilities: {
8
+ enhancedFactStore?: true;
9
+ graphStore?: true;
10
+ embeddingSupport?: true;
11
+ };
12
+ createSessionCatalog(args: RuntimeStorageConfig): Promise<SessionCatalog>;
13
+ createFactStore(args: RuntimeStorageConfig): Promise<FactStore>;
14
+ getEnhancedFactStore?(store: FactStore): EnhancedFactStore | undefined;
15
+ createGraphStore?(args: RuntimeStorageConfig): Promise<GraphStore | undefined>;
16
+ }
17
+ export interface DuroxideStorageProvider {
18
+ id: string;
19
+ createDuroxideProvider(args: DuroxideStorageConfig): Promise<unknown>;
20
+ }
21
+ export declare const runtimeStorageProviders: Record<string, RuntimeStorageProvider>;
22
+ export declare const duroxideStorageProviders: Record<string, DuroxideStorageProvider>;
23
+ export declare function getRuntimeStorageProvider(id: string): RuntimeStorageProvider;
24
+ export declare function getDuroxideStorageProvider(id: string): DuroxideStorageProvider;
25
+ //# sourceMappingURL=storage-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-providers.d.ts","sourceRoot":"","sources":["../src/storage-providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAIH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAA2B,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAKrH,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE;QACV,iBAAiB,CAAC,EAAE,IAAI,CAAC;QACzB,UAAU,CAAC,EAAE,IAAI,CAAC;QAClB,gBAAgB,CAAC,EAAE,IAAI,CAAC;KAC3B,CAAC;IACF,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1E,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,oBAAoB,CAAC,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACvE,gBAAgB,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,uBAAuB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAkID,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAG1E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAE5E,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,CAM5E;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,CAM9E"}
@@ -0,0 +1,150 @@
1
+ import { createRequire } from "node:module";
2
+ import { PgSessionCatalog } from "./cms.js";
3
+ import { createFactStoreForUrl, createGraphStoreForUrl, isEnhancedFactStore, } from "./facts-store.js";
4
+ import { createDuroxidePostgresProvider } from "./duroxide-provider-factory.js";
5
+ import { DEFAULT_DUROXIDE_SCHEMA } from "./storage-config.js";
6
+ const require = createRequire(import.meta.url);
7
+ const { PostgresProvider } = require("duroxide");
8
+ function assertPostgresUrl(url, label) {
9
+ if (!(url.startsWith("postgres://") || url.startsWith("postgresql://"))) {
10
+ throw new Error(`${label} requires a PostgreSQL URL, got ${url}`);
11
+ }
12
+ }
13
+ async function preflightLegacyDuroxideSchema(args, schema) {
14
+ const legacySchema = typeof args.providerOptions?.legacySchema === "string"
15
+ ? args.providerOptions.legacySchema
16
+ : "duroxide";
17
+ if (schema !== DEFAULT_DUROXIDE_SCHEMA && legacySchema === "duroxide")
18
+ return;
19
+ const { default: pg } = await import("pg");
20
+ const { buildPgPoolConfig } = await import("./pg-pool-factory.js");
21
+ const pool = new pg.Pool(buildPgPoolConfig({
22
+ connectionString: args.url,
23
+ useManagedIdentity: args.useManagedIdentity,
24
+ aadUser: args.aadDbUser,
25
+ max: 1,
26
+ }));
27
+ try {
28
+ const { rows } = await pool.query(`
29
+ SELECT
30
+ EXISTS (SELECT 1 FROM pg_namespace WHERE nspname = $2) AS legacy_exists,
31
+ EXISTS (SELECT 1 FROM pg_namespace WHERE nspname = $1) AS target_exists,
32
+ EXISTS (
33
+ SELECT 1
34
+ FROM pg_extension e
35
+ JOIN pg_namespace n ON n.oid = e.extnamespace
36
+ WHERE e.extname = 'pg_durable'
37
+ AND n.nspname = $2
38
+ ) AS legacy_owned_by_pg_durable,
39
+ EXISTS (
40
+ SELECT 1
41
+ FROM information_schema.tables
42
+ WHERE table_schema = $2
43
+ AND table_name IN ('instances', 'executions', 'history', 'orchestrator_queue', 'worker_queue')
44
+ ) AS legacy_has_pilotswarm_tables
45
+ `, [schema, legacySchema]);
46
+ const row = rows[0] ?? {};
47
+ if (row.legacy_exists && row.legacy_has_pilotswarm_tables && !row.legacy_owned_by_pg_durable) {
48
+ throw new Error(`Refusing to use ${schema} while legacy PilotSwarm duroxide schema ${legacySchema} exists. ` +
49
+ `Run migrateLegacyDuroxideSchema(), remove the legacy schema after confirming it is obsolete, or pin PILOTSWARM_DUROXIDE_SCHEMA=${legacySchema} until a migration window.`);
50
+ }
51
+ }
52
+ finally {
53
+ await pool.end();
54
+ }
55
+ }
56
+ const postgresRuntimeStorageProvider = {
57
+ id: "postgres",
58
+ capabilities: {},
59
+ async createSessionCatalog(args) {
60
+ const url = args.sessionCatalogUrl ?? args.url;
61
+ assertPostgresUrl(url, "postgres runtime session catalog");
62
+ return PgSessionCatalog.create(url, args.cmsSchema, {
63
+ useManagedIdentity: args.useManagedIdentity,
64
+ aadUser: args.aadDbUser,
65
+ });
66
+ },
67
+ async createFactStore(args) {
68
+ const url = args.factStoreUrl ?? args.sessionCatalogUrl ?? args.url;
69
+ return createFactStoreForUrl(url, args.factsSchema, {
70
+ useManagedIdentity: args.useManagedIdentity,
71
+ aadUser: args.aadDbUser,
72
+ provider: "pg",
73
+ });
74
+ },
75
+ };
76
+ const horizondbRuntimeStorageProvider = {
77
+ id: "horizondb",
78
+ capabilities: {
79
+ enhancedFactStore: true,
80
+ graphStore: true,
81
+ embeddingSupport: true,
82
+ },
83
+ async createSessionCatalog(args) {
84
+ const url = args.sessionCatalogUrl ?? args.url;
85
+ assertPostgresUrl(url, "horizondb runtime session catalog");
86
+ return PgSessionCatalog.create(url, args.cmsSchema, {
87
+ useManagedIdentity: args.useManagedIdentity,
88
+ aadUser: args.aadDbUser,
89
+ });
90
+ },
91
+ async createFactStore(args) {
92
+ const url = args.factStoreUrl ?? args.url;
93
+ return createFactStoreForUrl(url, args.factsSchema, {
94
+ provider: "horizon",
95
+ embedding: args.embedding,
96
+ });
97
+ },
98
+ getEnhancedFactStore(store) {
99
+ return isEnhancedFactStore(store) ? store : undefined;
100
+ },
101
+ async createGraphStore(args) {
102
+ if (!args.graph?.enabled)
103
+ return undefined;
104
+ const graphUrl = args.graph.url ?? args.url;
105
+ const graphSchema = args.graph.schema ?? "horizon_graph";
106
+ const factsUrl = args.factStoreUrl ?? args.url;
107
+ if (graphUrl === factsUrl && graphSchema === (args.factsSchema ?? "horizon_facts")) {
108
+ throw new Error(`graphSchema "${graphSchema}" collides with the facts schema on the same database. ` +
109
+ `Apache AGE creates a PG schema named after the graph; choose a distinct graphSchema.`);
110
+ }
111
+ return createGraphStoreForUrl(graphUrl, graphSchema, {
112
+ registrySchema: args.graph.registrySchema,
113
+ namespaceCacheTtlMs: args.graph.namespaceCacheTtlMs,
114
+ });
115
+ },
116
+ };
117
+ const postgresDuroxideStorageProvider = {
118
+ id: "postgres",
119
+ async createDuroxideProvider(args) {
120
+ assertPostgresUrl(args.url, "postgres duroxide storage");
121
+ const schema = args.schema ?? DEFAULT_DUROXIDE_SCHEMA;
122
+ await preflightLegacyDuroxideSchema(args, schema);
123
+ return createDuroxidePostgresProvider(PostgresProvider, args.url, schema, {
124
+ useManagedIdentity: args.useManagedIdentity ?? false,
125
+ aadUser: args.aadDbUser,
126
+ });
127
+ },
128
+ };
129
+ export const runtimeStorageProviders = {
130
+ postgres: postgresRuntimeStorageProvider,
131
+ horizondb: horizondbRuntimeStorageProvider,
132
+ };
133
+ export const duroxideStorageProviders = {
134
+ postgres: postgresDuroxideStorageProvider,
135
+ };
136
+ export function getRuntimeStorageProvider(id) {
137
+ const provider = runtimeStorageProviders[id];
138
+ if (!provider) {
139
+ throw new Error(`Unknown runtime storage provider: ${id}`);
140
+ }
141
+ return provider;
142
+ }
143
+ export function getDuroxideStorageProvider(id) {
144
+ const provider = duroxideStorageProviders[id];
145
+ if (!provider) {
146
+ throw new Error(`Unknown duroxide storage provider: ${id}`);
147
+ }
148
+ return provider;
149
+ }
150
+ //# sourceMappingURL=storage-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-providers.js","sourceRoot":"","sources":["../src/storage-providers.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  * @module
12
12
  * @internal
13
13
  */
14
- import type { SessionCatalogProvider } from "./cms.js";
14
+ import type { SessionCatalog } from "./cms.js";
15
15
  import type { FactStore } from "./facts-store.js";
16
16
  import type { Tool } from "@github/copilot-sdk";
17
17
  /**
@@ -21,7 +21,7 @@ import type { Tool } from "@github/copilot-sdk";
21
21
  * then register the returned tools via `worker.registerTools(tools)`.
22
22
  */
23
23
  export declare function createSweeperTools(opts: {
24
- catalog: SessionCatalogProvider;
24
+ catalog: SessionCatalog;
25
25
  duroxideClient: any;
26
26
  factStore?: FactStore | null;
27
27
  duroxideSchema?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sweeper-tools.d.ts","sourceRoot":"","sources":["../src/sweeper-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,sBAAsB,CAAC;IAChC,cAAc,EAAE,GAAG,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAwWd"}
1
+ {"version":3,"file":"sweeper-tools.d.ts","sourceRoot":"","sources":["../src/sweeper-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAwWd"}
@@ -1,5 +1,5 @@
1
1
  import { type AgentConfig } from "./agent-loader.js";
2
- import type { SessionCatalogProvider } from "./cms.js";
2
+ import type { SessionCatalog } from "./cms.js";
3
3
  import type { OrchestrationInput, SerializableSessionConfig } from "./types.js";
4
4
  export interface SystemAgentSessionPlan {
5
5
  agent: AgentConfig & {
@@ -32,7 +32,7 @@ export declare function loadSystemAgentConfigs(opts?: {
32
32
  }): AgentConfig[];
33
33
  export declare function resolveSystemAgentSessionPlans(agents: AgentConfig[]): SystemAgentSessionPlan[];
34
34
  export declare function startSystemAgents(opts: {
35
- catalog: Pick<SessionCatalogProvider, "getSession" | "createSession" | "updateSession">;
35
+ catalog: Pick<SessionCatalog, "getSession" | "createSession" | "updateSession">;
36
36
  duroxideClient: any;
37
37
  agents: AgentConfig[];
38
38
  defaultModel: string;
@@ -1 +1 @@
1
- {"version":3,"file":"system-agents.d.ts","sourceRoot":"","sources":["../src/system-agents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAK5G,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAIhF,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,WAAW,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED,wBAAgB,gCAAgC,CAC5C,KAAK,EAAE,WAAW,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,GACF;IACC,kBAAkB,EAAE,yBAAyB,CAAC;IAC9C,KAAK,EAAE,kBAAkB,CAAC;CAC7B,CA2BA;AA4BD,wBAAgB,sBAAsB,CAAC,IAAI,GAAE;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B,GAAG,WAAW,EAAE,CAoBrB;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,sBAAsB,EAAE,CAoD9F;AAcD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,eAAe,GAAG,eAAe,CAAC,CAAC;IACxF,cAAc,EAAE,GAAG,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkFpC"}
1
+ {"version":3,"file":"system-agents.d.ts","sourceRoot":"","sources":["../src/system-agents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAK5G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAIhF,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,WAAW,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED,wBAAgB,gCAAgC,CAC5C,KAAK,EAAE,WAAW,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,GACF;IACC,kBAAkB,EAAE,yBAAyB,CAAC;IAC9C,KAAK,EAAE,kBAAkB,CAAC;CAC7B,CA2BA;AA4BD,wBAAgB,sBAAsB,CAAC,IAAI,GAAE;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B,GAAG,WAAW,EAAE,CAoBrB;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,sBAAsB,EAAE,CAoD9F;AAcD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,eAAe,GAAG,eAAe,CAAC,CAAC;IAChF,cAAc,EAAE,GAAG,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkFpC"}
package/dist/types.d.ts CHANGED
@@ -1,7 +1,15 @@
1
1
  import type { Tool, SessionConfig } from "@github/copilot-sdk";
2
2
  import type { SessionStateStore } from "./session-store.js";
3
3
  import type { ReasoningEffort } from "./model-providers.js";
4
+ import type { EmbeddingEndpointConfig } from "./facts-store.js";
5
+ import type { StorageConfig } from "./storage-config.js";
4
6
  export declare const SESSION_STATE_MISSING_PREFIX = "SESSION_STATE_MISSING:";
7
+ export type CycleReportStatus = "quiet" | "material" | "blocked";
8
+ export interface CycleReport {
9
+ status: CycleReportStatus;
10
+ summary?: string;
11
+ deltas?: string[];
12
+ }
5
13
  export type TurnAction = {
6
14
  type: "wait";
7
15
  seconds: number;
@@ -102,6 +110,7 @@ export type TurnResult = ({
102
110
  type: "completed";
103
111
  content: string;
104
112
  events?: CapturedEvent[];
113
+ cycleReport?: CycleReport;
105
114
  } & QueuedTurnActionCarrier) | ({
106
115
  type: "wait";
107
116
  seconds: number;
@@ -217,6 +226,8 @@ export interface TurnOptions {
217
226
  bootstrap?: boolean;
218
227
  /** Require the Copilot SDK to use a specific tool during this turn. */
219
228
  requiredTool?: string;
229
+ /** Internal: this turn was started by a recurring cron/cron_at timer fire. */
230
+ cycleOrigin?: "cron" | "cron_at";
220
231
  /** Worker-owned inline implementations for non-suspending control tools. */
221
232
  controlToolBridge?: {
222
233
  spawnAgent(args: {
@@ -317,6 +328,15 @@ export interface SerializableSessionConfig {
317
328
  * to enforce knowledge pipeline namespace restrictions.
318
329
  */
319
330
  agentIdentity?: string;
331
+ /**
332
+ * Internal: when `true`, this session holds the app-assigned HARVESTER role
333
+ * (enhancedfactstore 07 §1.5) and receives the privileged crawl-queue +
334
+ * graph write/delete tools (only when a graph store is configured). Graph
335
+ * extraction is app-specific, so the app sets this on its own harvester
336
+ * agent. The facts-manager receives those tools regardless (dormant), and
337
+ * agent-tuner never does.
338
+ */
339
+ isHarvester?: boolean;
320
340
  }
321
341
  /** Full config — includes non-serializable fields (tools, hooks). Stays in memory. */
322
342
  export interface ManagedSessionConfig extends SerializableSessionConfig {
@@ -502,6 +522,8 @@ export interface OrchestrationInput {
502
522
  systemPrompt?: string;
503
523
  /** Internal: pending prompt is a bootstrap message, not a user-authored prompt. */
504
524
  bootstrapPrompt?: boolean;
525
+ /** Internal: the pending prompt was produced by a recurring cron/cron_at timer fire. */
526
+ cycleOrigin?: "cron" | "cron_at";
505
527
  /** Seconds above which wait/cron timers proactively dehydrate. Default: 29. */
506
528
  dehydrateThreshold?: number;
507
529
  idleTimeout?: number;
@@ -581,6 +603,9 @@ export interface OrchestrationInput {
581
603
  sessionId: string;
582
604
  updateType: string;
583
605
  content?: string;
606
+ cycleOrigin?: "cron" | "cron_at";
607
+ cycleStatus?: CycleReportStatus;
608
+ verdict?: ChildSessionVerdict;
584
609
  observedAtMs: number;
585
610
  }>;
586
611
  };
@@ -716,6 +741,12 @@ export interface PilotSwarmWorkerOptions {
716
741
  * If not provided, trace messages are discarded.
717
742
  */
718
743
  traceWriter?: (msg: string) => void;
744
+ /**
745
+ * Resolved storage config. When supplied, this is the source of truth for
746
+ * runtime storage and duroxide storage; legacy flat storage fields are used
747
+ * only as compatibility inputs when this is omitted.
748
+ */
749
+ storageConfig?: StorageConfig;
719
750
  /**
720
751
  * Custom LLM provider (BYOK — Bring Your Own Key).
721
752
  * When specified, uses this API endpoint instead of the GitHub Copilot API.
@@ -737,7 +768,7 @@ export interface PilotSwarmWorkerOptions {
737
768
  };
738
769
  /**
739
770
  * PostgreSQL schema name for duroxide orchestration tables.
740
- * Default: `"duroxide"`. Change this to run multiple independent
771
+ * Default: `"ps_duroxide"`. Change this to run multiple independent
741
772
  * deployments on the same database.
742
773
  */
743
774
  duroxideSchema?: string;
@@ -753,6 +784,60 @@ export interface PilotSwarmWorkerOptions {
753
784
  * fact storage across deployments sharing the same database.
754
785
  */
755
786
  factsSchema?: string;
787
+ /**
788
+ * Connection URL for an EnhancedFactStore provider (multi-signal search +
789
+ * durable embedder), e.g. a HorizonDB cluster with pgvector/pg_textsearch/
790
+ * pg_durable. When set (or `factsProvider: "horizon"`), the worker constructs
791
+ * the enhanced provider instead of the default `PgFactStore`.
792
+ * Resolution: `enhancedFactsDatabaseUrl ?? cmsFactsDatabaseUrl ?? store`.
793
+ * Unset ⇒ today's behaviour (plain `PgFactStore`).
794
+ */
795
+ enhancedFactsDatabaseUrl?: string;
796
+ /**
797
+ * Explicit facts-store provider selector. Default inferred: `"horizon"` iff
798
+ * `enhancedFactsDatabaseUrl` is set, else `"pg"`. Selecting `"horizon"`
799
+ * dynamically imports `@pilotswarm/horizon-store`; a missing package is a
800
+ * clear startup error only when horizon is explicitly selected.
801
+ */
802
+ factsProvider?: "pg" | "horizon";
803
+ /**
804
+ * Schema for the enhanced facts store. Default: `"horizon_facts"`.
805
+ */
806
+ enhancedFactsSchema?: string;
807
+ /**
808
+ * Embedding endpoint for the enhanced provider's durable in-DB embedder.
809
+ * Sourced from env (`HORIZON_EMBED_*`). When omitted, semantic search returns
810
+ * nothing for un-embedded facts (lexical still works).
811
+ */
812
+ horizonEmbed?: EmbeddingEndpointConfig;
813
+ /**
814
+ * OPT-IN graph store target (Apache AGE). When set, the worker constructs a
815
+ * separate `GraphStore` provider (`HorizonDBGraphStore`) and graph tools light
816
+ * up (`!!graphStore`). May be the SAME URL as `enhancedFactsDatabaseUrl` (one
817
+ * HorizonDB) or a distinct database. Unset ⇒ no graph store, no graph tools —
818
+ * never selected implicitly.
819
+ */
820
+ graphDatabaseUrl?: string;
821
+ /**
822
+ * Schema/graph name for the graph store. Default: `"horizon_graph"`.
823
+ * Apache AGE creates a Postgres schema named after the graph, so on a shared
824
+ * database this MUST differ from the facts schema — the worker fails fast if
825
+ * `graphSchema` collides with the facts schema on the same `graphDatabaseUrl`.
826
+ */
827
+ graphSchema?: string;
828
+ /**
829
+ * Graph-owned relational schema for namespace registry discovery metadata.
830
+ * Default (provider): `${graphSchema}_registry`. Must differ from
831
+ * `graphSchema`, because Apache AGE owns a Postgres schema named after the
832
+ * graph. Env: `HORIZON_GRAPH_REGISTRY_SCHEMA`.
833
+ */
834
+ graphRegistrySchema?: string;
835
+ /**
836
+ * TTL (ms) for graph namespace list caching inside the graph provider.
837
+ * Default 60000; set 0 to disable caching. Env:
838
+ * `HORIZON_NAMESPACE_CACHE_TTL_MS`.
839
+ */
840
+ graphNamespaceCacheTtlMs?: number;
756
841
  /**
757
842
  * Inline app-level default instructions layered beneath the embedded
758
843
  * PilotSwarm framework base prompt.
@@ -824,13 +909,18 @@ export interface PilotSwarmClientOptions {
824
909
  * If not provided, trace messages are discarded.
825
910
  */
826
911
  traceWriter?: (msg: string) => void;
912
+ /**
913
+ * Resolved storage config. Must match the worker. When supplied, this is
914
+ * the source of truth for CMS/facts and duroxide storage.
915
+ */
916
+ storageConfig?: StorageConfig;
827
917
  /** Seconds between periodic checkpoints (blob upload without losing session pin). -1 = disabled. */
828
918
  checkpointInterval?: number;
829
919
  /** Custom message prepended to the user prompt on rehydration (after worker death). */
830
920
  rehydrationMessage?: string;
831
921
  /**
832
922
  * PostgreSQL schema name for duroxide orchestration tables.
833
- * Default: `"duroxide"`. Must match the worker's `duroxideSchema`.
923
+ * Default: `"ps_duroxide"`. Must match the worker's `duroxideSchema`.
834
924
  */
835
925
  duroxideSchema?: string;
836
926
  /**
@@ -843,6 +933,17 @@ export interface PilotSwarmClientOptions {
843
933
  * Default: `"pilotswarm_facts"`. Must match the worker's `factsSchema`.
844
934
  */
845
935
  factsSchema?: string;
936
+ /**
937
+ * EnhancedFactStore connection URL (enhancedfactstore 07 P3). Must match the
938
+ * worker's `enhancedFactsDatabaseUrl` so the client's facts cleanup targets
939
+ * the same store. Unset ⇒ facts live on `cmsFactsDatabaseUrl ?? store`.
940
+ */
941
+ enhancedFactsDatabaseUrl?: string;
942
+ /** Facts provider selector — must match the worker. Inferred from
943
+ * `enhancedFactsDatabaseUrl` when omitted. */
944
+ factsProvider?: "pg" | "horizon";
945
+ /** Enhanced facts schema — must match the worker's `enhancedFactsSchema`. */
946
+ enhancedFactsSchema?: string;
846
947
  /**
847
948
  * Session creation policy. Typically set by the worker and forwarded
848
949
  * to co-located clients. Controls which sessions can be created.