Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
746e9c9
refactor: convert to Bun workspaces monorepo
kjanat Apr 7, 2026
0a65547
chore: add repository metadata to workspace packages
kjanat Apr 7, 2026
0702e15
chore: refresh agents + fix review findings
kjanat Apr 7, 2026
942b132
chore(deps): bump wrangler, pin biome, add vitepress override
kjanat Apr 7, 2026
28ee817
chore(deps): centralize all workspace dep versions in catalog
kjanat Apr 7, 2026
f1a6b4b
chore: drop completed re-foundation specs
kjanat Apr 7, 2026
7f9d070
chore: polish docs site, trim goals, modernize scripts
kjanat Apr 8, 2026
2e11c10
fix(docs): resolve all Twoslash compilation errors
kjanat Apr 8, 2026
34b405d
chore(docs): add robots.txt
kjanat Apr 8, 2026
eda57ac
fix(docs): restore Twoslash type resolution for monorepo
kjanat Apr 8, 2026
2fce8c4
fix(jsr): wrap schema export in TS module for JSR score
kjanat Apr 8, 2026
1b4abe0
chore(docs): reorganize sidebar, fix Twoslash shims
kjanat Apr 8, 2026
c1d52ee
docs: polish version constraints, update schema reference
kjanat Apr 8, 2026
7ab02ec
feat: add cli-creation skill, scaffold script, and templates
kjanat Apr 8, 2026
400100a
chore: migrate docs tooling to Bun APIs, bump tsgo
kjanat Apr 9, 2026
75e5170
refactor(docs): centralize paths, drop async Bun shell deps
kjanat Apr 9, 2026
8aa03e8
chore: force bun install, use hoisted linker
kjanat Apr 9, 2026
c517f92
feat(docs): add Cloudflare Web Analytics beacon
kjanat Apr 23, 2026
d1a336e
merge master into workspace
kjanat Apr 23, 2026
3a7406b
chore: refresh formatting and workspace toolchain
kjanat Apr 29, 2026
6deb385
chore: harden starter example repeat counts
kjanat Apr 29, 2026
6e65de9
chore: sync docs paths and workspace deps
kjanat May 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 16 additions & 12 deletions .dprint.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,18 @@
"lineWidth": 100,
"quoteStyle": "single",
"css.enabled": true,
"associations": ["!README.md", "!docs/**/*.md", "!docs/.vitepress/twoslash/*.ts", "*.ts.tpl"],
"associations": [
"!README.md",
"!apps/docs/**/*.md",
"!apps/docs/.vitepress/twoslash/*.ts",
"*.ts.tpl",
"*.ts",
"*.js",
],
},
"markdown": {
"textWrap": "maintain",
"associations": ["!README.md", "!docs/**/*.md", "!docs/.vitepress/twoslash/*.ts"],
"associations": ["!README.md", "!apps/docs/**/*.md", "!apps/docs/.vitepress/twoslash/*.ts"],
},
"markup": {
"html.void.selfClosing": false,
Expand All @@ -23,17 +30,13 @@
"vue.scriptIndent": true,
"vue.styleIndent": true,
"scriptFormatter": "biome",
"associations": ["!README.md", "!docs/**/*.md", "!docs/.vitepress/twoslash/*.ts"],
"associations": ["!README.md", "!apps/docs/**/*.md", "!apps/docs/.vitepress/twoslash/*.ts"],
},
"yaml": { "printWidth": 160 },
"svg": { "useTabs": false },
"exec": {
"cwd": "${configDir}",
"commands": [
{
"command": "bun x sort-package-json --stdin",
"fileNames": ["package.json"],
},
{
"command": "bun x tombi format - --stdin-filename {{file_path}}",
"exts": ["toml"],
Expand All @@ -47,20 +50,21 @@
"tabWidth": 2,
"useTabs": false,
"endOfLine": "lf",
"associations": ["README.md", "docs/**/*.md", "docs/.vitepress/twoslash/*.ts"],
"associations": ["**/README.md", "**/docs/**/*.md", "**/.vitepress/twoslash/*.ts"],
},
"ruff": { "preview": true, "indentWidth": 4 },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Search for Python files that would be formatted by ruff
# Expect: Python files (.py, .pyi) if ruff configuration is warranted

echo "=== Python files in repository ==="
fd -e py -e pyi --type f

echo ""
echo "=== Count of Python files ==="
fd -e py -e pyi --type f | wc -l

Repository: kjanat/dreamcli

Length of output: 170


Ruff configuration stands, but with shallow Python waters ahead

Aye, ye've got Python files in this ship (skills/cli-creation/scripts/scaffold_cli.py), but 'tis but a single scaffolding script, not a full hold of Python cargo. Before ye weigh anchor with this ruff configuration, consider whether one wee helper script be worth the extra tooling weight. If this be the main Python file in sight, ye may be over-rigged for the haul.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.dprint.jsonc at line 52, The repo currently enables "ruff" in .dprint.jsonc
despite only having a single helper Python script
(skills/cli-creation/scripts/scaffold_cli.py); either remove the "ruff" entry
from .dprint.jsonc to avoid adding unnecessary Python tooling, or keep it
intentionally by adding a minimal pyproject.toml (or README note) declaring ruff
configuration and scope so the linting is justified; locate the "ruff" key in
.dprint.jsonc and apply one of these two fixes.

"excludes": ["**/node_modules", "**/{*-,bun}lock(.*)?", "**/snapshots", "**/*.schema.json"],
"plugins": [
"https://plugins.dprint.dev/biome-0.12.8.wasm",
"https://plugins.dprint.dev/g-plane/malva-v0.15.2.wasm",
"https://plugins.dprint.dev/biome-0.12.9.wasm",
"https://plugins.dprint.dev/g-plane/malva-v0.15.3.wasm",
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.27.0.wasm",
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.6.0.wasm",
"https://plugins.dprint.dev/markdown-0.21.1.wasm",
"https://plugins.dprint.dev/kjanat/svg-v0.2.7.wasm",
"https://plugins.dprint.dev/kjanat/svg-v0.4.0.wasm",
"https://plugins.dprint.dev/exec-0.6.2.json@df98f54ffd3092b8a841aedd6d098a2651f16d0a796a40535774f1a8b4b9d463",
"https://plugins.dprint.dev/prettier-0.69.0.json@3de5c7cf5cdbae7b214f404b12503c92e7964be5fffd442b998e6d5fe4ba0e7b",
"https://plugins.dprint.dev/ruff-0.7.10.wasm",
"https://plugins.dprint.dev/ruff-0.7.11.wasm",
"https://plugins.dprint.dev/json-0.21.3.wasm",
"https://plugins.dprint.dev/kjanat/sortpackagejson-0.2.1.wasm",
],
}
9 changes: 6 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Version sync (package.json ↔ deno.json)
run: bun run scripts/check-version-sync.ts
- run: bun run typecheck
- run: bun run typecheck:tsc
- run: bun run --filter @kjanat/dreamcli typecheck:tsc
- run: bun --cwd examples/gh typecheck
- run: bun run meta-descriptions:check
- run: bun run lint
Expand Down Expand Up @@ -65,6 +65,7 @@ jobs:
- name: Test (Bun)
if: matrix.runtime == 'bun'
run: bunx --bun vitest run
working-directory: packages/dreamcli

- name: Test walkthrough example (Bun)
if: matrix.runtime == 'bun'
Expand All @@ -74,6 +75,7 @@ jobs:
- name: Test (Node ${{ matrix.node-version }})
if: matrix.runtime == 'node'
run: npx vitest run
working-directory: packages/dreamcli

# ─────────────────────────────────────────────────────────────────
# Coverage — single Node floor run with explicit thresholds
Expand All @@ -92,7 +94,7 @@ jobs:
- uses: actions/setup-node@v6
with: { node-version: "latest" }
- run: bun install --frozen-lockfile
- run: bun run coverage
- run: bun run --filter @kjanat/dreamcli coverage

# ─────────────────────────────────────────────────────────────────
# Deno smoke — real runtime proof for the built Deno adapter path
Expand All @@ -113,8 +115,9 @@ jobs:
- run: bun install --frozen-lockfile
- run: bun run build
- name: Deno adapter smoke test
run: deno run --allow-read --allow-env scripts/deno-smoke-test.ts
run: deno run --config packages/dreamcli/deno.json --allow-read --allow-env scripts/deno-smoke-test.ts
- run: deno run -A npm:vitest run
working-directory: packages/dreamcli

# ─────────────────────────────────────────────────────────────────
# Docs — build docs and assert no source drift
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ on:
push:
branches: [master]
paths:
- docs/**
- src/**
- apps/docs/**
- packages/dreamcli/src/**
- examples/**
- scripts/**
- package.json
- packages/dreamcli/package.json
- tsconfig.json
- .github/workflows/docs.yml
workflow_dispatch:
Expand Down Expand Up @@ -36,7 +37,7 @@ jobs:

- run: bun run docs:build
- uses: actions/upload-pages-artifact@v4
with: { path: docs/.vitepress/dist }
with: { path: apps/docs/.vitepress/dist }

deploy:
name: Deploy
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pkg-pr-new.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
run: bun run build

- name: Publish preview
run: bunx pkg-pr-new publish --bun --comment=update --packageManager=bun,npm
run: bunx pkg-pr-new publish ./packages/dreamcli --bun --comment=update --packageManager=bun,npm
5 changes: 3 additions & 2 deletions .github/workflows/publish-jsr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Resolve metadata and validate release tag
id: version
env: { RELEASE_TAG: "${{ github.event.release.tag_name }}" }
run: bash scripts/release-meta.sh jsr
run: node scripts/release-meta.ts jsr

publish:
name: Publish
Expand All @@ -36,7 +36,8 @@ jobs:
- run: bun run scripts/check-version-sync.ts
- run: bun --bun run ci
- name: Deno adapter smoke test
run: deno run --allow-read --allow-env scripts/deno-smoke-test.ts
run: deno run --config packages/dreamcli/deno.json --allow-read --allow-env scripts/deno-smoke-test.ts

- name: Publish to JSR
run: deno publish
working-directory: packages/dreamcli
9 changes: 5 additions & 4 deletions .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Resolve metadata and validate release tag
id: version
env: { RELEASE_TAG: "${{ github.event.release.tag_name }}" }
run: bash scripts/release-meta.sh npm
run: node scripts/release-meta.ts npm

build:
name: Build
Expand All @@ -26,16 +26,17 @@ jobs:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
- run: bun install --frozen-lockfile
- run: bun scripts/emit-definition-schema.ts
- run: bun run scripts/check-version-sync.ts
- run: bun packages/dreamcli/scripts/emit-definition-schema.ts
- run: bun scripts/check-version-sync.ts
- run: bun run build
- name: Pack tarball
id: pack
working-directory: packages/dreamcli
run: echo "tarball=$(bun pm pack --quiet --ignore-scripts | tr -d '[:space:]')" >> "${GITHUB_OUTPUT}"
- uses: actions/upload-artifact@v7
with:
name: tarball
path: ${{ steps.pack.outputs.tarball }}
path: packages/dreamcli/${{ steps.pack.outputs.tarball }}
retention-days: 1

publish:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ $RECYCLE.BIN/
/_*.ts
/*example*.ts
.codex
/dreamcli.schema.json

/.bucket/
.playwright-mcp/
__pycache__
Expand Down
14 changes: 9 additions & 5 deletions .zed/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,23 @@
"wrap_guides": [100],
"file_types": { "Markdown": ["LICENSE"], "TypeScript": ["*.ts.tpl"] },
"prettier": { "allowed": false },
"formatter": [{ "language_server": { "name": "dprint" } }],
"formatter": [
{ "language_server": { "name": "dprint" } },
// Fallback to the dprint CLI in case the lsp fucks up, which it does sometimes for some reason...
{ "external": { "command": "dprint", "arguments": ["fmt", "--stdin", "{buffer_path}"] } }
Comment on lines +14 to +17

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat -n .zed/settings.json | head -50

Repository: kjanat/dreamcli

Length of output: 1989


Hoist the same colors on both masts, ye scallywag.

Line 14 still calls bare dprint while the dprint LSP config at lines 42-47 channels it through bunx. If a deckhand lacks a global dprint installed, yer fallback formatter'll sink while the LSP sails smooth. Keep both paths pointin' at the bundled tool.

⚙️ Suggested fix
 	"formatter": [
 		{ "language_server": { "name": "dprint" } },
 		// Fallback to the dprint CLI in case the lsp fucks up, which it does sometimes for some reason...
-		{ "external": { "command": "dprint", "arguments": ["fmt", "--stdin", "{buffer_path}"] } }
+		{ "external": { "command": "bunx", "arguments": ["dprint", "fmt", "--stdin", "{buffer_path}"] } }
 	],
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"formatter": [
{ "language_server": { "name": "dprint" } },
// Fallback to the dprint CLI in case the lsp fucks up, which it does sometimes for some reason...
{ "external": { "command": "dprint", "arguments": ["fmt", "--stdin", "{buffer_path}"] } }
"formatter": [
{ "language_server": { "name": "dprint" } },
// Fallback to the dprint CLI in case the lsp fucks up, which it does sometimes for some reason...
{ "external": { "command": "bunx", "arguments": ["dprint", "fmt", "--stdin", "{buffer_path}"] } }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.zed/settings.json around lines 11 - 14, The fallback formatter entry
currently calls the bare "dprint" executable while the language_server formatter
for "dprint" is routed through "bunx"; update the external formatter entry so it
invokes bunx (e.g., change the external { "command": "dprint", ... } to use
"bunx" as the command and pass "dprint", "fmt", "--stdin", "{buffer_path}" as
arguments) so both the language_server (name "dprint") and the external
formatter use the same bundled tool path.

],
Comment on lines +14 to +18

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

The formatter fallback chain be clever, though that comment be a wee bit salty.

Havin' the LSP as primary with CLI fallback be a solid defensive pattern. However, that comment on line 13 be usin' rather... colorful language fer a config file that might get shared or copied. Consider softenin' it to somethin' like "which occasionally misbehaves" if ye want to keep things professional-like.

That said, it's yer local editor config, so I won't be hoistin' the black flag over it.

🏴‍☠️ Optional: Tame the salty language
 	"formatter": [
 		{ "language_server": { "name": "dprint" } },
-		// Fallback to the dprint CLI in case the lsp fucks up, which it does sometimes for some reason...
+		// Fallback to the dprint CLI in case the LSP misbehaves
 		{ "external": { "command": "dprint", "arguments": ["fmt", "--stdin", "{buffer_path}"] } }
 	],
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"formatter": [
{ "language_server": { "name": "dprint" } },
// Fallback to the dprint CLI in case the lsp fucks up, which it does sometimes for some reason...
{ "external": { "command": "dprint", "arguments": ["fmt", "--stdin", "{buffer_path}"] } }
],
"formatter": [
{ "language_server": { "name": "dprint" } },
// Fallback to the dprint CLI in case the LSP misbehaves
{ "external": { "command": "dprint", "arguments": ["fmt", "--stdin", "{buffer_path}"] } }
],
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.zed/settings.json around lines 11 - 15, Replace the salty inline comment in
the "formatter" array (the line between the language_server { "name": "dprint" }
entry and the external fallback entry) with a professional phrasing such as
"which occasionally misbehaves" so the config remains defensive (LSP primary,
CLI fallback) but uses neutral language; leave the "formatter" structure, the
language_server name "dprint" and the external command/arguments for the CLI
fallback unchanged.

"languages": {
"JavaScript": {
"code_actions_on_format": {
"fixAll.biome": true,
"organizeImports.biome": true
"source.fixAll.biome": true,
"source.organizeImports.biome": true
},
"language_servers": ["vtsls", "tsgo", "biome", "deno"]
},
"TypeScript": {
"code_actions_on_format": {
"fixAll.biome": true,
"organizeImports.biome": true
"source.fixAll.biome": true,
"source.organizeImports.biome": true
},
"language_servers": ["vtsls", "tsgo", "biome", "deno", "vue-language-server"]
}
Expand Down
Loading
Loading