joonecli 0.1.0 → 0.1.1

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 (69) hide show
  1. package/README.md +12 -12
  2. package/dist/__tests__/optimizations.test.js.map +1 -1
  3. package/dist/__tests__/promptBuilder.test.js +14 -20
  4. package/dist/__tests__/promptBuilder.test.js.map +1 -1
  5. package/dist/agents/agentRegistry.d.ts +37 -0
  6. package/dist/agents/agentRegistry.js +58 -0
  7. package/dist/agents/agentRegistry.js.map +1 -0
  8. package/dist/agents/agentSpec.d.ts +54 -0
  9. package/dist/agents/agentSpec.js +9 -0
  10. package/dist/agents/agentSpec.js.map +1 -0
  11. package/dist/agents/builtinAgents.d.ts +20 -0
  12. package/dist/agents/builtinAgents.js +125 -0
  13. package/dist/agents/builtinAgents.js.map +1 -0
  14. package/dist/cli/config.d.ts +4 -0
  15. package/dist/cli/config.js.map +1 -1
  16. package/dist/cli/index.js +25 -1
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/postinstall.d.ts +2 -0
  19. package/dist/cli/postinstall.js +25 -0
  20. package/dist/cli/postinstall.js.map +1 -0
  21. package/dist/commands/builtinCommands.d.ts +21 -0
  22. package/dist/commands/builtinCommands.js +241 -0
  23. package/dist/commands/builtinCommands.js.map +1 -0
  24. package/dist/commands/commandRegistry.d.ts +90 -0
  25. package/dist/commands/commandRegistry.js +128 -0
  26. package/dist/commands/commandRegistry.js.map +1 -0
  27. package/dist/core/agentLoop.d.ts +4 -1
  28. package/dist/core/agentLoop.js +21 -9
  29. package/dist/core/agentLoop.js.map +1 -1
  30. package/dist/core/autoSave.d.ts +41 -0
  31. package/dist/core/autoSave.js +69 -0
  32. package/dist/core/autoSave.js.map +1 -0
  33. package/dist/core/compactor.d.ts +66 -0
  34. package/dist/core/compactor.js +170 -0
  35. package/dist/core/compactor.js.map +1 -0
  36. package/dist/core/contextGuard.d.ts +33 -0
  37. package/dist/core/contextGuard.js +95 -0
  38. package/dist/core/contextGuard.js.map +1 -0
  39. package/dist/core/promptBuilder.d.ts +16 -1
  40. package/dist/core/promptBuilder.js +27 -14
  41. package/dist/core/promptBuilder.js.map +1 -1
  42. package/dist/core/sessionResumer.js +3 -3
  43. package/dist/core/sessionResumer.js.map +1 -1
  44. package/dist/core/subAgent.d.ts +56 -0
  45. package/dist/core/subAgent.js +240 -0
  46. package/dist/core/subAgent.js.map +1 -0
  47. package/dist/debug_google.d.ts +1 -0
  48. package/dist/debug_google.js +23 -0
  49. package/dist/debug_google.js.map +1 -0
  50. package/dist/test_google.d.ts +1 -0
  51. package/dist/test_google.js +32 -89
  52. package/dist/test_google.js.map +1 -0
  53. package/dist/tools/router.js +2 -0
  54. package/dist/tools/router.js.map +1 -1
  55. package/dist/tools/spawnAgent.d.ts +19 -0
  56. package/dist/tools/spawnAgent.js +130 -0
  57. package/dist/tools/spawnAgent.js.map +1 -0
  58. package/dist/ui/App.js +88 -5
  59. package/dist/ui/App.js.map +1 -1
  60. package/package.json +3 -2
  61. package/src/cli/index.ts +12 -0
  62. package/src/cli/postinstall.ts +28 -0
  63. package/src/core/compactor.ts +2 -2
  64. package/src/core/contextGuard.ts +4 -4
  65. package/src/core/sessionStore.ts +2 -1
  66. package/src/core/subAgent.ts +2 -2
  67. package/tests/core/sessionStore.test.ts +2 -2
  68. package/src/test_google.js +0 -40
  69. package/src/test_google.ts +0 -40
