Repository navigation
feat(workflows,tools): every workflow and tool package is publishable standalone (CL-8157) - #760
Merged
Merged
Conversation
CL-8157 makes every workflows/* and *-tools package individually publishable. Add check:publishable-workflows so a package that drops private: true regains it, or gains a workspace:*/private runtime dependency, fails CI instead of silently drifting. Claude-Session: https://claude.ai/code/session_01RweuMUskU2nvcFhdckc7EG
Every workflows/* package and every publishable packages/*-tools package drops private: true and gains a standalone-tarball shape: name/version already existed, exports/files/license/repository/publishConfig round it out, @intx/* moves from dependencies to peerDependencies pinned at the exact npm-published version (0.3.0, matching vendor/intx/*'s own manifests), and any @corbits/* runtime dependency is pinned to that package's own literal version instead of workspace:* (which never survives a publish). Workflows also gain interchange.workflow, the field the sidecar's registry-source loader reads to import the definition module. devDependencies keep workspace:*/catalog: — they're monorepo-only dev conveniences, never installed by a consumer of the published tarball. access-tools, connections-tools, and interaction-tools stay private: each has a runtime dependency (@corbits/error-sink or @corbits/connections) that is itself still private and out of this ticket's scope; publishing them would ship a tarball an installer can never satisfy. Claude-Session: https://claude.ai/code/session_01RweuMUskU2nvcFhdckc7EG
TheGreatAxios
force-pushed
the
cl-8157-workflow-packages
branch
from
September 17, 2026 17:22
226fe99 to
d4e77a9
Compare
This was referenced Sep 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
CL-8157 (child of CL-8151, follows CL-8152/#755 which already cut
Workbench-internal imports): every
workflows/<name>package and everypackages/*-toolspackage that can be published cleanly now is —private: truedropped,exports/files/license/repository/publishConfig.access: "public"filled in, and a real dependency-versionstory instead of
workspace:*.Decision: ship TS source, not a build
The sidecar's
@intx/workflow-hostloadWorkflowDefinitionFromClosure(
vendor/intx/workflow-host/src/workflow-definition-loader.ts) reads amaterialized package's
package.json.interchange.workflowfield anddoes a plain
import(fileUrl)on it — no build step, nodist/. Thesidecar itself runs as
bun src/index.ts(apps/sidecar/package.json),so it can
import()a.tsfile directly. Every workflow packagealready shipped
"exports": {".": "./src/index.ts"}pointing at rawsource; this PR keeps that and adds the matching
"interchange": {"workflow": "./src/index.ts"}field the registry-sourceloader actually reads, plus
"files": ["src", "LICENSE", "README.md"]so the tarball carries only what's needed.
Dependency story
@intx/*moved fromdependenciestopeerDependencies, pinned atthe exact version in each package's own
vendor/intx/*/package.json(
0.3.0across the board, matching the rootoverrides). Caveatworth flagging: per
VENDORED.md, several vendored@intx/*trees(
agent,types,workflow, …) are ahead of what npm's0.3.0actually published — a real installer pinning
0.3.0today gets aslightly older API surface than this repo runs against locally. That's
an existing vendoring-ledger fact, not something this PR can fix; it
resolves as those packages get re-published.
@corbits/*runtime dependencies are pinned to that package's ownliteral version (never
workspace:*, which bun's packer would rewritesilently at pack time but which the checked-in manifest must not rely
on — verified below).
devDependencieskeepworkspace:*/catalog:— never installed by aconsumer of the published tarball, so there's nothing to fix there.
arktype,@modelcontextprotocol/sdk, etc. staycatalog:per theexisting
catalog-pinscheck;bun pm packrewritescatalog:to thereal range at pack time (verified below), same as it rewrites
workspace:*.Verified, don't assume:
bun pm packrewrites bothworkspace:*andcatalog:So the tarball itself was already fine; the checked-in manifest was not
— hence
check:publishable-workflows(new), which fails a checked-inworkspace:*runtime range or a runtime dependency on a still-privatepackage, independent of what the packer would have rewritten.
Proof: pack → extract → install → import, for
workflows/assistantandworkflows/echoworkflows/assistant(has a real@corbits/catalog-toolsruntime dep):workflows/echo(peer deps only, no@corbits/*runtime dep at all):The real npm registry served
@intx/agent/@intx/types/@intx/workflowat
0.3.0for both; the@corbits/*runtime dep resolved through alocal tarball only because nothing in this repo publishes to npm yet —
same shape a real install would take once it does.
Left private (blockers, listed rather than worked around)
Per-package runtime dependency on a still-private, out-of-scope package:
packages/access-tools→@corbits/error-sink(runtimedependencies)packages/connections-tools→@corbits/connections(runtimedependencies)packages/interaction-tools→@corbits/error-sink(runtimedependencies)granola-toolsandlinear-toolsonly reference@corbits/credential-providersin
devDependencies(test-only), so both are clean and are published inthis PR.
New structural check
scripts/checks/publishable-workflows.ts: fails any non-privateworkflows/*orpackages/*-tools/tools-*package missingexports/files/license, or carrying aworkspace:*(or private-package)runtime dependency.
bun run check:structural(full suite),bun run lint, and package-scopedbun run typecheckall pass; the twowhole-repo
typecheck/lintfailures pre-exist onmain(
packages/chat-uimissing-module/unused-var errors unrelated to thischange — confirmed via
git statusshowing no changes underpackages/chat-ui).Test plan
bun installat repo root resolves cleanlybun run check:structuralgreen (including newcheck:publishable-workflows)bun testfor touched packages/workflows greenbun run typecheckgreen for touched packagesbun pm pack→ extract → install →import()proof above forworkflows/assistantandworkflows/echohttps://claude.ai/code/session_01RweuMUskU2nvcFhdckc7EG