@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,317 @@
1
+ /**
2
+ * State Module — Typed Collection Facades
3
+ *
4
+ * Each class provides a typed, ergonomic interface over a specific
5
+ * `.squad/` collection, backed by StorageProvider + IO layer.
6
+ *
7
+ * @module state/collections
8
+ */
9
+ import { NotFoundError, ParseError } from './domain-types.js';
10
+ import { resolveCollectionPath } from './schema.js';
11
+ import { createAgentHandle } from './handles.js';
12
+ import { parseDecisions, serializeDecision, serializeDecisions } from './io/decisions-io.js';
13
+ import { parseRouting, serializeRouting } from './io/routing-io.js';
14
+ import { parseTeam, serializeTeam } from './io/team-io.js';
15
+ import { parseSkillFile } from '../skills/skill-loader.js';
16
+ // ── AgentsCollection ───────────────────────────────────────────────────────
17
+ export class AgentsCollection {
18
+ storage;
19
+ rootDir;
20
+ constructor(storage, rootDir) {
21
+ this.storage = storage;
22
+ this.rootDir = rootDir;
23
+ }
24
+ /** Return a handle for interacting with a specific agent's state. */
25
+ get(name) {
26
+ return createAgentHandle(name, this.storage, this.rootDir);
27
+ }
28
+ /** List agent names from `.squad/agents/`. */
29
+ async list() {
30
+ const agentsDir = `${this.rootDir}/.squad/agents`;
31
+ return this.storage.list(agentsDir);
32
+ }
33
+ /** Create a new agent with charter and empty history. */
34
+ async create(name, charter) {
35
+ const agentDir = `${this.rootDir}/.squad/agents/${name}`;
36
+ await this.storage.write(`${agentDir}/charter.md`, charter);
37
+ await this.storage.write(`${agentDir}/history.md`, `# ${name}\n\n## Learnings\n\n## Context\n`);
38
+ }
39
+ /** Soft-delete an agent by removing its directory. */
40
+ async delete(name) {
41
+ const agentDir = `${this.rootDir}/.squad/agents/${name}`;
42
+ const exists = await this.storage.exists(agentDir);
43
+ if (!exists) {
44
+ throw new NotFoundError('agents', name);
45
+ }
46
+ await this.storage.deleteDir(agentDir);
47
+ }
48
+ }
49
+ // ── DecisionsCollection ────────────────────────────────────────────────────
50
+ /** Map a ParsedDecision to the domain Decision type. */
51
+ function toDomainDecision(pd) {
52
+ return {
53
+ date: pd.date ?? '',
54
+ title: pd.title,
55
+ author: pd.author ?? '',
56
+ body: pd.body,
57
+ configRelevant: pd.configRelevant,
58
+ };
59
+ }
60
+ /** Map a domain Decision to ParsedDecision for serialization. */
61
+ function toParsedDecision(d) {
62
+ return {
63
+ title: d.title,
64
+ body: d.body,
65
+ configRelevant: d.configRelevant,
66
+ date: d.date || undefined,
67
+ author: d.author || undefined,
68
+ };
69
+ }
70
+ export class DecisionsCollection {
71
+ storage;
72
+ rootDir;
73
+ constructor(storage, rootDir) {
74
+ this.storage = storage;
75
+ this.rootDir = rootDir;
76
+ }
77
+ /** Parse and return all decisions from `decisions.md`. */
78
+ async list() {
79
+ const filePath = `${this.rootDir}/${resolveCollectionPath('decisions')}`;
80
+ const content = await this.storage.read(filePath);
81
+ if (content === undefined) {
82
+ return [];
83
+ }
84
+ try {
85
+ return parseDecisions(content).map(toDomainDecision);
86
+ }
87
+ catch (err) {
88
+ throw new ParseError('decisions', err instanceof Error ? err.message : String(err), { cause: err });
89
+ }
90
+ }
91
+ /** Append a new decision. Date is auto-generated if not provided. */
92
+ async add(decision) {
93
+ const filePath = `${this.rootDir}/${resolveCollectionPath('decisions')}`;
94
+ const date = new Date().toISOString().split('T')[0];
95
+ const full = { ...decision, date };
96
+ const parsed = toParsedDecision(full);
97
+ const existing = await this.storage.read(filePath);
98
+ if (existing === undefined || existing.trim().length === 0) {
99
+ await this.storage.write(filePath, serializeDecisions([parsed]));
100
+ }
101
+ else {
102
+ const fragment = '\n\n' + serializeDecision(parsed) + '\n';
103
+ await this.storage.append(filePath, fragment);
104
+ }
105
+ }
106
+ }
107
+ // ── RoutingCollection ──────────────────────────────────────────────────────
108
+ /** Map ParsedRouting to RoutingConfig. */
109
+ function toRoutingConfig(parsed) {
110
+ return {
111
+ rules: parsed.rules.map((r) => ({
112
+ workType: r.workType,
113
+ agents: r.agents,
114
+ examples: r.examples ?? [],
115
+ })),
116
+ moduleOwnership: parsed.moduleOwnership,
117
+ principles: [],
118
+ };
119
+ }
120
+ /** Map RoutingConfig rules back to ParsedRoutingRule[]. */
121
+ function toParsedRoutingRules(config) {
122
+ return config.rules.map((r) => ({
123
+ workType: r.workType,
124
+ agents: [...r.agents],
125
+ examples: [...r.examples],
126
+ }));
127
+ }
128
+ export class RoutingCollection {
129
+ storage;
130
+ rootDir;
131
+ constructor(storage, rootDir) {
132
+ this.storage = storage;
133
+ this.rootDir = rootDir;
134
+ }
135
+ /** Parse and return the routing configuration. */
136
+ async get() {
137
+ const filePath = `${this.rootDir}/${resolveCollectionPath('routing')}`;
138
+ const content = await this.storage.read(filePath);
139
+ if (content === undefined) {
140
+ throw new NotFoundError('routing');
141
+ }
142
+ try {
143
+ return toRoutingConfig(parseRouting(content));
144
+ }
145
+ catch (err) {
146
+ throw new ParseError('routing', err instanceof Error ? err.message : String(err), { cause: err });
147
+ }
148
+ }
149
+ /** Write back a full routing configuration. */
150
+ async update(config) {
151
+ const filePath = `${this.rootDir}/${resolveCollectionPath('routing')}`;
152
+ const rules = toParsedRoutingRules(config);
153
+ await this.storage.write(filePath, serializeRouting(rules));
154
+ }
155
+ }
156
+ // ── TeamCollection ─────────────────────────────────────────────────────────
157
+ /** Map ParsedTeam to TeamConfig. */
158
+ function toTeamConfig(parsed) {
159
+ return {
160
+ projectContext: parsed.projectContext,
161
+ members: parsed.agents.map((a) => ({
162
+ name: a.name,
163
+ role: a.role,
164
+ status: a.status,
165
+ })),
166
+ };
167
+ }
168
+ /** Map TeamConfig members back to ParsedAgent[]. */
169
+ function toParsedAgents(config) {
170
+ return config.members.map((m) => ({
171
+ name: m.name,
172
+ role: m.role,
173
+ skills: [],
174
+ status: m.status,
175
+ }));
176
+ }
177
+ export class TeamCollection {
178
+ storage;
179
+ rootDir;
180
+ constructor(storage, rootDir) {
181
+ this.storage = storage;
182
+ this.rootDir = rootDir;
183
+ }
184
+ /** Parse and return the team configuration. */
185
+ async get() {
186
+ const filePath = `${this.rootDir}/${resolveCollectionPath('team')}`;
187
+ const content = await this.storage.read(filePath);
188
+ if (content === undefined) {
189
+ throw new NotFoundError('team');
190
+ }
191
+ try {
192
+ return toTeamConfig(parseTeam(content));
193
+ }
194
+ catch (err) {
195
+ throw new ParseError('team', err instanceof Error ? err.message : String(err), { cause: err });
196
+ }
197
+ }
198
+ /** Write back a full team configuration. */
199
+ async update(config) {
200
+ const filePath = `${this.rootDir}/${resolveCollectionPath('team')}`;
201
+ const agents = toParsedAgents(config);
202
+ await this.storage.write(filePath, serializeTeam(agents));
203
+ }
204
+ }
205
+ // ── SkillsCollection ──────────────────────────────────────────────────────
206
+ export class SkillsCollection {
207
+ storage;
208
+ rootDir;
209
+ constructor(storage, rootDir) {
210
+ this.storage = storage;
211
+ this.rootDir = rootDir;
212
+ }
213
+ /** List all skill IDs (directory names under .squad/skills/). */
214
+ async list() {
215
+ const skillsDir = `${this.rootDir}/.squad/skills`;
216
+ return this.storage.list(skillsDir);
217
+ }
218
+ /** Get a skill definition by ID. Returns undefined if not found or unparseable. */
219
+ async get(id) {
220
+ const skillFile = `${this.rootDir}/${resolveCollectionPath('skills', id)}/SKILL.md`;
221
+ const content = await this.storage.read(skillFile);
222
+ if (content === undefined)
223
+ return undefined;
224
+ return parseSkillFile(id, content);
225
+ }
226
+ /** Check if a skill exists. */
227
+ async exists(id) {
228
+ const skillFile = `${this.rootDir}/${resolveCollectionPath('skills', id)}/SKILL.md`;
229
+ return this.storage.exists(skillFile);
230
+ }
231
+ }
232
+ // ── TemplatesCollection ───────────────────────────────────────────────────
233
+ export class TemplatesCollection {
234
+ storage;
235
+ rootDir;
236
+ constructor(storage, rootDir) {
237
+ this.storage = storage;
238
+ this.rootDir = rootDir;
239
+ }
240
+ /** List template filenames under .squad/templates/. */
241
+ async list() {
242
+ const templatesDir = `${this.rootDir}/.squad/templates`;
243
+ return this.storage.list(templatesDir);
244
+ }
245
+ /** Get raw template content by ID. Returns undefined if not found. */
246
+ async get(id) {
247
+ const filePath = `${this.rootDir}/${resolveCollectionPath('templates', id)}`;
248
+ return this.storage.read(filePath);
249
+ }
250
+ /** Check if a template exists. */
251
+ async exists(id) {
252
+ const filePath = `${this.rootDir}/${resolveCollectionPath('templates', id)}`;
253
+ return this.storage.exists(filePath);
254
+ }
255
+ }
256
+ const DEFAULT_CONFIG = {
257
+ cacheEnabled: false,
258
+ cacheTtlMs: 300_000,
259
+ };
260
+ export class ConfigCollection {
261
+ storage;
262
+ rootDir;
263
+ constructor(storage, rootDir) {
264
+ this.storage = storage;
265
+ this.rootDir = rootDir;
266
+ }
267
+ /** Read and parse `.squad/config.json`. Returns defaults when file is missing or invalid. */
268
+ async get() {
269
+ const filePath = `${this.rootDir}/${resolveCollectionPath('config')}`;
270
+ const content = await this.storage.read(filePath);
271
+ if (content === undefined) {
272
+ return { ...DEFAULT_CONFIG };
273
+ }
274
+ try {
275
+ const parsed = JSON.parse(content);
276
+ return { ...DEFAULT_CONFIG, ...parsed };
277
+ }
278
+ catch {
279
+ return { ...DEFAULT_CONFIG };
280
+ }
281
+ }
282
+ /** Write config to `.squad/config.json`. */
283
+ async update(config) {
284
+ const filePath = `${this.rootDir}/${resolveCollectionPath('config')}`;
285
+ await this.storage.write(filePath, JSON.stringify(config, null, 2) + '\n');
286
+ }
287
+ /** Check if `.squad/config.json` exists. */
288
+ async exists() {
289
+ const filePath = `${this.rootDir}/${resolveCollectionPath('config')}`;
290
+ return this.storage.exists(filePath);
291
+ }
292
+ }
293
+ // ── LogCollection ─────────────────────────────────────────────────────────
294
+ export class LogCollection {
295
+ storage;
296
+ rootDir;
297
+ constructor(storage, rootDir) {
298
+ this.storage = storage;
299
+ this.rootDir = rootDir;
300
+ }
301
+ /** List log entry filenames under .squad/log/. */
302
+ async list() {
303
+ const logDir = `${this.rootDir}/${resolveCollectionPath('log')}`;
304
+ return this.storage.list(logDir);
305
+ }
306
+ /** Read a specific log entry. Returns undefined if not found. */
307
+ async get(id) {
308
+ const filePath = `${this.rootDir}/${resolveCollectionPath('log')}/${id}`;
309
+ return this.storage.read(filePath);
310
+ }
311
+ /** Write a new log entry. */
312
+ async write(id, content) {
313
+ const filePath = `${this.rootDir}/${resolveCollectionPath('log')}/${id}`;
314
+ await this.storage.write(filePath, content);
315
+ }
316
+ }
317
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/state/collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * State Module — Canonical Domain Types
3
+ *
4
+ * Phase 2 of StorageProvider PRD (#481).
5
+ * Types that already exist elsewhere are re-exported here as the
6
+ * canonical import point for the state layer. New domain types are
7
+ * defined inline.
8
+ */
9
+ export type { AgentStatus } from '../agents/lifecycle.js';
10
+ export type { HistorySection } from '../agents/history-shadow.js';
11
+ export type { ModelTier, WorkType, RoutingRule } from '../runtime/config.js';
12
+ export type { SkillDefinition } from '../skills/skill-loader.js';
13
+ export type { StorageProvider } from '../storage/storage-provider.js';
14
+ import type { HistorySection } from '../agents/history-shadow.js';
15
+ import type { ModelTier } from '../runtime/config.js';
16
+ import type { StorageProvider } from '../storage/storage-provider.js';
17
+ /** Full agent entity persisted under `.squad/agents/<name>/`. */
18
+ export interface Agent {
19
+ readonly name: string;
20
+ readonly role: string;
21
+ readonly emoji?: string;
22
+ readonly status: string;
23
+ readonly charterPath: string;
24
+ readonly modelPreference?: ModelTier;
25
+ readonly modelFallback?: string;
26
+ readonly skills: readonly string[];
27
+ readonly aliases: readonly string[];
28
+ readonly autoAssign: boolean;
29
+ }
30
+ /** Structured decision entry parsed from `decisions.md`. */
31
+ export interface Decision {
32
+ readonly date: string;
33
+ readonly title: string;
34
+ readonly author: string;
35
+ readonly body: string;
36
+ readonly configRelevant: boolean;
37
+ }
38
+ /** Timestamped history entry within an agent's `history.md`. */
39
+ export interface HistoryEntry {
40
+ readonly section: HistorySection;
41
+ readonly content: string;
42
+ readonly timestamp: string;
43
+ }
44
+ /** Parsed `team.md` structure. */
45
+ export interface TeamConfig {
46
+ readonly projectContext: string;
47
+ readonly members: readonly TeamMember[];
48
+ }
49
+ /** A single row from the team.md members table. */
50
+ export interface TeamMember {
51
+ readonly name: string;
52
+ readonly role: string;
53
+ readonly emoji?: string;
54
+ readonly status?: string;
55
+ }
56
+ /** Parsed `routing.md` structure. */
57
+ export interface RoutingConfig {
58
+ readonly rules: readonly RoutingConfigRule[];
59
+ readonly moduleOwnership: ReadonlyMap<string, string>;
60
+ readonly principles: readonly string[];
61
+ }
62
+ /** A single routing rule within RoutingConfig. */
63
+ export interface RoutingConfigRule {
64
+ readonly workType: string;
65
+ readonly agents: readonly string[];
66
+ readonly examples: readonly string[];
67
+ }
68
+ /** Template file content from `.squad/templates/`. */
69
+ export type Template = {
70
+ readonly id: string;
71
+ readonly name: string;
72
+ readonly content: string;
73
+ };
74
+ /** Log entry for orchestration / session logging. */
75
+ export interface LogEntry {
76
+ readonly timestamp: string;
77
+ readonly level: 'info' | 'warn' | 'error' | 'debug';
78
+ readonly message: string;
79
+ readonly agent?: string;
80
+ readonly metadata?: Readonly<Record<string, unknown>>;
81
+ }
82
+ /** Options for SquadState initialization. */
83
+ export interface SquadStateConfig {
84
+ readonly provider: StorageProvider;
85
+ readonly rootDir: string;
86
+ readonly cacheEnabled?: boolean;
87
+ readonly cacheTtlMs?: number;
88
+ }
89
+ /**
90
+ * Discriminant for state-layer storage errors.
91
+ * Distinct from the low-level `StorageError` in `storage/storage-error.ts`
92
+ * which wraps Node.js `ErrnoException`.
93
+ */
94
+ export type StateErrorKind = 'not-found' | 'parse-error' | 'write-conflict' | 'provider-error';
95
+ /**
96
+ * Base error class for the state layer.
97
+ *
98
+ * Named `StateError` (not `StorageError`) to avoid collision with the
99
+ * low-level FS error wrapper in `storage/storage-error.ts`. Uses a
100
+ * `kind` discriminant so callers can switch on error type.
101
+ */
102
+ export declare class StateError extends Error {
103
+ readonly kind: StateErrorKind;
104
+ constructor(kind: StateErrorKind, message: string, options?: ErrorOptions);
105
+ }
106
+ /** Thrown when a requested entity or path does not exist. */
107
+ export declare class NotFoundError extends StateError {
108
+ constructor(collection: string, id?: string, options?: ErrorOptions);
109
+ }
110
+ /** Thrown when file content cannot be parsed into the expected type. */
111
+ export declare class ParseError extends StateError {
112
+ constructor(collection: string, detail: string, options?: ErrorOptions);
113
+ }
114
+ /** Thrown on concurrent write conflicts (future optimistic locking). */
115
+ export declare class WriteConflictError extends StateError {
116
+ constructor(collection: string, id?: string, options?: ErrorOptions);
117
+ }
118
+ /** Thrown when the underlying StorageProvider operation fails. */
119
+ export declare class ProviderError extends StateError {
120
+ constructor(operation: string, detail: string, options?: ErrorOptions);
121
+ }
122
+ //# sourceMappingURL=domain-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-types.d.ts","sourceRoot":"","sources":["../../src/state/domain-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * State Module — Canonical Domain Types
3
+ *
4
+ * Phase 2 of StorageProvider PRD (#481).
5
+ * Types that already exist elsewhere are re-exported here as the
6
+ * canonical import point for the state layer. New domain types are
7
+ * defined inline.
8
+ */
9
+ /**
10
+ * Base error class for the state layer.
11
+ *
12
+ * Named `StateError` (not `StorageError`) to avoid collision with the
13
+ * low-level FS error wrapper in `storage/storage-error.ts`. Uses a
14
+ * `kind` discriminant so callers can switch on error type.
15
+ */
16
+ export class StateError extends Error {
17
+ kind;
18
+ constructor(kind, message, options) {
19
+ super(message, options);
20
+ this.name = 'StateError';
21
+ this.kind = kind;
22
+ }
23
+ }
24
+ /** Thrown when a requested entity or path does not exist. */
25
+ export class NotFoundError extends StateError {
26
+ constructor(collection, id, options) {
27
+ const target = id ? `${collection}/${id}` : collection;
28
+ super('not-found', `Not found: ${target}`, options);
29
+ this.name = 'NotFoundError';
30
+ }
31
+ }
32
+ /** Thrown when file content cannot be parsed into the expected type. */
33
+ export class ParseError extends StateError {
34
+ constructor(collection, detail, options) {
35
+ super('parse-error', `Parse error in ${collection}: ${detail}`, options);
36
+ this.name = 'ParseError';
37
+ }
38
+ }
39
+ /** Thrown on concurrent write conflicts (future optimistic locking). */
40
+ export class WriteConflictError extends StateError {
41
+ constructor(collection, id, options) {
42
+ const target = id ? `${collection}/${id}` : collection;
43
+ super('write-conflict', `Write conflict: ${target}`, options);
44
+ this.name = 'WriteConflictError';
45
+ }
46
+ }
47
+ /** Thrown when the underlying StorageProvider operation fails. */
48
+ export class ProviderError extends StateError {
49
+ constructor(operation, detail, options) {
50
+ super('provider-error', `Provider ${operation} failed: ${detail}`, options);
51
+ this.name = 'ProviderError';
52
+ }
53
+ }
54
+ //# sourceMappingURL=domain-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-types.js","sourceRoot":"","sources":["../../src/state/domain-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsGH;;;;;;GAMG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAiB;IAE9B,YAAY,IAAoB,EAAE,OAAe,EAAE,OAAsB;QACvE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAY,UAAkB,EAAE,EAAW,EAAE,OAAsB;QACjE,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QACvD,KAAK,CAAC,WAAW,EAAE,cAAc,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,wEAAwE;AACxE,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC,YAAY,UAAkB,EAAE,MAAc,EAAE,OAAsB;QACpE,KAAK,CAAC,aAAa,EAAE,kBAAkB,UAAU,KAAK,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,wEAAwE;AACxE,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,UAAkB,EAAE,EAAW,EAAE,OAAsB;QACjE,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QACvD,KAAK,CAAC,gBAAgB,EAAE,mBAAmB,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAY,SAAiB,EAAE,MAAc,EAAE,OAAsB;QACnE,KAAK,CAAC,gBAAgB,EAAE,YAAY,SAAS,YAAY,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,16 @@
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 type { StorageProvider } from '../storage/storage-provider.js';
10
+ import type { AgentHandle } from './collection-map.js';
11
+ /**
12
+ * Create a concrete AgentHandle bound to a specific agent, storage provider,
13
+ * and root directory.
14
+ */
15
+ export declare function createAgentHandle(name: string, storage: StorageProvider, rootDir: string): AgentHandle;
16
+ //# sourceMappingURL=handles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/state/handles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAsEvD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,GACd,WAAW,CA0Gb"}