Skip to content

Commit 028766a

Browse files
committed
fix: Added init command
1 parent 432614a commit 028766a

File tree

11 files changed

+69
-9
lines changed

11 files changed

+69
-9
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ oclif example Hello World CLI
1717
$ npm install -g codify
1818
$ codify COMMAND
1919
running command...
20-
$ codify (--version)
20+
$ codify (--version|-v)
2121
codify/1.0.0 darwin-arm64 node-v22.19.0
2222
$ codify --help [COMMAND]
2323
USAGE

src/commands/init.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ For more information, visit: https://docs.codifycli.com/commands/init`
1717

1818
static baseFlags= {
1919
...BaseCommand.baseFlags,
20-
path: { hidden: true } as any,
2120
}
2221

2322
static override examples = [
@@ -29,6 +28,7 @@ For more information, visit: https://docs.codifycli.com/commands/init`
2928

3029
await InitializeOrchestrator.run({
3130
verbosityLevel: flags.debug ? 3 : 0,
31+
path: flags.path,
3232
},this.reporter);
3333

3434
process.exit(0)

src/connect/http-routes/handlers/create-command.ts renamed to src/connect/http-routes/create-command.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import chalk from 'chalk';
33
import { Router } from 'express';
44
import WebSocket from 'ws';
55

6-
import { Session, SocketServer } from '../../socket-server.js';
6+
import { Session, SocketServer } from '../socket-server.js';
77

88
export enum ConnectCommand {
99
TERMINAL = 'terminal',

src/connect/http-routes/handlers/apply-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { WebSocket } from 'ws';
88
import { ConnectOrchestrator } from '../../../orchestrators/connect.js';
99
import { ajv } from '../../../utils/ajv.js';
1010
import { Session } from '../../socket-server.js';
11-
import { ConnectCommand, createCommandHandler } from './create-command.js';
11+
import { ConnectCommand, createCommandHandler } from '../create-command.js';
1212

1313
const validator = ajv.compile(ConfigFileSchema);
1414

src/connect/http-routes/handlers/import-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { WebSocket } from 'ws';
99
import { ConnectOrchestrator } from '../../../orchestrators/connect.js';
1010
import { ajv } from '../../../utils/ajv.js';
1111
import { Session, SocketServer } from '../../socket-server.js';
12-
import { ConnectCommand, createCommandHandler } from './create-command.js';
12+
import { ConnectCommand, createCommandHandler } from '../create-command.js';
1313

1414
enum ImportType {
1515
IMPORT = 'import',
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { spawn } from '@homebridge/node-pty-prebuilt-multiarch';
2+
import { diffChars } from 'diff';
3+
import fs from 'node:fs/promises';
4+
import os from 'node:os';
5+
import path from 'node:path';
6+
import { WebSocket } from 'ws';
7+
8+
import { ConnectOrchestrator } from '../../../orchestrators/connect.js';
9+
import { Session, SocketServer } from '../../socket-server.js';
10+
import { ConnectCommand, createCommandHandler } from '../create-command.js';
11+
12+
export function initHandler() {
13+
const spawnCommand = async (body: Record<string, unknown>, ws: WebSocket, session: Session) => {
14+
const tmpDir = await fs.mkdtemp(os.tmpdir());
15+
const filePath = path.join(tmpDir, 'codify.jsonc');
16+
await fs.writeFile(filePath, '[]');
17+
session.additionalData.filePath = filePath;
18+
session.additionalData.existingFile = '[]';
19+
20+
return spawn('zsh', ['-c', `${ConnectOrchestrator.nodeBinary} ${ConnectOrchestrator.rootCommand} init -p ${filePath}`], {
21+
name: 'xterm-color',
22+
cols: 80,
23+
rows: 30,
24+
cwd: process.env.HOME,
25+
env: process.env
26+
});
27+
}
28+
29+
const onExit = async (exitCode: number, ws: WebSocket, session: Session) => {
30+
if (session.additionalData.filePath) {
31+
const updatedFile = await fs.readFile(session.additionalData.filePath as string, 'utf8')
32+
33+
// Changes were found
34+
if (diffChars(updatedFile, session.additionalData.existingFile as string).length > 0) {
35+
console.log('Writing imported changes to Codify dashboard');
36+
37+
const ws = SocketServer.get().getMainConnection(session.clientId);
38+
if (!ws) {
39+
throw new Error(`Unable to find client for clientId ${session.clientId}`);
40+
}
41+
42+
ws.send(JSON.stringify({ key: 'new_init', data: {
43+
updated: updatedFile,
44+
} }))
45+
}
46+
47+
48+
await fs.rm(session.additionalData.filePath as string, { recursive: true, force: true });
49+
}
50+
}
51+
52+
return createCommandHandler({
53+
name: ConnectCommand.IMPORT,
54+
spawnCommand,
55+
onExit
56+
});
57+
}

src/connect/http-routes/handlers/plan-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { WebSocket } from 'ws';
88
import { ConnectOrchestrator } from '../../../orchestrators/connect.js';
99
import { ajv } from '../../../utils/ajv.js';
1010
import { Session } from '../../socket-server.js';
11-
import { ConnectCommand, createCommandHandler } from './create-command.js';
11+
import { ConnectCommand, createCommandHandler } from '../create-command.js';
1212

1313
const validator = ajv.compile(ConfigFileSchema);
1414

src/connect/http-routes/handlers/refresh-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { WebSocket } from 'ws';
99
import { ConnectOrchestrator } from '../../../orchestrators/connect.js';
1010
import { ajv } from '../../../utils/ajv.js';
1111
import { Session, SocketServer } from '../../socket-server.js';
12-
import { ConnectCommand, createCommandHandler } from './create-command.js';
12+
import { ConnectCommand, createCommandHandler } from '../create-command.js';
1313

1414
enum RefreshType {
1515
REFRESH = 'refresh',

src/connect/http-routes/handlers/terminal-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ConnectCommand, createCommandHandler } from './create-command.js';
1+
import { ConnectCommand, createCommandHandler } from '../create-command.js';
22

33
export function terminalHandler() {
44
return createCommandHandler({

src/connect/http-routes/router.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Router } from 'express';
33
import { applyHandler } from './handlers/apply-handler.js';
44
import { importHandler } from './handlers/import-handler.js';
55
import defaultHandler from './handlers/index.js';
6+
import { initHandler } from './handlers/init-handler.js';
67
import { planHandler } from './handlers/plan-handler.js';
78
import { refreshHandler } from './handlers/refresh-handler.js';
89
import { terminalHandler } from './handlers/terminal-handler.js';
@@ -15,5 +16,6 @@ router.use('/plan', planHandler())
1516
router.use('/import', importHandler());
1617
router.use('/refresh', refreshHandler());
1718
router.use('/terminal', terminalHandler());
19+
router.use('/init', initHandler());
1820

1921
export default router;

0 commit comments

Comments
 (0)