Repository navigation
Remove Devstral 2 2512 from free models list - #21
Closed
kilo-code-bot[bot] wants to merge 5 commits into
Closed
kilo-code-bot[bot] wants to merge 5 commits into
kilo-code-bot[bot] wants to merge 5 commits into
Conversation
- Remove devstral_2512_free_model from kiloFreeModels array - Remove devstral_2512_free_model export from mistral.ts - Update devstral_small_2512_free_model to be standalone (no longer spreads from removed model) - Remove mistralai/devstral-2512:free mapping from vercel.ts
Contributor
Author
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (3 files)
|
Removed the devstral_small_2512_free_model configuration from mistral.ts.
chrarnoldus
approved these changes
Feb 9, 2026
Contributor
|
fine to clean this up, but I don't think it caused the described problem |
jrf0110
added a commit
that referenced
this pull request
May 19, 2026
…cy, browse reconciliation
Picks up from the v3 wl-sdk migration and lands a sweep of correctness
and UX fixes uncovered by end-to-end testing against real DoltHub data
(jrf0110/wl-commons upstream + jfawcett/wl-commons fork).
Key surfaces:
wl-sdk
- publish: replace prior open/merged/closed PR-search idempotency
with a tighter branch-HEAD-vs-main-HEAD comparison. Reusing a
stale merged PR (e.g. the no-diff PR a `wl post` auto-publish
leaves on the same `wl/<rig>/<id>` branch) shadowed fresh accept
commits and made the UI report "merged" against the wrong PR.
Now publish only reuses an open PR for the branch; a no-op is
only returned when the branch tip already equals main.
- browse: only flip `entry.source` to `'fork'` when the fork
branch's `updated_at` is strictly newer than the upstream main
row's. Fixes the post-accept-merge case where a stale
`wl/<rig>/<id>` branch on the fork keeps shadowing `completed`
upstream rows as `in_review`. Fork row stays attached for the
drawer's branch tab.
- state: new `readBranchHead` and `assertForkMainCurrent` helpers.
Mutations now refuse with `code: 'precondition'` and a deep-link
when fork main is behind upstream main (idempotent already-applied
branches still short-circuit before the gate).
- export `readBranchHead` from the package index.
wasteland service
- getForkCurrency tRPC query: compares fork main HEAD vs upstream
main HEAD without writing, returns a prefilled DoltHub
`pulls/new` URL for the manual sync flow (DoltHub's API has no
programmatic upstream→fork sync — the fork owner lacks write on
the parent repo and CALL DOLT_FETCH/MERGE is blocked on hosted
SQL).
- acceptWantedItem rebuild: cross-fork reads via
`submitterForkOwner`, threads `submitterPullId`/`completionId`/
`evidence`/`submitterRigHandle`, all-in-one chain that writes
adoption DML on admin's branch, merges admin's PR, closes the
submitter's PR. Output now `{ success, pr_url, pr_id, merged,
closed_submitter_pr }`.
- markWantedItemDone now auto-publishes; output gained `pr_url`.
- Inbox classifier: `dolthub_url` on InboxCardBase, `fork_owner`
on InboxItem, SQL-trailer commit-message parsing for
cloud-issued PRs (`Run SQL query: ... -- wl <verb>: <id>`).
New 9-case inbox-classifier.test.ts.
- debugErrorResponse surfaces the cause chain so accept/sync
failures show the underlying DoltHub error in dev probes.
- new debug endpoints: fork-currency, fork-sync-experiment
(records the 14-probe rejection of every cross-repo path so
future readers don't re-run the investigation).
apps/web
- persistent Sync fork header CTA on both wasteland route trees
(RepoDashboardHeader and WastelandDashboardHeader). Yellow when
stale, muted when current; tooltip explains the manual flow and
deep-links to a prefilled DoltHub pulls/new page using the
`fromBranchOwner`/`fromBranchRepo`/`fromBranch`/`toBranch` query
params Next.js exposes server-side.
- SyncForkButton uses Radix tooltip primitives directly with
popover tokens for dark-mode contrast (the shared ui/tooltip
primitive uses bg-primary as a brand-yellow accent for short
single-line tooltips).
- Inbox row → drawer with inline AcceptForm for work-submission
items; drawer EvidenceCard handles both URL and prose evidence
with extractFirstUrl recovery for "PR submitted: <url>" inputs.
- DoltHub integration page: drop the dev-only banner.
- Navigation reorg: remove top-level Wastelands from personal +
org sidebars; surface a Wastelands section on the personal
/gastown overview; gate WastelandSettingsSection on
`!organizationId`.
Tests
- wl-sdk: 199 passing (added stale-fork browse case; updated
overlay-with-fresh-fork test to use a strictly-newer
updated_at; rewrote publish.test.ts to cover head-match no-op,
open-PR reuse, and create-fresh-PR paths).
- wasteland: 99 passing (added stale-branch browseViaSdk case;
updated fork-currency fixtures across all mutation tests; fixed
pre-existing 4 failures inherited from the M3 commit by
aligning mocks with the new SDK fanouts).
Files this commit also picks up from the prior session's plan that
were left uncommitted (per SESSION_SUMMARY_2026-05-18.md): owner/repo
URL routing in the inbox card, gastown wasteland nav, M3.6 docs
sweep, accept-upstream submitter-fork fix, mayor `gt_wasteland_done`
URL-only constraint and gastown handler validation.
Verified end-to-end against the real DoltHub data:
- Stale-fork claim attempt → 412 PRECONDITION_FAILED with deep
link.
- Re-running an admin accept after the prior PR merged → 200 with
no-op pull id (no DoltHub 400).
- First-time admin accept of jfawcett's `wl done` (PR #21) → fresh
adoption PR #22 opened, merged, jfawcett's PR closed, upstream
main has the wanted=completed + completion + stamp.
- Browse on jfawcett's wasteland: previously-stale `in_review`
items now correctly show `completed` from upstream after merge,
independent of whether the local `wl/jfawcett/*` branch was
discarded.
jrf0110
added a commit
that referenced
this pull request
May 19, 2026
…ge filters (#2706) * feat(wasteland): squash staging-v3 work into single commit Collapses ~16 commits worth of wasteland-staging-v3 history (multiple merges from main, the wasteland MVP, gastown integration deltas, and the dolthub OAuth connect bridge) into a single tree-equivalent commit on top of latest main. Tree-equivalent to the previous wasteland-staging-v3 tip (da22f25417d5967199a7ce7b7e0aca0b07b2aa2e). Pre-rewrite history preserved on the wasteland-staging-v3-backup-* branches if recovery is needed. Source non-merge commits squashed into this one: - feat(wasteland): connect with DoltHub via OAuth integration - fix(wasteland): protect debug routes and org flow - feat(wasteland): link beads to wanted items and auto-report done - feat(wasteland): surface claim PR status, polish UI, bump wl to 0.4.0 - fix(wasteland): normalize DoltHub merge state casing - chore: regenerate pnpm-lock.yaml after merge from main - fix(wasteland): fail setUpstreamRigTrust when merge cannot be confirmed - fix(wasteland): wait for merge before branch cleanup - fix(wasteland): gate org-scoped routes on wasteland-access feature flag - fix(wasteland): PR review findings + CI lint failures - feat(wasteland): admin review inbox, drawer graph navigation, rigs UI * feat(wasteland): three-card upstream picker + create-new-upstream end-to-end Replaces the freeform `{owner}/{repo}` text input in both wasteland onboarding surfaces (the standalone `/wasteland/new` wizard and the Gastown wasteland-connect dialog) with a shared three-card chooser: 1. Join the Kilo Commons — fixed `hop/wl-commons` 2. Connect to an existing upstream — typed + live verify probe 3. Create a brand-new upstream — typed + live availability check Adds two dev-only tRPC procedures (`dolthub.verifyUpstream`, `dolthub.resolveUsername`) plus matching service helpers. Verify uses a two-stage probe (anonymous first, authenticated `/main` fallback) so DoltHub's "Calls authenticated with a token must include a refName" error doesn't fire on token-authed branchless calls. resolveUsername hits `GET /api/v1alpha1/user` (which exists despite an earlier comment claiming it didn't), caches the result, and replaces the manual "enter your DoltHub username" prompt for first-time users. Container fixes for the `Create new upstream` flow: - `selfInit` probes upstream existence before `wl join` so a typo or not-yet-created repo no longer kicks the container into a crash loop. - Boot-time `ensureInit()` catches rejection (was `void ensureInit()`, which surfaced as an unhandled promise rejection that Bun terminated the process on). - `storeCredential` defers the `WL_UPSTREAM` push and `/wl/init` call when the upstream isn't on DoltHub yet, so the create-mode ordering (createWasteland → storeCredential → createUpstream) doesn't trigger `wl join` against a not-yet-existing repo. - `handleCreate` runs `configureDolt` before `wl create` (otherwise `dolt init` errors with "Author identity unknown") and writes the same post-success local state `joinUpstream` does (synthetic wasteland config + `joined = true` + `WL_UPSTREAM`) so subsequent operations work without re-running `wl join`. Tests: 8 new vitest cases on the wasteland-side `upstreamExistsOnDolthub` probe; 11 new jest cases on the web-side `getDoltHubUser` / `verifyDoltHubUpstreamExists` helpers; 7 new router tests covering `resolveUsername` and `verifyUpstream` happy/failure paths and the private-repo auth fallback. * WIP wasm libwl * wip(wasteland): worker-side bootstrap + UI refactor + DoltHub read fallback Phase 1 of container retirement: createUpstream now bootstraps DoltHub repos directly from the worker (services/wasteland/src/upstream-bootstrap/). Adds createDatabase, execWrite with operation polling, mergeBranchIntoMain, and the COMMONS_SCHEMA_STATEMENTS array hand-synced from wasteland/schema/commons.sql. Bootstrap writes to a scratch branch then merges to main because DoltHub silently no-ops first writes against freshly-created DBs. Phase 2: removed the remaining container call sites. containerStatus synthesizes a static payload, containerJoin is a no-op, the worker's debug routes call wantedBoard ops directly instead of going through debugCallContainer, and the wasm-browse handler is deleted. Container env-var sync removed from storeCredential. Onboarding refactor (gastown WastelandSettingsSection + UpstreamIntent): collapsed the join/create intent step, added a 'reuse' card backed by a shadcn Select dropdown, default starts at new-details with intent 'commons'. Reuse short-circuits past credentials/identity steps. Password-manager remediation: new SecretTokenInput component using type=text + -webkit-text-security:disc + eye toggle to avoid Chrome's save-password prompt. Manual-token forms wrapped in autoComplete=off with anti-autofill attrs. Bandaid for the 'no such repository' read failure (changes in wasteland/internal/backend/remote.go committed separately): worker still goes through libwl, but the Go side now retries reads anonymously when DoltHub returns 404 or 4xx with that error body, which works around the auth-path quirk on cross-org public reads. 53 tests pass; typecheck/lint/format clean. * feat(wl-sdk): scaffold @kilocode/wl-sdk package Skeleton for the new TypeScript wasteland protocol SDK that will replace the libwl wasm bridge. No SDK logic yet \u2014 subsequent commits will fill in the DoltHub client, DML helpers, ops, and WlClient wiring. Part of the wasteland TS-SDK + three-place UI rebuild. * feat(wl-sdk): port EscapeSQL/EscapeLIKE from wasteland Go SDK Adds escapeSqlString, escapeSqlLike, escapeSqlIdentifier, sqlStringLiteral, sqlStringOrNull, and sqlValue helpers in packages/wl-sdk/src/commons/escape.ts. Byte-for-byte matches the Go reference in wasteland/internal/commons/commons.go. Includes 24 vitest cases covering escape order, LIKE wildcards, identifier escaping, and the empty-to-NULL convention used by the DML helpers. * feat(wl-sdk): typed DoltHub HTTP client with anon-read fallback and polling Adds packages/wl-sdk/src/dolthub/ (api, read, write, operation, branches, pulls, database, index) with 70 vitest cases. Ports the working DoltHub client from services/wasteland and the Go wasteland reference, including: - Anonymous-read fallback on 404 or 4xx 'no such repository' \u2014 mirrors the doGet behavior in wasteland/internal/backend/remote.go - Unified pollOperation supporting write, merge, and fork endpoints with the toCommitId-null quirk handling carried over from dolthub-write.ts - Idempotent createBranch/createDatabase/forkDatabase - Token never logged or exposed in errors; lowercase 'authorization: token' scheme as DoltHub requires - Discriminated DoltHubAuth union forces explicit anonymous reads - Each function accepts an injectable fetch (and sleep for poll loops) for hermetic tests The existing services/wasteland/src/util/dolthub-api.util.ts and upstream-bootstrap/dolthub-write.ts remain in place for now \u2014 the SDK is gated behind a (yet-to-land) feature flag in M1.8. * feat(wl-sdk): schema generator with DML helpers from commons.sql Adds packages/wl-sdk/scripts/generate-from-schema.ts and sql-parser.ts which read wasteland/schema/commons.sql and emit: - packages/wl-sdk/src/commons/schema.generated.ts \u2014 Zod row schemas, table metadata, and COMMONS_SCHEMA_STATEMENTS for the 9 commons tables. - packages/wl-sdk/src/commons/dml.generated.ts \u2014 11 DML helpers ported from wasteland/internal/commons/commons.go, including formatTagsJson and a formatNowUtc helper that matches Go's time.Format('2006-01-02 15:04:05'). DML output matches the Go reference byte-for-byte (verified by hand-trace on claim/submit/insert/update/delete/accept/close/reject and asserted in 22 vitest cases). insertWantedDML defaults priority to 0 when unset to match Go's int zero-value, not the SQL column's DEFAULT 2 \u2014 the DML always writes an explicit value, so the DB default never kicks in. Drift management: - pnpm --filter @kilocode/wl-sdk generate regenerates from the canonical SQL. - pnpm --filter @kilocode/wl-sdk generate:check fails CI on uncommitted drift. - Generator path defaults to ../wasteland; override via WASTELAND_REPO_PATH. - Generated files pass through oxfmt --ignore-path /dev/null so they stay formatted (oxfmt would otherwise skip *.generated.* per .prettierignore). * feat(wl-sdk): protocol ops layer (claim, post, browse, join, publish, ...) Adds packages/wl-sdk/src/ops/* and packages/wl-sdk/src/commons/registration.ts: Shared primitives: - types.ts \u2014 MutationContext, MutationResult, WlError envelope - branch.ts \u2014 makeWlBranch / parseWlBranch (wl/<rig>/<id>, wl/register/<rig>) - state.ts \u2014 read branch + main wanted state, equivalence check - mutate.ts \u2014 generic 'apply DML to fork branch' primitive: branch creation, idempotency check, optional auto-cleanup-on-revert. Mirrors mutatePR in wasteland/internal/sdk/mutate.go but does NOT auto-create PRs (that is the deliberate behavior change called out in the plan). Mutations: claim, unclaim, done, post, accept, reject, close. Reads: browse (branch-aware overlay over main). Lifecycle: join (fork + register-branch + registration PR), leave (shallow \u2014 deletes wl/<rig>/* branches only; rig deregistration is a known gap). Branch lifecycle: publish (open PR for branch), unpublish (close PR, keep branch), workshop (listMyBranches, discardBranch). commons/registration.ts ports BuildRegistrationSQL from wasteland/internal/commons/registration.go with a byte-for-byte test. 170 vitest cases total in the package. Two deliberate divergences from Go are documented inline: - Idempotency check skips when branchStatus == targetStatus (the plan), not Go's branchStatus == targetStatus && branchStatus != mainStatus. - accept does not perform Go's self-stamp guard or completion lookup; the caller passes stamp.subject directly. Application policy lives at the caller, not the SDK. * feat(wl-sdk): WlClient class and finalized public surface Wires the ops layer into the top-level WlClient described in the plan: const wl = new WlClient({ upstream, forkOrg, rigHandle, token, onRequest, onError, fetch, now }); await wl.join({...}); await wl.claim(wantedId); await wl.publish(wantedId); Methods are thin wrappers that build a MutationContext from config and delegate to packages/wl-sdk/src/ops/*. onRequest/onError hooks are threaded through the dolthub layer. Also finalizes packages/wl-sdk/src/index.ts as the package's public surface \u2014 WlClient, every ops result/input type, the SQL escape helpers, the generated DML helpers and row schemas, COMMONS_SCHEMA_STATEMENTS, branch name helpers, WlError, and DOLTHUB_API_BASE/DOLTHUB_WEB_BASE. 186 vitest cases passing (+5 for client wiring). The previous libwl path in services/wasteland is unchanged \u2014 the SDK will be wired in behind a useWlSdk feature flag in M1.8. * feat(wasteland): wire wl-sdk into tRPC behind WL_SDK_ENABLED flag M1.8 \u2014 the wl-sdk now serves the 8 wanted-board ops (claim, unclaim, post, done, accept, reject, close, browse) when the WL_SDK_ENABLED env var is truthy. Default is off; libwl path is unchanged. services/wasteland/src/wanted-board/feature-flag.ts \u2014 useWlSdk(env) helper reads WL_SDK_ENABLED ('1'/'true'/'yes'/'on'). Single source of truth. services/wasteland/src/wanted-board/dispatcher.ts \u2014 dispatch{Browse,Claim, \u2026} per-op routing. tRPC procedures call these instead of the libwl helpers directly. services/wasteland/src/wanted-board/wanted-board-ops-sdk{,-inner}.ts \u2014 the SDK adapter. Resolves DoltHub auth (fresh OAuth \u2192 stored PAT, mirroring the existing loadContext precedence), constructs a WlClient, calls the op, maps the result back to the legacy tRPC return shape so apps/web types are unchanged. services/wasteland/src/wanted-board/errors.ts \u2014 WantedBoardOpError lifted out of wanted-board-ops.ts so both paths share the error class. services/wasteland/wrangler.jsonc, worker-configuration.d.ts \u2014 declare WL_SDK_ENABLED as a string env var, default '0'. Adapter mapping notes: - claim splits the libwl 'claim+auto-PR' single call into wl.claim then wl.publish. The PR URL flows back into the existing pr_url field. - accept reads the latest completion id off the user's branch (the SDK takes completionId explicitly; libwl looked it up implicitly). - post synthesizes a w-<hex12> id since the SDK does not own id generation. - direct (wild-west) mode is silently downgraded to PR mode under the SDK path \u2014 the SDK has no upstream-direct write path. Documented in code. 68/68 wasteland service tests pass. 186/186 wl-sdk tests pass. Both typecheck and lint clean. apps/web types unchanged. * feat(wasteland): owner/repo lookup via registry + resolveOwnerRepo procedure M2.1 \u2014 lays the foundation for the new /wasteland/:owner/:repo routes without churning every tRPC procedure to take owner/repo. New routes will call resolveOwnerRepo once at the page boundary, then pass the resolved wastelandId to every existing procedure unchanged. Registry changes (services/wasteland/src/dos/wasteland-registry/registry-ops.ts): - wasteland_registry table grows a nullable dolthub_upstream column with a case-insensitive index. - ALTER is idempotent for existing DOs (catches 'duplicate column'). - New methods: findByOwnerRepo (case-insensitive via lower()), setDolthubUpstream, backfillDolthubUpstream. - findByOwnerRepo orders by created_at DESC LIMIT 1 \u2014 if two wastelands point at the same upstream, the newest wins. Documented; not enforced via uniqueness constraint. Router wiring (services/wasteland/src/trpc/router.ts): - createWasteland and createUpstream write dolthub_upstream into the registry alongside config. - updateWastelandConfig calls setDolthubUpstream when the upstream changes. - New wasteland.resolveOwnerRepo({owner, repo}) query returns the resolved wastelandId or null. No auth check \u2014 caller layers auth via downstream procedures. Server helper (services/wasteland/src/trpc/resolve-wasteland.ts): - Unit-testable resolveWastelandWith(registry, args) + resolveWasteland(env, args) production entry point. Backfill (services/wasteland/src/wasteland.worker.ts): - POST /debug/registry/backfill-upstreams behind cfAccessDebugMiddleware, iterates every wasteland and re-syncs its registry upstream from per-DO config. Idempotent. apps/web type mirror updated. 81/81 wasteland tests pass (+13 new). * feat(web): owner/repo-keyed wasteland routes with three-place navigation M2.2 \u2014 introduces /wasteland/[owner]/[repo] as the new default landing route for a wasteland, alongside placeholders for /fork, /pulls, /settings. Route restructure: - Legacy tree moved from /wasteland/[wastelandId]/* to /wasteland/by-id/[wastelandId]/* so it doesn't collide with the new [owner]/[repo] dynamic segment at the same depth. - Two beforeFiles rewrites in apps/web/next.config.mjs match /wasteland/<uuid>/* and rewrite to /wasteland/by-id/<uuid>/*. URLs in the browser stay unchanged \u2014 every existing UUID-keyed link still resolves through the rewrite. M2.8 will replace the rewrite with a redirect to the new owner/repo URL. - Side benefit: /wasteland/<single-non-uuid-segment> now 404s instead of hitting the legacy redirect chain. New tree (apps/web/src/app/(app)/wasteland/[owner]/[repo]/): - layout.tsx \u2014 server-side gate + tRPC provider + drawer stack + page header context. - _components/RepoLayoutShell \u2014 calls wasteland.resolveOwnerRepo to map owner/repo \u2192 wastelandId. If null, renders NotConnectedShell with a Connect CTA (anonymous-browse path is deferred to a later milestone, surfaced as a disabled tooltipped button). - _components/RepoDashboardHeader \u2014 mono <owner>/<repo> + visibility badge + per-page subtitle. - _components/RepoNavTabs \u2014 four real <Link> tabs (Upstream / Fork / Pulls / Settings) with usePathname-driven active state. - page.tsx \u2014 the upstream landing view. Reuses WantedBoardClient in read-only 'upstream' mode (no Post button, no mutation dialogs, drawer opens with actions:null). Each row gains a 'Take to my workshop' hover affordance pointing at /wasteland/[owner]/[repo]/fork?wantedId=<id>. - fork/page.tsx, pulls/page.tsx, settings/page.tsx \u2014 placeholders tagged with TODO M2.3/M2.4/M2.5. WantedBoardClient now accepts mode='fork'|'upstream', workshopBasePath, and headerTitle props. mode='upstream' hides Post, suppresses every mutation dialog, and renders the workshop-handoff link. Resolved import paths in the org-scoped tree to point at the new /by-id/[wastelandId]/* legacy location. * feat(wasteland+web): fork workshop view and pulls view at owner/repo routes M2.3 + M2.4 \u2014 implements the second and third 'places' from the plan: /wasteland/[owner]/[repo]/fork \u2014 your fork / workshop /wasteland/[owner]/[repo]/pulls \u2014 PRs in flight (mine + incoming) New tRPC procedures (services/wasteland/src/trpc/router.ts): wasteland.listMyForkBranches({wastelandId}) \u2192 ForkBranchEntry[] wasteland.discardBranch({wastelandId, wantedId}) \u2192 {success} wasteland.publishBranch({wastelandId, wantedId}) \u2192 {prUrl, prId} wasteland.listMyPulls({wastelandId}) \u2192 MyPullEntry[] All four are SDK-only (no libwl path \u2014 these operations are new). Live in services/wasteland/src/branch-ops/{branch-ops, branch-ops-inner}.ts following the same split-by-injectability pattern as the wanted-board SDK adapter (inner is pure + fetch-injectable; outer resolves auth and binds to the worker context). 7 new vitest cases cover happy path and edge cases for each op (88 total wasteland tests, +7). apps/web new clients: /fork ForkClient.tsx \u2014 lists wl/<rig>/* branches with divergence chip, PR badge, and inline Continue / Publish / Discard actions. Empty state copy per the plan: 'No work in flight. Browse the upstream and claim something to start a branch on your fork.' /pulls PullsClient.tsx \u2014 Mine + Incoming tabs. Incoming is hidden unless the caller is a maintainer (trust_level >= 2 OR is_upstream_admin OR site admin \u2014 the broader check is documented inline since admins shouldn't be locked out of their own queue). Reuses mergeUpstreamPR / closeUpstreamPR / commentOnUpstreamPR. Hand-mirrored type signatures in apps/web/src/lib/wasteland/types/router.d.ts per the established README convention. listMyPulls fan-out is capped at MY_PULLS_DETAIL_CAP = 100 because DoltHub's pull-list endpoint omits creator_name; documented inline. listMyForkBranches uses the wl-sdk's listMyBranches helper which itself does N detail reads \u2014 acceptable for M2, target for caching. * feat(web): settings page at /wasteland/[owner]/[repo]/settings M2.5 \u2014 ports the legacy SettingsClient onto the new owner/repo route tree. apps/web/src/app/(app)/wasteland/[owner]/[repo]/settings/SettingsClient.tsx apps/web/src/app/(app)/wasteland/[owner]/[repo]/settings/layout.tsx (scroll viewport with a route-scoped id so the legacy scrollspy doesn't collide) Sections kept (5): General \u2014 name, visibility, read-only dolthub upstream display (the URL is now the address; settings shows it but does not let you edit it). Admin self-attest checkbox stays. DoltHub Connection Connected Towns Admin Access \u2014 admin-only verifyUpstreamAdmin Danger Zone \u2014 owner-only delete with type-to-confirm Section dropped: Wasteland Connection (containerStatus / Phase-2 retirement block from the legacy file). The wl-sdk path no longer exposes that information; the legacy SettingsClient under by-id/ is unchanged. The new client reads wastelandId from useWastelandRepo() (the layout's context) instead of URL params, so adding/removing route segments does not require touching this code. Legacy tree at apps/web/src/app/(app)/wasteland/by-id/[wastelandId]/settings/ remains untouched and continues to serve via the next.config rewrites until M2.8 cuts the legacy URLs over to redirects. * feat(web): item drawer with three-tab anchor (Upstream / My branch / Pull request) M2.6 \u2014 reshapes the wanted-item drawer to mirror the plan's three places. apps/web/src/components/wasteland/drawer/WantedItemPanel.tsx \u2014 rewritten as a tabs shell. Reads listMyForkBranches and listMyPulls (filtered to this item) to decide which tabs to show. initialTab prop selects the default tab based on where the drawer was opened from. apps/web/src/components/wasteland/drawer/WantedItemUpstreamTab.tsx \u2014 the read-only upstream snapshot. apps/web/src/components/wasteland/drawer/WantedItemBranchTab.tsx \u2014 branch state + stacked actions (claim/done/unclaim/accept/reject/close per state and admin gate) + Publish (primary CTA when no PR) / Update PR (when PR exists, idempotent) / Discard (inline confirm). apps/web/src/components/wasteland/drawer/WantedItemPullTab.tsx \u2014 PR title, state, mergeable badge, link to DoltHub, maintainer-only Merge/ Comment/Close. Tab visibility: Upstream always My branch visible only when caller has wl/<rig>/<wantedId>, OR while loading. Hidden in cross-reference (actions=null) mode. Pull request visible only when an open PR exists for that branch. initialTab routing: WantedBoardClient (legacy + new upstream view) \u2192 'upstream' or 'branch' depending on isUpstream. ForkClient \u2192 'branch'. PullsClient is unchanged (PRs go to DoltHub directly today). Pending-claims polling and the existing claim mutation are preserved. Drawer width unchanged at 620px; the three triggers fit comfortably. No new tRPC procedures \u2014 the existing listMyForkBranches/listMyPulls are sufficient and filtering one entry from the small list is cheaper than adding a new endpoint. apps/web/src/components/wasteland/drawer/types.ts gains a WantedItemTab union and an optional initialTab field on the wanted-item drawer refs. * feat(wasteland+web): explicit fork-and-register connect ceremony M2.7 \u2014 makes the join ceremony visible to the user. Today's wizard creates a wasteland record but the actual fork and rig registration happen opaquely or not at all. The plan calls for a deliberate ritual. New tRPC procedure (services/wasteland/src/lifecycle-ops/lifecycle-ops.ts): wasteland.joinWasteland({wastelandId, rigHandle, rigDisplayName?, rigEmail?}) \u2192 {forkOwner, forkRepo, forkUrl, rigHandle, registrationBranch, registrationPullId, registrationPullUrl, alreadyJoined} Calls WlClient.join() to fork, wait, INSERT the rig registration, push wl/register/<handle>, and open the registration PR. Persists credentials with the verified rig handle. Idempotent end-to-end (the fork already exists \u2192 forkCreated:false; ON DUPLICATE KEY UPDATE on registration; the publish step finds and returns the existing PR by title). 2 new vitest cases cover happy path and idempotent path. Wizard rewrite (apps/web/src/app/(app)/wasteland/new/NewWastelandWizardClient.tsx): commons / connect intents now run a 5-step flow: 1. Intent (name/ownership/upstream/visibility) 2. DoltHub credentials (OAuth or PAT) 3. Rig handle (smart default = DoltHub username, validated) 4. Fork preview \u2014 the deliberate transparency step. Shows exactly: 'Connecting to <upstream> will: 1. Fork the upstream to <dolthubOrg>/<repo> 2. Register your rig <handle> via a pull request 3. Set up this wasteland in Kilo' 5. Success \u2014 fork URL, rig handle, registration PR link, CTAs to 'Browse the upstream' and 'Visit wasteland'. create intent: unchanged 3-step (intent \u2192 work \u2192 success). reuse intent: skips credentials/rig/preview entirely. Failure modes handled inline: 401/403 detected via 'unauthor*'/'forbidden' patterns surface a 'fork manually' link to dolthub.com/repositories/<...> plus Retry. Generic errors get a Retry button. Retries reuse the already- created wastelandId (pendingWastelandId state) so a join failure on attempt two doesn't create a duplicate wasteland record. Editing any of the createWasteland inputs clears pendingWastelandId so a fresh start really starts fresh. URL pre-fill: /wasteland/new?upstream=<owner>/<repo> seeds the intent picker (used by NotConnectedShell from M2.2 and any deep link). Gastown WastelandSettingsSection has a minimal change \u2014 it now calls joinWasteland after storeCredential to actually fork-and-register, not just record the connection. Full UI rewrite to match the standalone 5-step wizard is left as a follow-up TODO. apps/web/src/lib/wasteland/types/router.d.ts hand-mirrors the procedure. 90 wasteland service tests pass (+2). 186 wl-sdk tests pass. * feat(web): redirect legacy UUID wasteland URLs to owner/repo URLs M2.8 \u2014 closes the migration loop. Legacy /wasteland/<uuid>/... URLs now server-side redirect (308) to the new /wasteland/<owner>/<repo>/... URLs when the wasteland has a stored dolthub_upstream. URLs without an upstream fall through to the existing legacy UI as a soft-failure landing pad (users can configure an upstream from settings to enable redirects). Path mapping: /wasteland/<uuid> \u2192 /wasteland/<owner>/<repo> /wasteland/<uuid>/wanted \u2192 /wasteland/<owner>/<repo> /wasteland/<uuid>/rigs \u2192 /wasteland/<owner>/<repo>/settings (no rigs tab in new tree \u2014 surface in settings for now; dedicated section is a follow-up) /wasteland/<uuid>/members \u2192 /wasteland/<owner>/<repo>/settings /wasteland/<uuid>/claims \u2192 /wasteland/<owner>/<repo>/fork /wasteland/<uuid>/review \u2192 /wasteland/<owner>/<repo>/pulls /wasteland/<uuid>/settings \u2192 /wasteland/<owner>/<repo>/settings Org-scope routes (/organizations/<id>/wasteland/<uuid>/...) flatten to the same personal-scope new URLs \u2014 org membership is enforced at the worker layer, so the URL doesn't have to encode the org id. Implementation: apps/web/src/lib/wasteland/server-resolve.ts \u2014 server-only helper that mints a 5-min JWT via generateApiToken, calls the worker's getWasteland via httpLink (single shot, not batched), parses dolthub_upstream as <owner>/<repo>. Try/catch returns null on any failure so a redirect lookup that 500s never blocks the legacy fallback. apps/web/src/lib/wasteland/upstream.ts \u2014 isomorphic parseDolthubUpstream helper shared between server-resolve and the personal/org list clients. Each legacy page.tsx (14 total) calls auth gate first, then resolves upstream, then redirects when present, otherwise falls back to the existing client component. List clients link items to /wasteland/<owner>/<repo> when upstream is set, otherwise to the legacy UUID URL. next.config.mjs rewrites /wasteland/<uuid>/... \u2192 /wasteland/by-id/<uuid>/... remain in place \u2014 they're still required to make the legacy by-id/ tree reachable via the original URLs, which is the redirect's job to convert. * chore(wasteland): delete libwl, container runtime, and WL_SDK_ENABLED flag M3.1 + M3.2 + M3.5 \u2014 the SDK is now the only path; libwl wasm and the Cloudflare Container runtime are gone. Deleted: services/wasteland/src/wasm/ (libwl + go runtime) services/wasteland/container/ (Dockerfile + control) services/wasteland/src/wanted-board/wanted-board-ops.ts (libwl bridge) services/wasteland/src/wanted-board/dispatcher.ts (flag dispatcher) services/wasteland/src/wanted-board/feature-flag.ts (useWlSdk helper) services/wasteland/src/dos/WastelandContainerDO.stub.ts services/wasteland/docs/wasm-poc.md tRPC procedures removed: containerStatus, containerJoin (no callers in apps/web after M2.5). Debug routes removed: /debug/wastelands/:id/container/{config,health}. Wrangler config: containers block dropped, WL_SDK_ENABLED env var dropped. DO binding WASTELAND_CONTAINER and the v1 migration entry are kept \u2014 v3 will drop the class via deleted_classes (M3.3). WastelandContainer.do.ts rewritten as a minimal DurableObject stub so the class still resolves for the binding; no @cloudflare/containers import. apps/web type mirror (router.d.ts) no longer references the deleted procedures. Legacy SettingsClient lost its containerStatus section. The 8 wanted-board ops in services/wasteland/src/trpc/router.ts now call the SDK adapter (browseViaSdk, claimViaSdk, etc.) directly. No more flag dispatcher. Tests: 186 wl-sdk, 86 wasteland (down from 90 \u2014 deletion matches the 4 dispatcher/feature-flag cases that no longer have a target). All pass. Stale comments and docs that reference libwl / WL_SDK_ENABLED / the container runtime are intentionally left in place for M3.6 to clean up in a single doc-and-comment pass. * chore(wasteland): v3 migration drops WastelandContainerDO + remove wanted_board cache M3.3 + M3.4 \u2014 final structural cleanup. The container DO is fully retired and the vestigial wanted-board cache is gone. DO migration (services/wasteland/wrangler.jsonc): v3 adds deleted_classes: ['WastelandContainerDO']. The Cloudflare Container backing this class is gone (Phase 2 of the container retirement). The DO carried no load-bearing state, so tombstoning any surviving instances on next deploy is intentional and irreversible \u2014 once a class is in deleted_classes the platform treats it as gone. WASTELAND_CONTAINER binding removed from prod and dev env stanzas. Files deleted: services/wasteland/src/dos/WastelandContainer.do.ts (the stub class) services/wasteland/src/dos/wasteland/wanted-board.ts services/wasteland/src/db/tables/wasteland-wanted-board.table.ts Wasteland.do.ts loses: - getWantedBoard / refreshWantedBoard RPC methods - createTableWastelandWantedBoard initialization - the WantedItemResult type Callers cleaned (8 sites): each of claim/unclaim/post/done/accept/ reject/close/discardBranch in the SDK adapters used to call ctx.doStub.refreshWantedBoard() after a successful write \u2014 a no-op against a never-written cache. Removed. Debug routes: /debug/wastelands/:id/wanted is gone (it was reading the empty cache). The status route's response no longer includes wantedBoardCount (it was always 0). worker-configuration.d.ts regenerated with wrangler types --include-runtime=false; the two hand-authored SENTRY_DSN/ SENTRY_RELEASE lines are preserved. Tests: 186 wl-sdk, 86 wasteland \u2014 unchanged. Typecheck and lint clean. Out-of-scope follow-up: services/gastown/src/util/wasteland-client.util.ts exposes a refreshWantedBoard tRPC client method that pointed at a mutation that never existed on the wasteland router. Now provably dead; remove in a gastown-scoped follow-up. * docs(wasteland): final M3.6 sweep \u2014 docs and stale comments Final cleanup pass to satisfy the plan's acceptance criteria: rg 'libwl|callLibwl|LibwlOp' services/wasteland/src/ empty rg 'WL_SDK_ENABLED|useWlSdk' services/wasteland/src/ empty rg '@cloudflare/containers' services/wasteland/ empty rg 'wasteland_wanted_board' services/wasteland/ empty rg 'containerStatus|containerJoin' services/wasteland/src/ empty rg 'container/' services/wasteland/ empty rg 'WastelandContainerDO' services/wasteland/ only the immutable wrangler migration history (v1 new_sqlite + v3 deleted) Comment rewrites in services/wasteland/src/ (10 files): each touch either removes a now-meaningless reference (libwl, WL_SDK_ENABLED, the container, the deleted wanted-board cache) or rewrites it to describe the current architecture. Notable callouts: - branch-ops/{branch-ops,branch-ops-inner}.ts and lifecycle-ops/ lifecycle-ops.ts header comments dropped the 'no dispatcher / not gated by WL_SDK_ENABLED' framing now that the dispatcher and flag are gone. - wasteland.worker.ts auth-probe and browse-direct routes are now described in their own terms rather than in libwl-comparative terms. - 'direct' parameter on wanted-board ops is documented as accepted for API compatibility but silently ignored \u2014 the SDK has no upstream-direct write. services/wasteland/MONITORING.md rewritten: - Removes containerStatus / containerJoin / getWantedBoard / refreshWantedBoard from the procedure table. - Adds joinWasteland, listMyForkBranches, discardBranch, publishBranch, listMyPulls, resolveOwnerRepo. - Drops container-specific alert conditions. - Notes that the new lifecycle/branch ops are not currently rate-limited at the tRPC layer (separate decision if ever needed). services/wasteland/docs/: - wasteland-container-retirement.md DELETED \u2014 retirement is complete; the plan and design context live in git history. - admin-mode.md reduced from 509 lines (mid-stream design + session log) to ~80 lines describing the current architecture (loadSdkContext, verifyUpstreamAdmin, etc.). - e2e-testing.md updated: Path A reframed as 'production code path via SDK' (was 'container'); /debug/.../container/* and /debug/.../wanted rows removed; RIG_HANDLE lookup re-pointed at /auth-probe. services/gastown/src/util/wasteland-client.util.ts: removed the dead refreshWantedBoard tRPC client method (the procedure was removed in M3.4 and was never actually present on the wasteland router). packages/wl-sdk/README.md updated to describe the SDK as the production path rather than scaffolding. Tests: 86/86 wasteland, 186/186 wl-sdk, web typecheck clean. * chore(wasteland): remove final stale 'container' references in source After M3.6's docs sweep, four source-code comments still mentioned the retired Cloudflare Container or pointed at the deleted retirement doc. Rewritten to describe the current architecture without referring to deprecated history: services/wasteland/src/wasteland.worker.ts:486 \u2014 debug routes block services/wasteland/src/trpc/router.ts:777 \u2014 createUpstream services/wasteland/src/trpc/router.ts:828 \u2014 storeCredential services/wasteland/src/util/dolthub-api.util.ts:74 \u2014 anon probe services/wasteland/src/util/dolthub-api.util.test.ts:6 \u2014 test header Final acceptance grep: rg 'libwl' services/wasteland/src/ \u2192 zero hits rg 'container' services/wasteland/src/ \u2192 zero hits rg '"containers"' services/wasteland/wrangler.jsonc \u2192 zero hits rg '@cloudflare/containers' services/wasteland/package.json \u2192 zero hits The plan's acceptance criteria 1-4 are now strictly satisfied. * feat(wasteland): harden DoltHub review workflows * feat(wasteland+web): stale-fork detection, sync CTA, accept idempotency, browse reconciliation Picks up from the v3 wl-sdk migration and lands a sweep of correctness and UX fixes uncovered by end-to-end testing against real DoltHub data (jrf0110/wl-commons upstream + jfawcett/wl-commons fork). Key surfaces: wl-sdk - publish: replace prior open/merged/closed PR-search idempotency with a tighter branch-HEAD-vs-main-HEAD comparison. Reusing a stale merged PR (e.g. the no-diff PR a `wl post` auto-publish leaves on the same `wl/<rig>/<id>` branch) shadowed fresh accept commits and made the UI report "merged" against the wrong PR. Now publish only reuses an open PR for the branch; a no-op is only returned when the branch tip already equals main. - browse: only flip `entry.source` to `'fork'` when the fork branch's `updated_at` is strictly newer than the upstream main row's. Fixes the post-accept-merge case where a stale `wl/<rig>/<id>` branch on the fork keeps shadowing `completed` upstream rows as `in_review`. Fork row stays attached for the drawer's branch tab. - state: new `readBranchHead` and `assertForkMainCurrent` helpers. Mutations now refuse with `code: 'precondition'` and a deep-link when fork main is behind upstream main (idempotent already-applied branches still short-circuit before the gate). - export `readBranchHead` from the package index. wasteland service - getForkCurrency tRPC query: compares fork main HEAD vs upstream main HEAD without writing, returns a prefilled DoltHub `pulls/new` URL for the manual sync flow (DoltHub's API has no programmatic upstream→fork sync — the fork owner lacks write on the parent repo and CALL DOLT_FETCH/MERGE is blocked on hosted SQL). - acceptWantedItem rebuild: cross-fork reads via `submitterForkOwner`, threads `submitterPullId`/`completionId`/ `evidence`/`submitterRigHandle`, all-in-one chain that writes adoption DML on admin's branch, merges admin's PR, closes the submitter's PR. Output now `{ success, pr_url, pr_id, merged, closed_submitter_pr }`. - markWantedItemDone now auto-publishes; output gained `pr_url`. - Inbox classifier: `dolthub_url` on InboxCardBase, `fork_owner` on InboxItem, SQL-trailer commit-message parsing for cloud-issued PRs (`Run SQL query: ... -- wl <verb>: <id>`). New 9-case inbox-classifier.test.ts. - debugErrorResponse surfaces the cause chain so accept/sync failures show the underlying DoltHub error in dev probes. - new debug endpoints: fork-currency, fork-sync-experiment (records the 14-probe rejection of every cross-repo path so future readers don't re-run the investigation). apps/web - persistent Sync fork header CTA on both wasteland route trees (RepoDashboardHeader and WastelandDashboardHeader). Yellow when stale, muted when current; tooltip explains the manual flow and deep-links to a prefilled DoltHub pulls/new page using the `fromBranchOwner`/`fromBranchRepo`/`fromBranch`/`toBranch` query params Next.js exposes server-side. - SyncForkButton uses Radix tooltip primitives directly with popover tokens for dark-mode contrast (the shared ui/tooltip primitive uses bg-primary as a brand-yellow accent for short single-line tooltips). - Inbox row → drawer with inline AcceptForm for work-submission items; drawer EvidenceCard handles both URL and prose evidence with extractFirstUrl recovery for "PR submitted: <url>" inputs. - DoltHub integration page: drop the dev-only banner. - Navigation reorg: remove top-level Wastelands from personal + org sidebars; surface a Wastelands section on the personal /gastown overview; gate WastelandSettingsSection on `!organizationId`. Tests - wl-sdk: 199 passing (added stale-fork browse case; updated overlay-with-fresh-fork test to use a strictly-newer updated_at; rewrote publish.test.ts to cover head-match no-op, open-PR reuse, and create-fresh-PR paths). - wasteland: 99 passing (added stale-branch browseViaSdk case; updated fork-currency fixtures across all mutation tests; fixed pre-existing 4 failures inherited from the M3 commit by aligning mocks with the new SDK fanouts). Files this commit also picks up from the prior session's plan that were left uncommitted (per SESSION_SUMMARY_2026-05-18.md): owner/repo URL routing in the inbox card, gastown wasteland nav, M3.6 docs sweep, accept-upstream submitter-fork fix, mayor `gt_wasteland_done` URL-only constraint and gastown handler validation. Verified end-to-end against the real DoltHub data: - Stale-fork claim attempt → 412 PRECONDITION_FAILED with deep link. - Re-running an admin accept after the prior PR merged → 200 with no-op pull id (no DoltHub 400). - First-time admin accept of jfawcett's `wl done` (PR #21) → fresh adoption PR #22 opened, merged, jfawcett's PR closed, upstream main has the wanted=completed + completion + stamp. - Browse on jfawcett's wasteland: previously-stale `in_review` items now correctly show `completed` from upstream after merge, independent of whether the local `wl/jfawcett/*` branch was discarded. * chore(wasteland): drop unused WASTELAND_JWT_SECRET binding The secret hasn't been read by any source under services/wasteland/src since the v3 wl-sdk migration replaced the legacy JWT auth path with KILO_AUTH_PUBLIC_KEY (kilo user JWT) and the per-credential DoltHub OAuth flow gated by WASTELAND_ENCRYPTION_KEY. Removing the dangling binding keeps wrangler config and the generated Env types honest. The Secrets Store entry WASTELAND_JWT_SECRET_PROD remains in the store and can be deleted out-of-band when convenient; this commit only unbinds it from the worker. * fix(web): clear pre-existing lint errors blocking pre-push hook Four oxlint failures had accumulated on the staging branch and were blocking the push hook: - apps/web/src/app/(app)/wasteland/by-id/[wastelandId]/settings/SettingsClient.tsx unused `Label` import — drop it. - apps/web/src/app/(app)/wasteland/[owner]/[repo]/settings/SettingsClient.tsx same unused `Label` import — drop it. - apps/web/src/app/api/internal/integrations/dolthub/token/route.ts `parsed.data.organizationId!` non-null assertion. The Zod `.refine` above guarantees exactly one of `userId`/`organizationId` is set, but TS doesn't see through the refinement. Branch on each property explicitly so flow-sensitive narrowing supplies a non-undefined `id` without the `!`. Adds an unreachable 400 fallback to keep the function total — no behavioral change for any valid request. - apps/web/src/components/wasteland/drawer/WantedItemPanel.tsx `hasPull` declared but unused — drop it. `PullEmptyState` already derives the relevant flag from `hasBranch`. No other behavior changes. * chore: revert .husky/pre-push and drop wasteland-gastown-poc plan Both were pulled into the staging-v3 squash by accident: - .plans/wasteland-gastown-poc.md is a working plan that doesn't belong in version control (the .plans/ convention is to gitignore). - .husky/pre-push gained a CI/container short-circuit that bypassed format/lint/typecheck on push. Reverting to origin/main's version so push hooks behave consistently with mainline. * chore: dev-server fixes after main merge Three small fixes to keep dev servers building/running after pulling main: - apps/web/tsconfig.json: add explicit "moduleResolution": "node". Without it, the Next.js TS plugin and our shared @kilocode/* path aliases stop resolving correctly under newer typescript versions. Array reformatting in this file is from Next/VS Code's TS-config auto-format and is purely cosmetic. - package.json: bump packageManager to pnpm@11.1.3 with the integrity hash. Matches the version Corepack now installs by default and keeps the per-checkout pnpm version pinned. - services/gastown/scripts/prepare-container.mjs: strip `patchedDependencies:` from the generated container pnpm-workspace.yaml in addition to `packages:`. Keep `overrides:`, `allowBuilds:`, `publicHoistPattern`, and the minimumReleaseAge rules so pnpm 11 inside the container honours the same policy as the monorepo root. Without keeping `overrides:` the container install fails with ERR_PNPM_LOCKFILE_CONFIG_MISMATCH; without `allowBuilds:` it fails with ERR_PNPM_IGNORED_BUILDS for transitive native-build deps like msgpackr-extract in non-interactive mode. * fix(web): revert apps/web/tsconfig.json changes that broke CI The previous commit (2928755) introduced two tsconfig regressions: 1. Added "moduleResolution": "node", which TS 5.x rejects with error TS5108 ('Option 'moduleResolution=node10' has been removed'). The legacy 'node' value is an alias for the removed 'node10'; the right replacement on a modern TS would be 'bundler' or 'node16', but neither is needed here — Next.js's tsconfig defaults work without an explicit moduleResolution. 2. Reformatted single-line arrays into multi-line, which oxfmt's format:check rejects. Restoring the file to its post-merge baseline (commit 0f51eff) keeps both checks happy. The dev server doesn't need the moduleResolution override. Verified: pnpm format:check clean, pnpm --filter web typecheck clean. * chore(web): remove wasteland legacy URL bridge from next.config.mjs The bridge rewrote `/wasteland/<uuid>/...` to `/wasteland/by-id/<uuid>/...` to keep pre-M2.2 UUID-keyed URLs working alongside the new `/wasteland/<owner>/<repo>/...` tree. Wasteland never shipped to production, so there are no historical URLs to preserve. The bridge is dead code. The `apps/web/src/app/(app)/wasteland/by-id/` route tree stays — the org-scoped wasteland routes (`/organizations/[id]/wasteland/[wastelandId]/...`) and the new owner/repo tree share several client components and the `WastelandPageHeaderContext` from there. Direct `/wasteland/by-id/<uuid>/...` URLs remain functional; only the `/wasteland/<uuid>/...` rewrite shortcut is gone. * chore: revert packageManager bump to pnpm@11.1.2 Commit 2928755 bumped packageManager from pnpm@11.1.2 to 11.1.3 as part of the post-merge dev-server fixes. 11.1.3 was only just published — pin back to the previously-tested 11.1.2 to avoid forcing a not-yet-vetted release on every developer and CI run. * chore(wasteland): Omit wasteland from auto-deploy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Remove Devstral 2 2512 (mistralai/devstral-2512:free) from the list of free models.
Changes
devstral_2512_free_modelfromkiloFreeModelsarray insrc/lib/models.tsdevstral_2512_free_modelexport fromsrc/lib/providers/mistral.tsdevstral_small_2512_free_modelto be a standalone definition (no longer spreads from the removed model)mistralai/devstral-2512:freemapping fromvercelModelIdMappinginsrc/lib/providers/vercel.tsContext
The model at https://kilo.ai/models/mistralai-devstral-2512-free was listed as free but should no longer be offered for free.
Built for josh by Kilo for Slack