@oxgeneral/orch 0.2.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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/dist/App-CPQPQTZU.js +4751 -0
  3. package/dist/agent-J62U7ABO.js +157 -0
  4. package/dist/chunk-2B32FPEB.js +11 -0
  5. package/dist/chunk-2B32FPEB.js.map +1 -0
  6. package/dist/chunk-2VSAM7RH.js +166 -0
  7. package/dist/chunk-33QNTNR6.js +46 -0
  8. package/dist/chunk-45K2XID7.js +29 -0
  9. package/dist/chunk-6GFVB6EK.js +101 -0
  10. package/dist/chunk-6HENRUYZ.js +2 -0
  11. package/dist/chunk-6HENRUYZ.js.map +1 -0
  12. package/dist/chunk-AELEEEV3.js +92 -0
  13. package/dist/chunk-AELEEEV3.js.map +1 -0
  14. package/dist/chunk-CHIP7O6V.js +83 -0
  15. package/dist/chunk-CIIE6LNG.js +217 -0
  16. package/dist/chunk-E3TCKHU6.js +13 -0
  17. package/dist/chunk-E3TCKHU6.js.map +1 -0
  18. package/dist/chunk-ED47GL3F.js +29 -0
  19. package/dist/chunk-HNKJ4IF7.js +177 -0
  20. package/dist/chunk-HXYAZGLP.js +15 -0
  21. package/dist/chunk-IRN2U2NE.js +79 -0
  22. package/dist/chunk-IZYSGYXG.js +2 -0
  23. package/dist/chunk-IZYSGYXG.js.map +1 -0
  24. package/dist/chunk-O5AO5QIR.js +76 -0
  25. package/dist/chunk-P6ATSXGL.js +107 -0
  26. package/dist/chunk-PBFE5V3G.js +2 -0
  27. package/dist/chunk-PBFE5V3G.js.map +1 -0
  28. package/dist/chunk-PNE6LQRF.js +5 -0
  29. package/dist/chunk-POUC4CPC.js +2 -0
  30. package/dist/chunk-POUC4CPC.js.map +1 -0
  31. package/dist/chunk-TX7WOFCW.js +59 -0
  32. package/dist/chunk-VTA74YWX.js +291 -0
  33. package/dist/chunk-XI4TU6VU.js +50 -0
  34. package/dist/chunk-ZU6AY2VU.js +2 -0
  35. package/dist/chunk-ZU6AY2VU.js.map +1 -0
  36. package/dist/claude-GH6P2DC5.js +4 -0
  37. package/dist/claude-S47YTIHU.js +2 -0
  38. package/dist/claude-S47YTIHU.js.map +1 -0
  39. package/dist/cli.js +205 -0
  40. package/dist/codex-2CH57B7G.js +2 -0
  41. package/dist/codex-2CH57B7G.js.map +1 -0
  42. package/dist/codex-U7LTJTX6.js +115 -0
  43. package/dist/config-VN4MYHSY.js +75 -0
  44. package/dist/container-74P43KDY.js +1532 -0
  45. package/dist/context-EPHCF34F.js +83 -0
  46. package/dist/cursor-3DI5GKRF.js +92 -0
  47. package/dist/cursor-QFUNKPCQ.js +2 -0
  48. package/dist/cursor-QFUNKPCQ.js.map +1 -0
  49. package/dist/doctor-BK46WCQ5.js +67 -0
  50. package/dist/doctor-service-A34DHPKI.js +2 -0
  51. package/dist/doctor-service-NTWBWOM2.js +2 -0
  52. package/dist/doctor-service-NTWBWOM2.js.map +1 -0
  53. package/dist/goal-KGAIM3ZK.js +110 -0
  54. package/dist/index.d.ts +1356 -0
  55. package/dist/index.js +6 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/init-QBWCEDCI.js +152 -0
  58. package/dist/logs-PYEKMQE2.js +207 -0
  59. package/dist/msg-BBIPCGDO.js +95 -0
  60. package/dist/orchestrator-TAFBYQQ5.js +2 -0
  61. package/dist/orchestrator-TAFBYQQ5.js.map +1 -0
  62. package/dist/orchestrator-VGYKSOZJ.js +1292 -0
  63. package/dist/output-5VQVCJ2K.js +2 -0
  64. package/dist/process-manager-HUVNAPQV.js +2 -0
  65. package/dist/process-manager-TLZOTO4Y.js +2 -0
  66. package/dist/process-manager-TLZOTO4Y.js.map +1 -0
  67. package/dist/registry-PQWRVNF2.js +2 -0
  68. package/dist/registry-UQAHK77P.js +2 -0
  69. package/dist/registry-UQAHK77P.js.map +1 -0
  70. package/dist/run-4GSZFGQZ.js +95 -0
  71. package/dist/shell-5ZNXFGXV.js +3 -0
  72. package/dist/shell-OGTSH4RJ.js +3 -0
  73. package/dist/shell-OGTSH4RJ.js.map +1 -0
  74. package/dist/status-KIISF542.js +56 -0
  75. package/dist/task-NUCRHYW7.js +209 -0
  76. package/dist/team-IBUP5XV4.js +97 -0
  77. package/dist/template-engine-322SCRR6.js +2 -0
  78. package/dist/template-engine-322SCRR6.js.map +1 -0
  79. package/dist/template-engine-3CDRZNMJ.js +3 -0
  80. package/dist/tui-WWZA73IO.js +225 -0
  81. package/dist/update-RJ4IYACQ.js +64 -0
  82. package/dist/update-check-4RV7Z6WT.js +2 -0
  83. package/dist/workspace-manager-47KI7B27.js +179 -0
  84. package/dist/workspace-manager-7M46ESUL.js +2 -0
  85. package/dist/workspace-manager-7M46ESUL.js.map +1 -0
  86. package/package.json +79 -0
  87. package/readme.md +270 -0
