@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.
Files changed (81) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +89 -51
  4. package/content/instructions.md +7 -4
  5. package/content/session-start-unbound.md +12 -0
  6. package/content/session-start.md +14 -5
  7. package/dist/adapters/codex.d.ts.map +1 -1
  8. package/dist/adapters/codex.js +3 -0
  9. package/dist/adapters/codex.js.map +1 -1
  10. package/dist/adapters/cursor.d.ts.map +1 -1
  11. package/dist/adapters/cursor.js +3 -2
  12. package/dist/adapters/cursor.js.map +1 -1
  13. package/dist/adapters/types.d.ts +1 -0
  14. package/dist/adapters/types.d.ts.map +1 -1
  15. package/dist/bin/cli.js +4 -0
  16. package/dist/bin/cli.js.map +1 -1
  17. package/dist/bin/connect.js +3 -0
  18. package/dist/bin/connect.js.map +1 -1
  19. package/dist/bin/init.js +84 -3
  20. package/dist/bin/init.js.map +1 -1
  21. package/dist/bin/login.js +61 -14
  22. package/dist/bin/login.js.map +1 -1
  23. package/dist/bin/proxy.js +7 -2
  24. package/dist/bin/proxy.js.map +1 -1
  25. package/dist/bin/statusline.d.ts +3 -0
  26. package/dist/bin/statusline.d.ts.map +1 -0
  27. package/dist/bin/statusline.js +22 -0
  28. package/dist/bin/statusline.js.map +1 -0
  29. package/dist/cli-session.d.ts +12 -0
  30. package/dist/cli-session.d.ts.map +1 -0
  31. package/dist/cli-session.js +39 -0
  32. package/dist/cli-session.js.map +1 -0
  33. package/dist/device-flow.d.ts +10 -1
  34. package/dist/device-flow.d.ts.map +1 -1
  35. package/dist/device-flow.js +25 -1
  36. package/dist/device-flow.js.map +1 -1
  37. package/dist/graphql.d.ts +5 -0
  38. package/dist/graphql.d.ts.map +1 -1
  39. package/dist/graphql.js +15 -11
  40. package/dist/graphql.js.map +1 -1
  41. package/dist/hook-io.d.ts +2 -0
  42. package/dist/hook-io.d.ts.map +1 -1
  43. package/dist/hook-io.js +3 -0
  44. package/dist/hook-io.js.map +1 -1
  45. package/dist/hooks/session-start.js +24 -5
  46. package/dist/hooks/session-start.js.map +1 -1
  47. package/dist/hooks/stop.js +7 -1
  48. package/dist/hooks/stop.js.map +1 -1
  49. package/dist/hooks/user-prompt-submit.js +83 -18
  50. package/dist/hooks/user-prompt-submit.js.map +1 -1
  51. package/dist/install/statusline.d.ts +12 -0
  52. package/dist/install/statusline.d.ts.map +1 -0
  53. package/dist/install/statusline.js +30 -0
  54. package/dist/install/statusline.js.map +1 -0
  55. package/dist/mcp-client.d.ts +2 -1
  56. package/dist/mcp-client.d.ts.map +1 -1
  57. package/dist/mcp-client.js +2 -1
  58. package/dist/mcp-client.js.map +1 -1
  59. package/dist/project-marker.d.ts.map +1 -1
  60. package/dist/project-marker.js +14 -2
  61. package/dist/project-marker.js.map +1 -1
  62. package/dist/proxy.d.ts +3 -1
  63. package/dist/proxy.d.ts.map +1 -1
  64. package/dist/proxy.js +11 -2
  65. package/dist/proxy.js.map +1 -1
  66. package/dist/select.d.ts +11 -0
  67. package/dist/select.d.ts.map +1 -1
  68. package/dist/select.js +33 -0
  69. package/dist/select.js.map +1 -1
  70. package/dist/session-status.d.ts +11 -0
  71. package/dist/session-status.d.ts.map +1 -0
  72. package/dist/session-status.js +46 -0
  73. package/dist/session-status.js.map +1 -0
  74. package/dist/statusline.d.ts +8 -0
  75. package/dist/statusline.d.ts.map +1 -0
  76. package/dist/statusline.js +36 -0
  77. package/dist/statusline.js.map +1 -0
  78. package/package.json +3 -3
  79. package/skills/jitera-context/SKILL.md +22 -0
  80. package/skills/jitera-memory/SKILL.md +14 -2
  81. 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;AAEzD,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,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAE3E,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,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7D,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,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,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"}
