Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
7c07eaf
fix(cli): preserve configured Mint host origin
Zhao0335 Sep 8, 2026
2e63949
ci: enable trusted publishing for MCP and CLI releases (#779)
Aymericr Sep 8, 2026
5e0f985
docs: add verified candidate CLI preview (#780)
Aymericr Sep 8, 2026
72d4451
Require measured evidence and target-scoped furniture checks (#781)
Aymericr Sep 8, 2026
c405176
Document skill validation and safe preview activation (#782)
Aymericr Sep 8, 2026
0757ff2
editor: Add duct and pipe fittings, routing, and system checks (#769)
sudhir9297 Sep 8, 2026
cbb44d1
perf(editor): instance the ceiling corner brackets per level (#784)
wass08 Sep 8, 2026
75fd5fd
perf(nodes): skip animation mixers for items without clips (#785)
wass08 Sep 8, 2026
e7dc753
feat(capture): add shared clay previews and dollhouse rendering
Aymericr Sep 8, 2026
7e4d2d4
Merge remote-tracking branch 'origin/main' into feat/capture-clay-review
Aymericr Sep 8, 2026
51a66f2
docs(capture): document local previews and mesh presentation
Aymericr Sep 8, 2026
15e7b32
Merge pull request #788 from pascalorg/feat/capture-clay-review
Aymericr Sep 8, 2026
458ae29
Split canopy regression matrix into independent tests
Aymericr Sep 9, 2026
35f8665
Merge pull request #790 from pascalorg/fix/canopy-ci-matrix-cases
Aymericr Sep 9, 2026
6e6e5e8
feat(skills): fail closed on missing furniture inputs
Aymericr Sep 9, 2026
029bfda
Merge pull request #791 from pascalorg/feat/furniture-fit-missing-inp…
Aymericr Sep 9, 2026
b425ec4
perf(nodes): batch ceiling undersides and slab bodies (charter row 16…
wass08 Sep 9, 2026
9c8c610
test(nodes): run source-system probes from a package-local file, not …
wass08 Sep 9, 2026
32c3c8a
test(nodes): establish probe mocks before any fiber/react import (#793)
wass08 Sep 9, 2026
1a56c9a
skills: make furniture follow-ups blocker-aware (#794)
Aymericr Sep 9, 2026
fbe7718
docs: record agent skills 0.1.4 release source (#795)
Aymericr Sep 9, 2026
dfb1c11
docs(skills): prepare OpenAI plugin submission
Aymericr Sep 9, 2026
c58339d
Merge pull request #796 from pascalorg/chore/openai-plugin-readiness-…
Aymericr Sep 9, 2026
0fe434e
docs(skills): complete OpenAI review fixtures
Aymericr Sep 9, 2026
7163fce
Merge pull request #797 from pascalorg/chore/openai-review-materials-…
Aymericr Sep 9, 2026
aed6718
docs(skills): prepare ClawHub publication
Aymericr Sep 9, 2026
5ee7ca5
Merge pull request #798 from pascalorg/chore/clawhub-readiness-20260909
Aymericr Sep 9, 2026
df12698
fix(plugin): require MCP for OpenAI submission (#799)
Aymericr Sep 9, 2026
ff953a1
feat(mcp): add tool execution middleware
Aymericr Sep 9, 2026
f758c63
Merge pull request #801 from pascalorg/feat/mcp-tool-executor-20260909
Aymericr Sep 9, 2026
f03912f
docs(skills): record 0.1.6 as released
Aymericr Sep 9, 2026
ea1d6a4
Merge pull request #802 from pascalorg/docs/skills-release-0.1.6-inte…
Aymericr Sep 9, 2026
6ac73da
fix(mcp): propagate tool cancellation
Aymericr Sep 9, 2026
0419601
Merge pull request #803 from pascalorg/fix/mcp-execution-cancellation…
Aymericr Sep 9, 2026
c2597da
fix(mcp): preserve executor on tool updates
Aymericr Sep 9, 2026
c156615
Merge pull request #804 from pascalorg/fix/mcp-tool-update-executor-2…
Aymericr Sep 9, 2026
d674d60
chore(skills): harden ClawHub bundles
Aymericr Sep 9, 2026
57cbaae
test(skills): reject ClawHub ignore overrides
Aymericr Sep 9, 2026
c4a7371
Merge pull request #806 from pascalorg/fix/clawhub-skill-ignore-20260909
Aymericr Sep 9, 2026
6200e3f
Add official MCP Registry publishing
Aymericr Sep 9, 2026
3db59fc
Merge pull request #808 from pascalorg/feat/mcp-registry-discovery
Aymericr Sep 9, 2026
1cfaba9
ci(mcp): verify live catalog consistency
Aymericr Sep 9, 2026
bc6c6a6
Merge pull request #809 from pascalorg/chore/mcp-registry-catalog-con…
Aymericr Sep 9, 2026
981e762
feat(skills): bundle local Claude MCP connector
Aymericr Sep 9, 2026
9cb081e
docs(skills): correct Claude MCP upgrade guidance
Aymericr Sep 9, 2026
b0aa85c
Merge pull request #810 from pascalorg/feat/claude-plugin-local-mcp-017
Aymericr Sep 9, 2026
76f5bb0
docs(skills): record 0.1.7 release
Aymericr Sep 9, 2026
ed562c3
Merge pull request #811 from pascalorg/docs/agent-skills-017-release-…
Aymericr Sep 9, 2026
7bcb28e
fix(skills): hide maintainer workflows from discovery
Aymericr Sep 9, 2026
81ca1b7
fix(mcp): classify all tool side effects
Aymericr Sep 9, 2026
f107eda
Merge pull request #812 from pascalorg/feat/agent-discoverability-wave-2
Aymericr Sep 9, 2026
b422fe2
docs(openai): add tool annotation justifications (#813)
Aymericr Sep 10, 2026
20425d7
feat(cli): add hosted agent claim command (#815)
Aymericr Sep 10, 2026
0788fd2
fix(ci): authenticate CLI npm publish (#816)
Aymericr Sep 10, 2026
7cd7546
fix(ci): restore OIDC for CLI publishing (#817)
Aymericr Sep 10, 2026
8ca0b79
feat(cli): prefill hosted agent claim (#818)
Aymericr Sep 10, 2026
c41c39a
docs(cli): publish verified agent claim preview (#819)
Aymericr Sep 10, 2026
5dabbc3
feat(cli): report hosted agent status (#821)
Aymericr Sep 10, 2026
ac81648
docs(cli): publish verified agent status preview (#822)
Aymericr Sep 10, 2026
cbaed2c
feat(skills): add human-openable fit prechecks (#824)
Aymericr Sep 10, 2026
20cbb20
docs(skills): record agent report release evidence (#825)
Aymericr Sep 10, 2026
4f7d7c9
perf: scope undo/redo invalidation to changed geometry and cleared pr…
wass08 Sep 10, 2026
5388948
perf: drain initial wall builds within the time budget (charter row 6…
wass08 Sep 10, 2026
69f2552
Experience fix pass: placement, selection rotation, roof, stairs, cap…
wass08 Sep 10, 2026
d21fa36
test(editor): resolve history probe modules from packages that depend…
wass08 Sep 10, 2026
7ec084f
feat(editor): streamline connected pipe and duct drafting (#827)
sudhir9297 Sep 10, 2026
68f34b8
skills: portable mcp.json, channel manifests, validator parity (#829)
Aymericr Sep 10, 2026
d460449
skills: make skills/ the Claude plugin root (#832)
Aymericr Sep 10, 2026
4be0c9f
skills: bundle the hosted Pascal MCP server with a key prompt (#835)
Aymericr Sep 10, 2026
831c300
ci(release): graduate prerelease versions on stable bumps (#837)
Aymericr Sep 10, 2026
02bab2a
perf(cli): prune build-only files from the portable runtime (#838)
Aymericr Sep 10, 2026
b083ffd
perf(editor): re-encode fitting thumbnails as 256px webp (#842)
Aymericr Sep 11, 2026
77aef84
chore(editor): drop unreferenced public assets (#843)
Aymericr Sep 11, 2026
81c03a7
ci(release): publish through npm trusted publishing only (#839)
Aymericr Sep 11, 2026
aa2dc24
feat(cli): ship a small CLI that downloads the web editor runtime (#845)
Aymericr Sep 11, 2026
0031296
docs(skills): describe the hosted-only capture tools (#846)
Aymericr Sep 11, 2026
527a364
feat(plugins): add optional hosted auth to the Cursor plugin (#849)
Aymericr Sep 11, 2026
a13f1f9
perf: per-slab invalidation, candidate-scoped temporal reconciliation…
wass08 Sep 11, 2026
330286f
editor: integrate Environment with generic host and export APIs (#831)
AxiomeCG Sep 11, 2026
9ad31cb
refactor(packages): fold capture packages into core and viewer (#851)
Aymericr Sep 11, 2026
3f27843
fix(editor): declare @react-three/test-renderer where the lifecycle t…
wass08 Sep 11, 2026
d1b7696
ci(release): drop registry-url so npm uses OIDC trusted publishing (#…
Aymericr Sep 11, 2026
2ce944c
ci(release): log npm verbosely to surface OIDC exchange errors (#856)
Aymericr Sep 11, 2026
d4e82fd
fix(capture): cache preview artifacts, retry failed downloads, and cl…
Aymericr Sep 11, 2026
0ef40bc
release: @pascal-app/core@1.0.0 @pascal-app/viewer@1.0.0 @pascal-app/…
Aymericr Sep 12, 2026
b5e7eee
docs: replace the CLI preview instructions with the published npm CLI…
Aymericr Sep 12, 2026
33d421a
docs: describe the release workflow and refresh the validation scope …
Aymericr Sep 12, 2026
69e54f0
fix(editor): keep manifold-3d out of consumer bundler graphs (#735)
Aymericr Sep 12, 2026
baf5ad8
mcp: make batch-first apply_patch the stated default (#767)
ActArtech Sep 12, 2026
c0f643f
fix(editor): type optional ancestor traversal for downstream consumer…
FenjuFu Sep 12, 2026
f220080
fix(viewer): clamp GLB floor animation on slow frames (#820)
FenjuFu Sep 12, 2026
4097540
fix(skills): compare bundle paths without a hardcoded separator (#848)
dajiaohuang Sep 12, 2026
627ed51
Merge main and fix Mint origin regression test
Aymericr Sep 12, 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
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@
"plugins": [
{
"name": "pascal-agent-skills",
"version": "0.1.8",
"description": "Create, inspect, validate, and assess furniture layouts with bounded next actions in Pascal through MCP.",
"author": {
"name": "Pascal",
"email": "support@pascal.app",
"url": "https://pascal.app"
},
"source": {
"source": "local",
"path": "./"
Expand Down
2 changes: 2 additions & 0 deletions .agents/skills/open-pr/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: open-pr
description: Open a pull request on pascalorg/editor using the repo's PR template. Use when the user asks to open/create a PR, push and PR, or ship a branch in the editor repo.
metadata:
internal: true
allowed-tools: Bash(git *) Bash(gh *) Read
---

Expand Down
2 changes: 2 additions & 0 deletions .agents/skills/open-pr2/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: open-pr2
description: Open or update a pull request on pascalorg/editor with a plain-language issue-and-fix description based on the full branch diff. Use only when the user explicitly asks for OpenPR2 or /open-pr2.
metadata:
internal: true
disable-model-invocation: true
allowed-tools: Bash(git *) Bash(gh *) Bash(bun *) Read
---
Expand Down
2 changes: 2 additions & 0 deletions .agents/skills/review-architecture/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: review-architecture
description: Review a PR against the Pascal architectural rules — package boundaries (core/viewer/editor/nodes), the registry-driven composition model (def.geometry / def.renderer / def.system), legacy-dispatch regressions, the slots + world-scale-UV convention for new nodes/geometry, hook hygiene (useEditor/useScene/useViewer), and selector performance. Use when the user asks to review a PR, audit a branch, or check that changes respect the codebase's architecture.
metadata:
internal: true
allowed-tools: Bash(git *) Bash(gh *) Read Grep Glob
---

Expand Down
15 changes: 10 additions & 5 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
{
"$schema": "https://json.schemastore.org/claude-code-marketplace.json",
"name": "pascal",
"version": "0.1.0",
"version": "0.1.8",
"description": "Public Pascal workflows for MCP-capable agents.",
"owner": {
"name": "Pascal"
},
"plugins": [
{
"name": "pascal-agent-skills",
"source": "./",
"description": "Create and inspect editable Pascal scenes and run bounded furniture footprint assessments.",
"version": "0.1.0",
"source": "./skills",
"description": "Create, inspect, validate, and assess furniture layouts with bounded next actions in Pascal through MCP.",
"author": {
"name": "Pascal",
"email": "support@pascal.app",
"url": "https://pascal.app"
},
"version": "0.1.8",
"category": "productivity",
"skills": ["./skills/pascal-3d", "./skills/furniture-fit"]
"skills": ["./pascal-3d", "./furniture-fit"]
}
]
}
14 changes: 0 additions & 14 deletions .claude-plugin/plugin.json

This file was deleted.

26 changes: 17 additions & 9 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
{
"name": "pascal-agent-skills",
"version": "0.1.0",
"description": "Create, inspect, validate, and assess furniture layouts in Pascal through MCP.",
"version": "0.1.8",
"description": "Create, inspect, validate, and assess furniture layouts with bounded next actions in Pascal through MCP.",
"author": {
"name": "Pascal",
"email": "support@pascal.app",
"url": "https://pascal.app"
},
"homepage": "https://editor.pascal.app/docs/developers/mcp",
Expand All @@ -12,18 +13,25 @@
"keywords": ["pascal", "3d", "architecture", "mcp", "furniture", "spatial"],
"skills": "./skills/",
"interface": {
"displayName": "Pascal agent skills",
"shortDescription": "Build and inspect Pascal scenes and assess furniture footprints.",
"longDescription": "Use Pascal's MCP tools to work with editable building scenes, validate and save results, and produce bounded furniture footprint reports with explicit evidence and limitations.",
"displayName": "Pascal",
"shortDescription": "Build 3D scenes and check fit",
"longDescription": "Use Pascal's MCP tools to work with editable building scenes, validate and save results, and produce bounded furniture footprint reports with explicit evidence, limitations, and blocker-aware next actions.",
"developerName": "Pascal",
"category": "Developer Tools",
"capabilities": ["Interactive", "Read", "Write"],
"websiteURL": "https://pascal.app",
"capabilities": [
"Build and edit 3D scenes",
"Validate spatial layouts",
"Assess furniture footprints"
],
"websiteURL": "https://editor.pascal.app/docs/developers/mcp",
"privacyPolicyURL": "https://editor.pascal.app/privacy",
"termsOfServiceURL": "https://editor.pascal.app/terms",
"defaultPrompt": [
"Use Pascal to inspect this building project, make the requested bounded edit, validate it, save it, and return the editor URL.",
"Check whether this furniture footprint fits in the measured Pascal room, including rotations, collisions, door access, and unsupported checks."
"Check whether this furniture footprint fits in a measured Pascal room, including rotations, collisions, and door access."
],
"brandColor": "#171717",
"screenshots": []
"composerIcon": "./assets/pascal-mark.svg",
"logo": "./assets/pascal-mark-plate.svg"
}
}
16 changes: 16 additions & 0 deletions .cursor-plugin/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"mcpServers": {
"pascal": {
"type": "stdio",
"command": "pascal",
"args": ["mcp", "connect"]
},
"pascal-hosted": {
"type": "http",
"url": "https://editor.pascal.app/api/mcp",
"headers": {
"Authorization": "Bearer ${PASCAL_API_KEY}"
}
}
}
}
42 changes: 42 additions & 0 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"name": "pascal-agent-skills",
"displayName": "Pascal",
"version": "0.1.8",
"description": "Create, inspect, validate, and assess furniture layouts with bounded next actions in Pascal through MCP.",
"author": {
"name": "Pascal",
"email": "support@pascal.app"
},
"homepage": "https://editor.pascal.app/docs/developers/mcp",
"repository": "https://github.com/pascalorg/editor",
"license": "MIT",
"logo": "assets/pascal-mark-plate.svg",
"keywords": [
"pascal",
"3d",
"architecture",
"mcp",
"furniture",
"spatial"
],
"category": "developer-tools",
"tags": [
"3d",
"architecture",
"floor-plan",
"furniture",
"mcp"
],
"skills": "./skills/",
"variables": {
"type": "object",
"properties": {
"PASCAL_API_KEY": {
"type": "string",
"title": "Pascal API key (hosted)",
"description": "Optional. Create a key under Settings -> API keys at editor.pascal.app to reach your hosted projects, Pascal Capture scans, and shared workspaces. Leave it unset to use only the local Pascal CLI."
}
}
},
"mcpServers": "./.cursor-plugin/mcp.json"
}
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
run: bun run check

- name: Validate agent skills and plugin packages
run: bun scripts/validate-skills.ts
run: bun run skills:validate

- name: Type check
run: bun run check-types
Expand Down
105 changes: 105 additions & 0 deletions .github/workflows/mcp-registry.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: MCP Registry

on:
pull_request:
paths:
- server.json
- .github/workflows/mcp-registry.yml
push:
branches: [main]
paths:
- server.json
- .github/workflows/mcp-registry.yml

env:
MCP_PUBLISHER_VERSION: 1.8.1
MCP_PUBLISHER_LINUX_AMD64_SHA256: a06c9096dcb9727c13555b6be26c7effa707b01f06a4c561ba7a3635443cf2cc

jobs:
validate:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5
with:
persist-credentials: false

- name: Install MCP Registry publisher
run: |
curl --fail --location \
"https://github.com/modelcontextprotocol/registry/releases/download/v${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz" \
--output "$RUNNER_TEMP/mcp-publisher.tar.gz"
echo "${MCP_PUBLISHER_LINUX_AMD64_SHA256} $RUNNER_TEMP/mcp-publisher.tar.gz" | sha256sum --check
tar -xzf "$RUNNER_TEMP/mcp-publisher.tar.gz" -C "$RUNNER_TEMP" mcp-publisher

- name: Validate MCP Registry manifest
run: "$RUNNER_TEMP/mcp-publisher validate"

- name: Verify hosted endpoint contract
run: |
jq --exit-status '
(.version | strings | test("^[0-9]+\\.[0-9]+\\.[0-9]+$"))
and .remotes == [{
"type": "streamable-http",
"url": "https://editor.pascal.app/api/mcp",
"headers": [{
"name": "Authorization",
"description": "Bearer API key created in Pascal Settings, formatted as Bearer sk_live_...",
"isRequired": true,
"isSecret": true
}]
}]
' server.json
curl --fail --location --output /dev/null \
https://editor.pascal.app/docs/developers/mcp
status=$(curl --silent --show-error --output "$RUNNER_TEMP/mcp-response.json" \
--write-out '%{http_code}' \
--request POST \
--header 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"registry-check","version":"1"}}}' \
https://editor.pascal.app/api/mcp)
test "$status" = "401"

- name: Verify live API catalog matches manifest
run: |
endpoint=$(jq --raw-output '.remotes[0].url' server.json)
version=$(jq --raw-output '.version' server.json)
transport=$(jq --raw-output '.remotes[0].type' server.json)
registry_name=$(jq --raw-output '.name' server.json)

curl --fail \
--connect-timeout 10 \
--max-time 30 \
--retry 3 \
--retry-connrefused \
--retry-delay 2 \
--header 'accept: application/linkset+json' \
--dump-header "$RUNNER_TEMP/api-catalog.headers" \
--output "$RUNNER_TEMP/api-catalog.json" \
https://editor.pascal.app/.well-known/api-catalog
grep --ignore-case --extended-regexp \
'^content-type: application/linkset\+json([;[:space:]]|$)' \
"$RUNNER_TEMP/api-catalog.headers"
jq --exit-status \
--arg endpoint "$endpoint" \
--arg version "$version" \
--arg transport "$transport" \
--arg registry_name "$registry_name" '
[.linkset[] | .item[]? | select(.href == $endpoint)] as $matches
| ($matches | length) == 1
and $matches[0].version == [$version]
and $matches[0].transport == [$transport]
and $matches[0]["registry-name"] == [$registry_name]
' "$RUNNER_TEMP/api-catalog.json"

curl --fail --head \
--connect-timeout 10 \
--max-time 30 \
--retry 3 \
--retry-connrefused \
--retry-delay 2 \
https://editor.pascal.app/.well-known/api-catalog \
| tr -d '\r' \
| grep --fixed-strings --ignore-case \
'link: <https://editor.pascal.app/.well-known/api-catalog>; rel="api-catalog"'
Loading