@kenkaiiii/ggcoder 5.80.1 → 5.82.0

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,178 @@
1
+ /**
2
+ * Whether a goal is being worked on right now, by any process on this machine.
3
+ *
4
+ * A goal can be run by the desktop app's sidecar, by `ggcoder acp` (pew2 on
5
+ * the phone spawns that), or by both over a day. Each knows only its own
6
+ * sessions, so a goal another process was in the middle of read as cut off
7
+ * mid-work: its session file ends on a tool call. The goal list said
8
+ * "Interrupted" for a goal that was running, and opening it offered to resume
9
+ * it, which would start a second coordinator on the same goal.
10
+ *
11
+ * So the process running a goal says so, in a small file in the goal's
12
+ * `.gg` folder: its pid and a heartbeat. A reader counts it only while that
13
+ * pid is alive *and* the heartbeat is fresh. A crash leaves the file behind,
14
+ * and the heartbeat going stale (or the pid being gone) is what lets the goal
15
+ * read as interrupted again; the freshness check also stops a recycled pid
16
+ * from passing as the old run.
17
+ */
18
+ import fs from "node:fs";
19
+ import path from "node:path";
20
+ import { randomUUID } from "node:crypto";
21
+ /** How often a held marker is re-stamped. */
22
+ export const GOAL_RUN_HEARTBEAT_MS = 15_000;
23
+ /** A marker not re-stamped for this long belongs to a run that is gone. */
24
+ export const GOAL_RUN_STALE_MS = 60_000;
25
+ export function goalRunMarkerPath(dir) {
26
+ return path.join(dir, ".gg", "goal-running.json");
27
+ }
28
+ /** True when a process with this pid exists (EPERM: it exists, it's just not ours). */
29
+ function processAlive(pid) {
30
+ try {
31
+ process.kill(pid, 0);
32
+ return true;
33
+ }
34
+ catch (err) {
35
+ return err.code === "EPERM";
36
+ }
37
+ }
38
+ /** Whether a marker stands for a run still going. Pure, so it can be tested. */
39
+ export function goalRunMarkerLive(marker, now, isAlive = processAlive) {
40
+ const beat = Date.parse(marker.heartbeatAt);
41
+ if (!Number.isFinite(beat) || now - beat > GOAL_RUN_STALE_MS)
42
+ return false;
43
+ return isAlive(marker.pid);
44
+ }
45
+ /** The marker in a goal folder, or null when there is none or it can't be read. */
46
+ export function readGoalRunMarker(dir) {
47
+ let raw;
48
+ try {
49
+ raw = fs.readFileSync(goalRunMarkerPath(dir), "utf-8");
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ try {
55
+ const value = JSON.parse(raw);
56
+ if (value.version !== 1 ||
57
+ typeof value.pid !== "number" ||
58
+ !Number.isInteger(value.pid) ||
59
+ value.pid <= 0 ||
60
+ typeof value.token !== "string" ||
61
+ typeof value.startedAt !== "string" ||
62
+ typeof value.heartbeatAt !== "string") {
63
+ return null;
64
+ }
65
+ return value;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ /** Some process (this one included) is running the goal right now. */
72
+ export function goalRunLive(dir, now = Date.now()) {
73
+ const marker = readGoalRunMarker(dir);
74
+ return marker !== null && goalRunMarkerLive(marker, now);
75
+ }
76
+ /**
77
+ * Another process is running the goal right now. What the resume checks ask:
78
+ * this process's own run is already known to them, and must not stop it
79
+ * resuming a goal it was itself cut off from.
80
+ */
81
+ export function goalRunningElsewhere(dir, now = Date.now()) {
82
+ const marker = readGoalRunMarker(dir);
83
+ return marker !== null && marker.pid !== process.pid && goalRunMarkerLive(marker, now);
84
+ }
85
+ /** Live holds in this process, by resolved goal folder. */
86
+ const holds = new Map();
87
+ let exitHookInstalled = false;
88
+ /** Written beside the target and renamed, so a reader never sees half a file. */
89
+ function writeMarker(dir, marker) {
90
+ const file = goalRunMarkerPath(dir);
91
+ try {
92
+ fs.mkdirSync(path.dirname(file), { recursive: true });
93
+ const tmp = `${file}.${process.pid}.tmp`;
94
+ fs.writeFileSync(tmp, JSON.stringify(marker));
95
+ fs.renameSync(tmp, file);
96
+ }
97
+ catch {
98
+ // Best effort: without the file the goal just isn't shown as running
99
+ // elsewhere, exactly as before the marker existed. Never fail a run on it.
100
+ }
101
+ }
102
+ /** Removes the file only while it is still this hold's: another process may have taken over. */
103
+ function removeMarker(dir, marker) {
104
+ const current = readGoalRunMarker(dir);
105
+ if (!current || current.pid !== marker.pid || current.token !== marker.token)
106
+ return;
107
+ try {
108
+ fs.unlinkSync(goalRunMarkerPath(dir));
109
+ }
110
+ catch {
111
+ // Already gone.
112
+ }
113
+ }
114
+ function installExitHook() {
115
+ if (exitHookInstalled)
116
+ return;
117
+ exitHookInstalled = true;
118
+ // A clean exit (quit, a supervisor restart) clears its markers at once
119
+ // instead of leaving the goal "running" until the heartbeat goes stale.
120
+ process.once("exit", () => {
121
+ for (const [dir, hold] of holds) {
122
+ clearInterval(hold.timer);
123
+ removeMarker(dir, hold.marker);
124
+ }
125
+ holds.clear();
126
+ });
127
+ }
128
+ /**
129
+ * Mark a goal as being worked on by this process until the returned release
130
+ * is called. Holds nest: two sessions on one goal (two windows) keep the
131
+ * marker until both let go. Releasing twice is harmless.
132
+ */
133
+ export function holdGoalRun(goalDir, now = () => new Date()) {
134
+ const dir = path.resolve(goalDir);
135
+ let hold = holds.get(dir);
136
+ if (hold) {
137
+ hold.count++;
138
+ }
139
+ else {
140
+ const at = now().toISOString();
141
+ const marker = {
142
+ version: 1,
143
+ pid: process.pid,
144
+ token: randomUUID(),
145
+ startedAt: at,
146
+ heartbeatAt: at,
147
+ };
148
+ writeMarker(dir, marker);
149
+ const timer = setInterval(() => {
150
+ const current = holds.get(dir);
151
+ if (!current)
152
+ return;
153
+ current.marker = { ...current.marker, heartbeatAt: now().toISOString() };
154
+ writeMarker(dir, current.marker);
155
+ }, GOAL_RUN_HEARTBEAT_MS);
156
+ // Never what keeps a process alive.
157
+ timer.unref?.();
158
+ hold = { count: 1, marker, timer };
159
+ holds.set(dir, hold);
160
+ installExitHook();
161
+ }
162
+ let released = false;
163
+ return () => {
164
+ if (released)
165
+ return;
166
+ released = true;
167
+ const current = holds.get(dir);
168
+ if (!current)
169
+ return;
170
+ current.count--;
171
+ if (current.count > 0)
172
+ return;
173
+ clearInterval(current.timer);
174
+ holds.delete(dir);
175
+ removeMarker(dir, current.marker);
176
+ };
177
+ }
178
+ //# sourceMappingURL=goal-run-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-run-marker.js","sourceRoot":"","sources":["../../src/core/goal-run-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAYxC,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACpD,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC;IACzD,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAC/B,MAAqB,EACrB,GAAW,EACX,UAAoC,YAAY;IAEhD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC3E,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;QACxD,IACE,KAAK,CAAC,OAAO,KAAK,CAAC;YACnB,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;YAC7B,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5B,KAAK,CAAC,GAAG,IAAI,CAAC;YACd,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YAC/B,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EACrC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAsB,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAChE,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzF,CAAC;AAQD,2DAA2D;AAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;AACtC,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,iFAAiF;AACjF,SAAS,WAAW,CAAC,GAAW,EAAE,MAAqB;IACrD,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QACzC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,2EAA2E;IAC7E,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,SAAS,YAAY,CAAC,GAAW,EAAE,MAAqB;IACtD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;QAAE,OAAO;IACrF,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,iBAAiB;QAAE,OAAO;IAC9B,iBAAiB,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,wEAAwE;IACxE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,MAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAkB;YAC5B,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,UAAU,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;SAChB,CAAC;QACF,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,OAAO,CAAC,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACzE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC1B,oCAAoC;QACpC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrB,eAAe,EAAE,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;YAAE,OAAO;QAC9B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import { promises as fs } from "node:fs";
7
7
  import { goalWasInterrupted } from "./goals-store.js";
8
+ import { goalRunLive } from "./goal-run-marker.js";
8
9
  import { formatRelativeTime } from "./project-discovery.js";
9
10
  /** The kickoff/resume instruction is runtime-authored and never shown as a user bubble. */
10
11
  export const GOAL_RUNTIME_PROVENANCE = {
@@ -81,6 +82,11 @@ export async function summarizeGoal(sessions, dir, record, busy = false) {
81
82
  if (ms > lastActiveMs)
82
83
  lastActiveMs = ms;
83
84
  }
85
+ // `busy` only knows this process's sessions. A goal another process is
86
+ // running (the phone through `ggcoder acp`, or the desktop app while the
87
+ // phone asks) says so through its run marker; without it, a session file
88
+ // ending on a tool call read as "Interrupted" while the goal was working.
89
+ const live = busy || goalRunLive(dir);
84
90
  return {
85
91
  id: record.id,
86
92
  name: record.name,
@@ -92,10 +98,10 @@ export async function summarizeGoal(sessions, dir, record, busy = false) {
92
98
  lastActiveDisplay: formatRelativeTime(lastActiveMs),
93
99
  latestSessionPath,
94
100
  latestSessionId,
95
- status: goalListStatus(record, busy,
101
+ status: goalListStatus(record, live,
96
102
  // Not working, but its last turn never finished: the app closed, or it
97
103
  // was stopped, mid-work. Workers aren't known here, only the session.
98
- !busy &&
104
+ !live &&
99
105
  Boolean(record.startedAt) &&
100
106
  latestSessionPath !== null &&
101
107
  goalWasInterrupted(record, await lastMessages(latestSessionPath), [])),
@@ -1 +1 @@
1
- {"version":3,"file":"goal-summary.js","sourceRoot":"","sources":["../../src/core/goal-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goal-summary.js","sourceRoot":"","sources":["../../src/core/goal-summary.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { resolveFastModeModel } from "@kenkaiiii/gg-ai";
1
2
  export const ASYNC_ORCHESTRATION_MARKER = "\n\n## Async subagent orchestration\n";
2
3
  const ULTRA_ORCHESTRATION_PROMPT = `${ASYNC_ORCHESTRATION_MARKER}` +
3
4
  `Proactively use spawn_agent for substantial independent workstreams. Start every independent child before calling wait_agent, and continue useful parent work while children run. ` +
@@ -8,9 +9,11 @@ const EXPLICIT_ORCHESTRATION_PROMPT = `${ASYNC_ORCHESTRATION_MARKER}` +
8
9
  export function applyAsyncSubagentPolicy(prompt, provider, model, thinkingLevel, toolNames) {
9
10
  const markerIndex = prompt.indexOf(ASYNC_ORCHESTRATION_MARKER);
10
11
  const basePrompt = markerIndex === -1 ? prompt : prompt.slice(0, markerIndex);
12
+ // Fast-mode ids are the same model at a faster tier — same policy.
13
+ const baseModel = resolveFastModeModel(provider, model).model;
11
14
  const supportsPolicy = toolNames.includes("spawn_agent") &&
12
15
  provider === "openai" &&
13
- (model === "gpt-6-astra" || model === "gpt-6.1-sol");
16
+ (baseModel === "gpt-6-astra" || baseModel === "gpt-6.1-sol");
14
17
  if (!supportsPolicy)
15
18
  return basePrompt;
16
19
  return (basePrompt +
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-policy.js","sourceRoot":"","sources":["../../src/core/subagent-policy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,uCAAuC,CAAC;AAElF,MAAM,0BAA0B,GAC9B,GAAG,0BAA0B,EAAE;IAC/B,oLAAoL;IACpL,oNAAoN;IACpN,qOAAqO,CAAC;AAExO,MAAM,6BAA6B,GACjC,GAAG,0BAA0B,EAAE;IAC/B,kQAAkQ,CAAC;AAErQ,MAAM,UAAU,wBAAwB,CACtC,MAAc,EACd,QAAkB,EAClB,KAAa,EACb,aAAwC,EACxC,SAA4B;IAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9E,MAAM,cAAc,GAClB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;QACjC,QAAQ,KAAK,QAAQ;QACrB,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,CAAC,CAAC;IACvD,IAAI,CAAC,cAAc;QAAE,OAAO,UAAU,CAAC;IACvC,OAAO,CACL,UAAU;QACV,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,6BAA6B,CAAC,CACzF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"subagent-policy.js","sourceRoot":"","sources":["../../src/core/subagent-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,uCAAuC,CAAC;AAElF,MAAM,0BAA0B,GAC9B,GAAG,0BAA0B,EAAE;IAC/B,oLAAoL;IACpL,oNAAoN;IACpN,qOAAqO,CAAC;AAExO,MAAM,6BAA6B,GACjC,GAAG,0BAA0B,EAAE;IAC/B,kQAAkQ,CAAC;AAErQ,MAAM,UAAU,wBAAwB,CACtC,MAAc,EACd,QAAkB,EAClB,KAAa,EACb,aAAwC,EACxC,SAA4B;IAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9E,mEAAmE;IACnE,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC;IAC9D,MAAM,cAAc,GAClB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;QACjC,QAAQ,KAAK,QAAQ;QACrB,CAAC,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,aAAa,CAAC,CAAC;IAC/D,IAAI,CAAC,cAAc;QAAE,OAAO,UAAU,CAAC;IACvC,OAAO,CACL,UAAU;QACV,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,6BAA6B,CAAC,CACzF,CAAC;AACJ,CAAC"}
@@ -2,6 +2,7 @@ import { AgentSession } from "../core/agent-session.js";
2
2
  import { readGoalMemory, renderGoalPrompt, } from "../core/goals-store.js";
3
3
  import { collectProjectContext } from "../system-prompt.js";
4
4
  import { getModel } from "../core/model-registry.js";
5
+ import { holdGoalRun } from "../core/goal-run-marker.js";
5
6
  import { GOAL_TEAM } from "./goal-team.js";
6
7
  /**
7
8
  * Little Ken's faces in the Workers view's dialogue box. GG Goals picks one
@@ -195,8 +196,24 @@ function goalAskUser(tools, hasSpoken, isActive) {
195
196
  * the goal folder, so the goal list and goal deletion find them there.
196
197
  */
197
198
  export function createGoalsAgentSession(options) {
198
- const { goal, extras, additionalTools = [], isActive = () => false, ...sessionOptions } = options;
199
+ const { goal, extras, additionalTools = [], isActive = () => false, onRunActive, ...sessionOptions } = options;
199
200
  let spokeThisSession = false;
201
+ // The goal is being worked on while GG Goals' own loop runs or any worker
202
+ // is still live (a turn can end waiting on its team). Other processes read
203
+ // that from the marker, so a goal this one is running never shows there as
204
+ // interrupted, and is never resumed twice.
205
+ let looping = false;
206
+ const liveWorkers = new Set();
207
+ let release = null;
208
+ const syncRunMarker = () => {
209
+ const working = looping || liveWorkers.size > 0;
210
+ if (working && !release)
211
+ release = holdGoalRun(goal.dir);
212
+ else if (!working && release) {
213
+ release();
214
+ release = null;
215
+ }
216
+ };
200
217
  // `getMessages()` is the conversation as of the last finished run, so text
201
218
  // streamed in the current run is tracked live alongside it.
202
219
  const hasSpoken = () => spokeThisSession || hasAssistantText(session.getMessages());
@@ -212,6 +229,11 @@ export function createGoalsAgentSession(options) {
212
229
  // as workspace roots and read on demand.
213
230
  agentContext: "none",
214
231
  promptCacheKeyPrefix: "gggoals",
232
+ onRunActive: (active) => {
233
+ looping = active;
234
+ syncRunMarker();
235
+ onRunActive?.(active);
236
+ },
215
237
  // Orchestrating is the job: bringing in workers, steering them and
216
238
  // waiting on them must not need a tool_search first.
217
239
  coreTools: GOALS_CORE_TOOLS,
@@ -241,6 +263,26 @@ export function createGoalsAgentSession(options) {
241
263
  if (text.trim())
242
264
  spokeThisSession = true;
243
265
  });
266
+ session.eventBus.on("subagent_state", (worker) => {
267
+ if (worker.state === "starting" || worker.state === "running")
268
+ liveWorkers.add(worker.agent_id);
269
+ else
270
+ liveWorkers.delete(worker.agent_id);
271
+ syncRunMarker();
272
+ });
273
+ // Teardown drops every bus listener, so a worker's last "closed" may never
274
+ // arrive: a disposed session lets go of the goal however it ended.
275
+ const dispose = session.dispose.bind(session);
276
+ session.dispose = async () => {
277
+ try {
278
+ await dispose();
279
+ }
280
+ finally {
281
+ looping = false;
282
+ liveWorkers.clear();
283
+ syncRunMarker();
284
+ }
285
+ };
244
286
  return session;
245
287
  }
246
288
  //# sourceMappingURL=goals-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"goals-agent.js","sourceRoot":"","sources":["../../src/goals-agent/goals-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goals-agent.js","sourceRoot":"","sources":["../../src/goals-agent/goals-agent.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,12 @@ export interface AcpGoalSummary {
18
18
  * (absent = none). The desktop app reads them from the record the same way.
19
19
  */
20
20
  instructions?: string;
21
- /** Never `running`: ggcoder computes it without a live run (the client overlays that). */
22
- status: "briefing" | "paused" | "interrupted" | "idle";
21
+ /**
22
+ * `running` when some process holds the goal's run marker (this one, the
23
+ * desktop app, another `ggcoder acp`). A client that knows of a live run of
24
+ * its own may still overlay `running` on top.
25
+ */
26
+ status: "briefing" | "running" | "paused" | "interrupted" | "idle";
23
27
  }
24
28
  /** pew2 wire `GoalWorker`. */
25
29
  export interface AcpGoalWorker {
@@ -19,8 +19,7 @@ function toAcpSummary(summary, instructions) {
19
19
  lastActiveMs: summary.lastActiveMs,
20
20
  lastActiveDisplay: summary.lastActiveDisplay,
21
21
  agentSessionId: summary.latestSessionId,
22
- // summarizeGoal is never told the goal is busy, so `running` cannot occur.
23
- status: summary.status === "running" ? "idle" : summary.status,
22
+ status: summary.status,
24
23
  };
25
24
  }
26
25
  function sessionsDir(agentDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"acp-goals.js","sourceRoot":"","sources":["../../src/modes/acp-goals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp-goals.js","sourceRoot":"","sources":["../../src/modes/acp-goals.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ import { AgentSession } from "../core/agent-session.js";
30
30
  import { createAskUserBridge, formatLateAnswer, } from "../core/ask-user.js";
31
31
  import { createAskUserTool } from "../tools/ask-user.js";
32
32
  import { deleteGoal, goalKickoffPrompt, goalNeedsKickoff, goalPhase, goalResumePrompt, goalSettingsNote, goalWasInterrupted, goalsRoot, isGoalDir, markGoalKickoff, readGoal, setGoalCritterModel, setGoalPaused, startGoalOnAnswer, updateGoal, } from "../core/goals-store.js";
33
+ import { goalRunningElsewhere } from "../core/goal-run-marker.js";
33
34
  import { GOAL_RUNTIME_PROVENANCE } from "../core/goal-summary.js";
34
35
  import { createGoalsAgentSession, goalCritterPick, loadGoalBriefExtras, } from "../goals-agent/goals-agent.js";
35
36
  import { prepareAttachments } from "../app-sidecar/attachments.js";
@@ -2098,8 +2099,11 @@ export async function runAcpMode(options) {
2098
2099
  goal = { dir: current.dir, record };
2099
2100
  if (wasPaused)
2100
2101
  notifyGoalState();
2101
- const cutOff = wasPaused ||
2102
- goalWasInterrupted(record, target.getMessages(), target.listSubAgents?.() ?? []);
2102
+ // Never resume a goal another process is running (the desktop app):
2103
+ // that would start a second coordinator on it.
2104
+ const cutOff = !goalRunningElsewhere(current.dir) &&
2105
+ (wasPaused ||
2106
+ goalWasInterrupted(record, target.getMessages(), target.listSubAgents?.() ?? []));
2103
2107
  if (!cutOff)
2104
2108
  return;
2105
2109
  await target.prompt(goalResumePrompt(record), GOAL_RUNTIME_PROVENANCE);