License split: Apache-2.0 for contract/ and ts/workflow-core/#6
Merged
Conversation
The contract/ directory defines the language-neutral wire format (OpenAPI 3.0.3 schemas) for the edge-agents platform. Splitting its license to Apache-2.0 allows third-party clients, SDKs, and tooling to implement the wire format without inheriting the AGPL terms that apply to the engine and builder. Verbatim text from https://www.apache.org/licenses/LICENSE-2.0.txt (sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Clarifies that contract/ is licensed under Apache-2.0 while the surrounding repository (engine, llmproxy, ts/workflow-builder, app) remains AGPL-3.0 / commercial. The NOTICE matches the wording style of the top-level NOTICE for consistency. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…kage The workflow-core package is the headless wire-format binding consumers embed in their own tooling, so it carries Apache-2.0 separately from the repository-level AGPL-3.0 license that covers the engine and the React workflow builder. LICENSE is the verbatim Apache-2.0 text; NOTICE points readers back to the repository LICENSE for the AGPL terms covering the rest of the tree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sets the npm "license" field to Apache-2.0 and adds NOTICE to the publishable "files" allowlist so the Apache-2.0 NOTICE ships in the tarball alongside LICENSE. The package itself stays self-describing on the npm registry without the repository-level AGPL terms leaking into downstream consumers' license scans. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a short README so the package has a landing page on npm covering what it is (headless workflow model + validator, no React, no DOM), how to install and validate a workflow, the three-layer architecture, and the Apache-2.0 / repo AGPL-3.0 license split. Linked from the "files" allowlist already shipping in the tarball. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the AGPL-only dual-license paragraph with a component-by- component table that maps contract/ and ts/workflow-core to Apache-2.0 and keeps engine, workflow-builder, and app under AGPL-3.0/commercial. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Top-level NOTICE now explicitly states the two-tier license split and points to contract/LICENSE/NOTICE and ts/workflow-core/LICENSE/NOTICE for the Apache-licensed parts, while keeping the AGPL/commercial wording scoped to the remaining components. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates the License and Contributor Agreement intro to name the two tiers explicitly, and adds a closing "Which license your contribution falls under" subsection so contributors know whether a PR ships under Apache-2.0 or AGPL-3.0-only based on the path it touches. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ckage The workflow-builder package.json files-whitelist already references LICENSE but the file was missing, which would publish the package to npm with no license file in the tarball. Add the full AGPL-3.0 text (copied verbatim from the top-level LICENSE) and a workflow-builder-specific NOTICE that mirrors the wording used by workflow-core/NOTICE and clarifies that this package is AGPL while its workflow-core dependency is Apache-2.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e.json Without an explicit license field, npmjs.com displays "no license" on the package page even though LICENSE ships in the tarball. Set the SPDX identifier explicitly and add NOTICE to the files whitelist so attribution ships alongside the license text (matching workflow-core's pattern). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The intro claimed edge-agents was AGPL-only, which is stale after the license split. Restate the model (Apache-2.0 for contract/ and workflow-core/, AGPL-3.0-only or commercial for the rest) and clarify that the listed third-party licenses are compatible with both tiers. The component list itself is untouched. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The CLA checkbox only mentioned AGPL-3.0 relicensing, which made the template misleading for PRs that touch only contract/ or workflow-core/ (both Apache-2.0). Restate both tiers so contributors agree to the license applicable to the paths they actually touched. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…fig) contract/engine.yaml on main already renamed ProviderConfig to LLMProviderConfig, but the generated go/api bindings were never regenerated and committed — a latent contract↔bindings drift on main that the new codegen-drift CI check surfaced on every open PR. Running `go generate ./...` brings the bindings back in sync.
konegen
approved these changes
Jun 1, 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
Two-tier license model for
edge-agents. Standalone PR againstmain— supersedes #4, which was stacked on #3 and conflated license work with thefh-agentCLI.contract/,ts/workflow-core/go/,ts/workflow-builder/,ts/app/Why split: Make wire format and headless workflow model maximally reusable (third-party Python/Rust/Java clients become possible) while keeping the engine and visual builder protected under copyleft.
What's in this PR (12 commits, license-only)
Apache-2.0 additions
contract/LICENSE+contract/NOTICEts/workflow-core/LICENSE+NOTICE+README.md(new package README)ts/workflow-core/package.json→"license": "Apache-2.0"AGPL preservation (workflow-builder hygiene)
ts/workflow-builder/LICENSE(full AGPL text — was missing!)ts/workflow-builder/NOTICE(explains dependency on Apache workflow-core)ts/workflow-builder/package.json→"license": "AGPL-3.0-only"+ NOTICE infilesDocumentation
README.mdLicense section → 5-row component-by-license tableNOTICE→ documents two-tier model + references subdir LICENSEsTHIRD_PARTY_NOTICESintro → updated for two-tier.github/CONTRIBUTING.md→ new "Which license your contribution falls under" section.github/PULL_REQUEST_TEMPLATE.mdCLA checkbox → mentions both tiersLegal model
contract/Apache LICENSE = verbatim apache.org SHA256cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30ts/workflow-core/Apache LICENSE = same verbatim hashts/workflow-builder/AGPL = exact copy of top-levelLICENSEgit log: only Daniel Maier and Daniel Konegen oncontract/+ts/workflow-core/— CLA-coverage trivialWhat's NOT in this PR (was incorrectly bundled in #4)
fh-agentCLI → that's feat(fh-agent): site.spec.yaml → deployable edge-agent bundle compiler #3engine/server.goconstant-time-compare,httpclienttimeout,resilience.gocleanup → that's feat(fh-agent): site.spec.yaml → deployable edge-agent bundle compiler #3Test plan
mainshows only license-related files (14 files, all inLICENSE/NOTICE/README/package.json/.github/CONTRIBUTING.md/.github/PULL_REQUEST_TEMPLATE.md)cd ts/workflow-core && npm pack --dry-runshows LICENSE + NOTICE + README in tarballcd ts/workflow-builder && npm pack --dry-runshows LICENSE + NOTICE in tarballsha256sum contract/LICENSE ts/workflow-core/LICENSEmatches apache.org verbatimCloses #4 once merged.
🤖 Generated with Claude Code