@bradygaster/squad-sdk 0.9.1 → 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 (285) hide show
  1. package/README.md +340 -296
  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 +69 -78
  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/github-dist.js +42 -42
  26. package/dist/build/release.d.ts.map +1 -1
  27. package/dist/build/release.js +7 -5
  28. package/dist/build/release.js.map +1 -1
  29. package/dist/casting/index.d.ts.map +1 -1
  30. package/dist/casting/index.js +4 -3
  31. package/dist/casting/index.js.map +1 -1
  32. package/dist/config/agent-source.d.ts +5 -1
  33. package/dist/config/agent-source.d.ts.map +1 -1
  34. package/dist/config/agent-source.js +85 -41
  35. package/dist/config/agent-source.js.map +1 -1
  36. package/dist/config/init.d.ts +4 -3
  37. package/dist/config/init.d.ts.map +1 -1
  38. package/dist/config/init.js +257 -236
  39. package/dist/config/init.js.map +1 -1
  40. package/dist/config/legacy-fallback.d.ts +3 -2
  41. package/dist/config/legacy-fallback.d.ts.map +1 -1
  42. package/dist/config/legacy-fallback.js +16 -14
  43. package/dist/config/legacy-fallback.js.map +1 -1
  44. package/dist/config/models.d.ts +9 -6
  45. package/dist/config/models.d.ts.map +1 -1
  46. package/dist/config/models.js +35 -25
  47. package/dist/config/models.js.map +1 -1
  48. package/dist/index.d.ts +5 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +14 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/marketplace/packaging.d.ts.map +1 -1
  53. package/dist/marketplace/packaging.js +18 -16
  54. package/dist/marketplace/packaging.js.map +1 -1
  55. package/dist/multi-squad.d.ts.map +1 -1
  56. package/dist/multi-squad.js +10 -9
  57. package/dist/multi-squad.js.map +1 -1
  58. package/dist/platform/comms-file-log.d.ts.map +1 -1
  59. package/dist/platform/comms-file-log.js +7 -6
  60. package/dist/platform/comms-file-log.js.map +1 -1
  61. package/dist/platform/comms.d.ts.map +1 -1
  62. package/dist/platform/comms.js +6 -5
  63. package/dist/platform/comms.js.map +1 -1
  64. package/dist/platform/index.d.ts.map +1 -1
  65. package/dist/platform/index.js +4 -3
  66. package/dist/platform/index.js.map +1 -1
  67. package/dist/ralph/capabilities.d.ts +30 -1
  68. package/dist/ralph/capabilities.d.ts.map +1 -1
  69. package/dist/ralph/capabilities.js +51 -6
  70. package/dist/ralph/capabilities.js.map +1 -1
  71. package/dist/ralph/index.d.ts +1 -1
  72. package/dist/ralph/index.d.ts.map +1 -1
  73. package/dist/ralph/index.js +4 -3
  74. package/dist/ralph/index.js.map +1 -1
  75. package/dist/ralph/rate-limiting.d.ts.map +1 -1
  76. package/dist/ralph/rate-limiting.js +4 -4
  77. package/dist/ralph/rate-limiting.js.map +1 -1
  78. package/dist/remote/bridge.d.ts.map +1 -1
  79. package/dist/remote/bridge.js +2 -2
  80. package/dist/remote/bridge.js.map +1 -1
  81. package/dist/resolution.d.ts +9 -0
  82. package/dist/resolution.d.ts.map +1 -1
  83. package/dist/resolution.js +39 -16
  84. package/dist/resolution.js.map +1 -1
  85. package/dist/roles/catalog.d.ts +1 -1
  86. package/dist/runtime/config.d.ts.map +1 -1
  87. package/dist/runtime/config.js +8 -7
  88. package/dist/runtime/config.js.map +1 -1
  89. package/dist/runtime/cross-squad.d.ts.map +1 -1
  90. package/dist/runtime/cross-squad.js +8 -7
  91. package/dist/runtime/cross-squad.js.map +1 -1
  92. package/dist/runtime/scheduler.d.ts.map +1 -1
  93. package/dist/runtime/scheduler.js +8 -8
  94. package/dist/runtime/scheduler.js.map +1 -1
  95. package/dist/runtime/squad-observer.d.ts.map +1 -1
  96. package/dist/runtime/squad-observer.js +7 -4
  97. package/dist/runtime/squad-observer.js.map +1 -1
  98. package/dist/sharing/consult.d.ts +1 -1
  99. package/dist/sharing/consult.d.ts.map +1 -1
  100. package/dist/sharing/consult.js +144 -142
  101. package/dist/sharing/consult.js.map +1 -1
  102. package/dist/sharing/export.d.ts.map +1 -1
  103. package/dist/sharing/export.js +16 -16
  104. package/dist/sharing/export.js.map +1 -1
  105. package/dist/sharing/import.d.ts.map +1 -1
  106. package/dist/sharing/import.js +13 -12
  107. package/dist/sharing/import.js.map +1 -1
  108. package/dist/skills/skill-loader.d.ts.map +1 -1
  109. package/dist/skills/skill-loader.js +10 -9
  110. package/dist/skills/skill-loader.js.map +1 -1
  111. package/dist/skills/skill-script-loader.d.ts.map +1 -1
  112. package/dist/skills/skill-script-loader.js +6 -4
  113. package/dist/skills/skill-script-loader.js.map +1 -1
  114. package/dist/skills/skill-source.d.ts +3 -1
  115. package/dist/skills/skill-source.d.ts.map +1 -1
  116. package/dist/skills/skill-source.js +18 -16
  117. package/dist/skills/skill-source.js.map +1 -1
  118. package/dist/state/collection-map.d.ts +43 -0
  119. package/dist/state/collection-map.d.ts.map +1 -0
  120. package/dist/state/collection-map.js +9 -0
  121. package/dist/state/collection-map.js.map +1 -0
  122. package/dist/state/collections.d.ts +102 -0
  123. package/dist/state/collections.d.ts.map +1 -0
  124. package/dist/state/collections.js +317 -0
  125. package/dist/state/collections.js.map +1 -0
  126. package/dist/state/domain-types.d.ts +122 -0
  127. package/dist/state/domain-types.d.ts.map +1 -0
  128. package/dist/state/domain-types.js +54 -0
  129. package/dist/state/domain-types.js.map +1 -0
  130. package/dist/state/handles.d.ts +16 -0
  131. package/dist/state/handles.d.ts.map +1 -0
  132. package/dist/state/handles.js +161 -0
  133. package/dist/state/handles.js.map +1 -0
  134. package/dist/state/index.d.ts +17 -0
  135. package/dist/state/index.d.ts.map +1 -0
  136. package/dist/state/index.js +15 -0
  137. package/dist/state/index.js.map +1 -0
  138. package/dist/state/io/charter-io.d.ts +28 -0
  139. package/dist/state/io/charter-io.d.ts.map +1 -0
  140. package/dist/state/io/charter-io.js +94 -0
  141. package/dist/state/io/charter-io.js.map +1 -0
  142. package/dist/state/io/decisions-io.d.ts +42 -0
  143. package/dist/state/io/decisions-io.d.ts.map +1 -0
  144. package/dist/state/io/decisions-io.js +66 -0
  145. package/dist/state/io/decisions-io.js.map +1 -0
  146. package/dist/state/io/history-io.d.ts +37 -0
  147. package/dist/state/io/history-io.d.ts.map +1 -0
  148. package/dist/state/io/history-io.js +102 -0
  149. package/dist/state/io/history-io.js.map +1 -0
  150. package/dist/state/io/index.d.ts +19 -0
  151. package/dist/state/io/index.d.ts.map +1 -0
  152. package/dist/state/io/index.js +19 -0
  153. package/dist/state/io/index.js.map +1 -0
  154. package/dist/state/io/routing-io.d.ts +37 -0
  155. package/dist/state/io/routing-io.d.ts.map +1 -0
  156. package/dist/state/io/routing-io.js +99 -0
  157. package/dist/state/io/routing-io.js.map +1 -0
  158. package/dist/state/io/team-io.d.ts +46 -0
  159. package/dist/state/io/team-io.d.ts.map +1 -0
  160. package/dist/state/io/team-io.js +82 -0
  161. package/dist/state/io/team-io.js.map +1 -0
  162. package/dist/state/schema.d.ts +24 -0
  163. package/dist/state/schema.d.ts.map +1 -0
  164. package/dist/state/schema.js +41 -0
  165. package/dist/state/schema.js.map +1 -0
  166. package/dist/state/squad-state.d.ts +42 -0
  167. package/dist/state/squad-state.d.ts.map +1 -0
  168. package/dist/state/squad-state.js +68 -0
  169. package/dist/state/squad-state.js.map +1 -0
  170. package/dist/storage/fs-storage-provider.d.ts +60 -0
  171. package/dist/storage/fs-storage-provider.d.ts.map +1 -0
  172. package/dist/storage/fs-storage-provider.js +377 -0
  173. package/dist/storage/fs-storage-provider.js.map +1 -0
  174. package/dist/storage/in-memory-storage-provider.d.ts +46 -0
  175. package/dist/storage/in-memory-storage-provider.d.ts.map +1 -0
  176. package/dist/storage/in-memory-storage-provider.js +264 -0
  177. package/dist/storage/in-memory-storage-provider.js.map +1 -0
  178. package/dist/storage/index.d.ts +6 -0
  179. package/dist/storage/index.d.ts.map +1 -0
  180. package/dist/storage/index.js +5 -0
  181. package/dist/storage/index.js.map +1 -0
  182. package/dist/storage/sqlite-storage-provider.d.ts +95 -0
  183. package/dist/storage/sqlite-storage-provider.d.ts.map +1 -0
  184. package/dist/storage/sqlite-storage-provider.js +383 -0
  185. package/dist/storage/sqlite-storage-provider.js.map +1 -0
  186. package/dist/storage/storage-error.d.ts +28 -0
  187. package/dist/storage/storage-error.d.ts.map +1 -0
  188. package/dist/storage/storage-error.js +35 -0
  189. package/dist/storage/storage-error.js.map +1 -0
  190. package/dist/storage/storage-provider.d.ts +161 -0
  191. package/dist/storage/storage-provider.d.ts.map +1 -0
  192. package/dist/storage/storage-provider.js +18 -0
  193. package/dist/storage/storage-provider.js.map +1 -0
  194. package/dist/streams/resolver.d.ts.map +1 -1
  195. package/dist/streams/resolver.js +6 -5
  196. package/dist/streams/resolver.js.map +1 -1
  197. package/dist/tools/index.d.ts +5 -1
  198. package/dist/tools/index.d.ts.map +1 -1
  199. package/dist/tools/index.js +54 -15
  200. package/dist/tools/index.js.map +1 -1
  201. package/dist/upstream/resolver.d.ts +3 -2
  202. package/dist/upstream/resolver.d.ts.map +1 -1
  203. package/dist/upstream/resolver.js +33 -32
  204. package/dist/upstream/resolver.js.map +1 -1
  205. package/package.json +33 -1
  206. package/templates/casting/Futurama.json +9 -9
  207. package/templates/casting-history.json +4 -4
  208. package/templates/casting-policy.json +37 -37
  209. package/templates/casting-reference.md +104 -104
  210. package/templates/casting-registry.json +3 -3
  211. package/templates/ceremonies.md +41 -41
  212. package/templates/charter.md +53 -53
  213. package/templates/constraint-tracking.md +38 -38
  214. package/templates/cooperative-rate-limiting.md +229 -229
  215. package/templates/copilot-instructions.md +46 -46
  216. package/templates/history.md +10 -10
  217. package/templates/identity/now.md +9 -9
  218. package/templates/identity/wisdom.md +15 -15
  219. package/templates/issue-lifecycle.md +412 -412
  220. package/templates/keda-scaler.md +164 -164
  221. package/templates/machine-capabilities.md +74 -74
  222. package/templates/mcp-config.md +90 -90
  223. package/templates/multi-agent-format.md +28 -28
  224. package/templates/plugin-marketplace.md +49 -49
  225. package/templates/ralph-circuit-breaker.md +313 -313
  226. package/templates/raw-agent-output.md +37 -37
  227. package/templates/roster.md +60 -60
  228. package/templates/routing.md +39 -39
  229. package/templates/run-output.md +50 -50
  230. package/templates/schedule.json +19 -19
  231. package/templates/scribe-charter.md +123 -119
  232. package/templates/skill.md +24 -24
  233. package/templates/skills/agent-collaboration/SKILL.md +42 -42
  234. package/templates/skills/agent-conduct/SKILL.md +24 -24
  235. package/templates/skills/architectural-proposals/SKILL.md +151 -151
  236. package/templates/skills/ci-validation-gates/SKILL.md +84 -84
  237. package/templates/skills/cli-wiring/SKILL.md +47 -47
  238. package/templates/skills/client-compatibility/SKILL.md +89 -89
  239. package/templates/skills/cross-machine-coordination/SKILL.md +434 -0
  240. package/templates/skills/cross-squad/SKILL.md +114 -114
  241. package/templates/skills/distributed-mesh/SKILL.md +287 -287
  242. package/templates/skills/distributed-mesh/mesh.json.example +30 -30
  243. package/templates/skills/distributed-mesh/sync-mesh.ps1 +111 -111
  244. package/templates/skills/distributed-mesh/sync-mesh.sh +104 -104
  245. package/templates/skills/docs-standards/SKILL.md +71 -71
  246. package/templates/skills/economy-mode/SKILL.md +114 -114
  247. package/templates/skills/error-recovery/SKILL.md +99 -0
  248. package/templates/skills/external-comms/SKILL.md +329 -329
  249. package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
  250. package/templates/skills/git-workflow/SKILL.md +204 -204
  251. package/templates/skills/github-multi-account/SKILL.md +95 -95
  252. package/templates/skills/history-hygiene/SKILL.md +36 -36
  253. package/templates/skills/humanizer/SKILL.md +105 -105
  254. package/templates/skills/init-mode/SKILL.md +102 -102
  255. package/templates/skills/iterative-retrieval/SKILL.md +165 -0
  256. package/templates/skills/model-selection/SKILL.md +117 -117
  257. package/templates/skills/nap/SKILL.md +24 -24
  258. package/templates/skills/notification-routing/SKILL.md +105 -0
  259. package/templates/skills/personal-squad/SKILL.md +57 -57
  260. package/templates/skills/pr-screenshots/SKILL.md +149 -0
  261. package/templates/skills/project-conventions/SKILL.md +56 -56
  262. package/templates/skills/ralph-two-pass-scan/SKILL.md +35 -0
  263. package/templates/skills/reflect/SKILL.md +229 -0
  264. package/templates/skills/release-process/SKILL.md +131 -423
  265. package/templates/skills/reskill/SKILL.md +92 -92
  266. package/templates/skills/retro-enforcement/SKILL.md +148 -0
  267. package/templates/skills/reviewer-protocol/SKILL.md +79 -79
  268. package/templates/skills/secret-handling/SKILL.md +200 -200
  269. package/templates/skills/session-recovery/SKILL.md +155 -155
  270. package/templates/skills/squad-conventions/SKILL.md +69 -69
  271. package/templates/skills/test-discipline/SKILL.md +37 -37
  272. package/templates/skills/tiered-memory/SKILL.md +234 -0
  273. package/templates/skills/windows-compatibility/SKILL.md +98 -74
  274. package/templates/{squad.agent.md → squad.agent.md.template} +57 -28
  275. package/templates/workflows/squad-ci.yml +24 -24
  276. package/templates/workflows/squad-docs.yml +54 -54
  277. package/templates/workflows/squad-heartbeat.yml +167 -171
  278. package/templates/workflows/squad-insider-release.yml +61 -61
  279. package/templates/workflows/squad-issue-assign.yml +161 -161
  280. package/templates/workflows/squad-label-enforce.yml +181 -181
  281. package/templates/workflows/squad-preview.yml +55 -55
  282. package/templates/workflows/squad-promote.yml +120 -120
  283. package/templates/workflows/squad-release.yml +77 -77
  284. package/templates/workflows/squad-triage.yml +260 -260
  285. package/templates/workflows/sync-squad-labels.yml +169 -169
@@ -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":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7E,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,iEAAiE;AACjE,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC;AAED,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,sDAAsD;AACtD,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE/F;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;gBAElB,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAK1E;AAED,6DAA6D;AAC7D,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKpE;AAED,wEAAwE;AACxE,qBAAa,UAAW,SAAQ,UAAU;gBAC5B,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIvE;AAED,wEAAwE;AACxE,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKpE;AAED,kEAAkE;AAClE,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItE"}
@@ -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"}
@@ -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"}