@cat-factory/agents 0.97.0 → 0.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/agents/kinds/skill.d.ts +1 -1
  2. package/dist/agents/kinds/skill.d.ts.map +1 -1
  3. package/dist/agents/kinds/skill.js +2 -2
  4. package/dist/agents/kinds/skill.js.map +1 -1
  5. package/dist/agents/kinds/traits.d.ts +19 -2
  6. package/dist/agents/kinds/traits.d.ts.map +1 -1
  7. package/dist/agents/kinds/traits.js +25 -3
  8. package/dist/agents/kinds/traits.js.map +1 -1
  9. package/dist/foundationalServices/FoundationalServiceRunResolver.d.ts +13 -1
  10. package/dist/foundationalServices/FoundationalServiceRunResolver.d.ts.map +1 -1
  11. package/dist/foundationalServices/FoundationalServiceRunResolver.js +71 -1
  12. package/dist/foundationalServices/FoundationalServiceRunResolver.js.map +1 -1
  13. package/dist/foundationalServices/FoundationalServiceSourceService.d.ts +33 -5
  14. package/dist/foundationalServices/FoundationalServiceSourceService.d.ts.map +1 -1
  15. package/dist/foundationalServices/FoundationalServiceSourceService.js +190 -41
  16. package/dist/foundationalServices/FoundationalServiceSourceService.js.map +1 -1
  17. package/dist/foundationalServices/folder-scan.d.ts +58 -0
  18. package/dist/foundationalServices/folder-scan.d.ts.map +1 -0
  19. package/dist/foundationalServices/folder-scan.js +139 -0
  20. package/dist/foundationalServices/folder-scan.js.map +1 -0
  21. package/dist/foundationalServices/foundational-source.logic.d.ts +31 -3
  22. package/dist/foundationalServices/foundational-source.logic.d.ts.map +1 -1
  23. package/dist/foundationalServices/foundational-source.logic.js +43 -9
  24. package/dist/foundationalServices/foundational-source.logic.js.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/repoSourceSync/tier-installation-resolver.d.ts.map +1 -1
  30. package/dist/repoSourceSync/tier-installation-resolver.js +9 -6
  31. package/dist/repoSourceSync/tier-installation-resolver.js.map +1 -1
  32. package/dist/skillLibrary/SkillCatalogService.d.ts +1 -1
  33. package/dist/skillLibrary/SkillCatalogService.js +1 -1
  34. package/dist/skillLibrary/SkillSourceService.d.ts +1 -1
  35. package/dist/skillLibrary/SkillSourceService.js +1 -1
  36. package/package.json +5 -5
@@ -1,6 +1,6 @@
1
1
  import type { AgentKindDefinition, AgentKindRegistry } from './registry.js';
2
2
  export declare const SKILL_AGENT_KIND = "skill";
3
- /** The generic skill-execution kind (repo-skills initiative slice 2). */
3
+ /** The generic skill-execution kind (ADR 0024, slice 2). */
4
4
  export declare const SKILL_AGENT_KINDS: AgentKindDefinition[];
