@bradygaster/squad-sdk 0.9.0 → 0.9.2-insider.1

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 (222) hide show
  1. package/README.md +44 -0
  2. package/dist/agents/history-shadow.d.ts +7 -5
  3. package/dist/agents/history-shadow.d.ts.map +1 -1
  4. package/dist/agents/history-shadow.js +39 -48
  5. package/dist/agents/history-shadow.js.map +1 -1
  6. package/dist/agents/index.d.ts +12 -1
  7. package/dist/agents/index.d.ts.map +1 -1
  8. package/dist/agents/index.js +62 -9
  9. package/dist/agents/index.js.map +1 -1
  10. package/dist/agents/lifecycle.d.ts +4 -0
  11. package/dist/agents/lifecycle.d.ts.map +1 -1
  12. package/dist/agents/lifecycle.js +6 -7
  13. package/dist/agents/lifecycle.js.map +1 -1
  14. package/dist/agents/onboarding.d.ts +4 -2
  15. package/dist/agents/onboarding.d.ts.map +1 -1
  16. package/dist/agents/onboarding.js +26 -16
  17. package/dist/agents/onboarding.js.map +1 -1
  18. package/dist/agents/personal.d.ts +2 -1
  19. package/dist/agents/personal.d.ts.map +1 -1
  20. package/dist/agents/personal.js +11 -12
  21. package/dist/agents/personal.js.map +1 -1
  22. package/dist/build/bundle.d.ts.map +1 -1
  23. package/dist/build/bundle.js +6 -6
  24. package/dist/build/bundle.js.map +1 -1
  25. package/dist/build/release.d.ts.map +1 -1
  26. package/dist/build/release.js +7 -5
  27. package/dist/build/release.js.map +1 -1
  28. package/dist/casting/index.d.ts.map +1 -1
  29. package/dist/casting/index.js +4 -3
  30. package/dist/casting/index.js.map +1 -1
  31. package/dist/config/agent-source.d.ts +5 -1
  32. package/dist/config/agent-source.d.ts.map +1 -1
  33. package/dist/config/agent-source.js +85 -41
  34. package/dist/config/agent-source.js.map +1 -1
  35. package/dist/config/init.d.ts +4 -3
  36. package/dist/config/init.d.ts.map +1 -1
  37. package/dist/config/init.js +84 -63
  38. package/dist/config/init.js.map +1 -1
  39. package/dist/config/legacy-fallback.d.ts +3 -2
  40. package/dist/config/legacy-fallback.d.ts.map +1 -1
  41. package/dist/config/legacy-fallback.js +16 -14
  42. package/dist/config/legacy-fallback.js.map +1 -1
  43. package/dist/config/models.d.ts +9 -6
  44. package/dist/config/models.d.ts.map +1 -1
  45. package/dist/config/models.js +35 -25
  46. package/dist/config/models.js.map +1 -1
  47. package/dist/index.d.ts +5 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +14 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/marketplace/packaging.d.ts.map +1 -1
  52. package/dist/marketplace/packaging.js +18 -16
  53. package/dist/marketplace/packaging.js.map +1 -1
  54. package/dist/multi-squad.d.ts.map +1 -1
  55. package/dist/multi-squad.js +10 -9
  56. package/dist/multi-squad.js.map +1 -1
  57. package/dist/platform/comms-file-log.d.ts.map +1 -1
  58. package/dist/platform/comms-file-log.js +7 -6
  59. package/dist/platform/comms-file-log.js.map +1 -1
  60. package/dist/platform/comms.d.ts.map +1 -1
  61. package/dist/platform/comms.js +6 -5
  62. package/dist/platform/comms.js.map +1 -1
  63. package/dist/platform/index.d.ts.map +1 -1
  64. package/dist/platform/index.js +4 -3
  65. package/dist/platform/index.js.map +1 -1
  66. package/dist/ralph/capabilities.d.ts +30 -1
  67. package/dist/ralph/capabilities.d.ts.map +1 -1
  68. package/dist/ralph/capabilities.js +51 -6
  69. package/dist/ralph/capabilities.js.map +1 -1
  70. package/dist/ralph/index.d.ts +1 -1
  71. package/dist/ralph/index.d.ts.map +1 -1
  72. package/dist/ralph/index.js +4 -3
  73. package/dist/ralph/index.js.map +1 -1
  74. package/dist/ralph/rate-limiting.d.ts.map +1 -1
  75. package/dist/ralph/rate-limiting.js +4 -4
  76. package/dist/ralph/rate-limiting.js.map +1 -1
  77. package/dist/remote/bridge.d.ts.map +1 -1
  78. package/dist/remote/bridge.js +2 -2
  79. package/dist/remote/bridge.js.map +1 -1
  80. package/dist/resolution.d.ts +9 -0
  81. package/dist/resolution.d.ts.map +1 -1
  82. package/dist/resolution.js +39 -16
  83. package/dist/resolution.js.map +1 -1
  84. package/dist/roles/catalog.d.ts +1 -1
  85. package/dist/runtime/config.d.ts.map +1 -1
  86. package/dist/runtime/config.js +8 -7
  87. package/dist/runtime/config.js.map +1 -1
  88. package/dist/runtime/cross-squad.d.ts.map +1 -1
  89. package/dist/runtime/cross-squad.js +8 -7
  90. package/dist/runtime/cross-squad.js.map +1 -1
  91. package/dist/runtime/scheduler.d.ts.map +1 -1
  92. package/dist/runtime/scheduler.js +8 -8
  93. package/dist/runtime/scheduler.js.map +1 -1
  94. package/dist/runtime/squad-observer.d.ts.map +1 -1
  95. package/dist/runtime/squad-observer.js +7 -4
  96. package/dist/runtime/squad-observer.js.map +1 -1
  97. package/dist/sharing/consult.d.ts +1 -1
  98. package/dist/sharing/consult.d.ts.map +1 -1
  99. package/dist/sharing/consult.js +66 -64
  100. package/dist/sharing/consult.js.map +1 -1
  101. package/dist/sharing/export.d.ts.map +1 -1
  102. package/dist/sharing/export.js +16 -16
  103. package/dist/sharing/export.js.map +1 -1
  104. package/dist/sharing/import.d.ts.map +1 -1
  105. package/dist/sharing/import.js +13 -12
  106. package/dist/sharing/import.js.map +1 -1
  107. package/dist/skills/skill-loader.d.ts.map +1 -1
  108. package/dist/skills/skill-loader.js +10 -9
  109. package/dist/skills/skill-loader.js.map +1 -1
  110. package/dist/skills/skill-script-loader.d.ts.map +1 -1
  111. package/dist/skills/skill-script-loader.js +6 -4
  112. package/dist/skills/skill-script-loader.js.map +1 -1
  113. package/dist/skills/skill-source.d.ts +3 -1
  114. package/dist/skills/skill-source.d.ts.map +1 -1
  115. package/dist/skills/skill-source.js +18 -16
  116. package/dist/skills/skill-source.js.map +1 -1
  117. package/dist/state/collection-map.d.ts +43 -0
  118. package/dist/state/collection-map.d.ts.map +1 -0
  119. package/dist/state/collection-map.js +9 -0
  120. package/dist/state/collection-map.js.map +1 -0
  121. package/dist/state/collections.d.ts +102 -0
  122. package/dist/state/collections.d.ts.map +1 -0
  123. package/dist/state/collections.js +317 -0
  124. package/dist/state/collections.js.map +1 -0
  125. package/dist/state/domain-types.d.ts +122 -0
  126. package/dist/state/domain-types.d.ts.map +1 -0
  127. package/dist/state/domain-types.js +54 -0
  128. package/dist/state/domain-types.js.map +1 -0
  129. package/dist/state/handles.d.ts +16 -0
  130. package/dist/state/handles.d.ts.map +1 -0
  131. package/dist/state/handles.js +161 -0
  132. package/dist/state/handles.js.map +1 -0
  133. package/dist/state/index.d.ts +17 -0
  134. package/dist/state/index.d.ts.map +1 -0
  135. package/dist/state/index.js +15 -0
  136. package/dist/state/index.js.map +1 -0
  137. package/dist/state/io/charter-io.d.ts +28 -0
  138. package/dist/state/io/charter-io.d.ts.map +1 -0
  139. package/dist/state/io/charter-io.js +94 -0
  140. package/dist/state/io/charter-io.js.map +1 -0
  141. package/dist/state/io/decisions-io.d.ts +42 -0
  142. package/dist/state/io/decisions-io.d.ts.map +1 -0
  143. package/dist/state/io/decisions-io.js +66 -0
  144. package/dist/state/io/decisions-io.js.map +1 -0
  145. package/dist/state/io/history-io.d.ts +37 -0
  146. package/dist/state/io/history-io.d.ts.map +1 -0
  147. package/dist/state/io/history-io.js +102 -0
  148. package/dist/state/io/history-io.js.map +1 -0
  149. package/dist/state/io/index.d.ts +19 -0
  150. package/dist/state/io/index.d.ts.map +1 -0
  151. package/dist/state/io/index.js +19 -0
  152. package/dist/state/io/index.js.map +1 -0
  153. package/dist/state/io/routing-io.d.ts +37 -0
  154. package/dist/state/io/routing-io.d.ts.map +1 -0
  155. package/dist/state/io/routing-io.js +99 -0
  156. package/dist/state/io/routing-io.js.map +1 -0
  157. package/dist/state/io/team-io.d.ts +46 -0
  158. package/dist/state/io/team-io.d.ts.map +1 -0
  159. package/dist/state/io/team-io.js +82 -0
  160. package/dist/state/io/team-io.js.map +1 -0
  161. package/dist/state/schema.d.ts +24 -0
  162. package/dist/state/schema.d.ts.map +1 -0
  163. package/dist/state/schema.js +41 -0
  164. package/dist/state/schema.js.map +1 -0
  165. package/dist/state/squad-state.d.ts +42 -0
  166. package/dist/state/squad-state.d.ts.map +1 -0
  167. package/dist/state/squad-state.js +68 -0
  168. package/dist/state/squad-state.js.map +1 -0
  169. package/dist/storage/fs-storage-provider.d.ts +60 -0
  170. package/dist/storage/fs-storage-provider.d.ts.map +1 -0
  171. package/dist/storage/fs-storage-provider.js +377 -0
  172. package/dist/storage/fs-storage-provider.js.map +1 -0
  173. package/dist/storage/in-memory-storage-provider.d.ts +46 -0
  174. package/dist/storage/in-memory-storage-provider.d.ts.map +1 -0
  175. package/dist/storage/in-memory-storage-provider.js +264 -0
  176. package/dist/storage/in-memory-storage-provider.js.map +1 -0
  177. package/dist/storage/index.d.ts +6 -0
  178. package/dist/storage/index.d.ts.map +1 -0
  179. package/dist/storage/index.js +5 -0
  180. package/dist/storage/index.js.map +1 -0
  181. package/dist/storage/sqlite-storage-provider.d.ts +95 -0
  182. package/dist/storage/sqlite-storage-provider.d.ts.map +1 -0
  183. package/dist/storage/sqlite-storage-provider.js +383 -0
  184. package/dist/storage/sqlite-storage-provider.js.map +1 -0
  185. package/dist/storage/storage-error.d.ts +28 -0
  186. package/dist/storage/storage-error.d.ts.map +1 -0
  187. package/dist/storage/storage-error.js +35 -0
  188. package/dist/storage/storage-error.js.map +1 -0
  189. package/dist/storage/storage-provider.d.ts +161 -0
  190. package/dist/storage/storage-provider.d.ts.map +1 -0
  191. package/dist/storage/storage-provider.js +18 -0
  192. package/dist/storage/storage-provider.js.map +1 -0
  193. package/dist/streams/resolver.d.ts.map +1 -1
  194. package/dist/streams/resolver.js +6 -5
  195. package/dist/streams/resolver.js.map +1 -1
  196. package/dist/tools/index.d.ts +5 -1
  197. package/dist/tools/index.d.ts.map +1 -1
  198. package/dist/tools/index.js +54 -15
  199. package/dist/tools/index.js.map +1 -1
  200. package/dist/upstream/resolver.d.ts +3 -2
  201. package/dist/upstream/resolver.d.ts.map +1 -1
  202. package/dist/upstream/resolver.js +33 -32
  203. package/dist/upstream/resolver.js.map +1 -1
  204. package/package.json +33 -1
  205. package/templates/scribe-charter.md +4 -0
  206. package/templates/skills/cross-machine-coordination/SKILL.md +434 -0
  207. package/templates/skills/error-recovery/SKILL.md +99 -0
  208. package/templates/skills/iterative-retrieval/SKILL.md +165 -0
  209. package/templates/skills/notification-routing/SKILL.md +105 -0
  210. package/templates/skills/pr-screenshots/SKILL.md +149 -0
  211. package/templates/skills/ralph-two-pass-scan/SKILL.md +35 -0
  212. package/templates/skills/reflect/SKILL.md +229 -0
  213. package/templates/skills/release-process/SKILL.md +84 -376
  214. package/templates/skills/retro-enforcement/SKILL.md +148 -0
  215. package/templates/skills/tiered-memory/SKILL.md +234 -0
  216. package/templates/skills/windows-compatibility/SKILL.md +24 -0
  217. package/templates/{squad.agent.md → squad.agent.md.template} +57 -28
  218. package/templates/workflows/squad-ci.yml +1 -1
  219. package/templates/workflows/squad-heartbeat.yml +0 -4
  220. package/templates/workflows/squad-insider-release.yml +1 -1
  221. package/templates/workflows/squad-preview.yml +1 -1
  222. package/templates/workflows/squad-release.yml +1 -1
