@agentmeshhq/agent 0.1.6 → 0.1.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.
Files changed (65) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/context.test.d.ts +1 -0
  3. package/dist/__tests__/context.test.js +353 -0
  4. package/dist/__tests__/context.test.js.map +1 -0
  5. package/dist/cli/config.d.ts +1 -0
  6. package/dist/cli/config.js +129 -0
  7. package/dist/cli/config.js.map +1 -0
  8. package/dist/cli/context.d.ts +4 -0
  9. package/dist/cli/context.js +190 -0
  10. package/dist/cli/context.js.map +1 -0
  11. package/dist/cli/index.js +76 -0
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/logs.d.ts +4 -0
  14. package/dist/cli/logs.js +54 -0
  15. package/dist/cli/logs.js.map +1 -0
  16. package/dist/cli/restart.d.ts +1 -0
  17. package/dist/cli/restart.js +41 -0
  18. package/dist/cli/restart.js.map +1 -0
  19. package/dist/cli/start.d.ts +1 -0
  20. package/dist/cli/start.js +10 -5
  21. package/dist/cli/start.js.map +1 -1
  22. package/dist/cli/status.d.ts +1 -0
  23. package/dist/cli/status.js +73 -0
  24. package/dist/cli/status.js.map +1 -0
  25. package/dist/context/handoff.d.ts +48 -0
  26. package/dist/context/handoff.js +88 -0
  27. package/dist/context/handoff.js.map +1 -0
  28. package/dist/context/index.d.ts +7 -0
  29. package/dist/context/index.js +8 -0
  30. package/dist/context/index.js.map +1 -0
  31. package/dist/context/schema.d.ts +82 -0
  32. package/dist/context/schema.js +33 -0
  33. package/dist/context/schema.js.map +1 -0
  34. package/dist/context/storage.d.ts +49 -0
  35. package/dist/context/storage.js +172 -0
  36. package/dist/context/storage.js.map +1 -0
  37. package/dist/core/daemon.d.ts +7 -0
  38. package/dist/core/daemon.js +53 -2
  39. package/dist/core/daemon.js.map +1 -1
  40. package/dist/core/heartbeat.d.ts +6 -0
  41. package/dist/core/heartbeat.js +8 -0
  42. package/dist/core/heartbeat.js.map +1 -1
  43. package/dist/core/injector.d.ts +9 -0
  44. package/dist/core/injector.js +55 -3
  45. package/dist/core/injector.js.map +1 -1
  46. package/dist/core/tmux.d.ts +13 -0
  47. package/dist/core/tmux.js +62 -0
  48. package/dist/core/tmux.js.map +1 -1
  49. package/package.json +11 -11
  50. package/src/__tests__/context.test.ts +464 -0
  51. package/src/cli/config.ts +148 -0
  52. package/src/cli/context.ts +232 -0
  53. package/src/cli/index.ts +76 -0
  54. package/src/cli/logs.ts +64 -0
  55. package/src/cli/restart.ts +50 -0
  56. package/src/cli/start.ts +11 -9
  57. package/src/cli/status.ts +83 -0
  58. package/src/context/handoff.ts +122 -0
  59. package/src/context/index.ts +8 -0
  60. package/src/context/schema.ts +111 -0
  61. package/src/context/storage.ts +197 -0
  62. package/src/core/daemon.ts +59 -1
  63. package/src/core/heartbeat.ts +13 -0
  64. package/src/core/injector.ts +74 -30
  65. package/src/core/tmux.ts +75 -0
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Context Handoff Module
3
+ * Functions for sharing context between agents via handoffs
4
+ */
5
+ import { loadContext } from "./storage.js";
6
+ /**
7
+ * Extracts handoff-relevant context from full agent context
8
+ */
9
+ export function extractHandoffContext(context) {
10
+ return {
11
+ workdir: context.workingState.workdir,
12
+ gitBranch: context.workingState.gitBranch,
13
+ currentGoal: context.tasks.currentGoal,
14
+ activeTasks: context.tasks.tasks
15
+ .filter((t) => t.status === "in_progress" || t.status === "pending")
16
+ .map((t) => ({
17
+ content: t.content,
18
+ status: t.status,
19
+ priority: t.priority,
20
+ })),
21
+ recentAccomplishments: context.conversation.accomplishments.slice(0, 5),
22
+ topics: context.conversation.topics.slice(0, 10),
23
+ custom: Object.keys(context.custom).length > 0 ? context.custom : undefined,
24
+ };
25
+ }
26
+ /**
27
+ * Gets handoff context for an agent by ID
28
+ */
29
+ export function getHandoffContextForAgent(agentId) {
30
+ const context = loadContext(agentId);
31
+ if (!context) {
32
+ return null;
33
+ }
34
+ return extractHandoffContext(context);
35
+ }
36
+ /**
37
+ * Serializes handoff context to a string for inclusion in API calls
38
+ */
39
+ export function serializeHandoffContext(context) {
40
+ return JSON.stringify(context);
41
+ }
42
+ /**
43
+ * Parses handoff context from a string (received from API)
44
+ */
45
+ export function parseHandoffContext(contextString) {
46
+ try {
47
+ return JSON.parse(contextString);
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ /**
54
+ * Generates a human-readable summary of handoff context
55
+ */
56
+ export function formatHandoffContextSummary(context) {
57
+ const lines = [];
58
+ if (context.workdir) {
59
+ lines.push(`Working directory: ${context.workdir}`);
60
+ }
61
+ if (context.gitBranch) {
62
+ lines.push(`Git branch: ${context.gitBranch}`);
63
+ }
64
+ if (context.currentGoal) {
65
+ lines.push(`Current goal: ${context.currentGoal}`);
66
+ }
67
+ if (context.activeTasks.length > 0) {
68
+ lines.push("");
69
+ lines.push("Active tasks:");
70
+ for (const task of context.activeTasks) {
71
+ const icon = task.status === "in_progress" ? ">" : "-";
72
+ lines.push(` ${icon} ${task.content}`);
73
+ }
74
+ }
75
+ if (context.recentAccomplishments.length > 0) {
76
+ lines.push("");
77
+ lines.push("Recent accomplishments:");
78
+ for (const acc of context.recentAccomplishments) {
79
+ lines.push(` - ${acc}`);
80
+ }
81
+ }
82
+ if (context.topics.length > 0) {
83
+ lines.push("");
84
+ lines.push(`Topics: ${context.topics.join(", ")}`);
85
+ }
86
+ return lines.join("\n");
87
+ }
88
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/context/handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Context Module
3
+ * Agent context persistence for cross-session state management
4
+ */
5
+ export * from "./handoff.js";
6
+ export * from "./schema.js";
7
+ export * from "./storage.js";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Context Module
3
+ * Agent context persistence for cross-session state management
4
+ */
5
+ export * from "./handoff.js";
6
+ export * from "./schema.js";
7
+ export * from "./storage.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Agent Context Schema
3
+ * Defines the structure for persisting agent context across sessions
4
+ */
5
+ export declare const CONTEXT_VERSION = 1;
6
+ export declare const CONTEXT_DIR: string;
7
+ /**
8
+ * Summary of conversation history for context restoration
9
+ */
10
+ export interface ConversationSummary {
11
+ /** Total messages in the conversation */
12
+ messageCount: number;
13
+ /** Key topics discussed */
14
+ topics: string[];
15
+ /** Summary of what was accomplished */
16
+ accomplishments: string[];
17
+ /** Last 5 user messages (truncated) */
18
+ recentMessages: Array<{
19
+ role: "user" | "assistant";
20
+ content: string;
21
+ timestamp: string;
22
+ }>;
23
+ }
24
+ /**
25
+ * Current working state of the agent
26
+ */
27
+ export interface WorkingState {
28
+ /** Current working directory */
29
+ workdir: string;
30
+ /** Recently accessed files */
31
+ recentFiles: string[];
32
+ /** Open file paths being edited */
33
+ openFiles: string[];
34
+ /** Git branch if in a repo */
35
+ gitBranch?: string;
36
+ /** Git status summary */
37
+ gitStatus?: string;
38
+ }
39
+ /**
40
+ * In-progress task state from TodoWrite
41
+ */
42
+ export interface TaskState {
43
+ /** Active tasks */
44
+ tasks: Array<{
45
+ content: string;
46
+ status: "pending" | "in_progress" | "completed" | "cancelled";
47
+ priority: "high" | "medium" | "low";
48
+ }>;
49
+ /** Overall goal being worked on */
50
+ currentGoal?: string;
51
+ }
52
+ /**
53
+ * Custom key-value store for agent-specific context
54
+ */
55
+ export interface CustomContext {
56
+ [key: string]: unknown;
57
+ }
58
+ /**
59
+ * Full agent context structure
60
+ */
61
+ export interface AgentContext {
62
+ /** Schema version for migration support */
63
+ version: number;
64
+ /** Agent ID this context belongs to */
65
+ agentId: string;
66
+ /** Agent name */
67
+ agentName: string;
68
+ /** When this context was last saved */
69
+ savedAt: string;
70
+ /** Conversation summary */
71
+ conversation: ConversationSummary;
72
+ /** Current working state */
73
+ workingState: WorkingState;
74
+ /** Task state */
75
+ tasks: TaskState;
76
+ /** Custom context data */
77
+ custom: CustomContext;
78
+ }
79
+ /**
80
+ * Creates an empty context for a new agent
81
+ */
82
+ export declare function createEmptyContext(agentId: string, agentName: string): AgentContext;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Agent Context Schema
3
+ * Defines the structure for persisting agent context across sessions
4
+ */
5
+ export const CONTEXT_VERSION = 1;
6
+ export const CONTEXT_DIR = `${process.env.HOME}/.agentmesh/context`;
7
+ /**
8
+ * Creates an empty context for a new agent
9
+ */
10
+ export function createEmptyContext(agentId, agentName) {
11
+ return {
12
+ version: CONTEXT_VERSION,
13
+ agentId,
14
+ agentName,
15
+ savedAt: new Date().toISOString(),
16
+ conversation: {
17
+ messageCount: 0,
18
+ topics: [],
19
+ accomplishments: [],
20
+ recentMessages: [],
21
+ },
22
+ workingState: {
23
+ workdir: process.cwd(),
24
+ recentFiles: [],
25
+ openFiles: [],
26
+ },
27
+ tasks: {
28
+ tasks: [],
29
+ },
30
+ custom: {},
31
+ };
32
+ }
33
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/context/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC;AA+EpE;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,SAAiB;IACnE,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,OAAO;QACP,SAAS;QACT,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,YAAY,EAAE;YACZ,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,EAAE;YACV,eAAe,EAAE,EAAE;YACnB,cAAc,EAAE,EAAE;SACnB;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;YACtB,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,EAAE;SACd;QACD,KAAK,EAAE;YACL,KAAK,EAAE,EAAE;SACV;QACD,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Context Storage Module
3
+ * Handles saving and loading agent context to/from disk
4
+ */
5
+ import { type AgentContext } from "./schema.js";
6
+ /**
7
+ * Ensures the context directory exists
8
+ */
9
+ export declare function ensureContextDir(): void;
10
+ /**
11
+ * Gets the context file path for an agent
12
+ */
13
+ export declare function getContextPath(agentId: string): string;
14
+ /**
15
+ * Saves agent context to disk
16
+ */
17
+ export declare function saveContext(context: AgentContext): void;
18
+ /**
19
+ * Loads agent context from disk
20
+ * Returns null if context doesn't exist or is invalid
21
+ */
22
+ export declare function loadContext(agentId: string): AgentContext | null;
23
+ /**
24
+ * Loads context or creates a new empty one
25
+ */
26
+ export declare function loadOrCreateContext(agentId: string, agentName: string): AgentContext;
27
+ /**
28
+ * Deletes agent context from disk
29
+ */
30
+ export declare function deleteContext(agentId: string): boolean;
31
+ /**
32
+ * Lists all saved context files
33
+ */
34
+ export declare function listContexts(): Array<{
35
+ agentId: string;
36
+ savedAt: string;
37
+ }>;
38
+ /**
39
+ * Updates specific fields in the context
40
+ */
41
+ export declare function updateContext(agentId: string, updates: Partial<Omit<AgentContext, "version" | "agentId" | "savedAt">>): AgentContext | null;
42
+ /**
43
+ * Exports context to a specified file path
44
+ */
45
+ export declare function exportContext(agentId: string, outputPath: string): boolean;
46
+ /**
47
+ * Imports context from a file path
48
+ */
49
+ export declare function importContext(inputPath: string): AgentContext | null;
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Context Storage Module
3
+ * Handles saving and loading agent context to/from disk
4
+ */
5
+ import * as fs from "node:fs";
6
+ import * as path from "node:path";
7
+ import { CONTEXT_DIR, CONTEXT_VERSION, createEmptyContext } from "./schema.js";
8
+ /**
9
+ * Ensures the context directory exists
10
+ */
11
+ export function ensureContextDir() {
12
+ if (!fs.existsSync(CONTEXT_DIR)) {
13
+ fs.mkdirSync(CONTEXT_DIR, { recursive: true });
14
+ }
15
+ }
16
+ /**
17
+ * Gets the context file path for an agent
18
+ */
19
+ export function getContextPath(agentId) {
20
+ return path.join(CONTEXT_DIR, `${agentId}.json`);
21
+ }
22
+ /**
23
+ * Saves agent context to disk
24
+ */
25
+ export function saveContext(context) {
26
+ ensureContextDir();
27
+ const contextPath = getContextPath(context.agentId);
28
+ // Update savedAt timestamp
29
+ context.savedAt = new Date().toISOString();
30
+ fs.writeFileSync(contextPath, JSON.stringify(context, null, 2));
31
+ }
32
+ /**
33
+ * Loads agent context from disk
34
+ * Returns null if context doesn't exist or is invalid
35
+ */
36
+ export function loadContext(agentId) {
37
+ const contextPath = getContextPath(agentId);
38
+ try {
39
+ if (!fs.existsSync(contextPath)) {
40
+ return null;
41
+ }
42
+ const content = fs.readFileSync(contextPath, "utf-8");
43
+ const context = JSON.parse(content);
44
+ // Validate version
45
+ if (context.version !== CONTEXT_VERSION) {
46
+ // In the future, we can migrate old versions here
47
+ console.warn(`Context version mismatch: expected ${CONTEXT_VERSION}, got ${context.version}`);
48
+ return null;
49
+ }
50
+ return context;
51
+ }
52
+ catch (error) {
53
+ console.error(`Failed to load context for agent ${agentId}:`, error);
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * Loads context or creates a new empty one
59
+ */
60
+ export function loadOrCreateContext(agentId, agentName) {
61
+ const existing = loadContext(agentId);
62
+ if (existing) {
63
+ return existing;
64
+ }
65
+ return createEmptyContext(agentId, agentName);
66
+ }
67
+ /**
68
+ * Deletes agent context from disk
69
+ */
70
+ export function deleteContext(agentId) {
71
+ const contextPath = getContextPath(agentId);
72
+ try {
73
+ if (fs.existsSync(contextPath)) {
74
+ fs.unlinkSync(contextPath);
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ catch (error) {
80
+ console.error(`Failed to delete context for agent ${agentId}:`, error);
81
+ return false;
82
+ }
83
+ }
84
+ /**
85
+ * Lists all saved context files
86
+ */
87
+ export function listContexts() {
88
+ ensureContextDir();
89
+ try {
90
+ const files = fs.readdirSync(CONTEXT_DIR);
91
+ const contexts = [];
92
+ for (const file of files) {
93
+ if (!file.endsWith(".json"))
94
+ continue;
95
+ const agentId = file.replace(".json", "");
96
+ const context = loadContext(agentId);
97
+ if (context) {
98
+ contexts.push({
99
+ agentId,
100
+ savedAt: context.savedAt,
101
+ });
102
+ }
103
+ }
104
+ return contexts.sort((a, b) => new Date(b.savedAt).getTime() - new Date(a.savedAt).getTime());
105
+ }
106
+ catch {
107
+ return [];
108
+ }
109
+ }
110
+ /**
111
+ * Updates specific fields in the context
112
+ */
113
+ export function updateContext(agentId, updates) {
114
+ const context = loadContext(agentId);
115
+ if (!context) {
116
+ return null;
117
+ }
118
+ const updated = {
119
+ ...context,
120
+ ...updates,
121
+ // Preserve these fields
122
+ version: CONTEXT_VERSION,
123
+ agentId: context.agentId,
124
+ savedAt: new Date().toISOString(),
125
+ };
126
+ saveContext(updated);
127
+ return updated;
128
+ }
129
+ /**
130
+ * Exports context to a specified file path
131
+ */
132
+ export function exportContext(agentId, outputPath) {
133
+ const context = loadContext(agentId);
134
+ if (!context) {
135
+ return false;
136
+ }
137
+ try {
138
+ fs.writeFileSync(outputPath, JSON.stringify(context, null, 2));
139
+ return true;
140
+ }
141
+ catch (error) {
142
+ console.error(`Failed to export context:`, error);
143
+ return false;
144
+ }
145
+ }
146
+ /**
147
+ * Imports context from a file path
148
+ */
149
+ export function importContext(inputPath) {
150
+ try {
151
+ if (!fs.existsSync(inputPath)) {
152
+ console.error(`File not found: ${inputPath}`);
153
+ return null;
154
+ }
155
+ const content = fs.readFileSync(inputPath, "utf-8");
156
+ const context = JSON.parse(content);
157
+ // Validate required fields
158
+ if (!context.agentId || !context.agentName) {
159
+ console.error("Invalid context file: missing agentId or agentName");
160
+ return null;
161
+ }
162
+ // Update version and save
163
+ context.version = CONTEXT_VERSION;
164
+ saveContext(context);
165
+ return context;
166
+ }
167
+ catch (error) {
168
+ console.error(`Failed to import context:`, error);
169
+ return null;
170
+ }
171
+ }
172
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/context/storage.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export interface DaemonOptions {
4
4
  workdir?: string;
5
5
  model?: string;
6
6
  daemonize?: boolean;
7
+ /** Whether to restore context from previous session (default: true) */
8
+ restoreContext?: boolean;
7
9
  }
8
10
  export declare class AgentDaemon {
9
11
  private agentName;
@@ -14,7 +16,12 @@ export declare class AgentDaemon {
14
16
  private token;
15
17
  private agentId;
16
18
  private isRunning;
19
+ private shouldRestoreContext;
17
20
  constructor(options: DaemonOptions);
18
21
  start(): Promise<void>;
19
22
  stop(): Promise<void>;
23
+ /**
24
+ * Saves the current agent context to disk
25
+ */
26
+ private saveAgentContext;
20
27
  }
@@ -1,8 +1,9 @@
1
1
  import { addAgentToState, getAgentState, loadConfig, removeAgentFromState, updateAgentInState, } from "../config/loader.js";
2
+ import { loadContext, loadOrCreateContext, saveContext } from "../context/index.js";
2
3
  import { Heartbeat } from "./heartbeat.js";
3
- import { handleWebSocketEvent, injectStartupMessage } from "./injector.js";
4
+ import { handleWebSocketEvent, injectRestoredContext, injectStartupMessage } from "./injector.js";
4
5
  import { checkInbox, registerAgent } from "./registry.js";
5
- import { createSession, destroySession, getSessionName, sessionExists, updateSessionEnvironment, } from "./tmux.js";
6
+ import { captureSessionContext, createSession, destroySession, getSessionName, sessionExists, updateSessionEnvironment, } from "./tmux.js";
6
7
  import { AgentWebSocket } from "./websocket.js";
7
8
  export class AgentDaemon {
8
9
  agentName;
@@ -13,6 +14,7 @@ export class AgentDaemon {
13
14
  token = null;
14
15
  agentId = null;
15
16
  isRunning = false;
17
+ shouldRestoreContext;
16
18
  constructor(options) {
17
19
  const config = loadConfig();
18
20
  if (!config) {
@@ -20,6 +22,7 @@ export class AgentDaemon {
20
22
  }
21
23
  this.config = config;
22
24
  this.agentName = options.name;
25
+ this.shouldRestoreContext = options.restoreContext !== false;
23
26
  // Find or create agent config
24
27
  let agentConfig = config.agents.find((a) => a.name === options.name);
25
28
  if (!agentConfig) {
@@ -101,6 +104,11 @@ export class AgentDaemon {
101
104
  onError: (error) => {
102
105
  console.error("Heartbeat error:", error.message);
103
106
  },
107
+ onContextSave: () => {
108
+ // Periodically save context (every 5 heartbeats = ~2.5 minutes)
109
+ this.saveAgentContext();
110
+ },
111
+ contextSaveFrequency: 5,
104
112
  onTokenRefresh: (newToken) => {
105
113
  this.token = newToken;
106
114
  // Update state file
@@ -167,6 +175,17 @@ export class AgentDaemon {
167
175
  console.error("Failed to check inbox:", error);
168
176
  injectStartupMessage(this.agentName, 0);
169
177
  }
178
+ // Restore context from previous session
179
+ if (this.shouldRestoreContext && this.agentId) {
180
+ console.log("Checking for previous context...");
181
+ const savedContext = loadContext(this.agentId);
182
+ if (savedContext) {
183
+ console.log(`Restoring context from ${savedContext.savedAt}`);
184
+ // Wait a moment for the session to be ready
185
+ await new Promise((resolve) => setTimeout(resolve, 1000));
186
+ injectRestoredContext(this.agentName, savedContext);
187
+ }
188
+ }
170
189
  this.isRunning = true;
171
190
  console.log(`
172
191
  Agent "${this.agentName}" is running.
@@ -187,6 +206,11 @@ Nudge agent:
187
206
  async stop() {
188
207
  console.log(`\nStopping agent: ${this.agentName}`);
189
208
  this.isRunning = false;
209
+ // Save context before stopping
210
+ if (this.agentId) {
211
+ console.log("Saving agent context...");
212
+ this.saveAgentContext();
213
+ }
190
214
  // Stop heartbeat
191
215
  if (this.heartbeat) {
192
216
  this.heartbeat.stop();
@@ -204,5 +228,32 @@ Nudge agent:
204
228
  console.log("Agent stopped.");
205
229
  process.exit(0);
206
230
  }
231
+ /**
232
+ * Saves the current agent context to disk
233
+ */
234
+ saveAgentContext() {
235
+ if (!this.agentId)
236
+ return;
237
+ try {
238
+ // Load existing context or create new
239
+ const context = loadOrCreateContext(this.agentId, this.agentName);
240
+ // Capture current session state
241
+ const sessionContext = captureSessionContext(this.agentName);
242
+ if (sessionContext) {
243
+ context.workingState = {
244
+ ...context.workingState,
245
+ workdir: sessionContext.workdir,
246
+ gitBranch: sessionContext.gitBranch,
247
+ gitStatus: sessionContext.gitStatus,
248
+ };
249
+ }
250
+ // Save updated context
251
+ saveContext(context);
252
+ console.log(`Context saved for agent ${this.agentName}`);
253
+ }
254
+ catch (error) {
255
+ console.error("Failed to save agent context:", error);
256
+ }
257
+ }
207
258
  }
208
259
  //# sourceMappingURL=daemon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/core/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/core/daemon.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,17 @@ export interface HeartbeatConfig {
8
8
  workspace: string;
9
9
  onError?: (error: Error) => void;
10
10
  onTokenRefresh?: (newToken: string) => void;
11
+ /** Called periodically to save agent context (every N heartbeats) */
12
+ onContextSave?: () => void;
13
+ /** How many heartbeats between context saves (default: 5) */
14
+ contextSaveFrequency?: number;
11
15
  }
12
16
  export declare class Heartbeat {
13
17
  private config;
14
18
  private currentToken;
15
19
  private intervalId;
20
+ private heartbeatCount;
21
+ private contextSaveFrequency;
16
22
  constructor(config: HeartbeatConfig);
17
23
  start(): void;
18
24
  stop(): void;
@@ -5,9 +5,12 @@ export class Heartbeat {
5
5
  config;
6
6
  currentToken;
7
7
  intervalId = null;
8
+ heartbeatCount = 0;
9
+ contextSaveFrequency;
8
10
  constructor(config) {
9
11
  this.config = config;
10
12
  this.currentToken = config.token;
13
+ this.contextSaveFrequency = config.contextSaveFrequency ?? 5;
11
14
  }
12
15
  start() {
13
16
  if (this.intervalId) {
@@ -55,6 +58,11 @@ export class Heartbeat {
55
58
  }
56
59
  throw new Error(`Heartbeat failed: ${response.status}`);
57
60
  }
61
+ // Periodically save context
62
+ this.heartbeatCount++;
63
+ if (this.config.onContextSave && this.heartbeatCount % this.contextSaveFrequency === 0) {
64
+ this.config.onContextSave();
65
+ }
58
66
  }
59
67
  catch (error) {
60
68
  this.config.onError?.(error);