Skip to content

feat(plugin): structured system-prompt sections - #48

Merged
sanchitrk merged 6 commits into
canaryfrom
feat-prompt-sections
Oct 7, 2026
Merged

sanchitrk merged 6 commits into
canaryfrom
feat-prompt-sections

Conversation

@sanchitrk

@sanchitrk sanchitrk commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Structured system-prompt sections. Context files (AGENTS.md / CLAUDE.md) build on this next.

What

The Prompt domain no longer stores one string. A prompt plugin writes a foundation (the untagged head) and named sections; the harness renders them as snake_case XML-style tags, following Pi's structure.

import { Plugin, Section } from "@codeworksh/plugin";

const GithubPrRules = Section.define("github_pr_rules", { format: "list" });

export default Plugin.define({
	id: "acme.prompt.github",
	kind: "prompt",
	setup(ctx) {
		ctx.plugin.prompt.sections.append(Section.Rules, "Never push to main."); // merges into the one <rules>
		ctx.plugin.prompt.sections.append(GithubPrRules, "Link the issue in every PR description.");
	},
});
  • API: prompt.foundation.set/get and prompt.sections.append/set/remove/get, taking Section values, never strings.
  • Built-ins: Section.Rules (list), Addendum, ProjectContext, Skills (text). Custom sections come from Section.define(name, { format }): snake_case only; tools, cwd, foundation and built-in names are rejected.
  • Merging: sections merge by name across plugins. A format mismatch on one name fails the snapshot before any request.
  • Rendering (harness-owned): foundation, <tools>, <rules>, <addendum>, <project_context>, <skills>, <cwd>, then custom sections in first-write order. Tool promptGuidelines lead <rules>; list sections dedupe into - bullets; empty sections are skipped; bodies are never escaped.
  • codework.prompt.default is reduced to content: foundation, standing rules, caller append.

Rendered example: packages/harness/test/__artifacts__/prompt.sections.txt.

Behaviour changes

  • The tool index now lists the final tool catalog, not only the tools registered before the prompt plugin ran.
  • plugins: [] renders the fallback foundation plus <tools>(none)</tools> and <cwd>. Before, it rendered the bare fallback string.
  • PromptRegistry.set/get(string) is removed outright; there are no external users yet.

Also in this PR

  • refactor(harness): drop Location.Ref. Ref.directory let a Location point somewhere other than the mount cwd where tools run. Only a test fixture set it, and Location.layerWith / defaultLayer had no callers. location.directory is now always the mount cwd, which is what <cwd> renders.
  • fix(harness): regenerate retry artifacts from the tests. The committed runner.retry*.json artifacts had been reformatted outside the test, so they never matched what vitest writes. They are regenerated with -u (content unchanged); the tests are untouched.

Verification

  • vp check and vp run typecheck pass.
  • Harness suite: 513 passed. The one failure is the live OpenRouter muse model (runner.llm.live), a provider error unrelated to this change.
  • CLI suite (packages/codework): all non-live tests pass. The live acp tests against muse fail or time out on the provider side.
  • New E2E: two plugins merging into <rules> with dedupe, plus a custom list section and a custom text section, snapshotted to __artifacts__/prompt.sections.txt. Another E2E checks that a format mismatch fails before any request.
  • Peer-reviewed with codex. Its findings (CLI fixtures, unchecked hand-built sections, stale README) are fixed.

🤖 Generated with Claude Code

