jiva-core 0.2.1 → 0.2.3

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.
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Orchestration Logger - Tracks Manager/Worker coordination
3
+ *
4
+ * Writes detailed logs to understand how tasks flow through the dual-agent system.
5
+ * Logs are written to: ~/.jiva/logs/orchestration-{timestamp}.log
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ class OrchestrationLogger {
11
+ static instance;
12
+ logFilePath = null;
13
+ logStream = null;
14
+ sessionStart;
15
+ constructor() {
16
+ this.sessionStart = new Date();
17
+ this.initializeLogFile();
18
+ }
19
+ static getInstance() {
20
+ if (!OrchestrationLogger.instance) {
21
+ OrchestrationLogger.instance = new OrchestrationLogger();
22
+ }
23
+ return OrchestrationLogger.instance;
24
+ }
25
+ initializeLogFile() {
26
+ try {
27
+ // Create logs directory in ~/.jiva/logs/
28
+ const jivaDir = path.join(os.homedir(), '.jiva', 'logs');
29
+ fs.mkdirSync(jivaDir, { recursive: true });
30
+ // Create timestamped log file
31
+ const timestamp = this.sessionStart.toISOString().replace(/[:.]/g, '-');
32
+ this.logFilePath = path.join(jivaDir, `orchestration-${timestamp}.log`);
33
+ // Create write stream
34
+ this.logStream = fs.createWriteStream(this.logFilePath, { flags: 'a' });
35
+ // Write header
36
+ this.writeHeader();
37
+ }
38
+ catch (error) {
39
+ console.error('Failed to initialize orchestration log file:', error);
40
+ this.logFilePath = null;
41
+ this.logStream = null;
42
+ }
43
+ }
44
+ writeHeader() {
45
+ if (!this.logStream)
46
+ return;
47
+ const header = [
48
+ '='.repeat(80),
49
+ 'JIVA ORCHESTRATION LOG',
50
+ `Session started: ${this.sessionStart.toISOString()}`,
51
+ '='.repeat(80),
52
+ '',
53
+ ].join('\n');
54
+ this.logStream.write(header);
55
+ }
56
+ writeEvent(event) {
57
+ if (!this.logStream)
58
+ return;
59
+ const line = [
60
+ `[${event.timestamp}]`,
61
+ `[${event.phase}]`,
62
+ event.event,
63
+ Object.keys(event.details).length > 0 ? JSON.stringify(event.details, null, 2) : '',
64
+ ].filter(Boolean).join(' ');
65
+ this.logStream.write(line + '\n');
66
+ }
67
+ // DualAgent events
68
+ logUserMessage(message) {
69
+ this.writeEvent({
70
+ timestamp: new Date().toISOString(),
71
+ phase: 'DUAL_AGENT',
72
+ event: 'USER_MESSAGE',
73
+ details: { message },
74
+ });
75
+ }
76
+ logPhaseStart(phase) {
77
+ this.writeEvent({
78
+ timestamp: new Date().toISOString(),
79
+ phase: 'DUAL_AGENT',
80
+ event: `PHASE_START_${phase}`,
81
+ details: {},
82
+ });
83
+ }
84
+ logPhaseEnd(phase, durationMs) {
85
+ this.writeEvent({
86
+ timestamp: new Date().toISOString(),
87
+ phase: 'DUAL_AGENT',
88
+ event: `PHASE_END_${phase}`,
89
+ details: { durationMs },
90
+ });
91
+ }
92
+ logFinalResponse(response, totalIterations, toolsUsed) {
93
+ this.writeEvent({
94
+ timestamp: new Date().toISOString(),
95
+ phase: 'DUAL_AGENT',
96
+ event: 'FINAL_RESPONSE',
97
+ details: {
98
+ responseLength: response.length,
99
+ totalIterations,
100
+ toolsUsed,
101
+ uniqueTools: [...new Set(toolsUsed)],
102
+ },
103
+ });
104
+ }
105
+ // Manager events
106
+ logManagerCreatePlan(task, context) {
107
+ this.writeEvent({
108
+ timestamp: new Date().toISOString(),
109
+ phase: 'MANAGER',
110
+ event: 'CREATE_PLAN',
111
+ details: { task, context },
112
+ });
113
+ }
114
+ logManagerPlanCreated(subtasks, reasoning) {
115
+ this.writeEvent({
116
+ timestamp: new Date().toISOString(),
117
+ phase: 'MANAGER',
118
+ event: 'PLAN_CREATED',
119
+ details: {
120
+ subtaskCount: subtasks.length,
121
+ subtasks,
122
+ reasoning,
123
+ },
124
+ });
125
+ }
126
+ logManagerReview(subtask, workerResult) {
127
+ this.writeEvent({
128
+ timestamp: new Date().toISOString(),
129
+ phase: 'MANAGER',
130
+ event: 'REVIEW_SUBTASK',
131
+ details: {
132
+ subtask,
133
+ workerResultLength: workerResult.length,
134
+ workerResultPreview: workerResult.substring(0, 200),
135
+ },
136
+ });
137
+ }
138
+ logManagerDecision(isComplete, reasoning, nextAction) {
139
+ this.writeEvent({
140
+ timestamp: new Date().toISOString(),
141
+ phase: 'MANAGER',
142
+ event: 'DECISION',
143
+ details: {
144
+ isComplete,
145
+ reasoning,
146
+ nextAction,
147
+ },
148
+ });
149
+ }
150
+ logManagerSynthesize(resultsCount) {
151
+ this.writeEvent({
152
+ timestamp: new Date().toISOString(),
153
+ phase: 'MANAGER',
154
+ event: 'SYNTHESIZE',
155
+ details: { resultsCount },
156
+ });
157
+ }
158
+ // Worker events
159
+ logWorkerStart(subtask, context) {
160
+ this.writeEvent({
161
+ timestamp: new Date().toISOString(),
162
+ phase: 'WORKER',
163
+ event: 'START_SUBTASK',
164
+ details: { subtask, context },
165
+ });
166
+ }
167
+ logWorkerIteration(iteration, maxIterations) {
168
+ this.writeEvent({
169
+ timestamp: new Date().toISOString(),
170
+ phase: 'WORKER',
171
+ event: 'ITERATION',
172
+ details: { iteration, maxIterations },
173
+ });
174
+ }
175
+ logWorkerToolCall(toolName, args) {
176
+ this.writeEvent({
177
+ timestamp: new Date().toISOString(),
178
+ phase: 'WORKER',
179
+ event: 'TOOL_CALL',
180
+ details: { toolName, args },
181
+ });
182
+ }
183
+ logWorkerToolResult(toolName, success, hasImages) {
184
+ this.writeEvent({
185
+ timestamp: new Date().toISOString(),
186
+ phase: 'WORKER',
187
+ event: 'TOOL_RESULT',
188
+ details: { toolName, success, hasImages },
189
+ });
190
+ }
191
+ logWorkerComplete(success, toolsUsed, iterations) {
192
+ this.writeEvent({
193
+ timestamp: new Date().toISOString(),
194
+ phase: 'WORKER',
195
+ event: 'COMPLETE',
196
+ details: {
197
+ success,
198
+ toolsUsed,
199
+ iterations,
200
+ uniqueTools: [...new Set(toolsUsed)],
201
+ },
202
+ });
203
+ }
204
+ // Utility
205
+ getLogFilePath() {
206
+ return this.logFilePath;
207
+ }
208
+ close() {
209
+ if (this.logStream) {
210
+ const footer = [
211
+ '',
212
+ '='.repeat(80),
213
+ `Session ended: ${new Date().toISOString()}`,
214
+ `Duration: ${Date.now() - this.sessionStart.getTime()}ms`,
215
+ '='.repeat(80),
216
+ ].join('\n');
217
+ this.logStream.write(footer);
218
+ this.logStream.end();
219
+ this.logStream = null;
220
+ }
221
+ }
222
+ }
223
+ export const orchestrationLogger = OrchestrationLogger.getInstance();
224
+ //# sourceMappingURL=orchestration-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-logger.js","sourceRoot":"","sources":["../../src/utils/orchestration-logger.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jiva-core",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Versatile autonomous AI agent powered by gpt-oss-120b with full MCP support. Mission-driven execution, smart conversations, and extensible tooling.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -10,7 +10,7 @@
10
10
  "scripts": {
11
11
  "build": "tsc",
12
12
  "dev": "tsx src/interfaces/cli/index.ts",
13
- "start": "node dist/interfaces/cli/index.js",
13
+ "start": "node --loader ts-node/esm src/interfaces/cli/index.ts",
14
14
  "type-check": "tsc --noEmit",
15
15
  "fix-filesystem": "node fix-filesystem-config.js",
16
16
  "prepublishOnly": "npm run build"
@@ -56,6 +56,7 @@
56
56
  "zod": "^3.24.1"
57
57
  },
58
58
  "devDependencies": {
59
+ "ts-node": "^10.9.2",
59
60
  "@types/inquirer": "^9.0.7",
60
61
  "@types/marked-terminal": "^6.1.1",
61
62
  "@types/node": "^22.10.2",
@@ -63,6 +64,6 @@
63
64
  "typescript": "^5.7.2"
64
65
  },
65
66
  "engines": {
66
- "node": ">=18.0.0"
67
+ "node": ">=20.0.0"
67
68
  }
68
69
  }