@enruana/claude-orka 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +240 -0
- package/bin/orka.js +19 -0
- package/dist/core/ClaudeOrka.d.ts +111 -0
- package/dist/core/ClaudeOrka.d.ts.map +1 -0
- package/dist/core/ClaudeOrka.js +160 -0
- package/dist/core/ClaudeOrka.js.map +1 -0
- package/dist/core/SessionManager.d.ts +82 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js +519 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/StateManager.d.ts +92 -0
- package/dist/core/StateManager.d.ts.map +1 -0
- package/dist/core/StateManager.js +307 -0
- package/dist/core/StateManager.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +20 -0
- package/dist/core/index.js.map +1 -0
- package/dist/electron/main/ipc-handlers.d.ts +5 -0
- package/dist/electron/main/ipc-handlers.d.ts.map +1 -0
- package/dist/electron/main/ipc-handlers.js +169 -0
- package/dist/electron/main/ipc-handlers.js.map +1 -0
- package/dist/electron/main/main.d.ts +5 -0
- package/dist/electron/main/main.d.ts.map +1 -0
- package/dist/electron/main/main.js +66 -0
- package/dist/electron/main/main.js.map +1 -0
- package/dist/electron/preload/preload.d.ts +25 -0
- package/dist/electron/preload/preload.d.ts.map +1 -0
- package/dist/electron/preload/preload.js +31 -0
- package/dist/electron/preload/preload.js.map +1 -0
- package/dist/electron/renderer/app.js +808 -0
- package/dist/electron/renderer/index.html +189 -0
- package/dist/electron/renderer/styles.css +736 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/models/Fork.d.ts +26 -0
- package/dist/models/Fork.d.ts.map +1 -0
- package/dist/models/Fork.js +3 -0
- package/dist/models/Fork.js.map +1 -0
- package/dist/models/Session.d.ts +38 -0
- package/dist/models/Session.d.ts.map +1 -0
- package/dist/models/Session.js +3 -0
- package/dist/models/Session.js.map +1 -0
- package/dist/models/State.d.ts +24 -0
- package/dist/models/State.d.ts.map +1 -0
- package/dist/models/State.js +3 -0
- package/dist/models/State.js.map +1 -0
- package/dist/models/index.d.ts +4 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +20 -0
- package/dist/models/index.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +3 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +266 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/fork.d.ts +3 -0
- package/dist/src/cli/commands/fork.d.ts.map +1 -0
- package/dist/src/cli/commands/fork.js +136 -0
- package/dist/src/cli/commands/fork.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +3 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +22 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/merge.d.ts +3 -0
- package/dist/src/cli/commands/merge.d.ts.map +1 -0
- package/dist/src/cli/commands/merge.js +84 -0
- package/dist/src/cli/commands/merge.js.map +1 -0
- package/dist/src/cli/commands/prepare.d.ts +3 -0
- package/dist/src/cli/commands/prepare.d.ts.map +1 -0
- package/dist/src/cli/commands/prepare.js +154 -0
- package/dist/src/cli/commands/prepare.js.map +1 -0
- package/dist/src/cli/commands/session.d.ts +3 -0
- package/dist/src/cli/commands/session.d.ts.map +1 -0
- package/dist/src/cli/commands/session.js +166 -0
- package/dist/src/cli/commands/session.js.map +1 -0
- package/dist/src/cli/commands/status.d.ts +3 -0
- package/dist/src/cli/commands/status.d.ts.map +1 -0
- package/dist/src/cli/commands/status.js +28 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +25 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/utils/errors.d.ts +24 -0
- package/dist/src/cli/utils/errors.d.ts.map +1 -0
- package/dist/src/cli/utils/errors.js +57 -0
- package/dist/src/cli/utils/errors.js.map +1 -0
- package/dist/src/cli/utils/output.d.ts +59 -0
- package/dist/src/cli/utils/output.d.ts.map +1 -0
- package/dist/src/cli/utils/output.js +222 -0
- package/dist/src/cli/utils/output.js.map +1 -0
- package/dist/src/core/ClaudeOrka.d.ts +158 -0
- package/dist/src/core/ClaudeOrka.d.ts.map +1 -0
- package/dist/src/core/ClaudeOrka.js +264 -0
- package/dist/src/core/ClaudeOrka.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +84 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +501 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/StateManager.d.ts +108 -0
- package/dist/src/core/StateManager.d.ts.map +1 -0
- package/dist/src/core/StateManager.js +317 -0
- package/dist/src/core/StateManager.js.map +1 -0
- package/dist/src/core/index.d.ts +4 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +4 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +10 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/models/Fork.d.ts +24 -0
- package/dist/src/models/Fork.d.ts.map +1 -0
- package/dist/src/models/Fork.js +2 -0
- package/dist/src/models/Fork.js.map +1 -0
- package/dist/src/models/Session.d.ts +36 -0
- package/dist/src/models/Session.d.ts.map +1 -0
- package/dist/src/models/Session.js +2 -0
- package/dist/src/models/Session.js.map +1 -0
- package/dist/src/models/State.d.ts +24 -0
- package/dist/src/models/State.d.ts.map +1 -0
- package/dist/src/models/State.js +2 -0
- package/dist/src/models/State.js.map +1 -0
- package/dist/src/models/Summary.d.ts +68 -0
- package/dist/src/models/Summary.d.ts.map +1 -0
- package/dist/src/models/Summary.js +2 -0
- package/dist/src/models/Summary.js.map +1 -0
- package/dist/src/models/index.d.ts +5 -0
- package/dist/src/models/index.d.ts.map +1 -0
- package/dist/src/models/index.js +5 -0
- package/dist/src/models/index.js.map +1 -0
- package/dist/src/utils/claude-history.d.ts +34 -0
- package/dist/src/utils/claude-history.d.ts.map +1 -0
- package/dist/src/utils/claude-history.js +82 -0
- package/dist/src/utils/claude-history.js.map +1 -0
- package/dist/src/utils/index.d.ts +4 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +4 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +20 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +38 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/tmux.d.ts +89 -0
- package/dist/src/utils/tmux.d.ts.map +1 -0
- package/dist/src/utils/tmux.js +299 -0
- package/dist/src/utils/tmux.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +41 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/tmux.d.ts +77 -0
- package/dist/utils/tmux.d.ts.map +1 -0
- package/dist/utils/tmux.js +270 -0
- package/dist/utils/tmux.js.map +1 -0
- package/package.json +110 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude-Orka SDK
|
|
4
|
+
* Orquestador de sesiones de Claude Code con tmux
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TmuxError = exports.TmuxCommands = exports.LogLevel = exports.logger = exports.ClaudeOrka = void 0;
|
|
8
|
+
// API Principal
|
|
9
|
+
var ClaudeOrka_1 = require("./core/ClaudeOrka");
|
|
10
|
+
Object.defineProperty(exports, "ClaudeOrka", { enumerable: true, get: function () { return ClaudeOrka_1.ClaudeOrka; } });
|
|
11
|
+
// Utilidades exportadas (opcional)
|
|
12
|
+
var logger_1 = require("./utils/logger");
|
|
13
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
14
|
+
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return logger_1.LogLevel; } });
|
|
15
|
+
var tmux_1 = require("./utils/tmux");
|
|
16
|
+
Object.defineProperty(exports, "TmuxCommands", { enumerable: true, get: function () { return tmux_1.TmuxCommands; } });
|
|
17
|
+
Object.defineProperty(exports, "TmuxError", { enumerable: true, get: function () { return tmux_1.TmuxError; } });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,gBAAgB;AAChB,gDAA8C;AAArC,wGAAA,UAAU,OAAA;AAWnB,mCAAmC;AACnC,yCAAiD;AAAxC,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA;AACzB,qCAAsD;AAA7C,oGAAA,YAAY,OAAA;AAAE,iGAAA,SAAS,OAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Representa un fork (rama de conversación) de una sesión
|
|
3
|
+
*/
|
|
4
|
+
export interface Fork {
|
|
5
|
+
/** ID único del fork (fork-{name?}-{nanoid}) */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Nombre descriptivo del fork */
|
|
8
|
+
name: string;
|
|
9
|
+
/** ID del pane tmux (solo si status = 'active') */
|
|
10
|
+
tmuxPaneId?: string;
|
|
11
|
+
/** ID del padre: 'main' o ID de otro fork */
|
|
12
|
+
parentId: string;
|
|
13
|
+
/** Fecha de creación (ISO timestamp) */
|
|
14
|
+
createdAt: string;
|
|
15
|
+
/** Path al contexto guardado (relativo a projectPath) */
|
|
16
|
+
contextPath?: string;
|
|
17
|
+
/** Estado del fork */
|
|
18
|
+
status: 'active' | 'saved' | 'merged';
|
|
19
|
+
/** Última actividad en este fork (ISO timestamp) */
|
|
20
|
+
lastActivity: string;
|
|
21
|
+
/** Si el fork ya fue mergeado a main */
|
|
22
|
+
mergedToMain?: boolean;
|
|
23
|
+
/** Fecha en que se hizo merge (ISO timestamp) */
|
|
24
|
+
mergedAt?: string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Fork.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fork.d.ts","sourceRoot":"","sources":["../../src/models/Fork.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAA;IAEV,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IAEZ,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAEhB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IAEjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,sBAAsB;IACtB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;IAErC,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAA;IAEpB,wCAAwC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fork.js","sourceRoot":"","sources":["../../src/models/Fork.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Fork } from './Fork';
|
|
2
|
+
/**
|
|
3
|
+
* Representa una sesión de Claude Code
|
|
4
|
+
*/
|
|
5
|
+
export interface Session {
|
|
6
|
+
/** ID único de la sesión (session-{nanoid}) */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Nombre descriptivo de la sesión */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Nombre de la sesión tmux (orchestrator-{id}) */
|
|
11
|
+
tmuxSessionName: string;
|
|
12
|
+
/** Path absoluto del proyecto */
|
|
13
|
+
projectPath: string;
|
|
14
|
+
/** Fecha de creación (ISO timestamp) */
|
|
15
|
+
createdAt: string;
|
|
16
|
+
/** Estado: active = tmux corriendo, saved = guardado en disco */
|
|
17
|
+
status: 'active' | 'saved';
|
|
18
|
+
/** Rama principal de la sesión */
|
|
19
|
+
main: MainBranch;
|
|
20
|
+
/** Forks (ramas) de esta sesión */
|
|
21
|
+
forks: Fork[];
|
|
22
|
+
/** Última actividad en cualquier parte de la sesión (ISO timestamp) */
|
|
23
|
+
lastActivity: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Representa la rama principal de una sesión
|
|
27
|
+
*/
|
|
28
|
+
export interface MainBranch {
|
|
29
|
+
/** ID del pane tmux (solo si status = 'active') */
|
|
30
|
+
tmuxPaneId?: string;
|
|
31
|
+
/** ID de la ventana tmux (solo si status = 'active') */
|
|
32
|
+
tmuxWindowId?: string;
|
|
33
|
+
/** Path al contexto guardado (relativo a projectPath) */
|
|
34
|
+
contextPath?: string;
|
|
35
|
+
/** Última actividad en main (ISO timestamp) */
|
|
36
|
+
lastActivity: string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../src/models/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAA;IAEV,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IAEZ,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAA;IAEvB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IAEnB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IAEjB,iEAAiE;IACjE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAA;IAE1B,kCAAkC;IAClC,IAAI,EAAE,UAAU,CAAA;IAEhB,mCAAmC;IACnC,KAAK,EAAE,IAAI,EAAE,CAAA;IAEb,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAA;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/models/Session.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Session } from './Session';
|
|
2
|
+
/**
|
|
3
|
+
* Estado global del proyecto almacenado en .claude-orka/state.json
|
|
4
|
+
*/
|
|
5
|
+
export interface ProjectState {
|
|
6
|
+
/** Versión del formato del estado */
|
|
7
|
+
version: string;
|
|
8
|
+
/** Path absoluto del proyecto */
|
|
9
|
+
projectPath: string;
|
|
10
|
+
/** Todas las sesiones del proyecto (activas y guardadas) */
|
|
11
|
+
sessions: Session[];
|
|
12
|
+
/** Última actualización del estado (ISO timestamp) */
|
|
13
|
+
lastUpdated: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Filtros para buscar sesiones
|
|
17
|
+
*/
|
|
18
|
+
export interface SessionFilters {
|
|
19
|
+
/** Filtrar por estado: active = tmux corriendo, saved = guardado */
|
|
20
|
+
status?: 'active' | 'saved';
|
|
21
|
+
/** Filtrar por nombre de sesión */
|
|
22
|
+
name?: string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=State.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/models/State.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAA;IAEf,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IAEnB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAE3B,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"State.js","sourceRoot":"","sources":["../../src/models/State.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./State"), exports);
|
|
18
|
+
__exportStar(require("./Session"), exports);
|
|
19
|
+
__exportStar(require("./Fork"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,4CAAyB;AACzB,yCAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgBnC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,QAyC7C"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import execa from 'execa';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { Output } from '../utils/output';
|
|
6
|
+
import { handleError } from '../utils/errors';
|
|
7
|
+
export function doctorCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('doctor')
|
|
10
|
+
.description('Check system dependencies and configuration')
|
|
11
|
+
.action(async () => {
|
|
12
|
+
try {
|
|
13
|
+
console.log(chalk.bold.cyan('\n🔍 Claude-Orka Doctor\n'));
|
|
14
|
+
console.log('Checking system dependencies and configuration...\n');
|
|
15
|
+
const results = [];
|
|
16
|
+
// Check Node.js version
|
|
17
|
+
results.push(await checkNodeVersion());
|
|
18
|
+
// Check tmux
|
|
19
|
+
results.push(await checkTmux());
|
|
20
|
+
// Check Claude CLI
|
|
21
|
+
results.push(await checkClaude());
|
|
22
|
+
// Check project initialization
|
|
23
|
+
results.push(await checkProjectInit());
|
|
24
|
+
// Check write permissions
|
|
25
|
+
results.push(await checkWritePermissions());
|
|
26
|
+
// Check .claude directory
|
|
27
|
+
results.push(await checkClaudeDir());
|
|
28
|
+
// Display results
|
|
29
|
+
displayResults(results);
|
|
30
|
+
// Exit with error if any critical checks failed
|
|
31
|
+
const criticalFailures = results.filter((r) => r.status === 'fail');
|
|
32
|
+
if (criticalFailures.length > 0) {
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
handleError(error);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async function checkNodeVersion() {
|
|
42
|
+
try {
|
|
43
|
+
const version = process.version;
|
|
44
|
+
const major = parseInt(version.slice(1).split('.')[0]);
|
|
45
|
+
if (major >= 18) {
|
|
46
|
+
return {
|
|
47
|
+
name: 'Node.js',
|
|
48
|
+
status: 'pass',
|
|
49
|
+
message: `${version} (>= 18.0.0)`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return {
|
|
54
|
+
name: 'Node.js',
|
|
55
|
+
status: 'fail',
|
|
56
|
+
message: `${version} (requires >= 18.0.0)`,
|
|
57
|
+
fix: 'Install Node.js 18 or higher from https://nodejs.org',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return {
|
|
63
|
+
name: 'Node.js',
|
|
64
|
+
status: 'fail',
|
|
65
|
+
message: 'Not found',
|
|
66
|
+
fix: 'Install Node.js from https://nodejs.org',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function checkTmux() {
|
|
71
|
+
try {
|
|
72
|
+
const { stdout } = await execa('tmux', ['-V']);
|
|
73
|
+
const version = stdout.trim();
|
|
74
|
+
return {
|
|
75
|
+
name: 'tmux',
|
|
76
|
+
status: 'pass',
|
|
77
|
+
message: version,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
name: 'tmux',
|
|
83
|
+
status: 'fail',
|
|
84
|
+
message: 'Not found',
|
|
85
|
+
details: 'tmux is required for session management',
|
|
86
|
+
fix: 'Install tmux:\n macOS: brew install tmux\n Ubuntu: sudo apt-get install tmux',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function checkClaude() {
|
|
91
|
+
try {
|
|
92
|
+
const { stdout } = await execa('claude', ['--version']);
|
|
93
|
+
const version = stdout.trim();
|
|
94
|
+
return {
|
|
95
|
+
name: 'Claude CLI',
|
|
96
|
+
status: 'pass',
|
|
97
|
+
message: version,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
return {
|
|
102
|
+
name: 'Claude CLI',
|
|
103
|
+
status: 'fail',
|
|
104
|
+
message: 'Not found',
|
|
105
|
+
details: 'Claude CLI is required for AI sessions',
|
|
106
|
+
fix: 'Install Claude CLI from https://claude.ai/download',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function checkProjectInit() {
|
|
111
|
+
const projectPath = process.cwd();
|
|
112
|
+
const orkaDir = path.join(projectPath, '.claude-orka');
|
|
113
|
+
const stateFile = path.join(orkaDir, 'state.json');
|
|
114
|
+
try {
|
|
115
|
+
const dirExists = await fs.pathExists(orkaDir);
|
|
116
|
+
const stateExists = await fs.pathExists(stateFile);
|
|
117
|
+
if (dirExists && stateExists) {
|
|
118
|
+
return {
|
|
119
|
+
name: 'Project initialization',
|
|
120
|
+
status: 'pass',
|
|
121
|
+
message: 'Initialized',
|
|
122
|
+
details: '.claude-orka/ directory and state.json found',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
else if (dirExists) {
|
|
126
|
+
return {
|
|
127
|
+
name: 'Project initialization',
|
|
128
|
+
status: 'warn',
|
|
129
|
+
message: 'Partially initialized',
|
|
130
|
+
details: '.claude-orka/ exists but state.json is missing',
|
|
131
|
+
fix: 'Run: orka init',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
return {
|
|
136
|
+
name: 'Project initialization',
|
|
137
|
+
status: 'warn',
|
|
138
|
+
message: 'Not initialized',
|
|
139
|
+
details: 'Project is not initialized',
|
|
140
|
+
fix: 'Run: orka init',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return {
|
|
146
|
+
name: 'Project initialization',
|
|
147
|
+
status: 'fail',
|
|
148
|
+
message: 'Error checking',
|
|
149
|
+
details: error.message,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function checkWritePermissions() {
|
|
154
|
+
const projectPath = process.cwd();
|
|
155
|
+
try {
|
|
156
|
+
const testFile = path.join(projectPath, '.claude-orka-write-test');
|
|
157
|
+
await fs.writeFile(testFile, 'test');
|
|
158
|
+
await fs.remove(testFile);
|
|
159
|
+
return {
|
|
160
|
+
name: 'Write permissions',
|
|
161
|
+
status: 'pass',
|
|
162
|
+
message: 'OK',
|
|
163
|
+
details: 'Can write to project directory',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return {
|
|
168
|
+
name: 'Write permissions',
|
|
169
|
+
status: 'fail',
|
|
170
|
+
message: 'Cannot write',
|
|
171
|
+
details: `No write permission in ${projectPath}`,
|
|
172
|
+
fix: 'Check directory permissions',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async function checkClaudeDir() {
|
|
177
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
178
|
+
const claudeDir = path.join(homeDir, '.claude');
|
|
179
|
+
const historyFile = path.join(claudeDir, 'history.jsonl');
|
|
180
|
+
try {
|
|
181
|
+
const dirExists = await fs.pathExists(claudeDir);
|
|
182
|
+
const historyExists = await fs.pathExists(historyFile);
|
|
183
|
+
if (dirExists && historyExists) {
|
|
184
|
+
return {
|
|
185
|
+
name: 'Claude directory',
|
|
186
|
+
status: 'pass',
|
|
187
|
+
message: 'Found',
|
|
188
|
+
details: `~/.claude/history.jsonl exists`,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
else if (dirExists) {
|
|
192
|
+
return {
|
|
193
|
+
name: 'Claude directory',
|
|
194
|
+
status: 'warn',
|
|
195
|
+
message: 'History file missing',
|
|
196
|
+
details: '~/.claude/ exists but history.jsonl not found',
|
|
197
|
+
fix: 'Run Claude CLI at least once to create history',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
return {
|
|
202
|
+
name: 'Claude directory',
|
|
203
|
+
status: 'warn',
|
|
204
|
+
message: 'Not found',
|
|
205
|
+
details: '~/.claude/ directory not found',
|
|
206
|
+
fix: 'Run Claude CLI at least once to create the directory',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
return {
|
|
212
|
+
name: 'Claude directory',
|
|
213
|
+
status: 'fail',
|
|
214
|
+
message: 'Error checking',
|
|
215
|
+
details: error.message,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function displayResults(results) {
|
|
220
|
+
console.log(chalk.bold('Results:\n'));
|
|
221
|
+
for (const result of results) {
|
|
222
|
+
let icon;
|
|
223
|
+
let color;
|
|
224
|
+
switch (result.status) {
|
|
225
|
+
case 'pass':
|
|
226
|
+
icon = '✓';
|
|
227
|
+
color = chalk.green;
|
|
228
|
+
break;
|
|
229
|
+
case 'warn':
|
|
230
|
+
icon = '⚠';
|
|
231
|
+
color = chalk.yellow;
|
|
232
|
+
break;
|
|
233
|
+
case 'fail':
|
|
234
|
+
icon = '✗';
|
|
235
|
+
color = chalk.red;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
console.log(`${color(icon)} ${chalk.bold(result.name)}: ${color(result.message)}`);
|
|
239
|
+
if (result.details) {
|
|
240
|
+
console.log(` ${chalk.gray(result.details)}`);
|
|
241
|
+
}
|
|
242
|
+
if (result.fix) {
|
|
243
|
+
console.log(` ${chalk.cyan('Fix:')} ${result.fix}`);
|
|
244
|
+
}
|
|
245
|
+
console.log();
|
|
246
|
+
}
|
|
247
|
+
// Summary
|
|
248
|
+
const passed = results.filter((r) => r.status === 'pass').length;
|
|
249
|
+
const warned = results.filter((r) => r.status === 'warn').length;
|
|
250
|
+
const failed = results.filter((r) => r.status === 'fail').length;
|
|
251
|
+
console.log(chalk.bold('Summary:'));
|
|
252
|
+
console.log(` ${chalk.green('✓')} Passed: ${passed}`);
|
|
253
|
+
console.log(` ${chalk.yellow('⚠')} Warnings: ${warned}`);
|
|
254
|
+
console.log(` ${chalk.red('✗')} Failed: ${failed}`);
|
|
255
|
+
console.log();
|
|
256
|
+
if (failed === 0 && warned === 0) {
|
|
257
|
+
Output.success('All checks passed! Claude-Orka is ready to use.');
|
|
258
|
+
}
|
|
259
|
+
else if (failed === 0) {
|
|
260
|
+
Output.warn('Some warnings found. Claude-Orka should work but check the warnings above.');
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
Output.error('Some critical checks failed. Fix the errors above before using Claude-Orka.');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/fork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QA2J3C"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { ClaudeOrka } from '../../core/ClaudeOrka';
|
|
3
|
+
import { Output } from '../utils/output';
|
|
4
|
+
import { handleError, validateInitialized, validateSessionId, validateForkId } from '../utils/errors';
|
|
5
|
+
export function forkCommand(program) {
|
|
6
|
+
const fork = program.command('fork').description('Manage conversation forks');
|
|
7
|
+
// Create fork
|
|
8
|
+
fork
|
|
9
|
+
.command('create <session-id> [name]')
|
|
10
|
+
.description('Create a new fork in a session')
|
|
11
|
+
.option('-v, --vertical', 'Split vertically instead of horizontally')
|
|
12
|
+
.action(async (sessionId, name, options) => {
|
|
13
|
+
try {
|
|
14
|
+
const projectPath = process.cwd();
|
|
15
|
+
validateInitialized(projectPath);
|
|
16
|
+
validateSessionId(sessionId);
|
|
17
|
+
const orka = new ClaudeOrka(projectPath);
|
|
18
|
+
await orka.initialize();
|
|
19
|
+
const spinner = ora('Creating fork...').start();
|
|
20
|
+
spinner.text = 'Creating fork and detecting session ID...';
|
|
21
|
+
const newFork = await orka.createFork(sessionId, name, options.vertical);
|
|
22
|
+
spinner.succeed('Fork created!');
|
|
23
|
+
Output.fork(newFork);
|
|
24
|
+
Output.newline();
|
|
25
|
+
Output.info('Fork created in a new tmux pane.');
|
|
26
|
+
Output.info('You can now explore an alternative approach in this fork.');
|
|
27
|
+
Output.newline();
|
|
28
|
+
Output.info(`To merge this fork: orka merge ${sessionId} ${newFork.id}`);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
handleError(error);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// List forks
|
|
35
|
+
fork
|
|
36
|
+
.command('list <session-id>')
|
|
37
|
+
.description('List all forks in a session')
|
|
38
|
+
.option('-s, --status <status>', 'Filter by status (active, saved, merged)')
|
|
39
|
+
.option('-j, --json', 'Output as JSON')
|
|
40
|
+
.action(async (sessionId, options) => {
|
|
41
|
+
try {
|
|
42
|
+
const projectPath = process.cwd();
|
|
43
|
+
validateInitialized(projectPath);
|
|
44
|
+
validateSessionId(sessionId);
|
|
45
|
+
const orka = new ClaudeOrka(projectPath);
|
|
46
|
+
await orka.initialize();
|
|
47
|
+
const session = await orka.getSession(sessionId);
|
|
48
|
+
if (!session) {
|
|
49
|
+
Output.error(`Session not found: ${sessionId}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
let forks = session.forks;
|
|
53
|
+
if (options.status) {
|
|
54
|
+
forks = forks.filter((f) => f.status === options.status);
|
|
55
|
+
}
|
|
56
|
+
if (options.json) {
|
|
57
|
+
Output.json(forks);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
Output.header(`🌿 Forks in ${session.name}`);
|
|
61
|
+
Output.forksTable(forks);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
handleError(error);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// Resume fork
|
|
69
|
+
fork
|
|
70
|
+
.command('resume <session-id> <fork-id>')
|
|
71
|
+
.description('Resume a saved fork')
|
|
72
|
+
.action(async (sessionId, forkId) => {
|
|
73
|
+
try {
|
|
74
|
+
const projectPath = process.cwd();
|
|
75
|
+
validateInitialized(projectPath);
|
|
76
|
+
validateSessionId(sessionId);
|
|
77
|
+
validateForkId(forkId);
|
|
78
|
+
const orka = new ClaudeOrka(projectPath);
|
|
79
|
+
await orka.initialize();
|
|
80
|
+
const spinner = ora('Resuming fork...').start();
|
|
81
|
+
const resumedFork = await orka.resumeFork(sessionId, forkId);
|
|
82
|
+
spinner.succeed('Fork resumed!');
|
|
83
|
+
Output.fork(resumedFork);
|
|
84
|
+
Output.newline();
|
|
85
|
+
Output.info('Fork has been restored in a new tmux pane.');
|
|
86
|
+
Output.info('Claude will remember the context of this conversation.');
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
handleError(error);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// Close fork
|
|
93
|
+
fork
|
|
94
|
+
.command('close <session-id> <fork-id>')
|
|
95
|
+
.description('Close a fork (saves it for later)')
|
|
96
|
+
.action(async (sessionId, forkId) => {
|
|
97
|
+
try {
|
|
98
|
+
const projectPath = process.cwd();
|
|
99
|
+
validateInitialized(projectPath);
|
|
100
|
+
validateSessionId(sessionId);
|
|
101
|
+
validateForkId(forkId);
|
|
102
|
+
const orka = new ClaudeOrka(projectPath);
|
|
103
|
+
await orka.initialize();
|
|
104
|
+
const spinner = ora('Closing fork...').start();
|
|
105
|
+
await orka.closeFork(sessionId, forkId);
|
|
106
|
+
spinner.succeed('Fork closed!');
|
|
107
|
+
Output.info('Fork has been saved. You can resume it later with:');
|
|
108
|
+
Output.info(` orka fork resume ${sessionId} ${forkId}`);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
handleError(error);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Delete fork
|
|
115
|
+
fork
|
|
116
|
+
.command('delete <session-id> <fork-id>')
|
|
117
|
+
.description('Permanently delete a fork')
|
|
118
|
+
.action(async (sessionId, forkId) => {
|
|
119
|
+
try {
|
|
120
|
+
const projectPath = process.cwd();
|
|
121
|
+
validateInitialized(projectPath);
|
|
122
|
+
validateSessionId(sessionId);
|
|
123
|
+
validateForkId(forkId);
|
|
124
|
+
const orka = new ClaudeOrka(projectPath);
|
|
125
|
+
await orka.initialize();
|
|
126
|
+
const spinner = ora('Deleting fork...').start();
|
|
127
|
+
await orka.deleteFork(sessionId, forkId);
|
|
128
|
+
spinner.succeed('Fork deleted!');
|
|
129
|
+
Output.warn('Fork has been permanently deleted.');
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
handleError(error);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=fork.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../../../../src/cli/commands/fork.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QAmB3C"}
|