@oxgeneral/orch 1.0.2 → 1.0.4
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/dist/App-SSYYVFGW.js +22 -0
- package/dist/agent-Q34L27AY.js +9 -0
- package/dist/agent-shop-D2RS4BZK.js +2 -0
- package/dist/chunk-4MMHVHA6.js +112 -0
- package/dist/chunk-64WUDYEM.js +6 -0
- package/dist/chunk-6MJ7V6VY.js +2 -0
- package/dist/{chunk-DAVHOWGD.js → chunk-BCPUTULS.js} +16 -188
- package/dist/{chunk-INZ4O2RI.js → chunk-BSJVYRI3.js} +5 -2
- package/dist/chunk-BSJVYRI3.js.map +1 -0
- package/dist/chunk-CDFA4IIQ.js +2 -0
- package/dist/chunk-CHRW4CLD.js +2 -0
- package/dist/chunk-HMMPM7MF.js +3 -0
- package/dist/chunk-HXOMNULD.js +2 -0
- package/dist/chunk-IKNBPOQL.js +2 -0
- package/dist/chunk-KFQTWMZI.js +3 -0
- package/dist/chunk-LXNRCJ22.js +2 -0
- package/dist/{chunk-C6XZ3FJT.js → chunk-MOWC2CHX.js} +7 -4
- package/dist/chunk-MOWC2CHX.js.map +1 -0
- package/dist/chunk-P4JTJBWO.js +2 -0
- package/dist/chunk-PJ5DKXGR.js +2 -0
- package/dist/chunk-QNZ6D63E.js +4 -0
- package/dist/chunk-RHFRHCN5.js +16 -0
- package/dist/chunk-RHFRHCN5.js.map +1 -0
- package/dist/chunk-TPTHLFOB.js +2 -0
- package/dist/chunk-UMZEA3JT.js +5 -0
- package/dist/chunk-X54D5JZG.js +11 -0
- package/dist/{chunk-O2OQCSBL.js → chunk-YHIYJ5OL.js} +105 -29
- package/dist/chunk-YHIYJ5OL.js.map +1 -0
- package/dist/{claude-WUJU5KIE.js → claude-4R6L6BWY.js} +4 -4
- package/dist/{claude-WUJU5KIE.js.map → claude-4R6L6BWY.js.map} +1 -1
- package/dist/claude-ZLVOLRUG.js +2 -0
- package/dist/cli.js +1 -213
- package/dist/clipboard-service-WVON5ZN4.js +25 -0
- package/dist/{codex-NYJWEPRQ.js → codex-IMOW5ZUZ.js} +4 -4
- package/dist/{codex-NYJWEPRQ.js.map → codex-IMOW5ZUZ.js.map} +1 -1
- package/dist/codex-YRSODLH4.js +2 -0
- package/dist/config-OOB7QEKM.js +2 -0
- package/dist/container-FJI7RN2L.js +4 -0
- package/dist/context-FXRERFSP.js +7 -0
- package/dist/cursor-2HILMNM3.js +2 -0
- package/dist/{cursor-3YHVD4NP.js → cursor-NHV7X3WG.js} +4 -4
- package/dist/{cursor-3YHVD4NP.js.map → cursor-NHV7X3WG.js.map} +1 -1
- package/dist/doctor-GKTV4YYD.js +2 -0
- package/dist/doctor-service-PB7YBH3F.js +2 -0
- package/dist/editor-7IFRWVTL.js +8 -0
- package/dist/goal-RNNZYMNR.js +8 -0
- package/dist/index.d.ts +26 -8
- package/dist/index.js +247 -75
- package/dist/index.js.map +1 -1
- package/dist/init-56QC5QVX.js +53 -0
- package/dist/logs-4ISTWUWV.js +12 -0
- package/dist/msg-4ELI7Q52.js +9 -0
- package/dist/opencode-3S4VDXRG.js +2 -0
- package/dist/{opencode-FAMPSA6X.js → opencode-ULT6DYCT.js} +6 -5
- package/dist/opencode-ULT6DYCT.js.map +1 -0
- package/dist/orchestrator-PM4BW7W5.js +13 -0
- package/dist/orchestrator-QFNYZ6AH.js +6 -0
- package/dist/{orchestrator-X2CWGFCL.js.map → orchestrator-QFNYZ6AH.js.map} +1 -1
- package/dist/org-WAK3CDPG.js +3 -0
- package/dist/process-manager-33H27MQF.js +2 -0
- package/dist/registry-BO2PPRNG.js +2 -0
- package/dist/run-NE5E4JPW.js +3 -0
- package/dist/shell-OBHIVC2H.js +2 -0
- package/dist/{shell-NJNW3O6K.js → shell-UXEJRK3D.js} +4 -4
- package/dist/{shell-NJNW3O6K.js.map → shell-UXEJRK3D.js.map} +1 -1
- package/dist/shop-picker-LE3SKFOX.js +5 -0
- package/dist/status-NYHZ7Q5G.js +2 -0
- package/dist/task-SZBYNAZP.js +20 -0
- package/dist/team-VCJSUDWX.js +4 -0
- package/dist/template-engine-42PKL5KD.js +2 -0
- package/dist/tui-4VRDSRVB.js +2 -0
- package/dist/update-FFKCOV63.js +2 -0
- package/dist/update-check-HGMBDYHL.js +2 -0
- package/dist/{workspace-manager-2SFPKPLZ.js → workspace-manager-ABXFBL2A.js} +3 -3
- package/dist/{workspace-manager-2SFPKPLZ.js.map → workspace-manager-ABXFBL2A.js.map} +1 -1
- package/dist/workspace-manager-Q6WWXSTR.js +3 -0
- package/package.json +1 -1
- package/dist/App-YQOT4LBE.js +0 -6727
- package/dist/agent-7ZJ3ZDJ7.js +0 -183
- package/dist/agent-shop-YN2BSLHM.js +0 -2
- package/dist/chunk-2C2TFQ7K.js +0 -136
- package/dist/chunk-45K2XID7.js +0 -29
- package/dist/chunk-4IFIOMCW.js +0 -86
- package/dist/chunk-7X2GI5OV.js +0 -181
- package/dist/chunk-C6XZ3FJT.js.map +0 -1
- package/dist/chunk-CHIP7O6V.js +0 -83
- package/dist/chunk-FRTKB575.js +0 -87
- package/dist/chunk-HXYAZGLP.js +0 -15
- package/dist/chunk-I3SMISEF.js +0 -29
- package/dist/chunk-INZ4O2RI.js.map +0 -1
- package/dist/chunk-ITLJKMTP.js +0 -297
- package/dist/chunk-K6DMQERQ.js +0 -89
- package/dist/chunk-MGGSRXWJ.js +0 -69
- package/dist/chunk-O2OQCSBL.js.map +0 -1
- package/dist/chunk-P6ATSXGL.js +0 -107
- package/dist/chunk-PNE6LQRF.js +0 -5
- package/dist/chunk-U2VDNUZL.js +0 -52
- package/dist/chunk-VXS2CJFH.js +0 -273
- package/dist/chunk-XDVMX2FO.js +0 -8
- package/dist/chunk-XDVMX2FO.js.map +0 -1
- package/dist/chunk-XJTJ2TJV.js +0 -221
- package/dist/claude-ZUEKJJ4X.js +0 -5
- package/dist/clipboard-service-RTDUUQQU.js +0 -200
- package/dist/codex-7IXXXG5U.js +0 -123
- package/dist/config-OTAVSMOD.js +0 -75
- package/dist/container-IZZVO4AH.js +0 -1596
- package/dist/context-OL4BVUV5.js +0 -83
- package/dist/cursor-622RBRHH.js +0 -97
- package/dist/doctor-SETNAS4S.js +0 -67
- package/dist/doctor-service-TPOMFAIG.js +0 -2
- package/dist/goal-C6YGSX5D.js +0 -143
- package/dist/init-SWAAXP5H.js +0 -199
- package/dist/logs-PHPYWQ6I.js +0 -207
- package/dist/msg-FUWWLEKM.js +0 -95
- package/dist/opencode-FAMPSA6X.js.map +0 -1
- package/dist/opencode-WOR53TSC.js +0 -98
- package/dist/orchestrator-O6MFMATT.js +0 -1448
- package/dist/orchestrator-X2CWGFCL.js +0 -5
- package/dist/org-JSMMBZHI.js +0 -249
- package/dist/process-manager-HUVNAPQV.js +0 -2
- package/dist/registry-PQWRVNF2.js +0 -2
- package/dist/run-N72G5V2H.js +0 -95
- package/dist/shell-DVFHHYAZ.js +0 -5
- package/dist/shop-picker-2HY67UWP.js +0 -79
- package/dist/status-RZWN2C6C.js +0 -56
- package/dist/task-XNYZHPCS.js +0 -221
- package/dist/team-PFLP4PPL.js +0 -97
- package/dist/template-engine-AWIS56BL.js +0 -3
- package/dist/tui-JW3DOOKH.js +0 -245
- package/dist/update-YLP7FPNY.js +0 -64
- package/dist/update-check-4YKLGBFB.js +0 -2
- package/dist/workspace-manager-ESPU7WOH.js +0 -215
package/dist/org-JSMMBZHI.js
DELETED
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { getShopTemplateByKey } from './chunk-DAVHOWGD.js';
|
|
3
|
-
import { printTable, dim, printError, printSuccess } from './chunk-7X2GI5OV.js';
|
|
4
|
-
|
|
5
|
-
// src/domain/org-shop.ts
|
|
6
|
-
var ORG_TEMPLATES = [
|
|
7
|
-
// ── Engineering ──
|
|
8
|
-
{
|
|
9
|
-
key: "startup-mvp",
|
|
10
|
-
name: "Startup MVP",
|
|
11
|
-
description: "Ship an MVP in 48 hours",
|
|
12
|
-
lead_index: 0,
|
|
13
|
-
agents: [
|
|
14
|
-
{ shop_key: "architect", name: "CTO" },
|
|
15
|
-
{ shop_key: "backend-dev", name: "Backend" },
|
|
16
|
-
{ shop_key: "backend-dev", name: "Backend 2" },
|
|
17
|
-
{ shop_key: "frontend-dev", name: "Frontend" },
|
|
18
|
-
{ shop_key: "qa-engineer", name: "QA" },
|
|
19
|
-
{ shop_key: "code-reviewer", name: "Reviewer" }
|
|
20
|
-
]
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
key: "pr-review-corp",
|
|
24
|
-
name: "PR Review Corp",
|
|
25
|
-
description: "Automated review for every PR",
|
|
26
|
-
lead_index: 0,
|
|
27
|
-
agents: [
|
|
28
|
-
{ shop_key: "architect", name: "CTO" },
|
|
29
|
-
{ shop_key: "security-auditor", name: "Security" },
|
|
30
|
-
{ shop_key: "performance-engineer", name: "Performance" },
|
|
31
|
-
{ shop_key: "code-reviewer", name: "Style" },
|
|
32
|
-
{ shop_key: "qa-engineer", name: "QA" }
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
key: "migration-squad",
|
|
37
|
-
name: "Migration Squad",
|
|
38
|
-
description: "JS-to-TS migration over a weekend",
|
|
39
|
-
lead_index: 0,
|
|
40
|
-
agents: [
|
|
41
|
-
{ shop_key: "architect", name: "CTO" },
|
|
42
|
-
{ shop_key: "fullstack-dev", name: "Migrator" },
|
|
43
|
-
{ shop_key: "fullstack-dev", name: "Migrator 2" },
|
|
44
|
-
{ shop_key: "fullstack-dev", name: "Migrator 3" },
|
|
45
|
-
{ shop_key: "qa-engineer", name: "QA" },
|
|
46
|
-
{ shop_key: "code-reviewer", name: "Reviewer" }
|
|
47
|
-
]
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
key: "security-dept",
|
|
51
|
-
name: "Security Department",
|
|
52
|
-
description: "Multi-layer security audit",
|
|
53
|
-
lead_index: 0,
|
|
54
|
-
agents: [
|
|
55
|
-
{ shop_key: "security-auditor", name: "Lead Auditor" },
|
|
56
|
-
{ shop_key: "security-auditor", name: "Scanner" },
|
|
57
|
-
{ shop_key: "security-auditor", name: "Secrets Auditor" },
|
|
58
|
-
{ shop_key: "bug-hunter", name: "Hunter" },
|
|
59
|
-
{ shop_key: "code-reviewer", name: "Reviewer" }
|
|
60
|
-
]
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
key: "test-factory",
|
|
64
|
-
name: "Test Factory",
|
|
65
|
-
description: "Coverage from 40% to 80% overnight",
|
|
66
|
-
lead_index: 0,
|
|
67
|
-
agents: [
|
|
68
|
-
{ shop_key: "qa-engineer", name: "Coverage Lead" },
|
|
69
|
-
{ shop_key: "backend-dev", name: "Backend" },
|
|
70
|
-
{ shop_key: "backend-dev", name: "Backend 2" },
|
|
71
|
-
{ shop_key: "qa-engineer", name: "QA" },
|
|
72
|
-
{ shop_key: "qa-engineer", name: "QA 2" },
|
|
73
|
-
{ shop_key: "code-reviewer", name: "Reviewer" }
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
// ── Beyond Engineering ──
|
|
77
|
-
{
|
|
78
|
-
key: "content-agency",
|
|
79
|
-
name: "Content Agency",
|
|
80
|
-
description: "Content factory: plan, write, edit, optimize",
|
|
81
|
-
lead_index: 0,
|
|
82
|
-
agents: [
|
|
83
|
-
{ shop_key: "marketer", name: "Strategist" },
|
|
84
|
-
{ shop_key: "content-creator", name: "Writer" },
|
|
85
|
-
{ shop_key: "content-creator", name: "Writer 2" },
|
|
86
|
-
{ shop_key: "tech-writer", name: "Editor" },
|
|
87
|
-
{ shop_key: "growth-hacker", name: "SEO" }
|
|
88
|
-
]
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
key: "data-lab",
|
|
92
|
-
name: "Data Lab",
|
|
93
|
-
description: "3 CSVs to executive report by morning",
|
|
94
|
-
lead_index: 0,
|
|
95
|
-
agents: [
|
|
96
|
-
{ shop_key: "data-engineer", name: "Lead Analyst" },
|
|
97
|
-
{ shop_key: "data-engineer", name: "Data Engineer" }
|
|
98
|
-
]
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
key: "sales-machine",
|
|
102
|
-
name: "Sales Machine",
|
|
103
|
-
description: "Outbound pipeline: research, outreach, follow-up, close",
|
|
104
|
-
lead_index: 0,
|
|
105
|
-
agents: [
|
|
106
|
-
{ shop_key: "marketer", name: "Sales Director" },
|
|
107
|
-
{ shop_key: "content-creator", name: "SDR" },
|
|
108
|
-
{ shop_key: "content-creator", name: "SDR 2" },
|
|
109
|
-
{ shop_key: "content-creator", name: "Copywriter" },
|
|
110
|
-
{ shop_key: "growth-hacker", name: "Growth Analyst" }
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
key: "bugfix-dept",
|
|
115
|
-
name: "Bugfix Department",
|
|
116
|
-
description: "100 issues to 0 in a week",
|
|
117
|
-
lead_index: 0,
|
|
118
|
-
agents: [
|
|
119
|
-
{ shop_key: "architect", name: "Triager" },
|
|
120
|
-
{ shop_key: "bug-hunter", name: "Fixer" },
|
|
121
|
-
{ shop_key: "bug-hunter", name: "Fixer 2" },
|
|
122
|
-
{ shop_key: "bug-hunter", name: "Fixer 3" },
|
|
123
|
-
{ shop_key: "qa-engineer", name: "QA" },
|
|
124
|
-
{ shop_key: "code-reviewer", name: "Reviewer" }
|
|
125
|
-
]
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
key: "docs-team",
|
|
129
|
-
name: "Docs Team",
|
|
130
|
-
description: "Technical docs from codebase analysis",
|
|
131
|
-
lead_index: 0,
|
|
132
|
-
agents: [
|
|
133
|
-
{ shop_key: "architect", name: "Docs Lead" },
|
|
134
|
-
{ shop_key: "tech-writer", name: "Writer" },
|
|
135
|
-
{ shop_key: "tech-writer", name: "Writer 2" },
|
|
136
|
-
{ shop_key: "tech-writer", name: "Editor" },
|
|
137
|
-
{ shop_key: "code-reviewer", name: "Reviewer" }
|
|
138
|
-
]
|
|
139
|
-
}
|
|
140
|
-
];
|
|
141
|
-
function getOrgTemplateByKey(key) {
|
|
142
|
-
return ORG_TEMPLATES.find((t) => t.key === key);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// src/cli/commands/org.ts
|
|
146
|
-
function registerOrgCommand(program, container) {
|
|
147
|
-
const org = program.command("org").description("Pre-built AI companies \u2014 deploy a full department with one command");
|
|
148
|
-
org.command("list").alias("ls").description("List available company templates").action(async () => {
|
|
149
|
-
if (container.context.json) {
|
|
150
|
-
console.log(JSON.stringify(ORG_TEMPLATES, null, 2));
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
console.log();
|
|
154
|
-
const headers = ["KEY", "NAME", "AGENTS", "DESCRIPTION"];
|
|
155
|
-
const rows = ORG_TEMPLATES.map((t) => [
|
|
156
|
-
t.key,
|
|
157
|
-
t.name,
|
|
158
|
-
String(t.agents.length),
|
|
159
|
-
t.description
|
|
160
|
-
]);
|
|
161
|
-
printTable(headers, rows);
|
|
162
|
-
console.log();
|
|
163
|
-
console.log(` ${dim("Deploy:")} orch org deploy <key> --goal "Your objective"`);
|
|
164
|
-
console.log();
|
|
165
|
-
});
|
|
166
|
-
org.command("deploy <template>").description("Deploy a pre-built AI company").option("--goal <goal>", "Set a goal for the team").action(async (templateKey, opts) => {
|
|
167
|
-
await container.paths.requireInit();
|
|
168
|
-
const template = getOrgTemplateByKey(templateKey);
|
|
169
|
-
if (!template) {
|
|
170
|
-
printError(
|
|
171
|
-
`Unknown template "${templateKey}"`,
|
|
172
|
-
`Run: orch org list \u2014 to see available templates`
|
|
173
|
-
);
|
|
174
|
-
process.exitCode = 1;
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
const agentIds = [];
|
|
178
|
-
for (const entry of template.agents) {
|
|
179
|
-
const shopTemplate = getShopTemplateByKey(entry.shop_key);
|
|
180
|
-
if (!shopTemplate) {
|
|
181
|
-
printError(`Agent shop template not found: ${entry.shop_key}`);
|
|
182
|
-
process.exitCode = 1;
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
try {
|
|
186
|
-
const agent = await container.agentService.create({
|
|
187
|
-
name: entry.name,
|
|
188
|
-
adapter: shopTemplate.adapter,
|
|
189
|
-
role: shopTemplate.role,
|
|
190
|
-
model: shopTemplate.model,
|
|
191
|
-
approval_policy: shopTemplate.approval_policy,
|
|
192
|
-
skills: shopTemplate.skills
|
|
193
|
-
});
|
|
194
|
-
agentIds.push(agent.id);
|
|
195
|
-
} catch (err) {
|
|
196
|
-
printError(
|
|
197
|
-
`Failed to create agent "${entry.name}": ${err instanceof Error ? err.message : String(err)}`,
|
|
198
|
-
agentIds.length > 0 ? `${agentIds.length} agent(s) were already created. Clean up with: orch agent list` : void 0
|
|
199
|
-
);
|
|
200
|
-
process.exitCode = 1;
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
const leadId = agentIds[template.lead_index];
|
|
205
|
-
const memberIds = agentIds.filter((id) => id !== leadId);
|
|
206
|
-
const team = await container.teamService.create({
|
|
207
|
-
name: template.name,
|
|
208
|
-
description: template.description,
|
|
209
|
-
lead_agent_id: leadId,
|
|
210
|
-
member_agent_ids: memberIds
|
|
211
|
-
});
|
|
212
|
-
let goalId;
|
|
213
|
-
if (opts.goal) {
|
|
214
|
-
const goal = await container.goalService.create({
|
|
215
|
-
title: opts.goal,
|
|
216
|
-
assignee: leadId
|
|
217
|
-
});
|
|
218
|
-
goalId = goal.id;
|
|
219
|
-
}
|
|
220
|
-
if (container.context.json) {
|
|
221
|
-
console.log(JSON.stringify({ team, agentIds, goalId }, null, 2));
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
if (container.context.quiet) {
|
|
225
|
-
console.log(team.id);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
console.log();
|
|
229
|
-
printSuccess(`Deployed team "${template.name}" \u2014 ${template.agents.length} agents`);
|
|
230
|
-
console.log();
|
|
231
|
-
for (let i = 0; i < template.agents.length; i++) {
|
|
232
|
-
const entry = template.agents[i];
|
|
233
|
-
const id = agentIds[i];
|
|
234
|
-
const isLead = i === template.lead_index;
|
|
235
|
-
const role = isLead ? "lead" : "member";
|
|
236
|
-
console.log(` ${isLead ? "\u2605" : "\u2022"} ${entry.name} ${dim(`(${id}, ${role})`)}`);
|
|
237
|
-
}
|
|
238
|
-
console.log(`
|
|
239
|
-
Team: ${dim(team.id)}`);
|
|
240
|
-
if (goalId) {
|
|
241
|
-
console.log(` Goal: ${dim(goalId)} \u2014 "${opts.goal}"`);
|
|
242
|
-
}
|
|
243
|
-
console.log();
|
|
244
|
-
console.log(` ${dim("Next:")} orch run --all --watch`);
|
|
245
|
-
console.log();
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
export { registerOrgCommand };
|
package/dist/run-N72G5V2H.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { printError, amber, printSuccess, dim, getIcon } from './chunk-7X2GI5OV.js';
|
|
3
|
-
|
|
4
|
-
// src/cli/commands/run.ts
|
|
5
|
-
function registerRunCommand(program, container) {
|
|
6
|
-
program.command("run [task-id]").description("Run tasks").option("--all", "Run all todo tasks").option("--watch", "Watch mode: continuous orchestration").action(async (taskId, opts) => {
|
|
7
|
-
await container.paths.requireInit();
|
|
8
|
-
if (opts.watch) {
|
|
9
|
-
await runWatch(container);
|
|
10
|
-
} else if (opts.all) {
|
|
11
|
-
await runAll(container);
|
|
12
|
-
} else if (taskId) {
|
|
13
|
-
await runSingle(container, taskId);
|
|
14
|
-
} else {
|
|
15
|
-
printError("Specify a task ID, --all, or --watch");
|
|
16
|
-
process.exit(2);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
async function runSingle(container, taskId) {
|
|
21
|
-
const task = await container.taskService.get(taskId);
|
|
22
|
-
console.log();
|
|
23
|
-
console.log(` ${amber("orch")} \xB7 running ${taskId} "${task.title}"`);
|
|
24
|
-
const unsub = container.eventBus.onAny((event) => {
|
|
25
|
-
const time = (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", { hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit" });
|
|
26
|
-
switch (event.type) {
|
|
27
|
-
case "agent:output":
|
|
28
|
-
console.log(` ${dim(time)} ${getIcon("agentAction")} ${typeof event.data === "string" ? event.data.slice(0, 80) : ""}`);
|
|
29
|
-
break;
|
|
30
|
-
case "agent:file_changed":
|
|
31
|
-
console.log(` ${dim(time)} ${getIcon("agentAction")} Modified ${event.path}`);
|
|
32
|
-
break;
|
|
33
|
-
case "agent:error":
|
|
34
|
-
console.log(` ${dim(time)} ${getIcon("failed")} ${event.error}`);
|
|
35
|
-
break;
|
|
36
|
-
case "agent:completed":
|
|
37
|
-
if (event.success) {
|
|
38
|
-
printSuccess("Done");
|
|
39
|
-
} else {
|
|
40
|
-
printError("Failed");
|
|
41
|
-
}
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
try {
|
|
46
|
-
await container.orchestrator.runTask(taskId);
|
|
47
|
-
} finally {
|
|
48
|
-
unsub();
|
|
49
|
-
}
|
|
50
|
-
console.log();
|
|
51
|
-
}
|
|
52
|
-
async function runAll(container) {
|
|
53
|
-
console.log();
|
|
54
|
-
console.log(` ${amber("orch")} \xB7 running all todo tasks`);
|
|
55
|
-
console.log();
|
|
56
|
-
await container.orchestrator.runAll();
|
|
57
|
-
}
|
|
58
|
-
async function runWatch(container) {
|
|
59
|
-
console.log(`${amber("orch")} \xB7 watching \xB7 poll interval ${container.config.scheduling.poll_interval_ms / 1e3}s`);
|
|
60
|
-
console.log("\u2501".repeat(43));
|
|
61
|
-
console.log();
|
|
62
|
-
container.eventBus.onAny((event) => {
|
|
63
|
-
const time = (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", { hour12: false, hour: "2-digit", minute: "2-digit" });
|
|
64
|
-
switch (event.type) {
|
|
65
|
-
case "agent:output": {
|
|
66
|
-
const data = typeof event.data === "string" ? event.data.slice(0, 60) : "";
|
|
67
|
-
console.log(`${dim(time)} ${getIcon("agentAction")} ${data}`);
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
case "agent:completed":
|
|
71
|
-
if (event.success) {
|
|
72
|
-
console.log(`${dim(time)} ${getIcon("done")} DONE ${event.runId}`);
|
|
73
|
-
} else {
|
|
74
|
-
console.log(`${dim(time)} ${getIcon("failed")} FAIL ${event.runId}`);
|
|
75
|
-
}
|
|
76
|
-
break;
|
|
77
|
-
case "run:retry":
|
|
78
|
-
console.log(`${dim(time)} ${getIcon("retrying")} RETRY attempt ${event.attempt} \xB7 next in ${Math.round(event.delay_ms / 1e3)}s`);
|
|
79
|
-
break;
|
|
80
|
-
case "orchestrator:tick":
|
|
81
|
-
process.stdout.write(`\r${amber("orch")} \xB7 watching \xB7 ${event.running} running \xB7 ${event.queued} queued `);
|
|
82
|
-
break;
|
|
83
|
-
case "orchestrator:stall_detected":
|
|
84
|
-
console.log(`${dim(time)} ${getIcon("warning")} STALL ${event.runId}`);
|
|
85
|
-
break;
|
|
86
|
-
case "orchestrator:shutdown":
|
|
87
|
-
console.log(`
|
|
88
|
-
${dim("Shutting down...")}`);
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
await container.orchestrator.startWatch();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export { registerRunCommand };
|
package/dist/shell-DVFHHYAZ.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import * as readline from 'readline';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
|
|
5
|
-
async function pickFromShop(templates) {
|
|
6
|
-
if (!process.stdin.isTTY) return null;
|
|
7
|
-
let selected = 0;
|
|
8
|
-
function getPageSize() {
|
|
9
|
-
const rows = process.stdout.rows ?? 24;
|
|
10
|
-
return Math.max(1, Math.min(templates.length, rows - 4));
|
|
11
|
-
}
|
|
12
|
-
function render() {
|
|
13
|
-
const pageSize = getPageSize();
|
|
14
|
-
process.stdout.write("\x1B[2J\x1B[H");
|
|
15
|
-
console.log(chalk.bold.yellow("\n AGENT SHOP") + chalk.gray(" \u2014 arrow keys to navigate, enter to select, q to cancel\n"));
|
|
16
|
-
const start = Math.max(0, Math.min(selected - Math.floor(pageSize / 2), templates.length - pageSize));
|
|
17
|
-
const end = Math.min(start + pageSize, templates.length);
|
|
18
|
-
for (let i = start; i < end; i++) {
|
|
19
|
-
const t = templates[i];
|
|
20
|
-
const isSelected = i === selected;
|
|
21
|
-
const cursor = isSelected ? chalk.yellow(" \u25B8 ") : " ";
|
|
22
|
-
const name = isSelected ? chalk.bold.white(t.name) : chalk.gray(t.name);
|
|
23
|
-
const desc = chalk.gray(` \u2014 ${t.description}`);
|
|
24
|
-
const model = chalk.gray.dim(` [${t.model.replace("claude-", "")}]`);
|
|
25
|
-
console.log(`${cursor}${name}${desc}${model}`);
|
|
26
|
-
}
|
|
27
|
-
if (templates.length > pageSize) {
|
|
28
|
-
console.log(chalk.gray(`
|
|
29
|
-
${start + 1}-${end} of ${templates.length}`));
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return new Promise((resolve) => {
|
|
33
|
-
const rl = readline.createInterface({ input: process.stdin });
|
|
34
|
-
process.stdin.setRawMode(true);
|
|
35
|
-
readline.emitKeypressEvents(process.stdin);
|
|
36
|
-
function cleanup() {
|
|
37
|
-
process.stdin.removeListener("keypress", onKeypress);
|
|
38
|
-
try {
|
|
39
|
-
process.stdin.setRawMode(false);
|
|
40
|
-
} catch {
|
|
41
|
-
}
|
|
42
|
-
rl.close();
|
|
43
|
-
process.stdout.write("\x1B[2J\x1B[H");
|
|
44
|
-
}
|
|
45
|
-
const onKeypress = (_ch, key) => {
|
|
46
|
-
if (key.name === "up" || key.ctrl && key.name === "p") {
|
|
47
|
-
selected = (selected - 1 + templates.length) % templates.length;
|
|
48
|
-
render();
|
|
49
|
-
} else if (key.name === "down" || key.ctrl && key.name === "n") {
|
|
50
|
-
selected = (selected + 1) % templates.length;
|
|
51
|
-
render();
|
|
52
|
-
} else if (key.name === "return") {
|
|
53
|
-
cleanup();
|
|
54
|
-
resolve(templates[selected]);
|
|
55
|
-
} else if (key.name === "q" || key.name === "escape" || key.ctrl && key.name === "c") {
|
|
56
|
-
cleanup();
|
|
57
|
-
resolve(null);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
rl.on("error", () => {
|
|
61
|
-
cleanup();
|
|
62
|
-
resolve(null);
|
|
63
|
-
});
|
|
64
|
-
rl.on("close", () => {
|
|
65
|
-
cleanup();
|
|
66
|
-
resolve(null);
|
|
67
|
-
});
|
|
68
|
-
try {
|
|
69
|
-
render();
|
|
70
|
-
} catch {
|
|
71
|
-
cleanup();
|
|
72
|
-
resolve(null);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
process.stdin.on("keypress", onKeypress);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export { pickFromShop };
|
package/dist/status-RZWN2C6C.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { formatDurationSince, amber, dim, statusIcon, agentName, priorityLabel, formatTokens } from './chunk-7X2GI5OV.js';
|
|
3
|
-
|
|
4
|
-
// src/cli/commands/status.ts
|
|
5
|
-
function registerStatusCommand(program, container) {
|
|
6
|
-
program.command("status").description("Show orchestrator status").action(async () => {
|
|
7
|
-
await container.paths.requireInit();
|
|
8
|
-
const tasks = await container.taskService.list();
|
|
9
|
-
const agents = await container.agentService.list();
|
|
10
|
-
const state = await container.stateStore.read();
|
|
11
|
-
if (container.context.json) {
|
|
12
|
-
console.log(JSON.stringify({ tasks, agents, state }, null, 2));
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const runningCount = Object.keys(state.running).length;
|
|
16
|
-
const mode = state.pid ? "watching" : "idle";
|
|
17
|
-
const uptime = state.started_at ? formatDurationSince(state.started_at) : "";
|
|
18
|
-
console.log();
|
|
19
|
-
console.log(`${amber("orch")} \xB7 ${container.config.project.name} \xB7 ${mode}`);
|
|
20
|
-
console.log();
|
|
21
|
-
const counts = {};
|
|
22
|
-
for (const t of tasks) {
|
|
23
|
-
counts[t.status] = (counts[t.status] ?? 0) + 1;
|
|
24
|
-
}
|
|
25
|
-
if (runningCount > 0) {
|
|
26
|
-
console.log(` ${"RUNNING".padEnd(12)}${runningCount}${"".padEnd(20)}AGENTS ${agents.length}`);
|
|
27
|
-
}
|
|
28
|
-
for (const [status, count] of Object.entries(counts)) {
|
|
29
|
-
if (status !== "in_progress") {
|
|
30
|
-
console.log(` ${dim(status.padEnd(12))}${count}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const runningTasks = tasks.filter((t) => t.status === "in_progress");
|
|
34
|
-
if (runningTasks.length > 0) {
|
|
35
|
-
console.log();
|
|
36
|
-
for (const t of runningTasks) {
|
|
37
|
-
const time = formatDurationSince(t.updated_at);
|
|
38
|
-
console.log(
|
|
39
|
-
` ${statusIcon("in_progress")} ${t.assignee ? agentName(t.assignee) : ""} ${t.title.slice(0, 35).padEnd(37)}${time} ${priorityLabel(t.priority)}`
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const totalTokens = state.stats.total_tokens.total;
|
|
44
|
-
const footer = [
|
|
45
|
-
uptime ? `up ${uptime}` : null,
|
|
46
|
-
totalTokens > 0 ? `${formatTokens(totalTokens)} tokens` : null
|
|
47
|
-
].filter(Boolean).join(" \xB7 ");
|
|
48
|
-
if (footer) {
|
|
49
|
-
console.log();
|
|
50
|
-
console.log(` ${dim(footer)}`);
|
|
51
|
-
}
|
|
52
|
-
console.log();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export { registerStatusCommand };
|