@oxgeneral/orch 0.2.3 → 0.3.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 (145) hide show
  1. package/dist/App-TW35IULR.js +18 -0
  2. package/dist/agent-FRQKL7YI.js +9 -0
  3. package/dist/{orchestrator-VGYKSOZJ.js → chunk-2UC4SVJB.js} +236 -71
  4. package/dist/chunk-2UC4SVJB.js.map +1 -0
  5. package/dist/chunk-5AJ4LYO5.js +8 -0
  6. package/dist/{chunk-45K2XID7.js → chunk-6DWHQPTE.js} +2 -1
  7. package/dist/chunk-6DWHQPTE.js.map +1 -0
  8. package/dist/{chunk-POUC4CPC.js → chunk-6MJ7V6VY.js} +2 -2
  9. package/dist/{chunk-HNKJ4IF7.js → chunk-B4JQM4NU.js} +34 -10
  10. package/dist/chunk-B4JQM4NU.js.map +1 -0
  11. package/dist/{chunk-6HENRUYZ.js → chunk-CDFA4IIQ.js} +2 -2
  12. package/dist/chunk-CHRW4CLD.js +2 -0
  13. package/dist/{chunk-ZU6AY2VU.js → chunk-GZ2Q56YZ.js} +2 -2
  14. package/dist/chunk-HMMPM7MF.js +3 -0
  15. package/dist/{chunk-AELEEEV3.js → chunk-HSBYJ5C5.js} +27 -7
  16. package/dist/chunk-HXOMNULD.js +2 -0
  17. package/dist/{chunk-O5AO5QIR.js → chunk-IQXRQBUK.js} +9 -2
  18. package/dist/chunk-IQXRQBUK.js.map +1 -0
  19. package/dist/chunk-L26TK7Y5.js +2 -0
  20. package/dist/chunk-L3FYR45M.js +2 -0
  21. package/dist/chunk-LXNRCJ22.js +2 -0
  22. package/dist/{chunk-TX7WOFCW.js → chunk-MGFMVPRD.js} +4 -7
  23. package/dist/chunk-MGFMVPRD.js.map +1 -0
  24. package/dist/chunk-MNXU3KCD.js +2 -0
  25. package/dist/{chunk-CHIP7O6V.js → chunk-O2MSGW3V.js} +3 -1
  26. package/dist/chunk-O2MSGW3V.js.map +1 -0
  27. package/dist/chunk-PJ5DKXGR.js +2 -0
  28. package/dist/{chunk-VTA74YWX.js → chunk-QEEM67OA.js} +11 -17
  29. package/dist/chunk-QEEM67OA.js.map +1 -0
  30. package/dist/chunk-UMZEA3JT.js +5 -0
  31. package/dist/{shell-OGTSH4RJ.js → chunk-UW6GUUE6.js} +3 -3
  32. package/dist/chunk-XDVMX2FO.js +8 -0
  33. package/dist/chunk-XDVMX2FO.js.map +1 -0
  34. package/dist/chunk-ZA5Z33GO.js +11 -0
  35. package/dist/claude-E36EGXUV.js +2 -0
  36. package/dist/{chunk-IRN2U2NE.js → claude-RIB3RQS5.js} +5 -2
  37. package/dist/claude-RIB3RQS5.js.map +1 -0
  38. package/dist/cli.js +1 -199
  39. package/dist/clipboard-service-PDTSZIR5.js +25 -0
  40. package/dist/codex-OTZKVESD.js +2 -0
  41. package/dist/{codex-U7LTJTX6.js → codex-VBUSA2GJ.js} +5 -3
  42. package/dist/codex-VBUSA2GJ.js.map +1 -0
  43. package/dist/config-CCSS2P7R.js +2 -0
  44. package/dist/container-OIXLFSX2.js +6 -0
  45. package/dist/context-GSMQHQES.js +7 -0
  46. package/dist/cursor-3DJA6LWS.js +2 -0
  47. package/dist/{cursor-3DI5GKRF.js → cursor-4QIOTDBW.js} +5 -3
  48. package/dist/cursor-4QIOTDBW.js.map +1 -0
  49. package/dist/doctor-KBK5JZBZ.js +2 -0
  50. package/dist/doctor-service-F2SXDWHS.js +91 -0
  51. package/dist/doctor-service-F2SXDWHS.js.map +1 -0
  52. package/dist/doctor-service-PB7YBH3F.js +2 -0
  53. package/dist/goal-RFKFPR7M.js +8 -0
  54. package/dist/index.d.ts +124 -46
  55. package/dist/index.js +1817 -5
  56. package/dist/index.js.map +1 -1
  57. package/dist/init-WRDFAFS2.js +53 -0
  58. package/dist/logs-5QHJWMEG.js +12 -0
  59. package/dist/msg-4SCLBO4K.js +9 -0
  60. package/dist/orchestrator-FGGXK3N3.js +5 -0
  61. package/dist/{orchestrator-TAFBYQQ5.js.map → orchestrator-FGGXK3N3.js.map} +1 -1
  62. package/dist/orchestrator-R7IWZUT6.js +13 -0
  63. package/dist/process-manager-33H27MQF.js +2 -0
  64. package/dist/process-manager-A36Y7LHP.js +3 -0
  65. package/dist/{process-manager-TLZOTO4Y.js.map → process-manager-A36Y7LHP.js.map} +1 -1
  66. package/dist/registry-BO2PPRNG.js +2 -0
  67. package/dist/registry-JXXRLJ5J.js +3 -0
  68. package/dist/{registry-UQAHK77P.js.map → registry-JXXRLJ5J.js.map} +1 -1
  69. package/dist/run-HSHRELOP.js +3 -0
  70. package/dist/shell-EOJBDWTH.js +2 -0
  71. package/dist/{chunk-CIIE6LNG.js → shell-IH2MMTVP.js} +3 -2
  72. package/dist/shell-IH2MMTVP.js.map +1 -0
  73. package/dist/status-DLBNWSWM.js +2 -0
  74. package/dist/task-J6ZN7ALI.js +20 -0
  75. package/dist/team-MSIBKOQC.js +4 -0
  76. package/dist/template-engine-MFL5B677.js +3 -0
  77. package/dist/{template-engine-322SCRR6.js.map → template-engine-MFL5B677.js.map} +1 -1
  78. package/dist/template-engine-ONIDVD4F.js +2 -0
  79. package/dist/tui-G4XUFAIP.js +2 -0
  80. package/dist/update-PC2ENCKU.js +2 -0
  81. package/dist/update-check-HGMBDYHL.js +2 -0
  82. package/dist/workspace-manager-KOOYTO7E.js +3 -0
  83. package/dist/{workspace-manager-47KI7B27.js → workspace-manager-T6AXG7XL.js} +40 -3
  84. package/dist/workspace-manager-T6AXG7XL.js.map +1 -0
  85. package/package.json +2 -1
  86. package/readme.md +5 -4
  87. package/scripts/benchmark.ts +304 -0
  88. package/dist/App-KDZSTAMR.js +0 -4864
  89. package/dist/agent-V5M2C3OC.js +0 -157
  90. package/dist/chunk-2B32FPEB.js +0 -11
  91. package/dist/chunk-2B32FPEB.js.map +0 -1
  92. package/dist/chunk-33QNTNR6.js +0 -46
  93. package/dist/chunk-6GFVB6EK.js +0 -101
  94. package/dist/chunk-6HENRUYZ.js.map +0 -1
  95. package/dist/chunk-AELEEEV3.js.map +0 -1
  96. package/dist/chunk-E3TCKHU6.js +0 -13
  97. package/dist/chunk-E3TCKHU6.js.map +0 -1
  98. package/dist/chunk-ED47GL3F.js +0 -29
  99. package/dist/chunk-HXYAZGLP.js +0 -15
  100. package/dist/chunk-I5WEMARW.js +0 -166
  101. package/dist/chunk-IZYSGYXG.js +0 -2
  102. package/dist/chunk-IZYSGYXG.js.map +0 -1
  103. package/dist/chunk-P6ATSXGL.js +0 -107
  104. package/dist/chunk-PBFE5V3G.js +0 -2
  105. package/dist/chunk-PBFE5V3G.js.map +0 -1
  106. package/dist/chunk-PNE6LQRF.js +0 -5
  107. package/dist/chunk-POUC4CPC.js.map +0 -1
  108. package/dist/chunk-XI4TU6VU.js +0 -50
  109. package/dist/chunk-ZU6AY2VU.js.map +0 -1
  110. package/dist/claude-GH6P2DC5.js +0 -4
  111. package/dist/claude-S47YTIHU.js +0 -2
  112. package/dist/claude-S47YTIHU.js.map +0 -1
  113. package/dist/codex-2CH57B7G.js +0 -2
  114. package/dist/codex-2CH57B7G.js.map +0 -1
  115. package/dist/config-LJFM55LN.js +0 -75
  116. package/dist/container-JV7TAUP5.js +0 -1532
  117. package/dist/context-EPSDCJTU.js +0 -83
  118. package/dist/cursor-QFUNKPCQ.js +0 -2
  119. package/dist/cursor-QFUNKPCQ.js.map +0 -1
  120. package/dist/doctor-IO4PV4D6.js +0 -67
  121. package/dist/doctor-service-A34DHPKI.js +0 -2
  122. package/dist/doctor-service-NTWBWOM2.js +0 -2
  123. package/dist/doctor-service-NTWBWOM2.js.map +0 -1
  124. package/dist/goal-I56QP7HS.js +0 -110
  125. package/dist/init-BE5VKWOM.js +0 -149
  126. package/dist/logs-IAUAS5TX.js +0 -207
  127. package/dist/msg-SQWQLJP6.js +0 -95
  128. package/dist/orchestrator-TAFBYQQ5.js +0 -2
  129. package/dist/process-manager-HUVNAPQV.js +0 -2
  130. package/dist/process-manager-TLZOTO4Y.js +0 -2
  131. package/dist/registry-PQWRVNF2.js +0 -2
  132. package/dist/registry-UQAHK77P.js +0 -2
  133. package/dist/run-PSZURVVL.js +0 -95
  134. package/dist/shell-5ZNXFGXV.js +0 -3
  135. package/dist/shell-OGTSH4RJ.js.map +0 -1
  136. package/dist/status-DTF7D3DV.js +0 -56
  137. package/dist/task-5OJTXW27.js +0 -209
  138. package/dist/team-AISPLEJB.js +0 -97
  139. package/dist/template-engine-322SCRR6.js +0 -2
  140. package/dist/template-engine-3CDRZNMJ.js +0 -3
  141. package/dist/tui-XDJE3IUA.js +0 -225
  142. package/dist/update-72GZMF65.js +0 -64
  143. package/dist/update-check-4RV7Z6WT.js +0 -2
  144. package/dist/workspace-manager-7M46ESUL.js +0 -2
  145. package/dist/workspace-manager-7M46ESUL.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/infrastructure/process/process-manager.ts"],"names":["ProcessManager","pid","err","signal","graceMs","deadline","r","command","args","options","proc","spawn","MAX_LINE_LEN","capLine","s","readLines","stream","chunks","totalLen","chunk","buf","buffer","offset","newlineIdx","remainder","final"],"mappings":"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","file":"chunk-POUC4CPC.js","sourcesContent":["/**\n * Process management utilities.\n *\n * Handles spawning subprocesses, PID checks, graceful kill.\n */\n\nimport { spawn, type ChildProcess, type SpawnOptions } from 'node:child_process';\nimport type { Readable } from 'node:stream';\n\nexport interface SpawnResult {\n process: ChildProcess;\n pid: number;\n}\n\nexport interface IProcessManager {\n isAlive(pid: number): boolean;\n kill(pid: number, signal?: NodeJS.Signals): void;\n killWithGrace(pid: number, graceMs?: number): Promise<void>;\n spawn(command: string, args: string[], options?: SpawnOptions): SpawnResult;\n}\n\nexport class ProcessManager implements IProcessManager {\n isAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err) {\n // EPERM means process exists but we lack permission to signal it\n if ((err as NodeJS.ErrnoException).code === 'EPERM') return true;\n return false;\n }\n }\n\n kill(pid: number, signal: NodeJS.Signals = 'SIGTERM'): void {\n // Kill entire process group (-pid) to clean up child processes (vitest, playwright, etc.)\n try {\n process.kill(-pid, signal);\n } catch {\n // Group kill failed — fall back to direct PID kill\n try {\n process.kill(pid, signal);\n } catch {\n // Process already dead\n }\n }\n }\n\n async killWithGrace(pid: number, graceMs: number = 10_000): Promise<void> {\n if (!this.isAlive(pid)) return;\n\n this.kill(pid, 'SIGTERM');\n\n const deadline = Date.now() + graceMs;\n\n while (Date.now() < deadline) {\n if (!this.isAlive(pid)) return;\n await new Promise((r) => setTimeout(r, 200));\n }\n\n // Force kill if still alive\n this.kill(pid, 'SIGKILL');\n }\n\n spawn(command: string, args: string[], options?: SpawnOptions): SpawnResult {\n const proc = spawn(command, args, {\n stdio: ['ignore', 'pipe', 'pipe'],\n detached: true, // Create new process group so killWithGrace(-pid) kills all children\n ...options,\n });\n\n if (!proc.pid) {\n throw new Error(`Failed to spawn process: ${command}`);\n }\n\n // Allow parent to exit without waiting for this child.\n // Pipes (stdout/stderr) still hold refs while being read — that's intentional.\n proc.unref();\n\n return { process: proc, pid: proc.pid };\n }\n}\n\n/**\n * Max stdout line length before truncation (16 KB).\n * First layer of a three-layer cap: readLines (16 KB) → serializeEventData (8 KB) → bus emit (4 KB).\n * Truncated lines produce invalid JSON → adapters' catch block handles gracefully.\n */\nconst MAX_LINE_LEN = 16384;\n\n/** Cap a string to MAX_LINE_LEN. */\nfunction capLine(s: string): string {\n return s.length > MAX_LINE_LEN ? s.slice(0, MAX_LINE_LEN) : s;\n}\n\n/**\n * Read lines from a readable stream as an async generator.\n *\n * Uses `for await` on the raw Readable (proper backpressure) instead of\n * readline.createInterface, which buffers all 'line' events in an unbounded\n * queue even when the consumer is paused — causing OOM under high throughput.\n *\n * Uses Buffer.concat + offset tracking to avoid O(n²) string copies.\n */\nexport async function* readLines(stream: Readable): AsyncGenerator<string> {\n const chunks: Buffer[] = [];\n let totalLen = 0;\n\n for await (const chunk of stream) {\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as string, 'utf-8');\n if (buf.length === 0) continue;\n chunks.push(buf);\n totalLen += buf.length;\n\n // Concat once per chunk arrival, then scan for newlines with offset tracking\n const buffer = chunks.length === 1 ? chunks[0]! : Buffer.concat(chunks, totalLen);\n chunks.length = 0;\n totalLen = 0;\n\n let offset = 0;\n let newlineIdx: number;\n while ((newlineIdx = buffer.indexOf(0x0a, offset)) !== -1) {\n if (newlineIdx > offset) {\n yield capLine(buffer.toString('utf-8', offset, newlineIdx));\n }\n offset = newlineIdx + 1;\n }\n\n // Keep unconsumed remainder for next chunk\n if (offset < buffer.length) {\n const remainder = buffer.subarray(offset);\n chunks.push(remainder);\n totalLen = remainder.length;\n }\n }\n\n // Flush remaining data (last line without trailing newline)\n if (totalLen > 0) {\n const final = chunks.length === 1 ? chunks[0]! : Buffer.concat(chunks, totalLen);\n yield capLine(final.toString('utf-8'));\n }\n}\n"]}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env node
2
- import { execFile } from 'child_process';
3
- import { promisify } from 'util';
4
-
5
- var execFileAsync = promisify(execFile);
6
- var DoctorService = class {
7
- constructor(adapterRegistry, processManager) {
8
- this.adapterRegistry = adapterRegistry;
9
- this.processManager = processManager;
10
- }
11
- async runAll() {
12
- const checks = [];
13
- const adapters = this.adapterRegistry.list();
14
- let adaptersReady = 0;
15
- for (const adapter of adapters) {
16
- const result = await adapter.test();
17
- if (result.ok) {
18
- adaptersReady++;
19
- checks.push({
20
- name: adapter.kind,
21
- status: "ok",
22
- detail: result.version
23
- });
24
- } else {
25
- checks.push({
26
- name: adapter.kind,
27
- status: "fail",
28
- detail: result.error
29
- });
30
- }
31
- }
32
- checks.push(await this.checkCommand("git", ["--version"], "git"));
33
- checks.push(await this.checkCommand("node", ["--version"], "node"));
34
- return {
35
- checks,
36
- adaptersReady,
37
- adaptersTotal: adapters.length
38
- };
39
- }
40
- async checkCommand(command, args, name) {
41
- try {
42
- const { stdout } = await execFileAsync(command, args);
43
- return { name, status: "ok", detail: stdout.trim() };
44
- } catch {
45
- return { name, status: "fail", detail: `${command}: command not found` };
46
- }
47
- }
48
- };
49
-
50
- export { DoctorService };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/domain/errors.ts"],"names":["OrchestryError","message","exitCode","hint","NotInitializedError","InvalidArgumentsError","LockConflictError","pid","NoAgentsError","TaskNotFoundError","taskId","AgentNotFoundError","agentId","TaskAlreadyRunningError","runId","agentName","InvalidTransitionError","from","to","GoalNotFoundError","goalId","TeamNotFoundError","teamId"],"mappings":"AAeO,IAAMA,CAAAA,CAAN,cAA6B,KAAM,CACxC,YACEC,CAAAA,CACgBC,CAAAA,CACAC,CAAAA,CAChB,CACA,KAAA,CAAMF,CAAO,EAHG,IAAA,CAAA,QAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CAGhB,IAAA,CAAK,KAAO,iBACd,CACF,CAAA,CAEaC,CAAAA,CAAN,cAAkCJ,CAAe,CACtD,WAAA,EAAc,CACZ,MAAM,iBAAA,CAAmB,CAAA,CAAG,gBAAgB,CAAA,CAC5C,IAAA,CAAK,IAAA,CAAO,sBACd,CACF,CAAA,CAEaK,EAAN,cAAoCL,CAAe,CACxD,WAAA,CAAYC,CAAAA,CAAiB,CAC3B,MAAMA,CAAAA,CAAS,CAAC,CAAA,CAChB,IAAA,CAAK,IAAA,CAAO,wBACd,CACF,CAAA,CAEaK,CAAAA,CAAN,cAAgCN,CAAe,CACpD,YAAYO,CAAAA,CAAa,CACvB,KAAA,CAAM,CAAA,mCAAA,EAAsCA,CAAG,CAAA,CAAA,CAAA,CAAK,EAAG,kBAAkB,CAAA,CACzE,IAAA,CAAK,IAAA,CAAO,oBACd,CACF,EASO,IAAMC,CAAAA,CAAN,cAA4BR,CAAe,CAChD,WAAA,EAAc,CACZ,KAAA,CAAM,sBAAA,CAAwB,EAAG,6CAA6C,CAAA,CAC9E,KAAK,IAAA,CAAO,gBACd,CACF,CAAA,CAEaS,CAAAA,CAAN,cAAgCT,CAAe,CACpD,WAAA,CAAYU,CAAAA,CAAgB,CAC1B,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAM,CAAA,CAAA,CAAI,CAAC,CAAA,CACpC,IAAA,CAAK,IAAA,CAAO,oBACd,CACF,CAAA,CAEaC,CAAAA,CAAN,cAAiCX,CAAe,CACrD,YAAYY,CAAAA,CAAiB,CAC3B,KAAA,CAAM,CAAA,iBAAA,EAAoBA,CAAO,CAAA,CAAA,CAAI,CAAC,CAAA,CACtC,IAAA,CAAK,KAAO,qBACd,CACF,EAEaC,CAAAA,CAAN,cAAsCb,CAAe,CAC1D,WAAA,CAAYU,CAAAA,CAAgBI,EAAeC,CAAAA,CAAmB,CAC5D,MACE,CAAA,KAAA,EAAQL,CAAM,6BAA6BI,CAAK,CAAA,SAAA,EAAYC,CAAS,CAAA,CAAA,CAAA,CACrE,CAAA,CACA,CAAA,sBAAA,EAAyBL,CAAM,CAAA,SAAA,CACjC,CAAA,CACA,IAAA,CAAK,IAAA,CAAO,0BACd,CACF,EAEaM,CAAAA,CAAN,cAAqChB,CAAe,CACzD,WAAA,CAAYU,CAAAA,CAAgBO,EAAcC,CAAAA,CAAY,CACpD,MAAM,CAAA,uBAAA,EAA0BR,CAAM,KAAKO,CAAI,CAAA,QAAA,EAAMC,CAAE,CAAA,CAAA,CAAI,CAAC,CAAA,CAC5D,KAAK,IAAA,CAAO,yBACd,CACF,CAAA,CAEaC,CAAAA,CAAN,cAAgCnB,CAAe,CACpD,WAAA,CAAYoB,CAAAA,CAAgB,CAC1B,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAM,CAAA,CAAA,CAAI,CAAC,EACpC,IAAA,CAAK,IAAA,CAAO,oBACd,CACF,CAAA,CAEaC,CAAAA,CAAN,cAAgCrB,CAAe,CACpD,YAAYsB,CAAAA,CAAgB,CAC1B,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAM,CAAA,CAAA,CAAI,CAAC,CAAA,CACpC,IAAA,CAAK,IAAA,CAAO,oBACd,CACF","file":"chunk-ZU6AY2VU.js","sourcesContent":["/**\n * Typed error hierarchy for the orchestrator.\n *\n * Every error carries an exit code (matching CLI_UI_DESIGN.md §11)\n * and an optional hint for the user.\n *\n * Exit codes:\n * 0 - Success\n * 1 - General error\n * 2 - Invalid arguments\n * 3 - Not initialized (.orchestry/ not found)\n * 4 - Lock conflict (orchestrator already running)\n * 5 - Agent error (adapter test failed)\n */\n\nexport class OrchestryError extends Error {\n constructor(\n message: string,\n public readonly exitCode: number,\n public readonly hint?: string,\n ) {\n super(message);\n this.name = 'OrchestryError';\n }\n}\n\nexport class NotInitializedError extends OrchestryError {\n constructor() {\n super('Not initialized', 3, 'Run: orch init');\n this.name = 'NotInitializedError';\n }\n}\n\nexport class InvalidArgumentsError extends OrchestryError {\n constructor(message: string) {\n super(message, 2);\n this.name = 'InvalidArgumentsError';\n }\n}\n\nexport class LockConflictError extends OrchestryError {\n constructor(pid: number) {\n super(`Orchestrator already running (PID: ${pid})`, 4, 'Use: orch status');\n this.name = 'LockConflictError';\n }\n}\n\nexport class AgentAdapterError extends OrchestryError {\n constructor(adapter: string, detail: string) {\n super(`Agent adapter \"${adapter}\" not available`, 5, detail);\n this.name = 'AgentAdapterError';\n }\n}\n\nexport class NoAgentsError extends OrchestryError {\n constructor() {\n super('No agents configured', 1, 'Run: orch agent add <name> --adapter claude');\n this.name = 'NoAgentsError';\n }\n}\n\nexport class TaskNotFoundError extends OrchestryError {\n constructor(taskId: string) {\n super(`Task not found: ${taskId}`, 1);\n this.name = 'TaskNotFoundError';\n }\n}\n\nexport class AgentNotFoundError extends OrchestryError {\n constructor(agentId: string) {\n super(`Agent not found: ${agentId}`, 1);\n this.name = 'AgentNotFoundError';\n }\n}\n\nexport class TaskAlreadyRunningError extends OrchestryError {\n constructor(taskId: string, runId: string, agentName: string) {\n super(\n `Task ${taskId} is already running (run: ${runId}, agent: ${agentName})`,\n 1,\n `Use: orch logs --task ${taskId} --follow`,\n );\n this.name = 'TaskAlreadyRunningError';\n }\n}\n\nexport class InvalidTransitionError extends OrchestryError {\n constructor(taskId: string, from: string, to: string) {\n super(`Invalid transition for ${taskId}: ${from} → ${to}`, 1);\n this.name = 'InvalidTransitionError';\n }\n}\n\nexport class GoalNotFoundError extends OrchestryError {\n constructor(goalId: string) {\n super(`Goal not found: ${goalId}`, 1);\n this.name = 'GoalNotFoundError';\n }\n}\n\nexport class TeamNotFoundError extends OrchestryError {\n constructor(teamId: string) {\n super(`Team not found: ${teamId}`, 1);\n this.name = 'TeamNotFoundError';\n }\n}\n\nexport class MessageNotFoundError extends OrchestryError {\n constructor(messageId: string) {\n super(`Message not found: ${messageId}`, 1);\n this.name = 'MessageNotFoundError';\n }\n}\n"]}
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- export { ClaudeAdapter } from './chunk-IRN2U2NE.js';
3
- import './chunk-TX7WOFCW.js';
4
- import './chunk-CHIP7O6V.js';
@@ -1,2 +0,0 @@
1
- import {b,a as a$1}from'./chunk-IZYSGYXG.js';import'./chunk-PBFE5V3G.js';import'./chunk-POUC4CPC.js';import {execFile}from'child_process';import {promisify}from'util';var l=promisify(execFile),a=class{constructor(e){this.processManager=e;}kind="claude";async test(){try{let{stdout:e}=await l("claude",["--version"]);return {ok:!0,version:e.trim()}}catch{return {ok:false,error:"Claude Code CLI not found. Install: npm i -g @anthropic-ai/claude-code"}}}execute(e){let t=["--print","--output-format","stream-json","--max-turns",String(e.config.max_turns??50),"--verbose","--dangerously-skip-permissions"];e.config.model&&t.push("--model",e.config.model),e.config.system_prompt&&t.push("--system-prompt",e.config.system_prompt),t.push(e.prompt);let{process:s,pid:c}=this.processManager.spawn("claude",t,{cwd:e.workspace,env:{...process.env,...e.env},signal:e.signal}),u=b(s,d,"Claude",e.signal);return {pid:c,events:u}}async stop(e){await this.processManager.killWithGrace(e);}};function d(r){if(!r.trim())return null;try{let e=JSON.parse(r),t=new Date().toISOString();switch(e.type){case "assistant":return {type:"output",timestamp:t,data:e.message??e};case "tool_use":return {type:"tool_call",timestamp:t,data:e};case "tool_result":return {type:"output",timestamp:t,data:e};case "error":return {type:"error",timestamp:t,data:e.error??e};case "result":{let s=a$1(e,{statsFallback:!0});return {type:"done",timestamp:t,data:e,tokens:s}}default:return {type:"output",timestamp:t,data:e}}}catch{return {type:"output",timestamp:new Date().toISOString(),data:r}}}export{a as ClaudeAdapter};//# sourceMappingURL=claude-S47YTIHU.js.map
2
- //# sourceMappingURL=claude-S47YTIHU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/infrastructure/adapters/claude.ts"],"names":["execFileAsync","promisify","execFile","ClaudeAdapter","processManager","stdout","params","args","proc","pid","events","createStreamingEvents","parseClaudeEvent","line","parsed","timestamp","tokens","extractTokens"],"mappings":"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","file":"claude-S47YTIHU.js","sourcesContent":["/**\n * Claude Code adapter.\n *\n * Spawns `claude --print --output-format stream-json` in headless mode.\n * Parses JSON-lines 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 ClaudeAdapter implements IAgentAdapter {\n readonly kind = 'claude';\n\n constructor(private readonly processManager: IProcessManager) {}\n\n async test(): Promise<AdapterTestResult> {\n try {\n const { stdout } = await execFileAsync('claude', ['--version']);\n return { ok: true, version: stdout.trim() };\n } catch {\n return {\n ok: false,\n error: 'Claude Code CLI not found. Install: npm i -g @anthropic-ai/claude-code',\n };\n }\n }\n\n execute(params: ExecuteParams): ExecuteHandle {\n const args = [\n '--print',\n '--output-format', 'stream-json',\n '--max-turns', String(params.config.max_turns ?? 50),\n '--verbose',\n '--dangerously-skip-permissions', // Agents run autonomously; stdin is 'ignore' so prompts would hang\n ];\n\n if (params.config.model) {\n args.push('--model', params.config.model);\n }\n\n if (params.config.system_prompt) {\n args.push('--system-prompt', params.config.system_prompt);\n }\n\n args.push(params.prompt);\n\n const { process: proc, pid } = this.processManager.spawn('claude', args, {\n cwd: params.workspace,\n env: { ...process.env, ...params.env },\n signal: params.signal,\n });\n\n const events = createStreamingEvents(proc, parseClaudeEvent, 'Claude', 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 parseClaudeEvent(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 switch (parsed.type) {\n case 'assistant':\n return { type: 'output', timestamp, data: (parsed.message as unknown) ?? parsed };\n case 'tool_use':\n return { type: 'tool_call', timestamp, data: parsed };\n case 'tool_result':\n return { type: 'output', timestamp, data: parsed };\n case 'error':\n return { type: 'error', timestamp, data: (parsed.error as unknown) ?? parsed };\n case 'result': {\n const tokens = extractTokens(parsed, { statsFallback: true });\n return { type: 'done', timestamp, data: parsed, tokens };\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"]}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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"]}
@@ -1,75 +0,0 @@
1
- #!/usr/bin/env node
2
- import { dim, printSuccess, printError } from './chunk-I5WEMARW.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 };