create-open-autonomy 2.3.10 → 2.3.12
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-open-autonomy",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.12",
|
|
4
4
|
"description": "The default Open Autonomy starter kit: a complete repository that runs its own Hermes agent against the platform, with the SDK wired in. `bun create open-autonomy <dir>` scaffolds one.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
package/src/kit.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
10
10
|
import { dirname, join, relative, resolve } from 'node:path';
|
|
11
11
|
|
|
12
|
-
export const KIT = { name: 'hermes', version: '2.3.
|
|
12
|
+
export const KIT = { name: 'hermes', version: '2.3.12' } as const;
|
|
13
13
|
export const KIT_FILE = '.open-autonomy/kit.json';
|
|
14
14
|
const TEMPLATE = resolve(import.meta.dir, '..', 'template');
|
|
15
15
|
|
|
@@ -25,6 +25,9 @@ const oa = new OpenAutonomy({ baseUrl, key: process.env.OPEN_AUTONOMY_KEY ?? 'va
|
|
|
25
25
|
const stateFile = resolve(cfg.state_file);
|
|
26
26
|
const IDLE_END_MS = Number(process.env.OPEN_AUTONOMY_IDLE_END_MS ?? 5 * 60_000);
|
|
27
27
|
const TURN_END_MS = Number(process.env.OPEN_AUTONOMY_TURN_END_MS ?? 15_000);
|
|
28
|
+
// The board's tasks with an attempt still running, as of its last read: a run session serving one of them is not over,
|
|
29
|
+
// however long its transcript is silent.
|
|
30
|
+
const runningItems = new Set<string>();
|
|
28
31
|
const log = (m: string) => console.log(`reporter: ${m}`);
|
|
29
32
|
// The valve holds the key; its health line says when the key expires. Logged once at start so a reader of
|
|
30
33
|
// either log sees the expiry.
|
|
@@ -169,7 +172,9 @@ class Followed {
|
|
|
169
172
|
const ready = msgs.slice(0, n);
|
|
170
173
|
const turns = ready.flatMap(turnsOf);
|
|
171
174
|
if (turns.length) {
|
|
172
|
-
|
|
175
|
+
// Only a board run serves an item; a scheduled session (the PM over the whole board) mentions branches and
|
|
176
|
+
// tasks without being about one.
|
|
177
|
+
if (sourceOf(this.d) === 'board') this.item ??= itemIn(turns);
|
|
173
178
|
this.sha ??= shaIn(turns);
|
|
174
179
|
await this.session!.turns(turns, this.item);
|
|
175
180
|
this.seq = this.session!.seq;
|
|
@@ -192,6 +197,9 @@ class Followed {
|
|
|
192
197
|
}
|
|
193
198
|
async end(why: string): Promise<void> {
|
|
194
199
|
if (this.ended) return;
|
|
200
|
+
// Silence is not the end of a board run while the board still shows its attempt running: a world coming up or a
|
|
201
|
+
// long check is one tool call, minutes without a word. The board's own record says when the attempt is over.
|
|
202
|
+
if (why.startsWith('idle') && kindOf(this.d) === 'run' && this.item && runningItems.has(this.item)) { this.arm(); return; }
|
|
195
203
|
this.ended = true;
|
|
196
204
|
clearTimeout(this.timer);
|
|
197
205
|
await this.sync(true);
|
|
@@ -282,6 +290,8 @@ async function board(): Promise<void> {
|
|
|
282
290
|
const tasks = Object.values(read.workflow?.boards ?? {}).flatMap((b) => Object.values(b.tasks ?? {})).filter((t) => t.lane !== 'archived' && (t.assignee ?? 'default') === 'default').sort((a, b) => (a.created_at ?? '').localeCompare(b.created_at ?? '') || a.id.localeCompare(b.id));
|
|
283
291
|
// A read that found no board at all (the database mid-write) is not an empty board.
|
|
284
292
|
if (!tasks.length) return;
|
|
293
|
+
runningItems.clear();
|
|
294
|
+
for (const t of tasks) if (t.lane === 'running') runningItems.add(t.id);
|
|
285
295
|
const items: RoadmapItem[] = tasks.map((t) => ({ id: t.id, title: t.title ?? t.id, status: statusOf(t.lane), acceptance: (t.body ?? '').split('\n').filter((l) => /^- /.test(l)).map((l) => l.slice(2).trim()) }));
|
|
286
296
|
const digest = JSON.stringify(items);
|
|
287
297
|
if (digest !== roadmapDigest) {
|
|
@@ -34,7 +34,8 @@ is not done.
|
|
|
34
34
|
6. Push the branch: `git push -u origin agent/<task id>`. The landing workflow opens the pull request and merges
|
|
35
35
|
it when the checks pass. Never wait for it; never open a pull request; never push to `main`; never rewrite
|
|
36
36
|
history. If the branch exists from an earlier attempt, push to `agent/<task id>-<YYYYMMDD-HHMM>`.
|
|
37
|
-
7. Hand off: `kanban_request_review` naming the branch and the commit, and what is verified how.
|
|
37
|
+
7. Hand off: `kanban_request_review` naming the branch and the commit, and what is verified how. Name no reviewer:
|
|
38
|
+
the review lane takes the task itself, and a profile the home does not have would hold it forever.
|
|
38
39
|
|
|
39
40
|
If a line cannot be made true from here, `kanban_block` with exactly what is missing, and stop. Never file,
|
|
40
41
|
split or decompose tasks, and never create one: the board is the owner's. Do not loop on a failure you cannot
|