@enderfga/claw-orchestrator 3.7.0 → 4.0.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.
- package/README.md +19 -3
- package/dist/bin/cli.js +30 -7
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/autoloop/messages.d.ts +0 -2
- package/dist/src/autoloop/messages.js +0 -2
- package/dist/src/autoloop/messages.js.map +1 -1
- package/dist/src/autoloop/planner-tools.d.ts +3 -3
- package/dist/src/autoloop/planner-tools.js +3 -3
- package/dist/src/autoloop/runner.d.ts +1 -2
- package/dist/src/autoloop/runner.js +1 -2
- package/dist/src/autoloop/runner.js.map +1 -1
- package/dist/src/autoloop/types.d.ts +0 -2
- package/dist/src/autoloop/types.js +0 -2
- package/dist/src/autoloop/types.js.map +1 -1
- package/dist/src/council.js +1 -0
- package/dist/src/council.js.map +1 -1
- package/dist/src/dashboard/index.html +709 -8
- package/dist/src/embedded-server.js +172 -6
- package/dist/src/embedded-server.js.map +1 -1
- package/dist/src/index.js +222 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/session-manager.d.ts +82 -1
- package/dist/src/session-manager.js +264 -6
- package/dist/src/session-manager.js.map +1 -1
- package/dist/src/ultraapp/build-events.d.ts +46 -0
- package/dist/src/ultraapp/build-events.js +6 -0
- package/dist/src/ultraapp/build-events.js.map +1 -0
- package/dist/src/ultraapp/build.d.ts +39 -0
- package/dist/src/ultraapp/build.js +111 -0
- package/dist/src/ultraapp/build.js.map +1 -0
- package/dist/src/ultraapp/conventions.d.ts +8 -0
- package/dist/src/ultraapp/conventions.js +248 -0
- package/dist/src/ultraapp/conventions.js.map +1 -0
- package/dist/src/ultraapp/council-adapter.d.ts +49 -0
- package/dist/src/ultraapp/council-adapter.js +152 -0
- package/dist/src/ultraapp/council-adapter.js.map +1 -0
- package/dist/src/ultraapp/deploy.d.ts +45 -0
- package/dist/src/ultraapp/deploy.js +82 -0
- package/dist/src/ultraapp/deploy.js.map +1 -0
- package/dist/src/ultraapp/diff-apply.d.ts +15 -0
- package/dist/src/ultraapp/diff-apply.js +48 -0
- package/dist/src/ultraapp/diff-apply.js.map +1 -0
- package/dist/src/ultraapp/docker.d.ts +57 -0
- package/dist/src/ultraapp/docker.js +83 -0
- package/dist/src/ultraapp/docker.js.map +1 -0
- package/dist/src/ultraapp/feedback-classifier.d.ts +24 -0
- package/dist/src/ultraapp/feedback-classifier.js +85 -0
- package/dist/src/ultraapp/feedback-classifier.js.map +1 -0
- package/dist/src/ultraapp/files.d.ts +24 -0
- package/dist/src/ultraapp/files.js +79 -0
- package/dist/src/ultraapp/files.js.map +1 -0
- package/dist/src/ultraapp/fix-on-failure-session.d.ts +23 -0
- package/dist/src/ultraapp/fix-on-failure-session.js +48 -0
- package/dist/src/ultraapp/fix-on-failure-session.js.map +1 -0
- package/dist/src/ultraapp/fix-on-failure.d.ts +39 -0
- package/dist/src/ultraapp/fix-on-failure.js +69 -0
- package/dist/src/ultraapp/fix-on-failure.js.map +1 -0
- package/dist/src/ultraapp/host-strategy.d.ts +57 -0
- package/dist/src/ultraapp/host-strategy.js +205 -0
- package/dist/src/ultraapp/host-strategy.js.map +1 -0
- package/dist/src/ultraapp/interview-parser.d.ts +41 -0
- package/dist/src/ultraapp/interview-parser.js +83 -0
- package/dist/src/ultraapp/interview-parser.js.map +1 -0
- package/dist/src/ultraapp/interview-tools.d.ts +16 -0
- package/dist/src/ultraapp/interview-tools.js +36 -0
- package/dist/src/ultraapp/interview-tools.js.map +1 -0
- package/dist/src/ultraapp/json-patch.d.ts +6 -0
- package/dist/src/ultraapp/json-patch.js +78 -0
- package/dist/src/ultraapp/json-patch.js.map +1 -0
- package/dist/src/ultraapp/lifecycle.d.ts +38 -0
- package/dist/src/ultraapp/lifecycle.js +31 -0
- package/dist/src/ultraapp/lifecycle.js.map +1 -0
- package/dist/src/ultraapp/manager.d.ts +141 -0
- package/dist/src/ultraapp/manager.js +661 -0
- package/dist/src/ultraapp/manager.js.map +1 -0
- package/dist/src/ultraapp/narrator-prompt.d.ts +10 -0
- package/dist/src/ultraapp/narrator-prompt.js +54 -0
- package/dist/src/ultraapp/narrator-prompt.js.map +1 -0
- package/dist/src/ultraapp/narrator.d.ts +49 -0
- package/dist/src/ultraapp/narrator.js +83 -0
- package/dist/src/ultraapp/narrator.js.map +1 -0
- package/dist/src/ultraapp/patcher.d.ts +35 -0
- package/dist/src/ultraapp/patcher.js +159 -0
- package/dist/src/ultraapp/patcher.js.map +1 -0
- package/dist/src/ultraapp/router.d.ts +39 -0
- package/dist/src/ultraapp/router.js +139 -0
- package/dist/src/ultraapp/router.js.map +1 -0
- package/dist/src/ultraapp/spec-delta.d.ts +18 -0
- package/dist/src/ultraapp/spec-delta.js +35 -0
- package/dist/src/ultraapp/spec-delta.js.map +1 -0
- package/dist/src/ultraapp/spec.d.ts +82 -0
- package/dist/src/ultraapp/spec.js +125 -0
- package/dist/src/ultraapp/spec.js.map +1 -0
- package/dist/src/ultraapp/store.d.ts +67 -0
- package/dist/src/ultraapp/store.js +177 -0
- package/dist/src/ultraapp/store.js.map +1 -0
- package/dist/src/ultraapp/versions.d.ts +50 -0
- package/dist/src/ultraapp/versions.js +65 -0
- package/dist/src/ultraapp/versions.js.map +1 -0
- package/dist/src/validation.d.ts +4 -4
- package/dist/src/validation.js +6 -5
- package/dist/src/validation.js.map +1 -1
- package/openclaw.plugin.json +15 -1
- package/package.json +5 -2
- package/skills/SKILL.md +2 -2
- package/skills/references/autoloop.md +1 -1
- package/skills/references/mcp.md +2 -2
- package/skills/references/tools.md +183 -0
- package/skills/references/ultraapp.md +203 -0
- package/skills/ultraapp/SKILL.md +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/ultraapp/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Narrator system prompt + per-batch user prompt composer.
|
|
3
|
+
*
|
|
4
|
+
* Narrator runs as a per-run Claude Haiku session subscribing to BuildEvents.
|
|
5
|
+
* It writes short conversational chat updates that explain build progress
|
|
6
|
+
* to the user — replacing v0.2's mechanical event lines.
|
|
7
|
+
*/
|
|
8
|
+
import type { BuildEvent } from './build-events.js';
|
|
9
|
+
export declare const NARRATOR_SYSTEM_PROMPT: string;
|
|
10
|
+
export declare function composeNarratorBatch(events: BuildEvent[], language: 'zh' | 'en'): string;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Narrator system prompt + per-batch user prompt composer.
|
|
3
|
+
*
|
|
4
|
+
* Narrator runs as a per-run Claude Haiku session subscribing to BuildEvents.
|
|
5
|
+
* It writes short conversational chat updates that explain build progress
|
|
6
|
+
* to the user — replacing v0.2's mechanical event lines.
|
|
7
|
+
*/
|
|
8
|
+
export const NARRATOR_SYSTEM_PROMPT = `
|
|
9
|
+
You are the build narrator inside the ultraapp Forge tab. The user clicked
|
|
10
|
+
Start Build and is watching their app being constructed by a 3-agent council
|
|
11
|
+
+ fix-on-failure pipeline. You receive batches of structured BuildEvent JSON
|
|
12
|
+
and write short, conversational chat updates that explain what's happening,
|
|
13
|
+
like a co-worker keeping the user in the loop.
|
|
14
|
+
|
|
15
|
+
## Style
|
|
16
|
+
|
|
17
|
+
- Short sentences. One paragraph max per batch (2–4 lines). Plain prose.
|
|
18
|
+
- Match the user's language: if they wrote earlier in Chinese, respond in
|
|
19
|
+
Chinese (中文); else English. The hint is in the user message.
|
|
20
|
+
- Don't apologise. Don't pad. Don't restate the goal.
|
|
21
|
+
- Refer to agents by their actual names ('agent-A', not 'the first agent').
|
|
22
|
+
|
|
23
|
+
## Honesty
|
|
24
|
+
|
|
25
|
+
- Only describe events that appear in the JSON you receive. NEVER invent
|
|
26
|
+
rounds, votes, errors, or progress. If the batch is uninformative
|
|
27
|
+
("agent-A is thinking" — no votes, no commits), say so briefly.
|
|
28
|
+
- If the batch shows a 'build-failed' event, say so plainly with the reason.
|
|
29
|
+
Don't soften it. Don't suggest fixes (that's a later phase).
|
|
30
|
+
- For 'council-round' events without a vote, summarise as activity, not
|
|
31
|
+
decision ("agent-A is iterating in their worktree" rather than "agent-A is
|
|
32
|
+
improving the code" — you don't know what they're improving without
|
|
33
|
+
seeing the diff).
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
|
|
37
|
+
Plain text only. NO markdown headers, NO emoji, NO code fences. Just the
|
|
38
|
+
2–4 line update.
|
|
39
|
+
`.trim();
|
|
40
|
+
export function composeNarratorBatch(events, language) {
|
|
41
|
+
if (events.length === 0)
|
|
42
|
+
return '';
|
|
43
|
+
const langHint = language === 'zh' ? 'Chinese (中文)' : 'English';
|
|
44
|
+
return `Language to respond in: ${langHint}.
|
|
45
|
+
|
|
46
|
+
Events to narrate (JSON):
|
|
47
|
+
|
|
48
|
+
\`\`\`json
|
|
49
|
+
${JSON.stringify(events, null, 2)}
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
Write a short conversational update.`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=narrator-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"narrator-prompt.js","sourceRoot":"","sources":["../../../src/ultraapp/narrator-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BrC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,UAAU,oBAAoB,CAAC,MAAoB,EAAE,QAAqB;IAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,OAAO,2BAA2B,QAAQ;;;;;EAK1C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;;;qCAGI,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Narrator — per-run Haiku summariser of build progress.
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to BuildEvents, batches them, and on flush trigger asks Haiku
|
|
5
|
+
* to write a short conversational chat update. Trigger is whichever fires
|
|
6
|
+
* first: a flush timer (default 15s), a count threshold (default 6 events),
|
|
7
|
+
* or an "urgent" terminal event (build-complete / build-failed / cancelled).
|
|
8
|
+
*
|
|
9
|
+
* If the LLM call fails, we degrade gracefully: emit one raw line per buffered
|
|
10
|
+
* event so the user still sees something rather than silence.
|
|
11
|
+
*/
|
|
12
|
+
import type { BuildEvent } from './build-events.js';
|
|
13
|
+
interface SessionManagerLike {
|
|
14
|
+
startSession(c: {
|
|
15
|
+
name?: string;
|
|
16
|
+
engine?: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
systemPrompt?: string;
|
|
19
|
+
permissionMode?: string;
|
|
20
|
+
}): Promise<{
|
|
21
|
+
name: string;
|
|
22
|
+
}>;
|
|
23
|
+
sendMessage(name: string, msg: string): Promise<{
|
|
24
|
+
output: string;
|
|
25
|
+
}>;
|
|
26
|
+
stopSession(name: string): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export interface NarratorOptions {
|
|
29
|
+
runId: string;
|
|
30
|
+
sessionManager: SessionManagerLike;
|
|
31
|
+
language: 'zh' | 'en';
|
|
32
|
+
onChat: (text: string) => void;
|
|
33
|
+
flushIntervalMs?: number;
|
|
34
|
+
eventCountThreshold?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class Narrator {
|
|
37
|
+
private readonly opts;
|
|
38
|
+
private buffer;
|
|
39
|
+
private sessionName;
|
|
40
|
+
private timer;
|
|
41
|
+
private flushing;
|
|
42
|
+
private stopped;
|
|
43
|
+
constructor(opts: NarratorOptions);
|
|
44
|
+
start(): Promise<void>;
|
|
45
|
+
push(ev: BuildEvent): void;
|
|
46
|
+
stop(): Promise<void>;
|
|
47
|
+
private flush;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Narrator — per-run Haiku summariser of build progress.
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to BuildEvents, batches them, and on flush trigger asks Haiku
|
|
5
|
+
* to write a short conversational chat update. Trigger is whichever fires
|
|
6
|
+
* first: a flush timer (default 15s), a count threshold (default 6 events),
|
|
7
|
+
* or an "urgent" terminal event (build-complete / build-failed / cancelled).
|
|
8
|
+
*
|
|
9
|
+
* If the LLM call fails, we degrade gracefully: emit one raw line per buffered
|
|
10
|
+
* event so the user still sees something rather than silence.
|
|
11
|
+
*/
|
|
12
|
+
import { NARRATOR_SYSTEM_PROMPT, composeNarratorBatch } from './narrator-prompt.js';
|
|
13
|
+
const URGENT_TYPES = new Set(['build-complete', 'build-failed', 'build-cancelled']);
|
|
14
|
+
export class Narrator {
|
|
15
|
+
opts;
|
|
16
|
+
buffer = [];
|
|
17
|
+
sessionName = null;
|
|
18
|
+
timer = null;
|
|
19
|
+
flushing = false;
|
|
20
|
+
stopped = false;
|
|
21
|
+
constructor(opts) {
|
|
22
|
+
this.opts = opts;
|
|
23
|
+
}
|
|
24
|
+
async start() {
|
|
25
|
+
const r = await this.opts.sessionManager.startSession({
|
|
26
|
+
name: `narrator-${this.opts.runId}`,
|
|
27
|
+
engine: 'claude',
|
|
28
|
+
model: 'claude-haiku-4-5-20251001',
|
|
29
|
+
systemPrompt: NARRATOR_SYSTEM_PROMPT,
|
|
30
|
+
permissionMode: 'bypassPermissions',
|
|
31
|
+
});
|
|
32
|
+
this.sessionName = r.name;
|
|
33
|
+
const interval = this.opts.flushIntervalMs ?? 15000;
|
|
34
|
+
this.timer = setInterval(() => void this.flush(), interval);
|
|
35
|
+
this.timer.unref?.();
|
|
36
|
+
}
|
|
37
|
+
push(ev) {
|
|
38
|
+
if (this.stopped)
|
|
39
|
+
return;
|
|
40
|
+
this.buffer.push(ev);
|
|
41
|
+
const threshold = this.opts.eventCountThreshold ?? 6;
|
|
42
|
+
if (URGENT_TYPES.has(ev.type) || this.buffer.length >= threshold) {
|
|
43
|
+
void this.flush();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async stop() {
|
|
47
|
+
this.stopped = true;
|
|
48
|
+
if (this.timer) {
|
|
49
|
+
clearInterval(this.timer);
|
|
50
|
+
this.timer = null;
|
|
51
|
+
}
|
|
52
|
+
if (this.buffer.length > 0)
|
|
53
|
+
await this.flush();
|
|
54
|
+
if (this.sessionName) {
|
|
55
|
+
await this.opts.sessionManager.stopSession(this.sessionName).catch(() => { });
|
|
56
|
+
this.sessionName = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async flush() {
|
|
60
|
+
if (this.flushing || this.buffer.length === 0 || !this.sessionName)
|
|
61
|
+
return;
|
|
62
|
+
const batch = this.buffer.splice(0, this.buffer.length);
|
|
63
|
+
this.flushing = true;
|
|
64
|
+
try {
|
|
65
|
+
const userPrompt = composeNarratorBatch(batch, this.opts.language);
|
|
66
|
+
const r = await this.opts.sessionManager.sendMessage(this.sessionName, userPrompt);
|
|
67
|
+
const text = (r.output ?? '').trim();
|
|
68
|
+
if (text)
|
|
69
|
+
this.opts.onChat(text);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
for (const ev of batch)
|
|
73
|
+
this.opts.onChat(rawDescribe(ev));
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
this.flushing = false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function rawDescribe(ev) {
|
|
81
|
+
return `[${ev.type}] ${JSON.stringify(ev)}`;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=narrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"narrator.js","sourceRoot":"","sources":["../../../src/ultraapp/narrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cosmetic-feedback patcher.
|
|
3
|
+
*
|
|
4
|
+
* Single-shot LLM call (caller injects the model — production wires this to
|
|
5
|
+
* Opus). Output: a unified diff. We:
|
|
6
|
+
* 1. take an in-memory snapshot of the worktree (text files only)
|
|
7
|
+
* 2. apply the diff
|
|
8
|
+
* 3. ask the validator to drive `npm install/build/test/docker build` with
|
|
9
|
+
* a fix-on-failure budget
|
|
10
|
+
* 4. on any failure, restore the snapshot exactly
|
|
11
|
+
*
|
|
12
|
+
* The `validate` collaborator is `runFixOnFailure` in production wiring (the
|
|
13
|
+
* v0.2 helper); we keep the parameter name generic here so this module
|
|
14
|
+
* doesn't take a hard dep on the helper's name.
|
|
15
|
+
*/
|
|
16
|
+
export interface PatcherArgs {
|
|
17
|
+
worktreePath: string;
|
|
18
|
+
feedback: string;
|
|
19
|
+
llmCall: (prompt: string) => Promise<{
|
|
20
|
+
output: string;
|
|
21
|
+
}>;
|
|
22
|
+
validate: (a: {
|
|
23
|
+
worktreePath: string;
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
reason?: string;
|
|
27
|
+
rounds: number;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
export interface PatcherResult {
|
|
31
|
+
ok: boolean;
|
|
32
|
+
reason?: string;
|
|
33
|
+
newWorktreePath?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function runPatcher(args: PatcherArgs): Promise<PatcherResult>;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cosmetic-feedback patcher.
|
|
3
|
+
*
|
|
4
|
+
* Single-shot LLM call (caller injects the model — production wires this to
|
|
5
|
+
* Opus). Output: a unified diff. We:
|
|
6
|
+
* 1. take an in-memory snapshot of the worktree (text files only)
|
|
7
|
+
* 2. apply the diff
|
|
8
|
+
* 3. ask the validator to drive `npm install/build/test/docker build` with
|
|
9
|
+
* a fix-on-failure budget
|
|
10
|
+
* 4. on any failure, restore the snapshot exactly
|
|
11
|
+
*
|
|
12
|
+
* The `validate` collaborator is `runFixOnFailure` in production wiring (the
|
|
13
|
+
* v0.2 helper); we keep the parameter name generic here so this module
|
|
14
|
+
* doesn't take a hard dep on the helper's name.
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'node:fs';
|
|
17
|
+
import * as path from 'node:path';
|
|
18
|
+
import { applyUnifiedDiff } from './diff-apply.js';
|
|
19
|
+
const PATCHER_PROMPT = (codebaseSummary, feedback) => `You are the ultraapp patcher. The user has an already-deployed web app and
|
|
20
|
+
wants a small change. Your task: produce a unified diff (the exact format git
|
|
21
|
+
diff produces, with --- a/ and +++ b/ headers) that implements the user's
|
|
22
|
+
request.
|
|
23
|
+
|
|
24
|
+
## Constraints
|
|
25
|
+
|
|
26
|
+
- DO NOT change the AppSpec or pipeline behaviour. If the request implies a
|
|
27
|
+
spec/pipeline change, refuse with the literal text "[OUT OF SCOPE: spec change required]".
|
|
28
|
+
- Touch as few files as possible. Surgical changes only.
|
|
29
|
+
- Preserve all architectural conventions (path-based deploy, async file-queue
|
|
30
|
+
endpoints, BYOK, smoke test).
|
|
31
|
+
- Output ONLY a fenced \`\`\`diff block. No commentary.
|
|
32
|
+
|
|
33
|
+
## Codebase summary
|
|
34
|
+
|
|
35
|
+
${codebaseSummary}
|
|
36
|
+
|
|
37
|
+
## User feedback
|
|
38
|
+
|
|
39
|
+
${feedback}
|
|
40
|
+
|
|
41
|
+
Produce the diff now.`;
|
|
42
|
+
const DIFF_RE = /```diff\s*\n([\s\S]*?)\n```/;
|
|
43
|
+
const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', '.next', 'build']);
|
|
44
|
+
export async function runPatcher(args) {
|
|
45
|
+
const summary = summariseCodebase(args.worktreePath);
|
|
46
|
+
const r = await args.llmCall(PATCHER_PROMPT(summary, args.feedback));
|
|
47
|
+
if (r.output.includes('[OUT OF SCOPE')) {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
reason: 'patcher refused — feedback requires a spec change (use spec-delta)',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const m = DIFF_RE.exec(r.output);
|
|
54
|
+
if (!m)
|
|
55
|
+
return { ok: false, reason: 'patcher did not return a diff' };
|
|
56
|
+
const backup = snapshotDir(args.worktreePath);
|
|
57
|
+
const apply = applyUnifiedDiff(m[1], args.worktreePath);
|
|
58
|
+
if (!apply.ok) {
|
|
59
|
+
restoreSnapshot(args.worktreePath, backup);
|
|
60
|
+
return { ok: false, reason: 'diff apply conflict: ' + JSON.stringify(apply.conflicts) };
|
|
61
|
+
}
|
|
62
|
+
const v = await args.validate({ worktreePath: args.worktreePath });
|
|
63
|
+
if (!v.ok) {
|
|
64
|
+
restoreSnapshot(args.worktreePath, backup);
|
|
65
|
+
return { ok: false, reason: `validate failed: ${v.reason ?? 'unknown'}` };
|
|
66
|
+
}
|
|
67
|
+
return { ok: true, newWorktreePath: args.worktreePath };
|
|
68
|
+
}
|
|
69
|
+
function summariseCodebase(dir) {
|
|
70
|
+
const out = [];
|
|
71
|
+
const walk = (p, depth = 0) => {
|
|
72
|
+
if (depth > 3)
|
|
73
|
+
return;
|
|
74
|
+
let entries;
|
|
75
|
+
try {
|
|
76
|
+
entries = fs.readdirSync(p, { withFileTypes: true });
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
for (const e of entries) {
|
|
82
|
+
if (SKIP_DIRS.has(e.name))
|
|
83
|
+
continue;
|
|
84
|
+
const full = path.join(p, e.name);
|
|
85
|
+
if (e.isDirectory())
|
|
86
|
+
walk(full, depth + 1);
|
|
87
|
+
else
|
|
88
|
+
out.push(path.relative(dir, full));
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
walk(dir);
|
|
92
|
+
return out.slice(0, 200).join('\n');
|
|
93
|
+
}
|
|
94
|
+
function snapshotDir(dir) {
|
|
95
|
+
const snap = new Map();
|
|
96
|
+
const walk = (p) => {
|
|
97
|
+
let entries;
|
|
98
|
+
try {
|
|
99
|
+
entries = fs.readdirSync(p, { withFileTypes: true });
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
for (const e of entries) {
|
|
105
|
+
if (SKIP_DIRS.has(e.name))
|
|
106
|
+
continue;
|
|
107
|
+
const full = path.join(p, e.name);
|
|
108
|
+
if (e.isDirectory())
|
|
109
|
+
walk(full);
|
|
110
|
+
else {
|
|
111
|
+
try {
|
|
112
|
+
snap.set(full, fs.readFileSync(full, 'utf8'));
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
/* skip binary or unreadable files */
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
walk(dir);
|
|
121
|
+
return snap;
|
|
122
|
+
}
|
|
123
|
+
function restoreSnapshot(dir, snap) {
|
|
124
|
+
const seen = new Set();
|
|
125
|
+
const walk = (p) => {
|
|
126
|
+
let entries;
|
|
127
|
+
try {
|
|
128
|
+
entries = fs.readdirSync(p, { withFileTypes: true });
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
for (const e of entries) {
|
|
134
|
+
if (SKIP_DIRS.has(e.name))
|
|
135
|
+
continue;
|
|
136
|
+
const full = path.join(p, e.name);
|
|
137
|
+
if (e.isDirectory())
|
|
138
|
+
walk(full);
|
|
139
|
+
else
|
|
140
|
+
seen.add(full);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
walk(dir);
|
|
144
|
+
for (const [file, content] of snap) {
|
|
145
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
146
|
+
fs.writeFileSync(file, content);
|
|
147
|
+
}
|
|
148
|
+
for (const file of seen) {
|
|
149
|
+
if (!snap.has(file)) {
|
|
150
|
+
try {
|
|
151
|
+
fs.unlinkSync(file);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
/* best effort */
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=patcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../../src/ultraapp/patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UltraappRouter — tiny in-process reverse proxy that maps
|
|
3
|
+
* GET/POST/... /forge/<slug>/* → http://127.0.0.1:<backend-port>/*
|
|
4
|
+
*
|
|
5
|
+
* Default port: 19000. If 19000 is occupied, falls back to the next free
|
|
6
|
+
* port in [19000, 19000 + fallbackPorts]. The slug→port map is persisted
|
|
7
|
+
* synchronously to mapPath so a freshly-constructed router restarts with
|
|
8
|
+
* the same routes after process restart.
|
|
9
|
+
*
|
|
10
|
+
* Backends are detected lazily — proxy errors surface as 502.
|
|
11
|
+
*/
|
|
12
|
+
export interface UltraappRouterOptions {
|
|
13
|
+
port: number;
|
|
14
|
+
mapPath: string;
|
|
15
|
+
/** Try up to this many subsequent ports if `port` is taken; default 99. */
|
|
16
|
+
fallbackPorts?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class UltraappRouter {
|
|
19
|
+
private readonly map;
|
|
20
|
+
private readonly mapPath;
|
|
21
|
+
private readonly basePort;
|
|
22
|
+
private readonly fallbackPorts;
|
|
23
|
+
private server;
|
|
24
|
+
private actualPort;
|
|
25
|
+
constructor(opts: UltraappRouterOptions);
|
|
26
|
+
start(): Promise<number>;
|
|
27
|
+
stop(): Promise<void>;
|
|
28
|
+
port(): number;
|
|
29
|
+
register(slug: string, backendPort: number): void;
|
|
30
|
+
deregister(slug: string): void;
|
|
31
|
+
list(): Array<{
|
|
32
|
+
slug: string;
|
|
33
|
+
port: number;
|
|
34
|
+
}>;
|
|
35
|
+
private listenOn;
|
|
36
|
+
private handle;
|
|
37
|
+
private loadFromDisk;
|
|
38
|
+
private saveToDisk;
|
|
39
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UltraappRouter — tiny in-process reverse proxy that maps
|
|
3
|
+
* GET/POST/... /forge/<slug>/* → http://127.0.0.1:<backend-port>/*
|
|
4
|
+
*
|
|
5
|
+
* Default port: 19000. If 19000 is occupied, falls back to the next free
|
|
6
|
+
* port in [19000, 19000 + fallbackPorts]. The slug→port map is persisted
|
|
7
|
+
* synchronously to mapPath so a freshly-constructed router restarts with
|
|
8
|
+
* the same routes after process restart.
|
|
9
|
+
*
|
|
10
|
+
* Backends are detected lazily — proxy errors surface as 502.
|
|
11
|
+
*/
|
|
12
|
+
import * as http from 'node:http';
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
export class UltraappRouter {
|
|
16
|
+
map = new Map(); // slug → backend port
|
|
17
|
+
mapPath;
|
|
18
|
+
basePort;
|
|
19
|
+
fallbackPorts;
|
|
20
|
+
server = null;
|
|
21
|
+
actualPort = 0;
|
|
22
|
+
constructor(opts) {
|
|
23
|
+
this.mapPath = opts.mapPath;
|
|
24
|
+
this.basePort = opts.port;
|
|
25
|
+
this.fallbackPorts = opts.fallbackPorts ?? 99;
|
|
26
|
+
this.loadFromDisk();
|
|
27
|
+
}
|
|
28
|
+
async start() {
|
|
29
|
+
let lastErr = null;
|
|
30
|
+
for (let p = this.basePort; p <= this.basePort + this.fallbackPorts; p++) {
|
|
31
|
+
try {
|
|
32
|
+
await this.listenOn(p);
|
|
33
|
+
this.actualPort = p;
|
|
34
|
+
return p;
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
lastErr = e;
|
|
38
|
+
const code = e.code;
|
|
39
|
+
if (code !== 'EADDRINUSE' && code !== 'EACCES')
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`UltraappRouter: no free port in [${this.basePort}, ${this.basePort + this.fallbackPorts}]: ${lastErr?.message ?? 'unknown'}`);
|
|
44
|
+
}
|
|
45
|
+
async stop() {
|
|
46
|
+
if (!this.server)
|
|
47
|
+
return;
|
|
48
|
+
return new Promise((resolve) => this.server.close(() => resolve()));
|
|
49
|
+
}
|
|
50
|
+
port() {
|
|
51
|
+
return this.actualPort;
|
|
52
|
+
}
|
|
53
|
+
register(slug, backendPort) {
|
|
54
|
+
this.map.set(slug, backendPort);
|
|
55
|
+
this.saveToDisk();
|
|
56
|
+
}
|
|
57
|
+
deregister(slug) {
|
|
58
|
+
this.map.delete(slug);
|
|
59
|
+
this.saveToDisk();
|
|
60
|
+
}
|
|
61
|
+
list() {
|
|
62
|
+
return [...this.map.entries()].map(([slug, port]) => ({ slug, port }));
|
|
63
|
+
}
|
|
64
|
+
listenOn(port) {
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
const srv = http.createServer((req, res) => this.handle(req, res));
|
|
67
|
+
const onError = (err) => {
|
|
68
|
+
srv.removeListener('error', onError);
|
|
69
|
+
reject(err);
|
|
70
|
+
};
|
|
71
|
+
srv.on('error', onError);
|
|
72
|
+
srv.listen(port, '127.0.0.1', () => {
|
|
73
|
+
srv.removeListener('error', onError);
|
|
74
|
+
this.server = srv;
|
|
75
|
+
resolve();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
handle(req, res) {
|
|
80
|
+
const url = req.url ?? '/';
|
|
81
|
+
const m = /^\/forge\/([a-z0-9-]+)(\/.*)?$/.exec(url);
|
|
82
|
+
if (!m) {
|
|
83
|
+
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
84
|
+
res.end('not found');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const slug = m[1];
|
|
88
|
+
const backend = this.map.get(slug);
|
|
89
|
+
if (backend === undefined) {
|
|
90
|
+
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
91
|
+
res.end(`forge slug not registered: ${slug}`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Forward the FULL URL — including the /forge/<slug> prefix. Apps
|
|
95
|
+
// following the conventions mount at BASE_PATH=/forge/<slug>/ (e.g.
|
|
96
|
+
// Hono's `root.basePath('/forge/<slug>')` model), so the framework
|
|
97
|
+
// itself owns prefix-stripping. Stripping here would double-strip and
|
|
98
|
+
// 404 every request.
|
|
99
|
+
const proxy = http.request({
|
|
100
|
+
host: '127.0.0.1',
|
|
101
|
+
port: backend,
|
|
102
|
+
path: url,
|
|
103
|
+
method: req.method,
|
|
104
|
+
headers: { ...req.headers, 'x-forwarded-prefix': `/forge/${slug}` },
|
|
105
|
+
}, (br) => {
|
|
106
|
+
res.writeHead(br.statusCode ?? 502, br.headers);
|
|
107
|
+
br.pipe(res);
|
|
108
|
+
});
|
|
109
|
+
proxy.on('error', (e) => {
|
|
110
|
+
res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
111
|
+
res.end(`proxy error: ${e.message}`);
|
|
112
|
+
});
|
|
113
|
+
req.pipe(proxy);
|
|
114
|
+
}
|
|
115
|
+
loadFromDisk() {
|
|
116
|
+
try {
|
|
117
|
+
const raw = fs.readFileSync(this.mapPath, 'utf8');
|
|
118
|
+
const obj = JSON.parse(raw);
|
|
119
|
+
for (const [slug, port] of Object.entries(obj))
|
|
120
|
+
this.map.set(slug, port);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* no map yet */
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
saveToDisk() {
|
|
127
|
+
const obj = {};
|
|
128
|
+
for (const [slug, port] of this.map)
|
|
129
|
+
obj[slug] = port;
|
|
130
|
+
try {
|
|
131
|
+
fs.mkdirSync(path.dirname(this.mapPath), { recursive: true });
|
|
132
|
+
fs.writeFileSync(this.mapPath, JSON.stringify(obj, null, 2));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
/* best effort — non-persistent operation is still fine for current process */
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=router.js.map
|