orbitmap 0.3.0 → 0.4.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 (174) hide show
  1. package/README.md +546 -212
  2. package/dist/adapters/cloud.d.ts +367 -0
  3. package/dist/adapters/cloud.js +582 -0
  4. package/dist/adapters/cloud.js.map +1 -0
  5. package/dist/adapters/factory.d.ts +15 -0
  6. package/dist/adapters/factory.js +31 -0
  7. package/dist/adapters/factory.js.map +1 -0
  8. package/dist/adapters/local/adapter.d.ts +351 -0
  9. package/dist/adapters/local/adapter.js +346 -0
  10. package/dist/adapters/local/adapter.js.map +1 -0
  11. package/dist/adapters/local/context.d.ts +112 -0
  12. package/dist/adapters/local/context.js +137 -0
  13. package/dist/adapters/local/context.js.map +1 -0
  14. package/dist/adapters/local/entities/documents.d.ts +85 -0
  15. package/dist/adapters/local/entities/documents.js +251 -0
  16. package/dist/adapters/local/entities/documents.js.map +1 -0
  17. package/dist/adapters/local/entities/planning.d.ts +108 -0
  18. package/dist/adapters/local/entities/planning.js +540 -0
  19. package/dist/adapters/local/entities/planning.js.map +1 -0
  20. package/dist/adapters/local/entities/tasks.d.ts +95 -0
  21. package/dist/adapters/local/entities/tasks.js +442 -0
  22. package/dist/adapters/local/entities/tasks.js.map +1 -0
  23. package/dist/adapters/local/entities/work-items.d.ts +110 -0
  24. package/dist/adapters/local/entities/work-items.js +623 -0
  25. package/dist/adapters/local/entities/work-items.js.map +1 -0
  26. package/dist/adapters/local/rules.d.ts +172 -0
  27. package/dist/adapters/local/rules.js +319 -0
  28. package/dist/adapters/local/rules.js.map +1 -0
  29. package/dist/adapters/local/shapes.d.ts +209 -0
  30. package/dist/adapters/local/shapes.js +558 -0
  31. package/dist/adapters/local/shapes.js.map +1 -0
  32. package/dist/adapters/local/store.d.ts +200 -0
  33. package/dist/adapters/local/store.js +665 -0
  34. package/dist/adapters/local/store.js.map +1 -0
  35. package/dist/adapters/local/types.d.ts +226 -0
  36. package/dist/adapters/local/types.js +41 -0
  37. package/dist/adapters/local/types.js.map +1 -0
  38. package/dist/adapters/types.d.ts +332 -0
  39. package/dist/adapters/types.js +2 -0
  40. package/dist/adapters/types.js.map +1 -0
  41. package/dist/agent-instructions.d.ts +25 -9
  42. package/dist/agent-instructions.js +285 -237
  43. package/dist/agent-instructions.js.map +1 -1
  44. package/dist/api-client.d.ts +8 -239
  45. package/dist/api-client.js +8 -403
  46. package/dist/api-client.js.map +1 -1
  47. package/dist/commands/agents.d.ts +1 -1
  48. package/dist/commands/agents.js +10 -10
  49. package/dist/commands/agents.js.map +1 -1
  50. package/dist/commands/areas.d.ts +3 -0
  51. package/dist/commands/areas.js +29 -0
  52. package/dist/commands/areas.js.map +1 -0
  53. package/dist/commands/assign.d.ts +3 -2
  54. package/dist/commands/assign.js +52 -15
  55. package/dist/commands/assign.js.map +1 -1
  56. package/dist/commands/context.d.ts +1 -1
  57. package/dist/commands/context.js +18 -12
  58. package/dist/commands/context.js.map +1 -1
  59. package/dist/commands/create-area.d.ts +7 -0
  60. package/dist/commands/create-area.js +29 -0
  61. package/dist/commands/create-area.js.map +1 -0
  62. package/dist/commands/create.d.ts +3 -1
  63. package/dist/commands/create.js +5 -8
  64. package/dist/commands/create.js.map +1 -1
  65. package/dist/commands/dep.d.ts +2 -2
  66. package/dist/commands/dep.js +3 -3
  67. package/dist/commands/dep.js.map +1 -1
  68. package/dist/commands/doc-import.d.ts +1 -1
  69. package/dist/commands/doc-import.js +2 -2
  70. package/dist/commands/doc-import.js.map +1 -1
  71. package/dist/commands/doc-patch.d.ts +1 -1
  72. package/dist/commands/doc-patch.js +2 -2
  73. package/dist/commands/doc-patch.js.map +1 -1
  74. package/dist/commands/doc-share.d.ts +6 -6
  75. package/dist/commands/doc-share.js +13 -13
  76. package/dist/commands/doc-share.js.map +1 -1
  77. package/dist/commands/doc-update.d.ts +1 -1
  78. package/dist/commands/doc-update.js +2 -2
  79. package/dist/commands/doc-update.js.map +1 -1
  80. package/dist/commands/doc.d.ts +1 -1
  81. package/dist/commands/doc.js +5 -4
  82. package/dist/commands/doc.js.map +1 -1
  83. package/dist/commands/docs-cache.d.ts +2 -2
  84. package/dist/commands/docs-cache.js +3 -3
  85. package/dist/commands/docs-cache.js.map +1 -1
  86. package/dist/commands/docs.d.ts +1 -1
  87. package/dist/commands/docs.js +2 -2
  88. package/dist/commands/docs.js.map +1 -1
  89. package/dist/commands/get.d.ts +1 -1
  90. package/dist/commands/get.js +43 -3
  91. package/dist/commands/get.js.map +1 -1
  92. package/dist/commands/ideas.d.ts +4 -4
  93. package/dist/commands/ideas.js +6 -11
  94. package/dist/commands/ideas.js.map +1 -1
  95. package/dist/commands/init.d.ts +45 -3
  96. package/dist/commands/init.js +452 -104
  97. package/dist/commands/init.js.map +1 -1
  98. package/dist/commands/intent.d.ts +41 -0
  99. package/dist/commands/intent.js +237 -0
  100. package/dist/commands/intent.js.map +1 -0
  101. package/dist/commands/issues.d.ts +6 -5
  102. package/dist/commands/issues.js +8 -12
  103. package/dist/commands/issues.js.map +1 -1
  104. package/dist/commands/log.d.ts +1 -1
  105. package/dist/commands/log.js +2 -2
  106. package/dist/commands/log.js.map +1 -1
  107. package/dist/commands/mission.d.ts +42 -0
  108. package/dist/commands/mission.js +219 -0
  109. package/dist/commands/mission.js.map +1 -0
  110. package/dist/commands/orbit.d.ts +40 -3
  111. package/dist/commands/orbit.js +231 -58
  112. package/dist/commands/orbit.js.map +1 -1
  113. package/dist/commands/overview.d.ts +2 -2
  114. package/dist/commands/overview.js +25 -28
  115. package/dist/commands/overview.js.map +1 -1
  116. package/dist/commands/setup-agent.d.ts +27 -0
  117. package/dist/commands/setup-agent.js +85 -30
  118. package/dist/commands/setup-agent.js.map +1 -1
  119. package/dist/commands/setup-mcp.d.ts +1 -1
  120. package/dist/commands/setup-mcp.js +20 -49
  121. package/dist/commands/setup-mcp.js.map +1 -1
  122. package/dist/commands/start.d.ts +1 -1
  123. package/dist/commands/start.js +2 -2
  124. package/dist/commands/start.js.map +1 -1
  125. package/dist/commands/status.d.ts +2 -1
  126. package/dist/commands/status.js +3 -3
  127. package/dist/commands/status.js.map +1 -1
  128. package/dist/commands/subtask.d.ts +1 -1
  129. package/dist/commands/subtask.js +2 -2
  130. package/dist/commands/subtask.js.map +1 -1
  131. package/dist/commands/task-edit-content.d.ts +1 -1
  132. package/dist/commands/task-edit-content.js +2 -2
  133. package/dist/commands/task-edit-content.js.map +1 -1
  134. package/dist/commands/task.d.ts +10 -3
  135. package/dist/commands/task.js +19 -21
  136. package/dist/commands/task.js.map +1 -1
  137. package/dist/commands/tasks.d.ts +1 -1
  138. package/dist/commands/tasks.js +2 -2
  139. package/dist/commands/tasks.js.map +1 -1
  140. package/dist/commands/vibes.d.ts +4 -4
  141. package/dist/commands/vibes.js +5 -5
  142. package/dist/commands/vibes.js.map +1 -1
  143. package/dist/config.d.ts +69 -9
  144. package/dist/config.js +206 -23
  145. package/dist/config.js.map +1 -1
  146. package/dist/doc-cache.d.ts +23 -3
  147. package/dist/doc-cache.js +72 -12
  148. package/dist/doc-cache.js.map +1 -1
  149. package/dist/errors.d.ts +19 -2
  150. package/dist/errors.js +35 -0
  151. package/dist/errors.js.map +1 -1
  152. package/dist/id-resolve.d.ts +61 -0
  153. package/dist/id-resolve.js +87 -0
  154. package/dist/id-resolve.js.map +1 -0
  155. package/dist/index.js +477 -104
  156. package/dist/index.js.map +1 -1
  157. package/dist/mcp-config.d.ts +36 -0
  158. package/dist/mcp-config.js +51 -0
  159. package/dist/mcp-config.js.map +1 -0
  160. package/dist/oauth.d.ts +8 -0
  161. package/dist/oauth.js +54 -15
  162. package/dist/oauth.js.map +1 -1
  163. package/dist/output.js +7 -2
  164. package/dist/output.js.map +1 -1
  165. package/dist/paths.d.ts +97 -0
  166. package/dist/paths.js +178 -0
  167. package/dist/paths.js.map +1 -0
  168. package/dist/project-config.d.ts +75 -0
  169. package/dist/project-config.js +55 -0
  170. package/dist/project-config.js.map +1 -0
  171. package/dist/workspace-resolve.d.ts +158 -0
  172. package/dist/workspace-resolve.js +284 -0
  173. package/dist/workspace-resolve.js.map +1 -0
  174. package/package.json +53 -50
