@chozzz/vargos 2.0.6 → 2.0.8
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/dist/cli.js +14 -5
- package/dist/cli.js.map +1 -1
- package/dist/edge/mcp/index.d.ts +33 -0
- package/dist/edge/mcp/index.d.ts.map +1 -0
- package/dist/edge/mcp/index.js +217 -0
- package/dist/edge/mcp/index.js.map +1 -0
- package/dist/edge/webhooks/index.d.ts +33 -0
- package/dist/edge/webhooks/index.d.ts.map +1 -0
- package/dist/edge/webhooks/index.js +231 -0
- package/dist/edge/webhooks/index.js.map +1 -0
- package/dist/edge/webhooks/transform.d.ts +8 -0
- package/dist/edge/webhooks/transform.d.ts.map +1 -0
- package/dist/edge/webhooks/transform.js +29 -0
- package/dist/edge/webhooks/transform.js.map +1 -0
- package/dist/gateway/bus.d.ts +48 -0
- package/dist/gateway/bus.d.ts.map +1 -0
- package/dist/gateway/bus.js +2 -0
- package/dist/gateway/bus.js.map +1 -0
- package/dist/gateway/decorators.d.ts +40 -0
- package/dist/gateway/decorators.d.ts.map +1 -0
- package/dist/gateway/decorators.js +43 -0
- package/dist/gateway/decorators.js.map +1 -0
- package/dist/gateway/emitter.d.ts +42 -0
- package/dist/gateway/emitter.d.ts.map +1 -0
- package/dist/gateway/emitter.js +259 -0
- package/dist/gateway/emitter.js.map +1 -0
- package/dist/gateway/events.d.ts +343 -0
- package/dist/gateway/events.d.ts.map +1 -0
- package/dist/gateway/events.js +7 -0
- package/dist/gateway/events.js.map +1 -0
- package/dist/gateway/tcp-server.d.ts +7 -0
- package/dist/gateway/tcp-server.d.ts.map +1 -0
- package/dist/gateway/tcp-server.js +115 -0
- package/dist/gateway/tcp-server.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/scripts/migrate-cron-sessions.d.ts +10 -0
- package/dist/scripts/migrate-cron-sessions.d.ts.map +1 -0
- package/dist/scripts/migrate-cron-sessions.js +139 -0
- package/dist/scripts/migrate-cron-sessions.js.map +1 -0
- package/dist/scripts/seed.d.ts +2 -0
- package/dist/scripts/seed.d.ts.map +1 -0
- package/dist/scripts/seed.js +4 -0
- package/dist/scripts/seed.js.map +1 -0
- package/dist/services/agent/directives.d.ts +14 -0
- package/dist/services/agent/directives.d.ts.map +1 -0
- package/dist/services/agent/directives.js +32 -0
- package/dist/services/agent/directives.js.map +1 -0
- package/dist/services/agent/index.d.ts +104 -0
- package/dist/services/agent/index.d.ts.map +1 -0
- package/dist/services/agent/index.js +534 -0
- package/dist/services/agent/index.js.map +1 -0
- package/dist/services/agent/persona.d.ts +15 -0
- package/dist/services/agent/persona.d.ts.map +1 -0
- package/dist/services/agent/persona.js +63 -0
- package/dist/services/agent/persona.js.map +1 -0
- package/dist/services/agent/prompt-interpolate.d.ts +41 -0
- package/dist/services/agent/prompt-interpolate.d.ts.map +1 -0
- package/dist/services/agent/prompt-interpolate.js +102 -0
- package/dist/services/agent/prompt-interpolate.js.map +1 -0
- package/dist/services/agent/schema.d.ts +10 -0
- package/dist/services/agent/schema.d.ts.map +1 -0
- package/dist/services/agent/schema.js +5 -0
- package/dist/services/agent/schema.js.map +1 -0
- package/dist/services/agent/tools.d.ts +26 -0
- package/dist/services/agent/tools.d.ts.map +1 -0
- package/dist/services/agent/tools.js +85 -0
- package/dist/services/agent/tools.js.map +1 -0
- package/dist/services/channels/base-adapter.d.ts +61 -0
- package/dist/services/channels/base-adapter.d.ts.map +1 -0
- package/dist/services/channels/base-adapter.js +181 -0
- package/dist/services/channels/base-adapter.js.map +1 -0
- package/dist/services/channels/contracts.d.ts +75 -0
- package/dist/services/channels/contracts.d.ts.map +1 -0
- package/dist/services/channels/contracts.js +6 -0
- package/dist/services/channels/contracts.js.map +1 -0
- package/dist/services/channels/debounce.d.ts +22 -0
- package/dist/services/channels/debounce.d.ts.map +1 -0
- package/dist/services/channels/debounce.js +53 -0
- package/dist/services/channels/debounce.js.map +1 -0
- package/dist/services/channels/dedupe.d.ts +19 -0
- package/dist/services/channels/dedupe.d.ts.map +1 -0
- package/dist/services/channels/dedupe.js +52 -0
- package/dist/services/channels/dedupe.js.map +1 -0
- package/dist/services/channels/delivery.d.ts +12 -0
- package/dist/services/channels/delivery.d.ts.map +1 -0
- package/dist/services/channels/delivery.js +53 -0
- package/dist/services/channels/delivery.js.map +1 -0
- package/dist/services/channels/index.d.ts +53 -0
- package/dist/services/channels/index.d.ts.map +1 -0
- package/dist/services/channels/index.js +405 -0
- package/dist/services/channels/index.js.map +1 -0
- package/dist/services/channels/link-expand.d.ts +8 -0
- package/dist/services/channels/link-expand.d.ts.map +1 -0
- package/dist/services/channels/link-expand.js +28 -0
- package/dist/services/channels/link-expand.js.map +1 -0
- package/dist/services/channels/media-extract.d.ts +7 -0
- package/dist/services/channels/media-extract.d.ts.map +1 -0
- package/dist/services/channels/media-extract.js +31 -0
- package/dist/services/channels/media-extract.js.map +1 -0
- package/dist/services/channels/pipeline.d.ts +29 -0
- package/dist/services/channels/pipeline.d.ts.map +1 -0
- package/dist/services/channels/pipeline.js +120 -0
- package/dist/services/channels/pipeline.js.map +1 -0
- package/dist/services/channels/provider-loader.d.ts +7 -0
- package/dist/services/channels/provider-loader.d.ts.map +1 -0
- package/dist/services/channels/provider-loader.js +13 -0
- package/dist/services/channels/provider-loader.js.map +1 -0
- package/dist/services/channels/providers/telegram/adapter.d.ts +34 -0
- package/dist/services/channels/providers/telegram/adapter.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/adapter.js +278 -0
- package/dist/services/channels/providers/telegram/adapter.js.map +1 -0
- package/dist/services/channels/providers/telegram/index.d.ts +11 -0
- package/dist/services/channels/providers/telegram/index.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/index.js +11 -0
- package/dist/services/channels/providers/telegram/index.js.map +1 -0
- package/dist/services/channels/providers/telegram/normalizer.d.ts +12 -0
- package/dist/services/channels/providers/telegram/normalizer.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/normalizer.js +50 -0
- package/dist/services/channels/providers/telegram/normalizer.js.map +1 -0
- package/dist/services/channels/providers/telegram/types.d.ts +72 -0
- package/dist/services/channels/providers/telegram/types.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/types.js +3 -0
- package/dist/services/channels/providers/telegram/types.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/adapter.d.ts +36 -0
- package/dist/services/channels/providers/whatsapp/adapter.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/adapter.js +261 -0
- package/dist/services/channels/providers/whatsapp/adapter.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/index.d.ts +11 -0
- package/dist/services/channels/providers/whatsapp/index.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/index.js +11 -0
- package/dist/services/channels/providers/whatsapp/index.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/normalizer.d.ts +11 -0
- package/dist/services/channels/providers/whatsapp/normalizer.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/normalizer.js +47 -0
- package/dist/services/channels/providers/whatsapp/normalizer.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/session.d.ts +9 -0
- package/dist/services/channels/providers/whatsapp/session.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/session.js +118 -0
- package/dist/services/channels/providers/whatsapp/session.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/types.d.ts +23 -0
- package/dist/services/channels/providers/whatsapp/types.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/types.js +3 -0
- package/dist/services/channels/providers/whatsapp/types.js.map +1 -0
- package/dist/services/channels/reconnect.d.ts +23 -0
- package/dist/services/channels/reconnect.d.ts.map +1 -0
- package/dist/services/channels/reconnect.js +32 -0
- package/dist/services/channels/reconnect.js.map +1 -0
- package/dist/services/channels/status-reactions.d.ts +27 -0
- package/dist/services/channels/status-reactions.d.ts.map +1 -0
- package/dist/services/channels/status-reactions.js +63 -0
- package/dist/services/channels/status-reactions.js.map +1 -0
- package/dist/services/channels/types.d.ts +16 -0
- package/dist/services/channels/types.d.ts.map +1 -0
- package/dist/services/channels/types.js +2 -0
- package/dist/services/channels/types.js.map +1 -0
- package/dist/services/channels/typing-state.d.ts +22 -0
- package/dist/services/channels/typing-state.d.ts.map +1 -0
- package/dist/services/channels/typing-state.js +88 -0
- package/dist/services/channels/typing-state.js.map +1 -0
- package/dist/services/config/index.d.ts +2426 -0
- package/dist/services/config/index.d.ts.map +1 -0
- package/dist/services/config/index.js +232 -0
- package/dist/services/config/index.js.map +1 -0
- package/dist/services/config/schemas/agent.d.ts +720 -0
- package/dist/services/config/schemas/agent.d.ts.map +1 -0
- package/dist/services/config/schemas/agent.js +86 -0
- package/dist/services/config/schemas/agent.js.map +1 -0
- package/dist/services/config/schemas/auth.d.ts +60 -0
- package/dist/services/config/schemas/auth.d.ts.map +1 -0
- package/dist/services/config/schemas/auth.js +18 -0
- package/dist/services/config/schemas/auth.js.map +1 -0
- package/dist/services/config/schemas/channels.d.ts +117 -0
- package/dist/services/config/schemas/channels.d.ts.map +1 -0
- package/dist/services/config/schemas/channels.js +22 -0
- package/dist/services/config/schemas/channels.js.map +1 -0
- package/dist/services/config/schemas/cron.d.ts +97 -0
- package/dist/services/config/schemas/cron.d.ts.map +1 -0
- package/dist/services/config/schemas/cron.js +18 -0
- package/dist/services/config/schemas/cron.js.map +1 -0
- package/dist/services/config/schemas/features.d.ts +43 -0
- package/dist/services/config/schemas/features.d.ts.map +1 -0
- package/dist/services/config/schemas/features.js +20 -0
- package/dist/services/config/schemas/features.js.map +1 -0
- package/dist/services/config/schemas/index.d.ts +24 -0
- package/dist/services/config/schemas/index.d.ts.map +1 -0
- package/dist/services/config/schemas/index.js +24 -0
- package/dist/services/config/schemas/index.js.map +1 -0
- package/dist/services/config/schemas/mcp.d.ts +31 -0
- package/dist/services/config/schemas/mcp.d.ts.map +1 -0
- package/dist/services/config/schemas/mcp.js +39 -0
- package/dist/services/config/schemas/mcp.js.map +1 -0
- package/dist/services/config/schemas/primitives.d.ts +13 -0
- package/dist/services/config/schemas/primitives.d.ts.map +1 -0
- package/dist/services/config/schemas/primitives.js +17 -0
- package/dist/services/config/schemas/primitives.js.map +1 -0
- package/dist/services/config/schemas/providers.d.ts +335 -0
- package/dist/services/config/schemas/providers.d.ts.map +1 -0
- package/dist/services/config/schemas/providers.js +27 -0
- package/dist/services/config/schemas/providers.js.map +1 -0
- package/dist/services/config/schemas/storage.d.ts +16 -0
- package/dist/services/config/schemas/storage.d.ts.map +1 -0
- package/dist/services/config/schemas/storage.js +9 -0
- package/dist/services/config/schemas/storage.js.map +1 -0
- package/dist/services/config/schemas/webhooks.d.ts +25 -0
- package/dist/services/config/schemas/webhooks.d.ts.map +1 -0
- package/dist/services/config/schemas/webhooks.js +12 -0
- package/dist/services/config/schemas/webhooks.js.map +1 -0
- package/dist/services/cron/index.d.ts +50 -0
- package/dist/services/cron/index.d.ts.map +1 -0
- package/dist/services/cron/index.js +460 -0
- package/dist/services/cron/index.js.map +1 -0
- package/dist/services/log/index.d.ts +14 -0
- package/dist/services/log/index.d.ts.map +1 -0
- package/dist/services/log/index.js +137 -0
- package/dist/services/log/index.js.map +1 -0
- package/dist/services/mcp-client/index.d.ts +37 -0
- package/dist/services/mcp-client/index.d.ts.map +1 -0
- package/dist/services/mcp-client/index.js +258 -0
- package/dist/services/mcp-client/index.js.map +1 -0
- package/dist/services/media/extract-document.d.ts +8 -0
- package/dist/services/media/extract-document.d.ts.map +1 -0
- package/dist/services/media/extract-document.js +85 -0
- package/dist/services/media/extract-document.js.map +1 -0
- package/dist/services/media/index.d.ts +21 -0
- package/dist/services/media/index.d.ts.map +1 -0
- package/dist/services/media/index.js +116 -0
- package/dist/services/media/index.js.map +1 -0
- package/dist/services/media/providers/anthropic.d.ts +6 -0
- package/dist/services/media/providers/anthropic.d.ts.map +1 -0
- package/dist/services/media/providers/anthropic.js +38 -0
- package/dist/services/media/providers/anthropic.js.map +1 -0
- package/dist/services/media/providers/index.d.ts +6 -0
- package/dist/services/media/providers/index.d.ts.map +1 -0
- package/dist/services/media/providers/index.js +15 -0
- package/dist/services/media/providers/index.js.map +1 -0
- package/dist/services/media/providers/openai.d.ts +6 -0
- package/dist/services/media/providers/openai.d.ts.map +1 -0
- package/dist/services/media/providers/openai.js +48 -0
- package/dist/services/media/providers/openai.js.map +1 -0
- package/dist/services/media/providers/provider.d.ts +5 -0
- package/dist/services/media/providers/provider.d.ts.map +1 -0
- package/dist/services/media/providers/provider.js +2 -0
- package/dist/services/media/providers/provider.js.map +1 -0
- package/dist/services/memory/chunker.d.ts +7 -0
- package/dist/services/memory/chunker.d.ts.map +1 -0
- package/dist/services/memory/chunker.js +46 -0
- package/dist/services/memory/chunker.js.map +1 -0
- package/dist/services/memory/context.d.ts +68 -0
- package/dist/services/memory/context.d.ts.map +1 -0
- package/dist/services/memory/context.js +223 -0
- package/dist/services/memory/context.js.map +1 -0
- package/dist/services/memory/embedding.d.ts +9 -0
- package/dist/services/memory/embedding.d.ts.map +1 -0
- package/dist/services/memory/embedding.js +49 -0
- package/dist/services/memory/embedding.js.map +1 -0
- package/dist/services/memory/index.d.ts +24 -0
- package/dist/services/memory/index.d.ts.map +1 -0
- package/dist/services/memory/index.js +140 -0
- package/dist/services/memory/index.js.map +1 -0
- package/dist/services/memory/session-indexer.d.ts +5 -0
- package/dist/services/memory/session-indexer.d.ts.map +1 -0
- package/dist/services/memory/session-indexer.js +62 -0
- package/dist/services/memory/session-indexer.js.map +1 -0
- package/dist/services/memory/sqlite-storage.d.ts +23 -0
- package/dist/services/memory/sqlite-storage.d.ts.map +1 -0
- package/dist/services/memory/sqlite-storage.js +75 -0
- package/dist/services/memory/sqlite-storage.js.map +1 -0
- package/dist/services/memory/types.d.ts +31 -0
- package/dist/services/memory/types.d.ts.map +1 -0
- package/dist/services/memory/types.js +2 -0
- package/dist/services/memory/types.js.map +1 -0
- package/dist/services/web/index.d.ts +9 -0
- package/dist/services/web/index.d.ts.map +1 -0
- package/dist/services/web/index.js +101 -0
- package/dist/services/web/index.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +9 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +2 -8
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent — PiAgent-powered runtime
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - PiAgent session persistence
|
|
6
|
+
* - PiAgent ResourceLoader for skills/prompts
|
|
7
|
+
* - Debug mode for inspecting tools, prompts, history
|
|
8
|
+
* - Streaming events passthrough to bus (agent.onDelta, agent.onTool, agent.onCompleted)
|
|
9
|
+
*/
|
|
10
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
11
|
+
var useValue = arguments.length > 2;
|
|
12
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
13
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
14
|
+
}
|
|
15
|
+
return useValue ? value : void 0;
|
|
16
|
+
};
|
|
17
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
18
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
19
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
20
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
21
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
22
|
+
var _, done = false;
|
|
23
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
24
|
+
var context = {};
|
|
25
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
26
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
27
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
28
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
29
|
+
if (kind === "accessor") {
|
|
30
|
+
if (result === void 0) continue;
|
|
31
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
32
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
33
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
34
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
35
|
+
}
|
|
36
|
+
else if (_ = accept(result)) {
|
|
37
|
+
if (kind === "field") initializers.unshift(_);
|
|
38
|
+
else descriptor[key] = _;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
42
|
+
done = true;
|
|
43
|
+
};
|
|
44
|
+
import { z } from 'zod';
|
|
45
|
+
import path from 'node:path';
|
|
46
|
+
import { register } from '../../gateway/decorators.js';
|
|
47
|
+
import { createLogger } from '../../lib/logger.js';
|
|
48
|
+
import { parseDirectives } from './directives.js';
|
|
49
|
+
import { withTimeout } from '../../lib/timeout.js';
|
|
50
|
+
import { interpolatePrompt } from './prompt-interpolate.js';
|
|
51
|
+
import { truncate } from '../../lib/truncate.js';
|
|
52
|
+
import { existsSync, promises as fs } from 'node:fs';
|
|
53
|
+
import { getDataPaths } from '../../lib/paths.js';
|
|
54
|
+
import { parseSessionKey } from '../../lib/subagent.js';
|
|
55
|
+
// Pi SDK imports
|
|
56
|
+
import { createAgentSession, SessionManager, SettingsManager, AuthStorage, ModelRegistry, DefaultResourceLoader, } from '@mariozechner/pi-coding-agent';
|
|
57
|
+
import { createCustomTools } from './tools.js';
|
|
58
|
+
import { loadChannelPersona } from './persona.js';
|
|
59
|
+
import { resolveSkillPaths } from '../../lib/skills.js';
|
|
60
|
+
import { matchesGlob } from '../../lib/glob.js';
|
|
61
|
+
const log = createLogger('agent');
|
|
62
|
+
// Hardcoded agent execution constants
|
|
63
|
+
const EXECUTION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
64
|
+
// ── AgentService ─────────────────────────────────────────────────────────────
|
|
65
|
+
let AgentService = (() => {
|
|
66
|
+
let _instanceExtraInitializers = [];
|
|
67
|
+
let _execute_decorators;
|
|
68
|
+
let _appendMessage_decorators;
|
|
69
|
+
let _status_decorators;
|
|
70
|
+
return class AgentService {
|
|
71
|
+
static {
|
|
72
|
+
const _metadata_1 = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
73
|
+
_execute_decorators = [register('agent.execute', {
|
|
74
|
+
description: 'Executes a task with the agent, optionally delegating to a subagent.',
|
|
75
|
+
schema: z.object({
|
|
76
|
+
task: z.string().describe('The task to execute.'),
|
|
77
|
+
metadata: z.object({
|
|
78
|
+
cwd: z.string().optional().describe('The current working directory to use for the agent.'),
|
|
79
|
+
model: z.string().optional().describe('Model override in format provider:modelId.'),
|
|
80
|
+
channelType: z.string().optional().describe('Type of channel (e.g., telegram, whatsapp).'),
|
|
81
|
+
fromUserId: z.string().optional().describe('Sender user ID on the platform.'),
|
|
82
|
+
fromUser: z.string().optional().describe('Sender display name.'),
|
|
83
|
+
fromUserHandle: z.string().optional().describe('Sender @handle on the platform.'),
|
|
84
|
+
botUserId: z.string().optional().describe('Bot user ID on the platform.'),
|
|
85
|
+
botName: z.string().optional().describe('Bot display name.'),
|
|
86
|
+
botHandle: z.string().optional().describe('Bot @handle on the platform.'),
|
|
87
|
+
}).optional().describe('Optional metadata for the execution context.'),
|
|
88
|
+
}).passthrough(),
|
|
89
|
+
})];
|
|
90
|
+
_appendMessage_decorators = [register('agent.appendMessage')];
|
|
91
|
+
_status_decorators = [register('agent.status', {
|
|
92
|
+
description: 'Return currently active agent session keys.',
|
|
93
|
+
schema: z.object({ sessionKey: z.string().optional() }),
|
|
94
|
+
})];
|
|
95
|
+
__esDecorate(this, null, _execute_decorators, { kind: "method", name: "execute", static: false, private: false, access: { has: obj => "execute" in obj, get: obj => obj.execute }, metadata: _metadata_1 }, null, _instanceExtraInitializers);
|
|
96
|
+
__esDecorate(this, null, _appendMessage_decorators, { kind: "method", name: "appendMessage", static: false, private: false, access: { has: obj => "appendMessage" in obj, get: obj => obj.appendMessage }, metadata: _metadata_1 }, null, _instanceExtraInitializers);
|
|
97
|
+
__esDecorate(this, null, _status_decorators, { kind: "method", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status }, metadata: _metadata_1 }, null, _instanceExtraInitializers);
|
|
98
|
+
if (_metadata_1) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata_1 });
|
|
99
|
+
}
|
|
100
|
+
bus = __runInitializers(this, _instanceExtraInitializers);
|
|
101
|
+
config;
|
|
102
|
+
sessions = new Map();
|
|
103
|
+
activeRuns = new Set();
|
|
104
|
+
agentDir;
|
|
105
|
+
authStorage;
|
|
106
|
+
modelRegistry;
|
|
107
|
+
settings;
|
|
108
|
+
constructor(deps) {
|
|
109
|
+
this.bus = deps.bus;
|
|
110
|
+
this.config = deps.config;
|
|
111
|
+
const paths = getDataPaths();
|
|
112
|
+
this.agentDir = path.join(paths.dataDir, 'agent');
|
|
113
|
+
// Use ~/.vargos/agent for auth and models (override PiAgent defaults)
|
|
114
|
+
const authJsonPath = path.join(this.agentDir, 'auth.json');
|
|
115
|
+
const modelsJsonPath = path.join(this.agentDir, 'models.json');
|
|
116
|
+
this.authStorage = AuthStorage.create(authJsonPath);
|
|
117
|
+
this.modelRegistry = ModelRegistry.create(this.authStorage, modelsJsonPath);
|
|
118
|
+
// Report model loading errors instead of silently falling back
|
|
119
|
+
const modelError = this.modelRegistry.getError();
|
|
120
|
+
if (modelError) {
|
|
121
|
+
throw new Error(`Failed to load models from ${modelsJsonPath}: ${modelError}`);
|
|
122
|
+
}
|
|
123
|
+
this.settings = SettingsManager.create(paths.dataDir, this.agentDir);
|
|
124
|
+
// NOTE: SettingsManager loads ~/.vargos/agent/models.json which has the
|
|
125
|
+
// authoritative provider + model definitions. Pi Agent is the source of truth.
|
|
126
|
+
// Apply retry settings for transient error recovery
|
|
127
|
+
this.settings.applyOverrides({
|
|
128
|
+
retry: {
|
|
129
|
+
enabled: true,
|
|
130
|
+
maxRetries: 3,
|
|
131
|
+
baseDelayMs: 1000,
|
|
132
|
+
provider: {
|
|
133
|
+
timeoutMs: 120000, // 2 min per API call
|
|
134
|
+
maxRetries: 3,
|
|
135
|
+
maxRetryDelayMs: 30000, // exponential backoff up to 30s
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Persist retry settings to disk during boot
|
|
142
|
+
*/
|
|
143
|
+
async start() {
|
|
144
|
+
try {
|
|
145
|
+
const settingsPath = path.join(this.agentDir, 'settings.json');
|
|
146
|
+
const currentData = await fs.readFile(settingsPath, 'utf-8');
|
|
147
|
+
const currentSettings = JSON.parse(currentData);
|
|
148
|
+
const updated = {
|
|
149
|
+
...currentSettings,
|
|
150
|
+
retry: {
|
|
151
|
+
enabled: true,
|
|
152
|
+
maxRetries: 3,
|
|
153
|
+
baseDelayMs: 1000,
|
|
154
|
+
provider: {
|
|
155
|
+
timeoutMs: 120000,
|
|
156
|
+
maxRetries: 3,
|
|
157
|
+
maxRetryDelayMs: 30000,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
await fs.writeFile(settingsPath, JSON.stringify(updated, null, 2), 'utf-8');
|
|
162
|
+
log.debug('Agent retry settings persisted to settings.json');
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
log.warn(`Failed to persist retry settings: ${err instanceof Error ? err.message : String(err)}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* agent.execute — Run a task
|
|
170
|
+
*
|
|
171
|
+
* Note: sessionKey is declared optional here because it's auto-injected by
|
|
172
|
+
* wrapEventAsToolDefinition() when the agent calls this as a tool. Direct callers
|
|
173
|
+
* (channels, cron, webhooks, TCP) still provide sessionKey via EventMap.
|
|
174
|
+
*
|
|
175
|
+
* Schema for bus event is different than runtime types AgentExecuteParams.
|
|
176
|
+
* e.g. metadata is not injected here on purpose.
|
|
177
|
+
*/
|
|
178
|
+
async execute(params) {
|
|
179
|
+
if (!params.sessionKey) {
|
|
180
|
+
throw new Error('sessionKey is required for agent.execute');
|
|
181
|
+
}
|
|
182
|
+
log.info(`execute: START ${params.sessionKey}`);
|
|
183
|
+
const metadata = params.metadata ?? {};
|
|
184
|
+
// Validate model override if provided
|
|
185
|
+
if (metadata?.model) {
|
|
186
|
+
log.debug(`Validating metadata model: ${metadata.model}`);
|
|
187
|
+
this.validateModel(metadata.model);
|
|
188
|
+
}
|
|
189
|
+
const directives = parseDirectives(params.task);
|
|
190
|
+
const task = interpolatePrompt(directives.cleaned || params.task);
|
|
191
|
+
const session = await this.getOrCreateSession(params.sessionKey, params.metadata);
|
|
192
|
+
// Set thinking level from task directives if present
|
|
193
|
+
if (directives.thinkingLevel) {
|
|
194
|
+
session.setThinkingLevel(directives.thinkingLevel);
|
|
195
|
+
}
|
|
196
|
+
// Log model being used by session
|
|
197
|
+
log.info(`Using model: ${session.model?.provider}:${session.model?.id} (${session.model?.name})`);
|
|
198
|
+
this.activeRuns.add(params.sessionKey);
|
|
199
|
+
const startTime = Date.now();
|
|
200
|
+
try {
|
|
201
|
+
log.debug(`execute: calling session.prompt() for ${params.sessionKey}`);
|
|
202
|
+
await withTimeout(session.prompt(task, { streamingBehavior: 'steer' }), EXECUTION_TIMEOUT_MS, `Agent execution timeout after ${EXECUTION_TIMEOUT_MS}ms`);
|
|
203
|
+
log.debug(`execute: session.prompt() completed in ${Date.now() - startTime}ms`);
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
this.activeRuns.delete(params.sessionKey);
|
|
207
|
+
}
|
|
208
|
+
const { content, error } = this.extractFinalAssistant(session);
|
|
209
|
+
if (error) {
|
|
210
|
+
log.error(`execute: ${params.sessionKey} ended with error: ${error}`);
|
|
211
|
+
throw new Error(error);
|
|
212
|
+
}
|
|
213
|
+
log.info(`execute: END ${params.sessionKey} (${content.length} chars, ${Date.now() - startTime}ms)`);
|
|
214
|
+
return { response: content };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* agent.appendMessage — Append message to session JSONL without executing agent.
|
|
218
|
+
* Used for non-whitelisted messages (skipAgent=true) to record in history silently.
|
|
219
|
+
* Internal only — not exposed as an agent tool.
|
|
220
|
+
*/
|
|
221
|
+
async appendMessage(params) {
|
|
222
|
+
const session = await this.getOrCreateSession(params.sessionKey, params.metadata);
|
|
223
|
+
const sessionFile = session.sessionManager.getSessionFile();
|
|
224
|
+
if (!sessionFile) {
|
|
225
|
+
log.debug(`No session file for ${params.sessionKey}, skipping append`);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
log.debug(`Appending message to session ${params.sessionKey} (no execution)`);
|
|
229
|
+
session.sessionManager.appendMessage({
|
|
230
|
+
timestamp: Date.now(),
|
|
231
|
+
role: 'user',
|
|
232
|
+
content: params.content,
|
|
233
|
+
});
|
|
234
|
+
session.exportToJsonl(sessionFile);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* agent.status — Return currently active agent session keys.
|
|
238
|
+
*/
|
|
239
|
+
async status(_params) {
|
|
240
|
+
return { activeRuns: Array.from(this.activeRuns) };
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get or create AgentSession for sessionKey.
|
|
244
|
+
*/
|
|
245
|
+
async getOrCreateSession(sessionKey, metadata) {
|
|
246
|
+
const cached = this.sessions.get(sessionKey);
|
|
247
|
+
if (cached)
|
|
248
|
+
return cached;
|
|
249
|
+
const paths = getDataPaths();
|
|
250
|
+
const effectiveCwd = metadata?.cwd ?? paths.dataDir;
|
|
251
|
+
const sessionDir = path.join(paths.sessionsDir, sessionKey.replace(/:/g, path.sep));
|
|
252
|
+
const sessionManager = SessionManager.create(effectiveCwd, sessionDir);
|
|
253
|
+
await fs.mkdir(sessionDir, { recursive: true });
|
|
254
|
+
await fs.mkdir(this.agentDir, { recursive: true });
|
|
255
|
+
const persona = await this.loadPersonaIfChannel(sessionKey);
|
|
256
|
+
const customTools = await this.getCustomTools(sessionKey, persona?.meta.allowedTools);
|
|
257
|
+
const rawSystemPrompt = await this.getSystemPrompt(sessionKey, metadata, persona?.body);
|
|
258
|
+
const resourceLoader = await this.createResourceLoader(rawSystemPrompt, effectiveCwd);
|
|
259
|
+
log.debug(`Creating agent session for ${sessionKey} in ${effectiveCwd}. (with ${customTools.length} tools and ${rawSystemPrompt?.length} chars system prompt).`);
|
|
260
|
+
const { session } = await createAgentSession({
|
|
261
|
+
cwd: effectiveCwd,
|
|
262
|
+
agentDir: this.agentDir,
|
|
263
|
+
sessionManager,
|
|
264
|
+
settingsManager: this.settings,
|
|
265
|
+
authStorage: this.authStorage,
|
|
266
|
+
modelRegistry: this.modelRegistry,
|
|
267
|
+
customTools,
|
|
268
|
+
resourceLoader,
|
|
269
|
+
});
|
|
270
|
+
// Store system prompt in session directory
|
|
271
|
+
if (process.env.LOG_LEVEL === 'debug') {
|
|
272
|
+
log.debug(`Storing debug files (modelRegistry, settings, systemPrompt, customTools) in session directory: ${sessionDir}`);
|
|
273
|
+
await Promise.all([
|
|
274
|
+
fs.writeFile(path.join(sessionDir, `modelRegistry.json`), JSON.stringify(this.modelRegistry, null, 2), 'utf-8'),
|
|
275
|
+
fs.writeFile(path.join(sessionDir, `settings.json`), JSON.stringify(this.settings, null, 2), 'utf-8'),
|
|
276
|
+
fs.writeFile(path.join(sessionDir, `systemPrompt.md`), session.systemPrompt ?? '', 'utf-8'),
|
|
277
|
+
fs.writeFile(path.join(sessionDir, `customTools.md`), customTools.map(tool => `- ${tool.name}: ${tool.description}`).join('\n'), 'utf-8'),
|
|
278
|
+
]);
|
|
279
|
+
}
|
|
280
|
+
this.subscribeToSessionEvents(session, sessionKey);
|
|
281
|
+
this.sessions.set(sessionKey, session);
|
|
282
|
+
return session;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Subscribe to PiAgent sessionsubscription - emit to bus for streaming + debug logging.
|
|
286
|
+
*/
|
|
287
|
+
subscribeToSessionEvents(session, sessionKey, _metadata) {
|
|
288
|
+
session.subscribe((event) => {
|
|
289
|
+
const eventType = event.type;
|
|
290
|
+
// log.debug(` --- :: Agent Lifecycle = ${eventType} --- :: ${sessionKey} --- :: `);
|
|
291
|
+
// Skip session-specific events (auto_retry_start, auto_retry_end) - not emitted as bus events
|
|
292
|
+
if (eventType === 'auto_retry_start' || eventType === 'auto_retry_end') {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
// Map PiAgent events to our bus events
|
|
296
|
+
// Bridge PiAgent's untyped event structure to our typed EventMap
|
|
297
|
+
switch (eventType) {
|
|
298
|
+
case 'tool_execution_start': {
|
|
299
|
+
const e = event;
|
|
300
|
+
if (e.toolName) {
|
|
301
|
+
this.bus.emit('agent.onTool', {
|
|
302
|
+
sessionKey,
|
|
303
|
+
toolName: e.toolName,
|
|
304
|
+
phase: 'start',
|
|
305
|
+
args: (e.args ?? {}),
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
case 'tool_execution_end': {
|
|
311
|
+
const e = event;
|
|
312
|
+
if (e.toolName) {
|
|
313
|
+
this.bus.emit('agent.onTool', {
|
|
314
|
+
sessionKey,
|
|
315
|
+
toolName: e.toolName,
|
|
316
|
+
phase: 'end',
|
|
317
|
+
result: (e.result ?? {}),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
case 'message_update': {
|
|
323
|
+
const e = event;
|
|
324
|
+
const delta = e.delta || e.text || '';
|
|
325
|
+
if (delta) {
|
|
326
|
+
this.bus.emit('agent.onDelta', { sessionKey, chunk: delta });
|
|
327
|
+
}
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
case 'turn_end': {
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case 'agent_end': {
|
|
334
|
+
const { content, error } = this.extractFinalAssistant(session);
|
|
335
|
+
if (error) {
|
|
336
|
+
log.error(`agent_end with error for ${sessionKey}: ${error}`);
|
|
337
|
+
this.bus.emit('agent.onCompleted', { sessionKey, success: false, error });
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
log.debug(` emitting agent.onCompleted with ${content.length} chars`);
|
|
341
|
+
this.bus.emit('agent.onCompleted', { sessionKey, success: true, response: content });
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
default: {
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Create ResourceLoader. PiAgent's DefaultResourceLoader handles skills, themes, and
|
|
353
|
+
* prompt templates. We override systemPrompt with our Vargos bootstrap files.
|
|
354
|
+
*/
|
|
355
|
+
async createResourceLoader(systemPromptOverride, cwd) {
|
|
356
|
+
const paths = getDataPaths();
|
|
357
|
+
const effectiveCwd = cwd ?? paths.workspaceDir;
|
|
358
|
+
// Only workspace + cwd here — Pi SDK already auto-loads <agentDir>/skills and <cwd>/.pi/skills.
|
|
359
|
+
const skillPaths = resolveSkillPaths(paths.workspaceDir, ...(cwd ? [cwd] : []));
|
|
360
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
361
|
+
cwd: effectiveCwd,
|
|
362
|
+
agentDir: this.agentDir,
|
|
363
|
+
settingsManager: this.settings,
|
|
364
|
+
extensionFactories: [],
|
|
365
|
+
additionalSkillPaths: skillPaths,
|
|
366
|
+
noSkills: false,
|
|
367
|
+
...(systemPromptOverride && { systemPrompt: systemPromptOverride }),
|
|
368
|
+
});
|
|
369
|
+
await resourceLoader.reload();
|
|
370
|
+
const { skills } = resourceLoader.getSkills();
|
|
371
|
+
log.debug(`Resource loader loaded with ${skills.length} skills.`);
|
|
372
|
+
return resourceLoader;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Load persona for the given sessionKey if it maps to a configured channel. Subagent
|
|
376
|
+
* sessionKeys naturally inherit because parseSessionKey strips the `:subagent:` suffix.
|
|
377
|
+
* Cron / CLI / other types return null (no persona override applied).
|
|
378
|
+
*/
|
|
379
|
+
async loadPersonaIfChannel(sessionKey) {
|
|
380
|
+
const { type } = parseSessionKey(sessionKey);
|
|
381
|
+
const isChannel = this.config.channels.some(c => c.id === type);
|
|
382
|
+
if (!isChannel)
|
|
383
|
+
return null;
|
|
384
|
+
return loadChannelPersona(type);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Build system prompt by merging bootstrap files from workspace and optional cwd, then
|
|
388
|
+
* appending the channel persona body if provided.
|
|
389
|
+
*/
|
|
390
|
+
async getSystemPrompt(sessionKey, metadata, personaBody) {
|
|
391
|
+
const bootstrapFiles = ['AGENTS.md', 'SOUL.md', 'TOOLS.md'];
|
|
392
|
+
const maxCharsPerFile = 6000;
|
|
393
|
+
const dirs = this.collectBootstrapDirs(metadata);
|
|
394
|
+
const filePathsToLoad = [];
|
|
395
|
+
for (const dir of dirs) {
|
|
396
|
+
for (const filename of bootstrapFiles) {
|
|
397
|
+
filePathsToLoad.push({ dir, filename, path: path.join(dir, filename) });
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
const fileContents = await Promise.all(filePathsToLoad.map(async (item) => {
|
|
401
|
+
try {
|
|
402
|
+
const content = await fs.readFile(item.path, 'utf-8');
|
|
403
|
+
const truncated = truncate(content, maxCharsPerFile);
|
|
404
|
+
log.debug(`Loaded ${item.dir}/${item.filename}: ${truncated.length} chars`);
|
|
405
|
+
return {
|
|
406
|
+
label: `<!-- ${item.dir}/${item.filename} -->`,
|
|
407
|
+
content: truncated.trim(),
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
log.debug(`${item.dir}/${item.filename}: not found`);
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
414
|
+
}));
|
|
415
|
+
const sections = [];
|
|
416
|
+
for (const result of fileContents) {
|
|
417
|
+
if (result)
|
|
418
|
+
sections.push(result.label, result.content, '');
|
|
419
|
+
}
|
|
420
|
+
if (personaBody) {
|
|
421
|
+
sections.push('<!-- channel persona -->', personaBody.trim(), '');
|
|
422
|
+
}
|
|
423
|
+
if (sections.length === 0) {
|
|
424
|
+
log.debug('No bootstrap files found, using PiAgent default');
|
|
425
|
+
return undefined;
|
|
426
|
+
}
|
|
427
|
+
const prompt = sections.join('\n');
|
|
428
|
+
const context = this.buildPromptContext(sessionKey, metadata);
|
|
429
|
+
return interpolatePrompt(prompt, context);
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Load custom tools from bus callable events. When `allowedPatterns` is provided
|
|
433
|
+
* (from a channel persona), filter the tool list down to names matching at least
|
|
434
|
+
* one glob pattern. Empty/undefined patterns = all tools allowed.
|
|
435
|
+
*/
|
|
436
|
+
async getCustomTools(sessionKey, allowedPatterns) {
|
|
437
|
+
const tools = await createCustomTools(sessionKey, this.bus);
|
|
438
|
+
if (!allowedPatterns?.length)
|
|
439
|
+
return tools;
|
|
440
|
+
return tools.filter(t => allowedPatterns.some(p => matchesGlob(p, t.name)));
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Validate model override if provided.
|
|
444
|
+
*/
|
|
445
|
+
validateModel(modelSpec) {
|
|
446
|
+
const [provider, modelId] = modelSpec.split(':');
|
|
447
|
+
const model = this.modelRegistry.find(provider, modelId);
|
|
448
|
+
if (!model) {
|
|
449
|
+
throw new Error(`Model not found: ${modelSpec}. Expected format: provider:modelId`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Build context variables for prompt interpolation from sessionKey and metadata.
|
|
454
|
+
*/
|
|
455
|
+
buildPromptContext(sessionKey, metadata) {
|
|
456
|
+
const { type: channelId, id: chatId } = parseSessionKey(sessionKey);
|
|
457
|
+
return {
|
|
458
|
+
SESSION_KEY: sessionKey,
|
|
459
|
+
CHANNEL_ID: channelId,
|
|
460
|
+
CHAT_ID: chatId,
|
|
461
|
+
...(metadata?.channelType && { CHANNEL_TYPE: metadata.channelType }),
|
|
462
|
+
...(metadata?.fromUserId && { USER_ID: metadata.fromUserId }),
|
|
463
|
+
...(metadata?.fromUser && { USER_NAME: metadata.fromUser }),
|
|
464
|
+
...(metadata?.fromUserHandle && { USER_HANDLE: metadata.fromUserHandle }),
|
|
465
|
+
...(metadata?.botUserId && { BOT_ID: metadata.botUserId }),
|
|
466
|
+
...(metadata?.botName && { BOT_NAME: metadata.botName }),
|
|
467
|
+
...(metadata?.botHandle && { BOT_HANDLE: metadata.botHandle }),
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Collect directory paths in order: workspace first, then cwd if different.
|
|
472
|
+
*/
|
|
473
|
+
collectBootstrapDirs(metadata) {
|
|
474
|
+
const paths = getDataPaths();
|
|
475
|
+
const workspaceDir = paths.workspaceDir;
|
|
476
|
+
const dirs = [workspaceDir];
|
|
477
|
+
if (metadata?.cwd && path.resolve(metadata.cwd) !== path.resolve(workspaceDir)) {
|
|
478
|
+
dirs.push(metadata.cwd);
|
|
479
|
+
}
|
|
480
|
+
// Filter dirs that do not exist
|
|
481
|
+
return dirs.filter(dir => existsSync(dir));
|
|
482
|
+
}
|
|
483
|
+
// ── Private Helpers ────────────────────────────────────────────────────────
|
|
484
|
+
/**
|
|
485
|
+
* Extract the final assistant message: text content + error (when stopReason === 'error').
|
|
486
|
+
* Pi SDK records inference failures (e.g. missing API key) as assistant messages with
|
|
487
|
+
* empty content and `errorMessage` populated, instead of throwing — without inspecting
|
|
488
|
+
* `stopReason`/`errorMessage` here, those would surface as silent empty completions.
|
|
489
|
+
*/
|
|
490
|
+
extractFinalAssistant(session) {
|
|
491
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
492
|
+
const messages = session.state?.messages || [];
|
|
493
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
494
|
+
const msg = messages[i];
|
|
495
|
+
if (msg?.role !== 'assistant')
|
|
496
|
+
continue;
|
|
497
|
+
const error = msg.stopReason === 'error'
|
|
498
|
+
? (msg.errorMessage ?? 'unknown inference error')
|
|
499
|
+
: undefined;
|
|
500
|
+
let content = '';
|
|
501
|
+
if (typeof msg.content === 'string') {
|
|
502
|
+
content = msg.content;
|
|
503
|
+
}
|
|
504
|
+
else if (Array.isArray(msg.content)) {
|
|
505
|
+
content = msg.content
|
|
506
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
507
|
+
.filter((block) => block.type === 'text')
|
|
508
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
509
|
+
.map((block) => block.text || '')
|
|
510
|
+
.filter(Boolean)
|
|
511
|
+
.join('\n');
|
|
512
|
+
}
|
|
513
|
+
return error ? { content, error } : { content };
|
|
514
|
+
}
|
|
515
|
+
return { content: '' };
|
|
516
|
+
}
|
|
517
|
+
stop() {
|
|
518
|
+
this.sessions.forEach((_session) => {
|
|
519
|
+
_session.dispose();
|
|
520
|
+
});
|
|
521
|
+
this.sessions.clear();
|
|
522
|
+
}
|
|
523
|
+
};
|
|
524
|
+
})();
|
|
525
|
+
export { AgentService };
|
|
526
|
+
// ── Boot ─────────────────────────────────────────────────────────────────────
|
|
527
|
+
export async function boot(bus) {
|
|
528
|
+
const config = await bus.call('config.get', {});
|
|
529
|
+
const runtime = new AgentService({ bus, config });
|
|
530
|
+
bus.bootstrap(runtime);
|
|
531
|
+
await runtime.start(); // Persist retry settings
|
|
532
|
+
return { stop: () => runtime.stop() };
|
|
533
|
+
}
|
|
534
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../services/agent/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface PersonaMeta {
|
|
2
|
+
/** Glob whitelist of customTools the channel agent can call. Empty/missing = all customTools allowed. */
|
|
3
|
+
allowedTools?: string[];
|
|
4
|
+
}
|
|
5
|
+
export interface Persona {
|
|
6
|
+
meta: PersonaMeta;
|
|
7
|
+
body: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Load persona for `channelId` from `~/.vargos/agents/<channelId>.md`. Re-reads from disk on
|
|
11
|
+
* every call (no in-memory cache). Returns null when the file is missing, totally empty,
|
|
12
|
+
* or has neither frontmatter nor body content.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadChannelPersona(channelId: string): Promise<Persona | null>;
|
|
15
|
+
//# sourceMappingURL=persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../../services/agent/persona.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAmCnF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { promises as fs, existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { parseFrontmatter } from '../../lib/frontmatter.js';
|
|
4
|
+
import { getDataPaths } from '../../lib/paths.js';
|
|
5
|
+
import { createLogger } from '../../lib/logger.js';
|
|
6
|
+
const log = createLogger('agent-persona');
|
|
7
|
+
/**
|
|
8
|
+
* Load persona for `channelId` from `~/.vargos/agents/<channelId>.md`. Re-reads from disk on
|
|
9
|
+
* every call (no in-memory cache). Returns null when the file is missing, totally empty,
|
|
10
|
+
* or has neither frontmatter nor body content.
|
|
11
|
+
*/
|
|
12
|
+
export async function loadChannelPersona(channelId) {
|
|
13
|
+
const files = await ensureChannelPersonaFiles([channelId]);
|
|
14
|
+
if (files.length === 0) {
|
|
15
|
+
log.warn(`agents/${channelId}.md is missing — not loaded`);
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const file = files?.[0];
|
|
19
|
+
if (!file || !existsSync(file)) {
|
|
20
|
+
log.warn(`agents/${channelId}.md exists but is not readable — not loaded`);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
24
|
+
if (!content || !content.trim()) {
|
|
25
|
+
log.warn(`agents/${channelId}.md is empty — not loaded`);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const parsed = parseFrontmatter(content);
|
|
29
|
+
if (!parsed) {
|
|
30
|
+
return { meta: {}, body: content.trim() };
|
|
31
|
+
}
|
|
32
|
+
const body = parsed.body.trim();
|
|
33
|
+
const hasAllowedTools = Array.isArray(parsed.meta.allowedTools) && parsed.meta.allowedTools.length > 0;
|
|
34
|
+
if (!body && !hasAllowedTools) {
|
|
35
|
+
log.warn(`agents/${channelId}.md has no overrides — not loaded`);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return { meta: parsed.meta, body };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Ensure a persona file exists for each channel id. Copies `default.md` to
|
|
42
|
+
* `~/.vargos/agents/<id>.md` if missing. Idempotent — runs at every startup.
|
|
43
|
+
*/
|
|
44
|
+
async function ensureChannelPersonaFiles(channelIds) {
|
|
45
|
+
const agentsDir = path.join(getDataPaths().dataDir, 'agents');
|
|
46
|
+
const defaultFile = path.join(agentsDir, 'default.md');
|
|
47
|
+
if (!existsSync(defaultFile)) {
|
|
48
|
+
log.warn(`${defaultFile} missing — startup template seed should have copied it`);
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
await fs.mkdir(agentsDir, { recursive: true });
|
|
52
|
+
const files = [];
|
|
53
|
+
for (const id of channelIds) {
|
|
54
|
+
const file = path.join(agentsDir, `${id}.md`);
|
|
55
|
+
if (!existsSync(file)) {
|
|
56
|
+
await fs.copyFile(defaultFile, file);
|
|
57
|
+
log.info(`seeded agent persona file: ${file}`);
|
|
58
|
+
}
|
|
59
|
+
files.push(file);
|
|
60
|
+
}
|
|
61
|
+
return files;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=persona.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.js","sourceRoot":"","sources":["../../../services/agent/persona.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAY1C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACxD,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,UAAU,SAAS,6BAA6B,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,UAAU,SAAS,6CAA6C,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,UAAU,SAAS,2BAA2B,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAc,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACvG,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,UAAU,SAAS,mCAAmC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,yBAAyB,CAAC,UAAoB;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,wDAAwD,CAAC,CAAC;QACjF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|