@oscharko-dev/keiko-server 0.2.7 → 0.2.8
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/.tsbuildinfo +1 -1
- package/dist/deps.d.ts +1 -0
- package/dist/deps.d.ts.map +1 -1
- package/dist/files.d.ts +18 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +174 -0
- package/dist/gateway-readiness.d.ts +6 -0
- package/dist/gateway-readiness.d.ts.map +1 -0
- package/dist/gateway-readiness.js +624 -0
- package/dist/grounded-qa-hybrid.d.ts.map +1 -1
- package/dist/grounded-qa-hybrid.js +2 -0
- package/dist/grounded-qa-multi-source.d.ts.map +1 -1
- package/dist/grounded-qa-multi-source.js +1 -0
- package/dist/grounded-qa.d.ts.map +1 -1
- package/dist/grounded-qa.js +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
- package/dist/local-knowledge-grounded-qa.js +11 -2
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +5 -10
- package/dist/run-handlers.d.ts +0 -1
- package/dist/run-handlers.d.ts.map +1 -1
- package/dist/run-handlers.js +0 -217
- package/dist/store/db.d.ts.map +1 -1
- package/dist/store/db.js +2 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/messages.d.ts +2 -1
- package/dist/store/messages.d.ts.map +1 -1
- package/dist/store/messages.js +46 -4
- package/dist/store/schema.d.ts +1 -1
- package/dist/store/schema.d.ts.map +1 -1
- package/dist/store/schema.js +7 -1
- package/dist/store/types.d.ts +3 -2
- package/dist/store/types.d.ts.map +1 -1
- package/package.json +19 -19
- package/dist/grounded-handoff.d.ts +0 -4
- package/dist/grounded-handoff.d.ts.map +0 -1
- package/dist/grounded-handoff.js +0 -445
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"AAUA,OAAO,EAOL,KAAK,WAAW,IAAI,kBAAkB,EAEvC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAGlF,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAyC9D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAEvD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAEjE;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAE1D;AAkBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,CAE/F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAS5E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAMvE;AA4ED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK3F;AAKD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,kBAAkB,EACtB,OAAO,EAAE,MAAM,GACd,aAAa,CAef;AAyED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,GAAG,cAAc,CAQ/E;AAwCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAI5D;AAgBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,CAEhF;AAED,wBAAgB,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAE7E;AAsBD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,oBAAoB,EAC1B,eAAe,EAAE,MAAM,GACtB,oBAAoB,CAWtB;AAwCD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAWpE;AAuBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,CAgC/F;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,MAAM,EAAE,CAKnB;AAOD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAgClC,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,kBAAkB,EAAE,CAE/B;AA0DD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,wBAAwB,EAAE,CAgBrC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,mBAAmB,EAAE,CAUhC;AAOD,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAgCvF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAmBrC;AASD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAC3C,IAAI,EAAE,oBAAoB,GACzB,IAAI,CAAC,6BAA6B,EAAE,iBAAiB,CAAC,CAMxD;AAQD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAC3C,IAAI,EAAE,oBAAoB,GACzB,UAAU,CAAC,OAAO,6BAA6B,CAAC,GAAG,SAAS,CAM9D;
|
|
1
|
+
{"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"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"}
|
package/dist/grounded-qa.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export { runMemoryMaintenance, type MaintenanceCounts } from "./memory-maintenan
|
|
|
21
21
|
export { exportMemoryDiagnostics, type ExportMemoryDiagnosticsOptions, type MemoryDiagnostics, type MemoryScopeCount, type MemoryStatusHistogram, } from "./memory-diagnostics.js";
|
|
22
22
|
export { createMemoryEmbedder, selectMemoryEmbeddingModelId, type MemoryEmbedder, } from "./memory-embedding.js";
|
|
23
23
|
export { buildTerminalEvidenceEntry, appendTerminalEvidence, type TerminalEvidenceEntry, } from "./terminal-evidence.js";
|
|
24
|
-
export { handleFilesContent, listFilesDirectories, readFilesContent, readFilesPreview, readFilesTree, writeFilesContent, type FilesContentResponse, type FilesDirectoryEntry, type FilesDirectoryListing, type FilesDirectoryRoot, type FilesEntryKind, type FilesPreviewResponse, type FilesTreeEntry, type FilesTreeResponse, } from "./files.js";
|
|
24
|
+
export { handleFilesContent, handleFilesSearch, listFilesDirectories, readFilesContent, readFilesPreview, readFilesTree, searchFiles, writeFilesContent, type FilesContentResponse, type FilesDirectoryEntry, type FilesDirectoryListing, type FilesDirectoryRoot, type FilesEntryKind, type FilesSearchResponse, type FilesSearchResult, type FilesPreviewResponse, type FilesTreeEntry, type FilesTreeResponse, } from "./files.js";
|
|
25
25
|
export { conversationForGateway, MAX_CONTEXT_MESSAGES, type GatewayConversationMessage, } from "./chat-handlers.js";
|
|
26
26
|
export { conversationForGatewayWithCompaction, type ConversationCompactionOptions, type ConversationCompactionOutcome, } from "./conversation-compaction.js";
|
|
27
27
|
export { handlePromptEnhancement, buildPromptEnhancementRecordInput, runPromptEnhancement, PromptEnhancementCancelledError, PromptEnhancementInputError, type RunPromptEnhancementDeps, } from "./promptEnhancer/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,7 @@ export { runMemoryMaintenance } from "./memory-maintenance-handlers.js";
|
|
|
26
26
|
export { exportMemoryDiagnostics, } from "./memory-diagnostics.js";
|
|
27
27
|
export { createMemoryEmbedder, selectMemoryEmbeddingModelId, } from "./memory-embedding.js";
|
|
28
28
|
export { buildTerminalEvidenceEntry, appendTerminalEvidence, } from "./terminal-evidence.js";
|
|
29
|
-
export { handleFilesContent, listFilesDirectories, readFilesContent, readFilesPreview, readFilesTree, writeFilesContent, } from "./files.js";
|
|
29
|
+
export { handleFilesContent, handleFilesSearch, listFilesDirectories, readFilesContent, readFilesPreview, readFilesTree, searchFiles, writeFilesContent, } from "./files.js";
|
|
30
30
|
// PR4-W4 (ADR-0055) — additive exports so the deterministic context-quality gate
|
|
31
31
|
// (scripts/check-context-quality.mjs) can drive the REAL chat history-compaction splice end-to-end.
|
|
32
32
|
// Behavior-preserving: these names already exist on their modules; only the barrel surface widens.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-knowledge-grounded-qa.d.ts","sourceRoot":"","sources":["../src/local-knowledge-grounded-qa.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"local-knowledge-grounded-qa.d.ts","sourceRoot":"","sources":["../src/local-knowledge-grounded-qa.ts"],"names":[],"mappings":"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"}
|
|
@@ -614,7 +614,10 @@ function persistScopedGroundedAnswer(chat, input, deps, env, selected, result, s
|
|
|
614
614
|
const assistantContent = noEvidenceReason === undefined ? result.answer.trim() : LOCAL_KNOWLEDGE_NO_EVIDENCE_ANSWER;
|
|
615
615
|
const redactedUserContent = redactText(deps, input.content);
|
|
616
616
|
const redactedAssistantContent = redactText(deps, assistantContent);
|
|
617
|
-
|
|
617
|
+
const persisted = persistGroundedExchange(deps, chat.id, redactedUserContent, redactedAssistantContent);
|
|
618
|
+
const answer = buildLocalKnowledgeAnswer(chat, env.store, selected, persisted, result, elapsedMs, redactedAssistantContent, (value) => redactText(deps, value));
|
|
619
|
+
deps.store.attachGroundedAnswer(persisted[1].id, answer);
|
|
620
|
+
return answer;
|
|
618
621
|
}
|
|
619
622
|
async function runScopedGroundedAnswer(chat, input, deps, env, selected, signal) {
|
|
620
623
|
const embeddingAdapter = createEmbeddingAdapter(deps, selected.capsules);
|
|
@@ -647,9 +650,15 @@ export async function handleLocalKnowledgeGroundedAsk(chat, input, deps, signal)
|
|
|
647
650
|
const stateFailure = scopeStateFailure(selected);
|
|
648
651
|
if (stateFailure !== undefined) {
|
|
649
652
|
const redactedMessage = redactText(deps, stateFailure.message);
|
|
653
|
+
const persisted = persistGroundedExchange(deps, chat.id, redactText(deps, input.content), redactedMessage);
|
|
654
|
+
const answer = buildStateFailureAnswer(chat, selected, persisted, {
|
|
655
|
+
...stateFailure,
|
|
656
|
+
message: redactedMessage,
|
|
657
|
+
});
|
|
658
|
+
deps.store.attachGroundedAnswer(persisted[1].id, answer);
|
|
650
659
|
return {
|
|
651
660
|
status: 200,
|
|
652
|
-
body:
|
|
661
|
+
body: answer,
|
|
653
662
|
};
|
|
654
663
|
}
|
|
655
664
|
const answer = await runScopedGroundedAnswer(chat, input, deps, env, selected, signal);
|
package/dist/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAmK/C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,SAAS,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAElD,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,KAChB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAUD,eAAO,MAAM,UAAU,EAAE,SAAS,eAAe,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAmK/C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,SAAS,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAElD,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,KAChB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAUD,eAAO,MAAM,UAAU,EAAE,SAAS,eAAe,EAuYhD,CAAC;AA6BF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAKD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,UAAU,GAAG,oBAAoB,GAAG,SAAS,CA2B/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEjE;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED,wBAAgB,oBAAoB,IAAI,QAAQ,CAE/C"}
|
package/dist/routes.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// (the SSE events route). Non-2xx bodies use the redacted error envelope `{ error: { code, message } }`.
|
|
7
7
|
import { SDK_VERSION } from "@oscharko-dev/keiko-sdk";
|
|
8
8
|
import { handleConfig, handleModels, handleWorkflows, handleWorkspace, handleEvidenceList, handleEvidenceDetail, } from "./read-handlers.js";
|
|
9
|
-
import { handleCreateRun,
|
|
9
|
+
import { handleCreateRun, handleRunEvents, handleCancelRun, handleGetRun, handleApplyRun, } from "./run-handlers.js";
|
|
10
10
|
import { handleListProjects, handleCreateProject, handleUpdateProject, handleDeleteProject, handleListChats, handleCreateChat, handleUpdateChat, handleDeleteChat, handleListMessages, handleCreateMessage, handleCreateRunSummaryPair, handleUpdateMessage, } from "./store-handlers.js";
|
|
11
11
|
import { handleCreateDesktopChat, handleSendDesktopChat } from "./chat-handlers.js";
|
|
12
12
|
import { handleSendDesktopChatStream } from "./chat-stream-handlers.js";
|
|
@@ -15,10 +15,10 @@ import { handleMemoryRetrieveContext, handleMemoryCaptureFromConversation, } fro
|
|
|
15
15
|
import { handleCancelConsolidationJob, handleCreateConsolidationJob, handleGetConsolidationJob, } from "./memory-consolidation-handlers.js";
|
|
16
16
|
import { handleRunMaintenance } from "./memory-maintenance-handlers.js";
|
|
17
17
|
import { handleGroundedAsk } from "./grounded-qa.js";
|
|
18
|
-
import {
|
|
18
|
+
import { handleGatewayReadiness } from "./gateway-readiness.js";
|
|
19
19
|
import { handleGatewaySetup } from "./gateway-setup.js";
|
|
20
20
|
import { handleCreateTerminalExecution, handleDeleteTerminalExecution, handleTerminalDirectories, handleTerminalEvents, handleTerminalPolicy, } from "./terminal-routes.js";
|
|
21
|
-
import { handleFilesContent, handleFilesDirectories, handleFilesPreview, handleFilesTree, } from "./files.js";
|
|
21
|
+
import { handleFilesContent, handleFilesDirectories, handleFilesPreview, handleFilesSearch, handleFilesTree, } from "./files.js";
|
|
22
22
|
import { handleEditorLanguage, handleEditorLanguageCapabilities } from "./editor/languageRoutes.js";
|
|
23
23
|
import { handleEditorContext, handleEditorLocalKnowledgeRetrieve, handleEditorRepoSearch, } from "./editor/contextRoutes.js";
|
|
24
24
|
import { handleEditorCompletion } from "./editor/completionRoutes.js";
|
|
@@ -45,6 +45,7 @@ export const API_ROUTES = [
|
|
|
45
45
|
{ method: "GET", pattern: "/api/health", handler: health },
|
|
46
46
|
{ method: "GET", pattern: "/api/config", handler: handleConfig },
|
|
47
47
|
{ method: "GET", pattern: "/api/models", handler: handleModels },
|
|
48
|
+
{ method: "POST", pattern: "/api/gateway/readiness", handler: handleGatewayReadiness },
|
|
48
49
|
{ method: "POST", pattern: "/api/gateway/setup", handler: handleGatewaySetup },
|
|
49
50
|
{ method: "GET", pattern: "/api/workflows", handler: handleWorkflows },
|
|
50
51
|
{ method: "POST", pattern: "/api/runs", handler: handleCreateRun },
|
|
@@ -62,8 +63,6 @@ export const API_ROUTES = [
|
|
|
62
63
|
{ method: "DELETE", pattern: "/api/projects", handler: handleDeleteProject },
|
|
63
64
|
{ method: "GET", pattern: "/api/chats", handler: handleListChats },
|
|
64
65
|
{ method: "POST", pattern: "/api/chats", handler: handleCreateChat },
|
|
65
|
-
// Issue #66 — composer launch path: persist chat pair and start the run as one BFF operation.
|
|
66
|
-
{ method: "POST", pattern: "/api/chats/runs", handler: handleCreateChatRun },
|
|
67
66
|
{ method: "PATCH", pattern: "/api/chats", handler: handleUpdateChat },
|
|
68
67
|
{ method: "DELETE", pattern: "/api/chats", handler: handleDeleteChat },
|
|
69
68
|
{ method: "GET", pattern: "/api/chats/messages", handler: handleListMessages },
|
|
@@ -78,11 +77,6 @@ export const API_ROUTES = [
|
|
|
78
77
|
{ method: "PATCH", pattern: "/api/chats/messages", handler: handleUpdateMessage },
|
|
79
78
|
// Issue #185 — grounded repository-aware Q&A. Composes #179-#183 behind the chat-scope binding.
|
|
80
79
|
{ method: "POST", pattern: "/api/chats/messages/grounded", handler: handleGroundedAsk },
|
|
81
|
-
{
|
|
82
|
-
method: "POST",
|
|
83
|
-
pattern: "/api/chats/messages/grounded/handoff",
|
|
84
|
-
handler: handleGroundedWorkflowHandoff,
|
|
85
|
-
},
|
|
86
80
|
// Desktop canvas V1 — real chat against the configured gateway model without new agent scope.
|
|
87
81
|
{ method: "POST", pattern: "/api/desktop/chats", handler: handleCreateDesktopChat },
|
|
88
82
|
{ method: "POST", pattern: "/api/desktop/chat", handler: handleSendDesktopChat },
|
|
@@ -101,6 +95,7 @@ export const API_ROUTES = [
|
|
|
101
95
|
// Desktop files — selected-root browser, preview, and editor control plane.
|
|
102
96
|
{ method: "GET", pattern: "/api/files/directories", handler: handleFilesDirectories },
|
|
103
97
|
{ method: "GET", pattern: "/api/files/tree", handler: handleFilesTree },
|
|
98
|
+
{ method: "GET", pattern: "/api/files/search", handler: handleFilesSearch },
|
|
104
99
|
{ method: "GET", pattern: "/api/files/preview", handler: handleFilesPreview },
|
|
105
100
|
{ method: "GET", pattern: "/api/files/content", handler: handleFilesContent },
|
|
106
101
|
{ method: "PATCH", pattern: "/api/files/content", handler: handleFilesContent },
|
package/dist/run-handlers.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { RouteContext, RouteResult, HandlerOutcome } from "./routes.js";
|
|
2
2
|
import type { UiHandlerDeps } from "./deps.js";
|
|
3
3
|
export declare function handleCreateRun(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
|
|
4
|
-
export declare function handleCreateChatRun(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
|
|
5
4
|
export declare function handleRunEvents(ctx: RouteContext, deps: UiHandlerDeps): HandlerOutcome;
|
|
6
5
|
export declare function handleCancelRun(ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
|
|
7
6
|
export declare function handleGetRun(ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-handlers.d.ts","sourceRoot":"","sources":["../src/run-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-handlers.d.ts","sourceRoot":"","sources":["../src/run-handlers.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAoG/C,wBAAsB,eAAe,CACnC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,WAAW,CAAC,CAyCtB;AAeD,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,cAAc,CAUtF;AA+BD,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CAOnF;AAGD,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CAYhF;AAuBD,wBAAsB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBjG"}
|
package/dist/run-handlers.js
CHANGED
|
@@ -5,17 +5,13 @@
|
|
|
5
5
|
// redacted final report projection (or status:"running"); apply is the ONLY write path, re-invoking
|
|
6
6
|
// the same workflow with apply:true through the existing gated path. No model is ever called
|
|
7
7
|
// directly; no guard is reimplemented; no secret reaches any response (live payloads are redacted).
|
|
8
|
-
import { randomUUID } from "node:crypto";
|
|
9
8
|
import { parseRunRequest } from "./run-request.js";
|
|
10
9
|
import { startRun, applyRun } from "./run-engine.js";
|
|
11
10
|
import { ActiveRunLimitError } from "./runs.js";
|
|
12
11
|
import { SSE_HEADERS, writeEvent, readyMessage } from "./sse.js";
|
|
13
12
|
import { errorBody, STREAMING } from "./routes.js";
|
|
14
13
|
import { currentRedactionSecrets } from "./deps.js";
|
|
15
|
-
import { createAuditRedactor } from "@oscharko-dev/keiko-evidence";
|
|
16
14
|
import { WorkspaceError } from "@oscharko-dev/keiko-workspace";
|
|
17
|
-
import { UiStoreError } from "./store/index.js";
|
|
18
|
-
import { memoryCaptureCustomerMatchers } from "./memory-capture-policy.js";
|
|
19
15
|
const MAX_BODY_BYTES = 1_000_000;
|
|
20
16
|
const VERIFY_NOOP_MODEL = {
|
|
21
17
|
call: () => Promise.reject(new Error("verify runs must not call the model")),
|
|
@@ -78,109 +74,6 @@ function resolveRunModel(parsed, deps) {
|
|
|
78
74
|
function isRecord(value) {
|
|
79
75
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
80
76
|
}
|
|
81
|
-
function requireBodyString(body, name) {
|
|
82
|
-
const value = body[name];
|
|
83
|
-
if (typeof value !== "string" || value.length === 0) {
|
|
84
|
-
return { status: 400, body: errorBody("BAD_REQUEST", `Field "${name}" is required.`) };
|
|
85
|
-
}
|
|
86
|
-
return value;
|
|
87
|
-
}
|
|
88
|
-
function requireBodyNumber(body, name) {
|
|
89
|
-
const value = body[name];
|
|
90
|
-
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
91
|
-
return {
|
|
92
|
-
status: 400,
|
|
93
|
-
body: errorBody("BAD_REQUEST", `Field "${name}" must be a finite number.`),
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return value;
|
|
97
|
-
}
|
|
98
|
-
function requireBodyRecord(body, name) {
|
|
99
|
-
const value = body[name];
|
|
100
|
-
if (!isRecord(value)) {
|
|
101
|
-
return { status: 400, body: errorBody("BAD_REQUEST", `Field "${name}" must be an object.`) };
|
|
102
|
-
}
|
|
103
|
-
return value;
|
|
104
|
-
}
|
|
105
|
-
function parseJsonRecord(raw) {
|
|
106
|
-
let parsed;
|
|
107
|
-
try {
|
|
108
|
-
parsed = JSON.parse(raw);
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return { status: 400, body: errorBody("BAD_REQUEST", "Request body is not valid JSON.") };
|
|
112
|
-
}
|
|
113
|
-
if (!isRecord(parsed)) {
|
|
114
|
-
return { status: 400, body: errorBody("BAD_REQUEST", "Request body must be a JSON object.") };
|
|
115
|
-
}
|
|
116
|
-
return parsed;
|
|
117
|
-
}
|
|
118
|
-
function isRouteResult(value) {
|
|
119
|
-
return isRecord(value) && typeof value.status === "number" && "body" in value;
|
|
120
|
-
}
|
|
121
|
-
function chatBelongsToProject(deps, projectPath, chatId) {
|
|
122
|
-
return deps.store.listChats(projectPath).some((chat) => chat.id === chatId);
|
|
123
|
-
}
|
|
124
|
-
function runSummaryDiscriminator(request) {
|
|
125
|
-
if (request.kind === "unit-tests") {
|
|
126
|
-
return { workflowId: "unit-test-generation", taskType: undefined };
|
|
127
|
-
}
|
|
128
|
-
if (request.kind === "bug-investigation") {
|
|
129
|
-
return { workflowId: "bug-investigation", taskType: undefined };
|
|
130
|
-
}
|
|
131
|
-
if (request.kind === "explain-plan") {
|
|
132
|
-
return { workflowId: undefined, taskType: "explain-plan" };
|
|
133
|
-
}
|
|
134
|
-
return { workflowId: undefined, taskType: "verify" };
|
|
135
|
-
}
|
|
136
|
-
function buildChatRunMessages(body, request, chatId, runId) {
|
|
137
|
-
const user = requireBodyRecord(body, "user");
|
|
138
|
-
if (isRouteResult(user))
|
|
139
|
-
return user;
|
|
140
|
-
const summary = requireBodyRecord(body, "summary");
|
|
141
|
-
if (isRouteResult(summary))
|
|
142
|
-
return summary;
|
|
143
|
-
const userContent = requireBodyString(user, "content");
|
|
144
|
-
if (typeof userContent !== "string")
|
|
145
|
-
return userContent;
|
|
146
|
-
const userTimestamp = requireBodyNumber(user, "timestamp");
|
|
147
|
-
if (typeof userTimestamp !== "number")
|
|
148
|
-
return userTimestamp;
|
|
149
|
-
const summaryContent = requireBodyString(summary, "content");
|
|
150
|
-
if (typeof summaryContent !== "string")
|
|
151
|
-
return summaryContent;
|
|
152
|
-
const summaryTimestamp = requireBodyNumber(summary, "timestamp");
|
|
153
|
-
if (typeof summaryTimestamp !== "number")
|
|
154
|
-
return summaryTimestamp;
|
|
155
|
-
const discriminator = runSummaryDiscriminator(request);
|
|
156
|
-
return [
|
|
157
|
-
{
|
|
158
|
-
chatId,
|
|
159
|
-
role: "user",
|
|
160
|
-
content: userContent,
|
|
161
|
-
timestamp: userTimestamp,
|
|
162
|
-
runId: undefined,
|
|
163
|
-
workflowId: undefined,
|
|
164
|
-
workflowStatus: undefined,
|
|
165
|
-
shortResult: undefined,
|
|
166
|
-
taskType: undefined,
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
chatId,
|
|
170
|
-
role: "system",
|
|
171
|
-
content: summaryContent,
|
|
172
|
-
timestamp: summaryTimestamp,
|
|
173
|
-
runId,
|
|
174
|
-
workflowId: discriminator.workflowId,
|
|
175
|
-
workflowStatus: "running",
|
|
176
|
-
shortResult: undefined,
|
|
177
|
-
taskType: discriminator.taskType,
|
|
178
|
-
},
|
|
179
|
-
];
|
|
180
|
-
}
|
|
181
|
-
function storeErrorResult(error) {
|
|
182
|
-
return { status: error.status, body: errorBody(error.code, error.message) };
|
|
183
|
-
}
|
|
184
77
|
// Static, path-safe message for workspace errors surfaced during run launch. The underlying
|
|
185
78
|
// WorkspaceError messages may carry absolute paths — we never echo them (ADR-0005, CWE-209).
|
|
186
79
|
const WORKSPACE_RUN_ERROR_MESSAGE = "The selected workspace could not be prepared: no recognized project workspace marker was found, or the target file could not be read.";
|
|
@@ -190,86 +83,6 @@ function workspaceRunErrorResult() {
|
|
|
190
83
|
body: errorBody("WORKSPACE_UNAVAILABLE", WORKSPACE_RUN_ERROR_MESSAGE),
|
|
191
84
|
};
|
|
192
85
|
}
|
|
193
|
-
function markSummaryFailed(deps, message, shortResult) {
|
|
194
|
-
try {
|
|
195
|
-
deps.store.updateMessage(message.id, { workflowStatus: "failed", shortResult });
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
// Best-effort compensation only. The original start error remains the response source.
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
function parseChatRunEnvelope(raw, deps) {
|
|
202
|
-
const body = parseJsonRecord(raw);
|
|
203
|
-
if (isRouteResult(body))
|
|
204
|
-
return body;
|
|
205
|
-
const chatId = requireBodyString(body, "chatId");
|
|
206
|
-
if (isRouteResult(chatId))
|
|
207
|
-
return chatId;
|
|
208
|
-
const projectPath = requireBodyString(body, "projectPath");
|
|
209
|
-
if (isRouteResult(projectPath))
|
|
210
|
-
return projectPath;
|
|
211
|
-
if (!chatBelongsToProject(deps, projectPath, chatId)) {
|
|
212
|
-
return { status: 404, body: errorBody("NOT_FOUND", "Chat not found.") };
|
|
213
|
-
}
|
|
214
|
-
const runBody = requireBodyRecord(body, "run");
|
|
215
|
-
if (isRouteResult(runBody))
|
|
216
|
-
return runBody;
|
|
217
|
-
return { body, chatId, projectPath, runBody };
|
|
218
|
-
}
|
|
219
|
-
function validateChatRunRequest(runBody, deps) {
|
|
220
|
-
const parsed = parseRunRequest(JSON.stringify(runBody));
|
|
221
|
-
if ("code" in parsed) {
|
|
222
|
-
return { status: 400, body: errorBody(parsed.code, parsed.message) };
|
|
223
|
-
}
|
|
224
|
-
const unregistered = rejectUnregisteredWorkspace(parsed, deps);
|
|
225
|
-
if (unregistered !== null)
|
|
226
|
-
return unregistered;
|
|
227
|
-
const model = resolveRunModel(parsed, deps);
|
|
228
|
-
return model === undefined
|
|
229
|
-
? { status: 400, body: errorBody("NO_MODEL", "No model provider is configured.") }
|
|
230
|
-
: { request: parsed, model };
|
|
231
|
-
}
|
|
232
|
-
function engineContextFor(deps, request, model) {
|
|
233
|
-
return {
|
|
234
|
-
request,
|
|
235
|
-
model,
|
|
236
|
-
registry: deps.registry,
|
|
237
|
-
evidence: {
|
|
238
|
-
store: deps.evidenceStore,
|
|
239
|
-
env: deps.env,
|
|
240
|
-
additionalSecrets: currentRedactionSecrets(deps),
|
|
241
|
-
},
|
|
242
|
-
memoryVault: deps.memoryVault,
|
|
243
|
-
memoryAuditRedactString: createAuditRedactor({ additionalSecrets: currentRedactionSecrets(deps) }, deps.env),
|
|
244
|
-
memoryCustomerIdentifierMatchers: memoryCaptureCustomerMatchers(deps),
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
function persistChatRunMessages(deps, envelope, request, runId) {
|
|
248
|
-
const messagesInput = buildChatRunMessages(envelope.body, request, envelope.chatId, runId);
|
|
249
|
-
if (isRouteResult(messagesInput))
|
|
250
|
-
return messagesInput;
|
|
251
|
-
try {
|
|
252
|
-
return deps.store.createMessages(messagesInput);
|
|
253
|
-
}
|
|
254
|
-
catch (error) {
|
|
255
|
-
if (error instanceof UiStoreError)
|
|
256
|
-
return storeErrorResult(error);
|
|
257
|
-
throw error;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
function startPersistedChatRun(deps, request, model, runId, messages) {
|
|
261
|
-
try {
|
|
262
|
-
const run = startRun(engineContextFor(deps, request, model), deps.redactor, { runId });
|
|
263
|
-
return { status: 202, body: { run, messages } };
|
|
264
|
-
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
const summary = messages[1];
|
|
267
|
-
if (summary !== undefined) {
|
|
268
|
-
markSummaryFailed(deps, summary, "Run could not be started.");
|
|
269
|
-
}
|
|
270
|
-
return mapRunStartError(error);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
86
|
function mapRunStartError(error) {
|
|
274
87
|
if (error instanceof ActiveRunLimitError) {
|
|
275
88
|
return { status: 429, body: errorBody("TOO_MANY_RUNS", "The active run limit is reached.") };
|
|
@@ -324,36 +137,6 @@ export async function handleCreateRun(ctx, deps) {
|
|
|
324
137
|
return mapRunStartError(error);
|
|
325
138
|
}
|
|
326
139
|
}
|
|
327
|
-
// Route — POST /api/chats/runs. Composer-specific path that makes Issue #66's chat invariant
|
|
328
|
-
// explicit: a successful workflow launch first reserves a runId and persists exactly one user
|
|
329
|
-
// message plus one system run summary, then starts the run with that reserved runId. If persistence
|
|
330
|
-
// fails, no run is started; if the start is refused, the summary is terminalized as failed.
|
|
331
|
-
export async function handleCreateChatRun(ctx, deps) {
|
|
332
|
-
let raw;
|
|
333
|
-
try {
|
|
334
|
-
raw = await readBody(ctx.req);
|
|
335
|
-
}
|
|
336
|
-
catch (error) {
|
|
337
|
-
if (error instanceof BodyTooLargeError) {
|
|
338
|
-
return {
|
|
339
|
-
status: 413,
|
|
340
|
-
body: errorBody("PAYLOAD_TOO_LARGE", "Request body exceeds the size limit."),
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
throw error;
|
|
344
|
-
}
|
|
345
|
-
const envelope = parseChatRunEnvelope(raw, deps);
|
|
346
|
-
if (isRouteResult(envelope))
|
|
347
|
-
return envelope;
|
|
348
|
-
const validated = validateChatRunRequest(envelope.runBody, deps);
|
|
349
|
-
if (isRouteResult(validated))
|
|
350
|
-
return validated;
|
|
351
|
-
const runId = randomUUID();
|
|
352
|
-
const messages = persistChatRunMessages(deps, envelope, validated.request, runId);
|
|
353
|
-
if (isRouteResult(messages))
|
|
354
|
-
return messages;
|
|
355
|
-
return startPersistedChatRun(deps, validated.request, validated.model, runId, messages);
|
|
356
|
-
}
|
|
357
140
|
function lastEventId(req) {
|
|
358
141
|
const header = req.headers["last-event-id"];
|
|
359
142
|
const value = Array.isArray(header) ? header[0] : header;
|
package/dist/store/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAMV,OAAO,EACP,qBAAqB,EAKtB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAMV,OAAO,EACP,qBAAqB,EAKtB,MAAM,YAAY,CAAC;AAkCpB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAM9E;AAiKD,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAa3C,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAI3E;AAgCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAkB/D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEhG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEvF"}
|
package/dist/store/db.js
CHANGED
|
@@ -8,7 +8,7 @@ import { randomUUID } from "node:crypto";
|
|
|
8
8
|
import { runMigrations } from "./schema.js";
|
|
9
9
|
import { deleteProject as sqlDeleteProject, getProject as sqlGetProject, listProjects as sqlListProjects, updateProject as sqlUpdateProject, upsertProject as sqlUpsertProject, } from "./projects.js";
|
|
10
10
|
import { deleteChat as sqlDeleteChat, findChatById as sqlFindChatById, insertChat as sqlInsertChat, listChats as sqlListChats, listChatsLimited as sqlListChatsLimited, touchChat as sqlTouchChat, updateChat as sqlUpdateChat, } from "./chats.js";
|
|
11
|
-
import { findMessageById as sqlFindMessageById, insertMessage as sqlInsertMessage, listMessages as sqlListMessages, listMessagesLimited as sqlListMessagesLimited, updateMessage as sqlUpdateMessage, } from "./messages.js";
|
|
11
|
+
import { findMessageById as sqlFindMessageById, attachGroundedAnswer as sqlAttachGroundedAnswer, insertMessage as sqlInsertMessage, listMessages as sqlListMessages, listMessagesLimited as sqlListMessagesLimited, updateMessage as sqlUpdateMessage, } from "./messages.js";
|
|
12
12
|
import { validateProjectPath } from "./validation.js";
|
|
13
13
|
import { basename } from "node:path";
|
|
14
14
|
import { invalidRequest } from "./errors.js";
|
|
@@ -111,6 +111,7 @@ function buildStore(db, options) {
|
|
|
111
111
|
},
|
|
112
112
|
createMessages: (messages) => createMessageBatch(db, options, messages),
|
|
113
113
|
updateMessage: (id, patch) => sqlUpdateMessage(db, id, patch, options.redactString),
|
|
114
|
+
attachGroundedAnswer: (id, answer) => sqlAttachGroundedAnswer(db, id, answer, options.redactString),
|
|
114
115
|
close: () => {
|
|
115
116
|
db.close();
|
|
116
117
|
},
|
package/dist/store/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { Chat, ChatConnectedScope, ChatLocalKnowledgeScope, ChatMessage, ChatRole, CreateChatOptions, NewChatMessage, Project, UiStore, UiStoreFactoryOptions, UpdateChatOptions, UpdateChatMessagePatch, UpdateChatPatch, UpdateProjectPatch, WorkflowStatus, } from "./types.js";
|
|
1
|
+
export type { Chat, ChatConnectedScope, ChatLocalKnowledgeScope, ChatMessage, ChatRole, CreateChatOptions, GroundedAnswer, NewChatMessage, Project, UiStore, UiStoreFactoryOptions, UpdateChatOptions, UpdateChatMessagePatch, UpdateChatPatch, UpdateProjectPatch, WorkflowStatus, } from "./types.js";
|
|
2
2
|
export { UiStoreError, type UiStoreErrorCode, invalidPath, invalidRequest, notFound, pathNotDirectory, pathNotFound, projectExists, } from "./errors.js";
|
|
3
3
|
export { classifyPathShape, validateProjectPath, type PathShape, type ValidateProjectPathOptions, } from "./validation.js";
|
|
4
4
|
export { assertUiDbOutsideProject, resolveUiDbPath, UI_DB_FILENAME, UI_DB_DIRNAME, } from "./paths.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,OAAO,EACP,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,OAAO,EACP,OAAO,EACP,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
|
package/dist/store/messages.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import type { ChatMessage, NewChatMessage, UpdateChatMessagePatch } from "./types.js";
|
|
2
|
+
import type { ChatMessage, GroundedAnswer, NewChatMessage, UpdateChatMessagePatch } from "./types.js";
|
|
3
3
|
export declare function listMessages(db: DatabaseSync, chatId: string): readonly ChatMessage[];
|
|
4
4
|
export declare function listMessagesLimited(db: DatabaseSync, chatId: string, limit: number): readonly ChatMessage[];
|
|
5
5
|
export declare function findMessageById(db: DatabaseSync, id: string): ChatMessage | undefined;
|
|
6
6
|
export declare function insertMessage(db: DatabaseSync, id: string, msg: NewChatMessage, redactString: (s: string) => string): ChatMessage;
|
|
7
|
+
export declare function attachGroundedAnswer(db: DatabaseSync, id: string, answer: GroundedAnswer, redactString: (s: string) => string): ChatMessage;
|
|
7
8
|
export declare function updateMessage(db: DatabaseSync, id: string, patch: UpdateChatMessagePatch, redactString: (s: string) => string): ChatMessage;
|
|
8
9
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/store/messages.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EAEX,cAAc,EACd,sBAAsB,EAEvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/store/messages.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EAEX,cAAc,EACd,cAAc,EACd,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AA4IpB,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAErF;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,SAAS,WAAW,EAAE,CAOxB;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrF;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAClC,WAAW,CAsBb;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAClC,WAAW,CAcb;AAOD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,sBAAsB,EAC7B,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAClC,WAAW,CA6Bb"}
|
package/dist/store/messages.js
CHANGED
|
@@ -17,7 +17,18 @@ const STATUSES = new Set([
|
|
|
17
17
|
"failed",
|
|
18
18
|
"cancelled",
|
|
19
19
|
]);
|
|
20
|
+
function parseGroundedAnswer(raw) {
|
|
21
|
+
if (raw === null)
|
|
22
|
+
return undefined;
|
|
23
|
+
try {
|
|
24
|
+
return JSON.parse(raw);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
20
30
|
function rowToMessage(row) {
|
|
31
|
+
const groundedAnswer = parseGroundedAnswer(row.grounded_answer_json);
|
|
21
32
|
return {
|
|
22
33
|
id: row.id,
|
|
23
34
|
chatId: row.chat_id,
|
|
@@ -29,17 +40,18 @@ function rowToMessage(row) {
|
|
|
29
40
|
workflowStatus: (row.workflow_status ?? undefined),
|
|
30
41
|
shortResult: row.short_result ?? undefined,
|
|
31
42
|
taskType: row.task_type ?? undefined,
|
|
43
|
+
...(groundedAnswer === undefined ? {} : { groundedAnswer }),
|
|
32
44
|
};
|
|
33
45
|
}
|
|
34
|
-
const COLUMNS = "id, chat_id, role, content, timestamp, run_id, workflow_id, workflow_status, short_result, task_type";
|
|
46
|
+
const COLUMNS = "id, chat_id, role, content, timestamp, run_id, workflow_id, workflow_status, short_result, task_type, grounded_answer_json";
|
|
35
47
|
const SQL_LIST = `SELECT ${COLUMNS} FROM chat_messages WHERE chat_id = ? ORDER BY timestamp ASC, rowid ASC`;
|
|
36
48
|
const SQL_LIST_LIMITED = `${SQL_LIST} LIMIT ?`;
|
|
37
49
|
const SQL_FIND_BY_ID = `SELECT ${COLUMNS} FROM chat_messages WHERE id = ? LIMIT 1`;
|
|
38
50
|
const SQL_CHAT_EXISTS = "SELECT 1 FROM chats WHERE id = ?";
|
|
39
51
|
const SQL_INSERT = `
|
|
40
52
|
INSERT INTO chat_messages
|
|
41
|
-
(id, chat_id, role, content, timestamp, run_id, workflow_id, workflow_status, short_result, task_type)
|
|
42
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
53
|
+
(id, chat_id, role, content, timestamp, run_id, workflow_id, workflow_status, short_result, task_type, grounded_answer_json)
|
|
54
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
43
55
|
RETURNING ${COLUMNS}
|
|
44
56
|
`;
|
|
45
57
|
function validateTaskType(value) {
|
|
@@ -66,6 +78,9 @@ function validateRunSummaryScope(msg) {
|
|
|
66
78
|
if (hasRunSummaryFields(msg) && (msg.role !== "system" || msg.runId === undefined)) {
|
|
67
79
|
throw invalidRequest("Run summary fields require a system message with runId.");
|
|
68
80
|
}
|
|
81
|
+
if (msg.groundedAnswer !== undefined && msg.role !== "assistant") {
|
|
82
|
+
throw invalidRequest("Grounded answer metadata requires an assistant message.");
|
|
83
|
+
}
|
|
69
84
|
}
|
|
70
85
|
function validateMessage(msg) {
|
|
71
86
|
if (!ROLES.has(msg.role))
|
|
@@ -86,6 +101,18 @@ function processShortResult(raw, redactString) {
|
|
|
86
101
|
const redacted = redactString(raw);
|
|
87
102
|
return redacted.length > MAX_SHORT_RESULT ? redacted.slice(0, MAX_SHORT_RESULT) : redacted;
|
|
88
103
|
}
|
|
104
|
+
function processGroundedAnswer(raw, redactString) {
|
|
105
|
+
if (raw === undefined)
|
|
106
|
+
return null;
|
|
107
|
+
const redacted = redactString(JSON.stringify(raw));
|
|
108
|
+
try {
|
|
109
|
+
JSON.parse(redacted);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
throw invalidRequest("Grounded answer metadata is invalid.");
|
|
113
|
+
}
|
|
114
|
+
return redacted;
|
|
115
|
+
}
|
|
89
116
|
export function listMessages(db, chatId) {
|
|
90
117
|
return db.prepare(SQL_LIST).all(chatId).map(rowToMessage);
|
|
91
118
|
}
|
|
@@ -105,9 +132,24 @@ export function insertMessage(db, id, msg, redactString) {
|
|
|
105
132
|
if (!chatExists)
|
|
106
133
|
throw notFound("Chat");
|
|
107
134
|
const shortResult = processShortResult(msg.shortResult, redactString);
|
|
135
|
+
const groundedAnswer = processGroundedAnswer(msg.groundedAnswer, redactString);
|
|
108
136
|
const row = db
|
|
109
137
|
.prepare(SQL_INSERT)
|
|
110
|
-
.get(id, msg.chatId, msg.role, msg.content, msg.timestamp, msg.runId ?? null, msg.workflowId ?? null, msg.workflowStatus ?? null, shortResult, msg.taskType ?? null);
|
|
138
|
+
.get(id, msg.chatId, msg.role, msg.content, msg.timestamp, msg.runId ?? null, msg.workflowId ?? null, msg.workflowStatus ?? null, shortResult, msg.taskType ?? null, groundedAnswer);
|
|
139
|
+
return rowToMessage(row);
|
|
140
|
+
}
|
|
141
|
+
export function attachGroundedAnswer(db, id, answer, redactString) {
|
|
142
|
+
const groundedAnswer = processGroundedAnswer(answer, redactString);
|
|
143
|
+
const row = db
|
|
144
|
+
.prepare(`
|
|
145
|
+
UPDATE chat_messages
|
|
146
|
+
SET grounded_answer_json = ?
|
|
147
|
+
WHERE id = ? AND role = 'assistant'
|
|
148
|
+
RETURNING ${COLUMNS}
|
|
149
|
+
`)
|
|
150
|
+
.get(groundedAnswer, id);
|
|
151
|
+
if (row === undefined)
|
|
152
|
+
throw notFound("Message");
|
|
111
153
|
return rowToMessage(row);
|
|
112
154
|
}
|
|
113
155
|
// Issue #66 — Partial PATCH on a system run-summary message. Builds a dynamic SET clause from the
|
package/dist/store/schema.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,cAAc,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,cAAc,IAAI,CAAC;AA4NhC,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAepD"}
|