@wrenai/genbi 0.0.4 → 0.0.5

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.
Files changed (230) hide show
  1. package/README.md +64 -2
  2. package/dist/assets/{echarts-LTFC-ysd.js → echarts-DYM4hjvk.js} +2 -2
  3. package/dist/assets/index-A_Wrq7Ey.css +1 -0
  4. package/dist/assets/{index-Bo--QMUN.js → index-DsH129tV.js} +18 -17
  5. package/dist/index.html +2 -2
  6. package/dist-server/harness/bundle/schema.d.ts +38 -0
  7. package/dist-server/harness/bundle/schema.js +18 -10
  8. package/dist-server/harness/bundle/version.js +1 -1
  9. package/dist-server/harness/cli-args.d.ts +10 -2
  10. package/dist-server/harness/cli-args.js +24 -8
  11. package/dist-server/harness/cli.js +75 -9
  12. package/dist-server/harness/compile/cache.js +4 -4
  13. package/dist-server/harness/compile/compose-profile.d.ts +51 -14
  14. package/dist-server/harness/compile/compose-profile.js +85 -19
  15. package/dist-server/harness/compile/context-loader.d.ts +56 -0
  16. package/dist-server/harness/compile/context-loader.js +237 -0
  17. package/dist-server/harness/compile/errors.d.ts +19 -0
  18. package/dist-server/harness/compile/errors.js +35 -0
  19. package/dist-server/harness/compile/index.d.ts +4 -3
  20. package/dist-server/harness/compile/index.js +4 -3
  21. package/dist-server/harness/compile/pipeline.d.ts +15 -7
  22. package/dist-server/harness/compile/pipeline.js +62 -14
  23. package/dist-server/harness/compile/resolve-binary.d.ts +2 -2
  24. package/dist-server/harness/compile/resolve-binary.js +3 -3
  25. package/dist-server/harness/compile/types.d.ts +29 -0
  26. package/dist-server/harness/compile/warble-identity.d.ts +11 -0
  27. package/dist-server/harness/compile/warble-identity.js +13 -0
  28. package/dist-server/harness/components/ai-step.d.ts +4 -0
  29. package/dist-server/harness/components/ai-step.js +40 -0
  30. package/dist-server/harness/components/broker.d.ts +60 -0
  31. package/dist-server/harness/components/broker.js +117 -0
  32. package/dist-server/harness/components/capability-card.d.ts +98 -0
  33. package/dist-server/harness/components/capability-card.js +169 -0
  34. package/dist-server/harness/components/context.d.ts +2 -0
  35. package/dist-server/harness/components/context.js +30 -0
  36. package/dist-server/harness/components/display.d.ts +6 -0
  37. package/dist-server/harness/components/display.js +29 -0
  38. package/dist-server/harness/components/egress-judge.d.ts +12 -0
  39. package/dist-server/harness/components/egress-judge.js +27 -0
  40. package/dist-server/harness/components/egress.d.ts +142 -0
  41. package/dist-server/harness/components/egress.js +469 -0
  42. package/dist-server/harness/components/in-process.d.ts +7 -0
  43. package/dist-server/harness/components/in-process.js +245 -0
  44. package/dist-server/harness/components/normalize.d.ts +35 -0
  45. package/dist-server/harness/components/normalize.js +245 -0
  46. package/dist-server/harness/components/plan.d.ts +31 -0
  47. package/dist-server/harness/components/plan.js +184 -0
  48. package/dist-server/harness/components/report.d.ts +207 -0
  49. package/dist-server/harness/components/report.js +309 -0
  50. package/dist-server/harness/components/runner.d.ts +193 -0
  51. package/dist-server/harness/components/runner.js +492 -0
  52. package/dist-server/harness/components/semantic-guards.d.ts +20 -0
  53. package/dist-server/harness/components/semantic-guards.js +42 -0
  54. package/dist-server/harness/components/terminal-json.d.ts +18 -0
  55. package/dist-server/harness/components/terminal-json.js +82 -0
  56. package/dist-server/harness/components/usage.d.ts +14 -0
  57. package/dist-server/harness/components/usage.js +19 -0
  58. package/dist-server/harness/components/wren-access.d.ts +29 -0
  59. package/dist-server/harness/components/wren-access.js +233 -0
  60. package/dist-server/harness/components/zone-dry-run.d.ts +43 -0
  61. package/dist-server/harness/components/zone-dry-run.js +107 -0
  62. package/dist-server/harness/components/zone-gate.d.ts +76 -0
  63. package/dist-server/harness/components/zone-gate.js +144 -0
  64. package/dist-server/harness/events/index.d.ts +1 -1
  65. package/dist-server/harness/events/types.d.ts +52 -0
  66. package/dist-server/harness/index.d.ts +9 -2
  67. package/dist-server/harness/index.js +5 -1
  68. package/dist-server/harness/loop/executor.d.ts +1 -0
  69. package/dist-server/harness/loop/executor.js +37 -15
  70. package/dist-server/harness/npm-package-resolve.d.ts +2 -0
  71. package/dist-server/harness/npm-package-resolve.js +16 -4
  72. package/dist-server/harness/providers/adapters/openai-compatible.d.ts +13 -0
  73. package/dist-server/harness/providers/adapters/openai-compatible.js +17 -0
  74. package/dist-server/harness/providers/adapters/openai.d.ts +7 -0
  75. package/dist-server/harness/providers/adapters/openai.js +6 -0
  76. package/dist-server/harness/providers/adapters/pi-ai.d.ts +48 -0
  77. package/dist-server/harness/providers/adapters/pi-ai.js +518 -0
  78. package/dist-server/harness/providers/binding.d.ts +45 -4
  79. package/dist-server/harness/providers/binding.js +44 -8
  80. package/dist-server/harness/providers/index.d.ts +9 -3
  81. package/dist-server/harness/providers/index.js +10 -3
  82. package/dist-server/harness/providers/zone.d.ts +96 -0
  83. package/dist-server/harness/providers/zone.js +112 -0
  84. package/dist-server/harness/render/answering-query.d.ts +29 -0
  85. package/dist-server/harness/render/answering-query.js +62 -0
  86. package/dist-server/harness/render/envelope.d.ts +6 -0
  87. package/dist-server/harness/render/envelope.js +10 -3
  88. package/dist-server/harness/route/adapter-spec.d.ts +8 -9
  89. package/dist-server/harness/route/adapter-spec.js +13 -14
  90. package/dist-server/harness/route/codex-ask-events.js +2 -1
  91. package/dist-server/harness/route/codex-ask.d.ts +4 -0
  92. package/dist-server/harness/route/codex-ask.js +69 -30
  93. package/dist-server/harness/route/codex-host-query.d.ts +52 -0
  94. package/dist-server/harness/route/codex-host-query.js +191 -0
  95. package/dist-server/harness/route/codex-local-manifest.d.ts +9 -1
  96. package/dist-server/harness/route/codex-local-manifest.js +96 -15
  97. package/dist-server/harness/route/codex-wren-proxy.d.ts +33 -0
  98. package/dist-server/harness/route/codex-wren-proxy.js +227 -0
  99. package/dist-server/harness/route/describe.js +45 -6
  100. package/dist-server/harness/route/in-process.d.ts +22 -1
  101. package/dist-server/harness/route/in-process.js +54 -4
  102. package/dist-server/harness/route/route.js +5 -2
  103. package/dist-server/harness/route/types.d.ts +30 -1
  104. package/dist-server/harness/session/run.js +30 -10
  105. package/dist-server/harness/setup/runner.d.ts +2 -0
  106. package/dist-server/harness/setup/runner.js +38 -17
  107. package/dist-server/harness/setup/yaml-scalar.d.ts +23 -0
  108. package/dist-server/harness/setup/yaml-scalar.js +62 -0
  109. package/dist-server/server/adopt.js +1 -17
  110. package/dist-server/server/app.d.ts +1 -0
  111. package/dist-server/server/app.js +163 -14
  112. package/dist-server/server/auth-choice.d.ts +13 -1
  113. package/dist-server/server/auth-choice.js +66 -1
  114. package/dist-server/server/bin.js +177 -25
  115. package/dist-server/server/codex-local-grounding.d.ts +18 -0
  116. package/dist-server/server/codex-local-grounding.js +92 -0
  117. package/dist-server/server/codex-native-session.d.ts +25 -0
  118. package/dist-server/server/codex-native-session.js +1 -0
  119. package/dist-server/server/codex-runtime-composition.d.ts +34 -0
  120. package/dist-server/server/codex-runtime-composition.js +250 -0
  121. package/dist-server/server/codex-structured-ask.d.ts +23 -0
  122. package/dist-server/server/codex-structured-ask.js +102 -0
  123. package/dist-server/server/conn-config.js +4 -16
  124. package/dist-server/server/conversation-socket.d.ts +16 -0
  125. package/dist-server/server/conversation-socket.js +65 -0
  126. package/dist-server/server/db.d.ts +46 -0
  127. package/dist-server/server/db.js +88 -9
  128. package/dist-server/server/env-detect.d.ts +6 -0
  129. package/dist-server/server/env-detect.js +7 -0
  130. package/dist-server/server/fold.d.ts +22 -4
  131. package/dist-server/server/fold.js +37 -5
  132. package/dist-server/server/harness.d.ts +2 -2
  133. package/dist-server/server/harness.js +33 -7
  134. package/dist-server/server/interactive-terminal.d.ts +10 -6
  135. package/dist-server/server/interactive-terminal.js +33 -8
  136. package/dist-server/server/managed-wren-runtime.d.ts +116 -0
  137. package/dist-server/server/managed-wren-runtime.js +670 -0
  138. package/dist-server/server/native-artifacts.d.ts +23 -7
  139. package/dist-server/server/native-artifacts.js +43 -12
  140. package/dist-server/server/native-component-context.d.ts +19 -0
  141. package/dist-server/server/native-component-context.js +76 -0
  142. package/dist-server/server/native-component-preparation.d.ts +20 -0
  143. package/dist-server/server/native-component-preparation.js +129 -0
  144. package/dist-server/server/native-component-runtime.d.ts +36 -0
  145. package/dist-server/server/native-component-runtime.js +92 -0
  146. package/dist-server/server/native-components.d.ts +84 -0
  147. package/dist-server/server/native-components.js +160 -0
  148. package/dist-server/server/native-dispatch-process.d.ts +8 -0
  149. package/dist-server/server/native-dispatch-process.js +65 -0
  150. package/dist-server/server/native-runtime-spec.d.ts +89 -0
  151. package/dist-server/server/native-runtime-spec.js +169 -0
  152. package/dist-server/server/native-sessions.d.ts +172 -19
  153. package/dist-server/server/native-sessions.js +839 -244
  154. package/dist-server/server/native-shutdown.d.ts +6 -0
  155. package/dist-server/server/native-shutdown.js +28 -0
  156. package/dist-server/server/native-wren-home.d.ts +18 -0
  157. package/dist-server/server/native-wren-home.js +262 -0
  158. package/dist-server/server/node-pty-host.d.ts +2 -1
  159. package/dist-server/server/node-pty-host.js +3 -2
  160. package/dist-server/server/profile-registry.d.ts +139 -0
  161. package/dist-server/server/profile-registry.js +620 -0
  162. package/dist-server/server/runtime-binding.d.ts +4 -1
  163. package/dist-server/server/runtime-binding.js +50 -2
  164. package/dist-server/server/runtime-host/claude-component-step.d.ts +25 -0
  165. package/dist-server/server/runtime-host/claude-component-step.js +186 -0
  166. package/dist-server/server/runtime-host/codex-app-server.d.ts +75 -0
  167. package/dist-server/server/runtime-host/codex-app-server.js +239 -0
  168. package/dist-server/server/runtime-host/codex-compatibility.d.ts +110 -0
  169. package/dist-server/server/runtime-host/codex-compatibility.js +162 -0
  170. package/dist-server/server/runtime-host/codex-component-step.d.ts +19 -0
  171. package/dist-server/server/runtime-host/codex-component-step.js +308 -0
  172. package/dist-server/server/runtime-host/codex-conversation.d.ts +109 -0
  173. package/dist-server/server/runtime-host/codex-conversation.js +295 -0
  174. package/dist-server/server/runtime-host/codex-direct-tools.d.ts +23 -0
  175. package/dist-server/server/runtime-host/codex-direct-tools.js +59 -0
  176. package/dist-server/server/runtime-host/codex-events.d.ts +647 -0
  177. package/dist-server/server/runtime-host/codex-events.js +66 -0
  178. package/dist-server/server/runtime-host/codex-policy.d.ts +16 -0
  179. package/dist-server/server/runtime-host/codex-policy.js +151 -0
  180. package/dist-server/server/runtime-host/codex-process.d.ts +8 -0
  181. package/dist-server/server/runtime-host/codex-process.js +96 -0
  182. package/dist-server/server/runtime-host/codex-rpc.d.ts +47 -0
  183. package/dist-server/server/runtime-host/codex-rpc.js +182 -0
  184. package/dist-server/server/runtime-host/codex-session.d.ts +74 -0
  185. package/dist-server/server/runtime-host/codex-session.js +492 -0
  186. package/dist-server/server/runtime-host/codex-terminal-protocol.d.ts +35 -0
  187. package/dist-server/server/runtime-host/codex-terminal-protocol.js +243 -0
  188. package/dist-server/server/runtime-host/codex-terminal.d.ts +16 -0
  189. package/dist-server/server/runtime-host/codex-terminal.js +120 -0
  190. package/dist-server/server/runtime-host/index.d.ts +5 -0
  191. package/dist-server/server/runtime-host/index.js +3 -0
  192. package/dist-server/server/runtime-host/local.d.ts +29 -0
  193. package/dist-server/server/runtime-host/local.js +90 -0
  194. package/dist-server/server/runtime-host/policy.d.ts +8 -0
  195. package/dist-server/server/runtime-host/policy.js +78 -0
  196. package/dist-server/server/runtime-host/types.d.ts +52 -0
  197. package/dist-server/server/runtime-host/types.js +62 -0
  198. package/dist-server/server/structured-query-evidence.d.ts +7 -0
  199. package/dist-server/server/structured-query-evidence.js +47 -0
  200. package/dist-server/server/structured-runtime.d.ts +52 -0
  201. package/dist-server/server/structured-runtime.js +130 -0
  202. package/dist-server/server/structured-scope.d.ts +4 -0
  203. package/dist-server/server/structured-scope.js +12 -0
  204. package/dist-server/server/turn.d.ts +6 -1
  205. package/dist-server/server/turn.js +82 -25
  206. package/dist-server/server/wire-types.d.ts +67 -3
  207. package/dist-server/server/wren-profiles.js +1 -1
  208. package/managed-wren/README.md +60 -0
  209. package/managed-wren/dependency-wheels.json +282 -0
  210. package/managed-wren/manifest.json +373 -0
  211. package/managed-wren/release-inputs.json +45 -0
  212. package/managed-wren/runtime-tree.cjs +115 -0
  213. package/managed-wren/source-inputs.json +40 -0
  214. package/package.json +15 -6
  215. package/profiles/genbi-default/context/binding.yml +17 -7
  216. package/profiles/genbi-default/context/context.json +146 -0
  217. package/profiles/genbi-default/ir.golden.json +39 -43
  218. package/profiles/genbi-default/profile.yml +31 -0
  219. package/profiles/genbi-enrich-context/context/binding.yml +14 -3
  220. package/profiles/genbi-enrich-context/context/context.json +146 -0
  221. package/profiles/genbi-enrich-context/ir.golden.json +4 -5
  222. package/profiles/genbi-monitor/context/binding.yml +13 -5
  223. package/profiles/genbi-monitor/context/context.json +146 -0
  224. package/profiles/genbi-monitor/ir.golden.json +13 -7
  225. package/profiles/genbi-report/context/binding.yml +19 -0
  226. package/profiles/genbi-report/context/context.json +223 -0
  227. package/profiles/genbi-report/ir.golden.json +328 -0
  228. package/profiles/genbi-report/profile.yml +38 -0
  229. package/profiles/genbi-setup/ir.golden.json +3 -1
  230. package/dist/assets/index-Xs4q7pNo.css +0 -1
