@cluesmith/codev 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/af.js +8 -0
- package/bin/codev.js +4 -0
- package/bin/consult.js +7 -0
- package/dist/agent-farm/cli.d.ts +11 -0
- package/dist/agent-farm/cli.d.ts.map +1 -0
- package/dist/agent-farm/cli.js +359 -0
- package/dist/agent-farm/cli.js.map +1 -0
- package/dist/agent-farm/commands/cleanup.d.ts +12 -0
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -0
- package/dist/agent-farm/commands/cleanup.js +154 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -0
- package/dist/agent-farm/commands/db.d.ts +38 -0
- package/dist/agent-farm/commands/db.d.ts.map +1 -0
- package/dist/agent-farm/commands/db.js +133 -0
- package/dist/agent-farm/commands/db.js.map +1 -0
- package/dist/agent-farm/commands/index.d.ts +11 -0
- package/dist/agent-farm/commands/index.d.ts.map +1 -0
- package/dist/agent-farm/commands/index.js +11 -0
- package/dist/agent-farm/commands/index.js.map +1 -0
- package/dist/agent-farm/commands/open.d.ts +15 -0
- package/dist/agent-farm/commands/open.d.ts.map +1 -0
- package/dist/agent-farm/commands/open.js +118 -0
- package/dist/agent-farm/commands/open.js.map +1 -0
- package/dist/agent-farm/commands/rename.d.ts +13 -0
- package/dist/agent-farm/commands/rename.d.ts.map +1 -0
- package/dist/agent-farm/commands/rename.js +33 -0
- package/dist/agent-farm/commands/rename.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts +9 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -0
- package/dist/agent-farm/commands/send.js +282 -0
- package/dist/agent-farm/commands/send.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts +15 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -0
- package/dist/agent-farm/commands/spawn.js +575 -0
- package/dist/agent-farm/commands/spawn.js.map +1 -0
- package/dist/agent-farm/commands/start.d.ts +9 -0
- package/dist/agent-farm/commands/start.d.ts.map +1 -0
- package/dist/agent-farm/commands/start.js +175 -0
- package/dist/agent-farm/commands/start.js.map +1 -0
- package/dist/agent-farm/commands/status.d.ts +8 -0
- package/dist/agent-farm/commands/status.d.ts.map +1 -0
- package/dist/agent-farm/commands/status.js +123 -0
- package/dist/agent-farm/commands/status.js.map +1 -0
- package/dist/agent-farm/commands/stop.d.ts +8 -0
- package/dist/agent-farm/commands/stop.d.ts.map +1 -0
- package/dist/agent-farm/commands/stop.js +76 -0
- package/dist/agent-farm/commands/stop.js.map +1 -0
- package/dist/agent-farm/commands/tower.d.ts +19 -0
- package/dist/agent-farm/commands/tower.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower.js +125 -0
- package/dist/agent-farm/commands/tower.js.map +1 -0
- package/dist/agent-farm/commands/tutorial.d.ts +10 -0
- package/dist/agent-farm/commands/tutorial.d.ts.map +1 -0
- package/dist/agent-farm/commands/tutorial.js +49 -0
- package/dist/agent-farm/commands/tutorial.js.map +1 -0
- package/dist/agent-farm/commands/util.d.ts +15 -0
- package/dist/agent-farm/commands/util.d.ts.map +1 -0
- package/dist/agent-farm/commands/util.js +108 -0
- package/dist/agent-farm/commands/util.js.map +1 -0
- package/dist/agent-farm/db/errors.d.ts +17 -0
- package/dist/agent-farm/db/errors.d.ts.map +1 -0
- package/dist/agent-farm/db/errors.js +46 -0
- package/dist/agent-farm/db/errors.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +41 -0
- package/dist/agent-farm/db/index.d.ts.map +1 -0
- package/dist/agent-farm/db/index.js +168 -0
- package/dist/agent-farm/db/index.js.map +1 -0
- package/dist/agent-farm/db/migrate.d.ts +15 -0
- package/dist/agent-farm/db/migrate.d.ts.map +1 -0
- package/dist/agent-farm/db/migrate.js +137 -0
- package/dist/agent-farm/db/migrate.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +16 -0
- package/dist/agent-farm/db/schema.d.ts.map +1 -0
- package/dist/agent-farm/db/schema.js +103 -0
- package/dist/agent-farm/db/schema.js.map +1 -0
- package/dist/agent-farm/db/types.d.ts +87 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -0
- package/dist/agent-farm/db/types.js +65 -0
- package/dist/agent-farm/db/types.js.map +1 -0
- package/dist/agent-farm/index.d.ts +7 -0
- package/dist/agent-farm/index.d.ts.map +1 -0
- package/dist/agent-farm/index.js +373 -0
- package/dist/agent-farm/index.js.map +1 -0
- package/dist/agent-farm/servers/annotate-server.d.ts +9 -0
- package/dist/agent-farm/servers/annotate-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/annotate-server.js +136 -0
- package/dist/agent-farm/servers/annotate-server.js.map +1 -0
- package/dist/agent-farm/servers/dashboard-server.d.ts +9 -0
- package/dist/agent-farm/servers/dashboard-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/dashboard-server.js +939 -0
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.d.ts +9 -0
- package/dist/agent-farm/servers/tower-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +463 -0
- package/dist/agent-farm/servers/tower-server.js.map +1 -0
- package/dist/agent-farm/state.d.ts +93 -0
- package/dist/agent-farm/state.d.ts.map +1 -0
- package/dist/agent-farm/state.js +253 -0
- package/dist/agent-farm/state.js.map +1 -0
- package/dist/agent-farm/tutorial/index.d.ts +8 -0
- package/dist/agent-farm/tutorial/index.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/index.js +8 -0
- package/dist/agent-farm/tutorial/index.js.map +1 -0
- package/dist/agent-farm/tutorial/prompts.d.ts +57 -0
- package/dist/agent-farm/tutorial/prompts.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/prompts.js +147 -0
- package/dist/agent-farm/tutorial/prompts.js.map +1 -0
- package/dist/agent-farm/tutorial/runner.d.ts +52 -0
- package/dist/agent-farm/tutorial/runner.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/runner.js +204 -0
- package/dist/agent-farm/tutorial/runner.js.map +1 -0
- package/dist/agent-farm/tutorial/state.d.ts +26 -0
- package/dist/agent-farm/tutorial/state.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/state.js +89 -0
- package/dist/agent-farm/tutorial/state.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/first-spec.js +136 -0
- package/dist/agent-farm/tutorial/steps/first-spec.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/implementation.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/implementation.js +76 -0
- package/dist/agent-farm/tutorial/steps/implementation.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/index.d.ts +10 -0
- package/dist/agent-farm/tutorial/steps/index.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/index.js +10 -0
- package/dist/agent-farm/tutorial/steps/index.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/planning.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/planning.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/planning.js +143 -0
- package/dist/agent-farm/tutorial/steps/planning.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/review.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/review.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/review.js +78 -0
- package/dist/agent-farm/tutorial/steps/review.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/setup.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/setup.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/setup.js +126 -0
- package/dist/agent-farm/tutorial/steps/setup.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/welcome.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/welcome.js +50 -0
- package/dist/agent-farm/tutorial/steps/welcome.js.map +1 -0
- package/dist/agent-farm/types.d.ts +131 -0
- package/dist/agent-farm/types.d.ts.map +1 -0
- package/dist/agent-farm/types.js +5 -0
- package/dist/agent-farm/types.js.map +1 -0
- package/dist/agent-farm/utils/config.d.ts +27 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -0
- package/dist/agent-farm/utils/config.js +242 -0
- package/dist/agent-farm/utils/config.js.map +1 -0
- package/dist/agent-farm/utils/deps.d.ts +51 -0
- package/dist/agent-farm/utils/deps.d.ts.map +1 -0
- package/dist/agent-farm/utils/deps.js +194 -0
- package/dist/agent-farm/utils/deps.js.map +1 -0
- package/dist/agent-farm/utils/index.d.ts +6 -0
- package/dist/agent-farm/utils/index.d.ts.map +1 -0
- package/dist/agent-farm/utils/index.js +6 -0
- package/dist/agent-farm/utils/index.js.map +1 -0
- package/dist/agent-farm/utils/logger.d.ts +31 -0
- package/dist/agent-farm/utils/logger.d.ts.map +1 -0
- package/dist/agent-farm/utils/logger.js +58 -0
- package/dist/agent-farm/utils/logger.js.map +1 -0
- package/dist/agent-farm/utils/orphan-handler.d.ts +27 -0
- package/dist/agent-farm/utils/orphan-handler.d.ts.map +1 -0
- package/dist/agent-farm/utils/orphan-handler.js +127 -0
- package/dist/agent-farm/utils/orphan-handler.js.map +1 -0
- package/dist/agent-farm/utils/port-registry.d.ts +58 -0
- package/dist/agent-farm/utils/port-registry.d.ts.map +1 -0
- package/dist/agent-farm/utils/port-registry.js +149 -0
- package/dist/agent-farm/utils/port-registry.js.map +1 -0
- package/dist/agent-farm/utils/shell.d.ts +45 -0
- package/dist/agent-farm/utils/shell.d.ts.map +1 -0
- package/dist/agent-farm/utils/shell.js +120 -0
- package/dist/agent-farm/utils/shell.js.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +160 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adopt.d.ts +12 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +178 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/consult/index.d.ts +17 -0
- package/dist/commands/consult/index.d.ts.map +1 -0
- package/dist/commands/consult/index.js +405 -0
- package/dist/commands/consult/index.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +346 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/tower.d.ts +16 -0
- package/dist/commands/tower.d.ts.map +1 -0
- package/dist/commands/tower.js +21 -0
- package/dist/commands/tower.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +137 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/lib/templates.d.ts +57 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +205 -0
- package/dist/lib/templates.js.map +1 -0
- package/package.json +55 -0
- package/templates/AGENTS.md +49 -0
- package/templates/CLAUDE.md +47 -0
- package/templates/DEPENDENCIES.md +344 -0
- package/templates/agents/architecture-documenter.md +189 -0
- package/templates/agents/codev-updater.md +276 -0
- package/templates/agents/spider-protocol-updater.md +118 -0
- package/templates/annotate.html +903 -0
- package/templates/bin/agent-farm +18 -0
- package/templates/bin/annotate-server.js +140 -0
- package/templates/bin/codev-doctor +335 -0
- package/templates/builders.md +30 -0
- package/templates/config.json +7 -0
- package/templates/dashboard-split.html +1679 -0
- package/templates/dashboard.html +149 -0
- package/templates/plans/.gitkeep +0 -0
- package/templates/protocols/experiment/protocol.md +229 -0
- package/templates/protocols/experiment/templates/notes.md +97 -0
- package/templates/protocols/maintain/protocol.md +235 -0
- package/templates/protocols/spider/protocol.md +639 -0
- package/templates/protocols/spider/templates/plan.md +169 -0
- package/templates/protocols/spider/templates/review.md +207 -0
- package/templates/protocols/spider/templates/spec.md +140 -0
- package/templates/protocols/spider-solo/protocol.md +619 -0
- package/templates/protocols/spider-solo/templates/plan.md +169 -0
- package/templates/protocols/spider-solo/templates/review.md +207 -0
- package/templates/protocols/spider-solo/templates/spec.md +140 -0
- package/templates/protocols/tick/protocol.md +250 -0
- package/templates/protocols/tick/templates/plan.md +67 -0
- package/templates/protocols/tick/templates/review.md +90 -0
- package/templates/protocols/tick/templates/spec.md +61 -0
- package/templates/reviews/.gitkeep +0 -0
- package/templates/roles/architect.md +230 -0
- package/templates/roles/builder.md +175 -0
- package/templates/roles/consultant.md +27 -0
- package/templates/specs/.gitkeep +0 -0
- package/templates/templates/projectlist.md +129 -0
- package/templates/tower.html +1032 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/agent-farm/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,EAAS,OAAO,EAAE,MAAM,eAAe,CAAC;AAS/C;;;GAGG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAyB1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAiBnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsCpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAIrD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,EAAE,CAIvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,CAIxE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAahD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,YAAY,EAAE,CAIzC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAIvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAc1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAI7C;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAWjC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,cAAc,GAAG,IAAI,CAIpD;AAGD,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State management for Agent Farm
|
|
3
|
+
*
|
|
4
|
+
* Uses SQLite for ACID-compliant state persistence with proper concurrency handling.
|
|
5
|
+
* All operations are synchronous and atomic.
|
|
6
|
+
*/
|
|
7
|
+
import { getDb, closeDb } from './db/index.js';
|
|
8
|
+
import { dbArchitectToArchitectState, dbBuilderToBuilder, dbUtilToUtilTerminal, dbAnnotationToAnnotation, } from './db/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Load complete state from database
|
|
11
|
+
* Note: This is now synchronous
|
|
12
|
+
*/
|
|
13
|
+
export function loadState() {
|
|
14
|
+
const db = getDb();
|
|
15
|
+
// Load architect (singleton)
|
|
16
|
+
const architectRow = db.prepare('SELECT * FROM architect WHERE id = 1').get();
|
|
17
|
+
const architect = architectRow ? dbArchitectToArchitectState(architectRow) : null;
|
|
18
|
+
// Load builders
|
|
19
|
+
const builderRows = db.prepare('SELECT * FROM builders ORDER BY started_at').all();
|
|
20
|
+
const builders = builderRows.map(dbBuilderToBuilder);
|
|
21
|
+
// Load utils
|
|
22
|
+
const utilRows = db.prepare('SELECT * FROM utils ORDER BY started_at').all();
|
|
23
|
+
const utils = utilRows.map(dbUtilToUtilTerminal);
|
|
24
|
+
// Load annotations
|
|
25
|
+
const annotationRows = db.prepare('SELECT * FROM annotations ORDER BY started_at').all();
|
|
26
|
+
const annotations = annotationRows.map(dbAnnotationToAnnotation);
|
|
27
|
+
return {
|
|
28
|
+
architect,
|
|
29
|
+
builders,
|
|
30
|
+
utils,
|
|
31
|
+
annotations,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Update architect state
|
|
36
|
+
* Note: This is now synchronous
|
|
37
|
+
*/
|
|
38
|
+
export function setArchitect(architect) {
|
|
39
|
+
const db = getDb();
|
|
40
|
+
if (architect === null) {
|
|
41
|
+
db.prepare('DELETE FROM architect WHERE id = 1').run();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
db.prepare(`
|
|
45
|
+
INSERT OR REPLACE INTO architect (id, pid, port, cmd, started_at, tmux_session)
|
|
46
|
+
VALUES (1, @pid, @port, @cmd, @startedAt, @tmuxSession)
|
|
47
|
+
`).run({
|
|
48
|
+
pid: architect.pid,
|
|
49
|
+
port: architect.port,
|
|
50
|
+
cmd: architect.cmd,
|
|
51
|
+
startedAt: architect.startedAt,
|
|
52
|
+
tmuxSession: architect.tmuxSession ?? null,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Add or update a builder
|
|
58
|
+
* Note: This is now synchronous
|
|
59
|
+
*/
|
|
60
|
+
export function upsertBuilder(builder) {
|
|
61
|
+
const db = getDb();
|
|
62
|
+
db.prepare(`
|
|
63
|
+
INSERT INTO builders (
|
|
64
|
+
id, name, port, pid, status, phase, worktree, branch,
|
|
65
|
+
tmux_session, type, task_text, protocol_name
|
|
66
|
+
)
|
|
67
|
+
VALUES (
|
|
68
|
+
@id, @name, @port, @pid, @status, @phase, @worktree, @branch,
|
|
69
|
+
@tmuxSession, @type, @taskText, @protocolName
|
|
70
|
+
)
|
|
71
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
72
|
+
name = excluded.name,
|
|
73
|
+
port = excluded.port,
|
|
74
|
+
pid = excluded.pid,
|
|
75
|
+
status = excluded.status,
|
|
76
|
+
phase = excluded.phase,
|
|
77
|
+
worktree = excluded.worktree,
|
|
78
|
+
branch = excluded.branch,
|
|
79
|
+
tmux_session = excluded.tmux_session,
|
|
80
|
+
type = excluded.type,
|
|
81
|
+
task_text = excluded.task_text,
|
|
82
|
+
protocol_name = excluded.protocol_name
|
|
83
|
+
`).run({
|
|
84
|
+
id: builder.id,
|
|
85
|
+
name: builder.name,
|
|
86
|
+
port: builder.port,
|
|
87
|
+
pid: builder.pid,
|
|
88
|
+
status: builder.status,
|
|
89
|
+
phase: builder.phase,
|
|
90
|
+
worktree: builder.worktree,
|
|
91
|
+
branch: builder.branch,
|
|
92
|
+
tmuxSession: builder.tmuxSession ?? null,
|
|
93
|
+
type: builder.type,
|
|
94
|
+
taskText: builder.taskText ?? null,
|
|
95
|
+
protocolName: builder.protocolName ?? null,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Remove a builder
|
|
100
|
+
* Note: This is now synchronous
|
|
101
|
+
*/
|
|
102
|
+
export function removeBuilder(id) {
|
|
103
|
+
const db = getDb();
|
|
104
|
+
db.prepare('DELETE FROM builders WHERE id = ?').run(id);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get a single builder by ID
|
|
108
|
+
*/
|
|
109
|
+
export function getBuilder(id) {
|
|
110
|
+
const db = getDb();
|
|
111
|
+
const row = db.prepare('SELECT * FROM builders WHERE id = ?').get(id);
|
|
112
|
+
return row ? dbBuilderToBuilder(row) : null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get all builders
|
|
116
|
+
*/
|
|
117
|
+
export function getBuilders() {
|
|
118
|
+
const db = getDb();
|
|
119
|
+
const rows = db.prepare('SELECT * FROM builders ORDER BY started_at').all();
|
|
120
|
+
return rows.map(dbBuilderToBuilder);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get builders by status
|
|
124
|
+
*/
|
|
125
|
+
export function getBuildersByStatus(status) {
|
|
126
|
+
const db = getDb();
|
|
127
|
+
const rows = db.prepare('SELECT * FROM builders WHERE status = ? ORDER BY started_at').all(status);
|
|
128
|
+
return rows.map(dbBuilderToBuilder);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Add a utility terminal
|
|
132
|
+
* Note: This is now synchronous
|
|
133
|
+
*/
|
|
134
|
+
export function addUtil(util) {
|
|
135
|
+
const db = getDb();
|
|
136
|
+
db.prepare(`
|
|
137
|
+
INSERT INTO utils (id, name, port, pid, tmux_session)
|
|
138
|
+
VALUES (@id, @name, @port, @pid, @tmuxSession)
|
|
139
|
+
`).run({
|
|
140
|
+
id: util.id,
|
|
141
|
+
name: util.name,
|
|
142
|
+
port: util.port,
|
|
143
|
+
pid: util.pid,
|
|
144
|
+
tmuxSession: util.tmuxSession ?? null,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Remove a utility terminal
|
|
149
|
+
* Note: This is now synchronous
|
|
150
|
+
*/
|
|
151
|
+
export function removeUtil(id) {
|
|
152
|
+
const db = getDb();
|
|
153
|
+
db.prepare('DELETE FROM utils WHERE id = ?').run(id);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get all utility terminals
|
|
157
|
+
*/
|
|
158
|
+
export function getUtils() {
|
|
159
|
+
const db = getDb();
|
|
160
|
+
const rows = db.prepare('SELECT * FROM utils ORDER BY started_at').all();
|
|
161
|
+
return rows.map(dbUtilToUtilTerminal);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get a single utility terminal by ID
|
|
165
|
+
*/
|
|
166
|
+
export function getUtil(id) {
|
|
167
|
+
const db = getDb();
|
|
168
|
+
const row = db.prepare('SELECT * FROM utils WHERE id = ?').get(id);
|
|
169
|
+
return row ? dbUtilToUtilTerminal(row) : null;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Rename a builder
|
|
173
|
+
* Returns the old name if found, null if not found
|
|
174
|
+
*/
|
|
175
|
+
export function renameBuilder(id, newName) {
|
|
176
|
+
const db = getDb();
|
|
177
|
+
const builder = db.prepare('SELECT name FROM builders WHERE id = ?').get(id);
|
|
178
|
+
if (!builder)
|
|
179
|
+
return null;
|
|
180
|
+
db.prepare('UPDATE builders SET name = ? WHERE id = ?').run(newName, id);
|
|
181
|
+
return builder.name;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Rename a utility terminal
|
|
185
|
+
* Returns the old name if found, null if not found
|
|
186
|
+
*/
|
|
187
|
+
export function renameUtil(id, newName) {
|
|
188
|
+
const db = getDb();
|
|
189
|
+
const util = db.prepare('SELECT name FROM utils WHERE id = ?').get(id);
|
|
190
|
+
if (!util)
|
|
191
|
+
return null;
|
|
192
|
+
db.prepare('UPDATE utils SET name = ? WHERE id = ?').run(newName, id);
|
|
193
|
+
return util.name;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Add an annotation
|
|
197
|
+
* Note: This is now synchronous
|
|
198
|
+
*/
|
|
199
|
+
export function addAnnotation(annotation) {
|
|
200
|
+
const db = getDb();
|
|
201
|
+
db.prepare(`
|
|
202
|
+
INSERT INTO annotations (id, file, port, pid, parent_type, parent_id)
|
|
203
|
+
VALUES (@id, @file, @port, @pid, @parentType, @parentId)
|
|
204
|
+
`).run({
|
|
205
|
+
id: annotation.id,
|
|
206
|
+
file: annotation.file,
|
|
207
|
+
port: annotation.port,
|
|
208
|
+
pid: annotation.pid,
|
|
209
|
+
parentType: annotation.parent.type,
|
|
210
|
+
parentId: annotation.parent.id ?? null,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Remove an annotation
|
|
215
|
+
* Note: This is now synchronous
|
|
216
|
+
*/
|
|
217
|
+
export function removeAnnotation(id) {
|
|
218
|
+
const db = getDb();
|
|
219
|
+
db.prepare('DELETE FROM annotations WHERE id = ?').run(id);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get all annotations
|
|
223
|
+
*/
|
|
224
|
+
export function getAnnotations() {
|
|
225
|
+
const db = getDb();
|
|
226
|
+
const rows = db.prepare('SELECT * FROM annotations ORDER BY started_at').all();
|
|
227
|
+
return rows.map(dbAnnotationToAnnotation);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Clear all state
|
|
231
|
+
* Note: This is now synchronous
|
|
232
|
+
*/
|
|
233
|
+
export function clearState() {
|
|
234
|
+
const db = getDb();
|
|
235
|
+
const clear = db.transaction(() => {
|
|
236
|
+
db.prepare('DELETE FROM architect').run();
|
|
237
|
+
db.prepare('DELETE FROM builders').run();
|
|
238
|
+
db.prepare('DELETE FROM utils').run();
|
|
239
|
+
db.prepare('DELETE FROM annotations').run();
|
|
240
|
+
});
|
|
241
|
+
clear();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get architect state
|
|
245
|
+
*/
|
|
246
|
+
export function getArchitect() {
|
|
247
|
+
const db = getDb();
|
|
248
|
+
const row = db.prepare('SELECT * FROM architect WHERE id = 1').get();
|
|
249
|
+
return row ? dbArchitectToArchitectState(row) : null;
|
|
250
|
+
}
|
|
251
|
+
// Re-export closeDb for cleanup
|
|
252
|
+
export { closeDb };
|
|
253
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/agent-farm/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/tutorial/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-farm/tutorial/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple prompt utilities for the tutorial
|
|
3
|
+
* Uses readline for interactive input
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Ask a yes/no confirmation question
|
|
7
|
+
*/
|
|
8
|
+
export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* Ask for free-form text input
|
|
11
|
+
*/
|
|
12
|
+
export declare function prompt(message: string, defaultValue?: string): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Ask user to select from a list of options
|
|
15
|
+
*/
|
|
16
|
+
export declare function select(message: string, options: string[]): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Wait for user to press Enter to continue
|
|
19
|
+
*/
|
|
20
|
+
export declare function pressEnter(message?: string): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Print a section header
|
|
23
|
+
*/
|
|
24
|
+
export declare function section(title: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Print content text (with proper wrapping)
|
|
27
|
+
*/
|
|
28
|
+
export declare function content(text: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Print a bullet point
|
|
31
|
+
*/
|
|
32
|
+
export declare function bullet(text: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Print a numbered step
|
|
35
|
+
*/
|
|
36
|
+
export declare function step(num: number, text: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Print highlighted text (e.g., for commands)
|
|
39
|
+
*/
|
|
40
|
+
export declare function highlight(text: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Print a success message
|
|
43
|
+
*/
|
|
44
|
+
export declare function success(text: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Print a warning message
|
|
47
|
+
*/
|
|
48
|
+
export declare function warn(text: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* Print an info message
|
|
51
|
+
*/
|
|
52
|
+
export declare function info(text: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Print a code block
|
|
55
|
+
*/
|
|
56
|
+
export declare function code(text: string): void;
|
|
57
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/tutorial/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAepF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBhF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,SAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAStF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple prompt utilities for the tutorial
|
|
3
|
+
* Uses readline for interactive input
|
|
4
|
+
*/
|
|
5
|
+
import * as readline from 'node:readline';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
/**
|
|
8
|
+
* Create readline interface for prompts
|
|
9
|
+
*/
|
|
10
|
+
function createInterface() {
|
|
11
|
+
return readline.createInterface({
|
|
12
|
+
input: process.stdin,
|
|
13
|
+
output: process.stdout,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Ask a yes/no confirmation question
|
|
18
|
+
*/
|
|
19
|
+
export async function confirm(message, defaultValue = true) {
|
|
20
|
+
const rl = createInterface();
|
|
21
|
+
const hint = defaultValue ? '[Y/n]' : '[y/N]';
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
rl.question(`${message} ${chalk.gray(hint)} `, (answer) => {
|
|
24
|
+
rl.close();
|
|
25
|
+
const normalized = answer.trim().toLowerCase();
|
|
26
|
+
if (normalized === '') {
|
|
27
|
+
resolve(defaultValue);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
resolve(normalized === 'y' || normalized === 'yes');
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Ask for free-form text input
|
|
37
|
+
*/
|
|
38
|
+
export async function prompt(message, defaultValue) {
|
|
39
|
+
const rl = createInterface();
|
|
40
|
+
const hint = defaultValue ? chalk.gray(` [${defaultValue}]`) : '';
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
rl.question(`${message}${hint}: `, (answer) => {
|
|
43
|
+
rl.close();
|
|
44
|
+
const value = answer.trim();
|
|
45
|
+
resolve(value || defaultValue || '');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ask user to select from a list of options
|
|
51
|
+
*/
|
|
52
|
+
export async function select(message, options) {
|
|
53
|
+
const rl = createInterface();
|
|
54
|
+
console.log(message);
|
|
55
|
+
options.forEach((opt, i) => {
|
|
56
|
+
console.log(` ${chalk.cyan(`${i + 1}.`)} ${opt}`);
|
|
57
|
+
});
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
rl.question(chalk.gray('Enter number: '), (answer) => {
|
|
60
|
+
rl.close();
|
|
61
|
+
const index = parseInt(answer.trim(), 10) - 1;
|
|
62
|
+
if (index >= 0 && index < options.length) {
|
|
63
|
+
resolve(options[index]);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Default to first option on invalid input
|
|
67
|
+
resolve(options[0]);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Wait for user to press Enter to continue
|
|
74
|
+
*/
|
|
75
|
+
export async function pressEnter(message = 'Press Enter to continue...') {
|
|
76
|
+
const rl = createInterface();
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
rl.question(chalk.gray(message), () => {
|
|
79
|
+
rl.close();
|
|
80
|
+
resolve();
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Print a section header
|
|
86
|
+
*/
|
|
87
|
+
export function section(title) {
|
|
88
|
+
console.log();
|
|
89
|
+
console.log(chalk.bold.cyan('━'.repeat(50)));
|
|
90
|
+
console.log(chalk.bold.cyan(` ${title}`));
|
|
91
|
+
console.log(chalk.bold.cyan('━'.repeat(50)));
|
|
92
|
+
console.log();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Print content text (with proper wrapping)
|
|
96
|
+
*/
|
|
97
|
+
export function content(text) {
|
|
98
|
+
console.log(text);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Print a bullet point
|
|
102
|
+
*/
|
|
103
|
+
export function bullet(text) {
|
|
104
|
+
console.log(` ${chalk.gray('•')} ${text}`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Print a numbered step
|
|
108
|
+
*/
|
|
109
|
+
export function step(num, text) {
|
|
110
|
+
console.log(` ${chalk.cyan(`${num}.`)} ${text}`);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Print highlighted text (e.g., for commands)
|
|
114
|
+
*/
|
|
115
|
+
export function highlight(text) {
|
|
116
|
+
console.log(chalk.yellow(` ${text}`));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Print a success message
|
|
120
|
+
*/
|
|
121
|
+
export function success(text) {
|
|
122
|
+
console.log(chalk.green(` ✓ ${text}`));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Print a warning message
|
|
126
|
+
*/
|
|
127
|
+
export function warn(text) {
|
|
128
|
+
console.log(chalk.yellow(` ⚠ ${text}`));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Print an info message
|
|
132
|
+
*/
|
|
133
|
+
export function info(text) {
|
|
134
|
+
console.log(chalk.blue(` ℹ ${text}`));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Print a code block
|
|
138
|
+
*/
|
|
139
|
+
export function code(text) {
|
|
140
|
+
const lines = text.split('\n');
|
|
141
|
+
console.log(chalk.gray(' ┌' + '─'.repeat(48)));
|
|
142
|
+
for (const line of lines) {
|
|
143
|
+
console.log(chalk.gray(' │ ') + chalk.white(line));
|
|
144
|
+
}
|
|
145
|
+
console.log(chalk.gray(' └' + '─'.repeat(48)));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agent-farm/tutorial/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tutorial step runner infrastructure
|
|
3
|
+
* Manages step execution, state, and progress
|
|
4
|
+
*/
|
|
5
|
+
import type { TutorialState } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detected project type
|
|
8
|
+
*/
|
|
9
|
+
export type ProjectType = 'nodejs' | 'python' | 'other';
|
|
10
|
+
/**
|
|
11
|
+
* Context passed to each step function
|
|
12
|
+
*/
|
|
13
|
+
export interface StepContext {
|
|
14
|
+
state: TutorialState;
|
|
15
|
+
projectPath: string;
|
|
16
|
+
projectName: string;
|
|
17
|
+
projectType: ProjectType;
|
|
18
|
+
hasGit: boolean;
|
|
19
|
+
hasCodev: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result returned by each step
|
|
23
|
+
*/
|
|
24
|
+
export interface StepResult {
|
|
25
|
+
status: 'completed' | 'skipped' | 'aborted';
|
|
26
|
+
responses?: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Step function signature
|
|
30
|
+
*/
|
|
31
|
+
export type StepFunction = (ctx: StepContext) => Promise<StepResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Step definition
|
|
34
|
+
*/
|
|
35
|
+
export interface Step {
|
|
36
|
+
id: string;
|
|
37
|
+
title: string;
|
|
38
|
+
run: StepFunction;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Show tutorial status/progress
|
|
42
|
+
*/
|
|
43
|
+
export declare function showStatus(steps: Step[]): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Skip to the next step
|
|
46
|
+
*/
|
|
47
|
+
export declare function skipCurrentStep(steps: Step[]): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Run the tutorial from current step
|
|
50
|
+
*/
|
|
51
|
+
export declare function runTutorial(steps: Step[]): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/tutorial/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,YAAY,CAAC;CACnB;AAgED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC7D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BlE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqF9D"}
|