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.
- package/README.md +12 -12
- package/dist/__tests__/optimizations.test.js.map +1 -1
- package/dist/__tests__/promptBuilder.test.js +14 -20
- package/dist/__tests__/promptBuilder.test.js.map +1 -1
- package/dist/agents/agentRegistry.d.ts +37 -0
- package/dist/agents/agentRegistry.js +58 -0
- package/dist/agents/agentRegistry.js.map +1 -0
- package/dist/agents/agentSpec.d.ts +54 -0
- package/dist/agents/agentSpec.js +9 -0
- package/dist/agents/agentSpec.js.map +1 -0
- package/dist/agents/builtinAgents.d.ts +20 -0
- package/dist/agents/builtinAgents.js +125 -0
- package/dist/agents/builtinAgents.js.map +1 -0
- package/dist/cli/config.d.ts +4 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +25 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall.d.ts +2 -0
- package/dist/cli/postinstall.js +25 -0
- package/dist/cli/postinstall.js.map +1 -0
- package/dist/commands/builtinCommands.d.ts +21 -0
- package/dist/commands/builtinCommands.js +241 -0
- package/dist/commands/builtinCommands.js.map +1 -0
- package/dist/commands/commandRegistry.d.ts +90 -0
- package/dist/commands/commandRegistry.js +128 -0
- package/dist/commands/commandRegistry.js.map +1 -0
- package/dist/core/agentLoop.d.ts +4 -1
- package/dist/core/agentLoop.js +21 -9
- package/dist/core/agentLoop.js.map +1 -1
- package/dist/core/autoSave.d.ts +41 -0
- package/dist/core/autoSave.js +69 -0
- package/dist/core/autoSave.js.map +1 -0
- package/dist/core/compactor.d.ts +66 -0
- package/dist/core/compactor.js +170 -0
- package/dist/core/compactor.js.map +1 -0
- package/dist/core/contextGuard.d.ts +33 -0
- package/dist/core/contextGuard.js +95 -0
- package/dist/core/contextGuard.js.map +1 -0
- package/dist/core/promptBuilder.d.ts +16 -1
- package/dist/core/promptBuilder.js +27 -14
- package/dist/core/promptBuilder.js.map +1 -1
- package/dist/core/sessionResumer.js +3 -3
- package/dist/core/sessionResumer.js.map +1 -1
- package/dist/core/subAgent.d.ts +56 -0
- package/dist/core/subAgent.js +240 -0
- package/dist/core/subAgent.js.map +1 -0
- package/dist/debug_google.d.ts +1 -0
- package/dist/debug_google.js +23 -0
- package/dist/debug_google.js.map +1 -0
- package/dist/test_google.d.ts +1 -0
- package/dist/test_google.js +32 -89
- package/dist/test_google.js.map +1 -0
- package/dist/tools/router.js +2 -0
- package/dist/tools/router.js.map +1 -1
- package/dist/tools/spawnAgent.d.ts +19 -0
- package/dist/tools/spawnAgent.js +130 -0
- package/dist/tools/spawnAgent.js.map +1 -0
- package/dist/ui/App.js +88 -5
- package/dist/ui/App.js.map +1 -1
- package/package.json +3 -2
- package/src/cli/index.ts +12 -0
- package/src/cli/postinstall.ts +28 -0
- package/src/core/compactor.ts +2 -2
- package/src/core/contextGuard.ts +4 -4
- package/src/core/sessionStore.ts +2 -1
- package/src/core/subAgent.ts +2 -2
- package/tests/core/sessionStore.test.ts +2 -2
- package/src/test_google.js +0 -40
- package/src/test_google.ts +0 -40
package/dist/test_google.js
CHANGED
|
@@ -1,93 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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"}
|
package/dist/tools/router.js
CHANGED
package/dist/tools/router.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
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 }]);
|
package/dist/ui/App.js.map
CHANGED
|
@@ -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.
|
|
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
|
+
}
|
package/src/core/compactor.ts
CHANGED
|
@@ -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
|
|
183
|
-
|
|
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
|
package/src/core/contextGuard.ts
CHANGED
|
@@ -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
|
|
104
|
-
|
|
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];
|
package/src/core/sessionStore.ts
CHANGED
|
@@ -71,7 +71,8 @@ export class SessionStore {
|
|
|
71
71
|
tool_calls: raw.tool_calls || undefined,
|
|
72
72
|
});
|
|
73
73
|
case "system":
|
|
74
|
-
|
|
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,
|
package/src/core/subAgent.ts
CHANGED
|
@@ -174,8 +174,8 @@ export class SubAgentManager {
|
|
|
174
174
|
: this.allTools;
|
|
175
175
|
|
|
176
176
|
// Create isolated conversation history
|
|
177
|
-
const systemPrompt = new
|
|
178
|
-
|
|
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(
|
|
69
|
-
expect(history[0].content).toBe("
|
|
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!");
|