Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .github/workflows/nginxpilot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: docker/setup-qemu-action@v3

- uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
Expand All @@ -65,7 +63,7 @@ jobs:
uses: docker/build-push-action@v6
with:
context: nginxpilot
platforms: linux/amd64,linux/arm64
platforms: linux/amd64
push: ${{ github.event_name == 'push' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/quaykeeper.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: docker/setup-qemu-action@v3

- uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
Expand All @@ -62,7 +60,7 @@ jobs:
# siblings, so the build needs the whole monorepo (see quaykeeper/Dockerfile).
context: .
file: quaykeeper/Dockerfile
platforms: linux/amd64,linux/arm64
platforms: linux/amd64
push: ${{ github.event_name == 'push' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/taskforge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: docker/setup-qemu-action@v3

- uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
Expand All @@ -62,7 +60,7 @@ jobs:
# siblings, so the build needs the whole monorepo (see taskforge/Dockerfile).
context: .
file: taskforge/Dockerfile
platforms: linux/amd64,linux/arm64
platforms: linux/amd64
push: ${{ github.event_name == 'push' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
Expand Down
68 changes: 68 additions & 0 deletions .github/workflows/voxscribe.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: voxscribe

on:
push:
branches: [main]
# the image bundles built @toolcase/base + web-components, so changes there
# must rebuild voxscribe too (build context is the repo root).
paths:
- 'voxscribe/**'
- 'base/**'
- 'web-components/**'
- 'package-lock.json'
- '.dockerignore'
- '.github/workflows/voxscribe.yml'
pull_request:
paths:
- 'voxscribe/**'
- 'base/**'
- 'web-components/**'
- 'package-lock.json'
- '.dockerignore'
- '.github/workflows/voxscribe.yml'

permissions:
contents: read
packages: write

env:
IMAGE_NAME: ghcr.io/${{ github.repository }}/voxscribe

jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
if: github.event_name == 'push'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_NAME }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=sha,format=short

- name: Build and push
uses: docker/build-push-action@v6
with:
# repo root: voxscribe's @toolcase/* deps are workspace siblings, so
# the build needs the whole monorepo (see voxscribe/Dockerfile).
context: .
file: voxscribe/Dockerfile
platforms: linux/amd64
push: ${{ github.event_name == 'push' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=voxscribe
cache-to: type=gha,scope=voxscribe,mode=max
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ lib
# @/lib/tc web-components interop shim), not build output — keep it tracked.
!taskforge/lib/
!quaykeeper/lib/
!voxscribe/lib/
node_modules
.parcel-cache
.DS_Store
Expand Down
6 changes: 3 additions & 3 deletions examples/public/web-components/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -21161,7 +21161,7 @@ Tag input with autocomplete recommendations and optional create-on-type. A form-

| Event | Detail | Description |
|-------|--------|-------------|
| `tc-change` | `{ tags: string[] }` | Dispatched whenever a tag is added or removed. |
| `tc-change` | `{ value: string[] }` | Dispatched whenever a tag is added or removed; `detail.value` is the updated tags array (canonical field-change shape). |

**Slots:** none.

Expand Down Expand Up @@ -21190,7 +21190,7 @@ Tag input with autocomplete recommendations and optional create-on-type. A form-
ti.recommendations = ['TypeScript', 'JavaScript', 'Python', 'Rust', 'Go']
ti.defaultValue = ['TypeScript']
ti.addEventListener('tc-change', e => {
console.log('tags:', e.detail.tags)
console.log('tags:', e.detail.value)
})
</script>

Expand All @@ -21208,7 +21208,7 @@ Tag input with autocomplete recommendations and optional create-on-type. A form-
ctl.recommendations = ['Go', 'Rust', 'Zig']
ctl.value = ['Go']
ctl.addEventListener('tc-change', e => {
ctl.value = e.detail.tags // parent owns the state
ctl.value = e.detail.value // parent owns the state
})
</script>

Expand Down
2 changes: 1 addition & 1 deletion nginxpilot/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ ARG CERTBOT_DNS_PLUGINS="certbot-dns-digitalocean certbot-dns-cloudflare certbot
# every pip invocation crashes on `import pyexpat`. Naming libexpat with
# --upgrade is what actually moves it forward.
RUN apk add --no-cache --upgrade libexpat git openssh-client ca-certificates \
tzdata su-exec libcap certbot py3-pip && \
tzdata su-exec libcap certbot py3-pip curl && \
pip install --break-system-packages certbot-nginx ${CERTBOT_DNS_PLUGINS}

RUN addgroup -S nginxpilot 2>/dev/null; \
Expand Down
77 changes: 76 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"taskforge",
"quaykeeper",
"quaykeeper-landing",
"voxscribe",
"examples"
],
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion quaykeeper/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ ENV QUAYKEEPER_AGENT_PORT=4101
ENV QUAYKEEPER_CLIENT_DIR=/app/quaykeeper/client-bin

RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*

# non-root user
Expand Down
2 changes: 1 addition & 1 deletion taskforge/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ ENV APP_SKILLS_DIR=/app/skills
# git + openssh-client (git operations / SSH remotes) + the Claude Code CLI
# (default agent backend)
RUN apt-get update \
&& apt-get install -y --no-install-recommends git openssh-client ca-certificates \
&& apt-get install -y --no-install-recommends git openssh-client ca-certificates wget curl \
&& rm -rf /var/lib/apt/lists/* \
&& npm i -g @anthropic-ai/claude-code \
&& npm cache clean --force
Expand Down
22 changes: 21 additions & 1 deletion taskforge/server/domain/site-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,20 @@ export const THEME_LABEL: Record<ThemeName, string> = {
* selectors are double-attribute scoped, so the `default` theme needs an explicit
* `data-tc-theme="default"` when a variant is active (the branding context handles it).
*/
export const VARIANT_NAMES = ['', 'ocean', 'forest', 'ember', 'royal'] as const
export const VARIANT_NAMES = [
'',
'ocean',
'forest',
'ember',
'royal',
'mint',
'rose',
'crimson',
'indigo',
'slate',
'sunset',
'twilight',
] as const

export type VariantName = (typeof VARIANT_NAMES)[number]

Expand All @@ -47,6 +60,13 @@ export const VARIANT_LABEL: Record<VariantName, string> = {
forest: 'Forest (green / lime)',
ember: 'Ember (orange / gold)',
royal: 'Royal (violet / magenta)',
mint: 'Mint (teal / mint)',
rose: 'Rose (rose / pink)',
crimson: 'Crimson (red / coral)',
indigo: 'Indigo (indigo / periwinkle)',
slate: 'Slate (steel / silver)',
sunset: 'Sunset (coral → orange)',
twilight: 'Twilight (violet → blue)',
}

/** Type guard: a request-supplied value is one of the bundled theme names. */
Expand Down
15 changes: 14 additions & 1 deletion taskforge/test/site-settings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,20 @@ describe('isThemeName (tracks the bundled web-components skins)', () => {
describe('isVariantName (tracks the bundled accent variants)', () => {
it('accepts every variant including the base-accents empty string', () => {
for (const v of VARIANT_NAMES) expect(isVariantName(v)).toBe(true)
expect(VARIANT_NAMES).toEqual(['', 'ocean', 'forest', 'ember', 'royal'])
expect(VARIANT_NAMES).toEqual([
'',
'ocean',
'forest',
'ember',
'royal',
'mint',
'rose',
'crimson',
'indigo',
'slate',
'sunset',
'twilight',
])
expect(isVariantName('pastel')).toBe(false)
expect(isVariantName(42)).toBe(false)
})
Expand Down
11 changes: 11 additions & 0 deletions voxscribe/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules
.next
.git
.env
.env*.local
npm-debug.log*
README.md
.workspace
# Local SQLite store — must never enter the image.
voxscribe.db
voxscribe.db-*
Loading
Loading