@@ -437,7 +437,7 @@ export interface SetupEnvField {
437
437
  readonly key: string;
438
438
  readonly secret: boolean;
439
439
  }
440
- export type AuthMode = "subscription" | "byo" | "local";
440
+ export type AuthMode = "subscription" | "byo" | "local" | "gateway";
441
441
  export type Deployment = "personal" | "hosted";
442
442
  export type SubscriptionProvider = "claude" | "codex";
443
443
  /** One non-sensitive model suggestion reported by the signed-in subscription provider. */
@@ -466,7 +466,7 @@ export type SubscriptionModelCatalog = {
466
466
  readonly retryable: boolean;
467
467
  };
468
468
  /** A concrete adapter selectable for an individual compiled-bundle tier. */
469
- export type RuntimeTierAdapter = "anthropic" | "openai-compatible" | "local";
469
+ export type RuntimeTierAdapter = "anthropic" | "openai-compatible" | "local" | "pi-ai";
470
470
  /** Kept as the legacy/default-runtime spelling used by the BYO auth control. */
471
471
  export type ApiKeyAdapter = "anthropic" | "openai-compatible";
472
472
  /** NOTE: unrelated to the harness's own `AdapterSpec`/`tierBinding` — this is UI-facing config only. */
@@ -492,6 +492,12 @@ export interface RuntimeSettings {
492
492
  readonly apiKeyModel?: string;
493
493
  /** Base URL override, `openai-compatible` only. Non-secret. */
494
494
  readonly apiKeyBaseURL?: string;
495
+ /** pi-ai provider id the `"gateway"` mode dispatches through (e.g. `openrouter`). Non-secret. */
496
+ readonly gatewayProvider?: string;
497
+ /** Default model id for `"gateway"` tiers without their own model. Non-secret. */
498
+ readonly gatewayModel?: string;
499
+ /** Optional custom OpenAI-compatible base URL for the `"gateway"` provider. Non-secret. */
500
+ readonly gatewayBaseURL?: string;
495
501
  /**
496
502
  * Model for the subscription dispatcher itself. This is deliberately NOT a
497
503
  * profile tier: compiled bundles own their step tiers, while subscription
@@ -499,6 +505,22 @@ export interface RuntimeSettings {
499
505
  */
500
506
  readonly subscriptionDriverModel?: string;
501
507
  }
