Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
# CLI / local LLM provider keys (openai-http backend, quality:live harness)
# Lookup order: PATINA_API_KEY first, then the provider-specific key
# (src/auth.js HTTP_KEY_ENV_VARS). `--provider <name>` presets live in
# src/providers.js: openai, gemini, groq, kimi, moonshot, together.
# src/providers.js: openai, gemini, groq, kimi, moonshot, together,
# minimax, minimax-cn.
# ---------------------------------------------------------------------------
# PATINA_API_KEY= # generic key, wins over provider-specific vars
# OPENAI_API_KEY= # default openai-http backend (gpt-5.5)
Expand All @@ -14,6 +15,7 @@
# TOGETHER_API_KEY= # --provider together
# KIMI_API_KEY= # --provider kimi (kimi-k2.5, api.moonshot.ai)
# MOONSHOT_API_KEY= # --provider moonshot (same endpoint as kimi)
# MINIMAX_API_KEY= # --provider minimax or minimax-cn (MiniMax-M3)
# PATINA_API_KEY_FILE= # or read any key from a file (recommended for CI)

# Local subscription CLIs (claude / codex / gemini / kimi) need no key here —
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ All notable changes to patina. Dates are release dates (YYYY-MM-DD).
Semver rationale: patch | minor | major — explain whether this changes patterns, schemas, CLI behavior, or docs only.
```

## Unreleased

### Added

- MiniMax provider presets for the CLI: `--provider minimax` (global, `api.minimax.io`) and `--provider minimax-cn` (China, `api.minimaxi.com`), both defaulting to `MiniMax-M3` on the shared `MINIMAX_API_KEY`. Reimplements community PR #667 by @octo-patch on the current codebase.

## 7.0.0 — 2026-08-04

**Removes the retired iterative rewrite product contract, gives scoring and verification settings neutral ownership, and preserves the comparator only as unsupported research.**
Expand Down
22 changes: 19 additions & 3 deletions docs/operations/v6.4-preflight-hold.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,28 @@
"defaultModel": "meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",
"freeTier": true,
"note": "Free models available (suffix \"-Free\"). Get a key at https://api.together.xyz/settings/api-keys"
},
"minimax": {
"name": "minimax",
"baseURL": "https://api.minimax.io/v1",
"apiKeyEnv": "MINIMAX_API_KEY",
"defaultModel": "MiniMax-M3",
"freeTier": false,
"note": "MiniMax global OpenAI-compatible API. Set MINIMAX_API_KEY or PATINA_API_KEY."
},
"minimax-cn": {
"name": "minimax-cn",
"baseURL": "https://api.minimaxi.com/v1",
"apiKeyEnv": "MINIMAX_API_KEY",
"defaultModel": "MiniMax-M3",
"freeTier": false,
"note": "MiniMax China OpenAI-compatible API. Set MINIMAX_API_KEY or PATINA_API_KEY."
}
},
"sourceHashes": {
".env.example": "29b1cdc48b5c14ed0c84716ad9ca42ba23001b9f40f99efb78c2c368180e7e5a",
".env.example": "9bd63e3d6caeb2fb9e94639145ab876ac3b79c63c6e8e7509cdb7fb07ef30132",
"src/model-defaults.js": "c568977fcac8ea44d5387a8a8745b062675ec94d73d39ce528c492ad35f87176",
"src/providers.js": "92415eacaf87da2d0f2aed7db97feeb98b8b087adfe584a02c4478353b807d90",
"src/providers.js": "04c3c38f9a3a867eb632670cd5cf28f1d7b45d910eb6993a807dfdc6a4866d36",
"src/web-rewrite-contract.js": "be433e8260e452028eb53b5c1aed0935a4150cd669ec2d5e826302219df22b9a",
"playground/launch-config.js": "4d19fc8ce36651f73f94d80bbcd108a2ccbb50fa3fc25b54d75f193b42ac6bf4",
"vercel.json": "37a54c0850db54e80eec963c570d4b8a047fcfb4bf56d1a133e5a3934b28260e",
Expand All @@ -151,7 +167,7 @@
"docs/operations/pay-b-binding-20260723.json": "96eb8e0aba9fcb4ce67dd356bd35aaf678d8abea96a7ec134218eab7cd20f132",
"docs/operations/pay-b-binding-polar-20260729.json": "471c9035a04ce5c2c76d7e5b4d595054191d513fa007455a02c9b123d0811ac5",
"docs/operations/pay-live-runtime-polar-20260729.json": "384912dca4576f1c3f8d653f39c3d9a8cb19f8f8acc1a91ac2bc36fdf10e7a9c",
"tests/e2e/providers.test.js": "47958be678e9bbfd06bcdd849ec0df37ed765f886e245b7b528e7d596b6d9dfe",
"tests/e2e/providers.test.js": "837177c5c73b46f29ce93c8dbdf6ca51045d9958ff5ea9ffcff8fcdaa869ad27",
"tests/unit/backend-model-defaults.test.js": "908dd9b06a9d5305ad28b50007d6428435b0b6b7019d6a2210aff813bfb9cf3d",
"tests/unit/web-deploy-invariants.test.js": "2aecb9068c04999eaf964766cdc1e0c3a551f58ecfa54a0ade8802f1b8f4f296",
"tests/unit/web-rewrite-contract.test.js": "2980f555bb53e7c8d93a74d60dc096adadfd1c7d07fd70f55de1670959219c13",
Expand Down
12 changes: 8 additions & 4 deletions playground/chatgpt.css
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,15 @@ a { color: inherit; }
.nav__links { display: flex; align-items: center; gap: 20px; margin-left: 14px; }
.nav__links a { font-size: 15px; color: var(--text-dim); text-decoration: none; }
.nav__links a:hover { color: var(--text); }
.nav__end { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.nav__end { margin-left: auto; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; justify-content: flex-end; row-gap: 8px; }
.nav__byok { flex-basis: 100%; display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; margin-top: 2px; }
.nav__byok[hidden] { display: none; }
.nav__pro { flex-basis: 100%; display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; margin-top: 2px; }
.nav__pro[hidden] { display: none; }

.ctl { display: flex; align-items: center; gap: 6px; }
.ctl[hidden] { display: none; }
.ctl__label { font-size: 11px; color: var(--text-faint); text-transform: uppercase; letter-spacing: .04em; }
.ctl__label { font-size: 11px; color: var(--text-faint); text-transform: uppercase; letter-spacing: .04em; white-space: nowrap; }
.ctl__select, .ctl__input {
background: var(--bg-elev); color: var(--text);
border: 1px solid var(--border); border-radius: 8px;
Expand All @@ -104,8 +104,6 @@ a { color: inherit; }
padding: 8px 16px; border-radius: 9999px; font-size: 14px; font-family: inherit;
text-decoration: none; cursor: pointer; border: 1px solid transparent;
}
.btn--gh { background: #ffffff; color: #0d1117; border-color: #ffffff; box-shadow: var(--inset); }
.btn--gh:hover { opacity: .88; }
.btn--ghost { background: transparent; color: var(--text); border-color: var(--border-strong); }

/* ───────── landing ───────── */
Expand Down Expand Up @@ -458,6 +456,12 @@ details.foldout > summary:focus-visible,
}

/* ───────── responsive ───────── */

/* Mid widths: drop the whole control cluster onto its own row instead of
letting a single trailing select orphan-wrap next to the nav links. */
@media (max-width: 1180px) {
.nav__end { flex-basis: 100%; justify-content: flex-start; }
}
@media (max-width: 900px) {
/* Keep Docs/Examples/Benchmark/Ethics reachable on small screens: instead of
hiding the links, wrap them onto their own full-width scrollable row. */
Expand Down
4 changes: 0 additions & 4 deletions playground/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,6 @@
<option value="pro">Pro</option>
</select>
</label>
<a class="btn btn--gh" href="https://github.com/devswha/patina" aria-label="patina on GitHub">
<svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path fill="currentColor" fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.6 7.6 0 0 1 2-.27c.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg>
<span>GitHub</span>
</a>
</div>
<div class="nav__byok" id="byok-row" hidden>
<label class="ctl ctl--byok" id="provider-ctl">
Expand Down
26 changes: 13 additions & 13 deletions scripts/check-retired-concepts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ const RETIRED_TERM = ['ouro', 'boros'].join('');
const ARCHIVE_PREFIXES = ['.gjc/', '.insane-review/'];
const HISTORICAL_EXPECTATIONS = new Map([
['CHANGELOG.md', new Map([
['a1aa4b471c432c2582586204d20566967533254171fbbd790a9da36a81412086', [234]],
['d82c21439e957bf40f694b896d8eadd49a433fb66af9cca49495111604b69d75', [236]],
['83f5e36d2ba73ed824cfec62e9f8fb72e569f26f3ab6c42604d1ef34f5b98e9b', [251]],
['0e80229112d7d40105c64406604dbcd0312d5ae370ec871fa3258bb787af7bd1', [257]],
['0bd7e2489f54e1e87a3efaae8e38df5c1a2878fa438c5f13775fc24b551440c7', [277]],
['aa223b28b35c246b21ff99d20281bfa980bf01820845308948311c81e98a0de9', [282]],
['12016238717b99f22a55d26b490943b50f82aef4a7ab27b6d662a1cdc5094dda', [331]],
['af36a82757b517832706c84fc3d2b7dc93915243d8ce7b6ee80d65ecfdb6f31c', [340]],
['51baf38ef6a43340c026a25e627e1544c70fc2c1dd99da3500ff2f11d8732e56', [345]],
['61ff8778bd3e54e59a01636618c1de3c7d42659eb513a6385e71e161ec944c87', [355]],
['272cba65bd46320ff28f5344fb3844c4b4ba08a95064db0009efd6bc145c2557', [403]],
['45be57ebe8b5ba976d59551aef7c201a4205c4f86c1cf7952f15d3697b48d664', [406]],
['226653d656455e6c74f4ae6216209470f05942ec9c0a275d1639a44d09bd0385', [699]],
['a1aa4b471c432c2582586204d20566967533254171fbbd790a9da36a81412086', [240]],
['d82c21439e957bf40f694b896d8eadd49a433fb66af9cca49495111604b69d75', [242]],
['83f5e36d2ba73ed824cfec62e9f8fb72e569f26f3ab6c42604d1ef34f5b98e9b', [257]],
['0e80229112d7d40105c64406604dbcd0312d5ae370ec871fa3258bb787af7bd1', [263]],
['0bd7e2489f54e1e87a3efaae8e38df5c1a2878fa438c5f13775fc24b551440c7', [283]],
['aa223b28b35c246b21ff99d20281bfa980bf01820845308948311c81e98a0de9', [288]],
['12016238717b99f22a55d26b490943b50f82aef4a7ab27b6d662a1cdc5094dda', [337]],
['af36a82757b517832706c84fc3d2b7dc93915243d8ce7b6ee80d65ecfdb6f31c', [346]],
['51baf38ef6a43340c026a25e627e1544c70fc2c1dd99da3500ff2f11d8732e56', [351]],
['61ff8778bd3e54e59a01636618c1de3c7d42659eb513a6385e71e161ec944c87', [361]],
['272cba65bd46320ff28f5344fb3844c4b4ba08a95064db0009efd6bc145c2557', [409]],
['45be57ebe8b5ba976d59551aef7c201a4205c4f86c1cf7952f15d3697b48d664', [412]],
['226653d656455e6c74f4ae6216209470f05942ec9c0a275d1639a44d09bd0385', [705]],
])],
['docs/audits/2026-05-deep-research.md', new Map([
['01a421a811703d5a24ad69214cff6cef7739ce301d718e1ad57268062a41abb5', [269]],
Expand Down
2 changes: 1 addition & 1 deletion scripts/check-v6.4-preflight-hold.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const REQUIRED_BLOCKERS = [['POLAR_APPROVAL', 'Polar Approval Owner', 'Immutable
const REQUIRED_DECISIONS = [['GATE_C_OPENAI_HTTP_NO_PROMOTION', 'HOLD_NO_PROMOTION'], ['GATE_C_CODEX_CLI_NO_PROMOTION', 'HOLD_NO_PROMOTION'], ['GATE_C_CLAUDE_CLI_NO_PROMOTION', 'HOLD_NO_PROMOTION'], ['GATE_C_GEMINI_HTTP_NO_PROMOTION', 'HOLD_NO_PROMOTION'], ['GATE_C_GEMINI_CLI_NO_PROMOTION', 'HOLD_NO_PROMOTION'], ['PAY_STG_SUPERSEDED_BY_PRODUCTION_RUNTIME', 'SUPERSEDED'], ['PAY_B_BINDING_APPROVAL', 'COMPLETED'], ['SOURCE_BINDING_PRODUCTION_INTEGRATION', 'COMPLETED'], ['PAY_LIVE_RUNTIME_ZERO_AMOUNT_SMOKE', 'COMPLETED']];
const REQUIRED_DEFERRED_ACTIONS = [['V6_4_METADATA_COPY_RECONCILIATION', ['GATE_B'], 'Cannot reconcile 6.4 metadata and copy until Gate B evidence exists; Gate-C no-promotion cutoff decisions are complete.', false], ['FINAL_TAG_PUBLISH_COMMAND', ['PAY_LIVE', 'REL_PUBLISH'], 'Cannot run the final tag and publish command until named external evidence exists.', false]];
const FROZEN_SEMANTICS = Object.freeze({ manifestVersion: 4, providers: Object.fromEntries(Object.entries(PROVIDERS).map(([key, provider]) => [key, Object.fromEntries(['name', 'baseURL', 'apiKeyEnv', 'defaultModel', 'freeTier', 'note'].map((field) => [field, provider[field]]))])), sourceHashes: {
'.env.example': '29b1cdc48b5c14ed0c84716ad9ca42ba23001b9f40f99efb78c2c368180e7e5a', 'src/model-defaults.js': 'c568977fcac8ea44d5387a8a8745b062675ec94d73d39ce528c492ad35f87176', 'src/providers.js': '92415eacaf87da2d0f2aed7db97feeb98b8b087adfe584a02c4478353b807d90', 'src/web-rewrite-contract.js': 'be433e8260e452028eb53b5c1aed0935a4150cd669ec2d5e826302219df22b9a', 'playground/launch-config.js': '4d19fc8ce36651f73f94d80bbcd108a2ccbb50fa3fc25b54d75f193b42ac6bf4', 'vercel.json': '37a54c0850db54e80eec963c570d4b8a047fcfb4bf56d1a133e5a3934b28260e', 'scripts/checkout-evidence-bindings.mjs': '767c832fe4b517824e06fa7e18d6dd777e6525831dcfaa2022e51a4c8f27c07c', 'scripts/generate-launch-config.mjs': 'c5047625479bc687c510b6faf5045cf6118359ba978d219cea834325de5e8a07', 'scripts/check-v6.4-release-ready.mjs': 'fc4521db8f4677e03ac6a2199a86917b6332033030a9e8fe248cd166b0a59313', 'docs/AUTHENTICATION.md': 'e8c335550c4a0f0b144b79f4286d467a968962821a1c88049f1e679810751cfe', 'docs/AUTHENTICATION_KR.md': '5e077cd3a13c2299a11fc831c8303a204880c91dd0d465148d34a435dbe00796', 'docs/operations/pro-launch.md': '50448491ce0b745eb2bfe07983238a6e727466de0f71c72b7cbc4a9c447068ff', 'docs/operations/pay-stg-binding-20260716.json': '2f523259de91f640f056fe7acfe00264e493d9891b7a61152fe5e91704c0ecdf', 'docs/operations/pay-stg-runtime-20260716.json': 'b0229e892b06e1ec303a001c1317c4c63fc3c98fd7e10243e64db07df4803d29', 'docs/operations/pay-b-binding-20260723.json': '96eb8e0aba9fcb4ce67dd356bd35aaf678d8abea96a7ec134218eab7cd20f132', 'docs/operations/pay-b-binding-polar-20260729.json': '471c9035a04ce5c2c76d7e5b4d595054191d513fa007455a02c9b123d0811ac5', 'docs/operations/pay-live-runtime-polar-20260729.json': '384912dca4576f1c3f8d653f39c3d9a8cb19f8f8acc1a91ac2bc36fdf10e7a9c', 'tests/e2e/providers.test.js': '47958be678e9bbfd06bcdd849ec0df37ed765f886e245b7b528e7d596b6d9dfe', 'tests/unit/backend-model-defaults.test.js': '908dd9b06a9d5305ad28b50007d6428435b0b6b7019d6a2210aff813bfb9cf3d', 'tests/unit/web-deploy-invariants.test.js': '2aecb9068c04999eaf964766cdc1e0c3a551f58ecfa54a0ade8802f1b8f4f296', 'tests/unit/web-rewrite-contract.test.js': '2980f555bb53e7c8d93a74d60dc096adadfd1c7d07fd70f55de1670959219c13', 'tests/unit/web-rewrite-contract.redteam.test.js': '3c7591926e168b14f486199297fd1e84ed447c1b8d339c9b4860f79da0f6a7bb', 'tests/unit/v6.4-preflight-hold.test.js': 'c5f8a3465576dff5a94f07dd8eaac741d1e0e5006b7076fe9884204eb7a0c7a8', 'tests/unit/v6.4-release-ready.test.js': '8d88aab35ce75bc40b4782932329c0402001afabc380ac349ccc1b82d01c12d7', 'package.json': '6712053362194ab947aa10de4f7772bfa23ae6db97dc5a912e05763c4e3a2dc3', 'package-lock.json': '3d4b2573cd3a273d766a01a6ea2245b2528a9149ae75fdda9bb977bfd5af69a1', '.github/workflows/release.yml': '43900a0966a52c500d54b1971d4141fe2d380a893364b4cb7b9976e9e3795f8f', 'README.md': '78829adef9bc233a2dc0003ea022281ce483cb958daeef01a073361e31ce8f11', 'README_KR.md': 'ebac4f175b399a081d4c4a2b92fcc0708f1e85976d8da869f0f9b608046cfd59', 'README_ZH.md': '66076f5870bf806310b4516db0c260037f7b2684c3234b291660593f744a8ec0', 'README_JA.md': 'bd71aa30bd9eca7b1f4520f4fb609585f40ccbf78d9c0ba29d29c7364c869c44', 'SKILL.md': '3b7dc62f22c1feb9178d49a47e78bfa60fe94ea314d7132a99dcc6c9b231a4c5', '.patina.default.yaml': '308311b43add43e9d0e40bdfcdf65823337f12357e50366ce0fb8b07cfd76885', 'packages/patina-humanizer/package.json': 'fc9b27a4c97965d17b18492999f7018f34819806d63d626eeb428f6dd0834c63', '.claude-plugin/plugin.json': '7a5df3e87832d22821e7d1fafed76e125b33a02d5550e46fa73e7aa9073d2325', '.claude-plugin/marketplace.json': 'c500dfec67c40f4c2acb6de3efc5c60631e8e82ff961311a09609fe37e806e2d', 'CHANGELOG.md': 'dfc4fb1f70ca873ca1bf44b3949374d43018fc673b98212e7515b31c9a07ef80' } });
'.env.example': '9bd63e3d6caeb2fb9e94639145ab876ac3b79c63c6e8e7509cdb7fb07ef30132', 'src/model-defaults.js': 'c568977fcac8ea44d5387a8a8745b062675ec94d73d39ce528c492ad35f87176', 'src/providers.js': '04c3c38f9a3a867eb632670cd5cf28f1d7b45d910eb6993a807dfdc6a4866d36', 'src/web-rewrite-contract.js': 'be433e8260e452028eb53b5c1aed0935a4150cd669ec2d5e826302219df22b9a', 'playground/launch-config.js': '4d19fc8ce36651f73f94d80bbcd108a2ccbb50fa3fc25b54d75f193b42ac6bf4', 'vercel.json': '37a54c0850db54e80eec963c570d4b8a047fcfb4bf56d1a133e5a3934b28260e', 'scripts/checkout-evidence-bindings.mjs': '767c832fe4b517824e06fa7e18d6dd777e6525831dcfaa2022e51a4c8f27c07c', 'scripts/generate-launch-config.mjs': 'c5047625479bc687c510b6faf5045cf6118359ba978d219cea834325de5e8a07', 'scripts/check-v6.4-release-ready.mjs': 'fc4521db8f4677e03ac6a2199a86917b6332033030a9e8fe248cd166b0a59313', 'docs/AUTHENTICATION.md': 'e8c335550c4a0f0b144b79f4286d467a968962821a1c88049f1e679810751cfe', 'docs/AUTHENTICATION_KR.md': '5e077cd3a13c2299a11fc831c8303a204880c91dd0d465148d34a435dbe00796', 'docs/operations/pro-launch.md': '50448491ce0b745eb2bfe07983238a6e727466de0f71c72b7cbc4a9c447068ff', 'docs/operations/pay-stg-binding-20260716.json': '2f523259de91f640f056fe7acfe00264e493d9891b7a61152fe5e91704c0ecdf', 'docs/operations/pay-stg-runtime-20260716.json': 'b0229e892b06e1ec303a001c1317c4c63fc3c98fd7e10243e64db07df4803d29', 'docs/operations/pay-b-binding-20260723.json': '96eb8e0aba9fcb4ce67dd356bd35aaf678d8abea96a7ec134218eab7cd20f132', 'docs/operations/pay-b-binding-polar-20260729.json': '471c9035a04ce5c2c76d7e5b4d595054191d513fa007455a02c9b123d0811ac5', 'docs/operations/pay-live-runtime-polar-20260729.json': '384912dca4576f1c3f8d653f39c3d9a8cb19f8f8acc1a91ac2bc36fdf10e7a9c', 'tests/e2e/providers.test.js': '837177c5c73b46f29ce93c8dbdf6ca51045d9958ff5ea9ffcff8fcdaa869ad27', 'tests/unit/backend-model-defaults.test.js': '908dd9b06a9d5305ad28b50007d6428435b0b6b7019d6a2210aff813bfb9cf3d', 'tests/unit/web-deploy-invariants.test.js': '2aecb9068c04999eaf964766cdc1e0c3a551f58ecfa54a0ade8802f1b8f4f296', 'tests/unit/web-rewrite-contract.test.js': '2980f555bb53e7c8d93a74d60dc096adadfd1c7d07fd70f55de1670959219c13', 'tests/unit/web-rewrite-contract.redteam.test.js': '3c7591926e168b14f486199297fd1e84ed447c1b8d339c9b4860f79da0f6a7bb', 'tests/unit/v6.4-preflight-hold.test.js': 'c5f8a3465576dff5a94f07dd8eaac741d1e0e5006b7076fe9884204eb7a0c7a8', 'tests/unit/v6.4-release-ready.test.js': '8d88aab35ce75bc40b4782932329c0402001afabc380ac349ccc1b82d01c12d7', 'package.json': '6712053362194ab947aa10de4f7772bfa23ae6db97dc5a912e05763c4e3a2dc3', 'package-lock.json': '3d4b2573cd3a273d766a01a6ea2245b2528a9149ae75fdda9bb977bfd5af69a1', '.github/workflows/release.yml': '43900a0966a52c500d54b1971d4141fe2d380a893364b4cb7b9976e9e3795f8f', 'README.md': '78829adef9bc233a2dc0003ea022281ce483cb958daeef01a073361e31ce8f11', 'README_KR.md': 'ebac4f175b399a081d4c4a2b92fcc0708f1e85976d8da869f0f9b608046cfd59', 'README_ZH.md': '66076f5870bf806310b4516db0c260037f7b2684c3234b291660593f744a8ec0', 'README_JA.md': 'bd71aa30bd9eca7b1f4520f4fb609585f40ccbf78d9c0ba29d29c7364c869c44', 'SKILL.md': '3b7dc62f22c1feb9178d49a47e78bfa60fe94ea314d7132a99dcc6c9b231a4c5', '.patina.default.yaml': '308311b43add43e9d0e40bdfcdf65823337f12357e50366ce0fb8b07cfd76885', 'packages/patina-humanizer/package.json': 'fc9b27a4c97965d17b18492999f7018f34819806d63d626eeb428f6dd0834c63', '.claude-plugin/plugin.json': '7a5df3e87832d22821e7d1fafed76e125b33a02d5550e46fa73e7aa9073d2325', '.claude-plugin/marketplace.json': 'c500dfec67c40f4c2acb6de3efc5c60631e8e82ff961311a09609fe37e806e2d', 'CHANGELOG.md': 'dfc4fb1f70ca873ca1bf44b3949374d43018fc673b98212e7515b31c9a07ef80' } });
const DISABLED_LAUNCH = { schemaVersion: 1, channel: 'disabled', enabled: false, checkoutOrigin: null, checkoutPath: null, evidence: null };
const isObject = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
const sameJson = (left, right) => JSON.stringify(left) === JSON.stringify(right);
Expand Down
1 change: 1 addition & 0 deletions src/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const HTTP_KEY_ENV_VARS = [
'TOGETHER_API_KEY',
'KIMI_API_KEY',
'MOONSHOT_API_KEY',
'MINIMAX_API_KEY',
];

// Default openai-http runs against the OpenAI-compatible default endpoint, so
Expand Down
Loading