5
5
  /**
6
6
  * Register the skill kind on the given registry. Called by `defaultAgentKindRegistry()`;
@@ -1 +1 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/skill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAiC3E,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAyCvC,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,EAsBlD,CAAA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEpE"}
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/skill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAiC3E,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAyCvC,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,EAsBlD,CAAA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEpE"}
@@ -4,7 +4,7 @@ import { STANDARDS_FOOTER } from '../prompts/shared.js';
4
4
  import { linkedContextSection } from '../prompts/standard.js';
5
5
  // ---------------------------------------------------------------------------
6
6
  // The `skill` agent kind — ONE generic, parametrized container-coding agent that executes a
7
- // repo-sourced Claude Skill (docs/initiatives/repo-skills.md). A team authors skills in a repo
7
+ // repo-sourced Claude Skill (ADR 0024). A team authors skills in a repo
8
8
  // (`<skill>/SKILL.md` + sibling resources); the account syncs them into its skill catalog
9
9
  // (slice 1), and a pipeline step of this kind runs one — selected NOT by a bespoke per-skill
10
10
  // agent kind, but by the step's `stepOptions.skillId`. That per-step id is resolved to the skill
@@ -63,7 +63,7 @@ function skillUserPrompt(context) {
63
63
  lines.push('', 'Apply the skill to this task. The platform commits your changes — amending this task’s', 'existing pull request when there is one, or opening a new one otherwise — so do not run git', 'yourself.');
64
64
  return lines.filter(Boolean).join('\n');
65
65
  }
66
- /** The generic skill-execution kind (repo-skills initiative slice 2). */
66
+ /** The generic skill-execution kind (ADR 0024, slice 2). */
67
67
  export const SKILL_AGENT_KINDS = [
68
68
  {
69
69
  kind: SKILL_AGENT_KIND,
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/agents/kinds/skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/agents/kinds/skill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,8EAA8E;AAC9E,4FAA4F;AAC5F,wEAAwE;AACxE,0FAA0F;AAC1F,6FAA6F;AAC7F,iGAAiG;AACjG,4FAA4F;AAC5F,qFAAqF;AACrF,8FAA8F;AAC9F,2FAA2F;AAC3F,0EAA0E;AAC1E,EAAE;AACF,+FAA+F;AAC/F,6FAA6F;AAC7F,8FAA8F;AAC9F,mEAAmE;AACnE,EAAE;AACF,oFAAoF;AACpF,8FAA8F;AAC9F,gGAAgG;AAChG,iGAAiG;AACjG,kGAAkG;AAClG,8FAA8F;AAC9F,+FAA+F;AAC/F,8DAA8D;AAC9D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAA;AAEvC,MAAM,mBAAmB,GAAG;IAC1B,wFAAwF;IACxF,wFAAwF;IACxF,2FAA2F;IAC3F,0FAA0F;IAC1F,6FAA6F;IAC7F,iEAAiE;IACjE,EAAE;IACF,+FAA+F;IAC/F,+FAA+F;IAC/F,2BAA2B;IAC3B,EAAE;IACF,0BAA0B;IAC1B,EAAE;IACF,gBAAgB;CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,SAAS,eAAe,CAAC,OAAwB;IAC/C,MAAM,KAAK,GAAG;QACZ,aAAa,OAAO,CAAC,YAAY,EAAE;QACnC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,SAAS,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;QAC9B,UAAU,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,gEAAgE,EAAE;KAClH,CAAA;IACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;IACpE,IAAI,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,2EAA2E,CAAC,CAAA;QAC3F,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IACxF,CAAC;IACD,KAAK,CAAC,IAAI,CACR,EAAE,EACF,wFAAwF,EACxF,6FAA6F,EAC7F,WAAW,CACZ,CAAA;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAA0B;IACtD;QACE,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,mBAAmB;QACjC,UAAU,EAAE,eAAe;QAC3B,gGAAgG;QAChG,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,KAAK,EAAE;YACL,OAAO,EAAE,kBAAkB;YAC3B,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;YAC/B,kBAAkB,EAAE,IAAI;SACzB;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,SAAS;YAChB,WAAW,EACT,+IAA+I;YACjJ,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,UAAU;SACjB;KACF;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;AACzC,CAAC"}
@@ -79,6 +79,22 @@ export declare const FOUNDATIONAL_CATALOG_TRAIT: AgentTrait;
79
79
  export declare const FOUNDATIONAL_CONTRACTS_TRAIT: AgentTrait;
80
80
  /** The guidance a design-time kind gets: consult the catalog, then DECLARE what it used. */
81
81
  export declare const FOUNDATIONAL_CATALOG_GUIDANCE: string;
82
+ /**
83
+ * GENERATOR kinds whose deliverable is BINARY artifacts (image generation is the canonical
84
+ * example) stored through a FOUNDATIONAL SERVICE the step selected from the workspace catalog
85
+ * (`stepOptions.binaryOutput`) — never through the platform's own artifact store, which holds
86
+ * run evidence, not product deliverables. The engine injects a brief naming the selected
87
+ * storage service and the selected CONTEXT services (an inventory that can say which entities
88
+ * exist, which lack an asset, and how each is described), each with its API contract, and reads
89
+ * the agent's machine-readable declaration of what it stored back onto the step
90
+ * (`PipelineStep.binaryOutputs`). Run admission refuses a step carrying this trait whose
91
+ * selection is missing or does not resolve against the catalog. No built-in kind carries it —
92
+ * a deployment's generator opts in via `registerAgentKind({ traits })`.
93
+ * See docs/initiatives/binary-output-foundational-storage.md.
94
+ */
95
+ export declare const BINARY_OUTPUT_TRAIT: AgentTrait;
96
+ /** The guidance a binary-generating kind gets: the brief, the workflow, and the declaration. */
97
+ export declare const BINARY_OUTPUT_GUIDANCE: string;
82
98
  /** The guidance a consumer kind gets: the contracts are files, and they are authoritative. */
83
99
  export declare const FOUNDATIONAL_CONTRACTS_GUIDANCE: string;
84
100
  /** The guidance appended to a spec-aware kind's system prompt — explains the spec format. */
@@ -110,8 +126,9 @@ export interface AgentTraitDefinition {
110
126
  /**
111
127
  * The standard trait DEFINITIONS, pre-loaded onto every {@link AgentKindRegistry} instance
112
128
  * (its constructor installs them) — the analogue of `STANDARD_AGENT_TRAITS`, but for the
113
- * per-trait guidance. Only `spec-aware` carries guidance; the rest are pure markers whose
114
- * whole effect lives in the engine (the fragment fold / the interview-gate handling).
129
+ * per-trait guidance. The spec-aware / foundational / binary-output traits carry guidance;
130
+ * the rest are pure markers whose whole effect lives in the engine (the fragment fold / the
131
+ * interview-gate handling).
115
132
  */
116
133
  export declare const STANDARD_TRAIT_DEFINITIONS: readonly AgentTraitDefinition[];
117
134
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/traits.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAetD,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAyB,CAAA;AAExD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,UAAwB,CAAA;AAEtD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAyB,CAAA;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAA6B,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAA6B,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,UAA8B,CAAA;AAElE;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,EAAE,UAAmC,CAAA;AAE5E;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,UAAqC,CAAA;AAEhF,4FAA4F;AAC5F,eAAO,MAAM,6BAA6B,QAK9B,CAAA;AAEZ,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B,QAIhC,CAAA;AAEZ,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,QAWpB,CAAA;AAEZ;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAmC1E,CAAA;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,EAAE,EAAE,UAAU,CAAA;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;CAClD;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,oBAAoB,EAQrE,CAAA;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,GAAG,CAAC,UAAU,CAAC,CAKvF;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAEjG;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,iBAAiB,GAC1B,MAAM,GAAG,OAAO,CAElB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAQvF"}
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/traits.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,SAAS,EASf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAetD,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAyB,CAAA;AAExD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,UAAwB,CAAA;AAEtD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAyB,CAAA;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAA6B,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAA6B,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,UAA8B,CAAA;AAElE;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,EAAE,UAAmC,CAAA;AAE5E;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,UAAqC,CAAA;AAEhF,4FAA4F;AAC5F,eAAO,MAAM,6BAA6B,QAK9B,CAAA;AAEZ;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAA4B,CAAA;AAE9D,gGAAgG;AAChG,eAAO,MAAM,sBAAsB,QAIvB,CAAA;AAEZ,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B,QAIhC,CAAA;AAEZ,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,QAWpB,CAAA;AAEZ;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAmC1E,CAAA;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,EAAE,EAAE,UAAU,CAAA;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;CAClD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,oBAAoB,EASrE,CAAA;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,GAAG,CAAC,UAAU,CAAC,CAKvF;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAEjG;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,iBAAiB,GAC1B,MAAM,GAAG,OAAO,CAElB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAQvF"}
@@ -1,5 +1,5 @@
1
1
  import { SPEC_FEATURES_DIR, SPEC_MODULES_DIR, SPEC_OVERVIEW_PATH } from '@cat-factory/contracts';
2
- import { DOC_INTERVIEWER_AGENT_KIND, FOUNDATIONAL_CATALOG_FILE, FOUNDATIONAL_CONTEXT_DIR, FOUNDATIONAL_DECLARATION_TAG, FOUNDATIONAL_INDEX_FILE, INITIATIVE_INTERVIEWER_AGENT_KIND, } from '@cat-factory/kernel';
2
+ import { BINARY_OUTPUT_BRIEF_FILE, BINARY_OUTPUT_DECLARATION_TAG, DOC_INTERVIEWER_AGENT_KIND, FOUNDATIONAL_CATALOG_FILE, FOUNDATIONAL_CONTEXT_DIR, FOUNDATIONAL_DECLARATION_TAG, FOUNDATIONAL_INDEX_FILE, INITIATIVE_INTERVIEWER_AGENT_KIND, } from '@cat-factory/kernel';
3
3
  /**
4
4
  * Code-aware kinds read and/or change the service's code. The service's selected
5
5
  * best-practice / guideline fragments (Node, Fastify, performance, …) are folded into
@@ -82,6 +82,26 @@ export const FOUNDATIONAL_CATALOG_GUIDANCE = [
82
82
  `The catalog lists each service's operations but NOT its full API documents. Design against the operations you can see; do not invent endpoints, fields or semantics the catalog does not show. The implementation steps get the full contracts.`,
83
83
  `END your reply with a fenced \`\`\`${FOUNDATIONAL_DECLARATION_TAG} block listing the service ids your design consumes, one per line, and nothing else in the block. Write \`none\` when your design consumes no foundational service. This block is machine-read: the ids you list are what the later implementation steps are handed the API contracts for, so a service you omit is one nobody downstream will have the interface to, and an id you invent will be reported as unavailable.`,
84
84
  ].join('\n');
85
+ /**
86
+ * GENERATOR kinds whose deliverable is BINARY artifacts (image generation is the canonical
87
+ * example) stored through a FOUNDATIONAL SERVICE the step selected from the workspace catalog
88
+ * (`stepOptions.binaryOutput`) — never through the platform's own artifact store, which holds
89
+ * run evidence, not product deliverables. The engine injects a brief naming the selected
90
+ * storage service and the selected CONTEXT services (an inventory that can say which entities
91
+ * exist, which lack an asset, and how each is described), each with its API contract, and reads
92
+ * the agent's machine-readable declaration of what it stored back onto the step
93
+ * (`PipelineStep.binaryOutputs`). Run admission refuses a step carrying this trait whose
94
+ * selection is missing or does not resolve against the catalog. No built-in kind carries it —
95
+ * a deployment's generator opts in via `registerAgentKind({ traits })`.
96
+ * See docs/initiatives/binary-output-foundational-storage.md.
97
+ */
98
+ export const BINARY_OUTPUT_TRAIT = 'binary-output';
99
+ /** The guidance a binary-generating kind gets: the brief, the workflow, and the declaration. */
100
+ export const BINARY_OUTPUT_GUIDANCE = [
101
+ `Your deliverable is BINARY artifacts (images, audio, or similar), stored through a shared storage service this deployment runs. Start from \`.cat-context/${BINARY_OUTPUT_BRIEF_FILE}\`: it names the storage service to use and any context services selected for this step, and points at their API contracts. If that file is absent, the platform could not provide storage — do not attempt any upload; state it in your report and stop generating.`,
102
+ `Before generating, establish SCOPE from the selected context services (what entities exist, which already have an asset, what each thing's description says) rather than inventing subjects. Store every artifact through the named storage service's contract — call the operations it declares, with the shapes it declares; never invent an endpoint, and never deliver binaries by committing them to the repository or embedding them in your reply.`,
103
+ `END your reply with a fenced \`\`\`${BINARY_OUTPUT_DECLARATION_TAG} block containing either the literal \`none\` (you stored nothing) or a JSON array of entries \`{"service": "<service id>", "location": "<where the service stored it>", "entity": "<what it is for>", "contentType": "<media type>", "description": "<one line>"}\` — \`service\` and \`location\` are required, the rest optional. This block is machine-read and recorded on the run; an artifact you omit is one nobody can find later. Anything you could NOT store (a failed upload, a missing credential, a contract gap) belongs in your report as a named omission, never silently dropped.`,
104
+ ].join('\n');
85
105
  /** The guidance a consumer kind gets: the contracts are files, and they are authoritative. */
86
106
  export const FOUNDATIONAL_CONTRACTS_GUIDANCE = [
87
107
  `The FOUNDATIONAL SERVICES the design chose for this task — shared capabilities such as file storage, notifications or audit — have their API contracts provided to you under \`.cat-context/${FOUNDATIONAL_CONTEXT_DIR}/\`. Start at \`.cat-context/${FOUNDATIONAL_INDEX_FILE}\`, which names each one and states anything the design asked for that could not be provided.`,
@@ -152,8 +172,9 @@ export const STANDARD_AGENT_TRAITS = {
152
172
  /**
153
173
  * The standard trait DEFINITIONS, pre-loaded onto every {@link AgentKindRegistry} instance
154
174
  * (its constructor installs them) — the analogue of `STANDARD_AGENT_TRAITS`, but for the
155
- * per-trait guidance. Only `spec-aware` carries guidance; the rest are pure markers whose
156
- * whole effect lives in the engine (the fragment fold / the interview-gate handling).
175
+ * per-trait guidance. The spec-aware / foundational / binary-output traits carry guidance;
176
+ * the rest are pure markers whose whole effect lives in the engine (the fragment fold / the
177
+ * interview-gate handling).
157
178
  */
158
179
  export const STANDARD_TRAIT_DEFINITIONS = [
159
180
  { id: CODE_AWARE_TRAIT },
@@ -163,6 +184,7 @@ export const STANDARD_TRAIT_DEFINITIONS = [
163
184
  { id: BRIEF_STANDARDS_TRAIT },
164
185
  { id: FOUNDATIONAL_CATALOG_TRAIT, guidance: FOUNDATIONAL_CATALOG_GUIDANCE },
165
186
  { id: FOUNDATIONAL_CONTRACTS_TRAIT, guidance: FOUNDATIONAL_CONTRACTS_GUIDANCE },
187
+ { id: BINARY_OUTPUT_TRAIT, guidance: BINARY_OUTPUT_GUIDANCE },
166
188
  ];
167
189
  /**
168
190
  * The traits a kind carries: its built-in set ({@link STANDARD_AGENT_TRAITS}) unioned with a
@@ -1 +1 @@
1
- {"version":3,"file":"traits.js","sourceRoot":"","sources":["../../../src/agents/kinds/traits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traits.js","sourceRoot":"","sources":["../../../src/agents/kinds/traits.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { FoundationalServiceSelection } from '@cat-factory/contracts';
1
+ import type { BinaryOutputConfig, FoundationalServiceSelection } from '@cat-factory/contracts';
2
2
  import type { FoundationalCatalogView, InjectedContextFile } from '@cat-factory/kernel';
3
3
  import type { FoundationalServiceCatalogService } from './FoundationalServiceCatalogService.js';
4
4
  /**
@@ -32,6 +32,18 @@ export declare class FoundationalServiceRunResolver {
32
32
  * service this deployment does not have", and those need three different reactions.
33
33
  */
34
34
  contextFilesFor(workspaceId: string, selection: FoundationalServiceSelection | undefined): Promise<InjectedContextFile[]>;
35
+ /**
36
+ * The injected context files a BINARY-GENERATING kind receives for its step's selection
37
+ * (`stepOptions.binaryOutput`): the brief naming the storage + context services, plus one
38
+ * contract file per RESOLVED service under `binary-output/`.
39
+ *
40
+ * The brief is ALWAYS produced, even for a missing selection or ids the catalog no longer
41
+ * resolves — that is the "degrade loudly" half: a generator handed nothing would guess at a
42
+ * storage endpoint, and an asset stored against a guessed API lands where nobody can find it.
43
+ * Run admission refuses the bad selections it can see up front; this read is what a run that
44
+ * outlives a catalog edit still gets, so it re-states rather than assumes.
45
+ */
46
+ binaryOutputContextFilesFor(workspaceId: string, config: BinaryOutputConfig | undefined): Promise<InjectedContextFile[]>;
35
47
  private hasCatalog;
36
48
  }
37
49
  //# sourceMappingURL=FoundationalServiceRunResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FoundationalServiceRunResolver.d.ts","sourceRoot":"","sources":["../../src/foundationalServices/FoundationalServiceRunResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAOvF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAA;AAE/F;;;;;;;;;;;;;GAaG;AACH,qBAAa,8BAA8B;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,iCAAiC,EAAI;IAE3E,oFAAoF;IAC9E,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAUxE;IAED,kGAAkG;IAC5F,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE1D;IAED;;;;;;;;OAQG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,4BAA4B,GAAG,SAAS,GAClD,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAyChC;YAEa,UAAU;CAGzB"}
1
+ {"version":3,"file":"FoundationalServiceRunResolver.d.ts","sourceRoot":"","sources":["../../src/foundationalServices/FoundationalServiceRunResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAUvF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAA;AAE/F;;;;;;;;;;;;;GAaG;AACH,qBAAa,8BAA8B;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,iCAAiC,EAAI;IAE3E,oFAAoF;IAC9E,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAUxE;IAED,kGAAkG;IAC5F,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE1D;IAED;;;;;;;;OAQG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,4BAA4B,GAAG,SAAS,GAClD,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAyChC;IAED;;;;;;;;;;OAUG;IACG,2BAA2B,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA6DhC;YAEa,UAAU;CAGzB"}
@@ -1,4 +1,4 @@
1
- import { FOUNDATIONAL_INDEX_FILE, contextFileFor, renderContractDocument, renderFoundationalIndex, } from '@cat-factory/kernel';
1
+ import { BINARY_OUTPUT_BRIEF_FILE, FOUNDATIONAL_INDEX_FILE, binaryContextFileFor, contextFileFor, renderBinaryOutputBrief, renderContractDocument, renderFoundationalIndex, } from '@cat-factory/kernel';
2
2
  /**
3
3
  * The engine-facing seam over the foundational-services catalog
4
4
  * (backend/docs/adr/0031-foundational-services.md). Two reads, deliberately separate, because they
@@ -85,6 +85,76 @@ export class FoundationalServiceRunResolver {
85
85
  }
86
86
  return files;
87
87
  }
88
+ /**
89
+ * The injected context files a BINARY-GENERATING kind receives for its step's selection
90
+ * (`stepOptions.binaryOutput`): the brief naming the storage + context services, plus one
91
+ * contract file per RESOLVED service under `binary-output/`.
92
+ *
93
+ * The brief is ALWAYS produced, even for a missing selection or ids the catalog no longer
94
+ * resolves — that is the "degrade loudly" half: a generator handed nothing would guess at a
95
+ * storage endpoint, and an asset stored against a guessed API lands where nobody can find it.
96
+ * Run admission refuses the bad selections it can see up front; this read is what a run that
97
+ * outlives a catalog edit still gets, so it re-states rather than assumes.
98
+ */
99
+ async binaryOutputContextFilesFor(workspaceId, config) {
100
+ if (!config) {
101
+ return [
102
+ {
103
+ path: BINARY_OUTPUT_BRIEF_FILE,
104
+ content: renderBinaryOutputBrief({
105
+ config,
106
+ storage: null,
107
+ contextServices: [],
108
+ unresolvedContextIds: [],
109
+ }),
110
+ },
111
+ ];
112
+ }
113
+ const catalog = await this.catalogFor(workspaceId);
114
+ const byId = new Map(catalog.map((service) => [service.id, service]));
115
+ const storage = byId.get(config.storageServiceId) ?? null;
116
+ const contextIds = config.contextServiceIds ?? [];
117
+ const contextServices = contextIds
118
+ .map((id) => byId.get(id))
119
+ .filter((service) => service !== undefined);
120
+ const unresolvedContextIds = contextIds.filter((id) => !byId.has(id));
121
+ const involved = [...(storage ? [storage] : []), ...contextServices];
122
+ const documents = await this.catalog.contractsFor(workspaceId, involved.map((service) => service.id));
123
+ const files = [
124
+ {
125
+ path: BINARY_OUTPUT_BRIEF_FILE,
126
+ content: renderBinaryOutputBrief({
127
+ config,
128
+ storage,
129
+ contextServices,
130
+ unresolvedContextIds,
131
+ }),
132
+ },
133
+ ];
134
+ for (const service of involved) {
135
+ const contracts = (documents.get(service.id) ?? []).map((doc) => ({
136
+ contractId: doc.contractId,
137
+ format: doc.format,
138
+ title: doc.title,
139
+ body: doc.body,
140
+ }));
141
+ // A service with no registered contract gets no file — the brief already states that
142
+ // apart, and an empty document would read as an API with no operations.
143
+ if (contracts.length === 0)
144
+ continue;
145
+ files.push({
146
+ path: binaryContextFileFor(service.id),
147
+ content: renderContractDocument({
148
+ id: service.id,
149
+ name: service.name,
150
+ summary: service.summary,
151
+ description: service.description,
152
+ contracts,
153
+ }),
154
+ });
155
+ }
156
+ return files;
157
+ }
88
158
  async hasCatalog(workspaceId) {
89
159
  return (await this.catalog.resolve(workspaceId)).length > 0;
90
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FoundationalServiceRunResolver.js","sourceRoot":"","sources":["../../src/foundationalServices/FoundationalServiceRunResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FoundationalServiceRunResolver.js","sourceRoot":"","sources":["../../src/foundationalServices/FoundationalServiceRunResolver.ts"],"names":[],"mappings":"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"}
@@ -28,15 +28,22 @@ export interface FoundationalServiceSourceServiceDependencies {
28
28
  * The shared repo-source engine (`repoSourceSync`) owns the mechanics that every repo-sourced
29
29
  * library gets identically — pin the head commit BEFORE reading, run the reconcile, sweep
30
30
  * tombstones by produced id, stamp the sync state, invalidate only on a real change. The
31
- * differentiator supplied here is what a UNIT is, and there are two of them:
31
+ * differentiator supplied here is what a UNIT is, and there are three of them:
32
32
  *
33
33
  * - **`directory`**: one service per immediate subdirectory, identified by its `service.md`.
34
+ * - **`folder`**: one service, named on the LINK, whose contracts are every contract document
35
+ * found under `dirPath` — optionally including its subfolders.
34
36
  * - **`files`**: one service, named on the LINK, whose contracts are the linked file paths.
35
- * There is no directory convention to read identity from, which is exactly why the link
36
- * carries it (refused at the write boundary otherwise).
37
37
  *
38
- * Both modes anchor their staleness probe on ONE directory (`dirPath`), so a `files` source
39
- * with a dozen linked files still costs a single commit read per freshness check.
38
+ * Neither single-service mode has a directory convention to read identity from, which is
39
+ * exactly why the link carries it (refused at the write boundary otherwise). What separates
40
+ * them is WHEN the file set is decided: `files` pins the paths at link time, so a contract
41
+ * added upstream stays invisible until somebody edits the link, while `folder` re-discovers
42
+ * the set on every sync — which is why a spec directory that grows wants the folder shape.
43
+ *
44
+ * All three anchor their staleness probe on ONE directory (`dirPath`), so a `files` source with
45
+ * a dozen linked files, and a `folder` source with a whole subtree, each still cost a single
46
+ * commit read per freshness check.
40
47
  */
41
48
  export declare class FoundationalServiceSourceService {
42
49
  private readonly deps;
@@ -66,15 +73,36 @@ export declare class FoundationalServiceSourceService {
66
73
  */
67
74
  refreshStale(staleAfterMs: number, limit: number): Promise<number>;
68
75
  private runSync;
76
+ /**
77
+ * `folder` mode: ONE service, named on the link, whose contracts are every contract document
78
+ * under the linked folder (and its subfolders when the link says so).
79
+ */
80
+ private reconcileFolder;
81
+ /** Read the folder root's optional `service.md`, or null when there is none / it is unreadable. */
82
+ private readFolderOverview;
69
83
  /** `directory` mode: one service per immediate subdirectory carrying a `service.md`. */
70
84
  private reconcileDirectories;
71
85
  /** `files` mode: ONE service, named on the link, whose contracts are the linked paths. */
72
86
  private reconcileFiles;
87
+ /**
88
+ * The identity a single-service source names, or a refusal.
89
+ *
90
+ * Guaranteed by the link-time `v.check`, but a stored row outlives the schema that wrote it —
91
+ * so this is a real guard, not a type-narrowing convenience. It returns BOTH proven fields
92
+ * rather than just the id, so a caller narrows by using the result instead of re-asserting
93
+ * `serviceName as string` at each use — a cast that would survive the guard being weakened.
94
+ */
95
+ private requireNamedService;
73
96
  /**
74
97
  * Read the given repo paths and keep the ones that ARE contract documents. A file whose
75
98
  * format is unrecognised is skipped rather than stored as an opaque blob: the format is what
76
99
  * tells a downstream agent how to read it, and a "contract" nobody can interpret is worse in
77
100
  * an agent's context than an absent one.
101
+ *
102
+ * A path whose EXTENSION could never yield a format is dropped without a read and without a
103
+ * count — it is a README beside the specs, not a contract that failed. Everything else that
104
+ * fails is COUNTED on the report, because a link that produced fewer contracts than its
105
+ * author expected has no other explanation available to them.
78
106
  */
79
107
  private readContracts;
80
108
  private writeService;
@@ -1 +1 @@
1
- {"version":3,"file":"FoundationalServiceSourceService.d.ts","sourceRoot":"","sources":["../../src/foundationalServices/FoundationalServiceSourceService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EACnC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAEV,qBAAqB,EACrB,KAAK,EAEL,6BAA6B,EAE7B,mCAAmC,EACnC,YAAY,EACZ,WAAW,EACX,MAAM,EAEP,MAAM,qBAAqB,CAAA;AAyB5B;;;;;GAKG;AACH,MAAM,MAAM,iCAAiC,GAAG,CAC9C,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAE3B,MAAM,WAAW,4CAA4C;IAC3D,mCAAmC,EAAE,mCAAmC,CAAA;IACxE,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,YAAY,EAAE,YAAY,CAAA;IAC1B,qBAAqB,EAAE,iCAAiC,CAAA;IACxD,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,gCAAgC;IAG/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAE5B,YAA6B,IAAI,EAAE,4CAA4C,EAE9E;IAED,2DAA2D;IACrD,IAAI,CACR,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAGtC;IAED,wFAAwF;IAClF,IAAI,CACR,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CA4BpC;IAED,+DAA+D;IACzD,MAAM,CACV,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAgBf;IAED,yFAAyF;IACnF,MAAM,CACV,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,+BAA+B,CAAC,CAI1C;IAED,kGAAkG;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQvE;IAED,uFAAuF;IACjF,IAAI,CACR,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,6BAA6B,CAAC,CAExC;IAED;;;;;;;;;OASG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBvE;YAIa,OAAO;IA+CrB,wFAAwF;YAC1E,oBAAoB;IA+ElC,0FAA0F;YAC5E,cAAc;IAmD5B;;;;;OAKG;YACW,aAAa;YA4Cb,YAAY;IAsC1B,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,QAAQ;YAcF,OAAO;YAkBP,mBAAmB;CAUlC"}
1
+ {"version":3,"file":"FoundationalServiceSourceService.d.ts","sourceRoot":"","sources":["../../src/foundationalServices/FoundationalServiceSourceService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EACnC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAEV,qBAAqB,EACrB,KAAK,EAEL,6BAA6B,EAE7B,mCAAmC,EACnC,YAAY,EACZ,WAAW,EACX,MAAM,EAEP,MAAM,qBAAqB,CAAA;AAqD5B;;;;;GAKG;AACH,MAAM,MAAM,iCAAiC,GAAG,CAC9C,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAE3B,MAAM,WAAW,4CAA4C;IAC3D,mCAAmC,EAAE,mCAAmC,CAAA;IACxE,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,YAAY,EAAE,YAAY,CAAA;IAC1B,qBAAqB,EAAE,iCAAiC,CAAA;IACxD,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,gCAAgC;IAG/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAE5B,YAA6B,IAAI,EAAE,4CAA4C,EAE9E;IAED,2DAA2D;IACrD,IAAI,CACR,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAGtC;IAED,wFAAwF;IAClF,IAAI,CACR,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CAiCpC;IAED,+DAA+D;IACzD,MAAM,CACV,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAgBf;IAED,yFAAyF;IACnF,MAAM,CACV,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,+BAA+B,CAAC,CAI1C;IAED,kGAAkG;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQvE;IAED,uFAAuF;IACjF,IAAI,CACR,SAAS,EAAE,4BAA4B,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,6BAA6B,CAAC,CAExC;IAED;;;;;;;;;OASG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBvE;YAIa,OAAO;IA8DrB;;;OAGG;YACW,eAAe;IA4E7B,mGAAmG;YACrF,kBAAkB;IAWhC,wFAAwF;YAC1E,oBAAoB;IAkFlC,0FAA0F;YAC5E,cAAc;IA8C5B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;;;;;;;OAUG;YACW,aAAa;YAgEb,YAAY;IAsC1B,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,QAAQ;YAcF,OAAO;YAkBP,mBAAmB;CAUlC"}