@jitera/connect 1.4.0 → 2.0.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 +89 -51
- package/content/instructions.md +7 -4
- package/content/session-start-unbound.md +12 -0
- package/content/session-start.md +14 -5
- 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 +3 -2
- 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 +4 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/connect.js +3 -0
- package/dist/bin/connect.js.map +1 -1
- package/dist/bin/init.js +84 -3
- package/dist/bin/init.js.map +1 -1
- package/dist/bin/login.js +61 -14
- package/dist/bin/login.js.map +1 -1
- package/dist/bin/proxy.js +7 -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 +22 -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/hook-io.d.ts +2 -0
- package/dist/hook-io.d.ts.map +1 -1
- package/dist/hook-io.js +3 -0
- package/dist/hook-io.js.map +1 -1
- package/dist/hooks/session-start.js +24 -5
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop.js +7 -1
- package/dist/hooks/stop.js.map +1 -1
- package/dist/hooks/user-prompt-submit.js +83 -18
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- 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.map +1 -1
- package/dist/project-marker.js +14 -2
- package/dist/project-marker.js.map +1 -1
- package/dist/proxy.d.ts +3 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +11 -2
- package/dist/proxy.js.map +1 -1
- package/dist/select.d.ts +11 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +33 -0
- package/dist/select.js.map +1 -1
- 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 +8 -0
- package/dist/statusline.d.ts.map +1 -0
- package/dist/statusline.js +36 -0
- package/dist/statusline.js.map +1 -0
- package/package.json +3 -3
- package/skills/jitera-context/SKILL.md +22 -0
- package/skills/jitera-memory/SKILL.md +14 -2
- package/templates/AGENTS.md.tmpl +10 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAE1F,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;AAE9B,gFAAgF;AAChF,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACjF,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7F,6EAA6E;AAC7E,gFAAgF;AAChF,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAE7D,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,IAAI,GAAG,CAAC,MAAM;IAClB,CAAC,CAAC,+BAA+B;IACjC,CAAC,CAAC,MAAM;QACN,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,0BAA0B,CAAC;AAEjC,IAAI,SAAiB,CAAC;AACtB,IAAI,CAAC;IACH,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACpE,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE;IACnC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC;IAC3B,WAAW,EAAE,qBAAqB,IAAI,QAAQ;CAC/C,CAAC,CAAC;AAEH,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,mCAAmC,MAAM,CAAC,WAAW,YAAY,CAAC;IAChF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS;YACP,8DAA8D;gBAC9D,iBAAiB,MAAM,CAAC,WAAW,8CAA8C,KAAK,EAAE,CAAC;IAC7F,CAAC;SAAM,IAAI,qBAAqB,IAAI,qBAAqB,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;QACjF,SAAS;YACP,gEAAgE;gBAChE,IAAI,MAAM,CAAC,WAAW,wCAAwC,qBAAqB,KAAK;gBACxF,sFAAsF,KAAK,EAAE,CAAC;IAClG,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxC,SAAS;QACP,4EAA4E;YAC5E,+EAA+E;YAC/E,oEAAoE,CAAC;AACzE,CAAC;AAED,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC"}
|
package/dist/hooks/stop.js
CHANGED
|
@@ -3,13 +3,19 @@ import { readFileSync } from "node:fs";
|
|
|
3
3
|
import { join, dirname } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { emitContext, readHookInput } from "../hook-io.js";
|
|
6
|
+
import { readProjectMarker } from "../project-marker.js";
|
|
6
7
|
const CONTENT_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "content");
|
|
7
8
|
const CHECKPOINT_EVERY_TURNS = 5;
|
|
8
|
-
const
|
|
9
|
+
const input = readHookInput();
|
|
10
|
+
const turn = input.turn_number;
|
|
9
11
|
if (!Number.isInteger(turn) || turn < 1)
|
|
10
12
|
process.exit(0);
|
|
11
13
|
if (turn % CHECKPOINT_EVERY_TURNS !== 0)
|
|
12
14
|
process.exit(0);
|
|
15
|
+
// The checkpoint asks the model to write to project memory, which needs a
|
|
16
|
+
// project. Unbound repositories get nothing, same as the other hooks.
|
|
17
|
+
if (!readProjectMarker(input.cwd ?? process.cwd()))
|
|
18
|
+
process.exit(0);
|
|
13
19
|
let directive;
|
|
14
20
|
try {
|
|
15
21
|
directive = readFileSync(join(CONTENT_ROOT, "checkpoint.md"), "utf8").trim();
|
package/dist/hooks/stop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1F,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;AAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;AAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAK,IAAe,GAAG,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE,IAAK,IAAe,GAAG,sBAAsB,KAAK,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErE,0EAA0E;AAC1E,sEAAsE;AACtE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpE,IAAI,SAAiB,CAAC;AACtB,IAAI,CAAC;IACH,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -1,16 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { callTool, McpCallError } from "../mcp-client.js";
|
|
3
3
|
import { discoverDeployment } from "../discovery.js";
|
|
4
|
-
import { emitContext, readHookInput } from "../hook-io.js";
|
|
4
|
+
import { emitContext, promptText, readHookInput } from "../hook-io.js";
|
|
5
|
+
import { readProjectMarker } from "../project-marker.js";
|
|
5
6
|
import { claimOnce } from "../session-marker.js";
|
|
7
|
+
import { writeSessionStatus } from "../session-status.js";
|
|
6
8
|
const MAX_CONTEXT_CHARS = 6000;
|
|
9
|
+
// The composite tool searches memory, documents and source concurrently, so it
|
|
10
|
+
// is slower than a bare recall. This hook blocks the user's prompt, so the
|
|
11
|
+
// ceiling stays close to the old one rather than tracking the server's own
|
|
12
|
+
// per-section timeout.
|
|
13
|
+
const GATHER_TIMEOUT_MS = 10000;
|
|
7
14
|
const RECALL_TIMEOUT_MS = 8000;
|
|
15
|
+
// Keywords are extracted from the task, so a pasted stack trace or diff adds
|
|
16
|
+
// upload on a path that blocks the prompt without adding signal.
|
|
17
|
+
const MAX_TASK_CHARS = 2000;
|
|
8
18
|
const input = readHookInput();
|
|
9
|
-
if (!claimOnce(input.session_id, "recall"))
|
|
10
|
-
process.exit(0);
|
|
11
19
|
const apiKey = process.env["CLAUDE_PLUGIN_OPTION_JITERA_API_KEY"] ?? "";
|
|
12
20
|
if (!apiKey)
|
|
13
21
|
process.exit(0);
|
|
22
|
+
// Without .jitera.json this repository is not bound to a project, so there is
|
|
23
|
+
// no project whose context could be gathered. Bail before discovery rather
|
|
24
|
+
// than spend a network round trip guessing at a project nobody chose; session
|
|
25
|
+
// start is where the user is told how to bind it.
|
|
26
|
+
const marker = readProjectMarker(input.cwd ?? process.cwd());
|
|
27
|
+
if (!marker)
|
|
28
|
+
process.exit(0);
|
|
29
|
+
// Claimed only once there is something to claim it for: burning the session's
|
|
30
|
+
// single gather on an unbound repo would mean running init mid-session never
|
|
31
|
+
// took effect.
|
|
32
|
+
if (!claimOnce(input.session_id, "recall"))
|
|
33
|
+
process.exit(0);
|
|
14
34
|
let url;
|
|
15
35
|
const override = process.env["JITERA_MCP_URL"];
|
|
16
36
|
if (override) {
|
|
@@ -29,27 +49,72 @@ else {
|
|
|
29
49
|
process.exit(0);
|
|
30
50
|
}
|
|
31
51
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
52
|
+
const transport = { url, apiKey, projectUuid: marker.project };
|
|
53
|
+
const task = promptText(input).slice(0, MAX_TASK_CHARS);
|
|
54
|
+
// The blind recall serves two purposes: it is what deployments predating the
|
|
55
|
+
// composite tool answer, and it is the right call when there is no prompt text
|
|
56
|
+
// to gather for. It stays query-less on purpose — a server without the widening
|
|
57
|
+
// ladder can return less for a query than for no query.
|
|
58
|
+
const recall = () => callTool({
|
|
59
|
+
...transport,
|
|
60
|
+
name: "recall_jitera_memory",
|
|
61
|
+
args: {},
|
|
62
|
+
timeoutMs: RECALL_TIMEOUT_MS,
|
|
63
|
+
});
|
|
64
|
+
// The fallback exists for deployments that predate the composite tool, so it
|
|
65
|
+
// is worth a second round trip only when the tool is genuinely absent. Falling
|
|
66
|
+
// back on a timeout would stack RECALL_TIMEOUT_MS on top of GATHER_TIMEOUT_MS
|
|
67
|
+
// while the user's prompt is blocked.
|
|
68
|
+
function toolIsMissing(error) {
|
|
69
|
+
if (!(error instanceof McpCallError))
|
|
70
|
+
return false;
|
|
71
|
+
const detail = error.detail;
|
|
72
|
+
if (detail?.code === -32601 || detail?.code === -32602)
|
|
73
|
+
return true;
|
|
74
|
+
return /unknown tool|tool not found|method not found/i.test(error.message);
|
|
41
75
|
}
|
|
42
|
-
|
|
76
|
+
function giveUp(error) {
|
|
43
77
|
const message = error instanceof McpCallError ? error.message : String(error);
|
|
44
|
-
|
|
78
|
+
writeSessionStatus(input.session_id, { recallError: message });
|
|
79
|
+
process.stderr.write(`jitera-connect: could not load project context: ${message}\n`);
|
|
45
80
|
process.exit(0);
|
|
46
81
|
}
|
|
82
|
+
let memory;
|
|
83
|
+
const startedAt = Date.now();
|
|
84
|
+
try {
|
|
85
|
+
// Gathering for an empty task makes the server ask for one, and that answer
|
|
86
|
+
// would be injected as though it were project context.
|
|
87
|
+
memory = task
|
|
88
|
+
? await callTool({
|
|
89
|
+
...transport,
|
|
90
|
+
name: "gather_jitera_context",
|
|
91
|
+
args: { task, budget: MAX_CONTEXT_CHARS },
|
|
92
|
+
timeoutMs: GATHER_TIMEOUT_MS,
|
|
93
|
+
})
|
|
94
|
+
: await recall();
|
|
95
|
+
}
|
|
96
|
+
catch (gatherError) {
|
|
97
|
+
if (!task || !toolIsMissing(gatherError))
|
|
98
|
+
giveUp(gatherError);
|
|
99
|
+
try {
|
|
100
|
+
memory = await recall();
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
giveUp(error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
writeSessionStatus(input.session_id, {
|
|
107
|
+
recallMs: Date.now() - startedAt,
|
|
108
|
+
recallChars: memory.length,
|
|
109
|
+
recallError: undefined,
|
|
110
|
+
});
|
|
47
111
|
if (!memory)
|
|
48
112
|
process.exit(0);
|
|
49
113
|
const body = memory.length > MAX_CONTEXT_CHARS
|
|
50
|
-
? `${memory.slice(0, MAX_CONTEXT_CHARS)}\n\n[truncated, call
|
|
114
|
+
? `${memory.slice(0, MAX_CONTEXT_CHARS)}\n\n[truncated, call gather_jitera_context for the rest]`
|
|
51
115
|
: memory;
|
|
52
|
-
emitContext("UserPromptSubmit", `
|
|
53
|
-
`Treat this as current.
|
|
54
|
-
`and persist
|
|
116
|
+
emitContext("UserPromptSubmit", `Project context for this workspace, gathered at session start:\n\n${body}\n\n` +
|
|
117
|
+
`Treat this as current. It was gathered for the first prompt of this session, so call ` +
|
|
118
|
+
`gather_jitera_context yourself when the task moves on to a different area, and persist ` +
|
|
119
|
+
`new decisions with remember_jitera_memory.`);
|
|
55
120
|
//# sourceMappingURL=user-prompt-submit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const STATUS_COMMAND: string;
|
|
2
|
+
export interface StatusLineInstallOptions {
|
|
3
|
+
readonly home: string;
|
|
4
|
+
readonly dryRun?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface StatusLineInstallResult {
|
|
7
|
+
readonly installed: boolean;
|
|
8
|
+
readonly reason?: string;
|
|
9
|
+
readonly path: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function installStatusLine({ home, dryRun, }: StatusLineInstallOptions): StatusLineInstallResult;
|
|
12
|
+
//# sourceMappingURL=statusline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../src/install/statusline.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,QAEgB,CAAC;AAE5C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,MAAc,GACf,EAAE,wBAAwB,GAAG,uBAAuB,CAwBpD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { MalformedConfigError, readConfig, writeConfig } from "../mcp-config.js";
|
|
3
|
+
// Resolves the newest installed plugin version at run time, so plugin updates
|
|
4
|
+
// never orphan the status line, and exits quietly if the plugin is gone.
|
|
5
|
+
export const STATUS_COMMAND = '_j="$(ls -dt "$HOME/.claude/plugins/cache/jitera/jitera-connect/"*"/dist/bin/statusline.js" 2>/dev/null | head -1)"; ' +
|
|
6
|
+
'[ -n "$_j" ] && exec node "$_j" || true';
|
|
7
|
+
export function installStatusLine({ home, dryRun = false, }) {
|
|
8
|
+
const path = join(home, ".claude", "settings.json");
|
|
9
|
+
let config;
|
|
10
|
+
try {
|
|
11
|
+
config = readConfig(path);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error instanceof MalformedConfigError) {
|
|
15
|
+
return { installed: false, reason: error.message, path };
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
// The status line is a single global slot. Someone else's configuration is
|
|
20
|
+
// theirs; report why we stepped back instead of silently clobbering it.
|
|
21
|
+
const existing = config["statusLine"];
|
|
22
|
+
if (existing && existing.command !== STATUS_COMMAND) {
|
|
23
|
+
return { installed: false, reason: "a status line is already configured", path };
|
|
24
|
+
}
|
|
25
|
+
if (!existing && !dryRun) {
|
|
26
|
+
writeConfig(path, { ...config, statusLine: { type: "command", command: STATUS_COMMAND } });
|
|
27
|
+
}
|
|
28
|
+
return { installed: true, path };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=statusline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/install/statusline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEjF,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,CAAC,MAAM,cAAc,GACzB,uHAAuH;IACvH,yCAAyC,CAAC;AAa5C,MAAM,UAAU,iBAAiB,CAAC,EAChC,IAAI,EACJ,MAAM,GAAG,KAAK,GACW;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAqC,CAAC;IAC1E,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,IAAI,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
package/dist/mcp-client.d.ts
CHANGED
|
@@ -33,8 +33,9 @@ export interface TransportOptions {
|
|
|
33
33
|
readonly url: string;
|
|
34
34
|
readonly apiKey: string;
|
|
35
35
|
readonly timeoutMs?: number;
|
|
36
|
+
readonly projectUuid?: string | undefined;
|
|
36
37
|
}
|
|
37
|
-
export declare function postRpc(request: JsonRpcRequest, { url, apiKey, timeoutMs }: TransportOptions): Promise<JsonRpcResponse | undefined>;
|
|
38
|
+
export declare function postRpc(request: JsonRpcRequest, { url, apiKey, timeoutMs, projectUuid }: TransportOptions): Promise<JsonRpcResponse | undefined>;
|
|
38
39
|
export interface CallToolOptions extends TransportOptions {
|
|
39
40
|
readonly name: string;
|
|
40
41
|
readonly args?: Record<string, unknown>;
|
package/dist/mcp-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAkB,IAAI,kBAAkB;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAG5C;CACF;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAWvF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAkB,IAAI,kBAAkB;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAG5C;CACF;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAWvF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,EAAE,GAAG,EAAE,MAAM,EAAE,SAAgB,EAAE,WAAW,EAAE,EAAE,gBAAgB,GAC/D,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA2CtC;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,wBAAsB,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,GAAG,SAAS,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlG"}
|
package/dist/mcp-client.js
CHANGED
|
@@ -28,7 +28,7 @@ export function extractText(result) {
|
|
|
28
28
|
.join("\n")
|
|
29
29
|
.trim();
|
|
30
30
|
}
|
|
31
|
-
export async function postRpc(request, { url, apiKey, timeoutMs = 5000 }) {
|
|
31
|
+
export async function postRpc(request, { url, apiKey, timeoutMs = 5000, projectUuid }) {
|
|
32
32
|
if (!url)
|
|
33
33
|
throw new McpCallError("no mcp endpoint configured");
|
|
34
34
|
if (!apiKey)
|
|
@@ -46,6 +46,7 @@ export async function postRpc(request, { url, apiKey, timeoutMs = 5000 }) {
|
|
|
46
46
|
"content-type": "application/json",
|
|
47
47
|
accept: "application/json, text/event-stream",
|
|
48
48
|
authorization: `Bearer ${apiKey}`,
|
|
49
|
+
...(projectUuid ? { "x-jitera-project": projectUuid } : {}),
|
|
49
50
|
},
|
|
50
51
|
body: JSON.stringify(request),
|
|
51
52
|
});
|
package/dist/mcp-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAyBA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACnB,IAAI,GAAG,cAAc,CAAC;IAC/B,MAAM,CAAU;IAEzB,YAAY,OAAe,EAAE,MAAgB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,WAAmB,EAAE,GAAW;IACxD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,OAAO;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,YAAY,CAAC,oCAAoC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAA8B;IACxD,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;SAC3B,MAAM,CAAC,CAAC,IAAI,EAA0C,EAAE,CACvD,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CACtD;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-marker.d.ts","sourceRoot":"","sources":["../src/project-marker.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAM9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"project-marker.d.ts","sourceRoot":"","sources":["../src/project-marker.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAM9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAsClF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,MAAM,UAAQ,GACb,iBAAiB,CAuBnB"}
|
package/dist/project-marker.js
CHANGED
|
@@ -16,8 +16,15 @@ export function readProjectMarker(startDir) {
|
|
|
16
16
|
catch {
|
|
17
17
|
return undefined;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// `null` parses cleanly and then throws on property access, and a array
|
|
20
|
+
// or a bare scalar is not a marker either. Malformed reads as unbound,
|
|
21
|
+
// the same as unparseable, because hooks must never break a session.
|
|
22
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const fields = parsed;
|
|
26
|
+
const environment = fields["environment"];
|
|
27
|
+
const project = fields["project"];
|
|
21
28
|
return {
|
|
22
29
|
path,
|
|
23
30
|
...(typeof environment === "string" && SAFE_ENVIRONMENT.test(environment)
|
|
@@ -26,6 +33,11 @@ export function readProjectMarker(startDir) {
|
|
|
26
33
|
...(typeof project === "string" ? { project } : {}),
|
|
27
34
|
};
|
|
28
35
|
}
|
|
36
|
+
// Never look past the repository root. `init` writes the marker there, so
|
|
37
|
+
// a stray .jitera.json in a parent directory (or $HOME) would otherwise
|
|
38
|
+
// bind every repository beneath it to a project nobody chose for them.
|
|
39
|
+
if (existsSync(join(dir, ".git")))
|
|
40
|
+
return undefined;
|
|
29
41
|
const parent = dirname(dir);
|
|
30
42
|
if (parent === dir)
|
|
31
43
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-marker.js","sourceRoot":"","sources":["../src/project-marker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAE9C,8EAA8E;AAC9E,2CAA2C;AAC3C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAWhD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,
|
|
1
|
+
{"version":3,"file":"project-marker.js","sourceRoot":"","sources":["../src/project-marker.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -7,8 +7,10 @@ export interface ProxyConfig {
|
|
|
7
7
|
readonly url: string;
|
|
8
8
|
readonly apiKey: string;
|
|
9
9
|
readonly instructions?: string | undefined;
|
|
10
|
+
readonly projectUuid?: string | undefined;
|
|
10
11
|
}
|
|
11
|
-
export declare function
|
|
12
|
+
export declare function resolveProjectUuid(env: NodeJS.ProcessEnv, cwd?: string): string | undefined;
|
|
13
|
+
export declare function runProxy({ url, apiKey, instructions, projectUuid }: ProxyConfig, { input, output, log }: ProxyStreams): Promise<void>;
|
|
12
14
|
export interface ProxyEnvironment extends ProxyConfig {
|
|
13
15
|
readonly brand: string;
|
|
14
16
|
}
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAID,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,GAAE,MAAsB,GAC1B,MAAM,GAAG,SAAS,CAIpB;AAiBD,wBAAsB,QAAQ,CAC5B,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,WAAW,EACvD,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,YAAY,GACnC,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAW7F"}
|
package/dist/proxy.js
CHANGED
|
@@ -2,7 +2,16 @@ import { createInterface } from "node:readline";
|
|
|
2
2
|
import { discoverDeployment } from "./discovery.js";
|
|
3
3
|
import { DEFAULT_BRAND } from "./install/render.js";
|
|
4
4
|
import { McpCallError, postRpc } from "./mcp-client.js";
|
|
5
|
+
import { readProjectMarker } from "./project-marker.js";
|
|
5
6
|
const REQUEST_TIMEOUT_MS = 30_000;
|
|
7
|
+
// The repository's committed .jitera.json binds the workspace to a project;
|
|
8
|
+
// an explicit JITERA_PROJECT env always wins.
|
|
9
|
+
export function resolveProjectUuid(env, cwd = process.cwd()) {
|
|
10
|
+
const override = (env["JITERA_PROJECT"] ?? "").trim();
|
|
11
|
+
if (override)
|
|
12
|
+
return override;
|
|
13
|
+
return readProjectMarker(cwd)?.project;
|
|
14
|
+
}
|
|
6
15
|
function isNotification(request) {
|
|
7
16
|
return request.id === undefined || request.id === null;
|
|
8
17
|
}
|
|
@@ -15,7 +24,7 @@ function injectInstructions(response, instructions) {
|
|
|
15
24
|
result["instructions"] = instructions;
|
|
16
25
|
}
|
|
17
26
|
}
|
|
18
|
-
export async function runProxy({ url, apiKey, instructions }, { input, output, log }) {
|
|
27
|
+
export async function runProxy({ url, apiKey, instructions, projectUuid }, { input, output, log }) {
|
|
19
28
|
const lines = createInterface({ input, crlfDelay: Infinity });
|
|
20
29
|
for await (const line of lines) {
|
|
21
30
|
const trimmed = line.trim();
|
|
@@ -31,7 +40,7 @@ export async function runProxy({ url, apiKey, instructions }, { input, output, l
|
|
|
31
40
|
}
|
|
32
41
|
let response;
|
|
33
42
|
try {
|
|
34
|
-
response = await postRpc(request, { url, apiKey, timeoutMs: REQUEST_TIMEOUT_MS });
|
|
43
|
+
response = await postRpc(request, { url, apiKey, projectUuid, timeoutMs: REQUEST_TIMEOUT_MS });
|
|
35
44
|
}
|
|
36
45
|
catch (error) {
|
|
37
46
|
const message = error instanceof McpCallError ? error.message : String(error);
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAuB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/select.d.ts
CHANGED
|
@@ -3,6 +3,17 @@ export declare class SelectCancelledError extends Error {
|
|
|
3
3
|
readonly name = "SelectCancelledError";
|
|
4
4
|
constructor();
|
|
5
5
|
}
|
|
6
|
+
export declare class InvalidChoiceError extends Error {
|
|
7
|
+
readonly name = "InvalidChoiceError";
|
|
8
|
+
readonly answer: string;
|
|
9
|
+
constructor(answer: string);
|
|
10
|
+
}
|
|
11
|
+
export declare function chooseFrom<T>({ items, prompt, label, theme, }: {
|
|
12
|
+
readonly items: readonly T[];
|
|
13
|
+
readonly prompt: string;
|
|
14
|
+
readonly label: (item: T) => string;
|
|
15
|
+
readonly theme: Theme;
|
|
16
|
+
}): Promise<T>;
|
|
6
17
|
export interface SelectInput {
|
|
7
18
|
setRawMode?(mode: boolean): unknown;
|
|
8
19
|
resume?(): unknown;
|
package/dist/select.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAkB,IAAI,0BAA0B;IAEhD,cAEC;CACF;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,wBAAwB;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,MAAM,EAAE,MAAM,EAGzB;CACF;AAGD,wBAAsB,UAAU,CAAC,CAAC,EAAE,EAClC,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,GAAG,OAAO,CAAC,CAAC,CAAC,CAsBb;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,IAAI,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,OAAO,CAAC;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IACvE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;CACzE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC/B;AAqBD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA2DjH"}
|
package/dist/select.js
CHANGED
|
@@ -1,9 +1,42 @@
|
|
|
1
|
+
import { createInterface } from "node:readline/promises";
|
|
1
2
|
export class SelectCancelledError extends Error {
|
|
2
3
|
name = "SelectCancelledError";
|
|
3
4
|
constructor() {
|
|
4
5
|
super("selection cancelled");
|
|
5
6
|
}
|
|
6
7
|
}
|
|
8
|
+
export class InvalidChoiceError extends Error {
|
|
9
|
+
name = "InvalidChoiceError";
|
|
10
|
+
answer;
|
|
11
|
+
constructor(answer) {
|
|
12
|
+
super(`"${answer}" is not one of the listed options.`);
|
|
13
|
+
this.answer = answer;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Arrow-key selection on a terminal, a numbered prompt everywhere else.
|
|
17
|
+
export async function chooseFrom({ items, prompt, label, theme, }) {
|
|
18
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
19
|
+
return interactiveSelect({
|
|
20
|
+
items,
|
|
21
|
+
prompt,
|
|
22
|
+
label,
|
|
23
|
+
theme,
|
|
24
|
+
input: process.stdin,
|
|
25
|
+
output: process.stdout,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
process.stdout.write(`\n ${theme.bold(prompt)}\n\n`);
|
|
29
|
+
items.forEach((item, index) => {
|
|
30
|
+
process.stdout.write(` ${theme.accent(String(index + 1).padStart(2))} ${label(item)}\n`);
|
|
31
|
+
});
|
|
32
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
33
|
+
const answer = (await rl.question(`\n ${theme.dim(`Number [1-${items.length}]`)} `)).trim();
|
|
34
|
+
rl.close();
|
|
35
|
+
const picked = items[Number(answer) - 1];
|
|
36
|
+
if (!picked)
|
|
37
|
+
throw new InvalidChoiceError(answer);
|
|
38
|
+
return picked;
|
|
39
|
+
}
|
|
7
40
|
function parseKey(sequence, count) {
|
|
8
41
|
if (sequence === "" || sequence === "")
|
|
9
42
|
return { kind: "cancel" };
|
package/dist/select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface SessionStatus {
|
|
2
|
+
readonly configured?: boolean | undefined;
|
|
3
|
+
readonly environment?: string | undefined;
|
|
4
|
+
readonly recallMs?: number | undefined;
|
|
5
|
+
readonly recallChars?: number | undefined;
|
|
6
|
+
readonly recallError?: string | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare function statusPath(sessionId: string, root?: string): string;
|
|
9
|
+
export declare function writeSessionStatus(sessionId: string | undefined, patch: SessionStatus, root?: string): void;
|
|
10
|
+
export declare function readSessionStatus(sessionId: string | undefined, root?: string): SessionStatus | undefined;
|
|
11
|
+
//# sourceMappingURL=session-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-status.d.ts","sourceRoot":"","sources":["../src/session-status.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiB,GAAG,MAAM,CAG7E;AAID,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,GAAE,MAAiB,GACtB,IAAI,CAiBN;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,GAAE,MAAiB,GACtB,aAAa,GAAG,SAAS,CAS3B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
const NAMESPACE = "jitera-connect";
|
|
6
|
+
export function statusPath(sessionId, root = tmpdir()) {
|
|
7
|
+
const digest = createHash("sha256").update(sessionId).digest("hex").slice(0, 32);
|
|
8
|
+
return join(root, NAMESPACE, `status-${digest}.json`);
|
|
9
|
+
}
|
|
10
|
+
// Best-effort by design: the status line is cosmetic, so neither writer (hooks)
|
|
11
|
+
// nor reader (statusline) may ever fail a session over it.
|
|
12
|
+
export function writeSessionStatus(sessionId, patch, root = tmpdir()) {
|
|
13
|
+
if (!sessionId)
|
|
14
|
+
return;
|
|
15
|
+
try {
|
|
16
|
+
const path = statusPath(sessionId, root);
|
|
17
|
+
let existing = {};
|
|
18
|
+
if (existsSync(path)) {
|
|
19
|
+
try {
|
|
20
|
+
existing = JSON.parse(readFileSync(path, "utf8"));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
existing = {};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
mkdirSync(join(root, NAMESPACE), { recursive: true });
|
|
27
|
+
writeFileSync(path, `${JSON.stringify({ ...existing, ...patch })}\n`, "utf8");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function readSessionStatus(sessionId, root = tmpdir()) {
|
|
34
|
+
if (!sessionId)
|
|
35
|
+
return undefined;
|
|
36
|
+
const path = statusPath(sessionId, root);
|
|
37
|
+
if (!existsSync(path))
|
|
38
|
+
return undefined;
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=session-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-status.js","sourceRoot":"","sources":["../src/session-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAUnC,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,IAAI,GAAW,MAAM,EAAE;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,MAAM,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,gFAAgF;AAChF,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAChC,SAA6B,EAC7B,KAAoB,EACpB,IAAI,GAAW,MAAM,EAAE;IAEvB,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,GAA4B,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAA6B,EAC7B,IAAI,GAAW,MAAM,EAAE;IAEvB,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAkB,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SessionStatus } from "./session-status.ts";
|
|
2
|
+
export interface StatusLineInput {
|
|
3
|
+
readonly status?: SessionStatus | undefined;
|
|
4
|
+
readonly markerEnvironment?: string | undefined;
|
|
5
|
+
readonly bound?: boolean | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare function renderStatusLine({ status, markerEnvironment, bound, }: StatusLineInput): string;
|
|
8
|
+
//# sourceMappingURL=statusline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAGhD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAUD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,iBAAiB,EACjB,KAAK,GACN,EAAE,eAAe,GAAG,MAAM,CAwB1B"}
|