@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-tuning-json.js","sourceRoot":"","sources":["../src/definition-tuning-json.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AssistantWorkflowDefinitionTuningAction,\n AssistantWorkflowDefinitionTuningPatchPreview,\n AssistantWorkflowDefinitionTuningSuggestion,\n} from \"./definition-tuning.js\";\nimport type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\n\nexport const ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION = 1;\n\nexport type AssistantWorkflowSerializedDefinitionTuningSuggestion =\n AssistantWorkflowDefinitionTuningSuggestion & {\n schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION;\n };\n\nexport type AssistantWorkflowSerializedDefinitionTuningSuggestionLineErrorReason =\n | \"invalid_json\"\n | \"invalid_definition_tuning_suggestion\";\n\nexport type AssistantWorkflowSerializedDefinitionTuningSuggestionLineError = {\n lineNumber: number;\n reason: AssistantWorkflowSerializedDefinitionTuningSuggestionLineErrorReason;\n preview: string;\n};\n\nexport type AssistantWorkflowSerializedDefinitionTuningSuggestionLinesParseResult = {\n lineCount: number;\n suggestionCount: number;\n errorCount: number;\n suggestions: AssistantWorkflowSerializedDefinitionTuningSuggestion[];\n errors: AssistantWorkflowSerializedDefinitionTuningSuggestionLineError[];\n};\n\nexport type AssistantWorkflowSerializedDefinitionTuningSuggestionLinesOptions = {\n trailingNewline?: boolean;\n};\n\nexport type AssistantWorkflowSerializedDefinitionTuningBatchOptions = {\n generatedAt?: string;\n onlyApplicable?: boolean;\n};\n\nexport type AssistantWorkflowSerializedDefinitionTuningBatchCount = {\n key: string;\n count: number;\n};\n\nexport type AssistantWorkflowSerializedDefinitionTuningBatchSummary = {\n generatedAt: string;\n sourceSuggestionCount: number;\n suggestionCount: number;\n applicableSuggestionCount: number;\n reviewOnlySuggestionCount: number;\n warningCount: number;\n actionCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];\n severityCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];\n patchKindCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];\n intentCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];\n toolCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];\n};\n\nexport type AssistantWorkflowSerializedDefinitionTuningBatch = {\n schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION;\n generatedAt: string;\n sourceSuggestionCount: number;\n suggestionCount: number;\n summary: AssistantWorkflowSerializedDefinitionTuningBatchSummary;\n suggestions: AssistantWorkflowSerializedDefinitionTuningSuggestion[];\n};\n\nconst ACTIONS = new Set<AssistantWorkflowDefinitionTuningAction>([\n \"add_intent_tool_hint\",\n \"add_direct_route_strategy\",\n \"register_tool_capability\",\n \"review_tool_selection_policy\",\n \"review_clarification_rule\",\n \"review_direct_route_strategy\",\n \"debug_runtime_error\",\n \"promote_eval_case\",\n \"review_quality_signal\",\n]);\n\nexport function serializeAssistantWorkflowDefinitionTuningSuggestion(\n suggestion: AssistantWorkflowDefinitionTuningSuggestion,\n): AssistantWorkflowSerializedDefinitionTuningSuggestion {\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,\n id: suggestion.id,\n action: suggestion.action,\n severity: suggestion.severity,\n intentId: suggestion.intentId,\n toolName: suggestion.toolName,\n signal: suggestion.signal,\n count: suggestion.count,\n requestIds: [...suggestion.requestIds],\n sourceSuggestionIds: [...suggestion.sourceSuggestionIds],\n rationale: suggestion.rationale,\n suggestedAction: suggestion.suggestedAction,\n patchPreview: clonePatchPreview(suggestion.patchPreview),\n };\n}\n\nexport function stringifyAssistantWorkflowDefinitionTuningSuggestionLines(\n suggestions: readonly AssistantWorkflowDefinitionTuningSuggestion[],\n options: AssistantWorkflowSerializedDefinitionTuningSuggestionLinesOptions = {},\n): string {\n return stringifyAssistantWorkflowSerializedDefinitionTuningSuggestionLines(\n suggestions.map(serializeAssistantWorkflowDefinitionTuningSuggestion),\n options,\n );\n}\n\nexport function stringifyAssistantWorkflowSerializedDefinitionTuningSuggestionLines(\n suggestions: readonly AssistantWorkflowSerializedDefinitionTuningSuggestion[],\n options: AssistantWorkflowSerializedDefinitionTuningSuggestionLinesOptions = {},\n): string {\n const lines = suggestions.map((suggestion) => JSON.stringify(suggestion));\n if (!lines.length) return \"\";\n return options.trailingNewline === true ? `${lines.join(\"\\n\")}\\n` : lines.join(\"\\n\");\n}\n\nexport function buildAssistantWorkflowSerializedDefinitionTuningBatch(\n allSuggestions: readonly AssistantWorkflowSerializedDefinitionTuningSuggestion[],\n options: AssistantWorkflowSerializedDefinitionTuningBatchOptions = {},\n): AssistantWorkflowSerializedDefinitionTuningBatch {\n const suggestions = options.onlyApplicable === true\n ? allSuggestions.filter(isApplicableSuggestion)\n : [...allSuggestions];\n const generatedAt = normalizeGeneratedAt(options.generatedAt) ?? new Date().toISOString();\n const summary = buildBatchSummary(allSuggestions, suggestions, generatedAt);\n\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,\n generatedAt,\n sourceSuggestionCount: allSuggestions.length,\n suggestionCount: suggestions.length,\n summary,\n suggestions,\n };\n}\n\nexport function parseAssistantWorkflowSerializedDefinitionTuningSuggestion(\n value: unknown,\n): AssistantWorkflowSerializedDefinitionTuningSuggestion | null {\n if (!isRecord(value)) return null;\n if (value[\"schemaVersion\"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION) return null;\n if (typeof value[\"id\"] !== \"string\" || !value[\"id\"].trim().length) return null;\n if (!isAction(value[\"action\"])) return null;\n if (value[\"severity\"] !== \"info\" && value[\"severity\"] !== \"warning\") return null;\n if (!isNullableString(value[\"intentId\"])) return null;\n if (!isNullableString(value[\"toolName\"])) return null;\n if (!isNullableString(value[\"signal\"])) return null;\n if (!isNonNegativeFiniteNumber(value[\"count\"])) return null;\n if (!isStringArray(value[\"requestIds\"])) return null;\n if (!isStringArray(value[\"sourceSuggestionIds\"])) return null;\n if (typeof value[\"rationale\"] !== \"string\") return null;\n if (typeof value[\"suggestedAction\"] !== \"string\") return null;\n const patchPreview = parsePatchPreview(value[\"patchPreview\"]);\n if (!patchPreview) return null;\n\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,\n id: value[\"id\"],\n action: value[\"action\"],\n severity: value[\"severity\"],\n intentId: value[\"intentId\"],\n toolName: value[\"toolName\"],\n signal: value[\"signal\"],\n count: value[\"count\"],\n requestIds: value[\"requestIds\"],\n sourceSuggestionIds: value[\"sourceSuggestionIds\"],\n rationale: value[\"rationale\"],\n suggestedAction: value[\"suggestedAction\"],\n patchPreview,\n };\n}\n\nexport function parseAssistantWorkflowSerializedDefinitionTuningSuggestionLines(\n input: string,\n): AssistantWorkflowSerializedDefinitionTuningSuggestionLinesParseResult {\n const suggestions: AssistantWorkflowSerializedDefinitionTuningSuggestion[] = [];\n const errors: AssistantWorkflowSerializedDefinitionTuningSuggestionLineError[] = [];\n let lineCount = 0;\n\n for (const [index, line] of input.split(/\\r?\\n/).entries()) {\n const trimmed = line.trim();\n if (!trimmed.length) continue;\n const lineNumber = index + 1;\n lineCount += 1;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n errors.push({ lineNumber, reason: \"invalid_json\", preview: previewLine(trimmed) });\n continue;\n }\n\n const suggestion = parseAssistantWorkflowSerializedDefinitionTuningSuggestion(parsed);\n if (!suggestion) {\n errors.push({\n lineNumber,\n reason: \"invalid_definition_tuning_suggestion\",\n preview: previewLine(trimmed),\n });\n continue;\n }\n suggestions.push(suggestion);\n }\n\n return {\n lineCount,\n suggestionCount: suggestions.length,\n errorCount: errors.length,\n suggestions,\n errors,\n };\n}\n\nexport function parseAssistantWorkflowSerializedDefinitionTuningBatch(\n value: unknown,\n): AssistantWorkflowSerializedDefinitionTuningBatch | null {\n if (!isRecord(value)) return null;\n if (value[\"schemaVersion\"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION) return null;\n if (typeof value[\"generatedAt\"] !== \"string\" || !value[\"generatedAt\"].trim().length) return null;\n if (!isNonNegativeFiniteNumber(value[\"sourceSuggestionCount\"])) return null;\n if (!isNonNegativeFiniteNumber(value[\"suggestionCount\"])) return null;\n if (!isBatchSummary(value[\"summary\"])) return null;\n if (!Array.isArray(value[\"suggestions\"])) return null;\n\n const suggestions = value[\"suggestions\"].map(parseAssistantWorkflowSerializedDefinitionTuningSuggestion);\n if (suggestions.some((suggestion) => suggestion === null)) return null;\n if (suggestions.length !== value[\"suggestionCount\"]) return null;\n\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,\n generatedAt: value[\"generatedAt\"],\n sourceSuggestionCount: value[\"sourceSuggestionCount\"],\n suggestionCount: value[\"suggestionCount\"],\n summary: value[\"summary\"],\n suggestions: suggestions.filter((suggestion): suggestion is AssistantWorkflowSerializedDefinitionTuningSuggestion =>\n suggestion !== null\n ),\n };\n}\n\nfunction buildBatchSummary(\n allSuggestions: readonly AssistantWorkflowSerializedDefinitionTuningSuggestion[],\n suggestions: readonly AssistantWorkflowSerializedDefinitionTuningSuggestion[],\n generatedAt: string,\n): AssistantWorkflowSerializedDefinitionTuningBatchSummary {\n return {\n generatedAt,\n sourceSuggestionCount: allSuggestions.length,\n suggestionCount: suggestions.length,\n applicableSuggestionCount: suggestions.filter(isApplicableSuggestion).length,\n reviewOnlySuggestionCount: suggestions.filter((suggestion) => suggestion.patchPreview.kind === \"none\").length,\n warningCount: suggestions.filter((suggestion) => suggestion.severity === \"warning\").length,\n actionCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.action)),\n severityCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.severity)),\n patchKindCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.patchPreview.kind)),\n intentCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.intentId ?? \"none\")),\n toolCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.toolName ?? \"none\")),\n };\n}\n\nfunction isApplicableSuggestion(suggestion: AssistantWorkflowSerializedDefinitionTuningSuggestion): boolean {\n return suggestion.patchPreview.kind !== \"none\";\n}\n\nfunction clonePatchPreview(\n patchPreview: AssistantWorkflowDefinitionTuningPatchPreview,\n): AssistantWorkflowDefinitionTuningPatchPreview {\n return { ...patchPreview };\n}\n\nfunction parsePatchPreview(value: unknown): AssistantWorkflowDefinitionTuningPatchPreview | null {\n if (!isRecord(value)) return null;\n if (value[\"kind\"] === \"none\") return { kind: \"none\" };\n if (value[\"kind\"] === \"register_tool_capability\" && typeof value[\"toolName\"] === \"string\") {\n return { kind: \"register_tool_capability\", toolName: value[\"toolName\"] };\n }\n if (\n value[\"kind\"] === \"append_intent_tool_hint\" &&\n typeof value[\"intentId\"] === \"string\" &&\n typeof value[\"toolName\"] === \"string\"\n ) {\n return {\n kind: \"append_intent_tool_hint\",\n intentId: value[\"intentId\"],\n toolName: value[\"toolName\"],\n };\n }\n if (\n value[\"kind\"] === \"append_direct_route_strategy\" &&\n typeof value[\"routeId\"] === \"string\" &&\n typeof value[\"strategyId\"] === \"string\" &&\n typeof value[\"description\"] === \"string\"\n ) {\n return {\n kind: \"append_direct_route_strategy\",\n routeId: value[\"routeId\"],\n strategyId: value[\"strategyId\"],\n description: value[\"description\"],\n };\n }\n return null;\n}\n\nfunction buildStringCounts(values: readonly string[]): AssistantWorkflowSerializedDefinitionTuningBatchCount[] {\n const counts = new Map<string, number>();\n for (const value of values) {\n if (!value.length) continue;\n counts.set(value, (counts.get(value) ?? 0) + 1);\n }\n return [...counts.entries()]\n .map(([key, count]) => ({ key, count }))\n .sort((left, right) => {\n if (right.count !== left.count) return right.count - left.count;\n return left.key.localeCompare(right.key);\n });\n}\n\nfunction isBatchSummary(value: unknown): value is AssistantWorkflowSerializedDefinitionTuningBatchSummary {\n if (!isRecord(value)) return false;\n return (\n typeof value[\"generatedAt\"] === \"string\" &&\n isNonNegativeFiniteNumber(value[\"sourceSuggestionCount\"]) &&\n isNonNegativeFiniteNumber(value[\"suggestionCount\"]) &&\n isNonNegativeFiniteNumber(value[\"applicableSuggestionCount\"]) &&\n isNonNegativeFiniteNumber(value[\"reviewOnlySuggestionCount\"]) &&\n isNonNegativeFiniteNumber(value[\"warningCount\"]) &&\n isCountArray(value[\"actionCounts\"]) &&\n isCountArray(value[\"severityCounts\"]) &&\n isCountArray(value[\"patchKindCounts\"]) &&\n isCountArray(value[\"intentCounts\"]) &&\n isCountArray(value[\"toolCounts\"])\n );\n}\n\nfunction isCountArray(value: unknown): value is AssistantWorkflowSerializedDefinitionTuningBatchCount[] {\n return Array.isArray(value) && value.every((item) =>\n isRecord(item) &&\n typeof item[\"key\"] === \"string\" &&\n isNonNegativeFiniteNumber(item[\"count\"])\n );\n}\n\nfunction isAction(value: unknown): value is AssistantWorkflowDefinitionTuningAction {\n return typeof value === \"string\" && ACTIONS.has(value as AssistantWorkflowDefinitionTuningAction);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isNullableString(value: unknown): value is string | null {\n return value === null || typeof value === \"string\";\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction normalizeGeneratedAt(value: string | undefined): string | null {\n if (value === undefined) return null;\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n}\n\nfunction previewLine(line: string): string {\n return line.length <= 120 ? line : `${line.slice(0, 117)}...`;\n}\n"]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { AssistantWorkflowDefinitionTuningReviewArtifact, AssistantWorkflowDefinitionTuningReviewArtifactSuggestionSummary } from "./definition-tuning-review-artifact.js";
|
|
2
|
+
import type { AssistantWorkflowJsonValue } from "./run-report-json.js";
|
|
3
|
+
export type AssistantWorkflowDefinitionTuningPromotionStatus = "promotable" | "needs_review" | "blocked";
|
|
4
|
+
export type AssistantWorkflowDefinitionTuningPromotionReasonSeverity = "warning" | "blocked";
|
|
5
|
+
export type AssistantWorkflowDefinitionTuningPromotionReasonCode = "workflow_id_mismatch" | "workflow_version_mismatch" | "patched_definition_invalid" | "missing_review_status" | "review_blocked" | "review_warning" | "no_change" | "missing_smoke" | "smoke_required_failures" | "smoke_failures" | "missing_applied_suggestion_details" | "unapproved_suggestions" | "deferred_review_signals";
|
|
6
|
+
export type AssistantWorkflowDefinitionTuningPromotionReason = {
|
|
7
|
+
severity: AssistantWorkflowDefinitionTuningPromotionReasonSeverity;
|
|
8
|
+
code: AssistantWorkflowDefinitionTuningPromotionReasonCode;
|
|
9
|
+
message: string;
|
|
10
|
+
details: Record<string, AssistantWorkflowJsonValue>;
|
|
11
|
+
};
|
|
12
|
+
export type AssistantWorkflowDefinitionTuningPromotionOptions = {
|
|
13
|
+
expectedWorkflowId?: string;
|
|
14
|
+
expectedFromVersion?: number;
|
|
15
|
+
expectedToVersion?: number;
|
|
16
|
+
allowReviewWarnings?: boolean;
|
|
17
|
+
requireSmoke?: boolean;
|
|
18
|
+
requireApprovedSuggestions?: boolean;
|
|
19
|
+
approvedSuggestionIds?: readonly string[];
|
|
20
|
+
};
|
|
21
|
+
export type AssistantWorkflowDefinitionTuningPromotionSummary = {
|
|
22
|
+
workflowId: string;
|
|
23
|
+
workflowVersion: number;
|
|
24
|
+
reviewStatus: string | null;
|
|
25
|
+
changed: boolean | null;
|
|
26
|
+
fromVersion: number | null;
|
|
27
|
+
toVersion: number | null;
|
|
28
|
+
appliedCount: number | null;
|
|
29
|
+
changedIntentCount: number | null;
|
|
30
|
+
smokeCaseCount: number | null;
|
|
31
|
+
smokeFailCount: number | null;
|
|
32
|
+
smokeRequiredFailCount: number | null;
|
|
33
|
+
patchedDefinitionValid: boolean;
|
|
34
|
+
appliedSuggestionIds: string[];
|
|
35
|
+
appliedSuggestionCount: number;
|
|
36
|
+
};
|
|
37
|
+
type NormalizedPromotionOptions = {
|
|
38
|
+
expectedWorkflowId: string;
|
|
39
|
+
expectedFromVersion: number;
|
|
40
|
+
expectedToVersion: number;
|
|
41
|
+
allowReviewWarnings: boolean;
|
|
42
|
+
requireSmoke: boolean;
|
|
43
|
+
requireApprovedSuggestions: boolean;
|
|
44
|
+
approvedSuggestionIds: string[];
|
|
45
|
+
};
|
|
46
|
+
export type AssistantWorkflowDefinitionTuningPromotion = {
|
|
47
|
+
status: AssistantWorkflowDefinitionTuningPromotionStatus;
|
|
48
|
+
summary: AssistantWorkflowDefinitionTuningPromotionSummary;
|
|
49
|
+
options: NormalizedPromotionOptions;
|
|
50
|
+
reasons: AssistantWorkflowDefinitionTuningPromotionReason[];
|
|
51
|
+
};
|
|
52
|
+
export type AssistantWorkflowDefinitionTuningPromotionBriefSuggestion = {
|
|
53
|
+
id: string;
|
|
54
|
+
action: string;
|
|
55
|
+
intentId: string | null;
|
|
56
|
+
toolName: string | null;
|
|
57
|
+
count: number;
|
|
58
|
+
requestIds: string[];
|
|
59
|
+
rationale: string;
|
|
60
|
+
suggestedAction: string;
|
|
61
|
+
approved: boolean | null;
|
|
62
|
+
};
|
|
63
|
+
export type AssistantWorkflowDefinitionTuningPromotionBriefIntentChange = {
|
|
64
|
+
intentId: string;
|
|
65
|
+
addedToolHints: string[];
|
|
66
|
+
addedPlanningSteps: string[];
|
|
67
|
+
addedToolSelectionProfileIds: string[];
|
|
68
|
+
addedPlanningStepProfileIds: string[];
|
|
69
|
+
appliedSuggestions: AssistantWorkflowDefinitionTuningPromotionBriefSuggestion[];
|
|
70
|
+
};
|
|
71
|
+
export type AssistantWorkflowDefinitionTuningPromotionBriefDirectRouteChange = {
|
|
72
|
+
routeId: string;
|
|
73
|
+
addedStrategyIds: string[];
|
|
74
|
+
appliedSuggestions: AssistantWorkflowDefinitionTuningPromotionBriefSuggestion[];
|
|
75
|
+
};
|
|
76
|
+
export type AssistantWorkflowDefinitionTuningPromotionBriefDeferredSuggestion = {
|
|
77
|
+
id: string;
|
|
78
|
+
action: string;
|
|
79
|
+
intentId: string | null;
|
|
80
|
+
toolName: string | null;
|
|
81
|
+
signal: string | null;
|
|
82
|
+
count: number;
|
|
83
|
+
requestIds: string[];
|
|
84
|
+
rationale: string;
|
|
85
|
+
suggestedAction: string;
|
|
86
|
+
};
|
|
87
|
+
export type AssistantWorkflowDefinitionTuningPromotionBriefSkippedSuggestion = {
|
|
88
|
+
id: string;
|
|
89
|
+
reason: string;
|
|
90
|
+
suggestion: AssistantWorkflowDefinitionTuningPromotionBriefDeferredSuggestion | null;
|
|
91
|
+
};
|
|
92
|
+
export type AssistantWorkflowDefinitionTuningPromotionBrief = {
|
|
93
|
+
workflowId: string;
|
|
94
|
+
fromVersion: number | null;
|
|
95
|
+
toVersion: number | null;
|
|
96
|
+
status: AssistantWorkflowDefinitionTuningPromotionStatus;
|
|
97
|
+
changedIntentCount: number;
|
|
98
|
+
changedDirectRouteCount: number;
|
|
99
|
+
addedToolHintCount: number;
|
|
100
|
+
addedDirectRouteStrategyCount: number;
|
|
101
|
+
appliedSuggestionCount: number;
|
|
102
|
+
changes: AssistantWorkflowDefinitionTuningPromotionBriefIntentChange[];
|
|
103
|
+
directRouteChanges: AssistantWorkflowDefinitionTuningPromotionBriefDirectRouteChange[];
|
|
104
|
+
suggestionSummary: AssistantWorkflowDefinitionTuningReviewArtifactSuggestionSummary;
|
|
105
|
+
skippedSuggestions: AssistantWorkflowDefinitionTuningPromotionBriefSkippedSuggestion[];
|
|
106
|
+
reviewOnlySuggestions: AssistantWorkflowDefinitionTuningPromotionBriefDeferredSuggestion[];
|
|
107
|
+
reviewReasons: {
|
|
108
|
+
severity: string;
|
|
109
|
+
code: string;
|
|
110
|
+
message: string;
|
|
111
|
+
details: Record<string, AssistantWorkflowJsonValue>;
|
|
112
|
+
}[];
|
|
113
|
+
reasons: AssistantWorkflowDefinitionTuningPromotionReason[];
|
|
114
|
+
};
|
|
115
|
+
export declare function buildAssistantWorkflowDefinitionTuningPromotion(artifact: AssistantWorkflowDefinitionTuningReviewArtifact, options?: AssistantWorkflowDefinitionTuningPromotionOptions): AssistantWorkflowDefinitionTuningPromotion;
|
|
116
|
+
export declare function buildAssistantWorkflowDefinitionTuningPromotionBrief(artifact: AssistantWorkflowDefinitionTuningReviewArtifact, promotion?: AssistantWorkflowDefinitionTuningPromotion): AssistantWorkflowDefinitionTuningPromotionBrief;
|
|
117
|
+
export declare function buildAssistantWorkflowDefinitionTuningPromotionBriefTracePayload(brief: AssistantWorkflowDefinitionTuningPromotionBrief): Record<string, AssistantWorkflowJsonValue>;
|
|
118
|
+
export declare function buildAssistantWorkflowDefinitionTuningPromotionTracePayload(promotion: AssistantWorkflowDefinitionTuningPromotion): Record<string, AssistantWorkflowJsonValue>;
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=definition-tuning-promotion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-tuning-promotion.d.ts","sourceRoot":"","sources":["../src/definition-tuning-promotion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import { readAssistantWorkflowBoolean as readBoolean, readAssistantWorkflowNumber as readNumber, readAssistantWorkflowRecord as readRecord, readAssistantWorkflowString, readAssistantWorkflowStringArray, } from "./value-readers.js";
|
|
2
|
+
export function buildAssistantWorkflowDefinitionTuningPromotion(artifact, options = {}) {
|
|
3
|
+
const normalizedOptions = normalizePromotionOptions(artifact, options);
|
|
4
|
+
const summary = buildPromotionSummary(artifact);
|
|
5
|
+
const reasons = buildPromotionReasons(artifact, summary, normalizedOptions);
|
|
6
|
+
const status = reasons.some((reason) => reason.severity === "blocked")
|
|
7
|
+
? "blocked"
|
|
8
|
+
: reasons.some((reason) => reason.severity === "warning")
|
|
9
|
+
? "needs_review"
|
|
10
|
+
: "promotable";
|
|
11
|
+
return {
|
|
12
|
+
status,
|
|
13
|
+
summary,
|
|
14
|
+
options: normalizedOptions,
|
|
15
|
+
reasons,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function buildAssistantWorkflowDefinitionTuningPromotionBrief(artifact, promotion = buildAssistantWorkflowDefinitionTuningPromotion(artifact)) {
|
|
19
|
+
const intentDiffs = readIntentDiffs(artifact);
|
|
20
|
+
const directRouteDiffs = readDirectRouteDiffs(artifact);
|
|
21
|
+
const approvedIds = promotion.options.requireApprovedSuggestions
|
|
22
|
+
? new Set(promotion.options.approvedSuggestionIds)
|
|
23
|
+
: null;
|
|
24
|
+
const appliedSuggestions = artifact.suggestions.applied.map((suggestion) => ({
|
|
25
|
+
id: suggestion.id,
|
|
26
|
+
action: suggestion.action,
|
|
27
|
+
intentId: suggestion.intentId,
|
|
28
|
+
toolName: suggestion.toolName,
|
|
29
|
+
count: suggestion.count,
|
|
30
|
+
requestIds: [...suggestion.requestIds],
|
|
31
|
+
rationale: suggestion.rationale,
|
|
32
|
+
suggestedAction: suggestion.suggestedAction,
|
|
33
|
+
approved: approvedIds ? approvedIds.has(suggestion.id) : null,
|
|
34
|
+
}));
|
|
35
|
+
const suggestionsByIntent = new Map();
|
|
36
|
+
const suggestionsByDirectRoute = new Map();
|
|
37
|
+
for (const suggestion of appliedSuggestions) {
|
|
38
|
+
if (suggestion.action === "add_direct_route_strategy" && suggestion.intentId) {
|
|
39
|
+
const suggestions = suggestionsByDirectRoute.get(suggestion.intentId) ?? [];
|
|
40
|
+
suggestions.push(suggestion);
|
|
41
|
+
suggestionsByDirectRoute.set(suggestion.intentId, suggestions);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (suggestion.intentId) {
|
|
45
|
+
const suggestions = suggestionsByIntent.get(suggestion.intentId) ?? [];
|
|
46
|
+
suggestions.push(suggestion);
|
|
47
|
+
suggestionsByIntent.set(suggestion.intentId, suggestions);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const changes = intentDiffs.map((intentDiff) => ({
|
|
51
|
+
intentId: intentDiff.intentId,
|
|
52
|
+
addedToolHints: intentDiff.addedToolHints,
|
|
53
|
+
addedPlanningSteps: intentDiff.addedPlanningSteps,
|
|
54
|
+
addedToolSelectionProfileIds: intentDiff.addedToolSelectionProfileIds,
|
|
55
|
+
addedPlanningStepProfileIds: intentDiff.addedPlanningStepProfileIds,
|
|
56
|
+
appliedSuggestions: suggestionsByIntent.get(intentDiff.intentId) ?? [],
|
|
57
|
+
}));
|
|
58
|
+
const directRouteChanges = directRouteDiffs.map((routeDiff) => ({
|
|
59
|
+
routeId: routeDiff.routeId,
|
|
60
|
+
addedStrategyIds: routeDiff.addedStrategyIds,
|
|
61
|
+
appliedSuggestions: suggestionsByDirectRoute.get(routeDiff.routeId) ?? [],
|
|
62
|
+
}));
|
|
63
|
+
return {
|
|
64
|
+
workflowId: artifact.workflowId,
|
|
65
|
+
fromVersion: promotion.summary.fromVersion,
|
|
66
|
+
toVersion: promotion.summary.toVersion,
|
|
67
|
+
status: promotion.status,
|
|
68
|
+
changedIntentCount: changes.length,
|
|
69
|
+
changedDirectRouteCount: directRouteChanges.length,
|
|
70
|
+
addedToolHintCount: changes.reduce((total, change) => total + change.addedToolHints.length, 0),
|
|
71
|
+
addedDirectRouteStrategyCount: directRouteChanges.reduce((total, change) => total + change.addedStrategyIds.length, 0),
|
|
72
|
+
appliedSuggestionCount: appliedSuggestions.length,
|
|
73
|
+
changes,
|
|
74
|
+
directRouteChanges,
|
|
75
|
+
suggestionSummary: cloneSuggestionSummary(artifact.suggestions.summary),
|
|
76
|
+
skippedSuggestions: artifact.suggestions.skipped.map((skipped) => ({
|
|
77
|
+
id: skipped.id,
|
|
78
|
+
reason: skipped.reason,
|
|
79
|
+
suggestion: skipped.suggestion ? toBriefDeferredSuggestion(skipped.suggestion) : null,
|
|
80
|
+
})),
|
|
81
|
+
reviewOnlySuggestions: artifact.suggestions.reviewOnly.map(toBriefDeferredSuggestion),
|
|
82
|
+
reviewReasons: readReviewReasons(artifact),
|
|
83
|
+
reasons: promotion.reasons,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function buildAssistantWorkflowDefinitionTuningPromotionBriefTracePayload(brief) {
|
|
87
|
+
return {
|
|
88
|
+
workflowId: brief.workflowId,
|
|
89
|
+
fromVersion: brief.fromVersion,
|
|
90
|
+
toVersion: brief.toVersion,
|
|
91
|
+
status: brief.status,
|
|
92
|
+
changedIntentCount: brief.changedIntentCount,
|
|
93
|
+
changedDirectRouteCount: brief.changedDirectRouteCount,
|
|
94
|
+
addedToolHintCount: brief.addedToolHintCount,
|
|
95
|
+
addedDirectRouteStrategyCount: brief.addedDirectRouteStrategyCount,
|
|
96
|
+
appliedSuggestionCount: brief.appliedSuggestionCount,
|
|
97
|
+
changes: brief.changes.map((change) => ({
|
|
98
|
+
intentId: change.intentId,
|
|
99
|
+
addedToolHints: change.addedToolHints,
|
|
100
|
+
addedPlanningSteps: change.addedPlanningSteps,
|
|
101
|
+
addedToolSelectionProfileIds: change.addedToolSelectionProfileIds,
|
|
102
|
+
addedPlanningStepProfileIds: change.addedPlanningStepProfileIds,
|
|
103
|
+
appliedSuggestions: change.appliedSuggestions.map((suggestion) => ({
|
|
104
|
+
id: suggestion.id,
|
|
105
|
+
action: suggestion.action,
|
|
106
|
+
intentId: suggestion.intentId,
|
|
107
|
+
toolName: suggestion.toolName,
|
|
108
|
+
count: suggestion.count,
|
|
109
|
+
requestIds: suggestion.requestIds,
|
|
110
|
+
rationale: suggestion.rationale,
|
|
111
|
+
suggestedAction: suggestion.suggestedAction,
|
|
112
|
+
approved: suggestion.approved,
|
|
113
|
+
})),
|
|
114
|
+
})),
|
|
115
|
+
directRouteChanges: brief.directRouteChanges.map((change) => ({
|
|
116
|
+
routeId: change.routeId,
|
|
117
|
+
addedStrategyIds: change.addedStrategyIds,
|
|
118
|
+
appliedSuggestions: change.appliedSuggestions.map((suggestion) => ({
|
|
119
|
+
id: suggestion.id,
|
|
120
|
+
action: suggestion.action,
|
|
121
|
+
intentId: suggestion.intentId,
|
|
122
|
+
toolName: suggestion.toolName,
|
|
123
|
+
count: suggestion.count,
|
|
124
|
+
requestIds: suggestion.requestIds,
|
|
125
|
+
rationale: suggestion.rationale,
|
|
126
|
+
suggestedAction: suggestion.suggestedAction,
|
|
127
|
+
approved: suggestion.approved,
|
|
128
|
+
})),
|
|
129
|
+
})),
|
|
130
|
+
suggestionSummary: {
|
|
131
|
+
appliedCount: brief.suggestionSummary.appliedCount,
|
|
132
|
+
skippedCount: brief.suggestionSummary.skippedCount,
|
|
133
|
+
reviewOnlyCount: brief.suggestionSummary.reviewOnlyCount,
|
|
134
|
+
skipReasonCounts: brief.suggestionSummary.skipReasonCounts.map((count) => ({
|
|
135
|
+
key: count.key,
|
|
136
|
+
count: count.count,
|
|
137
|
+
})),
|
|
138
|
+
reviewOnlyActionCounts: brief.suggestionSummary.reviewOnlyActionCounts.map((count) => ({
|
|
139
|
+
key: count.key,
|
|
140
|
+
count: count.count,
|
|
141
|
+
})),
|
|
142
|
+
reviewOnlySignalCounts: brief.suggestionSummary.reviewOnlySignalCounts.map((count) => ({
|
|
143
|
+
key: count.key,
|
|
144
|
+
count: count.count,
|
|
145
|
+
})),
|
|
146
|
+
},
|
|
147
|
+
skippedSuggestions: brief.skippedSuggestions.map((skipped) => ({
|
|
148
|
+
id: skipped.id,
|
|
149
|
+
reason: skipped.reason,
|
|
150
|
+
suggestion: skipped.suggestion ? serializeBriefDeferredSuggestion(skipped.suggestion) : null,
|
|
151
|
+
})),
|
|
152
|
+
reviewOnlySuggestions: brief.reviewOnlySuggestions.map(serializeBriefDeferredSuggestion),
|
|
153
|
+
reviewReasons: brief.reviewReasons.map((reason) => ({
|
|
154
|
+
severity: reason.severity,
|
|
155
|
+
code: reason.code,
|
|
156
|
+
message: reason.message,
|
|
157
|
+
details: reason.details,
|
|
158
|
+
})),
|
|
159
|
+
reasons: brief.reasons.map((reason) => ({
|
|
160
|
+
severity: reason.severity,
|
|
161
|
+
code: reason.code,
|
|
162
|
+
message: reason.message,
|
|
163
|
+
details: reason.details,
|
|
164
|
+
})),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function toBriefDeferredSuggestion(suggestion) {
|
|
168
|
+
return {
|
|
169
|
+
id: suggestion.id,
|
|
170
|
+
action: suggestion.action,
|
|
171
|
+
intentId: suggestion.intentId,
|
|
172
|
+
toolName: suggestion.toolName,
|
|
173
|
+
signal: suggestion.signal,
|
|
174
|
+
count: suggestion.count,
|
|
175
|
+
requestIds: [...suggestion.requestIds],
|
|
176
|
+
rationale: suggestion.rationale,
|
|
177
|
+
suggestedAction: suggestion.suggestedAction,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function serializeBriefDeferredSuggestion(suggestion) {
|
|
181
|
+
return {
|
|
182
|
+
id: suggestion.id,
|
|
183
|
+
action: suggestion.action,
|
|
184
|
+
intentId: suggestion.intentId,
|
|
185
|
+
toolName: suggestion.toolName,
|
|
186
|
+
signal: suggestion.signal,
|
|
187
|
+
count: suggestion.count,
|
|
188
|
+
requestIds: suggestion.requestIds,
|
|
189
|
+
rationale: suggestion.rationale,
|
|
190
|
+
suggestedAction: suggestion.suggestedAction,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function cloneSuggestionSummary(summary) {
|
|
194
|
+
return {
|
|
195
|
+
appliedCount: summary.appliedCount,
|
|
196
|
+
skippedCount: summary.skippedCount,
|
|
197
|
+
reviewOnlyCount: summary.reviewOnlyCount,
|
|
198
|
+
skipReasonCounts: summary.skipReasonCounts.map((count) => ({ ...count })),
|
|
199
|
+
reviewOnlyActionCounts: summary.reviewOnlyActionCounts.map((count) => ({ ...count })),
|
|
200
|
+
reviewOnlySignalCounts: summary.reviewOnlySignalCounts.map((count) => ({ ...count })),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function readReviewReasons(artifact) {
|
|
204
|
+
const rawReasons = artifact.review["reasons"];
|
|
205
|
+
if (!Array.isArray(rawReasons))
|
|
206
|
+
return [];
|
|
207
|
+
return rawReasons.flatMap((value) => {
|
|
208
|
+
const rawReason = readRecord(value);
|
|
209
|
+
if (!rawReason)
|
|
210
|
+
return [];
|
|
211
|
+
const severity = readString(rawReason["severity"]);
|
|
212
|
+
const code = readString(rawReason["code"]);
|
|
213
|
+
const message = readString(rawReason["message"]);
|
|
214
|
+
const details = readRecord(rawReason["details"]) ?? {};
|
|
215
|
+
if (!severity || !code || !message)
|
|
216
|
+
return [];
|
|
217
|
+
return [{ severity, code, message, details }];
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
export function buildAssistantWorkflowDefinitionTuningPromotionTracePayload(promotion) {
|
|
221
|
+
return {
|
|
222
|
+
status: promotion.status,
|
|
223
|
+
summary: {
|
|
224
|
+
workflowId: promotion.summary.workflowId,
|
|
225
|
+
workflowVersion: promotion.summary.workflowVersion,
|
|
226
|
+
reviewStatus: promotion.summary.reviewStatus,
|
|
227
|
+
changed: promotion.summary.changed,
|
|
228
|
+
fromVersion: promotion.summary.fromVersion,
|
|
229
|
+
toVersion: promotion.summary.toVersion,
|
|
230
|
+
appliedCount: promotion.summary.appliedCount,
|
|
231
|
+
changedIntentCount: promotion.summary.changedIntentCount,
|
|
232
|
+
smokeCaseCount: promotion.summary.smokeCaseCount,
|
|
233
|
+
smokeFailCount: promotion.summary.smokeFailCount,
|
|
234
|
+
smokeRequiredFailCount: promotion.summary.smokeRequiredFailCount,
|
|
235
|
+
patchedDefinitionValid: promotion.summary.patchedDefinitionValid,
|
|
236
|
+
appliedSuggestionIds: promotion.summary.appliedSuggestionIds,
|
|
237
|
+
appliedSuggestionCount: promotion.summary.appliedSuggestionCount,
|
|
238
|
+
},
|
|
239
|
+
options: {
|
|
240
|
+
expectedWorkflowId: promotion.options.expectedWorkflowId,
|
|
241
|
+
expectedFromVersion: promotion.options.expectedFromVersion,
|
|
242
|
+
expectedToVersion: promotion.options.expectedToVersion,
|
|
243
|
+
allowReviewWarnings: promotion.options.allowReviewWarnings,
|
|
244
|
+
requireSmoke: promotion.options.requireSmoke,
|
|
245
|
+
requireApprovedSuggestions: promotion.options.requireApprovedSuggestions,
|
|
246
|
+
approvedSuggestionIds: promotion.options.approvedSuggestionIds,
|
|
247
|
+
},
|
|
248
|
+
reasons: promotion.reasons.map((reason) => ({
|
|
249
|
+
severity: reason.severity,
|
|
250
|
+
code: reason.code,
|
|
251
|
+
message: reason.message,
|
|
252
|
+
details: reason.details,
|
|
253
|
+
})),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function readIntentDiffs(artifact) {
|
|
257
|
+
const diff = readRecord(artifact.apply["diff"]);
|
|
258
|
+
const intentDiffs = diff?.["intentDiffs"];
|
|
259
|
+
if (!Array.isArray(intentDiffs))
|
|
260
|
+
return [];
|
|
261
|
+
return intentDiffs.flatMap((value) => {
|
|
262
|
+
const intentDiff = readRecord(value);
|
|
263
|
+
if (!intentDiff)
|
|
264
|
+
return [];
|
|
265
|
+
const intentId = readString(intentDiff["intentId"]);
|
|
266
|
+
const addedToolHints = readStringArray(intentDiff["addedToolHints"]);
|
|
267
|
+
const addedPlanningSteps = readStringArray(intentDiff["addedPlanningSteps"]);
|
|
268
|
+
const addedToolSelectionProfileIds = readStringArray(intentDiff["addedToolSelectionProfileIds"]);
|
|
269
|
+
const addedPlanningStepProfileIds = readStringArray(intentDiff["addedPlanningStepProfileIds"]);
|
|
270
|
+
if (!intentId ||
|
|
271
|
+
(addedToolHints.length === 0 &&
|
|
272
|
+
addedPlanningSteps.length === 0 &&
|
|
273
|
+
addedToolSelectionProfileIds.length === 0 &&
|
|
274
|
+
addedPlanningStepProfileIds.length === 0)) {
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
return [{
|
|
278
|
+
intentId,
|
|
279
|
+
addedToolHints,
|
|
280
|
+
addedPlanningSteps,
|
|
281
|
+
addedToolSelectionProfileIds,
|
|
282
|
+
addedPlanningStepProfileIds,
|
|
283
|
+
}];
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
function readDirectRouteDiffs(artifact) {
|
|
287
|
+
const diff = readRecord(artifact.apply["diff"]);
|
|
288
|
+
const directRouteDiffs = diff?.["directRouteDiffs"];
|
|
289
|
+
if (!Array.isArray(directRouteDiffs))
|
|
290
|
+
return [];
|
|
291
|
+
return directRouteDiffs.flatMap((value) => {
|
|
292
|
+
const routeDiff = readRecord(value);
|
|
293
|
+
if (!routeDiff)
|
|
294
|
+
return [];
|
|
295
|
+
const routeId = readString(routeDiff["routeId"]);
|
|
296
|
+
const addedStrategyIds = readStringArray(routeDiff["addedStrategyIds"]);
|
|
297
|
+
if (!routeId || addedStrategyIds.length === 0)
|
|
298
|
+
return [];
|
|
299
|
+
return [{
|
|
300
|
+
routeId,
|
|
301
|
+
addedStrategyIds,
|
|
302
|
+
}];
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
function buildPromotionSummary(artifact) {
|
|
306
|
+
const reviewSummary = readRecord(artifact.review["summary"]);
|
|
307
|
+
const smoke = readRecord(artifact.smoke);
|
|
308
|
+
const smokeSummary = smoke ? readRecord(smoke["summary"]) : null;
|
|
309
|
+
const applyDiff = readRecord(artifact.apply["diff"]);
|
|
310
|
+
return {
|
|
311
|
+
workflowId: artifact.workflowId,
|
|
312
|
+
workflowVersion: artifact.workflowVersion,
|
|
313
|
+
reviewStatus: readString(artifact.review["status"]),
|
|
314
|
+
changed: readBoolean(artifact.apply["changed"]),
|
|
315
|
+
fromVersion: applyDiff ? readNumber(applyDiff["fromVersion"]) : null,
|
|
316
|
+
toVersion: applyDiff ? readNumber(applyDiff["toVersion"]) : null,
|
|
317
|
+
appliedCount: readNumber(artifact.apply["appliedCount"]),
|
|
318
|
+
changedIntentCount: reviewSummary ? readNumber(reviewSummary["changedIntentCount"]) : null,
|
|
319
|
+
smokeCaseCount: smokeSummary ? readNumber(smokeSummary["caseCount"]) : null,
|
|
320
|
+
smokeFailCount: smokeSummary ? readNumber(smokeSummary["failCount"]) : null,
|
|
321
|
+
smokeRequiredFailCount: smokeSummary ? readNumber(smokeSummary["requiredFailCount"]) : null,
|
|
322
|
+
patchedDefinitionValid: artifact.patchedDefinition.summary.valid,
|
|
323
|
+
appliedSuggestionIds: artifact.suggestions.applied.map((suggestion) => suggestion.id),
|
|
324
|
+
appliedSuggestionCount: artifact.suggestions.applied.length,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function buildPromotionReasons(artifact, summary, options) {
|
|
328
|
+
const reasons = [];
|
|
329
|
+
if (summary.workflowId !== options.expectedWorkflowId) {
|
|
330
|
+
reasons.push(reason("blocked", "workflow_id_mismatch", `Artifact workflow id ${summary.workflowId} does not match expected workflow id ${options.expectedWorkflowId}.`, {
|
|
331
|
+
workflowId: summary.workflowId,
|
|
332
|
+
expectedWorkflowId: options.expectedWorkflowId,
|
|
333
|
+
}));
|
|
334
|
+
}
|
|
335
|
+
if (summary.fromVersion !== options.expectedFromVersion) {
|
|
336
|
+
reasons.push(reason("blocked", "workflow_version_mismatch", `Artifact source version ${summary.fromVersion ?? "unknown"} does not match expected source version ${options.expectedFromVersion}.`, {
|
|
337
|
+
fromVersion: summary.fromVersion,
|
|
338
|
+
expectedFromVersion: options.expectedFromVersion,
|
|
339
|
+
}));
|
|
340
|
+
}
|
|
341
|
+
if (summary.toVersion !== options.expectedToVersion || summary.workflowVersion !== options.expectedToVersion) {
|
|
342
|
+
reasons.push(reason("blocked", "workflow_version_mismatch", `Artifact target version ${summary.toVersion ?? "unknown"} does not match expected target version ${options.expectedToVersion}.`, {
|
|
343
|
+
workflowVersion: summary.workflowVersion,
|
|
344
|
+
toVersion: summary.toVersion,
|
|
345
|
+
expectedToVersion: options.expectedToVersion,
|
|
346
|
+
}));
|
|
347
|
+
}
|
|
348
|
+
if (!summary.patchedDefinitionValid) {
|
|
349
|
+
reasons.push(reason("blocked", "patched_definition_invalid", "Patched workflow definition is not valid.", {}));
|
|
350
|
+
}
|
|
351
|
+
if (summary.reviewStatus === null) {
|
|
352
|
+
reasons.push(reason("blocked", "missing_review_status", "Review artifact does not contain a review status.", {}));
|
|
353
|
+
}
|
|
354
|
+
else if (summary.reviewStatus === "blocked") {
|
|
355
|
+
reasons.push(reason("blocked", "review_blocked", "Review decision is blocked.", {
|
|
356
|
+
reviewStatus: summary.reviewStatus,
|
|
357
|
+
}));
|
|
358
|
+
}
|
|
359
|
+
else if (summary.reviewStatus === "warning" && !options.allowReviewWarnings) {
|
|
360
|
+
reasons.push(reason("warning", "review_warning", "Review decision contains warnings and warning promotion is not allowed.", {
|
|
361
|
+
reviewStatus: summary.reviewStatus,
|
|
362
|
+
}));
|
|
363
|
+
}
|
|
364
|
+
if (summary.changed !== true) {
|
|
365
|
+
reasons.push(reason("blocked", "no_change", "Artifact does not contain an applied definition change.", {
|
|
366
|
+
changed: summary.changed,
|
|
367
|
+
}));
|
|
368
|
+
}
|
|
369
|
+
if (options.requireSmoke && summary.smokeCaseCount === null) {
|
|
370
|
+
reasons.push(reason("blocked", "missing_smoke", "Promotion requires smoke results, but the artifact does not contain a smoke summary.", {}));
|
|
371
|
+
}
|
|
372
|
+
if ((summary.smokeRequiredFailCount ?? 0) > 0) {
|
|
373
|
+
reasons.push(reason("blocked", "smoke_required_failures", `${summary.smokeRequiredFailCount} required smoke cases failed.`, {
|
|
374
|
+
smokeRequiredFailCount: summary.smokeRequiredFailCount,
|
|
375
|
+
}));
|
|
376
|
+
}
|
|
377
|
+
else if ((summary.smokeFailCount ?? 0) > 0) {
|
|
378
|
+
reasons.push(reason("warning", "smoke_failures", `${summary.smokeFailCount} optional smoke cases failed.`, {
|
|
379
|
+
smokeFailCount: summary.smokeFailCount,
|
|
380
|
+
}));
|
|
381
|
+
}
|
|
382
|
+
if (options.requireApprovedSuggestions) {
|
|
383
|
+
if ((summary.appliedCount ?? 0) > 0 && summary.appliedSuggestionIds.length === 0) {
|
|
384
|
+
reasons.push(reason("blocked", "missing_applied_suggestion_details", "Promotion requires approved suggestion ids, but the artifact does not include applied suggestion details.", {
|
|
385
|
+
appliedCount: summary.appliedCount,
|
|
386
|
+
}));
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
const approvedIds = new Set(options.approvedSuggestionIds);
|
|
390
|
+
const unapprovedSuggestionIds = summary.appliedSuggestionIds.filter((id) => !approvedIds.has(id));
|
|
391
|
+
if (unapprovedSuggestionIds.length > 0) {
|
|
392
|
+
reasons.push(reason("blocked", "unapproved_suggestions", `${unapprovedSuggestionIds.length} applied suggestion(s) are not approved for promotion.`, {
|
|
393
|
+
unapprovedSuggestionIds,
|
|
394
|
+
approvedSuggestionIds: options.approvedSuggestionIds,
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
if (!options.allowReviewWarnings) {
|
|
400
|
+
const deferredSignals = buildDeferredReviewSignalWarnings(artifact);
|
|
401
|
+
if (deferredSignals.length > 0) {
|
|
402
|
+
reasons.push(reason("warning", "deferred_review_signals", `${deferredSignals.length} intent(s) have applied suggestions alongside deferred review-only trace signals.`, {
|
|
403
|
+
intents: deferredSignals,
|
|
404
|
+
}));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return reasons;
|
|
408
|
+
}
|
|
409
|
+
function buildDeferredReviewSignalWarnings(artifact) {
|
|
410
|
+
const appliedIntentIds = new Set(artifact.suggestions.applied
|
|
411
|
+
.map((suggestion) => suggestion.intentId)
|
|
412
|
+
.filter((intentId) => typeof intentId === "string" && intentId.length > 0));
|
|
413
|
+
const signalsByIntent = new Map();
|
|
414
|
+
for (const suggestion of artifact.suggestions.reviewOnly) {
|
|
415
|
+
if (!suggestion.intentId || !appliedIntentIds.has(suggestion.intentId))
|
|
416
|
+
continue;
|
|
417
|
+
const signals = signalsByIntent.get(suggestion.intentId) ?? new Set();
|
|
418
|
+
signals.add(suggestion.signal ?? suggestion.action);
|
|
419
|
+
signalsByIntent.set(suggestion.intentId, signals);
|
|
420
|
+
}
|
|
421
|
+
return [...signalsByIntent.entries()]
|
|
422
|
+
.map(([intentId, signals]) => ({
|
|
423
|
+
intentId,
|
|
424
|
+
signals: [...signals].sort(),
|
|
425
|
+
}))
|
|
426
|
+
.sort((left, right) => String(left.intentId).localeCompare(String(right.intentId)));
|
|
427
|
+
}
|
|
428
|
+
function reason(severity, code, message, details) {
|
|
429
|
+
return { severity, code, message, details };
|
|
430
|
+
}
|
|
431
|
+
function normalizePromotionOptions(artifact, options) {
|
|
432
|
+
const applyDiff = readRecord(artifact.apply["diff"]);
|
|
433
|
+
const fromVersion = applyDiff ? readNumber(applyDiff["fromVersion"]) : null;
|
|
434
|
+
const toVersion = applyDiff ? readNumber(applyDiff["toVersion"]) : null;
|
|
435
|
+
return {
|
|
436
|
+
expectedWorkflowId: options.expectedWorkflowId ?? artifact.workflowId,
|
|
437
|
+
expectedFromVersion: options.expectedFromVersion ?? fromVersion ?? artifact.workflowVersion - 1,
|
|
438
|
+
expectedToVersion: options.expectedToVersion ?? toVersion ?? artifact.workflowVersion,
|
|
439
|
+
allowReviewWarnings: options.allowReviewWarnings === true,
|
|
440
|
+
requireSmoke: options.requireSmoke !== false,
|
|
441
|
+
requireApprovedSuggestions: options.requireApprovedSuggestions === true,
|
|
442
|
+
approvedSuggestionIds: uniqueStrings(options.approvedSuggestionIds ?? []),
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
function readString(value) {
|
|
446
|
+
return readAssistantWorkflowString(value, { trim: false, allowEmpty: true });
|
|
447
|
+
}
|
|
448
|
+
function readStringArray(value) {
|
|
449
|
+
return readAssistantWorkflowStringArray(value, { trim: false, allowEmpty: true, unique: false });
|
|
450
|
+
}
|
|
451
|
+
function uniqueStrings(values) {
|
|
452
|
+
const out = [];
|
|
453
|
+
for (const value of values) {
|
|
454
|
+
if (!value.length || out.includes(value))
|
|
455
|
+
continue;
|
|
456
|
+
out.push(value);
|
|
457
|
+
}
|
|
458
|
+
return out;
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=definition-tuning-promotion.js.map
|