@goondocks/myco 0.21.1 → 0.21.2
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.
- package/dist/{agent-eval-YK2VP2S4.js → agent-eval-2MQKTXX3.js} +4 -4
- package/dist/{agent-run-GEJBD2YD.js → agent-run-XJBTSVJR.js} +4 -4
- package/dist/{agent-tasks-5XSRGTRX.js → agent-tasks-7MWBZOC7.js} +4 -4
- package/dist/{chunk-VRI56337.js → chunk-4D22KTXY.js} +2 -2
- package/dist/{chunk-KTTSXYEK.js → chunk-6FBLL7MD.js} +8 -2
- package/dist/chunk-6FBLL7MD.js.map +1 -0
- package/dist/{chunk-N7Z3LUEZ.js → chunk-DBBO6FHE.js} +2 -10
- package/dist/{chunk-N7Z3LUEZ.js.map → chunk-DBBO6FHE.js.map} +1 -1
- package/dist/{chunk-EEOJWLMP.js → chunk-DMPCC7V6.js} +15 -3
- package/dist/chunk-DMPCC7V6.js.map +1 -0
- package/dist/{chunk-XL75KZGI.js → chunk-EKZG2MCD.js} +7 -3
- package/dist/chunk-EKZG2MCD.js.map +1 -0
- package/dist/{chunk-X2IRGXGF.js → chunk-HCT7RMM2.js} +154 -24
- package/dist/chunk-HCT7RMM2.js.map +1 -0
- package/dist/{chunk-NFO7BRCO.js → chunk-IMW5TJ3O.js} +5 -4
- package/dist/chunk-IMW5TJ3O.js.map +1 -0
- package/dist/{chunk-OZ3FBAK5.js → chunk-TFRUDNLI.js} +2 -2
- package/dist/{chunk-6ALVMIB4.js → chunk-TMAXWERS.js} +85 -2
- package/dist/chunk-TMAXWERS.js.map +1 -0
- package/dist/{chunk-QDLVIW2O.js → chunk-W5L5IHP5.js} +2 -2
- package/dist/{chunk-ENZR5NG7.js → chunk-Z55WGA2J.js} +2 -2
- package/dist/{cli-HSLIG7EX.js → cli-DDHTHU2J.js} +35 -35
- package/dist/{client-Z43DNLJH.js → client-PQU53UQU.js} +5 -3
- package/dist/{doctor-HJCWHAU4.js → doctor-QK6KFY6H.js} +4 -4
- package/dist/{executor-DO6QFC6G.js → executor-FJCMNSXM.js} +5 -5
- package/dist/{init-4KVK7W2E.js → init-GQPD6HHX.js} +5 -5
- package/dist/{main-4J4QZZTZ.js → main-4HKTZFIM.js} +365 -142
- package/dist/main-4HKTZFIM.js.map +1 -0
- package/dist/{open-7TXJQM3H.js → open-3P3DDAOA.js} +4 -4
- package/dist/{post-compact-7AEFVCZS.js → post-compact-QA5LME2J.js} +4 -4
- package/dist/{post-tool-use-TZINWWDH.js → post-tool-use-QRZMPNYL.js} +3 -3
- package/dist/{post-tool-use-failure-TCFEU2GI.js → post-tool-use-failure-XNHIKBZG.js} +4 -4
- package/dist/{pre-compact-LO2VZCGR.js → pre-compact-HDV6X5QM.js} +4 -4
- package/dist/{remove-F77AAALE.js → remove-USQDLGTJ.js} +4 -4
- package/dist/{restart-UEFDPMLT.js → restart-FQLZE2TW.js} +5 -5
- package/dist/{search-NHNVUAQQ.js → search-5COKV6TD.js} +4 -4
- package/dist/{server-AZJSTQEK.js → server-KRMBRW4T.js} +22 -6
- package/dist/{server-AZJSTQEK.js.map → server-KRMBRW4T.js.map} +1 -1
- package/dist/{session-3HLC5KOD.js → session-NJCUW3OX.js} +4 -4
- package/dist/{session-end-FS46UARX.js → session-end-XD27GRYF.js} +3 -3
- package/dist/{session-start-46KPFV2H.js → session-start-RDTXUSYL.js} +7 -7
- package/dist/{setup-llm-JMWSNQ2C.js → setup-llm-FYPPJI6W.js} +4 -4
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +4 -4
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/symbionts/templates/opencode/plugin.ts +41 -1
- package/dist/src/symbionts/templates/pi/plugin.ts +12 -1
- package/dist/{stats-MKMETHMA.js → stats-JCLZLA5G.js} +5 -5
- package/dist/{stop-OUEX6KA4.js → stop-B7XCXEM5.js} +3 -3
- package/dist/{stop-failure-2BWVNZEG.js → stop-failure-R6QZCUOZ.js} +4 -4
- package/dist/{subagent-start-J4VV6DEE.js → subagent-start-N7A622F3.js} +4 -4
- package/dist/{subagent-stop-JMLVEPIA.js → subagent-stop-SVOG5MZJ.js} +4 -4
- package/dist/{task-completed-65CHMMKA.js → task-completed-3DL5LJXF.js} +4 -4
- package/dist/{team-U2LDKIS4.js → team-VJ3M263F.js} +2 -2
- package/dist/ui/assets/{index-BUGor9dk.js → index-O1kNWlWM.js} +119 -119
- package/dist/ui/assets/index-z2Jm8i4A.css +1 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-ZSHVXWSQ.js → update-TVXAUJMZ.js} +42 -8
- package/dist/update-TVXAUJMZ.js.map +1 -0
- package/dist/{user-prompt-submit-APMO6FVU.js → user-prompt-submit-KYO2VGLB.js} +7 -6
- package/dist/user-prompt-submit-KYO2VGLB.js.map +1 -0
- package/dist/{version-TXPPS3L5.js → version-LDFEALUJ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-6ALVMIB4.js.map +0 -1
- package/dist/chunk-EEOJWLMP.js.map +0 -1
- package/dist/chunk-KTTSXYEK.js.map +0 -1
- package/dist/chunk-NFO7BRCO.js.map +0 -1
- package/dist/chunk-X2IRGXGF.js.map +0 -1
- package/dist/chunk-XL75KZGI.js.map +0 -1
- package/dist/main-4J4QZZTZ.js.map +0 -1
- package/dist/ui/assets/index-_OP4ifzH.css +0 -1
- package/dist/update-ZSHVXWSQ.js.map +0 -1
- package/dist/user-prompt-submit-APMO6FVU.js.map +0 -1
- /package/dist/{agent-eval-YK2VP2S4.js.map → agent-eval-2MQKTXX3.js.map} +0 -0
- /package/dist/{agent-run-GEJBD2YD.js.map → agent-run-XJBTSVJR.js.map} +0 -0
- /package/dist/{agent-tasks-5XSRGTRX.js.map → agent-tasks-7MWBZOC7.js.map} +0 -0
- /package/dist/{chunk-VRI56337.js.map → chunk-4D22KTXY.js.map} +0 -0
- /package/dist/{chunk-OZ3FBAK5.js.map → chunk-TFRUDNLI.js.map} +0 -0
- /package/dist/{chunk-QDLVIW2O.js.map → chunk-W5L5IHP5.js.map} +0 -0
- /package/dist/{chunk-ENZR5NG7.js.map → chunk-Z55WGA2J.js.map} +0 -0
- /package/dist/{cli-HSLIG7EX.js.map → cli-DDHTHU2J.js.map} +0 -0
- /package/dist/{client-Z43DNLJH.js.map → client-PQU53UQU.js.map} +0 -0
- /package/dist/{doctor-HJCWHAU4.js.map → doctor-QK6KFY6H.js.map} +0 -0
- /package/dist/{executor-DO6QFC6G.js.map → executor-FJCMNSXM.js.map} +0 -0
- /package/dist/{init-4KVK7W2E.js.map → init-GQPD6HHX.js.map} +0 -0
- /package/dist/{open-7TXJQM3H.js.map → open-3P3DDAOA.js.map} +0 -0
- /package/dist/{post-compact-7AEFVCZS.js.map → post-compact-QA5LME2J.js.map} +0 -0
- /package/dist/{post-tool-use-TZINWWDH.js.map → post-tool-use-QRZMPNYL.js.map} +0 -0
- /package/dist/{post-tool-use-failure-TCFEU2GI.js.map → post-tool-use-failure-XNHIKBZG.js.map} +0 -0
- /package/dist/{pre-compact-LO2VZCGR.js.map → pre-compact-HDV6X5QM.js.map} +0 -0
- /package/dist/{remove-F77AAALE.js.map → remove-USQDLGTJ.js.map} +0 -0
- /package/dist/{restart-UEFDPMLT.js.map → restart-FQLZE2TW.js.map} +0 -0
- /package/dist/{search-NHNVUAQQ.js.map → search-5COKV6TD.js.map} +0 -0
- /package/dist/{session-3HLC5KOD.js.map → session-NJCUW3OX.js.map} +0 -0
- /package/dist/{session-end-FS46UARX.js.map → session-end-XD27GRYF.js.map} +0 -0
- /package/dist/{session-start-46KPFV2H.js.map → session-start-RDTXUSYL.js.map} +0 -0
- /package/dist/{setup-llm-JMWSNQ2C.js.map → setup-llm-FYPPJI6W.js.map} +0 -0
- /package/dist/{stats-MKMETHMA.js.map → stats-JCLZLA5G.js.map} +0 -0
- /package/dist/{stop-OUEX6KA4.js.map → stop-B7XCXEM5.js.map} +0 -0
- /package/dist/{stop-failure-2BWVNZEG.js.map → stop-failure-R6QZCUOZ.js.map} +0 -0
- /package/dist/{subagent-start-J4VV6DEE.js.map → subagent-start-N7A622F3.js.map} +0 -0
- /package/dist/{subagent-stop-JMLVEPIA.js.map → subagent-stop-SVOG5MZJ.js.map} +0 -0
- /package/dist/{task-completed-65CHMMKA.js.map → task-completed-3DL5LJXF.js.map} +0 -0
- /package/dist/{team-U2LDKIS4.js.map → team-VJ3M263F.js.map} +0 -0
- /package/dist/{version-TXPPS3L5.js.map → version-LDFEALUJ.js.map} +0 -0
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
getEmbeddingQueueDepth,
|
|
19
19
|
getUnembedded,
|
|
20
20
|
markEmbedded
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-4D22KTXY.js";
|
|
22
22
|
import {
|
|
23
23
|
deleteSecrets,
|
|
24
24
|
getTeamPackageVersion,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
readSecrets,
|
|
28
28
|
resolveVaultConfigPath,
|
|
29
29
|
writeSecret
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-TMAXWERS.js";
|
|
31
31
|
import {
|
|
32
32
|
DEFAULT_OPENAI_URL,
|
|
33
33
|
DEFAULT_OPENROUTER_URL,
|
|
@@ -63,6 +63,7 @@ import {
|
|
|
63
63
|
getSkillRecordByName,
|
|
64
64
|
getSkillSurveyEligibility,
|
|
65
65
|
hasConfiguredProvider,
|
|
66
|
+
hasSemanticSearchFilters,
|
|
66
67
|
incrementActivityCount,
|
|
67
68
|
incrementSkillUsageCount,
|
|
68
69
|
inferLocalOpenAIBackendKind,
|
|
@@ -82,6 +83,7 @@ import {
|
|
|
82
83
|
listWriteIntents,
|
|
83
84
|
markAllRead,
|
|
84
85
|
markRunningRunsInterrupted,
|
|
86
|
+
matchesSemanticSearchFilters,
|
|
85
87
|
notify,
|
|
86
88
|
populateBatchResponses,
|
|
87
89
|
register,
|
|
@@ -90,7 +92,7 @@ import {
|
|
|
90
92
|
tryParseJson,
|
|
91
93
|
updateCandidate,
|
|
92
94
|
updateNotificationStatus
|
|
93
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-HCT7RMM2.js";
|
|
94
96
|
import {
|
|
95
97
|
parseCheckpointState,
|
|
96
98
|
runDurationMs
|
|
@@ -138,7 +140,7 @@ import {
|
|
|
138
140
|
cleanStaleBuffers,
|
|
139
141
|
listBufferSessionIds
|
|
140
142
|
} from "./chunk-V7XG6V6C.js";
|
|
141
|
-
import "./chunk-
|
|
143
|
+
import "./chunk-W5L5IHP5.js";
|
|
142
144
|
import "./chunk-SAKJMNSR.js";
|
|
143
145
|
import {
|
|
144
146
|
SymbiontInstaller
|
|
@@ -153,7 +155,7 @@ import {
|
|
|
153
155
|
import {
|
|
154
156
|
composeSessionStartContext,
|
|
155
157
|
shouldInjectSessionStartDigest
|
|
156
|
-
} from "./chunk-
|
|
158
|
+
} from "./chunk-TFRUDNLI.js";
|
|
157
159
|
import {
|
|
158
160
|
buildCortexInstructionsInput,
|
|
159
161
|
countSpores,
|
|
@@ -173,7 +175,7 @@ import {
|
|
|
173
175
|
shouldInjectCortex,
|
|
174
176
|
updateSporeStatus,
|
|
175
177
|
upsertPlan
|
|
176
|
-
} from "./chunk-
|
|
178
|
+
} from "./chunk-DBBO6FHE.js";
|
|
177
179
|
import {
|
|
178
180
|
backfillUnsynced,
|
|
179
181
|
closeSession,
|
|
@@ -202,10 +204,10 @@ import {
|
|
|
202
204
|
import {
|
|
203
205
|
evaluateSessionCaptureRules,
|
|
204
206
|
readTranscriptMeta
|
|
205
|
-
} from "./chunk-
|
|
207
|
+
} from "./chunk-EKZG2MCD.js";
|
|
206
208
|
import {
|
|
207
209
|
PLAN_STATUSES
|
|
208
|
-
} from "./chunk-
|
|
210
|
+
} from "./chunk-DMPCC7V6.js";
|
|
209
211
|
import {
|
|
210
212
|
EMBEDDING_DIMENSIONS,
|
|
211
213
|
REST_SETTABLE_STATUSES,
|
|
@@ -247,10 +249,10 @@ import {
|
|
|
247
249
|
} from "./chunk-ZXZPJJN3.js";
|
|
248
250
|
import {
|
|
249
251
|
resolveCliEntryPath
|
|
250
|
-
} from "./chunk-
|
|
252
|
+
} from "./chunk-6FBLL7MD.js";
|
|
251
253
|
import {
|
|
252
254
|
getPluginVersion
|
|
253
|
-
} from "./chunk-
|
|
255
|
+
} from "./chunk-Z55WGA2J.js";
|
|
254
256
|
import {
|
|
255
257
|
loadManifests,
|
|
256
258
|
resolvePackageRoot
|
|
@@ -2715,6 +2717,13 @@ var TeamSyncClient = class _TeamSyncClient {
|
|
|
2715
2717
|
const params = new URLSearchParams({ q: query });
|
|
2716
2718
|
if (options.limit) params.set("limit", String(options.limit));
|
|
2717
2719
|
if (options.tables) params.set("tables", options.tables.join(","));
|
|
2720
|
+
if (options.status) params.set("status", options.status);
|
|
2721
|
+
if (options.observation_type) params.set("observation_type", options.observation_type);
|
|
2722
|
+
if (options.since !== void 0) params.set("since", String(options.since));
|
|
2723
|
+
if (options.until !== void 0) params.set("until", String(options.until));
|
|
2724
|
+
if (options.session_id) params.set("session_id", options.session_id);
|
|
2725
|
+
if (options.source_path) params.set("source_path", options.source_path);
|
|
2726
|
+
if (options.name) params.set("name", options.name);
|
|
2718
2727
|
const res = await this.fetchFn(`${this.workerUrl}/search?${params}`, {
|
|
2719
2728
|
method: "GET",
|
|
2720
2729
|
headers: this.headers(),
|
|
@@ -2904,6 +2913,7 @@ function createTeamHandlers(deps) {
|
|
|
2904
2913
|
logger.warn("team-sync.outbox.count-failed", "team-outbox counts unavailable", { error: detail });
|
|
2905
2914
|
}
|
|
2906
2915
|
let collectiveStatus = null;
|
|
2916
|
+
let teamConfig = null;
|
|
2907
2917
|
if (client && config.team.enabled) {
|
|
2908
2918
|
try {
|
|
2909
2919
|
collectiveStatus = await client.getCollectiveStatus();
|
|
@@ -2912,7 +2922,19 @@ function createTeamHandlers(deps) {
|
|
|
2912
2922
|
logger.warn("team-sync.collective.status-failed", "Collective status unavailable", { error: detail });
|
|
2913
2923
|
collectiveStatus = null;
|
|
2914
2924
|
}
|
|
2925
|
+
try {
|
|
2926
|
+
teamConfig = await client.getConfig();
|
|
2927
|
+
} catch (err) {
|
|
2928
|
+
const detail = errorMessage(err);
|
|
2929
|
+
logger.warn("team-sync.config.status-failed", "Team config unavailable", { error: detail });
|
|
2930
|
+
teamConfig = null;
|
|
2931
|
+
}
|
|
2915
2932
|
}
|
|
2933
|
+
const remoteConfig = teamConfig?.config ?? {};
|
|
2934
|
+
const vectorReindexLastRun = typeof remoteConfig.vector_reindex_last_run_at === "string" ? Number(remoteConfig.vector_reindex_last_run_at) : null;
|
|
2935
|
+
const vectorReindexLastProcessed = typeof remoteConfig.vector_reindex_last_processed === "string" ? Number(remoteConfig.vector_reindex_last_processed) : null;
|
|
2936
|
+
const vectorReindexLastReindexed = typeof remoteConfig.vector_reindex_last_reindexed === "string" ? Number(remoteConfig.vector_reindex_last_reindexed) : null;
|
|
2937
|
+
const vectorReindexLastDeleted = typeof remoteConfig.vector_reindex_last_deleted === "string" ? Number(remoteConfig.vector_reindex_last_deleted) : null;
|
|
2916
2938
|
return {
|
|
2917
2939
|
body: {
|
|
2918
2940
|
enabled: config.team.enabled,
|
|
@@ -2936,6 +2958,13 @@ function createTeamHandlers(deps) {
|
|
|
2936
2958
|
collective_last_heartbeat: collectiveStatus?.last_heartbeat ?? null,
|
|
2937
2959
|
collective_capabilities: collectiveStatus?.capabilities ?? [],
|
|
2938
2960
|
collective_settings: collectiveStatus?.settings ?? {},
|
|
2961
|
+
vector_reindex_status: typeof remoteConfig.vector_reindex_status === "string" ? remoteConfig.vector_reindex_status : null,
|
|
2962
|
+
vector_reindex_last_table: typeof remoteConfig.vector_reindex_last_table === "string" ? remoteConfig.vector_reindex_last_table : null,
|
|
2963
|
+
vector_reindex_last_error: typeof remoteConfig.vector_reindex_last_error === "string" && remoteConfig.vector_reindex_last_error.length > 0 ? remoteConfig.vector_reindex_last_error : null,
|
|
2964
|
+
vector_reindex_last_run_at: Number.isFinite(vectorReindexLastRun) ? vectorReindexLastRun : null,
|
|
2965
|
+
vector_reindex_last_processed: Number.isFinite(vectorReindexLastProcessed) ? vectorReindexLastProcessed : null,
|
|
2966
|
+
vector_reindex_last_reindexed: Number.isFinite(vectorReindexLastReindexed) ? vectorReindexLastReindexed : null,
|
|
2967
|
+
vector_reindex_last_deleted: Number.isFinite(vectorReindexLastDeleted) ? vectorReindexLastDeleted : null,
|
|
2939
2968
|
schema_version: SCHEMA_VERSION,
|
|
2940
2969
|
sync_protocol_version: SYNC_PROTOCOL_VERSION,
|
|
2941
2970
|
mcp_token: client?.getMcpToken() ?? null,
|
|
@@ -2952,7 +2981,7 @@ function createTeamHandlers(deps) {
|
|
|
2952
2981
|
return { body: { retried: count } };
|
|
2953
2982
|
}
|
|
2954
2983
|
async function handleUpgradeWorker(_req) {
|
|
2955
|
-
const { upgradeWorker } = await import("./team-
|
|
2984
|
+
const { upgradeWorker } = await import("./team-VJ3M263F.js");
|
|
2956
2985
|
logger.info("team-sync.upgrade.start", "Starting worker upgrade");
|
|
2957
2986
|
const result = upgradeWorker(vaultDir);
|
|
2958
2987
|
if (!result.success) {
|
|
@@ -3031,7 +3060,19 @@ function createCollectiveHandlers(deps) {
|
|
|
3031
3060
|
const project = req.query.project;
|
|
3032
3061
|
const limit = req.query.limit ? Number(req.query.limit) : void 0;
|
|
3033
3062
|
return {
|
|
3034
|
-
body: await client.collectiveQuery("collective_search", {
|
|
3063
|
+
body: await client.collectiveQuery("collective_search", {
|
|
3064
|
+
query,
|
|
3065
|
+
project,
|
|
3066
|
+
limit,
|
|
3067
|
+
types: req.query.types ? req.query.types.split(",").map((value) => value.trim()).filter(Boolean) : void 0,
|
|
3068
|
+
status: req.query.status || void 0,
|
|
3069
|
+
observation_type: req.query.observation_type || void 0,
|
|
3070
|
+
since: req.query.since ? Number(req.query.since) : void 0,
|
|
3071
|
+
until: req.query.until ? Number(req.query.until) : void 0,
|
|
3072
|
+
session_id: req.query.session_id || void 0,
|
|
3073
|
+
source_path: req.query.source_path || void 0,
|
|
3074
|
+
name: req.query.name || void 0
|
|
3075
|
+
})
|
|
3035
3076
|
};
|
|
3036
3077
|
} catch (error) {
|
|
3037
3078
|
return {
|
|
@@ -3916,7 +3957,7 @@ async function triggerTitleSummary(sessionId, deps) {
|
|
|
3916
3957
|
if (config.agent.summary_batch_interval <= 0) return;
|
|
3917
3958
|
if (config.agent.event_tasks_enabled === false) return;
|
|
3918
3959
|
try {
|
|
3919
|
-
const { runAgent: runAgent2 } = await import("./executor-
|
|
3960
|
+
const { runAgent: runAgent2 } = await import("./executor-FJCMNSXM.js");
|
|
3920
3961
|
runAgent2(vaultDir, {
|
|
3921
3962
|
task: "title-summary",
|
|
3922
3963
|
instruction: `Process session ${sessionId} only`,
|
|
@@ -4458,6 +4499,14 @@ function createSearchHandler(deps) {
|
|
|
4458
4499
|
const type = req.query.type;
|
|
4459
4500
|
const limit = Number(req.query.limit) || SEARCH_RESULTS_DEFAULT_LIMIT;
|
|
4460
4501
|
const namespace = req.query.namespace;
|
|
4502
|
+
const metadataFilters = {
|
|
4503
|
+
...req.query.status ? { status: req.query.status } : {},
|
|
4504
|
+
...req.query.session_id ? { session_id: req.query.session_id } : {},
|
|
4505
|
+
...req.query.observation_type ? { observation_type: req.query.observation_type } : {},
|
|
4506
|
+
...req.query.since ? { created_at_gte: Number(req.query.since) } : {},
|
|
4507
|
+
...req.query.until ? { created_at_lte: Number(req.query.until) } : {}
|
|
4508
|
+
};
|
|
4509
|
+
const vectorFilters = hasSemanticSearchFilters(metadataFilters) ? metadataFilters : void 0;
|
|
4461
4510
|
const sanitized = sanitizeFtsQuery(query);
|
|
4462
4511
|
if (mode === "fts") {
|
|
4463
4512
|
try {
|
|
@@ -4499,9 +4548,11 @@ function createSearchHandler(deps) {
|
|
|
4499
4548
|
const vectorResults = deps.embeddingManager.searchVectors(queryVector, {
|
|
4500
4549
|
namespace: searchNamespace,
|
|
4501
4550
|
limit,
|
|
4502
|
-
threshold: SEARCH_SIMILARITY_THRESHOLD
|
|
4551
|
+
threshold: SEARCH_SIMILARITY_THRESHOLD,
|
|
4552
|
+
filters: vectorFilters
|
|
4503
4553
|
});
|
|
4504
|
-
const
|
|
4554
|
+
const filteredVectorResults = vectorFilters ? vectorResults.filter((result) => matchesSemanticSearchFilters(result.metadata, metadataFilters)) : vectorResults;
|
|
4555
|
+
const localResults = hydrateSearchResults(filteredVectorResults).map((r) => ({
|
|
4505
4556
|
...r,
|
|
4506
4557
|
source: "local"
|
|
4507
4558
|
}));
|
|
@@ -4509,7 +4560,15 @@ function createSearchHandler(deps) {
|
|
|
4509
4560
|
let teamResults = [];
|
|
4510
4561
|
if (teamClient) {
|
|
4511
4562
|
try {
|
|
4512
|
-
const teamResponse = await teamClient.search(query, {
|
|
4563
|
+
const teamResponse = await teamClient.search(query, {
|
|
4564
|
+
limit,
|
|
4565
|
+
tables: searchNamespace ? [searchNamespace] : void 0,
|
|
4566
|
+
status: req.query.status || void 0,
|
|
4567
|
+
observation_type: req.query.observation_type || void 0,
|
|
4568
|
+
since: req.query.since ? Number(req.query.since) : void 0,
|
|
4569
|
+
until: req.query.until ? Number(req.query.until) : void 0,
|
|
4570
|
+
session_id: req.query.session_id || void 0
|
|
4571
|
+
});
|
|
4513
4572
|
teamResults = teamResponse.results.map((r) => ({
|
|
4514
4573
|
...r,
|
|
4515
4574
|
source: `${TEAM_SOURCE_PREFIX}${r.machine_id}`
|
|
@@ -4518,7 +4577,11 @@ function createSearchHandler(deps) {
|
|
|
4518
4577
|
}
|
|
4519
4578
|
}
|
|
4520
4579
|
const dedupedTeam = deps.machineId ? teamResults.filter((r) => r.machine_id !== deps.machineId) : teamResults;
|
|
4521
|
-
const
|
|
4580
|
+
const filteredTeam = vectorFilters ? dedupedTeam.filter((r) => matchesSemanticSearchFilters(
|
|
4581
|
+
r.metadata,
|
|
4582
|
+
metadataFilters
|
|
4583
|
+
)) : dedupedTeam;
|
|
4584
|
+
const merged = [...localResults, ...filteredTeam].sort((a, b) => (b.score ?? 0) - (a.score ?? 0)).slice(0, limit);
|
|
4522
4585
|
return { body: { mode: "semantic", results: merged } };
|
|
4523
4586
|
};
|
|
4524
4587
|
}
|
|
@@ -4685,7 +4748,7 @@ function getCortexPromptResult(runId) {
|
|
|
4685
4748
|
}
|
|
4686
4749
|
async function triggerCortexInstructions(deps) {
|
|
4687
4750
|
const { vaultDir, embeddingManager, liveConfig, logger, getTeamClient } = deps;
|
|
4688
|
-
const loadExecutor = deps.loadExecutor ?? (() => import("./executor-
|
|
4751
|
+
const loadExecutor = deps.loadExecutor ?? (() => import("./executor-FJCMNSXM.js"));
|
|
4689
4752
|
const config = liveConfig.current;
|
|
4690
4753
|
if (config.agent.event_tasks_enabled === false) {
|
|
4691
4754
|
return { started: false, reason: "event-tasks-disabled" };
|
|
@@ -4911,7 +4974,10 @@ function createPromptContextHandler(deps) {
|
|
|
4911
4974
|
const vectorResults = embeddingManager.searchVectors(queryVector, {
|
|
4912
4975
|
namespace: "spores",
|
|
4913
4976
|
limit: maxSpores * PROMPT_VECTOR_OVER_FETCH,
|
|
4914
|
-
threshold: PROMPT_CONTEXT_MIN_SIMILARITY
|
|
4977
|
+
threshold: PROMPT_CONTEXT_MIN_SIMILARITY,
|
|
4978
|
+
filters: {
|
|
4979
|
+
status: "active"
|
|
4980
|
+
}
|
|
4915
4981
|
});
|
|
4916
4982
|
logger.debug(LOG_KINDS.CONTEXT_SEARCH, "Prompt vector search completed", {
|
|
4917
4983
|
session_id,
|
|
@@ -5073,6 +5139,68 @@ async function handleGetFeed(req) {
|
|
|
5073
5139
|
// src/daemon/api/embedding.ts
|
|
5074
5140
|
var EMBEDDING_STATUS_IDLE = "idle";
|
|
5075
5141
|
var EMBEDDING_STATUS_PENDING = "pending";
|
|
5142
|
+
var FOREGROUND_EMBEDDING_BATCH_SIZE = 50;
|
|
5143
|
+
var FOREGROUND_RECONCILE_MAX_PASSES = 25;
|
|
5144
|
+
var FOREGROUND_REEMBED_MAX_PASSES = 25;
|
|
5145
|
+
function readQueueDepthSafely() {
|
|
5146
|
+
try {
|
|
5147
|
+
return getEmbeddingQueueDepth().queue_depth;
|
|
5148
|
+
} catch {
|
|
5149
|
+
return 0;
|
|
5150
|
+
}
|
|
5151
|
+
}
|
|
5152
|
+
async function drainForegroundReconcile(manager) {
|
|
5153
|
+
const startedAt = Date.now();
|
|
5154
|
+
let embedded = 0;
|
|
5155
|
+
let stale_reembedded = 0;
|
|
5156
|
+
let orphans_cleaned = 0;
|
|
5157
|
+
let passes = 0;
|
|
5158
|
+
for (; passes < FOREGROUND_RECONCILE_MAX_PASSES; passes++) {
|
|
5159
|
+
const result = await manager.reconcile(FOREGROUND_EMBEDDING_BATCH_SIZE);
|
|
5160
|
+
embedded += result.embedded;
|
|
5161
|
+
stale_reembedded += result.stale_reembedded;
|
|
5162
|
+
orphans_cleaned += result.orphans_cleaned;
|
|
5163
|
+
const queueDepth = readQueueDepthSafely();
|
|
5164
|
+
if (queueDepth === 0) {
|
|
5165
|
+
return {
|
|
5166
|
+
embedded,
|
|
5167
|
+
stale_reembedded,
|
|
5168
|
+
orphans_cleaned,
|
|
5169
|
+
duration_ms: Date.now() - startedAt,
|
|
5170
|
+
passes: passes + 1,
|
|
5171
|
+
remaining_queue_depth: 0
|
|
5172
|
+
};
|
|
5173
|
+
}
|
|
5174
|
+
if (result.embedded === 0 && result.stale_reembedded === 0 && result.orphans_cleaned === 0) {
|
|
5175
|
+
return {
|
|
5176
|
+
embedded,
|
|
5177
|
+
stale_reembedded,
|
|
5178
|
+
orphans_cleaned,
|
|
5179
|
+
duration_ms: Date.now() - startedAt,
|
|
5180
|
+
passes: passes + 1,
|
|
5181
|
+
remaining_queue_depth: queueDepth
|
|
5182
|
+
};
|
|
5183
|
+
}
|
|
5184
|
+
}
|
|
5185
|
+
return {
|
|
5186
|
+
embedded,
|
|
5187
|
+
stale_reembedded,
|
|
5188
|
+
orphans_cleaned,
|
|
5189
|
+
duration_ms: Date.now() - startedAt,
|
|
5190
|
+
passes,
|
|
5191
|
+
remaining_queue_depth: readQueueDepthSafely()
|
|
5192
|
+
};
|
|
5193
|
+
}
|
|
5194
|
+
async function drainForegroundReembedStale(manager) {
|
|
5195
|
+
let reembedded = 0;
|
|
5196
|
+
let passes = 0;
|
|
5197
|
+
for (; passes < FOREGROUND_REEMBED_MAX_PASSES; passes++) {
|
|
5198
|
+
const result = await manager.reembedStale(FOREGROUND_EMBEDDING_BATCH_SIZE);
|
|
5199
|
+
reembedded += result.reembedded;
|
|
5200
|
+
if (result.reembedded === 0) break;
|
|
5201
|
+
}
|
|
5202
|
+
return { reembedded, passes };
|
|
5203
|
+
}
|
|
5076
5204
|
async function handleGetEmbeddingStatus(vaultDir) {
|
|
5077
5205
|
const config = loadMergedConfig(vaultDir);
|
|
5078
5206
|
const { queue_depth, embedded_count } = getEmbeddingQueueDepth();
|
|
@@ -5091,21 +5219,28 @@ function handleEmbeddingDetails(manager) {
|
|
|
5091
5219
|
const details = manager.getDetails();
|
|
5092
5220
|
return { body: details };
|
|
5093
5221
|
}
|
|
5094
|
-
function handleEmbeddingRebuild(manager) {
|
|
5222
|
+
async function handleEmbeddingRebuild(manager) {
|
|
5095
5223
|
const result = manager.rebuildAll();
|
|
5096
|
-
|
|
5224
|
+
const drained = await drainForegroundReconcile(manager);
|
|
5225
|
+
return {
|
|
5226
|
+
body: {
|
|
5227
|
+
...result,
|
|
5228
|
+
...drained,
|
|
5229
|
+
batch_size: FOREGROUND_EMBEDDING_BATCH_SIZE
|
|
5230
|
+
}
|
|
5231
|
+
};
|
|
5097
5232
|
}
|
|
5098
5233
|
async function handleEmbeddingReconcile(manager) {
|
|
5099
|
-
const result = await manager.reconcile(
|
|
5100
|
-
return { body: result };
|
|
5234
|
+
const result = await manager.reconcile(FOREGROUND_EMBEDDING_BATCH_SIZE);
|
|
5235
|
+
return { body: { ...result, batch_size: FOREGROUND_EMBEDDING_BATCH_SIZE } };
|
|
5101
5236
|
}
|
|
5102
5237
|
function handleEmbeddingCleanOrphans(manager) {
|
|
5103
5238
|
const result = manager.cleanOrphans();
|
|
5104
5239
|
return { body: result };
|
|
5105
5240
|
}
|
|
5106
5241
|
async function handleEmbeddingReembedStale(manager) {
|
|
5107
|
-
const result = await manager
|
|
5108
|
-
return { body: result };
|
|
5242
|
+
const result = await drainForegroundReembedStale(manager);
|
|
5243
|
+
return { body: { ...result, batch_size: FOREGROUND_EMBEDDING_BATCH_SIZE } };
|
|
5109
5244
|
}
|
|
5110
5245
|
|
|
5111
5246
|
// src/daemon/database/types.ts
|
|
@@ -5157,7 +5292,33 @@ async function handleDatabaseIntegrityCheck(manager) {
|
|
|
5157
5292
|
|
|
5158
5293
|
// src/daemon/embedding/manager.ts
|
|
5159
5294
|
import { createHash as createHash3 } from "crypto";
|
|
5295
|
+
|
|
5296
|
+
// src/intelligence/batch.ts
|
|
5297
|
+
async function batchExecute(items, fn, options) {
|
|
5298
|
+
const { concurrency, onProgress } = options;
|
|
5299
|
+
let succeeded = 0;
|
|
5300
|
+
let failed = 0;
|
|
5301
|
+
const results = [];
|
|
5302
|
+
for (let i = 0; i < items.length; i += concurrency) {
|
|
5303
|
+
const batch = items.slice(i, i + concurrency);
|
|
5304
|
+
const settled = await Promise.allSettled(batch.map(fn));
|
|
5305
|
+
for (const result of settled) {
|
|
5306
|
+
if (result.status === "fulfilled") {
|
|
5307
|
+
succeeded++;
|
|
5308
|
+
results.push({ status: "fulfilled", value: result.value });
|
|
5309
|
+
} else {
|
|
5310
|
+
failed++;
|
|
5311
|
+
results.push({ status: "rejected", reason: result.reason?.message ?? String(result.reason) });
|
|
5312
|
+
}
|
|
5313
|
+
}
|
|
5314
|
+
onProgress?.(succeeded + failed, items.length);
|
|
5315
|
+
}
|
|
5316
|
+
return { succeeded, failed, results };
|
|
5317
|
+
}
|
|
5318
|
+
|
|
5319
|
+
// src/daemon/embedding/manager.ts
|
|
5160
5320
|
var ACTIVE_STATUS = "active";
|
|
5321
|
+
var EMBEDDING_MANAGER_CONCURRENCY = 2;
|
|
5161
5322
|
var EmbeddingManager = class {
|
|
5162
5323
|
constructor(vectorStore, embeddingProvider, recordSource, logger) {
|
|
5163
5324
|
this.vectorStore = vectorStore;
|
|
@@ -5171,6 +5332,43 @@ var EmbeddingManager = class {
|
|
|
5171
5332
|
contentHash(text) {
|
|
5172
5333
|
return createHash3(CONTENT_HASH_ALGORITHM).update(text).digest("hex");
|
|
5173
5334
|
}
|
|
5335
|
+
totalPendingCount() {
|
|
5336
|
+
return EMBEDDABLE_TABLES.reduce(
|
|
5337
|
+
(sum, namespace) => sum + this.recordSource.getPendingCount(namespace),
|
|
5338
|
+
0
|
|
5339
|
+
);
|
|
5340
|
+
}
|
|
5341
|
+
async embedRecords(namespace, records, options) {
|
|
5342
|
+
if (records.length === 0) return { processed: 0, unavailable: false };
|
|
5343
|
+
const result = await batchExecute(
|
|
5344
|
+
records,
|
|
5345
|
+
async (record) => {
|
|
5346
|
+
const embedding = await this.embeddingProvider.embed(record.text);
|
|
5347
|
+
if (embedding === null) return { unavailable: true };
|
|
5348
|
+
this.vectorStore.upsert(namespace, record.id, embedding, {
|
|
5349
|
+
model: this.embeddingProvider.model,
|
|
5350
|
+
provider: this.embeddingProvider.providerName,
|
|
5351
|
+
dimensions: this.embeddingProvider.dimensions,
|
|
5352
|
+
content_hash: this.contentHash(record.text),
|
|
5353
|
+
embedded_at: epochSeconds(),
|
|
5354
|
+
domain_metadata: record.metadata
|
|
5355
|
+
});
|
|
5356
|
+
if (options.markEmbedded) {
|
|
5357
|
+
this.recordSource.markEmbedded(namespace, record.id);
|
|
5358
|
+
}
|
|
5359
|
+
return { unavailable: false };
|
|
5360
|
+
},
|
|
5361
|
+
{ concurrency: EMBEDDING_MANAGER_CONCURRENCY }
|
|
5362
|
+
);
|
|
5363
|
+
let processed = 0;
|
|
5364
|
+
let unavailable = false;
|
|
5365
|
+
for (const entry of result.results) {
|
|
5366
|
+
if (entry.status !== "fulfilled") continue;
|
|
5367
|
+
if (entry.value.unavailable) unavailable = true;
|
|
5368
|
+
else processed++;
|
|
5369
|
+
}
|
|
5370
|
+
return { processed, unavailable };
|
|
5371
|
+
}
|
|
5174
5372
|
// -------------------------------------------------------------------------
|
|
5175
5373
|
// Write-path event handlers
|
|
5176
5374
|
// -------------------------------------------------------------------------
|
|
@@ -5265,12 +5463,30 @@ var EmbeddingManager = class {
|
|
|
5265
5463
|
const currentModel = this.embeddingProvider.model;
|
|
5266
5464
|
for (const namespace of EMBEDDABLE_TABLES) {
|
|
5267
5465
|
const rows = this.recordSource.getEmbeddableRows(namespace, batchSize);
|
|
5268
|
-
|
|
5269
|
-
|
|
5270
|
-
|
|
5271
|
-
|
|
5466
|
+
const embeddedBatch = await this.embedRecords(namespace, rows, { markEmbedded: true });
|
|
5467
|
+
embedded += embeddedBatch.processed;
|
|
5468
|
+
if (embeddedBatch.unavailable) {
|
|
5469
|
+
this.logger.warn(LOG_KINDS.EMBEDDING_PROVIDER, "Provider unavailable during reconcile, returning partial progress", {
|
|
5470
|
+
namespace,
|
|
5471
|
+
embedded
|
|
5472
|
+
});
|
|
5473
|
+
return {
|
|
5474
|
+
embedded,
|
|
5475
|
+
stale_reembedded,
|
|
5476
|
+
orphans_cleaned,
|
|
5477
|
+
duration_ms: Date.now() - start
|
|
5478
|
+
};
|
|
5479
|
+
}
|
|
5480
|
+
const staleIds = this.vectorStore.getStaleIds(namespace, currentModel, batchSize);
|
|
5481
|
+
if (staleIds.length > 0) {
|
|
5482
|
+
const records = this.recordSource.getRecordContent(namespace, staleIds);
|
|
5483
|
+
const foundIds = new Set(records.map((r) => r.id));
|
|
5484
|
+
const staleBatch = await this.embedRecords(namespace, records, { markEmbedded: false });
|
|
5485
|
+
stale_reembedded += staleBatch.processed;
|
|
5486
|
+
if (staleBatch.unavailable) {
|
|
5487
|
+
this.logger.warn(LOG_KINDS.EMBEDDING_PROVIDER, "Provider unavailable during stale re-embed, returning partial progress", {
|
|
5272
5488
|
namespace,
|
|
5273
|
-
|
|
5489
|
+
stale_reembedded
|
|
5274
5490
|
});
|
|
5275
5491
|
return {
|
|
5276
5492
|
embedded,
|
|
@@ -5279,46 +5495,6 @@ var EmbeddingManager = class {
|
|
|
5279
5495
|
duration_ms: Date.now() - start
|
|
5280
5496
|
};
|
|
5281
5497
|
}
|
|
5282
|
-
const hash = this.contentHash(row.text);
|
|
5283
|
-
this.vectorStore.upsert(namespace, row.id, embedding, {
|
|
5284
|
-
model: currentModel,
|
|
5285
|
-
provider: this.embeddingProvider.providerName,
|
|
5286
|
-
dimensions: this.embeddingProvider.dimensions,
|
|
5287
|
-
content_hash: hash,
|
|
5288
|
-
embedded_at: epochSeconds(),
|
|
5289
|
-
domain_metadata: row.metadata
|
|
5290
|
-
});
|
|
5291
|
-
this.recordSource.markEmbedded(namespace, row.id);
|
|
5292
|
-
embedded++;
|
|
5293
|
-
}
|
|
5294
|
-
const staleIds = this.vectorStore.getStaleIds(namespace, currentModel, batchSize);
|
|
5295
|
-
if (staleIds.length > 0) {
|
|
5296
|
-
const records = this.recordSource.getRecordContent(namespace, staleIds);
|
|
5297
|
-
const foundIds = new Set(records.map((r) => r.id));
|
|
5298
|
-
for (const record of records) {
|
|
5299
|
-
const embedding = await this.embeddingProvider.embed(record.text);
|
|
5300
|
-
if (embedding === null) {
|
|
5301
|
-
this.logger.warn(LOG_KINDS.EMBEDDING_PROVIDER, "Provider unavailable during stale re-embed, returning partial progress", {
|
|
5302
|
-
namespace,
|
|
5303
|
-
stale_reembedded
|
|
5304
|
-
});
|
|
5305
|
-
return {
|
|
5306
|
-
embedded,
|
|
5307
|
-
stale_reembedded,
|
|
5308
|
-
orphans_cleaned,
|
|
5309
|
-
duration_ms: Date.now() - start
|
|
5310
|
-
};
|
|
5311
|
-
}
|
|
5312
|
-
this.vectorStore.upsert(namespace, record.id, embedding, {
|
|
5313
|
-
model: currentModel,
|
|
5314
|
-
provider: this.embeddingProvider.providerName,
|
|
5315
|
-
dimensions: this.embeddingProvider.dimensions,
|
|
5316
|
-
content_hash: this.contentHash(record.text),
|
|
5317
|
-
embedded_at: epochSeconds(),
|
|
5318
|
-
domain_metadata: record.metadata
|
|
5319
|
-
});
|
|
5320
|
-
stale_reembedded++;
|
|
5321
|
-
}
|
|
5322
5498
|
for (const staleId of staleIds) {
|
|
5323
5499
|
if (!foundIds.has(staleId)) {
|
|
5324
5500
|
this.vectorStore.remove(namespace, staleId);
|
|
@@ -5334,12 +5510,18 @@ var EmbeddingManager = class {
|
|
|
5334
5510
|
}
|
|
5335
5511
|
const duration_ms = Date.now() - start;
|
|
5336
5512
|
if (embedded > 0 || stale_reembedded > 0 || orphans_cleaned > 0) {
|
|
5337
|
-
this.logger.info(
|
|
5338
|
-
|
|
5339
|
-
stale_reembedded,
|
|
5340
|
-
|
|
5341
|
-
|
|
5342
|
-
|
|
5513
|
+
this.logger.info(
|
|
5514
|
+
LOG_KINDS.EMBEDDING_RECONCILE,
|
|
5515
|
+
`Reconcile cycle completed: ${embedded} embedded, ${stale_reembedded} stale re-embedded, ${orphans_cleaned} orphan vectors cleaned in ${duration_ms}ms (batch=${batchSize}, concurrency=${EMBEDDING_MANAGER_CONCURRENCY})`,
|
|
5516
|
+
{
|
|
5517
|
+
batch_size: batchSize,
|
|
5518
|
+
concurrency: EMBEDDING_MANAGER_CONCURRENCY,
|
|
5519
|
+
embedded,
|
|
5520
|
+
stale_reembedded,
|
|
5521
|
+
orphans_cleaned,
|
|
5522
|
+
duration_ms
|
|
5523
|
+
}
|
|
5524
|
+
);
|
|
5343
5525
|
}
|
|
5344
5526
|
return { embedded, stale_reembedded, orphans_cleaned, duration_ms };
|
|
5345
5527
|
}
|
|
@@ -5363,7 +5545,12 @@ var EmbeddingManager = class {
|
|
|
5363
5545
|
rebuildAll() {
|
|
5364
5546
|
const { cleared } = this.vectorStore.clear();
|
|
5365
5547
|
this.recordSource.clearAllEmbedded();
|
|
5366
|
-
this.
|
|
5548
|
+
const pending = this.totalPendingCount();
|
|
5549
|
+
this.logger.info(
|
|
5550
|
+
LOG_KINDS.EMBEDDING_REBUILD,
|
|
5551
|
+
`Rebuild started: cleared ${cleared} vectors, ${pending} records pending re-embed`,
|
|
5552
|
+
{ cleared, pending, concurrency: EMBEDDING_MANAGER_CONCURRENCY }
|
|
5553
|
+
);
|
|
5367
5554
|
return { queued: cleared };
|
|
5368
5555
|
}
|
|
5369
5556
|
/**
|
|
@@ -5376,25 +5563,14 @@ var EmbeddingManager = class {
|
|
|
5376
5563
|
const staleIds = this.vectorStore.getStaleIds(namespace, currentModel, batchSize);
|
|
5377
5564
|
if (staleIds.length === 0) continue;
|
|
5378
5565
|
const records = this.recordSource.getRecordContent(namespace, staleIds);
|
|
5379
|
-
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
});
|
|
5386
|
-
return { reembedded };
|
|
5387
|
-
}
|
|
5388
|
-
const hash = this.contentHash(record.text);
|
|
5389
|
-
this.vectorStore.upsert(namespace, record.id, embedding, {
|
|
5390
|
-
model: currentModel,
|
|
5391
|
-
provider: this.embeddingProvider.providerName,
|
|
5392
|
-
dimensions: this.embeddingProvider.dimensions,
|
|
5393
|
-
content_hash: hash,
|
|
5394
|
-
embedded_at: epochSeconds(),
|
|
5395
|
-
domain_metadata: record.metadata
|
|
5566
|
+
const staleBatch = await this.embedRecords(namespace, records, { markEmbedded: false });
|
|
5567
|
+
reembedded += staleBatch.processed;
|
|
5568
|
+
if (staleBatch.unavailable) {
|
|
5569
|
+
this.logger.warn(LOG_KINDS.EMBEDDING_PROVIDER, "Provider unavailable during re-embed", {
|
|
5570
|
+
namespace,
|
|
5571
|
+
reembedded
|
|
5396
5572
|
});
|
|
5397
|
-
reembedded
|
|
5573
|
+
return { reembedded };
|
|
5398
5574
|
}
|
|
5399
5575
|
}
|
|
5400
5576
|
return { reembedded };
|
|
@@ -5479,6 +5655,21 @@ var DEFAULT_META_MODEL = "unknown";
|
|
|
5479
5655
|
var DEFAULT_META_PROVIDER = "unknown";
|
|
5480
5656
|
var DEFAULT_META_CONTENT_HASH = "";
|
|
5481
5657
|
var FILTERABLE_COLUMNS = /* @__PURE__ */ new Set(["model", "provider", "namespace"]);
|
|
5658
|
+
var FILTERABLE_DOMAIN_METADATA_KEYS = /* @__PURE__ */ new Set([
|
|
5659
|
+
"status",
|
|
5660
|
+
"session_id",
|
|
5661
|
+
"observation_type",
|
|
5662
|
+
"project_root",
|
|
5663
|
+
"name",
|
|
5664
|
+
"source_path",
|
|
5665
|
+
"created_at"
|
|
5666
|
+
]);
|
|
5667
|
+
var FILTER_SUFFIX_TO_OPERATOR = {
|
|
5668
|
+
_gte: ">=",
|
|
5669
|
+
_lte: "<=",
|
|
5670
|
+
_gt: ">",
|
|
5671
|
+
_lt: "<"
|
|
5672
|
+
};
|
|
5482
5673
|
function cosineDistanceToSimilarity(distance) {
|
|
5483
5674
|
return 1 - distance;
|
|
5484
5675
|
}
|
|
@@ -5782,6 +5973,20 @@ var SqliteVecVectorStore = class {
|
|
|
5782
5973
|
if (FILTERABLE_COLUMNS.has(key)) {
|
|
5783
5974
|
conditions.push(`em.${key} = ?`);
|
|
5784
5975
|
params.push(value);
|
|
5976
|
+
continue;
|
|
5977
|
+
}
|
|
5978
|
+
let metadataKey = key;
|
|
5979
|
+
let operator = "=";
|
|
5980
|
+
for (const [suffix, sqlOperator] of Object.entries(FILTER_SUFFIX_TO_OPERATOR)) {
|
|
5981
|
+
if (key.endsWith(suffix)) {
|
|
5982
|
+
metadataKey = key.slice(0, -suffix.length);
|
|
5983
|
+
operator = sqlOperator;
|
|
5984
|
+
break;
|
|
5985
|
+
}
|
|
5986
|
+
}
|
|
5987
|
+
if (FILTERABLE_DOMAIN_METADATA_KEYS.has(metadataKey)) {
|
|
5988
|
+
conditions.push(`json_extract(em.domain_metadata, '$.${metadataKey}') ${operator} ?`);
|
|
5989
|
+
params.push(value);
|
|
5785
5990
|
}
|
|
5786
5991
|
}
|
|
5787
5992
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
@@ -5869,14 +6074,16 @@ var EmbeddingProviderAdapter = class {
|
|
|
5869
6074
|
var ACTIVE_STATUS2 = "active";
|
|
5870
6075
|
function sessionMetadata(row) {
|
|
5871
6076
|
return {
|
|
5872
|
-
...row.project_root != null ? { project_root: row.project_root } : {}
|
|
6077
|
+
...row.project_root != null ? { project_root: row.project_root } : {},
|
|
6078
|
+
...row.created_at != null ? { created_at: row.created_at } : {}
|
|
5873
6079
|
};
|
|
5874
6080
|
}
|
|
5875
6081
|
function sporeMetadata(row) {
|
|
5876
6082
|
return {
|
|
5877
6083
|
...row.status != null ? { status: row.status } : {},
|
|
5878
6084
|
...row.session_id != null ? { session_id: row.session_id } : {},
|
|
5879
|
-
...row.observation_type != null ? { observation_type: row.observation_type } : {}
|
|
6085
|
+
...row.observation_type != null ? { observation_type: row.observation_type } : {},
|
|
6086
|
+
...row.created_at != null ? { created_at: row.created_at } : {}
|
|
5880
6087
|
};
|
|
5881
6088
|
}
|
|
5882
6089
|
function emptyMetadata() {
|
|
@@ -5885,13 +6092,15 @@ function emptyMetadata() {
|
|
|
5885
6092
|
function planMetadata(row) {
|
|
5886
6093
|
return {
|
|
5887
6094
|
...row.session_id != null ? { session_id: row.session_id } : {},
|
|
5888
|
-
...row.source_path != null ? { source_path: row.source_path } : {}
|
|
6095
|
+
...row.source_path != null ? { source_path: row.source_path } : {},
|
|
6096
|
+
...row.created_at != null ? { created_at: row.created_at } : {}
|
|
5889
6097
|
};
|
|
5890
6098
|
}
|
|
5891
6099
|
function skillRecordMetadata(row) {
|
|
5892
6100
|
return {
|
|
5893
6101
|
...row.status != null ? { status: row.status } : {},
|
|
5894
|
-
...row.name != null ? { name: row.name } : {}
|
|
6102
|
+
...row.name != null ? { name: row.name } : {},
|
|
6103
|
+
...row.created_at != null ? { created_at: row.created_at } : {}
|
|
5895
6104
|
};
|
|
5896
6105
|
}
|
|
5897
6106
|
function metadataFor(namespace, row) {
|
|
@@ -7095,7 +7304,7 @@ async function registerScheduledTasks(powerManager, deps) {
|
|
|
7095
7304
|
lastEnabled = enabled;
|
|
7096
7305
|
}
|
|
7097
7306
|
if (!enabled) return;
|
|
7098
|
-
const { runAgent: runAgent2 } = await import("./executor-
|
|
7307
|
+
const { runAgent: runAgent2 } = await import("./executor-FJCMNSXM.js");
|
|
7099
7308
|
const resumableRun = getLatestResumableRunForTask(DEFAULT_AGENT_ID, taskName);
|
|
7100
7309
|
if (resumableRun) {
|
|
7101
7310
|
const resumed = await runAgent2(vaultDir, {
|
|
@@ -7457,7 +7666,8 @@ function createMcpProxyHandlers(deps) {
|
|
|
7457
7666
|
});
|
|
7458
7667
|
embeddingManager.onContentWritten("spores", spore.id, content, {
|
|
7459
7668
|
status: "active",
|
|
7460
|
-
observation_type: observationType
|
|
7669
|
+
observation_type: observationType,
|
|
7670
|
+
created_at: now
|
|
7461
7671
|
}).catch(() => {
|
|
7462
7672
|
});
|
|
7463
7673
|
return {
|
|
@@ -7534,7 +7744,8 @@ function createMcpProxyHandlers(deps) {
|
|
|
7534
7744
|
})();
|
|
7535
7745
|
embeddingManager.onContentWritten("spores", wisdom.id, consolidated_content, {
|
|
7536
7746
|
status: "active",
|
|
7537
|
-
observation_type
|
|
7747
|
+
observation_type,
|
|
7748
|
+
created_at: now
|
|
7538
7749
|
}).catch(() => {
|
|
7539
7750
|
});
|
|
7540
7751
|
for (const sourceId of sourcesSuperseded) {
|
|
@@ -8088,7 +8299,7 @@ function createAgentRunHandlers(deps) {
|
|
|
8088
8299
|
};
|
|
8089
8300
|
}
|
|
8090
8301
|
}
|
|
8091
|
-
const { runAgent: runAgent2 } = await import("./executor-
|
|
8302
|
+
const { runAgent: runAgent2 } = await import("./executor-FJCMNSXM.js");
|
|
8092
8303
|
const resultPromise = runAgent2(vaultDir, {
|
|
8093
8304
|
task,
|
|
8094
8305
|
instruction,
|
|
@@ -8178,7 +8389,7 @@ function createAgentRunHandlers(deps) {
|
|
|
8178
8389
|
return { status: 400, body: { error: "Run is not resumable" } };
|
|
8179
8390
|
}
|
|
8180
8391
|
const { mode } = ResumeRunBody.parse(req.body ?? {});
|
|
8181
|
-
const { runAgent: runAgent2 } = await import("./executor-
|
|
8392
|
+
const { runAgent: runAgent2 } = await import("./executor-FJCMNSXM.js");
|
|
8182
8393
|
const resultPromise = runAgent2(vaultDir, {
|
|
8183
8394
|
agentId: run.agent_id,
|
|
8184
8395
|
task: run.task ?? void 0,
|
|
@@ -8409,7 +8620,7 @@ function createAgentEvaluationHandlers(deps) {
|
|
|
8409
8620
|
});
|
|
8410
8621
|
const dryRun = body.matrix.dryRun ?? false;
|
|
8411
8622
|
void (async () => {
|
|
8412
|
-
const { runAgent: runAgent2 } = await import("./executor-
|
|
8623
|
+
const { runAgent: runAgent2 } = await import("./executor-FJCMNSXM.js");
|
|
8413
8624
|
let anyCompleted = false;
|
|
8414
8625
|
let transitionedToRunning = false;
|
|
8415
8626
|
const sharedPhases = body.matrix.phases;
|
|
@@ -9835,7 +10046,8 @@ function createStopProcessor(deps) {
|
|
|
9835
10046
|
}
|
|
9836
10047
|
}
|
|
9837
10048
|
const existingSessionMeta = registry.getSession(sessionId);
|
|
9838
|
-
|
|
10049
|
+
const dbSession = existingSessionMeta ? void 0 : getSession(sessionId);
|
|
10050
|
+
if (!hookTranscriptPath && !existingSessionMeta && !dbSession) {
|
|
9839
10051
|
logger.info(LOG_KINDS.HOOKS_STOP, "Stop ignored \u2014 ephemeral sub-invocation", {
|
|
9840
10052
|
session_id: sessionId
|
|
9841
10053
|
});
|
|
@@ -9843,7 +10055,7 @@ function createStopProcessor(deps) {
|
|
|
9843
10055
|
}
|
|
9844
10056
|
if (!existingSessionMeta) {
|
|
9845
10057
|
registry.register(sessionId, { started_at: (/* @__PURE__ */ new Date()).toISOString() });
|
|
9846
|
-
logger.debug(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Auto-registered session from stop event", { session_id: sessionId });
|
|
10058
|
+
logger.debug(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, dbSession ? "Rehydrated registry from DB on stop event" : "Auto-registered session from stop event", { session_id: sessionId });
|
|
9847
10059
|
}
|
|
9848
10060
|
const sessionMeta = existingSessionMeta ?? registry.getSession(sessionId);
|
|
9849
10061
|
logger.info(LOG_KINDS.HOOKS_STOP, "Stop received", {
|
|
@@ -9937,44 +10149,55 @@ function createEventDispatcher(deps) {
|
|
|
9937
10149
|
};
|
|
9938
10150
|
logger.debug(LOG_KINDS.HOOKS_EVENT, "Event received", { type: event.type, session_id: event.session_id });
|
|
9939
10151
|
if (!registry.getSession(event.session_id)) {
|
|
9940
|
-
const
|
|
9941
|
-
|
|
9942
|
-
|
|
9943
|
-
|
|
9944
|
-
const reason = cached.reason ?? "rule";
|
|
9945
|
-
logger.debug(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Ignored event for previously-dropped session", {
|
|
10152
|
+
const existingRow = getSession(event.session_id);
|
|
10153
|
+
if (existingRow) {
|
|
10154
|
+
registry.register(event.session_id, { started_at: event.timestamp });
|
|
10155
|
+
logger.info(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Rehydrated registry from DB", {
|
|
9946
10156
|
session_id: event.session_id,
|
|
9947
|
-
|
|
9948
|
-
|
|
10157
|
+
agent: existingRow.agent,
|
|
10158
|
+
type: event.type
|
|
9949
10159
|
});
|
|
9950
|
-
|
|
9951
|
-
}
|
|
9952
|
-
|
|
9953
|
-
|
|
9954
|
-
|
|
9955
|
-
|
|
9956
|
-
|
|
9957
|
-
|
|
9958
|
-
|
|
9959
|
-
|
|
9960
|
-
|
|
9961
|
-
|
|
10160
|
+
reconcileSession(event.session_id);
|
|
10161
|
+
} else {
|
|
10162
|
+
const cached = droppedSessions.get(event.session_id);
|
|
10163
|
+
const hasTranscriptNow = typeof event.transcript_path === "string" && event.transcript_path.length > 0;
|
|
10164
|
+
const shouldReevaluate = cached && !cached.hadTranscriptMeta && hasTranscriptNow;
|
|
10165
|
+
if (cached && !shouldReevaluate) {
|
|
10166
|
+
const reason = cached.reason ?? "rule";
|
|
10167
|
+
logger.debug(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Ignored event for previously-dropped session", {
|
|
10168
|
+
session_id: event.session_id,
|
|
10169
|
+
type: event.type,
|
|
10170
|
+
reason
|
|
10171
|
+
});
|
|
10172
|
+
return { body: { ok: true, ignored: reason } };
|
|
10173
|
+
}
|
|
10174
|
+
if (shouldReevaluate) {
|
|
10175
|
+
droppedSessions.delete(event.session_id);
|
|
10176
|
+
}
|
|
10177
|
+
const { decision, hadTranscriptMeta } = evaluateAutoRegistration(event);
|
|
10178
|
+
if (decision.action === "drop") {
|
|
10179
|
+
rememberDropped(event.session_id, decision.reason, hadTranscriptMeta);
|
|
10180
|
+
logger.info(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Ignored event that failed session capture rules", {
|
|
10181
|
+
session_id: event.session_id,
|
|
10182
|
+
type: event.type,
|
|
10183
|
+
reason: decision.reason ?? "rule"
|
|
10184
|
+
});
|
|
10185
|
+
return { body: { ok: true, ignored: decision.reason ?? "rule" } };
|
|
10186
|
+
}
|
|
10187
|
+
registry.register(event.session_id, { started_at: event.timestamp });
|
|
10188
|
+
logger.debug(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Auto-registered session from event", { session_id: event.session_id });
|
|
10189
|
+
const now = epochSeconds();
|
|
10190
|
+
const startedEpoch = Math.floor(new Date(event.timestamp).getTime() / 1e3);
|
|
10191
|
+
upsertSession({
|
|
10192
|
+
id: event.session_id,
|
|
10193
|
+
agent: event.agent ?? DEFAULT_SYMBIONT_NAME,
|
|
10194
|
+
status: "active",
|
|
10195
|
+
started_at: startedEpoch,
|
|
10196
|
+
created_at: now,
|
|
10197
|
+
machine_id: machineId
|
|
9962
10198
|
});
|
|
9963
|
-
|
|
10199
|
+
reconcileSession(event.session_id);
|
|
9964
10200
|
}
|
|
9965
|
-
registry.register(event.session_id, { started_at: event.timestamp });
|
|
9966
|
-
logger.debug(LOG_KINDS.LIFECYCLE_AUTO_REGISTER, "Auto-registered session from event", { session_id: event.session_id });
|
|
9967
|
-
const now = epochSeconds();
|
|
9968
|
-
const startedEpoch = Math.floor(new Date(event.timestamp).getTime() / 1e3);
|
|
9969
|
-
upsertSession({
|
|
9970
|
-
id: event.session_id,
|
|
9971
|
-
agent: event.agent ?? DEFAULT_SYMBIONT_NAME,
|
|
9972
|
-
status: "active",
|
|
9973
|
-
started_at: startedEpoch,
|
|
9974
|
-
created_at: now,
|
|
9975
|
-
machine_id: machineId
|
|
9976
|
-
});
|
|
9977
|
-
reconcileSession(event.session_id);
|
|
9978
10201
|
}
|
|
9979
10202
|
if (!sessionBuffers.has(event.session_id)) {
|
|
9980
10203
|
const bufferDir = path23.join(vaultDir, "buffer");
|
|
@@ -10914,4 +11137,4 @@ export {
|
|
|
10914
11137
|
handleUserPrompt,
|
|
10915
11138
|
main
|
|
10916
11139
|
};
|
|
10917
|
-
//# sourceMappingURL=main-
|
|
11140
|
+
//# sourceMappingURL=main-4HKTZFIM.js.map
|