package/dist/cli.js ADDED
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env node
2
+ import { findProjectRoot } from './chunk-VTA74YWX.js';
3
+ import { OrchestryError, NotInitializedError } from './chunk-O5AO5QIR.js';
4
+ import { setAsciiMode, setNoColor, printError } from './chunk-2VSAM7RH.js';
5
+ import { Command } from 'commander';
6
+
7
+ // src/cli/context.ts
8
+ function createContext(opts) {
9
+ const noColor = opts.noColor || "NO_COLOR" in process.env || false;
10
+ const ascii = opts.ascii || process.env["TERM"] === "dumb" || false;
11
+ return {
12
+ projectRoot: findProjectRoot(),
13
+ json: opts.json ?? false,
14
+ quiet: opts.quiet ?? false,
15
+ noColor,
16
+ ascii
17
+ };
18
+ }
19
+
20
+ // src/bin/cli.ts
21
+ var LIGHT_COMMANDS = {
22
+ task: async (p, c) => {
23
+ const m = await import('./task-NUCRHYW7.js');
24
+ m.registerTaskCommand(p, c);
25
+ },
26
+ agent: async (p, c) => {
27
+ const m = await import('./agent-J62U7ABO.js');
28
+ m.registerAgentCommand(p, c);
29
+ },
30
+ status: async (p, c) => {
31
+ const m = await import('./status-KIISF542.js');
32
+ m.registerStatusCommand(p, c);
33
+ },
34
+ logs: async (p, c) => {
35
+ const m = await import('./logs-PYEKMQE2.js');
36
+ m.registerLogsCommand(p, c);
37
+ },
38
+ config: async (p, c) => {
39
+ const m = await import('./config-VN4MYHSY.js');
40
+ m.registerConfigCommand(p, c);
41
+ },
42
+ context: async (p, c) => {
43
+ const m = await import('./context-EPHCF34F.js');
44
+ m.registerContextCommand(p, c);
45
+ },
46
+ msg: async (p, c) => {
47
+ const m = await import('./msg-BBIPCGDO.js');
48
+ m.registerMsgCommand(p, c);
49
+ },
50
+ goal: async (p, c) => {
51
+ const m = await import('./goal-KGAIM3ZK.js');
52
+ m.registerGoalCommand(p, c);
53
+ },
54
+ team: async (p, c) => {
55
+ const m = await import('./team-IBUP5XV4.js');
56
+ m.registerTeamCommand(p, c);
57
+ }
58
+ };
59
+ var FULL_COMMANDS = {
60
+ run: async (p, c) => {
61
+ const m = await import('./run-4GSZFGQZ.js');
62
+ m.registerRunCommand(p, c);
63
+ },
64
+ doctor: async (p, c) => {
65
+ const m = await import('./doctor-BK46WCQ5.js');
66
+ m.registerDoctorCommand(p, c);
67
+ },
68
+ tui: async (p, c) => {
69
+ const m = await import('./tui-WWZA73IO.js');
70
+ m.registerTuiCommand(p, c);
71
+ }
72
+ };
73
+ var program = new Command();
74
+ program.name("orchestry").description("Agents Organizations \u2014 CLI orchestrator for AI agents").version("0.2.0").option("--json", "Output as JSON").option("--quiet", "Minimal output (IDs only)").option("--no-color", "Disable colors").option("--ascii", "ASCII-only output (no Unicode)").hook("preAction", async (thisCommand) => {
75
+ const opts = thisCommand.opts();
76
+ if (opts.ascii) setAsciiMode(true);
77
+ if (opts.color === false) setNoColor(true);
78
+ });
79
+ var COMMAND_STUBS = [
80
+ ["task", "Manage tasks"],
81
+ ["agent", "Manage agents"],
82
+ ["status", "Show orchestrator status"],
83
+ ["logs", "View run logs"],
84
+ ["config", "Manage configuration"],
85
+ ["context", "Shared context store for inter-agent data exchange"],
86
+ ["msg", "Inter-agent messaging"],
87
+ ["goal", "Manage goals"],
88
+ ["team", "Manage teams"],
89
+ ["run", "Run tasks"],
90
+ ["doctor", "Check adapters and dependencies"],
91
+ ["tui", "Launch TUI dashboard"],
92
+ ["init", "Initialize project"],
93
+ ["update", "Check for updates"]
94
+ ];
95
+ var ALL_KNOWN_COMMANDS = new Set(COMMAND_STUBS.map(([name]) => name));
96
+ async function main() {
97
+ program.parseOptions(process.argv);
98
+ const globalOpts = program.opts();
99
+ const context = createContext({
100
+ json: globalOpts.json,
101
+ quiet: globalOpts.quiet,
102
+ noColor: globalOpts.color === false,
103
+ ascii: globalOpts.ascii
104
+ });
105
+ const sub = process.argv.slice(2).find((arg) => !arg.startsWith("-"));
106
+ const hasRealSub = sub !== void 0 && ALL_KNOWN_COMMANDS.has(sub);
107
+ const isHelpOrVersion = process.argv.includes("--help") || process.argv.includes("-h") || process.argv.includes("--version") || process.argv.includes("-V");
108
+ if (isHelpOrVersion && !hasRealSub) {
109
+ for (const [name, desc] of COMMAND_STUBS) {
110
+ program.command(name).description(desc);
111
+ }
112
+ await program.parseAsync(process.argv);
113
+ return;
114
+ }
115
+ if (sub === "init") {
116
+ const { registerInitCommand } = await import('./init-QBWCEDCI.js');
117
+ registerInitCommand(program);
118
+ } else if (sub === "update") {
119
+ const { registerUpdateCommand } = await import('./update-RJ4IYACQ.js');
120
+ registerUpdateCommand(program);
121
+ }
122
+ const needsFull = !sub || sub in FULL_COMMANDS;
123
+ try {
124
+ if (needsFull) {
125
+ const { buildFullContainer } = await import('./container-74P43KDY.js');
126
+ const container = await buildFullContainer(context);
127
+ const fullLoader = sub ? FULL_COMMANDS[sub] : void 0;
128
+ if (fullLoader) {
129
+ await fullLoader(program, container);
130
+ } else {
131
+ await Promise.all(
132
+ Object.values(FULL_COMMANDS).map((fn) => fn(program, container))
133
+ );
134
+ }
135
+ const lightLoader = sub ? LIGHT_COMMANDS[sub] : void 0;
136
+ if (lightLoader) {
137
+ await lightLoader(program, container);
138
+ }
139
+ } else {
140
+ const { buildLightContainer } = await import('./container-74P43KDY.js');
141
+ const container = await buildLightContainer(context);
142
+ const lightLoader = LIGHT_COMMANDS[sub];
143
+ if (lightLoader) {
144
+ await lightLoader(program, container);
145
+ } else {
146
+ await Promise.all(
147
+ Object.values(LIGHT_COMMANDS).map((fn) => fn(program, container))
148
+ );
149
+ }
150
+ }
151
+ } catch (err) {
152
+ if (err instanceof NotInitializedError) {
153
+ if (sub === "doctor") {
154
+ const { registerDoctorCommand } = await import('./doctor-BK46WCQ5.js');
155
+ registerDoctorCommand(program);
156
+ }
157
+ if (process.argv.length <= 2) {
158
+ const { dim } = await import('./output-5VQVCJ2K.js');
159
+ console.log();
160
+ console.log(` ${dim("orchestry")} \u2014 CLI orchestrator for AI agents`);
161
+ console.log();
162
+ console.log(` Get started:`);
163
+ console.log(` $ orch init`);
164
+ console.log();
165
+ console.log(` ${dim("This will create .orchestry/ in the current directory.")}`);
166
+ console.log();
167
+ return;
168
+ }
169
+ if (sub === "init" || sub === "doctor" || sub === "update") {
170
+ await program.parseAsync(process.argv);
171
+ return;
172
+ }
173
+ printError(err.message, err.hint);
174
+ process.exit(err.exitCode);
175
+ }
176
+ throw err;
177
+ }
178
+ if (process.argv.length <= 2) {
179
+ process.argv.push("tui");
180
+ }
181
+ let updateMod;
182
+ const updateCheck = import('./update-check-4RV7Z6WT.js').then((m) => {
183
+ updateMod = m;
184
+ return m.checkForUpdate(program.version() ?? "0.0.0");
185
+ });
186
+ await program.parseAsync(process.argv);
187
+ const actualSub = process.argv[2];
188
+ if (actualSub !== "tui" && actualSub !== "update") {
189
+ const info = await updateCheck;
190
+ if (info && updateMod) updateMod.printUpdateNotification(info);
191
+ }
192
+ }
193
+ main().catch((err) => {
194
+ if (err instanceof OrchestryError) {
195
+ printError(err.message, err.hint);
196
+ process.exit(err.exitCode);
197
+ }
198
+ printError(
199
+ err instanceof Error ? err.message : String(err)
200
+ );
201
+ if (process.env["ORCHESTRY_DEBUG"]) {
202
+ console.error(err);
203
+ }
204
+ process.exit(1);
205
+ });
@@ -0,0 +1,2 @@
1
+ import {b,a}from'./chunk-IZYSGYXG.js';import'./chunk-PBFE5V3G.js';import'./chunk-POUC4CPC.js';import {execFile}from'child_process';import {promisify}from'util';var m=promisify(execFile),p=class{constructor(e){this.processManager=e;}kind="codex";async test(){try{let{stdout:e}=await m("codex",["--version"]);return {ok:!0,version:e.trim()}}catch{return {ok:false,error:"Codex CLI not found. Install: npm i -g @openai/codex"}}}execute(e){let t=["exec","--json","--sandbox","danger-full-access"];e.config.model&&t.push("--model",e.config.model),t.push("-");let{process:a,pid:r}=this.processManager.spawn("codex",t,{cwd:e.workspace,env:{...process.env,...e.env},signal:e.signal,stdio:["pipe","pipe","pipe"]});a.stdin&&(a.stdin.write(e.prompt),a.stdin.end());let n=b(a,g,"Codex",e.signal);return {pid:r,events:n}}async stop(e){await this.processManager.killWithGrace(e);}};function g(s){if(!s.trim())return null;try{let e=JSON.parse(s),t=new Date().toISOString();switch(e.type??""){case "thread.started":return {type:"output",timestamp:t,data:e};case "turn.started":return {type:"output",timestamp:t,data:e};case "turn.completed":{let r=a(e);return {type:"done",timestamp:t,data:e,tokens:r}}case "turn.failed":{let r=a(e);return {type:"error",timestamp:t,data:e,tokens:r}}case "item.started":case "item.completed":{let r=e.item??{},n=r.type??"";if(n==="agent_message")return {type:"output",timestamp:t,data:r};if(n==="reasoning")return {type:"output",timestamp:t,data:r};if(n==="command_execution")return {type:"command",timestamp:t,data:r};if(n==="file_change"){let u=(Array.isArray(r.changes)?r.changes:[]).map(c=>typeof c.path=="string"?c.path:"").filter(Boolean);return {type:"file_change",timestamp:t,data:{paths:u,raw:r}}}return n==="tool_use"?{type:"tool_call",timestamp:t,data:r}:n==="tool_result"?{type:"output",timestamp:t,data:r}:n==="error"?{type:"error",timestamp:t,data:r}:{type:"output",timestamp:t,data:r}}case "error":return {type:"error",timestamp:t,data:e.error??e};default:return {type:"output",timestamp:t,data:e}}}catch{return {type:"output",timestamp:new Date().toISOString(),data:s}}}export{p as CodexAdapter};//# sourceMappingURL=codex-2CH57B7G.js.map
2
+ //# sourceMappingURL=codex-2CH57B7G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infrastructure/adapters/codex.ts"],"names":["execFileAsync","promisify","execFile","CodexAdapter","processManager","stdout","params","args","proc","pid","events","createStreamingEvents","parseCodexEvent","line","parsed","timestamp","tokens","extractTokens","item","itemType","paths"],"mappings":"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","file":"codex-2CH57B7G.js","sourcesContent":["/**\n * Codex CLI adapter.\n *\n * Spawns `codex exec --json -` in headless mode.\n * Prompt is piped via stdin (avoids CLI arg length limits).\n * Parses JSONL events from stdout into AgentEvent stream.\n */\n\nimport type { IAgentAdapter, AdapterTestResult, ExecuteParams, AgentEvent, ExecuteHandle } from './interface.js';\nimport type { IProcessManager } from '../process/process-manager.js';\nimport { extractTokens, createStreamingEvents } from './utils.js';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nexport class CodexAdapter implements IAgentAdapter {\n readonly kind = 'codex';\n\n constructor(private readonly processManager: IProcessManager) {}\n\n async test(): Promise<AdapterTestResult> {\n try {\n const { stdout } = await execFileAsync('codex', ['--version']);\n return { ok: true, version: stdout.trim() };\n } catch {\n return {\n ok: false,\n error: 'Codex CLI not found. Install: npm i -g @openai/codex',\n };\n }\n }\n\n execute(params: ExecuteParams): ExecuteHandle {\n const args = [\n 'exec',\n '--json',\n '--sandbox', 'danger-full-access', // autonomous agents can't respond to approval prompts\n ];\n\n if (params.config.model) {\n args.push('--model', params.config.model);\n }\n\n // Read prompt from stdin (avoids ARG_MAX limits on long prompts)\n args.push('-');\n\n const { process: proc, pid } = this.processManager.spawn('codex', args, {\n cwd: params.workspace,\n env: { ...process.env, ...params.env },\n signal: params.signal,\n stdio: ['pipe', 'pipe', 'pipe'], // stdin must be 'pipe' to send prompt\n });\n\n // Pipe prompt via stdin\n if (proc.stdin) {\n proc.stdin.write(params.prompt);\n proc.stdin.end();\n }\n\n const events = createStreamingEvents(proc, parseCodexEvent, 'Codex', params.signal);\n\n return { pid, events };\n }\n\n async stop(pid: number): Promise<void> {\n await this.processManager.killWithGrace(pid);\n }\n}\n\nfunction parseCodexEvent(line: string): AgentEvent | null {\n if (!line.trim()) return null;\n\n try {\n const parsed: Record<string, unknown> = JSON.parse(line);\n const timestamp = new Date().toISOString();\n\n const type = (parsed.type as string) ?? '';\n\n // Codex JSONL event types\n switch (type) {\n // Thread/session started\n case 'thread.started':\n return { type: 'output', timestamp, data: parsed };\n\n // Turn lifecycle\n case 'turn.started':\n return { type: 'output', timestamp, data: parsed };\n\n case 'turn.completed': {\n const tokens = extractTokens(parsed);\n return { type: 'done', timestamp, data: parsed, tokens };\n }\n\n case 'turn.failed': {\n const tokens = extractTokens(parsed);\n return { type: 'error', timestamp, data: parsed, tokens };\n }\n\n // Item events\n case 'item.started':\n case 'item.completed': {\n const item = (parsed.item as Record<string, unknown>) ?? {};\n const itemType = (item.type as string) ?? '';\n\n if (itemType === 'agent_message') {\n return { type: 'output', timestamp, data: item };\n }\n if (itemType === 'reasoning') {\n return { type: 'output', timestamp, data: item };\n }\n if (itemType === 'command_execution') {\n return { type: 'command', timestamp, data: item };\n }\n if (itemType === 'file_change') {\n const changes = Array.isArray(item.changes) ? item.changes : [];\n const paths = (changes as Record<string, unknown>[])\n .map((c) => typeof c.path === 'string' ? c.path : '')\n .filter(Boolean);\n return { type: 'file_change', timestamp, data: { paths, raw: item } };\n }\n if (itemType === 'tool_use') {\n return { type: 'tool_call', timestamp, data: item };\n }\n if (itemType === 'tool_result') {\n return { type: 'output', timestamp, data: item };\n }\n if (itemType === 'error') {\n return { type: 'error', timestamp, data: item };\n }\n return { type: 'output', timestamp, data: item };\n }\n\n case 'error':\n return { type: 'error', timestamp, data: (parsed.error as unknown) ?? parsed };\n\n default:\n return { type: 'output', timestamp, data: parsed };\n }\n } catch {\n return { type: 'output', timestamp: new Date().toISOString(), data: line };\n }\n}\n"]}
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env node
2
+ import { createStreamingEvents, extractTokens } from './chunk-TX7WOFCW.js';
3
+ import './chunk-CHIP7O6V.js';
4
+ import { execFile } from 'child_process';
5
+ import { promisify } from 'util';
6
+
7
+ var execFileAsync = promisify(execFile);
8
+ var CodexAdapter = class {
9
+ constructor(processManager) {
10
+ this.processManager = processManager;
11
+ }
12
+ kind = "codex";
13
+ async test() {
14
+ try {
15
+ const { stdout } = await execFileAsync("codex", ["--version"]);
16
+ return { ok: true, version: stdout.trim() };
17
+ } catch {
18
+ return {
19
+ ok: false,
20
+ error: "Codex CLI not found. Install: npm i -g @openai/codex"
21
+ };
22
+ }
23
+ }
24
+ execute(params) {
25
+ const args = [
26
+ "exec",
27
+ "--json",
28
+ "--sandbox",
29
+ "danger-full-access"
30
+ // autonomous agents can't respond to approval prompts
31
+ ];
32
+ if (params.config.model) {
33
+ args.push("--model", params.config.model);
34
+ }
35
+ args.push("-");
36
+ const { process: proc, pid } = this.processManager.spawn("codex", args, {
37
+ cwd: params.workspace,
38
+ env: { ...process.env, ...params.env },
39
+ signal: params.signal,
40
+ stdio: ["pipe", "pipe", "pipe"]
41
+ // stdin must be 'pipe' to send prompt
42
+ });
43
+ if (proc.stdin) {
44
+ proc.stdin.write(params.prompt);
45
+ proc.stdin.end();
46
+ }
47
+ const events = createStreamingEvents(proc, parseCodexEvent, "Codex", params.signal);
48
+ return { pid, events };
49
+ }
50
+ async stop(pid) {
51
+ await this.processManager.killWithGrace(pid);
52
+ }
53
+ };
54
+ function parseCodexEvent(line) {
55
+ if (!line.trim()) return null;
56
+ try {
57
+ const parsed = JSON.parse(line);
58
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
59
+ const type = parsed.type ?? "";
60
+ switch (type) {
61
+ // Thread/session started
62
+ case "thread.started":
63
+ return { type: "output", timestamp, data: parsed };
64
+ // Turn lifecycle
65
+ case "turn.started":
66
+ return { type: "output", timestamp, data: parsed };
67
+ case "turn.completed": {
68
+ const tokens = extractTokens(parsed);
69
+ return { type: "done", timestamp, data: parsed, tokens };
70
+ }
71
+ case "turn.failed": {
72
+ const tokens = extractTokens(parsed);
73
+ return { type: "error", timestamp, data: parsed, tokens };
74
+ }
75
+ // Item events
76
+ case "item.started":
77
+ case "item.completed": {
78
+ const item = parsed.item ?? {};
79
+ const itemType = item.type ?? "";
80
+ if (itemType === "agent_message") {
81
+ return { type: "output", timestamp, data: item };
82
+ }
83
+ if (itemType === "reasoning") {
84
+ return { type: "output", timestamp, data: item };
85
+ }
86
+ if (itemType === "command_execution") {
87
+ return { type: "command", timestamp, data: item };
88
+ }
89
+ if (itemType === "file_change") {
90
+ const changes = Array.isArray(item.changes) ? item.changes : [];
91
+ const paths = changes.map((c) => typeof c.path === "string" ? c.path : "").filter(Boolean);
92
+ return { type: "file_change", timestamp, data: { paths, raw: item } };
93
+ }
94
+ if (itemType === "tool_use") {
95
+ return { type: "tool_call", timestamp, data: item };
96
+ }
97
+ if (itemType === "tool_result") {
98
+ return { type: "output", timestamp, data: item };
99
+ }
100
+ if (itemType === "error") {
101
+ return { type: "error", timestamp, data: item };
102
+ }
103
+ return { type: "output", timestamp, data: item };
104
+ }
105
+ case "error":
106
+ return { type: "error", timestamp, data: parsed.error ?? parsed };
107
+ default:
108
+ return { type: "output", timestamp, data: parsed };
109
+ }
110
+ } catch {
111
+ return { type: "output", timestamp: (/* @__PURE__ */ new Date()).toISOString(), data: line };
112
+ }
113
+ }
114
+
115
+ export { CodexAdapter };
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+ import { dim, printSuccess, printError } from './chunk-2VSAM7RH.js';
3
+ import { spawn } from 'child_process';
4
+
5
+ var VALID_FILTER_PRESETS = ["all", "text", "tools", "errors", "events"];
6
+ function registerConfigCommand(program, container) {
7
+ const config = program.command("config").description("Manage configuration");
8
+ config.command("get <key>").description("Get a config value (dot notation)").action(async (key) => {
9
+ await container.paths.requireInit();
10
+ const value = await container.configStore.get(key);
11
+ if (container.context.json) {
12
+ console.log(JSON.stringify({ key, value }));
13
+ } else {
14
+ console.log(` ${dim(key)} = ${JSON.stringify(value)}`);
15
+ }
16
+ });
17
+ config.command("set <key> <value>").description("Set a config value (dot notation)").action(async (key, value) => {
18
+ await container.paths.requireInit();
19
+ let parsed;
20
+ try {
21
+ parsed = JSON.parse(value);
22
+ } catch {
23
+ parsed = value;
24
+ }
25
+ await container.configStore.set(key, parsed);
26
+ printSuccess(`${key} = ${JSON.stringify(parsed)}`);
27
+ });
28
+ config.command("edit").description("Open config.yml in $EDITOR").action(async () => {
29
+ await container.paths.requireInit();
30
+ const editor = process.env["EDITOR"] || process.env["VISUAL"] || "vi";
31
+ const parts = editor.split(/\s+/);
32
+ const child = spawn(parts[0], [...parts.slice(1), container.paths.configPath], {
33
+ stdio: "inherit"
34
+ });
35
+ await new Promise((resolve, reject) => {
36
+ child.on("close", (code) => {
37
+ if (code === 0) resolve();
38
+ else reject(new Error(`Editor exited with code ${code}`));
39
+ });
40
+ child.on("error", reject);
41
+ });
42
+ });
43
+ const global = config.command("global").description("Manage global settings (~/.orchestry/global.yml)");
44
+ global.command("get <key>").description("Get a global config value").action(async (key) => {
45
+ const gc = await container.globalConfigStore.read();
46
+ const value = key === "activity_filter" ? gc.tui.activity_filter : void 0;
47
+ if (container.context.json) {
48
+ console.log(JSON.stringify({ key, value }));
49
+ } else {
50
+ console.log(` ${dim(key)} = ${JSON.stringify(value)}`);
51
+ }
52
+ });
53
+ global.command("set <key> <value>").description("Set a global config value").action(async (key, value) => {
54
+ if (key === "activity_filter") {
55
+ if (!VALID_FILTER_PRESETS.includes(value)) {
56
+ printError(`Invalid value "${value}". Valid: ${VALID_FILTER_PRESETS.join(", ")}`);
57
+ return;
58
+ }
59
+ await container.globalConfigStore.set("activity_filter", value);
60
+ printSuccess(`${key} = ${value}`);
61
+ } else {
62
+ printError(`Unknown global config key: ${key}`);
63
+ }
64
+ });
65
+ global.command("show").description("Show all global settings").action(async () => {
66
+ const gc = await container.globalConfigStore.read();
67
+ if (container.context.json) {
68
+ console.log(JSON.stringify(gc));
69
+ } else {
70
+ console.log(` ${dim("tui.activity_filter")} = ${gc.tui.activity_filter}`);
71
+ }
72
+ });
73
+ }
74
+
75
+ export { registerConfigCommand };