@akagilnc/pi-workflow-roles 0.1.5357 → 0.1.5365

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.
@@ -261,29 +261,6 @@ function described(name, schema) {
261
261
  if (typeof schema.description === "string") return schema;
262
262
  throw new Error(`Tool field ${name} has no semantic description at its schema owner`);
263
263
  }
264
- function declarationIdentity(schema) {
265
- const { description: _description, ...semantic } = schema;
266
- return JSON.stringify(semantic);
267
- }
268
- function openToolObjectFromUnion(schema) {
269
- const declarations = /* @__PURE__ */ new Map();
270
- for (const variant of schema.anyOf) {
271
- for (const [name, declaration] of Object.entries(variant.properties ?? {})) {
272
- const entries = declarations.get(name) ?? [];
273
- const identity = declarationIdentity(declaration);
274
- if (!entries.some((entry) => declarationIdentity(entry) === identity)) entries.push(declaration);
275
- declarations.set(name, entries);
276
- }
277
- }
278
- const properties = Object.fromEntries([...declarations].map(([name, entries]) => {
279
- const descriptions = [...new Set(entries.map((entry) => entry.description).filter((value) => typeof value === "string"))].join(" ");
280
- const declaration = entries.length === 1 ? entries[0] : Type.Union(entries, descriptions === "" ? {} : { description: descriptions });
281
- return [name, Type.Optional(described(name, declaration))];
282
- }));
283
- const object = Type.Object(properties, { additionalProperties: true });
284
- object.required = [];
285
- return object;
286
- }
287
264
  function openToolObject(schema) {
288
265
  const object = Type.Object(
289
266
  Object.fromEntries(Object.entries(schema.properties).map(([name, declaration]) => [
@@ -533,50 +510,36 @@ import { Type as Type6 } from "typebox";
533
510
  function validateFixerOutput(value, _phase) {
534
511
  return value;
535
512
  }
536
- var FIXER_OUTPUT_TOOL_NAME, transportString, authorityBlockerSchema, prerequisiteBlockerSchema, blockerSchema, exceptionSchema, testEvidenceSchema, completedClassResultSchema, refusedClassResultSchema, classResultSchema, completedClassResultsSchema, PARTIALLY_COMPLETED_DEFINITION, FIXER_STATUS_DESCRIPTION, fixerOutputVariants, fixerOutputSchema;
513
+ var FIXER_OUTPUT_TOOL_NAME, PARTIALLY_COMPLETED_DEFINITION, FIXER_STATUS_DESCRIPTION, fixerOutputObject, fixerOutputSchema;
537
514
  var init_fixer_output = __esm({
538
515
  "src/package-contracts/fixer-output.ts"() {
539
516
  "use strict";
540
517
  init_open_tool_schema();
541
518
  init_terminating_infrastructure();
542
519
  FIXER_OUTPUT_TOOL_NAME = "ak_fixer_output";
543
- transportString = Type6.String();
544
- authorityBlockerSchema = Type6.Object({ cause: Type6.Optional(Type6.Literal("authority_violation")), evidence: Type6.Optional(transportString) });
545
- prerequisiteBlockerSchema = Type6.Object({ cause: Type6.Optional(Type6.Literal("prerequisite_unmet")), prerequisiteId: Type6.Optional(transportString), evidence: Type6.Optional(transportString) });
546
- blockerSchema = Type6.Union([authorityBlockerSchema, prerequisiteBlockerSchema]);
547
- exceptionSchema = Type6.Object({ where: Type6.Optional(transportString), reason: Type6.Optional(transportString) });
548
- testEvidenceSchema = Type6.Object({
549
- contract: Type6.Optional(Type6.String({ description: "\u6D4B\u8BD5\u6539\u52A8\u6240\u8BC1\u660E\u7684\u5951\u7EA6" })),
550
- minimumNecessaryCost: Type6.Optional(Type6.String({ description: "\u6D4B\u8BD5\u6539\u52A8\u7684\u4E00\u884C\u6700\u5C0F\u5FC5\u8981\u6210\u672C" })),
551
- measuredDuration: Type6.Optional(Type6.String({ description: "\u805A\u7126\u9A8C\u8BC1\u5B9E\u6D4B\u65F6\u957F" }))
552
- }, { description: "\u6D4B\u8BD5\u8BC1\u636E\u6761\uFF1Bdiff \u542B\u6D4B\u8BD5\u6539\u52A8\u65F6\u63D0\u4EA4\uFF1B\u673A\u5668\u4E0D\u6838\u9A8C\u3002" });
553
- completedClassResultSchema = Type6.Object({
554
- name: Type6.Optional(transportString),
555
- disposition: Type6.Optional(Type6.Literal("completed")),
556
- searchScope: Type6.Optional(transportString),
557
- exceptions: Type6.Optional(Type6.Array(exceptionSchema)),
558
- commitSha: Type6.Optional(transportString)
559
- });
560
- refusedClassResultSchema = Type6.Object({
561
- name: Type6.Optional(transportString),
562
- disposition: Type6.Optional(Type6.Literal("refused")),
563
- remainingScope: Type6.Optional(transportString),
564
- blocker: Type6.Optional(blockerSchema)
565
- });
566
- classResultSchema = Type6.Union([completedClassResultSchema, refusedClassResultSchema]);
567
- completedClassResultsSchema = Type6.Array(completedClassResultSchema);
568
520
  PARTIALLY_COMPLETED_DEFINITION = "partially_completed \u53EA\u80FD\u5728\u6709\u5408\u6CD5\u62D2\u7EDD\u9879\uFF08\u5B8C\u6210\u9879\u4E0E\u5408\u6CD5\u62D2\u7EDD\u9879\u5E76\u5B58\uFF09\u65F6\u7528\uFF0C\u522B\u7684\u60C5\u51B5\u4E0D\u51C6\u7528\u3002";
569
521
  FIXER_STATUS_DESCRIPTION = `planned | completed | refused | unfinished | partially_completed\u3002unfinished \u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u81F4\u672C\u5C40\u672A\u5B8C\u6210\u65F6\u53EF\u7528\uFF0C\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002${PARTIALLY_COMPLETED_DEFINITION}`;
570
- fixerOutputVariants = Type6.Union([
571
- Type6.Object({ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }), report: Type6.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }) }),
572
- Type6.Object({ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }), report: Type6.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }), remainingScope: Type6.String({ description: "\u4F9D\u6CD5\u4E0D\u80FD\u5B8C\u6210\u7684\u5DE5\u4F5C\u8303\u56F4" }), blocker: Type6.Unsafe({ ...blockerSchema, description: "\u5408\u6CD5\u963B\u65AD\u5B8C\u6210\u7684 blocker" }) }),
573
- Type6.Object({ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }), report: Type6.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }), remainingScope: Type6.String({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }), reason: Type6.Optional(Type6.String({ minLength: 1, description: "\u963B\u65AD\u539F\u56E0\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u3002\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002" })), classResults: Type6.Optional(Type6.Unsafe({ ...completedClassResultsSchema, description: "\u672C\u5C40\u5DF2\u5B8C\u6210\u7684 class \u7ED3\u7B97" })), testEvidence: Type6.Optional(testEvidenceSchema) }),
574
- Type6.Object({ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }), report: Type6.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }), classResults: Type6.Array(classResultSchema, { description: "\u5DF2\u5B8C\u6210\u7684 class \u7ED3\u7B97" }), testEvidence: Type6.Optional(testEvidenceSchema) }),
575
- Type6.Object({ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }), report: Type6.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }), classResults: Type6.Array(classResultSchema, { description: "\u5404\u7C7B\u62D2\u7EDD\u7ED3\u7B97" }) }),
576
- Type6.Object({ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }), report: Type6.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }), classResults: Type6.Array(classResultSchema, { description: "\u5404\u7C7B\u5B8C\u6210\u6216\u62D2\u7EDD\u7ED3\u7B97" }), testEvidence: Type6.Optional(testEvidenceSchema) })
577
- ]);
522
+ fixerOutputObject = Type6.Object({
523
+ status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }),
524
+ report: Type6.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
525
+ remainingScope: Type6.Unknown({
526
+ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C\uFF1B\u4F9D\u6CD5\u4E0D\u80FD\u5B8C\u6210\u7684\u8303\u56F4\u4E5F\u5199\u6B64\u5904\u3002"
527
+ }),
528
+ blocker: Type6.Unknown({
529
+ description: "\u5408\u6CD5\u963B\u65AD\u5B8C\u6210\u7684 blocker\uFF0C\u539F\u6837\u7559\u5B58\u3002\u53EF\u5199 cause\uFF08authority_violation \u6216 prerequisite_unmet\uFF09\u3001evidence\uFF1Bprerequisite_unmet \u8FD8\u53EF\u5199 prerequisiteId\u3002"
530
+ }),
531
+ reason: Type6.Unknown({
532
+ description: "\u963B\u65AD\u539F\u56E0\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u3002\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002"
533
+ }),
534
+ classResults: Type6.Unknown({
535
+ description: "\u5404\u7C7B class \u7ED3\u7B97\uFF0C\u539F\u6837\u7559\u5B58\u3002\u5B8C\u6210\u9879\u7684 disposition \u4E3A completed\uFF0C\u53EF\u5199 name\u3001searchScope\u3001exceptions\uFF08where\u3001reason\uFF09\u3001commitSha\u3002\u62D2\u7EDD\u9879\u7684 disposition \u4E3A refused\uFF0C\u53EF\u5199 name\u3001remainingScope\u3001blocker\u3002"
536
+ }),
537
+ testEvidence: Type6.Unknown({
538
+ description: "\u6D4B\u8BD5\u8BC1\u636E\u6761\uFF1Bdiff \u542B\u6D4B\u8BD5\u6539\u52A8\u65F6\u63D0\u4EA4\uFF1B\u673A\u5668\u4E0D\u6838\u9A8C\u3002\u53EF\u5199 contract\uFF08\u6D4B\u8BD5\u6539\u52A8\u6240\u8BC1\u660E\u7684\u5951\u7EA6\uFF09\u3001minimumNecessaryCost\uFF08\u6D4B\u8BD5\u6539\u52A8\u7684\u4E00\u884C\u6700\u5C0F\u5FC5\u8981\u6210\u672C\uFF09\u3001measuredDuration\uFF08\u805A\u7126\u9A8C\u8BC1\u5B9E\u6D4B\u65F6\u957F\uFF09\u3002"
539
+ })
540
+ });
578
541
  fixerOutputSchema = withTerminatingOutputDeclarations(
579
- openToolObjectFromUnion(fixerOutputVariants)
542
+ openToolObject(fixerOutputObject)
580
543
  );
