@uns-kit/assistant-workflow 2.0.72
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/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/clarification-policy.d.ts +64 -0
- package/dist/clarification-policy.d.ts.map +1 -0
- package/dist/clarification-policy.js +174 -0
- package/dist/clarification-policy.js.map +1 -0
- package/dist/decision.d.ts +37 -0
- package/dist/decision.d.ts.map +1 -0
- package/dist/decision.js +100 -0
- package/dist/decision.js.map +1 -0
- package/dist/definition-catalog-replay.d.ts +25 -0
- package/dist/definition-catalog-replay.d.ts.map +1 -0
- package/dist/definition-catalog-replay.js +54 -0
- package/dist/definition-catalog-replay.js.map +1 -0
- package/dist/definition-catalog.d.ts +45 -0
- package/dist/definition-catalog.d.ts.map +1 -0
- package/dist/definition-catalog.js +97 -0
- package/dist/definition-catalog.js.map +1 -0
- package/dist/definition-diagnostics.d.ts +17 -0
- package/dist/definition-diagnostics.d.ts.map +1 -0
- package/dist/definition-diagnostics.js +353 -0
- package/dist/definition-diagnostics.js.map +1 -0
- package/dist/definition-diff.d.ts +51 -0
- package/dist/definition-diff.d.ts.map +1 -0
- package/dist/definition-diff.js +172 -0
- package/dist/definition-diff.js.map +1 -0
- package/dist/definition-json.d.ts +53 -0
- package/dist/definition-json.d.ts.map +1 -0
- package/dist/definition-json.js +186 -0
- package/dist/definition-json.js.map +1 -0
- package/dist/definition-manifest.d.ts +41 -0
- package/dist/definition-manifest.d.ts.map +1 -0
- package/dist/definition-manifest.js +119 -0
- package/dist/definition-manifest.js.map +1 -0
- package/dist/definition-package-execution-json.d.ts +64 -0
- package/dist/definition-package-execution-json.d.ts.map +1 -0
- package/dist/definition-package-execution-json.js +245 -0
- package/dist/definition-package-execution-json.js.map +1 -0
- package/dist/definition-package-execution-replay.d.ts +14 -0
- package/dist/definition-package-execution-replay.d.ts.map +1 -0
- package/dist/definition-package-execution-replay.js +47 -0
- package/dist/definition-package-execution-replay.js.map +1 -0
- package/dist/definition-package-executor.d.ts +52 -0
- package/dist/definition-package-executor.d.ts.map +1 -0
- package/dist/definition-package-executor.js +70 -0
- package/dist/definition-package-executor.js.map +1 -0
- package/dist/definition-package-loader.d.ts +36 -0
- package/dist/definition-package-loader.d.ts.map +1 -0
- package/dist/definition-package-loader.js +56 -0
- package/dist/definition-package-loader.js.map +1 -0
- package/dist/definition-package-replay.d.ts +28 -0
- package/dist/definition-package-replay.d.ts.map +1 -0
- package/dist/definition-package-replay.js +74 -0
- package/dist/definition-package-replay.js.map +1 -0
- package/dist/definition-package-resolver.d.ts +31 -0
- package/dist/definition-package-resolver.d.ts.map +1 -0
- package/dist/definition-package-resolver.js +60 -0
- package/dist/definition-package-resolver.js.map +1 -0
- package/dist/definition-package-review.d.ts +29 -0
- package/dist/definition-package-review.d.ts.map +1 -0
- package/dist/definition-package-review.js +74 -0
- package/dist/definition-package-review.js.map +1 -0
- package/dist/definition-package-run-report.d.ts +25 -0
- package/dist/definition-package-run-report.d.ts.map +1 -0
- package/dist/definition-package-run-report.js +37 -0
- package/dist/definition-package-run-report.js.map +1 -0
- package/dist/definition-package-run.d.ts +20 -0
- package/dist/definition-package-run.d.ts.map +1 -0
- package/dist/definition-package-run.js +41 -0
- package/dist/definition-package-run.js.map +1 -0
- package/dist/definition-package-selection.d.ts +29 -0
- package/dist/definition-package-selection.d.ts.map +1 -0
- package/dist/definition-package-selection.js +68 -0
- package/dist/definition-package-selection.js.map +1 -0
- package/dist/definition-package-smoke.d.ts +74 -0
- package/dist/definition-package-smoke.d.ts.map +1 -0
- package/dist/definition-package-smoke.js +184 -0
- package/dist/definition-package-smoke.js.map +1 -0
- package/dist/definition-package.d.ts +36 -0
- package/dist/definition-package.d.ts.map +1 -0
- package/dist/definition-package.js +114 -0
- package/dist/definition-package.js.map +1 -0
- package/dist/definition-tuning-approval.d.ts +39 -0
- package/dist/definition-tuning-approval.d.ts.map +1 -0
- package/dist/definition-tuning-approval.js +207 -0
- package/dist/definition-tuning-approval.js.map +1 -0
- package/dist/definition-tuning-json.d.ts +58 -0
- package/dist/definition-tuning-json.d.ts.map +1 -0
- package/dist/definition-tuning-json.js +276 -0
- package/dist/definition-tuning-json.js.map +1 -0
- package/dist/definition-tuning-promotion.d.ts +120 -0
- package/dist/definition-tuning-promotion.d.ts.map +1 -0
- package/dist/definition-tuning-promotion.js +460 -0
- package/dist/definition-tuning-promotion.js.map +1 -0
- package/dist/definition-tuning-replay.d.ts +14 -0
- package/dist/definition-tuning-replay.d.ts.map +1 -0
- package/dist/definition-tuning-replay.js +50 -0
- package/dist/definition-tuning-replay.js.map +1 -0
- package/dist/definition-tuning-review-artifact.d.ts +56 -0
- package/dist/definition-tuning-review-artifact.d.ts.map +1 -0
- package/dist/definition-tuning-review-artifact.js +302 -0
- package/dist/definition-tuning-review-artifact.js.map +1 -0
- package/dist/definition-tuning-review.d.ts +59 -0
- package/dist/definition-tuning-review.d.ts.map +1 -0
- package/dist/definition-tuning-review.js +213 -0
- package/dist/definition-tuning-review.js.map +1 -0
- package/dist/definition-tuning-source-patch.d.ts +43 -0
- package/dist/definition-tuning-source-patch.d.ts.map +1 -0
- package/dist/definition-tuning-source-patch.js +214 -0
- package/dist/definition-tuning-source-patch.js.map +1 -0
- package/dist/definition-tuning.d.ts +73 -0
- package/dist/definition-tuning.d.ts.map +1 -0
- package/dist/definition-tuning.js +426 -0
- package/dist/definition-tuning.js.map +1 -0
- package/dist/definition.d.ts +189 -0
- package/dist/definition.d.ts.map +1 -0
- package/dist/definition.js +494 -0
- package/dist/definition.js.map +1 -0
- package/dist/direct-route-invocation.d.ts +132 -0
- package/dist/direct-route-invocation.d.ts.map +1 -0
- package/dist/direct-route-invocation.js +325 -0
- package/dist/direct-route-invocation.js.map +1 -0
- package/dist/direct-route-policy.d.ts +25 -0
- package/dist/direct-route-policy.d.ts.map +1 -0
- package/dist/direct-route-policy.js +106 -0
- package/dist/direct-route-policy.js.map +1 -0
- package/dist/eval-case.d.ts +85 -0
- package/dist/eval-case.d.ts.map +1 -0
- package/dist/eval-case.js +366 -0
- package/dist/eval-case.js.map +1 -0
- package/dist/eval-replay.d.ts +18 -0
- package/dist/eval-replay.d.ts.map +1 -0
- package/dist/eval-replay.js +41 -0
- package/dist/eval-replay.js.map +1 -0
- package/dist/eval-result.d.ts +46 -0
- package/dist/eval-result.d.ts.map +1 -0
- package/dist/eval-result.js +183 -0
- package/dist/eval-result.js.map +1 -0
- package/dist/eval-runner.d.ts +30 -0
- package/dist/eval-runner.d.ts.map +1 -0
- package/dist/eval-runner.js +57 -0
- package/dist/eval-runner.js.map +1 -0
- package/dist/eval-suite.d.ts +43 -0
- package/dist/eval-suite.d.ts.map +1 -0
- package/dist/eval-suite.js +101 -0
- package/dist/eval-suite.js.map +1 -0
- package/dist/execution-plan.d.ts +43 -0
- package/dist/execution-plan.d.ts.map +1 -0
- package/dist/execution-plan.js +187 -0
- package/dist/execution-plan.js.map +1 -0
- package/dist/hosted-tool-policy.d.ts +70 -0
- package/dist/hosted-tool-policy.d.ts.map +1 -0
- package/dist/hosted-tool-policy.js +228 -0
- package/dist/hosted-tool-policy.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-policy.d.ts +55 -0
- package/dist/memory-policy.d.ts.map +1 -0
- package/dist/memory-policy.js +187 -0
- package/dist/memory-policy.js.map +1 -0
- package/dist/memory-updates.d.ts +39 -0
- package/dist/memory-updates.d.ts.map +1 -0
- package/dist/memory-updates.js +110 -0
- package/dist/memory-updates.js.map +1 -0
- package/dist/outcome-trace.d.ts +79 -0
- package/dist/outcome-trace.d.ts.map +1 -0
- package/dist/outcome-trace.js +117 -0
- package/dist/outcome-trace.js.map +1 -0
- package/dist/outcome.d.ts +97 -0
- package/dist/outcome.d.ts.map +1 -0
- package/dist/outcome.js +160 -0
- package/dist/outcome.js.map +1 -0
- package/dist/planner-compiler.d.ts +14 -0
- package/dist/planner-compiler.d.ts.map +1 -0
- package/dist/planner-compiler.js +26 -0
- package/dist/planner-compiler.js.map +1 -0
- package/dist/planning.d.ts +36 -0
- package/dist/planning.d.ts.map +1 -0
- package/dist/planning.js +141 -0
- package/dist/planning.js.map +1 -0
- package/dist/policy-resolution.d.ts +10 -0
- package/dist/policy-resolution.d.ts.map +1 -0
- package/dist/policy-resolution.js +30 -0
- package/dist/policy-resolution.js.map +1 -0
- package/dist/run-evaluation.d.ts +29 -0
- package/dist/run-evaluation.d.ts.map +1 -0
- package/dist/run-evaluation.js +128 -0
- package/dist/run-evaluation.js.map +1 -0
- package/dist/run-parity.d.ts +24 -0
- package/dist/run-parity.d.ts.map +1 -0
- package/dist/run-parity.js +36 -0
- package/dist/run-parity.js.map +1 -0
- package/dist/run-report-batch.d.ts +150 -0
- package/dist/run-report-batch.d.ts.map +1 -0
- package/dist/run-report-batch.js +391 -0
- package/dist/run-report-batch.js.map +1 -0
- package/dist/run-report-json.d.ts +76 -0
- package/dist/run-report-json.d.ts.map +1 -0
- package/dist/run-report-json.js +451 -0
- package/dist/run-report-json.js.map +1 -0
- package/dist/run-report.d.ts +22 -0
- package/dist/run-report.d.ts.map +1 -0
- package/dist/run-report.js +46 -0
- package/dist/run-report.js.map +1 -0
- package/dist/run.d.ts +20 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +36 -0
- package/dist/run.js.map +1 -0
- package/dist/tool-bindings.d.ts +42 -0
- package/dist/tool-bindings.d.ts.map +1 -0
- package/dist/tool-bindings.js +124 -0
- package/dist/tool-bindings.js.map +1 -0
- package/dist/tool-capabilities.d.ts +37 -0
- package/dist/tool-capabilities.d.ts.map +1 -0
- package/dist/tool-capabilities.js +91 -0
- package/dist/tool-capabilities.js.map +1 -0
- package/dist/tool-executor.d.ts +63 -0
- package/dist/tool-executor.d.ts.map +1 -0
- package/dist/tool-executor.js +176 -0
- package/dist/tool-executor.js.map +1 -0
- package/dist/tool-fixtures.d.ts +18 -0
- package/dist/tool-fixtures.d.ts.map +1 -0
- package/dist/tool-fixtures.js +52 -0
- package/dist/tool-fixtures.js.map +1 -0
- package/dist/tool-invocations.d.ts +31 -0
- package/dist/tool-invocations.d.ts.map +1 -0
- package/dist/tool-invocations.js +79 -0
- package/dist/tool-invocations.js.map +1 -0
- package/dist/tool-provider-executors.d.ts +43 -0
- package/dist/tool-provider-executors.d.ts.map +1 -0
- package/dist/tool-provider-executors.js +59 -0
- package/dist/tool-provider-executors.js.map +1 -0
- package/dist/tool-result-cache.d.ts +37 -0
- package/dist/tool-result-cache.d.ts.map +1 -0
- package/dist/tool-result-cache.js +173 -0
- package/dist/tool-result-cache.js.map +1 -0
- package/dist/tool-results.d.ts +41 -0
- package/dist/tool-results.d.ts.map +1 -0
- package/dist/tool-results.js +137 -0
- package/dist/tool-results.js.map +1 -0
- package/dist/tool-runtime.d.ts +46 -0
- package/dist/tool-runtime.d.ts.map +1 -0
- package/dist/tool-runtime.js +163 -0
- package/dist/tool-runtime.js.map +1 -0
- package/dist/tool-selection-evaluation.d.ts +214 -0
- package/dist/tool-selection-evaluation.d.ts.map +1 -0
- package/dist/tool-selection-evaluation.js +773 -0
- package/dist/tool-selection-evaluation.js.map +1 -0
- package/dist/tool-selection-json.d.ts +71 -0
- package/dist/tool-selection-json.d.ts.map +1 -0
- package/dist/tool-selection-json.js +284 -0
- package/dist/tool-selection-json.js.map +1 -0
- package/dist/tool-selection-policy.d.ts +81 -0
- package/dist/tool-selection-policy.d.ts.map +1 -0
- package/dist/tool-selection-policy.js +376 -0
- package/dist/tool-selection-policy.js.map +1 -0
- package/dist/tool-selection-replay.d.ts +26 -0
- package/dist/tool-selection-replay.d.ts.map +1 -0
- package/dist/tool-selection-replay.js +88 -0
- package/dist/tool-selection-replay.js.map +1 -0
- package/dist/tool-selection-rules.d.ts +46 -0
- package/dist/tool-selection-rules.d.ts.map +1 -0
- package/dist/tool-selection-rules.js +183 -0
- package/dist/tool-selection-rules.js.map +1 -0
- package/dist/tool-selection-trace-export.d.ts +37 -0
- package/dist/tool-selection-trace-export.d.ts.map +1 -0
- package/dist/tool-selection-trace-export.js +324 -0
- package/dist/tool-selection-trace-export.js.map +1 -0
- package/dist/trace-events.d.ts +14 -0
- package/dist/trace-events.d.ts.map +1 -0
- package/dist/trace-events.js +65 -0
- package/dist/trace-events.js.map +1 -0
- package/dist/trace-payload.d.ts +24 -0
- package/dist/trace-payload.d.ts.map +1 -0
- package/dist/trace-payload.js +113 -0
- package/dist/trace-payload.js.map +1 -0
- package/dist/trace-replay.d.ts +276 -0
- package/dist/trace-replay.d.ts.map +1 -0
- package/dist/trace-replay.js +685 -0
- package/dist/trace-replay.js.map +1 -0
- package/dist/trace-report.d.ts +320 -0
- package/dist/trace-report.d.ts.map +1 -0
- package/dist/trace-report.js +1394 -0
- package/dist/trace-report.js.map +1 -0
- package/dist/trace-stages.d.ts +70 -0
- package/dist/trace-stages.d.ts.map +1 -0
- package/dist/trace-stages.js +103 -0
- package/dist/trace-stages.js.map +1 -0
- package/dist/value-readers.d.ts +20 -0
- package/dist/value-readers.d.ts.map +1 -0
- package/dist/value-readers.js +82 -0
- package/dist/value-readers.js.map +1 -0
- package/package.json +341 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Aljoša Vister
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# @uns-kit/assistant-workflow
|
|
2
|
+
|
|
3
|
+
Provider-neutral TypeScript primitives for defining, evaluating, executing, and
|
|
4
|
+
reviewing assistant workflows.
|
|
5
|
+
|
|
6
|
+
The package defines workflow vocabulary and policy. Applications retain
|
|
7
|
+
ownership of authentication, persistence, concrete tool handlers, provider SDKs,
|
|
8
|
+
and user-facing responses.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pnpm add @uns-kit/assistant-workflow
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Scope
|
|
17
|
+
|
|
18
|
+
- typed workflow, intent, planning-step, memory, and clarification definitions;
|
|
19
|
+
- tool capability and binding contracts for local functions, HTTP, hosted tools,
|
|
20
|
+
MCP, and controlled REPL integrations;
|
|
21
|
+
- deterministic plan/run construction, execution queues, parity checks, and
|
|
22
|
+
safe trace/report serialization;
|
|
23
|
+
- definition packages, catalog loading, replay, evaluation, and review helpers.
|
|
24
|
+
|
|
25
|
+
The package deliberately does not contain provider credentials, database access,
|
|
26
|
+
HTTP transport, UNS-specific tool implementations, or application-specific
|
|
27
|
+
workflow definitions.
|
|
28
|
+
|
|
29
|
+
## Development
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pnpm --filter @uns-kit/assistant-workflow run verify
|
|
33
|
+
pnpm --filter @uns-kit/assistant-workflow run build
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The package is versioned with the rest of `@uns-kit/*`. Publishing is a manual
|
|
37
|
+
maintainer action and is not performed by package verification commands.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type AssistantWorkflowClarificationCondition, type AssistantWorkflowClarificationQuestionStyle, type AssistantWorkflowClarificationRuleDefinition, type AssistantWorkflowDefinition, type AssistantWorkflowEntityKind } from "./definition.js";
|
|
2
|
+
export type AssistantWorkflowClarificationPolicyInput = {
|
|
3
|
+
confidence?: number | null;
|
|
4
|
+
/** A host has already established one trusted, concrete scope. */
|
|
5
|
+
resolvedScope?: boolean;
|
|
6
|
+
/** A deterministic resolver returned multiple concrete candidates for one requested scope. */
|
|
7
|
+
resolverCandidatesAmbiguous?: boolean;
|
|
8
|
+
entities?: {
|
|
9
|
+
containers?: readonly string[] | null;
|
|
10
|
+
attributes?: readonly string[] | null;
|
|
11
|
+
fullTopicPaths?: readonly string[] | null;
|
|
12
|
+
} | null;
|
|
13
|
+
timeWindowHint?: string | null;
|
|
14
|
+
};
|
|
15
|
+
export type AssistantWorkflowClarificationRuleTrace = {
|
|
16
|
+
id: string;
|
|
17
|
+
condition: AssistantWorkflowClarificationCondition;
|
|
18
|
+
questionStyle: AssistantWorkflowClarificationQuestionStyle;
|
|
19
|
+
priority: number;
|
|
20
|
+
blocksExecution: boolean;
|
|
21
|
+
satisfiedByResolvedScope: boolean;
|
|
22
|
+
confidenceBelow: number | null;
|
|
23
|
+
requiredEntityKinds: AssistantWorkflowEntityKind[];
|
|
24
|
+
readsMemory: string[];
|
|
25
|
+
writesMemory: string[];
|
|
26
|
+
};
|
|
27
|
+
export type AssistantWorkflowResolvedClarificationPolicy = {
|
|
28
|
+
ruleIds: string[];
|
|
29
|
+
rules: AssistantWorkflowClarificationRuleTrace[];
|
|
30
|
+
blockingRuleIds: string[];
|
|
31
|
+
suggestedRuleIds: string[];
|
|
32
|
+
missingClarificationRules: string[];
|
|
33
|
+
needsClarification: boolean;
|
|
34
|
+
resolvedScope: boolean;
|
|
35
|
+
reasons: string[];
|
|
36
|
+
};
|
|
37
|
+
export type AssistantWorkflowObservedClarification = {
|
|
38
|
+
produced: boolean;
|
|
39
|
+
ruleId?: string | null;
|
|
40
|
+
source?: string | null;
|
|
41
|
+
layer?: string | null;
|
|
42
|
+
reason?: string | null;
|
|
43
|
+
};
|
|
44
|
+
export type AssistantWorkflowClarificationRuntimeComparisonOptions = {
|
|
45
|
+
equivalentRuleIds?: Record<string, readonly string[]>;
|
|
46
|
+
};
|
|
47
|
+
export type AssistantWorkflowClarificationRuntimeComparison = {
|
|
48
|
+
expectedRuleIds: string[];
|
|
49
|
+
expectedBlockingRuleIds: string[];
|
|
50
|
+
expectedSuggestedRuleIds: string[];
|
|
51
|
+
produced: boolean;
|
|
52
|
+
observedRuleId: string | null;
|
|
53
|
+
equivalentRuleIds: string[];
|
|
54
|
+
matched: boolean;
|
|
55
|
+
missingExpectedRuleIds: string[];
|
|
56
|
+
unexpectedObservedRuleId: string | null;
|
|
57
|
+
source: string | null;
|
|
58
|
+
layer: string | null;
|
|
59
|
+
reason: string | null;
|
|
60
|
+
};
|
|
61
|
+
export declare function findAssistantWorkflowClarificationRule(workflow: AssistantWorkflowDefinition<string, string, string, string>, ruleId: unknown): AssistantWorkflowClarificationRuleDefinition | null;
|
|
62
|
+
export declare function buildAssistantWorkflowClarificationPolicy(workflow: AssistantWorkflowDefinition<string, string, string, string>, intentId: unknown, input?: AssistantWorkflowClarificationPolicyInput): AssistantWorkflowResolvedClarificationPolicy;
|
|
63
|
+
export declare function buildAssistantWorkflowClarificationRuntimeComparison(policy: AssistantWorkflowResolvedClarificationPolicy, observed: AssistantWorkflowObservedClarification, options?: AssistantWorkflowClarificationRuntimeComparisonOptions): AssistantWorkflowClarificationRuntimeComparison;
|
|
64
|
+
//# sourceMappingURL=clarification-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarification-policy.d.ts","sourceRoot":"","sources":["../src/clarification-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,uCAAuC,EAC5C,KAAK,2CAA2C,EAChD,KAAK,4CAA4C,EACjD,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,yCAAyC,GAAG;IACtD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8FAA8F;IAC9F,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;QACtC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;QACtC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;KAC3C,GAAG,IAAI,CAAC;IACT,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,uCAAuC,GAAG;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,uCAAuC,CAAC;IACnD,aAAa,EAAE,2CAA2C,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,wBAAwB,EAAE,OAAO,CAAC;IAClC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,2BAA2B,EAAE,CAAC;IACnD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4CAA4C,GAAG;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,uCAAuC,EAAE,CAAC;IACjD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sDAAsD,GAAG;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,+CAA+C,GAAG;IAC5D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACrE,MAAM,EAAE,OAAO,GACd,4CAA4C,GAAG,IAAI,CAIrD;AAED,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACrE,QAAQ,EAAE,OAAO,EACjB,KAAK,GAAE,yCAA8C,GACpD,4CAA4C,CAuC9C;AAED,wBAAgB,oDAAoD,CAClE,MAAM,EAAE,4CAA4C,EACpD,QAAQ,EAAE,sCAAsC,EAChD,OAAO,GAAE,sDAA2D,GACnE,+CAA+C,CA4BjD"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { findAssistantWorkflowIntent, normalizeAssistantWorkflowId, } from "./definition.js";
|
|
2
|
+
export function findAssistantWorkflowClarificationRule(workflow, ruleId) {
|
|
3
|
+
const normalized = normalizeAssistantWorkflowId(ruleId);
|
|
4
|
+
if (!normalized)
|
|
5
|
+
return null;
|
|
6
|
+
return (workflow.clarificationRules ?? []).find((rule) => rule.id === normalized) ?? null;
|
|
7
|
+
}
|
|
8
|
+
export function buildAssistantWorkflowClarificationPolicy(workflow, intentId, input = {}) {
|
|
9
|
+
const intent = findAssistantWorkflowIntent(workflow, intentId);
|
|
10
|
+
const rulesById = new Map((workflow.clarificationRules ?? []).map((rule) => [rule.id, rule]));
|
|
11
|
+
const rules = [];
|
|
12
|
+
const missingClarificationRules = [];
|
|
13
|
+
const seen = new Set();
|
|
14
|
+
for (const rawRuleId of intent?.clarificationRules ?? []) {
|
|
15
|
+
const ruleId = normalizeAssistantWorkflowId(rawRuleId);
|
|
16
|
+
if (!ruleId || seen.has(ruleId))
|
|
17
|
+
continue;
|
|
18
|
+
seen.add(ruleId);
|
|
19
|
+
const rule = rulesById.get(ruleId);
|
|
20
|
+
if (rule) {
|
|
21
|
+
rules.push(rule);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
missingClarificationRules.push(ruleId);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const sortedRules = [...rules].sort((left, right) => getPriority(left) - getPriority(right));
|
|
28
|
+
const suggested = sortedRules
|
|
29
|
+
.map((rule) => evaluateRule(rule, intent?.id ?? null, input))
|
|
30
|
+
.filter((result) => result !== null);
|
|
31
|
+
const suggestedRuleIds = suggested.map((result) => result.ruleId);
|
|
32
|
+
const suggestedSet = new Set(suggestedRuleIds);
|
|
33
|
+
const blockingRuleIds = sortedRules
|
|
34
|
+
.filter((rule) => rule.blocksExecution === true && suggestedSet.has(rule.id))
|
|
35
|
+
.map((rule) => rule.id);
|
|
36
|
+
return {
|
|
37
|
+
ruleIds: sortedRules.map((rule) => rule.id),
|
|
38
|
+
rules: sortedRules.map(ruleToTrace),
|
|
39
|
+
blockingRuleIds,
|
|
40
|
+
suggestedRuleIds,
|
|
41
|
+
missingClarificationRules,
|
|
42
|
+
needsClarification: blockingRuleIds.length > 0,
|
|
43
|
+
resolvedScope: input.resolvedScope === true,
|
|
44
|
+
reasons: suggested.map((result) => result.reason),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function buildAssistantWorkflowClarificationRuntimeComparison(policy, observed, options = {}) {
|
|
48
|
+
const observedRuleId = normalizeAssistantWorkflowId(observed.ruleId);
|
|
49
|
+
const equivalentRuleIds = observedRuleId
|
|
50
|
+
? uniqueStrings([observedRuleId, ...(options.equivalentRuleIds?.[observedRuleId] ?? [])])
|
|
51
|
+
: [];
|
|
52
|
+
const expectedRuleIds = policy.blockingRuleIds.length ? policy.blockingRuleIds : policy.suggestedRuleIds;
|
|
53
|
+
const matched = observed.produced
|
|
54
|
+
? equivalentRuleIds.some((ruleId) => expectedRuleIds.includes(ruleId))
|
|
55
|
+
: policy.blockingRuleIds.length === 0;
|
|
56
|
+
const missingExpectedRuleIds = observed.produced
|
|
57
|
+
? expectedRuleIds.filter((ruleId) => !equivalentRuleIds.includes(ruleId))
|
|
58
|
+
: [...policy.blockingRuleIds];
|
|
59
|
+
const unexpectedObservedRuleId = observed.produced && observedRuleId && !matched ? observedRuleId : null;
|
|
60
|
+
return {
|
|
61
|
+
expectedRuleIds,
|
|
62
|
+
expectedBlockingRuleIds: [...policy.blockingRuleIds],
|
|
63
|
+
expectedSuggestedRuleIds: [...policy.suggestedRuleIds],
|
|
64
|
+
produced: observed.produced,
|
|
65
|
+
observedRuleId,
|
|
66
|
+
equivalentRuleIds,
|
|
67
|
+
matched,
|
|
68
|
+
missingExpectedRuleIds,
|
|
69
|
+
unexpectedObservedRuleId,
|
|
70
|
+
source: normalizeOptionalText(observed.source),
|
|
71
|
+
layer: normalizeOptionalText(observed.layer),
|
|
72
|
+
reason: normalizeOptionalText(observed.reason),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function evaluateRule(rule, intentId, input) {
|
|
76
|
+
if (input.resolvedScope === true && rule.satisfiedByResolvedScope === true) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
switch (rule.condition) {
|
|
80
|
+
case "low_confidence": {
|
|
81
|
+
const threshold = rule.confidenceBelow ?? 0.55;
|
|
82
|
+
const confidence = typeof input.confidence === "number" && Number.isFinite(input.confidence)
|
|
83
|
+
? input.confidence
|
|
84
|
+
: null;
|
|
85
|
+
if (confidence !== null && confidence < threshold) {
|
|
86
|
+
return { ruleId: rule.id, reason: `confidence ${confidence} below ${threshold}` };
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
case "missing_required_entity": {
|
|
91
|
+
const requiredKinds = rule.requiredEntityKinds ?? [];
|
|
92
|
+
const missingKinds = requiredKinds.filter((kind) => !hasEntityKind(input, kind));
|
|
93
|
+
if (missingKinds.length === requiredKinds.length && requiredKinds.length > 0) {
|
|
94
|
+
return { ruleId: rule.id, reason: `missing required entity scope: ${missingKinds.join(", ")}` };
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
case "multiple_entity_candidates": {
|
|
99
|
+
const candidateKinds = rule.requiredEntityKinds?.length
|
|
100
|
+
? rule.requiredEntityKinds
|
|
101
|
+
: ["container", "attribute", "full_topic_path"];
|
|
102
|
+
const ambiguousKinds = candidateKinds.filter((kind) => getEntityCount(input, kind) > 1);
|
|
103
|
+
if (ambiguousKinds.length > 0) {
|
|
104
|
+
return { ruleId: rule.id, reason: `multiple entity candidates: ${ambiguousKinds.join(", ")}` };
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
case "resolver_candidates_ambiguous":
|
|
109
|
+
return input.resolverCandidatesAmbiguous === true
|
|
110
|
+
? { ruleId: rule.id, reason: "resolver returned multiple concrete scope candidates" }
|
|
111
|
+
: null;
|
|
112
|
+
case "fallback_intent":
|
|
113
|
+
return intentId === null || intentId === "other"
|
|
114
|
+
? { ruleId: rule.id, reason: "fallback intent requires user clarification" }
|
|
115
|
+
: null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function ruleToTrace(rule) {
|
|
119
|
+
return {
|
|
120
|
+
id: rule.id,
|
|
121
|
+
condition: rule.condition,
|
|
122
|
+
questionStyle: rule.questionStyle,
|
|
123
|
+
priority: getPriority(rule),
|
|
124
|
+
blocksExecution: rule.blocksExecution === true,
|
|
125
|
+
satisfiedByResolvedScope: rule.satisfiedByResolvedScope === true,
|
|
126
|
+
confidenceBelow: typeof rule.confidenceBelow === "number" ? rule.confidenceBelow : null,
|
|
127
|
+
requiredEntityKinds: [...(rule.requiredEntityKinds ?? [])],
|
|
128
|
+
readsMemory: uniqueStrings(rule.readsMemory ?? []),
|
|
129
|
+
writesMemory: uniqueStrings(rule.writesMemory ?? []),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function getPriority(rule) {
|
|
133
|
+
return typeof rule.priority === "number" && Number.isFinite(rule.priority) ? rule.priority : 100;
|
|
134
|
+
}
|
|
135
|
+
function hasEntityKind(input, kind) {
|
|
136
|
+
if (kind === "time_window") {
|
|
137
|
+
return typeof input.timeWindowHint === "string" && input.timeWindowHint.trim().length > 0;
|
|
138
|
+
}
|
|
139
|
+
return getEntityCount(input, kind) > 0;
|
|
140
|
+
}
|
|
141
|
+
function getEntityCount(input, kind) {
|
|
142
|
+
const entities = input.entities;
|
|
143
|
+
if (!entities)
|
|
144
|
+
return 0;
|
|
145
|
+
if (kind === "container")
|
|
146
|
+
return countStrings(entities.containers);
|
|
147
|
+
if (kind === "attribute")
|
|
148
|
+
return countStrings(entities.attributes);
|
|
149
|
+
if (kind === "full_topic_path")
|
|
150
|
+
return countStrings(entities.fullTopicPaths);
|
|
151
|
+
return 0;
|
|
152
|
+
}
|
|
153
|
+
function countStrings(values) {
|
|
154
|
+
if (!Array.isArray(values))
|
|
155
|
+
return 0;
|
|
156
|
+
return values.filter((value) => typeof value === "string" && value.trim().length > 0).length;
|
|
157
|
+
}
|
|
158
|
+
function uniqueStrings(values) {
|
|
159
|
+
const out = [];
|
|
160
|
+
const seen = new Set();
|
|
161
|
+
for (const value of values) {
|
|
162
|
+
const normalized = normalizeAssistantWorkflowId(value);
|
|
163
|
+
if (!normalized || seen.has(normalized))
|
|
164
|
+
continue;
|
|
165
|
+
seen.add(normalized);
|
|
166
|
+
out.push(normalized);
|
|
167
|
+
}
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
function normalizeOptionalText(value) {
|
|
171
|
+
const normalized = value?.trim();
|
|
172
|
+
return normalized?.length ? normalized : null;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=clarification-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarification-policy.js","sourceRoot":"","sources":["../src/clarification-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findAssistantWorkflowIntent,\n normalizeAssistantWorkflowId,\n type AssistantWorkflowClarificationCondition,\n type AssistantWorkflowClarificationQuestionStyle,\n type AssistantWorkflowClarificationRuleDefinition,\n type AssistantWorkflowDefinition,\n type AssistantWorkflowEntityKind,\n} from \"./definition.js\";\n\nexport type AssistantWorkflowClarificationPolicyInput = {\n confidence?: number | null;\n /** A host has already established one trusted, concrete scope. */\n resolvedScope?: boolean;\n /** A deterministic resolver returned multiple concrete candidates for one requested scope. */\n resolverCandidatesAmbiguous?: boolean;\n entities?: {\n containers?: readonly string[] | null;\n attributes?: readonly string[] | null;\n fullTopicPaths?: readonly string[] | null;\n } | null;\n timeWindowHint?: string | null;\n};\n\nexport type AssistantWorkflowClarificationRuleTrace = {\n id: string;\n condition: AssistantWorkflowClarificationCondition;\n questionStyle: AssistantWorkflowClarificationQuestionStyle;\n priority: number;\n blocksExecution: boolean;\n satisfiedByResolvedScope: boolean;\n confidenceBelow: number | null;\n requiredEntityKinds: AssistantWorkflowEntityKind[];\n readsMemory: string[];\n writesMemory: string[];\n};\n\nexport type AssistantWorkflowResolvedClarificationPolicy = {\n ruleIds: string[];\n rules: AssistantWorkflowClarificationRuleTrace[];\n blockingRuleIds: string[];\n suggestedRuleIds: string[];\n missingClarificationRules: string[];\n needsClarification: boolean;\n resolvedScope: boolean;\n reasons: string[];\n};\n\nexport type AssistantWorkflowObservedClarification = {\n produced: boolean;\n ruleId?: string | null;\n source?: string | null;\n layer?: string | null;\n reason?: string | null;\n};\n\nexport type AssistantWorkflowClarificationRuntimeComparisonOptions = {\n equivalentRuleIds?: Record<string, readonly string[]>;\n};\n\nexport type AssistantWorkflowClarificationRuntimeComparison = {\n expectedRuleIds: string[];\n expectedBlockingRuleIds: string[];\n expectedSuggestedRuleIds: string[];\n produced: boolean;\n observedRuleId: string | null;\n equivalentRuleIds: string[];\n matched: boolean;\n missingExpectedRuleIds: string[];\n unexpectedObservedRuleId: string | null;\n source: string | null;\n layer: string | null;\n reason: string | null;\n};\n\nexport function findAssistantWorkflowClarificationRule(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n ruleId: unknown,\n): AssistantWorkflowClarificationRuleDefinition | null {\n const normalized = normalizeAssistantWorkflowId(ruleId);\n if (!normalized) return null;\n return (workflow.clarificationRules ?? []).find((rule) => rule.id === normalized) ?? null;\n}\n\nexport function buildAssistantWorkflowClarificationPolicy(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n intentId: unknown,\n input: AssistantWorkflowClarificationPolicyInput = {},\n): AssistantWorkflowResolvedClarificationPolicy {\n const intent = findAssistantWorkflowIntent(workflow, intentId);\n const rulesById = new Map((workflow.clarificationRules ?? []).map((rule) => [rule.id, rule] as const));\n const rules: AssistantWorkflowClarificationRuleDefinition[] = [];\n const missingClarificationRules: string[] = [];\n const seen = new Set<string>();\n\n for (const rawRuleId of intent?.clarificationRules ?? []) {\n const ruleId = normalizeAssistantWorkflowId(rawRuleId);\n if (!ruleId || seen.has(ruleId)) continue;\n seen.add(ruleId);\n const rule = rulesById.get(ruleId);\n if (rule) {\n rules.push(rule);\n } else {\n missingClarificationRules.push(ruleId);\n }\n }\n\n const sortedRules = [...rules].sort((left, right) => getPriority(left) - getPriority(right));\n const suggested = sortedRules\n .map((rule) => evaluateRule(rule, intent?.id ?? null, input))\n .filter((result): result is { ruleId: string; reason: string } => result !== null);\n const suggestedRuleIds = suggested.map((result) => result.ruleId);\n const suggestedSet = new Set(suggestedRuleIds);\n const blockingRuleIds = sortedRules\n .filter((rule) => rule.blocksExecution === true && suggestedSet.has(rule.id))\n .map((rule) => rule.id);\n\n return {\n ruleIds: sortedRules.map((rule) => rule.id),\n rules: sortedRules.map(ruleToTrace),\n blockingRuleIds,\n suggestedRuleIds,\n missingClarificationRules,\n needsClarification: blockingRuleIds.length > 0,\n resolvedScope: input.resolvedScope === true,\n reasons: suggested.map((result) => result.reason),\n };\n}\n\nexport function buildAssistantWorkflowClarificationRuntimeComparison(\n policy: AssistantWorkflowResolvedClarificationPolicy,\n observed: AssistantWorkflowObservedClarification,\n options: AssistantWorkflowClarificationRuntimeComparisonOptions = {},\n): AssistantWorkflowClarificationRuntimeComparison {\n const observedRuleId = normalizeAssistantWorkflowId(observed.ruleId);\n const equivalentRuleIds = observedRuleId\n ? uniqueStrings([observedRuleId, ...(options.equivalentRuleIds?.[observedRuleId] ?? [])])\n : [];\n const expectedRuleIds = policy.blockingRuleIds.length ? policy.blockingRuleIds : policy.suggestedRuleIds;\n const matched = observed.produced\n ? equivalentRuleIds.some((ruleId) => expectedRuleIds.includes(ruleId))\n : policy.blockingRuleIds.length === 0;\n const missingExpectedRuleIds = observed.produced\n ? expectedRuleIds.filter((ruleId) => !equivalentRuleIds.includes(ruleId))\n : [...policy.blockingRuleIds];\n const unexpectedObservedRuleId = observed.produced && observedRuleId && !matched ? observedRuleId : null;\n\n return {\n expectedRuleIds,\n expectedBlockingRuleIds: [...policy.blockingRuleIds],\n expectedSuggestedRuleIds: [...policy.suggestedRuleIds],\n produced: observed.produced,\n observedRuleId,\n equivalentRuleIds,\n matched,\n missingExpectedRuleIds,\n unexpectedObservedRuleId,\n source: normalizeOptionalText(observed.source),\n layer: normalizeOptionalText(observed.layer),\n reason: normalizeOptionalText(observed.reason),\n };\n}\n\nfunction evaluateRule(\n rule: AssistantWorkflowClarificationRuleDefinition,\n intentId: string | null,\n input: AssistantWorkflowClarificationPolicyInput,\n): { ruleId: string; reason: string } | null {\n if (input.resolvedScope === true && rule.satisfiedByResolvedScope === true) {\n return null;\n }\n switch (rule.condition) {\n case \"low_confidence\": {\n const threshold = rule.confidenceBelow ?? 0.55;\n const confidence = typeof input.confidence === \"number\" && Number.isFinite(input.confidence)\n ? input.confidence\n : null;\n if (confidence !== null && confidence < threshold) {\n return { ruleId: rule.id, reason: `confidence ${confidence} below ${threshold}` };\n }\n return null;\n }\n case \"missing_required_entity\": {\n const requiredKinds = rule.requiredEntityKinds ?? [];\n const missingKinds = requiredKinds.filter((kind) => !hasEntityKind(input, kind));\n if (missingKinds.length === requiredKinds.length && requiredKinds.length > 0) {\n return { ruleId: rule.id, reason: `missing required entity scope: ${missingKinds.join(\", \")}` };\n }\n return null;\n }\n case \"multiple_entity_candidates\": {\n const candidateKinds = rule.requiredEntityKinds?.length\n ? rule.requiredEntityKinds\n : [\"container\", \"attribute\", \"full_topic_path\"] as const;\n const ambiguousKinds = candidateKinds.filter((kind) => getEntityCount(input, kind) > 1);\n if (ambiguousKinds.length > 0) {\n return { ruleId: rule.id, reason: `multiple entity candidates: ${ambiguousKinds.join(\", \")}` };\n }\n return null;\n }\n case \"resolver_candidates_ambiguous\":\n return input.resolverCandidatesAmbiguous === true\n ? { ruleId: rule.id, reason: \"resolver returned multiple concrete scope candidates\" }\n : null;\n case \"fallback_intent\":\n return intentId === null || intentId === \"other\"\n ? { ruleId: rule.id, reason: \"fallback intent requires user clarification\" }\n : null;\n }\n}\n\nfunction ruleToTrace(rule: AssistantWorkflowClarificationRuleDefinition): AssistantWorkflowClarificationRuleTrace {\n return {\n id: rule.id,\n condition: rule.condition,\n questionStyle: rule.questionStyle,\n priority: getPriority(rule),\n blocksExecution: rule.blocksExecution === true,\n satisfiedByResolvedScope: rule.satisfiedByResolvedScope === true,\n confidenceBelow: typeof rule.confidenceBelow === \"number\" ? rule.confidenceBelow : null,\n requiredEntityKinds: [...(rule.requiredEntityKinds ?? [])],\n readsMemory: uniqueStrings(rule.readsMemory ?? []),\n writesMemory: uniqueStrings(rule.writesMemory ?? []),\n };\n}\n\nfunction getPriority(rule: AssistantWorkflowClarificationRuleDefinition): number {\n return typeof rule.priority === \"number\" && Number.isFinite(rule.priority) ? rule.priority : 100;\n}\n\nfunction hasEntityKind(input: AssistantWorkflowClarificationPolicyInput, kind: AssistantWorkflowEntityKind): boolean {\n if (kind === \"time_window\") {\n return typeof input.timeWindowHint === \"string\" && input.timeWindowHint.trim().length > 0;\n }\n return getEntityCount(input, kind) > 0;\n}\n\nfunction getEntityCount(input: AssistantWorkflowClarificationPolicyInput, kind: AssistantWorkflowEntityKind): number {\n const entities = input.entities;\n if (!entities) return 0;\n if (kind === \"container\") return countStrings(entities.containers);\n if (kind === \"attribute\") return countStrings(entities.attributes);\n if (kind === \"full_topic_path\") return countStrings(entities.fullTopicPaths);\n return 0;\n}\n\nfunction countStrings(values: readonly string[] | null | undefined): number {\n if (!Array.isArray(values)) return 0;\n return values.filter((value) => typeof value === \"string\" && value.trim().length > 0).length;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const normalized = normalizeAssistantWorkflowId(value);\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n out.push(normalized);\n }\n return out;\n}\n\nfunction normalizeOptionalText(value: string | null | undefined): string | null {\n const normalized = value?.trim();\n return normalized?.length ? normalized : null;\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type AssistantWorkflowResolvedClarificationPolicy, type AssistantWorkflowClarificationPolicyInput } from "./clarification-policy.js";
|
|
2
|
+
import { type AssistantWorkflowDefinition, type AssistantWorkflowExecutionBias, type AssistantWorkflowFirstHopToolPolicy, type AssistantWorkflowMemoryUse } from "./definition.js";
|
|
3
|
+
import { type AssistantWorkflowResolvedMemoryPolicy } from "./memory-policy.js";
|
|
4
|
+
import { type AssistantWorkflowPlan } from "./planning.js";
|
|
5
|
+
export type AssistantWorkflowDecisionInput = {
|
|
6
|
+
intent?: string | null;
|
|
7
|
+
subintent?: string | null;
|
|
8
|
+
presentation?: string | null;
|
|
9
|
+
toolsToExpose?: readonly string[] | null;
|
|
10
|
+
confidence?: number | null;
|
|
11
|
+
resolvedScope?: boolean;
|
|
12
|
+
entities?: AssistantWorkflowClarificationPolicyInput["entities"];
|
|
13
|
+
timeWindowHint?: string | null;
|
|
14
|
+
};
|
|
15
|
+
export type AssistantWorkflowDecision = {
|
|
16
|
+
intent: string | null;
|
|
17
|
+
matchedIntent: boolean;
|
|
18
|
+
defaultPresentation: string | null;
|
|
19
|
+
effectivePresentation: string | null;
|
|
20
|
+
executionBias: AssistantWorkflowExecutionBias | null;
|
|
21
|
+
firstHopToolPolicy: AssistantWorkflowFirstHopToolPolicy | null;
|
|
22
|
+
memoryUse: AssistantWorkflowMemoryUse[];
|
|
23
|
+
memoryPolicy: AssistantWorkflowResolvedMemoryPolicy;
|
|
24
|
+
clarificationPolicy: AssistantWorkflowResolvedClarificationPolicy;
|
|
25
|
+
plan: AssistantWorkflowPlan;
|
|
26
|
+
requiredToolHints: string[];
|
|
27
|
+
missingRequiredToolHints: string[];
|
|
28
|
+
toolHints: string[];
|
|
29
|
+
missingToolHints: string[];
|
|
30
|
+
classifierTools: string[];
|
|
31
|
+
workflowSuggestedTools: string[];
|
|
32
|
+
extraClassifierTools: string[];
|
|
33
|
+
};
|
|
34
|
+
export declare function buildAssistantWorkflowDecision(workflow: AssistantWorkflowDefinition<string, string, string, string>, classification: AssistantWorkflowDecisionInput | null | undefined, availableToolNames?: readonly string[]): AssistantWorkflowDecision;
|
|
35
|
+
export declare function buildAssistantWorkflowDecisionTracePayload(decision: AssistantWorkflowDecision): Record<string, unknown>;
|
|
36
|
+
export declare function shouldRequireAssistantWorkflowFirstHopTool(workflow: AssistantWorkflowDefinition<string, string, string, string>, intentId: unknown): boolean;
|
|
37
|
+
//# sourceMappingURL=decision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../src/decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,4CAA4C,EACjD,KAAK,yCAAyC,EAC/C,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,mCAAmC,EACxC,KAAK,0BAA0B,EAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,qCAAqC,EAC3C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,yCAAyC,CAAC,UAAU,CAAC,CAAC;IACjE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,8BAA8B,GAAG,IAAI,CAAC;IACrD,kBAAkB,EAAE,mCAAmC,GAAG,IAAI,CAAC;IAC/D,SAAS,EAAE,0BAA0B,EAAE,CAAC;IACxC,YAAY,EAAE,qCAAqC,CAAC;IACpD,mBAAmB,EAAE,4CAA4C,CAAC;IAClE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACrE,cAAc,EAAE,8BAA8B,GAAG,IAAI,GAAG,SAAS,EACjE,kBAAkB,GAAE,SAAS,MAAM,EAAO,GACzC,yBAAyB,CAqD3B;AAED,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,yBAAyB,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB;AAED,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACrE,QAAQ,EAAE,OAAO,GAChB,OAAO,CAET"}
|
package/dist/decision.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { buildAssistantWorkflowClarificationPolicy, } from "./clarification-policy.js";
|
|
2
|
+
import { findAssistantWorkflowIntent, } from "./definition.js";
|
|
3
|
+
import { buildAssistantWorkflowMemoryPolicy, } from "./memory-policy.js";
|
|
4
|
+
import { buildAssistantWorkflowPlan, } from "./planning.js";
|
|
5
|
+
export function buildAssistantWorkflowDecision(workflow, classification, availableToolNames = []) {
|
|
6
|
+
const intent = typeof classification?.intent === "string" && classification.intent.trim().length
|
|
7
|
+
? classification.intent.trim().toLowerCase()
|
|
8
|
+
: null;
|
|
9
|
+
const intentDefinition = intent ? findAssistantWorkflowIntent(workflow, intent) : null;
|
|
10
|
+
const availableSet = new Set(availableToolNames);
|
|
11
|
+
const classifierTools = uniqueNonEmptyStrings(classification?.toolsToExpose ?? [])
|
|
12
|
+
.filter((tool) => availableSet.size === 0 || availableSet.has(tool));
|
|
13
|
+
const toolHintsRaw = uniqueNonEmptyStrings(intentDefinition?.toolHints ?? []);
|
|
14
|
+
const requiredToolHintsRaw = uniqueNonEmptyStrings(intentDefinition?.requiredToolHints ?? []);
|
|
15
|
+
const toolHints = toolHintsRaw.filter((tool) => availableSet.size === 0 || availableSet.has(tool));
|
|
16
|
+
const requiredToolHints = requiredToolHintsRaw.filter((tool) => availableSet.size === 0 || availableSet.has(tool));
|
|
17
|
+
const missingToolHints = availableSet.size === 0 ? [] : toolHintsRaw.filter((tool) => !availableSet.has(tool));
|
|
18
|
+
const missingRequiredToolHints = availableSet.size === 0 ? [] : requiredToolHintsRaw.filter((tool) => !availableSet.has(tool));
|
|
19
|
+
const workflowSuggestedTools = uniqueNonEmptyStrings([...classifierTools, ...requiredToolHints, ...toolHints]);
|
|
20
|
+
const workflowHintSet = new Set([...requiredToolHints, ...toolHints]);
|
|
21
|
+
const memoryPolicy = buildAssistantWorkflowMemoryPolicy(workflow, intent);
|
|
22
|
+
const clarificationPolicy = buildAssistantWorkflowClarificationPolicy(workflow, intent, buildClarificationPolicyInput(classification));
|
|
23
|
+
const plan = buildAssistantWorkflowPlan(workflow, intent, availableToolNames, {
|
|
24
|
+
...(typeof classification?.subintent === "string" ? { subintent: classification.subintent } : {}),
|
|
25
|
+
...(typeof classification?.presentation === "string" ? { presentation: classification.presentation } : {}),
|
|
26
|
+
...(typeof classification?.timeWindowHint === "string" ? { timeWindowHint: classification.timeWindowHint } : {}),
|
|
27
|
+
...(Array.isArray(classification?.toolsToExpose) ? { toolsToExpose: classification.toolsToExpose } : {}),
|
|
28
|
+
...(typeof classification?.confidence === "number" ? { confidence: classification.confidence } : {}),
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
intent,
|
|
32
|
+
matchedIntent: intentDefinition !== null,
|
|
33
|
+
defaultPresentation: intentDefinition?.defaultPresentation ?? null,
|
|
34
|
+
effectivePresentation: typeof classification?.presentation === "string" && classification.presentation.trim().length
|
|
35
|
+
? classification.presentation.trim().toLowerCase()
|
|
36
|
+
: intentDefinition?.defaultPresentation ?? null,
|
|
37
|
+
executionBias: intentDefinition?.executionBias ?? null,
|
|
38
|
+
firstHopToolPolicy: intentDefinition ? intentDefinition.firstHopToolPolicy ?? "auto" : null,
|
|
39
|
+
memoryUse: uniqueNonEmptyStrings(intentDefinition?.memoryUse ?? []),
|
|
40
|
+
memoryPolicy,
|
|
41
|
+
clarificationPolicy,
|
|
42
|
+
plan,
|
|
43
|
+
requiredToolHints,
|
|
44
|
+
missingRequiredToolHints,
|
|
45
|
+
toolHints,
|
|
46
|
+
missingToolHints,
|
|
47
|
+
classifierTools,
|
|
48
|
+
workflowSuggestedTools,
|
|
49
|
+
extraClassifierTools: classifierTools.filter((tool) => !workflowHintSet.has(tool)),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function buildAssistantWorkflowDecisionTracePayload(decision) {
|
|
53
|
+
return {
|
|
54
|
+
intent: decision.intent,
|
|
55
|
+
matchedIntent: decision.matchedIntent,
|
|
56
|
+
defaultPresentation: decision.defaultPresentation,
|
|
57
|
+
effectivePresentation: decision.effectivePresentation,
|
|
58
|
+
executionBias: decision.executionBias,
|
|
59
|
+
firstHopToolPolicy: decision.firstHopToolPolicy,
|
|
60
|
+
memoryUse: decision.memoryUse,
|
|
61
|
+
memoryPolicy: decision.memoryPolicy,
|
|
62
|
+
clarificationPolicy: decision.clarificationPolicy,
|
|
63
|
+
plan: decision.plan,
|
|
64
|
+
classifierTools: decision.classifierTools,
|
|
65
|
+
requiredToolHints: decision.requiredToolHints,
|
|
66
|
+
missingRequiredToolHints: decision.missingRequiredToolHints,
|
|
67
|
+
toolHints: decision.toolHints,
|
|
68
|
+
missingToolHints: decision.missingToolHints,
|
|
69
|
+
workflowSuggestedTools: decision.workflowSuggestedTools,
|
|
70
|
+
extraClassifierTools: decision.extraClassifierTools,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function shouldRequireAssistantWorkflowFirstHopTool(workflow, intentId) {
|
|
74
|
+
return findAssistantWorkflowIntent(workflow, intentId)?.firstHopToolPolicy === "require-tool";
|
|
75
|
+
}
|
|
76
|
+
function uniqueNonEmptyStrings(values) {
|
|
77
|
+
const out = [];
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
for (const value of values) {
|
|
80
|
+
if (typeof value !== "string")
|
|
81
|
+
continue;
|
|
82
|
+
const trimmed = value.trim();
|
|
83
|
+
if (!trimmed.length || seen.has(trimmed))
|
|
84
|
+
continue;
|
|
85
|
+
seen.add(trimmed);
|
|
86
|
+
out.push(trimmed);
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
function buildClarificationPolicyInput(classification) {
|
|
91
|
+
if (!classification)
|
|
92
|
+
return {};
|
|
93
|
+
return {
|
|
94
|
+
...(typeof classification.confidence === "number" ? { confidence: classification.confidence } : {}),
|
|
95
|
+
...(classification.resolvedScope === true ? { resolvedScope: true } : {}),
|
|
96
|
+
...(classification.entities !== undefined ? { entities: classification.entities } : {}),
|
|
97
|
+
...(classification.timeWindowHint !== undefined ? { timeWindowHint: classification.timeWindowHint } : {}),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=decision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.js","sourceRoot":"","sources":["../src/decision.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n buildAssistantWorkflowClarificationPolicy,\n type AssistantWorkflowResolvedClarificationPolicy,\n type AssistantWorkflowClarificationPolicyInput,\n} from \"./clarification-policy.js\";\nimport {\n findAssistantWorkflowIntent,\n type AssistantWorkflowDefinition,\n type AssistantWorkflowExecutionBias,\n type AssistantWorkflowFirstHopToolPolicy,\n type AssistantWorkflowMemoryUse,\n} from \"./definition.js\";\nimport {\n buildAssistantWorkflowMemoryPolicy,\n type AssistantWorkflowResolvedMemoryPolicy,\n} from \"./memory-policy.js\";\nimport {\n buildAssistantWorkflowPlan,\n type AssistantWorkflowPlan,\n} from \"./planning.js\";\n\nexport type AssistantWorkflowDecisionInput = {\n intent?: string | null;\n subintent?: string | null;\n presentation?: string | null;\n toolsToExpose?: readonly string[] | null;\n confidence?: number | null;\n resolvedScope?: boolean;\n entities?: AssistantWorkflowClarificationPolicyInput[\"entities\"];\n timeWindowHint?: string | null;\n};\n\nexport type AssistantWorkflowDecision = {\n intent: string | null;\n matchedIntent: boolean;\n defaultPresentation: string | null;\n effectivePresentation: string | null;\n executionBias: AssistantWorkflowExecutionBias | null;\n firstHopToolPolicy: AssistantWorkflowFirstHopToolPolicy | null;\n memoryUse: AssistantWorkflowMemoryUse[];\n memoryPolicy: AssistantWorkflowResolvedMemoryPolicy;\n clarificationPolicy: AssistantWorkflowResolvedClarificationPolicy;\n plan: AssistantWorkflowPlan;\n requiredToolHints: string[];\n missingRequiredToolHints: string[];\n toolHints: string[];\n missingToolHints: string[];\n classifierTools: string[];\n workflowSuggestedTools: string[];\n extraClassifierTools: string[];\n};\n\nexport function buildAssistantWorkflowDecision(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n classification: AssistantWorkflowDecisionInput | null | undefined,\n availableToolNames: readonly string[] = [],\n): AssistantWorkflowDecision {\n const intent = typeof classification?.intent === \"string\" && classification.intent.trim().length\n ? classification.intent.trim().toLowerCase()\n : null;\n const intentDefinition = intent ? findAssistantWorkflowIntent(workflow, intent) : null;\n const availableSet = new Set(availableToolNames);\n const classifierTools = uniqueNonEmptyStrings(classification?.toolsToExpose ?? [])\n .filter((tool) => availableSet.size === 0 || availableSet.has(tool));\n const toolHintsRaw = uniqueNonEmptyStrings(intentDefinition?.toolHints ?? []);\n const requiredToolHintsRaw = uniqueNonEmptyStrings(intentDefinition?.requiredToolHints ?? []);\n const toolHints = toolHintsRaw.filter((tool) => availableSet.size === 0 || availableSet.has(tool));\n const requiredToolHints = requiredToolHintsRaw.filter((tool) => availableSet.size === 0 || availableSet.has(tool));\n const missingToolHints = availableSet.size === 0 ? [] : toolHintsRaw.filter((tool) => !availableSet.has(tool));\n const missingRequiredToolHints =\n availableSet.size === 0 ? [] : requiredToolHintsRaw.filter((tool) => !availableSet.has(tool));\n const workflowSuggestedTools = uniqueNonEmptyStrings([...classifierTools, ...requiredToolHints, ...toolHints]);\n const workflowHintSet = new Set([...requiredToolHints, ...toolHints]);\n const memoryPolicy = buildAssistantWorkflowMemoryPolicy(workflow, intent);\n const clarificationPolicy = buildAssistantWorkflowClarificationPolicy(\n workflow,\n intent,\n buildClarificationPolicyInput(classification),\n );\n const plan = buildAssistantWorkflowPlan(workflow, intent, availableToolNames, {\n ...(typeof classification?.subintent === \"string\" ? { subintent: classification.subintent } : {}),\n ...(typeof classification?.presentation === \"string\" ? { presentation: classification.presentation } : {}),\n ...(typeof classification?.timeWindowHint === \"string\" ? { timeWindowHint: classification.timeWindowHint } : {}),\n ...(Array.isArray(classification?.toolsToExpose) ? { toolsToExpose: classification.toolsToExpose } : {}),\n ...(typeof classification?.confidence === \"number\" ? { confidence: classification.confidence } : {}),\n });\n\n return {\n intent,\n matchedIntent: intentDefinition !== null,\n defaultPresentation: intentDefinition?.defaultPresentation ?? null,\n effectivePresentation:\n typeof classification?.presentation === \"string\" && classification.presentation.trim().length\n ? classification.presentation.trim().toLowerCase()\n : intentDefinition?.defaultPresentation ?? null,\n executionBias: intentDefinition?.executionBias ?? null,\n firstHopToolPolicy: intentDefinition ? intentDefinition.firstHopToolPolicy ?? \"auto\" : null,\n memoryUse: uniqueNonEmptyStrings(intentDefinition?.memoryUse ?? []) as AssistantWorkflowMemoryUse[],\n memoryPolicy,\n clarificationPolicy,\n plan,\n requiredToolHints,\n missingRequiredToolHints,\n toolHints,\n missingToolHints,\n classifierTools,\n workflowSuggestedTools,\n extraClassifierTools: classifierTools.filter((tool) => !workflowHintSet.has(tool)),\n };\n}\n\nexport function buildAssistantWorkflowDecisionTracePayload(\n decision: AssistantWorkflowDecision,\n): Record<string, unknown> {\n return {\n intent: decision.intent,\n matchedIntent: decision.matchedIntent,\n defaultPresentation: decision.defaultPresentation,\n effectivePresentation: decision.effectivePresentation,\n executionBias: decision.executionBias,\n firstHopToolPolicy: decision.firstHopToolPolicy,\n memoryUse: decision.memoryUse,\n memoryPolicy: decision.memoryPolicy,\n clarificationPolicy: decision.clarificationPolicy,\n plan: decision.plan,\n classifierTools: decision.classifierTools,\n requiredToolHints: decision.requiredToolHints,\n missingRequiredToolHints: decision.missingRequiredToolHints,\n toolHints: decision.toolHints,\n missingToolHints: decision.missingToolHints,\n workflowSuggestedTools: decision.workflowSuggestedTools,\n extraClassifierTools: decision.extraClassifierTools,\n };\n}\n\nexport function shouldRequireAssistantWorkflowFirstHopTool(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n intentId: unknown,\n): boolean {\n return findAssistantWorkflowIntent(workflow, intentId)?.firstHopToolPolicy === \"require-tool\";\n}\n\nfunction uniqueNonEmptyStrings(values: readonly unknown[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (!trimmed.length || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out;\n}\n\nfunction buildClarificationPolicyInput(\n classification: AssistantWorkflowDecisionInput | null | undefined,\n): AssistantWorkflowClarificationPolicyInput {\n if (!classification) return {};\n return {\n ...(typeof classification.confidence === \"number\" ? { confidence: classification.confidence } : {}),\n ...(classification.resolvedScope === true ? { resolvedScope: true } : {}),\n ...(classification.entities !== undefined ? { entities: classification.entities } : {}),\n ...(classification.timeWindowHint !== undefined ? { timeWindowHint: classification.timeWindowHint } : {}),\n };\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type AssistantWorkflowDefinitionCatalog } from "./definition-catalog.js";
|
|
2
|
+
import { type AssistantWorkflowSerializedDefinitionLinesParseResult } from "./definition-json.js";
|
|
3
|
+
import { type AssistantWorkflowDefinitionManifestLinesParseResult } from "./definition-manifest.js";
|
|
4
|
+
import type { AssistantWorkflowJsonValue } from "./run-report-json.js";
|
|
5
|
+
export type AssistantWorkflowDefinitionCatalogReplayLinesInput = {
|
|
6
|
+
definitionLines: string;
|
|
7
|
+
};
|
|
8
|
+
export type AssistantWorkflowDefinitionCatalogReplayLinesResult = {
|
|
9
|
+
definitionParse: AssistantWorkflowSerializedDefinitionLinesParseResult;
|
|
10
|
+
parseErrorCount: number;
|
|
11
|
+
catalog: AssistantWorkflowDefinitionCatalog;
|
|
12
|
+
};
|
|
13
|
+
export type AssistantWorkflowDefinitionManifestCatalogReplayLinesInput = {
|
|
14
|
+
manifestLines: string;
|
|
15
|
+
};
|
|
16
|
+
export type AssistantWorkflowDefinitionManifestCatalogReplayLinesResult = {
|
|
17
|
+
manifestParse: AssistantWorkflowDefinitionManifestLinesParseResult;
|
|
18
|
+
parseErrorCount: number;
|
|
19
|
+
catalog: AssistantWorkflowDefinitionCatalog;
|
|
20
|
+
};
|
|
21
|
+
export declare function runAssistantWorkflowDefinitionCatalogReplayLines(input: AssistantWorkflowDefinitionCatalogReplayLinesInput): AssistantWorkflowDefinitionCatalogReplayLinesResult;
|
|
22
|
+
export declare function runAssistantWorkflowDefinitionManifestCatalogReplayLines(input: AssistantWorkflowDefinitionManifestCatalogReplayLinesInput): AssistantWorkflowDefinitionManifestCatalogReplayLinesResult;
|
|
23
|
+
export declare function buildAssistantWorkflowDefinitionCatalogReplayLinesTracePayload(result: AssistantWorkflowDefinitionCatalogReplayLinesResult): Record<string, AssistantWorkflowJsonValue>;
|
|
24
|
+
export declare function buildAssistantWorkflowDefinitionManifestCatalogReplayLinesTracePayload(result: AssistantWorkflowDefinitionManifestCatalogReplayLinesResult): Record<string, AssistantWorkflowJsonValue>;
|
|
25
|
+
//# sourceMappingURL=definition-catalog-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-catalog-replay.d.ts","sourceRoot":"","sources":["../src/definition-catalog-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kCAAkC,EACxC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,qDAAqD,EAC3D,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,mDAAmD,EACzD,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,MAAM,kDAAkD,GAAG;IAC/D,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mDAAmD,GAAG;IAChE,eAAe,EAAE,qDAAqD,CAAC;IACvE,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,kCAAkC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,0DAA0D,GAAG;IACvE,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,2DAA2D,GAAG;IACxE,aAAa,EAAE,mDAAmD,CAAC;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,kCAAkC,CAAC;CAC7C,CAAC;AAEF,wBAAgB,gDAAgD,CAC9D,KAAK,EAAE,kDAAkD,GACxD,mDAAmD,CAQrD;AAED,wBAAgB,wDAAwD,CACtE,KAAK,EAAE,0DAA0D,GAChE,2DAA2D,CAU7D;AAED,wBAAgB,8DAA8D,CAC5E,MAAM,EAAE,mDAAmD,GAC1D,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAe5C;AAED,wBAAgB,sEAAsE,CACpF,MAAM,EAAE,2DAA2D,GAClE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAe5C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { buildAssistantWorkflowDefinitionCatalogTracePayload, buildAssistantWorkflowSerializedDefinitionCatalog, } from "./definition-catalog.js";
|
|
2
|
+
import { parseAssistantWorkflowSerializedDefinitionLines, } from "./definition-json.js";
|
|
3
|
+
import { parseAssistantWorkflowDefinitionManifestLines, } from "./definition-manifest.js";
|
|
4
|
+
export function runAssistantWorkflowDefinitionCatalogReplayLines(input) {
|
|
5
|
+
const definitionParse = parseAssistantWorkflowSerializedDefinitionLines(input.definitionLines);
|
|
6
|
+
const catalog = buildAssistantWorkflowSerializedDefinitionCatalog(definitionParse.definitions);
|
|
7
|
+
return {
|
|
8
|
+
definitionParse,
|
|
9
|
+
parseErrorCount: definitionParse.errorCount,
|
|
10
|
+
catalog,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function runAssistantWorkflowDefinitionManifestCatalogReplayLines(input) {
|
|
14
|
+
const manifestParse = parseAssistantWorkflowDefinitionManifestLines(input.manifestLines);
|
|
15
|
+
const catalog = buildAssistantWorkflowSerializedDefinitionCatalog(manifestParse.manifests.map((manifest) => manifest.serializedDefinition));
|
|
16
|
+
return {
|
|
17
|
+
manifestParse,
|
|
18
|
+
parseErrorCount: manifestParse.errorCount,
|
|
19
|
+
catalog,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function buildAssistantWorkflowDefinitionCatalogReplayLinesTracePayload(result) {
|
|
23
|
+
return {
|
|
24
|
+
definitionParse: {
|
|
25
|
+
lineCount: result.definitionParse.lineCount,
|
|
26
|
+
definitionCount: result.definitionParse.definitionCount,
|
|
27
|
+
errorCount: result.definitionParse.errorCount,
|
|
28
|
+
errors: result.definitionParse.errors.map((error) => ({
|
|
29
|
+
lineNumber: error.lineNumber,
|
|
30
|
+
reason: error.reason,
|
|
31
|
+
preview: error.preview,
|
|
32
|
+
})),
|
|
33
|
+
},
|
|
34
|
+
parseErrorCount: result.parseErrorCount,
|
|
35
|
+
catalog: buildAssistantWorkflowDefinitionCatalogTracePayload(result.catalog),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function buildAssistantWorkflowDefinitionManifestCatalogReplayLinesTracePayload(result) {
|
|
39
|
+
return {
|
|
40
|
+
manifestParse: {
|
|
41
|
+
lineCount: result.manifestParse.lineCount,
|
|
42
|
+
manifestCount: result.manifestParse.manifestCount,
|
|
43
|
+
errorCount: result.manifestParse.errorCount,
|
|
44
|
+
errors: result.manifestParse.errors.map((error) => ({
|
|
45
|
+
lineNumber: error.lineNumber,
|
|
46
|
+
reason: error.reason,
|
|
47
|
+
preview: error.preview,
|
|
48
|
+
})),
|
|
49
|
+
},
|
|
50
|
+
parseErrorCount: result.parseErrorCount,
|
|
51
|
+
catalog: buildAssistantWorkflowDefinitionCatalogTracePayload(result.catalog),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=definition-catalog-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-catalog-replay.js","sourceRoot":"","sources":["../src/definition-catalog-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mDAAmD,EACnD,iDAAiD,GAElD,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,+CAA+C,GAEhD,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,6CAA6C,GAE9C,MAAM,0BAA0B,CAAC;AAuBlC,MAAM,UAAU,gDAAgD,CAC9D,KAAyD;IAEzD,MAAM,eAAe,GAAG,+CAA+C,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,iDAAiD,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/F,OAAO;QACL,eAAe;QACf,eAAe,EAAE,eAAe,CAAC,UAAU;QAC3C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wDAAwD,CACtE,KAAiE;IAEjE,MAAM,aAAa,GAAG,6CAA6C,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,iDAAiD,CAC/D,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CACzE,CAAC;IACF,OAAO;QACL,aAAa;QACb,eAAe,EAAE,aAAa,CAAC,UAAU;QACzC,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8DAA8D,CAC5E,MAA2D;IAE3D,OAAO;QACL,eAAe,EAAE;YACf,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS;YAC3C,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,eAAe;YACvD,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU;YAC7C,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;SACJ;QACD,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,OAAO,EAAE,mDAAmD,CAAC,MAAM,CAAC,OAAO,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sEAAsE,CACpF,MAAmE;IAEnE,OAAO;QACL,aAAa,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,SAAS;YACzC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,aAAa;YACjD,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU;YAC3C,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;SACJ;QACD,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,OAAO,EAAE,mDAAmD,CAAC,MAAM,CAAC,OAAO,CAAC;KAC7E,CAAC;AACJ,CAAC","sourcesContent":["import {\n buildAssistantWorkflowDefinitionCatalogTracePayload,\n buildAssistantWorkflowSerializedDefinitionCatalog,\n type AssistantWorkflowDefinitionCatalog,\n} from \"./definition-catalog.js\";\nimport {\n parseAssistantWorkflowSerializedDefinitionLines,\n type AssistantWorkflowSerializedDefinitionLinesParseResult,\n} from \"./definition-json.js\";\nimport {\n parseAssistantWorkflowDefinitionManifestLines,\n type AssistantWorkflowDefinitionManifestLinesParseResult,\n} from \"./definition-manifest.js\";\nimport type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\n\nexport type AssistantWorkflowDefinitionCatalogReplayLinesInput = {\n definitionLines: string;\n};\n\nexport type AssistantWorkflowDefinitionCatalogReplayLinesResult = {\n definitionParse: AssistantWorkflowSerializedDefinitionLinesParseResult;\n parseErrorCount: number;\n catalog: AssistantWorkflowDefinitionCatalog;\n};\n\nexport type AssistantWorkflowDefinitionManifestCatalogReplayLinesInput = {\n manifestLines: string;\n};\n\nexport type AssistantWorkflowDefinitionManifestCatalogReplayLinesResult = {\n manifestParse: AssistantWorkflowDefinitionManifestLinesParseResult;\n parseErrorCount: number;\n catalog: AssistantWorkflowDefinitionCatalog;\n};\n\nexport function runAssistantWorkflowDefinitionCatalogReplayLines(\n input: AssistantWorkflowDefinitionCatalogReplayLinesInput,\n): AssistantWorkflowDefinitionCatalogReplayLinesResult {\n const definitionParse = parseAssistantWorkflowSerializedDefinitionLines(input.definitionLines);\n const catalog = buildAssistantWorkflowSerializedDefinitionCatalog(definitionParse.definitions);\n return {\n definitionParse,\n parseErrorCount: definitionParse.errorCount,\n catalog,\n };\n}\n\nexport function runAssistantWorkflowDefinitionManifestCatalogReplayLines(\n input: AssistantWorkflowDefinitionManifestCatalogReplayLinesInput,\n): AssistantWorkflowDefinitionManifestCatalogReplayLinesResult {\n const manifestParse = parseAssistantWorkflowDefinitionManifestLines(input.manifestLines);\n const catalog = buildAssistantWorkflowSerializedDefinitionCatalog(\n manifestParse.manifests.map((manifest) => manifest.serializedDefinition),\n );\n return {\n manifestParse,\n parseErrorCount: manifestParse.errorCount,\n catalog,\n };\n}\n\nexport function buildAssistantWorkflowDefinitionCatalogReplayLinesTracePayload(\n result: AssistantWorkflowDefinitionCatalogReplayLinesResult,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n definitionParse: {\n lineCount: result.definitionParse.lineCount,\n definitionCount: result.definitionParse.definitionCount,\n errorCount: result.definitionParse.errorCount,\n errors: result.definitionParse.errors.map((error) => ({\n lineNumber: error.lineNumber,\n reason: error.reason,\n preview: error.preview,\n })),\n },\n parseErrorCount: result.parseErrorCount,\n catalog: buildAssistantWorkflowDefinitionCatalogTracePayload(result.catalog),\n };\n}\n\nexport function buildAssistantWorkflowDefinitionManifestCatalogReplayLinesTracePayload(\n result: AssistantWorkflowDefinitionManifestCatalogReplayLinesResult,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n manifestParse: {\n lineCount: result.manifestParse.lineCount,\n manifestCount: result.manifestParse.manifestCount,\n errorCount: result.manifestParse.errorCount,\n errors: result.manifestParse.errors.map((error) => ({\n lineNumber: error.lineNumber,\n reason: error.reason,\n preview: error.preview,\n })),\n },\n parseErrorCount: result.parseErrorCount,\n catalog: buildAssistantWorkflowDefinitionCatalogTracePayload(result.catalog),\n };\n}\n"]}
|