@sanchitrk
sanchitrk force-pushed the feat-prompt-sections branch from a8baa75 to 9b9dbca Compare October 6, 2026 20:19
@sanchitrk sanchitrk changed the title feat(plugin): structured system-prompt sections (COD-150) feat(plugin): structured system-prompt sections Oct 6, 2026
sanchitrk and others added 3 commits October 7, 2026 01:56
Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sanchitrk
sanchitrk force-pushed the feat-prompt-sections branch from 9b9dbca to 0f47e95 Compare October 6, 2026 20:27
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sanchitrk and others added 2 commits October 7, 2026 14:20
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tools

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sanchitrk
sanchitrk merged commit bddb812 into canary Oct 7, 2026
@sanchitrk
sanchitrk deleted the feat-prompt-sections branch October 7, 2026 12:13
sanchitrk added a commit that referenced this pull request Oct 8, 2026
* fix(harness): retry transient provider failures in the loop (#47)

* feat(plugin): structured system-prompt sections (#48)

* feat(plugin): structured system-prompt sections

Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(harness): drop Location.Ref; location is always the mount cwd

Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(harness): regenerate retry artifacts from the tests

The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(plugin): trim prompt section comments to decisions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(plugin): allow hyphens in prompt section names

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): tweak default plugin prompt & rules to the registered tools

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): load AGENTS.md and CLAUDE.md into the system prompt (#49)

* feat(plugin): structured system-prompt sections

Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(harness): drop Location.Ref; location is always the mount cwd

Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(harness): regenerate retry artifacts from the tests

The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(plugin): trim prompt section comments to decisions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(plugin): allow hyphens in prompt section names

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): tweak default plugin prompt & rules to the registered tools

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): load AGENTS.md and CLAUDE.md into the system prompt

A built-in prompt plugin, codework.prompt.instruction, walks from the
sandbox cwd up to the sandbox root and appends the first readable
instruction file per directory to <project_context>, closest last.
Overrides (AGENTS.override.md, CLAUDE.override.md) beat AGENTS.md and
CLAUDE.md in their directory. Files are read only through the sandbox,
so local and remote sandboxes behave alike and nothing on the host is
read. Inside a linked worktree nested in its main checkout, the main
checkout's same-named file is skipped so it is not applied twice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(harness): instruction discovery across host, Daytona and Vercel sandboxes

One scenario runs on the host sandbox (every vp test) and on Daytona and
Vercel (test:sandbox:e2e), all against a shared artifact: nested files,
overrides, a nested git worktree, and a host-dir link whose settings turn
the plugin off while host files are never read. A relink case moves one
session Daytona -> Vercel -> host, and a real-repository case clones a
pinned fixture branch of codeworksh/69th into all three and requires the
same context per directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* chore: upgrade effect to 4.0.1 and refresh dependencies

