Move 13 shipped openspec change docs under openspec/changes/archived/. Add docs/features/git-diff-panel, docs/plans/post-review-backlog, and docs/research/cross-app-contract-ssot.md (the research behind the @boocode/contracts SSOT work). Update BOOCHAT.md, BOOCODER.md, and boocode_roadmap.md. Co-Authored-By: Claude Opus 4.8 <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