98 lines
2.9 KiB
JSON
98 lines
2.9 KiB
JSON
{
|
|
"schema": "gamecult.eve.plugin.v1",
|
|
"pluginId": "sai.vn",
|
|
"title": "Sai Visual Novel",
|
|
"owner": "Sai",
|
|
"incubation": {
|
|
"ownerRepo": "Sai",
|
|
"currentHostRepo": "Eve",
|
|
"splitTarget": "Sai/sai-vn-plugin",
|
|
"graduationTrigger": "Split when VN/Ink semantics, story command fixtures, and ABI describe/validate/project/lower/measure/apply cases are stable."
|
|
},
|
|
"componentKinds": [
|
|
"vn.stage",
|
|
"panel.dialogue",
|
|
"text.dialogue",
|
|
"rail.actions"
|
|
],
|
|
"commands": [
|
|
{
|
|
"command": "story.continue",
|
|
"schema": "sai.vn.story_command.v1",
|
|
"effect": "advance-story"
|
|
},
|
|
{
|
|
"command": "story.choose",
|
|
"schema": "sai.vn.story_command.v1",
|
|
"effect": "choose-branch"
|
|
},
|
|
{
|
|
"command": "story.jump",
|
|
"schema": "sai.vn.story_command.v1",
|
|
"effect": "jump-to-knot"
|
|
}
|
|
],
|
|
"runtime": {
|
|
"invocationModel": "executable-sidecar",
|
|
"contract": "gamecult.eve.plugin_abi.v1",
|
|
"transports": ["cultmesh", "stdio"],
|
|
"authority": [
|
|
"renderer-independent",
|
|
"no-provider-state-mutation",
|
|
"provider-accepts-or-denies-commands"
|
|
],
|
|
"sidecar": {
|
|
"processKind": "long-running-daemon",
|
|
"protocol": "cultmesh-rpc-with-stdio-dev-transport",
|
|
"requestSchema": "gamecult.eve.plugin_abi.request.v1",
|
|
"responseSchema": "gamecult.eve.plugin_abi.response.v1",
|
|
"operations": ["describe", "validate", "project", "lower", "measure", "apply"],
|
|
"commandEnvelope": "gamecult.eve.command_invocation.v1",
|
|
"receiptSchema": "gamecult.eve.command_receipt.v1",
|
|
"stateAuthority": "proposes-plugin-state-only-provider-accepts"
|
|
}
|
|
},
|
|
"stateSchemas": [
|
|
"sai.vn.story_session.v1",
|
|
"sai.vn.visual_manifest.v1"
|
|
],
|
|
"fixtures": [
|
|
{
|
|
"fixtureId": "sai-vn",
|
|
"schema": "gamecult.eve.surface.v1",
|
|
"path": "web/fixtures/sai-vn-surface.json"
|
|
}
|
|
],
|
|
"abiFixtures": [
|
|
"plugins/incubating/sai-vn.plugin-abi-fixture.json"
|
|
],
|
|
"capabilities": {
|
|
"requires": [
|
|
"vn.stage",
|
|
"story.choose",
|
|
"story.continue",
|
|
"story.jump"
|
|
],
|
|
"optionalPlugins": [
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"relationship": "optional-nested-composition",
|
|
"authority": "Sai can place an embed.norn surface when norn.graph is available; Norn remains the independent graph plugin owner and Sai must not import graph internals.",
|
|
"capabilities": [
|
|
"embed.norn",
|
|
"graph.node.activate"
|
|
]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"relationship": "optional-nested-composition",
|
|
"authority": "Sai can place an embed.tex surface when tex.math is available; TeX remains the independent math plugin owner and Sai must not import TeX internals.",
|
|
"capabilities": [
|
|
"embed.tex",
|
|
"tex.inline",
|
|
"tex.block"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|