@creativeintelligence/abbie 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/dev.js +1 -49
- package/bin/run.js +42 -49
- package/dist/cli/commands/project/add.d.ts +0 -1
- package/dist/cli/commands/project/add.js +16 -52
- package/dist/cli/commands/project/list.js +13 -93
- package/dist/cli/commands/project/remove.d.ts +0 -2
- package/dist/cli/commands/project/remove.js +11 -28
- package/dist/cli/commands/session/list.js +3 -12
- package/dist/cli/commands/session/mark-done.js +1 -7
- package/dist/cli/commands/session/start.d.ts +0 -1
- package/dist/cli/commands/session/start.js +5 -7
- package/dist/lib/active-sessions.d.ts +0 -12
- package/dist/lib/active-sessions.js +6 -175
- package/dist/lib/project-path.d.ts +6 -0
- package/dist/lib/project-path.js +21 -0
- package/dist/lib.d.ts +1 -2
- package/dist/lib.js +2 -4
- package/oclif.manifest.json +2569 -6368
- package/package.json +1 -1
- package/dist/cli/commands/backlog/add.d.ts +0 -22
- package/dist/cli/commands/backlog/add.js +0 -65
- package/dist/cli/commands/backlog/claim.d.ts +0 -19
- package/dist/cli/commands/backlog/claim.js +0 -45
- package/dist/cli/commands/backlog/complete.d.ts +0 -18
- package/dist/cli/commands/backlog/complete.js +0 -42
- package/dist/cli/commands/backlog/list.d.ts +0 -20
- package/dist/cli/commands/backlog/list.js +0 -91
- package/dist/cli/commands/backlog/pick.d.ts +0 -18
- package/dist/cli/commands/backlog/pick.js +0 -42
- package/dist/cli/commands/backlog/sync.d.ts +0 -24
- package/dist/cli/commands/backlog/sync.js +0 -109
- package/dist/cli/commands/daemon.d.ts +0 -56
- package/dist/cli/commands/daemon.js +0 -1465
- package/dist/cli/commands/docs/lint.d.ts +0 -18
- package/dist/cli/commands/docs/lint.js +0 -82
- package/dist/cli/commands/docs/sync.d.ts +0 -19
- package/dist/cli/commands/docs/sync.js +0 -76
- package/dist/cli/commands/gc.d.ts +0 -29
- package/dist/cli/commands/gc.js +0 -211
- package/dist/cli/commands/index.d.ts +0 -36
- package/dist/cli/commands/index.js +0 -228
- package/dist/cli/commands/panes/broker.d.ts +0 -17
- package/dist/cli/commands/panes/broker.js +0 -57
- package/dist/cli/commands/panes/pipe-sink.d.ts +0 -17
- package/dist/cli/commands/panes/pipe-sink.js +0 -90
- package/dist/cli/commands/panes/snapshot.d.ts +0 -20
- package/dist/cli/commands/panes/snapshot.js +0 -125
- package/dist/cli/commands/preview/init.d.ts +0 -25
- package/dist/cli/commands/preview/init.js +0 -159
- package/dist/cli/commands/preview/sync.d.ts +0 -23
- package/dist/cli/commands/preview/sync.js +0 -144
- package/dist/cli/commands/preview/watch.d.ts +0 -24
- package/dist/cli/commands/preview/watch.js +0 -153
- package/dist/cli/commands/resource/acquire.d.ts +0 -21
- package/dist/cli/commands/resource/acquire.js +0 -90
- package/dist/cli/commands/resource/list.d.ts +0 -15
- package/dist/cli/commands/resource/list.js +0 -61
- package/dist/cli/commands/resource/release.d.ts +0 -18
- package/dist/cli/commands/resource/release.js +0 -50
- package/dist/cli/commands/resource/wait.d.ts +0 -21
- package/dist/cli/commands/resource/wait.js +0 -73
- package/dist/cli/commands/session/view.d.ts +0 -24
- package/dist/cli/commands/session/view.js +0 -145
- package/dist/cli/commands/start.d.ts +0 -37
- package/dist/cli/commands/start.js +0 -234
- package/dist/cli/commands/triage/claim.d.ts +0 -23
- package/dist/cli/commands/triage/claim.js +0 -186
- package/dist/cli/commands/triage/list.d.ts +0 -22
- package/dist/cli/commands/triage/list.js +0 -112
- package/dist/cli/commands/triage/next.d.ts +0 -18
- package/dist/cli/commands/triage/next.js +0 -63
- package/dist/cli/commands/triage/pull.d.ts +0 -19
- package/dist/cli/commands/triage/pull.js +0 -82
- package/dist/cli/commands/triage/stats.d.ts +0 -16
- package/dist/cli/commands/triage/stats.js +0 -69
- package/dist/cli/commands/tunnel/list.d.ts +0 -16
- package/dist/cli/commands/tunnel/list.js +0 -98
- package/dist/cli/commands/tunnel/start.d.ts +0 -24
- package/dist/cli/commands/tunnel/start.js +0 -107
- package/dist/cli/commands/tunnel/stop.d.ts +0 -20
- package/dist/cli/commands/tunnel/stop.js +0 -90
- package/dist/cli/commands/tunnel/url.d.ts +0 -21
- package/dist/cli/commands/tunnel/url.js +0 -70
- package/dist/cli/commands/windows/context.d.ts +0 -18
- package/dist/cli/commands/windows/context.js +0 -326
- package/dist/cli/commands/windows/focus.d.ts +0 -17
- package/dist/cli/commands/windows/focus.js +0 -103
- package/dist/cli/commands/windows/list.d.ts +0 -21
- package/dist/cli/commands/windows/list.js +0 -172
- package/dist/cli/commands/windows/map.d.ts +0 -17
- package/dist/cli/commands/windows/map.js +0 -168
- package/dist/cli/commands/windows/read.d.ts +0 -21
- package/dist/cli/commands/windows/read.js +0 -241
- package/dist/cli/commands/windows/search.d.ts +0 -24
- package/dist/cli/commands/windows/search.js +0 -171
- package/dist/cli/commands/windows/show.d.ts +0 -19
- package/dist/cli/commands/windows/show.js +0 -165
- package/dist/cli/commands/windows/watch.d.ts +0 -19
- package/dist/cli/commands/windows/watch.js +0 -241
- package/dist/lib/managed-session.d.ts +0 -27
- package/dist/lib/managed-session.js +0 -105
- package/dist/lib/panes/broker.d.ts +0 -130
- package/dist/lib/panes/broker.js +0 -97
- package/dist/lib/panes/index.d.ts +0 -2
- package/dist/lib/panes/index.js +0 -1
- package/dist/lib/panes/server.d.ts +0 -17
- package/dist/lib/panes/server.js +0 -308
- package/dist/lib/preview/manager.d.ts +0 -77
- package/dist/lib/preview/manager.js +0 -369
- package/dist/lib/preview/schema.d.ts +0 -2
- package/dist/lib/preview/schema.js +0 -32
- package/dist/lib/preview/sprite.d.ts +0 -85
- package/dist/lib/preview/sprite.js +0 -321
- package/dist/lib/preview/watcher.d.ts +0 -63
- package/dist/lib/preview/watcher.js +0 -185
- package/dist/lib/project-identity.d.ts +0 -16
- package/dist/lib/project-identity.js +0 -75
- package/dist/lib/tmux/bridge.d.ts +0 -133
- package/dist/lib/tmux/bridge.js +0 -315
- package/dist/lib/tmux/context.d.ts +0 -82
- package/dist/lib/tmux/context.js +0 -239
- package/dist/lib/tmux/index.d.ts +0 -8
- package/dist/lib/tmux/index.js +0 -11
- package/dist/lib/tmux/map.d.ts +0 -57
- package/dist/lib/tmux/map.js +0 -198
- package/dist/lib/tmux/panes.d.ts +0 -27
- package/dist/lib/tmux/panes.js +0 -151
- package/dist/lib/tmux/redaction.d.ts +0 -57
- package/dist/lib/tmux/redaction.js +0 -152
- package/dist/lib/web/analytics.d.ts +0 -63
- package/dist/lib/web/analytics.js +0 -168
- package/dist/lib/web/server.d.ts +0 -26
- package/dist/lib/web/server.js +0 -697
- package/dist/lib/web/tmux-bridge.d.ts +0 -7
- package/dist/lib/web/tmux-bridge.js +0 -7
- package/dist/lib/windows/index.d.ts +0 -3
- package/dist/lib/windows/index.js +0 -2
- package/dist/lib/windows/inventory.d.ts +0 -21
- package/dist/lib/windows/inventory.js +0 -263
- package/dist/lib/windows/types.d.ts +0 -46
- package/dist/lib/windows/types.js +0 -1
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from "../../base-command.js";
|
|
2
|
-
export default class TriageClaim extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static hidden: boolean;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
"source-workspace": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
"source-team": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
-
"tracking-workspace": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
"tracking-team": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
agent: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
assignee: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
state: import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
-
"dry-run": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
-
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
-
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
-
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
-
"json-errors": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
-
ndjson: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
-
};
|
|
21
|
-
protected execute(): Promise<unknown>;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=claim.d.ts.map
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import { fetchLinearIssues } from "../../../lib/triage.js";
|
|
3
|
-
import { classifyWithLLM } from "../../../lib/triage-llm.js";
|
|
4
|
-
import { createTrackingIssue, isTracked } from "../../../lib/triage-tracker.js";
|
|
5
|
-
import { BaseCommand } from "../../base-command.js";
|
|
6
|
-
export default class TriageClaim extends BaseCommand {
|
|
7
|
-
static description = "Claim next issue: LLM classifies from source workspace, creates tracking issue in luke-labs";
|
|
8
|
-
static hidden = false;
|
|
9
|
-
static examples = [
|
|
10
|
-
"<%= config.bin %> triage claim",
|
|
11
|
-
"<%= config.bin %> triage claim --source-workspace zocomputer --source-team ZO",
|
|
12
|
-
"<%= config.bin %> triage claim --agent copilot",
|
|
13
|
-
"<%= config.bin %> triage claim --dry-run",
|
|
14
|
-
];
|
|
15
|
-
static flags = {
|
|
16
|
-
...BaseCommand.baseFlags,
|
|
17
|
-
"source-workspace": Flags.string({
|
|
18
|
-
char: "s",
|
|
19
|
-
description: "Source workspace (where real issues live)",
|
|
20
|
-
default: "zocomputer",
|
|
21
|
-
}),
|
|
22
|
-
"source-team": Flags.string({
|
|
23
|
-
char: "t",
|
|
24
|
-
description: "Source team",
|
|
25
|
-
default: "ZO",
|
|
26
|
-
}),
|
|
27
|
-
"tracking-workspace": Flags.string({
|
|
28
|
-
description: "Tracking workspace (for agent work)",
|
|
29
|
-
default: "luke-labs",
|
|
30
|
-
}),
|
|
31
|
-
"tracking-team": Flags.string({
|
|
32
|
-
description: "Tracking team",
|
|
33
|
-
default: "ZO",
|
|
34
|
-
}),
|
|
35
|
-
agent: Flags.string({
|
|
36
|
-
char: "a",
|
|
37
|
-
description: "Filter by agent capability after classification",
|
|
38
|
-
options: ["copilot", "claude", "codex", "human"],
|
|
39
|
-
}),
|
|
40
|
-
assignee: Flags.string({
|
|
41
|
-
description: "Filter source issues by assignee",
|
|
42
|
-
default: "luke",
|
|
43
|
-
}),
|
|
44
|
-
state: Flags.string({
|
|
45
|
-
description: "Filter source issues by state",
|
|
46
|
-
multiple: true,
|
|
47
|
-
default: ["Todo", "Backlog"],
|
|
48
|
-
}),
|
|
49
|
-
"dry-run": Flags.boolean({
|
|
50
|
-
char: "n",
|
|
51
|
-
description: "Classify but do not create tracking issue",
|
|
52
|
-
default: false,
|
|
53
|
-
}),
|
|
54
|
-
limit: Flags.integer({
|
|
55
|
-
char: "l",
|
|
56
|
-
description: "Max issues to consider from source",
|
|
57
|
-
default: 20,
|
|
58
|
-
}),
|
|
59
|
-
};
|
|
60
|
-
async execute() {
|
|
61
|
-
const { flags } = await this.parse(TriageClaim);
|
|
62
|
-
this.parsedFlags = flags;
|
|
63
|
-
// Fetch source issues
|
|
64
|
-
this.logInfo(`Fetching issues from ${flags["source-workspace"]}/${flags["source-team"]}...`);
|
|
65
|
-
const issues = await fetchLinearIssues({
|
|
66
|
-
workspace: flags["source-workspace"],
|
|
67
|
-
team: flags["source-team"],
|
|
68
|
-
assignee: flags.assignee,
|
|
69
|
-
states: flags.state,
|
|
70
|
-
limit: flags.limit,
|
|
71
|
-
});
|
|
72
|
-
if (issues.length === 0) {
|
|
73
|
-
if (flags.json || flags.format === "json") {
|
|
74
|
-
return { status: "no_issues", message: "No issues found in source" };
|
|
75
|
-
}
|
|
76
|
-
this.logInfo("No issues found in source workspace");
|
|
77
|
-
return { status: "no_issues" };
|
|
78
|
-
}
|
|
79
|
-
// Find first untracked issue
|
|
80
|
-
let targetIssue = null;
|
|
81
|
-
for (const issue of issues) {
|
|
82
|
-
const tracked = isTracked(issue.identifier);
|
|
83
|
-
if (!tracked || tracked.status === "done") {
|
|
84
|
-
targetIssue = issue;
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (!targetIssue) {
|
|
89
|
-
if (flags.json || flags.format === "json") {
|
|
90
|
-
return { status: "all_tracked", message: "All source issues are already tracked" };
|
|
91
|
-
}
|
|
92
|
-
this.logInfo("All source issues are already tracked");
|
|
93
|
-
return { status: "all_tracked" };
|
|
94
|
-
}
|
|
95
|
-
// LLM classification
|
|
96
|
-
this.logInfo(`Classifying ${targetIssue.identifier}: ${targetIssue.title}`);
|
|
97
|
-
const classification = await classifyWithLLM(targetIssue);
|
|
98
|
-
// Filter by agent if specified
|
|
99
|
-
if (flags.agent && classification.agent !== flags.agent) {
|
|
100
|
-
// Find another issue that matches the agent filter
|
|
101
|
-
for (const issue of issues) {
|
|
102
|
-
if (issue.identifier === targetIssue.identifier)
|
|
103
|
-
continue;
|
|
104
|
-
const tracked = isTracked(issue.identifier);
|
|
105
|
-
if (tracked && tracked.status !== "done")
|
|
106
|
-
continue;
|
|
107
|
-
const cls = await classifyWithLLM(issue);
|
|
108
|
-
if (cls.agent === flags.agent) {
|
|
109
|
-
targetIssue = issue;
|
|
110
|
-
Object.assign(classification, cls);
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (classification.agent !== flags.agent) {
|
|
115
|
-
if (flags.json || flags.format === "json") {
|
|
116
|
-
return {
|
|
117
|
-
status: "no_match",
|
|
118
|
-
message: `No issues found suitable for ${flags.agent} agent`,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
this.logInfo(`No issues found suitable for ${flags.agent} agent`);
|
|
122
|
-
return { status: "no_match" };
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Create tracking issue
|
|
126
|
-
const tracking = await createTrackingIssue(targetIssue, classification, {
|
|
127
|
-
sourceWorkspace: flags["source-workspace"],
|
|
128
|
-
sourceTeam: flags["source-team"],
|
|
129
|
-
trackingWorkspace: flags["tracking-workspace"],
|
|
130
|
-
trackingTeam: flags["tracking-team"],
|
|
131
|
-
dryRun: flags["dry-run"],
|
|
132
|
-
});
|
|
133
|
-
if (flags.json || flags.format === "json") {
|
|
134
|
-
return {
|
|
135
|
-
status: "claimed",
|
|
136
|
-
source: {
|
|
137
|
-
identifier: targetIssue.identifier,
|
|
138
|
-
title: targetIssue.title,
|
|
139
|
-
url: tracking.source_url,
|
|
140
|
-
},
|
|
141
|
-
classification: {
|
|
142
|
-
type: classification.type,
|
|
143
|
-
complexity: classification.complexity,
|
|
144
|
-
agent: classification.agent,
|
|
145
|
-
confidence: classification.confidence,
|
|
146
|
-
reasoning: classification.reasoning,
|
|
147
|
-
suggested_prompt: classification.suggested_prompt,
|
|
148
|
-
tags: classification.tags,
|
|
149
|
-
},
|
|
150
|
-
tracking: {
|
|
151
|
-
identifier: tracking.tracking_identifier,
|
|
152
|
-
url: tracking.tracking_url,
|
|
153
|
-
workspace: flags["tracking-workspace"],
|
|
154
|
-
team: flags["tracking-team"],
|
|
155
|
-
},
|
|
156
|
-
dry_run: flags["dry-run"],
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
// Human-readable output
|
|
160
|
-
this.log("");
|
|
161
|
-
this.log(`${flags["dry-run"] ? "[DRY RUN] " : ""}Claimed: ${targetIssue.identifier}`);
|
|
162
|
-
this.log(`Title: ${targetIssue.title}`);
|
|
163
|
-
this.log("");
|
|
164
|
-
this.log("Classification:");
|
|
165
|
-
this.log(` Type: ${classification.type}`);
|
|
166
|
-
this.log(` Complexity: ${classification.complexity}`);
|
|
167
|
-
this.log(` Agent: ${classification.agent}`);
|
|
168
|
-
this.log(` Confidence: ${classification.confidence}/10`);
|
|
169
|
-
this.log("");
|
|
170
|
-
this.log("Reasoning:");
|
|
171
|
-
this.log(` ${classification.reasoning}`);
|
|
172
|
-
this.log("");
|
|
173
|
-
this.log("Suggested Prompt:");
|
|
174
|
-
this.log(` ${classification.suggested_prompt}`);
|
|
175
|
-
this.log("");
|
|
176
|
-
if (!flags["dry-run"] && tracking.tracking_identifier) {
|
|
177
|
-
this.log(`Tracking: ${tracking.tracking_identifier}`);
|
|
178
|
-
this.log(`URL: ${tracking.tracking_url}`);
|
|
179
|
-
}
|
|
180
|
-
return {
|
|
181
|
-
status: "claimed",
|
|
182
|
-
source: targetIssue.identifier,
|
|
183
|
-
tracking: tracking.tracking_identifier,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from "../../base-command.js";
|
|
2
|
-
export default class TriageList extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static hidden: boolean;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
workspace: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
-
agent: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
complexity: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
pending: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
ids: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
-
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
-
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
-
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
-
"json-errors": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
-
ndjson: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
-
};
|
|
20
|
-
protected execute(): Promise<unknown>;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import { createTriageManager, } from "../../../lib/triage.js";
|
|
3
|
-
import { BaseCommand } from "../../base-command.js";
|
|
4
|
-
export default class TriageList extends BaseCommand {
|
|
5
|
-
static description = "List triaged issues with optional filters";
|
|
6
|
-
static hidden = false;
|
|
7
|
-
static examples = [
|
|
8
|
-
"<%= config.bin %> triage list --workspace zocomputer --team ZO",
|
|
9
|
-
"<%= config.bin %> triage list -w zocomputer -t ZO --agent claude",
|
|
10
|
-
"<%= config.bin %> triage list -w zocomputer -t ZO --type bug --complexity simple",
|
|
11
|
-
"<%= config.bin %> triage list -w zocomputer -t ZO --ids",
|
|
12
|
-
];
|
|
13
|
-
static flags = {
|
|
14
|
-
...BaseCommand.baseFlags,
|
|
15
|
-
workspace: Flags.string({
|
|
16
|
-
char: "w",
|
|
17
|
-
description: "Linear workspace",
|
|
18
|
-
required: true,
|
|
19
|
-
}),
|
|
20
|
-
team: Flags.string({
|
|
21
|
-
char: "t",
|
|
22
|
-
description: "Linear team",
|
|
23
|
-
required: true,
|
|
24
|
-
}),
|
|
25
|
-
agent: Flags.string({
|
|
26
|
-
char: "a",
|
|
27
|
-
description: "Filter by agent",
|
|
28
|
-
options: ["claude", "codex", "copilot", "human"],
|
|
29
|
-
}),
|
|
30
|
-
type: Flags.string({
|
|
31
|
-
description: "Filter by issue type",
|
|
32
|
-
options: ["bug", "feature", "refactor", "improvement", "chore", "unknown"],
|
|
33
|
-
}),
|
|
34
|
-
complexity: Flags.string({
|
|
35
|
-
char: "c",
|
|
36
|
-
description: "Filter by complexity",
|
|
37
|
-
options: ["trivial", "simple", "medium", "complex", "epic"],
|
|
38
|
-
}),
|
|
39
|
-
pending: Flags.boolean({
|
|
40
|
-
char: "p",
|
|
41
|
-
description: "Only show pending (not queued) issues",
|
|
42
|
-
default: false,
|
|
43
|
-
}),
|
|
44
|
-
ids: Flags.boolean({
|
|
45
|
-
description: "Output only issue identifiers (for piping)",
|
|
46
|
-
default: false,
|
|
47
|
-
}),
|
|
48
|
-
limit: Flags.integer({
|
|
49
|
-
char: "l",
|
|
50
|
-
description: "Limit output",
|
|
51
|
-
default: 20,
|
|
52
|
-
}),
|
|
53
|
-
};
|
|
54
|
-
async execute() {
|
|
55
|
-
const { flags } = await this.parse(TriageList);
|
|
56
|
-
this.parsedFlags = flags;
|
|
57
|
-
const manager = createTriageManager();
|
|
58
|
-
const queue = manager.load(flags.workspace, flags.team);
|
|
59
|
-
if (!queue) {
|
|
60
|
-
if (flags.json || flags.format === "json") {
|
|
61
|
-
return { issues: [] };
|
|
62
|
-
}
|
|
63
|
-
this.error(`No queue found for ${flags.workspace}/${flags.team}. Run 'triage pull' first.`);
|
|
64
|
-
}
|
|
65
|
-
// Filter issues
|
|
66
|
-
let issues = queue.issues;
|
|
67
|
-
if (flags.agent) {
|
|
68
|
-
issues = issues.filter((i) => i.agent === flags.agent);
|
|
69
|
-
}
|
|
70
|
-
if (flags.type) {
|
|
71
|
-
issues = issues.filter((i) => i.type === flags.type);
|
|
72
|
-
}
|
|
73
|
-
if (flags.complexity) {
|
|
74
|
-
issues = issues.filter((i) => i.complexity === flags.complexity);
|
|
75
|
-
}
|
|
76
|
-
if (flags.pending) {
|
|
77
|
-
issues = issues.filter((i) => !i.queued_at);
|
|
78
|
-
}
|
|
79
|
-
// Apply limit
|
|
80
|
-
issues = issues.slice(0, flags.limit);
|
|
81
|
-
if (flags.json || flags.format === "json") {
|
|
82
|
-
return { issues };
|
|
83
|
-
}
|
|
84
|
-
// NDJSON: one issue per line
|
|
85
|
-
if (this.ndjsonEnabled()) {
|
|
86
|
-
this.outputNdjson(issues);
|
|
87
|
-
return { issues };
|
|
88
|
-
}
|
|
89
|
-
// IDs only (for piping)
|
|
90
|
-
if (flags.ids) {
|
|
91
|
-
for (const issue of issues) {
|
|
92
|
-
this.log(issue.issue.identifier);
|
|
93
|
-
}
|
|
94
|
-
return { issues };
|
|
95
|
-
}
|
|
96
|
-
// Human-readable output
|
|
97
|
-
if (issues.length === 0) {
|
|
98
|
-
this.logInfo("No matching issues");
|
|
99
|
-
return { issues: [] };
|
|
100
|
-
}
|
|
101
|
-
this.log("");
|
|
102
|
-
for (const issue of issues) {
|
|
103
|
-
const status = issue.queued_at ? "✓" : "○";
|
|
104
|
-
const tags = issue.tags.length > 0 ? ` [${issue.tags.slice(0, 3).join(", ")}]` : "";
|
|
105
|
-
this.log(`${status} ${issue.issue.identifier} ${issue.agent}/${issue.type}/${issue.complexity}`);
|
|
106
|
-
this.log(` ${issue.issue.title}${tags}`);
|
|
107
|
-
this.log(` confidence: ${issue.confidence} | ${issue.reason}`);
|
|
108
|
-
this.log("");
|
|
109
|
-
}
|
|
110
|
-
return { issues };
|
|
111
|
-
}
|
|
112
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from "../../base-command.js";
|
|
2
|
-
export default class TriageNext extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static hidden: boolean;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
workspace: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
-
agent: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
mark: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
-
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
"json-errors": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
-
ndjson: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
-
};
|
|
16
|
-
protected execute(): Promise<unknown>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=next.d.ts.map
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import { createTriageManager } from "../../../lib/triage.js";
|
|
3
|
-
import { BaseCommand } from "../../base-command.js";
|
|
4
|
-
export default class TriageNext extends BaseCommand {
|
|
5
|
-
static description = "Get next issue for an agent from triage queue";
|
|
6
|
-
static hidden = false;
|
|
7
|
-
static examples = [
|
|
8
|
-
"<%= config.bin %> triage next --workspace zocomputer --team ZO --agent claude",
|
|
9
|
-
"<%= config.bin %> triage next -w zocomputer -t ZO -a codex --json",
|
|
10
|
-
"<%= config.bin %> triage next -w zocomputer -t ZO -a copilot | xargs linear issue view",
|
|
11
|
-
];
|
|
12
|
-
static flags = {
|
|
13
|
-
...BaseCommand.baseFlags,
|
|
14
|
-
workspace: Flags.string({
|
|
15
|
-
char: "w",
|
|
16
|
-
description: "Linear workspace",
|
|
17
|
-
required: true,
|
|
18
|
-
}),
|
|
19
|
-
team: Flags.string({
|
|
20
|
-
char: "t",
|
|
21
|
-
description: "Linear team",
|
|
22
|
-
required: true,
|
|
23
|
-
}),
|
|
24
|
-
agent: Flags.string({
|
|
25
|
-
char: "a",
|
|
26
|
-
description: "Agent type (claude, codex, copilot, human)",
|
|
27
|
-
required: true,
|
|
28
|
-
options: ["claude", "codex", "copilot", "human"],
|
|
29
|
-
}),
|
|
30
|
-
mark: Flags.boolean({
|
|
31
|
-
char: "m",
|
|
32
|
-
description: "Mark issue as queued",
|
|
33
|
-
default: false,
|
|
34
|
-
}),
|
|
35
|
-
};
|
|
36
|
-
async execute() {
|
|
37
|
-
const { flags } = await this.parse(TriageNext);
|
|
38
|
-
this.parsedFlags = flags;
|
|
39
|
-
const manager = createTriageManager();
|
|
40
|
-
const agent = flags.agent;
|
|
41
|
-
const issue = manager.next(flags.workspace, flags.team, agent);
|
|
42
|
-
if (!issue) {
|
|
43
|
-
if (flags.json || flags.format === "json") {
|
|
44
|
-
return { found: false };
|
|
45
|
-
}
|
|
46
|
-
this.logInfo(`No issues available for ${agent}`);
|
|
47
|
-
return { found: false };
|
|
48
|
-
}
|
|
49
|
-
// Mark as queued if requested
|
|
50
|
-
if (flags.mark) {
|
|
51
|
-
manager.markQueued(flags.workspace, flags.team, issue.issue.identifier);
|
|
52
|
-
}
|
|
53
|
-
if (flags.json || flags.format === "json") {
|
|
54
|
-
return {
|
|
55
|
-
found: true,
|
|
56
|
-
...issue,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// Unix pipe output: just the identifier
|
|
60
|
-
this.log(issue.issue.identifier);
|
|
61
|
-
return { found: true, identifier: issue.issue.identifier };
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from "../../base-command.js";
|
|
2
|
-
export default class TriagePull extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static hidden: boolean;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
workspace: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
-
assignee: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
state: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
-
"json-errors": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
-
ndjson: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
-
};
|
|
17
|
-
protected execute(): Promise<unknown>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import { createTriageManager } from "../../../lib/triage.js";
|
|
3
|
-
import { BaseCommand } from "../../base-command.js";
|
|
4
|
-
export default class TriagePull extends BaseCommand {
|
|
5
|
-
static description = "Pull and triage issues from Linear workspace";
|
|
6
|
-
static hidden = false;
|
|
7
|
-
static examples = [
|
|
8
|
-
"<%= config.bin %> triage pull --workspace zocomputer --team ZO",
|
|
9
|
-
"<%= config.bin %> triage pull --workspace zocomputer --team ZO --assignee luke",
|
|
10
|
-
"<%= config.bin %> triage pull --workspace zocomputer --team ZO --json",
|
|
11
|
-
'<%= config.bin %> triage pull -w zocomputer -t ZO | jq ".issues[] | .issue.identifier"',
|
|
12
|
-
];
|
|
13
|
-
static flags = {
|
|
14
|
-
...BaseCommand.baseFlags,
|
|
15
|
-
workspace: Flags.string({
|
|
16
|
-
char: "w",
|
|
17
|
-
description: "Linear workspace",
|
|
18
|
-
required: true,
|
|
19
|
-
}),
|
|
20
|
-
team: Flags.string({
|
|
21
|
-
char: "t",
|
|
22
|
-
description: "Linear team",
|
|
23
|
-
required: true,
|
|
24
|
-
}),
|
|
25
|
-
assignee: Flags.string({
|
|
26
|
-
char: "a",
|
|
27
|
-
description: "Filter by assignee",
|
|
28
|
-
}),
|
|
29
|
-
state: Flags.string({
|
|
30
|
-
char: "s",
|
|
31
|
-
description: "Filter by state (can be repeated)",
|
|
32
|
-
multiple: true,
|
|
33
|
-
}),
|
|
34
|
-
limit: Flags.integer({
|
|
35
|
-
char: "l",
|
|
36
|
-
description: "Maximum issues to pull",
|
|
37
|
-
default: 50,
|
|
38
|
-
}),
|
|
39
|
-
};
|
|
40
|
-
async execute() {
|
|
41
|
-
const { flags } = await this.parse(TriagePull);
|
|
42
|
-
this.parsedFlags = flags;
|
|
43
|
-
const manager = createTriageManager();
|
|
44
|
-
const queue = manager.refresh({
|
|
45
|
-
workspace: flags.workspace,
|
|
46
|
-
team: flags.team,
|
|
47
|
-
assignee: flags.assignee,
|
|
48
|
-
states: flags.state,
|
|
49
|
-
limit: flags.limit,
|
|
50
|
-
});
|
|
51
|
-
if (flags.json || flags.format === "json") {
|
|
52
|
-
return queue;
|
|
53
|
-
}
|
|
54
|
-
// Human-readable output
|
|
55
|
-
this.log(`\nTriaged ${queue.issues.length} issues from ${flags.workspace}/${flags.team}\n`);
|
|
56
|
-
const stats = manager.stats(flags.workspace, flags.team);
|
|
57
|
-
if (stats) {
|
|
58
|
-
this.log("By Agent:");
|
|
59
|
-
for (const [agent, count] of Object.entries(stats.byAgent)) {
|
|
60
|
-
this.log(` ${agent}: ${count}`);
|
|
61
|
-
}
|
|
62
|
-
this.log("");
|
|
63
|
-
this.log("By Type:");
|
|
64
|
-
for (const [type, count] of Object.entries(stats.byType)) {
|
|
65
|
-
this.log(` ${type}: ${count}`);
|
|
66
|
-
}
|
|
67
|
-
this.log("");
|
|
68
|
-
this.log("By Complexity:");
|
|
69
|
-
for (const [complexity, count] of Object.entries(stats.byComplexity)) {
|
|
70
|
-
this.log(` ${complexity}: ${count}`);
|
|
71
|
-
}
|
|
72
|
-
this.log("");
|
|
73
|
-
}
|
|
74
|
-
// Show top 5 issues
|
|
75
|
-
this.log("Top Issues:");
|
|
76
|
-
for (const issue of queue.issues.slice(0, 5)) {
|
|
77
|
-
const tags = issue.tags.length > 0 ? ` [${issue.tags.join(", ")}]` : "";
|
|
78
|
-
this.log(` ${issue.issue.identifier} (${issue.agent}/${issue.complexity}): ${issue.issue.title}${tags}`);
|
|
79
|
-
}
|
|
80
|
-
return queue;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from "../../base-command.js";
|
|
2
|
-
export default class TriageStats extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static hidden: boolean;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
workspace: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
-
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
-
"json-errors": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
-
ndjson: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
};
|
|
14
|
-
protected execute(): Promise<unknown>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import { createTriageManager } from "../../../lib/triage.js";
|
|
3
|
-
import { BaseCommand } from "../../base-command.js";
|
|
4
|
-
export default class TriageStats extends BaseCommand {
|
|
5
|
-
static description = "Show triage queue statistics";
|
|
6
|
-
static hidden = false;
|
|
7
|
-
static examples = [
|
|
8
|
-
"<%= config.bin %> triage stats --workspace zocomputer --team ZO",
|
|
9
|
-
"<%= config.bin %> triage stats -w zocomputer -t ZO --json",
|
|
10
|
-
];
|
|
11
|
-
static flags = {
|
|
12
|
-
...BaseCommand.baseFlags,
|
|
13
|
-
workspace: Flags.string({
|
|
14
|
-
char: "w",
|
|
15
|
-
description: "Linear workspace",
|
|
16
|
-
required: true,
|
|
17
|
-
}),
|
|
18
|
-
team: Flags.string({
|
|
19
|
-
char: "t",
|
|
20
|
-
description: "Linear team",
|
|
21
|
-
required: true,
|
|
22
|
-
}),
|
|
23
|
-
};
|
|
24
|
-
async execute() {
|
|
25
|
-
const { flags } = await this.parse(TriageStats);
|
|
26
|
-
this.parsedFlags = flags;
|
|
27
|
-
const manager = createTriageManager();
|
|
28
|
-
const stats = manager.stats(flags.workspace, flags.team);
|
|
29
|
-
if (!stats) {
|
|
30
|
-
if (flags.json || flags.format === "json") {
|
|
31
|
-
return { found: false };
|
|
32
|
-
}
|
|
33
|
-
this.error(`No queue found for ${flags.workspace}/${flags.team}. Run 'triage pull' first.`);
|
|
34
|
-
}
|
|
35
|
-
if (flags.json || flags.format === "json") {
|
|
36
|
-
return stats;
|
|
37
|
-
}
|
|
38
|
-
// Human-readable output
|
|
39
|
-
this.log(`\nTriage Queue: ${flags.workspace}/${flags.team}\n`);
|
|
40
|
-
this.log(`Total: ${stats.total}`);
|
|
41
|
-
this.log(`Pending: ${stats.pending}`);
|
|
42
|
-
this.log(`Queued: ${stats.queued}`);
|
|
43
|
-
this.log("");
|
|
44
|
-
this.log("By Agent:");
|
|
45
|
-
for (const [agent, count] of Object.entries(stats.byAgent)) {
|
|
46
|
-
const pct = ((count / stats.total) * 100).toFixed(0);
|
|
47
|
-
this.log(` ${agent.padEnd(8)} ${String(count).padStart(3)} (${pct}%)`);
|
|
48
|
-
}
|
|
49
|
-
this.log("");
|
|
50
|
-
this.log("By Type:");
|
|
51
|
-
for (const [type, count] of Object.entries(stats.byType)) {
|
|
52
|
-
const pct = ((count / stats.total) * 100).toFixed(0);
|
|
53
|
-
this.log(` ${type.padEnd(12)} ${String(count).padStart(3)} (${pct}%)`);
|
|
54
|
-
}
|
|
55
|
-
this.log("");
|
|
56
|
-
this.log("By Complexity:");
|
|
57
|
-
for (const [complexity, count] of Object.entries(stats.byComplexity)) {
|
|
58
|
-
const pct = ((count / stats.total) * 100).toFixed(0);
|
|
59
|
-
this.log(` ${complexity.padEnd(8)} ${String(count).padStart(3)} (${pct}%)`);
|
|
60
|
-
}
|
|
61
|
-
this.log("");
|
|
62
|
-
this.log("By Priority:");
|
|
63
|
-
for (const [priority, count] of Object.entries(stats.byPriority)) {
|
|
64
|
-
const pct = ((count / stats.total) * 100).toFixed(0);
|
|
65
|
-
this.log(` ${priority.padEnd(12)} ${String(count).padStart(3)} (${pct}%)`);
|
|
66
|
-
}
|
|
67
|
-
return stats;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BaseCommand } from "../../base-command.js";
|
|
2
|
-
export default class TunnelList extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static hidden: boolean;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
urls: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
-
status: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
format: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
-
"json-errors": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
-
ndjson: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
};
|
|
14
|
-
protected execute(): Promise<unknown>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=list.d.ts.map
|