@openork/cli 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/bin/dev.js +3 -0
- package/bin/run.js +3 -0
- package/dist/commands/gateway/start.d.ts +14 -0
- package/dist/commands/gateway/start.d.ts.map +1 -0
- package/dist/commands/gateway/start.js +120 -0
- package/dist/commands/gateway/start.js.map +1 -0
- package/dist/commands/gateway/stop.d.ts +7 -0
- package/dist/commands/gateway/stop.d.ts.map +1 -0
- package/dist/commands/gateway/stop.js +33 -0
- package/dist/commands/gateway/stop.js.map +1 -0
- package/dist/commands/setup.d.ts +7 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +86 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/setup.spec.d.ts +2 -0
- package/dist/commands/setup.spec.d.ts.map +1 -0
- package/dist/commands/setup.spec.js +88 -0
- package/dist/commands/setup.spec.js.map +1 -0
- package/dist/commands/uninstall.d.ts +10 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +71 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/gateway.d.ts +19 -0
- package/dist/lib/gateway.d.ts.map +1 -0
- package/dist/lib/gateway.js +52 -0
- package/dist/lib/gateway.js.map +1 -0
- package/dist/lib/shell-profile.d.ts +10 -0
- package/dist/lib/shell-profile.d.ts.map +1 -0
- package/dist/lib/shell-profile.js +56 -0
- package/dist/lib/shell-profile.js.map +1 -0
- package/dist/migrations/0001-add-memory-enabled.js +42 -0
- package/dist/migrations/lib/helpers.js +78 -0
- package/dist/migrations/lib/template.js +8 -0
- package/dist/openapi.yml +5648 -0
- package/dist/prisma/migrations/20260318152538_add_trigger_type_and_source_workflow/migration.sql +79 -0
- package/dist/prisma/migrations/20260318154232_drop_skill_and_emit_from_action/migration.sql +25 -0
- package/dist/prisma/migrations/20260318160029_action_types_cli_bash_node_http/migration.sql +29 -0
- package/dist/prisma/migrations/migration_lock.toml +3 -0
- package/dist/prisma/schema.prisma +236 -0
- package/dist/server.js +182527 -0
- package/dist/server.js.map +1 -0
- package/dist/web/assets/activity-feed-D_eonDKG.js +1 -0
- package/dist/web/assets/agent-edit-CblZItU5.js +98 -0
- package/dist/web/assets/agent-sessions-COpCcffa.js +1 -0
- package/dist/web/assets/agent-use-F4pOt3KJ.js +1 -0
- package/dist/web/assets/agents-Av7w2wHE.js +1 -0
- package/dist/web/assets/api-docs-BQzn4-6U.js +1 -0
- package/dist/web/assets/arrow-down-XHN5PD1k.js +1 -0
- package/dist/web/assets/arrow-left-wtNmm6Le.js +1 -0
- package/dist/web/assets/bi-gM8sIAZV.js +1 -0
- package/dist/web/assets/chat-CQvfLy7Y.js +4 -0
- package/dist/web/assets/chat-input-BepRPV_L.js +2 -0
- package/dist/web/assets/chat-message-CbcDeDcb.js +37 -0
- package/dist/web/assets/chat-new-BOtDuYij.js +1 -0
- package/dist/web/assets/chat-sessions-CaCaK_PC.js +1 -0
- package/dist/web/assets/chats-64IReeGV.js +1 -0
- package/dist/web/assets/circle-alert-W8QX9LOG.js +1 -0
- package/dist/web/assets/circle-check-DLl9fl65.js +1 -0
- package/dist/web/assets/circle-x-D_8Tcgt1.js +1 -0
- package/dist/web/assets/code-Brz4KHlI.js +1 -0
- package/dist/web/assets/code-editor-x9L6nkh4.js +1 -0
- package/dist/web/assets/commands-DT9K8bae.js +8 -0
- package/dist/web/assets/copy-C87mjn_Y.js +1 -0
- package/dist/web/assets/credentials-DC-HOVxW.js +1 -0
- package/dist/web/assets/cron-COUPKvGu.js +1 -0
- package/dist/web/assets/crown-BJEsQkh4.js +1 -0
- package/dist/web/assets/dashboard-OfnNUjFX.js +1 -0
- package/dist/web/assets/database-BohjTljV.js +1 -0
- package/dist/web/assets/debug-Et9rgBM8.js +1 -0
- package/dist/web/assets/download-B2UOiYAS.js +1 -0
- package/dist/web/assets/eye-DN-Km5vf.js +1 -0
- package/dist/web/assets/file-plus-B8qWemgt.js +1 -0
- package/dist/web/assets/file-tree-DkLQ1z0I.js +1 -0
- package/dist/web/assets/folder-plus-DsmP6Mur.js +1 -0
- package/dist/web/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/dist/web/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/dist/web/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/dist/web/assets/globe-fwFSeXZn.js +1 -0
- package/dist/web/assets/grip-vertical-Djo-yR-o.js +1 -0
- package/dist/web/assets/history-CyBBboEp.js +1 -0
- package/dist/web/assets/index-YgjFlLLv.css +2 -0
- package/dist/web/assets/index-dc8HGqTp.js +2 -0
- package/dist/web/assets/layers-ephyCrDm.js +1 -0
- package/dist/web/assets/layout-grid-DCVGg8ZA.js +1 -0
- package/dist/web/assets/mcp-setup-BfMdYdsI.js +17 -0
- package/dist/web/assets/memory-DAQ474-p.js +1 -0
- package/dist/web/assets/new-chat-DtMw6FMg.js +1 -0
- package/dist/web/assets/play-DXJMtO-K.js +1 -0
- package/dist/web/assets/refresh-cw-RFYUf5GB.js +1 -0
- package/dist/web/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
- package/dist/web/assets/save-Dewm93H6.js +1 -0
- package/dist/web/assets/search-Ww0msJQz.js +1 -0
- package/dist/web/assets/send-FWvygYFQ.js +1 -0
- package/dist/web/assets/settings-Auyn4Z5T.js +1 -0
- package/dist/web/assets/shield-check-Dt7sXtBF.js +1 -0
- package/dist/web/assets/shuffle-DjvBJ7XV.js +1 -0
- package/dist/web/assets/src-DUhGoAQb.js +24 -0
- package/dist/web/assets/team-edit-DO-RX3lC.js +1 -0
- package/dist/web/assets/team-sessions-DSw8MTtZ.js +1 -0
- package/dist/web/assets/team-use-BfNvsFcO.js +3 -0
- package/dist/web/assets/terminal-CIapYonS.js +1 -0
- package/dist/web/assets/timer-C9X20mTO.js +1 -0
- package/dist/web/assets/useMutation-BlOHt3MR.js +1 -0
- package/dist/web/assets/useQuery-DvovkaPT.js +1 -0
- package/dist/web/assets/utils-DHTPP40O.js +1 -0
- package/dist/web/assets/vendor-editor-BORFA-rZ.js +39 -0
- package/dist/web/assets/vendor-react-BJ8SIkmN.js +11 -0
- package/dist/web/assets/vendor-ui-CHpVij2M.css +1 -0
- package/dist/web/assets/vendor-ui-Dpw9mBc-.js +39 -0
- package/dist/web/assets/workflow-edit-D0FNyl64.js +4 -0
- package/dist/web/assets/workflow-runs-CPVvaVzN.js +1 -0
- package/dist/web/assets/workflows-C9jurJiE.js +1 -0
- package/dist/web/assets/wrench-DZBtSPP8.js +1 -0
- package/dist/web/assets/zap-CbT5plGA.js +1 -0
- package/dist/web/docs.html +242 -0
- package/dist/web/favicon.svg +13 -0
- package/dist/web/index.html +23 -0
- package/package.json +65 -0
package/bin/dev.js
ADDED
package/bin/run.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class GatewayStart extends Command {
|
|
3
|
+
static readonly description = "Start the OpenOrk gateway (API + web interface) on a single port";
|
|
4
|
+
static readonly examples: string[];
|
|
5
|
+
static readonly flags: {
|
|
6
|
+
port: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
/** Bundled mode: use dist/server.js from the npm package */
|
|
10
|
+
private startBundled;
|
|
11
|
+
/** Dev mode: use npx tsx in the monorepo */
|
|
12
|
+
private startDev;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/gateway/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAgB7C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,gBAAyB,WAAW,sEACiC;IAErE,gBAAyB,QAAQ,WAG/B;IAEF,gBAAyB,KAAK;;MAM5B;IAEI,GAAG;IA0CT,4DAA4D;IAC5D,OAAO,CAAC,YAAY;IA4CpB,4CAA4C;IAC5C,OAAO,CAAC,QAAQ;CAuBjB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
|
+
import { spawn, execSync } from "node:child_process";
|
|
3
|
+
import { openSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { DEFAULT_PORT, readState, writeState, isProcessRunning, getLogFile, getDistDir, isBundledMode, getMonorepoRoot, } from "../../lib/gateway.js";
|
|
7
|
+
export default class GatewayStart extends Command {
|
|
8
|
+
static description = "Start the OpenOrk gateway (API + web interface) on a single port";
|
|
9
|
+
static examples = [
|
|
10
|
+
"openork gateway start",
|
|
11
|
+
"openork gateway start --port 9000",
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
port: Flags.integer({
|
|
15
|
+
char: "p",
|
|
16
|
+
description: "Port to listen on",
|
|
17
|
+
default: DEFAULT_PORT,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(GatewayStart);
|
|
22
|
+
// Check if already running
|
|
23
|
+
const existing = readState();
|
|
24
|
+
if (existing && isProcessRunning(existing.pid)) {
|
|
25
|
+
this.log(` Gateway already running (pid ${existing.pid})`);
|
|
26
|
+
this.log(` → http://localhost:${existing.port}`);
|
|
27
|
+
this.log("");
|
|
28
|
+
this.log(" Run `openork gateway stop` first to restart.");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const bundled = isBundledMode();
|
|
32
|
+
const logFile = getLogFile();
|
|
33
|
+
const logFd = openSync(logFile, "a");
|
|
34
|
+
let child;
|
|
35
|
+
if (bundled) {
|
|
36
|
+
child = this.startBundled(flags.port, logFd);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
child = this.startDev(flags.port, logFd);
|
|
40
|
+
}
|
|
41
|
+
child.unref();
|
|
42
|
+
writeState({
|
|
43
|
+
pid: child.pid,
|
|
44
|
+
port: flags.port,
|
|
45
|
+
logFile,
|
|
46
|
+
startedAt: new Date().toISOString(),
|
|
47
|
+
});
|
|
48
|
+
this.log("");
|
|
49
|
+
this.log(` Gateway started on http://localhost:${flags.port}`);
|
|
50
|
+
this.log(` Logs → ${logFile}`);
|
|
51
|
+
this.log("");
|
|
52
|
+
this.log(" Run `openork gateway stop` to shut down.");
|
|
53
|
+
this.log("");
|
|
54
|
+
}
|
|
55
|
+
/** Bundled mode: use dist/server.js from the npm package */
|
|
56
|
+
startBundled(port, logFd) {
|
|
57
|
+
const distDir = getDistDir();
|
|
58
|
+
const openorkHome = process.env.OPENORK_HOME ?? path.join(os.homedir(), ".openork");
|
|
59
|
+
mkdirSync(openorkHome, { recursive: true });
|
|
60
|
+
const dbPath = path.join(openorkHome, "openork.db");
|
|
61
|
+
const schemaPath = path.join(distDir, "prisma", "schema.prisma");
|
|
62
|
+
// Run Prisma migrations before starting
|
|
63
|
+
if (existsSync(schemaPath)) {
|
|
64
|
+
this.log(" Running database migrations...");
|
|
65
|
+
try {
|
|
66
|
+
execSync(`npx prisma migrate deploy --schema="${schemaPath}"`, {
|
|
67
|
+
stdio: "pipe",
|
|
68
|
+
env: { ...process.env, DATABASE_URL: `file:${dbPath}` },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
this.warn("Database migration failed — starting anyway.");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Read CLI version for the migration version stamp
|
|
76
|
+
let cliVersion = "0.0.0";
|
|
77
|
+
try {
|
|
78
|
+
const pkg = JSON.parse(readFileSync(path.join(distDir, "..", "package.json"), "utf-8"));
|
|
79
|
+
cliVersion = pkg.version;
|
|
80
|
+
}
|
|
81
|
+
catch { /* ignore */ }
|
|
82
|
+
return spawn("node", [path.join(distDir, "server.js")], {
|
|
83
|
+
detached: true,
|
|
84
|
+
stdio: ["ignore", logFd, logFd],
|
|
85
|
+
env: {
|
|
86
|
+
...process.env,
|
|
87
|
+
PORT: String(port),
|
|
88
|
+
OPENORK_WEB_DIST: path.join(distDir, "web"),
|
|
89
|
+
DATABASE_URL: `file:${dbPath}`,
|
|
90
|
+
OPENORK_MIGRATIONS_DIR: path.join(distDir, "migrations"),
|
|
91
|
+
OPENORK_OPENAPI_PATH: path.join(distDir, "openapi.yml"),
|
|
92
|
+
OPENORK_VERSION: cliVersion,
|
|
93
|
+
PROJECT_ROOT: openorkHome,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Dev mode: use npx tsx in the monorepo */
|
|
98
|
+
startDev(port, logFd) {
|
|
99
|
+
const root = getMonorepoRoot();
|
|
100
|
+
const apiDir = path.join(root, "apps", "api");
|
|
101
|
+
const webDir = path.join(root, "apps", "web");
|
|
102
|
+
const webDist = path.join(webDir, "dist");
|
|
103
|
+
// Build web app if needed
|
|
104
|
+
if (!existsSync(path.join(webDist, "index.html"))) {
|
|
105
|
+
this.log(" Building web interface...");
|
|
106
|
+
execSync("npm run build", { cwd: webDir, stdio: "pipe" });
|
|
107
|
+
}
|
|
108
|
+
return spawn("npx", ["tsx", "src/index.ts"], {
|
|
109
|
+
cwd: apiDir,
|
|
110
|
+
detached: true,
|
|
111
|
+
stdio: ["ignore", logFd, logFd],
|
|
112
|
+
env: {
|
|
113
|
+
...process.env,
|
|
114
|
+
PORT: String(port),
|
|
115
|
+
OPENORK_WEB_DIST: webDist,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/gateway/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/gateway/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,gBAAyB,WAAW,8BAA8B;IAElE,gBAAyB,QAAQ,WAA4B;IAEvD,GAAG;CA2BV"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { readState, clearState, isProcessRunning, } from "../../lib/gateway.js";
|
|
3
|
+
export default class GatewayStop extends Command {
|
|
4
|
+
static description = "Stop the OpenOrk gateway";
|
|
5
|
+
static examples = ["openork gateway stop"];
|
|
6
|
+
async run() {
|
|
7
|
+
await this.parse(GatewayStop);
|
|
8
|
+
const state = readState();
|
|
9
|
+
if (!state) {
|
|
10
|
+
this.log(" Gateway is not running.");
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (isProcessRunning(state.pid)) {
|
|
14
|
+
try {
|
|
15
|
+
// Kill process group to catch child processes (tsx, node, etc.)
|
|
16
|
+
process.kill(-state.pid, "SIGTERM");
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
try {
|
|
20
|
+
process.kill(state.pid, "SIGTERM");
|
|
21
|
+
}
|
|
22
|
+
catch { /* already exited */ }
|
|
23
|
+
}
|
|
24
|
+
this.log(` Stopped gateway (pid ${state.pid})`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.log(` Gateway (pid ${state.pid}) was already stopped.`);
|
|
28
|
+
}
|
|
29
|
+
clearState();
|
|
30
|
+
this.log("");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/gateway/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,SAAS,EACT,UAAU,EACV,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,MAAM,CAAmB,WAAW,GAAG,0BAA0B,CAAC;IAElE,MAAM,CAAmB,QAAQ,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAE7D,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,gEAAgE;gBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,GAAG,wBAAwB,CAAC,CAAC;QAChE,CAAC;QAED,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class Setup extends Command {
|
|
3
|
+
static readonly description = "Initialize OpenOrk workspace and shell configuration";
|
|
4
|
+
static readonly examples: string[];
|
|
5
|
+
run(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAwEtC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,gBAAyB,WAAW,0DACqB;IAEzD,gBAAyB,QAAQ,WAAqB;IAEhD,GAAG;CAyCV"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { input, confirm } from "@inquirer/prompts";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
6
|
+
import { detectShellProfiles, profileAlreadyConfigured, appendToProfile, } from "../lib/shell-profile.js";
|
|
7
|
+
const DEFAULT_OPENORK_HOME = path.join(os.homedir(), ".openork");
|
|
8
|
+
const WORKSPACE_SUBDIRS = ["agents", "teams", "commands", "workspaces", "memory"];
|
|
9
|
+
function createWorkspace(resolvedPath) {
|
|
10
|
+
mkdirSync(resolvedPath, { recursive: true });
|
|
11
|
+
for (const sub of WORKSPACE_SUBDIRS) {
|
|
12
|
+
mkdirSync(path.join(resolvedPath, sub), { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
const configPath = path.join(resolvedPath, "openork-config.json");
|
|
15
|
+
let existing = {};
|
|
16
|
+
if (existsSync(configPath)) {
|
|
17
|
+
try {
|
|
18
|
+
existing = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
19
|
+
}
|
|
20
|
+
catch { /* overwrite corrupted config */ }
|
|
21
|
+
}
|
|
22
|
+
writeFileSync(configPath, JSON.stringify({ ...existing, workspace: resolvedPath }, null, 2));
|
|
23
|
+
return configPath;
|
|
24
|
+
}
|
|
25
|
+
async function configureShellProfiles(profiles, workspace, log) {
|
|
26
|
+
if (profiles.length === 0) {
|
|
27
|
+
log(" No shell profile found — set OPENORK_HOME manually:");
|
|
28
|
+
log(` export OPENORK_HOME="${workspace}"`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const unconfigured = profiles.filter((p) => !profileAlreadyConfigured(p.path));
|
|
32
|
+
if (unconfigured.length === 0) {
|
|
33
|
+
log(" Shell profile(s) already configured.");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const names = unconfigured.map((p) => p.path).join(", ");
|
|
37
|
+
const shouldWrite = await confirm({
|
|
38
|
+
message: `Add OPENORK_HOME to shell profile(s)? (${names})`,
|
|
39
|
+
default: true,
|
|
40
|
+
});
|
|
41
|
+
if (shouldWrite) {
|
|
42
|
+
for (const profile of unconfigured) {
|
|
43
|
+
appendToProfile(profile.path, workspace);
|
|
44
|
+
log(` Updated ${profile.path}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export default class Setup extends Command {
|
|
49
|
+
static description = "Initialize OpenOrk workspace and shell configuration";
|
|
50
|
+
static examples = ["openork setup"];
|
|
51
|
+
async run() {
|
|
52
|
+
await this.parse(Setup);
|
|
53
|
+
this.log(`
|
|
54
|
+
___ ___ _
|
|
55
|
+
/ _ \\ _ __ ___ _ __ / _ \\ _ __| | __
|
|
56
|
+
| | | | '_ \\ / _ \\ '_ \\| | | | '__| |/ /
|
|
57
|
+
| |_| | |_) | __/ | | | |_| | | | <
|
|
58
|
+
\\___/| .__/ \\___|_| |_|\\___/|_| |_|\\_\\
|
|
59
|
+
|_|
|
|
60
|
+
`);
|
|
61
|
+
this.log(" Welcome to OpenOrk setup!");
|
|
62
|
+
this.log("");
|
|
63
|
+
const workspace = await input({
|
|
64
|
+
message: "Where should OpenOrk store its data?",
|
|
65
|
+
default: DEFAULT_OPENORK_HOME,
|
|
66
|
+
transformer: (v) => v.replace(/^~/, os.homedir()),
|
|
67
|
+
});
|
|
68
|
+
const resolvedWorkspace = workspace.replace(/^~/, os.homedir());
|
|
69
|
+
const configPath = createWorkspace(resolvedWorkspace);
|
|
70
|
+
this.log(` Config written to ${configPath}`);
|
|
71
|
+
const profiles = detectShellProfiles();
|
|
72
|
+
await configureShellProfiles(profiles, resolvedWorkspace, (m) => this.log(m));
|
|
73
|
+
this.log("");
|
|
74
|
+
if (resolvedWorkspace !== DEFAULT_OPENORK_HOME) {
|
|
75
|
+
const profile = profiles.find((p) => p.shell === (process.env.SHELL?.includes("zsh") ? "zsh" : "bash"));
|
|
76
|
+
this.log(" Custom workspace path — restart your terminal or run:");
|
|
77
|
+
this.log("");
|
|
78
|
+
this.log(` source ${profile?.path ?? "~/.zshrc"}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.log(" OpenOrk is ready!");
|
|
82
|
+
}
|
|
83
|
+
this.log("");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.spec.d.ts","sourceRoot":"","sources":["../../src/commands/setup.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { mkdtempSync, rmSync, readFileSync, writeFileSync, existsSync, mkdirSync, } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { profileAlreadyConfigured, appendToProfile, removeFromProfile, MARKER, } from "../lib/shell-profile.js";
|
|
6
|
+
describe("shell-profile helpers", () => {
|
|
7
|
+
let tempDir;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
tempDir = mkdtempSync(path.join(os.tmpdir(), "openork-setup-test-"));
|
|
10
|
+
});
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
13
|
+
});
|
|
14
|
+
describe("profileAlreadyConfigured", () => {
|
|
15
|
+
it("returns false for non-existent file", () => {
|
|
16
|
+
expect(profileAlreadyConfigured(path.join(tempDir, "nope"))).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
it("returns false for profile without marker", () => {
|
|
19
|
+
const p = path.join(tempDir, ".zshrc");
|
|
20
|
+
writeFileSync(p, "export PATH=$HOME/bin:$PATH\n");
|
|
21
|
+
expect(profileAlreadyConfigured(p)).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
it("returns true for profile with marker", () => {
|
|
24
|
+
const p = path.join(tempDir, ".zshrc");
|
|
25
|
+
writeFileSync(p, `some stuff\n${MARKER}\nexport OPENORK_HOME="/foo"\n`);
|
|
26
|
+
expect(profileAlreadyConfigured(p)).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("appendToProfile", () => {
|
|
30
|
+
it("appends OPENORK_HOME export block", () => {
|
|
31
|
+
const p = path.join(tempDir, ".zshrc");
|
|
32
|
+
writeFileSync(p, "# existing content\n");
|
|
33
|
+
appendToProfile(p, "/home/user/.openork");
|
|
34
|
+
const content = readFileSync(p, "utf-8");
|
|
35
|
+
expect(content).toContain("# existing content");
|
|
36
|
+
expect(content).toContain(MARKER);
|
|
37
|
+
expect(content).toContain('export OPENORK_HOME="/home/user/.openork"');
|
|
38
|
+
});
|
|
39
|
+
it("is detected as configured after append", () => {
|
|
40
|
+
const p = path.join(tempDir, ".zshrc");
|
|
41
|
+
writeFileSync(p, "");
|
|
42
|
+
appendToProfile(p, "/home/user/.openork");
|
|
43
|
+
expect(profileAlreadyConfigured(p)).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("removeFromProfile", () => {
|
|
47
|
+
it("removes the openork block from a profile", () => {
|
|
48
|
+
const p = path.join(tempDir, ".zshrc");
|
|
49
|
+
writeFileSync(p, "# existing\n");
|
|
50
|
+
appendToProfile(p, "/home/user/.openork");
|
|
51
|
+
expect(profileAlreadyConfigured(p)).toBe(true);
|
|
52
|
+
const removed = removeFromProfile(p);
|
|
53
|
+
expect(removed).toBe(true);
|
|
54
|
+
expect(profileAlreadyConfigured(p)).toBe(false);
|
|
55
|
+
const content = readFileSync(p, "utf-8");
|
|
56
|
+
expect(content).toContain("# existing");
|
|
57
|
+
expect(content).not.toContain("OPENORK_HOME");
|
|
58
|
+
});
|
|
59
|
+
it("returns false if no marker present", () => {
|
|
60
|
+
const p = path.join(tempDir, ".zshrc");
|
|
61
|
+
writeFileSync(p, "# clean profile\n");
|
|
62
|
+
expect(removeFromProfile(p)).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it("returns false for non-existent file", () => {
|
|
65
|
+
expect(removeFromProfile(path.join(tempDir, "nope"))).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe("config file creation", () => {
|
|
69
|
+
it("creates openork-config.json with workspace path", () => {
|
|
70
|
+
const workspace = path.join(tempDir, ".openork");
|
|
71
|
+
mkdirSync(workspace, { recursive: true });
|
|
72
|
+
const configPath = path.join(workspace, "openork-config.json");
|
|
73
|
+
writeFileSync(configPath, JSON.stringify({ workspace }, null, 2));
|
|
74
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
75
|
+
expect(config.workspace).toBe(workspace);
|
|
76
|
+
});
|
|
77
|
+
it("creates workspace subdirectories", () => {
|
|
78
|
+
const workspace = path.join(tempDir, ".openork");
|
|
79
|
+
for (const sub of ["agents", "teams", "commands", "workspaces", "memory"]) {
|
|
80
|
+
mkdirSync(path.join(workspace, sub), { recursive: true });
|
|
81
|
+
}
|
|
82
|
+
for (const sub of ["agents", "teams", "commands", "workspaces", "memory"]) {
|
|
83
|
+
expect(existsSync(path.join(workspace, sub))).toBe(true);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=setup.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.spec.js","sourceRoot":"","sources":["../../src/commands/setup.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class Uninstall extends Command {
|
|
3
|
+
static readonly description = "Remove OpenOrk shell configuration and optionally delete workspace data";
|
|
4
|
+
static readonly examples: string[];
|
|
5
|
+
static readonly flags: {
|
|
6
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAW7C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,gBAAyB,WAAW,6EACwC;IAE5E,gBAAyB,QAAQ,WAG/B;IAEF,gBAAyB,KAAK;;MAM5B;IAEI,GAAG;CA2DV"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
|
+
import { confirm } from "@inquirer/prompts";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
6
|
+
import { detectShellProfiles, profileAlreadyConfigured, removeFromProfile, } from "../lib/shell-profile.js";
|
|
7
|
+
export default class Uninstall extends Command {
|
|
8
|
+
static description = "Remove OpenOrk shell configuration and optionally delete workspace data";
|
|
9
|
+
static examples = [
|
|
10
|
+
"openork uninstall",
|
|
11
|
+
"openork uninstall --yes",
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
yes: Flags.boolean({
|
|
15
|
+
char: "y",
|
|
16
|
+
description: "Skip confirmation prompts (used by npm preuninstall hook)",
|
|
17
|
+
default: false,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(Uninstall);
|
|
22
|
+
// ── Step 1: Clean shell profiles ──
|
|
23
|
+
const profiles = detectShellProfiles();
|
|
24
|
+
const configured = profiles.filter((p) => profileAlreadyConfigured(p.path));
|
|
25
|
+
if (configured.length > 0) {
|
|
26
|
+
for (const profile of configured) {
|
|
27
|
+
removeFromProfile(profile.path);
|
|
28
|
+
this.log(` Cleaned ${profile.path}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.log(" No shell profile entries to remove.");
|
|
33
|
+
}
|
|
34
|
+
// ── Step 2: Optionally remove workspace data ──
|
|
35
|
+
// Skip data deletion in non-interactive mode (preuninstall hook)
|
|
36
|
+
// to avoid accidental data loss.
|
|
37
|
+
if (!flags.yes) {
|
|
38
|
+
const openorkHome = process.env.OPENORK_HOME || path.join(os.homedir(), ".openork");
|
|
39
|
+
if (existsSync(openorkHome)) {
|
|
40
|
+
// Show what would be deleted
|
|
41
|
+
const configPath = path.join(openorkHome, "openork-config.json");
|
|
42
|
+
let workspace = openorkHome;
|
|
43
|
+
try {
|
|
44
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
45
|
+
workspace = config.workspace || openorkHome;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
/* use default */
|
|
49
|
+
}
|
|
50
|
+
const shouldDelete = await confirm({
|
|
51
|
+
message: `Delete workspace data at ${workspace}? (This cannot be undone)`,
|
|
52
|
+
default: false,
|
|
53
|
+
});
|
|
54
|
+
if (shouldDelete) {
|
|
55
|
+
rmSync(workspace, { recursive: true, force: true });
|
|
56
|
+
this.log(` Deleted ${workspace}`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.log(` Kept ${workspace}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
this.log("");
|
|
64
|
+
this.log(" OpenOrk uninstalled.");
|
|
65
|
+
if (configured.length > 0) {
|
|
66
|
+
this.log(" Restart your terminal or run `exec $SHELL` to clear OPENORK_HOME from this session.");
|
|
67
|
+
}
|
|
68
|
+
this.log("");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const DEFAULT_PORT = 8777;
|
|
2
|
+
export interface GatewayState {
|
|
3
|
+
pid: number;
|
|
4
|
+
port: number;
|
|
5
|
+
logFile: string;
|
|
6
|
+
startedAt: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function readState(): GatewayState | null;
|
|
9
|
+
export declare function writeState(state: GatewayState): void;
|
|
10
|
+
export declare function clearState(): void;
|
|
11
|
+
export declare function isProcessRunning(pid: number): boolean;
|
|
12
|
+
export declare function getLogFile(): string;
|
|
13
|
+
/** Resolve the CLI dist directory */
|
|
14
|
+
export declare function getDistDir(): string;
|
|
15
|
+
/** Check if running as standalone npm package (server.js exists in dist/) */
|
|
16
|
+
export declare function isBundledMode(): boolean;
|
|
17
|
+
/** Resolve the monorepo root from the CLI package location (dev mode only) */
|
|
18
|
+
export declare function getMonorepoRoot(): string;
|
|
19
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,SAAS,IAAI,YAAY,GAAG,IAAI,CAM/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGpD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,qCAAqC;AACrC,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, rmSync, mkdirSync, existsSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
const OPENORK_DIR = process.env.OPENORK_HOME || path.join(os.homedir(), ".openork");
|
|
5
|
+
export const DEFAULT_PORT = 8777;
|
|
6
|
+
const STATE_FILE = path.join(OPENORK_DIR, "gateway.json");
|
|
7
|
+
export function readState() {
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(readFileSync(STATE_FILE, "utf-8"));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function writeState(state) {
|
|
16
|
+
mkdirSync(OPENORK_DIR, { recursive: true });
|
|
17
|
+
writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
|
|
18
|
+
}
|
|
19
|
+
export function clearState() {
|
|
20
|
+
try {
|
|
21
|
+
rmSync(STATE_FILE);
|
|
22
|
+
}
|
|
23
|
+
catch { /* already gone */ }
|
|
24
|
+
}
|
|
25
|
+
export function isProcessRunning(pid) {
|
|
26
|
+
try {
|
|
27
|
+
process.kill(pid, 0);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function getLogFile() {
|
|
35
|
+
const logsDir = path.join(OPENORK_DIR, "logs");
|
|
36
|
+
mkdirSync(logsDir, { recursive: true });
|
|
37
|
+
return path.join(logsDir, "gateway.log");
|
|
38
|
+
}
|
|
39
|
+
/** Resolve the CLI dist directory */
|
|
40
|
+
export function getDistDir() {
|
|
41
|
+
// In built CLI: this file is at dist/lib/gateway.js → dist/ is one level up
|
|
42
|
+
return path.resolve(import.meta.dirname, "..");
|
|
43
|
+
}
|
|
44
|
+
/** Check if running as standalone npm package (server.js exists in dist/) */
|
|
45
|
+
export function isBundledMode() {
|
|
46
|
+
return existsSync(path.join(getDistDir(), "server.js"));
|
|
47
|
+
}
|
|
48
|
+
/** Resolve the monorepo root from the CLI package location (dev mode only) */
|
|
49
|
+
export function getMonorepoRoot() {
|
|
50
|
+
return path.resolve(import.meta.dirname, "..", "..", "..", "..");
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAEpF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AASjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAE1D,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAmB;IAC5C,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,UAAU;IACxB,4EAA4E;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const MARKER = "# openork";
|
|
2
|
+
export interface ShellProfile {
|
|
3
|
+
shell: string;
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function detectShellProfiles(): ShellProfile[];
|
|
7
|
+
export declare function profileAlreadyConfigured(profilePath: string): boolean;
|
|
8
|
+
export declare function appendToProfile(profilePath: string, openorkHome: string): void;
|
|
9
|
+
export declare function removeFromProfile(profilePath: string): boolean;
|
|
10
|
+
//# sourceMappingURL=shell-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-profile.d.ts","sourceRoot":"","sources":["../../src/lib/shell-profile.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAoBpD;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAMrE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAQ9E;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAiB9D"}
|