openpencil/nix/integration/OpenPencil.pkl
Can H. Tartanoglu bb27a7458f
feat(integration): expose declarative harness surface (#185)
* chore(nix): add reproducible OpenPencil flake

* fix(nix): patch and smoke-test prebuilt binaries

* chore(ci): keep workflow validation in integration follow-up

* feat(integration): expose declarative harness surface

* ci: run Nix checks for integration surface

* test: verify all OpenPencil runtime tools

* feat(integration): expose web server package

* chore(nix): remove rebase conflict marker

* fix(nix): update OpenPencil CLI prebuilt hash

* fix(nix): validate source outputs and pin release assets

* fix(nix): refresh desktop release hash

* fix(nix): refresh Bun dependency hash

* fix(nix): normalize Bun hoisted aliases

* ci: make headless desktop smoke test deterministic
2026-07-25 23:44:01 +08:00

119 lines
2.9 KiB
Plaintext

/// Stable integration contract exported by the OpenPencil flake.
class PackageOutputs {
sourceRuntime: String
prebuiltRuntime: String
webServer: String
skills: String
}
class Executables {
desktop: String
cli: String
}
class McpTransport {
kind: String
args: Listing<String> = new Listing {}
urlTemplate: String? = null
launcherArgs: Listing<String> = new Listing {}
loopbackOnly: Boolean = true
}
class HarnessAdapter {
format: String
configPath: String
serverKey: String
}
class Integration {
schemaVersion: Int
id: String
systems: Listing<String>
packages: PackageOutputs
executables: Executables
documentTemplate: String
mcp: Mapping<String, McpTransport>
harnesses: Mapping<String, HarnessAdapter>
skillnetManifest: String
skills: Listing<String>
}
integration = new Integration {
schemaVersion = 1
id = "openpencil"
systems = new Listing { "x86_64-linux" }
packages = new PackageOutputs {
sourceRuntime = "runtime"
prebuiltRuntime = "runtime-prebuilt"
webServer = "web-server"
skills = "skills"
}
executables = new Executables {
desktop = "openpencil-desktop"
cli = "op"
}
documentTemplate = "share/openpencil/default.op"
mcp = new {
["stdio"] = new McpTransport {
kind = "stdio"
args = new Listing { "--mcp"; "{document}" }
}
["http"] = new McpTransport {
kind = "http"
urlTemplate = "http://127.0.0.1:{port}/mcp"
launcherArgs = new Listing { "--live-mcp"; "{port}" }
loopbackOnly = true
}
}
harnesses = new {
["claude"] = new HarnessAdapter {
format = "json"
configPath = "~/.claude.json"
serverKey = "openpencil"
}
["codex"] = new HarnessAdapter {
format = "toml"
configPath = "~/.codex/config.toml"
serverKey = "openpencil"
}
["gemini"] = new HarnessAdapter {
format = "json"
configPath = "~/.gemini/settings.json"
serverKey = "openpencil"
}
["opencode"] = new HarnessAdapter {
format = "json"
configPath = "~/.opencode/config.json"
serverKey = "openpencil"
}
["kiro"] = new HarnessAdapter {
format = "json"
configPath = "~/.kiro/settings.json"
serverKey = "openpencil"
}
["copilot"] = new HarnessAdapter {
format = "json"
configPath = "~/.config/github-copilot/mcp.json"
serverKey = "openpencil"
}
["antigravity"] = new HarnessAdapter {
format = "json"
configPath = "~/.gemini/config/mcp_config.json"
serverKey = "openpencil"
}
["grok-build"] = new HarnessAdapter {
format = "toml"
configPath = "~/.grok/config.toml"
serverKey = "openpencil"
}
["hermes"] = new HarnessAdapter {
format = "nix"
configPath = "services.infernix.hermes-agent.mcpServers"
serverKey = "openpencil"
}
}
skillnetManifest = "share/skillnet/openpencil/Skillnet.pkl"
skills = new Listing { "openpencil-design" }
}