Lucas Winther and Claude Opus 5.5
f3ce2e34bf
fix(ai): lessonUrl builder in one place; authoring follows core canView
...
- Learner links go through lessonUrl/courseUrl (src/web/urls.ts).
- Generation, the studio course list and file listing require an authoring
right and core canView, so a global author needs a grant for a restricted
course. Contract requests 8 (global author in canView) and 9
(STC_AI_ALLOWED_BASE_URLS in AppConfig).
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:49:48 +01:00
Lucas Winther and Claude Opus 5.5
ead7327bb1
fix(ai): solution and hidden-file guard runs on the canonical real path
...
read_file and read_lesson URL-decode, posix-normalise, reject .. and absolute
paths, resolve through CourseRepository.resolvePath (symlinks followed), then
guard the real course-relative path and compare real paths with every
manifest browser.solution. Hidden files are refused too.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:48:56 +01:00
Lucas Winther and Claude Opus 5.5
cfc41c6a63
fix(ai): stdio MCP servers get PATH, HOME, LANG and their configured env only
...
STC_SECRET, database URLs and API keys are no longer inherited by MCP child
processes. Test: a fake server reports its environment.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:47:47 +01:00
Lucas Winther and Claude Opus 5.5
a13cc66ebb
fix(ai): BYOK endpoints limited to official presets and admin-allowed origins (SSRF)
...
- A user's own key goes only to https://api.anthropic.com , https://api.openai.com/v1
or an origin listed in STC_AI_ALLOWED_BASE_URLS / the server config's
allowedBaseUrls; anything else is a 400, and a stored key whose origin was
later removed stops being used.
- User-scope provider calls never follow redirects, and their errors reach the
user only as the HTTP status plus a fixed message; the full text is logged.
- The admin's server-scope provider may still use any base URL.
- Admin UI: allowed origins field; MCP stdio env editable, HTTP headers kept.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:47:25 +01:00
Lucas Winther and Claude Opus 5.5
0ff8e6a5de
docs(ai): mark plan tasks done
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:40:02 +01:00
Lucas Winther and Claude Opus 5.5
1f111b80db
docs(ai): contract requests; dev fake provider returns a draft file
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:39:58 +01:00
Lucas Winther and Claude Opus 5.5
a47e6e0971
feat(ai): my_progress tool so the assistant sees the learner's progress
...
Spec 9.2 has the assistant retrieve from the learner's notes and progress;
progress was missing. Reads progressRepo(db).get for the signed-in user.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:37:25 +01:00
Lucas Winther and Claude Opus 5.5
6fb0019cd9
feat(ai): read the importer's deck and transcript cache; studio DraftWriter fits DraftSink as is
...
Retrieval now reads <dataDir>/cache/decks/<courseId>/<deckId>/text.json and
<dataDir>/cache/transcripts/<courseId>/<lessonId>.json (skipped when the lesson
has a transcript file). DraftSink returns { location?, branch?, commit? }, so
the studio's createDraftWriter(ctx) needs no adapter; generateDraft computes
paths itself and reports the draft branch.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 04:36:48 +01:00
Lucas Winther and Claude Opus 5.5
08d3e3f642
feat(ai): assistant panel, AI settings and studio generator UI
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:30:22 +01:00
Lucas Winther and Claude Opus 5.5
a57222ecc3
feat(ai): HTTP routes, chat streaming and generation job
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:25:10 +01:00
Lucas Winther and Claude Opus 5.5
3cec42bba5
feat(ai): house-style generator writing drafts through a DraftSink
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:22:38 +01:00
Lucas Winther and Claude Opus 5.5
49d1df0f13
feat(ai): assistant prompt, course tools and tool loop
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:20:31 +01:00
Lucas Winther and Claude Opus 5.5
24cd6329cb
feat(ai): MCP client over stdio and streamable HTTP
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:19:13 +01:00
Lucas Winther and Claude Opus 5.5
50e1e49b6d
feat(ai): BM25 course retrieval over lessons, transcripts, code, deck text and notes
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:18:21 +01:00
Lucas Winther and Claude Opus 5.5
76ea0d5101
feat(ai): OpenAI-compatible provider (covers Ollama)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:16:06 +01:00
Lucas Winther and Claude Opus 5.5
3c2220145b
feat(ai): Anthropic provider over fetch with streaming tool use
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:15:33 +01:00
Lucas Winther and Claude Opus 5.5
bccbc692e9
feat(ai): settings repository for server config, BYOK keys and mentor toggles
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:14:29 +01:00
Lucas Winther and Claude Opus 5.5
e1938b5be8
feat(ai): package scaffold and AES-GCM secret box
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:13:50 +01:00
Lucas Winther and Claude Opus 5.5
c2a3464937
docs(ai): WP-D implementation plan
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:13:33 +01:00
Lucas Winther and Claude Opus 5.5
3ca05fcfbc
merge: Phase 0 contract
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:07:26 +01:00
Lucas Winther and Claude Opus 5.5
05eee4cd40
feat: server entry and web shell with design tokens
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:05:49 +01:00
Lucas Winther and Claude Opus 5.5
7f33169487
feat(core): config, job queue, range media serving, feature composition
...
Adds aclRepo to @stc/db for canView.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:04:46 +01:00
Lucas Winther and Claude Opus 5.5
ea18f18b4f
fix(db): use DOUBLE PRECISION for position and progress columns
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:01:31 +01:00
Lucas Winther and Claude Opus 5.5
f061e36092
fix(db): jobs.update writes only patched columns; late progress cannot resurrect a finished job
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 03:01:05 +01:00
Lucas Winther and Claude Opus 5.5
4636273d55
feat(db): progress, notes, attempts, library, jobs repositories
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:59:09 +01:00
Lucas Winther and Claude Opus 5.5
738d813fb8
feat(db): Bun.SQL connection and portable migrations
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:57:34 +01:00
Lucas Winther and Claude Opus 5.5
f71a31a5f1
fix(course-format): validate anchor file via requireFile; real throw test for loadCourse catch
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:55:38 +01:00
Lucas Winther and Claude Opus 5.5
a82ab18bee
fix(course-format): directories are not lesson files; a failing course never rejects loadAll
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:54:23 +01:00
Lucas Winther and Claude Opus 5.5
b8c65626f9
feat: overlay manifests for the two reference courses
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:52:24 +01:00
Lucas Winther and Claude Opus 5.5
c78c7ec8d8
feat(course-format): markdown extraction, discovery, loading, repository
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:51:26 +01:00
Lucas Winther and Claude Opus 5.5
7a68800f6f
test: sample fixture course
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:50:00 +01:00
Lucas Winther and Claude Opus 5.5
7e7ce30535
feat(course-format): stcourse.yaml schema
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:49:42 +01:00
Lucas Winther and Claude Opus 5.5
3b15d87a5f
feat(contracts): shared server, exercise, ai, import and web interfaces
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:48:10 +01:00
Lucas Winther and Claude Opus 5.5
9f582b99d2
chore: bun workspace scaffold
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:47:42 +01:00
Lucas Winther and Claude Opus 5.5
830a0cdd9b
chore: ignore worktrees
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:46:38 +01:00
Lucas Winther and Claude Opus 5.5
29ba043de7
Add STCourses implementation plan
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:46:28 +01:00
lucasw89 and Claude Opus 5.5
ab96addbab
Add STCourses design, research report and approved mockup
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-30 02:37:38 +01:00