@@ -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 turn = readHookInput().turn_number;
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();
@@ -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;AAE3D,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,IAAI,GAAG,aAAa,EAAE,CAAC,WAAW,CAAC;AACzC,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,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
+ {"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
- let memory;
33
- try {
34
- memory = await callTool({
35
- url,
36
- apiKey,
37
- name: "recall_jitera_memory",
38
- args: {},
39
- timeoutMs: RECALL_TIMEOUT_MS,
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
- catch (error) {
76
+ function giveUp(error) {
43
77
  const message = error instanceof McpCallError ? error.message : String(error);
44
- process.stderr.write(`jitera-connect: could not load project memory: ${message}\n`);
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 recall_jitera_memory for the rest]`
114
+ ? `${memory.slice(0, MAX_CONTEXT_CHARS)}\n\n[truncated, call gather_jitera_context for the rest]`
51
115
  : memory;
52
- emitContext("UserPromptSubmit", `Stored project memory for this workspace, loaded at session start:\n\n${body}\n\n` +
53
- `Treat this as current. Call recall_jitera_memory again if you need a narrower or fuller view, ` +
54
- `and persist new decisions with remember_jitera_memory.`);
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;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;AAE9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,IAAI,EAAE,CAAC;AACxE,IAAI,CAAC,MAAM;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE7B,IAAI,GAAW,CAAC;AAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC/C,IAAI,QAAQ,EAAE,CAAC;IACb,GAAG,GAAG,QAAQ,CAAC;AACjB,CAAC;KAAM,CAAC;IACN,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC;YAC1C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;YAC5D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;SAC5C,CAAC,CAAC;QACH,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAoB,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,MAAc,CAAC;AACnB,IAAI,CAAC;IACH,MAAM,GAAG,MAAM,QAAQ,CAAC;QACtB,GAAG;QACH,MAAM;QACN,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,iBAAiB;KAC7B,CAAC,CAAC;AACL,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,MAAM,OAAO,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,OAAO,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,MAAM;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE7B,MAAM,IAAI,GACR,MAAM,CAAC,MAAM,GAAG,iBAAiB;IAC/B,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,yDAAyD;IAChG,CAAC,CAAC,MAAM,CAAC;AAEb,WAAW,CACT,kBAAkB,EAClB,yEAAyE,IAAI,MAAM;IACjF,gGAAgG;IAChG,wDAAwD,CAC3D,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"}
@@ -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>;
@@ -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;CAC7B;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,EAAE,GAAG,EAAE,MAAM,EAAE,SAAgB,EAAE,EAAE,gBAAgB,GAClD,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA0CtC;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"}
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"}
@@ -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
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
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,CAyBlF;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"}
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"}
@@ -16,8 +16,15 @@ export function readProjectMarker(startDir) {
16
16
  catch {
17
17
  return undefined;
18
18
  }
19
- const environment = parsed["environment"];
20
- const project = parsed["project"];
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,MAA+B,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;YAC7E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,OAAO;gBACL,IAAI;gBACJ,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;oBACvE,CAAC,CAAC,EAAE,WAAW,EAAE;oBACjB,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACrC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,MAAqB,EACrB,MAAM,GAAG,KAAK;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAEzC,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,MAA0B,CAAC;IAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,QAAQ;QACX,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,KAAK,UAAU,CAAC;IACtC,IAAI,OAAO,IAAI,CAAC,MAAM;QAAE,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
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 runProxy({ url, apiKey, instructions }: ProxyConfig, { input, output, log }: ProxyStreams): Promise<void>;
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAQA,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;CAC5C;AAiBD,wBAAsB,QAAQ,CAC5B,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,WAAW,EAC1C,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"}
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":"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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAkB,IAAI,0BAA0B;IAEhD,cAEC;CACF;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"}
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" };
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC3B,IAAI,GAAG,sBAAsB,CAAC;IAEhD;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;CACF;AA8BD,SAAS,QAAQ,CAAC,QAAgB,EAAE,KAAa;IAC/C,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACpE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9F,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;IACrG,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACpG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAoB;IACnG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,MAAM,GAAG,GAAG,CAAC,KAAa,EAAU,EAAE;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC,CAAC;YACtC,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9F,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,GAAS,EAAE;YAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,UAAU,EAAE,CAAC;QACf,CAAC,CAAC;QAEF,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,WAAW,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACzE,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAClC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,WAAW,CAAM,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7E,UAAU,EAAE,CAAC;QAEb,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
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"}