@agentuity/opencode 0.1.41 → 0.1.43
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/README.md +3 -10
- package/dist/agents/lead.d.ts +1 -1
- package/dist/agents/lead.d.ts.map +1 -1
- package/dist/agents/lead.js +2 -3
- package/dist/agents/lead.js.map +1 -1
- package/dist/background/manager.d.ts +1 -0
- package/dist/background/manager.d.ts.map +1 -1
- package/dist/background/manager.js +6 -0
- package/dist/background/manager.js.map +1 -1
- package/dist/plugin/hooks/cadence.d.ts.map +1 -1
- package/dist/plugin/hooks/cadence.js +3 -1
- package/dist/plugin/hooks/cadence.js.map +1 -1
- package/dist/plugin/plugin.d.ts.map +1 -1
- package/dist/plugin/plugin.js +54 -11
- package/dist/plugin/plugin.js.map +1 -1
- package/dist/skills/frontmatter.js +1 -1
- package/dist/skills/frontmatter.js.map +1 -1
- package/dist/tmux/executor.d.ts +57 -6
- package/dist/tmux/executor.d.ts.map +1 -1
- package/dist/tmux/executor.js +676 -57
- package/dist/tmux/executor.js.map +1 -1
- package/dist/tmux/index.d.ts +1 -1
- package/dist/tmux/index.d.ts.map +1 -1
- package/dist/tmux/index.js +1 -1
- package/dist/tmux/index.js.map +1 -1
- package/dist/tmux/manager.d.ts +70 -0
- package/dist/tmux/manager.d.ts.map +1 -1
- package/dist/tmux/manager.js +357 -22
- package/dist/tmux/manager.js.map +1 -1
- package/dist/tmux/state-query.d.ts.map +1 -1
- package/dist/tmux/state-query.js +4 -1
- package/dist/tmux/state-query.js.map +1 -1
- package/dist/tmux/types.d.ts +11 -0
- package/dist/tmux/types.d.ts.map +1 -1
- package/dist/tmux/types.js.map +1 -1
- package/dist/tmux/utils.d.ts +17 -0
- package/dist/tmux/utils.d.ts.map +1 -1
- package/dist/tmux/utils.js +39 -0
- package/dist/tmux/utils.js.map +1 -1
- package/package.json +3 -3
- package/src/agents/lead.ts +2 -3
- package/src/background/manager.ts +6 -0
- package/src/plugin/hooks/cadence.ts +2 -1
- package/src/plugin/plugin.ts +67 -11
- package/src/skills/frontmatter.ts +1 -1
- package/src/tmux/executor.ts +748 -55
- package/src/tmux/index.ts +6 -0
- package/src/tmux/manager.ts +410 -21
- package/src/tmux/state-query.ts +4 -1
- package/src/tmux/types.ts +12 -0
- package/src/tmux/utils.ts +39 -0
package/dist/tmux/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tmux/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tmux/types.ts"],"names":[],"mappings":"AA8GA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,oBAAoB;AACpB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
package/dist/tmux/utils.d.ts
CHANGED
|
@@ -29,4 +29,21 @@ export declare function runTmuxCommandSync(args: string[]): {
|
|
|
29
29
|
* Get the path to the tmux binary synchronously
|
|
30
30
|
*/
|
|
31
31
|
export declare function getTmuxPathSync(): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get the tmux session ID for a given pane.
|
|
34
|
+
* This is used to ensure windows are created in the correct tmux session
|
|
35
|
+
* when multiple opencode instances run in different sessions.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getTmuxSessionId(paneId: string): Promise<string | undefined>;
|
|
38
|
+
/**
|
|
39
|
+
* Get the tmux session ID synchronously (for shutdown scenarios)
|
|
40
|
+
*/
|
|
41
|
+
export declare function getTmuxSessionIdSync(paneId: string): string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Canonicalize server URL for consistent ownership tagging.
|
|
44
|
+
* Normalizes loopback addresses (127.0.0.1, ::1) to localhost.
|
|
45
|
+
*
|
|
46
|
+
* @throws Error if URL is invalid
|
|
47
|
+
*/
|
|
48
|
+
export declare function canonicalizeServerUrl(url: string): string;
|
|
32
49
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/tmux/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tmux/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS1D;AAED;;GAEG;AACH,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgBvF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAS/C"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tmux/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS1D;AAED;;GAEG;AACH,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgBvF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAS/C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAIlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWzD"}
|
package/dist/tmux/utils.js
CHANGED
|
@@ -77,4 +77,43 @@ export function getTmuxPathSync() {
|
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Get the tmux session ID for a given pane.
|
|
82
|
+
* This is used to ensure windows are created in the correct tmux session
|
|
83
|
+
* when multiple opencode instances run in different sessions.
|
|
84
|
+
*/
|
|
85
|
+
export async function getTmuxSessionId(paneId) {
|
|
86
|
+
const result = await runTmuxCommand(['display', '-p', '-t', paneId, '#{session_id}']);
|
|
87
|
+
if (!result.success || !result.output)
|
|
88
|
+
return undefined;
|
|
89
|
+
return result.output.trim() || undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the tmux session ID synchronously (for shutdown scenarios)
|
|
93
|
+
*/
|
|
94
|
+
export function getTmuxSessionIdSync(paneId) {
|
|
95
|
+
const result = runTmuxCommandSync(['display', '-p', '-t', paneId, '#{session_id}']);
|
|
96
|
+
if (!result.success || !result.output)
|
|
97
|
+
return undefined;
|
|
98
|
+
return result.output.trim() || undefined;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Canonicalize server URL for consistent ownership tagging.
|
|
102
|
+
* Normalizes loopback addresses (127.0.0.1, ::1) to localhost.
|
|
103
|
+
*
|
|
104
|
+
* @throws Error if URL is invalid
|
|
105
|
+
*/
|
|
106
|
+
export function canonicalizeServerUrl(url) {
|
|
107
|
+
try {
|
|
108
|
+
const parsed = new URL(url);
|
|
109
|
+
let host = parsed.hostname.toLowerCase();
|
|
110
|
+
if (host === '127.0.0.1' || host === '::1') {
|
|
111
|
+
host = 'localhost';
|
|
112
|
+
}
|
|
113
|
+
return `${parsed.protocol}//${host}:${parsed.port}`;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
throw new Error(`Invalid server URL: ${url}`, { cause: error });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
80
119
|
//# sourceMappingURL=utils.js.map
|
package/dist/tmux/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tmux/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAChC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,MAAM,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,IAAc;IAEd,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtD,OAAO;QACN,OAAO,EAAE,QAAQ,KAAK,CAAC;QACvB,MAAM,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;KACtD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAChD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAE/D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAE/C,OAAO;YACN,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC;YAC9B,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;SAC7D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC9B,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tmux/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/opencode",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.43",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"description": "Agentuity Open Code plugin with specialized AI coding agents",
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
"prepublishOnly": "bun run clean && bun run build"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@agentuity/core": "0.1.
|
|
43
|
+
"@agentuity/core": "0.1.43",
|
|
44
44
|
"@opencode-ai/plugin": "^1.1.36",
|
|
45
45
|
"yaml": "^2.8.1",
|
|
46
46
|
"zod": "^4.3.5"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@agentuity/test-utils": "0.1.
|
|
49
|
+
"@agentuity/test-utils": "0.1.43",
|
|
50
50
|
"@types/bun": "latest",
|
|
51
51
|
"bun-types": "latest",
|
|
52
52
|
"typescript": "^5.9.0"
|
package/src/agents/lead.ts
CHANGED
|
@@ -882,10 +882,9 @@ agentuity cloud queue publish agentuity-cadence-work '{
|
|
|
882
882
|
}'
|
|
883
883
|
\`\`\`
|
|
884
884
|
|
|
885
|
-
Check on child teams:
|
|
885
|
+
Check on child teams by querying KV state directly:
|
|
886
886
|
\`\`\`bash
|
|
887
|
-
agentuity
|
|
888
|
-
agentuity ai cadence status lp_child
|
|
887
|
+
agentuity cloud kv get agentuity-opencode-tasks "loop:lp_child:state" --json
|
|
889
888
|
\`\`\`
|
|
890
889
|
|
|
891
890
|
### Context Management
|
|
@@ -31,6 +31,7 @@ export interface BackgroundManagerCallbacks {
|
|
|
31
31
|
title: string;
|
|
32
32
|
}) => void;
|
|
33
33
|
onSubagentSessionDeleted?: (event: { sessionId: string }) => void;
|
|
34
|
+
onShutdown?: () => void | Promise<void>;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
export class BackgroundManager {
|
|
@@ -182,6 +183,11 @@ export class BackgroundManager {
|
|
|
182
183
|
this.shuttingDown = true;
|
|
183
184
|
this.concurrency.clear();
|
|
184
185
|
this.notifications.clear();
|
|
186
|
+
try {
|
|
187
|
+
void this.callbacks?.onShutdown?.();
|
|
188
|
+
} catch {
|
|
189
|
+
// Ignore shutdown callback errors
|
|
190
|
+
}
|
|
185
191
|
}
|
|
186
192
|
|
|
187
193
|
private indexTask(task: BackgroundTask): void {
|
|
@@ -107,6 +107,7 @@ export function createCadenceHooks(ctx: PluginInput, _config: CoderConfig): Cade
|
|
|
107
107
|
);
|
|
108
108
|
if (statusMatch) {
|
|
109
109
|
const [, loopId, iteration, maxIterations] = statusMatch;
|
|
110
|
+
if (!iteration || !maxIterations) return;
|
|
110
111
|
const newIteration = parseInt(iteration, 10);
|
|
111
112
|
const newMax = parseInt(maxIterations, 10);
|
|
112
113
|
const changed =
|
|
@@ -127,7 +128,7 @@ export function createCadenceHooks(ctx: PluginInput, _config: CoderConfig): Cade
|
|
|
127
128
|
|
|
128
129
|
// Fallback: try to extract iteration from loose "iteration: N" pattern
|
|
129
130
|
const iterMatch = messageText.match(/iteration[:\s]+(\d+)/i);
|
|
130
|
-
if (iterMatch) {
|
|
131
|
+
if (iterMatch && iterMatch[1]) {
|
|
131
132
|
const newIteration = parseInt(iterMatch[1], 10);
|
|
132
133
|
if (newIteration !== state.iteration) {
|
|
133
134
|
state.iteration = newIteration;
|
package/src/plugin/plugin.ts
CHANGED
|
@@ -95,6 +95,11 @@ export async function createCoderPlugin(ctx: PluginInput): Promise<Hooks> {
|
|
|
95
95
|
void tmuxManager.onSessionDeleted(event);
|
|
96
96
|
}
|
|
97
97
|
: undefined,
|
|
98
|
+
onShutdown: tmuxManager
|
|
99
|
+
? () => {
|
|
100
|
+
void tmuxManager.cleanup();
|
|
101
|
+
}
|
|
102
|
+
: undefined,
|
|
98
103
|
});
|
|
99
104
|
|
|
100
105
|
// Session memory hooks handle checkpointing and compaction for non-Cadence sessions
|
|
@@ -106,7 +111,17 @@ export async function createCoderPlugin(ctx: PluginInput): Promise<Hooks> {
|
|
|
106
111
|
// Create plugin tools using the @opencode-ai/plugin tool helper
|
|
107
112
|
const tools = createTools(backgroundManager);
|
|
108
113
|
|
|
109
|
-
|
|
114
|
+
// Create a logger for shutdown handler
|
|
115
|
+
const shutdownLogger = (message: string) =>
|
|
116
|
+
ctx.client.app.log({
|
|
117
|
+
body: {
|
|
118
|
+
service: 'agentuity-coder',
|
|
119
|
+
level: 'info',
|
|
120
|
+
message: `[shutdown] ${message}`,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
registerShutdownHandler(backgroundManager, tmuxManager, shutdownLogger);
|
|
110
125
|
|
|
111
126
|
// Show startup toast (fire and forget, don't block)
|
|
112
127
|
try {
|
|
@@ -647,18 +662,59 @@ function extractEventFromInput(
|
|
|
647
662
|
|
|
648
663
|
function registerShutdownHandler(
|
|
649
664
|
manager: BackgroundManager,
|
|
650
|
-
tmuxManager?: TmuxSessionManager
|
|
665
|
+
tmuxManager?: TmuxSessionManager,
|
|
666
|
+
logger?: (msg: string) => void
|
|
651
667
|
): void {
|
|
652
|
-
if (typeof process === 'undefined')
|
|
653
|
-
|
|
654
|
-
|
|
668
|
+
if (typeof process === 'undefined') {
|
|
669
|
+
logger?.('[shutdown] process is undefined, cannot register handlers');
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
const log = logger ?? (() => {});
|
|
674
|
+
let shutdownCalled = false;
|
|
675
|
+
|
|
676
|
+
log(
|
|
677
|
+
`Registering shutdown handlers (PID: ${process.pid}, tmuxManager: ${tmuxManager ? 'yes' : 'no'})`
|
|
678
|
+
);
|
|
679
|
+
log(`Current tracked sessions in tmuxManager: ${tmuxManager ? 'checking...' : 'N/A'}`);
|
|
680
|
+
|
|
681
|
+
const shutdown = (signal?: string) => {
|
|
682
|
+
// Prevent multiple shutdown calls
|
|
683
|
+
if (shutdownCalled) {
|
|
684
|
+
log(`Shutdown already in progress, ignoring ${signal ?? 'unknown'} signal`);
|
|
685
|
+
return;
|
|
686
|
+
}
|
|
687
|
+
shutdownCalled = true;
|
|
688
|
+
|
|
689
|
+
log(`Shutdown triggered by ${signal ?? 'unknown'} signal`);
|
|
690
|
+
|
|
691
|
+
try {
|
|
692
|
+
log('Shutting down background manager...');
|
|
693
|
+
manager.shutdown();
|
|
694
|
+
log('Background manager shutdown complete');
|
|
695
|
+
} catch (error) {
|
|
696
|
+
log(`Background manager shutdown error: ${error}`);
|
|
697
|
+
}
|
|
698
|
+
|
|
655
699
|
if (tmuxManager) {
|
|
656
|
-
|
|
657
|
-
|
|
700
|
+
try {
|
|
701
|
+
log('Cleaning up tmux sessions...');
|
|
702
|
+
// Use sync version to ensure cleanup completes before process exits
|
|
703
|
+
tmuxManager.cleanupSync();
|
|
704
|
+
log('Tmux cleanup complete');
|
|
705
|
+
} catch (error) {
|
|
706
|
+
log(`Tmux cleanup error: ${error}`);
|
|
707
|
+
}
|
|
658
708
|
}
|
|
709
|
+
|
|
710
|
+
log('Shutdown complete');
|
|
659
711
|
};
|
|
660
|
-
|
|
661
|
-
process.once('
|
|
662
|
-
process.once('
|
|
663
|
-
process.once('
|
|
712
|
+
|
|
713
|
+
process.once('beforeExit', () => shutdown('beforeExit'));
|
|
714
|
+
process.once('SIGINT', () => shutdown('SIGINT'));
|
|
715
|
+
process.once('SIGTERM', () => shutdown('SIGTERM'));
|
|
716
|
+
process.once('SIGHUP', () => shutdown('SIGHUP')); // Handle tmux pane close
|
|
717
|
+
process.once('exit', () => shutdown('exit')); // Also handle exit event for extra safety
|
|
718
|
+
|
|
719
|
+
log('Shutdown handlers registered for: beforeExit, SIGINT, SIGTERM, SIGHUP, exit');
|
|
664
720
|
}
|
|
@@ -13,7 +13,7 @@ export function parseFrontmatter<T = Record<string, unknown>>(
|
|
|
13
13
|
return { data: {} as T, body: content.trim() };
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const frontmatter = match[1];
|
|
16
|
+
const frontmatter = match[1] ?? '';
|
|
17
17
|
const body = content.slice(match[0].length).trim();
|
|
18
18
|
|
|
19
19
|
try {
|