@@ -0,0 +1,558 @@
1
+ /**
2
+ * Envelope builders for local mode (spec §2.2).
3
+ *
4
+ * Everything the LocalAdapter returns is produced here, byte-shape-compatible with the
5
+ * Agent API envelopes the golden fixtures in `tests/contract/fixtures/` describe:
6
+ * same field names, same nesting, same enums. Fields the local store cannot know
7
+ * (server-only concepts) are filled with the stable placeholders of §2.2 — never omitted.
8
+ *
9
+ * Pure functions only: no file I/O, no validation (that is `rules.ts`).
10
+ */
11
+ import { LOCAL_AGENT_ID, LOCAL_AGENT_INTRODUCTION, LOCAL_AGENT_NAME, LOCAL_AGENT_SLUG, LOCAL_CREATED_BY, LOCAL_MEMBER_ROLE, LOCAL_USER_EMAIL, LOCAL_USER_ID, LOCAL_USER_NAME, } from './context.js';
12
+ // ── Entity numbers ──────────────────────────────────────────────────────────
13
+ /**
14
+ * The API splits an entity number into `task_number` (the bare code) and
15
+ * `display_number` (`TS-<code>`); locally we store the prefixed form.
16
+ */
17
+ export function stripEntityPrefix(entityNumber) {
18
+ return entityNumber.replace(/^[A-Za-z]{2}-/, '');
19
+ }
20
+ // ── Identity ────────────────────────────────────────────────────────────────
21
+ /** The implicit local agent, in the `/context` agent shape. */
22
+ export function agentShape() {
23
+ return {
24
+ id: LOCAL_AGENT_ID,
25
+ name: LOCAL_AGENT_NAME,
26
+ slug: LOCAL_AGENT_SLUG,
27
+ introduction: LOCAL_AGENT_INTRODUCTION,
28
+ };
29
+ }
30
+ /** Workspace as embedded in `areas` list items. */
31
+ export function workspaceShape(workspace) {
32
+ return {
33
+ id: workspace.workspace_id,
34
+ name: workspace.name,
35
+ slug: workspace.slug,
36
+ };
37
+ }
38
+ /** Workspace as embedded in the task-detail `area` block (adds `docs_tenant_id`). */
39
+ export function workspaceShapeWithTenant(workspace) {
40
+ return { ...workspaceShape(workspace), docs_tenant_id: null };
41
+ }
42
+ // ── Areas ───────────────────────────────────────────────────────────────────
43
+ /** Area block of `/context`. */
44
+ export function contextAreaShape(area) {
45
+ return {
46
+ id: area.area_id,
47
+ name: area.name,
48
+ slug: area.slug,
49
+ description: area.description || null,
50
+ git_url: area.git_url ?? null,
51
+ default_branch: area.default_branch,
52
+ };
53
+ }
54
+ /** One row of the `areas` list. */
55
+ export function areaListItem(area, workspace, current) {
56
+ return {
57
+ id: area.area_id,
58
+ name: area.name,
59
+ slug: area.slug,
60
+ description: area.description || null,
61
+ role: LOCAL_MEMBER_ROLE,
62
+ workspace: workspaceShape(workspace),
63
+ _current: current,
64
+ };
65
+ }
66
+ /** `GET /areas` envelope. */
67
+ export function areasListEnvelope(areas, workspace, currentSlug) {
68
+ const data = areas.map((area) => areaListItem(area, workspace, area.slug === currentSlug));
69
+ return { data, meta: { count: data.length } };
70
+ }
71
+ /** `POST /areas` envelope (create-area). */
72
+ export function areaCreateEnvelope(area, workspace) {
73
+ return {
74
+ data: {
75
+ id: area.area_id,
76
+ name: area.name,
77
+ slug: area.slug,
78
+ description: area.description || null,
79
+ workspace_id: workspace.workspace_id,
80
+ default_branch: area.default_branch,
81
+ created_by_type: 'agent',
82
+ created_by_agent_id: LOCAL_AGENT_ID,
83
+ created_at: area.created_at,
84
+ },
85
+ };
86
+ }
87
+ /** `GET /areas/{id}/members` envelope — exactly `me` + `local-agent` (spec §1). */
88
+ export function areaMembersEnvelope() {
89
+ return {
90
+ data: {
91
+ agents: [
92
+ {
93
+ id: LOCAL_AGENT_ID,
94
+ name: LOCAL_AGENT_NAME,
95
+ slug: LOCAL_AGENT_SLUG,
96
+ role: LOCAL_MEMBER_ROLE,
97
+ },
98
+ ],
99
+ users: [
100
+ {
101
+ id: LOCAL_USER_ID,
102
+ name: LOCAL_USER_NAME,
103
+ email: LOCAL_USER_EMAIL,
104
+ role: LOCAL_MEMBER_ROLE,
105
+ },
106
+ ],
107
+ },
108
+ meta: { agents_count: 1, users_count: 1 },
109
+ };
110
+ }
111
+ /** Task counts by status, plus `total` — the `task_stats` block of the overview. */
112
+ export function taskStats(tasks) {
113
+ const stats = {
114
+ backlog: 0,
115
+ todo: 0,
116
+ in_progress: 0,
117
+ in_review: 0,
118
+ review_changes: 0,
119
+ done: 0,
120
+ blocked: 0,
121
+ total: 0,
122
+ };
123
+ for (const task of tasks) {
124
+ if (typeof stats[task.status] === 'number')
125
+ stats[task.status] += 1;
126
+ stats.total += 1;
127
+ }
128
+ return stats;
129
+ }
130
+ /** `GET /areas/{id}/overview` envelope. */
131
+ export function areaOverviewEnvelope(area, tasks) {
132
+ return {
133
+ data: {
134
+ area: {
135
+ id: area.area_id,
136
+ name: area.name,
137
+ description: area.description || null,
138
+ git_url: area.git_url ?? null,
139
+ default_branch: area.default_branch,
140
+ },
141
+ task_stats: taskStats(tasks),
142
+ },
143
+ };
144
+ }
145
+ // ── Documents ───────────────────────────────────────────────────────────────
146
+ /** Number of `##` headings in a document body (the API's `sections_count`). */
147
+ export function countSections(body) {
148
+ return (body.match(/^##[ \t]+\S/gm) ?? []).length;
149
+ }
150
+ /** Document entry as embedded in `/context` and task detail. */
151
+ export function documentEntry(document, body) {
152
+ return {
153
+ id: document.id,
154
+ title: document.title,
155
+ context: document.context ?? null,
156
+ slug: document.slug,
157
+ type: document.type,
158
+ _shared: false,
159
+ _workspace: true,
160
+ sections_count: countSections(body),
161
+ };
162
+ }
163
+ /** `GET /context` envelope. */
164
+ export function contextEnvelope(input) {
165
+ return {
166
+ data: {
167
+ agent: agentShape(),
168
+ area: input.area ? contextAreaShape(input.area) : null,
169
+ active_mission: input.activeMission
170
+ ? {
171
+ id: input.activeMission.id,
172
+ display_number: input.activeMission.mission_number,
173
+ name: input.activeMission.name,
174
+ status: input.activeMission.status,
175
+ }
176
+ : null,
177
+ tasks: input.tasks.map((task) => ({
178
+ id: task.id,
179
+ title: task.title,
180
+ status: task.status,
181
+ priority: task.priority,
182
+ task_number: stripEntityPrefix(task.task_number),
183
+ display_number: task.task_number,
184
+ })),
185
+ documents: input.documents,
186
+ },
187
+ };
188
+ }
189
+ // ── Tasks ───────────────────────────────────────────────────────────────────
190
+ /** One row of `GET /tasks`. */
191
+ export function taskListItem(task, description) {
192
+ return {
193
+ id: task.id,
194
+ title: task.title,
195
+ description,
196
+ status: task.status,
197
+ priority: task.priority,
198
+ delivery_status: task.delivery_status ?? null,
199
+ branch_name: task.branch_name ?? null,
200
+ sort_order: task.sort_order ?? 0,
201
+ estimated_effort: task.estimated_effort ?? null,
202
+ created_at: task.created_at,
203
+ task_number: stripEntityPrefix(task.task_number),
204
+ display_number: task.task_number,
205
+ orbit_id: null,
206
+ orbit_name: null,
207
+ orbit_slug: null,
208
+ intent_id: task.intent ?? null,
209
+ mission_id: task.mission ?? null,
210
+ blocked_by: [...(task.depends_on ?? [])],
211
+ };
212
+ }
213
+ /** `GET /tasks` envelope. */
214
+ export function tasksListEnvelope(items) {
215
+ return { data: items, meta: { count: items.length } };
216
+ }
217
+ /** The `task` block of the task-detail envelope. */
218
+ export function taskShape(task, area, description) {
219
+ return {
220
+ id: task.id,
221
+ area_id: area.area_id,
222
+ orbit_id: null,
223
+ orbit_name: null,
224
+ orbit_slug: null,
225
+ intent_id: task.intent ?? null,
226
+ mission_id: task.mission ?? null,
227
+ parent_task_id: task.parent_task ?? null,
228
+ agent_id: task.assigned_agent ?? null,
229
+ assigned_user_id: task.assigned_user ? LOCAL_USER_ID : null,
230
+ title: task.title,
231
+ description,
232
+ status: task.status,
233
+ priority: task.priority,
234
+ delivery_status: task.delivery_status ?? null,
235
+ agent_instructions: task.agent_instructions ?? null,
236
+ branch_name: task.branch_name ?? null,
237
+ sort_order: task.sort_order ?? 0,
238
+ estimated_effort: task.estimated_effort ?? null,
239
+ created_at: task.created_at,
240
+ updated_at: task.updated_at,
241
+ task_number: stripEntityPrefix(task.task_number),
242
+ display_number: task.task_number,
243
+ };
244
+ }
245
+ /** Compact task shape used for subtasks and dependency references. */
246
+ export function taskSummary(task) {
247
+ return {
248
+ id: task.id,
249
+ title: task.title,
250
+ status: task.status,
251
+ priority: task.priority,
252
+ sort_order: task.sort_order ?? 0,
253
+ task_number: stripEntityPrefix(task.task_number),
254
+ display_number: task.task_number,
255
+ };
256
+ }
257
+ /** `data` of `GET /tasks/{id}` — also the payload `start` returns. */
258
+ export function taskDetailData(input) {
259
+ return {
260
+ task: taskShape(input.task, input.area, input.description),
261
+ logs: input.logs.map((entry, index) => workLogEntryShape(entry, input.task, index)),
262
+ subtasks: input.subtasks.map(taskSummary),
263
+ area: {
264
+ name: input.area.name,
265
+ git_url: input.area.git_url ?? null,
266
+ default_branch: input.area.default_branch,
267
+ agent_instructions_template: input.area.agent_instructions_template ?? null,
268
+ workspace: workspaceShapeWithTenant(input.workspace),
269
+ },
270
+ dependencies: {
271
+ depends_on: input.dependsOn.map(taskSummary),
272
+ blocks: input.blocks.map(taskSummary),
273
+ related: input.related.map(taskSummary),
274
+ },
275
+ available_docs: [],
276
+ workspace_knowledge: [...(input.documents ?? [])],
277
+ orbit_docs: [],
278
+ };
279
+ }
280
+ /** `GET /tasks/{id}` envelope. */
281
+ export function taskDetailEnvelope(input) {
282
+ return { data: taskDetailData(input) };
283
+ }
284
+ /** `POST /tasks` envelope. */
285
+ export function taskCreateEnvelope(task, area, options = {}) {
286
+ return {
287
+ data: {
288
+ task_id: task.id,
289
+ area_id: area.area_id,
290
+ title: task.title,
291
+ status: task.status,
292
+ priority: task.priority,
293
+ task_number: stripEntityPrefix(task.task_number),
294
+ display_number: task.task_number,
295
+ agent_id: task.assigned_agent ?? null,
296
+ intent_id: task.intent ?? null,
297
+ created: true,
298
+ source_issue_linked: Boolean(options.sourceIssueNumber),
299
+ source_issue_number: options.sourceIssueNumber ?? null,
300
+ },
301
+ };
302
+ }
303
+ /** `PATCH /tasks/{id}/status` envelope. */
304
+ export function taskStatusEnvelope(task) {
305
+ return {
306
+ data: {
307
+ task_id: task.id,
308
+ status: task.status,
309
+ delivery_status: task.delivery_status ?? null,
310
+ updated: true,
311
+ },
312
+ };
313
+ }
314
+ /** `POST /tasks/{id}/subtasks` envelope. */
315
+ export function subtasksEnvelope(parent, subtasks) {
316
+ return {
317
+ data: {
318
+ parent_task_id: parent.id,
319
+ created_subtasks: subtasks.map((task) => ({
320
+ id: task.id,
321
+ title: task.title,
322
+ status: task.status,
323
+ agent_id: task.assigned_agent ?? null,
324
+ sort_order: task.sort_order ?? 0,
325
+ task_number: stripEntityPrefix(task.task_number),
326
+ display_number: task.task_number,
327
+ })),
328
+ },
329
+ };
330
+ }
331
+ /** `PATCH /tasks/{id}/content` envelope. */
332
+ export function taskContentEnvelope(task, updatedFields, description) {
333
+ return {
334
+ data: {
335
+ task_id: task.id,
336
+ updated_fields: [...updatedFields],
337
+ task: {
338
+ id: task.id,
339
+ title: task.title,
340
+ description,
341
+ agent_instructions: task.agent_instructions ?? null,
342
+ },
343
+ },
344
+ };
345
+ }
346
+ /** `POST /tasks/{id}/assign` envelope. */
347
+ export function assignTaskEnvelope(task) {
348
+ const isUser = Boolean(task.assigned_user);
349
+ return {
350
+ data: {
351
+ task_id: task.id,
352
+ agent_id: isUser ? null : task.assigned_agent ?? null,
353
+ agent_name: isUser || !task.assigned_agent ? null : LOCAL_AGENT_NAME,
354
+ user_id: isUser ? LOCAL_USER_ID : null,
355
+ user_name: isUser ? LOCAL_USER_NAME : null,
356
+ assigned: true,
357
+ },
358
+ };
359
+ }
360
+ /** `POST /assign` (generic item assignment) envelope. */
361
+ export function assignItemEnvelope(id, assignedAgent, assignedUser) {
362
+ return {
363
+ data: {
364
+ id,
365
+ assigned_agent_id: assignedAgent,
366
+ assigned_user_id: assignedUser ? LOCAL_USER_ID : null,
367
+ assigned: true,
368
+ },
369
+ };
370
+ }
371
+ /** `POST /tasks/{id}/dependencies` envelope. */
372
+ export function dependencyAddEnvelope(task, target, type, note) {
373
+ return {
374
+ data: {
375
+ task_id: task.id,
376
+ target_task_id: target.id,
377
+ type,
378
+ note,
379
+ created: true,
380
+ },
381
+ };
382
+ }
383
+ /** `DELETE /tasks/{id}/dependencies/{target}` envelope. */
384
+ export function dependencyRemoveEnvelope(task, target, type) {
385
+ return {
386
+ data: {
387
+ task_id: task.id,
388
+ target_task_id: target.id,
389
+ type,
390
+ removed: true,
391
+ },
392
+ };
393
+ }
394
+ /** `POST /tasks/{id}/logs` envelope. */
395
+ export function logWorkEnvelope(logId, task, type) {
396
+ return {
397
+ data: {
398
+ log_id: logId,
399
+ task_id: task.id,
400
+ type,
401
+ logged: true,
402
+ },
403
+ };
404
+ }
405
+ const WORK_LOG_HEADING = '## Work Log';
406
+ const DESCRIPTION_HEADING = '## Description';
407
+ const WORK_LOG_NOTE = '<!-- Append-only. Written by `orbitmap log` only. One entry per call. -->';
408
+ const WORK_LOG_HEADING_RE = /^##[ \t]+work log[ \t]*$/i;
409
+ const DESCRIPTION_HEADING_RE = /^##[ \t]+description[ \t]*$/i;
410
+ const ENTRY_HEADING_RE = /^###[ \t]+(.*)$/;
411
+ /**
412
+ * Split a task body into its description text and the *raw* work-log section
413
+ * (starting at the `## Work Log` heading). The work-log slice is returned verbatim so
414
+ * rewrites never reflow existing entries (spec §4.5).
415
+ */
416
+ export function splitTaskBody(body) {
417
+ const lines = body.split(/\r?\n/);
418
+ const workLogIndex = lines.findIndex((line) => WORK_LOG_HEADING_RE.test(line));
419
+ const head = workLogIndex === -1 ? lines : lines.slice(0, workLogIndex);
420
+ const workLog = workLogIndex === -1 ? '' : lines.slice(workLogIndex).join('\n');
421
+ const descriptionStart = head.findIndex((line) => DESCRIPTION_HEADING_RE.test(line));
422
+ const descriptionLines = descriptionStart === -1 ? head : head.slice(descriptionStart + 1);
423
+ return { description: trimBlock(descriptionLines.join('\n')), workLog };
424
+ }
425
+ /** The task description, or `null` when the body carries none. */
426
+ export function parseDescription(body) {
427
+ const { description } = splitTaskBody(body);
428
+ return description.length > 0 ? description : null;
429
+ }
430
+ /** Parse the `## Work Log` section into entries, oldest first. */
431
+ export function parseWorkLog(body) {
432
+ const { workLog } = splitTaskBody(body);
433
+ if (workLog.length === 0)
434
+ return [];
435
+ const entries = [];
436
+ let current;
437
+ let buffer = [];
438
+ const flush = () => {
439
+ if (current) {
440
+ current.content = trimBlock(buffer.join('\n'));
441
+ entries.push(current);
442
+ }
443
+ buffer = [];
444
+ };
445
+ for (const line of workLog.split(/\r?\n/)) {
446
+ const heading = ENTRY_HEADING_RE.exec(line);
447
+ if (heading) {
448
+ flush();
449
+ current = parseEntryHeading(heading[1] ?? '');
450
+ continue;
451
+ }
452
+ if (current)
453
+ buffer.push(line);
454
+ }
455
+ flush();
456
+ return entries;
457
+ }
458
+ function parseEntryHeading(heading) {
459
+ const parts = heading
460
+ .split('·')
461
+ .map((part) => part.trim())
462
+ .filter((part) => part.length > 0);
463
+ return {
464
+ created_at: parts[0] ?? '',
465
+ type: parts[1] ?? 'note',
466
+ author: parts[2] ?? LOCAL_CREATED_BY,
467
+ content: '',
468
+ };
469
+ }
470
+ /** Build the initial body of a new task file. */
471
+ export function buildTaskBody(description) {
472
+ const text = (description ?? '').trim();
473
+ return `${DESCRIPTION_HEADING}\n\n${text}\n\n${WORK_LOG_HEADING}\n\n${WORK_LOG_NOTE}`;
474
+ }
475
+ /** Replace the description while preserving the work-log section byte-for-byte. */
476
+ export function replaceDescription(body, description) {
477
+ const { workLog } = splitTaskBody(body);
478
+ const head = `${DESCRIPTION_HEADING}\n\n${description.trim()}`;
479
+ return workLog.length > 0 ? `${head}\n\n${workLog}` : head;
480
+ }
481
+ /**
482
+ * Append one work-log entry. The existing body — including every earlier entry — is
483
+ * copied verbatim; only new bytes are added at the end (spec §4.5, append-only).
484
+ */
485
+ export function appendWorkLogEntry(body, entry) {
486
+ let next = body.replace(/\s+$/, '');
487
+ if (!next.split(/\r?\n/).some((line) => WORK_LOG_HEADING_RE.test(line))) {
488
+ next += `${next.length > 0 ? '\n\n' : ''}${WORK_LOG_HEADING}\n\n${WORK_LOG_NOTE}`;
489
+ }
490
+ const heading = `### ${entry.created_at} · ${entry.type} · ${entry.author}`;
491
+ return `${next}\n\n${heading}\n\n${entry.content.trim()}`;
492
+ }
493
+ /** Work-log entry in the API's `logs[]` shape. */
494
+ export function workLogEntryShape(entry, task, index) {
495
+ return {
496
+ id: `${task.task_number}-log-${index + 1}`,
497
+ type: entry.type,
498
+ content: entry.content,
499
+ metadata: {},
500
+ created_at: entry.created_at,
501
+ author: entry.author,
502
+ };
503
+ }
504
+ function trimBlock(text) {
505
+ return text.replace(/^(?:[ \t]*\r?\n)+/, '').replace(/\s+$/, '');
506
+ }
507
+ // ── Prompts ─────────────────────────────────────────────────────────────────
508
+ /** `GET /prompts/work-on-next-task` envelope, built from local records. */
509
+ export function workPromptEnvelope(area, task, description) {
510
+ const header = `You are **${LOCAL_AGENT_NAME}** working on area **${area.name}**.`;
511
+ if (!task) {
512
+ return {
513
+ data: {
514
+ content: `${header}\n\nNo pending tasks. All done!`,
515
+ has_task: false,
516
+ },
517
+ };
518
+ }
519
+ const content = `${header}\n\n` +
520
+ `## Next task: ${task.title}\n` +
521
+ `**ID:** ${task.task_number}\n` +
522
+ `**Priority:** ${task.priority}\n\n` +
523
+ `### Description\n${description ?? '(no description)'}\n\n` +
524
+ '### Steps\n' +
525
+ `1. Run \`orbitmap start ${task.task_number}\` to begin\n` +
526
+ '2. Create the git branch locally\n' +
527
+ '3. Read relevant documentation\n' +
528
+ '4. Implement the task\n' +
529
+ `5. Log your progress with \`orbitmap log ${task.task_number} "…" --type code_change\`\n` +
530
+ `6. When done, run \`orbitmap status ${task.task_number} in_review\`\n`;
531
+ return { data: { content, has_task: true } };
532
+ }
533
+ /** `GET /prompts/import-docs` envelope. */
534
+ export function importDocsPromptEnvelope(area) {
535
+ const content = `You are **${LOCAL_AGENT_NAME}** on area **${area.name}**.\n\n` +
536
+ '## Task: Import documentation\n\n' +
537
+ 'Please import Markdown files from the local `docs/` directory into OrbitMap.\n\n' +
538
+ 'For each `.md` file:\n' +
539
+ '1. Read its content\n' +
540
+ '2. Determine the document type (spec, architecture, api, guide, decision, changelog, other)\n' +
541
+ '3. Run `orbitmap doc-import <file> --title "…" --type <type>` for each file\n' +
542
+ '4. Report which files were imported successfully\n';
543
+ return { data: { content } };
544
+ }
545
+ // ── Planning helpers shared with sibling modules ────────────────────────────
546
+ /** The active mission of the workspace, or `null`. */
547
+ export function findActiveMission(missions) {
548
+ return missions.find((mission) => mission.status === 'active') ?? null;
549
+ }
550
+ /** Intent numbers, for reference validation (rules.ts rule 3). */
551
+ export function intentNumbers(intents) {
552
+ return intents.map((intent) => intent.intent_number);
553
+ }
554
+ /** Mission numbers, for reference validation (rules.ts rule 3). */
555
+ export function missionNumbers(missions) {
556
+ return missions.map((mission) => mission.mission_number);
557
+ }
558
+ //# sourceMappingURL=shapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../../src/adapters/local/shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AAUtB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,OAAO,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,+EAA+E;AAE/E,+DAA+D;AAC/D,MAAM,UAAU,UAAU;IAMxB,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,wBAAwB;KACvC,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,cAAc,CAAC,SAAwB;IAKrD,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,YAAY;QAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CAAC,SAAwB;IAM/D,OAAO,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,+EAA+E;AAE/E,gCAAgC;AAChC,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAQ7C,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,OAAO;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,YAAY,CAC1B,IAAc,EACd,SAAwB,EACxB,OAAgB;IAEhB,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,OAAO;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC;QACpC,QAAQ,EAAE,OAAO;KAClB,CAAC;AACJ,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,SAAwB,EACxB,WAAoB;IAEpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CACzD,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,SAAwB;IAExB,OAAO;QACL,IAAI,EAAE;YACJ,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YACrC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,OAAO;YACxB,mBAAmB,EAAE,cAAc;YACnC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,mBAAmB;IAOjC,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN;oBACE,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,iBAAiB;iBACxB;aACF;YACD,KAAK,EAAE;gBACL;oBACE,EAAE,EAAE,aAAa;oBACjB,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,gBAAgB;oBACvB,IAAI,EAAE,iBAAiB;iBACxB;aACF;SACF;QACD,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,SAAS,CAAC,KAA4B;IACpD,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;KACT,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,oBAAoB,CAClC,IAAc,EACd,KAA4B;IAE5B,OAAO;QACL,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,OAAO;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;gBAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;aACpC;YACD,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAC3B,QAAwB,EACxB,IAAY;IAEZ,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI;QACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC;KACpC,CAAC;AACJ,CAAC;AAYD,+BAA+B;AAC/B,MAAM,UAAU,eAAe,CAAC,KAAmB;IAGjD,OAAO;QACL,IAAI,EAAE;YACJ,KAAK,EAAE,UAAU,EAAE;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YACtD,cAAc,EAAE,KAAK,CAAC,aAAa;gBACjC,CAAC,CAAC;oBACE,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE;oBAC1B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc;oBAClD,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI;oBAC9B,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM;iBACnC;gBACH,CAAC,CAAC,IAAI;YACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;gBAChD,cAAc,EAAE,IAAI,CAAC,WAAW;aACjC,CAAC,CAAC;YACH,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,+BAA+B;AAC/B,MAAM,UAAU,YAAY,CAC1B,IAAgB,EAChB,WAA0B;IAE1B,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;QAC7C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;QAChC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;QAC/C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QAChD,cAAc,EAAE,IAAI,CAAC,WAAW;QAChC,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC9B,UAAU,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAChC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,iBAAiB,CAC/B,KAAqC;IAErC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;AACxD,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,SAAS,CACvB,IAAgB,EAChB,IAAc,EACd,WAA0B;IAE1B,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC9B,UAAU,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAChC,cAAc,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACxC,QAAQ,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;QACrC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;QAC7C,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;QACnD,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;QAChC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;QAC/C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QAChD,cAAc,EAAE,IAAI,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;QAChC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QAChD,cAAc,EAAE,IAAI,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAeD,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC;QAC1D,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnF,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QACzC,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;YACrB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;YACnC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc;YACzC,2BAA2B,EAAE,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,IAAI;YAC3E,SAAS,EAAE,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC;SACrD;QACD,YAAY,EAAE;YACZ,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;YACrC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;SACxC;QACD,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjD,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IAGvD,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,kBAAkB,CAChC,IAAgB,EAChB,IAAc,EACd,UAAiD,EAAE;IAEnD,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;YAChD,cAAc,EAAE,IAAI,CAAC,WAAW;YAChC,QAAQ,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;YACrC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;YAC9B,OAAO,EAAE,IAAI;YACb,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACvD,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI;SACvD;KACF,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IAGjD,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;YAC7C,OAAO,EAAE,IAAI;SACd;KACF,CAAC;AACJ,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,gBAAgB,CAC9B,MAAkB,EAClB,QAA+B;IAE/B,OAAO;QACL,IAAI,EAAE;YACJ,cAAc,EAAE,MAAM,CAAC,EAAE;YACzB,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;gBACrC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;gBAChC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;gBAChD,cAAc,EAAE,IAAI,CAAC,WAAW;aACjC,CAAC,CAAC;SACJ;KACF,CAAC;AACJ,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,mBAAmB,CACjC,IAAgB,EAChB,aAAgC,EAChC,WAA0B;IAE1B,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,cAAc,EAAE,CAAC,GAAG,aAAa,CAAC;YAClC,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW;gBACX,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;aACpD;SACF;KACF,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,kBAAkB,CAChC,IAAgB;IAEhB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI;YACrD,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;YACpE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;YACtC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;YAC1C,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAChC,EAAU,EACV,aAA4B,EAC5B,YAA2B;IAE3B,OAAO;QACL,IAAI,EAAE;YACJ,EAAE;YACF,iBAAiB,EAAE,aAAa;YAChC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;YACrD,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,qBAAqB,CACnC,IAAgB,EAChB,MAAkB,EAClB,IAAY,EACZ,IAAmB;IAEnB,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,cAAc,EAAE,MAAM,CAAC,EAAE;YACzB,IAAI;YACJ,IAAI;YACJ,OAAO,EAAE,IAAI;SACd;KACF,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,wBAAwB,CACtC,IAAgB,EAChB,MAAkB,EAClB,IAAY;IAEZ,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,cAAc,EAAE,MAAM,CAAC,EAAE;YACzB,IAAI;YACJ,OAAO,EAAE,IAAI;SACd;KACF,CAAC;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,IAAgB,EAChB,IAAY;IAEZ,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,IAAI;YACJ,MAAM,EAAE,IAAI;SACb;KACF,CAAC;AACJ,CAAC;AAYD,MAAM,gBAAgB,GAAG,aAAa,CAAC;AACvC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,aAAa,GACjB,2EAA2E,CAAC;AAC9E,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AACxD,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AAC9D,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IAIxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/E,MAAM,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhF,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,MAAM,gBAAgB,GACpB,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAEpE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1E,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAiC,CAAC;IACtC,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,GAAG,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM;QACxB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB;QACpC,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,WAA2B;IACvD,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,GAAG,mBAAmB,OAAO,IAAI,OAAO,gBAAgB,OAAO,aAAa,EAAE,CAAC;AACxF,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,WAAmB;IAClE,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,mBAAmB,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;IAC/D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAmB;IAClE,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,gBAAgB,OAAO,aAAa,EAAE,CAAC;IACpF,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IAC5E,OAAO,GAAG,IAAI,OAAO,OAAO,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5D,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,iBAAiB,CAC/B,KAAmB,EACnB,IAAgB,EAChB,KAAa;IAEb,OAAO;QACL,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,QAAQ,KAAK,GAAG,CAAC,EAAE;QAC1C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,+EAA+E;AAE/E,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,IAAuB,EACvB,WAA0B;IAE1B,MAAM,MAAM,GAAG,aAAa,gBAAgB,wBAAwB,IAAI,CAAC,IAAI,KAAK,CAAC;IAEnF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,GAAG,MAAM,iCAAiC;gBACnD,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,GAAG,MAAM,MAAM;QACf,iBAAiB,IAAI,CAAC,KAAK,IAAI;QAC/B,WAAW,IAAI,CAAC,WAAW,IAAI;QAC/B,iBAAiB,IAAI,CAAC,QAAQ,MAAM;QACpC,oBAAoB,WAAW,IAAI,kBAAkB,MAAM;QAC3D,aAAa;QACb,2BAA2B,IAAI,CAAC,WAAW,eAAe;QAC1D,oCAAoC;QACpC,kCAAkC;QAClC,yBAAyB;QACzB,4CAA4C,IAAI,CAAC,WAAW,6BAA6B;QACzF,uCAAuC,IAAI,CAAC,WAAW,gBAAgB,CAAC;IAE1E,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,wBAAwB,CAAC,IAAc;IAGrD,MAAM,OAAO,GACX,aAAa,gBAAgB,gBAAgB,IAAI,CAAC,IAAI,SAAS;QAC/D,mCAAmC;QACnC,kFAAkF;QAClF,wBAAwB;QACxB,uBAAuB;QACvB,+FAA+F;QAC/F,+EAA+E;QAC/E,oDAAoD,CAAC;IAEvD,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAE/E,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAC/B,QAAkC;IAElC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AACzE,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,OAAgC;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACvD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAAC,QAAkC;IAC/D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC3D,CAAC"}