Clear the 3 Unsloth-Studio-derived AGPL files and flip LICENSE + 5 package.json from AGPL-3.0-only to MIT. - html-to-md.ts → MIT node-html-markdown (parse5 dropped) - llama-args-validator.ts → clean-room (flag denylist = facts) - tool-call-parser.ts → delete dead Unsloth-ported code; keep extractToolCallBlocks/stripToolMarkup byte-identical (no behavior change) - LICENSE → MIT (Copyright (c) 2026 indifferentketchup); 5 package.json → MIT; AGPL SPDX headers removed; README License section; license-mit guard test - roadmap License-debt batch marked shipped; openspec/changes/license-debt-mit Decouples the relicense from the native-parsing retirement (the ported parser was dead code). Server suite 519 passing; build + coder typecheck clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.8 KiB
2.8 KiB
Tasks — relicense AGPL-3.0 → MIT
Four units. A/B/C are disjoint files (parallelizable); D is the join (runs after A/B/C).
The shared node-html-markdown dependency swap + pnpm install is done before A so the
parallel agents don't race on apps/server/package.json.
Pre: dependency swap (done by coordinator)
- Add
node-html-markdowntoapps/server/package.jsondependencies; removeparse5(only html-to-md consumed it). pnpm install.
A — html-to-md → node-html-markdown
- Replace
apps/server/src/services/web/html-to-md.tswith a thin MIT wrapper exportinghtmlToMarkdown(sourceHtml: string): stringoverNodeHtmlMarkdown.translate. - Drop the AGPL/Unsloth SPDX header.
- Update
html-to-md.test.tsto the new library's output (structure-level.toContainwhere whitespace differs; output feeds an LLM so exact format is not load-bearing). - Keep
web/index.tsre-export andweb_fetch.tsuntouched.
B — llama-args-validator → clean-room
- Rewrite
apps/server/src/services/inference/llama-args-validator.ts: re-derive the managed-flag denylist from the public llama-server README; keep the BooCode shadowing-flag logic. Same exports (validateExtraArgs,isManagedFlag,stripShadowingFlags,StripOptions). - Drop the AGPL/Unsloth SPDX header.
- Keep
llama-args-validator.test.tsgreen (it pins the contract).
C — tool-call-parser → minimal clean (relicense-only)
- Delete dead Unsloth-ported exports:
parseToolCallsFromText,scanBalancedBraces,OpenAiToolCall,hasToolSignal, and the unused nudge constants (DUPLICATE_CALL_NUDGE,TOOL_ERROR_NUDGE,TOOL_ERROR_PREFIXES,BUDGET_EXHAUSTED_NUDGE). - Keep
extractToolCallBlocks+ streaming helpers +stripToolMarkup(re-derive its strip regexes from qwen's wire format). Drop the AGPL/Unsloth SPDX header. - Remove the now-dead tests from
tool-call-parser.test.ts; keep streaming/strip tests. - Verify
stream-phase.ts(extractToolCallBlocks) +tool-phase.ts/error-handler.ts(stripToolMarkup) still compile.
D — license flip (join)
LICENSE: replace AGPL-3.0 text with MIT,Copyright (c) 2026 indifferentketchup.- Flip
"license"to"MIT"in all 5package.json(root, server, web, coder, booterm). - Confirm no
SPDX-License-Identifier: AGPLheader survives in the 3 files. - Roadmap
License-debtbatch: planned → shipped (note the decoupled-from-parser-retirement approach). Add a## Licensesection toREADME.md(MIT). - Optional guard test: assert no
AGPLSPDX header inapps/**and all 5package.jsonare MIT.
Verify
pnpm -C apps/server testpnpm -C apps/server build- root
npx tsc --noEmit