@renseiai/agentfactory 0.8.21 → 0.8.23
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/src/config/repository-config.d.ts +3 -3
- package/dist/src/orchestrator/index.d.ts +1 -0
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +2 -0
- package/dist/src/orchestrator/null-issue-tracker-client.d.ts +34 -0
- package/dist/src/orchestrator/null-issue-tracker-client.d.ts.map +1 -0
- package/dist/src/orchestrator/null-issue-tracker-client.js +72 -0
- package/dist/src/orchestrator/orchestrator.d.ts +19 -0
- package/dist/src/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/src/orchestrator/orchestrator.js +134 -15
- package/dist/src/orchestrator/state-types.d.ts +3 -0
- package/dist/src/orchestrator/state-types.d.ts.map +1 -1
- package/dist/src/providers/codex-app-server-provider.d.ts +87 -0
- package/dist/src/providers/codex-app-server-provider.d.ts.map +1 -1
- package/dist/src/providers/codex-app-server-provider.integration.test.d.ts +14 -0
- package/dist/src/providers/codex-app-server-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/codex-app-server-provider.integration.test.js +909 -0
- package/dist/src/providers/codex-app-server-provider.js +339 -52
- package/dist/src/providers/codex-app-server-provider.test.js +838 -10
- package/dist/src/providers/codex-provider.d.ts +2 -0
- package/dist/src/providers/codex-provider.d.ts.map +1 -1
- package/dist/src/providers/codex-provider.js +36 -6
- package/dist/src/providers/codex-provider.test.js +12 -3
- package/dist/src/providers/types.d.ts +17 -0
- package/dist/src/providers/types.d.ts.map +1 -1
- package/dist/src/workflow/workflow-types.d.ts +5 -5
- package/package.json +2 -2
|
@@ -15,9 +15,9 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
15
15
|
packageManager: z.ZodOptional<z.ZodEnum<{
|
|
16
16
|
pnpm: "pnpm";
|
|
17
17
|
npm: "npm";
|
|
18
|
+
none: "none";
|
|
18
19
|
yarn: "yarn";
|
|
19
20
|
bun: "bun";
|
|
20
|
-
none: "none";
|
|
21
21
|
}>>;
|
|
22
22
|
buildCommand: z.ZodOptional<z.ZodString>;
|
|
23
23
|
testCommand: z.ZodOptional<z.ZodString>;
|
|
@@ -67,9 +67,9 @@ export declare const RepositoryConfigSchema: z.ZodObject<{
|
|
|
67
67
|
packageManager: z.ZodOptional<z.ZodEnum<{
|
|
68
68
|
pnpm: "pnpm";
|
|
69
69
|
npm: "npm";
|
|
70
|
+
none: "none";
|
|
70
71
|
yarn: "yarn";
|
|
71
72
|
bun: "bun";
|
|
72
|
-
none: "none";
|
|
73
73
|
}>>;
|
|
74
74
|
buildCommand: z.ZodOptional<z.ZodString>;
|
|
75
75
|
testCommand: z.ZodOptional<z.ZodString>;
|
|
@@ -80,9 +80,9 @@ export declare const RepositoryConfigSchema: z.ZodObject<{
|
|
|
80
80
|
packageManager: z.ZodOptional<z.ZodEnum<{
|
|
81
81
|
pnpm: "pnpm";
|
|
82
82
|
npm: "npm";
|
|
83
|
+
none: "none";
|
|
83
84
|
yarn: "yarn";
|
|
84
85
|
bun: "bun";
|
|
85
|
-
none: "none";
|
|
86
86
|
}>>;
|
|
87
87
|
buildCommand: z.ZodOptional<z.ZodString>;
|
|
88
88
|
testCommand: z.ZodOptional<z.ZodString>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { AgentWorkType, WorkflowStatus, WorkTypeStatusMappings, EnvironmentIssueType } from './work-types.js';
|
|
2
2
|
export { ENVIRONMENT_ISSUE_TYPES } from './work-types.js';
|
|
3
3
|
export type { IssueTrackerClient, IssueTrackerIssue, IssueTrackerSession, SessionConfig, CommentChunk, } from './issue-tracker-client.js';
|
|
4
|
+
export { NullIssueTrackerClient } from './null-issue-tracker-client.js';
|
|
4
5
|
export type { IssueCreator } from './log-analyzer.js';
|
|
5
6
|
export type { OrchestratorConfig, OrchestratorIssue, AgentProcess, OrchestratorEvents, SpawnAgentOptions, OrchestratorResult, OrchestratorStreamConfig, StopAgentResult, ForwardPromptResult, InjectMessageResult, SpawnAgentWithResumeOptions, WorkTypeTimeoutConfig, AgentWorkResult, } from './types.js';
|
|
6
7
|
export type { ClaudeStreamEvent, ClaudeInitEvent, ClaudeSystemEvent, ClaudeAssistantEvent, ClaudeToolUseEvent, ClaudeToolResultEvent, ClaudeResultEvent, ClaudeErrorEvent, ClaudeTodoItem, ClaudeUserEvent, ClaudeEvent, ClaudeStreamHandlers, } from './stream-parser.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { ENVIRONMENT_ISSUE_TYPES } from './work-types.js';
|
|
2
|
+
// Null Issue Tracker Client (for platform-delegated workers without LINEAR_API_KEY)
|
|
3
|
+
export { NullIssueTrackerClient } from './null-issue-tracker-client.js';
|
|
2
4
|
export { SUMMARY_SCHEMA_VERSION } from './state-types.js';
|
|
3
5
|
// Orchestrator
|
|
4
6
|
export { AgentOrchestrator, createOrchestrator, getWorktreeIdentifier, validateGitRemote, resolveWorktreePath } from './orchestrator.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Null Issue Tracker Client
|
|
3
|
+
*
|
|
4
|
+
* No-op implementation of IssueTrackerClient for workers that don't have
|
|
5
|
+
* direct Linear API access. Used when LINEAR_API_KEY is not set and all
|
|
6
|
+
* Linear communication is delegated to the platform API.
|
|
7
|
+
*
|
|
8
|
+
* Returns minimal stub data so the orchestrator can function (e.g., create
|
|
9
|
+
* worktrees, spawn agents) without real issue tracker access. Status updates,
|
|
10
|
+
* comments, and session activities are silently dropped — the platform API
|
|
11
|
+
* activity emitter handles these instead.
|
|
12
|
+
*/
|
|
13
|
+
import type { IssueTrackerClient, IssueTrackerIssue, IssueTrackerSession, SessionConfig, CommentChunk } from './issue-tracker-client.js';
|
|
14
|
+
/**
|
|
15
|
+
* No-op IssueTrackerClient for platform-delegated workers.
|
|
16
|
+
*
|
|
17
|
+
* getIssue() returns a minimal stub using the identifier passed in.
|
|
18
|
+
* All mutation methods (comments, status updates) are silent no-ops.
|
|
19
|
+
*/
|
|
20
|
+
export declare class NullIssueTrackerClient implements IssueTrackerClient {
|
|
21
|
+
getIssue(idOrIdentifier: string): Promise<IssueTrackerIssue>;
|
|
22
|
+
isParentIssue(): Promise<boolean>;
|
|
23
|
+
isChildIssue(): Promise<boolean>;
|
|
24
|
+
createComment(): Promise<{
|
|
25
|
+
id: string;
|
|
26
|
+
}>;
|
|
27
|
+
updateIssueStatus(): Promise<void>;
|
|
28
|
+
unassignIssue(): Promise<void>;
|
|
29
|
+
queryIssues(): Promise<IssueTrackerIssue[]>;
|
|
30
|
+
getProjectRepositoryUrl(): Promise<string | null>;
|
|
31
|
+
createSession(_config: SessionConfig): IssueTrackerSession;
|
|
32
|
+
buildCompletionComments(resultMessage: string, _planItems: unknown[], _sessionId: string | null): CommentChunk[];
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=null-issue-tracker-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-issue-tracker-client.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/null-issue-tracker-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,2BAA2B,CAAA;AAqBlC;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY5D,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC,aAAa,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAIxC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B,WAAW,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI3C,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIvD,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,mBAAmB;IAI1D,uBAAuB,CACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,YAAY,EAAE;CAGlB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Null Issue Tracker Client
|
|
3
|
+
*
|
|
4
|
+
* No-op implementation of IssueTrackerClient for workers that don't have
|
|
5
|
+
* direct Linear API access. Used when LINEAR_API_KEY is not set and all
|
|
6
|
+
* Linear communication is delegated to the platform API.
|
|
7
|
+
*
|
|
8
|
+
* Returns minimal stub data so the orchestrator can function (e.g., create
|
|
9
|
+
* worktrees, spawn agents) without real issue tracker access. Status updates,
|
|
10
|
+
* comments, and session activities are silently dropped — the platform API
|
|
11
|
+
* activity emitter handles these instead.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* No-op session that silently drops all activity emissions.
|
|
15
|
+
* When the worker runs in platform mode, activities are posted via the
|
|
16
|
+
* ApiActivityEmitter instead of through an issue tracker session.
|
|
17
|
+
*/
|
|
18
|
+
class NullIssueTrackerSession {
|
|
19
|
+
async emitThought() { }
|
|
20
|
+
async emitAction() { }
|
|
21
|
+
async emitToolResult() { }
|
|
22
|
+
async emitResponse() { }
|
|
23
|
+
async emitError() { }
|
|
24
|
+
async reportEnvironmentIssue() {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
async setPullRequestUrl() { }
|
|
28
|
+
async addExternalUrl() { }
|
|
29
|
+
async complete() { }
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* No-op IssueTrackerClient for platform-delegated workers.
|
|
33
|
+
*
|
|
34
|
+
* getIssue() returns a minimal stub using the identifier passed in.
|
|
35
|
+
* All mutation methods (comments, status updates) are silent no-ops.
|
|
36
|
+
*/
|
|
37
|
+
export class NullIssueTrackerClient {
|
|
38
|
+
async getIssue(idOrIdentifier) {
|
|
39
|
+
return {
|
|
40
|
+
id: idOrIdentifier,
|
|
41
|
+
identifier: idOrIdentifier,
|
|
42
|
+
title: idOrIdentifier,
|
|
43
|
+
url: '',
|
|
44
|
+
priority: 0,
|
|
45
|
+
status: 'In Progress',
|
|
46
|
+
labels: [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async isParentIssue() {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
async isChildIssue() {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
async createComment() {
|
|
56
|
+
return { id: '' };
|
|
57
|
+
}
|
|
58
|
+
async updateIssueStatus() { }
|
|
59
|
+
async unassignIssue() { }
|
|
60
|
+
async queryIssues() {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
async getProjectRepositoryUrl() {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
createSession(_config) {
|
|
67
|
+
return new NullIssueTrackerSession();
|
|
68
|
+
}
|
|
69
|
+
buildCompletionComments(resultMessage, _planItems, _sessionId) {
|
|
70
|
+
return [{ body: resultMessage, partNumber: 1, totalParts: 1 }];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -91,6 +91,8 @@ export declare class AgentOrchestrator {
|
|
|
91
91
|
private readonly sessionLoggers;
|
|
92
92
|
private readonly contextManagers;
|
|
93
93
|
private readonly sessionOutputFlags;
|
|
94
|
+
private readonly assistantTextBuffers;
|
|
95
|
+
private shuttingDown;
|
|
94
96
|
private readonly templateRegistry;
|
|
95
97
|
private allowedProjects?;
|
|
96
98
|
private repoConfig?;
|
|
@@ -110,6 +112,13 @@ export declare class AgentOrchestrator {
|
|
|
110
112
|
* @param issueId - The issue ID of the agent
|
|
111
113
|
* @param activityType - Optional description of the activity type
|
|
112
114
|
*/
|
|
115
|
+
/**
|
|
116
|
+
* Buffer assistant text and flush in batches for readable logging.
|
|
117
|
+
* Streaming providers (Codex) emit one token per event — this buffers
|
|
118
|
+
* and flushes after 500ms of silence or on sentence boundaries.
|
|
119
|
+
*/
|
|
120
|
+
private bufferAssistantText;
|
|
121
|
+
private flushAssistantTextBuffer;
|
|
113
122
|
private updateLastActivity;
|
|
114
123
|
/**
|
|
115
124
|
* Get timeout configuration for a specific work type
|
|
@@ -442,6 +451,16 @@ export declare class AgentOrchestrator {
|
|
|
442
451
|
* Stop all running agents
|
|
443
452
|
*/
|
|
444
453
|
stopAll(): void;
|
|
454
|
+
/**
|
|
455
|
+
* Gracefully shut down all provider resources (e.g., Codex app-server processes).
|
|
456
|
+
* Call after stopAll() to ensure child processes don't become orphans.
|
|
457
|
+
*/
|
|
458
|
+
shutdownProviders(): Promise<void>;
|
|
459
|
+
/**
|
|
460
|
+
* Full graceful cleanup: stop all agents and shut down provider resources.
|
|
461
|
+
* Use this instead of stopAll() when the fleet is exiting.
|
|
462
|
+
*/
|
|
463
|
+
cleanup(): Promise<void>;
|
|
445
464
|
/**
|
|
446
465
|
* Wait for all agents to complete with inactivity-based timeout
|
|
447
466
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmCH,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAA;AAuB5E,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAElB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,YAAY,CAAA;AAyBnB;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CA6B1E;AAqGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAOR;AAqID;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,qBAAqB,GAAG,kBAAkB,CAAA;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,CAyFhF;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,CAkDjF;AAkYD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,aAAa,GACtB,MAAM,CAGR;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,aAAa,CAerI;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAOtB;IACD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmD;IACjF,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8C;IAC5E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+D;IAEhG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAEhE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAE3E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAE9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAE3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IAEzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IACvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IAEzE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuG;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -870,6 +870,11 @@ export class AgentOrchestrator {
|
|
|
870
870
|
contextManagers = new Map();
|
|
871
871
|
// Session output flags for completion contract validation (keyed by issueId)
|
|
872
872
|
sessionOutputFlags = new Map();
|
|
873
|
+
// Buffered assistant text for batched logging (keyed by issueId)
|
|
874
|
+
// Streaming providers (Codex) send one token per event — buffer and flush on sentence boundaries
|
|
875
|
+
assistantTextBuffers = new Map();
|
|
876
|
+
// Flag to prevent promoting agents during fleet shutdown
|
|
877
|
+
shuttingDown = false;
|
|
873
878
|
// Template registry for configurable workflow prompts
|
|
874
879
|
templateRegistry;
|
|
875
880
|
// Allowlisted project names from .agentfactory/config.yaml
|
|
@@ -1049,6 +1054,40 @@ export class AgentOrchestrator {
|
|
|
1049
1054
|
* @param issueId - The issue ID of the agent
|
|
1050
1055
|
* @param activityType - Optional description of the activity type
|
|
1051
1056
|
*/
|
|
1057
|
+
/**
|
|
1058
|
+
* Buffer assistant text and flush in batches for readable logging.
|
|
1059
|
+
* Streaming providers (Codex) emit one token per event — this buffers
|
|
1060
|
+
* and flushes after 500ms of silence or on sentence boundaries.
|
|
1061
|
+
*/
|
|
1062
|
+
bufferAssistantText(issueId, text, log) {
|
|
1063
|
+
let buf = this.assistantTextBuffers.get(issueId);
|
|
1064
|
+
if (!buf) {
|
|
1065
|
+
buf = { text: '', timer: null };
|
|
1066
|
+
this.assistantTextBuffers.set(issueId, buf);
|
|
1067
|
+
}
|
|
1068
|
+
buf.text += text;
|
|
1069
|
+
// Clear existing timer
|
|
1070
|
+
if (buf.timer)
|
|
1071
|
+
clearTimeout(buf.timer);
|
|
1072
|
+
// Flush after 500ms of silence
|
|
1073
|
+
buf.timer = setTimeout(() => {
|
|
1074
|
+
this.flushAssistantTextBuffer(issueId, log);
|
|
1075
|
+
}, 500);
|
|
1076
|
+
}
|
|
1077
|
+
flushAssistantTextBuffer(issueId, log) {
|
|
1078
|
+
const buf = this.assistantTextBuffers.get(issueId);
|
|
1079
|
+
if (!buf || !buf.text.trim())
|
|
1080
|
+
return;
|
|
1081
|
+
const text = buf.text.trim();
|
|
1082
|
+
if (text.length > 0) {
|
|
1083
|
+
log?.info('Agent', { text: text.substring(0, 300) });
|
|
1084
|
+
}
|
|
1085
|
+
buf.text = '';
|
|
1086
|
+
if (buf.timer) {
|
|
1087
|
+
clearTimeout(buf.timer);
|
|
1088
|
+
buf.timer = null;
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1052
1091
|
updateLastActivity(issueId, activityType = 'activity') {
|
|
1053
1092
|
const agent = this.activeAgents.get(issueId);
|
|
1054
1093
|
if (agent) {
|
|
@@ -2312,6 +2351,8 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
2312
2351
|
workerId: this.config.apiActivityConfig?.workerId ?? null,
|
|
2313
2352
|
pid: null, // Will be updated when process spawns
|
|
2314
2353
|
});
|
|
2354
|
+
// Track which provider was used so recovery can detect provider changes
|
|
2355
|
+
initialState.providerName = spawnProviderName;
|
|
2315
2356
|
writeState(worktreePath, initialState);
|
|
2316
2357
|
// Start heartbeat writer for crash detection
|
|
2317
2358
|
const heartbeatWriter = createHeartbeatWriter({
|
|
@@ -2522,10 +2563,14 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
2522
2563
|
}
|
|
2523
2564
|
await this.handleAgentEvent(issueId, sessionId, event, emitter, agent, handle);
|
|
2524
2565
|
}
|
|
2525
|
-
// Query completed successfully — preserve 'failed'
|
|
2526
|
-
// (
|
|
2527
|
-
//
|
|
2528
|
-
if (
|
|
2566
|
+
// Query completed successfully — preserve 'failed' or 'stopped' status.
|
|
2567
|
+
// If the orchestrator is shutting down (fleet kill), force 'stopped' to prevent
|
|
2568
|
+
// the backstop from promoting incomplete work.
|
|
2569
|
+
if (this.shuttingDown && agent.status !== 'failed') {
|
|
2570
|
+
agent.status = 'stopped';
|
|
2571
|
+
log?.info('Agent stopped by fleet shutdown — skipping backstop and auto-transition');
|
|
2572
|
+
}
|
|
2573
|
+
else if (agent.status !== 'stopped' && agent.status !== 'failed') {
|
|
2529
2574
|
agent.status = 'completed';
|
|
2530
2575
|
}
|
|
2531
2576
|
agent.completedAt = new Date();
|
|
@@ -3121,6 +3166,18 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3121
3166
|
log?.warn('Hook failed', { hook: raw.hook_name, exitCode: raw.exit_code });
|
|
3122
3167
|
}
|
|
3123
3168
|
}
|
|
3169
|
+
else if (event.subtype === 'reasoning') {
|
|
3170
|
+
// Codex reasoning/thinking events — buffer and log for fleet observability
|
|
3171
|
+
this.updateLastActivity(issueId, 'thinking');
|
|
3172
|
+
if (event.message) {
|
|
3173
|
+
this.bufferAssistantText(issueId, event.message, log);
|
|
3174
|
+
}
|
|
3175
|
+
heartbeatWriter?.recordThinking();
|
|
3176
|
+
// Persist reasoning to Linear session (same pattern as Claude's assistant_text)
|
|
3177
|
+
if (emitter && event.message && typeof event.message === 'string') {
|
|
3178
|
+
await emitter.emitThought(event.message.substring(0, 200));
|
|
3179
|
+
}
|
|
3180
|
+
}
|
|
3124
3181
|
else if (event.subtype === 'auth_status') {
|
|
3125
3182
|
if (event.message?.includes('error') || event.message?.includes('Error')) {
|
|
3126
3183
|
log?.error('Auth error', { error: event.message });
|
|
@@ -3149,6 +3206,11 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3149
3206
|
case 'assistant_text':
|
|
3150
3207
|
// Assistant text output
|
|
3151
3208
|
this.updateLastActivity(issueId, 'assistant');
|
|
3209
|
+
// Buffer and log agent reasoning for fleet observability.
|
|
3210
|
+
// Streaming providers (Codex) send one token per event — buffer for readability.
|
|
3211
|
+
if (event.text) {
|
|
3212
|
+
this.bufferAssistantText(issueId, event.text, log);
|
|
3213
|
+
}
|
|
3152
3214
|
// Feed to context manager for session intent extraction
|
|
3153
3215
|
this.contextManagers.get(issueId)?.processEvent(event);
|
|
3154
3216
|
heartbeatWriter?.recordThinking();
|
|
@@ -3204,6 +3266,8 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3204
3266
|
log?.debug('Tool progress', { tool: event.toolName, elapsed: `${event.elapsedSeconds}s` });
|
|
3205
3267
|
break;
|
|
3206
3268
|
case 'result':
|
|
3269
|
+
// Flush any buffered assistant text before processing result
|
|
3270
|
+
this.flushAssistantTextBuffer(issueId, log);
|
|
3207
3271
|
if (event.success) {
|
|
3208
3272
|
log?.success('Agent completed', {
|
|
3209
3273
|
cost: event.cost?.totalCostUsd ? `$${event.cost.totalCostUsd.toFixed(4)}` : 'N/A',
|
|
@@ -3250,7 +3314,7 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3250
3314
|
});
|
|
3251
3315
|
}
|
|
3252
3316
|
// Emit truncated preview to activity feed (ephemeral)
|
|
3253
|
-
if (emitter && event.message) {
|
|
3317
|
+
if (emitter && event.message && typeof event.message === 'string') {
|
|
3254
3318
|
await emitter.emitThought(`Completed: ${event.message.substring(0, 200)}...`, true);
|
|
3255
3319
|
}
|
|
3256
3320
|
}
|
|
@@ -3266,8 +3330,12 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3266
3330
|
if (agent.worktreePath) {
|
|
3267
3331
|
try {
|
|
3268
3332
|
// If the error is a stale session (resume failed), clear providerSessionId
|
|
3269
|
-
// so the next recovery attempt starts fresh instead of hitting the same error
|
|
3270
|
-
|
|
3333
|
+
// so the next recovery attempt starts fresh instead of hitting the same error.
|
|
3334
|
+
// Claude: "No conversation found with session ID"
|
|
3335
|
+
// Codex: "thread/resume failed" or "thread/resume: ..."
|
|
3336
|
+
const isStaleSession = errorMessage.includes('No conversation found with session ID') ||
|
|
3337
|
+
errorMessage.includes('thread/resume failed') ||
|
|
3338
|
+
errorMessage.includes('thread/resume:');
|
|
3271
3339
|
updateState(agent.worktreePath, {
|
|
3272
3340
|
status: 'failed',
|
|
3273
3341
|
errorMessage,
|
|
@@ -3513,6 +3581,10 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3513
3581
|
this.activityEmitters.delete(issueId);
|
|
3514
3582
|
this.abortControllers.delete(issueId);
|
|
3515
3583
|
this.agentLoggers.delete(issueId);
|
|
3584
|
+
const buf = this.assistantTextBuffers.get(issueId);
|
|
3585
|
+
if (buf?.timer)
|
|
3586
|
+
clearTimeout(buf.timer);
|
|
3587
|
+
this.assistantTextBuffers.delete(issueId);
|
|
3516
3588
|
// Stop heartbeat writer
|
|
3517
3589
|
const heartbeatWriter = this.heartbeatWriters.get(issueId);
|
|
3518
3590
|
if (heartbeatWriter) {
|
|
@@ -3719,15 +3791,29 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
3719
3791
|
// Inherit work type from previous state if not provided
|
|
3720
3792
|
const recoveryWorkType = workType ?? recoveryCheck.state.workType ?? effectiveWorkType;
|
|
3721
3793
|
// Use existing provider session ID for resume if available,
|
|
3722
|
-
// but clear it when the work type has changed
|
|
3723
|
-
// A session from a different work type cannot be resumed —
|
|
3724
|
-
// it produces
|
|
3794
|
+
// but clear it when the work type or provider has changed.
|
|
3795
|
+
// A session from a different work type or provider cannot be resumed —
|
|
3796
|
+
// attempting it produces errors and wastes the recovery attempt.
|
|
3725
3797
|
const workTypeChanged = recoveryWorkType !== recoveryCheck.state.workType;
|
|
3726
|
-
|
|
3798
|
+
// Resolve which provider will handle this recovery to detect provider switches
|
|
3799
|
+
// (e.g., previous run was Claude but labels now route to Codex)
|
|
3800
|
+
const { name: recoveryProviderName } = resolveProviderWithSource({
|
|
3801
|
+
project: projectName,
|
|
3802
|
+
workType: recoveryWorkType,
|
|
3803
|
+
labels: labelNames,
|
|
3804
|
+
configProviders: this.configProviders,
|
|
3805
|
+
});
|
|
3806
|
+
const providerChanged = recoveryCheck.state.providerName != null &&
|
|
3807
|
+
recoveryProviderName !== recoveryCheck.state.providerName;
|
|
3808
|
+
const shouldClearSession = workTypeChanged || providerChanged;
|
|
3809
|
+
const providerSessionId = shouldClearSession
|
|
3727
3810
|
? undefined
|
|
3728
3811
|
: (recoveryCheck.state.providerSessionId ?? undefined);
|
|
3729
|
-
if (
|
|
3730
|
-
|
|
3812
|
+
if (shouldClearSession && recoveryCheck.state.providerSessionId) {
|
|
3813
|
+
const reason = providerChanged
|
|
3814
|
+
? `provider changed from ${recoveryCheck.state.providerName} to ${recoveryProviderName}`
|
|
3815
|
+
: `work type changed from ${recoveryCheck.state.workType} to ${recoveryWorkType}`;
|
|
3816
|
+
console.log(`Clearing stale providerSessionId — ${reason}`);
|
|
3731
3817
|
updateState(worktreePath, { providerSessionId: null });
|
|
3732
3818
|
}
|
|
3733
3819
|
const effectiveSessionId = sessionId ?? recoveryCheck.state.linearSessionId ?? randomUUID();
|
|
@@ -4138,6 +4224,8 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
4138
4224
|
if (providerSessionId) {
|
|
4139
4225
|
initialState.providerSessionId = providerSessionId;
|
|
4140
4226
|
}
|
|
4227
|
+
// Track which provider was used so recovery can detect provider changes
|
|
4228
|
+
initialState.providerName = spawnProviderName;
|
|
4141
4229
|
writeState(worktreePath, initialState);
|
|
4142
4230
|
// Start heartbeat writer for crash detection
|
|
4143
4231
|
const heartbeatWriter = createHeartbeatWriter({
|
|
@@ -4318,10 +4406,14 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
4318
4406
|
let currentHandle = provider.resume(providerSessionId, spawnConfig);
|
|
4319
4407
|
const fallbackStream = async function* () {
|
|
4320
4408
|
for await (const event of currentHandle.stream) {
|
|
4321
|
-
// Detect stale session error: the resume failed because the session no longer exists
|
|
4409
|
+
// Detect stale session error: the resume failed because the session no longer exists.
|
|
4410
|
+
// Claude: "No conversation found with session ID"
|
|
4411
|
+
// Codex: "thread/resume failed" or "thread/resume: ..."
|
|
4322
4412
|
if (event.type === 'result' &&
|
|
4323
4413
|
!event.success &&
|
|
4324
|
-
event.errors?.some(e => e.includes('No conversation found with session ID')
|
|
4414
|
+
event.errors?.some(e => e.includes('No conversation found with session ID') ||
|
|
4415
|
+
e.includes('thread/resume failed') ||
|
|
4416
|
+
e.includes('thread/resume:'))) {
|
|
4325
4417
|
log?.warn('Stale session detected during resume — falling back to fresh spawn', {
|
|
4326
4418
|
staleSessionId: providerSessionId,
|
|
4327
4419
|
});
|
|
@@ -4354,6 +4446,7 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
4354
4446
|
* Stop all running agents
|
|
4355
4447
|
*/
|
|
4356
4448
|
stopAll() {
|
|
4449
|
+
this.shuttingDown = true;
|
|
4357
4450
|
for (const [issueId] of this.abortControllers) {
|
|
4358
4451
|
try {
|
|
4359
4452
|
const agent = this.activeAgents.get(issueId);
|
|
@@ -4371,6 +4464,32 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
4371
4464
|
this.abortControllers.clear();
|
|
4372
4465
|
this.sessionToIssue.clear();
|
|
4373
4466
|
}
|
|
4467
|
+
/**
|
|
4468
|
+
* Gracefully shut down all provider resources (e.g., Codex app-server processes).
|
|
4469
|
+
* Call after stopAll() to ensure child processes don't become orphans.
|
|
4470
|
+
*/
|
|
4471
|
+
async shutdownProviders() {
|
|
4472
|
+
const shutdownPromises = [];
|
|
4473
|
+
for (const [name, provider] of this.providerCache) {
|
|
4474
|
+
if (provider.shutdown) {
|
|
4475
|
+
console.log(`Shutting down ${name} provider...`);
|
|
4476
|
+
shutdownPromises.push(provider.shutdown().catch((err) => {
|
|
4477
|
+
console.warn(`Failed to shut down ${name} provider:`, err);
|
|
4478
|
+
}));
|
|
4479
|
+
}
|
|
4480
|
+
}
|
|
4481
|
+
if (shutdownPromises.length > 0) {
|
|
4482
|
+
await Promise.all(shutdownPromises);
|
|
4483
|
+
}
|
|
4484
|
+
}
|
|
4485
|
+
/**
|
|
4486
|
+
* Full graceful cleanup: stop all agents and shut down provider resources.
|
|
4487
|
+
* Use this instead of stopAll() when the fleet is exiting.
|
|
4488
|
+
*/
|
|
4489
|
+
async cleanup() {
|
|
4490
|
+
this.stopAll();
|
|
4491
|
+
await this.shutdownProviders();
|
|
4492
|
+
}
|
|
4374
4493
|
/**
|
|
4375
4494
|
* Wait for all agents to complete with inactivity-based timeout
|
|
4376
4495
|
*
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* This enables crash recovery, heartbeat monitoring, and progress tracking.
|
|
6
6
|
*/
|
|
7
7
|
import type { AgentWorkType } from './work-types.js';
|
|
8
|
+
import type { AgentProviderName } from '../providers/index.js';
|
|
8
9
|
/**
|
|
9
10
|
* Status of the agent's work in the worktree
|
|
10
11
|
*/
|
|
@@ -22,6 +23,8 @@ export interface WorktreeState {
|
|
|
22
23
|
linearSessionId: string | null;
|
|
23
24
|
/** Provider CLI session ID for --resume (if available) */
|
|
24
25
|
providerSessionId: string | null;
|
|
26
|
+
/** Name of the provider used for the session (e.g., 'claude', 'codex') */
|
|
27
|
+
providerName?: AgentProviderName | null;
|
|
25
28
|
/** Type of work being performed */
|
|
26
29
|
workType: AgentWorkType;
|
|
27
30
|
/** The prompt that was given to the agent */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-types.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/state-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"state-types.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/state-types.ts"],"names":[],"mappings":"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"}
|