@@ -1,93 +1,36 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- var google_genai_1 = require("@langchain/google-genai");
40
- var messages_1 = require("@langchain/core/messages");
41
- var dotenv = require("dotenv");
1
+ import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
2
+ import { HumanMessage, SystemMessage } from "@langchain/core/messages";
3
+ import * as dotenv from "dotenv";
42
4
  dotenv.config();
43
- function main() {
44
- return __awaiter(this, void 0, void 0, function () {
45
- var model, messagesGrouped, e_1, messagesMidstream, e_2;
46
- return __generator(this, function (_a) {
47
- switch (_a.label) {
48
- case 0:
49
- model = new google_genai_1.ChatGoogleGenerativeAI({
50
- model: "gemini-2.5-flash",
51
- });
52
- messagesGrouped = [
53
- new messages_1.SystemMessage("You are a helpful assistant."),
54
- new messages_1.SystemMessage("Also, be concise."),
55
- new messages_1.HumanMessage("Hello!"),
56
- ];
57
- _a.label = 1;
58
- case 1:
59
- _a.trys.push([1, 3, , 4]);
60
- return [4 /*yield*/, model.invoke(messagesGrouped)];
61
- case 2:
62
- _a.sent();
63
- console.log("Success: Grouped SystemMessages at the start work perfectly.");
64
- return [3 /*break*/, 4];
65
- case 3:
66
- e_1 = _a.sent();
67
- console.error("Grouped systems failed:", e_1.message);
68
- return [3 /*break*/, 4];
69
- case 4:
70
- messagesMidstream = [
71
- new messages_1.SystemMessage("You are a helpful assistant."),
72
- new messages_1.HumanMessage("Hello!"),
73
- new messages_1.SystemMessage("System recovery hint here."),
74
- new messages_1.HumanMessage("What did I say?"),
75
- ];
76
- _a.label = 5;
77
- case 5:
78
- _a.trys.push([5, 7, , 8]);
79
- return [4 /*yield*/, model.invoke(messagesMidstream)];
80
- case 6:
81
- _a.sent();
82
- console.log("Success: Mid-stream SystemMessages work.");
83
- return [3 /*break*/, 8];
84
- case 7:
85
- e_2 = _a.sent();
86
- console.error("Midstream systems failed:", e_2.message);
87
- return [3 /*break*/, 8];
88
- case 8: return [2 /*return*/];
89
- }
90
- });
5
+ async function main() {
6
+ const model = new ChatGoogleGenerativeAI({
7
+ model: "gemini-2.5-flash",
91
8
  });
9
+ const messagesGrouped = [
10
+ new SystemMessage("You are a helpful assistant."),
11
+ new SystemMessage("Also, be concise."),
12
+ new HumanMessage("Hello!"),
13
+ ];
14
+ try {
15
+ await model.invoke(messagesGrouped);
16
+ console.log("Success: Grouped SystemMessages at the start work perfectly.");
17
+ }
18
+ catch (e) {
19
+ console.error("Grouped systems failed:", e.message);
20
+ }
21
+ const messagesMidstream = [
22
+ new SystemMessage("You are a helpful assistant."),
23
+ new HumanMessage("Hello!"),
24
+ new SystemMessage("System recovery hint here."),
25
+ new HumanMessage("What did I say?"),
26
+ ];
27
+ try {
28
+ await model.invoke(messagesMidstream);
29
+ console.log("Success: Mid-stream SystemMessages work.");
30
+ }
31
+ catch (e) {
32
+ console.error("Midstream systems failed:", e.message);
33
+ }
92
34
  }
93
35
  main();
36
+ //# sourceMappingURL=test_google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_google.js","sourceRoot":"","sources":["../src/test_google.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,sBAAsB,CAAC;QACvC,KAAK,EAAE,kBAAkB;KAC1B,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG;QACtB,IAAI,aAAa,CAAC,8BAA8B,CAAC;QACjD,IAAI,aAAa,CAAC,mBAAmB,CAAC;QACtC,IAAI,YAAY,CAAC,QAAQ,CAAC;KAC3B,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,iBAAiB,GAAG;QACxB,IAAI,aAAa,CAAC,8BAA8B,CAAC;QACjD,IAAI,YAAY,CAAC,QAAQ,CAAC;QAC1B,IAAI,aAAa,CAAC,4BAA4B,CAAC;QAC/C,IAAI,YAAY,CAAC,iBAAiB,CAAC;KACpC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -21,6 +21,8 @@ const HOST_TOOLS = new Set([
21
21
  "web_search",
22
22
  "search_skills",
23
23
  "load_skill",
24
+ "spawn_agent",
25
+ "check_agent",
24
26
  ]);
25
27
  /**
26
28
  * Tools that execute inside the sandboxed environment.
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/tools/router.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,mEAAmE;IACnE,2BAAa,CAAA;IACb,yDAAyD;IACzD,iCAAmB,CAAA;AACrB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,YAAY;IACZ,WAAW;IACX,cAAc;IACd,eAAe;IACf,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,eAAe;IACf,YAAY;CACb,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,MAAM;IACN,WAAW;IACX,cAAc;IACd,aAAa;IACb,QAAQ;IACR,eAAe;IACf,UAAU;IACV,SAAS;CACV,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;OAKG;IACH,SAAS,CAAC,QAAgB;QACxB,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,UAAU,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,2EAA2E;QAC3E,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC;IACzD,CAAC;CACF"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/tools/router.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,mEAAmE;IACnE,2BAAa,CAAA;IACb,yDAAyD;IACzD,iCAAmB,CAAA;AACrB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,YAAY;IACZ,WAAW;IACX,cAAc;IACd,eAAe;IACf,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,aAAa;IACb,aAAa;CACd,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,MAAM;IACN,WAAW;IACX,cAAc;IACd,aAAa;IACb,QAAQ;IACR,eAAe;IACf,UAAU;IACV,SAAS;CACV,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;OAKG;IACH,SAAS,CAAC,QAAgB;QACxB,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,UAAU,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,2EAA2E;QAC3E,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Spawn Agent Tools
3
+ *
4
+ * DynamicToolInterface implementations for spawning and checking sub-agents.
5
+ * These tools are registered with the main agent's tool set, allowing the
6
+ * LLM to delegate scoped tasks to isolated sub-agents.
7
+ *
8
+ * Safety: spawn_agent and check_agent are excluded from sub-agent tool sets
9
+ * to enforce the depth-1 nesting limit.
10
+ */
11
+ import { DynamicToolInterface } from "./index.js";
12
+ import { SubAgentManager } from "../core/subAgent.js";
13
+ import { AgentRegistry } from "../agents/agentRegistry.js";
14
+ /**
15
+ * Creates the spawn_agent and check_agent tools bound to a SubAgentManager.
16
+ * The agent registry summary is injected into the spawn_agent description
17
+ * so the LLM knows which agents are available.
18
+ */
19
+ export declare function createSpawnAgentTools(manager: SubAgentManager, registry: AgentRegistry): DynamicToolInterface[];
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Spawn Agent Tools
3
+ *
4
+ * DynamicToolInterface implementations for spawning and checking sub-agents.
5
+ * These tools are registered with the main agent's tool set, allowing the
6
+ * LLM to delegate scoped tasks to isolated sub-agents.
7
+ *
8
+ * Safety: spawn_agent and check_agent are excluded from sub-agent tool sets
9
+ * to enforce the depth-1 nesting limit.
10
+ */
11
+ // ─── Factory ────────────────────────────────────────────────────────────────────
12
+ /**
13
+ * Creates the spawn_agent and check_agent tools bound to a SubAgentManager.
14
+ * The agent registry summary is injected into the spawn_agent description
15
+ * so the LLM knows which agents are available.
16
+ */
17
+ export function createSpawnAgentTools(manager, registry) {
18
+ const agentNames = registry.getNames();
19
+ const agentList = agentNames.join(", ");
20
+ // ─── spawn_agent ───────────────────────────────────────────────────────────
21
+ const SpawnAgentTool = {
22
+ name: "spawn_agent",
23
+ description: `Spawn an isolated sub-agent to handle a scoped task. Available agents: ${agentList}. ` +
24
+ `The sub-agent runs independently with its own conversation and returns a structured result. ` +
25
+ `Use mode "async" for non-blocking execution — you can continue working and check results later with check_agent.`,
26
+ schema: {
27
+ type: "object",
28
+ properties: {
29
+ agent: {
30
+ type: "string",
31
+ description: `The agent name from the registry. Available: ${agentList}`,
32
+ enum: agentNames,
33
+ },
34
+ task: {
35
+ type: "string",
36
+ description: "Detailed description of the task for the sub-agent to complete",
37
+ },
38
+ mode: {
39
+ type: "string",
40
+ enum: ["sync", "async"],
41
+ description: "Execution mode: 'sync' (default, blocks until done) or 'async' (non-blocking, returns taskId)",
42
+ },
43
+ },
44
+ required: ["agent", "task"],
45
+ },
46
+ execute: async (args) => {
47
+ const mode = args.mode ?? "sync";
48
+ if (mode === "async") {
49
+ try {
50
+ const taskId = await manager.spawnAsync(args.agent, args.task);
51
+ return {
52
+ content: `Async sub-agent "${args.agent}" started. Task ID: ${taskId}\n` +
53
+ `Use check_agent with this taskId to get the result when ready.`,
54
+ metadata: { taskId, agentName: args.agent, mode: "async" },
55
+ };
56
+ }
57
+ catch (err) {
58
+ return { content: `Spawn error: ${err.message}`, isError: true };
59
+ }
60
+ }
61
+ // Sync mode (default)
62
+ const result = await manager.spawn(args.agent, args.task);
63
+ return {
64
+ content: formatSubAgentResult(result),
65
+ metadata: {
66
+ agentName: result.agentName,
67
+ outcome: result.outcome,
68
+ toolCalls: result.toolCallCount,
69
+ turnsUsed: result.turnsUsed,
70
+ duration: result.duration,
71
+ },
72
+ isError: result.outcome === "failure",
73
+ };
74
+ },
75
+ };
76
+ // ─── check_agent ───────────────────────────────────────────────────────────
77
+ const CheckAgentTool = {
78
+ name: "check_agent",
79
+ description: "Check the status or retrieve the result of an async sub-agent task. " +
80
+ "If the task is still running, returns a status update. If completed, returns the result.",
81
+ schema: {
82
+ type: "object",
83
+ properties: {
84
+ taskId: {
85
+ type: "string",
86
+ description: "The task ID returned by spawn_agent in async mode",
87
+ },
88
+ },
89
+ required: ["taskId"],
90
+ },
91
+ execute: async (args) => {
92
+ const result = await manager.getResult(args.taskId);
93
+ if (typeof result === "string") {
94
+ // Still running or unknown
95
+ return { content: result };
96
+ }
97
+ // Completed — return formatted result
98
+ return {
99
+ content: formatSubAgentResult(result),
100
+ metadata: {
101
+ agentName: result.agentName,
102
+ outcome: result.outcome,
103
+ toolCalls: result.toolCallCount,
104
+ turnsUsed: result.turnsUsed,
105
+ duration: result.duration,
106
+ },
107
+ isError: result.outcome === "failure",
108
+ };
109
+ },
110
+ };
111
+ return [SpawnAgentTool, CheckAgentTool];
112
+ }
113
+ // ─── Formatter ──────────────────────────────────────────────────────────────────
114
+ /**
115
+ * Formats a SubAgentResult into a readable string for the main agent.
116
+ */
117
+ function formatSubAgentResult(result) {
118
+ const lines = [
119
+ `--- Sub-Agent Result: ${result.agentName} ---`,
120
+ `Outcome: ${result.outcome}`,
121
+ `Turns: ${result.turnsUsed} | Tool Calls: ${result.toolCallCount} | Duration: ${Math.round(result.duration / 1000)}s`,
122
+ `Tokens: ~${result.tokenUsage.prompt} prompt + ~${result.tokenUsage.completion} completion`,
123
+ ];
124
+ if (result.filesModified.length > 0) {
125
+ lines.push(`Files Modified: ${result.filesModified.join(", ")}`);
126
+ }
127
+ lines.push(`\nResult:\n${result.result}`);
128
+ return lines.join("\n");
129
+ }
130
+ //# sourceMappingURL=spawnAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawnAgent.js","sourceRoot":"","sources":["../../src/tools/spawnAgent.ts"],"names":[],"mappings":"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"}
package/dist/ui/App.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
2
+ import React, { useState, useEffect, useMemo } from "react";
3
3
  import { Box, Text, useInput, useApp } from "ink";
4
4
  import TextInput from "ink-text-input";
5
5
  import { Header } from "./components/Header.js";
@@ -11,8 +11,11 @@ import { HITLPrompt } from "./components/HITLPrompt.js";
11
11
  import { countMessageTokens } from "../core/tokenCounter.js";
12
12
  import { HumanMessage } from "@langchain/core/messages";
13
13
  import { HITLBridge, } from "../hitl/bridge.js";
14
+ import { createDefaultRegistry } from "../commands/builtinCommands.js";
14
15
  export const App = ({ provider, model, streaming, harness, initialState, maxTokens, }) => {
15
16
  const { exit } = useApp();
17
+ // Slash Command Registry — initialized once, stable across renders
18
+ const commandRegistry = useMemo(() => createDefaultRegistry(), []);
16
19
  // UI State
17
20
  const [messages, setMessages] = useState([
18
21
  { role: "system", content: "Session started. Type your request below." },
@@ -65,12 +68,42 @@ export const App = ({ provider, model, streaming, harness, initialState, maxToke
65
68
  }, 1000);
66
69
  return () => clearInterval(interval);
67
70
  }, [startTime]);
68
- // Handle Ctrl+C
69
- useInput((input, key) => {
70
- if (key.ctrl && input === "c") {
71
+ // Hold the latest state in a ref for the unmount/signal handlers
72
+ const stateRef = React.useRef(contextState);
73
+ useEffect(() => {
74
+ stateRef.current = contextState;
75
+ }, [contextState]);
76
+ const performGracefulExit = async () => {
77
+ try {
78
+ await harness.autoSave.forceSave({
79
+ config: { provider, model },
80
+ state: stateRef.current,
81
+ });
82
+ }
83
+ catch (e) {
84
+ // Ignore errors during exit
85
+ }
86
+ finally {
71
87
  exit();
72
88
  process.exit(0);
73
89
  }
90
+ };
91
+ useEffect(() => {
92
+ const handleSignal = () => {
93
+ performGracefulExit();
94
+ };
95
+ process.on("SIGINT", handleSignal);
96
+ process.on("SIGTERM", handleSignal);
97
+ return () => {
98
+ process.off("SIGINT", handleSignal);
99
+ process.off("SIGTERM", handleSignal);
100
+ };
101
+ }, [provider, model, harness, exit]);
102
+ // Handle Ctrl+C (Keyboard)
103
+ useInput((input, key) => {
104
+ if (key.ctrl && input === "c") {
105
+ performGracefulExit();
106
+ }
74
107
  });
75
108
  const runAgentLoop = async (currentState) => {
76
109
  try {
@@ -147,11 +180,61 @@ export const App = ({ provider, model, streaming, harness, initialState, maxToke
147
180
  ]);
148
181
  }
149
182
  };
150
- const handleSubmit = (query) => {
183
+ const handleSubmit = async (query) => {
151
184
  if (!query.trim() || isProcessing)
152
185
  return;
153
186
  const userText = query.trim();
154
187
  setInputValue("");
188
+ // ── Slash Command Interception ──
189
+ // Commands starting with "/" are handled locally at zero LLM cost.
190
+ if (commandRegistry.isCommand(userText)) {
191
+ setMessages((prev) => [...prev, { role: "user", content: userText }]);
192
+ const commandContext = {
193
+ config: {
194
+ provider,
195
+ model,
196
+ maxTokens,
197
+ streaming,
198
+ temperature: 0,
199
+ },
200
+ configPath: "",
201
+ harness,
202
+ contextState,
203
+ setContextState,
204
+ addSystemMessage: (content) => {
205
+ setMessages((prev) => [...prev, { role: "system", content }]);
206
+ },
207
+ provider,
208
+ model,
209
+ maxTokens,
210
+ };
211
+ try {
212
+ const result = await commandRegistry.execute(userText, commandContext);
213
+ // Handle /exit signal
214
+ if (result === "__EXIT__") {
215
+ setMessages((prev) => [
216
+ ...prev,
217
+ { role: "system", content: "Goodbye! 👋" },
218
+ ]);
219
+ setTimeout(() => {
220
+ exit();
221
+ process.exit(0);
222
+ }, 500);
223
+ return;
224
+ }
225
+ if (result) {
226
+ setMessages((prev) => [...prev, { role: "system", content: result }]);
227
+ }
228
+ }
229
+ catch (err) {
230
+ setMessages((prev) => [
231
+ ...prev,
232
+ { role: "system", content: `Command error: ${err.message}` },
233
+ ]);
234
+ }
235
+ return;
236
+ }
237
+ // ── Normal Agent Message ──
155
238
  setIsProcessing(true);
156
239
  // 1. Update UI
157
240
  setMessages((prev) => [...prev, { role: "user", content: userText }]);
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "joonecli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "An autonomous coding agent",
5
5
  "main": "dist/cli/index.js",
6
6
  "bin": {
@@ -12,7 +12,8 @@
12
12
  "scripts": {
13
13
  "build": "tsc",
14
14
  "test": "vitest run",
15
- "test:watch": "vitest"
15
+ "test:watch": "vitest",
16
+ "postinstall": "node ./dist/cli/postinstall.js"
16
17
  },
17
18
  "repository": {
18
19
  "type": "git",
package/src/cli/index.ts CHANGED
@@ -278,6 +278,18 @@ program
278
278
  .description("Configure your LLM provider, model, and API key")
279
279
  .action(async () => {
280
280
  await runOnboarding();
281
+
282
+ const startNow = await confirm({
283
+ message: "Would you like to start Joone now?",
284
+ initialValue: true
285
+ });
286
+
287
+ if (startNow && !isCancel(startNow)) {
288
+ // Programmatically invoke the start command
289
+ await program.parseAsync(["node", "joone", "start"]);
290
+ } else {
291
+ console.log(chalk.dim("\n Run `joone` anytime to start an agent session.\n"));
292
+ }
281
293
  });
282
294
 
283
295
  // ─── joone provider ────────────────────────────────────────────────────────────
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+
5
+ // We only want to show the banner on post-install if this is an interactive terminal
6
+ // and we are not in a CI environment.
7
+ if (process.stdout.isTTY && !process.env.CI) {
8
+ // Determine if it was installed globally
9
+ const npmConfigPrefix = process.env.npm_config_global === "true" || process.env.npm_config_global === "";
10
+
11
+ const green = "\x1b[32m";
12
+ const cyan = "\x1b[36m";
13
+ const bold = "\x1b[1m";
14
+ const reset = "\x1b[0m";
15
+
16
+ console.log("");
17
+ console.log(` ╭───────────────────────────────────────────────────╮`);
18
+ console.log(` │ │`);
19
+ console.log(` │ 🚀 ${green}${bold}Joone installed successfully!${reset} │`);
20
+ console.log(` │ │`);
21
+ console.log(` │ To complete setup and start the agent, │`);
22
+ console.log(` │ run the following command in your terminal: │`);
23
+ console.log(` │ │`);
24
+ console.log(` │ $ ${cyan}joone${reset} │`);
25
+ console.log(` │ │`);
26
+ console.log(` ╰───────────────────────────────────────────────────╯`);
27
+ console.log("");
28
+ }
@@ -179,8 +179,8 @@ export class ConversationCompactor {
179
179
  maxSummaryTokens: number
180
180
  ): Promise<string> {
181
181
  // Construct the prompt for the compactor LLM
182
- const compactPrompt = new SystemMessage(
183
- `${COMPACT_SYSTEM_PROMPT}\n\nKeep your summary under ${maxSummaryTokens} tokens.`
182
+ const compactPrompt = new HumanMessage(
183
+ `<system-directive>\n${COMPACT_SYSTEM_PROMPT}\n\nKeep your summary under ${maxSummaryTokens} tokens.\n</system-directive>`
184
184
  );
185
185
 
186
186
  // Convert evicted messages into a readable format for the summarizer
@@ -9,7 +9,7 @@
9
9
  * - 95% (CRITICAL): Forces emergency truncation if compaction fails
10
10
  */
11
11
 
12
- import { BaseMessage, SystemMessage } from "@langchain/core/messages";
12
+ import { BaseMessage, SystemMessage, HumanMessage } from "@langchain/core/messages";
13
13
  import { BaseChatModel } from "@langchain/core/language_models/chat_models";
14
14
  import { Runnable } from "@langchain/core/runnables";
15
15
  import { CacheOptimizedPromptBuilder, ContextState } from "./promptBuilder.js";
@@ -100,11 +100,11 @@ export class ContextGuard {
100
100
  const recentMsgs = state.conversationHistory.slice(-keepLast);
101
101
  const evictedCount = state.conversationHistory.length - keepLast;
102
102
 
103
- const emergencySystemMsg = new SystemMessage(
104
- `[EMERGENCY CONTEXT TRUNCATION]\n` +
103
+ const emergencySystemMsg = new HumanMessage(
104
+ `<system-alert>\n[EMERGENCY CONTEXT TRUNCATION]\n` +
105
105
  `The conversation exceeded the maximum context window (${this.maxTokens} tokens). ` +
106
106
  `Older messages were aggressively deleted without summarization to prevent an immediate crash.\n` +
107
- `You are the same agent. ` + createHandoffPrompt(new Date().toISOString())
107
+ `You are the same agent. ` + createHandoffPrompt(new Date().toISOString()) + `\n</system-alert>`
108
108
  );
109
109
 
110
110
  const newHistory = [emergencySystemMsg, ...recentMsgs];
@@ -71,7 +71,8 @@ export class SessionStore {
71
71
  tool_calls: raw.tool_calls || undefined,
72
72
  });
73
73
  case "system":
74
- return new SystemMessage(raw.content);
74
+ // Remap old saved SystemMessages to HumanMessages to prevent provider index errors
75
+ return new HumanMessage(`<system-reminder>\n${raw.content}\n</system-reminder>`);
75
76
  case "tool":
76
77
  return new ToolMessage({
77
78
  content: raw.content,
@@ -174,8 +174,8 @@ export class SubAgentManager {
174
174
  : this.allTools;
175
175
 
176
176
  // Create isolated conversation history
177
- const systemPrompt = new SystemMessage(
178
- `${spec.systemPrompt}\n\n--- Current Task ---\n${task}`
177
+ const systemPrompt = new HumanMessage(
178
+ `<system-directive>\n${spec.systemPrompt}\n\n--- Current Task ---\n${task}\n</system-directive>`
179
179
  );
180
180
 
181
181
  const history: BaseMessage[] = [
@@ -65,8 +65,8 @@ describe("SessionStore", () => {
65
65
  const history = loaded.state.conversationHistory;
66
66
  expect(history.length).toBe(4);
67
67
 
68
- expect(history[0]).toBeInstanceOf(SystemMessage);
69
- expect(history[0].content).toBe("Injected dynamic system rules.");
68
+ expect(history[0]).toBeInstanceOf(HumanMessage);
69
+ expect(history[0].content).toBe("<system-reminder>\nInjected dynamic system rules.\n</system-reminder>");
70
70
 
71
71
  expect(history[1]).toBeInstanceOf(HumanMessage);
72
72
  expect(history[1].content).toBe("Hello agent!");