@tyvm/knowhow 0.0.138 → 0.0.141
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/autodoc/chat-guide.md +1 -0
- package/package.json +5 -2
- package/scripts/build-for-node.sh +4 -4
- package/src/agents/base/base.ts +254 -29
- package/src/agents/patcher/patcher.ts +1 -1
- package/src/agents/researcher/researcher.ts +2 -2
- package/src/agents/tools/agentCall.ts +6 -0
- package/src/agents/tools/connectAgent.ts +353 -0
- package/src/agents/tools/index.ts +6 -0
- package/src/agents/tools/list.ts +48 -0
- package/src/agents/tools/observe.ts +245 -0
- package/src/agents/tools/replyToParent.ts +122 -0
- package/src/agents/tools/runGenerate.ts +209 -0
- package/src/agents/tools/sendAgentMessage.ts +138 -0
- package/src/agents/tools/startAgentTask.ts +92 -5
- package/src/agents/tools/waitForAgentCompleted.ts +269 -0
- package/src/ai.ts +1 -0
- package/src/chat/modules/AgentModule.ts +89 -27
- package/src/chat/modules/SessionsModule.ts +6 -10
- package/src/clients/contextLimits.ts +26 -0
- package/src/clients/pricing/anthropic.ts +12 -0
- package/src/commands/agent.ts +22 -0
- package/src/commands/agents.ts +83 -0
- package/src/commands/misc.ts +6 -0
- package/src/commands/modules.ts +159 -7
- package/src/commands/services.ts +14 -0
- package/src/generate.ts +25 -3
- package/src/services/AgentService.ts +21 -3
- package/src/services/AgentSyncFs.ts +56 -0
- package/src/services/AgentSyncKnowhowWeb.ts +1 -1
- package/src/services/EventService.ts +4 -1
- package/src/services/KnowhowClient.ts +7 -0
- package/src/services/LazyToolsService.ts +7 -3
- package/src/services/MinimalToolsService.ts +15 -7
- package/src/services/SyncedAgentWatcher.ts +2 -0
- package/src/services/SyncerService.ts +35 -6
- package/src/services/Tools.ts +43 -3
- package/src/services/modules/index.ts +127 -46
- package/src/types.ts +5 -0
- package/tests/agents/interrupt.test.ts +11 -18
- package/tests/agents/observe-base.test.ts +183 -0
- package/tests/agents/tools/connectAgent.test.ts +138 -0
- package/tests/agents/tools/observe.test.ts +179 -0
- package/tests/agents/tools/replyToParent.test.ts +125 -0
- package/tests/agents/tools/sendAgentMessage.test.ts +99 -0
- package/tests/agents/tools/waitForAgentCompleted.test.ts +147 -0
- package/tests/chat/detach-attach-rendering.test.ts +315 -0
- package/tests/clients/contextLimits.test.ts +23 -1
- package/tests/clients/pricing.test.ts +20 -1
- package/tests/services/Tools.test.ts +172 -9
- package/tests/unit/modules/moduleLoading.test.ts +69 -0
- package/ts_build/package.json +5 -2
- package/ts_build/src/agents/base/base.d.ts +24 -1
- package/ts_build/src/agents/base/base.js +111 -16
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/patcher/patcher.js +1 -1
- package/ts_build/src/agents/patcher/patcher.js.map +1 -1
- package/ts_build/src/agents/researcher/researcher.js +2 -2
- package/ts_build/src/agents/researcher/researcher.js.map +1 -1
- package/ts_build/src/agents/tools/agentCall.js.map +1 -1
- package/ts_build/src/agents/tools/connectAgent.d.ts +21 -0
- package/ts_build/src/agents/tools/connectAgent.js +284 -0
- package/ts_build/src/agents/tools/connectAgent.js.map +1 -0
- package/ts_build/src/agents/tools/index.d.ts +6 -0
- package/ts_build/src/agents/tools/index.js +6 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +40 -0
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/observe.d.ts +20 -0
- package/ts_build/src/agents/tools/observe.js +144 -0
- package/ts_build/src/agents/tools/observe.js.map +1 -0
- package/ts_build/src/agents/tools/replyToParent.d.ts +4 -0
- package/ts_build/src/agents/tools/replyToParent.js +118 -0
- package/ts_build/src/agents/tools/replyToParent.js.map +1 -0
- package/ts_build/src/agents/tools/runGenerate.d.ts +19 -0
- package/ts_build/src/agents/tools/runGenerate.js +138 -0
- package/ts_build/src/agents/tools/runGenerate.js.map +1 -0
- package/ts_build/src/agents/tools/sendAgentMessage.d.ts +11 -0
- package/ts_build/src/agents/tools/sendAgentMessage.js +118 -0
- package/ts_build/src/agents/tools/sendAgentMessage.js.map +1 -0
- package/ts_build/src/agents/tools/startAgentTask.d.ts +7 -0
- package/ts_build/src/agents/tools/startAgentTask.js +53 -6
- package/ts_build/src/agents/tools/startAgentTask.js.map +1 -1
- package/ts_build/src/agents/tools/waitForAgentCompleted.d.ts +10 -0
- package/ts_build/src/agents/tools/waitForAgentCompleted.js +229 -0
- package/ts_build/src/agents/tools/waitForAgentCompleted.js.map +1 -0
- package/ts_build/src/ai.d.ts +1 -0
- package/ts_build/src/ai.js.map +1 -1
- package/ts_build/src/chat/modules/AgentModule.d.ts +3 -1
- package/ts_build/src/chat/modules/AgentModule.js +46 -21
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
- package/ts_build/src/chat/modules/SessionsModule.js +1 -6
- package/ts_build/src/chat/modules/SessionsModule.js.map +1 -1
- package/ts_build/src/clients/contextLimits.js +21 -0
- package/ts_build/src/clients/contextLimits.js.map +1 -1
- package/ts_build/src/clients/pricing/anthropic.d.ts +2 -0
- package/ts_build/src/clients/pricing/anthropic.js +9 -0
- package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
- package/ts_build/src/commands/agent.js +11 -0
- package/ts_build/src/commands/agent.js.map +1 -1
- package/ts_build/src/commands/agents.js +61 -0
- package/ts_build/src/commands/agents.js.map +1 -1
- package/ts_build/src/commands/misc.js +2 -0
- package/ts_build/src/commands/misc.js.map +1 -1
- package/ts_build/src/commands/modules.js +86 -7
- package/ts_build/src/commands/modules.js.map +1 -1
- package/ts_build/src/commands/services.js +10 -0
- package/ts_build/src/commands/services.js.map +1 -1
- package/ts_build/src/generate.d.ts +2 -0
- package/ts_build/src/generate.js +11 -3
- package/ts_build/src/generate.js.map +1 -1
- package/ts_build/src/services/AgentService.d.ts +4 -1
- package/ts_build/src/services/AgentService.js +9 -2
- package/ts_build/src/services/AgentService.js.map +1 -1
- package/ts_build/src/services/AgentSyncFs.d.ts +2 -0
- package/ts_build/src/services/AgentSyncFs.js +35 -0
- package/ts_build/src/services/AgentSyncFs.js.map +1 -1
- package/ts_build/src/services/AgentSyncKnowhowWeb.d.ts +1 -1
- package/ts_build/src/services/EventService.d.ts +4 -1
- package/ts_build/src/services/EventService.js.map +1 -1
- package/ts_build/src/services/KnowhowClient.js +3 -0
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/LazyToolsService.d.ts +2 -2
- package/ts_build/src/services/LazyToolsService.js +2 -2
- package/ts_build/src/services/LazyToolsService.js.map +1 -1
- package/ts_build/src/services/MinimalToolsService.d.ts +2 -2
- package/ts_build/src/services/MinimalToolsService.js +6 -6
- package/ts_build/src/services/MinimalToolsService.js.map +1 -1
- package/ts_build/src/services/SyncedAgentWatcher.d.ts +1 -0
- package/ts_build/src/services/SyncedAgentWatcher.js.map +1 -1
- package/ts_build/src/services/SyncerService.d.ts +2 -1
- package/ts_build/src/services/SyncerService.js +8 -2
- package/ts_build/src/services/SyncerService.js.map +1 -1
- package/ts_build/src/services/Tools.d.ts +6 -1
- package/ts_build/src/services/Tools.js +9 -3
- package/ts_build/src/services/Tools.js.map +1 -1
- package/ts_build/src/services/modules/index.d.ts +1 -1
- package/ts_build/src/services/modules/index.js +67 -27
- package/ts_build/src/services/modules/index.js.map +1 -1
- package/ts_build/src/types.d.ts +3 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/tests/agents/interrupt.test.d.ts +0 -1
- package/ts_build/tests/agents/interrupt.test.js +3 -13
- package/ts_build/tests/agents/interrupt.test.js.map +1 -1
- package/ts_build/tests/agents/observe-base.test.d.ts +1 -0
- package/ts_build/tests/agents/observe-base.test.js +149 -0
- package/ts_build/tests/agents/observe-base.test.js.map +1 -0
- package/ts_build/tests/agents/tools/connectAgent.test.d.ts +1 -0
- package/ts_build/tests/agents/tools/connectAgent.test.js +142 -0
- package/ts_build/tests/agents/tools/connectAgent.test.js.map +1 -0
- package/ts_build/tests/agents/tools/observe.test.d.ts +1 -0
- package/ts_build/tests/agents/tools/observe.test.js +148 -0
- package/ts_build/tests/agents/tools/observe.test.js.map +1 -0
- package/ts_build/tests/agents/tools/replyToParent.test.d.ts +1 -0
- package/ts_build/tests/agents/tools/replyToParent.test.js +116 -0
- package/ts_build/tests/agents/tools/replyToParent.test.js.map +1 -0
- package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +1 -0
- package/ts_build/tests/agents/tools/sendAgentMessage.test.js +112 -0
- package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +1 -0
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +1 -0
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +147 -0
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +1 -0
- package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +1 -0
- package/ts_build/tests/chat/detach-attach-rendering.test.js +168 -0
- package/ts_build/tests/chat/detach-attach-rendering.test.js.map +1 -0
- package/ts_build/tests/clients/contextLimits.test.js +11 -1
- package/ts_build/tests/clients/contextLimits.test.js.map +1 -1
- package/ts_build/tests/clients/pricing.test.js +10 -1
- package/ts_build/tests/clients/pricing.test.js.map +1 -1
- package/ts_build/tests/services/Tools.test.js +126 -8
- package/ts_build/tests/services/Tools.test.js.map +1 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.js +84 -0
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
|
@@ -40,6 +40,20 @@ const Module = __importStar(require("module"));
|
|
|
40
40
|
const config_1 = require("../../config");
|
|
41
41
|
const __1 = require("../");
|
|
42
42
|
const utils_1 = require("../../utils");
|
|
43
|
+
function localResolvePaths() {
|
|
44
|
+
return [
|
|
45
|
+
path.join(process.cwd(), ".knowhow", "node_modules"),
|
|
46
|
+
path.join(os.homedir(), ".knowhow", "node_modules"),
|
|
47
|
+
path.join(process.cwd(), "node_modules"),
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
function globalResolvePaths() {
|
|
51
|
+
return [
|
|
52
|
+
path.join(os.homedir(), ".knowhow", "node_modules"),
|
|
53
|
+
path.join(process.cwd(), ".knowhow", "node_modules"),
|
|
54
|
+
path.join(process.cwd(), "node_modules"),
|
|
55
|
+
];
|
|
56
|
+
}
|
|
43
57
|
class ModulesService {
|
|
44
58
|
async getDefaultContext() {
|
|
45
59
|
return { ...(0, __1.services)() };
|
|
@@ -48,7 +62,7 @@ class ModulesService {
|
|
|
48
62
|
const defaultContext = await this.getDefaultContext();
|
|
49
63
|
return { ...defaultContext, ...overrides };
|
|
50
64
|
}
|
|
51
|
-
async loadModulesFrom(config, context) {
|
|
65
|
+
async loadModulesFrom(config, context, resolvePaths = localResolvePaths()) {
|
|
52
66
|
if (!context) {
|
|
53
67
|
context = { ...(await this.getDefaultContext()) };
|
|
54
68
|
}
|
|
@@ -58,38 +72,61 @@ class ModulesService {
|
|
|
58
72
|
globalPaths.unshift(globalKnowhowNodeModules);
|
|
59
73
|
}
|
|
60
74
|
const allModulePaths = config.modules;
|
|
61
|
-
const resolvePaths = [
|
|
62
|
-
path.join(process.cwd(), ".knowhow", "node_modules"),
|
|
63
|
-
path.join(os.homedir(), ".knowhow", "node_modules"),
|
|
64
|
-
path.join(process.cwd(), "node_modules"),
|
|
65
|
-
];
|
|
66
75
|
for (const modulePath of allModulePaths) {
|
|
67
|
-
|
|
76
|
+
const candidates = [];
|
|
68
77
|
if (modulePath.startsWith(".")) {
|
|
69
|
-
|
|
78
|
+
candidates.push(path.resolve(process.cwd(), modulePath));
|
|
70
79
|
}
|
|
71
80
|
else {
|
|
81
|
+
for (const searchPath of resolvePaths) {
|
|
82
|
+
try {
|
|
83
|
+
const resolved = require.resolve(modulePath, {
|
|
84
|
+
paths: [searchPath],
|
|
85
|
+
});
|
|
86
|
+
if (!candidates.includes(resolved))
|
|
87
|
+
candidates.push(resolved);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
}
|
|
91
|
+
}
|
|
72
92
|
try {
|
|
73
|
-
|
|
93
|
+
const resolved = require.resolve(modulePath);
|
|
94
|
+
if (!candidates.includes(resolved))
|
|
95
|
+
candidates.push(resolved);
|
|
74
96
|
}
|
|
75
97
|
catch {
|
|
76
|
-
resolvedPath = modulePath;
|
|
77
98
|
}
|
|
99
|
+
if (candidates.length === 0)
|
|
100
|
+
candidates.push(modulePath);
|
|
78
101
|
}
|
|
79
102
|
let importedModule;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
103
|
+
let loaded = false;
|
|
104
|
+
const errors = [];
|
|
105
|
+
for (const resolvedPath of candidates) {
|
|
106
|
+
try {
|
|
107
|
+
const rawModule = require(resolvedPath);
|
|
108
|
+
importedModule = (rawModule.default || rawModule);
|
|
109
|
+
context.Events?.log("ModulesService", `🔌 Loading module: ${modulePath} (resolved: ${resolvedPath})`);
|
|
110
|
+
await importedModule.init({
|
|
111
|
+
config,
|
|
112
|
+
cwd: process.cwd(),
|
|
113
|
+
context: context,
|
|
114
|
+
});
|
|
115
|
+
context.Events?.log("ModulesService", `✅ Module initialized: ${modulePath} (tools: ${importedModule.tools.length}, agents: ${importedModule.agents.length}, plugins: ${importedModule.plugins.length}, clients: ${importedModule.clients.length})`);
|
|
116
|
+
loaded = true;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
errors.push({ candidate: resolvedPath, error: err });
|
|
121
|
+
}
|
|
90
122
|
}
|
|
91
|
-
|
|
92
|
-
|
|
123
|
+
if (!loaded) {
|
|
124
|
+
const last = errors[errors.length - 1];
|
|
125
|
+
const detail = last
|
|
126
|
+
? `${last.error.message}`
|
|
127
|
+
: "no resolvable module found";
|
|
128
|
+
process.stderr.write(`\n⚠️ Failed to load module "${modulePath}": ${detail}\n` +
|
|
129
|
+
` Tried: ${candidates.join(", ") || "(none)"}\n` +
|
|
93
130
|
` Run "knowhow modules setup --global" or "knowhow modules install ${modulePath} --global" to fix this.\n\n`);
|
|
94
131
|
continue;
|
|
95
132
|
}
|
|
@@ -120,11 +157,14 @@ class ModulesService {
|
|
|
120
157
|
async loadModulesFromConfig(context) {
|
|
121
158
|
const config = await (0, config_1.getConfig)();
|
|
122
159
|
const globalConfig = await (0, config_1.getGlobalConfig)();
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
160
|
+
const globalModules = (0, utils_1.toUniqueArray)(globalConfig.modules || []);
|
|
161
|
+
const localModules = (0, utils_1.toUniqueArray)(config.modules || []).filter((m) => !globalModules.includes(m));
|
|
162
|
+
if (globalModules.length > 0) {
|
|
163
|
+
await this.loadModulesFrom({ ...config, modules: globalModules }, context, globalResolvePaths());
|
|
164
|
+
}
|
|
165
|
+
if (localModules.length > 0) {
|
|
166
|
+
await this.loadModulesFrom({ ...config, modules: localModules }, context, localResolvePaths());
|
|
167
|
+
}
|
|
128
168
|
}
|
|
129
169
|
}
|
|
130
170
|
exports.ModulesService = ModulesService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/modules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AAEjC,yCAA0D;AAE1D,2BAA+B;AAC/B,uCAA4C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/modules/index.ts"],"names":[],"mappings":"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"}
|
package/ts_build/src/types.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export type GenerationSource = {
|
|
|
18
18
|
outputExt?: string;
|
|
19
19
|
outputName?: string;
|
|
20
20
|
syncFs?: boolean;
|
|
21
|
+
syncRemote?: boolean;
|
|
21
22
|
taskId?: string;
|
|
22
23
|
maxTimeLimit?: number;
|
|
23
24
|
maxSpendLimit?: number;
|
|
@@ -191,6 +192,8 @@ export declare const Models: {
|
|
|
191
192
|
readonly Sonnet5: "claude-sonnet-5";
|
|
192
193
|
readonly Mythos5: "claude-mythos-5";
|
|
193
194
|
readonly MythosPreview: "claude-mythos-preview";
|
|
195
|
+
readonly Opus5: "claude-opus-5";
|
|
196
|
+
readonly Opus5Fast: "claude-opus-5-fast";
|
|
194
197
|
readonly Opus4_8: "claude-opus-4-8";
|
|
195
198
|
readonly Opus4_8Fast: "claude-opus-4-8-fast";
|
|
196
199
|
readonly Opus4_7: "claude-opus-4-7";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAyPA,8CAGC;AAED,gDAGC;AAhDD,2DAAmF;AAoCjF,oGApCwB,+BAAmB,OAoCxB;AAnCrB,qDAKkC;AAwBhC,sGA3BA,8BAAqB,OA2BA;AAAE,iGA3BA,yBAAgB,OA2BA;AAAE,0GA3BA,kCAAyB,OA2BA;AAClE,0GA3BA,kCAAyB,OA2BA;AAAE,kGA3BA,0BAAiB,OA2BA;AAAE,kGA3BA,0BAAiB,OA2BA;AAC/D,gGA3BA,wBAAe,OA2BA;AAAE,0GA3BA,kCAAyB,OA2BA;AAAE,qGA3BA,6BAAoB,OA2BA;AAzBlE,qDAIkC;AAsBZ,sGAxBpB,yBAAgB,OAwByB;AACzC,kGAzBkB,0BAAiB,OAyBlB;AAAE,kGAzBkB,0BAAiB,OAyBlB;AAAE,gGAxBtC,wBAAe,OAwBsC;AAAE,0GAxBtC,kCAAyB,OAwBsC;AAChF,0GAzB4C,kCAAyB,OAyB5C;AAAE,2GAzB4C,mCAA0B,OAyB5C;AAvBvD,+CAE+B;AAuB7B,8FAxBW,mBAAa,OAwBX;AAAE,+FAxBW,oBAAc,OAwBX;AAAE,+FAxBW,oBAAc,OAwBX;AAAE,uGAxBW,4BAAsB,OAwBX;AAAE,mGAxBW,wBAAkB,OAwBX;AArB9E,QAAA,MAAM,GAAG;IACpB,SAAS,EAAE,2BAAe;IAC1B,GAAG,EAAE,eAAS;IACd,MAAM,EAAE,qBAAY;IACpB,MAAM,EAAE,qBAAY;CACrB,CAAC;AAEW,QAAA,eAAe,GAAG;IAC7B,MAAM,EAAE,8BAAqB;IAC7B,MAAM,EAAE,8BAAqB;CAC9B,CAAC;AAcF,SAAgB,iBAAiB,CAAC,OAAsC;IACtE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAsC;IACvE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AAChC,CAAC;AAEY,QAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/D,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACf,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAA0D,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
class InterruptHarness {
|
|
2
2
|
_interruptResolve = null;
|
|
3
3
|
_interruptToken = 0;
|
|
4
|
-
_pendingInterrupt = false;
|
|
5
4
|
pendingUserMessages = [];
|
|
6
5
|
addPendingUserMessage(m) {
|
|
7
6
|
this.pendingUserMessages.push(m);
|
|
@@ -20,11 +19,6 @@ class InterruptHarness {
|
|
|
20
19
|
fn();
|
|
21
20
|
};
|
|
22
21
|
this._interruptResolve = () => finish(() => resolve(interruptValue));
|
|
23
|
-
if (this._pendingInterrupt) {
|
|
24
|
-
this._pendingInterrupt = false;
|
|
25
|
-
finish(() => resolve(interruptValue));
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
22
|
promise
|
|
29
23
|
.then((result) => {
|
|
30
24
|
finish(() => resolve(result));
|
|
@@ -44,9 +38,6 @@ class InterruptHarness {
|
|
|
44
38
|
if (this._interruptResolve) {
|
|
45
39
|
this._interruptResolve();
|
|
46
40
|
}
|
|
47
|
-
else {
|
|
48
|
-
this._pendingInterrupt = true;
|
|
49
|
-
}
|
|
50
41
|
}
|
|
51
42
|
get hasActiveResolver() {
|
|
52
43
|
return this._interruptResolve !== null;
|
|
@@ -105,15 +96,14 @@ describe("BaseAgent interrupt / makeInterruptible", () => {
|
|
|
105
96
|
nextOp.resolve("fresh-result");
|
|
106
97
|
await expect(w2).resolves.toBe("fresh-result");
|
|
107
98
|
});
|
|
108
|
-
test("interrupt() with no active window is
|
|
99
|
+
test("interrupt() with no active window is a no-op (NOT queued)", async () => {
|
|
109
100
|
const h = new InterruptHarness();
|
|
110
101
|
expect(h.hasActiveResolver).toBe(false);
|
|
111
102
|
h.interrupt();
|
|
112
103
|
const op = deferred();
|
|
113
104
|
const w = h.makeInterruptible(op.promise, "INT");
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
await op.promise;
|
|
105
|
+
op.resolve("real-result");
|
|
106
|
+
await expect(w).resolves.toBe("real-result");
|
|
117
107
|
});
|
|
118
108
|
test("errors propagate when not interrupted", async () => {
|
|
119
109
|
const h = new InterruptHarness();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interrupt.test.js","sourceRoot":"","sources":["../../../tests/agents/interrupt.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interrupt.test.js","sourceRoot":"","sources":["../../../tests/agents/interrupt.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const base_1 = require("../../src/agents/base/base");
|
|
4
|
+
const flush = () => new Promise((r) => setTimeout(r, 0));
|
|
5
|
+
function makeStubs() {
|
|
6
|
+
const events = {
|
|
7
|
+
setListener: () => { },
|
|
8
|
+
emit: () => { },
|
|
9
|
+
on: () => { },
|
|
10
|
+
};
|
|
11
|
+
const tools = {
|
|
12
|
+
getContext: () => ({}),
|
|
13
|
+
callTool: async () => "",
|
|
14
|
+
};
|
|
15
|
+
return { events, tools };
|
|
16
|
+
}
|
|
17
|
+
class TestAgent extends base_1.BaseAgent {
|
|
18
|
+
name = "TestAgent";
|
|
19
|
+
description = "test";
|
|
20
|
+
constructor() {
|
|
21
|
+
const { events, tools } = makeStubs();
|
|
22
|
+
super({ Tools: tools, Events: events });
|
|
23
|
+
this.status = this.eventTypes.inProgress;
|
|
24
|
+
}
|
|
25
|
+
async getInitialMessages() {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
get delivered() {
|
|
29
|
+
return this.pendingMessages;
|
|
30
|
+
}
|
|
31
|
+
setStatus(s) {
|
|
32
|
+
this.status = s;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function manualSource(label) {
|
|
36
|
+
let emitFn;
|
|
37
|
+
const state = { torndown: false };
|
|
38
|
+
const source = {
|
|
39
|
+
label,
|
|
40
|
+
start(emit) {
|
|
41
|
+
emitFn = emit;
|
|
42
|
+
return () => {
|
|
43
|
+
state.torndown = true;
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
source,
|
|
49
|
+
push: (d) => emitFn && emitFn(d),
|
|
50
|
+
state,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
describe("BaseAgent.observe / stopObserving", () => {
|
|
54
|
+
it("delivers emitted data as pending messages", () => {
|
|
55
|
+
const agent = new TestAgent();
|
|
56
|
+
const { source, push } = manualSource("thing");
|
|
57
|
+
const id = agent.observe(source);
|
|
58
|
+
expect(id).toMatch(/^obs_thing_/);
|
|
59
|
+
push("hello");
|
|
60
|
+
expect(agent.delivered.length).toBe(1);
|
|
61
|
+
expect(String(agent.delivered[0].content)).toContain("hello");
|
|
62
|
+
expect(String(agent.delivered[0].content)).toContain(`[observe:${id}]`);
|
|
63
|
+
agent.stopObserving();
|
|
64
|
+
});
|
|
65
|
+
it("dedupes identical consecutive data with onlyOnChange (default)", () => {
|
|
66
|
+
const agent = new TestAgent();
|
|
67
|
+
const { source, push } = manualSource("dup");
|
|
68
|
+
agent.observe(source);
|
|
69
|
+
push("a");
|
|
70
|
+
push("a");
|
|
71
|
+
push("b");
|
|
72
|
+
expect(agent.delivered.length).toBe(2);
|
|
73
|
+
agent.stopObserving();
|
|
74
|
+
});
|
|
75
|
+
it("delivers every emit when onlyOnChange is false", () => {
|
|
76
|
+
const agent = new TestAgent();
|
|
77
|
+
const { source, push } = manualSource("nochange");
|
|
78
|
+
agent.observe(source, { onlyOnChange: false });
|
|
79
|
+
push("x1");
|
|
80
|
+
push("x2");
|
|
81
|
+
push("x3");
|
|
82
|
+
expect(agent.delivered.length).toBe(3);
|
|
83
|
+
agent.stopObserving();
|
|
84
|
+
});
|
|
85
|
+
it("auto-stops after maxUpdates and runs teardown", async () => {
|
|
86
|
+
const agent = new TestAgent();
|
|
87
|
+
const { source, push, state } = manualSource("cap");
|
|
88
|
+
agent.observe(source, { maxUpdates: 2 });
|
|
89
|
+
push("1");
|
|
90
|
+
push("2");
|
|
91
|
+
push("3");
|
|
92
|
+
expect(agent.delivered.length).toBe(2);
|
|
93
|
+
await flush();
|
|
94
|
+
expect(state.torndown).toBe(true);
|
|
95
|
+
agent.stopObserving();
|
|
96
|
+
});
|
|
97
|
+
it("stopObserving(id) cancels one observer and tears it down", async () => {
|
|
98
|
+
const agent = new TestAgent();
|
|
99
|
+
const a = manualSource("a");
|
|
100
|
+
const b = manualSource("b");
|
|
101
|
+
const idA = agent.observe(a.source);
|
|
102
|
+
agent.observe(b.source);
|
|
103
|
+
const res = agent.stopObserving(idA);
|
|
104
|
+
expect(res).toContain(`Stopped observer ${idA}`);
|
|
105
|
+
await flush();
|
|
106
|
+
expect(a.state.torndown).toBe(true);
|
|
107
|
+
expect(b.state.torndown).toBe(false);
|
|
108
|
+
b.push("still here");
|
|
109
|
+
expect(agent.delivered.some((m) => String(m.content).includes("still here"))).toBe(true);
|
|
110
|
+
agent.stopObserving();
|
|
111
|
+
});
|
|
112
|
+
it("stopObserving() with no id cancels all", async () => {
|
|
113
|
+
const agent = new TestAgent();
|
|
114
|
+
const a = manualSource("a");
|
|
115
|
+
const b = manualSource("b");
|
|
116
|
+
agent.observe(a.source);
|
|
117
|
+
agent.observe(b.source);
|
|
118
|
+
const res = agent.stopObserving();
|
|
119
|
+
expect(res).toMatch(/Stopped 2 active observer/);
|
|
120
|
+
await flush();
|
|
121
|
+
expect(a.state.torndown).toBe(true);
|
|
122
|
+
expect(b.state.torndown).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
it("is scoped per-agent — one agent's stopObserving does not affect another", async () => {
|
|
125
|
+
const agentA = new TestAgent();
|
|
126
|
+
const agentB = new TestAgent();
|
|
127
|
+
const sa = manualSource("sa");
|
|
128
|
+
const sb = manualSource("sb");
|
|
129
|
+
agentA.observe(sa.source);
|
|
130
|
+
agentB.observe(sb.source);
|
|
131
|
+
agentA.stopObserving();
|
|
132
|
+
await flush();
|
|
133
|
+
expect(sa.state.torndown).toBe(true);
|
|
134
|
+
expect(sb.state.torndown).toBe(false);
|
|
135
|
+
sb.push("b-data");
|
|
136
|
+
expect(agentB.delivered.some((m) => String(m.content).includes("b-data"))).toBe(true);
|
|
137
|
+
agentB.stopObserving();
|
|
138
|
+
});
|
|
139
|
+
it("does not inject data once the agent is done", () => {
|
|
140
|
+
const agent = new TestAgent();
|
|
141
|
+
const { source, push } = manualSource("late");
|
|
142
|
+
agent.observe(source);
|
|
143
|
+
agent.setStatus(agent.eventTypes.done);
|
|
144
|
+
push("too late");
|
|
145
|
+
expect(agent.delivered.length).toBe(0);
|
|
146
|
+
agent.stopObserving();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=observe-base.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-base.test.js","sourceRoot":"","sources":["../../../tests/agents/observe-base.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const connectAgent_1 = require("../../../src/agents/tools/connectAgent");
|
|
40
|
+
describe("connectAgent / stopConnections", () => {
|
|
41
|
+
let tmpCwd;
|
|
42
|
+
let originalCwd;
|
|
43
|
+
let agentsDir;
|
|
44
|
+
const delay = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
originalCwd = process.cwd();
|
|
47
|
+
tmpCwd = fs.mkdtempSync(path.join(os.tmpdir(), "connect-agent-"));
|
|
48
|
+
process.chdir(tmpCwd);
|
|
49
|
+
agentsDir = path.join(tmpCwd, ".knowhow", "processes", "agents");
|
|
50
|
+
fs.mkdirSync(agentsDir, { recursive: true });
|
|
51
|
+
});
|
|
52
|
+
afterEach(async () => {
|
|
53
|
+
await (0, connectAgent_1.stopConnections)({});
|
|
54
|
+
process.chdir(originalCwd);
|
|
55
|
+
fs.rmSync(tmpCwd, { recursive: true, force: true });
|
|
56
|
+
});
|
|
57
|
+
function makeTask(taskId, threads = []) {
|
|
58
|
+
const dir = path.join(agentsDir, taskId);
|
|
59
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
60
|
+
writeThreads(taskId, threads);
|
|
61
|
+
return dir;
|
|
62
|
+
}
|
|
63
|
+
function writeThreads(taskId, threads, extra = {}) {
|
|
64
|
+
fs.writeFileSync(path.join(agentsDir, taskId, "metadata.json"), JSON.stringify({ taskId, threads, ...extra }, null, 2), "utf8");
|
|
65
|
+
}
|
|
66
|
+
function readInput(taskId) {
|
|
67
|
+
const p = path.join(agentsDir, taskId, "input.txt");
|
|
68
|
+
return fs.existsSync(p) ? fs.readFileSync(p, "utf8") : "";
|
|
69
|
+
}
|
|
70
|
+
it("rejects empty connections array", async () => {
|
|
71
|
+
const res = await (0, connectAgent_1.connectAgent)({ connections: [] });
|
|
72
|
+
expect(res).toMatch(/non-empty array/);
|
|
73
|
+
});
|
|
74
|
+
it("reports missing task dirs but still wires valid ones", async () => {
|
|
75
|
+
makeTask("a");
|
|
76
|
+
const res = await (0, connectAgent_1.connectAgent)({
|
|
77
|
+
connections: [
|
|
78
|
+
{ listener: "a", speaker: "missing" },
|
|
79
|
+
{ listener: "a", speaker: "a" },
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
expect(res).toMatch(/speaker task dir not found: missing/);
|
|
83
|
+
expect(res).toMatch(/self-connection for a/);
|
|
84
|
+
});
|
|
85
|
+
it("relays only NEW assistant messages from speaker to listener", async () => {
|
|
86
|
+
makeTask("listener", []);
|
|
87
|
+
makeTask("speaker", [
|
|
88
|
+
{ role: "assistant", content: "old message" },
|
|
89
|
+
]);
|
|
90
|
+
await (0, connectAgent_1.connectAgent)({
|
|
91
|
+
connections: [{ listener: "listener", speaker: "speaker" }],
|
|
92
|
+
intervalMs: 1000,
|
|
93
|
+
});
|
|
94
|
+
writeThreads("speaker", [
|
|
95
|
+
{ role: "assistant", content: "old message" },
|
|
96
|
+
{ role: "assistant", content: "new insight" },
|
|
97
|
+
]);
|
|
98
|
+
await delay(1300);
|
|
99
|
+
const input = readInput("listener");
|
|
100
|
+
expect(input).toContain("[from:speaker] new insight");
|
|
101
|
+
expect(input).not.toContain("old message");
|
|
102
|
+
});
|
|
103
|
+
it("supports bidirectional in a single call (array of connections)", async () => {
|
|
104
|
+
makeTask("a", []);
|
|
105
|
+
makeTask("b", []);
|
|
106
|
+
await (0, connectAgent_1.connectAgent)({
|
|
107
|
+
connections: [
|
|
108
|
+
{ listener: "a", speaker: "b" },
|
|
109
|
+
{ listener: "b", speaker: "a" },
|
|
110
|
+
],
|
|
111
|
+
intervalMs: 1000,
|
|
112
|
+
});
|
|
113
|
+
writeThreads("a", [{ role: "assistant", content: "from A" }]);
|
|
114
|
+
writeThreads("b", [{ role: "assistant", content: "from B" }]);
|
|
115
|
+
await delay(1300);
|
|
116
|
+
expect(readInput("a")).toContain("[from:b] from B");
|
|
117
|
+
expect(readInput("b")).toContain("[from:a] from A");
|
|
118
|
+
});
|
|
119
|
+
it("stops a specific connection by id", async () => {
|
|
120
|
+
makeTask("l", []);
|
|
121
|
+
makeTask("s", []);
|
|
122
|
+
const res = await (0, connectAgent_1.connectAgent)({
|
|
123
|
+
connections: [{ listener: "l", speaker: "s" }],
|
|
124
|
+
intervalMs: 1000,
|
|
125
|
+
});
|
|
126
|
+
const idMatch = res.match(/conn_[A-Za-z0-9_]+/);
|
|
127
|
+
expect(idMatch).toBeTruthy();
|
|
128
|
+
const stopRes = await (0, connectAgent_1.stopConnections)({ id: idMatch[0] });
|
|
129
|
+
expect(stopRes).toMatch(/Stopped connection/);
|
|
130
|
+
});
|
|
131
|
+
it("stopConnections() with no id stops all", async () => {
|
|
132
|
+
makeTask("l2", []);
|
|
133
|
+
makeTask("s2", []);
|
|
134
|
+
await (0, connectAgent_1.connectAgent)({
|
|
135
|
+
connections: [{ listener: "l2", speaker: "s2" }],
|
|
136
|
+
intervalMs: 1000,
|
|
137
|
+
});
|
|
138
|
+
const res = await (0, connectAgent_1.stopConnections)({});
|
|
139
|
+
expect(res).toMatch(/Stopped 1 active connection/);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=connectAgent.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectAgent.test.js","sourceRoot":"","sources":["../../../../tests/agents/tools/connectAgent.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|