581
544
  }
582
545
  });
@@ -694,7 +657,7 @@ function validateDoctorSubmissionShape(value) {
694
657
  function validateDoctorOutput(value, _patient, _store) {
695
658
  return validateDoctorSubmissionShape(value);
696
659
  }
697
- var DOCTOR_EVIDENCE_TOOL_NAME, DOCTOR_OUTPUT_TOOL_NAME, DOCTOR_AUDIT_TOOL_NAME, DOCTOR_OUTPUT_TOOL_DESCRIPTION, DOCTOR_TARGET_KINDS, nonblank, evidenceIds, guardrail, lastRealBite, assetKinds, findingBody, finding, caseIdentity, DOCTOR_STATUS_DESCRIPTION, doctorSubmissionVariants, doctorSubmissionSchema, doctorEvidenceReadSchema, DoctorEvidenceStore;
660
+ var DOCTOR_EVIDENCE_TOOL_NAME, DOCTOR_OUTPUT_TOOL_NAME, DOCTOR_AUDIT_TOOL_NAME, DOCTOR_OUTPUT_TOOL_DESCRIPTION, DOCTOR_TARGET_KINDS, DOCTOR_DISPOSITIONS, DOCTOR_PRESCRIPTION_KINDS, biteActual, biteNone, DOCTOR_BITE_KINDS, DOCTOR_STATUS_DESCRIPTION, doctorSubmissionObject, doctorSubmissionSchema, doctorEvidenceReadSchema, DoctorEvidenceStore;
698
661
  var init_doctor_contracts = __esm({
699
662
  "src/doctor-contracts.ts"() {
700
663
  "use strict";
@@ -706,41 +669,29 @@ var init_doctor_contracts = __esm({
706
669
  DOCTOR_AUDIT_TOOL_NAME = "ak_doctor_audit_decision";
707
670
  DOCTOR_OUTPUT_TOOL_DESCRIPTION = "\u63D0\u4EA4\u552F\u4E00\u7EC8\u5C40\u5355\u6848\u8BC1\u8BCD\uFF1Bcompleted \u5141\u8BB8\u7A7A findings\u3002";
708
671
  DOCTOR_TARGET_KINDS = ["law", "gate", "template", "station", "seat"];
709
- nonblank = Type8.Optional(Type8.String());
710
- evidenceIds = Type8.Optional(Type8.Array(Type8.String()));
711
- guardrail = Type8.Object({ answer: Type8.Optional(Type8.Boolean()), evidenceIds, explanation: nonblank }, { additionalProperties: true });
712
- lastRealBite = Type8.Union([
713
- Type8.Object({ kind: Type8.Optional(Type8.Literal("actual")), targetKey: nonblank, evidenceId: nonblank }, { additionalProperties: true }),
714
- Type8.Object({ kind: Type8.Optional(Type8.Literal("noRealBite")), targetKey: nonblank, eligibleEvidenceIds: evidenceIds }, { additionalProperties: true })
715
- ]);
716
- assetKinds = DOCTOR_TARGET_KINDS;
717
- findingBody = {
718
- evidenceIds,
719
- disposition: Type8.Optional(Type8.Union([Type8.Literal("keep"), Type8.Literal("thin"), Type8.Literal("delete")])),
720
- guardrails: Type8.Optional(Type8.Object({ reproducibleFailure: guardrail, owningSeamOrInvariant: guardrail, deletionOrSimplificationSuffices: guardrail }, { additionalProperties: true })),
721
- prescription: Type8.Optional(Type8.Object({ kind: Type8.Optional(Type8.Union([Type8.Literal("retain"), Type8.Literal("delete"), Type8.Literal("simplify"), Type8.Literal("patch"), Type8.Literal("addMechanism")])), recommendation: nonblank, necessityExplanation: nonblank }, { additionalProperties: true })),
722
- lastRealBite: Type8.Optional(lastRealBite)
723
- };
724
- finding = Type8.Union([
725
- Type8.Object({ targetKey: nonblank, observation: nonblank, evidenceIds }, { additionalProperties: true }),
726
- Type8.Object({ targetKey: nonblank, targetKind: Type8.Optional(Type8.Union(assetKinds.map((kind) => Type8.Literal(kind)))), assetEvidence: Type8.Optional(Type8.Object({ targetKey: nonblank, targetKind: Type8.Optional(Type8.Union(assetKinds.map((kind) => Type8.Literal(kind)))), evidenceId: nonblank }, { additionalProperties: true })), ...findingBody }, { additionalProperties: true })
727
- ]);
728
- caseIdentity = Type8.Object({ issueNumber: Type8.Optional(Type8.Integer()), runsPath: nonblank }, { additionalProperties: true });
672
+ DOCTOR_DISPOSITIONS = ["keep", "thin", "delete"];
673
+ DOCTOR_PRESCRIPTION_KINDS = ["retain", "delete", "simplify", "patch", "addMechanism"];
674
+ biteActual = "actual";
675
+ biteNone = "noRealBite";
676
+ DOCTOR_BITE_KINDS = [biteActual, biteNone];
729
677
  DOCTOR_STATUS_DESCRIPTION = "completed | refused\u3002completed \u5141\u8BB8\u7A7A findings\uFF1Brefused \u4EC5\u5F53\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u6848\u8BC1\u8BCD";
730
- doctorSubmissionVariants = Type8.Union([
731
- Type8.Object({
732
- status: Type8.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
733
- case: Type8.Unsafe({ ...caseIdentity, description: "\u7559\u5B58\u592A\u533B\u7F72\u6848\u8EAB\u4EFD" }),
734
- findings: Type8.Array(finding, { description: "\u53EF\u7A7A\u6216\u4EC5\u542B\u975E\u5904\u65B9\u6848\u89C2\u5BDF\uFF1B\u7F3A\u53EF\u590D\u7528\u8D44\u4EA7\u6216 bounded-bite \u8BC1\u636E\u53EA\u6392\u9664\u5BF9\u5E94\u8D44\u4EA7\u5904\u65B9" })
735
- }, { additionalProperties: false, description: "\u5355\u6848\u8BC1\u8BCD\uFF0C\u4E0D\u8981\u6C42\u4EFB\u4F55\u5904\u65B9\u6216\u53EF\u590D\u7528 finding" }),
736
- Type8.Object({
737
- status: Type8.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
738
- reason: Type8.String({ description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u8BC1\u8BCD\u7684\u539F\u56E0" }),
739
- missingEvidence: Type8.Array(Type8.Object({ need: nonblank, targetKeys: evidenceIds }, { additionalProperties: true }), { description: "\u5982\u5B9E\u8BC1\u8BCD\u6240\u9700\u800C\u5C1A\u7F3A\u7684\u8BC1\u636E" })
740
- }, { additionalProperties: false, description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u6848\u8BC1\u8BCD" })
741
- ]);
678
+ doctorSubmissionObject = Type8.Object({
679
+ status: Type8.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
680
+ case: Type8.Unknown({
681
+ description: "\u7559\u5B58\u592A\u533B\u7F72\u6848\u8EAB\u4EFD\uFF0C\u539F\u6837\u7559\u5B58\uFF08\u5982 issueNumber\u3001runsPath\uFF09\u3002\u673A\u68B0\u5C42\u53E6\u6309\u7ED1\u5B9A run \u6295\u5F71\u6848\u8EAB\u4EFD\uFF0C\u4E0D\u5728\u672C\u5B57\u6BB5\u91CD\u5224\u3002"
682
+ }),
683
+ findings: Type8.Unknown({
684
+ description: `\u9010\u6761\u8D44\u4EA7\u89C2\u5BDF\u4E0E\u5904\u65B9\uFF0C\u539F\u6837\u7559\u5B58\u3002\u4E00\u6761\u53EF\u542B targetKey\u3001targetKind\uFF08${DOCTOR_TARGET_KINDS.join(" | ")}\uFF09\u3001observation\u3001evidenceIds\u3001disposition\uFF08${DOCTOR_DISPOSITIONS.join(" | ")}\uFF09\u3001assetEvidence\uFF08targetKey\u3001targetKind\u3001evidenceId\uFF09\u3001guardrails\uFF08reproducibleFailure\u3001owningSeamOrInvariant\u3001deletionOrSimplificationSuffices\uFF0C\u5404\u9879\u53EF\u542B answer\u3001evidenceIds\u3001explanation\uFF09\u3001prescription\uFF08kind \u4E3A ${DOCTOR_PRESCRIPTION_KINDS.join(" | ")}\uFF0C\u53E6\u53EF\u5199 recommendation\u3001necessityExplanation\uFF09\u3001lastRealBite\uFF08kind \u4E3A ${DOCTOR_BITE_KINDS.join(" | ")}\uFF0C\u53E6\u53EF\u5199 targetKey\u3001evidenceId\u3001eligibleEvidenceIds\uFF09\u3002\u4E0D\u8981\u6C42\u4EFB\u4F55\u5904\u65B9\u6216\u53EF\u590D\u7528 finding\uFF1B\u7F3A\u53EF\u590D\u7528\u8D44\u4EA7\u6216 bounded-bite \u8BC1\u636E\u53EA\u6392\u9664\u5BF9\u5E94\u8D44\u4EA7\u5904\u65B9\u3002\u673A\u5668\u4E0D\u6838\u9A8C\u3002`
685
+ }),
686
+ reason: Type8.Unknown({
687
+ description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u8BC1\u8BCD\u7684\u539F\u56E0\uFF1B\u4EC5 refused \u65F6\u7528\u3002"
688
+ }),
689
+ missingEvidence: Type8.Unknown({
690
+ description: "\u5982\u5B9E\u8BC1\u8BCD\u6240\u9700\u800C\u5C1A\u7F3A\u7684\u8BC1\u636E\uFF0C\u539F\u6837\u7559\u5B58\uFF08\u5982\u6BCF\u9879 need\u3001targetKeys\uFF09\u3002"
691
+ })
692
+ });
742
693
  doctorSubmissionSchema = withTerminatingOutputDeclarations(
743
- openToolObjectFromUnion(doctorSubmissionVariants)
694
+ openToolObject(doctorSubmissionObject)
744
695
  );
745
696
  doctorEvidenceReadSchema = Type8.Object({ evidenceId: Type8.String({ minLength: 1, description: "\u5F85\u8BFB\u7559\u5B58\u8BC1\u636E\u6807\u8BC6" }), offset: Type8.Optional(Type8.Integer({ minimum: 0, description: "\u8D77\u59CB\u5B57\u8282\u504F\u79FB\uFF08\u4ECE 0 \u8BA1\uFF09" })), limit: Type8.Optional(Type8.Integer({ minimum: 1, description: "\u8FD4\u56DE\u5B57\u8282\u6570\uFF08\u65E0\u4E0A\u9650\uFF09" })) }, { additionalProperties: true });
746
697
  DoctorEvidenceStore = class {
@@ -834,7 +785,7 @@ function validateMergerInput(value) {
834
785
  const authorizedChecks = Array.isArray(value.authorizedChecks) ? value.authorizedChecks.filter((check) => record(check)).map((c) => ({ name: asString(c.name), argv: asStringArray(c.argv).filter((a) => a.trim().length > 0) })).filter((c) => c.name.trim().length > 0 && c.argv.length > 0) : [];
835
786
  return deepFreeze(structuredClone({ attemptId: value.attemptId.trim(), targetObjectId: asString(value.targetObjectId), sourceObjectId: asString(value.sourceObjectId), materials, expectedConflictPaths: asStringArray(value.expectedConflictPaths), resolutionScope: asStringArray(value.resolutionScope), authorizedChecks }));
836
787
  }
837
- var materialSchema, checkSchema, mergerInputSchema, MERGER_STATUS_DESCRIPTION, mergerOutputVariants, mergerOutputSchema, MERGER_OUTPUT_TOOL_NAME, record, blank, MergerInputContractError, asString, asStringArray;
788
+ var materialSchema, checkSchema, mergerInputSchema, MERGER_STATUS_DESCRIPTION, mergerOutputObject, mergerOutputSchema, MERGER_OUTPUT_TOOL_NAME, record, blank, MergerInputContractError, asString, asStringArray;
838
789
  var init_merger_contracts = __esm({
839
790
  "src/merger-contracts.ts"() {
840
791
  "use strict";
@@ -853,11 +804,16 @@ var init_merger_contracts = __esm({
853
804
  authorizedChecks: Type9.Array(checkSchema)
854
805
  }, { additionalProperties: false });
855
806
  MERGER_STATUS_DESCRIPTION = "completed | escalate";
856
- mergerOutputVariants = Type9.Union([
857
- Type9.Object({ status: Type9.Unknown({ description: MERGER_STATUS_DESCRIPTION }), attemptId: Type9.String({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }), report: Type9.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }), mergeCommitId: Type9.String({ description: "\u5B8C\u6210\u5408\u5E76 commit object ID" }) }, { additionalProperties: false }),
858
- Type9.Object({ status: Type9.Unknown({ description: MERGER_STATUS_DESCRIPTION }), attemptId: Type9.String({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }), diagnosis: Type9.String({ description: "\u5408\u5E76\u65E0\u6CD5\u6216\u4E0D\u5E94\u7531\u672C\u5E2D\u5B8C\u6210\u7684\u539F\u56E0\uFF08\u542B\u65E0\u8FDB\u884C\u4E2D\u5408\u5E76\u3001\u65E0\u6D3B\u53EF\u5E72\u3001\u9700\u65B0\u7684\u4EA7\u54C1/\u6743\u529B\u51B3\u5B9A\uFF09" }), report: Type9.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }) }, { additionalProperties: false })
859
- ]);
860
- mergerOutputSchema = withTerminatingOutputDeclarations(openToolObjectFromUnion(mergerOutputVariants));
807
+ mergerOutputObject = Type9.Object({
808
+ status: Type9.Unknown({ description: MERGER_STATUS_DESCRIPTION }),
809
+ attemptId: Type9.Unknown({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }),
810
+ report: Type9.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
811
+ mergeCommitId: Type9.Unknown({ description: "\u5B8C\u6210\u5408\u5E76 commit object ID" }),
812
+ diagnosis: Type9.Unknown({
813
+ description: "\u5408\u5E76\u65E0\u6CD5\u6216\u4E0D\u5E94\u7531\u672C\u5E2D\u5B8C\u6210\u7684\u539F\u56E0\uFF08\u542B\u65E0\u8FDB\u884C\u4E2D\u5408\u5E76\u3001\u65E0\u6D3B\u53EF\u5E72\u3001\u9700\u65B0\u7684\u4EA7\u54C1/\u6743\u529B\u51B3\u5B9A\uFF09"
814
+ })
815
+ });
816
+ mergerOutputSchema = withTerminatingOutputDeclarations(openToolObject(mergerOutputObject));
861
817
  MERGER_OUTPUT_TOOL_NAME = "ak_merger_output";
862
818
  record = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
863
819
  blank = (v) => typeof v !== "string" || v.trim().length === 0;
@@ -6993,7 +6949,7 @@ async function admitPublicRole(role, parsed, env, override) {
6993
6949
  if (parsed.runs === void 0) {
6994
6950
  ensureRealDirectoryTree(placed.ledgerHome, caseRunsPath);
6995
6951
  }
6996
- let caseIdentity2;
6952
+ let caseIdentity;
6997
6953
  try {
6998
6954
  const patient = await loadDoctorCase(caseRunsPath);
6999
6955
  if (patient.identity.issueNumber !== issueNumber) {
@@ -7001,7 +6957,7 @@ async function admitPublicRole(role, parsed, env, override) {
7001
6957
  `doctor case issue ${patient.identity.issueNumber} does not match --issue ${issueNumber}`
7002
6958
  );
7003
6959
  }
7004
- caseIdentity2 = patient.identity;
6960
+ caseIdentity = patient.identity;
7005
6961
  caseRunsPath = await realpath4(caseRunsPath);
7006
6962
  } catch (error) {
7007
6963
  if (error instanceof CliUsageError) throw error;
@@ -7015,7 +6971,7 @@ async function admitPublicRole(role, parsed, env, override) {
7015
6971
  return {
7016
6972
  issueNumber,
7017
6973
  caseRunsPath,
7018
- caseIdentity: caseIdentity2,
6974
+ caseIdentity,
7019
6975
  attachments: persistedAttachmentRefs(frozenAttachments)
7020
6976
  };
7021
6977
  }
@@ -19439,7 +19395,7 @@ async function loadResumableRunRecord(home, runId, authority) {
19439
19395
  let waitWindowMs;
19440
19396
  let issueNumber;
19441
19397
  let caseRunsPath;
19442
- let caseIdentity2;
19398
+ let caseIdentity;
19443
19399
  let sourceRunPath;
19444
19400
  let sourceRun;
19445
19401
  try {
@@ -19510,7 +19466,7 @@ async function loadResumableRunRecord(home, runId, authority) {
19510
19466
  if (record4.caseIdentity !== null && typeof record4.caseIdentity === "object" && !Array.isArray(record4.caseIdentity)) {
19511
19467
  const ci = record4.caseIdentity;
19512
19468
  if (typeof ci.issueNumber === "number" && Number.isSafeInteger(ci.issueNumber) && ci.issueNumber >= 1 && typeof ci.runsPath === "string" && ci.runsPath.trim() !== "") {
19513
- caseIdentity2 = { issueNumber: ci.issueNumber, runsPath: ci.runsPath };
19469
+ caseIdentity = { issueNumber: ci.issueNumber, runsPath: ci.runsPath };
19514
19470
  }
19515
19471
  }
19516
19472
  if (typeof record4.sourceRunPath === "string" && record4.sourceRunPath.trim() !== "") {
@@ -19639,7 +19595,7 @@ async function loadResumableRunRecord(home, runId, authority) {
19639
19595
  ...waitWindowMs === void 0 ? {} : { waitWindowMs },
19640
19596
  ...issueNumber === void 0 ? {} : { issueNumber },
19641
19597
  ...caseRunsPath === void 0 ? {} : { caseRunsPath },
19642
- ...caseIdentity2 === void 0 ? {} : { caseIdentity: caseIdentity2 },
19598
+ ...caseIdentity === void 0 ? {} : { caseIdentity },
19643
19599
  ...sourceRunPath === void 0 ? {} : { sourceRunPath },
19644
19600
  ...sourceRun === void 0 ? {} : { sourceRun },
19645
19601
  ...model === void 0 ? {} : { model }
@@ -19861,8 +19817,8 @@ function admitResumedRole(loaded) {
19861
19817
  return admitted;
19862
19818
  }
19863
19819
  case "case-identity": {
19864
- const { issueNumber, caseRunsPath, caseIdentity: caseIdentity2 } = fields;
19865
- if (issueNumber === void 0 || caseRunsPath === void 0 || caseIdentity2 === void 0) {
19820
+ const { issueNumber, caseRunsPath, caseIdentity } = fields;
19821
+ if (issueNumber === void 0 || caseRunsPath === void 0 || caseIdentity === void 0) {
19866
19822
  throw new CliUsageError(
19867
19823
  `role run admitted doctor case identity is missing: ${runId}`
19868
19824
  );
@@ -19872,7 +19828,7 @@ function admitResumedRole(loaded) {
19872
19828
  ...base,
19873
19829
  issueNumber,
19874
19830
  caseRunsPath,
19875
- caseIdentity: caseIdentity2
19831
+ caseIdentity
19876
19832
  };
19877
19833
  return admitted;
19878
19834
  }
@@ -21407,16 +21363,9 @@ var gleanerLeftOutputSchema = withTerminatingOutputDeclarations(
21407
21363
  status: Type15.Unknown({
21408
21364
  description: "completed"
21409
21365
  }),
21410
- findings: Type15.Array(
21411
- Type15.Object(
21412
- {
21413
- pointer: Type15.Optional(Type15.String({ description: "\u6587\u4EF6/\u884C\u6307\u9488" })),
21414
- statement: Type15.Optional(Type15.String({ description: "\u7591\u70B9\u9648\u8FF0" }))
21415
- },
21416
- { additionalProperties: true, description: "\u4E00\u6761\u5F39\u7AE0" }
21417
- ),
21418
- { description: "\u5F39\u7AE0\u5217\u8868\uFF1B\u7A7A\u5217\u8868\u5408\u6CD5\u5B8C\u5C40" }
21419
- )
21366
+ findings: Type15.Unknown({
21367
+ description: "\u5F39\u7AE0\u5217\u8868\uFF1B\u6BCF\u6761\u53EF\u542B pointer\uFF08\u6587\u4EF6/\u884C\u6307\u9488\uFF09\u4E0E statement\uFF08\u7591\u70B9\u9648\u8FF0\uFF09\uFF0C\u539F\u6837\u7559\u5B58\u3002\u7A7A\u5217\u8868\u5408\u6CD5\u5B8C\u5C40\uFF1B\u673A\u5668\u4E0D\u5224\u5F39\u7AE0\u662F\u5426\u6210\u7ACB\u3002"
21368
+ })
21420
21369
  })
21421
21370
  )
21422
21371
  );
@@ -21452,37 +21401,7 @@ init_terminating_infrastructure();
21452
21401
  init_diarist_contracts();
21453
21402
  init_diarist_contracts();
21454
21403
  import { Type as Type16 } from "typebox";
21455
- var diaristSessionsSchema = Type16.Array(
21456
- Type16.Object(
21457
- {
21458
- path: Type16.Optional(Type16.String({ description: "\u4F1A\u8BDD\u5377\u7EDD\u5BF9\u6216\u53EF\u8BFB\u8DEF\u5F84" })),
21459
- ranges: Type16.Optional(
21460
- Type16.Array(
21461
- Type16.Object(
21462
- {
21463
- from: Type16.Optional(
21464
- Type16.Object(
21465
- { id: Type16.Optional(Type16.String()), line: Type16.Optional(Type16.Unknown()) },
21466
- { additionalProperties: true, description: "\u8D77\u70B9\uFF1A\u539F\u751F id \u6216\u672C\u8F6E\u884C\u53F7\u4E8C\u9009\u4E00" }
21467
- )
21468
- ),
21469
- to: Type16.Optional(
21470
- Type16.Object(
21471
- { id: Type16.Optional(Type16.String()), line: Type16.Optional(Type16.Unknown()) },
21472
- { additionalProperties: true, description: "\u7EC8\u70B9\uFF1A\u539F\u751F id \u6216\u672C\u8F6E\u884C\u53F7\u4E8C\u9009\u4E00" }
21473
- )
21474
- )
21475
- },
21476
- { additionalProperties: true, description: "\u4E00\u6BB5\u5BF9\u8BDD\u533A\u95F4" }
21477
- ),
21478
- { description: "\u672C\u5377\u672C\u8F6E\u5404\u533A\u95F4\uFF1B\u81F3\u5C11\u4E00\u6BB5" }
21479
- )
21480
- )
21481
- },
21482
- { additionalProperties: true, description: "\u4E00\u5377\u4F1A\u8BDD\u7684\u8FB9\u754C" }
21483
- ),
21484
- { description: "\u5BF9\u8BDD\u8FB9\u754C\uFF1B\u7A7A\u5217\u8868\uFF1D\u672C\u8F6E\u65E0\u5BF9\u8BDD\u53EF\u5212\u3002\u7AEF\u70B9\u65E0\u6CD5\u6307\u540D\u65F6\u8D70 reask\uFF0C\u4E0D\u4E2D\u6B62\u3002" }
21485
- );
21404
+ var DIARIST_SESSIONS_DESCRIPTION = "\u5BF9\u8BDD\u8FB9\u754C\u3002\u6BCF\u5377\u542B path\uFF08\u4F1A\u8BDD\u5377\u7EDD\u5BF9\u6216\u53EF\u8BFB\u8DEF\u5F84\uFF09\u4E0E ranges\uFF08\u672C\u5377\u672C\u8F6E\u5404\u533A\u95F4\uFF09\u3002\u6BCF\u6BB5\u533A\u95F4\u542B from / to\uFF1B\u8D77\u70B9\u4E0E\u7EC8\u70B9\u5404\u5199 id\uFF08\u539F\u751F id\uFF09\u6216 line\uFF08\u672C\u8F6E\u884C\u53F7\uFF09\uFF0C\u4E8C\u9009\u4E00\u3002\u7A7A\u5217\u8868\uFF1D\u672C\u8F6E\u65E0\u5BF9\u8BDD\u53EF\u5212\u3002\u7AEF\u70B9\u65E0\u6CD5\u6307\u540D\u65F6\u8D70 reask\uFF0C\u4E0D\u4E2D\u6B62\u3002";
21486
21405
  var diaristOutputSchema = withTerminatingOutputDeclarations(
21487
21406
  openToolObject(
21488
21407
  Type16.Object({
@@ -21494,24 +21413,13 @@ var diaristOutputSchema = withTerminatingOutputDeclarations(
21494
21413
  description: "\u672C\u5EAD\u5BF9\u8C61\u7968\u53F7\uFF08\u6B63\u6574\u6570\uFF09\u6216 null/\u7701\u7565\uFF1D\u771F\u65E0\u7968\uFF1B\u4E0B\u6E38\u8D70 typed \u952E\uFF1B\u8BA4\u4E0D\u51FA\u7528 status=escalate\uFF0C\u4E0D\u6D17\u6210\u65E0\u5F55\u3002\u673A\u68B0\u5C42\u4E0D\u91CD\u5224\u3002"
21495
21414
  })
21496
21415
  ),
21497
- reason: Type16.Optional(
21498
- Type16.String({
21499
- description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
21500
- })
21501
- ),
21502
- sessions: Type16.Optional(diaristSessionsSchema),
21503
- ticketSessions: Type16.Optional(
21504
- Type16.Array(
21505
- Type16.Object(
21506
- {
21507
- ticketNumber: Type16.Unknown({ description: "\u672C\u6761\u8FB9\u754C\u6240\u5F52\u7968\u53F7\uFF08\u6B63\u6574\u6570\uFF09" }),
21508
- sessions: diaristSessionsSchema
21509
- },
21510
- { additionalProperties: true }
21511
- ),
21512
- { description: "\u591A\u7968\u5EAD\u9010\u7968\u5BF9\u8BDD\u8FB9\u754C\uFF1B\u4E00\u6B21\u4EA4\u5377\u5404\u7968\u5404\u81EA\u5206\u5F55\u3002\u4E0E\u5355\u7968 sessions \u4E8C\u9009\u4E00\u3002" }
21513
- )
21514
- )
21416
+ reason: Type16.Unknown({
21417
+ description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
21418
+ }),
21419
+ sessions: Type16.Optional(Type16.Unknown({ description: DIARIST_SESSIONS_DESCRIPTION })),
21420
+ ticketSessions: Type16.Unknown({
21421
+ description: `\u591A\u7968\u5EAD\u9010\u7968\u5BF9\u8BDD\u8FB9\u754C\uFF1B\u6BCF\u7968\u542B ticketNumber\uFF08\u672C\u6761\u8FB9\u754C\u6240\u5F52\u7968\u53F7\uFF0C\u6B63\u6574\u6570\uFF09\u4E0E sessions\uFF08${DIARIST_SESSIONS_DESCRIPTION}\uFF09\u3002\u4E00\u6B21\u4EA4\u5377\u5404\u7968\u5404\u81EA\u5206\u5F55\u3002\u4E0E\u5355\u7968 sessions \u4E8C\u9009\u4E00\u3002`
21422
+ })
21515
21423
  })
21516
21424
  )
21517
21425
  );
@@ -21535,19 +21443,13 @@ var secretariatVerdictSchema = withTerminatingOutputDeclarations(
21535
21443
  description: "converged | escalate"
21536
21444
  }),
21537
21445
  ticketNumber: Type17.Optional(
21538
- Type17.Number({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
21446
+ Type17.Unknown({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
21539
21447
  ),
21540
- note: Type17.Optional(Type17.String({ description: "\u9644\u6CE8" })),
21448
+ note: Type17.Unknown({ description: "\u9644\u6CE8" }),
21541
21449
  evidence: Type17.Optional(Type17.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
21542
- decisionGate: Type17.Optional(
21543
- Type17.Object(
21544
- {
21545
- question: Type17.Optional(Type17.String()),
21546
- options: Type17.Optional(Type17.Array(Type17.String()))
21547
- },
21548
- { additionalProperties: true, description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879" }
21549
- )
21550
- )
21450
+ decisionGate: Type17.Unknown({
21451
+ description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u5199 question \u4E0E options\uFF0C\u539F\u6837\u7559\u5B58\u3002"
21452
+ })
21551
21453
  },
21552
21454
  { additionalProperties: true }
21553
21455
  )
@@ -22573,31 +22475,17 @@ init_open_tool_schema();
22573
22475
  init_terminating_infrastructure();
22574
22476
  init_reviewer_output();
22575
22477
  import { Type as Type20 } from "typebox";
22576
- var reviewerAmendmentsSchema = Type20.Object({
22577
- completeness: Type20.Optional(Type20.String({
22578
- description: "completeness lens \u5B8C\u6574\u62A5\u544A\uFF1Acandidates\u3001\u9010\u6761\u5904\u7F6E\u4E0E verdict\uFF1B\u975E\u4EC5 verdict \u4E00\u884C\u3002hard-stop\uFF0Fusage error \u4E3A refused \u65F6\uFF0C\u82E5\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u4E8E\u6B64"
22579
- })),
22580
- correctness: Type20.Optional(Type20.String({
22581
- description: "correctness lens \u5B8C\u6574\u62A5\u544A\uFF1Acandidates\u3001\u9010\u6761\u5904\u7F6E\u4E0E verdict\uFF1B\u975E\u4EC5 verdict \u4E00\u884C\u3002hard-stop\uFF0Fusage error \u4E3A refused \u65F6\uFF0C\u82E5\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u4E8E\u6B64"
22582
- }))
22583
- }, {
22584
- additionalProperties: true,
22585
- description: "\u5DF2\u8FD0\u884C lens \u7684 amendments \u627F\u8F7D candidates\u3001\u9010\u6761\u5904\u7F6E\u4E0E verdict \u7684\u5B8C\u6574\u62A5\u544A\uFF08\u975E\u4EC5 verdict \u884C\uFF09\uFF1B\u663E\u5F0F\u5355\u8F74\u65F6\u53E6\u4E00\u8F74\u53EF\u7701\u7565\u3002hard-stop\uFF0Fusage error \u4E3A refused \u65F6\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u5BF9\u5E94 lens \u5B57\u6BB5\u3002"
22586
- });
22478
+ var REVIEWER_AMENDMENTS_DESCRIPTION = "\u5DF2\u8FD0\u884C lens \u7684 amendments \u627F\u8F7D candidates\u3001\u9010\u6761\u5904\u7F6E\u4E0E verdict \u7684\u5B8C\u6574\u62A5\u544A\uFF08\u975E\u4EC5 verdict \u884C\uFF09\uFF1B\u663E\u5F0F\u5355\u8F74\u65F6\u53E6\u4E00\u8F74\u53EF\u7701\u7565\uFF08completeness / correctness\uFF09\u3002hard-stop\uFF0Fusage error \u4E3A refused \u65F6\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u5BF9\u5E94 lens \u5B57\u6BB5\u3002";
22587
22479
  var REVIEWER_STATUS_DESCRIPTION = "completed | refused\u3002\u4E24\u79CD\u6B63\u5E38 lens verdict\uFF08completeness / correctness\uFF09\u5747 completed\uFF1Bhard-stop \u4E0E usage error \u4E3A refused\uFF08\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u8FDB\u6240\u9009 lens amendments\uFF09\u3002";
22588
- var reviewerOutputVariants = Type20.Union([
22589
- Type20.Object({
22590
- status: Type20.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
22591
- amendments: Type20.Optional(reviewerAmendmentsSchema)
22592
- }, { additionalProperties: false }),
22593
- Type20.Object({
22594
- status: Type20.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
22595
- diagnostic: Type20.String({ description: "\u62D2\u7EDD\u8BCA\u65AD\u8BF4\u660E\uFF1Bhard-stop\uFF0Fusage error \u539F\u56E0\u8FDB\u6B64\u5B57\u6BB5\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u53E6\u7167\u5F55 amendments" }),
22596
- amendments: Type20.Optional(reviewerAmendmentsSchema)
22597
- }, { additionalProperties: false })
22598
- ]);
22480
+ var reviewerOutputObject = Type20.Object({
22481
+ status: Type20.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
22482
+ amendments: Type20.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
22483
+ diagnostic: Type20.Unknown({
22484
+ description: "\u62D2\u7EDD\u8BCA\u65AD\u8BF4\u660E\uFF1Bhard-stop\uFF0Fusage error \u539F\u56E0\u8FDB\u6B64\u5B57\u6BB5\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u53E6\u7167\u5F55 amendments"
22485
+ })
22486
+ });
22599
22487
  var reviewerOutputSchema = withTerminatingOutputDeclarations(
22600
- openToolObjectFromUnion(reviewerOutputVariants)
22488
+ openToolObject(reviewerOutputObject)
22601
22489
  );
22602
22490
  function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22603
22491
  let soul;
@@ -22751,10 +22639,19 @@ function uninstallPackageWorkerHooks(cwd) {
22751
22639
  function isRecord15(value) {
22752
22640
  return typeof value === "object" && value !== null && !Array.isArray(value);
22753
22641
  }
22642
+ function containsWrittenReason(value) {
22643
+ if (typeof value === "string") return value.trim().length > 0;
22644
+ if (Array.isArray(value)) return value.some(containsWrittenReason);
22645
+ if (typeof value === "object" && value !== null) {
22646
+ return Object.entries(value).some(
22647
+ ([key, item]) => containsWrittenReason(key) || containsWrittenReason(item)
22648
+ );
22649
+ }
22650
+ return false;
22651
+ }
22754
22652
  function unfinishedReasonPresent(details) {
22755
- if (typeof details !== "object" || details === null) return false;
22756
- const reason = details.reason;
22757
- return typeof reason === "string" && reason.trim().length > 0;
22653
+ if (typeof details !== "object" || details === null || Array.isArray(details)) return false;
22654
+ return containsWrittenReason(details.reason);
22758
22655
  }
22759
22656
  function readGateState(session) {
22760
22657
  let baseline;
@@ -22908,27 +22805,16 @@ function fixerBashSeatbeltDenyReason(matched) {
22908
22805
 
22909
22806
  // src/worker-role.ts
22910
22807
  var CODER_STATUS_DESCRIPTION = `planned | completed | refused | partially_completed | unfinished\u3002unfinished\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u81F4\u672C\u5C40\u672A\u5B8C\u6210\u3002${PARTIALLY_COMPLETED_DEFINITION}`;
22911
- var coderOutputVariants = Type21.Union([
22912
- Type21.Object({
22913
- status: Type21.Unknown({ description: CODER_STATUS_DESCRIPTION }),
22914
- report: Type21.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" })
22915
- }, { additionalProperties: false }),
22916
- Type21.Object({
22917
- status: Type21.Unknown({ description: CODER_STATUS_DESCRIPTION }),
22918
- report: Type21.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" })
22919
- }, { additionalProperties: false }),
22920
- Type21.Object({
22921
- status: Type21.Unknown({ description: CODER_STATUS_DESCRIPTION }),
22922
- report: Type21.String({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
22923
- remainingScope: Type21.String({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
22924
- reason: Type21.Optional(Type21.String({
22925
- minLength: 1,
22926
- description: "\u963B\u65AD\u539F\u56E0\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u3002\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002"
22927
- }))
22928
- }, { additionalProperties: false })
22929
- ]);
22808
+ var coderOutputObject = Type21.Object({
22809
+ status: Type21.Unknown({ description: CODER_STATUS_DESCRIPTION }),
22810
+ report: Type21.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
22811
+ remainingScope: Type21.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
22812
+ reason: Type21.Unknown({
22813
+ description: "\u963B\u65AD\u539F\u56E0\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u3002\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002"
22814
+ })
22815
+ });
22930
22816
  var coderOutputSchema = withTerminatingOutputDeclarations(
22931
- openToolObjectFromUnion(coderOutputVariants)
22817
+ openToolObject(coderOutputObject)
22932
22818
  );
22933
22819
  var FIXER_FLAG_DEFINITIONS = {
22934
22820
  packet: {
@@ -1,47 +1,35 @@
1
1
  import { Type } from "typebox";
2
2
  import { canonicalJson } from "./canonical-json.js";
3
- import { openToolObjectFromUnion } from "./open-tool-schema.js";
3
+ import { openToolObject } from "./open-tool-schema.js";
4
4
  import { withTerminatingOutputDeclarations } from "./package-contracts/terminating-infrastructure.js";
5
5
  const DOCTOR_EVIDENCE_TOOL_NAME = "ak_doctor_evidence";
6
6
  const DOCTOR_OUTPUT_TOOL_NAME = "ak_doctor_output";
7
7
  const DOCTOR_AUDIT_TOOL_NAME = "ak_doctor_audit_decision";
8
8
  const DOCTOR_OUTPUT_TOOL_DESCRIPTION = "\u63D0\u4EA4\u552F\u4E00\u7EC8\u5C40\u5355\u6848\u8BC1\u8BCD\uFF1Bcompleted \u5141\u8BB8\u7A7A findings\u3002";
9
9
  const DOCTOR_TARGET_KINDS = ["law", "gate", "template", "station", "seat"];
10
- const nonblank = Type.Optional(Type.String());
11
- const evidenceIds = Type.Optional(Type.Array(Type.String()));
12
- const guardrail = Type.Object({ answer: Type.Optional(Type.Boolean()), evidenceIds, explanation: nonblank }, { additionalProperties: true });
13
- const lastRealBite = Type.Union([
14
- Type.Object({ kind: Type.Optional(Type.Literal("actual")), targetKey: nonblank, evidenceId: nonblank }, { additionalProperties: true }),
15
- Type.Object({ kind: Type.Optional(Type.Literal("noRealBite")), targetKey: nonblank, eligibleEvidenceIds: evidenceIds }, { additionalProperties: true })
16
- ]);
17
- const assetKinds = DOCTOR_TARGET_KINDS;
18
- const findingBody = {
19
- evidenceIds,
20
- disposition: Type.Optional(Type.Union([Type.Literal("keep"), Type.Literal("thin"), Type.Literal("delete")])),
21
- guardrails: Type.Optional(Type.Object({ reproducibleFailure: guardrail, owningSeamOrInvariant: guardrail, deletionOrSimplificationSuffices: guardrail }, { additionalProperties: true })),
22
- prescription: Type.Optional(Type.Object({ kind: Type.Optional(Type.Union([Type.Literal("retain"), Type.Literal("delete"), Type.Literal("simplify"), Type.Literal("patch"), Type.Literal("addMechanism")])), recommendation: nonblank, necessityExplanation: nonblank }, { additionalProperties: true })),
23
- lastRealBite: Type.Optional(lastRealBite)
24
- };
25
- const finding = Type.Union([
26
- Type.Object({ targetKey: nonblank, observation: nonblank, evidenceIds }, { additionalProperties: true }),
27
- Type.Object({ targetKey: nonblank, targetKind: Type.Optional(Type.Union(assetKinds.map((kind) => Type.Literal(kind)))), assetEvidence: Type.Optional(Type.Object({ targetKey: nonblank, targetKind: Type.Optional(Type.Union(assetKinds.map((kind) => Type.Literal(kind)))), evidenceId: nonblank }, { additionalProperties: true })), ...findingBody }, { additionalProperties: true })
28
- ]);
29
- const caseIdentity = Type.Object({ issueNumber: Type.Optional(Type.Integer()), runsPath: nonblank }, { additionalProperties: true });
10
+ const DOCTOR_DISPOSITIONS = ["keep", "thin", "delete"];
11
+ const DOCTOR_PRESCRIPTION_KINDS = ["retain", "delete", "simplify", "patch", "addMechanism"];
12
+ const biteActual = "actual";
13
+ const biteNone = "noRealBite";
14
+ const DOCTOR_BITE_KINDS = [biteActual, biteNone];
30
15
  const DOCTOR_STATUS_DESCRIPTION = "completed | refused\u3002completed \u5141\u8BB8\u7A7A findings\uFF1Brefused \u4EC5\u5F53\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u6848\u8BC1\u8BCD";
31
- const doctorSubmissionVariants = Type.Union([
32
- Type.Object({
33
- status: Type.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
34
- case: Type.Unsafe({ ...caseIdentity, description: "\u7559\u5B58\u592A\u533B\u7F72\u6848\u8EAB\u4EFD" }),
35
- findings: Type.Array(finding, { description: "\u53EF\u7A7A\u6216\u4EC5\u542B\u975E\u5904\u65B9\u6848\u89C2\u5BDF\uFF1B\u7F3A\u53EF\u590D\u7528\u8D44\u4EA7\u6216 bounded-bite \u8BC1\u636E\u53EA\u6392\u9664\u5BF9\u5E94\u8D44\u4EA7\u5904\u65B9" })
36
- }, { additionalProperties: false, description: "\u5355\u6848\u8BC1\u8BCD\uFF0C\u4E0D\u8981\u6C42\u4EFB\u4F55\u5904\u65B9\u6216\u53EF\u590D\u7528 finding" }),
37
- Type.Object({
38
- status: Type.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
39
- reason: Type.String({ description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u8BC1\u8BCD\u7684\u539F\u56E0" }),
40
- missingEvidence: Type.Array(Type.Object({ need: nonblank, targetKeys: evidenceIds }, { additionalProperties: true }), { description: "\u5982\u5B9E\u8BC1\u8BCD\u6240\u9700\u800C\u5C1A\u7F3A\u7684\u8BC1\u636E" })
41
- }, { additionalProperties: false, description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u6848\u8BC1\u8BCD" })
42
- ]);
16
+ const doctorSubmissionObject = Type.Object({
17
+ status: Type.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
18
+ case: Type.Unknown({
19
+ description: "\u7559\u5B58\u592A\u533B\u7F72\u6848\u8EAB\u4EFD\uFF0C\u539F\u6837\u7559\u5B58\uFF08\u5982 issueNumber\u3001runsPath\uFF09\u3002\u673A\u68B0\u5C42\u53E6\u6309\u7ED1\u5B9A run \u6295\u5F71\u6848\u8EAB\u4EFD\uFF0C\u4E0D\u5728\u672C\u5B57\u6BB5\u91CD\u5224\u3002"
20
+ }),
21
+ findings: Type.Unknown({
22
+ description: `\u9010\u6761\u8D44\u4EA7\u89C2\u5BDF\u4E0E\u5904\u65B9\uFF0C\u539F\u6837\u7559\u5B58\u3002\u4E00\u6761\u53EF\u542B targetKey\u3001targetKind\uFF08${DOCTOR_TARGET_KINDS.join(" | ")}\uFF09\u3001observation\u3001evidenceIds\u3001disposition\uFF08${DOCTOR_DISPOSITIONS.join(" | ")}\uFF09\u3001assetEvidence\uFF08targetKey\u3001targetKind\u3001evidenceId\uFF09\u3001guardrails\uFF08reproducibleFailure\u3001owningSeamOrInvariant\u3001deletionOrSimplificationSuffices\uFF0C\u5404\u9879\u53EF\u542B answer\u3001evidenceIds\u3001explanation\uFF09\u3001prescription\uFF08kind \u4E3A ${DOCTOR_PRESCRIPTION_KINDS.join(" | ")}\uFF0C\u53E6\u53EF\u5199 recommendation\u3001necessityExplanation\uFF09\u3001lastRealBite\uFF08kind \u4E3A ${DOCTOR_BITE_KINDS.join(" | ")}\uFF0C\u53E6\u53EF\u5199 targetKey\u3001evidenceId\u3001eligibleEvidenceIds\uFF09\u3002\u4E0D\u8981\u6C42\u4EFB\u4F55\u5904\u65B9\u6216\u53EF\u590D\u7528 finding\uFF1B\u7F3A\u53EF\u590D\u7528\u8D44\u4EA7\u6216 bounded-bite \u8BC1\u636E\u53EA\u6392\u9664\u5BF9\u5E94\u8D44\u4EA7\u5904\u65B9\u3002\u673A\u5668\u4E0D\u6838\u9A8C\u3002`
23
+ }),
24
+ reason: Type.Unknown({
25
+ description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u8BC1\u8BCD\u7684\u539F\u56E0\uFF1B\u4EC5 refused \u65F6\u7528\u3002"
26
+ }),
27
+ missingEvidence: Type.Unknown({
28
+ description: "\u5982\u5B9E\u8BC1\u8BCD\u6240\u9700\u800C\u5C1A\u7F3A\u7684\u8BC1\u636E\uFF0C\u539F\u6837\u7559\u5B58\uFF08\u5982\u6BCF\u9879 need\u3001targetKeys\uFF09\u3002"
29
+ })
30
+ });
43
31
  const doctorSubmissionSchema = withTerminatingOutputDeclarations(
44
- openToolObjectFromUnion(doctorSubmissionVariants)
32
+ openToolObject(doctorSubmissionObject)
45
33
  );
46
34
  const doctorEvidenceReadSchema = Type.Object({ evidenceId: Type.String({ minLength: 1, description: "\u5F85\u8BFB\u7559\u5B58\u8BC1\u636E\u6807\u8BC6" }), offset: Type.Optional(Type.Integer({ minimum: 0, description: "\u8D77\u59CB\u5B57\u8282\u504F\u79FB\uFF08\u4ECE 0 \u8BA1\uFF09" })), limit: Type.Optional(Type.Integer({ minimum: 1, description: "\u8FD4\u56DE\u5B57\u8282\u6570\uFF08\u65E0\u4E0A\u9650\uFF09" })) }, { additionalProperties: true });
47
35
  class DoctorSubmissionContractError extends Error {