orbitmap 0.4.6 → 0.6.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/LICENSE +21 -21
- package/README.md +73 -10
- package/dist/adapters/cloud.d.ts +85 -10
- package/dist/adapters/cloud.js +118 -17
- package/dist/adapters/cloud.js.map +1 -1
- package/dist/adapters/factory.js +7 -0
- package/dist/adapters/factory.js.map +1 -1
- package/dist/adapters/local/adapter.d.ts +47 -8
- package/dist/adapters/local/adapter.js +37 -17
- package/dist/adapters/local/adapter.js.map +1 -1
- package/dist/adapters/local/context.d.ts +13 -1
- package/dist/adapters/local/context.js +7 -2
- package/dist/adapters/local/context.js.map +1 -1
- package/dist/adapters/local/entities/documents.d.ts +18 -4
- package/dist/adapters/local/entities/documents.js +46 -7
- package/dist/adapters/local/entities/documents.js.map +1 -1
- package/dist/adapters/local/entities/planning.d.ts +36 -7
- package/dist/adapters/local/entities/planning.js +245 -39
- package/dist/adapters/local/entities/planning.js.map +1 -1
- package/dist/adapters/local/entities/tasks.d.ts +16 -7
- package/dist/adapters/local/entities/tasks.js +55 -42
- package/dist/adapters/local/entities/tasks.js.map +1 -1
- package/dist/adapters/local/entities/work-items.d.ts +28 -7
- package/dist/adapters/local/entities/work-items.js +111 -39
- package/dist/adapters/local/entities/work-items.js.map +1 -1
- package/dist/adapters/local/lists.d.ts +139 -0
- package/dist/adapters/local/lists.js +230 -0
- package/dist/adapters/local/lists.js.map +1 -0
- package/dist/adapters/local/rules.d.ts +1 -1
- package/dist/adapters/local/rules.js +23 -0
- package/dist/adapters/local/rules.js.map +1 -1
- package/dist/adapters/local/shapes.d.ts +165 -22
- package/dist/adapters/local/shapes.js +338 -50
- package/dist/adapters/local/shapes.js.map +1 -1
- package/dist/adapters/local/types.d.ts +6 -1
- package/dist/adapters/local/types.js.map +1 -1
- package/dist/adapters/types.d.ts +72 -9
- package/dist/agent-instructions.d.ts +41 -11
- package/dist/agent-instructions.js +329 -128
- package/dist/agent-instructions.js.map +1 -1
- package/dist/commands/context.d.ts +62 -37
- package/dist/commands/context.js +105 -36
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/docs.d.ts +4 -0
- package/dist/commands/docs.js +12 -5
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/emit-instructions.d.ts +26 -0
- package/dist/commands/emit-instructions.js +68 -0
- package/dist/commands/emit-instructions.js.map +1 -0
- package/dist/commands/ideas.d.ts +3 -0
- package/dist/commands/ideas.js +14 -7
- package/dist/commands/ideas.js.map +1 -1
- package/dist/commands/intent.d.ts +26 -0
- package/dist/commands/intent.js +117 -8
- package/dist/commands/intent.js.map +1 -1
- package/dist/commands/issues.d.ts +4 -0
- package/dist/commands/issues.js +15 -7
- package/dist/commands/issues.js.map +1 -1
- package/dist/commands/mission.d.ts +2 -0
- package/dist/commands/mission.js +9 -5
- package/dist/commands/mission.js.map +1 -1
- package/dist/commands/projects.d.ts +3 -0
- package/dist/commands/projects.js +28 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/setup-agent.d.ts +101 -13
- package/dist/commands/setup-agent.js +377 -31
- package/dist/commands/setup-agent.js.map +1 -1
- package/dist/commands/start.d.ts +13 -0
- package/dist/commands/start.js +126 -13
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/tasks.d.ts +23 -5
- package/dist/commands/tasks.js +46 -23
- package/dist/commands/tasks.js.map +1 -1
- package/dist/commands/vibes.d.ts +3 -0
- package/dist/commands/vibes.js +11 -5
- package/dist/commands/vibes.js.map +1 -1
- package/dist/errors.d.ts +23 -2
- package/dist/errors.js +31 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.js +118 -38
- package/dist/index.js.map +1 -1
- package/dist/list-meta.d.ts +117 -0
- package/dist/list-meta.js +160 -0
- package/dist/list-meta.js.map +1 -0
- package/dist/list-options.d.ts +33 -0
- package/dist/list-options.js +70 -0
- package/dist/list-options.js.map +1 -0
- package/dist/workspace-resolve.d.ts +47 -1
- package/dist/workspace-resolve.js +74 -11
- package/dist/workspace-resolve.js.map +1 -1
- package/dist/write-target.d.ts +9 -0
- package/dist/write-target.js +11 -2
- package/dist/write-target.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/start.js
CHANGED
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
* With a task reference nothing changed. Without one the CLI no longer takes "the next task
|
|
5
5
|
* in the queue" as the answer (TS-jt6q36): what an agent should work on comes from the
|
|
6
6
|
* *plan* — the active mission first, then the open intents, and only then raw priority
|
|
7
|
-
* order. One `GET /context` (
|
|
7
|
+
* order. One `GET /context` (matching material since 10.0.0: `missions[]`/`intents[]`) plus the
|
|
8
8
|
* task listing is enough to decide, and the choice is always explained, because a pick an
|
|
9
9
|
* agent cannot justify is a pick it cannot argue with.
|
|
10
10
|
*/
|
|
11
11
|
import { createAdapter } from '../adapters/factory.js';
|
|
12
|
-
import { confirmWriteTarget } from '../write-target.js';
|
|
12
|
+
import { askYesNo, canAskUser, confirmWriteTarget } from '../write-target.js';
|
|
13
13
|
import { formatOutput, printError } from '../output.js';
|
|
14
|
+
import { isErrorCode, OrbitMapAPIError, REASSIGN_CONFIRMATION_REQUIRED } from '../errors.js';
|
|
15
|
+
import { fetchAllPages } from '../list-meta.js';
|
|
14
16
|
import { printTaskDetail } from './task.js';
|
|
15
17
|
import { cleanupCache, resolveDocCache } from '../doc-cache.js';
|
|
16
18
|
export async function startCommand(taskId, options) {
|
|
@@ -37,7 +39,7 @@ export async function startCommand(taskId, options) {
|
|
|
37
39
|
// With an area in hand the historical fallback still applies: let the server auto-pick
|
|
38
40
|
// (it knows about assignment and rule 8), including its own "nothing todo" message.
|
|
39
41
|
}
|
|
40
|
-
const response = (await client
|
|
42
|
+
const response = (await startWithConfirmation(client, taskId ?? selection?.task, options.json));
|
|
41
43
|
if (selection)
|
|
42
44
|
response.selection = selection;
|
|
43
45
|
if (options.json) {
|
|
@@ -71,6 +73,81 @@ export async function startCommand(taskId, options) {
|
|
|
71
73
|
process.exitCode = 1;
|
|
72
74
|
}
|
|
73
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* The tasks this agent may auto-pick: its own, or nobody's.
|
|
78
|
+
*
|
|
79
|
+
* Falls back to the whole list when the caller's identity is unknown (an older `/context`, a
|
|
80
|
+
* stub adapter): narrowing on a guess would hide work, and the server refuses a foreign task
|
|
81
|
+
* anyway.
|
|
82
|
+
*/
|
|
83
|
+
function ownWork(candidates, agentId) {
|
|
84
|
+
if (!agentId)
|
|
85
|
+
return candidates;
|
|
86
|
+
// `== null` covers both "explicitly unassigned" and "this payload predates 9.0.0 and
|
|
87
|
+
// carries no ownership fields at all" — the latter behaves exactly as it did before.
|
|
88
|
+
return candidates.filter((task) => task.agent_id === agentId || (task.agent_id == null && task.assigned_user_id == null));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Start the task, and if the API answers 409 `REASSIGN_CONFIRMATION_REQUIRED` (or 403
|
|
92
|
+
* `TASK_NOT_OWNED` for a task named explicitly), put the question to the USER and only then
|
|
93
|
+
* retry with `confirm_reassign=true`.
|
|
94
|
+
*
|
|
95
|
+
* The flag is never sent unprompted. The whole point of the server's 409 is that taking work
|
|
96
|
+
* off a colleague is a decision a person makes — an agent that auto-confirms turns the rule
|
|
97
|
+
* into theatre. With no terminal to ask in (`--json`, a pipeline, `ORBITMAP_YES` is
|
|
98
|
+
* deliberately NOT honoured here) the error is re-thrown untouched, carrying the server's own
|
|
99
|
+
* suggestion, so the caller can ask its own user and re-run.
|
|
100
|
+
*/
|
|
101
|
+
async function startWithConfirmation(client, taskRef, jsonMode) {
|
|
102
|
+
try {
|
|
103
|
+
return await client.startTask(taskRef);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const takeover = reassignQuestion(error, taskRef);
|
|
107
|
+
if (!takeover)
|
|
108
|
+
throw error;
|
|
109
|
+
if (jsonMode || !canAskUser())
|
|
110
|
+
throw error;
|
|
111
|
+
console.error(`[orbitmap] ${takeover.question}`);
|
|
112
|
+
const confirmed = await askYesNo('[orbitmap] Reassign it to you and start it? [y/N] ');
|
|
113
|
+
if (!confirmed)
|
|
114
|
+
throw error;
|
|
115
|
+
return await client.startTask(takeover.taskRef, { confirmReassign: true });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The question to ask about a refused start, or `undefined` when the error is something else.
|
|
120
|
+
*
|
|
121
|
+
* The 409 names the task, its title and its current owner precisely so a client can put the
|
|
122
|
+
* question verbatim; `OrbitMapAPIError.fromResponse` keeps those top-level `error` fields in
|
|
123
|
+
* `details`.
|
|
124
|
+
*/
|
|
125
|
+
export function reassignQuestion(error, taskRef) {
|
|
126
|
+
if (!(error instanceof OrbitMapAPIError))
|
|
127
|
+
return undefined;
|
|
128
|
+
const details = (error.details ?? {});
|
|
129
|
+
if (isErrorCode(error.code, REASSIGN_CONFIRMATION_REQUIRED)) {
|
|
130
|
+
const owner = (details['current_owner'] ?? {});
|
|
131
|
+
const number = typeof details['task_number'] === 'string' ? details['task_number'] : taskRef;
|
|
132
|
+
const title = typeof details['task_title'] === 'string' ? ` "${details['task_title']}"` : '';
|
|
133
|
+
const held = owner.name ?? owner.slug ?? 'another agent';
|
|
134
|
+
const ref = typeof number === 'string' ? number : undefined;
|
|
135
|
+
if (!ref)
|
|
136
|
+
return undefined;
|
|
137
|
+
return {
|
|
138
|
+
taskRef: ref,
|
|
139
|
+
question: `The next task is ${ref}${title}, currently assigned to ${held}.`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// A task named explicitly on the command line: same decision, no owner in the payload.
|
|
143
|
+
if (error.code === 'TASK_NOT_OWNED' && taskRef) {
|
|
144
|
+
return {
|
|
145
|
+
taskRef,
|
|
146
|
+
question: `${taskRef} is assigned to another agent.`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
74
151
|
/**
|
|
75
152
|
* Decide what to work on, plan first: active mission → open intent → priority order.
|
|
76
153
|
*
|
|
@@ -84,7 +161,15 @@ export async function planWork(client) {
|
|
|
84
161
|
let workspace = null;
|
|
85
162
|
try {
|
|
86
163
|
const [tasks, ctx] = await Promise.all([
|
|
87
|
-
|
|
164
|
+
// EVERY page, not the first one. Lists are paged since API 9.0.0 and ordered by AREA
|
|
165
|
+
// first, so a single 30-row page would hide every task of a late-alphabet area — and
|
|
166
|
+
// the whole point of this function is to compare candidates across the workspace. The
|
|
167
|
+
// page size is the cap, so a normal workspace still costs one request.
|
|
168
|
+
fetchAllPages((cursor) => client.getTasks({
|
|
169
|
+
status: 'todo',
|
|
170
|
+
limit: 100,
|
|
171
|
+
...(cursor !== undefined ? { cursor } : {}),
|
|
172
|
+
})),
|
|
88
173
|
client.getContext(),
|
|
89
174
|
]);
|
|
90
175
|
candidates = tasks.data ?? [];
|
|
@@ -94,10 +179,17 @@ export async function planWork(client) {
|
|
|
94
179
|
catch (error) {
|
|
95
180
|
return { kind: 'lookup-failed', error };
|
|
96
181
|
}
|
|
182
|
+
// GET /tasks spans every assignee since API 9.0.0, so the listing this picks from now
|
|
183
|
+
// contains other agents' work. Auto-pick takes only what is UNASSIGNED or already this
|
|
184
|
+
// agent's — the same rule POST /tasks/start applies server-side. Without it `orbitmap
|
|
185
|
+
// start` would silently grab a colleague's task, or (more likely) pick one and then die on
|
|
186
|
+
// 403 TASK_NOT_OWNED. When the ONLY remaining work is someone else's the server says so
|
|
187
|
+
// with a 409 and the user is asked; see `askToTakeOver`.
|
|
188
|
+
const mine = ownWork(candidates, context.agent?.id);
|
|
97
189
|
// A task whose dependencies are unmet cannot be worked on — it would only get in front of
|
|
98
190
|
// one that can. Kept as a fallback so a fully blocked backlog still yields a choice.
|
|
99
|
-
const ready =
|
|
100
|
-
const pool = ready.length > 0 ? ready :
|
|
191
|
+
const ready = mine.filter((task) => (task.blocked_by ?? []).length === 0);
|
|
192
|
+
const pool = ready.length > 0 ? ready : mine;
|
|
101
193
|
if (pool.length === 0) {
|
|
102
194
|
const areas = [
|
|
103
195
|
...new Set([
|
|
@@ -105,18 +197,32 @@ export async function planWork(client) {
|
|
|
105
197
|
...candidates.map((task) => task.area?.slug).filter((slug) => !!slug),
|
|
106
198
|
]),
|
|
107
199
|
];
|
|
108
|
-
return {
|
|
200
|
+
return {
|
|
201
|
+
kind: 'nothing',
|
|
202
|
+
workspace,
|
|
203
|
+
areas,
|
|
204
|
+
scope: workspace ? 'workspace' : 'area',
|
|
205
|
+
heldByOthers: candidates.length - mine.length,
|
|
206
|
+
};
|
|
109
207
|
}
|
|
110
|
-
|
|
208
|
+
// 10.0.0: the payload carries missions[] (active + closed + upcoming) and an
|
|
209
|
+
// UNFILTERED intents[] union. The ladder's semantics are unchanged — active
|
|
210
|
+
// mission first, then open intents — so filter here rather than trust shape.
|
|
211
|
+
const mission = (context.missions ?? []).find((m) => m.status === 'active') ?? null;
|
|
111
212
|
if (mission) {
|
|
112
|
-
const
|
|
213
|
+
const number = mission.number ?? mission.display_number;
|
|
214
|
+
const match = pool.find((task) => matches(task.mission_id, mission.id, number));
|
|
113
215
|
if (match) {
|
|
114
216
|
return selected(match, 'mission', {
|
|
115
|
-
mission: { id: mission.id, number
|
|
217
|
+
mission: { id: mission.id, number, name: mission.name },
|
|
116
218
|
});
|
|
117
219
|
}
|
|
118
220
|
}
|
|
119
|
-
for
|
|
221
|
+
// in_review intents stay open for auto-pick: review-fix tasks live under them.
|
|
222
|
+
const OPEN_INTENT = new Set(['new', 'design', 'plan', 'build', 'in_review']);
|
|
223
|
+
for (const intent of context.intents ?? []) {
|
|
224
|
+
if (intent.status && !OPEN_INTENT.has(intent.status))
|
|
225
|
+
continue;
|
|
120
226
|
const number = intent.number ?? intent.display_number;
|
|
121
227
|
const match = pool.find((task) => matches(task.intent_id, intent.id, number));
|
|
122
228
|
if (match) {
|
|
@@ -143,9 +249,15 @@ function reportNothingToStart(outcome, jsonMode) {
|
|
|
143
249
|
const areas = outcome.areas.length > 0
|
|
144
250
|
? ` Areas searched: ${outcome.areas.join(', ')}.`
|
|
145
251
|
: '';
|
|
252
|
+
// "Nothing to start" and "everything left is someone else's" are different answers, and
|
|
253
|
+
// conflating them is the same lie the caller-only listing used to tell (IN-nahetc).
|
|
254
|
+
const held = outcome.heldByOthers > 0
|
|
255
|
+
? ` ${outcome.heldByOthers} todo task(s) there are assigned to other agents — ` +
|
|
256
|
+
'`orbitmap tasks` shows them, and `orbitmap start <TS-…>` will ask before taking one.'
|
|
257
|
+
: '';
|
|
146
258
|
const message = `No startable work in ${where}: no task with status \`todo\` is available to you ` +
|
|
147
|
-
`across its areas.${areas} Run \`orbitmap tasks\` to see everything, or name a
|
|
148
|
-
'explicitly with `orbitmap start <TS-…>`.';
|
|
259
|
+
`across its areas.${areas}${held} Run \`orbitmap tasks\` to see everything, or name a ` +
|
|
260
|
+
'task explicitly with `orbitmap start <TS-…>`.';
|
|
149
261
|
if (jsonMode) {
|
|
150
262
|
console.log(formatOutput({
|
|
151
263
|
data: null,
|
|
@@ -154,6 +266,7 @@ function reportNothingToStart(outcome, jsonMode) {
|
|
|
154
266
|
scope: 'workspace',
|
|
155
267
|
workspace: outcome.workspace,
|
|
156
268
|
areas_searched: outcome.areas,
|
|
269
|
+
held_by_others: outcome.heldByOthers,
|
|
157
270
|
},
|
|
158
271
|
}, true));
|
|
159
272
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tasks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** The `area` block
|
|
1
|
+
/** The `area` block every row carries since API 9.0.0 (workspace-level rows may be null). */
|
|
2
2
|
export interface TaskArea {
|
|
3
3
|
id: string;
|
|
4
4
|
slug: string;
|
|
@@ -17,16 +17,34 @@ export interface TaskItem {
|
|
|
17
17
|
created_at: string;
|
|
18
18
|
task_number: string;
|
|
19
19
|
display_number: string;
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Who holds it. The list stopped being caller-only in API 9.0.0, so "mine, someone
|
|
22
|
+
* else's, or free" has to be answerable from the row itself.
|
|
23
|
+
*/
|
|
24
|
+
agent_id?: string | null;
|
|
25
|
+
assigned_user_id?: string | null;
|
|
26
|
+
intent_id?: string | null;
|
|
27
|
+
mission_id?: string | null;
|
|
28
|
+
/** Absent only in local mode's area-scoped listing — see {@link TaskArea}. */
|
|
21
29
|
area?: TaskArea | null;
|
|
22
30
|
}
|
|
23
|
-
export
|
|
31
|
+
export interface TasksOptions {
|
|
24
32
|
json: boolean;
|
|
33
|
+
/** `--area a,b`: a LIST FILTER, resolved into `area_id` by the adapter (never the header). */
|
|
25
34
|
area?: string;
|
|
26
35
|
status?: string;
|
|
27
36
|
priority?: string;
|
|
28
37
|
orbit?: string;
|
|
29
|
-
|
|
38
|
+
intent?: string;
|
|
39
|
+
mission?: string;
|
|
40
|
+
/** `--agent me|<slug>|<uuid>`. */
|
|
41
|
+
agent?: string;
|
|
42
|
+
unassigned?: boolean;
|
|
43
|
+
limit?: string;
|
|
44
|
+
/** `--all`: follow `next_cursor` to the end and print every row. */
|
|
45
|
+
all?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare function tasksCommand(options: TasksOptions): Promise<void>;
|
|
30
48
|
export interface TaskAreaGroup {
|
|
31
49
|
label: string;
|
|
32
50
|
slug: string | null;
|
|
@@ -35,7 +53,7 @@ export interface TaskAreaGroup {
|
|
|
35
53
|
/**
|
|
36
54
|
* Rows folded into one group per area, in arrival order; area-less rows land in one bucket.
|
|
37
55
|
*
|
|
38
|
-
* The fold itself
|
|
56
|
+
* The fold itself lives in `area-grouping.ts`, shared with the issue/idea/vibe/document
|
|
39
57
|
* listings that grew the same need (TS-adanc8). This keeps the task-shaped result (`tasks`,
|
|
40
58
|
* not `rows`) that callers and tests already use.
|
|
41
59
|
*/
|
package/dist/commands/tasks.js
CHANGED
|
@@ -1,53 +1,76 @@
|
|
|
1
1
|
import { createAdapter } from '../adapters/factory.js';
|
|
2
2
|
import { formatOutput, printError, formatTable } from '../output.js';
|
|
3
3
|
import { groupByArea } from '../area-grouping.js';
|
|
4
|
+
import { fetchAllPages, formatEmptyLine, printListMeta, } from '../list-meta.js';
|
|
4
5
|
export async function tasksCommand(options) {
|
|
5
6
|
try {
|
|
6
7
|
const client = await createAdapter(options.area);
|
|
7
|
-
const
|
|
8
|
+
const page = (cursor) => client.getTasks({
|
|
8
9
|
status: options.status,
|
|
9
10
|
priority: options.priority,
|
|
10
11
|
orbit: options.orbit,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
intentId: options.intent,
|
|
13
|
+
missionId: options.mission,
|
|
14
|
+
agentId: options.agent,
|
|
15
|
+
unassigned: options.unassigned,
|
|
16
|
+
limit: options.limit,
|
|
17
|
+
...(cursor !== undefined ? { cursor } : {}),
|
|
18
|
+
});
|
|
19
|
+
const response = options.all
|
|
20
|
+
? await fetchAllPages(page, (task) => task.area?.slug ?? null)
|
|
21
|
+
: await page();
|
|
22
|
+
// Passed through verbatim, so the per-task `area`, the owner ids and the whole `meta`
|
|
23
|
+
// survive into `--json` — agents group and filter on them.
|
|
14
24
|
if (options.json) {
|
|
15
25
|
console.log(formatOutput(response, true));
|
|
16
26
|
return;
|
|
17
27
|
}
|
|
18
|
-
const tasks = response.data;
|
|
28
|
+
const tasks = response.data ?? [];
|
|
29
|
+
const meta = response.meta;
|
|
19
30
|
if (tasks.length === 0) {
|
|
20
|
-
|
|
31
|
+
// Never a bare "No tasks found." any more: an empty list must say what it filtered on,
|
|
32
|
+
// or it is indistinguishable from a backlog that simply is not yours (IN-nahetc).
|
|
33
|
+
console.log(formatEmptyLine('tasks', meta));
|
|
21
34
|
return;
|
|
22
35
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
: `Tasks (${response.meta.count}):\n`);
|
|
27
|
-
if (!workspaceScope) {
|
|
36
|
+
console.log(`${heading(tasks.length, meta)}\n`);
|
|
37
|
+
const { grouped, groups } = groupByArea(tasks);
|
|
38
|
+
if (!grouped) {
|
|
28
39
|
console.log(renderTable(tasks));
|
|
29
|
-
return;
|
|
30
40
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
console.log(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
else {
|
|
42
|
+
groups.forEach((group, index) => {
|
|
43
|
+
if (index > 0)
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(`── ${group.label} (${group.rows.length}) ──`);
|
|
46
|
+
console.log(renderTable(group.rows));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
printListMeta(meta, tasks.length);
|
|
50
|
+
// Local mode (and any API older than 9.0.0) sends no `applied_filters`, so nothing above
|
|
51
|
+
// said how to narrow. There the directory-derived area still IS the narrowing, which is
|
|
52
|
+
// why this line survives — and why it is not printed when the server told the truth
|
|
53
|
+
// itself.
|
|
54
|
+
if (!meta?.applied_filters && grouped) {
|
|
55
|
+
console.log('\nNarrow this down with --area <slug>.');
|
|
56
|
+
}
|
|
41
57
|
}
|
|
42
58
|
catch (error) {
|
|
43
59
|
printError(error, options.json);
|
|
44
60
|
process.exitCode = 1;
|
|
45
61
|
}
|
|
46
62
|
}
|
|
63
|
+
/** `Tasks (30 of 143) — workspace my-orbit:` — the count never overstates what is on screen. */
|
|
64
|
+
function heading(shown, meta) {
|
|
65
|
+
const total = meta?.total;
|
|
66
|
+
const count = typeof total === 'number' && total > shown ? `${shown} of ${total}` : `${shown}`;
|
|
67
|
+
const workspace = meta?.workspace?.slug ? ` — workspace ${meta.workspace.slug}` : '';
|
|
68
|
+
return `Tasks (${count})${workspace}:`;
|
|
69
|
+
}
|
|
47
70
|
/**
|
|
48
71
|
* Rows folded into one group per area, in arrival order; area-less rows land in one bucket.
|
|
49
72
|
*
|
|
50
|
-
* The fold itself
|
|
73
|
+
* The fold itself lives in `area-grouping.ts`, shared with the issue/idea/vibe/document
|
|
51
74
|
* listings that grew the same need (TS-adanc8). This keeps the task-shaped result (`tasks`,
|
|
52
75
|
* not `rows`) that callers and tests already use.
|
|
53
76
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/vibes.d.ts
CHANGED
|
@@ -10,10 +10,13 @@ export declare function vibeLogCommand(options: {
|
|
|
10
10
|
}): Promise<void>;
|
|
11
11
|
export declare function vibeListCommand(options: {
|
|
12
12
|
json: boolean;
|
|
13
|
+
/** `--area a,b`: the `area_id` list filter, applied by the adapter. */
|
|
13
14
|
area?: string;
|
|
14
15
|
type?: string;
|
|
15
16
|
since?: string;
|
|
16
17
|
limit?: string;
|
|
18
|
+
/** `--all`: follow `next_cursor` to the end. */
|
|
19
|
+
all?: boolean;
|
|
17
20
|
}): Promise<void>;
|
|
18
21
|
export declare function vibeShowCommand(id: string, options: {
|
|
19
22
|
json: boolean;
|
package/dist/commands/vibes.js
CHANGED
|
@@ -2,6 +2,7 @@ import { createAdapter } from '../adapters/factory.js';
|
|
|
2
2
|
import { confirmWriteTarget } from '../write-target.js';
|
|
3
3
|
import { formatOutput, printError, printSuccess, formatTable, printValidationError } from '../output.js';
|
|
4
4
|
import { printAreaGroups } from '../area-grouping.js';
|
|
5
|
+
import { fetchAllPages, formatEmptyLine, printListMeta, } from '../list-meta.js';
|
|
5
6
|
/**
|
|
6
7
|
* Vibe types this command will log. `Vibe::TYPES` also allows `idea`, but ideas have their
|
|
7
8
|
* own first-class command (`orbitmap idea add`) — logging one as a vibe buries it outside
|
|
@@ -50,22 +51,27 @@ export async function vibeLogCommand(options) {
|
|
|
50
51
|
export async function vibeListCommand(options) {
|
|
51
52
|
try {
|
|
52
53
|
const client = await createAdapter(options.area);
|
|
53
|
-
const
|
|
54
|
+
const page = (cursor) => client.listVibes({
|
|
54
55
|
type: options.type,
|
|
55
56
|
since: options.since,
|
|
56
57
|
limit: options.limit,
|
|
57
|
-
|
|
58
|
+
...(cursor !== undefined ? { cursor } : {}),
|
|
59
|
+
});
|
|
60
|
+
const response = options.all
|
|
61
|
+
? await fetchAllPages(page, (vibe) => vibe.area?.slug ?? null)
|
|
62
|
+
: await page();
|
|
58
63
|
if (options.json) {
|
|
59
64
|
console.log(formatOutput(response, true));
|
|
60
65
|
return;
|
|
61
66
|
}
|
|
62
|
-
const vibes = response.data;
|
|
67
|
+
const vibes = response.data ?? [];
|
|
63
68
|
if (vibes.length === 0) {
|
|
64
|
-
console.log('
|
|
69
|
+
console.log(formatEmptyLine('vibes', response.meta));
|
|
65
70
|
return;
|
|
66
71
|
}
|
|
67
|
-
console.log(`Vibes (${
|
|
72
|
+
console.log(`Vibes (${vibes.length}):\n`);
|
|
68
73
|
printAreaGroups(vibes, renderVibeTable);
|
|
74
|
+
printListMeta(response.meta, vibes.length);
|
|
69
75
|
}
|
|
70
76
|
catch (error) {
|
|
71
77
|
printError(error, options.json);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibes.js","sourceRoot":"","sources":["../../src/commands/vibes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,eAAe,EAAgB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"vibes.js","sourceRoot":"","sources":["../../src/commands/vibes.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -33,10 +33,22 @@ export declare const AREA_CONTEXT_REQUIRED = "AREA_CONTEXT_REQUIRED";
|
|
|
33
33
|
*/
|
|
34
34
|
export declare const WORKSPACE_CONTEXT_REQUIRED = "WORKSPACE_CONTEXT_REQUIRED";
|
|
35
35
|
/**
|
|
36
|
-
* `X-Orbitmap-Workspace` and `X-Orbitmap-Area` named different workspaces (422).
|
|
37
|
-
*
|
|
36
|
+
* `X-Orbitmap-Workspace` and `X-Orbitmap-Area` named different workspaces (422).
|
|
37
|
+
*
|
|
38
|
+
* @deprecated UNREACHABLE since Agent API 9.0.0: the workspace ceiling refuses a foreign
|
|
39
|
+
* `X-Orbitmap-Workspace` with 403 `ACCESS_DENIED` before the area and the workspace are ever
|
|
40
|
+
* compared, so the server can no longer emit this. Nothing in the CLI dispatches on it any
|
|
41
|
+
* more; the constant survives only because the vendored contract fixtures are still pinned
|
|
42
|
+
* to 8.5.0 and one of them is this error body. Delete it with the 9.0.0 re-vendor.
|
|
38
43
|
*/
|
|
39
44
|
export declare const AREA_WORKSPACE_MISMATCH = "AREA_WORKSPACE_MISMATCH";
|
|
45
|
+
/**
|
|
46
|
+
* 409 from `POST /tasks/start`: the next task exists but belongs to another agent, so
|
|
47
|
+
* auto-pick refuses to take it. The error carries `task_id`, `task_number`, `task_title`,
|
|
48
|
+
* `current_owner` and a `suggestion`; the CLI puts the question to the user and only then
|
|
49
|
+
* retries with `confirm_reassign=true` (see `src/commands/start.ts`).
|
|
50
|
+
*/
|
|
51
|
+
export declare const REASSIGN_CONFIRMATION_REQUIRED = "REASSIGN_CONFIRMATION_REQUIRED";
|
|
40
52
|
/** The caller's agent has no access to the area (same code the API uses). */
|
|
41
53
|
export declare const NO_AREA_ACCESS = "NO_AREA_ACCESS";
|
|
42
54
|
/** The caller's role in the area is too low for the operation (same code the API uses). */
|
|
@@ -85,6 +97,15 @@ export declare class OrbitMapAPIError extends Error {
|
|
|
85
97
|
readonly status: number;
|
|
86
98
|
readonly details?: Record<string, unknown>;
|
|
87
99
|
constructor(message: string, code: string, status: number, details?: Record<string, unknown>);
|
|
100
|
+
/**
|
|
101
|
+
* Build the error from the standard `{error: {code, message, status, details?}}` envelope.
|
|
102
|
+
*
|
|
103
|
+
* Anything ELSE the `error` object carries is folded into `details` rather than dropped:
|
|
104
|
+
* the rich errors put their payload at the top level of `error` — the 403s' `required_role`
|
|
105
|
+
* / `current_role` / `suggestion`, and the 409 `REASSIGN_CONFIRMATION_REQUIRED`'s
|
|
106
|
+
* `task_id` / `task_number` / `task_title` / `current_owner`. Dropping those left the CLI
|
|
107
|
+
* unable to ask the very question the server asked it to ask.
|
|
108
|
+
*/
|
|
88
109
|
static fromResponse(body: ApiErrorBody): OrbitMapAPIError;
|
|
89
110
|
static fromFlatResponse(body: FlatApiErrorBody, httpStatus: number): OrbitMapAPIError;
|
|
90
111
|
static workspaceNotFound(message?: string): OrbitMapAPIError;
|
package/dist/errors.js
CHANGED
|
@@ -16,10 +16,22 @@ export const AREA_CONTEXT_REQUIRED = 'AREA_CONTEXT_REQUIRED';
|
|
|
16
16
|
*/
|
|
17
17
|
export const WORKSPACE_CONTEXT_REQUIRED = 'WORKSPACE_CONTEXT_REQUIRED';
|
|
18
18
|
/**
|
|
19
|
-
* `X-Orbitmap-Workspace` and `X-Orbitmap-Area` named different workspaces (422).
|
|
20
|
-
*
|
|
19
|
+
* `X-Orbitmap-Workspace` and `X-Orbitmap-Area` named different workspaces (422).
|
|
20
|
+
*
|
|
21
|
+
* @deprecated UNREACHABLE since Agent API 9.0.0: the workspace ceiling refuses a foreign
|
|
22
|
+
* `X-Orbitmap-Workspace` with 403 `ACCESS_DENIED` before the area and the workspace are ever
|
|
23
|
+
* compared, so the server can no longer emit this. Nothing in the CLI dispatches on it any
|
|
24
|
+
* more; the constant survives only because the vendored contract fixtures are still pinned
|
|
25
|
+
* to 8.5.0 and one of them is this error body. Delete it with the 9.0.0 re-vendor.
|
|
21
26
|
*/
|
|
22
27
|
export const AREA_WORKSPACE_MISMATCH = 'AREA_WORKSPACE_MISMATCH';
|
|
28
|
+
/**
|
|
29
|
+
* 409 from `POST /tasks/start`: the next task exists but belongs to another agent, so
|
|
30
|
+
* auto-pick refuses to take it. The error carries `task_id`, `task_number`, `task_title`,
|
|
31
|
+
* `current_owner` and a `suggestion`; the CLI puts the question to the user and only then
|
|
32
|
+
* retries with `confirm_reassign=true` (see `src/commands/start.ts`).
|
|
33
|
+
*/
|
|
34
|
+
export const REASSIGN_CONFIRMATION_REQUIRED = 'REASSIGN_CONFIRMATION_REQUIRED';
|
|
23
35
|
/** The caller's agent has no access to the area (same code the API uses). */
|
|
24
36
|
export const NO_AREA_ACCESS = 'NO_AREA_ACCESS';
|
|
25
37
|
/** The caller's role in the area is too low for the operation (same code the API uses). */
|
|
@@ -91,9 +103,25 @@ export class OrbitMapAPIError extends Error {
|
|
|
91
103
|
this.status = status;
|
|
92
104
|
this.details = details;
|
|
93
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Build the error from the standard `{error: {code, message, status, details?}}` envelope.
|
|
108
|
+
*
|
|
109
|
+
* Anything ELSE the `error` object carries is folded into `details` rather than dropped:
|
|
110
|
+
* the rich errors put their payload at the top level of `error` — the 403s' `required_role`
|
|
111
|
+
* / `current_role` / `suggestion`, and the 409 `REASSIGN_CONFIRMATION_REQUIRED`'s
|
|
112
|
+
* `task_id` / `task_number` / `task_title` / `current_owner`. Dropping those left the CLI
|
|
113
|
+
* unable to ask the very question the server asked it to ask.
|
|
114
|
+
*/
|
|
94
115
|
static fromResponse(body) {
|
|
95
116
|
const { code, message, status, details } = body.error;
|
|
96
|
-
|
|
117
|
+
const extras = {};
|
|
118
|
+
for (const [key, value] of Object.entries(body.error)) {
|
|
119
|
+
if (key === 'code' || key === 'message' || key === 'status' || key === 'details')
|
|
120
|
+
continue;
|
|
121
|
+
extras[key] = value;
|
|
122
|
+
}
|
|
123
|
+
const merged = Object.keys(extras).length > 0 ? { ...(details ?? {}), ...extras } : details;
|
|
124
|
+
return new OrbitMapAPIError(message, code, status, merged);
|
|
97
125
|
}
|
|
98
126
|
static fromFlatResponse(body, httpStatus) {
|
|
99
127
|
const message = body.message || body.error;
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAmBA,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AAEvE
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|