@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.
- package/README.md +44 -0
- package/dist/agents/history-shadow.d.ts +7 -5
- package/dist/agents/history-shadow.d.ts.map +1 -1
- package/dist/agents/history-shadow.js +39 -48
- package/dist/agents/history-shadow.js.map +1 -1
- package/dist/agents/index.d.ts +12 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +62 -9
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lifecycle.d.ts +4 -0
- package/dist/agents/lifecycle.d.ts.map +1 -1
- package/dist/agents/lifecycle.js +6 -7
- package/dist/agents/lifecycle.js.map +1 -1
- package/dist/agents/onboarding.d.ts +4 -2
- package/dist/agents/onboarding.d.ts.map +1 -1
- package/dist/agents/onboarding.js +26 -16
- package/dist/agents/onboarding.js.map +1 -1
- package/dist/agents/personal.d.ts +2 -1
- package/dist/agents/personal.d.ts.map +1 -1
- package/dist/agents/personal.js +11 -12
- package/dist/agents/personal.js.map +1 -1
- package/dist/build/bundle.d.ts.map +1 -1
- package/dist/build/bundle.js +6 -6
- package/dist/build/bundle.js.map +1 -1
- package/dist/build/release.d.ts.map +1 -1
- package/dist/build/release.js +7 -5
- package/dist/build/release.js.map +1 -1
- package/dist/casting/index.d.ts.map +1 -1
- package/dist/casting/index.js +4 -3
- package/dist/casting/index.js.map +1 -1
- package/dist/config/agent-source.d.ts +5 -1
- package/dist/config/agent-source.d.ts.map +1 -1
- package/dist/config/agent-source.js +85 -41
- package/dist/config/agent-source.js.map +1 -1
- package/dist/config/init.d.ts +4 -3
- package/dist/config/init.d.ts.map +1 -1
- package/dist/config/init.js +84 -63
- package/dist/config/init.js.map +1 -1
- package/dist/config/legacy-fallback.d.ts +3 -2
- package/dist/config/legacy-fallback.d.ts.map +1 -1
- package/dist/config/legacy-fallback.js +16 -14
- package/dist/config/legacy-fallback.js.map +1 -1
- package/dist/config/models.d.ts +9 -6
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +35 -25
- package/dist/config/models.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/marketplace/packaging.d.ts.map +1 -1
- package/dist/marketplace/packaging.js +18 -16
- package/dist/marketplace/packaging.js.map +1 -1
- package/dist/multi-squad.d.ts.map +1 -1
- package/dist/multi-squad.js +10 -9
- package/dist/multi-squad.js.map +1 -1
- package/dist/platform/comms-file-log.d.ts.map +1 -1
- package/dist/platform/comms-file-log.js +7 -6
- package/dist/platform/comms-file-log.js.map +1 -1
- package/dist/platform/comms.d.ts.map +1 -1
- package/dist/platform/comms.js +6 -5
- package/dist/platform/comms.js.map +1 -1
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +4 -3
- package/dist/platform/index.js.map +1 -1
- package/dist/ralph/capabilities.d.ts +30 -1
- package/dist/ralph/capabilities.d.ts.map +1 -1
- package/dist/ralph/capabilities.js +51 -6
- package/dist/ralph/capabilities.js.map +1 -1
- package/dist/ralph/index.d.ts +1 -1
- package/dist/ralph/index.d.ts.map +1 -1
- package/dist/ralph/index.js +4 -3
- package/dist/ralph/index.js.map +1 -1
- package/dist/ralph/rate-limiting.d.ts.map +1 -1
- package/dist/ralph/rate-limiting.js +4 -4
- package/dist/ralph/rate-limiting.js.map +1 -1
- package/dist/remote/bridge.d.ts.map +1 -1
- package/dist/remote/bridge.js +2 -2
- package/dist/remote/bridge.js.map +1 -1
- package/dist/resolution.d.ts +9 -0
- package/dist/resolution.d.ts.map +1 -1
- package/dist/resolution.js +39 -16
- package/dist/resolution.js.map +1 -1
- package/dist/roles/catalog.d.ts +1 -1
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +8 -7
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/cross-squad.d.ts.map +1 -1
- package/dist/runtime/cross-squad.js +8 -7
- package/dist/runtime/cross-squad.js.map +1 -1
- package/dist/runtime/scheduler.d.ts.map +1 -1
- package/dist/runtime/scheduler.js +8 -8
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/squad-observer.d.ts.map +1 -1
- package/dist/runtime/squad-observer.js +7 -4
- package/dist/runtime/squad-observer.js.map +1 -1
- package/dist/sharing/consult.d.ts +1 -1
- package/dist/sharing/consult.d.ts.map +1 -1
- package/dist/sharing/consult.js +66 -64
- package/dist/sharing/consult.js.map +1 -1
- package/dist/sharing/export.d.ts.map +1 -1
- package/dist/sharing/export.js +16 -16
- package/dist/sharing/export.js.map +1 -1
- package/dist/sharing/import.d.ts.map +1 -1
- package/dist/sharing/import.js +13 -12
- package/dist/sharing/import.js.map +1 -1
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +10 -9
- package/dist/skills/skill-loader.js.map +1 -1
- package/dist/skills/skill-script-loader.d.ts.map +1 -1
- package/dist/skills/skill-script-loader.js +6 -4
- package/dist/skills/skill-script-loader.js.map +1 -1
- package/dist/skills/skill-source.d.ts +3 -1
- package/dist/skills/skill-source.d.ts.map +1 -1
- package/dist/skills/skill-source.js +18 -16
- package/dist/skills/skill-source.js.map +1 -1
- package/dist/state/collection-map.d.ts +43 -0
- package/dist/state/collection-map.d.ts.map +1 -0
- package/dist/state/collection-map.js +9 -0
- package/dist/state/collection-map.js.map +1 -0
- package/dist/state/collections.d.ts +102 -0
- package/dist/state/collections.d.ts.map +1 -0
- package/dist/state/collections.js +317 -0
- package/dist/state/collections.js.map +1 -0
- package/dist/state/domain-types.d.ts +122 -0
- package/dist/state/domain-types.d.ts.map +1 -0
- package/dist/state/domain-types.js +54 -0
- package/dist/state/domain-types.js.map +1 -0
- package/dist/state/handles.d.ts +16 -0
- package/dist/state/handles.d.ts.map +1 -0
- package/dist/state/handles.js +161 -0
- package/dist/state/handles.js.map +1 -0
- package/dist/state/index.d.ts +17 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +15 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/io/charter-io.d.ts +28 -0
- package/dist/state/io/charter-io.d.ts.map +1 -0
- package/dist/state/io/charter-io.js +94 -0
- package/dist/state/io/charter-io.js.map +1 -0
- package/dist/state/io/decisions-io.d.ts +42 -0
- package/dist/state/io/decisions-io.d.ts.map +1 -0
- package/dist/state/io/decisions-io.js +66 -0
- package/dist/state/io/decisions-io.js.map +1 -0
- package/dist/state/io/history-io.d.ts +37 -0
- package/dist/state/io/history-io.d.ts.map +1 -0
- package/dist/state/io/history-io.js +102 -0
- package/dist/state/io/history-io.js.map +1 -0
- package/dist/state/io/index.d.ts +19 -0
- package/dist/state/io/index.d.ts.map +1 -0
- package/dist/state/io/index.js +19 -0
- package/dist/state/io/index.js.map +1 -0
- package/dist/state/io/routing-io.d.ts +37 -0
- package/dist/state/io/routing-io.d.ts.map +1 -0
- package/dist/state/io/routing-io.js +99 -0
- package/dist/state/io/routing-io.js.map +1 -0
- package/dist/state/io/team-io.d.ts +46 -0
- package/dist/state/io/team-io.d.ts.map +1 -0
- package/dist/state/io/team-io.js +82 -0
- package/dist/state/io/team-io.js.map +1 -0
- package/dist/state/schema.d.ts +24 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +41 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/squad-state.d.ts +42 -0
- package/dist/state/squad-state.d.ts.map +1 -0
- package/dist/state/squad-state.js +68 -0
- package/dist/state/squad-state.js.map +1 -0
- package/dist/storage/fs-storage-provider.d.ts +60 -0
- package/dist/storage/fs-storage-provider.d.ts.map +1 -0
- package/dist/storage/fs-storage-provider.js +377 -0
- package/dist/storage/fs-storage-provider.js.map +1 -0
- package/dist/storage/in-memory-storage-provider.d.ts +46 -0
- package/dist/storage/in-memory-storage-provider.d.ts.map +1 -0
- package/dist/storage/in-memory-storage-provider.js +264 -0
- package/dist/storage/in-memory-storage-provider.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/sqlite-storage-provider.d.ts +95 -0
- package/dist/storage/sqlite-storage-provider.d.ts.map +1 -0
- package/dist/storage/sqlite-storage-provider.js +383 -0
- package/dist/storage/sqlite-storage-provider.js.map +1 -0
- package/dist/storage/storage-error.d.ts +28 -0
- package/dist/storage/storage-error.d.ts.map +1 -0
- package/dist/storage/storage-error.js +35 -0
- package/dist/storage/storage-error.js.map +1 -0
- package/dist/storage/storage-provider.d.ts +161 -0
- package/dist/storage/storage-provider.d.ts.map +1 -0
- package/dist/storage/storage-provider.js +18 -0
- package/dist/storage/storage-provider.js.map +1 -0
- package/dist/streams/resolver.d.ts.map +1 -1
- package/dist/streams/resolver.js +6 -5
- package/dist/streams/resolver.js.map +1 -1
- package/dist/tools/index.d.ts +5 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +54 -15
- package/dist/tools/index.js.map +1 -1
- package/dist/upstream/resolver.d.ts +3 -2
- package/dist/upstream/resolver.d.ts.map +1 -1
- package/dist/upstream/resolver.js +33 -32
- package/dist/upstream/resolver.js.map +1 -1
- package/package.json +33 -1
- package/templates/scribe-charter.md +4 -0
- package/templates/skills/cross-machine-coordination/SKILL.md +434 -0
- package/templates/skills/error-recovery/SKILL.md +99 -0
- package/templates/skills/iterative-retrieval/SKILL.md +165 -0
- package/templates/skills/notification-routing/SKILL.md +105 -0
- package/templates/skills/pr-screenshots/SKILL.md +149 -0
- package/templates/skills/ralph-two-pass-scan/SKILL.md +35 -0
- package/templates/skills/reflect/SKILL.md +229 -0
- package/templates/skills/release-process/SKILL.md +84 -376
- package/templates/skills/retro-enforcement/SKILL.md +148 -0
- package/templates/skills/tiered-memory/SKILL.md +234 -0
- package/templates/skills/windows-compatibility/SKILL.md +24 -0
- package/templates/{squad.agent.md → squad.agent.md.template} +57 -28
- package/templates/workflows/squad-ci.yml +1 -1
- package/templates/workflows/squad-heartbeat.yml +0 -4
- package/templates/workflows/squad-insider-release.yml +1 -1
- package/templates/workflows/squad-preview.yml +1 -1
- 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":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,8EAA8E;AAE9E,MAAM,YAAY,GAAiE;IACjF,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;IACtC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;IAC1C,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;IAC1C,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE;IACxC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;IACpC,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;CAC7C,CAAC;AAEF;;;;;GAKG;AACH,SAAS,sBAAsB,CAC7B,MAAqB,EACrB,aAA8B;IAE9B,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC;QACzD,CAAC,CAAC,YAAY,CAAC;IAEjB,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAuB,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,cAAc,GAAG,gBAAgB,CAAC;QACxC,MAAM,UAAU,GAAkE,EAAE,CAAC;QACrF,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACnD,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,CAAC,CAAC,CAAC,CAAE;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,YAAY,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;aACpC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;gBAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,OAAwB,EACxB,OAAe;IAEf,MAAM,QAAQ,GAAG,GAAG,OAAO,kBAAkB,IAAI,EAAE,CAAC;IACpD,MAAM,WAAW,GAAG,GAAG,QAAQ,aAAa,CAAC;IAC7C,MAAM,WAAW,GAAG,GAAG,QAAQ,aAAa,CAAC;IAC7C,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;IAE/D,MAAM,MAAM,GAAgB;QAC1B,IAAI;QAEJ,KAAK,CAAC,OAAO;YACX,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,OAAwB;YAC9B,OAAO,CAAC,KAAK,IAAI,EAAE;gBACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,IAAI,MAAM,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,UAAU,CAAC,SAAS,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpG,CAAC;gBACD,OAAO,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,OAAuB,EAAE,KAAmB;YAC9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,sBAAsB,CACrC,OAAO,EACP,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,IAAI,SAAS,CAC7B,CAAC;YAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,KAAK,IAAI,UAAU,OAAO,OAAO,QAAQ,EAAE,CAAC;gBAC/D,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,OAAO,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,YAAY,EAAE,CAAC;gBACjB,sEAAsE;gBACtE,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAChE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEhF,MAAM,SAAS,GAAG,gBAAgB;oBAChC,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK;oBAC1C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;gBAEnB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBACzD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,UAAU,GACd,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9E,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,OAAO,OAAO,QAAQ,EAAE,CAAC;gBAC1E,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,OAAuB;YAClC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,MAAM,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACjG,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;YACxE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC;YAC7B,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;gBAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;gBAClC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;gBAC7D,KAAK,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,KAAK;gBAC/C,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;aAC/E,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAEtB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -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"}
|