@onepointfour-packs/flaredeck-agent 0.2.209 → 0.2.210

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 (94) hide show
  1. package/dist/agent.js +2 -1
  2. package/dist/agent.js.map +1 -1
  3. package/dist/assistant.d.ts +1 -1
  4. package/dist/assistant.js +4 -2
  5. package/dist/assistant.js.map +1 -1
  6. package/dist/check.d.ts +32 -0
  7. package/dist/check.js +251 -0
  8. package/dist/check.js.map +1 -0
  9. package/dist/config.d.ts +8 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/environment.d.ts +12 -2
  12. package/dist/environment.js +17 -13
  13. package/dist/environment.js.map +1 -1
  14. package/dist/envtools.d.ts +29 -0
  15. package/dist/envtools.js +67 -5
  16. package/dist/envtools.js.map +1 -1
  17. package/dist/features/card-folder.d.ts +69 -0
  18. package/dist/features/card-folder.js +305 -0
  19. package/dist/features/card-folder.js.map +1 -0
  20. package/dist/features/chat.d.ts +45 -0
  21. package/dist/features/chat.js +90 -0
  22. package/dist/features/chat.js.map +1 -0
  23. package/dist/features/dispatch.d.ts +55 -0
  24. package/dist/features/dispatch.js +101 -0
  25. package/dist/features/dispatch.js.map +1 -0
  26. package/dist/features/hand-back.d.ts +60 -0
  27. package/dist/features/hand-back.js +127 -0
  28. package/dist/features/hand-back.js.map +1 -0
  29. package/dist/features/manage-pane.d.ts +31 -0
  30. package/dist/features/manage-pane.js +60 -0
  31. package/dist/features/manage-pane.js.map +1 -0
  32. package/dist/features/release-wiring.d.ts +18 -0
  33. package/dist/features/release-wiring.js +56 -0
  34. package/dist/features/release-wiring.js.map +1 -0
  35. package/dist/features/services.d.ts +45 -0
  36. package/dist/features/services.js +147 -0
  37. package/dist/features/services.js.map +1 -0
  38. package/dist/features/sign-in-request.d.ts +81 -0
  39. package/dist/features/sign-in-request.js +91 -0
  40. package/dist/features/sign-in-request.js.map +1 -0
  41. package/dist/github.d.ts +14 -0
  42. package/dist/github.js +39 -8
  43. package/dist/github.js.map +1 -1
  44. package/dist/harness/events.d.ts +58 -0
  45. package/dist/harness/events.js +126 -0
  46. package/dist/harness/events.js.map +1 -0
  47. package/dist/harness/handover.d.ts +39 -0
  48. package/dist/harness/handover.js +63 -0
  49. package/dist/harness/handover.js.map +1 -0
  50. package/dist/harness/pause.d.ts +67 -0
  51. package/dist/harness/pause.js +128 -0
  52. package/dist/harness/pause.js.map +1 -0
  53. package/dist/harness/plan-usage.d.ts +49 -0
  54. package/dist/harness/plan-usage.js +69 -0
  55. package/dist/harness/plan-usage.js.map +1 -0
  56. package/dist/harness/prompt.d.ts +59 -0
  57. package/dist/harness/prompt.js +289 -0
  58. package/dist/harness/prompt.js.map +1 -0
  59. package/dist/harness/repo-notes.d.ts +1 -0
  60. package/dist/harness/repo-notes.js +26 -0
  61. package/dist/harness/repo-notes.js.map +1 -0
  62. package/dist/harness/restarter.d.ts +33 -0
  63. package/dist/harness/restarter.js +78 -0
  64. package/dist/harness/restarter.js.map +1 -0
  65. package/dist/harness/start-scripts.d.ts +7 -0
  66. package/dist/harness/start-scripts.js +44 -0
  67. package/dist/harness/start-scripts.js.map +1 -0
  68. package/dist/harness/tools.d.ts +37 -0
  69. package/dist/harness/tools.js +17 -0
  70. package/dist/harness/tools.js.map +1 -0
  71. package/dist/hydrate.d.ts +5 -0
  72. package/dist/hydrate.js +1 -0
  73. package/dist/hydrate.js.map +1 -1
  74. package/dist/main.js +32 -1
  75. package/dist/main.js.map +1 -1
  76. package/dist/profile.d.ts +80 -0
  77. package/dist/profile.js +77 -0
  78. package/dist/profile.js.map +1 -0
  79. package/dist/release.js +3 -0
  80. package/dist/release.js.map +1 -1
  81. package/dist/sandbox.js +3 -1
  82. package/dist/sandbox.js.map +1 -1
  83. package/dist/serve.d.ts +21 -115
  84. package/dist/serve.js +965 -1610
  85. package/dist/serve.js.map +1 -1
  86. package/dist/stream.d.ts +5 -0
  87. package/dist/stream.js.map +1 -1
  88. package/dist/workspace.d.ts +6 -0
  89. package/dist/workspace.js +19 -0
  90. package/dist/workspace.js.map +1 -1
  91. package/dist/worktree.d.ts +55 -2
  92. package/dist/worktree.js +130 -5
  93. package/dist/worktree.js.map +1 -1
  94. package/package.json +2 -2
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Asking a person to sign in for the agent, as a tool the agent can call (request_sign_in).
3
+ *
4
+ * Three pieces already worked and were never joined up: open_page DETECTS a sign-in wall and says
5
+ * which kind it is, signInSession captures a session a person completes by hand, and loadSession
6
+ * replays it for every later card. The gap was the middle — all the agent could do was say in prose
7
+ * that someone should sign in, so it wrote a comment, flagged the card and stopped.
8
+ *
9
+ * So: start the agent's own browser on the page, put it on a FlareDeck page through the relay (a
10
+ * person may be on a phone and the agent on a cloud box), flag the card with the link (a flag is
11
+ * what reaches a phone), and when the session lands, store it in FlareDeck, clear the flag and put
12
+ * the card back at the front of the queue. The agent's next turn opens the app already signed in.
13
+ *
14
+ * The tool call resolves as soon as the person has been ASKED, not when they finish: the card parks
15
+ * and the turn ends, instead of holding a tool call open for as long as somebody takes to arrive.
16
+ * Split out of serve.ts (docs/spec-harness-profiles.md, step 2).
17
+ */
18
+ import type { SignInAsk } from '../envtools.js';
19
+ import type { SavedSession } from '../session.js';
20
+ export type SignInCard = {
21
+ card: string;
22
+ board?: string;
23
+ code?: string;
24
+ };
25
+ export type SignInDeps = {
26
+ /** The card this turn is on, read at the moment the agent asks. */
27
+ card: () => SignInCard | null;
28
+ /** The agent-service base the relay lives on (http/https); empty means not configured. */
29
+ relayService: string | undefined;
30
+ /** Where the person opens the viewer. */
31
+ appBase: string;
32
+ token: () => Promise<string>;
33
+ /** Make sure this machine has a browser; false when it could not get one. */
34
+ ensureBrowser: () => Promise<boolean>;
35
+ /** Run the sign-in — signInSession with a real browser, unless a test says otherwise. */
36
+ runSignIn: (o: {
37
+ url: string;
38
+ relay: {
39
+ url: string;
40
+ token: string;
41
+ id: string;
42
+ viewerUrl: (t: string) => string;
43
+ };
44
+ onReady: (viewer: string) => void;
45
+ onNote: (t: string) => void;
46
+ }) => Promise<{
47
+ ok: boolean;
48
+ session?: SavedSession;
49
+ why?: string;
50
+ }>;
51
+ /** Keep the session in FlareDeck for this project. */
52
+ remember: (part: string, session: SavedSession) => Promise<{
53
+ id: string;
54
+ ok: boolean;
55
+ message?: string;
56
+ }>;
57
+ /** Flag the card for a person (set-needs-human), optionally with links to open. */
58
+ flag: (ref: SignInCard, reason: string, links?: {
59
+ url: string;
60
+ label?: string;
61
+ }[]) => void;
62
+ /** Clear the card's flag once signed in. */
63
+ clearFlag: (ref: SignInCard) => Promise<void>;
64
+ /** The card is no longer parked on a person, and comes back to the agent with this note. */
65
+ resume: (card: SignInCard, text: string) => void;
66
+ /** While a person has not signed in yet, the checkout's environment is kept up. */
67
+ pending: {
68
+ start: () => void;
69
+ done: () => void;
70
+ };
71
+ /** A fresh pairing id. */
72
+ newId: () => string;
73
+ log: (kind: 'tool' | 'warn', text: string) => void;
74
+ };
75
+ /** One line a page repeats hundreds of times is logged once, then counted. */
76
+ export declare function pageNotes(log: (text: string) => void): (t: string) => void;
77
+ export declare function requestSignIn(d: SignInDeps): ({ part, url, why }: {
78
+ part: string;
79
+ url: string;
80
+ why: string;
81
+ }) => Promise<SignInAsk>;
@@ -0,0 +1,91 @@
1
+ /** One line a page repeats hundreds of times is logged once, then counted. */
2
+ export function pageNotes(log) {
3
+ let last = '';
4
+ let repeats = 0;
5
+ return (t) => {
6
+ if (t === last) {
7
+ repeats++;
8
+ if (repeats === 3 || repeats % 50 === 0)
9
+ log(`(the same line ${repeats + 1}× so far) ${t.slice(0, 120)}`);
10
+ return;
11
+ }
12
+ last = t;
13
+ repeats = 0;
14
+ log(t);
15
+ };
16
+ }
17
+ export function requestSignIn(d) {
18
+ return async ({ part, url, why }) => {
19
+ const card = d.card();
20
+ if (!card)
21
+ return { asked: false, why: 'the card went away while this was being asked' };
22
+ if (!(await d.ensureBrowser()))
23
+ return { asked: false, why: 'this machine has no browser and could not fetch one' };
24
+ /* agent-service, not the MCP. The MCP deploys as a Firebase Function, which hands you (req, res)
25
+ with no http.Server underneath, so a WebSocket upgrade can never complete there. agent-service
26
+ is a real Cloud Run service and already the one this harness holds an event stream open to. */
27
+ if (!d.relayService) {
28
+ // Configured by default, so this means somebody blanked it. Say which setting.
29
+ return { asked: false, why: 'this harness has no agentServiceUrl, so a sign-in cannot be relayed' };
30
+ }
31
+ const id = d.newId();
32
+ const relayBase = d.relayService.replace(/^http/, 'ws').replace(/\/+$/, '');
33
+ const appBase = d.appBase.replace(/\/+$/, '');
34
+ const viewerUrl = (t) => `${appBase}/signin/${id}?t=${encodeURIComponent(t)}`;
35
+ const ref = { card: card.card, ...(card.board ? { board: card.board } : {}), ...(card.code ? { code: card.code } : {}) };
36
+ let settle;
37
+ const ready = new Promise((r) => { settle = r; });
38
+ d.pending.start();
39
+ void d.runSignIn({
40
+ url,
41
+ relay: { url: relayBase, token: await d.token(), id, viewerUrl },
42
+ onReady: (viewer) => {
43
+ d.log('tool', `sign-in wanted for "${part}" — ${viewer}`);
44
+ d.flag(ref, `${url} needs someone to sign in before this card can go on. ${why}\n\n` +
45
+ `Open the sign-in below and do it there. It is this agent's real browser, ` +
46
+ `shown live — click and type in the picture, then press Save & finish. The ` +
47
+ `session is kept for the whole project, so this is once, not once per card.`, [{ url: viewer, label: 'Sign in' }]);
48
+ settle({ asked: true, where: viewer });
49
+ },
50
+ onNote: pageNotes((t) => d.log('tool', `sign-in: ${t}`)),
51
+ })
52
+ .then(async (r) => {
53
+ d.pending.done();
54
+ if (!r.ok || !r.session) {
55
+ d.log('warn', `sign-in for "${part}" did not finish: ${r.why ?? 'nothing was saved'}`);
56
+ /* Said ON THE CARD. The flag already raised links to a viewer that is now dead, and a
57
+ person coming back to it an hour later would find a page that cannot connect and no
58
+ reason why — which reads as the feature being broken, not as a window having closed. */
59
+ d.flag(ref, `The sign-in for ${url} expired before anyone did it — the link in the ` +
60
+ `earlier request no longer works.\n\n${why}\n\nNothing is broken: ask ` +
61
+ `the agent to try again and a fresh sign-in is offered.`);
62
+ settle({ asked: false, why: r.why ?? 'nothing was saved' });
63
+ return;
64
+ }
65
+ /* Awaited, and the failure handled. Sessions live only in FlareDeck — there is no copy on
66
+ this machine — so a failed write means the sign-in is GONE. Announcing "Signed in" and
67
+ resuming the card would wake an agent that meets the same wall and asks again. */
68
+ const saved = await d.remember(part, r.session);
69
+ if (!saved.ok) {
70
+ d.log('warn', `sign-in for "${part}" completed but was NOT saved: ${saved.message ?? 'no reason given'}`);
71
+ d.flag(ref, `Someone signed in to ${url}, but the session could not be saved to FlareDeck ` +
72
+ `(${saved.message ?? 'no reason given'}). Credentials are kept only in FlareDeck, ` +
73
+ `so nothing was retained here and the sign-in has been lost.\n\n${why}\n\n` +
74
+ `Once FlareDeck is reachable, ask the agent to try again.`);
75
+ settle({ asked: false, why: saved.message ?? 'the session could not be saved' });
76
+ return;
77
+ }
78
+ d.log('tool', `signed in — kept for ${saved.id}; every card on this project opens straight in`);
79
+ await d.clearFlag(ref).catch((e) => d.log('warn', `could not clear needs-human: ${e instanceof Error ? e.message : String(e)}`));
80
+ d.resume(card, `Signed in. The session is kept for ${saved.id}, so open_page opens the app signed ` +
81
+ `in from now on. Carry on with what you were going to check: ${why}`);
82
+ })
83
+ .catch((e) => {
84
+ const why2 = e instanceof Error ? e.message : String(e);
85
+ d.log('warn', `sign-in for "${part}" failed: ${why2}`);
86
+ settle({ asked: false, why: why2 });
87
+ });
88
+ return ready;
89
+ };
90
+ }
91
+ //# sourceMappingURL=sign-in-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-in-request.js","sourceRoot":"","sources":["../../src/features/sign-in-request.ts"],"names":[],"mappings":"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"}
package/dist/github.d.ts CHANGED
@@ -33,6 +33,20 @@ export type Job = {
33
33
  branch: string;
34
34
  repo: string;
35
35
  }) => Promise<string | void> | string | void;