Move effect and @effect/* from 4.0.0-rc.115 to stable 4.0.1. The rc pin let
@effect/platform-node resolve platform-node-shared@4.0.1 on fresh installs,
which crashes against effect rc.115.

- effect/unstable/* modules are now effect/*
- Encoding.encodeHex is Hex.encode from effect/encoding
- Schema.isStartsWith is Schema.isStartingWith
- serve the RPC server through RpcServer.layerHttp; the shared websocket
  protocol layer was built twice under 4.0.1 and RPCs over WebSocket hung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* release: @codeworksh/aikit@0.10.0

* release: @codeworksh/plugin@0.1.0

* release: @codeworksh/harness@0.1.0

* release: @codeworksh/cli@0.1.0

* docs(aikit): release notes for 0.10.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(www): drop the CodeWork theme and default to Tokyo Night

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(www): add YouTube video carousel to the watch section

Videos show as thumbnails until played, then swap in a youtube-nocookie
embed. The rail is full-bleed with neighbours peeking in; arrows and the
scroll bar appear once there is more than one video. The lede gets a
beating pixel heart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(www): allow ngrok hosts on the dev server

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(www): spread hero extension tiles to all four corners

Tiles now fill the top corners too, keeping the middle band clear. Small
screens, where tiles grow and slots are few, fill every slot, and resting
tiles are lifted a tenth from dim toward lit so their labels read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(www): balance hero extension tiles across corners on small screens

Small screens have few tile slots, each with a fixed dither threshold, so
whole corners went dark. There, tiles stay visible and each corner keeps
up to three slots nearest its own corner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@sanchitrk sanchitrk mentioned this pull request Oct 8, 2026
sanchitrk added a commit that referenced this pull request Oct 8, 2026
* fix(harness): retry transient provider failures in the loop (#47)

* feat(plugin): structured system-prompt sections (#48)

* feat(plugin): structured system-prompt sections

Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.



* refactor(harness): drop Location.Ref; location is always the mount cwd

Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.



* fix(harness): regenerate retry artifacts from the tests

The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.



* chore(plugin): trim prompt section comments to decisions



* feat(plugin): allow hyphens in prompt section names



* feat(harness): tweak default plugin prompt & rules to the registered tools



---------



* feat(harness): load AGENTS.md and CLAUDE.md into the system prompt (#49)

* feat(plugin): structured system-prompt sections

Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.



* refactor(harness): drop Location.Ref; location is always the mount cwd

Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.



* fix(harness): regenerate retry artifacts from the tests

The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.



* chore(plugin): trim prompt section comments to decisions



* feat(plugin): allow hyphens in prompt section names



* feat(harness): tweak default plugin prompt & rules to the registered tools



* feat(harness): load AGENTS.md and CLAUDE.md into the system prompt

A built-in prompt plugin, codework.prompt.instruction, walks from the
sandbox cwd up to the sandbox root and appends the first readable
instruction file per directory to <project_context>, closest last.
Overrides (AGENTS.override.md, CLAUDE.override.md) beat AGENTS.md and
CLAUDE.md in their directory. Files are read only through the sandbox,
so local and remote sandboxes behave alike and nothing on the host is
read. Inside a linked worktree nested in its main checkout, the main
checkout's same-named file is skipped so it is not applied twice.



* test(harness): instruction discovery across host, Daytona and Vercel sandboxes

One scenario runs on the host sandbox (every vp test) and on Daytona and
Vercel (test:sandbox:e2e), all against a shared artifact: nested files,
overrides, a nested git worktree, and a host-dir link whose settings turn
the plugin off while host files are never read. A relink case moves one
session Daytona -> Vercel -> host, and a real-repository case clones a
pinned fixture branch of codeworksh/69th into all three and requires the
same context per directory.



---------



* chore: upgrade effect to 4.0.1 and refresh dependencies

Move effect and @effect/* from 4.0.0-rc.115 to stable 4.0.1. The rc pin let
@effect/platform-node resolve platform-node-shared@4.0.1 on fresh installs,
which crashes against effect rc.115.

- effect/unstable/* modules are now effect/*
- Encoding.encodeHex is Hex.encode from effect/encoding
- Schema.isStartsWith is Schema.isStartingWith
- serve the RPC server through RpcServer.layerHttp; the shared websocket
  protocol layer was built twice under 4.0.1 and RPCs over WebSocket hung



* release: @codeworksh/aikit@0.10.0

* release: @codeworksh/plugin@0.1.0

* release: @codeworksh/harness@0.1.0

* release: @codeworksh/cli@0.1.0

* docs(aikit): release notes for 0.10.0



* fix(www): drop the CodeWork theme and default to Tokyo Night



* feat(www): add YouTube video carousel to the watch section

Videos show as thumbnails until played, then swap in a youtube-nocookie
embed. The rail is full-bleed with neighbours peeking in; arrows and the
scroll bar appear once there is more than one video. The lede gets a
beating pixel heart.



* chore(www): allow ngrok hosts on the dev server



* feat(www): spread hero extension tiles to all four corners

Tiles now fill the top corners too, keeping the middle band clear. Small
screens, where tiles grow and slots are few, fill every slot, and resting
tiles are lifted a tenth from dim toward lit so their labels read.



* fix(www): balance hero extension tiles across corners on small screens

Small screens have few tile slots, each with a fixed dither threshold, so
whole corners went dark. There, tiles stay visible and each corner keeps
up to three slots nearest its own corner.



---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
sanchitrk added a commit that referenced this pull request Oct 9, 2026
* fix(harness): retry transient provider failures in the loop (#47)

* feat(plugin): structured system-prompt sections (#48)

* feat(plugin): structured system-prompt sections

Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(harness): drop Location.Ref; location is always the mount cwd

Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(harness): regenerate retry artifacts from the tests

The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(plugin): trim prompt section comments to decisions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(plugin): allow hyphens in prompt section names

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): tweak default plugin prompt & rules to the registered tools

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): load AGENTS.md and CLAUDE.md into the system prompt (#49)

* feat(plugin): structured system-prompt sections

Replace the single-string PromptRegistry with a foundation (the untagged
head) and named sections. Plugins write sections by value -- Section.Rules,
Addendum, ProjectContext, Skills, or Section.define(name, { format }) -- so
two plugins merge into one <rules> instead of overwriting the prompt.

The harness now renders the prompt: foundation, <tools>, the built-in
sections, <cwd>, then custom sections in first-write order. Tool
promptGuidelines lead <rules>; list sections dedupe into bullets; a format
mismatch on one name fails the snapshot. codework.prompt.default is reduced
to content, and the tool index now covers the final catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(harness): drop Location.Ref; location is always the mount cwd

Ref.directory let a Location point somewhere other than the mount's cwd,
where tools actually run. Only a test fixture set it, and Location.layerWith
and defaultLayer took a Ref with no callers at all. Remove all three; the
fixture mounts the remote sandbox at the repo instead, as the runner mounts
at the session directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(harness): regenerate retry artifacts from the tests

The committed artifacts had been reformatted outside the test (tab-indented,
mixed with spaces), so the retry snapshots never matched what vitest writes
and failed on every run. Regenerate them with `-u`; the recorded content is
unchanged, only the bytes now come from the test. `__artifacts__/**` is
already excluded from `vp fmt`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(plugin): trim prompt section comments to decisions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(plugin): allow hyphens in prompt section names

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): tweak default plugin prompt & rules to the registered tools

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(harness): load AGENTS.md and CLAUDE.md into the system prompt

A built-in prompt plugin, codework.prompt.instruction, walks from the
sandbox cwd up to the sandbox root and appends the first readable
instruction file per directory to <project_context>, closest last.
Overrides (AGENTS.override.md, CLAUDE.override.md) beat AGENTS.md and
CLAUDE.md in their directory. Files are read only through the sandbox,
so local and remote sandboxes behave alike and nothing on the host is
read. Inside a linked worktree nested in its main checkout, the main
checkout's same-named file is skipped so it is not applied twice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(harness): instruction discovery across host, Daytona and Vercel sandboxes

One scenario runs on the host sandbox (every vp test) and on Daytona and
Vercel (test:sandbox:e2e), all against a shared artifact: nested files,
overrides, a nested git worktree, and a host-dir link whose settings turn
the plugin off while host files are never read. A relink case moves one
session Daytona -> Vercel -> host, and a real-repository case clones a
pinned fixture branch of codeworksh/69th into all three and requires the
same context per directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* chore: upgrade effect to 4.0.1 and refresh dependencies

Move effect and @effect/* from 4.0.0-rc.115 to stable 4.0.1. The rc pin let
@effect/platform-node resolve platform-node-shared@4.0.1 on fresh installs,
which crashes against effect rc.115.

- effect/unstable/* modules are now effect/*
- Encoding.encodeHex is Hex.encode from effect/encoding
- Schema.isStartsWith is Schema.isStartingWith
- serve the RPC server through RpcServer.layerHttp; the shared websocket
  protocol layer was built twice under 4.0.1 and RPCs over WebSocket hung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* release: @codeworksh/aikit@0.10.0

* release: @codeworksh/plugin@0.1.0

* release: @codeworksh/harness@0.1.0

* release: @codeworksh/cli@0.1.0

* docs(aikit): release notes for 0.10.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(www): drop the CodeWork theme and default to Tokyo Night

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(www): add YouTube video carousel to the watch section

Videos show as thumbnails until played, then swap in a youtube-nocookie
embed. The rail is full-bleed with neighbours peeking in; arrows and the
scroll bar appear once there is more than one video. The lede gets a
beating pixel heart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(www): allow ngrok hosts on the dev server

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(www): spread hero extension tiles to all four corners

Tiles now fill the top corners too, keeping the middle band clear. Small
screens, where tiles grow and slots are few, fill every slot, and resting
tiles are lifted a tenth from dim toward lit so their labels read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(www): balance hero extension tiles across corners on small screens

Small screens have few tile slots, each with a fixed dither threshold, so
whole corners went dark. There, tiles stay visible and each corner keeps
up to three slots nearest its own corner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(www): add theme-aware C and cursor logo

* feat(www): add brand SVG and browser icon fallbacks

* fix(site): use logo wordmark

* fixes

* feat(www): add solid pixel wordmark with outline depth

* fix(www): restore corner tile sizing and animation

* fix(www): simplify hero C and animate mobile extension tiles

* feat(www): add responsive logo chase for extension tiles

* feat(www): add subtle grid behind hero pixel effects

* feat(www): simplify hero background to grid and extension tiles

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant