diff --git a/README.md b/README.md index 9b9c50d..fd28aa5 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,16 @@ **Define organizational agents once. Validate their composition. Compile them into the native shapes your teams already use.** -TypeFerence is an experimental reference implementation of a typed definition and compilation layer for AI agents. It replaces sprawling, duplicated instruction files with a small object model: single inheritance, contract-only interfaces, versioned skills, deterministic compilation, provenance, and artifact diffing. +TypeFerence is an experimental reference implementation of a typed definition and compilation layer for AI agents. It replaces sprawling, duplicated instruction files with Go-like composition: reusable profiles, agent embedding, structurally satisfied interfaces, versioned capabilities, skill implementations, deterministic compilation, provenance, and artifact diffing. -Read the [whitepaper](docs/whitepaper.md), the [rendered PDF](output/pdf/typeference-whitepaper.pdf), or the [draft v1 specification](docs/specification.md). +Read the [whitepaper](docs/whitepaper.md), the [rendered PDF](output/pdf/typeference-whitepaper.pdf), or the [draft v3 specification](docs/specification.md). ```text -system/object -└── helio/enterprise-agent - ├── helio/person-agent - │ └── helio/executive-assistant - └── helio/repo-agent - └── helio/payments-repo-agent +helio/profiles/enterprise-defaults ──embedded by──> helio/profiles/person-defaults ──embedded by──> helio/executive-assistant + └─embedded by──> helio/profiles/repository-defaults ──embedded by──> helio/payments-repo-agent ``` -`system/object` owns mechanics and emits no instructions. Organizations own their enterprise base, policies, voice, and domain knowledge. +There is no universal root and no nominal `implements` declaration. Agents embed reusable profiles, promoted behavior is checked for ambiguity, and interfaces are discovered from the resulting slot and capability set. ## Where it fits @@ -29,7 +25,22 @@ TypeFerence source [Agentic Resource Discovery](https://agenticresourcediscovery.org/) helps clients find and verify deployed capabilities. TypeFerence addresses the earlier authoring problem: producing compatible native artifacts from one governed definition. Discovery portability does not itself provide definition portability. -The long-term objective is behavioral equivalence: preserving declared organizational intent across supported hosts closely enough to be measured and governed. V1 provides the common typed source, deterministic adapters, and provenance needed to test that objective; it does not claim that different models or runtimes already behave identically. +The long-term objective is behavioral equivalence: preserving declared organizational intent across supported hosts closely enough to be measured and governed. V3 provides the common typed source, deterministic adapters, and provenance needed to test that objective; it does not claim that different models or runtimes already behave identically. + +The v3 source shape is deliberately small: + +```yaml +schemaVersion: 3 +kind: agent +id: helio/payments-repo-agent@1.0.0 +embeds: + - helio/profiles/repository-defaults@1.0.0 +skills: + - ref: helio/skills/payments-repository-status@1.0.0 + capability: helio/capabilities/repository-status@1.0.0 +``` + +Use profiles for reusable organizational, domain, or team defaults that should participate in composition without producing their own target bundle. ## Quick start @@ -88,18 +99,19 @@ TypeFerence does not hold signing keys. An external signer can produce detached - `src/` - compiler, target adapters, CLI, and MCP runtime. - `examples/helio/` - fictional cross-domain organization. -- `docs/specification.md` - normative v1 behavior. +- `docs/specification.md` - normative v3 behavior. - `docs/whitepaper.md` and `output/pdf/typeference-whitepaper.pdf` - design paper. - `tests/` - type-system, target, determinism, and MCP integration tests. ## Design boundaries -- One implementation parent; multiple contract-only interfaces. -- Interface and skill contracts are explicit and versioned. +- Agents may embed multiple profiles or agents; profiles may embed other profiles; local slots and capability bindings resolve promoted-name ambiguity. +- Interfaces may embed interfaces and are satisfied structurally, without declarations on agents. +- Capabilities are explicit, versioned method slots; skills are concrete implementations that bind those capabilities. - Context is referenced and loaded only with the skill that needs it. - Target adapters emit platform-native shapes while retaining the portable fields each target supports. - Build output is deterministic and carries provenance. -- No deployment state, hosted runtime, or model credentials in v1. +- No deployment state, hosted runtime, or model credentials in v3. - Structural validation does not guarantee identical LLM behavior across models or hosts. - ARD publication wraps selected target outputs; it is not itself a compilation target or execution runtime. diff --git a/dist/ard/ai-catalog.json b/dist/ard/ai-catalog.json index 8e920bd..c2812d9 100644 --- a/dist/ard/ai-catalog.json +++ b/dist/ard/ai-catalog.json @@ -13,37 +13,32 @@ "version": "1.0.0", "data": { "schemaVersion": 1, - "digest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "digest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "files": [ - { - "path": "agents/enterprise-agent.agent.yaml", - "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: agent\nid: helio/enterprise-agent@1.0.0\ndisplayName: Helio Enterprise Agent\ndescription: Shared organizational identity and governance for every Helio agent.\nabstract: true\nextends: system/object@1.0.0\nslots:\n organization: context/organization.md\n safetyPolicy: context/safety-policy.md\nworkingNorms:\n - Preserve a clear audit trail for material decisions.\n - State uncertainty and route work to an accountable owner when authority is unclear.\ncontextFiles:\n - context/organization.md\n - context/safety-policy.md\n" - }, { "path": "agents/executive-assistant.agent.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: agent\nid: helio/executive-assistant@1.0.0\ndisplayName: Helio Executive Assistant\ndescription: Coordinates an executive\u0027s correspondence, briefings, and cross-agent requests.\nextends: helio/person-agent@1.0.0\ncontextFiles:\n - context/executive-rhythm.md\nskills:\n - ref: helio/skills/prepare-brief@1.0.0\n" + "content": "schemaVersion: 3\nkind: agent\nid: helio/executive-assistant@1.0.0\ndisplayName: Helio Executive Assistant\ndescription: Coordinates an executive\u0027s correspondence, briefings, and cross-agent requests.\nembeds:\n - helio/profiles/person-defaults@1.0.0\ncontextFiles:\n - context/executive-rhythm.md\nskills:\n - ref: helio/skills/prepare-brief@1.0.0\n" }, { "path": "agents/payments-repo-agent.agent.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: agent\nid: helio/payments-repo-agent@1.0.0\ndisplayName: Helio Payments Repository Agent\ndescription: Specializes repository assistance for the fictional payments service.\nextends: helio/repo-agent@1.0.0\ncontextFiles:\n - context/payments-service.md\nskills:\n - ref: helio/skills/payments-repository-status@1.0.0\n overrides: helio/skills/repository-status@1.0.0\n" + "content": "schemaVersion: 3\nkind: agent\nid: helio/payments-repo-agent@1.0.0\ndisplayName: Helio Payments Repository Agent\ndescription: Specializes repository assistance for the fictional payments service.\nembeds:\n - helio/profiles/repository-defaults@1.0.0\ncontextFiles:\n - context/payments-service.md\nskills:\n - ref: helio/skills/payments-repository-status@1.0.0\n capability: helio/capabilities/repository-status@1.0.0\n" }, { - "path": "agents/person-agent.agent.yaml", + "path": "capabilities/prepare-brief.capability.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: agent\nid: helio/person-agent@1.0.0\ndisplayName: Helio Person Agent\ndescription: Handles respectful inbound and outbound assistance for a person.\nabstract: true\nextends: helio/enterprise-agent@1.0.0\nimplements:\n - helio/interfaces/correspondent@1.0.0\nslots:\n principal: context/principal.md\nworkingNorms:\n - Distinguish drafts from messages approved for delivery.\ncontextFiles:\n - context/principal.md\nskills:\n - ref: helio/skills/triage-message@1.0.0\n" + "content": "schemaVersion: 3\nkind: capability\nid: helio/capabilities/prepare-brief@1.0.0\ndisplayName: Prepare Brief\ndescription: Capability slot for assembling decision-oriented executive briefs.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022topic\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022topic\u0022],\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022brief\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022openQuestions\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022brief\u0022,\u0022openQuestions\u0022]}\u0027\n" }, { - "path": "agents/repo-agent.agent.yaml", + "path": "capabilities/repository-status.capability.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: agent\nid: helio/repo-agent@1.0.0\ndisplayName: Helio Repository Agent\ndescription: Applies Helio delivery practices within a software repository.\nabstract: true\nextends: helio/enterprise-agent@1.0.0\nimplements:\n - helio/interfaces/repository-observer@1.0.0\nslots:\n repository: context/repository.md\nworkingNorms:\n - Prefer evidence from tests, diffs, and version control over recollection.\ncontextFiles:\n - context/repository.md\nskills:\n - ref: helio/skills/repository-status@1.0.0\n" + "content": "schemaVersion: 3\nkind: capability\nid: helio/capabilities/repository-status@1.0.0\ndisplayName: Repository Status\ndescription: Capability slot for evidence-backed repository health summaries.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}\u0027\n" }, { - "path": "agents/system-object.agent.yaml", + "path": "capabilities/triage-message.capability.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: agent\nid: system/object@1.0.0\ndisplayName: System Object\ndescription: Compiler intrinsic root with no behavioral content.\nabstract: true\n" + "content": "schemaVersion: 3\nkind: capability\nid: helio/capabilities/triage-message@1.0.0\ndisplayName: Triage Message\ndescription: Capability slot for classifying inbound messages and selecting accountable next actions.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022message\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022required\u0022:[\u0022message\u0022],\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022summary\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022urgency\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022owner\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022nextAction\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022required\u0022:[\u0022summary\u0022,\u0022urgency\u0022,\u0022owner\u0022,\u0022nextAction\u0022]}\u0027\n" }, { "path": "context/executive-rhythm.md", @@ -78,32 +73,47 @@ { "path": "interfaces/correspondent.interface.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: interface\nid: helio/interfaces/correspondent@1.0.0\ndisplayName: Correspondent\ndescription: Contract for agents that assess and route communications.\nrequiresSlots:\n - principal\nrequiresSkills:\n - helio/skills/triage-message@1.0.0\n" + "content": "schemaVersion: 3\nkind: interface\nid: helio/interfaces/correspondent@1.0.0\ndisplayName: Correspondent\ndescription: Contract for agents that assess and route communications.\nrequiresSlots:\n - principal\nrequiresCapabilities:\n - helio/capabilities/triage-message@1.0.0\n" }, { "path": "interfaces/repository-observer.interface.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: interface\nid: helio/interfaces/repository-observer@1.0.0\ndisplayName: Repository Observer\ndescription: Contract for agents that can report evidence-backed repository status.\nrequiresSlots:\n - repository\nrequiresSkills:\n - helio/skills/repository-status@1.0.0\n" + "content": "schemaVersion: 3\nkind: interface\nid: helio/interfaces/repository-observer@1.0.0\ndisplayName: Repository Observer\ndescription: Contract for agents that can report evidence-backed repository status.\nrequiresSlots:\n - repository\nrequiresCapabilities:\n - helio/capabilities/repository-status@1.0.0\n" + }, + { + "path": "profiles/enterprise-defaults.profile.yaml", + "mediaType": "application/yaml", + "content": "schemaVersion: 3\nkind: profile\nid: helio/profiles/enterprise-defaults@1.0.0\ndisplayName: Helio Enterprise Defaults\ndescription: Shared organizational governance for every Helio resource.\nslots:\n organization: context/organization.md\n safetyPolicy: context/safety-policy.md\nworkingNorms:\n - Preserve a clear audit trail for material decisions.\n - State uncertainty and route work to an accountable owner when authority is unclear.\ncontextFiles:\n - context/organization.md\n - context/safety-policy.md\n" + }, + { + "path": "profiles/person-defaults.profile.yaml", + "mediaType": "application/yaml", + "content": "schemaVersion: 3\nkind: profile\nid: helio/profiles/person-defaults@1.0.0\ndisplayName: Helio Person Defaults\ndescription: Reusable behavior for respectful inbound and outbound assistance for a person.\nembeds:\n - helio/profiles/enterprise-defaults@1.0.0\nslots:\n principal: context/principal.md\nworkingNorms:\n - Distinguish drafts from messages approved for delivery.\ncontextFiles:\n - context/principal.md\nskills:\n - ref: helio/skills/triage-message@1.0.0\n" + }, + { + "path": "profiles/repository-defaults.profile.yaml", + "mediaType": "application/yaml", + "content": "schemaVersion: 3\nkind: profile\nid: helio/profiles/repository-defaults@1.0.0\ndisplayName: Helio Repository Defaults\ndescription: Reusable delivery practices for software repository assistance.\nembeds:\n - helio/profiles/enterprise-defaults@1.0.0\nslots:\n repository: context/repository.md\nworkingNorms:\n - Prefer evidence from tests, diffs, and version control over recollection.\ncontextFiles:\n - context/repository.md\nskills:\n - ref: helio/skills/repository-status@1.0.0\n" }, { "path": "skills/payments-repository-status.skill.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: skill\nid: helio/skills/payments-repository-status@1.0.0\ndisplayName: Payments Repository Status\ndescription: Report payments-service health with contract and reconciliation evidence.\ncontextFiles:\n - context/payments-service.md\ninstructions: |\n Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\n Do not report the service healthy when any required financial-control signal is unavailable.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}\u0027\n" + "content": "schemaVersion: 3\nkind: skill\nid: helio/skills/payments-repository-status@1.0.0\nbinds: helio/capabilities/repository-status@1.0.0\ndisplayName: Payments Repository Status\ndescription: Report payments-service health with contract and reconciliation evidence.\ncontextFiles:\n - context/payments-service.md\ninstructions: |\n Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\n Do not report the service healthy when any required financial-control signal is unavailable.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}\u0027\n" }, { "path": "skills/prepare-brief.skill.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: skill\nid: helio/skills/prepare-brief@1.0.0\ndisplayName: Prepare Brief\ndescription: Assemble an executive brief, requesting repository evidence when needed.\ncontextFiles:\n - context/executive-rhythm.md\ninstructions: |\n Build a decision-oriented brief from the supplied topic and evidence.\n When repository status is material, request \u0060payments-repo-agent.repository-status\u0060 and incorporate its returned evidence with attribution.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022topic\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022topic\u0022],\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022brief\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022openQuestions\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022brief\u0022,\u0022openQuestions\u0022]}\u0027\n" + "content": "schemaVersion: 3\nkind: skill\nid: helio/skills/prepare-brief@1.0.0\nbinds: helio/capabilities/prepare-brief@1.0.0\ndisplayName: Prepare Brief\ndescription: Assemble an executive brief, requesting repository evidence when needed.\ncontextFiles:\n - context/executive-rhythm.md\ninstructions: |\n Build a decision-oriented brief from the supplied topic and evidence.\n When repository status is material, request \u0060payments-repo-agent.repository-status\u0060 and incorporate its returned evidence with attribution.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022topic\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022topic\u0022],\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022brief\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022openQuestions\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022brief\u0022,\u0022openQuestions\u0022]}\u0027\n" }, { "path": "skills/repository-status.skill.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: skill\nid: helio/skills/repository-status@1.0.0\ndisplayName: Repository Status\ndescription: Summarize repository health using current version-control and test evidence.\ninstructions: |\n Inspect the requested repository signals. Report branch state, recent material changes, test evidence, risks, and the next accountable action.\n Mark any unavailable signal explicitly instead of inferring success.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}\u0027\n" + "content": "schemaVersion: 3\nkind: skill\nid: helio/skills/repository-status@1.0.0\nbinds: helio/capabilities/repository-status@1.0.0\ndisplayName: Repository Status\ndescription: Summarize repository health using current version-control and test evidence.\ninstructions: |\n Inspect the requested repository signals. Report branch state, recent material changes, test evidence, risks, and the next accountable action.\n Mark any unavailable signal explicitly instead of inferring success.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}\u0027\n" }, { "path": "skills/triage-message.skill.yaml", "mediaType": "application/yaml", - "content": "schemaVersion: 1\nkind: skill\nid: helio/skills/triage-message@1.0.0\ndisplayName: Triage Message\ndescription: Classify an inbound message and recommend an accountable next action.\ninstructions: |\n Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\n Separate facts from assumptions. Return a concise recommendation; do not send a reply.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022message\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022required\u0022:[\u0022message\u0022],\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022summary\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022urgency\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022owner\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022nextAction\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022required\u0022:[\u0022summary\u0022,\u0022urgency\u0022,\u0022owner\u0022,\u0022nextAction\u0022]}\u0027\n" + "content": "schemaVersion: 3\nkind: skill\nid: helio/skills/triage-message@1.0.0\nbinds: helio/capabilities/triage-message@1.0.0\ndisplayName: Triage Message\ndescription: Classify an inbound message and recommend an accountable next action.\ninstructions: |\n Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\n Separate facts from assumptions. Return a concise recommendation; do not send a reply.\ninputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022message\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022required\u0022:[\u0022message\u0022],\u0022additionalProperties\u0022:false}\u0027\noutputSchema: \u0027{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022summary\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022urgency\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022owner\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022nextAction\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022required\u0022:[\u0022summary\u0022,\u0022urgency\u0022,\u0022owner\u0022,\u0022nextAction\u0022]}\u0027\n" } ] }, @@ -135,12 +145,12 @@ { "path": "bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/person-agent@1.0.0\u0022,\n \u0022helio/executive-assistant@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022contractId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022contractId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/person-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/person-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" }, { "path": "provenance.json", "mediaType": "application/json", - "content": "[\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n]\n" + "content": "[\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/person-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n]\n" }, { "path": "skills/prepare-brief/SKILL.md", @@ -156,7 +166,7 @@ }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "neutral" }, @@ -167,7 +177,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -194,23 +204,23 @@ { "path": "bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/repo-agent@1.0.0\u0022,\n \u0022helio/payments-repo-agent@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022contractId\u0022: \u0022helio/skills/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/repository-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/repository-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" }, { "path": "provenance.json", "mediaType": "application/json", - "content": "[\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n]\n" + "content": "[\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/repository-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n]\n" }, { "path": "skills/repository-status/SKILL.md", "mediaType": "text/markdown", - "content": "---\nname: repository-status\ndescription: \u0022Report payments-service health with contract and reconciliation evidence.\u0022\n---\n\nApply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n\n## Context loaded on invocation\n\n- \u0060context/organization.md\u0060\n- \u0060context/safety-policy.md\u0060\n- \u0060context/repository.md\u0060\n- \u0060context/payments-service.md\u0060\n" + "content": "---\nname: repository-status\ndescription: \u0022Report payments-service health with contract and reconciliation evidence.\u0022\n---\n\nApply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n\n## Context loaded on invocation\n\n- \u0060context/organization.md\u0060\n- \u0060context/safety-policy.md\u0060\n- \u0060context/repository.md\u0060\n- \u0060context/payments-service.md\u0060\n" } ] }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "neutral" }, @@ -221,7 +231,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -259,7 +269,7 @@ { "path": ".typeference/bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/person-agent@1.0.0\u0022,\n \u0022helio/executive-assistant@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022contractId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022contractId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/person-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/person-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" }, { "path": "AGENTS.md", @@ -270,7 +280,7 @@ }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "codex" }, @@ -281,7 +291,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -303,7 +313,7 @@ { "path": ".agents/skills/repository-status/SKILL.md", "mediaType": "text/markdown", - "content": "---\nname: repository-status\ndescription: \u0022Report payments-service health with contract and reconciliation evidence.\u0022\n---\n\nApply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n\n## Context loaded on invocation\n\n- \u0060context/organization.md\u0060\n- \u0060context/safety-policy.md\u0060\n- \u0060context/repository.md\u0060\n- \u0060context/payments-service.md\u0060\n" + "content": "---\nname: repository-status\ndescription: \u0022Report payments-service health with contract and reconciliation evidence.\u0022\n---\n\nApply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n\n## Context loaded on invocation\n\n- \u0060context/organization.md\u0060\n- \u0060context/safety-policy.md\u0060\n- \u0060context/repository.md\u0060\n- \u0060context/payments-service.md\u0060\n" }, { "path": ".codex/config.toml", @@ -313,7 +323,7 @@ { "path": ".typeference/bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/repo-agent@1.0.0\u0022,\n \u0022helio/payments-repo-agent@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022contractId\u0022: \u0022helio/skills/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/repository-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/repository-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" }, { "path": "AGENTS.md", @@ -324,7 +334,7 @@ }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "codex" }, @@ -335,7 +345,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -368,13 +378,13 @@ { "path": ".typeference/bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/person-agent@1.0.0\u0022,\n \u0022helio/executive-assistant@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022contractId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022contractId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/person-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/person-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" } ] }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "copilot" }, @@ -385,7 +395,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -417,13 +427,13 @@ { "path": ".typeference/bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/repo-agent@1.0.0\u0022,\n \u0022helio/payments-repo-agent@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022contractId\u0022: \u0022helio/skills/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/repository-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/repository-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" } ] }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "copilot" }, @@ -434,7 +444,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -462,7 +472,7 @@ { "path": ".typeference/bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/person-agent@1.0.0\u0022,\n \u0022helio/executive-assistant@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022contractId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022contractId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/person-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/executive-assistant@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Executive Assistant\u0022,\n \u0022description\u0022: \u0022Coordinates an executive\\u0027s correspondence, briefings, and cross-agent requests.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/person-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/correspondent@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022principal\u0022: \u0022context/principal.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Distinguish drafts from messages approved for delivery.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.prepare-brief\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022,\n \u0022description\u0022: \u0022Assemble an executive brief, requesting repository evidence when needed.\u0022,\n \u0022instructions\u0022: \u0022Build a decision-oriented brief from the supplied topic and evidence.\\nWhen repository status is material, request \\u0060payments-repo-agent.repository-status\\u0060 and incorporate its returned evidence with attribution.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022topic\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022topic\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022brief\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022openQuestions\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022brief\\u0022,\\u0022openQuestions\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022,\n \u0022context/executive-rhythm.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/prepare-brief@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/prepare-brief@1.0.0\u0022\n }\n ]\n },\n {\n \u0022dispatchName\u0022: \u0022executive-assistant.triage-message\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/triage-message@1.0.0\u0022,\n \u0022description\u0022: \u0022Classify an inbound message and recommend an accountable next action.\u0022,\n \u0022instructions\u0022: \u0022Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022message\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022message\\u0022],\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022summary\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022urgency\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022owner\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022nextAction\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022required\\u0022:[\\u0022summary\\u0022,\\u0022urgency\\u0022,\\u0022owner\\u0022,\\u0022nextAction\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/principal.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/triage-message@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/triage-message@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.principal\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/person-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/person-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/correspondent@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/executive-assistant@1.0.0\u0022\n }\n ]\n}\n" }, { "path": "AGENTS.md", @@ -473,7 +483,7 @@ }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "cursor" }, @@ -484,7 +494,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } @@ -511,7 +521,7 @@ { "path": ".typeference/bundle.json", "mediaType": "application/json", - "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022abstract\u0022: false,\n \u0022lineage\u0022: [\n \u0022system/object@1.0.0\u0022,\n \u0022helio/enterprise-agent@1.0.0\u0022,\n \u0022helio/repo-agent@1.0.0\u0022,\n \u0022helio/payments-repo-agent@1.0.0\u0022\n ],\n \u0022interfaces\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022contractId\u0022: \u0022helio/skills/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.contract\u0022,\n \u0022source\u0022: \u0022helio/skills/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022system/object@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/enterprise-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022interfaces.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" + "content": "{\n \u0022id\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022,\n \u0022displayName\u0022: \u0022Helio Payments Repository Agent\u0022,\n \u0022description\u0022: \u0022Specializes repository assistance for the fictional payments service.\u0022,\n \u0022emit\u0022: true,\n \u0022embeds\u0022: [\n \u0022helio/profiles/repository-defaults@1.0.0\u0022\n ],\n \u0022satisfies\u0022: [\n \u0022helio/interfaces/repository-observer@1.0.0\u0022\n ],\n \u0022slots\u0022: {\n \u0022organization\u0022: \u0022context/organization.md\u0022,\n \u0022repository\u0022: \u0022context/repository.md\u0022,\n \u0022safetyPolicy\u0022: \u0022context/safety-policy.md\u0022\n },\n \u0022workingNorms\u0022: [\n \u0022Preserve a clear audit trail for material decisions.\u0022,\n \u0022State uncertainty and route work to an accountable owner when authority is unclear.\u0022,\n \u0022Prefer evidence from tests, diffs, and version control over recollection.\u0022\n ],\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022skills\u0022: [\n {\n \u0022dispatchName\u0022: \u0022payments-repo-agent.repository-status\u0022,\n \u0022capabilityId\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022,\n \u0022implementationId\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022,\n \u0022description\u0022: \u0022Report payments-service health with contract and reconciliation evidence.\u0022,\n \u0022instructions\u0022: \u0022Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\\nDo not report the service healthy when any required financial-control signal is unavailable.\\n\u0022,\n \u0022inputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022focus\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022additionalProperties\\u0022:false}\u0022,\n \u0022outputSchema\u0022: \u0022{\\u0022type\\u0022:\\u0022object\\u0022,\\u0022properties\\u0022:{\\u0022status\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022},\\u0022evidence\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}},\\u0022risks\\u0022:{\\u0022type\\u0022:\\u0022array\\u0022,\\u0022items\\u0022:{\\u0022type\\u0022:\\u0022string\\u0022}}},\\u0022required\\u0022:[\\u0022status\\u0022,\\u0022evidence\\u0022,\\u0022risks\\u0022]}\u0022,\n \u0022contextFiles\u0022: [\n \u0022context/organization.md\u0022,\n \u0022context/safety-policy.md\u0022,\n \u0022context/repository.md\u0022,\n \u0022context/payments-service.md\u0022\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022skill.capability\u0022,\n \u0022source\u0022: \u0022helio/capabilities/repository-status@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022skill.implementation\u0022,\n \u0022source\u0022: \u0022helio/skills/payments-repository-status@1.0.0\u0022\n }\n ]\n }\n ],\n \u0022provenance\u0022: [\n {\n \u0022field\u0022: \u0022slots.organization\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.safetyPolicy\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/enterprise-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/enterprise-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022slots.repository\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022workingNorms\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/profiles/repository-defaults@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022embeds.helio/profiles/repository-defaults@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022displayName\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022description\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022contextFiles\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n },\n {\n \u0022field\u0022: \u0022satisfies.helio/interfaces/repository-observer@1.0.0\u0022,\n \u0022source\u0022: \u0022helio/payments-repo-agent@1.0.0\u0022\n }\n ]\n}\n" }, { "path": "AGENTS.md", @@ -522,7 +532,7 @@ }, "metadata": { "generatedBy": "TypeFerence", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787", + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26", "sourceIdentifier": "urn:air:helio.example:typeference:source:helio", "target": "cursor" }, @@ -533,7 +543,7 @@ { "relation": "derivedFrom", "sourceId": "urn:air:helio.example:typeference:source:helio", - "sourceDigest": "sha256:86ecbb754ebf69cabec2631e07b96329739fb23c7b1bf32b90c83ddcec8e6787" + "sourceDigest": "sha256:70270ce0b55dd8c489246a0cffcd64b76f87b4f99e2815ce471ffc7c7dc79d26" } ] } diff --git a/dist/codex/executive-assistant/.typeference/bundle.json b/dist/codex/executive-assistant/.typeference/bundle.json index c0fffd0..c343d10 100644 --- a/dist/codex/executive-assistant/.typeference/bundle.json +++ b/dist/codex/executive-assistant/.typeference/bundle.json @@ -2,14 +2,11 @@ "id": "helio/executive-assistant@1.0.0", "displayName": "Helio Executive Assistant", "description": "Coordinates an executive\u0027s correspondence, briefings, and cross-agent requests.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/person-agent@1.0.0", - "helio/executive-assistant@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/person-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/correspondent@1.0.0" ], "slots": { @@ -31,7 +28,7 @@ "skills": [ { "dispatchName": "executive-assistant.prepare-brief", - "contractId": "helio/skills/prepare-brief@1.0.0", + "capabilityId": "helio/capabilities/prepare-brief@1.0.0", "implementationId": "helio/skills/prepare-brief@1.0.0", "description": "Assemble an executive brief, requesting repository evidence when needed.", "instructions": "Build a decision-oriented brief from the supplied topic and evidence.\nWhen repository status is material, request \u0060payments-repo-agent.repository-status\u0060 and incorporate its returned evidence with attribution.\n", @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/prepare-brief@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/prepare-brief@1.0.0" }, { "field": "skill.implementation", @@ -56,7 +53,7 @@ }, { "dispatchName": "executive-assistant.triage-message", - "contractId": "helio/skills/triage-message@1.0.0", + "capabilityId": "helio/capabilities/triage-message@1.0.0", "implementationId": "helio/skills/triage-message@1.0.0", "description": "Classify an inbound message and recommend an accountable next action.", "instructions": "Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\n", @@ -69,8 +66,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/triage-message@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/triage-message@1.0.0" }, { "field": "skill.implementation", @@ -80,69 +77,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "displayName", - "source": "helio/person-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "slots.principal", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/correspondent@1.0.0", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/person-defaults@1.0.0", + "source": "helio/executive-assistant@1.0.0" }, { "field": "displayName", @@ -155,6 +132,10 @@ { "field": "contextFiles", "source": "helio/executive-assistant@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/correspondent@1.0.0", + "source": "helio/executive-assistant@1.0.0" } ] } diff --git a/dist/codex/payments-repo-agent/.agents/skills/repository-status/SKILL.md b/dist/codex/payments-repo-agent/.agents/skills/repository-status/SKILL.md index 297c403..9e8fcf8 100644 --- a/dist/codex/payments-repo-agent/.agents/skills/repository-status/SKILL.md +++ b/dist/codex/payments-repo-agent/.agents/skills/repository-status/SKILL.md @@ -3,7 +3,7 @@ name: repository-status description: "Report payments-service health with contract and reconciliation evidence." --- -Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness. +Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness. Do not report the service healthy when any required financial-control signal is unavailable. ## Context loaded on invocation diff --git a/dist/codex/payments-repo-agent/.typeference/bundle.json b/dist/codex/payments-repo-agent/.typeference/bundle.json index 7728d17..1396aa0 100644 --- a/dist/codex/payments-repo-agent/.typeference/bundle.json +++ b/dist/codex/payments-repo-agent/.typeference/bundle.json @@ -2,14 +2,11 @@ "id": "helio/payments-repo-agent@1.0.0", "displayName": "Helio Payments Repository Agent", "description": "Specializes repository assistance for the fictional payments service.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/repo-agent@1.0.0", - "helio/payments-repo-agent@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/repository-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/repository-observer@1.0.0" ], "slots": { @@ -31,10 +28,10 @@ "skills": [ { "dispatchName": "payments-repo-agent.repository-status", - "contractId": "helio/skills/repository-status@1.0.0", + "capabilityId": "helio/capabilities/repository-status@1.0.0", "implementationId": "helio/skills/payments-repository-status@1.0.0", "description": "Report payments-service health with contract and reconciliation evidence.", - "instructions": "Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", + "instructions": "Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", "inputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}", "outputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}", "contextFiles": [ @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/repository-status@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/repository-status@1.0.0" }, { "field": "skill.implementation", @@ -56,69 +53,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "displayName", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "description", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "slots.repository", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/repository-observer@1.0.0", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/repository-defaults@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" }, { "field": "displayName", @@ -131,6 +108,10 @@ { "field": "contextFiles", "source": "helio/payments-repo-agent@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/repository-observer@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" } ] } diff --git a/dist/copilot/executive-assistant/.typeference/bundle.json b/dist/copilot/executive-assistant/.typeference/bundle.json index c0fffd0..c343d10 100644 --- a/dist/copilot/executive-assistant/.typeference/bundle.json +++ b/dist/copilot/executive-assistant/.typeference/bundle.json @@ -2,14 +2,11 @@ "id": "helio/executive-assistant@1.0.0", "displayName": "Helio Executive Assistant", "description": "Coordinates an executive\u0027s correspondence, briefings, and cross-agent requests.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/person-agent@1.0.0", - "helio/executive-assistant@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/person-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/correspondent@1.0.0" ], "slots": { @@ -31,7 +28,7 @@ "skills": [ { "dispatchName": "executive-assistant.prepare-brief", - "contractId": "helio/skills/prepare-brief@1.0.0", + "capabilityId": "helio/capabilities/prepare-brief@1.0.0", "implementationId": "helio/skills/prepare-brief@1.0.0", "description": "Assemble an executive brief, requesting repository evidence when needed.", "instructions": "Build a decision-oriented brief from the supplied topic and evidence.\nWhen repository status is material, request \u0060payments-repo-agent.repository-status\u0060 and incorporate its returned evidence with attribution.\n", @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/prepare-brief@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/prepare-brief@1.0.0" }, { "field": "skill.implementation", @@ -56,7 +53,7 @@ }, { "dispatchName": "executive-assistant.triage-message", - "contractId": "helio/skills/triage-message@1.0.0", + "capabilityId": "helio/capabilities/triage-message@1.0.0", "implementationId": "helio/skills/triage-message@1.0.0", "description": "Classify an inbound message and recommend an accountable next action.", "instructions": "Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\n", @@ -69,8 +66,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/triage-message@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/triage-message@1.0.0" }, { "field": "skill.implementation", @@ -80,69 +77,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "displayName", - "source": "helio/person-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "slots.principal", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/correspondent@1.0.0", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/person-defaults@1.0.0", + "source": "helio/executive-assistant@1.0.0" }, { "field": "displayName", @@ -155,6 +132,10 @@ { "field": "contextFiles", "source": "helio/executive-assistant@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/correspondent@1.0.0", + "source": "helio/executive-assistant@1.0.0" } ] } diff --git a/dist/copilot/payments-repo-agent/.typeference/bundle.json b/dist/copilot/payments-repo-agent/.typeference/bundle.json index 7728d17..1396aa0 100644 --- a/dist/copilot/payments-repo-agent/.typeference/bundle.json +++ b/dist/copilot/payments-repo-agent/.typeference/bundle.json @@ -2,14 +2,11 @@ "id": "helio/payments-repo-agent@1.0.0", "displayName": "Helio Payments Repository Agent", "description": "Specializes repository assistance for the fictional payments service.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/repo-agent@1.0.0", - "helio/payments-repo-agent@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/repository-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/repository-observer@1.0.0" ], "slots": { @@ -31,10 +28,10 @@ "skills": [ { "dispatchName": "payments-repo-agent.repository-status", - "contractId": "helio/skills/repository-status@1.0.0", + "capabilityId": "helio/capabilities/repository-status@1.0.0", "implementationId": "helio/skills/payments-repository-status@1.0.0", "description": "Report payments-service health with contract and reconciliation evidence.", - "instructions": "Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", + "instructions": "Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", "inputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}", "outputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}", "contextFiles": [ @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/repository-status@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/repository-status@1.0.0" }, { "field": "skill.implementation", @@ -56,69 +53,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "displayName", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "description", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "slots.repository", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/repository-observer@1.0.0", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/repository-defaults@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" }, { "field": "displayName", @@ -131,6 +108,10 @@ { "field": "contextFiles", "source": "helio/payments-repo-agent@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/repository-observer@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" } ] } diff --git a/dist/cursor/executive-assistant/.typeference/bundle.json b/dist/cursor/executive-assistant/.typeference/bundle.json index c0fffd0..c343d10 100644 --- a/dist/cursor/executive-assistant/.typeference/bundle.json +++ b/dist/cursor/executive-assistant/.typeference/bundle.json @@ -2,14 +2,11 @@ "id": "helio/executive-assistant@1.0.0", "displayName": "Helio Executive Assistant", "description": "Coordinates an executive\u0027s correspondence, briefings, and cross-agent requests.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/person-agent@1.0.0", - "helio/executive-assistant@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/person-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/correspondent@1.0.0" ], "slots": { @@ -31,7 +28,7 @@ "skills": [ { "dispatchName": "executive-assistant.prepare-brief", - "contractId": "helio/skills/prepare-brief@1.0.0", + "capabilityId": "helio/capabilities/prepare-brief@1.0.0", "implementationId": "helio/skills/prepare-brief@1.0.0", "description": "Assemble an executive brief, requesting repository evidence when needed.", "instructions": "Build a decision-oriented brief from the supplied topic and evidence.\nWhen repository status is material, request \u0060payments-repo-agent.repository-status\u0060 and incorporate its returned evidence with attribution.\n", @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/prepare-brief@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/prepare-brief@1.0.0" }, { "field": "skill.implementation", @@ -56,7 +53,7 @@ }, { "dispatchName": "executive-assistant.triage-message", - "contractId": "helio/skills/triage-message@1.0.0", + "capabilityId": "helio/capabilities/triage-message@1.0.0", "implementationId": "helio/skills/triage-message@1.0.0", "description": "Classify an inbound message and recommend an accountable next action.", "instructions": "Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\n", @@ -69,8 +66,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/triage-message@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/triage-message@1.0.0" }, { "field": "skill.implementation", @@ -80,69 +77,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "displayName", - "source": "helio/person-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "slots.principal", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/correspondent@1.0.0", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/person-defaults@1.0.0", + "source": "helio/executive-assistant@1.0.0" }, { "field": "displayName", @@ -155,6 +132,10 @@ { "field": "contextFiles", "source": "helio/executive-assistant@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/correspondent@1.0.0", + "source": "helio/executive-assistant@1.0.0" } ] } diff --git a/dist/cursor/payments-repo-agent/.typeference/bundle.json b/dist/cursor/payments-repo-agent/.typeference/bundle.json index 7728d17..1396aa0 100644 --- a/dist/cursor/payments-repo-agent/.typeference/bundle.json +++ b/dist/cursor/payments-repo-agent/.typeference/bundle.json @@ -2,14 +2,11 @@ "id": "helio/payments-repo-agent@1.0.0", "displayName": "Helio Payments Repository Agent", "description": "Specializes repository assistance for the fictional payments service.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/repo-agent@1.0.0", - "helio/payments-repo-agent@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/repository-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/repository-observer@1.0.0" ], "slots": { @@ -31,10 +28,10 @@ "skills": [ { "dispatchName": "payments-repo-agent.repository-status", - "contractId": "helio/skills/repository-status@1.0.0", + "capabilityId": "helio/capabilities/repository-status@1.0.0", "implementationId": "helio/skills/payments-repository-status@1.0.0", "description": "Report payments-service health with contract and reconciliation evidence.", - "instructions": "Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", + "instructions": "Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", "inputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}", "outputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}", "contextFiles": [ @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/repository-status@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/repository-status@1.0.0" }, { "field": "skill.implementation", @@ -56,69 +53,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "displayName", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "description", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "slots.repository", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/repository-observer@1.0.0", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/repository-defaults@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" }, { "field": "displayName", @@ -131,6 +108,10 @@ { "field": "contextFiles", "source": "helio/payments-repo-agent@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/repository-observer@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" } ] } diff --git a/dist/neutral/executive-assistant/bundle.json b/dist/neutral/executive-assistant/bundle.json index c0fffd0..c343d10 100644 --- a/dist/neutral/executive-assistant/bundle.json +++ b/dist/neutral/executive-assistant/bundle.json @@ -2,14 +2,11 @@ "id": "helio/executive-assistant@1.0.0", "displayName": "Helio Executive Assistant", "description": "Coordinates an executive\u0027s correspondence, briefings, and cross-agent requests.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/person-agent@1.0.0", - "helio/executive-assistant@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/person-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/correspondent@1.0.0" ], "slots": { @@ -31,7 +28,7 @@ "skills": [ { "dispatchName": "executive-assistant.prepare-brief", - "contractId": "helio/skills/prepare-brief@1.0.0", + "capabilityId": "helio/capabilities/prepare-brief@1.0.0", "implementationId": "helio/skills/prepare-brief@1.0.0", "description": "Assemble an executive brief, requesting repository evidence when needed.", "instructions": "Build a decision-oriented brief from the supplied topic and evidence.\nWhen repository status is material, request \u0060payments-repo-agent.repository-status\u0060 and incorporate its returned evidence with attribution.\n", @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/prepare-brief@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/prepare-brief@1.0.0" }, { "field": "skill.implementation", @@ -56,7 +53,7 @@ }, { "dispatchName": "executive-assistant.triage-message", - "contractId": "helio/skills/triage-message@1.0.0", + "capabilityId": "helio/capabilities/triage-message@1.0.0", "implementationId": "helio/skills/triage-message@1.0.0", "description": "Classify an inbound message and recommend an accountable next action.", "instructions": "Read the message and identify its sender, intent, urgency, decision owner, and requested deadline.\nSeparate facts from assumptions. Return a concise recommendation; do not send a reply.\n", @@ -69,8 +66,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/triage-message@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/triage-message@1.0.0" }, { "field": "skill.implementation", @@ -80,69 +77,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "displayName", - "source": "helio/person-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "slots.principal", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/correspondent@1.0.0", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/person-defaults@1.0.0", + "source": "helio/executive-assistant@1.0.0" }, { "field": "displayName", @@ -155,6 +132,10 @@ { "field": "contextFiles", "source": "helio/executive-assistant@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/correspondent@1.0.0", + "source": "helio/executive-assistant@1.0.0" } ] } diff --git a/dist/neutral/executive-assistant/provenance.json b/dist/neutral/executive-assistant/provenance.json index 0f1123b..4bd2556 100644 --- a/dist/neutral/executive-assistant/provenance.json +++ b/dist/neutral/executive-assistant/provenance.json @@ -1,67 +1,47 @@ [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "displayName", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "description", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "slots.principal", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/person-agent@1.0.0" + "source": "helio/profiles/person-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/correspondent@1.0.0", - "source": "helio/person-agent@1.0.0" + "field": "embeds.helio/profiles/person-defaults@1.0.0", + "source": "helio/executive-assistant@1.0.0" }, { "field": "displayName", @@ -74,5 +54,9 @@ { "field": "contextFiles", "source": "helio/executive-assistant@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/correspondent@1.0.0", + "source": "helio/executive-assistant@1.0.0" } ] diff --git a/dist/neutral/payments-repo-agent/bundle.json b/dist/neutral/payments-repo-agent/bundle.json index 7728d17..1396aa0 100644 --- a/dist/neutral/payments-repo-agent/bundle.json +++ b/dist/neutral/payments-repo-agent/bundle.json @@ -2,14 +2,11 @@ "id": "helio/payments-repo-agent@1.0.0", "displayName": "Helio Payments Repository Agent", "description": "Specializes repository assistance for the fictional payments service.", - "abstract": false, - "lineage": [ - "system/object@1.0.0", - "helio/enterprise-agent@1.0.0", - "helio/repo-agent@1.0.0", - "helio/payments-repo-agent@1.0.0" + "emit": true, + "embeds": [ + "helio/profiles/repository-defaults@1.0.0" ], - "interfaces": [ + "satisfies": [ "helio/interfaces/repository-observer@1.0.0" ], "slots": { @@ -31,10 +28,10 @@ "skills": [ { "dispatchName": "payments-repo-agent.repository-status", - "contractId": "helio/skills/repository-status@1.0.0", + "capabilityId": "helio/capabilities/repository-status@1.0.0", "implementationId": "helio/skills/payments-repository-status@1.0.0", "description": "Report payments-service health with contract and reconciliation evidence.", - "instructions": "Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", + "instructions": "Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness.\nDo not report the service healthy when any required financial-control signal is unavailable.\n", "inputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022focus\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022additionalProperties\u0022:false}", "outputSchema": "{\u0022type\u0022:\u0022object\u0022,\u0022properties\u0022:{\u0022status\u0022:{\u0022type\u0022:\u0022string\u0022},\u0022evidence\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}},\u0022risks\u0022:{\u0022type\u0022:\u0022array\u0022,\u0022items\u0022:{\u0022type\u0022:\u0022string\u0022}}},\u0022required\u0022:[\u0022status\u0022,\u0022evidence\u0022,\u0022risks\u0022]}", "contextFiles": [ @@ -45,8 +42,8 @@ ], "provenance": [ { - "field": "skill.contract", - "source": "helio/skills/repository-status@1.0.0" + "field": "skill.capability", + "source": "helio/capabilities/repository-status@1.0.0" }, { "field": "skill.implementation", @@ -56,69 +53,49 @@ } ], "provenance": [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "displayName", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "description", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "slots.repository", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/repository-observer@1.0.0", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/repository-defaults@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" }, { "field": "displayName", @@ -131,6 +108,10 @@ { "field": "contextFiles", "source": "helio/payments-repo-agent@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/repository-observer@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" } ] } diff --git a/dist/neutral/payments-repo-agent/provenance.json b/dist/neutral/payments-repo-agent/provenance.json index 0956a8b..6a5b701 100644 --- a/dist/neutral/payments-repo-agent/provenance.json +++ b/dist/neutral/payments-repo-agent/provenance.json @@ -1,67 +1,47 @@ [ - { - "field": "displayName", - "source": "system/object@1.0.0" - }, - { - "field": "description", - "source": "system/object@1.0.0" - }, - { - "field": "displayName", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "description", - "source": "helio/enterprise-agent@1.0.0" - }, { "field": "slots.organization", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "slots.safetyPolicy", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/enterprise-agent@1.0.0" - }, - { - "field": "displayName", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/enterprise-defaults@1.0.0" }, { - "field": "description", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/enterprise-defaults@1.0.0", + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "slots.repository", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "workingNorms", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { "field": "contextFiles", - "source": "helio/repo-agent@1.0.0" + "source": "helio/profiles/repository-defaults@1.0.0" }, { - "field": "interfaces.helio/interfaces/repository-observer@1.0.0", - "source": "helio/repo-agent@1.0.0" + "field": "embeds.helio/profiles/repository-defaults@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" }, { "field": "displayName", @@ -74,5 +54,9 @@ { "field": "contextFiles", "source": "helio/payments-repo-agent@1.0.0" + }, + { + "field": "satisfies.helio/interfaces/repository-observer@1.0.0", + "source": "helio/payments-repo-agent@1.0.0" } ] diff --git a/dist/neutral/payments-repo-agent/skills/repository-status/SKILL.md b/dist/neutral/payments-repo-agent/skills/repository-status/SKILL.md index 297c403..9e8fcf8 100644 --- a/dist/neutral/payments-repo-agent/skills/repository-status/SKILL.md +++ b/dist/neutral/payments-repo-agent/skills/repository-status/SKILL.md @@ -3,7 +3,7 @@ name: repository-status description: "Report payments-service health with contract and reconciliation evidence." --- -Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness. +Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness. Do not report the service healthy when any required financial-control signal is unavailable. ## Context loaded on invocation diff --git a/docs/assets/compiler-pipeline.svg b/docs/assets/compiler-pipeline.svg index 53749d9..db95212 100644 --- a/docs/assets/compiler-pipeline.svg +++ b/docs/assets/compiler-pipeline.svg @@ -2,7 +2,7 @@ TypeFerence compiler pipelineTyped YAML is validated and resolved to an intermediate representation, then emitted through native adapters. Typed YAMLagents, interfaces, skills - Validatecontracts and paths + Validatecapabilities and paths Resolved IRbehavior plus provenance Codex diff --git a/docs/assets/dispatch.svg b/docs/assets/dispatch.svg index 4bb154a..8239618 100644 --- a/docs/assets/dispatch.svg +++ b/docs/assets/dispatch.svg @@ -1,7 +1,7 @@ - Polymorphic skill dispatchA derived MCP tool call resolves a base contract to a specialized implementation and returns an invocation package. + Polymorphic skill dispatchA derived MCP tool call resolves a capability to a specialized implementation and returns an invocation package. MCP callpayments-repo-agent.repository-status - Resolve contractrepository-status@1.0.0nearest compatible override + Resolve capabilityrepository-status@1.0.0nearest compatible binding Invocation package- specialized instructions- validated arguments- conditional context- target hints- source provenance diff --git a/docs/assets/type-hierarchy.svg b/docs/assets/type-hierarchy.svg index 8ce247b..4439842 100644 --- a/docs/assets/type-hierarchy.svg +++ b/docs/assets/type-hierarchy.svg @@ -1,11 +1,11 @@ - TypeFerence type hierarchySystem object leads to a Helio enterprise base, then person and repository lineages. - - - system/objectmechanics only - no behavior - helio/enterprise-agentidentity, governance, shared norms - helio/person-agentinbound and outbound assistance - helio/repo-agentevidence-backed repository work - executive-assistantbriefings and coordination - payments-repo-agentcompatible skill override + TypeFerence agent embeddingA reusable Helio enterprise agent is embedded by person and repository agents, which are embedded by concrete agents. + + + embedded by + helio/profiles/enterprise-defaultsgovernance and shared norms + helio/profiles/person-defaultspromotes enterprise behavior + helio/profiles/repository-defaultspromotes enterprise behavior + executive-assistantstructurally a correspondent + payments-repo-agentbinds a closer capability implementation diff --git a/docs/specification.md b/docs/specification.md index 48af596..b3672bc 100644 --- a/docs/specification.md +++ b/docs/specification.md @@ -1,44 +1,44 @@ # TypeFerence Draft Specification -Status: experimental reference draft, July 2026. The manifest `schemaVersion` is 1; this document is not a claim of ecosystem-standard or production-stable status. +Status: experimental reference draft, July 2026. Typed resources use `schemaVersion: 3`; this document is not a claim of ecosystem-standard or production-stable status. ## Scope and non-goals -TypeFerence defines structural composition and deterministic compilation of agent instructions, skill contracts, and context references. It does not define an inference runtime, guarantee equivalent behavior across models or hosts, establish publisher trust, or provide resource discovery. +TypeFerence defines structural composition and deterministic compilation of agent instructions, capability contracts, skill implementations, and context references. It does not define an inference runtime, guarantee equivalent behavior across models or hosts, establish publisher trust, or provide resource discovery. Agentic Resource Discovery (ARD) can advertise compiled TypeFerence outputs. ARD identifies and locates artifacts; TypeFerence produces target-specific artifacts before publication. Invocation remains the responsibility of MCP, A2A, OpenAPI, or a host-native mechanism. ## Resource identity -A source tree contains YAML documents with `schemaVersion: 1`, a `kind`, and an `id`. IDs use `namespace/name@semantic-version`. Supported kinds are `agent`, `interface`, and `skill`. +A source tree contains YAML documents with `schemaVersion: 3`, a `kind`, and an `id`. IDs use `namespace/name@semantic-version`. Supported kinds are `agent`, `profile`, `interface`, `capability`, and `skill`. -## Root object +## Agents and profiles -`system/object@1.0.0` is the universal abstract root. It MUST be behavior-free: no parent, interfaces, skills, slots, norms, context files, or instructions. A non-system enterprise agent MUST directly extend it. TypeFerence owns root semantics; each organization owns its behavioral base. +An agent is an identity-bearing unit that MAY produce target artifacts. A profile is a reusable composition unit for organizational, domain, or team defaults. Agents MAY embed profiles or agents. Profiles MAY embed profiles but MUST NOT embed agents. Embedding promotes the embedded resources' slots, norms, contexts, and capability bindings into the embedding resource. An embedding graph MUST NOT contain a cycle. No universal root is required. -## Agents +Profiles participate in composition and validation but do not produce target bundles. This lets users start with `kind: agent` while platform teams define reusable profiles underneath. -An agent MAY extend exactly one agent and MAY implement multiple interfaces. Except for `system/object`, every agent MUST have a parent. A lineage may be arbitrarily deep but MUST NOT contain a cycle. +Resolution proceeds from embedded resources toward the embedding resource: -Resolution proceeds from the root toward the concrete agent: - -1. Scalars use the nearest non-empty derived value. -2. Slots are keyed; a derived value replaces the same key. -3. Norms and context paths append and deduplicate in first-seen order. -4. Skills are keyed by contract ID. -5. Implemented interfaces accumulate through the lineage. +1. Display name and description belong to the declaring resource and are not promoted. +2. Slots are promoted by name. The shallowest declaration wins; conflicting declarations at the same depth are ambiguous unless the embedding resource declares that slot locally. +3. Norms and context paths append in embedding order and deduplicate in first-seen order. +4. Capability bindings are promoted by capability ID. The shallowest implementation wins; conflicting implementations at the same depth are ambiguous unless the embedding resource binds that capability locally. +5. Interfaces are computed structurally from the final promoted member set. Every resolved contribution records its source resource in provenance. ## Interfaces -Interfaces are contracts only. They MAY require slot names and skill contract IDs. They MUST NOT extend another resource or provide implementation. Resolution fails when a concrete or abstract implementing agent does not satisfy every accumulated requirement. +Interfaces are contracts only. They MAY require slot names and capability IDs, and MAY embed other interfaces. They MUST NOT provide implementation. Every agent whose resolved slots and capability bindings contain all requirements satisfies the interface implicitly; agents do not declare `implements`. Interface embedding MUST NOT contain a cycle. + +## Capabilities and skill implementations -## Skills and overrides +A capability defines a stable semantic method slot and its public JSON input/output schemas. It has no instructions and no runtime context. -A skill defines instructions, conditional context references, and JSON input/output schemas. Adding a skill establishes its own ID as the contract ID. An override names both a replacement implementation and the inherited contract it replaces. +A skill defines instructions, conditional context references, and JSON input/output schemas. Every skill MUST declare `binds: `. A skill implementation MUST preserve the bound capability's canonical input and output schemas. It MAY change instructions, description, and conditional context. -An override MUST preserve canonical input and output schemas. It MAY change instructions, description, and conditional context. The derived dispatch name resolves to the nearest implementation while the base agent retains its own namespace. +An agent's or profile's `skills` list binds skill implementations into that resource's resolved method set. If a binding omits `capability`, the capability is inferred from the referenced skill's `binds` field. If it names `capability`, that value MUST match the referenced skill's `binds` field. The outer dispatch name resolves the capability to the nearest compatible skill implementation while the embedded resource retains its own namespace. ## Dispatch @@ -83,7 +83,7 @@ The v1 package media types are experimental `application/vnd.typeference.source- TypeFerence targets the draft AI Catalog Trust Manifest as published at . Draft evolution MAY require corresponding changes in a future TypeFerence schema version. -A source root MAY contain `typeference.trust.yaml`. The file is part of the canonical source package and its digest, but it is not a typed agent resource and does not participate in inheritance or behavioral resolution. A different trust configuration beneath the source root MAY be selected explicitly. Trust metadata is publication configuration: native target bundles remain usable without ARD. +A source root MAY contain `typeference.trust.yaml`. The file is part of the canonical source package and its digest, but it is not a typed agent resource and does not participate in embedding or behavioral resolution. A different trust configuration beneath the source root MAY be selected explicitly. Trust metadata is publication configuration: native target bundles remain usable without ARD. The trust configuration has `schemaVersion: 1` and MAY contain `source` and `bundles` profiles. At least one profile is required. A source profile requires a literal `identity`. A bundles profile requires an `identityTemplate` containing both `{agent}` and `{target}`; `{publisher}` and `{version}` are also supported. Each profile MAY contain: diff --git a/docs/whitepaper.md b/docs/whitepaper.md index 6292db7..60ada21 100644 --- a/docs/whitepaper.md +++ b/docs/whitepaper.md @@ -8,37 +8,37 @@ TypeFerence contributors - July 2026 Organizations are teaching AI assistants the same business rules repeatedly: once for a coding agent, again for an executive assistant, again for each repository, and again for every vendor-specific Markdown format. The result is semantic drift hidden inside apparently simple files. -TypeFerence treats agent definitions as typed source code. Organizations define an instruction-free root, an enterprise-owned base, domain agents, contract-only interfaces, and versioned skills. A deterministic compiler resolves those definitions and emits native artifacts for Codex, GitHub Copilot, Cursor, neutral Agent Markdown, and MCP. The central result is not merely portability. It is coherent reuse of domain decisions across people, repositories, tools, and time. Behavioral equivalence across hosts is the long-term objective; v1 supplies a typed baseline from which equivalence can be evaluated rather than claiming it has already been achieved. +TypeFerence treats agent definitions as typed source code. Organizations define reusable profiles, structurally satisfied interfaces, versioned capabilities, and skill implementations, then combine behavior through Go-like embedding. A deterministic compiler resolves those definitions and emits native artifacts for Codex, GitHub Copilot, Cursor, neutral Agent Markdown, and MCP. The central result is not merely portability. It is coherent reuse of domain decisions across people, repositories, tools, and time. Behavioral equivalence across hosts is the long-term objective; v3 supplies a typed baseline from which equivalence can be evaluated rather than claiming it has already been achieved. ## 1. The coherence problem -Markdown is an excellent runtime format and a poor organization-wide type system. As agent adoption grows, similar instructions appear in many places. Security language diverges. Status-reporting methods acquire incompatible meanings. A policy correction must be rediscovered and edited in dozens of files. Reviewers can see textual differences but cannot reliably identify which behavior is inherited, overridden, or accidentally missing. +Markdown is an excellent runtime format and a poor organization-wide type system. As agent adoption grows, similar instructions appear in many places. Security language diverges. Status-reporting methods acquire incompatible meanings. A policy correction must be rediscovered and edited in dozens of files. Reviewers can see textual differences but cannot reliably identify which behavior was embedded, replaced, or accidentally omitted. The underlying problem is repeated domain modeling. Each local agent solves identity, capability, context selection, and governance again. Vendor portability is one visible symptom; duplicated organizational reasoning is the larger cost. TypeFerence introduces a canonical typed layer above runtime Markdown. Source definitions are small. Skills conditionally reference context. Compilation is deterministic. The generated artifacts remain ordinary files that existing tools understand. -## 2. Semantics belong below behavior +## 2. Composition over ancestry -TypeFerence defines `system/object@1.0.0` as an abstract and deliberately empty root. It supplies no voice, policies, permissions, or context. It exists to define identity, inheritance, validation, dispatch, and provenance. +TypeFerence has no universal root. Organizations can define reusable profiles as the home for organization-wide norms and governance, then embed them wherever those behaviors belong. Agents with unrelated responsibilities do not need to pretend they share an ancestor. -Every organization then creates a minimal enterprise base. That base is the first behavioral object and therefore the correct home for organization-wide norms and governance. Domain bases and concrete agents specialize it through a single implementation lineage. +An embedding agent promotes the slots, norms, context, and capability bindings of its embedded profiles or agents. It can embed more than one reusable component. Local declarations resolve promoted-name conflicts explicitly, so composition never depends on a hidden linearization order. -![Type hierarchy](assets/type-hierarchy.svg) +![Agent embedding](assets/type-hierarchy.svg) -This separation matters. If a framework ships an opinionated root prompt, every downstream organization inherits the framework author's culture. TypeFerence instead owns semantics while organizations own behavior. +This separation matters. The framework owns composition mechanics while organizations own behavior. Nothing is inherited merely because every resource is forced beneath the same root. ## 3. A sustainable object model -Agents have one implementation parent and may implement multiple contract-only interfaces. Single inheritance eliminates ambiguous diamond resolution. Interfaces state required slots and skill signatures but contribute no implementation. +Agents may embed multiple profiles or agents. Profiles may embed other profiles. Interfaces state required slots and capabilities but contribute no implementation, and interfaces may themselves embed narrower interfaces. Agents satisfy them implicitly when their resolved member sets match—there is no nominal `implements` list to drift out of sync. -Skills behave like versioned methods. A base repository agent may provide `repository-status`. A payments repository agent can override its implementation while preserving the same JSON input and output contracts. Callers use the specialized namespace and receive the nearest compatible implementation. +Capabilities behave like versioned method slots. A repository profile may bind the default `repository-status` skill implementation. A payments repository agent can bind a specialized skill implementation to that same promoted capability while preserving the capability's JSON input and output schemas. Callers use the outer namespace and receive its explicitly selected implementation. -This is structural substitutability at a declared contract boundary rather than text concatenation. An interface can require a status capability without knowing which concrete repository agent will satisfy it. Compilation rejects missing requirements and contract-breaking overrides before runtime. Whether two model executions behave equivalently remains an empirical question for evaluation, not a compiler guarantee. +This is structural substitutability rather than text concatenation. An interface can require a status capability without knowing which concrete repository agent will satisfy it. Compilation reports structural matches, rejects ambiguous promotion, and rejects capability-breaking implementations before runtime. Whether two model executions behave equivalently remains an empirical question for evaluation, not a compiler guarantee. ## 4. Compilation and native targets -The compiler parses resources, validates references, resolves a single lineage, checks interfaces, canonicalizes skill contracts, and creates a normalized intermediate representation. Target adapters then emit platform-native artifacts. +The compiler parses resources, validates references, resolves profile and agent embedding graphs, computes structural interface satisfaction, canonicalizes capability bindings, and creates a normalized intermediate representation. Target adapters then emit platform-native artifacts. ![Compiler pipeline](assets/compiler-pipeline.svg) @@ -64,7 +64,7 @@ Static host configurations are installable artifacts, not remotely callable agen Large prompts are not required. A skill contains a concise description for discovery, its focused instructions, input/output schemas, and only the context references needed when invoked. The host receives an invocation package and loads that context at execution time. -MCP provides the runtime object boundary. Each concrete method is exposed as `agent-name.skill-name`. Calling `payments-repo-agent.repository-status` resolves the base contract to the payments implementation, validates arguments, and returns instructions, context references, target hints, and provenance. +MCP provides the runtime object boundary. Each concrete method is exposed as `agent-name.skill-name`. Calling `payments-repo-agent.repository-status` resolves the repository-status capability to the payments implementation, validates arguments, and returns instructions, context references, target hints, and provenance. ![Dispatch](assets/dispatch.svg) @@ -72,21 +72,21 @@ TypeFerence intentionally does not select a model or execute an agent turn. It c ## 7. Agents beyond repositories -Engineering teams are plausible early adopters because their work is already versioned and reviewable, but the model is not repository-specific. The Helio example includes a generic person agent, an executive assistant, a repository agent, and a specialized payments repository agent. +Engineering teams are plausible early adopters because their work is already versioned and reviewable, but the model is not repository-specific. The Helio example includes generic person and repository profiles, an executive assistant, and a specialized payments repository agent. -The executive assistant can prepare a decision brief. When repository evidence is material, its skill requests the specialized repository-status method. The repository agent returns an invocation package grounded in its own domain context. The person-facing agent incorporates that evidence without duplicating repository knowledge. +The executive assistant can prepare a decision brief. When repository evidence is material, its skill requests the specialized repository-status method. The repository-facing agent returns an invocation package grounded in its own domain context. The person profile contributes communication behavior without duplicating repository knowledge. ![Cross-agent interaction](assets/cross-agent.svg) -This arrangement preserves distinct responsibilities. The executive assistant owns the shape of the brief. The repository agent owns technical status semantics. The enterprise base owns shared governance. TypeFerence owns how those parts compose. +This arrangement preserves distinct responsibilities. The executive assistant owns the shape of the brief. The repository profile owns default technical status semantics. The enterprise profile owns shared governance. TypeFerence owns how those parts compose. ## 8. Diff as governance Traditional infrastructure tools made declarative diffs operationally important. TypeFerence applies the useful portion of that idea without coupling compilation to deployment. Its lifecycle is author, validate, resolve, compile, diff, and publish. -A change to an enterprise norm can be compiled across every concrete agent. Reviewers can inspect exactly which target artifacts changed. Provenance answers why a line exists and which ancestor or skill supplied it. Contract validation prevents an apparently harmless specialization from silently changing what callers may send or expect. +A change to an enterprise norm can be compiled across every concrete agent. Reviewers can inspect exactly which target artifacts changed. Provenance answers why a line exists and which embedded profile, agent, or skill supplied it. Capability validation prevents an apparently harmless specialization from silently changing what callers may send or expect. -This enables governance through normal software practices: pull requests, deterministic CI, golden artifacts, versioned contracts, and explicit ownership. +This enables governance through normal software practices: pull requests, deterministic CI, golden artifacts, versioned capabilities, and explicit ownership. ## 9. Boundaries and future work @@ -100,7 +100,7 @@ The important boundary should remain: portable mechanics in TypeFerence, behavio Agent coherence is not achieved by finding one perfect prompt. It is achieved by giving organizational behavior a maintainable type system and compiling that system into the places where work happens. -TypeFerence offers a compact thesis: define agent configuration once, inherit intentionally, override compatibly, load context when needed, and emit native artifacts for each execution surface. The result is less duplicated Markdown, clearer ownership, and reviewable change. The route toward behavioral equivalence is then concrete: declare shared contracts, compile traceable target variants, and evaluate those variants against the same scenarios. +TypeFerence offers a compact thesis: define agent configuration once, embed intentionally, implement capabilities compatibly, load context when needed, and emit native artifacts for each execution surface. The result is less duplicated Markdown, clearer ownership, and reviewable change. The route toward behavioral equivalence is then concrete: declare shared capabilities, compile traceable target variants, and evaluate those variants against the same scenarios. ## References diff --git a/examples/helio/agents/executive-assistant.agent.yaml b/examples/helio/agents/executive-assistant.agent.yaml index 756c7dd..5bada56 100644 --- a/examples/helio/agents/executive-assistant.agent.yaml +++ b/examples/helio/agents/executive-assistant.agent.yaml @@ -1,9 +1,10 @@ -schemaVersion: 1 +schemaVersion: 3 kind: agent id: helio/executive-assistant@1.0.0 displayName: Helio Executive Assistant description: Coordinates an executive's correspondence, briefings, and cross-agent requests. -extends: helio/person-agent@1.0.0 +embeds: + - helio/profiles/person-defaults@1.0.0 contextFiles: - context/executive-rhythm.md skills: diff --git a/examples/helio/agents/payments-repo-agent.agent.yaml b/examples/helio/agents/payments-repo-agent.agent.yaml index f66684d..40fde20 100644 --- a/examples/helio/agents/payments-repo-agent.agent.yaml +++ b/examples/helio/agents/payments-repo-agent.agent.yaml @@ -1,11 +1,12 @@ -schemaVersion: 1 +schemaVersion: 3 kind: agent id: helio/payments-repo-agent@1.0.0 displayName: Helio Payments Repository Agent description: Specializes repository assistance for the fictional payments service. -extends: helio/repo-agent@1.0.0 +embeds: + - helio/profiles/repository-defaults@1.0.0 contextFiles: - context/payments-service.md skills: - ref: helio/skills/payments-repository-status@1.0.0 - overrides: helio/skills/repository-status@1.0.0 + capability: helio/capabilities/repository-status@1.0.0 diff --git a/examples/helio/agents/person-agent.agent.yaml b/examples/helio/agents/person-agent.agent.yaml deleted file mode 100644 index f3cabee..0000000 --- a/examples/helio/agents/person-agent.agent.yaml +++ /dev/null @@ -1,17 +0,0 @@ -schemaVersion: 1 -kind: agent -id: helio/person-agent@1.0.0 -displayName: Helio Person Agent -description: Handles respectful inbound and outbound assistance for a person. -abstract: true -extends: helio/enterprise-agent@1.0.0 -implements: - - helio/interfaces/correspondent@1.0.0 -slots: - principal: context/principal.md -workingNorms: - - Distinguish drafts from messages approved for delivery. -contextFiles: - - context/principal.md -skills: - - ref: helio/skills/triage-message@1.0.0 diff --git a/examples/helio/agents/repo-agent.agent.yaml b/examples/helio/agents/repo-agent.agent.yaml deleted file mode 100644 index 2af0289..0000000 --- a/examples/helio/agents/repo-agent.agent.yaml +++ /dev/null @@ -1,17 +0,0 @@ -schemaVersion: 1 -kind: agent -id: helio/repo-agent@1.0.0 -displayName: Helio Repository Agent -description: Applies Helio delivery practices within a software repository. -abstract: true -extends: helio/enterprise-agent@1.0.0 -implements: - - helio/interfaces/repository-observer@1.0.0 -slots: - repository: context/repository.md -workingNorms: - - Prefer evidence from tests, diffs, and version control over recollection. -contextFiles: - - context/repository.md -skills: - - ref: helio/skills/repository-status@1.0.0 diff --git a/examples/helio/agents/system-object.agent.yaml b/examples/helio/agents/system-object.agent.yaml deleted file mode 100644 index 7761c45..0000000 --- a/examples/helio/agents/system-object.agent.yaml +++ /dev/null @@ -1,6 +0,0 @@ -schemaVersion: 1 -kind: agent -id: system/object@1.0.0 -displayName: System Object -description: Compiler intrinsic root with no behavioral content. -abstract: true diff --git a/examples/helio/capabilities/prepare-brief.capability.yaml b/examples/helio/capabilities/prepare-brief.capability.yaml new file mode 100644 index 0000000..3eca798 --- /dev/null +++ b/examples/helio/capabilities/prepare-brief.capability.yaml @@ -0,0 +1,7 @@ +schemaVersion: 3 +kind: capability +id: helio/capabilities/prepare-brief@1.0.0 +displayName: Prepare Brief +description: Capability slot for assembling decision-oriented executive briefs. +inputSchema: '{"type":"object","properties":{"topic":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}}},"required":["topic"],"additionalProperties":false}' +outputSchema: '{"type":"object","properties":{"brief":{"type":"string"},"openQuestions":{"type":"array","items":{"type":"string"}}},"required":["brief","openQuestions"]}' diff --git a/examples/helio/capabilities/repository-status.capability.yaml b/examples/helio/capabilities/repository-status.capability.yaml new file mode 100644 index 0000000..27911ad --- /dev/null +++ b/examples/helio/capabilities/repository-status.capability.yaml @@ -0,0 +1,7 @@ +schemaVersion: 3 +kind: capability +id: helio/capabilities/repository-status@1.0.0 +displayName: Repository Status +description: Capability slot for evidence-backed repository health summaries. +inputSchema: '{"type":"object","properties":{"focus":{"type":"string"}},"additionalProperties":false}' +outputSchema: '{"type":"object","properties":{"status":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}},"risks":{"type":"array","items":{"type":"string"}}},"required":["status","evidence","risks"]}' diff --git a/examples/helio/capabilities/triage-message.capability.yaml b/examples/helio/capabilities/triage-message.capability.yaml new file mode 100644 index 0000000..9a2121e --- /dev/null +++ b/examples/helio/capabilities/triage-message.capability.yaml @@ -0,0 +1,7 @@ +schemaVersion: 3 +kind: capability +id: helio/capabilities/triage-message@1.0.0 +displayName: Triage Message +description: Capability slot for classifying inbound messages and selecting accountable next actions. +inputSchema: '{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}' +outputSchema: '{"type":"object","properties":{"summary":{"type":"string"},"urgency":{"type":"string"},"owner":{"type":"string"},"nextAction":{"type":"string"}},"required":["summary","urgency","owner","nextAction"]}' diff --git a/examples/helio/interfaces/correspondent.interface.yaml b/examples/helio/interfaces/correspondent.interface.yaml index b163329..7339374 100644 --- a/examples/helio/interfaces/correspondent.interface.yaml +++ b/examples/helio/interfaces/correspondent.interface.yaml @@ -1,9 +1,9 @@ -schemaVersion: 1 +schemaVersion: 3 kind: interface id: helio/interfaces/correspondent@1.0.0 displayName: Correspondent description: Contract for agents that assess and route communications. requiresSlots: - principal -requiresSkills: - - helio/skills/triage-message@1.0.0 +requiresCapabilities: + - helio/capabilities/triage-message@1.0.0 diff --git a/examples/helio/interfaces/repository-observer.interface.yaml b/examples/helio/interfaces/repository-observer.interface.yaml index 0b1efff..375e5bf 100644 --- a/examples/helio/interfaces/repository-observer.interface.yaml +++ b/examples/helio/interfaces/repository-observer.interface.yaml @@ -1,9 +1,9 @@ -schemaVersion: 1 +schemaVersion: 3 kind: interface id: helio/interfaces/repository-observer@1.0.0 displayName: Repository Observer description: Contract for agents that can report evidence-backed repository status. requiresSlots: - repository -requiresSkills: - - helio/skills/repository-status@1.0.0 +requiresCapabilities: + - helio/capabilities/repository-status@1.0.0 diff --git a/examples/helio/agents/enterprise-agent.agent.yaml b/examples/helio/profiles/enterprise-defaults.profile.yaml similarity index 58% rename from examples/helio/agents/enterprise-agent.agent.yaml rename to examples/helio/profiles/enterprise-defaults.profile.yaml index 8beaaad..8306dc9 100644 --- a/examples/helio/agents/enterprise-agent.agent.yaml +++ b/examples/helio/profiles/enterprise-defaults.profile.yaml @@ -1,10 +1,8 @@ -schemaVersion: 1 -kind: agent -id: helio/enterprise-agent@1.0.0 -displayName: Helio Enterprise Agent -description: Shared organizational identity and governance for every Helio agent. -abstract: true -extends: system/object@1.0.0 +schemaVersion: 3 +kind: profile +id: helio/profiles/enterprise-defaults@1.0.0 +displayName: Helio Enterprise Defaults +description: Shared organizational governance for every Helio resource. slots: organization: context/organization.md safetyPolicy: context/safety-policy.md diff --git a/examples/helio/profiles/person-defaults.profile.yaml b/examples/helio/profiles/person-defaults.profile.yaml new file mode 100644 index 0000000..73977ac --- /dev/null +++ b/examples/helio/profiles/person-defaults.profile.yaml @@ -0,0 +1,15 @@ +schemaVersion: 3 +kind: profile +id: helio/profiles/person-defaults@1.0.0 +displayName: Helio Person Defaults +description: Reusable behavior for respectful inbound and outbound assistance for a person. +embeds: + - helio/profiles/enterprise-defaults@1.0.0 +slots: + principal: context/principal.md +workingNorms: + - Distinguish drafts from messages approved for delivery. +contextFiles: + - context/principal.md +skills: + - ref: helio/skills/triage-message@1.0.0 diff --git a/examples/helio/profiles/repository-defaults.profile.yaml b/examples/helio/profiles/repository-defaults.profile.yaml new file mode 100644 index 0000000..7fa7784 --- /dev/null +++ b/examples/helio/profiles/repository-defaults.profile.yaml @@ -0,0 +1,15 @@ +schemaVersion: 3 +kind: profile +id: helio/profiles/repository-defaults@1.0.0 +displayName: Helio Repository Defaults +description: Reusable delivery practices for software repository assistance. +embeds: + - helio/profiles/enterprise-defaults@1.0.0 +slots: + repository: context/repository.md +workingNorms: + - Prefer evidence from tests, diffs, and version control over recollection. +contextFiles: + - context/repository.md +skills: + - ref: helio/skills/repository-status@1.0.0 diff --git a/examples/helio/skills/payments-repository-status.skill.yaml b/examples/helio/skills/payments-repository-status.skill.yaml index ad47ec1..a46bb33 100644 --- a/examples/helio/skills/payments-repository-status.skill.yaml +++ b/examples/helio/skills/payments-repository-status.skill.yaml @@ -1,12 +1,13 @@ -schemaVersion: 1 +schemaVersion: 3 kind: skill id: helio/skills/payments-repository-status@1.0.0 +binds: helio/capabilities/repository-status@1.0.0 displayName: Payments Repository Status description: Report payments-service health with contract and reconciliation evidence. contextFiles: - context/payments-service.md instructions: | - Apply the repository-status contract, then include payment-contract compatibility, reconciliation checks, and rollback readiness. + Apply the repository-status capability, then include payment-contract compatibility, reconciliation checks, and rollback readiness. Do not report the service healthy when any required financial-control signal is unavailable. inputSchema: '{"type":"object","properties":{"focus":{"type":"string"}},"additionalProperties":false}' outputSchema: '{"type":"object","properties":{"status":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}},"risks":{"type":"array","items":{"type":"string"}}},"required":["status","evidence","risks"]}' diff --git a/examples/helio/skills/prepare-brief.skill.yaml b/examples/helio/skills/prepare-brief.skill.yaml index a98402d..ba4c2d6 100644 --- a/examples/helio/skills/prepare-brief.skill.yaml +++ b/examples/helio/skills/prepare-brief.skill.yaml @@ -1,6 +1,7 @@ -schemaVersion: 1 +schemaVersion: 3 kind: skill id: helio/skills/prepare-brief@1.0.0 +binds: helio/capabilities/prepare-brief@1.0.0 displayName: Prepare Brief description: Assemble an executive brief, requesting repository evidence when needed. contextFiles: diff --git a/examples/helio/skills/repository-status.skill.yaml b/examples/helio/skills/repository-status.skill.yaml index 3f4394e..0502cda 100644 --- a/examples/helio/skills/repository-status.skill.yaml +++ b/examples/helio/skills/repository-status.skill.yaml @@ -1,6 +1,7 @@ -schemaVersion: 1 +schemaVersion: 3 kind: skill id: helio/skills/repository-status@1.0.0 +binds: helio/capabilities/repository-status@1.0.0 displayName: Repository Status description: Summarize repository health using current version-control and test evidence. instructions: | diff --git a/examples/helio/skills/triage-message.skill.yaml b/examples/helio/skills/triage-message.skill.yaml index f643e3c..8d0e69f 100644 --- a/examples/helio/skills/triage-message.skill.yaml +++ b/examples/helio/skills/triage-message.skill.yaml @@ -1,6 +1,7 @@ -schemaVersion: 1 +schemaVersion: 3 kind: skill id: helio/skills/triage-message@1.0.0 +binds: helio/capabilities/triage-message@1.0.0 displayName: Triage Message description: Classify an inbound message and recommend an accountable next action. instructions: | diff --git a/output/pdf/typeference-whitepaper.pdf b/output/pdf/typeference-whitepaper.pdf index f614886..cdfc96d 100644 Binary files a/output/pdf/typeference-whitepaper.pdf and b/output/pdf/typeference-whitepaper.pdf differ diff --git a/src/TypeFerence.Cli/Program.cs b/src/TypeFerence.Cli/Program.cs index 556df39..9f88d22 100644 --- a/src/TypeFerence.Cli/Program.cs +++ b/src/TypeFerence.Cli/Program.cs @@ -111,8 +111,8 @@ private static async Task ServeAsync(string[] args) { var source = Required(args, 1, "source or compiled directory"); var agents = Directory.EnumerateFiles(source, "*.yaml", SearchOption.AllDirectories).Any() - ? new TypeFerenceCompiler().Validate(source).Where(x => !x.Abstract).ToArray() - : TypeFerenceCompiler.LoadCompiled(source).Where(x => !x.Abstract).ToArray(); + ? new TypeFerenceCompiler().Validate(source).Where(x => x.Emit).ToArray() + : TypeFerenceCompiler.LoadCompiled(source).Where(x => x.Emit).ToArray(); var tools = agents.SelectMany(agent => agent.Skills.Select(skill => { Func handler = arguments => JsonSerializer.Serialize(TypeFerenceCompiler.Invoke(agent, skill, arguments)); diff --git a/src/TypeFerence.Core/Compiler.cs b/src/TypeFerence.Core/Compiler.cs index 347021b..55363ef 100644 --- a/src/TypeFerence.Core/Compiler.cs +++ b/src/TypeFerence.Core/Compiler.cs @@ -31,7 +31,7 @@ public IReadOnlyList Build( { var trust = TrustConfigurationLoader.Load(source, ardPublication?.TrustConfigurationPath); var resources = new ResourceLoader().Load(source, trust?.Path); - var agents = new TypeResolver(resources).ResolveAll().Where(x => !x.Abstract).OrderBy(x => x.Id, StringComparer.Ordinal).ToArray(); + var agents = new TypeResolver(resources).ResolveAll().Where(x => x.Emit).OrderBy(x => x.Id, StringComparer.Ordinal).ToArray(); var requestedTargets = targets.Distinct().Order().ToArray(); if (requestedTargets.Length == 0) throw new TypeFerenceException("At least one compilation target is required"); var root = Path.GetFullPath(output); @@ -438,7 +438,7 @@ private static string RenderInstructions(ResolvedAgent agent) } private static string RenderSkill(ResolvedSkill skill) => $"---\nname: {SkillSlug(skill)}\ndescription: {EscapeYaml(skill.Description)}\n---\n\n{skill.Instructions.Trim()}\n\n## Context loaded on invocation\n\n{string.Join("\n", skill.ContextFiles.Select(x => $"- `{x}`"))}\n"; - private static string SkillSlug(ResolvedSkill skill) => skill.ContractId.Split('/').Last().Split('@')[0]; + private static string SkillSlug(ResolvedSkill skill) => skill.CapabilityId.Split('/').Last().Split('@')[0]; private static string Slug(string id) => id.Split('/').Last().Split('@')[0]; private static string EscapeYaml(string value) => "\"" + value.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\""; diff --git a/src/TypeFerence.Core/Models.cs b/src/TypeFerence.Core/Models.cs index f771299..2a3c0a3 100644 --- a/src/TypeFerence.Core/Models.cs +++ b/src/TypeFerence.Core/Models.cs @@ -9,11 +9,11 @@ public sealed class ResourceDocument public string Id { get; set; } = ""; public string DisplayName { get; set; } = ""; public string Description { get; set; } = ""; - public bool Abstract { get; set; } - public string? Extends { get; set; } - public List Implements { get; set; } = []; + public string Binds { get; set; } = ""; + public bool Emit { get; set; } = true; + public List Embeds { get; set; } = []; public List RequiresSlots { get; set; } = []; - public List RequiresSkills { get; set; } = []; + public List RequiresCapabilities { get; set; } = []; public SortedDictionary Slots { get; set; } = new(StringComparer.Ordinal); public List WorkingNorms { get; set; } = []; public List ContextFiles { get; set; } = []; @@ -26,7 +26,7 @@ public sealed class ResourceDocument public sealed class SkillBinding { public string Ref { get; set; } = ""; - public string? Overrides { get; set; } + public string? Capability { get; set; } } public sealed record ProvenanceEntry(string Field, string Source); @@ -34,7 +34,7 @@ public sealed record ProvenanceEntry(string Field, string Source); public sealed class ResolvedSkill { public string DispatchName { get; init; } = ""; - public string ContractId { get; init; } = ""; + public string CapabilityId { get; init; } = ""; public string ImplementationId { get; init; } = ""; public string Description { get; init; } = ""; public string Instructions { get; init; } = ""; @@ -49,9 +49,9 @@ public sealed class ResolvedAgent public string Id { get; init; } = ""; public string DisplayName { get; init; } = ""; public string Description { get; init; } = ""; - public bool Abstract { get; init; } - public IReadOnlyList Lineage { get; init; } = []; - public IReadOnlyList Interfaces { get; init; } = []; + public bool Emit { get; init; } = true; + public IReadOnlyList Embeds { get; init; } = []; + public IReadOnlyList Satisfies { get; init; } = []; public IReadOnlyDictionary Slots { get; init; } = new SortedDictionary(); public IReadOnlyList WorkingNorms { get; init; } = []; public IReadOnlyList ContextFiles { get; init; } = []; diff --git a/src/TypeFerence.Core/ResourceLoader.cs b/src/TypeFerence.Core/ResourceLoader.cs index 5e6f772..13007c1 100644 --- a/src/TypeFerence.Core/ResourceLoader.cs +++ b/src/TypeFerence.Core/ResourceLoader.cs @@ -44,19 +44,19 @@ public IReadOnlyDictionary Load(string sourceDirectory if (!result.TryAdd(resource.Id, resource)) throw new TypeFerenceException($"Duplicate resource id: {resource.Id}"); } if (result.Count == 0) throw new TypeFerenceException($"No YAML resources found under {root}"); - if (!result.ContainsKey("system/object@1.0.0")) - throw new TypeFerenceException("Source must define system/object@1.0.0"); return result; } private static void ValidateShape(ResourceDocument resource, string file, string root) { - if (resource.SchemaVersion != 1) throw new TypeFerenceException($"{file}: schemaVersion must be 1"); - if (resource.Kind is not ("agent" or "interface" or "skill")) throw new TypeFerenceException($"{file}: unknown kind '{resource.Kind}'"); + if (resource.SchemaVersion != 3) throw new TypeFerenceException($"{file}: schemaVersion must be 3"); + if (resource.Kind is not ("agent" or "profile" or "interface" or "capability" or "skill")) throw new TypeFerenceException($"{file}: unknown kind '{resource.Kind}'"); if (!ResourceId.IsMatch(resource.Id)) throw new TypeFerenceException($"{file}: id must use lowercase namespace/name@semantic-version"); - if (resource.Kind == "interface" && resource.Extends is not null) throw new TypeFerenceException($"{file}: interfaces cannot extend resources"); - if (resource.Kind != "agent" && resource.Implements.Count != 0) throw new TypeFerenceException($"{file}: only agents implement interfaces"); + if (resource.Kind is "capability" or "skill" && resource.Embeds.Count != 0) throw new TypeFerenceException($"{file}: {resource.Kind}s cannot embed resources"); + if (resource.Kind == "skill" && string.IsNullOrWhiteSpace(resource.Binds)) throw new TypeFerenceException($"{file}: skills must bind a capability"); + if (resource.Kind == "skill" && !ResourceId.IsMatch(resource.Binds)) throw new TypeFerenceException($"{file}: binds must reference a capability id"); + if (resource.Kind != "skill" && !string.IsNullOrWhiteSpace(resource.Binds)) throw new TypeFerenceException($"{file}: only skills can bind capabilities"); foreach (var relative in resource.ContextFiles.Concat(resource.Slots.Values)) { var full = Path.GetFullPath(Path.Combine(root, relative.Replace('/', Path.DirectorySeparatorChar))); diff --git a/src/TypeFerence.Core/TypeResolver.cs b/src/TypeFerence.Core/TypeResolver.cs index 9d0b7db..404a080 100644 --- a/src/TypeFerence.Core/TypeResolver.cs +++ b/src/TypeFerence.Core/TypeResolver.cs @@ -4,132 +4,245 @@ namespace TypeFerence.Core; public sealed class TypeResolver(IReadOnlyDictionary resources) { - private readonly Dictionary _cache = new(StringComparer.Ordinal); + private readonly Dictionary _componentCache = new(StringComparer.Ordinal); + private readonly Dictionary _interfaceCache = new(StringComparer.Ordinal); + private readonly Dictionary> _slotDepths = new(StringComparer.Ordinal); + private readonly Dictionary> _skillDepths = new(StringComparer.Ordinal); - public IReadOnlyList ResolveAll() => resources.Values - .Where(x => x.Kind == "agent") - .OrderBy(x => x.Id, StringComparer.Ordinal) - .Select(x => Resolve(x.Id)) - .ToArray(); + public IReadOnlyList ResolveAll() + { + foreach (var item in resources.Values.Where(x => x.Kind == "skill").OrderBy(x => x.Id, StringComparer.Ordinal)) + ValidateSkillImplementation(item); + foreach (var item in resources.Values.Where(x => x.Kind == "interface").OrderBy(x => x.Id, StringComparer.Ordinal)) + ResolveInterface(item.Id, new HashSet(StringComparer.Ordinal)); + foreach (var item in resources.Values.Where(x => x.Kind == "profile").OrderBy(x => x.Id, StringComparer.Ordinal)) + ResolveComponent(item.Id, new HashSet(StringComparer.Ordinal), requireAgent: false); + return resources.Values + .Where(x => x.Kind == "agent") + .OrderBy(x => x.Id, StringComparer.Ordinal) + .Select(x => Resolve(x.Id)) + .ToArray(); + } - public ResolvedAgent Resolve(string id) => Resolve(id, new HashSet(StringComparer.Ordinal)); + public ResolvedAgent Resolve(string id) => ResolveComponent(id, new HashSet(StringComparer.Ordinal), requireAgent: true); - private ResolvedAgent Resolve(string id, HashSet visiting) + private ResolvedAgent ResolveComponent(string id, HashSet visiting, bool requireAgent) { - if (_cache.TryGetValue(id, out var cached)) return cached; - if (!resources.TryGetValue(id, out var current) || current.Kind != "agent") throw new TypeFerenceException($"Agent not found: {id}"); - if (!visiting.Add(id)) throw new TypeFerenceException($"Inheritance cycle detected at {id}"); - if (id == "system/object@1.0.0") ValidateSystemObject(current); - if (id != "system/object@1.0.0" && current.Extends is null) throw new TypeFerenceException($"Agent {id} must extend another agent"); - - var parent = current.Extends is null ? null : Resolve(current.Extends, visiting); - if (parent is not null && parent.Id == "system/object@1.0.0" && Namespace(id) == "system") - throw new TypeFerenceException("Only enterprise-owned agents may directly extend system/object"); - if (parent is not null && parent.Id == "system/object@1.0.0" && !current.Abstract) - throw new TypeFerenceException($"Enterprise root {id} must be abstract"); - - var lineage = parent?.Lineage.ToList() ?? []; - lineage.Add(id); - var slots = new SortedDictionary(StringComparer.Ordinal); - if (parent is not null) - foreach (var pair in parent.Slots) slots[pair.Key] = pair.Value; - foreach (var pair in current.Slots) slots[pair.Key] = NormalizePath(pair.Value); - var norms = Distinct((parent?.WorkingNorms ?? []).Concat(current.WorkingNorms)); - var contexts = Distinct((parent?.ContextFiles ?? []).Concat(current.ContextFiles).Select(NormalizePath)); - var interfaceIds = Distinct((parent?.Interfaces ?? []).Concat(current.Implements)); - var provenance = parent?.Provenance.ToList() ?? []; - if (!string.IsNullOrWhiteSpace(current.DisplayName)) provenance.Add(new("displayName", id)); - if (!string.IsNullOrWhiteSpace(current.Description)) provenance.Add(new("description", id)); - provenance.AddRange(current.Slots.Keys.Select(x => new ProvenanceEntry($"slots.{x}", id))); - provenance.AddRange(current.WorkingNorms.Select(_ => new ProvenanceEntry("workingNorms", id))); - provenance.AddRange(current.ContextFiles.Select(_ => new ProvenanceEntry("contextFiles", id))); - provenance.AddRange(current.Implements.Select(x => new ProvenanceEntry($"interfaces.{x}", id))); - - var skills = parent?.Skills.ToDictionary(x => x.ContractId, StringComparer.Ordinal) - ?? new Dictionary(StringComparer.Ordinal); + if (requireAgent) Require(id, "agent"); + if (_componentCache.TryGetValue(id, out var cached)) return cached; + var current = RequireEmbeddable(id); + if (!visiting.Add(id)) throw new TypeFerenceException($"Embedding cycle detected at {id}"); + if (current.Embeds.Count != current.Embeds.Distinct(StringComparer.Ordinal).Count()) + throw new TypeFerenceException($"{id}: a {current.Kind} cannot embed the same resource more than once"); + + try + { + var embedded = current.Embeds.Select(x => + { + var embeddedResource = RequireEmbeddable(x); + if (current.Kind == "profile" && embeddedResource.Kind != "profile") + throw new TypeFerenceException($"{id}: profiles can only embed profiles"); + return ResolveComponent(x, visiting, requireAgent: false); + }).ToArray(); + var (slots, slotDepths) = MergeSlots(id, current, embedded); + var norms = Distinct(embedded.SelectMany(x => x.WorkingNorms).Concat(current.WorkingNorms)); + var contexts = Distinct(embedded.SelectMany(x => x.ContextFiles).Concat(current.ContextFiles).Select(NormalizePath)); + var (skills, skillDepths) = MergeSkills(id, current, embedded, contexts); + var satisfies = resources.Values + .Where(x => x.Kind == "interface") + .OrderBy(x => x.Id, StringComparer.Ordinal) + .Where(x => Satisfies(ResolveInterface(x.Id, new HashSet(StringComparer.Ordinal)), slots, skills)) + .Select(x => x.Id) + .ToArray(); + + var provenance = embedded.SelectMany(x => x.Provenance.Where(IsPromotedProvenance)).ToList(); + provenance.AddRange(current.Embeds.Select(x => new ProvenanceEntry($"embeds.{x}", id))); + if (!string.IsNullOrWhiteSpace(current.DisplayName)) provenance.Add(new("displayName", id)); + if (!string.IsNullOrWhiteSpace(current.Description)) provenance.Add(new("description", id)); + provenance.AddRange(current.Slots.Keys.Select(x => new ProvenanceEntry($"slots.{x}", id))); + provenance.AddRange(current.WorkingNorms.Select(_ => new ProvenanceEntry("workingNorms", id))); + provenance.AddRange(current.ContextFiles.Select(_ => new ProvenanceEntry("contextFiles", id))); + provenance.AddRange(satisfies.Select(x => new ProvenanceEntry($"satisfies.{x}", id))); + + var resolved = new ResolvedAgent + { + Id = id, + DisplayName = string.IsNullOrWhiteSpace(current.DisplayName) ? id : current.DisplayName, + Description = current.Description, + Emit = current.Emit, + Embeds = current.Embeds.ToArray(), + Satisfies = satisfies, + Slots = slots, + WorkingNorms = norms, + ContextFiles = contexts, + Skills = skills.Values.OrderBy(x => x.CapabilityId, StringComparer.Ordinal).Select(x => x.WithDispatch(id)).ToArray(), + Provenance = provenance + }; + _slotDepths[id] = slotDepths; + _skillDepths[id] = skillDepths; + return _componentCache[id] = resolved; + } + finally + { + visiting.Remove(id); + } + } + + private (SortedDictionary Values, IReadOnlyDictionary Depths) MergeSlots( + string id, + ResourceDocument current, + ResolvedAgent[] embedded) + { + var result = new SortedDictionary(StringComparer.Ordinal); + var depths = new Dictionary(StringComparer.Ordinal); + foreach (var group in embedded.SelectMany(x => x.Slots.Select(pair => + (Agent: x.Id, pair.Key, pair.Value, Depth: _slotDepths[x.Id][pair.Key] + 1))) + .GroupBy(x => x.Key, StringComparer.Ordinal)) + { + var depth = group.Min(x => x.Depth); + var nearest = group.Where(x => x.Depth == depth).ToArray(); + if (nearest.Length > 1 && !current.Slots.ContainsKey(group.Key)) + throw new TypeFerenceException($"{id}: embedded slot '{group.Key}' is ambiguous between {string.Join(", ", nearest.Select(x => x.Agent))}; declare it on {id} to resolve the conflict"); + result[group.Key] = nearest[0].Value; + depths[group.Key] = depth; + } + foreach (var pair in current.Slots) + { + result[pair.Key] = NormalizePath(pair.Value); + depths[pair.Key] = 0; + } + return (result, depths); + } + + private (Dictionary Values, IReadOnlyDictionary Depths) MergeSkills( + string id, + ResourceDocument current, + ResolvedAgent[] embedded, + IReadOnlyList contexts) + { + var result = new Dictionary(StringComparer.Ordinal); + var depths = new Dictionary(StringComparer.Ordinal); + var localCapabilities = current.Skills.Select(x => ResolveCapabilityId(x, id)).ToHashSet(StringComparer.Ordinal); + if (localCapabilities.Count != current.Skills.Count) + throw new TypeFerenceException($"{id}: a capability cannot be bound more than once"); + foreach (var group in embedded.SelectMany(x => x.Skills.Select(skill => + (Agent: x.Id, Skill: skill, Depth: _skillDepths[x.Id][skill.CapabilityId] + 1))) + .GroupBy(x => x.Skill.CapabilityId, StringComparer.Ordinal)) + { + var depth = group.Min(x => x.Depth); + var nearest = group.Where(x => x.Depth == depth).ToArray(); + if (nearest.Length > 1 && !localCapabilities.Contains(group.Key)) + throw new TypeFerenceException($"{id}: embedded capability '{group.Key}' is ambiguous between {string.Join(", ", nearest.Select(x => x.Agent))}; bind the capability on {id} to resolve the conflict"); + result[group.Key] = nearest[0].Skill; + depths[group.Key] = depth; + } + foreach (var binding in current.Skills) { var implementation = Require(binding.Ref, "skill"); - var contract = binding.Overrides ?? binding.Ref; - if (binding.Overrides is not null) - { - if (!skills.TryGetValue(contract, out var inherited)) throw new TypeFerenceException($"{id}: cannot override missing skill {contract}"); - EnsureSameContract(inherited, implementation, id); - } - skills[contract] = new ResolvedSkill + var capabilityId = ResolveCapabilityId(binding, id); + var capability = Require(capabilityId, "capability"); + EnsureImplementsCapability(capability, implementation, id); + if (result.TryGetValue(capabilityId, out var promoted)) EnsureSameCapability(promoted, capability, id); + result[capabilityId] = new ResolvedSkill { - DispatchName = $"{UnversionedLeaf(id)}.{UnversionedLeaf(contract)}", - ContractId = contract, + CapabilityId = capabilityId, ImplementationId = implementation.Id, Description = implementation.Description, Instructions = implementation.Instructions, InputSchema = CanonicalJson(implementation.InputSchema), OutputSchema = CanonicalJson(implementation.OutputSchema), ContextFiles = Distinct(contexts.Concat(implementation.ContextFiles.Select(NormalizePath))), - Provenance = [new("skill.contract", contract), new("skill.implementation", implementation.Id)] + Provenance = [new("skill.capability", capabilityId), new("skill.implementation", implementation.Id)] }; + depths[capabilityId] = 0; } + return (result, depths); + } + + private string ResolveCapabilityId(SkillBinding binding, string agent) + { + var implementation = Require(binding.Ref, "skill"); + if (string.IsNullOrWhiteSpace(implementation.Binds)) + throw new TypeFerenceException($"{agent}: skill {implementation.Id} does not bind a capability"); + if (binding.Capability is not null && binding.Capability != implementation.Binds) + throw new TypeFerenceException($"{agent}: binding declares capability {binding.Capability}, but skill {implementation.Id} binds {implementation.Binds}"); + return binding.Capability ?? implementation.Binds; + } + + private void ValidateSkillImplementation(ResourceDocument implementation) + { + if (string.IsNullOrWhiteSpace(implementation.Binds)) + throw new TypeFerenceException($"Skill {implementation.Id} does not bind a capability"); + var capability = Require(implementation.Binds, "capability"); + EnsureImplementsCapability(capability, implementation, implementation.Id); + } - foreach (var interfaceId in interfaceIds) + private InterfaceContract ResolveInterface(string id, HashSet visiting) + { + if (_interfaceCache.TryGetValue(id, out var cached)) return cached; + var current = Require(id, "interface"); + if (!visiting.Add(id)) throw new TypeFerenceException($"Interface embedding cycle detected at {id}"); + try { - var contract = Require(interfaceId, "interface"); - foreach (var slot in contract.RequiresSlots) - if (!slots.ContainsKey(slot)) throw new TypeFerenceException($"{id}: interface {interfaceId} requires slot '{slot}'"); - foreach (var skill in contract.RequiresSkills) - if (!skills.ContainsKey(skill)) throw new TypeFerenceException($"{id}: interface {interfaceId} requires skill '{skill}'"); + var embedded = current.Embeds.Select(x => ResolveInterface(x, visiting)).ToArray(); + foreach (var capability in current.RequiresCapabilities) Require(capability, "capability"); + return _interfaceCache[id] = new( + Distinct(embedded.SelectMany(x => x.Slots).Concat(current.RequiresSlots)), + Distinct(embedded.SelectMany(x => x.Skills).Concat(current.RequiresCapabilities))); } - - var resolved = new ResolvedAgent + finally { - Id = id, - DisplayName = string.IsNullOrWhiteSpace(current.DisplayName) ? parent?.DisplayName ?? id : current.DisplayName, - Description = string.IsNullOrWhiteSpace(current.Description) ? parent?.Description ?? "" : current.Description, - Abstract = current.Abstract, - Lineage = lineage, - Interfaces = interfaceIds, - Slots = slots, - WorkingNorms = norms, - ContextFiles = contexts, - Skills = skills.Values.OrderBy(x => x.ContractId, StringComparer.Ordinal).Select(x => x.WithDispatch(id)).ToArray(), - Provenance = provenance - }; - visiting.Remove(id); - return _cache[id] = resolved; + visiting.Remove(id); + } } + private static bool Satisfies(InterfaceContract contract, IReadOnlyDictionary slots, IReadOnlyDictionary skills) => + contract.Slots.All(slots.ContainsKey) && contract.Skills.All(skills.ContainsKey); + private ResourceDocument Require(string id, string kind) { if (!resources.TryGetValue(id, out var resource) || resource.Kind != kind) throw new TypeFerenceException($"Missing {kind}: {id}"); return resource; } - private static void EnsureSameContract(ResolvedSkill inherited, ResourceDocument replacement, string agent) + private ResourceDocument RequireEmbeddable(string id) + { + if (!resources.TryGetValue(id, out var resource) || resource.Kind is not ("agent" or "profile")) + throw new TypeFerenceException($"Missing embeddable resource: {id}"); + return resource; + } + + private static void EnsureSameCapability(ResolvedSkill promoted, ResourceDocument capability, string agent) { - if (CanonicalJson(inherited.InputSchema) != CanonicalJson(replacement.InputSchema) || - CanonicalJson(inherited.OutputSchema) != CanonicalJson(replacement.OutputSchema)) - throw new TypeFerenceException($"{agent}: override {replacement.Id} changes the public contract of {inherited.ContractId}"); + if (promoted.InputSchema != CanonicalJson(capability.InputSchema) || promoted.OutputSchema != CanonicalJson(capability.OutputSchema)) + throw new TypeFerenceException($"{agent}: promoted implementation {promoted.ImplementationId} changes the public contract of {capability.Id}"); } - private static void ValidateSystemObject(ResourceDocument value) + private static void EnsureImplementsCapability(ResourceDocument capability, ResourceDocument implementation, string agent) { - if (!value.Abstract || value.Extends is not null || value.Implements.Count != 0 || value.Skills.Count != 0 || - value.Slots.Count != 0 || value.WorkingNorms.Count != 0 || value.ContextFiles.Count != 0 || !string.IsNullOrWhiteSpace(value.Instructions)) - throw new TypeFerenceException("system/object must be abstract and behavior-free"); + if (implementation.Binds != capability.Id) + throw new TypeFerenceException($"{agent}: implementation {implementation.Id} binds {implementation.Binds}, not capability {capability.Id}"); + if (CanonicalJson(capability.InputSchema) != CanonicalJson(implementation.InputSchema) || + CanonicalJson(capability.OutputSchema) != CanonicalJson(implementation.OutputSchema)) + throw new TypeFerenceException($"{agent}: implementation {implementation.Id} changes the public contract of {capability.Id}"); } - private static string Namespace(string id) => id.Split('/')[0]; - private static string UnversionedLeaf(string id) => id.Split('/').Last().Split('@')[0]; private static string NormalizePath(string value) => value.Replace('\\', '/').TrimStart('/'); private static IReadOnlyList Distinct(IEnumerable values) => values.Distinct(StringComparer.Ordinal).ToArray(); private static string CanonicalJson(string json) => JsonSerializer.Serialize(JsonDocument.Parse(json).RootElement); + private static bool IsPromotedProvenance(ProvenanceEntry entry) => + entry.Field is not ("displayName" or "description") && + !entry.Field.StartsWith("satisfies.", StringComparison.Ordinal); + private sealed record InterfaceContract(IReadOnlyList Slots, IReadOnlyList Skills); } internal static class ResolvedSkillExtensions { internal static ResolvedSkill WithDispatch(this ResolvedSkill skill, string agentId) => new() { - DispatchName = $"{agentId.Split('/').Last().Split('@')[0]}.{skill.ContractId.Split('/').Last().Split('@')[0]}", - ContractId = skill.ContractId, + DispatchName = $"{agentId.Split('/').Last().Split('@')[0]}.{skill.CapabilityId.Split('/').Last().Split('@')[0]}", + CapabilityId = skill.CapabilityId, ImplementationId = skill.ImplementationId, Description = skill.Description, Instructions = skill.Instructions, diff --git a/tests/TypeFerence.Tests/CompilerTests.cs b/tests/TypeFerence.Tests/CompilerTests.cs index 4388787..12f753f 100644 --- a/tests/TypeFerence.Tests/CompilerTests.cs +++ b/tests/TypeFerence.Tests/CompilerTests.cs @@ -14,29 +14,28 @@ public sealed class CompilerTests private static string Example => Path.Combine(Root, "examples", "helio"); [Fact] - public void SystemObject_IsBehaviorFree() + public void Profiles_AreReusableAndNotEmittedAsAgents() { - var root = new TypeFerenceCompiler().Validate(Example).Single(x => x.Id == "system/object@1.0.0"); - Assert.True(root.Abstract); - Assert.Empty(root.WorkingNorms); - Assert.Empty(root.ContextFiles); - Assert.Empty(root.Slots); - Assert.Empty(root.Skills); + var agents = new TypeFerenceCompiler().Validate(Example); + Assert.Equal(2, agents.Count); + Assert.DoesNotContain(agents, x => x.Id == "helio/profiles/enterprise-defaults@1.0.0"); + Assert.All(agents, x => Assert.True(x.Emit)); + Assert.All(agents, x => Assert.Contains("helio/profiles/", x.Embeds.Single())); } [Fact] - public void ConcreteAgents_InheritThroughEnterpriseBase() + public void ConcreteAgents_PromoteEmbeddedBehavior() { - var agents = new TypeFerenceCompiler().Validate(Example).Where(x => !x.Abstract); - Assert.All(agents, x => Assert.Equal("helio/enterprise-agent@1.0.0", x.Lineage[1])); + var agents = new TypeFerenceCompiler().Validate(Example).Where(x => x.Emit); + Assert.All(agents, x => Assert.Contains("organization", x.Slots.Keys)); } [Fact] - public void Override_PreservesContractAndUsesDerivedDispatch() + public void Override_PreservesCapabilityAndUsesDerivedDispatch() { var agent = new TypeFerenceCompiler().Validate(Example).Single(x => x.Id == "helio/payments-repo-agent@1.0.0"); var skill = Assert.Single(agent.Skills); - Assert.Equal("helio/skills/repository-status@1.0.0", skill.ContractId); + Assert.Equal("helio/capabilities/repository-status@1.0.0", skill.CapabilityId); Assert.Equal("helio/skills/payments-repository-status@1.0.0", skill.ImplementationId); Assert.Equal("payments-repo-agent.repository-status", skill.DispatchName); } @@ -60,7 +59,7 @@ public void Compilation_IsDeterministicAndProducesNativeShapes() var compiler = new TypeFerenceCompiler(); compiler.Build(Example, one.Path, Enum.GetValues(), new ArdPublicationOptions("helio.example")); compiler.Build(Example, two.Path, Enum.GetValues(), new ArdPublicationOptions("helio.example")); - Assert.Equal("80aad0f02eea35079fbab46cba445ab6adcd36f5a4f91b15cd514af4068355cc", TypeFerenceCompiler.HashDirectory(one.Path)); + Assert.Equal("a22f5410ba5f8e172c8d25dd2ff3efb867b212753723fd2e3b1faca21d2b3963", TypeFerenceCompiler.HashDirectory(one.Path)); Assert.Equal(TypeFerenceCompiler.HashDirectory(one.Path), TypeFerenceCompiler.HashDirectory(two.Path)); Assert.False(DiffResult.Compare(one.Path, two.Path).Different); Assert.True(File.Exists(Path.Combine(one.Path, "codex", "executive-assistant", ".agents", "skills", "prepare-brief", "SKILL.md"))); @@ -322,91 +321,251 @@ public async Task CliTrustOptions_RequireValues(string option) } [Fact] - public void InheritanceCycles_AreRejected() + public void EmbeddingCycles_AreRejected() { var resources = new Dictionary { - ["test/a@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "test/a@1.0.0", Extends = "test/b@1.0.0" }, - ["test/b@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "test/b@1.0.0", Extends = "test/a@1.0.0" } + ["test/a@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/a@1.0.0", Embeds = ["test/b@1.0.0"] }, + ["test/b@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/b@1.0.0", Embeds = ["test/a@1.0.0"] } }; Assert.Contains("cycle", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.OrdinalIgnoreCase); } [Fact] - public void Provenance_CoversEffectiveScalarsInterfacesAndSkills() + public void MultipleEmbedding_RequiresExplicitConflictResolution() + { + var resources = new Dictionary + { + ["test/left@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/left@1.0.0", Slots = { ["owner"] = "left.md" } }, + ["test/right@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/right@1.0.0", Slots = { ["owner"] = "right.md" } }, + ["test/ambiguous@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "agent", + Id = "test/ambiguous@1.0.0", + Embeds = ["test/left@1.0.0", "test/right@1.0.0"] + } + }; + Assert.Contains("ambiguous", Assert.Throws(() => new TypeResolver(resources).Resolve("test/ambiguous@1.0.0")).Message, StringComparison.OrdinalIgnoreCase); + + resources["test/ambiguous@1.0.0"].Slots["owner"] = "outer.md"; + Assert.Equal("outer.md", new TypeResolver(resources).Resolve("test/ambiguous@1.0.0").Slots["owner"]); + } + + [Fact] + public void MultipleEmbedding_PrefersTheShallowestPromotedMember() + { + var capability = new ResourceDocument + { + SchemaVersion = 3, + Kind = "capability", + Id = "test/capabilities/status@1.0.0" + }; + var baseSkill = new ResourceDocument + { + SchemaVersion = 3, + Kind = "skill", + Id = "test/skills/status@1.0.0", + Binds = capability.Id + }; + var specializedSkill = new ResourceDocument + { + SchemaVersion = 3, + Kind = "skill", + Id = "test/skills/special-status@1.0.0", + Binds = capability.Id + }; + var resources = new Dictionary + { + [capability.Id] = capability, + [baseSkill.Id] = baseSkill, + [specializedSkill.Id] = specializedSkill, + ["test/deep@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "agent", + Id = "test/deep@1.0.0", + Slots = { ["owner"] = "deep.md" }, + Skills = [new SkillBinding { Ref = baseSkill.Id }] + }, + ["test/middle@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "agent", + Id = "test/middle@1.0.0", + Embeds = ["test/deep@1.0.0"] + }, + ["test/shallow@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "agent", + Id = "test/shallow@1.0.0", + Slots = { ["owner"] = "shallow.md" }, + Skills = [new SkillBinding { Ref = specializedSkill.Id, Capability = capability.Id }] + }, + ["test/outer@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "agent", + Id = "test/outer@1.0.0", + Embeds = ["test/middle@1.0.0", "test/shallow@1.0.0"] + } + }; + + var resolved = new TypeResolver(resources).Resolve("test/outer@1.0.0"); + Assert.Equal("shallow.md", resolved.Slots["owner"]); + Assert.Equal(specializedSkill.Id, Assert.Single(resolved.Skills).ImplementationId); + } + + [Fact] + public void Provenance_CoversEffectiveScalarsStructuralContractsAndSkills() { var agent = new TypeFerenceCompiler().Validate(Example).Single(x => x.Id == "helio/executive-assistant@1.0.0"); Assert.Contains(agent.Provenance, x => x.Field == "displayName" && x.Source == agent.Id); - Assert.Contains(agent.Provenance, x => x.Field.StartsWith("interfaces.", StringComparison.Ordinal)); + Assert.Contains(agent.Provenance, x => x.Field.StartsWith("satisfies.", StringComparison.Ordinal)); Assert.All(agent.Skills, skill => { - Assert.Contains(skill.Provenance, x => x.Field == "skill.contract"); + Assert.Contains(skill.Provenance, x => x.Field == "skill.capability"); Assert.Contains(skill.Provenance, x => x.Field == "skill.implementation"); }); } [Fact] - public void InterfaceRequirements_AreEnforced() + public void Interfaces_AreSatisfiedImplicitly() + { + var resources = new Dictionary + { + ["test/contract@1.0.0"] = new() { SchemaVersion = 3, Kind = "interface", Id = "test/contract@1.0.0", RequiresSlots = ["owner"] }, + ["test/plain@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/plain@1.0.0" }, + ["test/owned@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/owned@1.0.0", Slots = { ["owner"] = "owner.md" } } + }; + var agents = new TypeResolver(resources).ResolveAll(); + Assert.Empty(agents.Single(x => x.Id == "test/plain@1.0.0").Satisfies); + Assert.Contains("test/contract@1.0.0", agents.Single(x => x.Id == "test/owned@1.0.0").Satisfies); + } + + [Fact] + public void InterfaceCapabilityRequirements_MustReferenceCapabilities() + { + var resources = new Dictionary + { + ["test/contract@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "interface", + Id = "test/contract@1.0.0", + RequiresCapabilities = ["test/capabilities/missing@1.0.0"] + } + }; + + Assert.Contains("Missing capability", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.Ordinal); + } + + [Fact] + public void Skills_MustBindACapability() + { + using var source = new TempDirectory(); + File.WriteAllText(Path.Combine(source.Path, "skill.yaml"), """ +schemaVersion: 3 +kind: skill +id: test/skills/status@1.0.0 +"""); + + Assert.Contains("skills must bind a capability", Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); + } + + [Fact] + public void AgentSkillBindings_MustMatchTheSkillCapability() + { + var capability = new ResourceDocument { SchemaVersion = 3, Kind = "capability", Id = "test/capabilities/status@1.0.0" }; + var otherCapability = new ResourceDocument { SchemaVersion = 3, Kind = "capability", Id = "test/capabilities/other-status@1.0.0" }; + var skill = new ResourceDocument { SchemaVersion = 3, Kind = "skill", Id = "test/skills/status@1.0.0", Binds = capability.Id }; + var resources = new Dictionary + { + [capability.Id] = capability, + [otherCapability.Id] = otherCapability, + [skill.Id] = skill, + ["test/agent@1.0.0"] = new() + { + SchemaVersion = 3, + Kind = "agent", + Id = "test/agent@1.0.0", + Skills = [new SkillBinding { Ref = skill.Id, Capability = otherCapability.Id }] + } + }; + + Assert.Contains("binding declares capability", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.Ordinal); + } + + [Fact] + public void MissingEmbeddedResources_AreRejected() { var resources = new Dictionary { - ["system/object@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "system/object@1.0.0", Abstract = true }, - ["test/contract@1.0.0"] = new() { SchemaVersion = 1, Kind = "interface", Id = "test/contract@1.0.0", RequiresSlots = ["owner"] }, - ["test/base@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "test/base@1.0.0", Abstract = true, Extends = "system/object@1.0.0", Implements = ["test/contract@1.0.0"] } + ["test/base@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/base@1.0.0", Embeds = ["test/missing@1.0.0"] } }; - Assert.Contains("requires slot", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Missing embeddable resource", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.Ordinal); } [Fact] - public void MissingParentReferences_AreRejected() + public void Profiles_CannotEmbedAgents() { var resources = new Dictionary { - ["system/object@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "system/object@1.0.0", Abstract = true }, - ["test/base@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "test/base@1.0.0", Abstract = true, Extends = "test/missing@1.0.0" } + ["test/profile@1.0.0"] = new() { SchemaVersion = 3, Kind = "profile", Id = "test/profile@1.0.0", Embeds = ["test/agent@1.0.0"] }, + ["test/agent@1.0.0"] = new() { SchemaVersion = 3, Kind = "agent", Id = "test/agent@1.0.0" } }; - Assert.Contains("Agent not found", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.Ordinal); + Assert.Contains("profiles can only embed profiles", Assert.Throws(() => new TypeResolver(resources).ResolveAll()).Message, StringComparison.Ordinal); } [Fact] - public void SkillOverrides_MustPreserveSchemas() + public void SkillCapabilityImplementations_MustPreserveSchemas() { + var capability = new ResourceDocument + { + SchemaVersion = 3, + Kind = "capability", + Id = "test/capabilities/status@1.0.0", + InputSchema = "{\"type\":\"object\",\"properties\":{\"focus\":{\"type\":\"string\"}}}", + OutputSchema = "{\"type\":\"object\"}" + }; var baseSkill = new ResourceDocument { - SchemaVersion = 1, + SchemaVersion = 3, Kind = "skill", Id = "test/skills/status@1.0.0", + Binds = capability.Id, InputSchema = "{\"type\":\"object\",\"properties\":{\"focus\":{\"type\":\"string\"}}}", OutputSchema = "{\"type\":\"object\"}" }; var replacement = new ResourceDocument { - SchemaVersion = 1, + SchemaVersion = 3, Kind = "skill", Id = "test/skills/special-status@1.0.0", + Binds = capability.Id, InputSchema = "{\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"number\"}}}", OutputSchema = "{\"type\":\"object\"}" }; var resources = new Dictionary { - ["system/object@1.0.0"] = new() { SchemaVersion = 1, Kind = "agent", Id = "system/object@1.0.0", Abstract = true }, ["test/base@1.0.0"] = new() { - SchemaVersion = 1, + SchemaVersion = 3, Kind = "agent", Id = "test/base@1.0.0", - Abstract = true, - Extends = "system/object@1.0.0", + Emit = false, Skills = [new SkillBinding { Ref = baseSkill.Id }] }, ["test/concrete@1.0.0"] = new() { - SchemaVersion = 1, + SchemaVersion = 3, Kind = "agent", Id = "test/concrete@1.0.0", - Extends = "test/base@1.0.0", - Skills = [new SkillBinding { Ref = replacement.Id, Overrides = baseSkill.Id }] + Embeds = ["test/base@1.0.0"], + Skills = [new SkillBinding { Ref = replacement.Id, Capability = capability.Id }] }, + [capability.Id] = capability, [baseSkill.Id] = baseSkill, [replacement.Id] = replacement }; @@ -414,12 +573,16 @@ public void SkillOverrides_MustPreserveSchemas() } [Fact] - public void Interfaces_CannotInherit() + public void Interfaces_CanEmbedInterfaces() { using var source = new TempDirectory(); - File.WriteAllText(Path.Combine(source.Path, "root.yaml"), "schemaVersion: 1\nkind: agent\nid: system/object@1.0.0\nabstract: true\n"); - File.WriteAllText(Path.Combine(source.Path, "interface.yaml"), "schemaVersion: 1\nkind: interface\nid: test/contract@1.0.0\nextends: test/other@1.0.0\n"); - Assert.Contains("interfaces cannot extend", Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); + File.WriteAllText(Path.Combine(source.Path, "base.yaml"), "schemaVersion: 3\nkind: interface\nid: test/base@1.0.0\nrequiresSlots: [owner]\n"); + File.WriteAllText(Path.Combine(source.Path, "interface.yaml"), "schemaVersion: 3\nkind: interface\nid: test/contract@1.0.0\nembeds: [test/base@1.0.0]\nrequiresSlots: [repository]\n"); + File.WriteAllText(Path.Combine(source.Path, "agent.yaml"), "schemaVersion: 3\nkind: agent\nid: test/agent@1.0.0\nslots: { owner: owner.md, repository: repository.md }\n"); + File.WriteAllText(Path.Combine(source.Path, "owner.md"), "owner"); + File.WriteAllText(Path.Combine(source.Path, "repository.md"), "repository"); + var agent = new TypeResolver(new ResourceLoader().Load(source.Path)).Resolve("test/agent@1.0.0"); + Assert.Contains("test/contract@1.0.0", agent.Satisfies); } [Theory] @@ -428,7 +591,7 @@ public void Interfaces_CannotInherit() public void ContextPaths_MustStayInsideSourceAndExist(string path, string expected) { using var source = new TempDirectory(); - File.WriteAllText(Path.Combine(source.Path, "root.yaml"), $"schemaVersion: 1\nkind: agent\nid: system/object@1.0.0\nabstract: true\ncontextFiles:\n - {path}\n"); + File.WriteAllText(Path.Combine(source.Path, "agent.yaml"), $"schemaVersion: 3\nkind: agent\nid: test/agent@1.0.0\ncontextFiles:\n - {path}\n"); Assert.Contains(expected, Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); } @@ -437,24 +600,40 @@ public void UnknownYamlFields_AreRejected() { using var source = new TempDirectory(); File.WriteAllText(Path.Combine(source.Path, "root.yaml"), """ -schemaVersion: 1 +schemaVersion: 3 kind: agent -id: system/object@1.0.0 -abstract: true +id: test/agent@1.0.0 unknownField: rejected """); Assert.Contains("invalid YAML", Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); } + [Theory] + [InlineData("extends: test/base@1.0.0")] + [InlineData("implements: [test/contract@1.0.0]")] + public void LegacyInheritanceFields_AreRejected(string field) + { + using var source = new TempDirectory(); + File.WriteAllText(Path.Combine(source.Path, "agent.yaml"), $"schemaVersion: 3\nkind: agent\nid: test/agent@1.0.0\n{field}\n"); + Assert.Contains("invalid YAML", Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); + } + + [Fact] + public void VersionOneResources_AreRejected() + { + using var source = new TempDirectory(); + File.WriteAllText(Path.Combine(source.Path, "agent.yaml"), "schemaVersion: 1\nkind: agent\nid: test/agent@1.0.0\n"); + Assert.Contains("schemaVersion must be 3", Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); + } + [Fact] public void ResourceIds_RequireSemanticVersions() { using var source = new TempDirectory(); File.WriteAllText(Path.Combine(source.Path, "root.yaml"), """ -schemaVersion: 1 +schemaVersion: 3 kind: agent id: system/object@latest -abstract: true """); Assert.Contains("semantic-version", Assert.Throws(() => new ResourceLoader().Load(source.Path)).Message, StringComparison.OrdinalIgnoreCase); } diff --git a/tools/render_whitepaper.py b/tools/render_whitepaper.py index aaeb6a2..85930c5 100644 --- a/tools/render_whitepaper.py +++ b/tools/render_whitepaper.py @@ -103,14 +103,14 @@ def node(d, x, y, w, h, title, subtitle="", fill=colors.HexColor("#F7F8FC"), str def hierarchy(): d = Drawing(470, 238) - node(d, 165, 190, 140, 38, "system/object", "mechanics only", NAVY, NAVY, True) - node(d, 155, 125, 160, 42, "enterprise-agent", "organization-owned", colors.HexColor("#E9ECFF")) - node(d, 25, 60, 160, 42, "person-agent", "human-facing domain") - node(d, 285, 60, 160, 42, "repo-agent", "repository domain") + node(d, 155, 185, 160, 42, "enterprise profile", "reusable governance", colors.HexColor("#E9ECFF")) + node(d, 25, 60, 160, 42, "person profile", "human-facing defaults") + node(d, 285, 60, 160, 42, "repository profile", "repository defaults") node(d, 25, 0, 160, 38, "executive-assistant", fill=PALE, stroke=PURPLE) node(d, 285, 0, 160, 38, "payments-repo-agent", fill=PALE, stroke=PURPLE) - for x1, y1, x2, y2 in [(235,190,235,167),(235,125,105,102),(235,125,365,102),(105,60,105,38),(365,60,365,38)]: + for x1, y1, x2, y2 in [(235,185,105,102),(235,185,365,102),(105,60,105,38),(365,60,365,38)]: d.add(Line(x1,y1,x2,y2,strokeColor=MUTED,strokeWidth=1.2)) + d.add(String(235, 145, "embedded by", textAnchor="middle", fontName=BODY, fontSize=7.2, fillColor=MUTED)) return d @@ -118,7 +118,7 @@ def pipeline(): d = Drawing(470, 165) node(d, 0, 60, 90, 48, "Typed YAML", "agents + skills") arrow(d, 90, 84, 120, 84) - node(d, 120, 60, 90, 48, "Validate", "contracts + paths") + node(d, 120, 60, 90, 48, "Compose", "embedding + capabilities") arrow(d, 210, 84, 240, 84) node(d, 240, 55, 105, 58, "Resolved IR", "behavior + provenance", NAVY, NAVY, True) for y, label in [(125,"Codex"),(72,"Copilot"),(19,"Cursor + MCP")]: @@ -147,7 +147,7 @@ def dispatch(): d = Drawing(470, 150) node(d, 0, 48, 130, 55, "MCP call", "derived skill name") arrow(d, 130, 75, 165, 75) - node(d, 165, 40, 140, 70, "Resolve contract", "nearest compatible override", NAVY, NAVY, True) + node(d, 165, 40, 140, 70, "Resolve capability", "compatible local binding", NAVY, NAVY, True) arrow(d, 305, 75, 340, 75) node(d, 340, 20, 130, 110, "Invocation package", "args + context + provenance", PALE, PURPLE) return d @@ -252,7 +252,7 @@ def main(): reader = PdfReader(str(OUTPUT)) if len(reader.pages) < 6: raise RuntimeError("Whitepaper unexpectedly short") extracted = "".join(page.extract_text() or "" for page in reader.pages) - for phrase in ("TypeFerence", "system/object", "deterministic compiler", "Conclusion"): + for phrase in ("TypeFerence", "Composition over ancestry", "deterministic compiler", "Conclusion"): if phrase not in extracted: raise RuntimeError(f"Missing PDF text: {phrase}") print(f"Rendered {OUTPUT} ({len(reader.pages)} pages)")