@@ -0,0 +1,161 @@
1
+ /**
2
+ * State Module — Agent Handle Implementation
3
+ *
4
+ * Concrete implementation of the `AgentHandle` interface from collection-map.ts.
5
+ * Wires up to StorageProvider + IO layer for reading/writing agent state.
6
+ *
7
+ * @module state/handles
8
+ */
9
+ import { parseHistory, serializeHistoryAppend } from './io/history-io.js';
10
+ import { parseTeam, serializeTeam } from './io/team-io.js';
11
+ import { NotFoundError, ParseError } from './domain-types.js';
12
+ import { resolveCollectionPath } from './schema.js';
13
+ // ── History Section Mapping ────────────────────────────────────────────────
14
+ const SECTION_KEYS = [
15
+ { section: 'Context', key: 'context' },
16
+ { section: 'Learnings', key: 'learnings' },
17
+ { section: 'Decisions', key: 'decisions' },
18
+ { section: 'Patterns', key: 'patterns' },
19
+ { section: 'Issues', key: 'issues' },
20
+ { section: 'References', key: 'references' },
21
+ ];
22
+ /**
23
+ * Convert a ParsedHistory into an array of HistoryEntry objects.
24
+ *
25
+ * Splits each section's content by `### date/title` sub-headers into
26
+ * individual entries with extracted timestamps.
27
+ */
28
+ function parsedHistoryToEntries(parsed, filterSection) {
29
+ const entries = [];
30
+ const sections = filterSection
31
+ ? SECTION_KEYS.filter((s) => s.section === filterSection)
32
+ : SECTION_KEYS;
33
+ for (const { section, key } of sections) {
34
+ const content = parsed[key];
35
+ if (!content)
36
+ continue;
37
+ const subHeaderRegex = /^###\s+(.+)$/gm;
38
+ const subHeaders = [];
39
+ let m;
40
+ while ((m = subHeaderRegex.exec(content)) !== null) {
41
+ subHeaders.push({
42
+ title: m[1],
43
+ start: m.index,
44
+ contentStart: m.index + m[0].length,
45
+ });
46
+ }
47
+ if (subHeaders.length === 0) {
48
+ entries.push({ section, content: content.trim(), timestamp: '' });
49
+ }
50
+ else {
51
+ for (let i = 0; i < subHeaders.length; i++) {
52
+ const hdr = subHeaders[i];
53
+ const nextHdr = subHeaders[i + 1];
54
+ const start = hdr.contentStart;
55
+ const end = nextHdr ? nextHdr.start : content.length;
56
+ const entryContent = content.substring(start, end).trim();
57
+ const dateMatch = hdr.title.match(/(\d{4}-\d{2}-\d{2})/);
58
+ const timestamp = dateMatch?.[1] ?? '';
59
+ entries.push({ section, content: entryContent, timestamp });
60
+ }
61
+ }
62
+ }
63
+ return entries;
64
+ }
65
+ // ── Factory ────────────────────────────────────────────────────────────────
66
+ /**
67
+ * Create a concrete AgentHandle bound to a specific agent, storage provider,
68
+ * and root directory.
69
+ */
70
+ export function createAgentHandle(name, storage, rootDir) {
71
+ const agentDir = `${rootDir}/.squad/agents/${name}`;
72
+ const charterPath = `${agentDir}/charter.md`;
73
+ const historyPath = `${agentDir}/history.md`;
74
+ const teamPath = `${rootDir}/${resolveCollectionPath('team')}`;
75
+ const handle = {
76
+ name,
77
+ async charter() {
78
+ const content = await storage.read(charterPath);
79
+ if (content === undefined) {
80
+ throw new NotFoundError('agents', name);
81
+ }
82
+ return content;
83
+ },
84
+ history(section) {
85
+ return (async () => {
86
+ const content = await storage.read(historyPath);
87
+ if (content === undefined) {
88
+ return [];
89
+ }
90
+ let parsed;
91
+ try {
92
+ parsed = parseHistory(content);
93
+ }
94
+ catch (err) {
95
+ throw new ParseError('history', err instanceof Error ? err.message : String(err), { cause: err });
96
+ }
97
+ return parsedHistoryToEntries(parsed, section);
98
+ })();
99
+ },
100
+ async appendHistory(section, entry) {
101
+ const content = await storage.read(historyPath);
102
+ const fragment = serializeHistoryAppend(section, entry.content, entry.timestamp || undefined);
103
+ if (content === undefined) {
104
+ const newContent = `# ${name}\n\n## ${section}\n\n${fragment}`;
105
+ await storage.write(historyPath, newContent);
106
+ return;
107
+ }
108
+ const sectionRegex = new RegExp(`^## ${section}\\s*$`, 'm');
109
+ const sectionMatch = sectionRegex.exec(content);
110
+ if (sectionMatch) {
111
+ // Find next ## header after this section to determine insertion point
112
+ const afterHeader = sectionMatch.index + sectionMatch[0].length;
113
+ const rest = content.substring(afterHeader);
114
+ const nextSectionMatch = /^## /m.exec(rest.length > 1 ? rest.substring(1) : '');
115
+ const insertPos = nextSectionMatch
116
+ ? afterHeader + 1 + nextSectionMatch.index
117
+ : content.length;
118
+ const before = content.substring(0, insertPos).trimEnd();
119
+ const after = content.substring(insertPos);
120
+ const newContent = before + '\n\n' + fragment + (after.trim() ? '\n' + after.trimStart() : '');
121
+ await storage.write(historyPath, newContent.trimEnd() + '\n');
122
+ }
123
+ else {
124
+ // Section doesn't exist yet — append at end
125
+ const newContent = content.trimEnd() + `\n\n## ${section}\n\n${fragment}`;
126
+ await storage.write(historyPath, newContent.trimEnd() + '\n');
127
+ }
128
+ },
129
+ async update(updates) {
130
+ const teamContent = await storage.read(teamPath);
131
+ if (teamContent === undefined) {
132
+ throw new NotFoundError('team');
133
+ }
134
+ let agents;
135
+ try {
136
+ agents = parseTeam(teamContent).agents;
137
+ }
138
+ catch (err) {
139
+ throw new ParseError('team', err instanceof Error ? err.message : String(err), { cause: err });
140
+ }
141
+ const lowerName = name.toLowerCase();
142
+ const idx = agents.findIndex((a) => a.name.toLowerCase() === lowerName);
143
+ if (idx === -1) {
144
+ throw new NotFoundError('agents', name);
145
+ }
146
+ const current = agents[idx];
147
+ const updated = {
148
+ name: updates.name ?? current.name,
149
+ role: updates.role ?? current.role,
150
+ skills: updates.skills ? [...updates.skills] : current.skills,
151
+ model: updates.modelPreference ?? current.model,
152
+ status: updates.status !== undefined ? String(updates.status) : current.status,
153
+ };
154
+ agents[idx] = updated;
155
+ const serialized = serializeTeam(agents);
156
+ await storage.write(teamPath, serialized);
157
+ },
158
+ };
159
+ return handle;
160
+ }
161
+ //# sourceMappingURL=handles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handles.js","sourceRoot":"","sources":["../../src/state/handles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * State Module — Barrel Export
3
+ *
4
+ * Phase 2 of StorageProvider PRD (#481).
5
+ * Typed facade layer over `.squad/` file-based state.
6
+ */
7
+ export type { Agent, Decision, HistoryEntry, HistorySection, LogEntry, ModelTier, RoutingConfig, RoutingConfigRule, RoutingRule, SkillDefinition, SquadStateConfig, StateErrorKind, StorageProvider, TeamConfig, TeamMember, Template, WorkType, } from './domain-types.js';
8
+ export type { AgentStatus } from './domain-types.js';
9
+ export { StateError, NotFoundError, ParseError, WriteConflictError, ProviderError, } from './domain-types.js';
10
+ export type { CollectionEntityMap, CollectionName, AgentHandle, } from './collection-map.js';
11
+ export type { CollectionPathResolver } from './schema.js';
12
+ export { COLLECTION_PATHS, resolveCollectionPath } from './schema.js';
13
+ export { createAgentHandle } from './handles.js';
14
+ export { AgentsCollection, ConfigCollection, DecisionsCollection, LogCollection, RoutingCollection, SkillsCollection, TeamCollection, TemplatesCollection, } from './collections.js';
15
+ export type { ConfigFileData } from './collections.js';
16
+ export { SquadState } from './squad-state.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * State Module — Barrel Export
3
+ *
4
+ * Phase 2 of StorageProvider PRD (#481).
5
+ * Typed facade layer over `.squad/` file-based state.
6
+ */
7
+ export { StateError, NotFoundError, ParseError, WriteConflictError, ProviderError, } from './domain-types.js';
8
+ export { COLLECTION_PATHS, resolveCollectionPath } from './schema.js';
9
+ // Agent handle factory
10
+ export { createAgentHandle } from './handles.js';
11
+ // Collection facades
12
+ export { AgentsCollection, ConfigCollection, DecisionsCollection, LogCollection, RoutingCollection, SkillsCollection, TeamCollection, TemplatesCollection, } from './collections.js';
13
+ // SquadState facade
14
+ export { SquadState } from './squad-state.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH,OAAO,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEtE,uBAAuB;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAI1B,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Charter Markdown I/O — parse and serialize charter.md files.
3
+ *
4
+ * Wraps the existing `parseCharterMarkdown()` from charter-compiler.ts
5
+ * and adds serialization for round-trip support.
6
+ *
7
+ * @module state/io/charter-io
8
+ */
9
+ import { type ParsedCharter } from '../../agents/charter-compiler.js';
10
+ export type { ParsedCharter };
11
+ /**
12
+ * Parse charter markdown into a typed structure.
13
+ * Delegates to the existing `parseCharterMarkdown()`.
14
+ */
15
+ export declare function parseCharter(markdown: string): ParsedCharter;
16
+ /**
17
+ * Serialize a ParsedCharter back to markdown.
18
+ *
19
+ * Produces the canonical charter.md format:
20
+ * ```
21
+ * # {Name} — {Role}
22
+ * > {style quote}
23
+ * ## Identity
24
+ * ...
25
+ * ```
26
+ */
27
+ export declare function serializeCharter(charter: ParsedCharter): string;
28
+ //# sourceMappingURL=charter-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charter-io.d.ts","sourceRoot":"","sources":["../../../src/state/io/charter-io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAE5F,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAE5D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAyE/D"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Charter Markdown I/O — parse and serialize charter.md files.
3
+ *
4
+ * Wraps the existing `parseCharterMarkdown()` from charter-compiler.ts
5
+ * and adds serialization for round-trip support.
6
+ *
7
+ * @module state/io/charter-io
8
+ */
9
+ import { parseCharterMarkdown } from '../../agents/charter-compiler.js';
10
+ /**
11
+ * Parse charter markdown into a typed structure.
12
+ * Delegates to the existing `parseCharterMarkdown()`.
13
+ */
14
+ export function parseCharter(markdown) {
15
+ return parseCharterMarkdown(markdown);
16
+ }
17
+ /**
18
+ * Serialize a ParsedCharter back to markdown.
19
+ *
20
+ * Produces the canonical charter.md format:
21
+ * ```
22
+ * # {Name} — {Role}
23
+ * > {style quote}
24
+ * ## Identity
25
+ * ...
26
+ * ```
27
+ */
28
+ export function serializeCharter(charter) {
29
+ const lines = [];
30
+ // Title line
31
+ const name = charter.identity.name ?? 'Agent';
32
+ const role = charter.identity.role ?? 'Developer';
33
+ lines.push(`# ${name} — ${role}`);
34
+ lines.push('');
35
+ // Style quote
36
+ if (charter.identity.style) {
37
+ lines.push(`> ${charter.identity.style}`);
38
+ lines.push('');
39
+ }
40
+ // Identity section
41
+ lines.push('## Identity');
42
+ lines.push('');
43
+ if (charter.identity.name) {
44
+ lines.push(`- **Name:** ${charter.identity.name}`);
45
+ }
46
+ if (charter.identity.role) {
47
+ lines.push(`- **Role:** ${charter.identity.role}`);
48
+ }
49
+ if (charter.identity.expertise && charter.identity.expertise.length > 0) {
50
+ lines.push(`- **Expertise:** ${charter.identity.expertise.join(', ')}`);
51
+ }
52
+ if (charter.identity.style) {
53
+ lines.push(`- **Style:** ${charter.identity.style}`);
54
+ }
55
+ lines.push('');
56
+ // What I Own section
57
+ if (charter.ownership !== undefined) {
58
+ lines.push('## What I Own');
59
+ lines.push('');
60
+ lines.push(charter.ownership);
61
+ lines.push('');
62
+ }
63
+ // Boundaries section
64
+ if (charter.boundaries !== undefined) {
65
+ lines.push('## Boundaries');
66
+ lines.push('');
67
+ lines.push(charter.boundaries);
68
+ lines.push('');
69
+ }
70
+ // Model section
71
+ if (charter.modelPreference || charter.modelRationale || charter.modelFallback) {
72
+ lines.push('## Model');
73
+ lines.push('');
74
+ if (charter.modelPreference) {
75
+ lines.push(`**Preferred:** ${charter.modelPreference}`);
76
+ }
77
+ if (charter.modelRationale) {
78
+ lines.push(`**Rationale:** ${charter.modelRationale}`);
79
+ }
80
+ if (charter.modelFallback) {
81
+ lines.push(`**Fallback:** ${charter.modelFallback}`);
82
+ }
83
+ lines.push('');
84
+ }
85
+ // Collaboration section
86
+ if (charter.collaboration !== undefined) {
87
+ lines.push('## Collaboration');
88
+ lines.push('');
89
+ lines.push(charter.collaboration);
90
+ lines.push('');
91
+ }
92
+ return lines.join('\n').trimEnd() + '\n';
93
+ }
94
+ //# sourceMappingURL=charter-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charter-io.js","sourceRoot":"","sources":["../../../src/state/io/charter-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Decisions Markdown I/O — parse and serialize decisions.md files.
3
+ *
4
+ * Wraps the existing `parseDecisionsMarkdown()` from markdown-migration.ts
5
+ * and adds serialization for round-trip support.
6
+ *
7
+ * @module state/io/decisions-io
8
+ */
9
+ import { type ParsedDecision } from '../../config/markdown-migration.js';
10
+ export type { ParsedDecision };
11
+ /**
12
+ * Parse decisions markdown into typed decision entries.
13
+ * Delegates to the existing `parseDecisionsMarkdown()`.
14
+ */
15
+ export declare function parseDecisions(markdown: string): ParsedDecision[];
16
+ /**
17
+ * Serialize a single decision entry to markdown.
18
+ *
19
+ * Format:
20
+ * ```
21
+ * ### YYYY-MM-DD: Title
22
+ * **By:** author
23
+ * body content
24
+ * ```
25
+ */
26
+ export declare function serializeDecision(decision: ParsedDecision): string;
27
+ /**
28
+ * Serialize an array of decisions to a full decisions.md file.
29
+ *
30
+ * Produces:
31
+ * ```
32
+ * # Decisions
33
+ *
34
+ * ### 2026-01-15: First Decision
35
+ * ...
36
+ *
37
+ * ### 2026-02-01: Second Decision
38
+ * ...
39
+ * ```
40
+ */
41
+ export declare function serializeDecisions(decisions: ParsedDecision[]): string;
42
+ //# sourceMappingURL=decisions-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions-io.d.ts","sourceRoot":"","sources":["../../../src/state/io/decisions-io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEjG,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAGjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAmBlE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,CAMtE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Decisions Markdown I/O — parse and serialize decisions.md files.
3
+ *
4
+ * Wraps the existing `parseDecisionsMarkdown()` from markdown-migration.ts
5
+ * and adds serialization for round-trip support.
6
+ *
7
+ * @module state/io/decisions-io
8
+ */
9
+ import { parseDecisionsMarkdown } from '../../config/markdown-migration.js';
10
+ /**
11
+ * Parse decisions markdown into typed decision entries.
12
+ * Delegates to the existing `parseDecisionsMarkdown()`.
13
+ */
14
+ export function parseDecisions(markdown) {
15
+ const { decisions } = parseDecisionsMarkdown(markdown);
16
+ return decisions;
17
+ }
18
+ /**
19
+ * Serialize a single decision entry to markdown.
20
+ *
21
+ * Format:
22
+ * ```
23
+ * ### YYYY-MM-DD: Title
24
+ * **By:** author
25
+ * body content
26
+ * ```
27
+ */
28
+ export function serializeDecision(decision) {
29
+ const level = decision.headingLevel ?? 3;
30
+ const hashes = '#'.repeat(level);
31
+ // Heading with optional date prefix
32
+ const datePrefix = decision.date ? `${decision.date}: ` : '';
33
+ const lines = [`${hashes} ${datePrefix}${decision.title}`];
34
+ // Body — author line is already embedded in body from the parser,
35
+ // but if body doesn't contain **By:** and author is set, prepend it
36
+ const bodyHasAuthor = /\*\*By:\*\*/i.test(decision.body);
37
+ if (decision.author && !bodyHasAuthor) {
38
+ lines.push(`**By:** ${decision.author}`);
39
+ }
40
+ if (decision.body) {
41
+ lines.push(decision.body);
42
+ }
43
+ return lines.join('\n');
44
+ }
45
+ /**
46
+ * Serialize an array of decisions to a full decisions.md file.
47
+ *
48
+ * Produces:
49
+ * ```
50
+ * # Decisions
51
+ *
52
+ * ### 2026-01-15: First Decision
53
+ * ...
54
+ *
55
+ * ### 2026-02-01: Second Decision
56
+ * ...
57
+ * ```
58
+ */
59
+ export function serializeDecisions(decisions) {
60
+ if (decisions.length === 0) {
61
+ return '# Decisions\n';
62
+ }
63
+ const sections = decisions.map((d) => serializeDecision(d));
64
+ return `# Decisions\n\n${sections.join('\n\n')}\n`;
65
+ }
66
+ //# sourceMappingURL=decisions-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions-io.js","sourceRoot":"","sources":["../../../src/state/io/decisions-io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,sBAAsB,EAAuB,MAAM,oCAAoC,CAAC;AAIjG;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjC,oCAAoC;IACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAa,CAAC,GAAG,MAAM,IAAI,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAErE,kEAAkE;IAClE,oEAAoE;IACpE,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA2B;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,kBAAkB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * History Markdown I/O — parse and serialize history.md files.
3
+ *
4
+ * Wraps the existing section-parsing logic from history-shadow.ts
5
+ * and adds serialization for round-trip support.
6
+ *
7
+ * @module state/io/history-io
8
+ */
9
+ import type { ParsedHistory, HistorySection } from '../../agents/history-shadow.js';
10
+ export type { ParsedHistory, HistorySection };
11
+ /**
12
+ * Parse history markdown into typed sections.
13
+ *
14
+ * Mirrors the section-extraction logic in `readHistory()` from
15
+ * history-shadow.ts but operates purely on a string (no filesystem).
16
+ *
17
+ * Note: the original regex uses `\Z` which is not a valid JS anchor.
18
+ * We use an explicit section-split approach to correctly handle the
19
+ * last section in the file.
20
+ */
21
+ export declare function parseHistory(markdown: string): ParsedHistory;
22
+ /**
23
+ * Serialize a ParsedHistory back to markdown.
24
+ *
25
+ * Reconstructs the history.md with `# AgentName` header and `## Section` blocks.
26
+ */
27
+ export declare function serializeHistory(history: ParsedHistory): string;
28
+ /**
29
+ * Produce a string fragment for appending a new entry to a history section.
30
+ *
31
+ * @param section - Target section name (e.g., 'Learnings')
32
+ * @param entry - Content to append (without date header)
33
+ * @param date - Optional ISO date string (defaults to today)
34
+ * @returns Formatted entry string including `### YYYY-MM-DD` sub-header
35
+ */
36
+ export declare function serializeHistoryAppend(section: HistorySection, entry: string, date?: string): string;
37
+ //# sourceMappingURL=history-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-io.d.ts","sourceRoot":"","sources":["../../../src/state/io/history-io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGpF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAY9C;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAsC5D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAyB/D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAGR"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * History Markdown I/O — parse and serialize history.md files.
3
+ *
4
+ * Wraps the existing section-parsing logic from history-shadow.ts
5
+ * and adds serialization for round-trip support.
6
+ *
7
+ * @module state/io/history-io
8
+ */
9
+ import { normalizeEol } from '../../utils/normalize-eol.js';
10
+ /** Standard sections in order of appearance. */
11
+ const SECTION_ORDER = [
12
+ { header: 'Context', key: 'context' },
13
+ { header: 'Learnings', key: 'learnings' },
14
+ { header: 'Decisions', key: 'decisions' },
15
+ { header: 'Patterns', key: 'patterns' },
16
+ { header: 'Issues', key: 'issues' },
17
+ { header: 'References', key: 'references' },
18
+ ];
19
+ /**
20
+ * Parse history markdown into typed sections.
21
+ *
22
+ * Mirrors the section-extraction logic in `readHistory()` from
23
+ * history-shadow.ts but operates purely on a string (no filesystem).
24
+ *
25
+ * Note: the original regex uses `\Z` which is not a valid JS anchor.
26
+ * We use an explicit section-split approach to correctly handle the
27
+ * last section in the file.
28
+ */
29
+ export function parseHistory(markdown) {
30
+ const content = normalizeEol(markdown);
31
+ const parsed = { fullContent: content };
32
+ if (!content || content.trim().length === 0) {
33
+ return parsed;
34
+ }
35
+ // Build a map of h2 section name → content by splitting at ## headers.
36
+ // Uses header start positions as boundaries (avoids the broken \Z anchor
37
+ // in the original readHistory regex).
38
+ const headerRegex = /^##\s+(.+?)\s*$/gm;
39
+ const headers = [];
40
+ let m;
41
+ while ((m = headerRegex.exec(content)) !== null) {
42
+ headers.push({ name: m[1], start: m.index, contentStart: m.index + m[0].length });
43
+ }
44
+ const sectionMap = new Map();
45
+ for (let i = 0; i < headers.length; i++) {
46
+ const hdr = headers[i];
47
+ const nextHdr = headers[i + 1];
48
+ const start = hdr.contentStart;
49
+ const end = nextHdr ? nextHdr.start : content.length;
50
+ const sectionContent = content.substring(start, end).trim();
51
+ if (sectionContent.length > 0) {
52
+ sectionMap.set(hdr.name, sectionContent);
53
+ }
54
+ }
55
+ for (const { header, key } of SECTION_ORDER) {
56
+ const value = sectionMap.get(header);
57
+ if (value !== undefined) {
58
+ parsed[key] = value;
59
+ }
60
+ }
61
+ return parsed;
62
+ }
63
+ /**
64
+ * Serialize a ParsedHistory back to markdown.
65
+ *
66
+ * Reconstructs the history.md with `# AgentName` header and `## Section` blocks.
67
+ */
68
+ export function serializeHistory(history) {
69
+ // If fullContent has a title line, extract it; otherwise use a generic header
70
+ const titleMatch = history.fullContent.match(/^#\s+(.+)$/m);
71
+ const lines = [];
72
+ if (titleMatch) {
73
+ lines.push(titleMatch[0]);
74
+ lines.push('');
75
+ }
76
+ for (const { header, key } of SECTION_ORDER) {
77
+ const value = history[key];
78
+ if (value !== undefined && value.length > 0) {
79
+ lines.push(`## ${header}`);
80
+ lines.push('');
81
+ lines.push(value);
82
+ lines.push('');
83
+ }
84
+ }
85
+ if (lines.length === 0) {
86
+ return '';
87
+ }
88
+ return lines.join('\n').trimEnd() + '\n';
89
+ }
90
+ /**
91
+ * Produce a string fragment for appending a new entry to a history section.
92
+ *
93
+ * @param section - Target section name (e.g., 'Learnings')
94
+ * @param entry - Content to append (without date header)
95
+ * @param date - Optional ISO date string (defaults to today)
96
+ * @returns Formatted entry string including `### YYYY-MM-DD` sub-header
97
+ */
98
+ export function serializeHistoryAppend(section, entry, date) {
99
+ const dateStr = date ?? new Date().toISOString().split('T')[0];
100
+ return `### ${dateStr}\n\n${entry}\n`;
101
+ }
102
+ //# sourceMappingURL=history-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-io.js","sourceRoot":"","sources":["../../../src/state/io/history-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * State I/O barrel — Markdown parsers and serializers for .squad/ domain files.
3
+ *
4
+ * Each module handles round-trip I/O for a single document type:
5
+ * parse(markdown) → typed object → serialize(object) → markdown.
6
+ *
7
+ * @module state/io
8
+ */
9
+ export { parseCharter, serializeCharter } from './charter-io.js';
10
+ export type { ParsedCharter } from './charter-io.js';
11
+ export { parseHistory, serializeHistory, serializeHistoryAppend } from './history-io.js';
12
+ export type { ParsedHistory, HistorySection } from './history-io.js';
13
+ export { parseDecisions, serializeDecision, serializeDecisions } from './decisions-io.js';
14
+ export type { ParsedDecision } from './decisions-io.js';
15
+ export { parseRouting, serializeRouting } from './routing-io.js';
16
+ export type { ParsedRoutingRule, ParsedRouting } from './routing-io.js';
17
+ export { parseTeam, serializeTeam } from './team-io.js';
18
+ export type { ParsedAgent, TeamMetadata, ParsedTeam } from './team-io.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/state/io/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}