@peasant-labs/schema 0.1.0-rc9 → 0.1.1-rc1

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.
@@ -1,3 +1,4 @@
1
+ // publication-contract-semantic-refinement
1
2
  // This file is auto-generated by @hey-api/openapi-ts
2
3
  import * as z from 'zod';
3
4
  export const zActivityEdge = z.object({
@@ -186,6 +187,40 @@ export const zAssociationEvidenceObservation = z.object({
186
187
  * Opaque durable Peasant identifier for one session-to-commit association
187
188
  */
188
189
  export const zAssociationID = z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/);
190
+ export const zAuthoritativeCommitInfo = z.object({
191
+ authorEmail: z.string(),
192
+ authorName: z.string(),
193
+ authorTime: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
194
+ commitTime: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
195
+ hash: z.string(),
196
+ message: z.string()
197
+ }).strict();
198
+ export const zAuthoritativeDiagnosticEntry = z.object({
199
+ errorType: z.string(),
200
+ location: z.string(),
201
+ message: z.string(),
202
+ remediation: z.string()
203
+ }).strict();
204
+ export const zAuthoritativeDiagnosticsInfo = z.object({
205
+ partial: z.boolean().nullish(),
206
+ warnings: z.array(zAuthoritativeDiagnosticEntry)
207
+ }).strict();
208
+ export const zAuthoritativeSessionStats = z.object({
209
+ cachedReadTokens: z.int().nullish(),
210
+ cachedWriteTokens: z.int().nullish(),
211
+ durationMs: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
212
+ subagentCount: z.int(),
213
+ thoughtTokens: z.int().nullish(),
214
+ tokensIn: z.int(),
215
+ tokensOut: z.int(),
216
+ toolCallCount: z.int(),
217
+ turnCount: z.int()
218
+ }).strict();
219
+ export const zAuthoritativeTimestampInfo = z.object({
220
+ end: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
221
+ ingested: z.int().nullish(),
222
+ start: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' })
223
+ }).strict();
189
224
  export const zBatchCreateAnnotationsErrorResponse = z.object({
190
225
  error: z.string(),
191
226
  failingIndex: z.int()
@@ -230,6 +265,13 @@ export const zCLILoginQuery = z.object({
230
265
  port: z.int(),
231
266
  state: z.string()
232
267
  });
268
+ export const zCanonicalPublishGitContext = z.object({
269
+ branch: z.string().nullable(),
270
+ commits: z.array(zAuthoritativeCommitInfo),
271
+ remote: z.string().nullable(),
272
+ tracking: z.string().nullable(),
273
+ worktree: z.string().nullable()
274
+ }).strict();
233
275
  /**
234
276
  * Change Binding
235
277
  *
@@ -470,7 +512,8 @@ export const zHarness = z.enum([
470
512
  'codex',
471
513
  'opencode',
472
514
  'cursor',
473
- 'antigravity'
515
+ 'antigravity',
516
+ 'strike'
474
517
  ]);
475
518
  export const zHealthResponse = z.object({
476
519
  status: z.string()
@@ -575,18 +618,43 @@ export const zMockConfigResponse = z.object({
575
618
  * Model identifier (e.g. 'claude-opus-4-6', 'gemini-2.0-flash')
576
619
  */
577
620
  export const zModelID = z.string().min(1);
621
+ export const zAuthoritativeModelInfo = z.object({
622
+ harness: zHarness,
623
+ hostSlug: zHostSlug.optional(),
624
+ model: zModelID,
625
+ version: z.string().optional()
626
+ }).strict();
578
627
  export const zModelInfo = z.object({
579
628
  harness: zHarness,
580
629
  hostSlug: zHostSlug.optional(),
581
630
  model: zModelID,
582
631
  version: z.string().optional()
583
632
  });
633
+ /**
634
+ * Observed Model ID
635
+ *
636
+ * Exact UTF-8 model identifier observed on an assistant-generated turn; producer-enforced as assistant or subagent evidence. Values are non-empty and may not have a Unicode White_Space code point at either edge; all accepted bytes, including Unicode, mixed case, slashes, and internal spaces, are preserved.
637
+ */
638
+ export const zObservedModelID = z.string().min(1).regex(/^(?:|[^\s\x85])(?:[\s\S]*(?:|[^\s\x85]))?(?![\s\S])/);
639
+ /**
640
+ * Omitted preserves, null requests clear, and a canonical license replaces
641
+ */
642
+ export const zOwnerUpdateLicenseIntent = z.enum([
643
+ 'CC0-1.0',
644
+ 'CC-BY-4.0',
645
+ 'CC-BY-SA-4.0'
646
+ ]).nullable();
584
647
  /**
585
648
  * Project Hash
586
649
  *
587
650
  * SHA-256 hex digest of the project's origin URL or local path
588
651
  */
589
652
  export const zProjectHash = z.string().regex(/^[0-9a-f]{64}$/).brand();
653
+ export const zAuthoritativeProjectContext = z.object({
654
+ filePath: z.string().optional(),
655
+ hash: zProjectHash,
656
+ name: z.string()
657
+ }).strict();
590
658
  export const zProjectContext = z.object({
591
659
  filePath: z.string().optional(),
592
660
  hash: zProjectHash,
@@ -614,6 +682,30 @@ export const zProvenance = z.object({
614
682
  method: z.string(),
615
683
  version: z.string().optional()
616
684
  });
685
+ /**
686
+ * Publish Operation Kind
687
+ *
688
+ * Mutation semantic for one publish operation arm
689
+ */
690
+ export const zPublishOperationKind = z.enum([
691
+ 'preserve',
692
+ 'replace',
693
+ 'append'
694
+ ]);
695
+ export const zPublishLicenseOperation = z.object({
696
+ kind: zPublishOperationKind,
697
+ license: zLicense.nullable()
698
+ }).strict().superRefine((value, context) => {
699
+ const valid = (value.kind === "preserve" && value.license === null) || (value.kind === "replace" && value.license !== null);
700
+ if (!valid)
701
+ context.addIssue({ code: "custom", message: "license operation must be preserve+null or replace+license" });
702
+ });
703
+ /**
704
+ * Publish Request Fingerprint
705
+ *
706
+ * SHA3-256 digest of the canonical domain-separated publish operation
707
+ */
708
+ export const zPublishRequestFingerprint = z.string().length(64).regex(/^[0-9a-f]{64}$/);
617
709
  export const zPublishResponse = z.object({
618
710
  blobKey: z.string(),
619
711
  blobSizeBytes: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
@@ -625,7 +717,15 @@ export const zPublishResponse = z.object({
625
717
  export const zPublishedAssociation = z.object({
626
718
  id: zAssociationID,
627
719
  observedCommitHash: z.string()
628
- });
720
+ }).strict();
721
+ export const zAuthoritativeGitContext = z.object({
722
+ associations: z.array(zPublishedAssociation).optional(),
723
+ branch: z.string().nullish(),
724
+ commits: z.array(zAuthoritativeCommitInfo).optional(),
725
+ remote: z.string().nullish(),
726
+ tracking: z.string().nullish(),
727
+ worktree: z.string().nullish()
728
+ }).strict();
629
729
  export const zGitContext = z.object({
630
730
  associations: z.array(zPublishedAssociation).optional(),
631
731
  branch: z.string().nullish(),
@@ -658,6 +758,26 @@ export const zGitContext = z.object({
658
758
  }
659
759
  }
660
760
  });
761
+ export const zPublishAssociationOperation = z.object({
762
+ associations: z.array(zPublishedAssociation),
763
+ kind: zPublishOperationKind
764
+ }).strict().superRefine((value, context) => {
765
+ if (value.kind !== "append")
766
+ context.addIssue({ code: "custom", path: ["kind"], message: "association operation must append" });
767
+ const ids = new Set();
768
+ const hashes = new Set();
769
+ let prior = "";
770
+ for (const [index, association] of value.associations.entries()) {
771
+ const key = association.id + "\0" + association.observedCommitHash;
772
+ if (key < prior)
773
+ context.addIssue({ code: "custom", path: ["associations", index], message: "associations must use canonical ID and binding order" });
774
+ if (ids.has(association.id) || hashes.has(association.observedCommitHash) || association.observedCommitHash.trim() === "")
775
+ context.addIssue({ code: "custom", path: ["associations", index], message: "associations require unique nonempty IDs and bindings" });
776
+ ids.add(association.id);
777
+ hashes.add(association.observedCommitHash);
778
+ prior = key;
779
+ }
780
+ });
661
781
  /**
662
782
  * Read Attribution State
663
783
  *
@@ -809,9 +929,18 @@ export const zServerMessage = z.object({
809
929
  /**
810
930
  * Session ID
811
931
  *
812
- * Unique session identifier (UUID, agent-{hex}, ses_{id}, sess_{id} (ACP), or msg_{id})
932
+ * Unique session identifier (UUID, agent-{hex}, ses_{id}, sess_{id} (ACP), msg_{id}, or a Strike session ID)
813
933
  */
814
- export const zSessionID = z.string().regex(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|agent-[a-f0-9]+|sess?_[a-zA-Z0-9]+|msg_[a-zA-Z0-9]+)$/);
934
+ export const zSessionID = z.string().regex(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|agent-[a-f0-9]+|sess?_[a-zA-Z0-9]+|msg_[a-zA-Z0-9]+|[0-9]{8}T[0-9]{6}\.[0-9]{9}Z-[A-Z2-7]{26}|[A-Z2-7]{26})$/);
935
+ export const zAuthoritativeSessionIdentity = z.object({
936
+ parentSessionId: zSessionID.optional(),
937
+ schemaVersion: z.int(),
938
+ sessionId: zSessionID
939
+ }).strict();
940
+ export const zAuthoritativeSubagentRef = z.object({
941
+ parentUuid: zSessionID,
942
+ sessionId: zSessionID
943
+ }).strict();
815
944
  export const zInsightEvidence = z.object({
816
945
  commitHash: z.string().optional(),
817
946
  entryIndex: z.int().nullish(),
@@ -911,6 +1040,50 @@ export const zSessionOutcome = z.enum([
911
1040
  'partial',
912
1041
  'failed'
913
1042
  ]);
1043
+ export const zAuthoritativeQualityMetrics = z.object({
1044
+ computeVersion: z.int().nullish(),
1045
+ computedAt: z.int().nullish(),
1046
+ costCacheReadUsd: z.number().nullish(),
1047
+ costCacheWriteUsd: z.number().nullish(),
1048
+ costInputUsd: z.number().nullish(),
1049
+ costModelId: z.string().nullish(),
1050
+ costOutputUsd: z.number().nullish(),
1051
+ costReasoningUsd: z.number().nullish(),
1052
+ costTotalUsd: z.number().nullish(),
1053
+ discoveryTurns: z.int().nullish(),
1054
+ durationMinutes: z.number().nullish(),
1055
+ explorationRatio: z.number().nullish(),
1056
+ filesTouched: z.int().nullish(),
1057
+ inputTokens: z.int().nullish(),
1058
+ linesChanged: z.int().nullish(),
1059
+ m2TokenOutcomeRatio: z.number().nullish(),
1060
+ m3UniqueToolCount: z.int().nullish(),
1061
+ m4ConsecutiveErrorMax: z.int().nullish(),
1062
+ m4ErrorRecoveryCount: z.int().nullish(),
1063
+ m5AvgMessageTokens: z.int().nullish(),
1064
+ m5ContextUtilizationPct: z.number().nullish(),
1065
+ m5PeakContextTokens: z.int().nullish(),
1066
+ m6LinesSurvived: z.int().nullish(),
1067
+ m6LinesTotal: z.int().nullish(),
1068
+ m6OutputSurvivalPct: z.number().nullish(),
1069
+ m7SpecHasConstraints: z.boolean().nullish(),
1070
+ m7SpecHasExamples: z.boolean().nullish(),
1071
+ m7SpecWordCount: z.int().nullish(),
1072
+ outcome: zSessionOutcome.nullish(),
1073
+ outputTokens: z.int().nullish(),
1074
+ retryLoops: z.int().nullish(),
1075
+ retryTokensWasted: z.int().nullish(),
1076
+ scope: z.string().nullish(),
1077
+ scopeBreadth: z.int().nullish(),
1078
+ signalDensity: z.number().nullish(),
1079
+ specQualityScore: z.number().nullish(),
1080
+ subagentCount: z.int().nullish(),
1081
+ titleGenerated: z.string().nullish(),
1082
+ toolCalls: z.int().nullish(),
1083
+ totalTokens: z.int().nullish(),
1084
+ turnCount: z.int().nullish(),
1085
+ withinSessionReverts: z.int().nullish()
1086
+ }).strict();
914
1087
  export const zQualityMetrics = z.object({
915
1088
  computeVersion: z.int().nullish(),
916
1089
  computedAt: z.int().nullish(),
@@ -1007,6 +1180,10 @@ export const zShutdownResponse = z.object({
1007
1180
  * Transcript file format
1008
1181
  */
1009
1182
  export const zSourceFormat = z.enum(['jsonl', 'json']);
1183
+ export const zAuthoritativeSourceInfo = z.object({
1184
+ filePath: z.string().optional(),
1185
+ format: zSourceFormat
1186
+ }).strict();
1010
1187
  export const zSourceInfo = z.object({
1011
1188
  filePath: z.string().optional(),
1012
1189
  format: zSourceFormat
@@ -1349,6 +1526,46 @@ export const zToolCallKind = z.enum([
1349
1526
  'fetch',
1350
1527
  'other'
1351
1528
  ]);
1529
+ export const zAuthoritativeSessionEntry = z.object({
1530
+ contentPreview: z.string().nullish(),
1531
+ depth: z.int(),
1532
+ entryId: z.string().nullish(),
1533
+ entryIndex: z.int(),
1534
+ entryType: zEntryType,
1535
+ extra: z.string().nullish(),
1536
+ harness: zHarness,
1537
+ hasThinking: z.boolean(),
1538
+ hasToolUse: z.boolean(),
1539
+ isError: z.boolean(),
1540
+ parentEntryId: z.string().nullish(),
1541
+ parentIndex: z.int().nullish(),
1542
+ partType: z.string().nullish(),
1543
+ rawByteLength: z.int().nullish(),
1544
+ role: zRole,
1545
+ sessionId: zSessionID,
1546
+ stopReason: zStopReason.nullish(),
1547
+ timestampMs: z.int().nullish(),
1548
+ tokensIn: z.int().nullish(),
1549
+ tokensOut: z.int().nullish(),
1550
+ toolCallId: z.string().nullish(),
1551
+ toolInput: z.string().nullish(),
1552
+ toolKind: zToolCallKind.nullish(),
1553
+ toolNamesCsv: z.string().nullish(),
1554
+ toolOutput: z.string().nullish()
1555
+ }).strict();
1556
+ export const zCanonicalPublishReplacement = z.object({
1557
+ diagnostics: zAuthoritativeDiagnosticsInfo,
1558
+ entries: z.array(zAuthoritativeSessionEntry),
1559
+ git: zCanonicalPublishGitContext,
1560
+ identity: zAuthoritativeSessionIdentity,
1561
+ model: zAuthoritativeModelInfo,
1562
+ project: zAuthoritativeProjectContext,
1563
+ quality: zAuthoritativeQualityMetrics.nullable(),
1564
+ source: zAuthoritativeSourceInfo,
1565
+ stats: zAuthoritativeSessionStats,
1566
+ subagents: z.array(zAuthoritativeSubagentRef),
1567
+ timestamp: zAuthoritativeTimestampInfo
1568
+ }).strict();
1352
1569
  export const zSessionEntry = z.object({
1353
1570
  contentPreview: z.string().nullish(),
1354
1571
  depth: z.int(),
@@ -1401,6 +1618,18 @@ export const zToolCallDetail = z.object({
1401
1618
  result: z.string(),
1402
1619
  toolKind: zToolCallKind.optional()
1403
1620
  });
1621
+ /**
1622
+ * Transcript Content Hash
1623
+ *
1624
+ * SHA3-256 digest of the exact transcript file bytes
1625
+ */
1626
+ export const zTranscriptContentHash = z.string().length(64).regex(/^[0-9a-f]{64}$/);
1627
+ export const zCanonicalPublishOperation = z.object({
1628
+ associations: zPublishAssociationOperation,
1629
+ contentHash: zTranscriptContentHash,
1630
+ license: zPublishLicenseOperation,
1631
+ replacement: zCanonicalPublishReplacement
1632
+ }).strict();
1404
1633
  /**
1405
1634
  * Transcript ID
1406
1635
  *
@@ -1423,6 +1652,65 @@ export const zPullSkipGateResult = z.object({
1423
1652
  export const zPullSkipGateResponse = z.object({
1424
1653
  results: z.array(zPullSkipGateResult)
1425
1654
  });
1655
+ /**
1656
+ * TranscriptUpdateLicense
1657
+ *
1658
+ * License value for the owner transcript update operation: a canonical menu license, or the empty string to clear. Clearing a license that was actually granted is refused, because a granted Creative Commons license is irrevocable.
1659
+ */
1660
+ export const zTranscriptUpdateLicense = z.enum([
1661
+ '',
1662
+ 'CC0-1.0',
1663
+ 'CC-BY-4.0',
1664
+ 'CC-BY-SA-4.0'
1665
+ ]);
1666
+ /**
1667
+ * TranscriptUpdateVisibility
1668
+ *
1669
+ * Visibility values accepted by the owner transcript update operation. Organization-scoped visibility is deferred and is deliberately not offered here.
1670
+ */
1671
+ export const zTranscriptUpdateVisibility = z.enum(['private', 'public']);
1672
+ export const zOwnerTranscriptUpdateRequest = z.object({
1673
+ description: z.string().optional(),
1674
+ license: zOwnerUpdateLicenseIntent.optional(),
1675
+ tags: z.array(z.string()).optional(),
1676
+ title: z.string().max(500).optional(),
1677
+ visibility: zTranscriptUpdateVisibility.optional()
1678
+ }).strict();
1679
+ export const zOwnerTranscriptUpdateResponse = z.object({
1680
+ description: z.string().nullable(),
1681
+ license: zLicense.nullable(),
1682
+ tags: z.array(z.string()),
1683
+ title: z.string().nullable(),
1684
+ transcriptId: zTranscriptID,
1685
+ transcriptUrl: z.string(),
1686
+ updatedAt: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
1687
+ visibility: zTranscriptUpdateVisibility
1688
+ }).strict().superRefine((value, context) => {
1689
+ let parsed;
1690
+ try {
1691
+ parsed = new URL(value.transcriptUrl);
1692
+ }
1693
+ catch {
1694
+ context.addIssue({ code: "custom", path: ["transcriptUrl"], message: "transcriptUrl must be absolute HTTPS and bind transcriptId" });
1695
+ return;
1696
+ }
1697
+ if (parsed.protocol !== "https:" || parsed.search || parsed.hash || parsed.pathname.replace(/\/$/, "") !== "/transcripts/" + value.transcriptId)
1698
+ context.addIssue({ code: "custom", path: ["transcriptUrl"], message: "transcriptUrl must be exact HTTPS /transcripts/{transcriptId}" });
1699
+ if (value.updatedAt <= 0n)
1700
+ context.addIssue({ code: "custom", path: ["updatedAt"], message: "updatedAt must be positive" });
1701
+ const tags = new Set();
1702
+ for (const [index, tag] of value.tags.entries()) {
1703
+ if (tag.trim() === "" || tag !== tag.trim() || tags.has(tag))
1704
+ context.addIssue({ code: "custom", path: ["tags", index], message: "tags must be unique nonempty trimmed strings" });
1705
+ tags.add(tag);
1706
+ }
1707
+ });
1708
+ export const zTranscriptUpdateRequest = z.object({
1709
+ description: z.string().optional(),
1710
+ license: zTranscriptUpdateLicense.optional(),
1711
+ title: z.string().max(500).optional(),
1712
+ visibility: zTranscriptUpdateVisibility.optional()
1713
+ }).strict();
1426
1714
  export const zTrendsPayload = z.object({
1427
1715
  days: z.array(zDayStats).nullable(),
1428
1716
  totalSessions: z.int(),
@@ -1435,6 +1723,7 @@ export const zTurnDetail = z.object({
1435
1723
  entryType: zEntryType.optional(),
1436
1724
  hasThinking: z.boolean().optional(),
1437
1725
  index: z.int(),
1726
+ observedModel: zObservedModelID.optional(),
1438
1727
  parentIndex: z.int().nullish(),
1439
1728
  role: zRole,
1440
1729
  stopReason: zStopReason.nullish(),
@@ -1576,6 +1865,49 @@ export const zVisibility = z.enum([
1576
1865
  'group',
1577
1866
  'public'
1578
1867
  ]);
1868
+ export const zPublishNormalizedValues = z.object({
1869
+ derivedTitle: z.string().nullable(),
1870
+ entryHarnesses: z.array(zHarness),
1871
+ rootHarness: zHarness,
1872
+ schemaVersion: z.string(),
1873
+ visibility: zVisibility
1874
+ }).strict().superRefine((value, context) => {
1875
+ if (!/^[1-9][0-9]*$/.test(value.schemaVersion))
1876
+ context.addIssue({ code: "custom", path: ["schemaVersion"], message: "schemaVersion must be positive canonical decimal text" });
1877
+ });
1878
+ export const zPublishAppliedState = z.object({
1879
+ associations: z.array(zPublishedAssociation),
1880
+ license: zLicense.nullable(),
1881
+ normalizedValues: zPublishNormalizedValues
1882
+ }).strict();
1883
+ export const zAuthoritativePublishResponse = z.object({
1884
+ applied: zPublishAppliedState,
1885
+ blobKey: z.string(),
1886
+ blobSizeBytes: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
1887
+ contentHash: zTranscriptContentHash,
1888
+ created: z.boolean(),
1889
+ publishedAt: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
1890
+ requestOperationFingerprint: zPublishRequestFingerprint,
1891
+ transcriptId: zTranscriptID,
1892
+ transcriptUrl: z.string(),
1893
+ updatedAt: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }),
1894
+ visibility: zVisibility
1895
+ }).strict().superRefine((value, context) => {
1896
+ let parsed;
1897
+ try {
1898
+ parsed = new URL(value.transcriptUrl);
1899
+ }
1900
+ catch {
1901
+ context.addIssue({ code: "custom", path: ["transcriptUrl"], message: "transcriptUrl must be absolute HTTPS and bind transcriptId" });
1902
+ return;
1903
+ }
1904
+ if (parsed.protocol !== "https:" || parsed.search || parsed.hash || parsed.pathname.replace(/\/$/, "") !== "/transcripts/" + value.transcriptId)
1905
+ context.addIssue({ code: "custom", path: ["transcriptUrl"], message: "transcriptUrl must be exact HTTPS /transcripts/{transcriptId}" });
1906
+ if (value.blobKey.trim() === "" || value.blobSizeBytes < 0n || value.publishedAt <= 0n || value.updatedAt < value.publishedAt)
1907
+ context.addIssue({ code: "custom", message: "blob facts and publication chronology must be complete and ordered" });
1908
+ if (value.visibility !== value.applied.normalizedValues.visibility)
1909
+ context.addIssue({ code: "custom", path: ["applied", "normalizedValues", "visibility"], message: "top-level and applied visibility must agree" });
1910
+ });
1579
1911
  export const zPullTranscriptInfo = z.object({
1580
1912
  annotationCount: z.int(),
1581
1913
  contentHash: z.string().optional(),
@@ -1598,6 +1930,28 @@ export const zPullListResponse = z.object({
1598
1930
  total: z.int(),
1599
1931
  transcripts: z.array(zPullTranscriptInfo).nullable()
1600
1932
  });
1933
+ /**
1934
+ * Visibility Intent
1935
+ *
1936
+ * Optional desired final access for legacy compatibility; content replacement remains private and widening occurs separately
1937
+ */
1938
+ export const zVisibilityIntent = z.enum(['private', 'public']);
1939
+ export const zAuthoritativePublishRequest = z.object({
1940
+ contentHash: zTranscriptContentHash,
1941
+ diagnostics: zAuthoritativeDiagnosticsInfo.optional(),
1942
+ entries: z.array(zAuthoritativeSessionEntry).optional(),
1943
+ git: zAuthoritativeGitContext.optional(),
1944
+ identity: zAuthoritativeSessionIdentity.optional(),
1945
+ license: zLicense.optional(),
1946
+ model: zAuthoritativeModelInfo,
1947
+ project: zAuthoritativeProjectContext.optional(),
1948
+ quality: zAuthoritativeQualityMetrics.optional(),
1949
+ source: zAuthoritativeSourceInfo.optional(),
1950
+ stats: zAuthoritativeSessionStats.optional(),
1951
+ subagents: z.array(zAuthoritativeSubagentRef).optional(),
1952
+ timestamp: zAuthoritativeTimestampInfo.optional(),
1953
+ visibilityIntent: zVisibilityIntent.optional()
1954
+ }).strict();
1601
1955
  export const zWalkthroughStep = z.object({
1602
1956
  excerpt: z.string(),
1603
1957
  file: z.string(),
@@ -1,3 +1,5 @@
1
+ import { type PublishOperationKind as PublishOperationKindContract } from "./contract/zod.gen.js";
2
+ import { type VisibilityIntent as VisibilityIntentContract } from "./contract/zod.gen.js";
1
3
  import { type AnnotationAxis as AnnotationAxisContract } from "./contract/zod.gen.js";
2
4
  import { type AnnotationDatatype as AnnotationDatatypeContract } from "./contract/zod.gen.js";
3
5
  import { type AnnotationPushStatus as AnnotationPushStatusContract } from "./contract/zod.gen.js";
@@ -35,7 +37,24 @@ import { type TargetKind as TargetKindContract } from "./contract/zod.gen.js";
35
37
  import { type ToolCallKind as ToolCallKindContract } from "./contract/zod.gen.js";
36
38
  import { type TypeOrigin as TypeOriginContract } from "./contract/zod.gen.js";
37
39
  import { type ValueDomainKind as ValueDomainKindContract } from "./contract/zod.gen.js";
40
+ import { type TranscriptUpdateLicense as TranscriptUpdateLicenseContract } from "./contract/zod.gen.js";
41
+ import { type TranscriptUpdateVisibility as TranscriptUpdateVisibilityContract } from "./contract/zod.gen.js";
38
42
  import { type Visibility as VisibilityContract } from "./contract/zod.gen.js";
43
+ export type PublishOperationKind = PublishOperationKindContract;
44
+ export declare const PublishOperationKind: Readonly<{
45
+ readonly Preserve: "replace" | "append" | "preserve";
46
+ readonly Replace: "replace" | "append" | "preserve";
47
+ readonly Append: "replace" | "append" | "preserve";
48
+ }>;
49
+ export declare const AllPublishOperationKinds: readonly PublishOperationKind[];
50
+ export declare function isPublishOperationKind(value: unknown): value is PublishOperationKind;
51
+ export type VisibilityIntent = VisibilityIntentContract;
52
+ export declare const VisibilityIntent: Readonly<{
53
+ readonly Private: "private" | "public";
54
+ readonly Public: "private" | "public";
55
+ }>;
56
+ export declare const AllVisibilityIntents: readonly VisibilityIntent[];
57
+ export declare function isVisibilityIntent(value: unknown): value is VisibilityIntent;
39
58
  export type AnnotationAxis = AnnotationAxisContract;
40
59
  export declare const AnnotationAxis: Readonly<{
41
60
  readonly Type: "type" | "session" | "project";
@@ -206,12 +225,13 @@ export declare const AllFileChangeStatuses: readonly FileChangeStatus[];
206
225
  export declare function isFileChangeStatus(value: unknown): value is FileChangeStatus;
207
226
  export type Harness = HarnessContract;
208
227
  export declare const Harness: Readonly<{
209
- readonly ClaudeCode: "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
210
- readonly GeminiCLI: "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
211
- readonly Codex: "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
212
- readonly OpenCode: "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
213
- readonly Cursor: "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
214
- readonly Antigravity: "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
228
+ readonly ClaudeCode: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
229
+ readonly GeminiCLI: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
230
+ readonly Codex: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
231
+ readonly OpenCode: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
232
+ readonly Cursor: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
233
+ readonly Antigravity: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
234
+ readonly Strike: "strike" | "cursor" | "claude-code" | "gemini-cli" | "codex" | "opencode" | "antigravity";
215
235
  }>;
216
236
  /**
217
237
  * AllHarnesses is the ingestion-supported subset of Harness, not the full
@@ -395,6 +415,22 @@ export declare const ValueDomainKind: Readonly<{
395
415
  }>;
396
416
  export declare const AllValueDomainKinds: readonly ValueDomainKind[];
397
417
  export declare function isValueDomainKind(value: unknown): value is ValueDomainKind;
418
+ export type TranscriptUpdateLicense = TranscriptUpdateLicenseContract;
419
+ export declare const TranscriptUpdateLicense: Readonly<{
420
+ readonly Clear: "" | "CC0-1.0" | "CC-BY-4.0" | "CC-BY-SA-4.0";
421
+ readonly CC0: "" | "CC0-1.0" | "CC-BY-4.0" | "CC-BY-SA-4.0";
422
+ readonly CCBY: "" | "CC0-1.0" | "CC-BY-4.0" | "CC-BY-SA-4.0";
423
+ readonly CCBYSA: "" | "CC0-1.0" | "CC-BY-4.0" | "CC-BY-SA-4.0";
424
+ }>;
425
+ export declare const AllTranscriptUpdateLicenses: readonly TranscriptUpdateLicense[];
426
+ export declare function isTranscriptUpdateLicense(value: unknown): value is TranscriptUpdateLicense;
427
+ export type TranscriptUpdateVisibility = TranscriptUpdateVisibilityContract;
428
+ export declare const TranscriptUpdateVisibility: Readonly<{
429
+ readonly Private: "private" | "public";
430
+ readonly Public: "private" | "public";
431
+ }>;
432
+ export declare const AllTranscriptUpdateVisibilities: readonly TranscriptUpdateVisibility[];
433
+ export declare function isTranscriptUpdateVisibility(value: unknown): value is TranscriptUpdateVisibility;
398
434
  export type Visibility = VisibilityContract;
399
435
  export declare const Visibility: Readonly<{
400
436
  readonly Private: "private" | "public" | "group";
@@ -1,4 +1,6 @@
1
1
  // Code generated from the canonical Go/OpenAPI contract. DO NOT EDIT.
2
+ import { zPublishOperationKind } from "./contract/zod.gen.js";
3
+ import { zVisibilityIntent } from "./contract/zod.gen.js";
2
4
  import { zAnnotationAxis } from "./contract/zod.gen.js";
3
5
  import { zAnnotationDatatype } from "./contract/zod.gen.js";
4
6
  import { zAnnotationPushStatus } from "./contract/zod.gen.js";
@@ -36,7 +38,26 @@ import { zTargetKind } from "./contract/zod.gen.js";
36
38
  import { zToolCallKind } from "./contract/zod.gen.js";
37
39
  import { zTypeOrigin } from "./contract/zod.gen.js";
38
40
  import { zValueDomainKind } from "./contract/zod.gen.js";
41
+ import { zTranscriptUpdateLicense } from "./contract/zod.gen.js";
42
+ import { zTranscriptUpdateVisibility } from "./contract/zod.gen.js";
39
43
  import { zVisibility } from "./contract/zod.gen.js";
44
+ export const PublishOperationKind = Object.freeze({
45
+ Preserve: zPublishOperationKind.parse("preserve"),
46
+ Replace: zPublishOperationKind.parse("replace"),
47
+ Append: zPublishOperationKind.parse("append"),
48
+ });
49
+ export const AllPublishOperationKinds = Object.freeze([PublishOperationKind.Preserve, PublishOperationKind.Replace, PublishOperationKind.Append]);
50
+ export function isPublishOperationKind(value) {
51
+ return zPublishOperationKind.safeParse(value).success;
52
+ }
53
+ export const VisibilityIntent = Object.freeze({
54
+ Private: zVisibilityIntent.parse("private"),
55
+ Public: zVisibilityIntent.parse("public"),
56
+ });
57
+ export const AllVisibilityIntents = Object.freeze([VisibilityIntent.Private, VisibilityIntent.Public]);
58
+ export function isVisibilityIntent(value) {
59
+ return zVisibilityIntent.safeParse(value).success;
60
+ }
40
61
  export const AnnotationAxis = Object.freeze({
41
62
  Type: zAnnotationAxis.parse("type"),
42
63
  Session: zAnnotationAxis.parse("session"),
@@ -229,13 +250,14 @@ export const Harness = Object.freeze({
229
250
  OpenCode: zHarness.parse("opencode"),
230
251
  Cursor: zHarness.parse("cursor"),
231
252
  Antigravity: zHarness.parse("antigravity"),
253
+ Strike: zHarness.parse("strike"),
232
254
  });
233
255
  /**
234
256
  * AllHarnesses is the ingestion-supported subset of Harness, not the full
235
257
  * canonical set (mirrors types.go's AllHarnesses doc comment). Every Harness
236
258
  * member remains individually valid and accepted by isHarness.
237
259
  */
238
- export const AllHarnesses = Object.freeze([Harness.ClaudeCode, Harness.GeminiCLI, Harness.Codex, Harness.OpenCode, Harness.Cursor]);
260
+ export const AllHarnesses = Object.freeze([Harness.ClaudeCode, Harness.GeminiCLI, Harness.Codex, Harness.OpenCode, Harness.Cursor, Harness.Strike]);
239
261
  export function isHarness(value) {
240
262
  return zHarness.safeParse(value).success;
241
263
  }
@@ -433,6 +455,24 @@ export const AllValueDomainKinds = Object.freeze([ValueDomainKind.Enumerated, Va
433
455
  export function isValueDomainKind(value) {
434
456
  return zValueDomainKind.safeParse(value).success;
435
457
  }
458
+ export const TranscriptUpdateLicense = Object.freeze({
459
+ Clear: zTranscriptUpdateLicense.parse(""),
460
+ CC0: zTranscriptUpdateLicense.parse("CC0-1.0"),
461
+ CCBY: zTranscriptUpdateLicense.parse("CC-BY-4.0"),
462
+ CCBYSA: zTranscriptUpdateLicense.parse("CC-BY-SA-4.0"),
463
+ });
464
+ export const AllTranscriptUpdateLicenses = Object.freeze([TranscriptUpdateLicense.Clear, TranscriptUpdateLicense.CC0, TranscriptUpdateLicense.CCBY, TranscriptUpdateLicense.CCBYSA]);
465
+ export function isTranscriptUpdateLicense(value) {
466
+ return zTranscriptUpdateLicense.safeParse(value).success;
467
+ }
468
+ export const TranscriptUpdateVisibility = Object.freeze({
469
+ Private: zTranscriptUpdateVisibility.parse("private"),
470
+ Public: zTranscriptUpdateVisibility.parse("public"),
471
+ });
472
+ export const AllTranscriptUpdateVisibilities = Object.freeze([TranscriptUpdateVisibility.Private, TranscriptUpdateVisibility.Public]);
473
+ export function isTranscriptUpdateVisibility(value) {
474
+ return zTranscriptUpdateVisibility.safeParse(value).success;
475
+ }
436
476
  export const Visibility = Object.freeze({
437
477
  Private: zVisibility.parse("private"),
438
478
  Group: zVisibility.parse("group"),
@@ -485,6 +485,13 @@ export interface components {
485
485
  */
486
486
  SchemaMessageType: Schema.MessageType;
487
487
  SchemaMockConfigResponse: Schema.MockConfigResponse;
488
+ /**
489
+ * Observed Model ID
490
+ * @description Exact UTF-8 model identifier observed on an assistant-generated turn; producer-enforced as assistant or subagent evidence. Values are non-empty and may not have a Unicode White_Space code point at either edge; all accepted bytes, including Unicode, mixed case, slashes, and internal spaces, are preserved.
491
+ * @example anthropic/Claude-Opus-4-8
492
+ * @example provider/Model Family
493
+ */
494
+ SchemaObservedModelID: Schema.ObservedModelID;
488
495
  /**
489
496
  * Project Hash
490
497
  * @description SHA-256 hex digest of the project's origin URL or local path
@@ -563,11 +570,13 @@ export interface components {
563
570
  /**
564
571
  * Session ID
565
572
  * Format: session-id
566
- * @description Unique session identifier (UUID, agent-{hex}, ses_{id}, sess_{id} (ACP), or msg_{id})
573
+ * @description Unique session identifier (UUID, agent-{hex}, ses_{id}, sess_{id} (ACP), msg_{id}, or a Strike session ID)
567
574
  * @example 99d59925-36bc-424c-a789-8be54d9702ba
568
575
  * @example agent-a3aee4f
569
576
  * @example ses_3cd91f52effeXd3QAJ54jOyzv5
570
577
  * @example sess_3cd91f52effeXd3QAJ54jOyzv5
578
+ * @example 20260728T123456.123456789Z-ABCDEFGHIJKLMNOPQRST234567
579
+ * @example ABCDEFGHIJKLMNOPQRST234567
571
580
  */
572
581
  SchemaSessionID: Schema.SessionID;
573
582
  SchemaSessionInsight: Schema.SessionInsight;