@jitera/connect 1.3.0 → 1.5.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 +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +96 -25
- package/content/session-start-unconfigured.md +11 -0
- package/content/session-start.md +5 -4
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +3 -0
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/cursor.d.ts.map +1 -1
- package/dist/adapters/cursor.js +4 -3
- package/dist/adapters/cursor.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/bin/cli.js +6 -12
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/connect.js +6 -0
- package/dist/bin/connect.js.map +1 -1
- package/dist/bin/init.d.ts +3 -0
- package/dist/bin/init.d.ts.map +1 -0
- package/dist/bin/init.js +174 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/login.js +87 -17
- package/dist/bin/login.js.map +1 -1
- package/dist/bin/proxy.js +21 -2
- package/dist/bin/proxy.js.map +1 -1
- package/dist/bin/statusline.d.ts +3 -0
- package/dist/bin/statusline.d.ts.map +1 -0
- package/dist/bin/statusline.js +17 -0
- package/dist/bin/statusline.js.map +1 -0
- package/dist/cli-session.d.ts +12 -0
- package/dist/cli-session.d.ts.map +1 -0
- package/dist/cli-session.js +39 -0
- package/dist/cli-session.js.map +1 -0
- package/dist/device-flow.d.ts +10 -1
- package/dist/device-flow.d.ts.map +1 -1
- package/dist/device-flow.js +25 -1
- package/dist/device-flow.js.map +1 -1
- package/dist/graphql.d.ts +5 -0
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +15 -11
- package/dist/graphql.js.map +1 -1
- package/dist/hooks/session-start.js +32 -2
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/user-prompt-submit.js +10 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/install/claude-code.d.ts +2 -0
- package/dist/install/claude-code.d.ts.map +1 -1
- package/dist/install/claude-code.js +28 -3
- package/dist/install/claude-code.js.map +1 -1
- package/dist/install/project-root.d.ts +2 -0
- package/dist/install/project-root.d.ts.map +1 -0
- package/dist/install/project-root.js +9 -0
- package/dist/install/project-root.js.map +1 -0
- package/dist/install/statusline.d.ts +12 -0
- package/dist/install/statusline.d.ts.map +1 -0
- package/dist/install/statusline.js +30 -0
- package/dist/install/statusline.js.map +1 -0
- package/dist/mcp-client.d.ts +2 -1
- package/dist/mcp-client.d.ts.map +1 -1
- package/dist/mcp-client.js +2 -1
- package/dist/mcp-client.js.map +1 -1
- package/dist/project-marker.d.ts +15 -0
- package/dist/project-marker.d.ts.map +1 -0
- package/dist/project-marker.js +59 -0
- package/dist/project-marker.js.map +1 -0
- package/dist/proxy.d.ts +8 -2
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +23 -4
- package/dist/proxy.js.map +1 -1
- package/dist/select.d.ts +36 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +111 -0
- package/dist/select.js.map +1 -0
- package/dist/session-status.d.ts +11 -0
- package/dist/session-status.d.ts.map +1 -0
- package/dist/session-status.js +46 -0
- package/dist/session-status.js.map +1 -0
- package/dist/statusline.d.ts +7 -0
- package/dist/statusline.d.ts.map +1 -0
- package/dist/statusline.js +31 -0
- package/dist/statusline.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,30 +1,24 @@
|
|
|
1
|
-
#
|
|
1
|
+
# jitera connect
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
connects claude code, cursor, and codex to a jitera project: documentation,
|
|
4
|
+
source, and shared project memory over mcp.
|
|
5
|
+
|
|
6
|
+
## install
|
|
4
7
|
|
|
5
8
|
```
|
|
6
9
|
npx @jitera/connect login --install
|
|
7
10
|
```
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
assistant it finds.
|
|
12
|
+
signs you in through the browser, creates a user-level api key, and configures
|
|
13
|
+
every assistant it finds. one key covers every project your account can reach,
|
|
14
|
+
so you run this once per machine and never again per project.
|
|
11
15
|
|
|
12
|
-
|
|
16
|
+
for a pilot or staging environment:
|
|
13
17
|
|
|
14
18
|
```
|
|
15
19
|
npx @jitera/connect login --env=studio-05 --install
|
|
16
20
|
```
|
|
17
21
|
|
|
18
|
-
## choosing what to connect
|
|
19
|
-
|
|
20
|
-
`login` asks which organisation, then which project. It only offers projects you
|
|
21
|
-
can create an api key on. Skip either prompt:
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
npx @jitera/connect login --org=<slug>
|
|
25
|
-
npx @jitera/connect login --project=<uuid>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
22
|
## claude code
|
|
29
23
|
|
|
30
24
|
```
|
|
@@ -44,6 +38,88 @@ codex plugin marketplace add jitera-product/connect
|
|
|
44
38
|
npx @jitera/connect
|
|
45
39
|
```
|
|
46
40
|
|
|
41
|
+
## binding a repo to a project
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
npx @jitera/connect init
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
run this once per repo, from inside the repo, and commit the three files it
|
|
48
|
+
writes. `.jitera.json` records the deployment and project the repo belongs to.
|
|
49
|
+
AGENTS.md carries the same guidance for assistants that read it natively, and
|
|
50
|
+
CLAUDE.md imports it, because claude code reads CLAUDE.md and not AGENTS.md.
|
|
51
|
+
|
|
52
|
+
init reuses the login you already did to list your projects and asks which one
|
|
53
|
+
this repo is. pass `--project=<uuid>` to skip the question, or `--dry-run` to
|
|
54
|
+
see what it would write.
|
|
55
|
+
|
|
56
|
+
it refuses to run outside a git repository. instructions written above a repo
|
|
57
|
+
are invisible to anything that reads AGENTS.md from the repo root, and a
|
|
58
|
+
CLAUDE.md above a repo leaks into every project underneath it.
|
|
59
|
+
|
|
60
|
+
## what applies where
|
|
61
|
+
|
|
62
|
+
the api key is global: one per user, per machine, stored by `login --install`.
|
|
63
|
+
every repo you open uses it, so init is optional and nothing breaks without it.
|
|
64
|
+
|
|
65
|
+
`.jitera.json` configures nothing by itself. it declares what the repo expects,
|
|
66
|
+
and sessions check the two against each other. a teammate who has not signed in
|
|
67
|
+
yet gets the exact login command for the right environment. a teammate pointed
|
|
68
|
+
at a different environment gets a warning instead of quietly reading the wrong
|
|
69
|
+
project.
|
|
70
|
+
|
|
71
|
+
with a user-level key it does one more thing: it picks the project. the proxy
|
|
72
|
+
and the hooks read it and send it as an `X-Jitera-Project` header, so several
|
|
73
|
+
repos on one machine can talk to different projects through a single key. older
|
|
74
|
+
deployments bind the key itself to one project, and there the marker only makes
|
|
75
|
+
a mismatch visible.
|
|
76
|
+
|
|
77
|
+
## seeing your keys
|
|
78
|
+
|
|
79
|
+
in the jitera app your own keys live under your avatar, then account, then api
|
|
80
|
+
keys. you can create and revoke them from there. project keys sit in the
|
|
81
|
+
project's settings, agent keys under the agent, and organisation keys under
|
|
82
|
+
settings, then organisation.
|
|
83
|
+
|
|
84
|
+
## the api key
|
|
85
|
+
|
|
86
|
+
login creates a user-level key when the deployment supports it. older
|
|
87
|
+
deployments issue project-scoped keys, so login falls back to asking which
|
|
88
|
+
project and tells you when that happens.
|
|
89
|
+
|
|
90
|
+
`login --install` stores the key for you, so there is nothing to export:
|
|
91
|
+
|
|
92
|
+
- claude code: your os keychain
|
|
93
|
+
- cursor and codex: their own config in your home directory, outside any repo
|
|
94
|
+
|
|
95
|
+
it also keeps a private session at `~/.config/jitera-connect/session.json`,
|
|
96
|
+
mode 0600, so init can list your projects without another trip through the
|
|
97
|
+
browser.
|
|
98
|
+
|
|
99
|
+
installing without `login` leaves cursor and codex reading `JITERA_API_KEY`
|
|
100
|
+
from the environment:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
export JITERA_API_KEY=<your api key>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## status line
|
|
107
|
+
|
|
108
|
+
`login --install` also puts the connection in claude code's status line:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
● jitera · studio-05 · recall 1.2k/0.4s
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
green means the session is configured, hollow means not connected, and yellow
|
|
115
|
+
means a failed recall or a repo asking for a different environment. it reads
|
|
116
|
+
state the hooks already wrote, so it never touches the network, and it resolves
|
|
117
|
+
the installed plugin version when it runs, so an update does not orphan it.
|
|
118
|
+
|
|
119
|
+
claude code has one status line slot. if something else already owns it, login
|
|
120
|
+
leaves it alone and says so. remove yours and run login again, or point
|
|
121
|
+
`statusLine` at the plugin's `dist/bin/statusline.js` yourself.
|
|
122
|
+
|
|
47
123
|
## pilot and staging environments
|
|
48
124
|
|
|
49
125
|
claude code, at install:
|
|
@@ -65,16 +141,11 @@ npx @jitera/connect --env=studio-05
|
|
|
65
141
|
npx @jitera/connect --env=studio-stage
|
|
66
142
|
```
|
|
67
143
|
|
|
68
|
-
##
|
|
69
|
-
|
|
70
|
-
`login --install` stores the key for you. nothing to export.
|
|
71
|
-
|
|
72
|
-
- claude code: your os keychain
|
|
73
|
-
- cursor and codex: their own config in your home directory, outside any repo
|
|
74
|
-
|
|
75
|
-
installing without `login` leaves cursor and codex reading `JITERA_API_KEY` from
|
|
76
|
-
the environment instead:
|
|
144
|
+
## other flags
|
|
77
145
|
|
|
78
146
|
```
|
|
79
|
-
|
|
147
|
+
npx @jitera/connect --print print the resolved endpoints and exit
|
|
148
|
+
npx @jitera/connect --dry-run report what would change, write nothing
|
|
149
|
+
npx @jitera/connect --uninstall remove the jitera server
|
|
150
|
+
npx @jitera/connect --skip-skills write mcp config only
|
|
80
151
|
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
The project-context plugin is installed, but no API key is configured, so its
|
|
2
|
+
MCP tools are unavailable in this session. Do not call `recall_jitera_memory`
|
|
3
|
+
or `remember_jitera_memory`; the calls will fail.
|
|
4
|
+
|
|
5
|
+
If the user asks about project context, documentation, or shared memory, tell
|
|
6
|
+
them to connect this workspace by running:
|
|
7
|
+
|
|
8
|
+
npx @jitera/connect login --install
|
|
9
|
+
|
|
10
|
+
or by configuring the plugin from the /plugin menu, then restarting the
|
|
11
|
+
assistant.
|
package/content/session-start.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
Project context tools are
|
|
2
|
-
source, and a shared project memory.
|
|
1
|
+
Project context tools are configured for this workspace: project documentation,
|
|
2
|
+
source, and a shared project memory over MCP.
|
|
3
3
|
|
|
4
4
|
Before your first substantive answer in this session, and before planning or
|
|
5
|
-
implementing anything, call `recall_jitera_memory`. An empty result is normal
|
|
6
|
-
is not an error.
|
|
5
|
+
implementing anything, call `recall_jitera_memory`. An empty result is normal
|
|
6
|
+
and is not an error. If the tools are missing from your tool list or a call
|
|
7
|
+
fails, say so and continue without stored context instead of guessing.
|
|
7
8
|
|
|
8
9
|
As decisions are made, constraints are discovered, or you are corrected, persist
|
|
9
10
|
them with `remember_jitera_memory`. Recall the entity first and re-send its full
|
|
@@ -1 +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,
|
|
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,OA0CnB,CAAC"}
|
package/dist/adapters/codex.js
CHANGED
|
@@ -33,6 +33,9 @@ export const codex = {
|
|
|
33
33
|
context.apiKey
|
|
34
34
|
? `bearer_token = "${context.apiKey}"`
|
|
35
35
|
: `bearer_token_env_var = "${API_KEY_ENV}"`,
|
|
36
|
+
...(context.projectUuid
|
|
37
|
+
? [`http_headers = { "X-Jitera-Project" = "${context.projectUuid}" }`]
|
|
38
|
+
: []),
|
|
36
39
|
].join("\n");
|
|
37
40
|
const after = ensureRootKey(upsertTable(before, SERVER_TABLE, body), RMCP_FLAG, "true");
|
|
38
41
|
if (!context.dryRun)
|
|
@@ -1 +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,OAAO,CAAC,MAAM;gBACZ,CAAC,CAAC,mBAAmB,OAAO,CAAC,MAAM,GAAG;gBACtC,CAAC,CAAC,2BAA2B,WAAW,GAAG;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAmBpC,eAAO,MAAM,MAAM,EAAE,OAwCpB,CAAC"}
|
package/dist/adapters/cursor.js
CHANGED
|
@@ -4,12 +4,13 @@ import { mergeServer, readConfig, removeServer, writeConfig, } from "../mcp-conf
|
|
|
4
4
|
export const SERVER_NAME = "jitera";
|
|
5
5
|
const CONFIG_KEY = "mcpServers";
|
|
6
6
|
const API_KEY_ENV = "JITERA_API_KEY";
|
|
7
|
-
function serverEntry(mcpUrl, apiKey) {
|
|
7
|
+
function serverEntry(mcpUrl, apiKey, projectUuid) {
|
|
8
8
|
return {
|
|
9
9
|
type: "http",
|
|
10
10
|
url: mcpUrl,
|
|
11
11
|
headers: {
|
|
12
12
|
Authorization: apiKey ? `Bearer ${apiKey}` : `Bearer \${env:${API_KEY_ENV}}`,
|
|
13
|
+
...(projectUuid ? { "X-Jitera-Project": projectUuid } : {}),
|
|
13
14
|
},
|
|
14
15
|
};
|
|
15
16
|
}
|
|
@@ -27,12 +28,12 @@ export const cursor = {
|
|
|
27
28
|
},
|
|
28
29
|
skillsDirs({ scope, home, cwd }) {
|
|
29
30
|
const root = scope === "user" ? home : cwd;
|
|
30
|
-
return [join(root, ".agents", "skills")
|
|
31
|
+
return [join(root, ".agents", "skills")];
|
|
31
32
|
},
|
|
32
33
|
install(context) {
|
|
33
34
|
const path = this.mcpConfigPath(context);
|
|
34
35
|
const before = readConfig(path);
|
|
35
|
-
const after = mergeServer(before, CONFIG_KEY, SERVER_NAME, serverEntry(context.mcpUrl ?? "", context.apiKey));
|
|
36
|
+
const after = mergeServer(before, CONFIG_KEY, SERVER_NAME, serverEntry(context.mcpUrl ?? "", context.apiKey, context.projectUuid));
|
|
36
37
|
if (!context.dryRun)
|
|
37
38
|
writeConfig(path, after);
|
|
38
39
|
return { path, config: after, changed: JSON.stringify(before) !== JSON.stringify(after) };
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/types.d.ts
CHANGED
|
@@ -1 +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,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"}
|
|
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,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,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"}
|
package/dist/bin/cli.js
CHANGED
|
@@ -6,8 +6,8 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
import { codex } from "../adapters/codex.js";
|
|
7
7
|
import { cursor } from "../adapters/cursor.js";
|
|
8
8
|
import { MalformedConfigError } from "../mcp-config.js";
|
|
9
|
-
import { writeAgentsMd } from "../install/agents-md.js";
|
|
10
9
|
import { DEFAULT_BRAND } from "../install/render.js";
|
|
10
|
+
import { readProjectMarker } from "../project-marker.js";
|
|
11
11
|
import { installSkills, uninstallSkills } from "../install/skills.js";
|
|
12
12
|
import { DiscoveryError, discoverDeployment } from "../discovery.js";
|
|
13
13
|
import { UnknownEnvironmentError, resolveStudioUrl } from "../environments.js";
|
|
@@ -105,6 +105,9 @@ const context = {
|
|
|
105
105
|
home: homedir(),
|
|
106
106
|
cwd: process.cwd(),
|
|
107
107
|
mcpUrl,
|
|
108
|
+
// A committed .jitera.json pins these configs to the repo's project, which is
|
|
109
|
+
// what makes a user-level key work without per-project setup.
|
|
110
|
+
projectUuid: readProjectMarker(process.cwd())?.project,
|
|
108
111
|
dryRun: args.dryRun,
|
|
109
112
|
};
|
|
110
113
|
const detected = ADAPTERS.filter((adapter) => adapter.detect(context));
|
|
@@ -145,17 +148,6 @@ if (!args.skipSkills) {
|
|
|
145
148
|
process.stdout.write(skills.changed
|
|
146
149
|
? ` ${theme.ok("✓")} ${theme.bold("Skills")} ${theme.dim(`${skills.skills.length} ${skillVerb} ${targetDirs.join(", ")}`)}\n`
|
|
147
150
|
: ` ${theme.dim("–")} ${theme.bold("Skills")} ${theme.dim(`already up to date in ${targetDirs.join(", ")}`)}\n`);
|
|
148
|
-
if (!args.uninstall) {
|
|
149
|
-
const agents = writeAgentsMd({
|
|
150
|
-
packageRoot: PACKAGE_ROOT,
|
|
151
|
-
projectRoot: context.cwd,
|
|
152
|
-
values,
|
|
153
|
-
dryRun: args.dryRun,
|
|
154
|
-
});
|
|
155
|
-
process.stdout.write(agents.changed
|
|
156
|
-
? ` ${theme.ok("✓")} ${theme.bold("Instructions")} ${theme.dim(`${agents.agents.action} block in ${agents.agentsPath}`)}\n`
|
|
157
|
-
: ` ${theme.dim("–")} ${theme.bold("Instructions")} ${theme.dim(`already up to date in ${agents.agentsPath}`)}\n`);
|
|
158
|
-
}
|
|
159
151
|
}
|
|
160
152
|
if (args.dryRun) {
|
|
161
153
|
process.stdout.write(`\n ${theme.dim("dry run, nothing was written")}\n`);
|
|
@@ -163,5 +155,7 @@ if (args.dryRun) {
|
|
|
163
155
|
else if (!args.uninstall) {
|
|
164
156
|
process.stdout.write(`\n ${theme.dim("endpoint")} ${theme.accent(mcpUrl)}\n`);
|
|
165
157
|
process.stdout.write(` ${theme.dim("export JITERA_API_KEY=<your api key> before starting your assistant")}\n`);
|
|
158
|
+
process.stdout.write(` ${theme.dim("Optional:")} ${theme.accent("npx @jitera/connect init")} ` +
|
|
159
|
+
`${theme.dim("writes committable AGENTS.md instructions at the repo root")}\n`);
|
|
166
160
|
}
|
|
167
161
|
//# sourceMappingURL=cli.js.map
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/connect.js
CHANGED
|
@@ -3,6 +3,12 @@ const [subcommand] = process.argv.slice(2);
|
|
|
3
3
|
if (subcommand === "login") {
|
|
4
4
|
await import("./login.js");
|
|
5
5
|
}
|
|
6
|
+
else if (subcommand === "init") {
|
|
7
|
+
await import("./init.js");
|
|
8
|
+
}
|
|
9
|
+
else if (subcommand === "statusline") {
|
|
10
|
+
await import("./statusline.js");
|
|
11
|
+
}
|
|
6
12
|
else {
|
|
7
13
|
await import("./cli.js");
|
|
8
14
|
}
|
package/dist/bin/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/bin/connect.ts"],"names":[],"mappings":";AACA,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3C,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7B,CAAC;KAAM,CAAC;IACN,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/bin/connect.ts"],"names":[],"mappings":";AACA,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3C,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7B,CAAC;KAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;IACjC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5B,CAAC;KAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;IACvC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClC,CAAC;KAAM,CAAC;IACN,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":""}
|
package/dist/bin/init.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { DiscoveryError, discoverDeployment } from "../discovery.js";
|
|
5
|
+
import { UnknownEnvironmentError } from "../environments.js";
|
|
6
|
+
import { isExpired, loadCliSession, saveCliSession } from "../cli-session.js";
|
|
7
|
+
import { DeviceFlowError, refreshAccessToken } from "../device-flow.js";
|
|
8
|
+
import { GraphqlError, listOrganisations, listProjects } from "../graphql.js";
|
|
9
|
+
import { writeAgentsMd } from "../install/agents-md.js";
|
|
10
|
+
import { DEFAULT_BRAND } from "../install/render.js";
|
|
11
|
+
import { resolveGitRoot } from "../install/project-root.js";
|
|
12
|
+
import { writeProjectMarker } from "../project-marker.js";
|
|
13
|
+
import { InvalidChoiceError, SelectCancelledError, chooseFrom } from "../select.js";
|
|
14
|
+
import { createTheme } from "../theme.js";
|
|
15
|
+
const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
16
|
+
const USAGE = [
|
|
17
|
+
"usage: npx @jitera/connect init [--env=<environment>] [--project=<uuid>] [--dry-run]",
|
|
18
|
+
"",
|
|
19
|
+
"Writes the shared, committable connection files at the root of the current",
|
|
20
|
+
"git repository: an AGENTS.md block for assistants that read it natively, a",
|
|
21
|
+
"CLAUDE.md that imports it, and a .jitera.json recording which deployment",
|
|
22
|
+
"(and optionally which project) this repository belongs to. Commit all three",
|
|
23
|
+
"so your team's assistants see them.",
|
|
24
|
+
].join("\n");
|
|
25
|
+
function parseArgs(argv) {
|
|
26
|
+
const args = { dryRun: false, help: false };
|
|
27
|
+
for (const arg of argv) {
|
|
28
|
+
if (arg === "init")
|
|
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 === "--dry-run")
|
|
35
|
+
args.dryRun = true;
|
|
36
|
+
else if (arg === "--help" || arg === "-h")
|
|
37
|
+
args.help = true;
|
|
38
|
+
else
|
|
39
|
+
args.unknown = arg;
|
|
40
|
+
}
|
|
41
|
+
return args;
|
|
42
|
+
}
|
|
43
|
+
const theme = createTheme({ env: process.env, isTty: Boolean(process.stdout.isTTY) });
|
|
44
|
+
const args = parseArgs(process.argv.slice(2));
|
|
45
|
+
if (args.help) {
|
|
46
|
+
process.stdout.write(`${USAGE}\n`);
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
if (args.unknown) {
|
|
50
|
+
process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
|
|
51
|
+
process.exit(2);
|
|
52
|
+
}
|
|
53
|
+
const projectRoot = resolveGitRoot(process.cwd());
|
|
54
|
+
if (!projectRoot) {
|
|
55
|
+
process.stderr.write("error: not inside a git repository. Instructions written outside a repository " +
|
|
56
|
+
"are invisible to assistants that read AGENTS.md from the repository root, and " +
|
|
57
|
+
"an out-of-repo CLAUDE.md leaks into every project below it. Run this from " +
|
|
58
|
+
"inside the repository you want to connect.\n");
|
|
59
|
+
process.exit(2);
|
|
60
|
+
}
|
|
61
|
+
let brand = DEFAULT_BRAND;
|
|
62
|
+
try {
|
|
63
|
+
const deployment = await discoverDeployment({
|
|
64
|
+
environment: args.environment,
|
|
65
|
+
studioUrl: process.env["JITERA_STUDIO_URL"],
|
|
66
|
+
});
|
|
67
|
+
brand = deployment.brand;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof UnknownEnvironmentError) {
|
|
71
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
72
|
+
process.exit(2);
|
|
73
|
+
}
|
|
74
|
+
if (!(error instanceof DiscoveryError))
|
|
75
|
+
throw error;
|
|
76
|
+
process.stdout.write(` ${theme.dim(`offline, using the default brand "${brand}"`)}\n`);
|
|
77
|
+
}
|
|
78
|
+
// A stored login session ("login once") lets init pick the project here, so
|
|
79
|
+
// the binding lands in .jitera.json without another browser round-trip.
|
|
80
|
+
const session = loadCliSession();
|
|
81
|
+
let projectUuid = args.project;
|
|
82
|
+
let projectName;
|
|
83
|
+
if (!projectUuid && session) {
|
|
84
|
+
let accessToken = session.accessToken;
|
|
85
|
+
try {
|
|
86
|
+
if (isExpired(session)) {
|
|
87
|
+
if (!session.refreshToken) {
|
|
88
|
+
throw new DeviceFlowError("expired_token", "the stored sign-in expired. Run login again.");
|
|
89
|
+
}
|
|
90
|
+
const refreshed = await refreshAccessToken({
|
|
91
|
+
automationUrl: session.automationUrl,
|
|
92
|
+
refreshToken: session.refreshToken,
|
|
93
|
+
});
|
|
94
|
+
accessToken = refreshed.accessToken;
|
|
95
|
+
saveCliSession({
|
|
96
|
+
...session,
|
|
97
|
+
accessToken,
|
|
98
|
+
refreshToken: refreshed.refreshToken ?? session.refreshToken,
|
|
99
|
+
expiresAt: refreshed.expiresInSeconds
|
|
100
|
+
? Date.now() + refreshed.expiresInSeconds * 1000
|
|
101
|
+
: undefined,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const transport = { automationUrl: session.automationUrl, accessToken };
|
|
105
|
+
const organisations = await listOrganisations(transport);
|
|
106
|
+
const organisation = organisations.length > 1
|
|
107
|
+
? await chooseFrom({
|
|
108
|
+
items: organisations,
|
|
109
|
+
prompt: "Which organisation?",
|
|
110
|
+
label: (org) => `${org.name ?? org.slug}${org.personal ? " (personal)" : ""}`,
|
|
111
|
+
theme,
|
|
112
|
+
})
|
|
113
|
+
: organisations[0];
|
|
114
|
+
const projects = await listProjects(transport, organisation);
|
|
115
|
+
if (projects.length === 0) {
|
|
116
|
+
process.stdout.write(` ${theme.dim("this account has no projects here; pass --project=<uuid> to bind one")}\n`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const choice = projects.length > 1
|
|
120
|
+
? await chooseFrom({
|
|
121
|
+
items: projects,
|
|
122
|
+
prompt: "Which project does this repository belong to?",
|
|
123
|
+
label: (project) => project.name,
|
|
124
|
+
theme,
|
|
125
|
+
})
|
|
126
|
+
: projects[0];
|
|
127
|
+
projectUuid = choice?.uuid;
|
|
128
|
+
projectName = choice?.name;
|
|
129
|
+
if (projectName) {
|
|
130
|
+
process.stdout.write(` ${theme.dim("Project")} ${projectName}\n`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error instanceof SelectCancelledError) {
|
|
136
|
+
process.stderr.write(`\n error: cancelled.\n`);
|
|
137
|
+
process.exit(130);
|
|
138
|
+
}
|
|
139
|
+
if (error instanceof InvalidChoiceError) {
|
|
140
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
141
|
+
process.exit(2);
|
|
142
|
+
}
|
|
143
|
+
if (error instanceof DeviceFlowError || error instanceof GraphqlError) {
|
|
144
|
+
process.stdout.write(` ${theme.dim(`could not list projects (${error.message}); pass --project=<uuid>`)}\n`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (!projectUuid) {
|
|
152
|
+
process.stdout.write(` ${theme.dim("sign in once with the login command to pick a project here, or pass --project=<uuid>")}\n`);
|
|
153
|
+
}
|
|
154
|
+
const result = writeAgentsMd({
|
|
155
|
+
packageRoot: PACKAGE_ROOT,
|
|
156
|
+
projectRoot,
|
|
157
|
+
values: { BRAND: brand },
|
|
158
|
+
dryRun: args.dryRun,
|
|
159
|
+
});
|
|
160
|
+
process.stdout.write(` ${result.agents.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold("AGENTS.md")} ${theme.dim(`${result.agents.action} in ${result.agentsPath}`)}\n`);
|
|
161
|
+
process.stdout.write(` ${result.claude.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold("CLAUDE.md")} ${theme.dim(`${result.claude.action} in ${result.claudePath}`)}\n`);
|
|
162
|
+
const environment = args.environment ?? session?.environment ?? "studio";
|
|
163
|
+
const marker = writeProjectMarker(projectRoot, {
|
|
164
|
+
environment,
|
|
165
|
+
...(projectUuid ? { project: projectUuid } : {}),
|
|
166
|
+
}, args.dryRun);
|
|
167
|
+
process.stdout.write(` ${marker.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold(".jitera.json")} ${theme.dim(`environment "${environment}"${projectUuid ? `, project ${projectUuid}` : ""}`)}\n`);
|
|
168
|
+
if (args.dryRun) {
|
|
169
|
+
process.stdout.write(`\n ${theme.dim("dry run, nothing was written")}\n`);
|
|
170
|
+
}
|
|
171
|
+
else if (result.changed || marker.changed) {
|
|
172
|
+
process.stdout.write(`\n ${theme.dim("Commit these files so the whole team's assistants read them.")}\n`);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
|