@things-factory/ai-client-base 10.1.6 → 10.1.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-server/service/analysis-contract.d.ts +61 -0
- package/dist-server/service/analysis-contract.js +28 -0
- package/dist-server/service/analysis-contract.js.map +1 -0
- package/dist-server/service/assistant/index.d.ts +1 -0
- package/dist-server/service/assistant/index.js +1 -0
- package/dist-server/service/assistant/index.js.map +1 -1
- package/dist-server/service/assistant/registry-assistant.d.ts +46 -0
- package/dist-server/service/assistant/registry-assistant.js +71 -0
- package/dist-server/service/assistant/registry-assistant.js.map +1 -0
- package/dist-server/service/index.d.ts +1 -0
- package/dist-server/service/index.js +1 -0
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/docs/grounded-analysis-contract.md +54 -0
- package/package.json +2 -2
- package/server/service/analysis-contract.test.ts +21 -0
- package/server/service/analysis-contract.ts +77 -0
- package/server/service/assistant/index.ts +1 -0
- package/server/service/assistant/registry-assistant.test.ts +182 -0
- package/server/service/assistant/registry-assistant.ts +137 -0
- package/server/service/index.ts +1 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product-neutral contract for an AI conclusion that must be reviewed by a person.
|
|
3
|
+
*
|
|
4
|
+
* This is deliberately a vocabulary contract, not a domain model. Plant owns
|
|
5
|
+
* execution facts, Twin owns engineering calculations, Figure owns rendering
|
|
6
|
+
* checks, and Board owns edit patches. They can nevertheless expose the same
|
|
7
|
+
* answer to a caller: what was observed, what was assumed, how certain it is,
|
|
8
|
+
* what is missing, and whether a person must approve a proposed next step.
|
|
9
|
+
*/
|
|
10
|
+
export type AIConfidenceLevel = 'high' | 'medium' | 'low';
|
|
11
|
+
export interface AIAnalysisConfidence {
|
|
12
|
+
level: AIConfidenceLevel;
|
|
13
|
+
/** Stable, machine-readable reasons. Do not put model prose here. */
|
|
14
|
+
reasons: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface AIAnalysisLimitation {
|
|
17
|
+
code: string;
|
|
18
|
+
params?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export interface AIAnalysisClaim {
|
|
21
|
+
code: string;
|
|
22
|
+
severity?: 'info' | 'warning' | 'critical';
|
|
23
|
+
params?: Record<string, unknown>;
|
|
24
|
+
evidence: Record<string, unknown>;
|
|
25
|
+
method: string;
|
|
26
|
+
assumptions: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface AIApprovalRequirement {
|
|
29
|
+
/** AI output is advisory. A product authority must accept any state change. */
|
|
30
|
+
required: true;
|
|
31
|
+
mode: 'review' | 'confirm';
|
|
32
|
+
reason: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The portable part of a product AI response.
|
|
36
|
+
*
|
|
37
|
+
* `facts` and the specialized claim type intentionally remain generic. Moving
|
|
38
|
+
* them here would make product-specific evidence look interchangeable and would
|
|
39
|
+
* erase important operational, engineering, rendering, and board constraints.
|
|
40
|
+
*/
|
|
41
|
+
export interface GroundedAnalysisContract<TFacts = unknown, TClaim extends AIAnalysisClaim = AIAnalysisClaim, TProposal = unknown> {
|
|
42
|
+
kind: string;
|
|
43
|
+
scope: unknown;
|
|
44
|
+
window: unknown;
|
|
45
|
+
confidence: AIAnalysisConfidence;
|
|
46
|
+
limitations: AIAnalysisLimitation[];
|
|
47
|
+
claims: TClaim[];
|
|
48
|
+
facts: TFacts;
|
|
49
|
+
/** A domain-owned candidate. It is never an instruction to mutate canonical state. */
|
|
50
|
+
proposal?: TProposal;
|
|
51
|
+
/** Convenient transport flag for docks and GraphQL clients. */
|
|
52
|
+
approvalRequired: true;
|
|
53
|
+
approval: AIApprovalRequirement;
|
|
54
|
+
trace?: {
|
|
55
|
+
source?: string;
|
|
56
|
+
generatedAt?: string;
|
|
57
|
+
version?: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** A small runtime boundary for GraphQL/JSON consumers receiving untyped data. */
|
|
61
|
+
export declare function isGroundedAnalysisContract(value: unknown): value is GroundedAnalysisContract;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Product-neutral contract for an AI conclusion that must be reviewed by a person.
|
|
4
|
+
*
|
|
5
|
+
* This is deliberately a vocabulary contract, not a domain model. Plant owns
|
|
6
|
+
* execution facts, Twin owns engineering calculations, Figure owns rendering
|
|
7
|
+
* checks, and Board owns edit patches. They can nevertheless expose the same
|
|
8
|
+
* answer to a caller: what was observed, what was assumed, how certain it is,
|
|
9
|
+
* what is missing, and whether a person must approve a proposed next step.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.isGroundedAnalysisContract = isGroundedAnalysisContract;
|
|
13
|
+
/** A small runtime boundary for GraphQL/JSON consumers receiving untyped data. */
|
|
14
|
+
function isGroundedAnalysisContract(value) {
|
|
15
|
+
const one = value;
|
|
16
|
+
return !!one &&
|
|
17
|
+
typeof one === 'object' &&
|
|
18
|
+
typeof one.kind === 'string' &&
|
|
19
|
+
!!one.confidence &&
|
|
20
|
+
['high', 'medium', 'low'].includes(one.confidence.level) &&
|
|
21
|
+
Array.isArray(one.confidence.reasons) &&
|
|
22
|
+
Array.isArray(one.limitations) &&
|
|
23
|
+
Array.isArray(one.claims) &&
|
|
24
|
+
one.approvalRequired === true &&
|
|
25
|
+
!!one.approval && one.approval.required === true &&
|
|
26
|
+
(one.approval.mode === 'review' || one.approval.mode === 'confirm');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=analysis-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis-contract.js","sourceRoot":"","sources":["../../server/service/analysis-contract.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAuDH,gEAaC;AAdD,kFAAkF;AAClF,SAAgB,0BAA0B,CAAC,KAAc;IACvD,MAAM,GAAG,GAAG,KAAY,CAAA;IACxB,OAAO,CAAC,CAAC,GAAG;QACV,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,CAAC,GAAG,CAAC,UAAU;QAChB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QACxD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC9B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACzB,GAAG,CAAC,gBAAgB,KAAK,IAAI;QAC7B,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI;QAChD,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;AACvE,CAAC","sourcesContent":["/**\n * Product-neutral contract for an AI conclusion that must be reviewed by a person.\n *\n * This is deliberately a vocabulary contract, not a domain model. Plant owns\n * execution facts, Twin owns engineering calculations, Figure owns rendering\n * checks, and Board owns edit patches. They can nevertheless expose the same\n * answer to a caller: what was observed, what was assumed, how certain it is,\n * what is missing, and whether a person must approve a proposed next step.\n */\n\nexport type AIConfidenceLevel = 'high' | 'medium' | 'low'\n\nexport interface AIAnalysisConfidence {\n level: AIConfidenceLevel\n /** Stable, machine-readable reasons. Do not put model prose here. */\n reasons: string[]\n}\n\nexport interface AIAnalysisLimitation {\n code: string\n params?: Record<string, unknown>\n}\n\nexport interface AIAnalysisClaim {\n code: string\n severity?: 'info' | 'warning' | 'critical'\n params?: Record<string, unknown>\n evidence: Record<string, unknown>\n method: string\n assumptions: string[]\n}\n\nexport interface AIApprovalRequirement {\n /** AI output is advisory. A product authority must accept any state change. */\n required: true\n mode: 'review' | 'confirm'\n reason: string\n}\n\n/**\n * The portable part of a product AI response.\n *\n * `facts` and the specialized claim type intentionally remain generic. Moving\n * them here would make product-specific evidence look interchangeable and would\n * erase important operational, engineering, rendering, and board constraints.\n */\nexport interface GroundedAnalysisContract<TFacts = unknown, TClaim extends AIAnalysisClaim = AIAnalysisClaim, TProposal = unknown> {\n kind: string\n scope: unknown\n window: unknown\n confidence: AIAnalysisConfidence\n limitations: AIAnalysisLimitation[]\n claims: TClaim[]\n facts: TFacts\n /** A domain-owned candidate. It is never an instruction to mutate canonical state. */\n proposal?: TProposal\n /** Convenient transport flag for docks and GraphQL clients. */\n approvalRequired: true\n approval: AIApprovalRequirement\n trace?: { source?: string; generatedAt?: string; version?: string }\n}\n\n/** A small runtime boundary for GraphQL/JSON consumers receiving untyped data. */\nexport function isGroundedAnalysisContract(value: unknown): value is GroundedAnalysisContract {\n const one = value as any\n return !!one &&\n typeof one === 'object' &&\n typeof one.kind === 'string' &&\n !!one.confidence &&\n ['high', 'medium', 'low'].includes(one.confidence.level) &&\n Array.isArray(one.confidence.reasons) &&\n Array.isArray(one.limitations) &&\n Array.isArray(one.claims) &&\n one.approvalRequired === true &&\n !!one.approval && one.approval.required === true &&\n (one.approval.mode === 'review' || one.approval.mode === 'confirm')\n}\n"]}
|
|
@@ -10,4 +10,5 @@ tslib_1.__exportStar(require("./abort-notice.js"), exports);
|
|
|
10
10
|
tslib_1.__exportStar(require("./summarize.js"), exports);
|
|
11
11
|
tslib_1.__exportStar(require("./registry-gate.js"), exports);
|
|
12
12
|
tslib_1.__exportStar(require("./assistant-chat.js"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./registry-assistant.js"), exports);
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/assistant/index.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,4DAAiC;AACjC,yDAA8B;AAC9B,6DAAkC;AAClC,8DAAmC","sourcesContent":["/*\n * The neutral assistant layer — the agentic loop plus the guards that must not be optional.\n *\n * See `assistant-chat.ts` for why this is not in a product package.\n */\nexport * from './abort-notice.js'\nexport * from './summarize.js'\nexport * from './registry-gate.js'\nexport * from './assistant-chat.js'\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/assistant/index.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,4DAAiC;AACjC,yDAA8B;AAC9B,6DAAkC;AAClC,8DAAmC;AACnC,kEAAuC","sourcesContent":["/*\n * The neutral assistant layer — the agentic loop plus the guards that must not be optional.\n *\n * See `assistant-chat.ts` for why this is not in a product package.\n */\nexport * from './abort-notice.js'\nexport * from './summarize.js'\nexport * from './registry-gate.js'\nexport * from './assistant-chat.js'\nexport * from './registry-assistant.js'\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AIClient, AIMessage } from '../types.js';
|
|
2
|
+
import { type AssistantChatResult } from './assistant-chat.js';
|
|
3
|
+
import type { GroundingSources } from '../utils/index.js';
|
|
4
|
+
/** What a registry tool is handed when it runs. `state` is the caller's koa state. */
|
|
5
|
+
export interface RegistryToolCallContext {
|
|
6
|
+
state: any;
|
|
7
|
+
/** What this surface is looking at — the host passes it through; tools read it as `host`. */
|
|
8
|
+
host?: any;
|
|
9
|
+
}
|
|
10
|
+
export interface RegistryAssistantInput {
|
|
11
|
+
/** Provider client. Must implement `chatWithTools`. */
|
|
12
|
+
client: AIClient;
|
|
13
|
+
/** The conversation so far, newest last. The caller owns history and truncation. */
|
|
14
|
+
messages: AIMessage[];
|
|
15
|
+
/** Who the assistant is and what this surface is. The host owns this prose. */
|
|
16
|
+
systemPrompt: string;
|
|
17
|
+
/**
|
|
18
|
+
* Categories this conversation may use. Omit to allow every registered category.
|
|
19
|
+
*
|
|
20
|
+
* An empty array is not the same as omitting: it allows nothing, and the conversation runs with
|
|
21
|
+
* no tools at all. That is a legitimate surface (plain chat), so it is not corrected here.
|
|
22
|
+
*/
|
|
23
|
+
toolCategories?: string[];
|
|
24
|
+
/** Passed to tools as `context.host`. Client-supplied — never used for authorization. */
|
|
25
|
+
hostContext?: any;
|
|
26
|
+
/** Caller's koa state (domain, user, tx). Tools that read the database need it. */
|
|
27
|
+
state: any;
|
|
28
|
+
model?: string;
|
|
29
|
+
temperature?: number;
|
|
30
|
+
maxTokens?: number;
|
|
31
|
+
/** Make the model call a tool before it may answer. For surfaces that report live state. */
|
|
32
|
+
requireToolOnFirstTurn?: boolean;
|
|
33
|
+
/** Texts the answer is allowed to draw identifiers from, besides the tool results. */
|
|
34
|
+
groundingSources?: Omit<GroundingSources, 'toolResults'>;
|
|
35
|
+
}
|
|
36
|
+
export interface RegistryAssistantResult extends AssistantChatResult<unknown> {
|
|
37
|
+
/** Tool names actually offered to the model this turn. The caller may log or return it. */
|
|
38
|
+
offeredTools: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Run one turn of a conversation whose only tools come from the registry.
|
|
42
|
+
*
|
|
43
|
+
* Throws when the client cannot use tools at all — a surface built on registered tools that
|
|
44
|
+
* silently ran without them would answer from nothing and look like it had checked.
|
|
45
|
+
*/
|
|
46
|
+
export declare function registryAssistantChat(input: RegistryAssistantInput): Promise<RegistryAssistantResult>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registryAssistantChat = registryAssistantChat;
|
|
4
|
+
const index_js_1 = require("../tool-registry/index.js");
|
|
5
|
+
const assistant_chat_js_1 = require("./assistant-chat.js");
|
|
6
|
+
const summarize_js_1 = require("./summarize.js");
|
|
7
|
+
/** `read` and `external` are the two kinds that answer a question without changing a document. */
|
|
8
|
+
function answeringSpecs(filter) {
|
|
9
|
+
return (0, index_js_1.getToolSpecsFor)(filter).filter(spec => spec.kind === 'read' || spec.kind === 'external');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Run one turn of a conversation whose only tools come from the registry.
|
|
13
|
+
*
|
|
14
|
+
* Throws when the client cannot use tools at all — a surface built on registered tools that
|
|
15
|
+
* silently ran without them would answer from nothing and look like it had checked.
|
|
16
|
+
*/
|
|
17
|
+
async function registryAssistantChat(input) {
|
|
18
|
+
const { client, messages, systemPrompt, toolCategories, hostContext, state } = input;
|
|
19
|
+
if (!client.chatWithTools) {
|
|
20
|
+
throw new Error('[registry-assistant] the configured AI client cannot call tools, so this conversation cannot run');
|
|
21
|
+
}
|
|
22
|
+
const filter = toolCategories;
|
|
23
|
+
const specs = answeringSpecs(filter);
|
|
24
|
+
const byName = new Map(specs.map(spec => [spec.name, spec]));
|
|
25
|
+
const tools = specs.map(spec => ({
|
|
26
|
+
name: spec.name,
|
|
27
|
+
description: spec.themeNote ? `${spec.description} ${spec.themeNote}` : spec.description,
|
|
28
|
+
parameters: spec.schema
|
|
29
|
+
}));
|
|
30
|
+
/*
|
|
31
|
+
* The rules for using a tool belong to whoever registered it. Collect only the exposed ones, so
|
|
32
|
+
* a surface never reads instructions for a category it cannot call.
|
|
33
|
+
*/
|
|
34
|
+
const guidance = (0, index_js_1.getCategoryGuidance)(filter);
|
|
35
|
+
const prompt = guidance.length > 0 ? `${systemPrompt}\n\n${guidance.join('\n\n')}` : systemPrompt;
|
|
36
|
+
const toolContext = { state, host: hostContext };
|
|
37
|
+
const result = await (0, assistant_chat_js_1.assistantChat)({
|
|
38
|
+
initialConversation: messages,
|
|
39
|
+
tools,
|
|
40
|
+
options: {
|
|
41
|
+
systemPrompt: prompt,
|
|
42
|
+
model: input.model,
|
|
43
|
+
temperature: input.temperature,
|
|
44
|
+
maxTokens: input.maxTokens,
|
|
45
|
+
requireToolOnFirstTurn: input.requireToolOnFirstTurn
|
|
46
|
+
},
|
|
47
|
+
chat: (msgs, toolDefs, opts) => client.chatWithTools(msgs, toolDefs, opts),
|
|
48
|
+
context: toolContext,
|
|
49
|
+
dispatch: {
|
|
50
|
+
isReadTool: name => byName.has(name),
|
|
51
|
+
/*
|
|
52
|
+
* This surface has no document, so nothing here can write. Saying so plainly makes the loop
|
|
53
|
+
* report an unknown name back to the model instead of accepting a call and dropping it.
|
|
54
|
+
*/
|
|
55
|
+
isWriteTool: () => false,
|
|
56
|
+
isActionTool: () => false,
|
|
57
|
+
executeReadTool: (call, context) => {
|
|
58
|
+
const spec = byName.get(call.name);
|
|
59
|
+
if (!spec)
|
|
60
|
+
return undefined;
|
|
61
|
+
return spec.builder(call.arguments ?? {}, context);
|
|
62
|
+
},
|
|
63
|
+
validateWriteToolCall: () => ({ valid: false, errors: ['this conversation has no document to write to'] }),
|
|
64
|
+
toolCallToOp: () => null,
|
|
65
|
+
summarizeToolResult: summarize_js_1.summarizeToolResult
|
|
66
|
+
},
|
|
67
|
+
groundingSources: input.groundingSources
|
|
68
|
+
});
|
|
69
|
+
return { ...result, offeredTools: tools.map(tool => tool.name) };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=registry-assistant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-assistant.js","sourceRoot":"","sources":["../../../server/service/assistant/registry-assistant.ts"],"names":[],"mappings":";;AA6EA,sDA2DC;AAlHD,wDAAwH;AACxH,2DAA6E;AAC7E,iDAAoD;AA0CpD,kGAAkG;AAClG,SAAS,cAAc,CAAC,MAA0B;IAChD,OAAO,IAAA,0BAAe,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;AACjG,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CAAC,KAA6B;IACvE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAEpF,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAA;IACrH,CAAC;IAED,MAAM,MAAM,GAAuB,cAAc,CAAA;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAE5D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;QACxF,UAAU,EAAE,IAAI,CAAC,MAAM;KACxB,CAAC,CAAC,CAAA;IAEH;;;OAGG;IACH,MAAM,QAAQ,GAAG,IAAA,8BAAmB,EAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAA;IAEjG,MAAM,WAAW,GAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAEzE,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAa,EAAmC;QACnE,mBAAmB,EAAE,QAAQ;QAC7B,KAAK;QACL,OAAO,EAAE;YACP,YAAY,EAAE,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;SACrD;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;QAC3E,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE;YACR,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC;;;eAGG;YACH,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;YACxB,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;YACzB,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAClC,IAAI,CAAC,IAAI;oBAAE,OAAO,SAAS,CAAA;gBAC3B,OAAQ,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;YAC7D,CAAC;YACD,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,+CAA+C,CAAC,EAAE,CAAC;YAC1G,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;YACxB,mBAAmB,EAAnB,kCAAmB;SACpB;QACD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;KACzC,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAClE,CAAC","sourcesContent":["/*\n * A conversation for a product that has no editor of its own.\n *\n * ── What this is for ───────────────────────────────────────────────────────────\n * `board-ai` assembles its conversation from two sources: its own board editing tools, and\n * whatever other packages registered in the tool registry. The second half is the same work for\n * every product — read the specs, build the definitions, dispatch by name — but it only existed\n * inside the board assistant, so a product without a board had nowhere to ask a question from.\n * operato-figure hit exactly that: the dock was mounted, the tools were registered, and the only\n * mutation that could run them lived in a package figure does not load.\n *\n * ── Read and external only ─────────────────────────────────────────────────────\n * A registry category may also carry `write` and `action` tools. Those produce edit ops for a\n * document the host owns, and a host with no document cannot apply them. Offering them here would\n * declare a door with no road behind it — the model would call one and the call would go nowhere.\n * So this runner offers, and dispatches, `read` and `external` only. A host that owns a document\n * keeps assembling its own conversation, as board-ai does.\n *\n * The gate answers from the same list the definitions are built from, so what is offered and what\n * may be dispatched cannot drift apart.\n */\nimport type { AIClient, AIMessage } from '../types.js'\nimport { getCategoryGuidance, getToolSpecsFor, type ToolCategoryFilter, type ToolSpec } from '../tool-registry/index.js'\nimport { assistantChat, type AssistantChatResult } from './assistant-chat.js'\nimport { summarizeToolResult } from './summarize.js'\nimport type { GroundingSources } from '../utils/index.js'\n\n/** What a registry tool is handed when it runs. `state` is the caller's koa state. */\nexport interface RegistryToolCallContext {\n state: any\n /** What this surface is looking at — the host passes it through; tools read it as `host`. */\n host?: any\n}\n\nexport interface RegistryAssistantInput {\n /** Provider client. Must implement `chatWithTools`. */\n client: AIClient\n /** The conversation so far, newest last. The caller owns history and truncation. */\n messages: AIMessage[]\n /** Who the assistant is and what this surface is. The host owns this prose. */\n systemPrompt: string\n /**\n * Categories this conversation may use. Omit to allow every registered category.\n *\n * An empty array is not the same as omitting: it allows nothing, and the conversation runs with\n * no tools at all. That is a legitimate surface (plain chat), so it is not corrected here.\n */\n toolCategories?: string[]\n /** Passed to tools as `context.host`. Client-supplied — never used for authorization. */\n hostContext?: any\n /** Caller's koa state (domain, user, tx). Tools that read the database need it. */\n state: any\n model?: string\n temperature?: number\n maxTokens?: number\n /** Make the model call a tool before it may answer. For surfaces that report live state. */\n requireToolOnFirstTurn?: boolean\n /** Texts the answer is allowed to draw identifiers from, besides the tool results. */\n groundingSources?: Omit<GroundingSources, 'toolResults'>\n}\n\nexport interface RegistryAssistantResult extends AssistantChatResult<unknown> {\n /** Tool names actually offered to the model this turn. The caller may log or return it. */\n offeredTools: string[]\n}\n\n/** `read` and `external` are the two kinds that answer a question without changing a document. */\nfunction answeringSpecs(filter: ToolCategoryFilter): ToolSpec[] {\n return getToolSpecsFor(filter).filter(spec => spec.kind === 'read' || spec.kind === 'external')\n}\n\n/**\n * Run one turn of a conversation whose only tools come from the registry.\n *\n * Throws when the client cannot use tools at all — a surface built on registered tools that\n * silently ran without them would answer from nothing and look like it had checked.\n */\nexport async function registryAssistantChat(input: RegistryAssistantInput): Promise<RegistryAssistantResult> {\n const { client, messages, systemPrompt, toolCategories, hostContext, state } = input\n\n if (!client.chatWithTools) {\n throw new Error('[registry-assistant] the configured AI client cannot call tools, so this conversation cannot run')\n }\n\n const filter: ToolCategoryFilter = toolCategories\n const specs = answeringSpecs(filter)\n const byName = new Map(specs.map(spec => [spec.name, spec]))\n\n const tools = specs.map(spec => ({\n name: spec.name,\n description: spec.themeNote ? `${spec.description} ${spec.themeNote}` : spec.description,\n parameters: spec.schema\n }))\n\n /*\n * The rules for using a tool belong to whoever registered it. Collect only the exposed ones, so\n * a surface never reads instructions for a category it cannot call.\n */\n const guidance = getCategoryGuidance(filter)\n const prompt = guidance.length > 0 ? `${systemPrompt}\\n\\n${guidance.join('\\n\\n')}` : systemPrompt\n\n const toolContext: RegistryToolCallContext = { state, host: hostContext }\n\n const result = await assistantChat<RegistryToolCallContext, unknown>({\n initialConversation: messages,\n tools,\n options: {\n systemPrompt: prompt,\n model: input.model,\n temperature: input.temperature,\n maxTokens: input.maxTokens,\n requireToolOnFirstTurn: input.requireToolOnFirstTurn\n },\n chat: (msgs, toolDefs, opts) => client.chatWithTools!(msgs, toolDefs, opts),\n context: toolContext,\n dispatch: {\n isReadTool: name => byName.has(name),\n /*\n * This surface has no document, so nothing here can write. Saying so plainly makes the loop\n * report an unknown name back to the model instead of accepting a call and dropping it.\n */\n isWriteTool: () => false,\n isActionTool: () => false,\n executeReadTool: (call, context) => {\n const spec = byName.get(call.name)\n if (!spec) return undefined\n return (spec.builder as any)(call.arguments ?? {}, context)\n },\n validateWriteToolCall: () => ({ valid: false, errors: ['this conversation has no document to write to'] }),\n toolCallToOp: () => null,\n summarizeToolResult\n },\n groundingSources: input.groundingSources\n })\n\n return { ...result, offeredTools: tools.map(tool => tool.name) }\n}\n"]}
|
|
@@ -8,4 +8,5 @@ tslib_1.__exportStar(require("./utils/index.js"), exports);
|
|
|
8
8
|
tslib_1.__exportStar(require("./tool-registry/index.js"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./agentic-loop/index.js"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./assistant/index.js"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./analysis-contract.js"), exports);
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,uDAA4B;AAC5B,+DAAoC;AACpC,2DAAgC;AAChC,mEAAwC;AACxC,kEAAuC;AACvC,+DAAoC","sourcesContent":["export * from './types.js'\nexport * from './factory.js'\nexport * from './providers/index.js'\nexport * from './utils/index.js'\nexport * from './tool-registry/index.js'\nexport * from './agentic-loop/index.js'\nexport * from './assistant/index.js'\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,uDAA4B;AAC5B,+DAAoC;AACpC,2DAAgC;AAChC,mEAAwC;AACxC,kEAAuC;AACvC,+DAAoC;AACpC,iEAAsC","sourcesContent":["export * from './types.js'\nexport * from './factory.js'\nexport * from './providers/index.js'\nexport * from './utils/index.js'\nexport * from './tool-registry/index.js'\nexport * from './agentic-loop/index.js'\nexport * from './assistant/index.js'\nexport * from './analysis-contract.js'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../server/service/types.ts","../../env/dist/dependency-graph.d.ts","../../env/dist/dependency-order.d.ts","../../env/dist/scene-modules.d.ts","../../env/dist/operato-modules.d.ts","../../env/dist/config.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/triple-beam/index.d.ts","../../../node_modules/logform/index.d.ts","../../../node_modules/winston-transport/index.d.ts","../../../node_modules/winston/lib/winston/config/index.d.ts","../../../node_modules/winston/lib/winston/transports/index.d.ts","../../../node_modules/winston/index.d.ts","../../../node_modules/winston-daily-rotate-file/index.d.ts","../../env/dist/logger.d.ts","../../env/dist/module-manifest.d.ts","../../env/dist/module-loader.d.ts","../../env/dist/app-root-path.d.ts","../../env/dist/app-package.d.ts","../../env/dist/index.d.ts","../server/service/factory.ts","../../../node_modules/@anthropic-ai/sdk/_shims/manual-types.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/auto/types.d.ts","../../../node_modules/@anthropic-ai/sdk/streaming.d.ts","../../../node_modules/@anthropic-ai/sdk/error.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/multipartbody.d.ts","../../../node_modules/@anthropic-ai/sdk/uploads.d.ts","../../../node_modules/@anthropic-ai/sdk/core.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/index.d.ts","../../../node_modules/@anthropic-ai/sdk/pagination.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/shared.d.ts","../../../node_modules/@anthropic-ai/sdk/resource.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/models.d.ts","../../../node_modules/@anthropic-ai/sdk/internal/decoders/line.d.ts","../../../node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/batches.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/index.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/lib/messagestream.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.d.ts","../../../node_modules/@anthropic-ai/sdk/lib/betamessagestream.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/completions.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/models.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/index.d.ts","../../../node_modules/@anthropic-ai/sdk/index.d.ts","../server/service/utils/parse-json.ts","../server/service/providers/anthropic.ts","../../../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../server/service/providers/gemini.ts","../../../node_modules/openai/_shims/manual-types.d.ts","../../../node_modules/openai/_shims/auto/types.d.ts","../../../node_modules/openai/streaming.d.ts","../../../node_modules/openai/error.d.ts","../../../node_modules/openai/_shims/multipartbody.d.ts","../../../node_modules/openai/uploads.d.ts","../../../node_modules/openai/core.d.ts","../../../node_modules/openai/_shims/index.d.ts","../../../node_modules/openai/pagination.d.ts","../../../node_modules/openai/resource.d.ts","../../../node_modules/openai/resources/shared.d.ts","../../../node_modules/openai/resources/completions.d.ts","../../../node_modules/openai/resources/chat/completions/messages.d.ts","../../../node_modules/openai/resources/chat/completions/completions.d.ts","../../../node_modules/openai/resources/chat/chat.d.ts","../../../node_modules/openai/resources/chat/completions/index.d.ts","../../../node_modules/openai/resources/chat/index.d.ts","../../../node_modules/openai/resources/audio/speech.d.ts","../../../node_modules/openai/resources/audio/transcriptions.d.ts","../../../node_modules/openai/resources/audio/translations.d.ts","../../../node_modules/openai/resources/audio/audio.d.ts","../../../node_modules/openai/resources/batches.d.ts","../../../node_modules/openai/resources/beta/threads/messages.d.ts","../../../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../../../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../../../node_modules/openai/lib/eventstream.d.ts","../../../node_modules/openai/lib/assistantstream.d.ts","../../../node_modules/openai/resources/beta/threads/threads.d.ts","../../../node_modules/openai/resources/beta/assistants.d.ts","../../../node_modules/openai/resources/chat/completions.d.ts","../../../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../../../node_modules/openai/lib/chatcompletionstream.d.ts","../../../node_modules/openai/lib/responsesparser.d.ts","../../../node_modules/openai/resources/responses/input-items.d.ts","../../../node_modules/openai/lib/responses/eventtypes.d.ts","../../../node_modules/openai/lib/responses/responsestream.d.ts","../../../node_modules/openai/resources/responses/responses.d.ts","../../../node_modules/openai/lib/parser.d.ts","../../../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../../../node_modules/openai/lib/jsonschema.d.ts","../../../node_modules/openai/lib/runnablefunction.d.ts","../../../node_modules/openai/lib/chatcompletionrunner.d.ts","../../../node_modules/openai/resources/beta/chat/completions.d.ts","../../../node_modules/openai/resources/beta/chat/chat.d.ts","../../../node_modules/openai/resources/beta/realtime/sessions.d.ts","../../../node_modules/openai/resources/beta/realtime/transcription-sessions.d.ts","../../../node_modules/openai/resources/beta/realtime/realtime.d.ts","../../../node_modules/openai/resources/beta/beta.d.ts","../../../node_modules/openai/resources/containers/files/content.d.ts","../../../node_modules/openai/resources/containers/files/files.d.ts","../../../node_modules/openai/resources/containers/containers.d.ts","../../../node_modules/openai/resources/embeddings.d.ts","../../../node_modules/openai/resources/graders/grader-models.d.ts","../../../node_modules/openai/resources/evals/runs/output-items.d.ts","../../../node_modules/openai/resources/evals/runs/runs.d.ts","../../../node_modules/openai/resources/evals/evals.d.ts","../../../node_modules/openai/resources/files.d.ts","../../../node_modules/openai/resources/fine-tuning/methods.d.ts","../../../node_modules/openai/resources/fine-tuning/alpha/graders.d.ts","../../../node_modules/openai/resources/fine-tuning/alpha/alpha.d.ts","../../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.d.ts","../../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.d.ts","../../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../../../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../../../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../../../node_modules/openai/resources/graders/graders.d.ts","../../../node_modules/openai/resources/images.d.ts","../../../node_modules/openai/resources/models.d.ts","../../../node_modules/openai/resources/moderations.d.ts","../../../node_modules/openai/resources/uploads/parts.d.ts","../../../node_modules/openai/resources/uploads/uploads.d.ts","../../../node_modules/openai/resources/vector-stores/files.d.ts","../../../node_modules/openai/resources/vector-stores/file-batches.d.ts","../../../node_modules/openai/resources/vector-stores/vector-stores.d.ts","../../../node_modules/openai/resources/index.d.ts","../../../node_modules/openai/index.d.ts","../server/service/providers/openai.ts","../server/service/providers/index.ts","../server/service/utils/grounding.ts","../server/service/utils/transient.ts","../server/service/utils/index.ts","../server/service/tool-registry/types.ts","../server/service/tool-registry/registry.ts","../server/service/tool-registry/index.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../server/service/agentic-loop/agentic-loop.ts","../server/service/agentic-loop/index.ts","../server/service/assistant/abort-notice.ts","../server/service/assistant/summarize.ts","../server/service/assistant/registry-gate.ts","../server/service/assistant/assistant-chat.ts","../server/service/assistant/index.ts","../server/service/index.ts","../server/index.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[72,122,139,140],[72,122,139,140,187,188,193],[72,122,139,140,189,190,192,194],[72,122,139,140,193],[72,122,139,140,190,192,193,194,195,205,209,210,211,212],[72,122,139,140,194,199],[72,122,139,140,190,193,194,208],[72,122,139,140,190,193,194,203],[72,122,139,140,197,198,208],[72,122,139,140,193,195,197,200,208,209],[72,122,139,140,189,193,197,205,206,207,208,209],[72,122,139,140,193,195,197],[72,122,139,140,189,193,197,205,210],[72,122,139,140,196,205,209,210,211],[72,122,139,140,202],[72,122,139,140,193,195,196,197,200,205],[72,122,139,140,201,205],[72,122,139,140,189,193,197,201,204,205],[72,122,139,140,194],[72,122,139,140,191,193,194],[72,122,139,140,315],[72,122,139,140,302],[72,122,139,140,317,320],[72,119,120,122,139,140],[72,121,122,139,140],[122,139,140],[72,122,127,139,140,157],[72,122,123,128,133,139,140,142,154,165],[72,122,123,124,133,139,140,142],[67,68,69,72,122,139,140],[72,122,125,139,140,166],[72,122,126,127,134,139,140,143],[72,122,127,139,140,154,162],[72,122,128,130,133,139,140,142],[72,121,122,129,139,140],[72,122,130,131,139,140],[72,122,132,133,139,140],[72,121,122,133,139,140],[72,122,133,134,135,139,140,154,165],[72,122,133,134,135,139,140,149,154,157],[72,114,122,130,133,136,139,140,142,154,165],[72,122,133,134,136,137,139,140,142,154,162,165],[72,122,136,138,139,140,154,162,165],[70,71,72,73,74,75,76,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[72,122,133,139,140],[72,122,139,140,141,165],[72,122,130,133,139,140,142,154],[72,122,139,140,143],[72,122,139,140,144],[72,121,122,139,140,145],[72,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[72,122,139,140,147],[72,122,139,140,148],[72,122,133,139,140,149,150],[72,122,139,140,149,151,166,168],[72,122,134,139,140],[72,122,133,139,140,154,155,157],[72,122,139,140,156,157],[72,122,139,140,154,155],[72,122,139,140,157],[72,122,139,140,158],[72,119,122,139,140,154,159,165],[72,122,133,139,140,160,161],[72,122,139,140,160,161],[72,122,127,139,140,142,154,162],[72,122,139,140,163],[72,122,139,140,142,164],[72,122,136,139,140,148,165],[72,122,127,139,140,166],[72,122,139,140,154,167],[72,122,139,140,141,168],[72,122,139,140,169],[72,114,122,139,140],[72,114,122,133,135,139,140,145,154,157,165,167,168,170],[72,122,139,140,154,171],[72,122,139,140,313,319],[72,122,139,140,317],[72,122,139,140,314,318],[72,122,139,140,173],[72,122,139,140,218,219,224],[72,122,139,140,220,221,223,225],[72,122,139,140,224],[72,122,139,140,221,223,224,225,226,229,231,232,238,239,254,265,268,269,273,274,282,283,284,285,286,288,291,292],[72,122,139,140,224,229,243,247,256,258,259,260,293],[72,122,139,140,224,225,240,241,242,243,245,246],[72,122,139,140,247,248,255,258,293],[72,122,139,140,224,225,231,248,260,293],[72,122,139,140,225,247,248,249,255,258,293],[72,122,139,140,221],[72,122,139,140,228,247,254,260],[72,122,139,140,254],[72,122,139,140,224,243,250,252,254,293],[72,122,139,140,247,254,255],[72,122,139,140,256,257,259],[72,122,139,140,293],[72,122,139,140,227,235,236,237],[72,122,139,140,224,225,227],[72,122,139,140,220,224,227,236,238],[72,122,139,140,224,227,236,238],[72,122,139,140,224,226,227,228,239],[72,122,139,140,224,226,227,228,240,241,242,244,245],[72,122,139,140,227,245,246,261,264],[72,122,139,140,227,260],[72,122,139,140,224,227,247,248,249,255,256,258,259],[72,122,139,140,227,228,262,263,264],[72,122,139,140,224,227],[72,122,139,140,224,226,227,228,246],[72,122,139,140,220,224,226,227,228,240,241,242,244,245,246],[72,122,139,140,224,226,227,228,241],[72,122,139,140,220,224,227,228,240,242,244,245,246],[72,122,139,140,227,228,231],[72,122,139,140,231],[72,122,139,140,220,224,226,227,228,229,230,231],[72,122,139,140,230,231],[72,122,139,140,224,226,227,231],[72,122,139,140,232,233],[72,122,139,140,220,224,227,229,231],[72,122,139,140,224,226,227,267],[72,122,139,140,224,226,227,266],[72,122,139,140,224,226,227,228,254,270,272],[72,122,139,140,224,226,227,272],[72,122,139,140,224,226,227,228,254,271],[72,122,139,140,224,225,226,227],[72,122,139,140,227,276],[72,122,139,140,224,227,270],[72,122,139,140,227,278],[72,122,139,140,224,226,227],[72,122,139,140,227,275,277,279,281],[72,122,139,140,224,226,227,275,280],[72,122,139,140,227,270],[72,122,139,140,227,254],[72,122,139,140,228,229,234,238,239,254,265,268,269,273,274,282,283,284,285,286,288,291],[72,122,139,140,224,226,227,254],[72,122,139,140,220,224,226,227,228,250,251,253,254],[72,122,139,140,224,227,274,287],[72,122,139,140,224,226,227,289,291],[72,122,139,140,224,226,227,291],[72,122,139,140,224,226,227,228,289,290],[72,122,139,140,225],[72,122,139,140,222,224,225],[72,122,139,140,316],[72,86,90,122,139,140,165],[72,86,122,139,140,154,165],[72,81,122,139,140],[72,83,86,122,139,140,162,165],[72,122,139,140,142,162],[72,122,139,140,172],[72,81,122,139,140,172],[72,83,86,122,139,140,142,165],[72,78,79,82,85,122,133,139,140,154,165],[72,86,93,122,139,140],[72,78,84,122,139,140],[72,86,107,108,122,139,140],[72,82,86,122,139,140,157,165,172],[72,107,122,139,140,172],[72,80,81,122,139,140,172],[72,86,122,139,140],[72,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,108,109,110,111,112,113,122,139,140],[72,86,101,122,139,140],[72,86,93,94,122,139,140],[72,84,86,94,95,122,139,140],[72,85,122,139,140],[72,78,81,86,122,139,140],[72,86,90,94,95,122,139,140],[72,90,122,139,140],[72,84,86,89,122,139,140,165],[72,78,83,86,93,122,139,140],[72,122,139,140,154],[72,81,86,107,122,139,140,170,172],[72,122,139,140,175,177],[72,122,139,140,154,172,174],[72,122,139,140,154,172,174,175,176,177],[72,122,136,139,140,172,175],[60,72,122,139,140,311],[60,61,72,122,139,140,298,303],[60,72,122,139,140,304],[60,72,122,139,140,298,305],[60,72,122,139,140,298,305,306],[60,72,122,139,140,306,307,308,309],[60,72,122,139,140,301],[60,72,122,139,140],[60,61,72,122,139,140,185],[60,61,72,122,139,140,186,295,298,301,305,310],[60,61,72,122,139,140,186,213,214],[60,61,72,122,139,140,186,214,216],[60,72,122,139,140,215,217,294],[60,61,72,122,139,140,186,214,293],[60,72,122,139,140,299,300],[60,72,122,139,140,299],[60,72,122,139,140,214,296,297],[62,63,64,65,66,72,122,139,140,180,181,182,183,184],[72,122,139,140,178,179],[72,122,139,140,181]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b50ad4682f959060d41592c42bf370aef89ecc99c238c73a3d3faa77d0ca37b5","signature":"030914ded3a9617a51cb181406c351abae4a492acff77a18d8079c7f5b5b74fd"},"61da60198d58f00210a34b39a0625a136ae63d7cf42500e764b91b2e5e2dbdcb","4c11afc0bcf5ad4cb8351103476e6e8076ad11f563ae65a94a14b94d158d046a","2ffaa1f7886d57fe801bd41337521c661ee17d657d1004e504d5422f62cfd23c","738433a0f2e73b2ba4ebbcaa6487030e0b8aa64e65813a160e1b845e20338d9c","972608570a8b1d91ef22149c069a5c29d75d00b4131e2697ea6d42302d3548b9",{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1},{"version":"1bc5991c91bf4be8b59db501ed284a34945d95abe9b7451d02ea001f7c5621a9","impliedFormat":1},{"version":"d8b8a5a6bf623239d5374ad4a7ff6f3b195ab5ee61293f59f1957e90d2a22809","impliedFormat":1},{"version":"35d283eca7dc0a0c7b099f5fbbf0678b87f3d837572cd5e539ba297ad9837e68","impliedFormat":1},{"version":"1c8384a195a2d931cf6e2b8f656acf558ca649a3f74922d86b95889f49a7f7c5","impliedFormat":1},{"version":"cd11655f57a3558dfcee05a6e78c026f9dfd30535eaf124439c5e88a5617359b","impliedFormat":1},{"version":"83a328cba2f47fc5a948eac394ae2ef2a5a0d26dd366ab373d2c2178bbdcd36c","impliedFormat":1},"2aafbaf6ace811133c4858f9184a6597866fbccb89eb6f1b9c4247e87d0bbfed","a113891e4f35eb4f1938fe7fcd813ce6440d020c0e183dbbdf289a6aad7a0407","5b44eaa08688d8e16c633bb23e213a6830de959c9a1f807794357253f0e5fd8e","9e795af82140c310a86279c6f0079d8de3b4db03b4d9476267aa8703a9b7d7a7","46a0b34e1264c4d25ca6646ff0e6cfaa7275ea1ae5a6bc23d4dfd84edf2f2b2e","20d8746a5f897d9ca7eea2dd41e19cdf831ce893c3eb829380332de6109059e2",{"version":"e402028070cdf507828b2fba4cddd8d57d13c1b1338e2ef23b3b9b09094e75bf","signature":"c3a944d44c5dc20264755fa6f42ddeba7f19a90b7a514764a079a46e828ee07c"},{"version":"8727e08f3b0b9929db5f1a9e9233c1ce84f3ded0728ea04e34870fdf35c92460","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"a75156a8eb6c4c6c121762a96d1fc267096b5512412ece181a64baa78731c84a","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"2132cb866b781415f9280c4a3365bab64f8e0a8b6b021cfab868268d0dff759c","impliedFormat":1},{"version":"deb4709b6d78208fa7db5c0ac1180664019321c24a3e2f11e9f2832ebdc0ed6b","impliedFormat":1},{"version":"eeee0bc128bde085ac31373f3a008d5b7b2c82a049dea721bc1cd915a94b7113","impliedFormat":1},{"version":"c2f4c022fd9ba0d424d9a25e34748aab8417b71a655ab65e528a3b00ed90ce6d","impliedFormat":1},{"version":"aa8f345d88a8fd01726038a744b7dc266c0953398b30d6ed9695ded3078d5997","impliedFormat":1},{"version":"6bd040af264aa1b76c3310590ce5e573cf198e80c4ce183b8ddd4ad9a3dfec03","impliedFormat":1},{"version":"edb59d3aa737af65d2ff7245697b5dd6754259739c05bddd830aae1bee5ab0ef","impliedFormat":1},{"version":"023afdc65ad8fe7d208604b5d5a04fb33ed9516ff4e457fdfc61c4f8a722fff8","impliedFormat":1},{"version":"2c87df699eae2e001afc54e6c2d9007a98f4aaca6caf754c43cc0b9464166352","impliedFormat":1},{"version":"e4757f15b8155598e377107e0c3df152ec82cc6ec8f87e239e6c89c08ad76e64","impliedFormat":1},{"version":"396f711944c156303065235a5f4219569bf3468d0aa594c82fb9f4b163e9eb62","impliedFormat":1},{"version":"b2646b3299c70436ae2fc39b31760f2b3a22bbabefc8316f0f0c9fc0efaa2a84","impliedFormat":1},{"version":"9da022af34638c5e3d480c4e6f9682d2336967f30e44fcaf7eecb9a01aa9095b","impliedFormat":1},{"version":"85dc0f6eb89e455c7505dc48d8a9422c2259f1d144b14f2238e791453355f5b5","impliedFormat":1},{"version":"6876f5f48d28f1256420752c057d08b4b3ae5f024930475e9bf8aeffb009cd30","impliedFormat":1},{"version":"0cf5b4d36b8d013bd7c1b1302f34d904c12cd2f3c07bb51d0c7042c0ea83fa60","impliedFormat":1},{"version":"55138ffd46c24194af1fc2d298faee0f5f42a71e5687919b962a20962815fa2b","impliedFormat":1},{"version":"bef88efba8852386d816a3a83fad1609a3214faa0cdf7a447c308cf1d15efc2a","impliedFormat":1},{"version":"2a974f024550d5c45fba33d899291a108b6906678fe36bcb9db6739919495d92","impliedFormat":1},{"version":"bc4cb88a0bd52e13d599dc1d61aa8a6234b509e6a81782d3d91517125ffc8c5d","impliedFormat":1},{"version":"f740e94014daa37b0fc90a9e30bf2455c6c5a6c969164e8a705515bc008b9996","impliedFormat":1},{"version":"d941fd4a46bddc870508bf1dcc367e8d9f7ce6c8a73cde059c902d446f25b03a","signature":"d47d90c50d7b3eeb497bfee327ffd5096b1828405e9d549d22b885a2453227e3"},{"version":"d7a6d8923fce240a602f13ed3c7aa24becceb40238802694f54b1427d92e5674","signature":"f0c2de3b2ee12d861786540076ea86887ade022875ebe512e310235288283dc6"},{"version":"878cca70d0472e4cd4d35298e5206f5f90f55a0ec4199da41ec6131d40faf155","impliedFormat":1},{"version":"76aefb4eb07ea212a554458097738ba89a8e30d465feaed0da3792c052e03684","signature":"5b2ce6be76c8df2f15fa3e6bb758b72244de049f0abea2aff46114a73c81ad3a"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"5de017dece7444a2041f5f729fe5035c3e8a94065910fbd235949a25c0c5b035","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"d3b5d359e0523d0b9f85016266c9a50ce9cda399aeac1b9eeecb63ba577e4d27","impliedFormat":1},{"version":"5b9f65234e953177fcc9088e69d363706ccd0696a15d254ac5787b28bdfb7cb0","impliedFormat":1},{"version":"510a5373df4110d355b3fb5c72dfd3906782aeacbb44de71ceee0f0dece36352","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"eb76f85d8a8893360da026a53b39152237aaa7f033a267009b8e590139afd7de","impliedFormat":1},{"version":"fcd615891bdf6421c708b42a6006ed8b0cf50ca0ac2b37d66a5777d8222893ce","impliedFormat":1},{"version":"84a28d684e49bae482c89c996e8aeaabf44c0355237a3a1303749da2161a90c1","impliedFormat":1},{"version":"89c36d61bae1591a26b3c08db2af6fdd43ffaab0f96646dead5af39ff0cf44d3","impliedFormat":1},{"version":"5277b2beeb856b348af1c23ffdaccde1ec447abede6f017a0ab0362613309587","impliedFormat":1},{"version":"d4b6804b4c4cb3d65efd5dc8a672825cea7b39db98363d2d9c2608078adce5f8","impliedFormat":1},{"version":"929f67e0e7f3b3a3bcd4e17074e2e60c94b1e27a8135472a7d002a36cd640629","impliedFormat":1},{"version":"bd8e8f02d1b0ebfa518f7d8b5f0db06ae260c192e211a1ef86397f4b49ee198f","impliedFormat":1},{"version":"71b32ccf8c508c2f7445b1b2c144dd7eef9434f7bfa6a92a9ebd0253a75cb54a","impliedFormat":1},{"version":"4fd8e7e446c8379cfb1f165961b1d2f984b40d73f5ad343d93e33962292ec2e0","impliedFormat":1},{"version":"45079ac211d6cfda93dd7d0e7fc1cf2e510dad5610048ef71e47328b765515be","impliedFormat":1},{"version":"1c19f268e0f1ed1a6485ca80e0cfd4e21bdc71cb974e2ac7b04b5fce0a91482b","impliedFormat":1},{"version":"7ae8f8b4f56ba486dc9561d873aae5b3ad263ffb9683c8f9ffc18d25a7fd09a4","impliedFormat":1},{"version":"e0ab56e00ef473df66b345c9d64e42823c03e84d9a679020746d23710c2f9fce","impliedFormat":1},{"version":"d99deead63d250c60b647620d1ddaf497779aef1084f85d3d0a353cbc4ea8a60","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"512c43b21074254148f89bd80ae00f7126db68b4d0bd1583b77b9c8af91cc0d3","impliedFormat":1},{"version":"0bfacd36c923f059779049c6c74c00823c56386397a541fefc8d8672d26e0c42","impliedFormat":1},{"version":"19d04b82ed0dc5ba742521b6da97f22362fe40d6efa5ca5650f08381e5c939b2","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"bbf0ae18efd0b886897a23141532d9695435c279921c24bcb86090f2466d0727","impliedFormat":1},{"version":"067670de65606b4aa07964b0269b788a7fe48026864326cd3ab5db9fc5e93120","impliedFormat":1},{"version":"7a094146e95764e687120cdb840d7e92fe9960c2168d697639ad51af7230ef5e","impliedFormat":1},{"version":"21290aaea56895f836a0f1da5e1ef89285f8c0e85dc85fd59e2b887255484a6f","impliedFormat":1},{"version":"a07254fded28555a750750f3016aa44ec8b41fbf3664b380829ed8948124bafe","impliedFormat":1},{"version":"f14fbd9ec19692009e5f2727a662f841bbe65ac098e3371eb9a4d9e6ac05bca7","impliedFormat":1},{"version":"46f640a5efe8e5d464ced887797e7855c60581c27575971493998f253931b9a3","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"7d390f34038ca66aef27575cffb5a25a1034df470a8f7789a9079397a359bf8b","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"6af607dd78a033679e46c1c69c126313a1485069bdec46036f0fbfe64e393979","impliedFormat":1},{"version":"44c556b0d0ede234f633da4fb95df7d6e9780007003e108e88b4969541373db1","impliedFormat":1},{"version":"ef1491fb98f7a8837af94bfff14351b28485d8b8f490987820695cedac76dc99","impliedFormat":1},{"version":"0d4ba4ad7632e46bab669c1261452a1b35b58c3b1f6a64fb456440488f9008cf","impliedFormat":1},{"version":"74a0fa488591d372a544454d6cd93bbadd09c26474595ea8afed7125692e0859","impliedFormat":1},{"version":"0a9ae72be840cc5be5b0af985997029c74e3f5bcd4237b0055096bb01241d723","impliedFormat":1},{"version":"920004608418d82d0aad39134e275a427255aaf1dafe44dca10cc432ef5ca72a","impliedFormat":1},{"version":"1c87dfe5efcac5c2cd5fc454fe5df66116d7dc284b6e7b70bd30c07375176b36","impliedFormat":1},{"version":"3ac2bd86af2bab352d126ccdde1381cd4db82e3d09a887391c5c1254790727a1","impliedFormat":1},{"version":"2efc9ad74a84d3af0e00c12769a1032b2c349430d49aadebdf710f57857c9647","impliedFormat":1},{"version":"f18cc4e4728203a0282b94fc542523dfd78967a8f160fabc920faa120688151f","impliedFormat":1},{"version":"cc609a30a3dd07d6074290dadfb49b9f0f2c09d0ae7f2fa6b41e2dae2432417b","impliedFormat":1},{"version":"6362fcd24c5b52eb88e9cf33876abd9b066d520fc9d4c24173e58dcddcfe12d5","impliedFormat":1},{"version":"c473f6bd005279b9f3a08c38986f1f0eaf1b0f9d094fec6bc66309e7504b6460","impliedFormat":1},{"version":"0043ff78e9f07cbbbb934dd80d0f5fe190437715446ec9550d1f97b74ec951ac","impliedFormat":1},{"version":"bdc013746db3189a2525e87e2da9a6681f78352ef25ae513aa5f9a75f541e0ae","impliedFormat":1},{"version":"4f567b8360c2be77e609f98efc15de3ffcdbe2a806f34a3eba1ee607c04abab6","impliedFormat":1},{"version":"615bf0ac5606a0e79312d70d4b978ac4a39b3add886b555b1b1a35472327034e","impliedFormat":1},{"version":"818e96d8e24d98dfd8fd6d9d1bbabcac082bcf5fbbe64ca2a32d006209a8ee54","impliedFormat":1},{"version":"18b0b9a38fe92aa95a40431676b2102139c5257e5635fe6a48b197e9dcb660f1","impliedFormat":1},{"version":"86b382f98cb678ff23a74fe1d940cbbf67bcd3162259e8924590ecf8ee24701e","impliedFormat":1},{"version":"aeea2c497f27ce34df29448cbe66adb0f07d3a5d210c24943d38b8026ffa6d3c","impliedFormat":1},{"version":"aa064f60b7e64c04a759f5806a0d82a954452300ee27566232b0cf5dad5b6ba6","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"65a6307cc74644b8813e553b468ea7cc7a1e5c4b241db255098b35f308bfc4b5","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"aa2f3c289c7a3403633e411985025b79af473c0bf0fdd980b9712bd6a1705d59","impliedFormat":1},{"version":"e140d9fa025dadc4b098c54278271a032d170d09f85f16f372e4879765277af8","impliedFormat":1},{"version":"70d9e5189fd4dabc81b82cf7691d80e0abf55df5030cc7f12d57df62c72b5076","impliedFormat":1},{"version":"a96be3ed573c2a6d4c7d4e7540f1738a6e90c92f05f684f5ee2533929dd8c6b2","impliedFormat":1},{"version":"0c73536b65135298d43d1ef51dd81a6eba3b69ef0ce005db3de11365fda30a55","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":1},{"version":"56803867c2ff5fd2c6ddec523df2ed03d9d3aa07f4f2b7ff3645a21f4c32ccfb","signature":"7048a0334753043ac40c97f740b0c570d45153abdc4d5971bf9a4f206016ff81"},{"version":"d474bb4a44492c182b5a96a39fb1af20b893deed6e9effde918eb854c25193d4","signature":"d0d5e6c40fcfb14a60ffa82ac97d83b2e694583fc84c8238f9733237744d114d"},{"version":"9cf09bc3432679b411e62de6588cdafb4cba1501a986335cc9b22148fae706ea","signature":"fc234116255c165988e9e7cf0d0ff231806272e3467bb9518e9f1f15dba996bd"},{"version":"cbdb89bea41c405603f30ef117384ee7f46377e320ac27548492515ba9f7c2ca","signature":"ac3f46f5bc96fe50bbe280bcc3df3537f95dbc17c3a620a18c87bfdc76a1afef"},{"version":"793ce024127b03acaca95b2ea497637c56419ca6ac92a02379d3fa10bdc8c08c","signature":"227da327ba96814798a4676d18c99f2e82193d1679b2e3196f6d4465dc4fe428"},{"version":"cdf01660750dbd63e69921969c6b731ad03447ca3fcbf077a7c7a6cbda605b0e","signature":"84d065827eab5e59979683e05ea53d9c8156a4950ee1a0ba03abb578d9be17e2"},{"version":"33e6c78d18c235d54ae46261925af432541bd468549b31a1b1dd586db310bad4","signature":"4727d1b62080e0bc3795229aaf76f2a66399320ce56f1132e1fd71b17c337128"},{"version":"696afc093eba936d670de797af1b2d1452a3ee6845c493004b59b62d5654e2a3","signature":"3d6d5846785198b71b04a311ae7dc9cc815d08b7887f5138e6a01c639c55a6f8"},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"89e326922cadcc2331d7e851011cf9f0456a681aaf3c95b48b81f8d80e8cdfba","impliedFormat":1},{"version":"9d33091b4e67c102dc792d8e37677dc9ca320411aee33c2fc7f4da9b7ecfe8f4","signature":"eb283cda573291d0d8cd9a6d8a709656c0cbe3a725568f4c6f326a3da6d9901e"},{"version":"226412856e089cbc14d4a4d6188ea20b6fdba6cd0714de2a82cf6bc3432a62e3","signature":"5af61b3b579a9a880ce05be09c427fd0d8983726bfa12d15486099e4b7db8bdf"},{"version":"3137137a623222afdabf5b5c2520b3a0ef28b9524711da024f5adf960b8e8094","signature":"dfd2320e5918f44c3838356fd506096fa4195addc1c55e15bd625a7e7ac9e913"},{"version":"52571b91879393d08ed11c97b596a7239165930091730c43b4595355566baae1","signature":"f2671ab690ea462f413ab4bec5762df02736a58cff71645f8d9aa1e34e0f91f9"},{"version":"d169ddf5e51c87d73f031ae34731dbcc34065e329b97f0dc2bc43d21734e2e08","signature":"c7d3d96e41f81fb3bf0dbee51c58a612ad8e8e52bb92d5bbaf2718cb8484a3ae"},{"version":"ce89e524335dc639f9e657947b97b65ef7323f70761f5f4372d13d1f94f39cab","signature":"ef99912c317e21105dcc367169e07d6536e756b7f3cf43e294dc8463fd241d5d"},{"version":"318e925a05cc4273552c6a10d47dd570793c97020a7c8fedd009e87cfd4ecd4c","signature":"d374a4d94a0eb07297e0fcf45372a063bf919d91a82f13715c70b98591b17f9e"},{"version":"c8ff51078a3e3bad7804fe50024a3ed83c7b6818960a92990d9e882dfee2bd1b","signature":"f94f1f5d304a4ef90d7a31dc0ebf096e0268517720043d06aaa07191bff1a091"},{"version":"cd1b3f7cc45861ad65cba283b71c569d1c5368728dcaa262c5aa44925320e1c3","signature":"75740cae8152235182c5dd737fa4073ab76afa24cfa430d94b514e79941539db"},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1}],"root":[61,186,214,215,217,[294,301],[304,312]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":1,"noEmitOnError":true,"noImplicitAny":false,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":false,"target":9,"useDefineForClassFields":false},"referencedMap":[[188,1],[194,2],[187,1],[191,1],[193,3],[190,4],[213,5],[200,6],[199,1],[207,7],[204,8],[195,4],[197,4],[209,9],[206,10],[208,11],[198,12],[210,13],[212,14],[203,15],[201,16],[202,17],[205,18],[211,12],[196,1],[189,19],[192,20],[216,1],[313,1],[316,21],[315,1],[303,22],[321,23],[302,1],[119,24],[120,24],[121,25],[72,26],[122,27],[123,28],[124,29],[67,1],[70,30],[68,1],[69,1],[125,31],[126,32],[127,33],[128,34],[129,35],[130,36],[131,36],[132,37],[133,38],[134,39],[135,40],[73,1],[71,1],[136,41],[137,42],[138,43],[172,44],[139,45],[140,1],[141,46],[142,47],[143,48],[144,49],[145,50],[146,51],[147,52],[148,53],[149,54],[150,54],[151,55],[152,1],[153,56],[154,57],[156,58],[155,59],[157,60],[158,61],[159,62],[160,63],[161,64],[162,65],[163,66],[164,67],[165,68],[166,69],[167,70],[168,71],[169,72],[74,1],[75,1],[76,1],[115,73],[116,1],[117,1],[118,60],[170,74],[171,75],[173,1],[77,1],[314,1],[320,76],[318,77],[319,78],[174,79],[219,1],[225,80],[218,1],[222,1],[224,81],[221,82],[293,83],[248,84],[244,85],[259,86],[249,87],[256,88],[243,89],[257,1],[255,90],[252,91],[253,92],[250,93],[258,94],[226,82],[227,95],[238,96],[235,97],[236,98],[237,99],[239,100],[246,101],[265,102],[261,103],[260,104],[264,105],[262,106],[263,106],[240,107],[242,108],[241,109],[245,110],[232,111],[247,112],[231,113],[233,114],[230,115],[234,116],[229,117],[268,118],[266,97],[267,119],[269,106],[273,120],[271,121],[272,122],[274,123],[277,124],[276,125],[279,126],[278,127],[282,128],[280,127],[281,129],[275,130],[270,131],[283,130],[284,106],[292,132],[285,127],[286,106],[251,133],[254,134],[228,1],[287,106],[288,135],[290,136],[289,137],[291,138],[220,139],[223,140],[317,141],[60,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[93,142],[103,143],[92,142],[113,144],[84,145],[83,146],[112,147],[106,148],[111,149],[86,150],[100,151],[85,152],[109,153],[81,154],[80,147],[110,155],[82,156],[87,157],[88,1],[91,157],[78,1],[114,158],[104,159],[95,160],[96,161],[98,162],[94,163],[97,164],[107,147],[89,165],[90,166],[99,167],[79,168],[102,159],[101,157],[105,1],[108,169],[179,170],[175,171],[178,172],[176,147],[177,173],[312,174],[304,175],[305,176],[306,177],[309,178],[310,179],[308,180],[307,181],[186,182],[311,183],[215,184],[217,185],[295,186],[294,187],[301,188],[300,189],[299,181],[61,181],[296,181],[298,190],[214,181],[297,181],[184,1],[183,1],[66,1],[62,1],[63,1],[185,191],[180,192],[182,193],[181,1],[65,1],[64,1]],"version":"5.9.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../server/service/types.ts","../../env/dist/dependency-graph.d.ts","../../env/dist/dependency-order.d.ts","../../env/dist/scene-modules.d.ts","../../env/dist/operato-modules.d.ts","../../env/dist/config.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/triple-beam/index.d.ts","../../../node_modules/logform/index.d.ts","../../../node_modules/winston-transport/index.d.ts","../../../node_modules/winston/lib/winston/config/index.d.ts","../../../node_modules/winston/lib/winston/transports/index.d.ts","../../../node_modules/winston/index.d.ts","../../../node_modules/winston-daily-rotate-file/index.d.ts","../../env/dist/logger.d.ts","../../env/dist/module-manifest.d.ts","../../env/dist/module-loader.d.ts","../../env/dist/app-root-path.d.ts","../../env/dist/app-package.d.ts","../../env/dist/index.d.ts","../server/service/factory.ts","../../../node_modules/@anthropic-ai/sdk/_shims/manual-types.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/auto/types.d.ts","../../../node_modules/@anthropic-ai/sdk/streaming.d.ts","../../../node_modules/@anthropic-ai/sdk/error.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/multipartbody.d.ts","../../../node_modules/@anthropic-ai/sdk/uploads.d.ts","../../../node_modules/@anthropic-ai/sdk/core.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/index.d.ts","../../../node_modules/@anthropic-ai/sdk/pagination.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/shared.d.ts","../../../node_modules/@anthropic-ai/sdk/resource.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/models.d.ts","../../../node_modules/@anthropic-ai/sdk/internal/decoders/line.d.ts","../../../node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/batches.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/index.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/lib/messagestream.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.d.ts","../../../node_modules/@anthropic-ai/sdk/lib/betamessagestream.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/completions.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/models.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/index.d.ts","../../../node_modules/@anthropic-ai/sdk/index.d.ts","../server/service/utils/parse-json.ts","../server/service/providers/anthropic.ts","../../../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../server/service/providers/gemini.ts","../../../node_modules/openai/_shims/manual-types.d.ts","../../../node_modules/openai/_shims/auto/types.d.ts","../../../node_modules/openai/streaming.d.ts","../../../node_modules/openai/error.d.ts","../../../node_modules/openai/_shims/multipartbody.d.ts","../../../node_modules/openai/uploads.d.ts","../../../node_modules/openai/core.d.ts","../../../node_modules/openai/_shims/index.d.ts","../../../node_modules/openai/pagination.d.ts","../../../node_modules/openai/resource.d.ts","../../../node_modules/openai/resources/shared.d.ts","../../../node_modules/openai/resources/completions.d.ts","../../../node_modules/openai/resources/chat/completions/messages.d.ts","../../../node_modules/openai/resources/chat/completions/completions.d.ts","../../../node_modules/openai/resources/chat/chat.d.ts","../../../node_modules/openai/resources/chat/completions/index.d.ts","../../../node_modules/openai/resources/chat/index.d.ts","../../../node_modules/openai/resources/audio/speech.d.ts","../../../node_modules/openai/resources/audio/transcriptions.d.ts","../../../node_modules/openai/resources/audio/translations.d.ts","../../../node_modules/openai/resources/audio/audio.d.ts","../../../node_modules/openai/resources/batches.d.ts","../../../node_modules/openai/resources/beta/threads/messages.d.ts","../../../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../../../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../../../node_modules/openai/lib/eventstream.d.ts","../../../node_modules/openai/lib/assistantstream.d.ts","../../../node_modules/openai/resources/beta/threads/threads.d.ts","../../../node_modules/openai/resources/beta/assistants.d.ts","../../../node_modules/openai/resources/chat/completions.d.ts","../../../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../../../node_modules/openai/lib/chatcompletionstream.d.ts","../../../node_modules/openai/lib/responsesparser.d.ts","../../../node_modules/openai/resources/responses/input-items.d.ts","../../../node_modules/openai/lib/responses/eventtypes.d.ts","../../../node_modules/openai/lib/responses/responsestream.d.ts","../../../node_modules/openai/resources/responses/responses.d.ts","../../../node_modules/openai/lib/parser.d.ts","../../../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../../../node_modules/openai/lib/jsonschema.d.ts","../../../node_modules/openai/lib/runnablefunction.d.ts","../../../node_modules/openai/lib/chatcompletionrunner.d.ts","../../../node_modules/openai/resources/beta/chat/completions.d.ts","../../../node_modules/openai/resources/beta/chat/chat.d.ts","../../../node_modules/openai/resources/beta/realtime/sessions.d.ts","../../../node_modules/openai/resources/beta/realtime/transcription-sessions.d.ts","../../../node_modules/openai/resources/beta/realtime/realtime.d.ts","../../../node_modules/openai/resources/beta/beta.d.ts","../../../node_modules/openai/resources/containers/files/content.d.ts","../../../node_modules/openai/resources/containers/files/files.d.ts","../../../node_modules/openai/resources/containers/containers.d.ts","../../../node_modules/openai/resources/embeddings.d.ts","../../../node_modules/openai/resources/graders/grader-models.d.ts","../../../node_modules/openai/resources/evals/runs/output-items.d.ts","../../../node_modules/openai/resources/evals/runs/runs.d.ts","../../../node_modules/openai/resources/evals/evals.d.ts","../../../node_modules/openai/resources/files.d.ts","../../../node_modules/openai/resources/fine-tuning/methods.d.ts","../../../node_modules/openai/resources/fine-tuning/alpha/graders.d.ts","../../../node_modules/openai/resources/fine-tuning/alpha/alpha.d.ts","../../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.d.ts","../../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.d.ts","../../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../../../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../../../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../../../node_modules/openai/resources/graders/graders.d.ts","../../../node_modules/openai/resources/images.d.ts","../../../node_modules/openai/resources/models.d.ts","../../../node_modules/openai/resources/moderations.d.ts","../../../node_modules/openai/resources/uploads/parts.d.ts","../../../node_modules/openai/resources/uploads/uploads.d.ts","../../../node_modules/openai/resources/vector-stores/files.d.ts","../../../node_modules/openai/resources/vector-stores/file-batches.d.ts","../../../node_modules/openai/resources/vector-stores/vector-stores.d.ts","../../../node_modules/openai/resources/index.d.ts","../../../node_modules/openai/index.d.ts","../server/service/providers/openai.ts","../server/service/providers/index.ts","../server/service/utils/grounding.ts","../server/service/utils/transient.ts","../server/service/utils/index.ts","../server/service/tool-registry/types.ts","../server/service/tool-registry/registry.ts","../server/service/tool-registry/index.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../server/service/agentic-loop/agentic-loop.ts","../server/service/agentic-loop/index.ts","../server/service/assistant/abort-notice.ts","../server/service/assistant/summarize.ts","../server/service/assistant/registry-gate.ts","../server/service/assistant/assistant-chat.ts","../server/service/assistant/registry-assistant.ts","../server/service/assistant/index.ts","../server/service/analysis-contract.ts","../server/service/index.ts","../server/index.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[72,122,139,140],[72,122,139,140,187,188,193],[72,122,139,140,189,190,192,194],[72,122,139,140,193],[72,122,139,140,190,192,193,194,195,205,209,210,211,212],[72,122,139,140,194,199],[72,122,139,140,190,193,194,208],[72,122,139,140,190,193,194,203],[72,122,139,140,197,198,208],[72,122,139,140,193,195,197,200,208,209],[72,122,139,140,189,193,197,205,206,207,208,209],[72,122,139,140,193,195,197],[72,122,139,140,189,193,197,205,210],[72,122,139,140,196,205,209,210,211],[72,122,139,140,202],[72,122,139,140,193,195,196,197,200,205],[72,122,139,140,201,205],[72,122,139,140,189,193,197,201,204,205],[72,122,139,140,194],[72,122,139,140,191,193,194],[72,122,139,140,317],[72,122,139,140,302],[72,122,139,140,319,322],[72,119,120,122,139,140],[72,121,122,139,140],[122,139,140],[72,122,127,139,140,157],[72,122,123,128,133,139,140,142,154,165],[72,122,123,124,133,139,140,142],[67,68,69,72,122,139,140],[72,122,125,139,140,166],[72,122,126,127,134,139,140,143],[72,122,127,139,140,154,162],[72,122,128,130,133,139,140,142],[72,121,122,129,139,140],[72,122,130,131,139,140],[72,122,132,133,139,140],[72,121,122,133,139,140],[72,122,133,134,135,139,140,154,165],[72,122,133,134,135,139,140,149,154,157],[72,114,122,130,133,136,139,140,142,154,165],[72,122,133,134,136,137,139,140,142,154,162,165],[72,122,136,138,139,140,154,162,165],[70,71,72,73,74,75,76,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[72,122,133,139,140],[72,122,139,140,141,165],[72,122,130,133,139,140,142,154],[72,122,139,140,143],[72,122,139,140,144],[72,121,122,139,140,145],[72,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[72,122,139,140,147],[72,122,139,140,148],[72,122,133,139,140,149,150],[72,122,139,140,149,151,166,168],[72,122,134,139,140],[72,122,133,139,140,154,155,157],[72,122,139,140,156,157],[72,122,139,140,154,155],[72,122,139,140,157],[72,122,139,140,158],[72,119,122,139,140,154,159,165],[72,122,133,139,140,160,161],[72,122,139,140,160,161],[72,122,127,139,140,142,154,162],[72,122,139,140,163],[72,122,139,140,142,164],[72,122,136,139,140,148,165],[72,122,127,139,140,166],[72,122,139,140,154,167],[72,122,139,140,141,168],[72,122,139,140,169],[72,114,122,139,140],[72,114,122,133,135,139,140,145,154,157,165,167,168,170],[72,122,139,140,154,171],[72,122,139,140,315,321],[72,122,139,140,319],[72,122,139,140,316,320],[72,122,139,140,173],[72,122,139,140,218,219,224],[72,122,139,140,220,221,223,225],[72,122,139,140,224],[72,122,139,140,221,223,224,225,226,229,231,232,238,239,254,265,268,269,273,274,282,283,284,285,286,288,291,292],[72,122,139,140,224,229,243,247,256,258,259,260,293],[72,122,139,140,224,225,240,241,242,243,245,246],[72,122,139,140,247,248,255,258,293],[72,122,139,140,224,225,231,248,260,293],[72,122,139,140,225,247,248,249,255,258,293],[72,122,139,140,221],[72,122,139,140,228,247,254,260],[72,122,139,140,254],[72,122,139,140,224,243,250,252,254,293],[72,122,139,140,247,254,255],[72,122,139,140,256,257,259],[72,122,139,140,293],[72,122,139,140,227,235,236,237],[72,122,139,140,224,225,227],[72,122,139,140,220,224,227,236,238],[72,122,139,140,224,227,236,238],[72,122,139,140,224,226,227,228,239],[72,122,139,140,224,226,227,228,240,241,242,244,245],[72,122,139,140,227,245,246,261,264],[72,122,139,140,227,260],[72,122,139,140,224,227,247,248,249,255,256,258,259],[72,122,139,140,227,228,262,263,264],[72,122,139,140,224,227],[72,122,139,140,224,226,227,228,246],[72,122,139,140,220,224,226,227,228,240,241,242,244,245,246],[72,122,139,140,224,226,227,228,241],[72,122,139,140,220,224,227,228,240,242,244,245,246],[72,122,139,140,227,228,231],[72,122,139,140,231],[72,122,139,140,220,224,226,227,228,229,230,231],[72,122,139,140,230,231],[72,122,139,140,224,226,227,231],[72,122,139,140,232,233],[72,122,139,140,220,224,227,229,231],[72,122,139,140,224,226,227,267],[72,122,139,140,224,226,227,266],[72,122,139,140,224,226,227,228,254,270,272],[72,122,139,140,224,226,227,272],[72,122,139,140,224,226,227,228,254,271],[72,122,139,140,224,225,226,227],[72,122,139,140,227,276],[72,122,139,140,224,227,270],[72,122,139,140,227,278],[72,122,139,140,224,226,227],[72,122,139,140,227,275,277,279,281],[72,122,139,140,224,226,227,275,280],[72,122,139,140,227,270],[72,122,139,140,227,254],[72,122,139,140,228,229,234,238,239,254,265,268,269,273,274,282,283,284,285,286,288,291],[72,122,139,140,224,226,227,254],[72,122,139,140,220,224,226,227,228,250,251,253,254],[72,122,139,140,224,227,274,287],[72,122,139,140,224,226,227,289,291],[72,122,139,140,224,226,227,291],[72,122,139,140,224,226,227,228,289,290],[72,122,139,140,225],[72,122,139,140,222,224,225],[72,122,139,140,318],[72,86,90,122,139,140,165],[72,86,122,139,140,154,165],[72,81,122,139,140],[72,83,86,122,139,140,162,165],[72,122,139,140,142,162],[72,122,139,140,172],[72,81,122,139,140,172],[72,83,86,122,139,140,142,165],[72,78,79,82,85,122,133,139,140,154,165],[72,86,93,122,139,140],[72,78,84,122,139,140],[72,86,107,108,122,139,140],[72,82,86,122,139,140,157,165,172],[72,107,122,139,140,172],[72,80,81,122,139,140,172],[72,86,122,139,140],[72,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,108,109,110,111,112,113,122,139,140],[72,86,101,122,139,140],[72,86,93,94,122,139,140],[72,84,86,94,95,122,139,140],[72,85,122,139,140],[72,78,81,86,122,139,140],[72,86,90,94,95,122,139,140],[72,90,122,139,140],[72,84,86,89,122,139,140,165],[72,78,83,86,93,122,139,140],[72,122,139,140,154],[72,81,86,107,122,139,140,170,172],[72,122,139,140,175,177],[72,122,139,140,154,172,174],[72,122,139,140,154,172,174,175,176,177],[72,122,136,139,140,172,175],[60,72,122,139,140,313],[60,61,72,122,139,140,298,303],[60,72,122,139,140,304],[60,72,122,139,140],[60,72,122,139,140,298,305],[60,72,122,139,140,298,305,306],[60,72,122,139,140,306,307,308,309,310],[60,61,72,122,139,140,298,301,307,309],[60,72,122,139,140,301],[60,61,72,122,139,140,185],[60,61,72,122,139,140,186,295,298,301,305,311,312],[60,61,72,122,139,140,186,213,214],[60,61,72,122,139,140,186,214,216],[60,72,122,139,140,215,217,294],[60,61,72,122,139,140,186,214,293],[60,72,122,139,140,299,300],[60,72,122,139,140,299],[60,72,122,139,140,214,296,297],[62,63,64,65,66,72,122,139,140,180,181,182,183,184],[72,122,139,140,178,179],[72,122,139,140,181]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b50ad4682f959060d41592c42bf370aef89ecc99c238c73a3d3faa77d0ca37b5","signature":"030914ded3a9617a51cb181406c351abae4a492acff77a18d8079c7f5b5b74fd"},"61da60198d58f00210a34b39a0625a136ae63d7cf42500e764b91b2e5e2dbdcb","4c11afc0bcf5ad4cb8351103476e6e8076ad11f563ae65a94a14b94d158d046a","2ffaa1f7886d57fe801bd41337521c661ee17d657d1004e504d5422f62cfd23c","738433a0f2e73b2ba4ebbcaa6487030e0b8aa64e65813a160e1b845e20338d9c","972608570a8b1d91ef22149c069a5c29d75d00b4131e2697ea6d42302d3548b9",{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1},{"version":"1bc5991c91bf4be8b59db501ed284a34945d95abe9b7451d02ea001f7c5621a9","impliedFormat":1},{"version":"d8b8a5a6bf623239d5374ad4a7ff6f3b195ab5ee61293f59f1957e90d2a22809","impliedFormat":1},{"version":"35d283eca7dc0a0c7b099f5fbbf0678b87f3d837572cd5e539ba297ad9837e68","impliedFormat":1},{"version":"1c8384a195a2d931cf6e2b8f656acf558ca649a3f74922d86b95889f49a7f7c5","impliedFormat":1},{"version":"cd11655f57a3558dfcee05a6e78c026f9dfd30535eaf124439c5e88a5617359b","impliedFormat":1},{"version":"83a328cba2f47fc5a948eac394ae2ef2a5a0d26dd366ab373d2c2178bbdcd36c","impliedFormat":1},"2aafbaf6ace811133c4858f9184a6597866fbccb89eb6f1b9c4247e87d0bbfed","a113891e4f35eb4f1938fe7fcd813ce6440d020c0e183dbbdf289a6aad7a0407","5b44eaa08688d8e16c633bb23e213a6830de959c9a1f807794357253f0e5fd8e","9e795af82140c310a86279c6f0079d8de3b4db03b4d9476267aa8703a9b7d7a7","46a0b34e1264c4d25ca6646ff0e6cfaa7275ea1ae5a6bc23d4dfd84edf2f2b2e","20d8746a5f897d9ca7eea2dd41e19cdf831ce893c3eb829380332de6109059e2",{"version":"e402028070cdf507828b2fba4cddd8d57d13c1b1338e2ef23b3b9b09094e75bf","signature":"c3a944d44c5dc20264755fa6f42ddeba7f19a90b7a514764a079a46e828ee07c"},{"version":"8727e08f3b0b9929db5f1a9e9233c1ce84f3ded0728ea04e34870fdf35c92460","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"a75156a8eb6c4c6c121762a96d1fc267096b5512412ece181a64baa78731c84a","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"2132cb866b781415f9280c4a3365bab64f8e0a8b6b021cfab868268d0dff759c","impliedFormat":1},{"version":"deb4709b6d78208fa7db5c0ac1180664019321c24a3e2f11e9f2832ebdc0ed6b","impliedFormat":1},{"version":"eeee0bc128bde085ac31373f3a008d5b7b2c82a049dea721bc1cd915a94b7113","impliedFormat":1},{"version":"c2f4c022fd9ba0d424d9a25e34748aab8417b71a655ab65e528a3b00ed90ce6d","impliedFormat":1},{"version":"aa8f345d88a8fd01726038a744b7dc266c0953398b30d6ed9695ded3078d5997","impliedFormat":1},{"version":"6bd040af264aa1b76c3310590ce5e573cf198e80c4ce183b8ddd4ad9a3dfec03","impliedFormat":1},{"version":"edb59d3aa737af65d2ff7245697b5dd6754259739c05bddd830aae1bee5ab0ef","impliedFormat":1},{"version":"023afdc65ad8fe7d208604b5d5a04fb33ed9516ff4e457fdfc61c4f8a722fff8","impliedFormat":1},{"version":"2c87df699eae2e001afc54e6c2d9007a98f4aaca6caf754c43cc0b9464166352","impliedFormat":1},{"version":"e4757f15b8155598e377107e0c3df152ec82cc6ec8f87e239e6c89c08ad76e64","impliedFormat":1},{"version":"396f711944c156303065235a5f4219569bf3468d0aa594c82fb9f4b163e9eb62","impliedFormat":1},{"version":"b2646b3299c70436ae2fc39b31760f2b3a22bbabefc8316f0f0c9fc0efaa2a84","impliedFormat":1},{"version":"9da022af34638c5e3d480c4e6f9682d2336967f30e44fcaf7eecb9a01aa9095b","impliedFormat":1},{"version":"85dc0f6eb89e455c7505dc48d8a9422c2259f1d144b14f2238e791453355f5b5","impliedFormat":1},{"version":"6876f5f48d28f1256420752c057d08b4b3ae5f024930475e9bf8aeffb009cd30","impliedFormat":1},{"version":"0cf5b4d36b8d013bd7c1b1302f34d904c12cd2f3c07bb51d0c7042c0ea83fa60","impliedFormat":1},{"version":"55138ffd46c24194af1fc2d298faee0f5f42a71e5687919b962a20962815fa2b","impliedFormat":1},{"version":"bef88efba8852386d816a3a83fad1609a3214faa0cdf7a447c308cf1d15efc2a","impliedFormat":1},{"version":"2a974f024550d5c45fba33d899291a108b6906678fe36bcb9db6739919495d92","impliedFormat":1},{"version":"bc4cb88a0bd52e13d599dc1d61aa8a6234b509e6a81782d3d91517125ffc8c5d","impliedFormat":1},{"version":"f740e94014daa37b0fc90a9e30bf2455c6c5a6c969164e8a705515bc008b9996","impliedFormat":1},{"version":"d941fd4a46bddc870508bf1dcc367e8d9f7ce6c8a73cde059c902d446f25b03a","signature":"d47d90c50d7b3eeb497bfee327ffd5096b1828405e9d549d22b885a2453227e3"},{"version":"d7a6d8923fce240a602f13ed3c7aa24becceb40238802694f54b1427d92e5674","signature":"f0c2de3b2ee12d861786540076ea86887ade022875ebe512e310235288283dc6"},{"version":"878cca70d0472e4cd4d35298e5206f5f90f55a0ec4199da41ec6131d40faf155","impliedFormat":1},{"version":"76aefb4eb07ea212a554458097738ba89a8e30d465feaed0da3792c052e03684","signature":"5b2ce6be76c8df2f15fa3e6bb758b72244de049f0abea2aff46114a73c81ad3a"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"5de017dece7444a2041f5f729fe5035c3e8a94065910fbd235949a25c0c5b035","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"d3b5d359e0523d0b9f85016266c9a50ce9cda399aeac1b9eeecb63ba577e4d27","impliedFormat":1},{"version":"5b9f65234e953177fcc9088e69d363706ccd0696a15d254ac5787b28bdfb7cb0","impliedFormat":1},{"version":"510a5373df4110d355b3fb5c72dfd3906782aeacbb44de71ceee0f0dece36352","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"eb76f85d8a8893360da026a53b39152237aaa7f033a267009b8e590139afd7de","impliedFormat":1},{"version":"fcd615891bdf6421c708b42a6006ed8b0cf50ca0ac2b37d66a5777d8222893ce","impliedFormat":1},{"version":"84a28d684e49bae482c89c996e8aeaabf44c0355237a3a1303749da2161a90c1","impliedFormat":1},{"version":"89c36d61bae1591a26b3c08db2af6fdd43ffaab0f96646dead5af39ff0cf44d3","impliedFormat":1},{"version":"5277b2beeb856b348af1c23ffdaccde1ec447abede6f017a0ab0362613309587","impliedFormat":1},{"version":"d4b6804b4c4cb3d65efd5dc8a672825cea7b39db98363d2d9c2608078adce5f8","impliedFormat":1},{"version":"929f67e0e7f3b3a3bcd4e17074e2e60c94b1e27a8135472a7d002a36cd640629","impliedFormat":1},{"version":"bd8e8f02d1b0ebfa518f7d8b5f0db06ae260c192e211a1ef86397f4b49ee198f","impliedFormat":1},{"version":"71b32ccf8c508c2f7445b1b2c144dd7eef9434f7bfa6a92a9ebd0253a75cb54a","impliedFormat":1},{"version":"4fd8e7e446c8379cfb1f165961b1d2f984b40d73f5ad343d93e33962292ec2e0","impliedFormat":1},{"version":"45079ac211d6cfda93dd7d0e7fc1cf2e510dad5610048ef71e47328b765515be","impliedFormat":1},{"version":"1c19f268e0f1ed1a6485ca80e0cfd4e21bdc71cb974e2ac7b04b5fce0a91482b","impliedFormat":1},{"version":"7ae8f8b4f56ba486dc9561d873aae5b3ad263ffb9683c8f9ffc18d25a7fd09a4","impliedFormat":1},{"version":"e0ab56e00ef473df66b345c9d64e42823c03e84d9a679020746d23710c2f9fce","impliedFormat":1},{"version":"d99deead63d250c60b647620d1ddaf497779aef1084f85d3d0a353cbc4ea8a60","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"512c43b21074254148f89bd80ae00f7126db68b4d0bd1583b77b9c8af91cc0d3","impliedFormat":1},{"version":"0bfacd36c923f059779049c6c74c00823c56386397a541fefc8d8672d26e0c42","impliedFormat":1},{"version":"19d04b82ed0dc5ba742521b6da97f22362fe40d6efa5ca5650f08381e5c939b2","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"bbf0ae18efd0b886897a23141532d9695435c279921c24bcb86090f2466d0727","impliedFormat":1},{"version":"067670de65606b4aa07964b0269b788a7fe48026864326cd3ab5db9fc5e93120","impliedFormat":1},{"version":"7a094146e95764e687120cdb840d7e92fe9960c2168d697639ad51af7230ef5e","impliedFormat":1},{"version":"21290aaea56895f836a0f1da5e1ef89285f8c0e85dc85fd59e2b887255484a6f","impliedFormat":1},{"version":"a07254fded28555a750750f3016aa44ec8b41fbf3664b380829ed8948124bafe","impliedFormat":1},{"version":"f14fbd9ec19692009e5f2727a662f841bbe65ac098e3371eb9a4d9e6ac05bca7","impliedFormat":1},{"version":"46f640a5efe8e5d464ced887797e7855c60581c27575971493998f253931b9a3","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"7d390f34038ca66aef27575cffb5a25a1034df470a8f7789a9079397a359bf8b","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"6af607dd78a033679e46c1c69c126313a1485069bdec46036f0fbfe64e393979","impliedFormat":1},{"version":"44c556b0d0ede234f633da4fb95df7d6e9780007003e108e88b4969541373db1","impliedFormat":1},{"version":"ef1491fb98f7a8837af94bfff14351b28485d8b8f490987820695cedac76dc99","impliedFormat":1},{"version":"0d4ba4ad7632e46bab669c1261452a1b35b58c3b1f6a64fb456440488f9008cf","impliedFormat":1},{"version":"74a0fa488591d372a544454d6cd93bbadd09c26474595ea8afed7125692e0859","impliedFormat":1},{"version":"0a9ae72be840cc5be5b0af985997029c74e3f5bcd4237b0055096bb01241d723","impliedFormat":1},{"version":"920004608418d82d0aad39134e275a427255aaf1dafe44dca10cc432ef5ca72a","impliedFormat":1},{"version":"1c87dfe5efcac5c2cd5fc454fe5df66116d7dc284b6e7b70bd30c07375176b36","impliedFormat":1},{"version":"3ac2bd86af2bab352d126ccdde1381cd4db82e3d09a887391c5c1254790727a1","impliedFormat":1},{"version":"2efc9ad74a84d3af0e00c12769a1032b2c349430d49aadebdf710f57857c9647","impliedFormat":1},{"version":"f18cc4e4728203a0282b94fc542523dfd78967a8f160fabc920faa120688151f","impliedFormat":1},{"version":"cc609a30a3dd07d6074290dadfb49b9f0f2c09d0ae7f2fa6b41e2dae2432417b","impliedFormat":1},{"version":"6362fcd24c5b52eb88e9cf33876abd9b066d520fc9d4c24173e58dcddcfe12d5","impliedFormat":1},{"version":"c473f6bd005279b9f3a08c38986f1f0eaf1b0f9d094fec6bc66309e7504b6460","impliedFormat":1},{"version":"0043ff78e9f07cbbbb934dd80d0f5fe190437715446ec9550d1f97b74ec951ac","impliedFormat":1},{"version":"bdc013746db3189a2525e87e2da9a6681f78352ef25ae513aa5f9a75f541e0ae","impliedFormat":1},{"version":"4f567b8360c2be77e609f98efc15de3ffcdbe2a806f34a3eba1ee607c04abab6","impliedFormat":1},{"version":"615bf0ac5606a0e79312d70d4b978ac4a39b3add886b555b1b1a35472327034e","impliedFormat":1},{"version":"818e96d8e24d98dfd8fd6d9d1bbabcac082bcf5fbbe64ca2a32d006209a8ee54","impliedFormat":1},{"version":"18b0b9a38fe92aa95a40431676b2102139c5257e5635fe6a48b197e9dcb660f1","impliedFormat":1},{"version":"86b382f98cb678ff23a74fe1d940cbbf67bcd3162259e8924590ecf8ee24701e","impliedFormat":1},{"version":"aeea2c497f27ce34df29448cbe66adb0f07d3a5d210c24943d38b8026ffa6d3c","impliedFormat":1},{"version":"aa064f60b7e64c04a759f5806a0d82a954452300ee27566232b0cf5dad5b6ba6","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"65a6307cc74644b8813e553b468ea7cc7a1e5c4b241db255098b35f308bfc4b5","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"aa2f3c289c7a3403633e411985025b79af473c0bf0fdd980b9712bd6a1705d59","impliedFormat":1},{"version":"e140d9fa025dadc4b098c54278271a032d170d09f85f16f372e4879765277af8","impliedFormat":1},{"version":"70d9e5189fd4dabc81b82cf7691d80e0abf55df5030cc7f12d57df62c72b5076","impliedFormat":1},{"version":"a96be3ed573c2a6d4c7d4e7540f1738a6e90c92f05f684f5ee2533929dd8c6b2","impliedFormat":1},{"version":"0c73536b65135298d43d1ef51dd81a6eba3b69ef0ce005db3de11365fda30a55","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":1},{"version":"56803867c2ff5fd2c6ddec523df2ed03d9d3aa07f4f2b7ff3645a21f4c32ccfb","signature":"7048a0334753043ac40c97f740b0c570d45153abdc4d5971bf9a4f206016ff81"},{"version":"d474bb4a44492c182b5a96a39fb1af20b893deed6e9effde918eb854c25193d4","signature":"d0d5e6c40fcfb14a60ffa82ac97d83b2e694583fc84c8238f9733237744d114d"},{"version":"9cf09bc3432679b411e62de6588cdafb4cba1501a986335cc9b22148fae706ea","signature":"fc234116255c165988e9e7cf0d0ff231806272e3467bb9518e9f1f15dba996bd"},{"version":"cbdb89bea41c405603f30ef117384ee7f46377e320ac27548492515ba9f7c2ca","signature":"ac3f46f5bc96fe50bbe280bcc3df3537f95dbc17c3a620a18c87bfdc76a1afef"},{"version":"793ce024127b03acaca95b2ea497637c56419ca6ac92a02379d3fa10bdc8c08c","signature":"227da327ba96814798a4676d18c99f2e82193d1679b2e3196f6d4465dc4fe428"},{"version":"cdf01660750dbd63e69921969c6b731ad03447ca3fcbf077a7c7a6cbda605b0e","signature":"84d065827eab5e59979683e05ea53d9c8156a4950ee1a0ba03abb578d9be17e2"},{"version":"33e6c78d18c235d54ae46261925af432541bd468549b31a1b1dd586db310bad4","signature":"4727d1b62080e0bc3795229aaf76f2a66399320ce56f1132e1fd71b17c337128"},{"version":"696afc093eba936d670de797af1b2d1452a3ee6845c493004b59b62d5654e2a3","signature":"3d6d5846785198b71b04a311ae7dc9cc815d08b7887f5138e6a01c639c55a6f8"},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"89e326922cadcc2331d7e851011cf9f0456a681aaf3c95b48b81f8d80e8cdfba","impliedFormat":1},{"version":"9d33091b4e67c102dc792d8e37677dc9ca320411aee33c2fc7f4da9b7ecfe8f4","signature":"eb283cda573291d0d8cd9a6d8a709656c0cbe3a725568f4c6f326a3da6d9901e"},{"version":"226412856e089cbc14d4a4d6188ea20b6fdba6cd0714de2a82cf6bc3432a62e3","signature":"5af61b3b579a9a880ce05be09c427fd0d8983726bfa12d15486099e4b7db8bdf"},{"version":"3137137a623222afdabf5b5c2520b3a0ef28b9524711da024f5adf960b8e8094","signature":"dfd2320e5918f44c3838356fd506096fa4195addc1c55e15bd625a7e7ac9e913"},{"version":"52571b91879393d08ed11c97b596a7239165930091730c43b4595355566baae1","signature":"f2671ab690ea462f413ab4bec5762df02736a58cff71645f8d9aa1e34e0f91f9"},{"version":"d169ddf5e51c87d73f031ae34731dbcc34065e329b97f0dc2bc43d21734e2e08","signature":"c7d3d96e41f81fb3bf0dbee51c58a612ad8e8e52bb92d5bbaf2718cb8484a3ae"},{"version":"ce89e524335dc639f9e657947b97b65ef7323f70761f5f4372d13d1f94f39cab","signature":"ef99912c317e21105dcc367169e07d6536e756b7f3cf43e294dc8463fd241d5d"},{"version":"2b560b01acaf8fdb1bf448b8a9190133263dca8ea01ae26a0d9febeb4e855430","signature":"a12d324330ec4cdda4aab3a8f50f8c20d9af2312bfab858889f277d86e856291"},{"version":"6cc8302e971face73438d56f605a53327dee076f4e1d7b920afdd30708afc67d","signature":"5df828f8398028a0e34cfc3dc1891cb2cf4ef6bf79de226ec635804de3df5949"},{"version":"1db9ce3c7ebe7d4d48e43758b79e46023f7507e1199c0d9b022e1d3a21703d11","signature":"9405a12cd7747ee3010a7a57b8f6804b95ea27209c2dd9d1f9b4f8d3b90d1528"},{"version":"a29742e520dd45dacbe97a7ecbb30fcfca9c2bec13dc24b4bacc57889eb35273","signature":"34e91f88e395f5ba6230a05e9091c71a2910965b1400ac80dc51ab215970674b"},{"version":"cd1b3f7cc45861ad65cba283b71c569d1c5368728dcaa262c5aa44925320e1c3","signature":"75740cae8152235182c5dd737fa4073ab76afa24cfa430d94b514e79941539db"},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1}],"root":[61,186,214,215,217,[294,301],[304,314]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":1,"noEmitOnError":true,"noImplicitAny":false,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":false,"target":9,"useDefineForClassFields":false},"referencedMap":[[188,1],[194,2],[187,1],[191,1],[193,3],[190,4],[213,5],[200,6],[199,1],[207,7],[204,8],[195,4],[197,4],[209,9],[206,10],[208,11],[198,12],[210,13],[212,14],[203,15],[201,16],[202,17],[205,18],[211,12],[196,1],[189,19],[192,20],[216,1],[315,1],[318,21],[317,1],[303,22],[323,23],[302,1],[119,24],[120,24],[121,25],[72,26],[122,27],[123,28],[124,29],[67,1],[70,30],[68,1],[69,1],[125,31],[126,32],[127,33],[128,34],[129,35],[130,36],[131,36],[132,37],[133,38],[134,39],[135,40],[73,1],[71,1],[136,41],[137,42],[138,43],[172,44],[139,45],[140,1],[141,46],[142,47],[143,48],[144,49],[145,50],[146,51],[147,52],[148,53],[149,54],[150,54],[151,55],[152,1],[153,56],[154,57],[156,58],[155,59],[157,60],[158,61],[159,62],[160,63],[161,64],[162,65],[163,66],[164,67],[165,68],[166,69],[167,70],[168,71],[169,72],[74,1],[75,1],[76,1],[115,73],[116,1],[117,1],[118,60],[170,74],[171,75],[173,1],[77,1],[316,1],[322,76],[320,77],[321,78],[174,79],[219,1],[225,80],[218,1],[222,1],[224,81],[221,82],[293,83],[248,84],[244,85],[259,86],[249,87],[256,88],[243,89],[257,1],[255,90],[252,91],[253,92],[250,93],[258,94],[226,82],[227,95],[238,96],[235,97],[236,98],[237,99],[239,100],[246,101],[265,102],[261,103],[260,104],[264,105],[262,106],[263,106],[240,107],[242,108],[241,109],[245,110],[232,111],[247,112],[231,113],[233,114],[230,115],[234,116],[229,117],[268,118],[266,97],[267,119],[269,106],[273,120],[271,121],[272,122],[274,123],[277,124],[276,125],[279,126],[278,127],[282,128],[280,127],[281,129],[275,130],[270,131],[283,130],[284,106],[292,132],[285,127],[286,106],[251,133],[254,134],[228,1],[287,106],[288,135],[290,136],[289,137],[291,138],[220,139],[223,140],[319,141],[60,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[93,142],[103,143],[92,142],[113,144],[84,145],[83,146],[112,147],[106,148],[111,149],[86,150],[100,151],[85,152],[109,153],[81,154],[80,147],[110,155],[82,156],[87,157],[88,1],[91,157],[78,1],[114,158],[104,159],[95,160],[96,161],[98,162],[94,163],[97,164],[107,147],[89,165],[90,166],[99,167],[79,168],[102,159],[101,157],[105,1],[108,169],[179,170],[175,171],[178,172],[176,147],[177,173],[314,174],[304,175],[305,176],[312,177],[306,178],[309,179],[311,180],[310,181],[308,182],[307,177],[186,183],[313,184],[215,185],[217,186],[295,187],[294,188],[301,189],[300,190],[299,177],[61,177],[296,177],[298,191],[214,177],[297,177],[184,1],[183,1],[66,1],[62,1],[63,1],[185,192],[180,193],[182,194],[181,1],[65,1],[64,1]],"version":"5.9.3"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Grounded Analysis Contract
|
|
2
|
+
|
|
3
|
+
`@things-factory/ai-client-base` owns the transport and governance boundary for
|
|
4
|
+
an evidence-grounded AI conclusion. It does **not** own a product's facts,
|
|
5
|
+
calculations, tool set, or authority rules.
|
|
6
|
+
|
|
7
|
+
## Portable envelope
|
|
8
|
+
|
|
9
|
+
Every AI analysis that can influence a user decision uses
|
|
10
|
+
`GroundedAnalysisContract`:
|
|
11
|
+
|
|
12
|
+
| Field | Meaning |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `kind` | Product-specific analysis identity. |
|
|
15
|
+
| `scope`, `window` | The subject and observation period. |
|
|
16
|
+
| `claims[].evidence`, `method`, `assumptions` | The observations and rule used to reach each conclusion. |
|
|
17
|
+
| `confidence`, `limitations` | What is incomplete or uncertain. |
|
|
18
|
+
| `proposal` | An optional candidate, never an executable command. |
|
|
19
|
+
| `approvalRequired`, `approval` | A human must review before a canonical or operational change. |
|
|
20
|
+
| `trace` | Source, version, and optional provenance metadata. |
|
|
21
|
+
|
|
22
|
+
The runtime guard (`isGroundedAnalysisContract`) is for JSON/GraphQL boundaries.
|
|
23
|
+
It rejects an envelope that omits the explicit human-approval boundary.
|
|
24
|
+
|
|
25
|
+
## Product specializations
|
|
26
|
+
|
|
27
|
+
| Product | Keeps ownership of | Must not be generalized into the envelope |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| Twin | KPI, journal, baseline, forecast, and what-if calculations | Causal engineering claims and simulation assumptions |
|
|
30
|
+
| Plant | Execution records, production/OEE facts, and permitted actions | Shop-floor authority and action semantics |
|
|
31
|
+
| Figure | FigureSource, palette, geometry budgets, and render evidence | Type invariants, release gates, and visual quality rules |
|
|
32
|
+
| Board | Board schema, selected objects, and `BoardEditPatch` candidates | Scene editing scope and component compatibility |
|
|
33
|
+
|
|
34
|
+
## Current adoption status
|
|
35
|
+
|
|
36
|
+
| Product | Public specialization | Status | Boundary test |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| Twin | `EngineeringInsight` (`engineering-insight`) | Applied. Its deterministic KPI, journal, live-attention and what-if results form claims and alternatives. | `test/twin-ai/engineering-insight.test.ts` checks the runtime guard. |
|
|
39
|
+
| Plant | `EngineeringEvidencePacket`, `ExecutionAttentionAnalysis` | Applied. Execution evidence and attention analysis remain Plant-owned. | `test/execution-intelligence.test.ts` checks the runtime guard. |
|
|
40
|
+
| Board | `BoardGroundedAnalysis` (`board.analysis.v1`) | Applied. The Board AI GraphQL chat response exposes `analysis` alongside its patch/action proposal. | `server/service/assistant.test.ts` checks a read-tool analysis response. |
|
|
41
|
+
| Figure | `FigureProposal` | Not yet migrated. It already has a human acceptance flow, but does not yet expose this envelope. | Add when its proposal boundary is migrated. |
|
|
42
|
+
|
|
43
|
+
## Migration rule
|
|
44
|
+
|
|
45
|
+
1. Keep each product's domain response and calculations local.
|
|
46
|
+
2. Make its outward analysis response extend `GroundedAnalysisContract`.
|
|
47
|
+
3. Place a proposed state change in `proposal`; expose execution only through the
|
|
48
|
+
product's existing human-confirmed command or release flow.
|
|
49
|
+
4. Add a contract test at the product boundary before changing a dock or GraphQL
|
|
50
|
+
response.
|
|
51
|
+
|
|
52
|
+
The envelope is deliberately not a shared business model. A compatible product
|
|
53
|
+
may use a different `kind`, fact type and proposal type; only evidence,
|
|
54
|
+
limitations, provenance and the approval boundary are common.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/ai-client-base",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.8",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"things-factory": true,
|
|
6
6
|
"author": "heartyoh",
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
"@things-factory/env": "^10.1.3",
|
|
28
28
|
"openai": "^4.0.0"
|
|
29
29
|
},
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "c402982e29aab3b49e56bea4e41948be6a749c7f"
|
|
31
31
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import assert from 'node:assert/strict'
|
|
2
|
+
import test from 'node:test'
|
|
3
|
+
|
|
4
|
+
import { isGroundedAnalysisContract } from './analysis-contract.ts'
|
|
5
|
+
|
|
6
|
+
test('grounded analysis contract requires confidence, limitations, claims, and human approval', () => {
|
|
7
|
+
assert.equal(isGroundedAnalysisContract({
|
|
8
|
+
kind: 'example', scope: {}, window: {}, facts: {},
|
|
9
|
+
confidence: { level: 'medium', reasons: ['sample-incomplete'] },
|
|
10
|
+
limitations: [{ code: 'sample-incomplete' }],
|
|
11
|
+
claims: [],
|
|
12
|
+
approvalRequired: true,
|
|
13
|
+
approval: { required: true, mode: 'review', reason: 'advisory' }
|
|
14
|
+
}), true)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('grounded analysis contract rejects an auto-executable response', () => {
|
|
18
|
+
assert.equal(isGroundedAnalysisContract({
|
|
19
|
+
kind: 'example', confidence: { level: 'high', reasons: [] }, limitations: [], claims: [], approvalRequired: false, approval: { required: false }
|
|
20
|
+
}), false)
|
|
21
|
+
})
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product-neutral contract for an AI conclusion that must be reviewed by a person.
|
|
3
|
+
*
|
|
4
|
+
* This is deliberately a vocabulary contract, not a domain model. Plant owns
|
|
5
|
+
* execution facts, Twin owns engineering calculations, Figure owns rendering
|
|
6
|
+
* checks, and Board owns edit patches. They can nevertheless expose the same
|
|
7
|
+
* answer to a caller: what was observed, what was assumed, how certain it is,
|
|
8
|
+
* what is missing, and whether a person must approve a proposed next step.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export type AIConfidenceLevel = 'high' | 'medium' | 'low'
|
|
12
|
+
|
|
13
|
+
export interface AIAnalysisConfidence {
|
|
14
|
+
level: AIConfidenceLevel
|
|
15
|
+
/** Stable, machine-readable reasons. Do not put model prose here. */
|
|
16
|
+
reasons: string[]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface AIAnalysisLimitation {
|
|
20
|
+
code: string
|
|
21
|
+
params?: Record<string, unknown>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface AIAnalysisClaim {
|
|
25
|
+
code: string
|
|
26
|
+
severity?: 'info' | 'warning' | 'critical'
|
|
27
|
+
params?: Record<string, unknown>
|
|
28
|
+
evidence: Record<string, unknown>
|
|
29
|
+
method: string
|
|
30
|
+
assumptions: string[]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface AIApprovalRequirement {
|
|
34
|
+
/** AI output is advisory. A product authority must accept any state change. */
|
|
35
|
+
required: true
|
|
36
|
+
mode: 'review' | 'confirm'
|
|
37
|
+
reason: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The portable part of a product AI response.
|
|
42
|
+
*
|
|
43
|
+
* `facts` and the specialized claim type intentionally remain generic. Moving
|
|
44
|
+
* them here would make product-specific evidence look interchangeable and would
|
|
45
|
+
* erase important operational, engineering, rendering, and board constraints.
|
|
46
|
+
*/
|
|
47
|
+
export interface GroundedAnalysisContract<TFacts = unknown, TClaim extends AIAnalysisClaim = AIAnalysisClaim, TProposal = unknown> {
|
|
48
|
+
kind: string
|
|
49
|
+
scope: unknown
|
|
50
|
+
window: unknown
|
|
51
|
+
confidence: AIAnalysisConfidence
|
|
52
|
+
limitations: AIAnalysisLimitation[]
|
|
53
|
+
claims: TClaim[]
|
|
54
|
+
facts: TFacts
|
|
55
|
+
/** A domain-owned candidate. It is never an instruction to mutate canonical state. */
|
|
56
|
+
proposal?: TProposal
|
|
57
|
+
/** Convenient transport flag for docks and GraphQL clients. */
|
|
58
|
+
approvalRequired: true
|
|
59
|
+
approval: AIApprovalRequirement
|
|
60
|
+
trace?: { source?: string; generatedAt?: string; version?: string }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** A small runtime boundary for GraphQL/JSON consumers receiving untyped data. */
|
|
64
|
+
export function isGroundedAnalysisContract(value: unknown): value is GroundedAnalysisContract {
|
|
65
|
+
const one = value as any
|
|
66
|
+
return !!one &&
|
|
67
|
+
typeof one === 'object' &&
|
|
68
|
+
typeof one.kind === 'string' &&
|
|
69
|
+
!!one.confidence &&
|
|
70
|
+
['high', 'medium', 'low'].includes(one.confidence.level) &&
|
|
71
|
+
Array.isArray(one.confidence.reasons) &&
|
|
72
|
+
Array.isArray(one.limitations) &&
|
|
73
|
+
Array.isArray(one.claims) &&
|
|
74
|
+
one.approvalRequired === true &&
|
|
75
|
+
!!one.approval && one.approval.required === true &&
|
|
76
|
+
(one.approval.mode === 'review' || one.approval.mode === 'confirm')
|
|
77
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* What this guards: **a product with no document of its own gets a working conversation, and only
|
|
3
|
+
* the tools it can actually run.**
|
|
4
|
+
*
|
|
5
|
+
* The gap this closes: the registry half of building a conversation lived inside board-ai, so
|
|
6
|
+
* operato-figure mounted the dock, registered four tools, and had nothing to call — the only
|
|
7
|
+
* mutation that could run them was in a package figure does not load.
|
|
8
|
+
*
|
|
9
|
+
* The trap on the other side is subtler. A registered category can carry `write` and `action`
|
|
10
|
+
* tools, which produce edit ops for a document the host owns. A host with no document cannot
|
|
11
|
+
* apply them, so offering them would put a name in front of the model that leads nowhere. These
|
|
12
|
+
* tests fix that: offered and dispatchable are the same set, and it is the answering kinds only.
|
|
13
|
+
*/
|
|
14
|
+
import { registryAssistantChat } from './registry-assistant'
|
|
15
|
+
import { clearToolRegistry, registerToolCategory } from '../tool-registry/index.js'
|
|
16
|
+
import type { AIToolCall, AIToolChatResult } from '../types.js'
|
|
17
|
+
|
|
18
|
+
const TC = (name: string, args: any = {}, id = 't1'): AIToolCall =>
|
|
19
|
+
({ id, name, arguments: args, type: 'tool_use' } as any)
|
|
20
|
+
|
|
21
|
+
const okResult = (text?: string, toolCalls: AIToolCall[] = []): AIToolChatResult =>
|
|
22
|
+
({ text, toolCalls, stopReason: toolCalls.length > 0 ? 'tool_use' : 'end_turn', usage: undefined } as any)
|
|
23
|
+
|
|
24
|
+
/** Records what the provider was handed, so the tests can read the offer rather than infer it. */
|
|
25
|
+
function recordingClient(replies: AIToolChatResult[] = [okResult('answered')]) {
|
|
26
|
+
const seen: Array<{ tools: any[]; options: any }> = []
|
|
27
|
+
let turn = 0
|
|
28
|
+
return {
|
|
29
|
+
seen,
|
|
30
|
+
client: {
|
|
31
|
+
chatWithTools: async (_msgs: any, tools: any[], options: any) => {
|
|
32
|
+
seen.push({ tools, options })
|
|
33
|
+
return replies[Math.min(turn++, replies.length - 1)]
|
|
34
|
+
}
|
|
35
|
+
} as any
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const ran: Array<{ name: string; args: any; context: any }> = []
|
|
40
|
+
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
clearToolRegistry()
|
|
43
|
+
ran.length = 0
|
|
44
|
+
|
|
45
|
+
registerToolCategory({
|
|
46
|
+
name: 'figure-authoring',
|
|
47
|
+
guidance: 'Always look at the figure before describing it.',
|
|
48
|
+
specs: [
|
|
49
|
+
{
|
|
50
|
+
kind: 'read',
|
|
51
|
+
name: 'listFigures',
|
|
52
|
+
description: 'lists figures',
|
|
53
|
+
schema: { type: 'object', properties: {} },
|
|
54
|
+
builder: (args: any, context: any) => {
|
|
55
|
+
ran.push({ name: 'listFigures', args, context })
|
|
56
|
+
return { figures: ['roller-conveyor'] }
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
kind: 'write',
|
|
61
|
+
name: 'addComponent',
|
|
62
|
+
description: 'adds a component to the document',
|
|
63
|
+
schema: { type: 'object', properties: {} },
|
|
64
|
+
builder: () => {
|
|
65
|
+
ran.push({ name: 'addComponent', args: {}, context: null })
|
|
66
|
+
return []
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
} as any)
|
|
71
|
+
|
|
72
|
+
registerToolCategory({
|
|
73
|
+
name: 'plant-ops',
|
|
74
|
+
guidance: 'Never state a quantity you did not read.',
|
|
75
|
+
specs: [
|
|
76
|
+
{
|
|
77
|
+
kind: 'external',
|
|
78
|
+
name: 'readOrderState',
|
|
79
|
+
description: 'reads live order state',
|
|
80
|
+
schema: { type: 'object', properties: {} },
|
|
81
|
+
builder: (args: any, context: any) => {
|
|
82
|
+
ran.push({ name: 'readOrderState', args, context })
|
|
83
|
+
return { orders: 3 }
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
} as any)
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
const input = (over: any = {}) => ({
|
|
91
|
+
client: recordingClient().client,
|
|
92
|
+
messages: [{ role: 'user' as const, content: 'what figures do we have' }],
|
|
93
|
+
systemPrompt: 'you help someone draw a figure',
|
|
94
|
+
state: { domain: { id: 'dom-1' }, user: { id: 'u-1' } },
|
|
95
|
+
...over
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
describe('what the model is offered', () => {
|
|
99
|
+
it('★ only the kinds that answer — a write tool is not offered to a surface with no document', async () => {
|
|
100
|
+
const { client, seen } = recordingClient()
|
|
101
|
+
await registryAssistantChat(input({ client }))
|
|
102
|
+
|
|
103
|
+
const offered = seen[0].tools.map(tool => tool.name)
|
|
104
|
+
expect(offered).toEqual(expect.arrayContaining(['listFigures', 'readOrderState']))
|
|
105
|
+
expect(offered).not.toContain('addComponent')
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
it('the category filter narrows the offer', async () => {
|
|
109
|
+
const { client, seen } = recordingClient()
|
|
110
|
+
await registryAssistantChat(input({ client, toolCategories: ['figure-authoring'] }))
|
|
111
|
+
|
|
112
|
+
expect(seen[0].tools.map(tool => tool.name)).toEqual(['listFigures'])
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
it('an empty category list offers nothing — a plain conversation is a legitimate surface', async () => {
|
|
116
|
+
const { client, seen } = recordingClient()
|
|
117
|
+
await registryAssistantChat(input({ client, toolCategories: [] }))
|
|
118
|
+
|
|
119
|
+
expect(seen[0].tools).toEqual([])
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('the result reports what was offered, so the caller can log it without guessing', async () => {
|
|
123
|
+
const result = await registryAssistantChat(input({ toolCategories: ['plant-ops'] }))
|
|
124
|
+
expect(result.offeredTools).toEqual(['readOrderState'])
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
describe('the rules for using a tool travel with it', () => {
|
|
129
|
+
it('★ guidance of the exposed categories reaches the prompt', async () => {
|
|
130
|
+
const { client, seen } = recordingClient()
|
|
131
|
+
await registryAssistantChat(input({ client, toolCategories: ['figure-authoring'] }))
|
|
132
|
+
|
|
133
|
+
expect(seen[0].options.systemPrompt).toContain('you help someone draw a figure')
|
|
134
|
+
expect(seen[0].options.systemPrompt).toContain('Always look at the figure before describing it.')
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('guidance of a category this conversation cannot call is not read to the model', async () => {
|
|
138
|
+
const { client, seen } = recordingClient()
|
|
139
|
+
await registryAssistantChat(input({ client, toolCategories: ['figure-authoring'] }))
|
|
140
|
+
|
|
141
|
+
expect(seen[0].options.systemPrompt).not.toContain('Never state a quantity you did not read.')
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
describe('running a tool', () => {
|
|
146
|
+
it('★ the registered builder runs and is handed the caller state and the host context', async () => {
|
|
147
|
+
const { client } = recordingClient([okResult(undefined, [TC('listFigures', { q: 'roller' })]), okResult('two of them')])
|
|
148
|
+
|
|
149
|
+
const result = await registryAssistantChat(
|
|
150
|
+
input({ client, hostContext: { surface: 'figure-modeller', figureId: 'fig-1' } })
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
expect(ran).toHaveLength(1)
|
|
154
|
+
expect(ran[0].name).toBe('listFigures')
|
|
155
|
+
expect(ran[0].args).toEqual({ q: 'roller' })
|
|
156
|
+
expect(ran[0].context.state.domain.id).toBe('dom-1')
|
|
157
|
+
expect(ran[0].context.host).toEqual({ surface: 'figure-modeller', figureId: 'fig-1' })
|
|
158
|
+
expect(result.reply).toContain('two of them')
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
it('★ a write tool call is not executed — the same set decides offering and dispatch', async () => {
|
|
162
|
+
const { client } = recordingClient([okResult(undefined, [TC('addComponent')]), okResult('cannot do that')])
|
|
163
|
+
|
|
164
|
+
await registryAssistantChat(input({ client }))
|
|
165
|
+
|
|
166
|
+
expect(ran.map(one => one.name)).not.toContain('addComponent')
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
it('★ a tool outside the allowed categories does not run', async () => {
|
|
170
|
+
const { client } = recordingClient([okResult(undefined, [TC('readOrderState')]), okResult('done')])
|
|
171
|
+
|
|
172
|
+
await registryAssistantChat(input({ client, toolCategories: ['figure-authoring'] }))
|
|
173
|
+
|
|
174
|
+
expect(ran.map(one => one.name)).not.toContain('readOrderState')
|
|
175
|
+
})
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
describe('a client that cannot call tools', () => {
|
|
179
|
+
it('★ refuses instead of answering from nothing', async () => {
|
|
180
|
+
await expect(registryAssistantChat(input({ client: {} as any }))).rejects.toThrow(/cannot call tools/)
|
|
181
|
+
})
|
|
182
|
+
})
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A conversation for a product that has no editor of its own.
|
|
3
|
+
*
|
|
4
|
+
* ── What this is for ───────────────────────────────────────────────────────────
|
|
5
|
+
* `board-ai` assembles its conversation from two sources: its own board editing tools, and
|
|
6
|
+
* whatever other packages registered in the tool registry. The second half is the same work for
|
|
7
|
+
* every product — read the specs, build the definitions, dispatch by name — but it only existed
|
|
8
|
+
* inside the board assistant, so a product without a board had nowhere to ask a question from.
|
|
9
|
+
* operato-figure hit exactly that: the dock was mounted, the tools were registered, and the only
|
|
10
|
+
* mutation that could run them lived in a package figure does not load.
|
|
11
|
+
*
|
|
12
|
+
* ── Read and external only ─────────────────────────────────────────────────────
|
|
13
|
+
* A registry category may also carry `write` and `action` tools. Those produce edit ops for a
|
|
14
|
+
* document the host owns, and a host with no document cannot apply them. Offering them here would
|
|
15
|
+
* declare a door with no road behind it — the model would call one and the call would go nowhere.
|
|
16
|
+
* So this runner offers, and dispatches, `read` and `external` only. A host that owns a document
|
|
17
|
+
* keeps assembling its own conversation, as board-ai does.
|
|
18
|
+
*
|
|
19
|
+
* The gate answers from the same list the definitions are built from, so what is offered and what
|
|
20
|
+
* may be dispatched cannot drift apart.
|
|
21
|
+
*/
|
|
22
|
+
import type { AIClient, AIMessage } from '../types.js'
|
|
23
|
+
import { getCategoryGuidance, getToolSpecsFor, type ToolCategoryFilter, type ToolSpec } from '../tool-registry/index.js'
|
|
24
|
+
import { assistantChat, type AssistantChatResult } from './assistant-chat.js'
|
|
25
|
+
import { summarizeToolResult } from './summarize.js'
|
|
26
|
+
import type { GroundingSources } from '../utils/index.js'
|
|
27
|
+
|
|
28
|
+
/** What a registry tool is handed when it runs. `state` is the caller's koa state. */
|
|
29
|
+
export interface RegistryToolCallContext {
|
|
30
|
+
state: any
|
|
31
|
+
/** What this surface is looking at — the host passes it through; tools read it as `host`. */
|
|
32
|
+
host?: any
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface RegistryAssistantInput {
|
|
36
|
+
/** Provider client. Must implement `chatWithTools`. */
|
|
37
|
+
client: AIClient
|
|
38
|
+
/** The conversation so far, newest last. The caller owns history and truncation. */
|
|
39
|
+
messages: AIMessage[]
|
|
40
|
+
/** Who the assistant is and what this surface is. The host owns this prose. */
|
|
41
|
+
systemPrompt: string
|
|
42
|
+
/**
|
|
43
|
+
* Categories this conversation may use. Omit to allow every registered category.
|
|
44
|
+
*
|
|
45
|
+
* An empty array is not the same as omitting: it allows nothing, and the conversation runs with
|
|
46
|
+
* no tools at all. That is a legitimate surface (plain chat), so it is not corrected here.
|
|
47
|
+
*/
|
|
48
|
+
toolCategories?: string[]
|
|
49
|
+
/** Passed to tools as `context.host`. Client-supplied — never used for authorization. */
|
|
50
|
+
hostContext?: any
|
|
51
|
+
/** Caller's koa state (domain, user, tx). Tools that read the database need it. */
|
|
52
|
+
state: any
|
|
53
|
+
model?: string
|
|
54
|
+
temperature?: number
|
|
55
|
+
maxTokens?: number
|
|
56
|
+
/** Make the model call a tool before it may answer. For surfaces that report live state. */
|
|
57
|
+
requireToolOnFirstTurn?: boolean
|
|
58
|
+
/** Texts the answer is allowed to draw identifiers from, besides the tool results. */
|
|
59
|
+
groundingSources?: Omit<GroundingSources, 'toolResults'>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface RegistryAssistantResult extends AssistantChatResult<unknown> {
|
|
63
|
+
/** Tool names actually offered to the model this turn. The caller may log or return it. */
|
|
64
|
+
offeredTools: string[]
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** `read` and `external` are the two kinds that answer a question without changing a document. */
|
|
68
|
+
function answeringSpecs(filter: ToolCategoryFilter): ToolSpec[] {
|
|
69
|
+
return getToolSpecsFor(filter).filter(spec => spec.kind === 'read' || spec.kind === 'external')
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Run one turn of a conversation whose only tools come from the registry.
|
|
74
|
+
*
|
|
75
|
+
* Throws when the client cannot use tools at all — a surface built on registered tools that
|
|
76
|
+
* silently ran without them would answer from nothing and look like it had checked.
|
|
77
|
+
*/
|
|
78
|
+
export async function registryAssistantChat(input: RegistryAssistantInput): Promise<RegistryAssistantResult> {
|
|
79
|
+
const { client, messages, systemPrompt, toolCategories, hostContext, state } = input
|
|
80
|
+
|
|
81
|
+
if (!client.chatWithTools) {
|
|
82
|
+
throw new Error('[registry-assistant] the configured AI client cannot call tools, so this conversation cannot run')
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const filter: ToolCategoryFilter = toolCategories
|
|
86
|
+
const specs = answeringSpecs(filter)
|
|
87
|
+
const byName = new Map(specs.map(spec => [spec.name, spec]))
|
|
88
|
+
|
|
89
|
+
const tools = specs.map(spec => ({
|
|
90
|
+
name: spec.name,
|
|
91
|
+
description: spec.themeNote ? `${spec.description} ${spec.themeNote}` : spec.description,
|
|
92
|
+
parameters: spec.schema
|
|
93
|
+
}))
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* The rules for using a tool belong to whoever registered it. Collect only the exposed ones, so
|
|
97
|
+
* a surface never reads instructions for a category it cannot call.
|
|
98
|
+
*/
|
|
99
|
+
const guidance = getCategoryGuidance(filter)
|
|
100
|
+
const prompt = guidance.length > 0 ? `${systemPrompt}\n\n${guidance.join('\n\n')}` : systemPrompt
|
|
101
|
+
|
|
102
|
+
const toolContext: RegistryToolCallContext = { state, host: hostContext }
|
|
103
|
+
|
|
104
|
+
const result = await assistantChat<RegistryToolCallContext, unknown>({
|
|
105
|
+
initialConversation: messages,
|
|
106
|
+
tools,
|
|
107
|
+
options: {
|
|
108
|
+
systemPrompt: prompt,
|
|
109
|
+
model: input.model,
|
|
110
|
+
temperature: input.temperature,
|
|
111
|
+
maxTokens: input.maxTokens,
|
|
112
|
+
requireToolOnFirstTurn: input.requireToolOnFirstTurn
|
|
113
|
+
},
|
|
114
|
+
chat: (msgs, toolDefs, opts) => client.chatWithTools!(msgs, toolDefs, opts),
|
|
115
|
+
context: toolContext,
|
|
116
|
+
dispatch: {
|
|
117
|
+
isReadTool: name => byName.has(name),
|
|
118
|
+
/*
|
|
119
|
+
* This surface has no document, so nothing here can write. Saying so plainly makes the loop
|
|
120
|
+
* report an unknown name back to the model instead of accepting a call and dropping it.
|
|
121
|
+
*/
|
|
122
|
+
isWriteTool: () => false,
|
|
123
|
+
isActionTool: () => false,
|
|
124
|
+
executeReadTool: (call, context) => {
|
|
125
|
+
const spec = byName.get(call.name)
|
|
126
|
+
if (!spec) return undefined
|
|
127
|
+
return (spec.builder as any)(call.arguments ?? {}, context)
|
|
128
|
+
},
|
|
129
|
+
validateWriteToolCall: () => ({ valid: false, errors: ['this conversation has no document to write to'] }),
|
|
130
|
+
toolCallToOp: () => null,
|
|
131
|
+
summarizeToolResult
|
|
132
|
+
},
|
|
133
|
+
groundingSources: input.groundingSources
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
return { ...result, offeredTools: tools.map(tool => tool.name) }
|
|
137
|
+
}
|
package/server/service/index.ts
CHANGED