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,623 @@
1
+ /**
2
+ * Local-mode issues, ideas and vibes (spec §4.6–§4.8, task T7).
3
+ *
4
+ * Conventions every function follows:
5
+ * - first parameter is the shared {@link LocalContext} (store, workspace, area slug);
6
+ * - the remaining parameters are exactly the `WorkspaceAdapter` method parameters;
7
+ * - the return value is the raw Agent API envelope (`{ data: … }`, plus `meta` where the
8
+ * fixtures have one), built with helpers from `../shapes.js`;
9
+ * - validation goes through `../rules.js`, never re-implemented here.
10
+ *
11
+ * Envelope field names/nesting mirror the golden fixtures
12
+ * (`issue-create`, `issue-show`, `issues-list`, `idea-create`, `ideas-list`,
13
+ * `vibe-show`, `vibes-list`); server-only fields carry the §2.2 placeholders.
14
+ */
15
+ import { OrbitMapAPIError } from '../../../errors.js';
16
+ import { LOCAL_AGENT_ID, LOCAL_AGENT_NAME, LOCAL_CREATED_BY, LOCAL_USER_ID, LOCAL_USER_NAME, newId, requireAreaSlug, } from '../context.js';
17
+ import { assertIdeaStatus, assertIntentExclusiveMission, assertIssueSeverity, assertIssueStatus, assertPriority, assertReferencesResolve, assertVibeType, validationError, } from '../rules.js';
18
+ import { stripEntityPrefix } from '../shapes.js';
19
+ import { nowIso } from '../store.js';
20
+ /** Statuses that make an issue "resolved" (they carry a resolver). */
21
+ const RESOLVED_STATUSES = ['resolved', 'wont_fix', 'duplicate'];
22
+ // ── Body sections (`## Description` / `## Resolution`, spec §4.6) ────────────
23
+ const SECTION_HEADING_RE = /^##[ \t]+(.+?)[ \t]*$/;
24
+ /** Text of one `## <heading>` section, or `null` when absent/empty. */
25
+ function parseSection(body, heading) {
26
+ const wanted = heading.trim().toLowerCase();
27
+ let capturing = false;
28
+ const buffer = [];
29
+ for (const line of body.split(/\r?\n/)) {
30
+ const match = SECTION_HEADING_RE.exec(line);
31
+ if (match) {
32
+ if (capturing)
33
+ break;
34
+ capturing = (match[1] ?? '').trim().toLowerCase() === wanted;
35
+ continue;
36
+ }
37
+ if (capturing)
38
+ buffer.push(line);
39
+ }
40
+ const text = buffer.join('\n').replace(/^(?:[ \t]*\r?\n)+/, '').replace(/\s+$/, '');
41
+ return text.length > 0 ? text : null;
42
+ }
43
+ /** Build an issue body from its description and (optional) resolution. */
44
+ function buildIssueBody(description, resolution) {
45
+ let body = `## Description\n\n${(description ?? '').trim()}`;
46
+ const text = (resolution ?? '').trim();
47
+ if (text.length > 0)
48
+ body += `\n\n## Resolution\n\n${text}`;
49
+ return body;
50
+ }
51
+ // ── Identity helpers ────────────────────────────────────────────────────────
52
+ /** `agent:local-agent` / `user:me` → the API's `{ type, id, name }` author block. */
53
+ function authorShape(value) {
54
+ if (!value)
55
+ return null;
56
+ if (value.startsWith('user:')) {
57
+ return { type: 'user', id: LOCAL_USER_ID, name: LOCAL_USER_NAME };
58
+ }
59
+ return { type: 'agent', id: LOCAL_AGENT_ID, name: LOCAL_AGENT_NAME };
60
+ }
61
+ /** `reported_by_agent_id` (null when the record was reported by the user). */
62
+ function agentIdOf(value) {
63
+ const author = authorShape(value);
64
+ return author && author.type === 'agent' ? LOCAL_AGENT_ID : null;
65
+ }
66
+ /** `reported_by_user_id` (null when the record was reported by an agent). */
67
+ function userIdOf(value) {
68
+ const author = authorShape(value);
69
+ return author && author.type === 'user' ? LOCAL_USER_ID : null;
70
+ }
71
+ /** `metadata` as the API renders it: the stored object, or `[]` when empty. */
72
+ function metadataShape(value) {
73
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
74
+ return Object.keys(value).length > 0 ? value : [];
75
+ }
76
+ return [];
77
+ }
78
+ // ── Shared filtering ────────────────────────────────────────────────────────
79
+ function splitFilter(value) {
80
+ if (!value)
81
+ return [];
82
+ return value
83
+ .split(',')
84
+ .map((part) => part.trim())
85
+ .filter((part) => part.length > 0);
86
+ }
87
+ function applyLimit(items, limit) {
88
+ if (limit === undefined || limit === null || `${limit}`.trim().length === 0) {
89
+ return items;
90
+ }
91
+ const parsed = Number.parseInt(`${limit}`, 10);
92
+ if (!Number.isFinite(parsed) || parsed <= 0)
93
+ return items;
94
+ return items.slice(0, parsed);
95
+ }
96
+ /** Newest first: `created_at` descending, entity number descending as tie-break. */
97
+ function byNewest(a, b, numberA, numberB) {
98
+ const createdA = a.created_at ?? '';
99
+ const createdB = b.created_at ?? '';
100
+ if (createdA !== createdB)
101
+ return createdA < createdB ? 1 : -1;
102
+ if (numberA !== numberB)
103
+ return numberA < numberB ? 1 : -1;
104
+ return 0;
105
+ }
106
+ /** Normalise an entity reference (`is-000001` → `IS-000001`). */
107
+ function normaliseNumber(ref, prefix) {
108
+ const trimmed = ref.trim();
109
+ if (/^[A-Za-z]{2}-/.test(trimmed)) {
110
+ return [`${trimmed.slice(0, 2).toUpperCase()}${trimmed.slice(2)}`];
111
+ }
112
+ if (/^[0-9a-zA-Z]+$/.test(trimmed))
113
+ return [`${prefix}-${trimmed}`];
114
+ return [];
115
+ }
116
+ // ── Issues (spec §4.6) ──────────────────────────────────────────────────────
117
+ /** Resolve an issue by `IS-000001`, the bare code, or its uuid. */
118
+ async function requireIssueFile(ctx, ref) {
119
+ for (const number of normaliseNumber(ref, 'IS')) {
120
+ const found = await ctx.store.tryReadEntity('issue', number);
121
+ if (found)
122
+ return found;
123
+ }
124
+ const all = await ctx.store.listEntities('issue');
125
+ const byId = all.find((file) => file.frontmatter.id === ref.trim());
126
+ if (byId)
127
+ return byId;
128
+ throw new OrbitMapAPIError(`Issue \`${ref}\` was not found in this workspace.`, 'NOT_FOUND', 404);
129
+ }
130
+ /** The area uuid of an issue file, or `null` for workspace-level issues. */
131
+ async function issueAreaId(ctx, file) {
132
+ if (!file.area)
133
+ return null;
134
+ const area = await ctx.store.findAreaBySlug(file.area);
135
+ return area?.area_id ?? null;
136
+ }
137
+ /** `POST /issues` envelope. */
138
+ function issueCreateEnvelope(issue) {
139
+ return {
140
+ data: {
141
+ id: issue.id,
142
+ issue_number: stripEntityPrefix(issue.issue_number),
143
+ display_number: issue.issue_number,
144
+ title: issue.title,
145
+ status: issue.status,
146
+ severity: issue.severity,
147
+ intent_id: issue.intent ?? null,
148
+ created: true,
149
+ },
150
+ };
151
+ }
152
+ /** One row of `GET /issues`. */
153
+ function issueListItem(issue, description, resolution) {
154
+ return {
155
+ id: issue.id,
156
+ issue_number: stripEntityPrefix(issue.issue_number),
157
+ display_number: issue.issue_number,
158
+ title: issue.title,
159
+ description,
160
+ status: issue.status,
161
+ severity: issue.severity,
162
+ resolution,
163
+ related_task_id: issue.related_task ?? null,
164
+ resolved_task_id: issue.resolved_task ?? null,
165
+ reported_by_agent_id: agentIdOf(issue.reported_by),
166
+ reported_by_user_id: userIdOf(issue.reported_by),
167
+ orbit_id: null,
168
+ intent_id: issue.intent ?? null,
169
+ mission_id: issue.mission ?? null,
170
+ assigned_user_id: issue.assigned_user ? LOCAL_USER_ID : null,
171
+ assigned_agent_id: issue.assigned_agent ?? null,
172
+ created_at: issue.created_at,
173
+ updated_at: issue.updated_at,
174
+ };
175
+ }
176
+ /** `GET /issues/{id}` envelope. */
177
+ function issueDetailEnvelope(issue, areaId, description, resolution) {
178
+ return {
179
+ data: {
180
+ id: issue.id,
181
+ issue_number: stripEntityPrefix(issue.issue_number),
182
+ display_number: issue.issue_number,
183
+ area_id: areaId,
184
+ title: issue.title,
185
+ description,
186
+ status: issue.status,
187
+ severity: issue.severity,
188
+ resolution,
189
+ orbit_id: null,
190
+ intent_id: issue.intent ?? null,
191
+ mission_id: issue.mission ?? null,
192
+ assigned_user_id: issue.assigned_user ? LOCAL_USER_ID : null,
193
+ assigned_agent_id: issue.assigned_agent ?? null,
194
+ metadata: metadataShape(issue.metadata),
195
+ reported_by: authorShape(issue.reported_by),
196
+ resolved_by: authorShape(issue.resolved_by),
197
+ related_task: issue.related_task ?? null,
198
+ resolved_task: issue.resolved_task ?? null,
199
+ created_at: issue.created_at,
200
+ updated_at: issue.updated_at,
201
+ },
202
+ };
203
+ }
204
+ /** `PATCH /issues/{id}/status` and `/resolve` envelope. */
205
+ function issueStatusEnvelope(issue, resolution, key) {
206
+ return {
207
+ data: {
208
+ id: issue.id,
209
+ issue_number: stripEntityPrefix(issue.issue_number),
210
+ display_number: issue.issue_number,
211
+ status: issue.status,
212
+ resolution,
213
+ resolved_task: issue.resolved_task ?? null,
214
+ [key]: true,
215
+ },
216
+ };
217
+ }
218
+ /**
219
+ * `POST /issues` — the issue lands in `areas/<slug>/issues/` when an area is
220
+ * resolved and in the workspace-level `issues/` directory otherwise (spec §4.1).
221
+ */
222
+ export async function registerIssue(ctx, data) {
223
+ const title = (data.title ?? '').trim();
224
+ if (title.length === 0) {
225
+ throw validationError('Issue registration', 'title is required.');
226
+ }
227
+ const severity = assertIssueSeverity(data.severity ?? 'medium');
228
+ const intent = normaliseRef(data.intent_id);
229
+ const relatedTask = await resolveTaskNumber(ctx, data.related_task_id);
230
+ // Rules 3 + 4 apply to issues exactly as they do to tasks (spec §6.3, §6.4).
231
+ await assertLinks(ctx, { intent, mission: null });
232
+ const areaSlug = ctx.areaSlug ?? null;
233
+ const now = nowIso();
234
+ const created = await ctx.store.createEntity('issue', (issueNumber) => ({
235
+ frontmatter: {
236
+ id: newId(),
237
+ issue_number: issueNumber,
238
+ title,
239
+ status: 'open',
240
+ severity,
241
+ area: areaSlug,
242
+ intent,
243
+ mission: null,
244
+ mission_position: null,
245
+ related_task: relatedTask,
246
+ resolved_task: null,
247
+ assigned_agent: null,
248
+ assigned_user: null,
249
+ reported_by: LOCAL_CREATED_BY,
250
+ resolved_by: null,
251
+ created_at: now,
252
+ updated_at: now,
253
+ },
254
+ body: buildIssueBody(data.description ?? null, null),
255
+ }), { area: areaSlug });
256
+ return issueCreateEnvelope(created.frontmatter);
257
+ }
258
+ /**
259
+ * `GET /issues` — the resolved area's issues plus the workspace-level ones
260
+ * (issues with no area are visible from every area, mirroring `area_id NULL`).
261
+ */
262
+ export async function listIssues(ctx, options) {
263
+ const all = await ctx.store.listEntities('issue');
264
+ const scoped = ctx.areaSlug
265
+ ? all.filter((file) => file.area === null || file.area === ctx.areaSlug)
266
+ : all;
267
+ const statuses = splitFilter(options?.status);
268
+ const severities = splitFilter(options?.severity);
269
+ const filtered = scoped
270
+ .filter((file) => statuses.length === 0 || statuses.includes(file.frontmatter.status))
271
+ .filter((file) => severities.length === 0 || severities.includes(file.frontmatter.severity))
272
+ .sort((a, b) => byNewest(a.frontmatter, b.frontmatter, a.frontmatter.issue_number, b.frontmatter.issue_number));
273
+ const data = applyLimit(filtered, options?.limit).map((file) => issueListItem(file.frontmatter, parseSection(file.body, 'Description'), parseSection(file.body, 'Resolution')));
274
+ return { data, meta: { count: data.length } };
275
+ }
276
+ /** `GET /issues/{id}` — accepts a uuid, `IS-000001` or the bare code. */
277
+ export async function getIssue(ctx, idOrNumber) {
278
+ const file = await requireIssueFile(ctx, idOrNumber);
279
+ return issueDetailEnvelope(file.frontmatter, await issueAreaId(ctx, file), parseSection(file.body, 'Description'), parseSection(file.body, 'Resolution'));
280
+ }
281
+ /** `GET /issues/by-number/{number}` — the CLI strips the `IS-` prefix first. */
282
+ export async function getIssueByNumber(ctx, issueNumber) {
283
+ return getIssue(ctx, issueNumber);
284
+ }
285
+ /** Shared implementation of `resolve` and `status` (they differ only in payload). */
286
+ async function applyIssueStatus(ctx, idOrNumber, data, key) {
287
+ const file = await requireIssueFile(ctx, idOrNumber);
288
+ const issue = file.frontmatter;
289
+ const status = assertIssueStatus(data.status);
290
+ const resolvedTask = await resolveTaskNumber(ctx, data.taskRef);
291
+ const resolution = data.resolution !== undefined && data.resolution !== null
292
+ ? data.resolution.trim()
293
+ : parseSection(file.body, 'Resolution');
294
+ issue.status = status;
295
+ if (resolvedTask)
296
+ issue.resolved_task = resolvedTask;
297
+ if (RESOLVED_STATUSES.includes(status)) {
298
+ issue.resolved_by = LOCAL_CREATED_BY;
299
+ }
300
+ else {
301
+ issue.resolved_by = null;
302
+ }
303
+ issue.updated_at = nowIso();
304
+ file.body = buildIssueBody(parseSection(file.body, 'Description'), resolution);
305
+ await ctx.store.writeEntity(file);
306
+ return issueStatusEnvelope(issue, parseSection(file.body, 'Resolution'), key);
307
+ }
308
+ /** `PATCH /issues/{id}/resolve`. */
309
+ export async function resolveIssue(ctx, idOrNumber, data) {
310
+ return applyIssueStatus(ctx, idOrNumber, {
311
+ status: data.status,
312
+ resolution: data.resolution,
313
+ taskRef: data.resolved_by_task_id,
314
+ }, 'resolved');
315
+ }
316
+ /** `PATCH /issues/by-number/{number}/resolve`. */
317
+ export async function resolveIssueByNumber(ctx, issueNumber, data) {
318
+ return resolveIssue(ctx, issueNumber, data);
319
+ }
320
+ /** `PATCH /issues/{id}/status`. */
321
+ export async function updateIssueStatus(ctx, idOrNumber, data) {
322
+ return applyIssueStatus(ctx, idOrNumber, {
323
+ status: data.status,
324
+ resolution: data.resolution,
325
+ taskRef: data.resolved_task_id,
326
+ }, 'updated');
327
+ }
328
+ /** `PATCH /issues/by-number/{number}/status`. */
329
+ export async function updateIssueStatusByNumber(ctx, issueNumber, data) {
330
+ return updateIssueStatus(ctx, issueNumber, data);
331
+ }
332
+ // ── Vibes (spec §4.8) ───────────────────────────────────────────────────────
333
+ /** Resolve a vibe by `VB-000001`, the bare code, or its uuid. */
334
+ async function requireVibeFile(ctx, ref) {
335
+ for (const number of normaliseNumber(ref, 'VB')) {
336
+ const found = await ctx.store.tryReadEntity('vibe', number);
337
+ if (found)
338
+ return found;
339
+ }
340
+ const all = await ctx.store.listEntities('vibe');
341
+ const byId = all.find((file) => file.frontmatter.id === ref.trim());
342
+ if (byId)
343
+ return byId;
344
+ throw new OrbitMapAPIError(`Vibe \`${ref}\` was not found in this workspace.`, 'NOT_FOUND', 404);
345
+ }
346
+ /** `POST /vibes` / `PATCH /vibes/{id}` envelope. */
347
+ function vibeWriteEnvelope(vibe, key) {
348
+ return {
349
+ data: {
350
+ id: vibe.id,
351
+ vibe_number: stripEntityPrefix(vibe.vibe_number),
352
+ display_number: vibe.vibe_number,
353
+ type: vibe.type,
354
+ [key]: true,
355
+ },
356
+ };
357
+ }
358
+ /** One row of `GET /vibes`. */
359
+ function vibeListItem(vibe, area, content) {
360
+ return {
361
+ id: vibe.id,
362
+ vibe_number: stripEntityPrefix(vibe.vibe_number),
363
+ display_number: vibe.vibe_number,
364
+ area_id: area.area_id,
365
+ task_id: vibe.task ?? null,
366
+ type: vibe.type,
367
+ title: vibe.title ?? null,
368
+ content,
369
+ metadata: metadataShape(vibe.metadata),
370
+ author: authorShape(vibe.author),
371
+ created_at: vibe.created_at,
372
+ updated_at: vibe.updated_at ?? vibe.created_at,
373
+ };
374
+ }
375
+ /** `GET /vibes/{id}` envelope. */
376
+ function vibeDetailEnvelope(vibe, area, content) {
377
+ return {
378
+ data: {
379
+ id: vibe.id,
380
+ vibe_number: stripEntityPrefix(vibe.vibe_number),
381
+ display_number: vibe.vibe_number,
382
+ area_id: area.area_id,
383
+ type: vibe.type,
384
+ title: vibe.title ?? null,
385
+ content,
386
+ metadata: metadataShape(vibe.metadata),
387
+ author: authorShape(vibe.author),
388
+ task: vibe.task ?? null,
389
+ created_at: vibe.created_at,
390
+ updated_at: vibe.updated_at ?? vibe.created_at,
391
+ },
392
+ };
393
+ }
394
+ /** `POST /vibes` — area-scoped, with an optional `TS-…` task link. */
395
+ export async function logVibe(ctx, data) {
396
+ const content = (data.content ?? '').trim();
397
+ if (content.length === 0) {
398
+ throw validationError('Vibe log', 'content must not be empty.');
399
+ }
400
+ const type = assertVibeType(data.type);
401
+ const areaSlug = await requireAreaSlug(ctx);
402
+ const task = await resolveTaskNumber(ctx, data.task_id);
403
+ const now = nowIso();
404
+ const created = await ctx.store.createEntity('vibe', (vibeNumber) => ({
405
+ frontmatter: {
406
+ id: newId(),
407
+ vibe_number: vibeNumber,
408
+ type,
409
+ title: data.title ?? null,
410
+ task,
411
+ author: LOCAL_CREATED_BY,
412
+ created_at: now,
413
+ updated_at: now,
414
+ },
415
+ body: content,
416
+ }), { area: areaSlug });
417
+ return vibeWriteEnvelope(created.frontmatter, 'logged');
418
+ }
419
+ /** `GET /vibes` — the resolved area's vibes, newest first. */
420
+ export async function listVibes(ctx, options) {
421
+ const areaSlug = await requireAreaSlug(ctx);
422
+ const area = await ctx.store.readArea(areaSlug);
423
+ const files = await ctx.store.listEntities('vibe', { area: areaSlug });
424
+ const types = splitFilter(options?.type);
425
+ const since = options?.since?.trim();
426
+ const filtered = files
427
+ .filter((file) => types.length === 0 || types.includes(file.frontmatter.type))
428
+ .filter((file) => !since || file.frontmatter.created_at >= since)
429
+ .sort((a, b) => byNewest(a.frontmatter, b.frontmatter, a.frontmatter.vibe_number, b.frontmatter.vibe_number));
430
+ const data = applyLimit(filtered, options?.limit).map((file) => vibeListItem(file.frontmatter, area, file.body));
431
+ return { data, meta: { count: data.length } };
432
+ }
433
+ /** `GET /vibes/{id}` — accepts a uuid, `VB-000001` or the bare code. */
434
+ export async function getVibe(ctx, id) {
435
+ const file = await requireVibeFile(ctx, id);
436
+ const area = await ctx.store.readArea(file.area ?? (await requireAreaSlug(ctx)));
437
+ return vibeDetailEnvelope(file.frontmatter, area, file.body);
438
+ }
439
+ /** `PATCH /vibes/{id}`. */
440
+ export async function updateVibe(ctx, id, data) {
441
+ const file = await requireVibeFile(ctx, id);
442
+ const vibe = file.frontmatter;
443
+ let changed = false;
444
+ if (data.type !== undefined) {
445
+ vibe.type = assertVibeType(data.type);
446
+ changed = true;
447
+ }
448
+ if (data.title !== undefined) {
449
+ vibe.title = data.title;
450
+ changed = true;
451
+ }
452
+ if (data.content !== undefined) {
453
+ file.body = data.content;
454
+ changed = true;
455
+ }
456
+ if (data.metadata !== undefined) {
457
+ vibe.metadata = data.metadata;
458
+ changed = true;
459
+ }
460
+ if (!changed) {
461
+ throw validationError('Vibe update', 'at least one of type, title, content or metadata must be provided.');
462
+ }
463
+ vibe.updated_at = nowIso();
464
+ await ctx.store.writeEntity(file);
465
+ return vibeWriteEnvelope(vibe, 'updated');
466
+ }
467
+ // ── Ideas (spec §4.7) ───────────────────────────────────────────────────────
468
+ /** Resolve an idea by `ID-000001`, the bare code, or its uuid. */
469
+ async function requireIdeaFile(ctx, ref) {
470
+ for (const number of normaliseNumber(ref, 'ID')) {
471
+ const found = await ctx.store.tryReadEntity('idea', number);
472
+ if (found)
473
+ return found;
474
+ }
475
+ const all = await ctx.store.listEntities('idea');
476
+ const byId = all.find((file) => file.frontmatter.id === ref.trim());
477
+ if (byId)
478
+ return byId;
479
+ throw new OrbitMapAPIError(`Idea \`${ref}\` was not found in this workspace.`, 'NOT_FOUND', 404);
480
+ }
481
+ /** `POST /ideas` envelope. */
482
+ function ideaCreateEnvelope(idea) {
483
+ return {
484
+ data: {
485
+ id: idea.id,
486
+ idea_number: stripEntityPrefix(idea.idea_number),
487
+ display_number: idea.idea_number,
488
+ title: idea.title,
489
+ status: idea.status,
490
+ priority: idea.priority,
491
+ created: true,
492
+ },
493
+ };
494
+ }
495
+ /** One row of `GET /ideas` — also the `GET /ideas/{id}` payload. */
496
+ function ideaShape(idea, content) {
497
+ return {
498
+ id: idea.id,
499
+ idea_number: stripEntityPrefix(idea.idea_number),
500
+ display_number: idea.idea_number,
501
+ title: idea.title,
502
+ content,
503
+ status: idea.status,
504
+ priority: idea.priority,
505
+ mission_id: idea.mission ?? null,
506
+ assigned_user_id: idea.assigned_user ? LOCAL_USER_ID : null,
507
+ assigned_agent_id: idea.assigned_agent ?? null,
508
+ created_by: authorShape(idea.created_by),
509
+ metadata: metadataShape(idea.metadata),
510
+ created_at: idea.created_at,
511
+ updated_at: idea.updated_at,
512
+ };
513
+ }
514
+ /** `PATCH /ideas/{id}/status` envelope. */
515
+ function ideaStatusEnvelope(idea) {
516
+ return {
517
+ data: {
518
+ id: idea.id,
519
+ idea_number: stripEntityPrefix(idea.idea_number),
520
+ display_number: idea.idea_number,
521
+ status: idea.status,
522
+ updated: true,
523
+ },
524
+ };
525
+ }
526
+ /** `GET /ideas` — workspace level, newest first. */
527
+ export async function listIdeas(ctx, options) {
528
+ const files = await ctx.store.listEntities('idea');
529
+ const statuses = splitFilter(options?.status);
530
+ const priorities = splitFilter(options?.priority);
531
+ const filtered = files
532
+ .filter((file) => statuses.length === 0 || statuses.includes(file.frontmatter.status))
533
+ .filter((file) => priorities.length === 0 || priorities.includes(file.frontmatter.priority))
534
+ .sort((a, b) => byNewest(a.frontmatter, b.frontmatter, a.frontmatter.idea_number, b.frontmatter.idea_number));
535
+ const data = applyLimit(filtered, options?.limit).map((file) => ideaShape(file.frontmatter, file.body));
536
+ return { data, meta: { count: data.length } };
537
+ }
538
+ /** `GET /ideas/{id}` — accepts a uuid, `ID-000001` or the bare code. */
539
+ export async function getIdea(ctx, idOrNumber) {
540
+ const file = await requireIdeaFile(ctx, idOrNumber);
541
+ return { data: ideaShape(file.frontmatter, file.body) };
542
+ }
543
+ /** `GET /ideas/by-number/{number}` — the CLI strips the `ID-` prefix first. */
544
+ export async function getIdeaByNumber(ctx, ideaNumber) {
545
+ return getIdea(ctx, ideaNumber);
546
+ }
547
+ /** `POST /ideas` — workspace-level; the resolved area (if any) is recorded in `areas`. */
548
+ export async function createIdea(ctx, data) {
549
+ const content = (data.content ?? '').trim();
550
+ if (content.length === 0) {
551
+ throw validationError('Idea creation', 'content is required.');
552
+ }
553
+ const priority = assertPriority(data.priority ?? 'medium');
554
+ const now = nowIso();
555
+ const created = await ctx.store.createEntity('idea', (ideaNumber) => ({
556
+ frontmatter: {
557
+ id: newId(),
558
+ idea_number: ideaNumber,
559
+ title: data.title ?? null,
560
+ status: 'pending',
561
+ priority,
562
+ mission: null,
563
+ mission_position: null,
564
+ areas: ctx.areaSlug ? [ctx.areaSlug] : [],
565
+ orbit: null,
566
+ assigned_agent: null,
567
+ assigned_user: null,
568
+ metadata: data.metadata ?? {},
569
+ created_by: LOCAL_CREATED_BY,
570
+ created_at: now,
571
+ updated_at: now,
572
+ },
573
+ body: content,
574
+ }));
575
+ return ideaCreateEnvelope(created.frontmatter);
576
+ }
577
+ /** `PATCH /ideas/{id}/status`. */
578
+ export async function updateIdeaStatus(ctx, idOrNumber, data) {
579
+ const file = await requireIdeaFile(ctx, idOrNumber);
580
+ file.frontmatter.status = assertIdeaStatus(data.status);
581
+ file.frontmatter.updated_at = nowIso();
582
+ await ctx.store.writeEntity(file);
583
+ return ideaStatusEnvelope(file.frontmatter);
584
+ }
585
+ /** `PATCH /ideas/by-number/{number}/status`. */
586
+ export async function updateIdeaStatusByNumber(ctx, ideaNumber, data) {
587
+ return updateIdeaStatus(ctx, ideaNumber, data);
588
+ }
589
+ // ── Internals ───────────────────────────────────────────────────────────────
590
+ function normaliseRef(value) {
591
+ if (value === undefined || value === null)
592
+ return null;
593
+ const trimmed = value.trim();
594
+ if (trimmed.length === 0)
595
+ return null;
596
+ return `${trimmed.slice(0, 2).toUpperCase()}${trimmed.slice(2)}`;
597
+ }
598
+ /** Rules 3 + 4: references must resolve and a direct mission is intent-exclusive. */
599
+ async function assertLinks(ctx, item) {
600
+ assertIntentExclusiveMission(item);
601
+ const intents = await ctx.store.listEntities('intent');
602
+ const missions = await ctx.store.listEntities('mission');
603
+ assertReferencesResolve(item, {
604
+ intents: intents.map((entry) => entry.frontmatter.intent_number),
605
+ missions: missions.map((entry) => entry.frontmatter.mission_number),
606
+ });
607
+ }
608
+ /** Resolve a task reference to its `TS-…` number; `null` when none was given. */
609
+ async function resolveTaskNumber(ctx, ref) {
610
+ if (ref === undefined || ref === null || ref.trim().length === 0)
611
+ return null;
612
+ for (const number of normaliseNumber(ref, 'TS')) {
613
+ const task = await ctx.store.tryReadEntity('task', number);
614
+ if (task)
615
+ return task.frontmatter.task_number;
616
+ }
617
+ const found = await ctx.store.findEntity(ref.trim());
618
+ if (!found || found.kind !== 'task') {
619
+ throw validationError('Reference containment', `task \`${ref}\` does not exist in this workspace.`);
620
+ }
621
+ return String(found.frontmatter.task_number);
622
+ }
623
+ //# sourceMappingURL=work-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-items.js","sourceRoot":"","sources":["../../../../src/adapters/local/entities/work-items.ts"],"names":[],"mappings":"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"}