@jitera/connect 0.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +12 -9
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +17 -3
- package/dist/adapters/codex.d.ts +4 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +49 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/cursor.d.ts +4 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +47 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/types.d.ts +25 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +164 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/login.d.ts +3 -0
- package/dist/bin/login.d.ts.map +1 -0
- package/dist/bin/login.js +181 -0
- package/dist/bin/login.js.map +1 -0
- package/dist/bin/proxy.d.ts +3 -0
- package/dist/bin/proxy.d.ts.map +1 -0
- package/dist/bin/proxy.js +19 -0
- package/dist/bin/proxy.js.map +1 -0
- package/dist/bin/validate.d.ts +3 -0
- package/dist/bin/validate.d.ts.map +1 -0
- package/dist/bin/validate.js +13 -0
- package/dist/bin/validate.js.map +1 -0
- package/dist/device-flow.d.ts +30 -0
- package/dist/device-flow.d.ts.map +1 -0
- package/dist/device-flow.js +105 -0
- package/dist/device-flow.js.map +1 -0
- package/dist/discovery.d.ts +21 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +58 -0
- package/dist/discovery.js.map +1 -0
- package/dist/environments.d.ts +18 -0
- package/dist/environments.d.ts.map +1 -0
- package/dist/environments.js +45 -0
- package/dist/environments.js.map +1 -0
- package/dist/graphql.d.ts +31 -0
- package/dist/graphql.d.ts.map +1 -0
- package/dist/graphql.js +100 -0
- package/dist/graphql.js.map +1 -0
- package/dist/hook-io.d.ts +22 -0
- package/dist/hook-io.d.ts.map +1 -0
- package/dist/hook-io.js +13 -0
- package/dist/hook-io.js.map +1 -0
- package/dist/hooks/session-start.d.ts +3 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +16 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/hooks/stop.d.ts +3 -0
- package/dist/hooks/stop.d.ts.map +1 -0
- package/dist/hooks/stop.js +21 -0
- package/dist/hooks/stop.js.map +1 -0
- package/dist/hooks/user-prompt-submit.d.ts +3 -0
- package/dist/hooks/user-prompt-submit.d.ts.map +1 -0
- package/dist/hooks/user-prompt-submit.js +55 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -0
- package/dist/install/agents-md.d.ts +25 -0
- package/dist/install/agents-md.d.ts.map +1 -0
- package/dist/install/agents-md.js +58 -0
- package/dist/install/agents-md.js.map +1 -0
- package/dist/install/claude-code.d.ts +20 -0
- package/dist/install/claude-code.d.ts.map +1 -0
- package/dist/install/claude-code.js +33 -0
- package/dist/install/claude-code.js.map +1 -0
- package/dist/install/render.d.ts +13 -0
- package/dist/install/render.d.ts.map +1 -0
- package/dist/install/render.js +22 -0
- package/dist/install/render.js.map +1 -0
- package/dist/install/skills.d.ts +16 -0
- package/dist/install/skills.d.ts.map +1 -0
- package/dist/install/skills.js +62 -0
- package/dist/install/skills.js.map +1 -0
- package/dist/manifest.d.ts +62 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +5 -0
- package/dist/manifest.js.map +1 -0
- package/dist/mcp-client.d.ts +43 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +85 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp-config.d.ts +12 -0
- package/dist/mcp-config.d.ts.map +1 -0
- package/dist/mcp-config.js +45 -0
- package/dist/mcp-config.js.map +1 -0
- package/dist/proxy.d.ts +12 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +54 -0
- package/dist/proxy.js.map +1 -0
- package/dist/session-marker.d.ts +4 -0
- package/dist/session-marker.d.ts.map +1 -0
- package/dist/session-marker.js +25 -0
- package/dist/session-marker.js.map +1 -0
- package/dist/toml-section.d.ts +12 -0
- package/dist/toml-section.d.ts.map +1 -0
- package/dist/toml-section.js +66 -0
- package/dist/toml-section.js.map +1 -0
- package/dist/validate.d.ts +11 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +58 -0
- package/dist/validate.js.map +1 -0
- package/hooks/hooks.json +15 -2
- package/package.json +13 -6
- package/bin/jitera-connect.mjs +0 -120
- package/hooks/scripts/session-start.mjs +0 -36
- package/hooks/scripts/stop.mjs +0 -39
- package/src/adapters/cursor.mjs +0 -56
- package/src/environments.mjs +0 -46
- package/src/mcp-config.mjs +0 -45
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jitera-connect",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Connect this workspace to a Jitera project: read documentation and source, and keep project memory up to date.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jitera"
|
|
7
7
|
},
|
|
8
8
|
"mcpServers": {
|
|
9
9
|
"jitera": {
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
"command": "node",
|
|
11
|
+
"args": [
|
|
12
|
+
"${CLAUDE_PLUGIN_ROOT}/dist/bin/proxy.js"
|
|
13
|
+
],
|
|
14
|
+
"env": {
|
|
15
|
+
"JITERA_ENVIRONMENT": "${user_config.environment}",
|
|
16
|
+
"JITERA_API_KEY": "${user_config.jitera_api_key}"
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
},
|
|
@@ -22,11 +25,11 @@
|
|
|
22
25
|
"sensitive": true,
|
|
23
26
|
"required": true
|
|
24
27
|
},
|
|
25
|
-
"
|
|
28
|
+
"environment": {
|
|
26
29
|
"type": "string",
|
|
27
|
-
"title": "
|
|
28
|
-
"description": "Leave as
|
|
29
|
-
"default": "
|
|
30
|
+
"title": "Environment",
|
|
31
|
+
"description": "Leave as studio for Jitera Cloud. Use studio-stage for staging, or studio-NN for a numbered pilot such as studio-04.",
|
|
32
|
+
"default": "studio",
|
|
30
33
|
"required": true
|
|
31
34
|
}
|
|
32
35
|
}
|
package/README.md
CHANGED
|
@@ -16,12 +16,26 @@ codex plugin marketplace add jitera-product/connect
|
|
|
16
16
|
## cursor
|
|
17
17
|
|
|
18
18
|
```
|
|
19
|
-
npx @jitera
|
|
19
|
+
npx @jitera/connect
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
## pilot and staging environments
|
|
23
23
|
|
|
24
|
+
claude code, at install:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/plugin install jitera-connect --config environment=studio-04
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
claude code, after installing:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
/plugin configure jitera-connect
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
cursor:
|
|
37
|
+
|
|
24
38
|
```
|
|
25
|
-
npx @jitera
|
|
26
|
-
npx @jitera
|
|
39
|
+
npx @jitera/connect --env=studio-04
|
|
40
|
+
npx @jitera/connect --env=studio-stage
|
|
27
41
|
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAajD,eAAO,MAAM,KAAK,EAAE,OAqCnB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { ensureRootKey, removeTable, upsertTable } from "../toml-section.js";
|
|
4
|
+
export const SERVER_TABLE = "mcp_servers.jitera";
|
|
5
|
+
const RMCP_FLAG = "experimental_use_rmcp_client";
|
|
6
|
+
const API_KEY_ENV = "JITERA_API_KEY";
|
|
7
|
+
function read(path) {
|
|
8
|
+
return existsSync(path) ? readFileSync(path, "utf8") : "";
|
|
9
|
+
}
|
|
10
|
+
function write(path, content) {
|
|
11
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
12
|
+
writeFileSync(path, content, "utf8");
|
|
13
|
+
}
|
|
14
|
+
export const codex = {
|
|
15
|
+
id: "codex",
|
|
16
|
+
label: "Codex",
|
|
17
|
+
secretStrategy: "env",
|
|
18
|
+
detect({ home }) {
|
|
19
|
+
return existsSync(join(home, ".codex"));
|
|
20
|
+
},
|
|
21
|
+
mcpConfigPath({ home }) {
|
|
22
|
+
return join(home, ".codex", "config.toml");
|
|
23
|
+
},
|
|
24
|
+
skillsDirs({ scope, home, cwd }) {
|
|
25
|
+
const root = scope === "user" ? home : cwd;
|
|
26
|
+
return [join(root, ".agents", "skills")];
|
|
27
|
+
},
|
|
28
|
+
install(context) {
|
|
29
|
+
const path = this.mcpConfigPath(context);
|
|
30
|
+
const before = read(path);
|
|
31
|
+
const body = [
|
|
32
|
+
`url = "${context.mcpUrl ?? ""}"`,
|
|
33
|
+
`bearer_token_env_var = "${API_KEY_ENV}"`,
|
|
34
|
+
].join("\n");
|
|
35
|
+
const after = ensureRootKey(upsertTable(before, SERVER_TABLE, body), RMCP_FLAG, "true");
|
|
36
|
+
if (!context.dryRun)
|
|
37
|
+
write(path, after);
|
|
38
|
+
return { path, config: {}, changed: before !== after };
|
|
39
|
+
},
|
|
40
|
+
uninstall(context) {
|
|
41
|
+
const path = this.mcpConfigPath(context);
|
|
42
|
+
const before = read(path);
|
|
43
|
+
const after = removeTable(before, SERVER_TABLE);
|
|
44
|
+
if (!context.dryRun && before !== after)
|
|
45
|
+
write(path, after);
|
|
46
|
+
return { path, config: {}, changed: before !== after };
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG7E,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AACjD,MAAM,SAAS,GAAG,8BAA8B,CAAC;AACjD,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,OAAe;IAC1C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,OAAO;IACd,cAAc,EAAE,KAAK;IAErB,MAAM,CAAC,EAAE,IAAI,EAAE;QACb,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa,CAAC,EAAE,IAAI,EAAE;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,UAAU,OAAO,CAAC,MAAM,IAAI,EAAE,GAAG;YACjC,2BAA2B,WAAW,GAAG;SAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;YAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;IACzD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AASzE,eAAO,MAAM,WAAW,WAAW,CAAC;AAYpC,eAAO,MAAM,MAAM,EAAE,OAmCpB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { mergeServer, readConfig, removeServer, writeConfig, } from "../mcp-config.js";
|
|
4
|
+
export const SERVER_NAME = "jitera";
|
|
5
|
+
const CONFIG_KEY = "mcpServers";
|
|
6
|
+
const API_KEY_ENV = "JITERA_API_KEY";
|
|
7
|
+
function serverEntry(mcpUrl) {
|
|
8
|
+
return {
|
|
9
|
+
type: "http",
|
|
10
|
+
url: mcpUrl,
|
|
11
|
+
headers: { Authorization: `Bearer \${env:${API_KEY_ENV}}` },
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export const cursor = {
|
|
15
|
+
id: "cursor",
|
|
16
|
+
label: "Cursor",
|
|
17
|
+
secretStrategy: "env",
|
|
18
|
+
detect({ home }) {
|
|
19
|
+
return existsSync(join(home, ".cursor"));
|
|
20
|
+
},
|
|
21
|
+
mcpConfigPath({ scope, home, cwd }) {
|
|
22
|
+
return scope === "user"
|
|
23
|
+
? join(home, ".cursor", "mcp.json")
|
|
24
|
+
: join(cwd, ".cursor", "mcp.json");
|
|
25
|
+
},
|
|
26
|
+
skillsDirs({ scope, home, cwd }) {
|
|
27
|
+
const root = scope === "user" ? home : cwd;
|
|
28
|
+
return [join(root, ".agents", "skills"), join(root, ".claude", "skills")];
|
|
29
|
+
},
|
|
30
|
+
install(context) {
|
|
31
|
+
const path = this.mcpConfigPath(context);
|
|
32
|
+
const before = readConfig(path);
|
|
33
|
+
const after = mergeServer(before, CONFIG_KEY, SERVER_NAME, serverEntry(context.mcpUrl ?? ""));
|
|
34
|
+
if (!context.dryRun)
|
|
35
|
+
writeConfig(path, after);
|
|
36
|
+
return { path, config: after, changed: JSON.stringify(before) !== JSON.stringify(after) };
|
|
37
|
+
},
|
|
38
|
+
uninstall(context) {
|
|
39
|
+
const path = this.mcpConfigPath(context);
|
|
40
|
+
const before = readConfig(path);
|
|
41
|
+
const after = removeServer(before, CONFIG_KEY, SERVER_NAME);
|
|
42
|
+
if (!context.dryRun)
|
|
43
|
+
writeConfig(path, after);
|
|
44
|
+
return { path, config: after, changed: JSON.stringify(before) !== JSON.stringify(after) };
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,GAEZ,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AACpC,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,EAAE,aAAa,EAAE,iBAAiB,WAAW,GAAG,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,KAAK;IAErB,MAAM,CAAC,EAAE,IAAI,EAAE;QACb,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;QAChC,OAAO,KAAK,KAAK,MAAM;YACrB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5F,CAAC;IAED,SAAS,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5F,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ClientConfig } from "../mcp-config.ts";
|
|
2
|
+
export type Scope = "project" | "user";
|
|
3
|
+
export interface AdapterContext {
|
|
4
|
+
readonly scope: Scope;
|
|
5
|
+
readonly home: string;
|
|
6
|
+
readonly cwd: string;
|
|
7
|
+
readonly mcpUrl?: string;
|
|
8
|
+
readonly dryRun?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface AdapterResult {
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly config: ClientConfig;
|
|
13
|
+
readonly changed: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface Adapter {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly label: string;
|
|
18
|
+
readonly secretStrategy: "keychain" | "env" | "inline";
|
|
19
|
+
detect(context: Pick<AdapterContext, "home">): boolean;
|
|
20
|
+
mcpConfigPath(context: AdapterContext): string;
|
|
21
|
+
skillsDirs(context: AdapterContext): readonly string[];
|
|
22
|
+
install(context: AdapterContext): AdapterResult;
|
|
23
|
+
uninstall(context: AdapterContext): AdapterResult;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;IACvD,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/C,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CAAC;IACvD,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;IAChD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":""}
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { codex } from "../adapters/codex.js";
|
|
6
|
+
import { cursor } from "../adapters/cursor.js";
|
|
7
|
+
import { MalformedConfigError } from "../mcp-config.js";
|
|
8
|
+
import { writeAgentsMd } from "../install/agents-md.js";
|
|
9
|
+
import { DEFAULT_BRAND } from "../install/render.js";
|
|
10
|
+
import { installSkills, uninstallSkills } from "../install/skills.js";
|
|
11
|
+
import { DiscoveryError, discoverDeployment } from "../discovery.js";
|
|
12
|
+
import { UnknownEnvironmentError, resolveStudioUrl } from "../environments.js";
|
|
13
|
+
const ADAPTERS = [cursor, codex];
|
|
14
|
+
const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
15
|
+
function parseArgs(argv) {
|
|
16
|
+
const args = { scope: "project", dryRun: false, uninstall: false, print: false, skipSkills: false, help: false };
|
|
17
|
+
for (const arg of argv) {
|
|
18
|
+
if (arg.startsWith("--env="))
|
|
19
|
+
args.environment = arg.slice("--env=".length);
|
|
20
|
+
else if (arg === "--dry-run")
|
|
21
|
+
args.dryRun = true;
|
|
22
|
+
else if (arg === "--uninstall")
|
|
23
|
+
args.uninstall = true;
|
|
24
|
+
else if (arg === "--user")
|
|
25
|
+
args.scope = "user";
|
|
26
|
+
else if (arg === "--project")
|
|
27
|
+
args.scope = "project";
|
|
28
|
+
else if (arg === "--print")
|
|
29
|
+
args.print = true;
|
|
30
|
+
else if (arg === "--skip-skills")
|
|
31
|
+
args.skipSkills = true;
|
|
32
|
+
else if (arg.startsWith("--mcp-url="))
|
|
33
|
+
args.mcpUrl = arg.slice("--mcp-url=".length);
|
|
34
|
+
else if (arg === "--help" || arg === "-h")
|
|
35
|
+
args.help = true;
|
|
36
|
+
else
|
|
37
|
+
args.unknown = arg;
|
|
38
|
+
}
|
|
39
|
+
return args;
|
|
40
|
+
}
|
|
41
|
+
const USAGE = [
|
|
42
|
+
"usage: npx @jitera/connect [--env=<environment>] [options]",
|
|
43
|
+
"",
|
|
44
|
+
" --env=studio-stage staging",
|
|
45
|
+
" --env=studio-04 numbered pilot",
|
|
46
|
+
" omit --env for production",
|
|
47
|
+
"",
|
|
48
|
+
" --user write user scoped config instead of project scoped",
|
|
49
|
+
" --dry-run report what would change without writing",
|
|
50
|
+
" --uninstall remove the jitera server",
|
|
51
|
+
" --print print resolved endpoints and exit",
|
|
52
|
+
" --skip-skills write mcp config only, no skills or AGENTS.md",
|
|
53
|
+
" --mcp-url=<url> bypass discovery, for air-gapped or self-hosted setups",
|
|
54
|
+
].join("\n");
|
|
55
|
+
const args = parseArgs(process.argv.slice(2));
|
|
56
|
+
if (args.help) {
|
|
57
|
+
process.stdout.write(`${USAGE}\n`);
|
|
58
|
+
process.exit(0);
|
|
59
|
+
}
|
|
60
|
+
if (args.unknown) {
|
|
61
|
+
process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
|
|
62
|
+
process.exit(2);
|
|
63
|
+
}
|
|
64
|
+
let studioUrl;
|
|
65
|
+
try {
|
|
66
|
+
studioUrl = resolveStudioUrl(args.environment);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error instanceof UnknownEnvironmentError) {
|
|
70
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
71
|
+
process.exit(2);
|
|
72
|
+
}
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
let mcpUrl;
|
|
76
|
+
let apiBaseUrl;
|
|
77
|
+
let brand;
|
|
78
|
+
if (args.mcpUrl) {
|
|
79
|
+
mcpUrl = args.mcpUrl;
|
|
80
|
+
apiBaseUrl = "";
|
|
81
|
+
brand = DEFAULT_BRAND;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
try {
|
|
85
|
+
const deployment = await discoverDeployment({ environment: args.environment, studioUrl: process.env["JITERA_STUDIO_URL"] });
|
|
86
|
+
mcpUrl = deployment.mcpUrl;
|
|
87
|
+
apiBaseUrl = deployment.apiBaseUrl;
|
|
88
|
+
brand = deployment.brand;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error instanceof DiscoveryError) {
|
|
92
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (args.print) {
|
|
99
|
+
process.stdout.write(`${JSON.stringify({ mcpUrl, apiBaseUrl, studioUrl }, undefined, 2)}\n`);
|
|
100
|
+
process.exit(0);
|
|
101
|
+
}
|
|
102
|
+
const context = {
|
|
103
|
+
scope: args.scope,
|
|
104
|
+
home: homedir(),
|
|
105
|
+
cwd: process.cwd(),
|
|
106
|
+
mcpUrl,
|
|
107
|
+
dryRun: args.dryRun,
|
|
108
|
+
};
|
|
109
|
+
const detected = ADAPTERS.filter((adapter) => adapter.detect(context));
|
|
110
|
+
if (detected.length === 0) {
|
|
111
|
+
process.stderr.write(`error: no supported assistant detected. Looked for: ${ADAPTERS.map((a) => a.label).join(", ")}.\n` +
|
|
112
|
+
`Claude Code and Codex install through their own plugin marketplaces, see the readme.\n`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const results = [];
|
|
116
|
+
for (const adapter of detected) {
|
|
117
|
+
try {
|
|
118
|
+
results.push({
|
|
119
|
+
adapter,
|
|
120
|
+
result: args.uninstall ? adapter.uninstall(context) : adapter.install(context),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (error instanceof MalformedConfigError) {
|
|
125
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const verb = args.uninstall ? "removed from" : "written to";
|
|
132
|
+
for (const { adapter, result } of results) {
|
|
133
|
+
process.stdout.write(`${adapter.label}: ${result.changed ? verb : "already up to date in"} ${result.path}\n`);
|
|
134
|
+
}
|
|
135
|
+
if (!args.skipSkills) {
|
|
136
|
+
const values = { BRAND: brand };
|
|
137
|
+
const targetDirs = [...new Set(detected.flatMap((adapter) => adapter.skillsDirs(context)))];
|
|
138
|
+
const skills = args.uninstall
|
|
139
|
+
? uninstallSkills({ packageRoot: PACKAGE_ROOT, targetDirs, dryRun: args.dryRun })
|
|
140
|
+
: installSkills({ packageRoot: PACKAGE_ROOT, targetDirs, values, dryRun: args.dryRun });
|
|
141
|
+
const skillVerb = args.uninstall ? "removed from" : "written to";
|
|
142
|
+
process.stdout.write(skills.changed
|
|
143
|
+
? `Skills: ${skills.skills.length} ${skillVerb} ${targetDirs.join(", ")}\n`
|
|
144
|
+
: `Skills: already up to date in ${targetDirs.join(", ")}\n`);
|
|
145
|
+
if (!args.uninstall) {
|
|
146
|
+
const agents = writeAgentsMd({
|
|
147
|
+
packageRoot: PACKAGE_ROOT,
|
|
148
|
+
projectRoot: context.cwd,
|
|
149
|
+
values,
|
|
150
|
+
dryRun: args.dryRun,
|
|
151
|
+
});
|
|
152
|
+
process.stdout.write(agents.changed
|
|
153
|
+
? `Instructions: ${agents.agents.action} block in ${agents.agentsPath}\n`
|
|
154
|
+
: `Instructions: already up to date in ${agents.agentsPath}\n`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (args.dryRun) {
|
|
158
|
+
process.stdout.write("\ndry run, nothing was written\n");
|
|
159
|
+
}
|
|
160
|
+
else if (!args.uninstall) {
|
|
161
|
+
process.stdout.write(`\nendpoint ${mcpUrl}\n`);
|
|
162
|
+
process.stdout.write("export JITERA_API_KEY=<your api key> before starting your assistant\n");
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/bin/login.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createInterface } from "node:readline/promises";
|
|
3
|
+
import { DiscoveryError, discoverDeployment } from "../discovery.js";
|
|
4
|
+
import { UnknownEnvironmentError } from "../environments.js";
|
|
5
|
+
import { DeviceFlowError, pollForAccessToken, requestDeviceAuthorization, } from "../device-flow.js";
|
|
6
|
+
import { GraphqlError, createApiKey, listProjects } from "../graphql.js";
|
|
7
|
+
import { installClaudeCodePlugin } from "../install/claude-code.js";
|
|
8
|
+
import { writeAgentsMd } from "../install/agents-md.js";
|
|
9
|
+
import { installSkills } from "../install/skills.js";
|
|
10
|
+
import { codex } from "../adapters/codex.js";
|
|
11
|
+
import { cursor } from "../adapters/cursor.js";
|
|
12
|
+
import { homedir } from "node:os";
|
|
13
|
+
import { dirname, join } from "node:path";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
const USAGE = [
|
|
16
|
+
"usage: npx @jitera/connect login [--env=<environment>] [options]",
|
|
17
|
+
"",
|
|
18
|
+
" --env=studio-04 target a pilot; omit for production",
|
|
19
|
+
" --project=<uuid> skip the project prompt",
|
|
20
|
+
" --read-only create a read-only key (default is read + write)",
|
|
21
|
+
" --name=<name> name for the created key",
|
|
22
|
+
" --json print the result as json",
|
|
23
|
+
" --install configure your assistants with the new key",
|
|
24
|
+
].join("\n");
|
|
25
|
+
function parseArgs(argv) {
|
|
26
|
+
const args = { access: "read_write", keyName: "Jitera Connect", json: false, install: false, help: false };
|
|
27
|
+
for (const arg of argv) {
|
|
28
|
+
if (arg === "login")
|
|
29
|
+
continue;
|
|
30
|
+
else if (arg.startsWith("--env="))
|
|
31
|
+
args.environment = arg.slice("--env=".length);
|
|
32
|
+
else if (arg.startsWith("--project="))
|
|
33
|
+
args.project = arg.slice("--project=".length);
|
|
34
|
+
else if (arg.startsWith("--name="))
|
|
35
|
+
args.keyName = arg.slice("--name=".length);
|
|
36
|
+
else if (arg === "--read-only")
|
|
37
|
+
args.access = "read";
|
|
38
|
+
else if (arg === "--json")
|
|
39
|
+
args.json = true;
|
|
40
|
+
else if (arg === "--install")
|
|
41
|
+
args.install = true;
|
|
42
|
+
else if (arg === "--help" || arg === "-h")
|
|
43
|
+
args.help = true;
|
|
44
|
+
else
|
|
45
|
+
args.unknown = arg;
|
|
46
|
+
}
|
|
47
|
+
return args;
|
|
48
|
+
}
|
|
49
|
+
function fail(message, code = 1) {
|
|
50
|
+
process.stderr.write(`error: ${message}\n`);
|
|
51
|
+
process.exit(code);
|
|
52
|
+
}
|
|
53
|
+
const args = parseArgs(process.argv.slice(2));
|
|
54
|
+
if (args.help) {
|
|
55
|
+
process.stdout.write(`${USAGE}\n`);
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
if (args.unknown) {
|
|
59
|
+
process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
|
|
60
|
+
process.exit(2);
|
|
61
|
+
}
|
|
62
|
+
let automationUrl = process.env["JITERA_AUTOMATION_URL"] ?? "";
|
|
63
|
+
let mcpUrl = process.env["JITERA_MCP_URL"] ?? "";
|
|
64
|
+
let brand = "Jitera";
|
|
65
|
+
if (!automationUrl) {
|
|
66
|
+
try {
|
|
67
|
+
const deployment = await discoverDeployment({
|
|
68
|
+
environment: args.environment,
|
|
69
|
+
studioUrl: process.env["JITERA_STUDIO_URL"],
|
|
70
|
+
});
|
|
71
|
+
automationUrl = deployment.automationUrl;
|
|
72
|
+
mcpUrl = mcpUrl || deployment.mcpUrl;
|
|
73
|
+
brand = deployment.brand;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (error instanceof UnknownEnvironmentError)
|
|
77
|
+
fail(error.message, 2);
|
|
78
|
+
if (error instanceof DiscoveryError)
|
|
79
|
+
fail(error.message);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!automationUrl) {
|
|
84
|
+
fail("this deployment did not advertise an automation url, so sign-in cannot continue.");
|
|
85
|
+
}
|
|
86
|
+
let authorization;
|
|
87
|
+
try {
|
|
88
|
+
authorization = await requestDeviceAuthorization({ automationUrl });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error instanceof DeviceFlowError)
|
|
92
|
+
fail(error.message);
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
const openUrl = authorization.verificationUriComplete ?? authorization.verificationUri;
|
|
96
|
+
process.stdout.write(`\nSign in to ${brand} to authorise this device.\n\n`);
|
|
97
|
+
process.stdout.write(` Open: ${openUrl}\n`);
|
|
98
|
+
process.stdout.write(` Code: ${authorization.userCode}\n\n`);
|
|
99
|
+
process.stdout.write("Waiting for approval…\n");
|
|
100
|
+
let accessToken;
|
|
101
|
+
try {
|
|
102
|
+
accessToken = await pollForAccessToken({ automationUrl, authorization });
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error instanceof DeviceFlowError)
|
|
106
|
+
fail(error.message);
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
const transport = { automationUrl, accessToken };
|
|
110
|
+
let projectUuid = args.project;
|
|
111
|
+
if (!projectUuid) {
|
|
112
|
+
let projects;
|
|
113
|
+
try {
|
|
114
|
+
projects = await listProjects(transport);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (error instanceof GraphqlError)
|
|
118
|
+
fail(error.message);
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
if (projects.length === 0)
|
|
122
|
+
fail("this account has no projects to connect to.");
|
|
123
|
+
if (projects.length === 1) {
|
|
124
|
+
projectUuid = projects[0]?.uuid;
|
|
125
|
+
process.stdout.write(`\nProject: ${projects[0]?.name}\n`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
process.stdout.write("\nWhich project?\n\n");
|
|
129
|
+
projects.forEach((project, index) => {
|
|
130
|
+
process.stdout.write(` ${index + 1}. ${project.name}\n`);
|
|
131
|
+
});
|
|
132
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
133
|
+
const answer = await rl.question(`\nNumber [1-${projects.length}]: `);
|
|
134
|
+
rl.close();
|
|
135
|
+
const choice = projects[Number(answer.trim()) - 1];
|
|
136
|
+
if (!choice)
|
|
137
|
+
fail(`"${answer.trim()}" is not one of the listed projects.`, 2);
|
|
138
|
+
projectUuid = choice.uuid;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
let created;
|
|
142
|
+
try {
|
|
143
|
+
created = await createApiKey({ projectUuid: projectUuid, name: args.keyName, mcpAccess: args.access }, transport);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (error instanceof GraphqlError)
|
|
147
|
+
fail(error.message);
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
if (args.install) {
|
|
151
|
+
const environment = args.environment ?? "studio";
|
|
152
|
+
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
153
|
+
const values = { BRAND: brand };
|
|
154
|
+
const claude = installClaudeCodePlugin({ apiKey: created.rawKey, environment });
|
|
155
|
+
process.stdout.write(claude.installed
|
|
156
|
+
? "\nClaude Code: installed and configured, key stored in your keychain.\n"
|
|
157
|
+
: `\nClaude Code: skipped (${claude.reason}).\n`);
|
|
158
|
+
const context = { scope: "project", home: homedir(), cwd: process.cwd(), mcpUrl };
|
|
159
|
+
const local = [cursor, codex].filter((adapter) => adapter.detect(context));
|
|
160
|
+
if (local.length) {
|
|
161
|
+
for (const adapter of local) {
|
|
162
|
+
const result = adapter.install(context);
|
|
163
|
+
process.stdout.write(`${adapter.label}: ${result.path}\n`);
|
|
164
|
+
}
|
|
165
|
+
const targetDirs = [...new Set(local.flatMap((adapter) => adapter.skillsDirs(context)))];
|
|
166
|
+
installSkills({ packageRoot, targetDirs, values });
|
|
167
|
+
writeAgentsMd({ packageRoot, projectRoot: context.cwd, values });
|
|
168
|
+
process.stdout.write("Skills and AGENTS.md written.\n");
|
|
169
|
+
process.stdout.write(`\nFor Cursor and Codex, export the key so they can read it:\n`);
|
|
170
|
+
process.stdout.write(` export JITERA_API_KEY=${created.rawKey}\n`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (args.json) {
|
|
174
|
+
process.stdout.write(`${JSON.stringify({ apiKey: created.rawKey, maskedKey: created.maskedKey, projectUuid, mcpAccess: args.access }, undefined, 2)}\n`);
|
|
175
|
+
}
|
|
176
|
+
else if (!args.install) {
|
|
177
|
+
process.stdout.write(`\nCreated a ${args.access === "read" ? "read-only" : "read + write"} key.\n\n`);
|
|
178
|
+
process.stdout.write(` export JITERA_API_KEY=${created.rawKey}\n\n`);
|
|
179
|
+
process.stdout.write("Then run npx @jitera/connect to configure your assistants.\n");
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/bin/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/bin/proxy.ts"],"names":[],"mappings":""}
|