@superblocksteam/vite-plugin-file-sync 2.0.137-next.0 → 2.0.138-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-service/agent/middleware.d.ts.map +1 -1
- package/dist/ai-service/agent/middleware.js +2 -22
- package/dist/ai-service/agent/middleware.js.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +1 -0
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.js +150 -7
- package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
- package/dist/ai-service/agent/tools/build-read-file.d.ts +10 -0
- package/dist/ai-service/agent/tools/build-read-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-read-file.js +14 -1
- package/dist/ai-service/agent/tools/build-read-file.js.map +1 -1
- package/dist/ai-service/agent/tools/index.d.ts +1 -1
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/index.js +1 -1
- package/dist/ai-service/agent/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +15 -1
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.js +2 -1
- package/dist/ai-service/agent/tools2/tools/grep.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.js +8 -0
- package/dist/ai-service/agent/tools2/tools/remember-knowledge.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/start-test-run.js +14 -6
- package/dist/ai-service/agent/tools2/tools/start-test-run.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts +2 -0
- package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/web-fetch.js +10 -5
- package/dist/ai-service/agent/tools2/tools/web-fetch.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +25 -7
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/linter.d.ts.map +1 -1
- package/dist/ai-service/app-interface/linter.js +14 -3
- package/dist/ai-service/app-interface/linter.js.map +1 -1
- package/dist/ai-service/app-interface/npm-package-lookup.d.ts +19 -14
- package/dist/ai-service/app-interface/npm-package-lookup.d.ts.map +1 -1
- package/dist/ai-service/app-interface/npm-package-lookup.js +56 -23
- package/dist/ai-service/app-interface/npm-package-lookup.js.map +1 -1
- package/dist/ai-service/app-interface/npm-registry.d.ts +96 -48
- package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -1
- package/dist/ai-service/app-interface/npm-registry.js +247 -220
- package/dist/ai-service/app-interface/npm-registry.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts +36 -0
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +183 -8
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
- package/dist/ai-service/app-skills/helpers.js +48 -8
- package/dist/ai-service/app-skills/helpers.js.map +1 -1
- package/dist/ai-service/app-skills/manager.d.ts +5 -0
- package/dist/ai-service/app-skills/manager.d.ts.map +1 -1
- package/dist/ai-service/app-skills/manager.js +13 -4
- package/dist/ai-service/app-skills/manager.js.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -1
- package/dist/ai-service/attachments/uploaded-content-part.js +12 -5
- package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -1
- package/dist/ai-service/index.d.ts +1 -2
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +16 -175
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/judge/judge-eval-service-runner.js +0 -4
- package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -1
- package/dist/ai-service/judge/judge-service.js +1 -1
- package/dist/ai-service/judge/judge-service.js.map +1 -1
- package/dist/ai-service/knowledge/knowledge-metrics-emitters.d.ts +20 -0
- package/dist/ai-service/knowledge/knowledge-metrics-emitters.d.ts.map +1 -0
- package/dist/ai-service/knowledge/knowledge-metrics-emitters.js +77 -0
- package/dist/ai-service/knowledge/knowledge-metrics-emitters.js.map +1 -0
- package/dist/ai-service/knowledge/knowledge-metrics.d.ts +43 -0
- package/dist/ai-service/knowledge/knowledge-metrics.d.ts.map +1 -0
- package/dist/ai-service/knowledge/knowledge-metrics.js +217 -0
- package/dist/ai-service/knowledge/knowledge-metrics.js.map +1 -0
- package/dist/ai-service/llm/client.d.ts +144 -18
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +303 -48
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context-metrics.d.ts +1 -0
- package/dist/ai-service/llm/context-v2/context-metrics.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context-metrics.js +14 -1
- package/dist/ai-service/llm/context-v2/context-metrics.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context.d.ts +3 -0
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context.js +34 -1
- package/dist/ai-service/llm/context-v2/context.js.map +1 -1
- package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/manager.js +4 -1
- package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.js +19 -4
- package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
- package/dist/ai-service/llm/interaction/provider.d.ts +17 -3
- package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +19 -15
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.js +25 -2
- package/dist/ai-service/llm/stream/managed-stream.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts +9 -0
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.js +22 -5
- package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/logging.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/logging.js +17 -12
- package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts +1 -0
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.js +131 -0
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
- package/dist/ai-service/llm/types.d.ts +17 -6
- package/dist/ai-service/llm/types.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts +3 -1
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts.map +1 -1
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js +13 -5
- package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -1
- package/dist/ai-service/security/safety-classifier.d.ts +14 -1
- package/dist/ai-service/security/safety-classifier.d.ts.map +1 -1
- package/dist/ai-service/security/safety-classifier.js +26 -12
- package/dist/ai-service/security/safety-classifier.js.map +1 -1
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js +35 -18
- package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js.map +1 -1
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +7 -5
- package/dist/ai-service/skills/system/third-party-migration/skill.generated.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +3 -2
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +14 -7
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.js +40 -27
- package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +14 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +72 -16
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/next-steps.d.ts +8 -1
- package/dist/ai-service/state-machine/handlers/next-steps.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/next-steps.js +13 -11
- package/dist/ai-service/state-machine/handlers/next-steps.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +3 -2
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +5 -0
- package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/stable-peer.js +37 -0
- package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -1
- package/dist/ai-service/template-renderer.d.ts.map +1 -1
- package/dist/ai-service/template-renderer.js +2 -2
- package/dist/ai-service/template-renderer.js.map +1 -1
- package/dist/ai-service/types.d.ts +2 -2
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/dev-server-ws-smoke-client.d.ts +41 -0
- package/dist/dev-server-ws-smoke-client.d.ts.map +1 -0
- package/dist/dev-server-ws-smoke-client.js +314 -0
- package/dist/dev-server-ws-smoke-client.js.map +1 -0
- package/dist/early-error-relay.d.ts +31 -0
- package/dist/early-error-relay.d.ts.map +1 -0
- package/dist/early-error-relay.js +88 -0
- package/dist/early-error-relay.js.map +1 -0
- package/dist/file-sync-vite-plugin.d.ts +26 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +82 -43
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts +13 -0
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +18 -1
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/file-system-manager.d.ts +0 -1
- package/dist/file-system-manager.d.ts.map +1 -1
- package/dist/file-system-manager.js +0 -53
- package/dist/file-system-manager.js.map +1 -1
- package/dist/injected-index.d.ts +6 -0
- package/dist/injected-index.d.ts.map +1 -1
- package/dist/injected-index.js +59 -14
- package/dist/injected-index.js.map +1 -1
- package/dist/migration/migration-routes.d.ts +3 -0
- package/dist/migration/migration-routes.d.ts.map +1 -1
- package/dist/migration/migration-routes.js +93 -108
- package/dist/migration/migration-routes.js.map +1 -1
- package/dist/migration/restructure.d.ts +15 -0
- package/dist/migration/restructure.d.ts.map +1 -1
- package/dist/migration/restructure.js +50 -1
- package/dist/migration/restructure.js.map +1 -1
- package/dist/migration-templates/app-fullstack/eslint.config.js +6 -1
- package/dist/migration-templates/app-fullstack/package.json +2 -1
- package/dist/plugin-options.d.ts +7 -0
- package/dist/plugin-options.d.ts.map +1 -1
- package/dist/plugin-options.js.map +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +0 -5
- package/dist/socket-manager.js.map +1 -1
- package/dist/sync-service/list-dir.d.ts +1 -1
- package/dist/sync-service/list-dir.js +3 -3
- package/dist/sync-service/list-dir.js.map +1 -1
- package/dist/util/log-sanitizer.d.ts.map +1 -1
- package/dist/util/log-sanitizer.js +13 -6
- package/dist/util/log-sanitizer.js.map +1 -1
- package/dist/util/summarize-for-logging.d.ts +14 -0
- package/dist/util/summarize-for-logging.d.ts.map +1 -0
- package/dist/util/summarize-for-logging.js +94 -0
- package/dist/util/summarize-for-logging.js.map +1 -0
- package/package.json +8 -8
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.d.ts +0 -4
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.d.ts.map +0 -1
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.js +0 -19
- package/dist/ai-service/agent/tools2/tools/explain-code-finalize.js.map +0 -1
- package/dist/ai-service/llm/impl/anthropic.d.ts +0 -3
- package/dist/ai-service/llm/impl/anthropic.d.ts.map +0 -1
- package/dist/ai-service/llm/impl/anthropic.js +0 -15
- package/dist/ai-service/llm/impl/anthropic.js.map +0 -1
- package/dist/ai-service/prompts/explain-code.d.ts +0 -7
- package/dist/ai-service/prompts/explain-code.d.ts.map +0 -1
- package/dist/ai-service/prompts/explain-code.js +0 -23
- package/dist/ai-service/prompts/explain-code.js.map +0 -1
- package/dist/ai-service/util/json-stream-parser.d.ts +0 -20
- package/dist/ai-service/util/json-stream-parser.d.ts.map +0 -1
- package/dist/ai-service/util/json-stream-parser.js +0 -139
- package/dist/ai-service/util/json-stream-parser.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-metrics-emitters.d.ts","sourceRoot":"","sources":["../../../src/ai-service/knowledge/knowledge-metrics-emitters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AA+BhC;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,UAAU,CAAC,EAAE;QACX,sBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;CACvB,GAAG,IAAI,CA+BP;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;CACvB,GAAG,IAAI,CAMP;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQzE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { FactAccessType } from "@superblocksteam/shared";
|
|
2
|
+
import { recordKnowledgeIndexFacts, recordKnowledgeRead, resetKnowledgeReadTrackerForTurn, } from "./knowledge-metrics.js";
|
|
3
|
+
function countOnDemandFacts(facts) {
|
|
4
|
+
return facts.filter((fact) => fact.accessType === FactAccessType.ON_DEMAND)
|
|
5
|
+
.length;
|
|
6
|
+
}
|
|
7
|
+
/** Matches `generateOnDemandFactsSkillIndex`: integration entries include all facts. */
|
|
8
|
+
function countIntegrationIndexFacts(facts) {
|
|
9
|
+
return Object.values(facts.integrations).reduce((total, integrationFacts) => total + integrationFacts.length, 0);
|
|
10
|
+
}
|
|
11
|
+
function recordAlwaysInjectReads(layer, facts) {
|
|
12
|
+
for (const fact of facts) {
|
|
13
|
+
if (fact.accessType !== FactAccessType.ALWAYS_INJECT) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
recordKnowledgeRead({
|
|
17
|
+
accessType: "always_inject",
|
|
18
|
+
dedupeKey: fact.id,
|
|
19
|
+
layer,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Emit read and index metrics at the start of an LLM turn after facts are loaded.
|
|
25
|
+
*/
|
|
26
|
+
export function recordKnowledgeTurnLoadMetrics(input) {
|
|
27
|
+
resetKnowledgeReadTrackerForTurn();
|
|
28
|
+
recordAlwaysInjectReads("org", input.rpcFacts.org);
|
|
29
|
+
recordAlwaysInjectReads("user", input.rpcFacts.user);
|
|
30
|
+
for (const integrationFacts of Object.values(input.rpcFacts.integrations)) {
|
|
31
|
+
recordAlwaysInjectReads("integration", integrationFacts);
|
|
32
|
+
}
|
|
33
|
+
const indexCounts = {
|
|
34
|
+
integration: countIntegrationIndexFacts(input.rpcFacts),
|
|
35
|
+
org: countOnDemandFacts(input.rpcFacts.org),
|
|
36
|
+
user: countOnDemandFacts(input.rpcFacts.user),
|
|
37
|
+
};
|
|
38
|
+
if (input.appMetrics) {
|
|
39
|
+
for (const dedupeKey of input.appMetrics.alwaysInjectDedupeKeys) {
|
|
40
|
+
recordKnowledgeRead({
|
|
41
|
+
accessType: "always_inject",
|
|
42
|
+
dedupeKey,
|
|
43
|
+
layer: "app",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
indexCounts.app = input.appMetrics.onDemandIndexCount;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Explicit zero so a failed load does not leave a stale app count from a
|
|
50
|
+
// prior turn (ObservableGauge only overwrites layers present in payload).
|
|
51
|
+
indexCounts.app = 0;
|
|
52
|
+
}
|
|
53
|
+
recordKnowledgeIndexFacts({ counts: indexCounts });
|
|
54
|
+
}
|
|
55
|
+
export function recordKnowledgeOnDemandRead(input) {
|
|
56
|
+
recordKnowledgeRead({
|
|
57
|
+
accessType: "on_demand",
|
|
58
|
+
dedupeKey: input.dedupeKey,
|
|
59
|
+
layer: input.layer,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export function isAppKnowledgeReadPath(filePath) {
|
|
63
|
+
return filePath.startsWith("skills/app/") && filePath.endsWith(".md");
|
|
64
|
+
}
|
|
65
|
+
export function appKnowledgeReadDedupeKey(filePath) {
|
|
66
|
+
return filePath;
|
|
67
|
+
}
|
|
68
|
+
export function recordAppKnowledgeReadIfApplicable(filePath) {
|
|
69
|
+
if (!isAppKnowledgeReadPath(filePath)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
recordKnowledgeOnDemandRead({
|
|
73
|
+
dedupeKey: appKnowledgeReadDedupeKey(filePath),
|
|
74
|
+
layer: "app",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=knowledge-metrics-emitters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-metrics-emitters.js","sourceRoot":"","sources":["../../../src/ai-service/knowledge/knowledge-metrics-emitters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare const KNOWLEDGE_LAYERS: readonly ["app", "integration", "org", "user"];
|
|
2
|
+
export type KnowledgeLayer = (typeof KNOWLEDGE_LAYERS)[number];
|
|
3
|
+
export declare const KNOWLEDGE_ACCESS_TYPES: readonly ["always_inject", "on_demand"];
|
|
4
|
+
export type KnowledgeAccessType = (typeof KNOWLEDGE_ACCESS_TYPES)[number];
|
|
5
|
+
export declare const KNOWLEDGE_SUGGESTION_SOURCES: readonly ["remember_knowledge"];
|
|
6
|
+
export type KnowledgeSuggestionSource = (typeof KNOWLEDGE_SUGGESTION_SOURCES)[number];
|
|
7
|
+
export declare const KNOWLEDGE_APPROVAL_PROMPT_TYPES: readonly ["confirm", "multi_choice", "remember_knowledge_draft"];
|
|
8
|
+
export type KnowledgeApprovalPromptType = (typeof KNOWLEDGE_APPROVAL_PROMPT_TYPES)[number];
|
|
9
|
+
export declare const KNOWLEDGE_APPROVAL_OUTCOMES: readonly ["approved", "denied"];
|
|
10
|
+
export type KnowledgeApprovalOutcome = (typeof KNOWLEDGE_APPROVAL_OUTCOMES)[number];
|
|
11
|
+
export declare const KNOWLEDGE_WRITE_SCOPES: readonly ["app", "integration", "org", "user"];
|
|
12
|
+
export type KnowledgeWriteScope = (typeof KNOWLEDGE_WRITE_SCOPES)[number];
|
|
13
|
+
export declare const KNOWLEDGE_WRITE_ACTIONS: readonly ["create", "delete", "update"];
|
|
14
|
+
export type KnowledgeWriteAction = (typeof KNOWLEDGE_WRITE_ACTIONS)[number];
|
|
15
|
+
export declare const KNOWLEDGE_WRITE_STATUSES: readonly ["created", "created_remote", "deleted", "failed", "skipped_not_found", "updated"];
|
|
16
|
+
export type KnowledgeWriteStatus = (typeof KNOWLEDGE_WRITE_STATUSES)[number];
|
|
17
|
+
export declare function resetKnowledgeReadTrackerForTurn(): void;
|
|
18
|
+
export declare function recordKnowledgeRead(input: {
|
|
19
|
+
accessType: KnowledgeAccessType;
|
|
20
|
+
dedupeKey: string;
|
|
21
|
+
layer: KnowledgeLayer;
|
|
22
|
+
}): void;
|
|
23
|
+
export declare function recordKnowledgeIndexFacts(input: {
|
|
24
|
+
counts: Partial<Record<KnowledgeLayer, number>>;
|
|
25
|
+
}): void;
|
|
26
|
+
export declare function recordKnowledgeSuggestion(input: {
|
|
27
|
+
candidateCount: number;
|
|
28
|
+
source: KnowledgeSuggestionSource;
|
|
29
|
+
}): void;
|
|
30
|
+
export declare function recordKnowledgeDuplicateHint(): void;
|
|
31
|
+
export declare function recordKnowledgeApprovalPrompt(input: {
|
|
32
|
+
promptType: KnowledgeApprovalPromptType;
|
|
33
|
+
}): void;
|
|
34
|
+
export declare function recordKnowledgeApprovalResponse(input: {
|
|
35
|
+
outcome: KnowledgeApprovalOutcome;
|
|
36
|
+
}): void;
|
|
37
|
+
export declare function recordKnowledgeWrite(input: {
|
|
38
|
+
action: KnowledgeWriteAction;
|
|
39
|
+
scope: KnowledgeWriteScope;
|
|
40
|
+
status: KnowledgeWriteStatus;
|
|
41
|
+
}): void;
|
|
42
|
+
export declare function _resetClarkKnowledgeMetricsForTesting(): void;
|
|
43
|
+
//# sourceMappingURL=knowledge-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-metrics.d.ts","sourceRoot":"","sources":["../../../src/ai-service/knowledge/knowledge-metrics.ts"],"names":[],"mappings":"AAoCA,eAAO,MAAM,gBAAgB,gDAAiD,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,sBAAsB,yCAA0C,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,eAAO,MAAM,4BAA4B,iCAAkC,CAAC;AAC5E,MAAM,MAAM,yBAAyB,GACnC,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,eAAO,MAAM,+BAA+B,kEAIlC,CAAC;AACX,MAAM,MAAM,2BAA2B,GACrC,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,2BAA2B,iCAAkC,CAAC;AAC3E,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,eAAO,MAAM,sBAAsB,gDAKzB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,eAAO,MAAM,uBAAuB,yCAA0C,CAAC;AAC/E,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,eAAO,MAAM,wBAAwB,6FAO3B,CAAC;AACX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAyM7E,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,UAAU,EAAE,mBAAmB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;CACvB,GAAG,IAAI,CAEP;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD,GAAG,IAAI,CAEP;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,yBAAyB,CAAC;CACnC,GAAG,IAAI,CAEP;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,2BAA2B,CAAC;CACzC,GAAG,IAAI,CAEP;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,OAAO,EAAE,wBAAwB,CAAC;CACnC,GAAG,IAAI,CAEP;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,oBAAoB,CAAC;CAC9B,GAAG,IAAI,CAEP;AAED,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clark knowledge lifecycle metrics (APPS-5064).
|
|
3
|
+
*
|
|
4
|
+
* Production counters/histograms/gauges for knowledge reads, the suggest→approve
|
|
5
|
+
* funnel, and writes. Complements retrieval spans from APPS-4708
|
|
6
|
+
* (`knowledge.facts`, `app_skills.load`).
|
|
7
|
+
*
|
|
8
|
+
* Wiring follows `ClarkContextMetrics` (APPS-4708): lazy meter resolution from
|
|
9
|
+
* the OTel global, instruments re-bound when the MeterProvider changes.
|
|
10
|
+
*
|
|
11
|
+
* Metrics:
|
|
12
|
+
*
|
|
13
|
+
* - `superblocks.clark.knowledge.reads_total` counter {layer, access_type}
|
|
14
|
+
* - `superblocks.clark.knowledge.read_duplicates_total` counter {layer}
|
|
15
|
+
* - `superblocks.clark.knowledge.index_facts` gauge {layer}
|
|
16
|
+
* - `superblocks.clark.knowledge.suggestions_total` counter {source}
|
|
17
|
+
* - `superblocks.clark.knowledge.suggestion_candidates` histogram
|
|
18
|
+
* - `superblocks.clark.knowledge.duplicate_hints_total` counter
|
|
19
|
+
* - `superblocks.clark.knowledge.approval_prompts_total` counter {prompt_type}
|
|
20
|
+
* - `superblocks.clark.knowledge.approval_responses_total` counter {outcome}
|
|
21
|
+
* - `superblocks.clark.knowledge.writes_total` counter {scope, action, status}
|
|
22
|
+
*
|
|
23
|
+
* Base cardinality budget (documented contract — growing an enum must be a
|
|
24
|
+
* deliberate, reviewed change; the regression test pins these counts):
|
|
25
|
+
*
|
|
26
|
+
* reads(4×2) + read_duplicates(4) + index_facts(4) + suggestions(1) +
|
|
27
|
+
* suggestion_candidates(1) + duplicate_hints(1) + approval_prompts(3) +
|
|
28
|
+
* approval_responses(2) + writes(4×3×6) = 96 worst-case series.
|
|
29
|
+
*/
|
|
30
|
+
import { metrics, } from "@opentelemetry/api";
|
|
31
|
+
export const KNOWLEDGE_LAYERS = ["app", "integration", "org", "user"];
|
|
32
|
+
export const KNOWLEDGE_ACCESS_TYPES = ["always_inject", "on_demand"];
|
|
33
|
+
export const KNOWLEDGE_SUGGESTION_SOURCES = ["remember_knowledge"];
|
|
34
|
+
export const KNOWLEDGE_APPROVAL_PROMPT_TYPES = [
|
|
35
|
+
"confirm",
|
|
36
|
+
"multi_choice",
|
|
37
|
+
"remember_knowledge_draft",
|
|
38
|
+
];
|
|
39
|
+
export const KNOWLEDGE_APPROVAL_OUTCOMES = ["approved", "denied"];
|
|
40
|
+
export const KNOWLEDGE_WRITE_SCOPES = [
|
|
41
|
+
"app",
|
|
42
|
+
"integration",
|
|
43
|
+
"org",
|
|
44
|
+
"user",
|
|
45
|
+
];
|
|
46
|
+
export const KNOWLEDGE_WRITE_ACTIONS = ["create", "delete", "update"];
|
|
47
|
+
export const KNOWLEDGE_WRITE_STATUSES = [
|
|
48
|
+
"created",
|
|
49
|
+
"created_remote",
|
|
50
|
+
"deleted",
|
|
51
|
+
"failed",
|
|
52
|
+
"skipped_not_found",
|
|
53
|
+
"updated",
|
|
54
|
+
];
|
|
55
|
+
const METER_NAME = "superblocks.clark.knowledge";
|
|
56
|
+
const METRIC_READS = "superblocks.clark.knowledge.reads_total";
|
|
57
|
+
const METRIC_READ_DUPLICATES = "superblocks.clark.knowledge.read_duplicates_total";
|
|
58
|
+
const METRIC_INDEX_FACTS = "superblocks.clark.knowledge.index_facts";
|
|
59
|
+
const METRIC_SUGGESTIONS = "superblocks.clark.knowledge.suggestions_total";
|
|
60
|
+
const METRIC_SUGGESTION_CANDIDATES = "superblocks.clark.knowledge.suggestion_candidates";
|
|
61
|
+
const METRIC_DUPLICATE_HINTS = "superblocks.clark.knowledge.duplicate_hints_total";
|
|
62
|
+
const METRIC_APPROVAL_PROMPTS = "superblocks.clark.knowledge.approval_prompts_total";
|
|
63
|
+
const METRIC_APPROVAL_RESPONSES = "superblocks.clark.knowledge.approval_responses_total";
|
|
64
|
+
const METRIC_WRITES = "superblocks.clark.knowledge.writes_total";
|
|
65
|
+
const SUGGESTION_CANDIDATE_BUCKETS = [1, 2, 3, 5, 10, 20];
|
|
66
|
+
class ClarkKnowledgeMetrics {
|
|
67
|
+
cachedInstruments;
|
|
68
|
+
cachedMeter;
|
|
69
|
+
indexFactCounts = new Map();
|
|
70
|
+
readKeysThisTurn = new Set();
|
|
71
|
+
observeIndexFacts = (result) => {
|
|
72
|
+
for (const [layer, value] of this.indexFactCounts.entries()) {
|
|
73
|
+
result.observe(value, { layer });
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
getInstruments() {
|
|
77
|
+
const meter = metrics.getMeter(METER_NAME);
|
|
78
|
+
if (meter === this.cachedMeter && this.cachedInstruments) {
|
|
79
|
+
return this.cachedInstruments;
|
|
80
|
+
}
|
|
81
|
+
this.cachedInstruments?.indexFactsGauge.removeCallback(this.observeIndexFacts);
|
|
82
|
+
this.cachedMeter = meter;
|
|
83
|
+
const indexFactsGauge = meter.createObservableGauge(METRIC_INDEX_FACTS, {
|
|
84
|
+
description: "Knowledge facts listed in the skill index at the last observed turn per layer (values persist until the next update for that layer). Org/user count on-demand entries only; integration counts all indexed integration facts.",
|
|
85
|
+
unit: "{fact}",
|
|
86
|
+
});
|
|
87
|
+
indexFactsGauge.addCallback(this.observeIndexFacts);
|
|
88
|
+
this.cachedInstruments = {
|
|
89
|
+
approvalPromptsCounter: meter.createCounter(METRIC_APPROVAL_PROMPTS, {
|
|
90
|
+
description: "Knowledge approval prompts shown to the user.",
|
|
91
|
+
unit: "{prompt}",
|
|
92
|
+
}),
|
|
93
|
+
approvalResponsesCounter: meter.createCounter(METRIC_APPROVAL_RESPONSES, {
|
|
94
|
+
description: "User responses to knowledge approval prompts.",
|
|
95
|
+
unit: "{response}",
|
|
96
|
+
}),
|
|
97
|
+
duplicateHintsCounter: meter.createCounter(METRIC_DUPLICATE_HINTS, {
|
|
98
|
+
description: "rememberKnowledge calls where recentlySavedMatches was non-empty.",
|
|
99
|
+
unit: "{hint}",
|
|
100
|
+
}),
|
|
101
|
+
indexFactsGauge,
|
|
102
|
+
readDuplicatesCounter: meter.createCounter(METRIC_READ_DUPLICATES, {
|
|
103
|
+
description: "Repeated reads of the same knowledge fact/path within one turn.",
|
|
104
|
+
unit: "{read}",
|
|
105
|
+
}),
|
|
106
|
+
readsCounter: meter.createCounter(METRIC_READS, {
|
|
107
|
+
description: "Knowledge surfaced into context via auto-inject or on-demand read.",
|
|
108
|
+
unit: "{read}",
|
|
109
|
+
}),
|
|
110
|
+
suggestionCandidatesHistogram: meter.createHistogram(METRIC_SUGGESTION_CANDIDATES, {
|
|
111
|
+
advice: { explicitBucketBoundaries: SUGGESTION_CANDIDATE_BUCKETS },
|
|
112
|
+
description: "Candidate count per rememberKnowledge call with valid candidates.",
|
|
113
|
+
unit: "{candidate}",
|
|
114
|
+
}),
|
|
115
|
+
suggestionsCounter: meter.createCounter(METRIC_SUGGESTIONS, {
|
|
116
|
+
description: "Valid knowledge suggestions from rememberKnowledge.",
|
|
117
|
+
unit: "{suggestion}",
|
|
118
|
+
}),
|
|
119
|
+
writesCounter: meter.createCounter(METRIC_WRITES, {
|
|
120
|
+
description: "Knowledge persistence attempts from saveKnowledgeAndNotify.",
|
|
121
|
+
unit: "{write}",
|
|
122
|
+
}),
|
|
123
|
+
};
|
|
124
|
+
return this.cachedInstruments;
|
|
125
|
+
}
|
|
126
|
+
resetReadTrackerForTurn() {
|
|
127
|
+
this.readKeysThisTurn.clear();
|
|
128
|
+
}
|
|
129
|
+
recordRead(input) {
|
|
130
|
+
const instruments = this.getInstruments();
|
|
131
|
+
const attributes = {
|
|
132
|
+
access_type: input.accessType,
|
|
133
|
+
layer: input.layer,
|
|
134
|
+
};
|
|
135
|
+
instruments.readsCounter.add(1, attributes);
|
|
136
|
+
const dedupeKey = `${input.layer}:${input.dedupeKey}`;
|
|
137
|
+
if (this.readKeysThisTurn.has(dedupeKey)) {
|
|
138
|
+
instruments.readDuplicatesCounter.add(1, { layer: input.layer });
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this.readKeysThisTurn.add(dedupeKey);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
recordIndexFacts(input) {
|
|
145
|
+
this.getInstruments();
|
|
146
|
+
for (const layer of KNOWLEDGE_LAYERS) {
|
|
147
|
+
const count = input.counts[layer];
|
|
148
|
+
if (count === undefined) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
this.indexFactCounts.set(layer, Math.max(0, count));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
recordSuggestion(input) {
|
|
155
|
+
const instruments = this.getInstruments();
|
|
156
|
+
instruments.suggestionsCounter.add(1, { source: input.source });
|
|
157
|
+
if (input.candidateCount > 0) {
|
|
158
|
+
instruments.suggestionCandidatesHistogram.record(input.candidateCount);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
recordDuplicateHint() {
|
|
162
|
+
this.getInstruments().duplicateHintsCounter.add(1);
|
|
163
|
+
}
|
|
164
|
+
recordApprovalPrompt(input) {
|
|
165
|
+
this.getInstruments().approvalPromptsCounter.add(1, {
|
|
166
|
+
prompt_type: input.promptType,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
recordApprovalResponse(input) {
|
|
170
|
+
this.getInstruments().approvalResponsesCounter.add(1, {
|
|
171
|
+
outcome: input.outcome,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
recordWrite(input) {
|
|
175
|
+
this.getInstruments().writesCounter.add(1, {
|
|
176
|
+
action: input.action,
|
|
177
|
+
scope: input.scope,
|
|
178
|
+
status: input.status,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
_resetForTesting() {
|
|
182
|
+
this.cachedInstruments?.indexFactsGauge.removeCallback(this.observeIndexFacts);
|
|
183
|
+
this.cachedMeter = undefined;
|
|
184
|
+
this.cachedInstruments = undefined;
|
|
185
|
+
this.indexFactCounts.clear();
|
|
186
|
+
this.readKeysThisTurn.clear();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const clarkKnowledgeMetrics = new ClarkKnowledgeMetrics();
|
|
190
|
+
export function resetKnowledgeReadTrackerForTurn() {
|
|
191
|
+
clarkKnowledgeMetrics.resetReadTrackerForTurn();
|
|
192
|
+
}
|
|
193
|
+
export function recordKnowledgeRead(input) {
|
|
194
|
+
clarkKnowledgeMetrics.recordRead(input);
|
|
195
|
+
}
|
|
196
|
+
export function recordKnowledgeIndexFacts(input) {
|
|
197
|
+
clarkKnowledgeMetrics.recordIndexFacts(input);
|
|
198
|
+
}
|
|
199
|
+
export function recordKnowledgeSuggestion(input) {
|
|
200
|
+
clarkKnowledgeMetrics.recordSuggestion(input);
|
|
201
|
+
}
|
|
202
|
+
export function recordKnowledgeDuplicateHint() {
|
|
203
|
+
clarkKnowledgeMetrics.recordDuplicateHint();
|
|
204
|
+
}
|
|
205
|
+
export function recordKnowledgeApprovalPrompt(input) {
|
|
206
|
+
clarkKnowledgeMetrics.recordApprovalPrompt(input);
|
|
207
|
+
}
|
|
208
|
+
export function recordKnowledgeApprovalResponse(input) {
|
|
209
|
+
clarkKnowledgeMetrics.recordApprovalResponse(input);
|
|
210
|
+
}
|
|
211
|
+
export function recordKnowledgeWrite(input) {
|
|
212
|
+
clarkKnowledgeMetrics.recordWrite(input);
|
|
213
|
+
}
|
|
214
|
+
export function _resetClarkKnowledgeMetricsForTesting() {
|
|
215
|
+
clarkKnowledgeMetrics._resetForTesting();
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=knowledge-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-metrics.js","sourceRoot":"","sources":["../../../src/ai-service/knowledge/knowledge-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { LanguageModelV3 } from "@ai-sdk/provider";
|
|
2
|
+
import { type FlexibleSchema } from "@ai-sdk/provider-utils";
|
|
2
3
|
import type { ModelMessage } from "ai";
|
|
3
4
|
import type { Tool } from "../agent/tools2/types.js";
|
|
4
5
|
import type { AppShell } from "../app-interface/shell.js";
|
|
@@ -13,29 +14,43 @@ import type { ContextId } from "./context-v2/types.js";
|
|
|
13
14
|
import type { StreamTextResult, StreamTextProvider } from "./interaction/provider.js";
|
|
14
15
|
import type { StreamTextOptions } from "./interaction/provider.js";
|
|
15
16
|
import { type ProviderType, type CoreModelType, type FallbackStrategy, type LogRef, type RetryConfigOptions, type StreamObserver } from "./stream/index.js";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
type ManagedLLMContextConfig = {
|
|
18
|
+
mode?: "managed";
|
|
19
|
+
contextId?: ContextId;
|
|
20
|
+
messages?: ModelMessage[];
|
|
21
|
+
contextOptionsV2?: Partial<ContextOptionsV2>;
|
|
22
|
+
/**
|
|
23
|
+
* Optional compaction strategy selection. When omitted the context manager
|
|
24
|
+
* defaults to server-side compaction; passing `{ type: "client", ... }`
|
|
25
|
+
* routes through the legacy phase-1+phase-2 path (used as the runtime
|
|
26
|
+
* kill-switch when server-side context management misbehaves).
|
|
27
|
+
*/
|
|
28
|
+
contextManagement?: ContextManagementOptions;
|
|
29
|
+
};
|
|
30
|
+
type StatelessLLMContextConfig = {
|
|
31
|
+
mode: "stateless";
|
|
32
|
+
};
|
|
33
|
+
export type LLMClientContextConfig = ManagedLLMContextConfig | StatelessLLMContextConfig;
|
|
34
|
+
export interface LLMClientProviderConfig {
|
|
35
|
+
provider: ProviderType;
|
|
36
|
+
model: CoreModelType;
|
|
37
|
+
}
|
|
38
|
+
export interface LLMClientStreamTextOptions<TOOLS extends Record<string, Tool>, OUTPUT = unknown> extends Omit<StreamTextOptions<TOOLS, OUTPUT>, "messages"> {
|
|
39
|
+
context?: LLMClientContextConfig;
|
|
29
40
|
logging?: {
|
|
30
41
|
conversationId?: string;
|
|
31
42
|
logRef?: LogRef;
|
|
32
43
|
metadata?: Record<string, unknown>;
|
|
33
44
|
} | false;
|
|
45
|
+
/**
|
|
46
|
+
* When false, LLM message input/output content is replaced with a redacted
|
|
47
|
+
* placeholder on the LLMObs span (the span, metrics, model, and timing are
|
|
48
|
+
* still recorded). Use for internal calls whose content may carry secrets.
|
|
49
|
+
* Defaults to true.
|
|
50
|
+
*/
|
|
51
|
+
recordObsContent?: boolean;
|
|
34
52
|
retry?: RetryConfigOptions;
|
|
35
|
-
providerConfig:
|
|
36
|
-
provider: ProviderType;
|
|
37
|
-
model: CoreModelType;
|
|
38
|
-
};
|
|
53
|
+
providerConfig: LLMClientProviderConfig;
|
|
39
54
|
/**
|
|
40
55
|
* Thinking knobs for the model. When set, the orchestrator will rebuild
|
|
41
56
|
* provider-specific thinking options per attempt based on the current
|
|
@@ -60,6 +75,7 @@ export interface LLMClientStreamTextOptions<TOOLS extends Record<string, Tool>>
|
|
|
60
75
|
classification?: {
|
|
61
76
|
enabled: boolean;
|
|
62
77
|
model?: LanguageModelV3;
|
|
78
|
+
providerConfig?: LLMClientProviderConfig;
|
|
63
79
|
timeout?: number;
|
|
64
80
|
failOpen?: boolean;
|
|
65
81
|
};
|
|
@@ -69,6 +85,18 @@ export interface LLMClientStreamTextOptions<TOOLS extends Record<string, Tool>>
|
|
|
69
85
|
};
|
|
70
86
|
};
|
|
71
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Options for {@link LLMClient.generateObject}. Adds the required `schema`
|
|
90
|
+
* (used to build the JSON response format and to validate the final output)
|
|
91
|
+
* and drops `experimental_output`, which the method builds internally from the
|
|
92
|
+
* schema. `tools` and `maxSteps` are also dropped because `generateObject`
|
|
93
|
+
* unconditionally overrides them (structured output is single-step and
|
|
94
|
+
* tool-free) — accepting them would be a silently-ignored footgun.
|
|
95
|
+
*/
|
|
96
|
+
export interface LLMClientGenerateObjectOptions<TOOLS extends Record<string, Tool>, OUTPUT> extends Omit<LLMClientStreamTextOptions<TOOLS, OUTPUT>, "experimental_output" | "tools" | "maxSteps"> {
|
|
97
|
+
/** Zod (or other flexible) schema the output must match. */
|
|
98
|
+
schema: FlexibleSchema<OUTPUT>;
|
|
99
|
+
}
|
|
72
100
|
export interface LLMClientParameters {
|
|
73
101
|
contextManagerV2: ContextManagerV2;
|
|
74
102
|
appShell: AppShell;
|
|
@@ -145,7 +173,105 @@ export declare class LLMClient {
|
|
|
145
173
|
* @returns Object containing the processed message and classification result
|
|
146
174
|
*/
|
|
147
175
|
private applySafetyClassification;
|
|
148
|
-
streamText<TOOLS extends Record<string, Tool
|
|
176
|
+
streamText<TOOLS extends Record<string, Tool>, OUTPUT = unknown>(options: LLMClientStreamTextOptions<TOOLS, OUTPUT>, logger?: import("../../util/logger.js").Logger, tracer?: LLMObsTracer): Promise<StreamTextResult<TOOLS>>;
|
|
149
177
|
private createContext;
|
|
178
|
+
/**
|
|
179
|
+
* Generates text from the LLM without exposing a stream to the caller.
|
|
180
|
+
*
|
|
181
|
+
* Convenience wrapper around {@link streamText} that drains the result and
|
|
182
|
+
* returns the joined text. Routing through `streamText` inherits the same
|
|
183
|
+
* context management, safety classification, retry, and observability.
|
|
184
|
+
*
|
|
185
|
+
* `observers` is intentionally omitted from the options: callers cannot
|
|
186
|
+
* inject their own stream observers here, but the internal `streamText` path
|
|
187
|
+
* still creates the logging/LLMObs observers, so observability fires as
|
|
188
|
+
* usual. `experimental_output` is also omitted — passing it would silently
|
|
189
|
+
* put the model in JSON mode while this method still returns a raw text
|
|
190
|
+
* string; use {@link generateObject} for structured output.
|
|
191
|
+
*
|
|
192
|
+
* @param options - Same options as `streamText`, minus `observers` and
|
|
193
|
+
* `experimental_output`.
|
|
194
|
+
* @returns The concatenated `text-delta` content.
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* const text = await client.generateText({
|
|
199
|
+
* model,
|
|
200
|
+
* user: { role: "user", content: "Summarize this..." },
|
|
201
|
+
* providerConfig: { provider: "vertex", model: "claude-sonnet-4-5" },
|
|
202
|
+
* });
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
generateText<TOOLS extends Record<string, Tool> = Record<string, Tool>>(options: Omit<LLMClientStreamTextOptions<TOOLS>, "observers" | "experimental_output">, logger?: import("../../util/logger.js").Logger, tracer?: LLMObsTracer): Promise<string>;
|
|
206
|
+
/**
|
|
207
|
+
* Drain a managed `fullStream`, returning the concatenated `text-delta`
|
|
208
|
+
* content. `fullStream` (not `textStream`) is drained because the managed-
|
|
209
|
+
* stream wrapper on it fires session finalization, which observers rely on to
|
|
210
|
+
* flush obs spans and persist logs. On a mid-stream failure it logs and
|
|
211
|
+
* rethrows a "<caller> failed during stream consumption" error, preserving
|
|
212
|
+
* the original cause.
|
|
213
|
+
*/
|
|
214
|
+
private drainTextChunks;
|
|
215
|
+
/**
|
|
216
|
+
* Drains a structured-output (`generateObject`) stream, capturing the result
|
|
217
|
+
* from whichever channel the provider used.
|
|
218
|
+
*
|
|
219
|
+
* The adapter's `Output.object` sets the JSON response format, but providers
|
|
220
|
+
* deliver the answer differently:
|
|
221
|
+
* - some stream the JSON as plain text (`text-delta`);
|
|
222
|
+
* - direct `@ai-sdk/anthropic` realizes structured output as a forced `json`
|
|
223
|
+
* tool call, so the object arrives as the tool-call input and NO
|
|
224
|
+
* `text-delta` is emitted. Draining only text there yields an empty string
|
|
225
|
+
* and a spurious "empty response" error (APPS-1213).
|
|
226
|
+
* - the Clark proxy (`@superblocksteam/clark`, used for bedrock/vertex)
|
|
227
|
+
* streams the result as a Clark `object` chunk; if that chunk carries no
|
|
228
|
+
* `id`, the Clark model forwards it as a `raw` part (its
|
|
229
|
+
* `forwardAsActivity`), so the object reaches neither the text nor the
|
|
230
|
+
* tool-call channel. We recover it from the raw `object` chunk (APPS-1213).
|
|
231
|
+
*
|
|
232
|
+
* `generateObject` disables user tools (`tools: undefined, maxSteps: 1`), so
|
|
233
|
+
* any tool call in the stream is the injected structured-output tool. We
|
|
234
|
+
* capture its already-parsed `input`; if only input deltas stream without a
|
|
235
|
+
* terminal `tool-call` part, we recover the object from the accumulated JSON.
|
|
236
|
+
* The full `fullStream` is still drained, which is what triggers session
|
|
237
|
+
* finalization for observability.
|
|
238
|
+
*/
|
|
239
|
+
private drainObjectStream;
|
|
240
|
+
/**
|
|
241
|
+
* Generates structured output validated against a Zod (or flexible) schema.
|
|
242
|
+
*
|
|
243
|
+
* Passes the schema through to the adapter's `Output.object` (which sets the
|
|
244
|
+
* JSON response format), routes through {@link streamText} with tools
|
|
245
|
+
* disabled and a single step, then resolves the object from whichever channel
|
|
246
|
+
* the provider used — the drained text, or the structured-output tool call
|
|
247
|
+
* (Anthropic/Clark realize `Output.object` as a forced `json` tool, so the
|
|
248
|
+
* object arrives as the tool-call input with no text emitted; see
|
|
249
|
+
* {@link drainObjectStream}) — and schema-validates it. Like
|
|
250
|
+
* {@link generateText}, draining `fullStream` is what triggers session
|
|
251
|
+
* finalization for observability.
|
|
252
|
+
*
|
|
253
|
+
* Snowflake Cortex constraint: Cortex rejects `generateObject` calls whose
|
|
254
|
+
* schema emits certain JSON Schema keywords, so avoid Zod refinements like
|
|
255
|
+
* `.min()` / `.max()` / `.email()` / `.url()` / `.uuid()` etc. in the
|
|
256
|
+
* `schema` — use the JSON-Schema-keyword forms (`minLength` / `maxLength` /
|
|
257
|
+
* `minimum` / `maximum` / `format`, ...) instead. See the "Snowflake Cortex
|
|
258
|
+
* generateObject schema constraints" section in the repo AGENTS.md for the
|
|
259
|
+
* full keyword list.
|
|
260
|
+
*
|
|
261
|
+
* @param options - Stream options plus the required `schema`.
|
|
262
|
+
* @returns The parsed, schema-validated object.
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* const result = await client.generateObject({
|
|
267
|
+
* model,
|
|
268
|
+
* user: { role: "user", content: "Classify this prompt" },
|
|
269
|
+
* schema: z.object({ safe: z.boolean(), justification: z.string() }),
|
|
270
|
+
* providerConfig: { provider: "vertex", model: "claude-sonnet-4-5" },
|
|
271
|
+
* });
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
generateObject<TOOLS extends Record<string, Tool> = Record<string, Tool>, OUTPUT = unknown>(options: LLMClientGenerateObjectOptions<TOOLS, OUTPUT>, logger?: import("../../util/logger.js").Logger, tracer?: LLMObsTracer): Promise<OUTPUT>;
|
|
150
275
|
}
|
|
276
|
+
export {};
|
|
151
277
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llm/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAA8B,MAAM,IAAI,CAAC;AAUnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAMnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAUL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EAEX,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAO3B,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llm/client.ts"],"names":[],"mappings":"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"}
|