36
+ /** The other repositories in the card's folder (features/card-folder.ts), published by folder name. */
37
+ others?: {
38
+ name: string;
39
+ cwd: string;
40
+ branch: string;
41
+ base: string;
42
+ }[];
43
+ };
44
+ /**
45
+ * The job for one repository of the card's folder: the same card, branch rules and credentials,
46
+ * that repository's checkout and base. No name, or the card's own: the job itself.
47
+ */
48
+ export declare function jobFor(j: Job, repository: string | undefined): Job | {
49
+ why: string;
36
50
  };
37
51
  /**
38
52
  * Publish a job's branch. Extracted from the tool it used to live inside because the OTHER engine
package/dist/github.js CHANGED
@@ -2,6 +2,23 @@ import { spawn } from 'node:child_process';
2
2
  import { tool } from '@anthropic-ai/claude-agent-sdk';
3
3
  import { sdkServer } from './localmcp.js';
4
4
  import { z } from 'zod';
5
+ /**
6
+ * The job for one repository of the card's folder: the same card, branch rules and credentials,
7
+ * that repository's checkout and base. No name, or the card's own: the job itself.
8
+ */
9
+ export function jobFor(j, repository) {
10
+ const name = (repository ?? '').trim();
11
+ const own = j.cwd.split('/').pop() ?? '';
12
+ if (!name || name.toLowerCase() === own.toLowerCase())
13
+ return j;
14
+ const o = j.others?.find((x) => x.name.toLowerCase() === name.toLowerCase());
15
+ if (!o) {
16
+ return { why: j.others?.length
17
+ ? `There is no "${name}" in your card's folder. It holds: ${[own, ...j.others.map((x) => x.name)].join(', ')}.`
18
+ : `This card has one repository, so there is nothing to name — leave \`repository\` out.` };
19
+ }
20
+ return { ...j, cwd: o.cwd, branch: o.branch, base: o.base };
21
+ }
5
22
  function run(command, args, cwd, token) {
6
23
  return new Promise((resolve) => {
7
24
  const child = spawn(command, args, {
@@ -191,6 +208,8 @@ export async function publishBranch(j) {
191
208
  ? { ok: true, text: `Pushed ${branch}.\n${safe}${heads}` }
192
209
  : { ok: false, text: `Could not push ${branch}:\n${safe}` };
193
210
  }
211
+ /** Which repository of a card folder a tool acts on. */
212
+ const REPOSITORY = z.string().optional().describe('In a card folder: the folder name of the repository (the card\'s own needs none).');
194
213
  export function githubTools(job,
195
214
  /**
196
215
  * Present only where a project declares a merge command AND this agent may merge. `config` is
@@ -199,6 +218,7 @@ export function githubTools(job,
199
218
  * project's branch. Null means this job's repo declares none, so there is nothing to run.
200
219
  */
201
220
  merge) {
221
+ const pick = (j, repository) => jobFor(j, repository);
202
222
  const needJob = () => {
203
223
  const j = job();
204
224
  if (!j)
@@ -212,8 +232,10 @@ merge) {
212
232
  tool('submit_work', 'Save and publish everything you have changed for this card, in one step: it stages your ' +
213
233
  'changes, commits them, and pushes the branch. Use this when the work is done — you do ' +
214
234
  'not need git for any of it. Takes one argument: a short summary of what you changed, ' +
215
- 'written for whoever reviews it.', { summary: z.string().describe('What you changed, in a line or two. Becomes the commit message.') }, async (args) => {
216
- const j = needJob();
235
+ 'written for whoever reviews it.', { summary: z.string().describe('What you changed, in a line or two. Becomes the commit message.'), repository: REPOSITORY }, async (args) => {
236
+ const j = pick(needJob(), args.repository);
237
+ if ('why' in j)
238
+ return say(j.why, true);
217
239
  const summary = String(args.summary ?? '').trim();
218
240
  if (!summary)
219
241
  return say('Say what you changed — it becomes the commit message.', true);
@@ -221,16 +243,22 @@ merge) {
221
243
  return say(result.text, !result.ok);
222
244
  }),
223
245
  tool('push_branch', 'Publish this job\'s branch to GitHub. Takes no arguments: it pushes the branch this job ' +
224
- 'created, which is the only branch you may publish.', {}, async () => {
225
- const result = await publishBranch(needJob());
246
+ 'created, which is the only branch you may publish. In a card folder, name the repository.', { repository: REPOSITORY }, async (args) => {
247
+ const j = pick(needJob(), args.repository);
248
+ if ('why' in j)
249
+ return say(j.why, true);
250
+ const result = await publishBranch(j);
226
251
  return say(result.text, !result.ok);
227
252
  }),
228
253
  tool('open_pull_request', 'Open a pull request from this job\'s branch. The source and target branches are fixed by ' +
229
254
  'the job and the board, so you choose only the title and the description.', {
230
255
  title: z.string().describe('One line. What the change does, not which card it came from.'),
231
256
  body: z.string().describe('What changed and why, for whoever reviews it.'),
232
- }, async ({ title, body }) => {
233
- const j = needJob();
257
+ repository: REPOSITORY,
258
+ }, async ({ title, body, repository }) => {
259
+ const j = pick(needJob(), repository);
260
+ if ('why' in j)
261
+ return say(j.why, true);
234
262
  const { code, out } = await run('gh', ['pr', 'create', '--base', j.base, '--head', j.branch,
235
263
  '--title', title, '--body', `${body}\n\n---\nFlareDeck card: ${j.card}`], j.cwd, await j.token());
236
264
  return code === 0 ? say(out) : say(`Could not open a pull request:\n${out}`, true);
@@ -275,10 +303,13 @@ merge) {
275
303
  'checks, reviews, whether it can merge. With no `number`, this job\'s own; with one, any ' +
276
304
  'pull request in the same repository (a report\'s, when you review or release it). ' +
277
305
  'It only reads.', {
306
+ repository: REPOSITORY,
278
307
  number: z.number().int().positive().optional().describe('A pull request number in this repository, e.g. 3095. Leave out for your own branch\'s.'),
279
308
  }, async (args) => {
280
- const { number } = args;
281
- const j = needJob();
309
+ const { repository, number } = args;
310
+ const j = pick(needJob(), repository);
311
+ if ('why' in j)
312
+ return say(j.why, true);
282
313
  const which = number ? String(number) : j.branch;
283
314
  const token = await j.token();
284
315
  const { code, out } = await run('gh', ['pr', 'view', which, '--json',
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * What an event or a FlareDeck answer means for this agent, before any turn runs.
3
+ * Split out of serve.ts (docs/spec-harness-profiles.md, step 2).
4
+ */
5
+ import type { StreamEvent } from '../stream.js';
6
+ /**
7
+ * Whether a get-outstanding answer says there is nothing at all: no cards and no unactioned
8
+ * comments, and nothing hidden by a filter. Anything else, including an answer that could not be
9
+ * read, means the sweep turn runs as before.
10
+ */
11
+ export declare function nothingOutstanding(text: string): boolean;
12
+ /** How long after a card's turn the harness leaves it alone, unless an event brings it back. */
13
+ export declare const RESUME_COOLDOWN_MS: number;
14
+ /** Whether any of these ids had a turn within the cooldown. */
15
+ export declare function workedRecently(last: Map<string, number>, ids: (string | undefined)[], now: number): boolean;
16
+ /**
17
+ * What a lead's sweep must achieve, as a `/goal` condition (under 4000 characters). Judged by a
18
+ * small model from the transcript alone, so the proof has to be IN the transcript: a final
19
+ * get-portfolio, quoted. Bounded, because a column that cannot be emptied (no free worker, every
20
+ * card blocked) must end in reasons, not in a loop.
21
+ */
22
+ /**
23
+ * The cards in a compact get-portfolio listing that nobody holds — what a lead can actually hand
24
+ * out. A card already assigned to a person or an agent is theirs: counting those made every
25
+ * sweep a dispatch job with nothing to dispatch (HR Goat's pool held eight cards, six of them
26
+ * Cobus's and two the lead's own, and JARVIS was set a goal about them every ten minutes).
27
+ */
28
+ export declare function unownedCards(listing: string): string[];
29
+ /** A "moved to X" event when the card now sits somewhere else. Unknown either way: not stale. */
30
+ /**
31
+ * Something written on a card by a harness, for the record — not by anyone, to anyone.
32
+ *
33
+ * A manager asking a person to approve a merge puts three things on the card within a minute: the
34
+ * flag, the "Approval needed" comment, and later the "Production run … ran" output. Each reached
35
+ * the card's builder as an event and cost it a turn to say "nothing for me to do until qa has it"
36
+ * — HR-0801 woke HAL seven times that way in an afternoon. None of them asks the builder for
37
+ * anything; whoever must act is told through the approval itself.
38
+ *
39
+ * Being NAMED still wakes an agent, whatever the comment is.
40
+ */
41
+ export declare function isBookkeeping(event: Pick<StreamEvent, 'event' | 'message' | 'line' | 'mentioned' | 'actor'>, agents?: ReadonlySet<string>): boolean;
42
+ /**
43
+ * One agent addressing ANOTHER on a card this agent holds: the comment opens with an @name, and
44
+ * the name is not this agent's. "@Norm please merge this now" from the lead woke the card's
45
+ * builder, which spent a turn establishing that it was not Norm (HR-0814, HR-0801). An agent that
46
+ * wants the builder names the builder — and being named always wakes it.
47
+ *
48
+ * Only agents' comments. A person who writes "@Darren, thoughts?" on a card may well want the
49
+ * builder to hear it, and people are not expected to know the rule.
50
+ */
51
+ export declare function forSomeoneElse(event: Pick<StreamEvent, 'event' | 'message' | 'line' | 'mentioned' | 'actor'>, agents: ReadonlySet<string>, me: string): boolean;
52
+ export declare function moveIsStale(event: Pick<StreamEvent, 'event' | 'laneName'>, laneNow: string | undefined): boolean;
53
+ /**
54
+ * What a person reading the pane wants to know: WHICH card, with its title, not a code you have to
55
+ * go and look up — and for anything else, who it is from. "a message" did not even say from whom,
56
+ * on a line that sits there for minutes.
57
+ */
58
+ export declare function workingLabel(event: Pick<StreamEvent, 'event' | 'cardCode' | 'cardKey' | 'cardName' | 'scheduleName' | 'actor'>): string;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Whether a get-outstanding answer says there is nothing at all: no cards and no unactioned
3
+ * comments, and nothing hidden by a filter. Anything else, including an answer that could not be
4
+ * read, means the sweep turn runs as before.
5
+ */
6
+ export function nothingOutstanding(text) {
7
+ if (!text)
8
+ return false;
9
+ return text.includes('*Nothing to do here. 🎉*') && text.includes('*No unactioned comments or mentions. 🎉*') && !/^### \d+\./m.test(text);
10
+ }
11
+ /** How long after a card's turn the harness leaves it alone, unless an event brings it back. */
12
+ export const RESUME_COOLDOWN_MS = 15 * 60_000;
13
+ /** Whether any of these ids had a turn within the cooldown. */
14
+ export function workedRecently(last, ids, now) {
15
+ return ids.some((id) => !!id && now - (last.get(id) ?? 0) < RESUME_COOLDOWN_MS);
16
+ }
17
+ /**
18
+ * What a lead's sweep must achieve, as a `/goal` condition (under 4000 characters). Judged by a
19
+ * small model from the transcript alone, so the proof has to be IN the transcript: a final
20
+ * get-portfolio, quoted. Bounded, because a column that cannot be emptied (no free worker, every
21
+ * card blocked) must end in reasons, not in a loop.
22
+ */
23
+ // One list, named once: what get-portfolio (state todo) returns. It said "the Ready For Dev lane"
24
+ // and then judged by get-portfolio's todo list, which also holds cards in other todo-type lanes;
25
+ // JARVIS reported "0 in Ready For Dev" turn after turn, never matching, to the 8-turn limit.
26
+ /**
27
+ * The cards in a compact get-portfolio listing that nobody holds — what a lead can actually hand
28
+ * out. A card already assigned to a person or an agent is theirs: counting those made every
29
+ * sweep a dispatch job with nothing to dispatch (HR Goat's pool held eight cards, six of them
30
+ * Cobus's and two the lead's own, and JARVIS was set a goal about them every ten minutes).
31
+ */
32
+ export function unownedCards(listing) {
33
+ const out = new Set();
34
+ for (const line of listing.split('\n')) {
35
+ const m = /^- \[[a-z_]+\] ([A-Z][A-Z0-9]*-\d+)\b.* — owner=(\S+)/.exec(line);
36
+ if (m && m[2] === '\u2014')
37
+ out.add(m[1]);
38
+ }
39
+ return [...out];
40
+ }
41
+ /** A "moved to X" event when the card now sits somewhere else. Unknown either way: not stale. */
42
+ /**
43
+ * Something written on a card by a harness, for the record — not by anyone, to anyone.
44
+ *
45
+ * A manager asking a person to approve a merge puts three things on the card within a minute: the
46
+ * flag, the "Approval needed" comment, and later the "Production run … ran" output. Each reached
47
+ * the card's builder as an event and cost it a turn to say "nothing for me to do until qa has it"
48
+ * — HR-0801 woke HAL seven times that way in an afternoon. None of them asks the builder for
49
+ * anything; whoever must act is told through the approval itself.
50
+ *
51
+ * Being NAMED still wakes an agent, whatever the comment is.
52
+ */
53
+ export function isBookkeeping(event, agents = new Set()) {
54
+ // "X needs your approval" is for a person: an agent cannot approve, and its lead is asked
55
+ // through a review, which is its own event. TARS was sent JARVIS's and spent a turn saying so.
56
+ // Before the check for being named: the event addresses whoever it reaches as "you", so it
57
+ // arrives marked as naming them, and the first version of this rule let every one through.
58
+ if (event.event === 'approval')
59
+ return true;
60
+ if (event.mentioned)
61
+ return false;
62
+ if (event.event === 'needs_human_set')
63
+ return true;
64
+ // A card's fields changing under a flag or a claim, by nobody in particular or by an agent.
65
+ // What a PERSON changes on a card is still news.
66
+ if (event.event === 'updated') {
67
+ const actor = (event.actor ?? '').trim().toLowerCase();
68
+ return !actor || actor === 'someone' || agents.has(actor);
69
+ }
70
+ if (event.event !== 'commented')
71
+ return false;
72
+ const said = `${event.message ?? ''}`.trim() || /— [^:]{1,60}: "(.*)$/s.exec(event.line ?? '')?.[1] || '';
73
+ return /^\**(Approval needed\b|Production run\b|No answer in \d+ minutes?, so\b)/.test(said.trim());
74
+ }
75
+ /**
76
+ * One agent addressing ANOTHER on a card this agent holds: the comment opens with an @name, and
77
+ * the name is not this agent's. "@Norm please merge this now" from the lead woke the card's
78
+ * builder, which spent a turn establishing that it was not Norm (HR-0814, HR-0801). An agent that
79
+ * wants the builder names the builder — and being named always wakes it.
80
+ *
81
+ * Only agents' comments. A person who writes "@Darren, thoughts?" on a card may well want the
82
+ * builder to hear it, and people are not expected to know the rule.
83
+ */
84
+ export function forSomeoneElse(event, agents, me) {
85
+ if (event.event !== 'commented' || event.mentioned)
86
+ return false;
87
+ // Who said it and what, from the event's own fields or, where a producer leaves them out, from
88
+ // its line: `commented: HR-1 "title" — JARVIS: "@Norm please…`. The last such pair, since a
89
+ // card's title can hold a dash and a colon of its own.
90
+ const fromLine = [...(event.line ?? '').matchAll(/— ([^:"—]{1,60}): "/g)].pop();
91
+ const actor = ((event.actor ?? '').trim() || fromLine?.[1] || '').trim().toLowerCase();
92
+ if (!agents.has(actor))
93
+ return false;
94
+ const tail = fromLine ? (event.line ?? '').slice((fromLine.index ?? 0) + fromLine[0].length) : '';
95
+ // Markup around the first word must not hide it: "<p>@Norm" opens with a name too.
96
+ const said = (`${event.message ?? ''}`.trim() || tail).replace(/<[^>]+>/g, ' ').trim();
97
+ if (!/^@\S/.test(said))
98
+ return false;
99
+ // Its own name anywhere in it, whatever the event's flag says: without a name to check, stay awake.
100
+ const name = me.trim().toLowerCase();
101
+ return !!name && !said.toLowerCase().includes(`@${name}`);
102
+ }
103
+ export function moveIsStale(event, laneNow) {
104
+ if (event.event !== 'moved' || !event.laneName || !laneNow)
105
+ return false;
106
+ return event.laneName.trim().toLowerCase() !== laneNow.trim().toLowerCase();
107
+ }
108
+ /**
109
+ * What a person reading the pane wants to know: WHICH card, with its title, not a code you have to
110
+ * go and look up — and for anything else, who it is from. "a message" did not even say from whom,
111
+ * on a line that sits there for minutes.
112
+ */
113
+ export function workingLabel(event) {
114
+ const cardLabel = event.cardCode || event.cardKey || '';
115
+ const title = (event.cardName || '').trim();
116
+ if (event.event === 'ask')
117
+ return 'your question';
118
+ if (event.event === 'sweep')
119
+ return 'your outstanding work';
120
+ if (event.event === 'scheduled')
121
+ return event.scheduleName || 'a scheduled task';
122
+ if (cardLabel)
123
+ return `${cardLabel}${title ? ` · ${title.length > 58 ? `${title.slice(0, 57)}…` : title}` : ''}`;
124
+ return `a message${event.actor ? ` from ${event.actor}` : ''}`;
125
+ }
126
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/harness/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * When a card session ends, whether it writes a handover note to the card, and on which plan.
3
+ * Split out of serve.ts (docs/spec-harness-profiles.md, step 2).
4
+ */
5
+ export type HandoverLog = {
6
+ notesAt?: number;
7
+ changedAt?: number;
8
+ };
9
+ /** Tools that only look: reading files, searching, asking FlareDeck or a service what is there. */
10
+ export declare function onlyLooks(tool: string): boolean;
11
+ /** Record a tool call against the session it ran in. */
12
+ export declare function noteHandoverTool(logs: Map<string, HandoverLog>, key: string, tool: string, at: number): void;
13
+ /**
14
+ * Whether a session ending needs a handover note: it changed something, after its last notes.
15
+ * Unknown (no record) is treated as needed, as before.
16
+ */
17
+ export declare function handoverNeeded(l: HandoverLog | undefined): boolean;
18
+ /**
19
+ * Whether a worker's card has gone to someone else, so its notes are no longer the worker's to
20
+ * write. FlareDeck refuses them (set-card-notes: "not assigned to you"), and the handover turn
21
+ * reopened a whole session only to be told so — CASE on HR-1128, TARS on HR-1141 (20 Oct).
22
+ * Unknown (no card, no assignee, no id) is not "someone else": the handover runs as before.
23
+ */
24
+ export declare function cardWentElsewhere(card: {
25
+ assigned_to?: {
26
+ uid?: string;
27
+ } | null;
28
+ } | null | undefined, selfId: string): boolean;
29
+ /**
30
+ * Which Claude token a handover runs on: a fresh pick from FlareDeck, because the plan the turn
31
+ * used may have run out since; the turn's own plan when FlareDeck cannot be asked; 'none' when
32
+ * every plan is spent; null to fall back to this machine's own login (no subscriptions set up).
33
+ */
34
+ export declare function handoverSubscription(subs: () => Promise<{
35
+ choose: (avoid: string[]) => Promise<{
36
+ use: string;
37
+ token?: string;
38
+ }>;
39
+ } | null>, lastUsed: string | undefined): Promise<string | 'none' | null>;