@ziggs-ai/agent-sdk 0.1.11 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +41 -2
- package/dist/AgentHost.d.ts +201 -0
- package/dist/AgentHost.js +652 -0
- package/dist/adapters/AnthropicAdapter.d.ts +39 -0
- package/dist/adapters/AnthropicAdapter.js +200 -0
- package/dist/adapters/McpAdapter.d.ts +199 -0
- package/dist/adapters/McpAdapter.js +468 -0
- package/dist/adapters/OpenAIAdapter.d.ts +26 -0
- package/dist/adapters/OpenAIAdapter.js +158 -0
- package/dist/adapters/index.js +2 -0
- package/dist/agent/Agent.d.ts +78 -0
- package/dist/agent/Agent.js +58 -0
- package/dist/agent/ClaudeSdkAgent.d.ts +38 -0
- package/dist/agent/ClaudeSdkAgent.js +322 -0
- package/dist/agent/claudeCognition.d.ts +67 -0
- package/dist/agent/claudeCognition.js +103 -0
- package/dist/agent/claudeSdkProtocol.d.ts +11 -0
- package/dist/agent/claudeSdkProtocol.js +27 -0
- package/dist/agent/claudeSdkTools.d.ts +19 -0
- package/dist/agent/claudeSdkTools.js +57 -0
- package/dist/agent/hostedAgentConnection.d.ts +15 -0
- package/dist/agent/hostedAgentConnection.js +29 -0
- package/dist/agent/toolManagerToSdkMcp.d.ts +12 -0
- package/dist/agent/toolManagerToSdkMcp.js +123 -0
- package/dist/brain/index.d.ts +50 -0
- package/dist/brain/index.js +45 -0
- package/dist/cognition/validateContext.d.ts +11 -0
- package/dist/cognition/validateContext.js +117 -0
- package/dist/context/applyEffects.d.ts +2 -0
- package/dist/context/applyEffects.js +89 -0
- package/dist/context/batch.d.ts +2 -0
- package/dist/context/batch.js +18 -0
- package/dist/context/classifyEnvelope.d.ts +1 -0
- package/dist/context/classifyEnvelope.js +58 -0
- package/dist/context/routingLabels.d.ts +4 -0
- package/dist/context/routingLabels.js +48 -0
- package/dist/defineAgent.d.ts +14 -0
- package/dist/defineAgent.js +68 -0
- package/dist/formatters/AgreementFormatter.d.ts +18 -0
- package/dist/formatters/AgreementFormatter.js +130 -0
- package/dist/formatters/HistoryFormatter.d.ts +26 -0
- package/dist/formatters/HistoryFormatter.js +173 -0
- package/dist/formatters/index.js +2 -0
- package/{src/index.ts → dist/index.d.ts} +13 -53
- package/dist/index.js +66 -0
- package/dist/ingress/normalizeIncoming.d.ts +65 -0
- package/dist/ingress/normalizeIncoming.js +88 -0
- package/dist/memory/MemoryStore.d.ts +55 -0
- package/dist/memory/MemoryStore.js +78 -0
- package/dist/pricing/fleetDefaults.d.ts +46 -0
- package/dist/pricing/fleetDefaults.js +168 -0
- package/dist/pricing/fleetEvalFree.d.ts +7 -0
- package/dist/pricing/fleetEvalFree.js +24 -0
- package/dist/pricing/fleetFreeTierA.gen.d.ts +6 -0
- package/{src/pricing/fleetFreeTierA.gen.ts → dist/pricing/fleetFreeTierA.gen.js} +5 -6
- package/dist/pricing/fleetTierByAgentId.gen.d.ts +7 -0
- package/dist/pricing/fleetTierByAgentId.gen.js +768 -0
- package/dist/runtime/AgentMachine.d.ts +143 -0
- package/dist/runtime/AgentMachine.js +400 -0
- package/dist/runtime/PromptBuilder.d.ts +96 -0
- package/dist/runtime/PromptBuilder.js +439 -0
- package/dist/runtime/bootstrapCtx.d.ts +18 -0
- package/dist/runtime/bootstrapCtx.js +37 -0
- package/dist/runtime/buildOutcome.d.ts +68 -0
- package/dist/runtime/buildOutcome.js +464 -0
- package/dist/runtime/defaults.d.ts +54 -0
- package/dist/runtime/defaults.js +47 -0
- package/dist/runtime/deriveRespondsToProposals.d.ts +9 -0
- package/dist/runtime/deriveRespondsToProposals.js +38 -0
- package/dist/runtime/kickoff.d.ts +15 -0
- package/dist/runtime/kickoff.js +112 -0
- package/dist/runtime/runMechanical.d.ts +25 -0
- package/dist/runtime/runMechanical.js +74 -0
- package/dist/runtime/runTurn.d.ts +63 -0
- package/dist/runtime/runTurn.js +800 -0
- package/dist/runtime/validateWorkflow.d.ts +17 -0
- package/dist/runtime/validateWorkflow.js +209 -0
- package/dist/server/ConnectionPool.d.ts +68 -0
- package/dist/server/ConnectionPool.js +166 -0
- package/dist/server/EventQueue.d.ts +33 -0
- package/dist/server/EventQueue.js +98 -0
- package/dist/server/InboxCatchUp.d.ts +24 -0
- package/dist/server/InboxCatchUp.js +213 -0
- package/dist/server/OutboxBuffer.d.ts +33 -0
- package/dist/server/OutboxBuffer.js +68 -0
- package/dist/server/SeenMessages.d.ts +13 -0
- package/dist/server/SeenMessages.js +31 -0
- package/dist/server/StateTimers.d.ts +34 -0
- package/dist/server/StateTimers.js +70 -0
- package/dist/server/ZiggsEffectHandler.d.ts +79 -0
- package/dist/server/ZiggsEffectHandler.js +319 -0
- package/dist/server/agreements/AgreementService.d.ts +50 -0
- package/dist/server/agreements/AgreementService.js +85 -0
- package/dist/server/createHealthServer.d.ts +7 -0
- package/dist/server/createHealthServer.js +75 -0
- package/dist/server/proactive/ProactiveTrigger.d.ts +33 -0
- package/dist/server/proactive/ProactiveTrigger.js +71 -0
- package/dist/server/runLauncher.d.ts +28 -0
- package/dist/server/runLauncher.js +93 -0
- package/dist/server/tasks/TaskService.d.ts +25 -0
- package/dist/server/tasks/TaskService.js +103 -0
- package/dist/server/tasks/index.js +1 -0
- package/dist/server/telemetryIngest.d.ts +24 -0
- package/dist/server/telemetryIngest.js +62 -0
- package/dist/server/tools/index.d.ts +24 -0
- package/{src/server/tools/index.ts → dist/server/tools/index.js} +4 -24
- package/dist/server/tools/tier1/protocolRunner.d.ts +39 -0
- package/dist/server/tools/tier1/protocolRunner.js +288 -0
- package/dist/server/tools/tier1/protocolTools.d.ts +12 -0
- package/dist/server/tools/tier1/protocolTools.js +37 -0
- package/dist/server/tools/tier2/connectionTools.d.ts +4 -0
- package/dist/server/tools/tier2/connectionTools.js +63 -0
- package/dist/server/tools/tier2/contextTools.d.ts +4 -0
- package/dist/server/tools/tier2/contextTools.js +46 -0
- package/dist/server/tools/tier2/discoveryTools.d.ts +4 -0
- package/dist/server/tools/tier2/discoveryTools.js +25 -0
- package/dist/server/tools/tier2/marketplaceTools.d.ts +3 -0
- package/dist/server/tools/tier2/marketplaceTools.js +22 -0
- package/dist/server/tools/tier2/paymentTools.d.ts +12 -0
- package/dist/server/tools/tier2/paymentTools.js +165 -0
- package/dist/server/ziggsconnect/ZiggsConnectClient.d.ts +35 -0
- package/dist/server/ziggsconnect/ZiggsConnectClient.js +95 -0
- package/dist/server/ziggscontext/ZiggsContextClient.d.ts +48 -0
- package/dist/server/ziggscontext/ZiggsContextClient.js +90 -0
- package/dist/server/ziggspay/ZiggsPayClient.d.ts +82 -0
- package/dist/server/ziggspay/ZiggsPayClient.js +188 -0
- package/dist/shared/ids.d.ts +1 -0
- package/dist/shared/ids.js +3 -0
- package/dist/shared/runtimeLog.d.ts +18 -0
- package/dist/shared/runtimeLog.js +68 -0
- package/dist/shared/types.d.ts +22 -0
- package/dist/shared/types.js +23 -0
- package/dist/tasks/protocolRegistry.d.ts +16 -0
- package/dist/tasks/protocolRegistry.js +20 -0
- package/dist/tools/ToolManager.d.ts +12 -0
- package/dist/tools/ToolManager.js +74 -0
- package/dist/tools/ToolProvider.d.ts +6 -0
- package/dist/tools/ToolProvider.js +21 -0
- package/dist/tools/defineTool.d.ts +27 -0
- package/dist/tools/defineTool.js +62 -0
- package/{src/tools/index.ts → dist/tools/index.d.ts} +0 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/recordReport.d.ts +41 -0
- package/dist/tools/recordReport.js +30 -0
- package/dist/types.d.ts +466 -0
- package/dist/types.js +7 -0
- package/dist/utils/jsonExtractor.d.ts +2 -0
- package/dist/utils/jsonExtractor.js +111 -0
- package/package.json +17 -7
- package/src/AgentHost.ts +0 -545
- package/src/adapters/AnthropicAdapter.ts +0 -206
- package/src/adapters/McpAdapter.ts +0 -348
- package/src/adapters/OpenAIAdapter.ts +0 -187
- package/src/agent/Agent.ts +0 -104
- package/src/cognition/validateContext.ts +0 -95
- package/src/context/applyEffects.ts +0 -80
- package/src/context/batch.ts +0 -19
- package/src/context/classifyEnvelope.ts +0 -38
- package/src/context/routingLabels.ts +0 -46
- package/src/defineAgent.ts +0 -70
- package/src/formatters/AgreementFormatter.ts +0 -111
- package/src/formatters/HistoryFormatter.ts +0 -172
- package/src/ingress/normalizeIncoming.ts +0 -162
- package/src/memory/MemoryStore.ts +0 -104
- package/src/pricing/fleetDefaults.ts +0 -225
- package/src/pricing/fleetEvalFree.ts +0 -24
- package/src/pricing/fleetTierByAgentId.gen.ts +0 -775
- package/src/runtime/AgentMachine.ts +0 -402
- package/src/runtime/PromptBuilder.ts +0 -485
- package/src/runtime/buildOutcome.ts +0 -563
- package/src/runtime/defaults.ts +0 -75
- package/src/runtime/kickoff.ts +0 -117
- package/src/runtime/runTurn.ts +0 -813
- package/src/runtime/validateWorkflow.ts +0 -202
- package/src/server/ConnectionPool.ts +0 -206
- package/src/server/EventQueue.ts +0 -133
- package/src/server/InboxCatchUp.ts +0 -254
- package/src/server/OutboxBuffer.ts +0 -90
- package/src/server/SeenMessages.ts +0 -27
- package/src/server/StateTimers.ts +0 -85
- package/src/server/ZiggsEffectHandler.ts +0 -418
- package/src/server/agreements/AgreementService.ts +0 -118
- package/src/server/createHealthServer.ts +0 -85
- package/src/server/proactive/ProactiveTrigger.ts +0 -83
- package/src/server/runLauncher.ts +0 -146
- package/src/server/tasks/TaskService.ts +0 -110
- package/src/server/telemetryIngest.ts +0 -91
- package/src/server/tools/tier1/protocolRunner.ts +0 -144
- package/src/server/tools/tier1/protocolTools.ts +0 -99
- package/src/server/tools/tier2/connectionTools.ts +0 -75
- package/src/server/tools/tier2/contextTools.ts +0 -63
- package/src/server/tools/tier2/discoveryTools.ts +0 -34
- package/src/server/tools/tier2/marketplaceTools.ts +0 -27
- package/src/server/tools/tier2/paymentTools.ts +0 -170
- package/src/server/ziggsconnect/ZiggsConnectClient.ts +0 -126
- package/src/server/ziggscontext/ZiggsContextClient.ts +0 -129
- package/src/server/ziggspay/ZiggsPayClient.ts +0 -193
- package/src/shared/ids.ts +0 -3
- package/src/shared/runtimeLog.ts +0 -72
- package/src/shared/types.ts +0 -29
- package/src/tasks/protocolRegistry.ts +0 -25
- package/src/tools/ToolManager.ts +0 -95
- package/src/tools/ToolProvider.ts +0 -19
- package/src/tools/defineTool.ts +0 -90
- package/src/tools/recordReport.ts +0 -82
- package/src/types.ts +0 -456
- package/src/utils/jsonExtractor.ts +0 -100
- /package/{src/adapters/index.ts → dist/adapters/index.d.ts} +0 -0
- /package/{src/formatters/index.ts → dist/formatters/index.d.ts} +0 -0
- /package/{src/server/tasks/index.ts → dist/server/tasks/index.d.ts} +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { ConnectionPool } from './ConnectionPool.js';
|
|
2
|
+
import { AgentHost } from '../AgentHost.js';
|
|
3
|
+
import { createHealthServer } from './createHealthServer.js';
|
|
4
|
+
import { runtimeLog } from '../shared/runtimeLog.js';
|
|
5
|
+
export async function runLauncher(configOrConfigs, opts = {}) {
|
|
6
|
+
if (Array.isArray(configOrConfigs))
|
|
7
|
+
return runFleet(configOrConfigs, opts);
|
|
8
|
+
return runSingle(configOrConfigs, opts);
|
|
9
|
+
}
|
|
10
|
+
async function runSingle(config, { operatorKey, label = 'agent', port = process.env.PORT || 8080, healthServer = true, onShutdown } = {}) {
|
|
11
|
+
const effectiveKey = operatorKey ?? process.env.ZIGGS_OPERATOR_KEY;
|
|
12
|
+
const decorated = effectiveKey && !config.operatorKey ? { ...config, operatorKey: effectiveKey } : config;
|
|
13
|
+
const agent = new AgentHost(decorated);
|
|
14
|
+
try {
|
|
15
|
+
await agent.connectAsync();
|
|
16
|
+
runtimeLog.info(label, `"${agent['options'] ? (agent['options']?.agentId ?? agent['options']?.name) : 'agent'}" connected`);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
runtimeLog.warn(label, `Agent failed to connect at startup: ${err.message} — will retry`);
|
|
20
|
+
}
|
|
21
|
+
const server = healthServer ? createHealthServer({ port: Number(port), label }) : null;
|
|
22
|
+
process.on('SIGTERM', async () => {
|
|
23
|
+
runtimeLog.info(label, 'SIGTERM — shutting down');
|
|
24
|
+
agent.disconnect();
|
|
25
|
+
await agent.drain(30_000);
|
|
26
|
+
try {
|
|
27
|
+
await onShutdown?.();
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
runtimeLog.warn(label, `onShutdown error: ${err.message}`);
|
|
31
|
+
}
|
|
32
|
+
server?.close();
|
|
33
|
+
process.exit(0);
|
|
34
|
+
});
|
|
35
|
+
return { agent, healthServer: server ?? undefined };
|
|
36
|
+
}
|
|
37
|
+
async function runFleet(configs, { operatorKey, wsUrl = process.env.WS_URL, port = process.env.PORT || 8080, healthServer = true, label = 'launcher', agentMeta, primary: primaryConfig, preWake = [], poolOptions, onShutdown, } = {}) {
|
|
38
|
+
const pool = new ConnectionPool(poolOptions);
|
|
39
|
+
const effectiveKey = operatorKey ?? process.env.ZIGGS_OPERATOR_KEY;
|
|
40
|
+
const decoratedConfigs = effectiveKey
|
|
41
|
+
? configs.map(c => (c.operatorKey ? c : { ...c, operatorKey: effectiveKey }))
|
|
42
|
+
: configs;
|
|
43
|
+
pool.register(decoratedConfigs, agentMeta);
|
|
44
|
+
const server = healthServer ? createHealthServer({ port: Number(port), label, pool }) : null;
|
|
45
|
+
let resolvedPrimaryConfig = typeof primaryConfig === 'function'
|
|
46
|
+
? primaryConfig(pool)
|
|
47
|
+
: primaryConfig;
|
|
48
|
+
if (resolvedPrimaryConfig && effectiveKey && !resolvedPrimaryConfig.operatorKey) {
|
|
49
|
+
resolvedPrimaryConfig = { ...resolvedPrimaryConfig, operatorKey: effectiveKey };
|
|
50
|
+
}
|
|
51
|
+
const controlKey = effectiveKey ?? configs.find(c => c.operatorKey)?.operatorKey ?? resolvedPrimaryConfig?.operatorKey;
|
|
52
|
+
if (controlKey) {
|
|
53
|
+
pool.startControl({ wsUrl, operatorKey: controlKey });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
runtimeLog.warn(label, 'No operatorKey provided — skipping control socket');
|
|
57
|
+
}
|
|
58
|
+
let primary = null;
|
|
59
|
+
if (resolvedPrimaryConfig) {
|
|
60
|
+
primary = new AgentHost(resolvedPrimaryConfig);
|
|
61
|
+
try {
|
|
62
|
+
await primary.connectAsync();
|
|
63
|
+
runtimeLog.info(label, `Primary agent "${resolvedPrimaryConfig.name || resolvedPrimaryConfig.ownAgentId || 'primary'}" connected`);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
// Backend may not be ready yet — socket.io reconnects automatically.
|
|
67
|
+
// Don't crash the process; the primary agent will be live once it reconnects.
|
|
68
|
+
runtimeLog.warn(label, `Primary agent "${resolvedPrimaryConfig.name || resolvedPrimaryConfig.ownAgentId || 'primary'}" failed to connect at startup: ${err.message} — will retry`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (preWake.length > 0) {
|
|
72
|
+
await Promise.all(preWake.map(id => pool.wake(id)
|
|
73
|
+
.then(() => runtimeLog.debug(label, `Pre-woke "${id}"`))
|
|
74
|
+
.catch(err => runtimeLog.warn(label, `Could not pre-wake "${id}": ${err.message}`))));
|
|
75
|
+
}
|
|
76
|
+
runtimeLog.info(label, `Ready — ${pool.size} agent(s) registered, ${pool.listActive().length} connected`);
|
|
77
|
+
process.on('SIGTERM', async () => {
|
|
78
|
+
runtimeLog.info(label, 'SIGTERM — shutting down');
|
|
79
|
+
pool.stopControl();
|
|
80
|
+
primary?.disconnect?.();
|
|
81
|
+
await primary?.drain?.(30_000);
|
|
82
|
+
await pool.disconnectAll();
|
|
83
|
+
try {
|
|
84
|
+
await onShutdown?.();
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
runtimeLog.warn(label, `onShutdown error: ${err.message}`);
|
|
88
|
+
}
|
|
89
|
+
server?.close();
|
|
90
|
+
process.exit(0);
|
|
91
|
+
});
|
|
92
|
+
return { pool, primary, healthServer: server ?? undefined };
|
|
93
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Task, type TaskState } from '@ziggs-ai/api-client';
|
|
2
|
+
import type { CountTasksFilters } from '@ziggs-ai/api-client';
|
|
3
|
+
export declare class TaskService {
|
|
4
|
+
private creds;
|
|
5
|
+
constructor(operatorKey: string, agentId: string);
|
|
6
|
+
getTask(taskId: string): Promise<Task>;
|
|
7
|
+
getActiveTasksForAgent(agentId: string): Promise<Task[]>;
|
|
8
|
+
getActiveTasksForChat(chatId: string): Promise<Task[]>;
|
|
9
|
+
getSubtasks(parentTaskId: string): Promise<Task[]>;
|
|
10
|
+
spawnUnderAgreement(agreementId: string, taskData: {
|
|
11
|
+
description: string;
|
|
12
|
+
parentTaskId?: string;
|
|
13
|
+
plan?: unknown;
|
|
14
|
+
planReviewTiming?: string;
|
|
15
|
+
requireMidWorkPlanAck?: boolean;
|
|
16
|
+
assigneeId?: string;
|
|
17
|
+
inputArtifactIds?: string[];
|
|
18
|
+
}): Promise<Task>;
|
|
19
|
+
updateState(taskId: string, state: TaskState, result?: unknown): Promise<Task>;
|
|
20
|
+
updatePlanStep(taskId: string, stepId: string, status: string, result?: unknown): Promise<Task>;
|
|
21
|
+
cancel(taskId: string): Promise<Task>;
|
|
22
|
+
report(taskId: string, message?: string): Promise<Task>;
|
|
23
|
+
setSatisfaction(taskId: string, satisfaction: 'positive' | 'negative'): Promise<Task>;
|
|
24
|
+
count(filters?: CountTasksFilters): Promise<number>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { createTask, getTask, getActiveTasksForAgent, getActiveTasksForChat, getSubtasks, updateTaskState, updateTaskPlanStep, cancelTask, reportTask, setTaskSatisfaction, countTasks, } from '@ziggs-ai/api-client';
|
|
2
|
+
import { runtimeLog } from '../../shared/runtimeLog.js';
|
|
3
|
+
function safeJsonStringify(value) {
|
|
4
|
+
if (value === null || value === undefined)
|
|
5
|
+
return value;
|
|
6
|
+
if (typeof value === 'string')
|
|
7
|
+
return value;
|
|
8
|
+
if (typeof value !== 'object')
|
|
9
|
+
return String(value);
|
|
10
|
+
const seen = new WeakSet();
|
|
11
|
+
try {
|
|
12
|
+
return JSON.stringify(value, (_key, val) => {
|
|
13
|
+
if (typeof val === 'object' && val !== null) {
|
|
14
|
+
if (seen.has(val))
|
|
15
|
+
return '[Circular]';
|
|
16
|
+
seen.add(val);
|
|
17
|
+
}
|
|
18
|
+
return val;
|
|
19
|
+
}, 2);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return String(value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class TaskService {
|
|
26
|
+
creds;
|
|
27
|
+
constructor(operatorKey, agentId) {
|
|
28
|
+
if (!operatorKey)
|
|
29
|
+
throw new Error('TaskService: operatorKey is required');
|
|
30
|
+
if (!agentId)
|
|
31
|
+
throw new Error('TaskService: agentId is required (operator-token impersonation)');
|
|
32
|
+
this.creds = { operatorKey, agentId };
|
|
33
|
+
}
|
|
34
|
+
async getTask(taskId) {
|
|
35
|
+
return getTask(taskId, this.creds);
|
|
36
|
+
}
|
|
37
|
+
async getActiveTasksForAgent(agentId) {
|
|
38
|
+
return getActiveTasksForAgent(agentId, this.creds);
|
|
39
|
+
}
|
|
40
|
+
async getActiveTasksForChat(chatId) {
|
|
41
|
+
return getActiveTasksForChat(chatId, this.creds);
|
|
42
|
+
}
|
|
43
|
+
async getSubtasks(parentTaskId) {
|
|
44
|
+
return getSubtasks(parentTaskId, this.creds);
|
|
45
|
+
}
|
|
46
|
+
async spawnUnderAgreement(agreementId, taskData) {
|
|
47
|
+
if (!agreementId)
|
|
48
|
+
throw new Error('TaskService.spawnUnderAgreement: agreementId is required');
|
|
49
|
+
try {
|
|
50
|
+
const result = await createTask({ ...taskData, agreementId }, this.creds);
|
|
51
|
+
runtimeLog.info('TaskService', `Task spawned under agreement ${agreementId}: ${result?.taskId || 'unknown'}`);
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const e = error;
|
|
56
|
+
runtimeLog.error('TaskService', `Task spawn failed (agreement ${agreementId}, assignee ${taskData.assigneeId ?? '-'}): status=${e.status ?? '?'} ${e.message}${e.body ? ` | body=${e.body}` : ''}`);
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async updateState(taskId, state, result) {
|
|
61
|
+
try {
|
|
62
|
+
const data = result !== undefined ? { result: safeJsonStringify(result) } : {};
|
|
63
|
+
const updated = await updateTaskState(taskId, state, data, this.creds);
|
|
64
|
+
runtimeLog.info('TaskService', `Task state: ${taskId} → ${state}`);
|
|
65
|
+
return updated;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
runtimeLog.error('TaskService', `Task state update failed: ${error.message}`);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async updatePlanStep(taskId, stepId, status, result) {
|
|
73
|
+
try {
|
|
74
|
+
const updated = await updateTaskPlanStep(taskId, stepId, status, result, this.creds);
|
|
75
|
+
runtimeLog.info('TaskService', `Task plan step: ${taskId}/${stepId} → ${status}`);
|
|
76
|
+
return updated;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
runtimeLog.error('TaskService', `Task plan step update failed: ${error.message}`);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async cancel(taskId) {
|
|
84
|
+
try {
|
|
85
|
+
const updated = await cancelTask(taskId, this.creds);
|
|
86
|
+
runtimeLog.info('TaskService', `Task cancelled: ${taskId}`);
|
|
87
|
+
return updated;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
runtimeLog.error('TaskService', `Task cancel failed: ${error.message}`);
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async report(taskId, message = '') {
|
|
95
|
+
return reportTask(taskId, message, this.creds);
|
|
96
|
+
}
|
|
97
|
+
async setSatisfaction(taskId, satisfaction) {
|
|
98
|
+
return setTaskSatisfaction(taskId, satisfaction, this.creds);
|
|
99
|
+
}
|
|
100
|
+
async count(filters = {}) {
|
|
101
|
+
return countTasks(filters, this.creds);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TaskService } from './TaskService.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LlmResponse } from '../types.js';
|
|
2
|
+
import type { TelemetryClient } from '@ziggs-ai/api-client';
|
|
3
|
+
export declare function isTelemetryIngestEnabled(explicit?: boolean): boolean;
|
|
4
|
+
export declare function usageFromLlmResponse(response: LlmResponse): {
|
|
5
|
+
tokensTotal: number;
|
|
6
|
+
tokensInput: number;
|
|
7
|
+
tokensOutput: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function buildLlmIngestPayload(response: LlmResponse, ctx: {
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
durationMs: number;
|
|
12
|
+
runId?: string;
|
|
13
|
+
stateId?: string;
|
|
14
|
+
}): Record<string, unknown>;
|
|
15
|
+
export declare function buildToolIngestPayload(ctx: {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
tool: string;
|
|
18
|
+
durationMs: number;
|
|
19
|
+
ok: boolean;
|
|
20
|
+
runId?: string;
|
|
21
|
+
stateId?: string;
|
|
22
|
+
}): Record<string, unknown>;
|
|
23
|
+
/** Fire-and-forget; never throws to the effect handler. */
|
|
24
|
+
export declare function sendTelemetry(client: TelemetryClient | undefined, payload: Record<string, unknown>, enabled: boolean): void;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export function isTelemetryIngestEnabled(explicit) {
|
|
2
|
+
if (explicit === false)
|
|
3
|
+
return false;
|
|
4
|
+
if (explicit === true)
|
|
5
|
+
return true;
|
|
6
|
+
const env = process.env.ZIGGS_TELEMETRY_INGEST;
|
|
7
|
+
if (env === '0' || env === 'false')
|
|
8
|
+
return false;
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
export function usageFromLlmResponse(response) {
|
|
12
|
+
const u = response.usage;
|
|
13
|
+
const tokensInput = Number(u?.prompt_tokens ?? u?.promptTokens ?? 0) || 0;
|
|
14
|
+
const tokensOutput = Number(u?.completion_tokens ?? u?.completionTokens ?? 0) || 0;
|
|
15
|
+
const tokensTotal = Number(u?.total_tokens ?? u?.totalTokens ?? 0) ||
|
|
16
|
+
tokensInput + tokensOutput;
|
|
17
|
+
return { tokensTotal, tokensInput, tokensOutput };
|
|
18
|
+
}
|
|
19
|
+
export function buildLlmIngestPayload(response, ctx) {
|
|
20
|
+
const { tokensTotal, tokensInput, tokensOutput } = usageFromLlmResponse(response);
|
|
21
|
+
const chatId = ctx.sessionId ?? null;
|
|
22
|
+
return {
|
|
23
|
+
source: 'agent',
|
|
24
|
+
chatId,
|
|
25
|
+
sessionId: chatId,
|
|
26
|
+
execution: {
|
|
27
|
+
llmCallsTotal: 1,
|
|
28
|
+
tokensTotal,
|
|
29
|
+
tokensInput,
|
|
30
|
+
tokensOutput,
|
|
31
|
+
...(tokensTotal > 0 ? { tokensPerLlmCall: [tokensTotal] } : {}),
|
|
32
|
+
},
|
|
33
|
+
resource: { durationMs: Math.max(0, Math.round(ctx.durationMs)) },
|
|
34
|
+
meta: {
|
|
35
|
+
effect: 'llm-call',
|
|
36
|
+
...(ctx.runId ? { runId: ctx.runId } : {}),
|
|
37
|
+
...(ctx.stateId ? { stateId: ctx.stateId } : {}),
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function buildToolIngestPayload(ctx) {
|
|
42
|
+
return {
|
|
43
|
+
source: 'agent',
|
|
44
|
+
chatId: ctx.sessionId,
|
|
45
|
+
sessionId: ctx.sessionId,
|
|
46
|
+
execution: { executionLoops: 1 },
|
|
47
|
+
resource: { durationMs: Math.max(0, Math.round(ctx.durationMs)) },
|
|
48
|
+
meta: {
|
|
49
|
+
effect: 'tool-call',
|
|
50
|
+
tool: ctx.tool,
|
|
51
|
+
ok: ctx.ok,
|
|
52
|
+
...(ctx.runId ? { runId: ctx.runId } : {}),
|
|
53
|
+
...(ctx.stateId ? { stateId: ctx.stateId } : {}),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Fire-and-forget; never throws to the effect handler. */
|
|
58
|
+
export function sendTelemetry(client, payload, enabled) {
|
|
59
|
+
if (!enabled || !client)
|
|
60
|
+
return;
|
|
61
|
+
void client.send(payload).catch(() => { });
|
|
62
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent tool bundles, in two tiers. Single home for everything an agent can
|
|
3
|
+
* "speak" or "do" over the wire.
|
|
4
|
+
*
|
|
5
|
+
* Tier 1 — protocol grammar (tier1/). The verbs every agent uses to participate
|
|
6
|
+
* in the agreement/task system. Framework-managed: attached via the `taskTools`
|
|
7
|
+
* config (default 'all'), dispatched to in-process services (taskService /
|
|
8
|
+
* agreementService) injected into tool context — NOT passed in the user `tools:`
|
|
9
|
+
* array. Publishing open work is part of this grammar:
|
|
10
|
+
* agreement_propose({ proposedTo: "everyone" }) for a public broadcast, or
|
|
11
|
+
* proposedTo: "org" to scope it to your org — there is no separate publish tool.
|
|
12
|
+
*
|
|
13
|
+
* Tier 2 — capability bundles (tier2/). Opt-in, HTTP-backed tool bundles an agent
|
|
14
|
+
* chooses to have. Off by default; an agent gains a bundle by spreading it into
|
|
15
|
+
* its `tools:` array. Each tool reads operatorKey/agentId from tool context and
|
|
16
|
+
* wraps a backend HTTP client — no per-agent plumbing.
|
|
17
|
+
*/
|
|
18
|
+
export { PROTOCOL_TOOLS, agreementProposeTool, agreementSubcontractTool, agreementRespondTool, agreementCounterProposalTool, agreementCheckProposalTool, agreementRevokeTool, taskSpawnTool, taskUpdateTool, taskUpdatePlanStepTool, } from './tier1/protocolTools.js';
|
|
19
|
+
export { dispatchProtocolOp } from './tier1/protocolRunner.js';
|
|
20
|
+
export { DISCOVERY_TOOLS, agentSearchTool, agentGetTool } from './tier2/discoveryTools.js';
|
|
21
|
+
export { MARKETPLACE_TOOLS, marketplaceViewTool } from './tier2/marketplaceTools.js';
|
|
22
|
+
export { PAYMENT_TOOLS, paymentBalanceTool, paymentTransferTool, paymentWaitForApprovalTool, paymentHoldTool, paymentReleaseTool, paymentResolveWalletTool, paymentIssueGrantTool, paymentAttenuateGrantTool, paymentRevokeGrantTool, paymentListGrantsTool, } from './tier2/paymentTools.js';
|
|
23
|
+
export { CONNECTION_TOOLS, connectionProxyTool, connectionListGrantsTool, } from './tier2/connectionTools.js';
|
|
24
|
+
export { CONTEXT_TOOLS, contextDiscoverTool, contextDelegateTool, } from './tier2/contextTools.js';
|
|
@@ -15,32 +15,12 @@
|
|
|
15
15
|
* its `tools:` array. Each tool reads operatorKey/agentId from tool context and
|
|
16
16
|
* wraps a backend HTTP client — no per-agent plumbing.
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
18
|
// ── Tier 1: protocol grammar ────────────────────────────────────────────────
|
|
20
|
-
export {
|
|
21
|
-
PROTOCOL_TOOLS,
|
|
22
|
-
agreementProposeTool, agreementSubcontractTool, agreementRespondTool,
|
|
23
|
-
agreementCounterProposalTool, agreementCheckProposalTool, agreementRevokeTool,
|
|
24
|
-
taskSpawnTool, taskUpdateTool, taskUpdatePlanStepTool,
|
|
25
|
-
} from './tier1/protocolTools.js';
|
|
19
|
+
export { PROTOCOL_TOOLS, agreementProposeTool, agreementSubcontractTool, agreementRespondTool, agreementCounterProposalTool, agreementCheckProposalTool, agreementRevokeTool, taskSpawnTool, taskUpdateTool, taskUpdatePlanStepTool, } from './tier1/protocolTools.js';
|
|
26
20
|
export { dispatchProtocolOp } from './tier1/protocolRunner.js';
|
|
27
|
-
|
|
28
21
|
// ── Tier 2: capability bundles ──────────────────────────────────────────────
|
|
29
22
|
export { DISCOVERY_TOOLS, agentSearchTool, agentGetTool } from './tier2/discoveryTools.js';
|
|
30
23
|
export { MARKETPLACE_TOOLS, marketplaceViewTool } from './tier2/marketplaceTools.js';
|
|
31
|
-
export {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
paymentHoldTool, paymentReleaseTool, paymentResolveWalletTool,
|
|
35
|
-
paymentIssueGrantTool, paymentAttenuateGrantTool, paymentRevokeGrantTool, paymentListGrantsTool,
|
|
36
|
-
} from './tier2/paymentTools.js';
|
|
37
|
-
export {
|
|
38
|
-
CONNECTION_TOOLS,
|
|
39
|
-
connectionProxyTool,
|
|
40
|
-
connectionListGrantsTool,
|
|
41
|
-
} from './tier2/connectionTools.js';
|
|
42
|
-
export {
|
|
43
|
-
CONTEXT_TOOLS,
|
|
44
|
-
contextDiscoverTool,
|
|
45
|
-
contextDelegateTool,
|
|
46
|
-
} from './tier2/contextTools.js';
|
|
24
|
+
export { PAYMENT_TOOLS, paymentBalanceTool, paymentTransferTool, paymentWaitForApprovalTool, paymentHoldTool, paymentReleaseTool, paymentResolveWalletTool, paymentIssueGrantTool, paymentAttenuateGrantTool, paymentRevokeGrantTool, paymentListGrantsTool, } from './tier2/paymentTools.js';
|
|
25
|
+
export { CONNECTION_TOOLS, connectionProxyTool, connectionListGrantsTool, } from './tier2/connectionTools.js';
|
|
26
|
+
export { CONTEXT_TOOLS, contextDiscoverTool, contextDelegateTool, } from './tier2/contextTools.js';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AgreementService } from '../../agreements/AgreementService.js';
|
|
2
|
+
import type { TaskService } from '../../tasks/TaskService.js';
|
|
3
|
+
import type { ContextReadClient } from '@ziggs-ai/api-client';
|
|
4
|
+
interface Services {
|
|
5
|
+
agreementService: AgreementService;
|
|
6
|
+
taskService: TaskService;
|
|
7
|
+
contextReadClient: ContextReadClient;
|
|
8
|
+
}
|
|
9
|
+
interface ProtocolPayload {
|
|
10
|
+
operation?: string;
|
|
11
|
+
agreementId?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
proposedTo?: string;
|
|
14
|
+
providerId?: string;
|
|
15
|
+
executorId?: string;
|
|
16
|
+
action?: 'approve' | 'reject';
|
|
17
|
+
price?: number;
|
|
18
|
+
lifecycle?: string;
|
|
19
|
+
expiresAt?: string;
|
|
20
|
+
maxExecutions?: number;
|
|
21
|
+
agreementDescription?: string;
|
|
22
|
+
parentAgreementId?: string;
|
|
23
|
+
parentTaskId?: string;
|
|
24
|
+
taskId?: string;
|
|
25
|
+
stepId?: string;
|
|
26
|
+
assigneeId?: string;
|
|
27
|
+
status?: string;
|
|
28
|
+
result?: unknown;
|
|
29
|
+
plan?: unknown;
|
|
30
|
+
planReviewTiming?: string;
|
|
31
|
+
requireMidWorkPlanAck?: boolean;
|
|
32
|
+
engagementKind?: 'hire' | 'service';
|
|
33
|
+
subtasks?: (string | {
|
|
34
|
+
description?: string;
|
|
35
|
+
})[];
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
}
|
|
38
|
+
export declare function dispatchProtocolOp(services: Services, payload: ProtocolPayload, chatId: string | null, agents?: unknown[], actingAgentId?: string | null): Promise<unknown>;
|
|
39
|
+
export {};
|