@supaku/agentfactory-linear 0.7.11 → 0.7.13
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EAInB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/agent-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WORK_TYPE_START_STATUS, WORK_TYPE_COMPLETE_STATUS, WORK_TYPE_FAIL_STATUS, } from './types.js';
|
|
1
|
+
import { WORK_TYPE_START_STATUS, WORK_TYPE_COMPLETE_STATUS, WORK_TYPE_FAIL_STATUS, TERMINAL_STATUSES, } from './types.js';
|
|
2
2
|
import { LinearSessionError, LinearActivityError, LinearPlanError, } from './errors.js';
|
|
3
3
|
import { buildCompletionComments } from './utils.js';
|
|
4
4
|
import { getDefaultTeamId, LINEAR_PROJECTS, LINEAR_LABELS, } from './constants.js';
|
|
@@ -84,10 +84,17 @@ export class AgentSession {
|
|
|
84
84
|
this.sessionId = `session-${this.issueId}-${Date.now()}`;
|
|
85
85
|
}
|
|
86
86
|
this.state = 'active';
|
|
87
|
-
// Transition based on work type
|
|
87
|
+
// Transition based on work type — guard against terminal states
|
|
88
88
|
const startStatus = WORK_TYPE_START_STATUS[this.workType];
|
|
89
89
|
if (this.autoTransition && startStatus) {
|
|
90
|
-
await this.
|
|
90
|
+
const currentState = await this.issue.state;
|
|
91
|
+
const currentStateName = currentState?.name;
|
|
92
|
+
if (currentStateName && TERMINAL_STATUSES.includes(currentStateName)) {
|
|
93
|
+
console.warn(`[AgentSession] Refusing to transition issue ${this.issueId} from terminal state "${currentStateName}" to "${startStatus}"`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
await this.client.updateIssueStatus(this.issueId, startStatus);
|
|
97
|
+
}
|
|
91
98
|
}
|
|
92
99
|
return { success: true, sessionId: this.sessionId };
|
|
93
100
|
}
|
|
@@ -143,31 +150,47 @@ export class AgentSession {
|
|
|
143
150
|
// Log but don't fail completion - checkbox sync is non-critical
|
|
144
151
|
console.warn('[AgentSession] Failed to sync description checkboxes on complete:', error instanceof Error ? error.message : String(error));
|
|
145
152
|
}
|
|
146
|
-
// Transition based on work type
|
|
153
|
+
// Transition based on work type — guard against terminal states
|
|
147
154
|
if (this.autoTransition) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
155
|
+
// Re-fetch current state to guard against transitioning out of terminal states
|
|
156
|
+
let isTerminal = false;
|
|
157
|
+
try {
|
|
158
|
+
const freshIssue = await this.client.getIssue(this.issueId);
|
|
159
|
+
const currentState = await freshIssue.state;
|
|
160
|
+
const currentStateName = currentState?.name;
|
|
161
|
+
if (currentStateName && TERMINAL_STATUSES.includes(currentStateName)) {
|
|
162
|
+
isTerminal = true;
|
|
163
|
+
console.warn(`[AgentSession] Refusing to transition issue ${this.issueId} from terminal state "${currentStateName}" on completion`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
console.warn('[AgentSession] Failed to check terminal state before completion transition:', err);
|
|
168
|
+
}
|
|
169
|
+
if (!isTerminal) {
|
|
170
|
+
const isResultSensitive = this.workType === 'qa' || this.workType === 'acceptance';
|
|
171
|
+
if (isResultSensitive) {
|
|
172
|
+
// For QA/acceptance: only transition if workResult is explicitly set
|
|
173
|
+
if (workResult === 'passed') {
|
|
174
|
+
const completeStatus = WORK_TYPE_COMPLETE_STATUS[this.workType];
|
|
175
|
+
if (completeStatus) {
|
|
176
|
+
await this.client.updateIssueStatus(this.issueId, completeStatus);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else if (workResult === 'failed') {
|
|
180
|
+
const failStatus = WORK_TYPE_FAIL_STATUS[this.workType];
|
|
181
|
+
if (failStatus) {
|
|
182
|
+
await this.client.updateIssueStatus(this.issueId, failStatus);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// undefined workResult -> skip transition (safe default)
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
// Non-QA/acceptance: unchanged behavior
|
|
152
189
|
const completeStatus = WORK_TYPE_COMPLETE_STATUS[this.workType];
|
|
153
190
|
if (completeStatus) {
|
|
154
191
|
await this.client.updateIssueStatus(this.issueId, completeStatus);
|
|
155
192
|
}
|
|
156
193
|
}
|
|
157
|
-
else if (workResult === 'failed') {
|
|
158
|
-
const failStatus = WORK_TYPE_FAIL_STATUS[this.workType];
|
|
159
|
-
if (failStatus) {
|
|
160
|
-
await this.client.updateIssueStatus(this.issueId, failStatus);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// undefined workResult -> skip transition (safe default)
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
// Non-QA/acceptance: unchanged behavior
|
|
167
|
-
const completeStatus = WORK_TYPE_COMPLETE_STATUS[this.workType];
|
|
168
|
-
if (completeStatus) {
|
|
169
|
-
await this.client.updateIssueStatus(this.issueId, completeStatus);
|
|
170
|
-
}
|
|
171
194
|
}
|
|
172
195
|
}
|
|
173
196
|
return { success: true, sessionId: this.sessionId ?? undefined };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supaku/agentfactory-linear",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Linear issue tracker integration for AgentFactory — status transitions, agent sessions, work routing",
|
|
6
6
|
"author": "Supaku (https://supaku.com)",
|