508
+ /**
509
+ * `GET /api/harness/gateway-models`: pi-ai's offline built-in catalog for the
510
+ * gateway wizard. `unavailable` when the optional pi-ai dependency is not
511
+ * installed; the wizard then falls back to free-text ids.
512
+ */
513
+ export type GatewayModelCatalog = {
514
+ readonly status: "ready";
515
+ readonly providers: readonly string[];
516
+ readonly models: readonly {
517
+ readonly model: string;
518
+ readonly displayName: string;
519
+ }[];
520
+ } | {
521
+ readonly status: "unavailable";
522
+ readonly reason: string;
523
+ };
502
524
  /** Login availability only. No credential contents or metadata cross this boundary. */
503
525
  export interface SubscriptionLoginStatus {
504
526
  readonly claude: boolean;
@@ -532,6 +554,8 @@ export type RuntimeSettingsReadiness = {
532
554
  export interface AdapterEnvStatus {
533
555
  readonly anthropic: boolean;
534
556
  readonly openaiCompatible: boolean;
557
+ /** `GENBI_GATEWAY_API_KEY`, the credential `"gateway"` mode sends to its pi-ai provider. */
558
+ readonly gateway?: boolean;
535
559
  }
536
560
  export interface PublishedInfo {
537
561
  readonly link: string;
@@ -767,7 +791,8 @@ export interface HarnessDto {
767
791
  */
768
792
  interface HarnessPurposeBase {
769
793
  readonly purpose: "setup" | "analysis" | "context_enrichment";
770
- readonly profile: "genbi-setup" | "genbi-default" | "genbi-enrich-context";
794
+ /** A system purpose's fixed profile, or the registry id of the selected conversation profile. */
795
+ readonly profile: string;
771
796
  readonly scopeKind: "bootstrap" | "bound_project";
772
797
  readonly available: boolean;
773
798
  readonly reason?: string;
@@ -797,3 +822,42 @@ export type SseFrame = {
797
822
  readonly event: "done";
798
823
  readonly data: Record<string, never>;
799
824
  };
825
+ export interface WarbleProfileDto {
826
+ readonly id: string;
827
+ readonly kind: "builtin" | "user";
828
+ readonly role: "conversation" | "system";
829
+ readonly selectable: boolean;
830
+ readonly admission: {
831
+ readonly status: "admitted" | "unavailable";
832
+ /** Every failed admission rule, joined; absent when admitted. System profiles state their role here. */
833
+ readonly reason?: string;
834
+ readonly checkedAt: string;
835
+ };
836
+ /** How a session enters the profile — decided at admission, not by the caller. */
837
+ readonly entry?: {
838
+ readonly kind: "scope" | "agent";
839
+ readonly verb?: string;
840
+ };
841
+ readonly irVersion?: string;
842
+ readonly components: readonly {
843
+ readonly id: string;
844
+ readonly type: string;
845
+ readonly nativeEligible: boolean;
846
+ readonly hasDescription: boolean;
847
+ readonly tiers: readonly string[];
848
+ readonly capabilities: readonly string[];
849
+ /** `alias → component` edges this component's steps authorize; non-empty means it composes. */
850
+ readonly composes: readonly string[];
851
+ }[];
852
+ /** Where the registry keeps its copy; user profiles only. */
853
+ readonly sourceDir?: string;
854
+ readonly createdAt: string;
855
+ readonly updatedAt: string;
856
+ }
857
+ export interface WarbleProfileListDto {
858
+ readonly profiles: readonly WarbleProfileDto[];
859
+ }
860
+ /** `POST /api/profiles`: an absolute directory path on the BFF's machine holding a `profile.yml`. */
861
+ export interface AddWarbleProfileRequest {
862
+ readonly sourcePath: string;
863
+ }
@@ -33,7 +33,7 @@ function wrenHomeDir() {
33
33
  export function profilesFilePath() {
34
34
  return path.join(wrenHomeDir(), "profiles.yml");
35
35
  }
36
- /** Strips one layer of matching quotes — same convention as `server/adopt.ts`'s `readYamlScalarField`. */
36
+ /** Strips one layer of matching quotes — same convention as `harness/setup/yaml-scalar.ts`. */
37
37
  function unquote(raw) {
38
38
  const match = /^(['"])(.*)\1$/.exec(raw);
39
39
  return match ? match[2] : raw;
@@ -0,0 +1,60 @@
1
+ # Managed Wren release binding
2
+
3
+ This package pins the darwin-arm64 runtime published in
4
+ [managed-wren-v0.0.5](https://github.com/goldmedal/WrenAI/releases/tag/managed-wren-v0.0.5):
5
+ CPython 3.11.16 and fork Wren 0.13.0+genbi.1 with its complete 41-wheel closure.
6
+
7
+ `manifest.json` remains staged and contains an `approvedManifest` reference.
8
+ Provisioning must retrieve the exact approved release manifest with SHA-256
9
+ `d1ad640f3569d9cec3102110c18627180e22793ad644418ed9a93b475f06e33a`
10
+ and verify its release identity before installing any runtime asset. The release
11
+ contains the license inventories and `THIRD_PARTY_NOTICES.txt` reviewed for these
12
+ selected archives and wheels, including the fork source provenance.
13
+
14
+ Readiness never downloads or installs the runtime. Explicit provisioning uses a
15
+ private runtime directory, verifies every artifact, installs wheels offline, and
16
+ checks the resulting interpreter, entrypoints and complete package tree before
17
+ promotion. Later resolution rejects tampering instead of repairing it silently.
18
+
19
+ This binding does not certify or activate the Codex session backend. Runtime
20
+ installation and vendor-session readiness remain separate checks.
21
+
22
+ ## Fork source-wheel releases
23
+
24
+ The runtime input selects Wren `0.13.0+genbi.1`, built from the public fork
25
+ commit pinned in `source-inputs.json`. This is a distinct fork distribution; it
26
+ does not replace the PyPI `wrenai` package. It supplies the governed query
27
+ transport required by native component execution.
28
+
29
+ Run the source builder with Python 3.11 and a new output directory:
30
+
31
+ ```sh
32
+ python3.11 apps/genbi/scripts/managed-wren-source.py \
33
+ apps/genbi/managed-wren/source-inputs.json source-wheel-output
34
+ ```
35
+
36
+ The helper verifies the source archive and every build-tool wheel by SHA-256,
37
+ builds with an isolated environment and fixed timestamps, and emits the wheel
38
+ and `source-provenance.json`. It changes only the package version and includes
39
+ the repository distribution license. Before publication, rebuild into another
40
+ directory and require identical wheel and receipt hashes. Publish those exact
41
+ files as a separate immutable source-wheel release in `goldmedal/WrenAI`, with
42
+ the source commit as the tag target. Source-wheel publication requires review
43
+ and release authorization; the builder itself never publishes.
44
+
45
+ `release-inputs.json` binds that wheel and its source receipt by hash. The
46
+ runtime staging job verifies the receipt against `source-inputs.json`, then
47
+ uses the exact existing dependency closure in `dependency-wheels.json`.
48
+ Dependency wheels still require matching PyPI source metadata. It verifies
49
+ the installed closure and the governed CLI entrypoint before producing a
50
+ candidate. A source-wheel release alone cannot activate a runtime.
51
+
52
+ The unchanged CPython redistribution review and notices are reused only by
53
+ their pinned hashes and exact Python archive identity. Notices from the selected
54
+ Wren wheel are appended. Approval covers the concatenated bytes of the candidate
55
+ manifest, Python license inventory, wheel license inventory, and
56
+ `THIRD_PARTY_NOTICES.txt`, in that order. The protected publication job requires
57
+ that digest, re-fetches the exact selected assets, and creates a new runtime
58
+ release. It never overwrites an existing tag or asset. GenBI's installed binding
59
+ pins the approved manifest above; changing the runtime requires a separately
60
+ verified new manifest anchor.
@@ -0,0 +1,282 @@
1
+ [
2
+ {
3
+ "filename": "annotated_doc-0.0.5-py3-none-any.whl",
4
+ "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101",
5
+ "distribution": "annotated_doc",
6
+ "version": "0.0.5",
7
+ "sourceUrl": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl"
8
+ },
9
+ {
10
+ "filename": "annotated_types-0.8.0-py3-none-any.whl",
11
+ "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0",
12
+ "distribution": "annotated_types",
13
+ "version": "0.8.0",
14
+ "sourceUrl": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl"
15
+ },
16
+ {
17
+ "filename": "boto3-1.43.101-py3-none-any.whl",
18
+ "sha256": "8a899b0ea94df3f2fab6d0c69caf2791f2971449696834374d8e88ced01c7ef3",
19
+ "distribution": "boto3",
20
+ "version": "1.43.101",
21
+ "sourceUrl": "https://files.pythonhosted.org/packages/d7/73/8dd65374f88b1b2a33656d9c808dc36aef0cb4a22c74d618ba6fe0092cd2/boto3-1.43.101-py3-none-any.whl"
22
+ },
23
+ {
24
+ "filename": "botocore-1.43.101-py3-none-any.whl",
25
+ "sha256": "f380237ffecc3f887265cd09c4d7e9c8e8dd9ba6162af83b1fc9e5d24622e461",
26
+ "distribution": "botocore",
27
+ "version": "1.43.101",
28
+ "sourceUrl": "https://files.pythonhosted.org/packages/dd/0d/6679253333d6ba74b8ad7077560687096629255ef526e106bb3accceffcc/botocore-1.43.101-py3-none-any.whl"
29
+ },
30
+ {
31
+ "filename": "certifi-2026.7.22-py3-none-any.whl",
32
+ "sha256": "62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775",
33
+ "distribution": "certifi",
34
+ "version": "2026.7.22",
35
+ "sourceUrl": "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl"
36
+ },
37
+ {
38
+ "filename": "cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl",
39
+ "sha256": "398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1",
40
+ "distribution": "cffi",
41
+ "version": "2.1.1",
42
+ "sourceUrl": "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl"
43
+ },
44
+ {
45
+ "filename": "charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl",
46
+ "sha256": "eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30",
47
+ "distribution": "charset_normalizer",
48
+ "version": "3.5.1",
49
+ "sourceUrl": "https://files.pythonhosted.org/packages/6a/b6/034f6802e9c3f6418966cfabb7db8c9252cc2429c5098f41cc43af804149/charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl"
50
+ },
51
+ {
52
+ "filename": "cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl",
53
+ "sha256": "b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986",
54
+ "distribution": "cryptography",
55
+ "version": "50.0.1",
56
+ "sourceUrl": "https://files.pythonhosted.org/packages/ba/19/797e2aaac9df6a66f1550f49979dc1b1e39ecd2077501c30efa81e8d5d67/cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl"
57
+ },
58
+ {
59
+ "filename": "duckdb-1.5.5-cp311-cp311-macosx_11_0_arm64.whl",
60
+ "sha256": "0c42757cb34722144bd4dfb94b6f336339e7b2468f6813fa7fa9a319ba07bab4",
61
+ "distribution": "duckdb",
62
+ "version": "1.5.5",
63
+ "sourceUrl": "https://files.pythonhosted.org/packages/46/59/a8e3384ee916e00d5dcf985194c1511d61978540778a1e96fa47f9fb3e0d/duckdb-1.5.5-cp311-cp311-macosx_11_0_arm64.whl"
64
+ },
65
+ {
66
+ "filename": "idna-3.20-py3-none-any.whl",
67
+ "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c",
68
+ "distribution": "idna",
69
+ "version": "3.20",
70
+ "sourceUrl": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl"
71
+ },
72
+ {
73
+ "filename": "jmespath-1.1.0-py3-none-any.whl",
74
+ "sha256": "a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64",
75
+ "distribution": "jmespath",
76
+ "version": "1.1.0",
77
+ "sourceUrl": "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl"
78
+ },
79
+ {
80
+ "filename": "loguru-0.7.3-py3-none-any.whl",
81
+ "sha256": "31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c",
82
+ "distribution": "loguru",
83
+ "version": "0.7.3",
84
+ "sourceUrl": "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl"
85
+ },
86
+ {
87
+ "filename": "lxml-6.1.3-cp311-cp311-macosx_10_9_universal2.whl",
88
+ "sha256": "c66f858b82497173f73366795fc6ee8171620e75a338506d6b2e7bc16f5fca11",
89
+ "distribution": "lxml",
90
+ "version": "6.1.3",
91
+ "sourceUrl": "https://files.pythonhosted.org/packages/96/f1/95133bde7af7afb1f5ba6090b674d826b7a518318bba54bbbb633b27865a/lxml-6.1.3-cp311-cp311-macosx_10_9_universal2.whl"
92
+ },
93
+ {
94
+ "filename": "markdown_it_py-4.2.0-py3-none-any.whl",
95
+ "sha256": "9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a",
96
+ "distribution": "markdown_it_py",
97
+ "version": "4.2.0",
98
+ "sourceUrl": "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl"
99
+ },
100
+ {
101
+ "filename": "mdurl-0.1.2-py3-none-any.whl",
102
+ "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8",
103
+ "distribution": "mdurl",
104
+ "version": "0.1.2",
105
+ "sourceUrl": "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl"
106
+ },
107
+ {
108
+ "filename": "numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl",
109
+ "sha256": "110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d",
110
+ "distribution": "numpy",
111
+ "version": "2.4.6",
112
+ "sourceUrl": "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl"
113
+ },
114
+ {
115
+ "filename": "opendal-0.47.10-cp311-abi3-macosx_11_0_arm64.whl",
116
+ "sha256": "3b6d7ad0f2c24b8a0b27f637a35bd63685d657635eca7fe37f80505fd6d3cc7f",
117
+ "distribution": "opendal",
118
+ "version": "0.47.10",
119
+ "sourceUrl": "https://files.pythonhosted.org/packages/93/9f/c4f5a6294b59886c911cc11d0b79af86a3768256ceb21d24bf6850f08794/opendal-0.47.10-cp311-abi3-macosx_11_0_arm64.whl"
120
+ },
121
+ {
122
+ "filename": "pandas-3.0.6-cp311-cp311-macosx_11_0_arm64.whl",
123
+ "sha256": "d7564d86a94c2eb8ab290b07f63ddaae5c032fa53897c29a2ff2197d43aee8af",
124
+ "distribution": "pandas",
125
+ "version": "3.0.6",
126
+ "sourceUrl": "https://files.pythonhosted.org/packages/55/a6/39db5d41f3eb5d7846626312cb30e0cea48e988fc47a3725698bc931ad3c/pandas-3.0.6-cp311-cp311-macosx_11_0_arm64.whl"
127
+ },
128
+ {
129
+ "filename": "pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl",
130
+ "sha256": "2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3",
131
+ "distribution": "pyarrow",
132
+ "version": "17.0.0",
133
+ "sourceUrl": "https://files.pythonhosted.org/packages/8d/8e/ce2e9b2146de422f6638333c01903140e9ada244a2a477918a368306c64c/pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl"
134
+ },
135
+ {
136
+ "filename": "pyarrow_hotfix-0.7-py3-none-any.whl",
137
+ "sha256": "3236f3b5f1260f0e2ac070a55c1a7b339c4bb7267839bd2015e283234e758100",
138
+ "distribution": "pyarrow_hotfix",
139
+ "version": "0.7",
140
+ "sourceUrl": "https://files.pythonhosted.org/packages/2e/c3/94ade4906a2f88bc935772f59c934013b4205e773bcb4239db114a6da136/pyarrow_hotfix-0.7-py3-none-any.whl"
141
+ },
142
+ {
143
+ "filename": "pyasn1-0.6.4-py3-none-any.whl",
144
+ "sha256": "deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b",
145
+ "distribution": "pyasn1",
146
+ "version": "0.6.4",
147
+ "sourceUrl": "https://files.pythonhosted.org/packages/9a/3b/6163796d69c3977d1e4287bea4a6979161cbbdd170ebb430511e8e1999ce/pyasn1-0.6.4-py3-none-any.whl"
148
+ },
149
+ {
150
+ "filename": "pycparser-3.0-py3-none-any.whl",
151
+ "sha256": "b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992",
152
+ "distribution": "pycparser",
153
+ "version": "3.0",
154
+ "sourceUrl": "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl"
155
+ },
156
+ {
157
+ "filename": "pydantic-2.13.5-py3-none-any.whl",
158
+ "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73",
159
+ "distribution": "pydantic",
160
+ "version": "2.13.5",
161
+ "sourceUrl": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl"
162
+ },
163
+ {
164
+ "filename": "pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl",
165
+ "sha256": "d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f",
166
+ "distribution": "pydantic_core",
167
+ "version": "2.46.5",
168
+ "sourceUrl": "https://files.pythonhosted.org/packages/0c/18/b70da8300e292df4099684ea11b1958043580d2f50d2dc8bf7e542bdd84a/pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl"
169
+ },
170
+ {
171
+ "filename": "pygments-2.21.0-py3-none-any.whl",
172
+ "sha256": "2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9",
173
+ "distribution": "pygments",
174
+ "version": "2.21.0",
175
+ "sourceUrl": "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl"
176
+ },
177
+ {
178
+ "filename": "pyopenssl-26.4.0-py3-none-any.whl",
179
+ "sha256": "f0eb0cb2d581d3ad2b9c489468485e7f2ab6727d08401bcf9d824c3caddf3c1c",
180
+ "distribution": "pyopenssl",
181
+ "version": "26.4.0",
182
+ "sourceUrl": "https://files.pythonhosted.org/packages/51/ad/2cf6d3fa2fae5c79e1ed9960c0d42badd0f94d81dd12b50604cdc839e648/pyopenssl-26.4.0-py3-none-any.whl"
183
+ },
184
+ {
185
+ "filename": "python_dateutil-2.9.0.post0-py2.py3-none-any.whl",
186
+ "sha256": "a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427",
187
+ "distribution": "python_dateutil",
188
+ "version": "2.9.0.post0",
189
+ "sourceUrl": "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl"
190
+ },
191
+ {
192
+ "filename": "python_dotenv-1.2.3-py3-none-any.whl",
193
+ "sha256": "904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9",
194
+ "distribution": "python_dotenv",
195
+ "version": "1.2.3",
196
+ "sourceUrl": "https://files.pythonhosted.org/packages/0d/17/c5c6b53ddc18f297992099b3d9ec16c855c0ccc83263a21fe4d1c625ec6c/python_dotenv-1.2.3-py3-none-any.whl"
197
+ },
198
+ {
199
+ "filename": "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl",
200
+ "sha256": "652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824",
201
+ "distribution": "pyyaml",
202
+ "version": "6.0.3",
203
+ "sourceUrl": "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl"
204
+ },
205
+ {
206
+ "filename": "requests-2.34.2-py3-none-any.whl",
207
+ "sha256": "2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0",
208
+ "distribution": "requests",
209
+ "version": "2.34.2",
210
+ "sourceUrl": "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl"
211
+ },
212
+ {
213
+ "filename": "rich-15.0.0-py3-none-any.whl",
214
+ "sha256": "33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb",
215
+ "distribution": "rich",
216
+ "version": "15.0.0",
217
+ "sourceUrl": "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl"
218
+ },
219
+ {
220
+ "filename": "s3transfer-0.19.2-py3-none-any.whl",
221
+ "sha256": "d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25",
222
+ "distribution": "s3transfer",
223
+ "version": "0.19.2",
224
+ "sourceUrl": "https://files.pythonhosted.org/packages/bc/e7/5c595c75e9f41a44f30e526eda465ea0b4eec93470e074e4a111b253f13a/s3transfer-0.19.2-py3-none-any.whl"
225
+ },
226
+ {
227
+ "filename": "shellingham-1.5.4-py2.py3-none-any.whl",
228
+ "sha256": "7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686",
229
+ "distribution": "shellingham",
230
+ "version": "1.5.4",
231
+ "sourceUrl": "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl"
232
+ },
233
+ {
234
+ "filename": "six-1.17.0-py2.py3-none-any.whl",
235
+ "sha256": "4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
236
+ "distribution": "six",
237
+ "version": "1.17.0",
238
+ "sourceUrl": "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl"
239
+ },
240
+ {
241
+ "filename": "sqlglot-30.19.0-py3-none-any.whl",
242
+ "sha256": "b4500fcced395359feea582f09d2d4433bf1f36362a3a9d0d6d5ebbc1f84242e",
243
+ "distribution": "sqlglot",
244
+ "version": "30.19.0",
245
+ "sourceUrl": "https://files.pythonhosted.org/packages/10/94/094d83ec808b50374f33a3024c9e60ca3074595e1f9581c1692591fda81e/sqlglot-30.19.0-py3-none-any.whl"
246
+ },
247
+ {
248
+ "filename": "typer-0.27.2-py3-none-any.whl",
249
+ "sha256": "b3a5fc4342d5fc8fda8fc3010b1cf117e9249aab7fae800c2eff62fd3842d97d",
250
+ "distribution": "typer",
251
+ "version": "0.27.2",
252
+ "sourceUrl": "https://files.pythonhosted.org/packages/dc/bf/205d0004930ede8f542fb58f601526fccf4ae7626075ca1e6c4de5d3d652/typer-0.27.2-py3-none-any.whl"
253
+ },
254
+ {
255
+ "filename": "typing_extensions-4.16.0-py3-none-any.whl",
256
+ "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8",
257
+ "distribution": "typing_extensions",
258
+ "version": "4.16.0",
259
+ "sourceUrl": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl"
260
+ },
261
+ {
262
+ "filename": "typing_inspection-0.4.4-py3-none-any.whl",
263
+ "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147",
264
+ "distribution": "typing_inspection",
265
+ "version": "0.4.4",
266
+ "sourceUrl": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl"
267
+ },
268
+ {
269
+ "filename": "urllib3-2.8.0-py3-none-any.whl",
270
+ "sha256": "0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3",
271
+ "distribution": "urllib3",
272
+ "version": "2.8.0",
273
+ "sourceUrl": "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl"
274
+ },
275
+ {
276
+ "filename": "wren_core_py-0.8.0-cp311-abi3-macosx_11_0_arm64.whl",
277
+ "sha256": "bd020d7d99d454bc813855954e31b02d9ede8dc55a71555ca5c5701f115d6128",
278
+ "distribution": "wren_core_py",
279
+ "version": "0.8.0",
280
+ "sourceUrl": "https://files.pythonhosted.org/packages/b1/61/0d13ba6faa913bb2a0fda179ee2da12e0366a0a4e4d6d15415a89065ace5/wren_core_py-0.8.0-cp311-abi3-macosx_11_0_arm64.whl"
281
+ }
282
+ ]