@crouton-kit/crouter 0.3.13 → 0.3.15
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/build-root.d.ts +8 -0
- package/dist/build-root.js +30 -0
- package/dist/builtin-personas/design/base.md +3 -7
- package/dist/builtin-personas/design/orchestrator.md +4 -3
- package/dist/builtin-personas/developer/base.md +3 -7
- package/dist/builtin-personas/developer/orchestrator.md +5 -4
- package/dist/builtin-personas/explore/base.md +3 -7
- package/dist/builtin-personas/explore/orchestrator.md +1 -5
- package/dist/builtin-personas/general/base.md +2 -4
- package/dist/builtin-personas/general/orchestrator.md +2 -4
- package/dist/builtin-personas/lifecycle/resident.md +2 -0
- package/dist/builtin-personas/lifecycle/terminal.md +6 -0
- package/dist/builtin-personas/orchestration-kernel.md +42 -3
- package/dist/builtin-personas/plan/base.md +3 -5
- package/dist/builtin-personas/plan/orchestrator.md +5 -4
- package/dist/builtin-personas/plan/reviewers/architecture-fit/base.md +9 -0
- package/dist/builtin-personas/plan/reviewers/code-smells/base.md +9 -0
- package/dist/builtin-personas/plan/reviewers/pattern-consistency/base.md +9 -0
- package/dist/builtin-personas/plan/reviewers/requirements-coverage/base.md +9 -0
- package/dist/builtin-personas/plan/reviewers/security/base.md +9 -0
- package/dist/builtin-personas/review/base.md +3 -5
- package/dist/builtin-personas/review/orchestrator.md +2 -6
- package/dist/builtin-personas/runtime-base.md +3 -19
- package/dist/builtin-personas/spec/base.md +3 -5
- package/dist/builtin-personas/spec/orchestrator.md +4 -3
- package/dist/builtin-personas/spine/has-manager.md +10 -0
- package/dist/builtin-personas/spine/no-manager.md +2 -0
- package/dist/builtin-skills/skills/crouter-development/personas/SKILL.md +96 -0
- package/dist/builtin-skills/skills/crouter-development/personas/base-prompt/SKILL.md +49 -0
- package/dist/builtin-skills/skills/crouter-development/personas/orchestrator-prompt/SKILL.md +49 -0
- package/dist/builtin-skills/skills/planning/SKILL.md +1 -1
- package/dist/builtin-skills/skills/spec/SKILL.md +2 -2
- package/dist/cli.js +6 -29
- package/dist/commands/__tests__/human.test.js +73 -2
- package/dist/commands/attention.js +76 -7
- package/dist/commands/canvas-prune.d.ts +2 -0
- package/dist/commands/canvas-prune.js +66 -0
- package/dist/commands/canvas.js +5 -8
- package/dist/commands/chord.d.ts +2 -0
- package/dist/commands/chord.js +143 -0
- package/dist/commands/daemon.js +8 -5
- package/dist/commands/dashboard.js +2 -0
- package/dist/commands/human/prompts.js +28 -27
- package/dist/commands/human/queue.d.ts +1 -0
- package/dist/commands/human/queue.js +105 -2
- package/dist/commands/human/shared.d.ts +28 -18
- package/dist/commands/human/shared.js +53 -60
- package/dist/commands/human.js +6 -14
- package/dist/commands/node.d.ts +11 -0
- package/dist/commands/node.js +381 -87
- package/dist/commands/pkg/market-inspect.js +6 -4
- package/dist/commands/pkg/market-manage.js +10 -6
- package/dist/commands/pkg/market.js +2 -4
- package/dist/commands/pkg/plugin-inspect.js +6 -4
- package/dist/commands/pkg/plugin-manage.js +12 -7
- package/dist/commands/pkg/plugin.js +2 -4
- package/dist/commands/pkg.js +0 -4
- package/dist/commands/push.js +178 -15
- package/dist/commands/revive.js +5 -3
- package/dist/commands/skill/author.js +6 -4
- package/dist/commands/skill/find.js +8 -5
- package/dist/commands/skill/read.js +2 -0
- package/dist/commands/skill/state.js +6 -4
- package/dist/commands/skill.js +0 -6
- package/dist/commands/sys/config.js +21 -7
- package/dist/commands/sys/doctor.js +2 -0
- package/dist/commands/sys/update.js +4 -0
- package/dist/commands/sys.js +0 -6
- package/dist/commands/tmux-spread.d.ts +2 -0
- package/dist/commands/tmux-spread.js +130 -0
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +25 -0
- package/dist/core/__tests__/child-followup.test.d.ts +1 -0
- package/dist/core/__tests__/child-followup.test.js +83 -0
- package/dist/core/__tests__/close.test.d.ts +1 -0
- package/dist/core/__tests__/close.test.js +148 -0
- package/dist/core/__tests__/context-intro.test.d.ts +1 -0
- package/dist/core/__tests__/context-intro.test.js +196 -0
- package/dist/core/__tests__/daemon-boot.test.d.ts +1 -0
- package/dist/core/__tests__/daemon-boot.test.js +93 -0
- package/dist/core/__tests__/daemon-liveness.test.d.ts +1 -0
- package/dist/core/__tests__/daemon-liveness.test.js +223 -0
- package/dist/core/__tests__/focuses.test.d.ts +1 -0
- package/dist/core/__tests__/focuses.test.js +259 -0
- package/dist/core/__tests__/fork.test.d.ts +1 -0
- package/dist/core/__tests__/fork.test.js +91 -0
- package/dist/core/__tests__/home-session.test.d.ts +1 -0
- package/dist/core/__tests__/home-session.test.js +153 -0
- package/dist/core/__tests__/human-cancel-guard.test.d.ts +1 -0
- package/dist/core/__tests__/human-cancel-guard.test.js +49 -0
- package/dist/core/__tests__/keystone.test.d.ts +1 -0
- package/dist/core/__tests__/keystone.test.js +185 -0
- package/dist/core/__tests__/kickoff.test.d.ts +1 -0
- package/dist/core/__tests__/kickoff.test.js +89 -0
- package/dist/core/__tests__/lifecycle.test.d.ts +1 -0
- package/dist/core/__tests__/lifecycle.test.js +178 -0
- package/dist/core/__tests__/listing-completeness.test.d.ts +1 -0
- package/dist/core/__tests__/listing-completeness.test.js +31 -0
- package/dist/core/__tests__/memory.test.d.ts +1 -0
- package/dist/core/__tests__/memory.test.js +152 -0
- package/dist/core/__tests__/migration.test.d.ts +1 -0
- package/dist/core/__tests__/migration.test.js +238 -0
- package/dist/core/__tests__/pane-column.test.d.ts +1 -0
- package/dist/core/__tests__/pane-column.test.js +153 -0
- package/dist/core/__tests__/passive-subscription.test.d.ts +1 -0
- package/dist/core/__tests__/passive-subscription.test.js +164 -0
- package/dist/core/__tests__/persona-compose.test.d.ts +1 -0
- package/dist/core/__tests__/persona-compose.test.js +53 -0
- package/dist/core/__tests__/persona-subkind.test.d.ts +1 -0
- package/dist/core/__tests__/persona-subkind.test.js +62 -0
- package/dist/core/__tests__/persona.test.d.ts +1 -0
- package/dist/core/__tests__/persona.test.js +107 -0
- package/dist/core/__tests__/placement-focus.test.d.ts +1 -0
- package/dist/core/__tests__/placement-focus.test.js +244 -0
- package/dist/core/__tests__/placement-reconcile.test.d.ts +1 -0
- package/dist/core/__tests__/placement-reconcile.test.js +212 -0
- package/dist/core/__tests__/placement-revive.test.d.ts +1 -0
- package/dist/core/__tests__/placement-revive.test.js +238 -0
- package/dist/core/__tests__/placement-teardown.test.d.ts +1 -0
- package/dist/core/__tests__/placement-teardown.test.js +183 -0
- package/dist/core/__tests__/prune.test.d.ts +1 -0
- package/dist/core/__tests__/prune.test.js +116 -0
- package/dist/core/__tests__/push-final-guard.test.d.ts +1 -0
- package/dist/core/__tests__/push-final-guard.test.js +71 -0
- package/dist/core/__tests__/relaunch.test.d.ts +1 -0
- package/dist/core/__tests__/relaunch.test.js +328 -0
- package/dist/core/__tests__/reset.test.js +26 -7
- package/dist/core/__tests__/revive.test.d.ts +1 -0
- package/dist/core/__tests__/revive.test.js +217 -0
- package/dist/core/__tests__/spawn-root.test.d.ts +1 -0
- package/dist/core/__tests__/spawn-root.test.js +73 -0
- package/dist/core/__tests__/steer-note.test.d.ts +1 -0
- package/dist/core/__tests__/steer-note.test.js +39 -0
- package/dist/core/__tests__/stop-guard.test.d.ts +1 -0
- package/dist/core/__tests__/stop-guard.test.js +82 -0
- package/dist/core/__tests__/subcommand-tier.test.d.ts +1 -0
- package/dist/core/__tests__/subcommand-tier.test.js +99 -0
- package/dist/core/__tests__/tmux-surface.test.d.ts +1 -0
- package/dist/core/__tests__/tmux-surface.test.js +106 -0
- package/dist/core/__tests__/unknown-path.test.js +8 -2
- package/dist/core/canvas/attention.d.ts +10 -0
- package/dist/core/canvas/attention.js +40 -0
- package/dist/core/canvas/canvas.d.ts +66 -7
- package/dist/core/canvas/canvas.js +209 -21
- package/dist/core/canvas/db.d.ts +8 -0
- package/dist/core/canvas/db.js +206 -4
- package/dist/core/canvas/focuses.d.ts +22 -0
- package/dist/core/canvas/focuses.js +80 -0
- package/dist/core/canvas/index.d.ts +3 -0
- package/dist/core/canvas/index.js +3 -0
- package/dist/core/canvas/labels.d.ts +27 -0
- package/dist/core/canvas/labels.js +36 -0
- package/dist/core/canvas/paths.d.ts +4 -0
- package/dist/core/canvas/paths.js +6 -0
- package/dist/core/canvas/render.js +25 -10
- package/dist/core/canvas/telemetry.d.ts +14 -0
- package/dist/core/canvas/telemetry.js +35 -0
- package/dist/core/canvas/types.d.ts +115 -12
- package/dist/core/command.d.ts +25 -1
- package/dist/core/command.js +48 -7
- package/dist/core/config.js +36 -2
- package/dist/core/feed/feed.js +14 -12
- package/dist/core/feed/inbox.d.ts +3 -1
- package/dist/core/feed/inbox.js +45 -5
- package/dist/core/feed/passive.d.ts +17 -0
- package/dist/core/feed/passive.js +92 -0
- package/dist/core/help.d.ts +59 -13
- package/dist/core/help.js +73 -28
- package/dist/core/personas/index.d.ts +1 -1
- package/dist/core/personas/index.js +1 -1
- package/dist/core/personas/loader.d.ts +40 -1
- package/dist/core/personas/loader.js +63 -1
- package/dist/core/personas/resolve.d.ts +13 -6
- package/dist/core/personas/resolve.js +46 -34
- package/dist/core/runtime/bearings.d.ts +20 -0
- package/dist/core/runtime/bearings.js +92 -0
- package/dist/core/runtime/close.d.ts +14 -0
- package/dist/core/runtime/close.js +151 -0
- package/dist/core/runtime/demote.d.ts +14 -0
- package/dist/core/runtime/demote.js +120 -0
- package/dist/core/runtime/front-door.js +1 -1
- package/dist/core/runtime/kickoff.d.ts +32 -6
- package/dist/core/runtime/kickoff.js +111 -37
- package/dist/core/runtime/launch.d.ts +29 -6
- package/dist/core/runtime/launch.js +85 -13
- package/dist/core/runtime/lifecycle.d.ts +13 -0
- package/dist/core/runtime/lifecycle.js +86 -0
- package/dist/core/runtime/memory.d.ts +43 -0
- package/dist/core/runtime/memory.js +165 -0
- package/dist/core/runtime/naming.d.ts +22 -0
- package/dist/core/runtime/naming.js +166 -0
- package/dist/core/runtime/nodes.d.ts +32 -1
- package/dist/core/runtime/nodes.js +60 -10
- package/dist/core/runtime/persona.d.ts +25 -0
- package/dist/core/runtime/persona.js +139 -0
- package/dist/core/runtime/placement.d.ts +287 -0
- package/dist/core/runtime/placement.js +663 -0
- package/dist/core/runtime/presence.d.ts +7 -32
- package/dist/core/runtime/presence.js +90 -110
- package/dist/core/runtime/promote.d.ts +18 -7
- package/dist/core/runtime/promote.js +70 -65
- package/dist/core/runtime/reset.d.ts +47 -4
- package/dist/core/runtime/reset.js +223 -52
- package/dist/core/runtime/revive.d.ts +26 -2
- package/dist/core/runtime/revive.js +166 -39
- package/dist/core/runtime/roadmap.d.ts +5 -4
- package/dist/core/runtime/roadmap.js +9 -16
- package/dist/core/runtime/spawn.d.ts +20 -5
- package/dist/core/runtime/spawn.js +169 -44
- package/dist/core/runtime/stop-guard.d.ts +1 -1
- package/dist/core/runtime/stop-guard.js +18 -8
- package/dist/core/runtime/tmux.d.ts +106 -21
- package/dist/core/runtime/tmux.js +249 -45
- package/dist/core/spawn.js +15 -0
- package/dist/daemon/crtrd.d.ts +12 -1
- package/dist/daemon/crtrd.js +152 -34
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +266 -0
- package/dist/pi-extensions/canvas-commands.d.ts +34 -0
- package/dist/pi-extensions/canvas-commands.js +103 -0
- package/dist/pi-extensions/canvas-context-intro.d.ts +70 -0
- package/dist/pi-extensions/canvas-context-intro.js +164 -0
- package/dist/pi-extensions/canvas-goal-capture.d.ts +21 -0
- package/dist/pi-extensions/canvas-goal-capture.js +67 -0
- package/dist/pi-extensions/canvas-inbox-watcher.js +11 -0
- package/dist/pi-extensions/canvas-nav.d.ts +12 -4
- package/dist/pi-extensions/canvas-nav.js +586 -262
- package/dist/pi-extensions/canvas-passive-context.d.ts +32 -0
- package/dist/pi-extensions/canvas-passive-context.js +114 -0
- package/dist/pi-extensions/canvas-stophook.d.ts +16 -0
- package/dist/pi-extensions/canvas-stophook.js +344 -228
- package/dist/types.d.ts +28 -0
- package/dist/types.js +16 -0
- package/package.json +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { InboxEntry } from '../core/feed/inbox.js';
|
|
2
|
+
interface InputEventLike {
|
|
3
|
+
type: 'input';
|
|
4
|
+
text: string;
|
|
5
|
+
images?: unknown[];
|
|
6
|
+
source: 'interactive' | 'rpc' | 'extension';
|
|
7
|
+
}
|
|
8
|
+
type InputEventResultLike = {
|
|
9
|
+
action: 'continue';
|
|
10
|
+
} | {
|
|
11
|
+
action: 'transform';
|
|
12
|
+
text: string;
|
|
13
|
+
images?: unknown[];
|
|
14
|
+
} | {
|
|
15
|
+
action: 'handled';
|
|
16
|
+
};
|
|
17
|
+
interface PiLike {
|
|
18
|
+
on: (event: 'input', handler: (event: InputEventLike, ctx: any) => InputEventResultLike | void) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Render drained passive entries (oldest first) into one XML pre-text block.
|
|
22
|
+
* Each accumulated message is its own timestamped `<update>` element.
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatPassive(entries: InboxEntry[]): string;
|
|
25
|
+
/**
|
|
26
|
+
* Register the passive-context drain on `pi`.
|
|
27
|
+
*
|
|
28
|
+
* Returns immediately (inert) when CRTR_NODE_ID is absent. The `input` handler
|
|
29
|
+
* is the whole extension: drain on every message, prepend when non-empty.
|
|
30
|
+
*/
|
|
31
|
+
export declare function registerCanvasPassiveContext(pi: PiLike): void;
|
|
32
|
+
export default registerCanvasPassiveContext;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// canvas-passive-context.ts — pi extension for pi-native canvas agent nodes.
|
|
2
|
+
//
|
|
3
|
+
// Loaded into every canvas node's pi process via the node's launch.extensions
|
|
4
|
+
// list. INERT when CRTR_NODE_ID is absent (plain pi session or legacy job agent).
|
|
5
|
+
//
|
|
6
|
+
// The passive-subscription drain. A PASSIVE subscription (active=false edge)
|
|
7
|
+
// never wakes its subscriber: `push` routes its pointers to passive.jsonl, which
|
|
8
|
+
// the inbox-watcher never polls. They simply accumulate. This extension is what
|
|
9
|
+
// finally surfaces them — the moment the node is MESSAGED.
|
|
10
|
+
//
|
|
11
|
+
// pi fires an `input` event for every user message (human-typed, an RPC, or an
|
|
12
|
+
// extension's sendUserMessage — including the inbox-watcher's own wake). On that
|
|
13
|
+
// event we DRAIN the node's passive accumulator and, when non-empty, prepend
|
|
14
|
+
// every entry as timestamped XML to the message text via the `transform` action.
|
|
15
|
+
// So the backlog rides in as pre-text on whatever message next engages the node,
|
|
16
|
+
// before the LLM sees it — and is cleared in the same step (drain = read+clear),
|
|
17
|
+
// so it surfaces exactly once.
|
|
18
|
+
//
|
|
19
|
+
// Plain TS-with-types — no imports from @earendil-works/* so this compiles inside
|
|
20
|
+
// crouter's own tsc build without a dep on the pi packages.
|
|
21
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
22
|
+
import { drainPassive } from '../core/feed/passive.js';
|
|
23
|
+
// Per-entry body cap so a single fat report can't blow the context budget. The
|
|
24
|
+
// full report stays on disk at `ref` if the agent needs more.
|
|
25
|
+
const BODY_CAP = 4_000;
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Report dereference — turn a passive pointer into the message text it carries.
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/** Strip the leading YAML frontmatter block a report is written with, returning
|
|
30
|
+
* just the body. Tolerant: no frontmatter → returns the input unchanged. */
|
|
31
|
+
function stripFrontmatter(raw) {
|
|
32
|
+
if (!raw.startsWith('---\n'))
|
|
33
|
+
return raw;
|
|
34
|
+
const end = raw.indexOf('\n---\n', 4);
|
|
35
|
+
return end === -1 ? raw : raw.slice(end + 5);
|
|
36
|
+
}
|
|
37
|
+
/** The content for one accumulated entry: the dereferenced report body when the
|
|
38
|
+
* pointer carries a `ref`, else the entry's own label/data. Capped + trimmed. */
|
|
39
|
+
function entryContent(e) {
|
|
40
|
+
if (e.ref !== undefined && e.ref !== '' && existsSync(e.ref)) {
|
|
41
|
+
try {
|
|
42
|
+
const body = stripFrontmatter(readFileSync(e.ref, 'utf8')).trim();
|
|
43
|
+
if (body !== '') {
|
|
44
|
+
return body.length > BODY_CAP
|
|
45
|
+
? `${body.slice(0, BODY_CAP)}\n… (truncated; full report at ${e.ref})`
|
|
46
|
+
: body;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* fall through to the label */
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const data = e.data?.['body'];
|
|
54
|
+
if (typeof data === 'string' && data.trim() !== '')
|
|
55
|
+
return data.trim();
|
|
56
|
+
return e.label;
|
|
57
|
+
}
|
|
58
|
+
/** Minimal XML attribute escaping for the values we interpolate. */
|
|
59
|
+
function attr(s) {
|
|
60
|
+
return s
|
|
61
|
+
.replace(/&/g, '&')
|
|
62
|
+
.replace(/</g, '<')
|
|
63
|
+
.replace(/>/g, '>')
|
|
64
|
+
.replace(/"/g, '"');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Render drained passive entries (oldest first) into one XML pre-text block.
|
|
68
|
+
* Each accumulated message is its own timestamped `<update>` element.
|
|
69
|
+
*/
|
|
70
|
+
export function formatPassive(entries) {
|
|
71
|
+
const blocks = entries
|
|
72
|
+
.map((e) => {
|
|
73
|
+
const from = attr(e.from ?? 'system');
|
|
74
|
+
const refAttr = e.ref !== undefined && e.ref !== '' ? ` ref="${attr(e.ref)}"` : '';
|
|
75
|
+
return (`<update from="${from}" kind="${attr(e.kind)}" at="${attr(e.ts)}"${refAttr}>\n` +
|
|
76
|
+
`${entryContent(e)}\n` +
|
|
77
|
+
`</update>`);
|
|
78
|
+
})
|
|
79
|
+
.join('\n');
|
|
80
|
+
return (`<passive-subscription-backlog count="${entries.length}" ` +
|
|
81
|
+
`note="Reports accumulated from nodes you passively subscribe to while you were not actively listening. ` +
|
|
82
|
+
`Surfaced now because you were messaged. Oldest first.">\n` +
|
|
83
|
+
`${blocks}\n` +
|
|
84
|
+
`</passive-subscription-backlog>`);
|
|
85
|
+
}
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// Extension
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
/**
|
|
90
|
+
* Register the passive-context drain on `pi`.
|
|
91
|
+
*
|
|
92
|
+
* Returns immediately (inert) when CRTR_NODE_ID is absent. The `input` handler
|
|
93
|
+
* is the whole extension: drain on every message, prepend when non-empty.
|
|
94
|
+
*/
|
|
95
|
+
export function registerCanvasPassiveContext(pi) {
|
|
96
|
+
pi.on('input', (event) => {
|
|
97
|
+
try {
|
|
98
|
+
const nodeId = process.env['CRTR_NODE_ID'];
|
|
99
|
+
if (nodeId === undefined || nodeId.trim() === '')
|
|
100
|
+
return; // not a canvas node
|
|
101
|
+
const drained = drainPassive(nodeId);
|
|
102
|
+
if (drained.length === 0)
|
|
103
|
+
return; // nothing accumulated → leave the message as-is
|
|
104
|
+
const preText = formatPassive(drained);
|
|
105
|
+
const text = event.text.trim() === '' ? preText : `${preText}\n\n${event.text}`;
|
|
106
|
+
return { action: 'transform', text, images: event.images };
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Best-effort: a drain/format failure must never drop the user's message.
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
export default registerCanvasPassiveContext;
|
|
@@ -5,6 +5,22 @@ interface PiLike {
|
|
|
5
5
|
deliverAs?: 'steer' | 'followUp';
|
|
6
6
|
}) => void;
|
|
7
7
|
}
|
|
8
|
+
/** The nudge text for a crossed band, specialized to the node's (mode,
|
|
9
|
+
* lifecycle) persona + how far along the escalation it is.
|
|
10
|
+
*
|
|
11
|
+
* - orchestrator (terminal OR resident): checkpoint its roadmap and yield
|
|
12
|
+
* (gently → firmly → pushy). It has a context/roadmap.md to yield against.
|
|
13
|
+
* - resident/base (root conversation): never promoted, so NO roadmap exists —
|
|
14
|
+
* steer it to PROMOTE if the chat is growing into a multi-phase job (which
|
|
15
|
+
* seeds a roadmap), else wrap up / start fresh. Never points at roadmap.md or
|
|
16
|
+
* a bare `node yield`, which for a roadmap-less root just drops context.
|
|
17
|
+
* - terminal/base (worker): PROMOTE itself — become an orchestrator — when
|
|
18
|
+
* work remains, with an "ignore if nearly done, finish with push final" once
|
|
19
|
+
* it's deeper in.
|
|
20
|
+
*
|
|
21
|
+
* At/past 185k every persona goes PUSHY: the context is long enough that
|
|
22
|
+
* drifting further risks an overflow. */
|
|
23
|
+
export declare function steerNote(at: number, lifecycle: string, mode: string): string;
|
|
8
24
|
/**
|
|
9
25
|
* Register the canvas turn_end / agent_end handlers on `pi`.
|
|
10
26
|
*
|