poly-weaver 0.14.7 → 0.15.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 +24 -1
- package/dist/agents/implementors/adapter.d.ts +4 -0
- package/dist/agents/implementors/adapter.d.ts.map +1 -1
- package/dist/agents/implementors/adapter.js +4 -4
- package/dist/agents/implementors/adapter.js.map +1 -1
- package/dist/agents/implementors/dsl.d.ts +2 -0
- package/dist/agents/implementors/dsl.d.ts.map +1 -1
- package/dist/agents/implementors/dsl.js.map +1 -1
- package/dist/agents/implementors/handler.d.ts.map +1 -1
- package/dist/agents/implementors/handler.js +10 -0
- package/dist/agents/implementors/handler.js.map +1 -1
- package/dist/agents/implementors/prompts.d.ts +5 -4
- package/dist/agents/implementors/prompts.d.ts.map +1 -1
- package/dist/agents/implementors/prompts.js +44 -7
- package/dist/agents/implementors/prompts.js.map +1 -1
- package/dist/agents/implementors/types.d.ts +8 -4
- package/dist/agents/implementors/types.d.ts.map +1 -1
- package/dist/agents/interviewers/adapter.d.ts +2 -0
- package/dist/agents/interviewers/adapter.d.ts.map +1 -1
- package/dist/agents/interviewers/adapter.js +39 -6
- package/dist/agents/interviewers/adapter.js.map +1 -1
- package/dist/agents/interviewers/dsl.d.ts +1 -0
- package/dist/agents/interviewers/dsl.d.ts.map +1 -1
- package/dist/agents/interviewers/dsl.js.map +1 -1
- package/dist/agents/interviewers/handler.d.ts +2 -1
- package/dist/agents/interviewers/handler.d.ts.map +1 -1
- package/dist/agents/interviewers/handler.js +106 -9
- package/dist/agents/interviewers/handler.js.map +1 -1
- package/dist/agents/interviewers/index.js +1 -1
- package/dist/agents/interviewers/index.js.map +1 -1
- package/dist/agents/interviewers/prompts.d.ts.map +1 -1
- package/dist/agents/interviewers/prompts.js +150 -0
- package/dist/agents/interviewers/prompts.js.map +1 -1
- package/dist/agents/interviewers/types.d.ts +9 -1
- package/dist/agents/interviewers/types.d.ts.map +1 -1
- package/dist/agents/planners/adapter.d.ts +2 -0
- package/dist/agents/planners/adapter.d.ts.map +1 -1
- package/dist/agents/planners/adapter.js +3 -3
- package/dist/agents/planners/adapter.js.map +1 -1
- package/dist/agents/planners/dsl.d.ts +1 -0
- package/dist/agents/planners/dsl.d.ts.map +1 -1
- package/dist/agents/planners/dsl.js.map +1 -1
- package/dist/agents/planners/handler.d.ts.map +1 -1
- package/dist/agents/planners/handler.js +6 -1
- package/dist/agents/planners/handler.js.map +1 -1
- package/dist/agents/planners/prompts.d.ts +3 -3
- package/dist/agents/planners/prompts.d.ts.map +1 -1
- package/dist/agents/planners/prompts.js +76 -4
- package/dist/agents/planners/prompts.js.map +1 -1
- package/dist/agents/planners/types.d.ts +5 -3
- package/dist/agents/planners/types.d.ts.map +1 -1
- package/dist/agents/registry.d.ts +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +2 -2
- package/dist/agents/registry.js.map +1 -1
- package/dist/agents/reviewers/adapter.d.ts.map +1 -1
- package/dist/agents/reviewers/adapter.js +5 -1
- package/dist/agents/reviewers/adapter.js.map +1 -1
- package/dist/agents/reviewers/dsl.d.ts +4 -0
- package/dist/agents/reviewers/dsl.d.ts.map +1 -1
- package/dist/agents/reviewers/dsl.js.map +1 -1
- package/dist/agents/reviewers/handler.d.ts.map +1 -1
- package/dist/agents/reviewers/handler.js +15 -1
- package/dist/agents/reviewers/handler.js.map +1 -1
- package/dist/agents/reviewers/prompts.d.ts +7 -7
- package/dist/agents/reviewers/prompts.d.ts.map +1 -1
- package/dist/agents/reviewers/prompts.js +196 -19
- package/dist/agents/reviewers/prompts.js.map +1 -1
- package/dist/agents/reviewers/types.d.ts +10 -0
- package/dist/agents/reviewers/types.d.ts.map +1 -1
- package/dist/agents/reviewers/types.js.map +1 -1
- package/dist/agents/runner.d.ts +4 -2
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +1 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/simplifiers/adapter.d.ts.map +1 -1
- package/dist/agents/simplifiers/adapter.js +1 -0
- package/dist/agents/simplifiers/adapter.js.map +1 -1
- package/dist/agents/simplifiers/dsl.d.ts +1 -0
- package/dist/agents/simplifiers/dsl.d.ts.map +1 -1
- package/dist/agents/simplifiers/dsl.js +1 -0
- package/dist/agents/simplifiers/dsl.js.map +1 -1
- package/dist/agents/simplifiers/handler.d.ts.map +1 -1
- package/dist/agents/simplifiers/handler.js +2 -0
- package/dist/agents/simplifiers/handler.js.map +1 -1
- package/dist/agents/simplifiers/prompts.js +29 -2
- package/dist/agents/simplifiers/prompts.js.map +1 -1
- package/dist/agents/simplifiers/types.d.ts +2 -0
- package/dist/agents/simplifiers/types.d.ts.map +1 -1
- package/dist/agents/simplify-protection.d.ts +6 -0
- package/dist/agents/simplify-protection.d.ts.map +1 -0
- package/dist/agents/simplify-protection.js +12 -0
- package/dist/agents/simplify-protection.js.map +1 -0
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/dsl.d.ts +2 -0
- package/dist/dsl.d.ts.map +1 -1
- package/dist/dsl.js +2 -2
- package/dist/dsl.js.map +1 -1
- package/dist/flow/built-in/default-factory.d.ts.map +1 -1
- package/dist/flow/built-in/default-factory.js +55 -11
- package/dist/flow/built-in/default-factory.js.map +1 -1
- package/dist/flow/built-in/default.d.ts +1 -0
- package/dist/flow/built-in/default.d.ts.map +1 -1
- package/dist/flow/built-in/default.js +1 -0
- package/dist/flow/built-in/default.js.map +1 -1
- package/dist/flow/built-in/default.ts +2 -0
- package/dist/flow/built-in/simplify-factory.d.ts.map +1 -1
- package/dist/flow/built-in/simplify-factory.js +4 -0
- package/dist/flow/built-in/simplify-factory.js.map +1 -1
- package/dist/flow/custom/AUTHORING.md +8 -88
- package/dist/flow/dsl.d.ts +2 -0
- package/dist/flow/dsl.d.ts.map +1 -1
- package/dist/flow/dsl.js +2 -0
- package/dist/flow/dsl.js.map +1 -1
- package/dist/flow/params.d.ts +2 -1
- package/dist/flow/params.d.ts.map +1 -1
- package/dist/flow/params.js +8 -2
- package/dist/flow/params.js.map +1 -1
- package/dist/flow/types.d.ts +25 -0
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/flow/types.js +11 -0
- package/dist/flow/types.js.map +1 -1
- package/dist/managed-spec.d.ts +32 -0
- package/dist/managed-spec.d.ts.map +1 -0
- package/dist/managed-spec.js +258 -0
- package/dist/managed-spec.js.map +1 -0
- package/dist/offscreen/agent-viewer.d.ts +2 -1
- package/dist/offscreen/agent-viewer.d.ts.map +1 -1
- package/dist/offscreen/agent-viewer.js +63 -19
- package/dist/offscreen/agent-viewer.js.map +1 -1
- package/dist/offscreen/controller.d.ts +14 -3
- package/dist/offscreen/controller.d.ts.map +1 -1
- package/dist/offscreen/controller.js +82 -17
- package/dist/offscreen/controller.js.map +1 -1
- package/dist/offscreen/resolve.d.ts.map +1 -1
- package/dist/offscreen/resolve.js +14 -3
- package/dist/offscreen/resolve.js.map +1 -1
- package/dist/offscreen/split-inquiry.d.ts +10 -1
- package/dist/offscreen/split-inquiry.d.ts.map +1 -1
- package/dist/offscreen/split-inquiry.js +156 -12
- package/dist/offscreen/split-inquiry.js.map +1 -1
- package/dist/orchestrator.d.ts +5 -0
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +85 -5
- package/dist/orchestrator.js.map +1 -1
- package/dist/providers/types.d.ts +2 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/session/manifest.d.ts +9 -0
- package/dist/session/manifest.d.ts.map +1 -1
- package/dist/session/session-store.d.ts +2 -1
- package/dist/session/session-store.d.ts.map +1 -1
- package/dist/session/session-store.js +49 -3
- package/dist/session/session-store.js.map +1 -1
- package/dist/startup-tui.d.ts +1 -0
- package/dist/startup-tui.d.ts.map +1 -1
- package/dist/startup-tui.js +6 -2
- package/dist/startup-tui.js.map +1 -1
- package/dist/terminal/host.d.ts +1 -0
- package/dist/terminal/host.d.ts.map +1 -1
- package/dist/terminal/host.js +3 -0
- package/dist/terminal/host.js.map +1 -1
- package/dist/user/dsl.d.ts +1 -0
- package/dist/user/dsl.d.ts.map +1 -1
- package/dist/user/dsl.js +1 -0
- package/dist/user/dsl.js.map +1 -1
- package/dist/user/handler.d.ts.map +1 -1
- package/dist/user/handler.js +15 -0
- package/dist/user/handler.js.map +1 -1
- package/dist/user/host-curate-prompt.d.ts.map +1 -1
- package/dist/user/host-curate-prompt.js +2 -0
- package/dist/user/host-curate-prompt.js.map +1 -1
- package/dist/user/host-prompt.d.ts.map +1 -1
- package/dist/user/host-prompt.js +264 -13
- package/dist/user/host-prompt.js.map +1 -1
- package/dist/user/plan-pane.d.ts +1 -1
- package/dist/user/plan-pane.d.ts.map +1 -1
- package/dist/user/plan-pane.js +7 -1
- package/dist/user/plan-pane.js.map +1 -1
- package/dist/user/prompt.d.ts +9 -0
- package/dist/user/prompt.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { constants as fsConstants } from "node:fs";
|
|
2
|
+
import { copyFile, mkdir, readFile, realpath, rm, stat } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { posix as posixPath } from "node:path";
|
|
5
|
+
export const MANAGED_SPEC_DIR = ".poly-spec";
|
|
6
|
+
export const LEGACY_MANAGED_SPEC_DIR = "poly-spec";
|
|
7
|
+
export const MANAGED_ITERATIONS_DIR = "iterations";
|
|
8
|
+
export const MANAGED_PENDING_DIR = "pending";
|
|
9
|
+
export const MANAGED_APPLIED_DIR = "applied";
|
|
10
|
+
export const MANAGED_PENDING_ITERATION_PREFIX = `${MANAGED_SPEC_DIR}/${MANAGED_ITERATIONS_DIR}/${MANAGED_PENDING_DIR}/`;
|
|
11
|
+
export const MANAGED_APPLIED_ITERATION_PREFIX = `${MANAGED_SPEC_DIR}/${MANAGED_ITERATIONS_DIR}/${MANAGED_APPLIED_DIR}/`;
|
|
12
|
+
export const LEGACY_MANAGED_ITERATION_PREFIX = `${LEGACY_MANAGED_SPEC_DIR}/${MANAGED_ITERATIONS_DIR}/`;
|
|
13
|
+
export const MANAGED_ITERATION_PREFIX = MANAGED_PENDING_ITERATION_PREFIX;
|
|
14
|
+
export async function hasManagedSpecDirectory(workdir) {
|
|
15
|
+
const specDir = resolve(workdir, MANAGED_SPEC_DIR);
|
|
16
|
+
try {
|
|
17
|
+
const specStat = await stat(specDir);
|
|
18
|
+
return specStat.isDirectory();
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
const code = err.code;
|
|
22
|
+
if (code === "ENOENT" || code === "ENOTDIR")
|
|
23
|
+
return false;
|
|
24
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
25
|
+
throw new Error(`Failed to inspect managed spec directory ${specDir}: ${message}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function validateManagedIterationNotification(notificationFile, workdir) {
|
|
29
|
+
const raw = await readNonEmptyFile(notificationFile, "managed Iteration Spec notification");
|
|
30
|
+
let parsed;
|
|
31
|
+
try {
|
|
32
|
+
parsed = JSON.parse(raw);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw new Error(`Managed interviewer notification must be JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
36
|
+
}
|
|
37
|
+
const notification = parseManagedIterationNotification(parsed);
|
|
38
|
+
const resolved = await resolveManagedIterationPath(workdir, notification.path, {
|
|
39
|
+
allowLegacy: false,
|
|
40
|
+
requirePending: true,
|
|
41
|
+
});
|
|
42
|
+
const text = await readNonEmptyFile(resolved.absolutePath, `managed Iteration Spec ${notification.path}`);
|
|
43
|
+
return { notification, absolutePath: resolved.absolutePath, text };
|
|
44
|
+
}
|
|
45
|
+
export async function readManagedIterationFromManifest(workdir, repoRelativePath) {
|
|
46
|
+
const resolved = await resolveManagedIterationPath(workdir, repoRelativePath, {
|
|
47
|
+
allowLegacy: true,
|
|
48
|
+
requirePending: true,
|
|
49
|
+
});
|
|
50
|
+
const text = await readNonEmptyFile(resolved.absolutePath, `managed Iteration Spec ${repoRelativePath}`);
|
|
51
|
+
return {
|
|
52
|
+
notification: { path: repoRelativePath, disposition: "continued" },
|
|
53
|
+
absolutePath: resolved.absolutePath,
|
|
54
|
+
text,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export async function applyManagedIteration(workdir, repoRelativePath) {
|
|
58
|
+
const source = await resolveManagedIterationPath(workdir, repoRelativePath, {
|
|
59
|
+
allowLegacy: true,
|
|
60
|
+
requirePending: true,
|
|
61
|
+
});
|
|
62
|
+
const text = await readNonEmptyFile(source.absolutePath, `managed Iteration Spec ${repoRelativePath}`);
|
|
63
|
+
const appliedRepoRelativePath = [
|
|
64
|
+
MANAGED_SPEC_DIR,
|
|
65
|
+
MANAGED_ITERATIONS_DIR,
|
|
66
|
+
MANAGED_APPLIED_DIR,
|
|
67
|
+
...source.appliedSuffix.split("/"),
|
|
68
|
+
].join("/");
|
|
69
|
+
const destination = await resolveManagedIterationOutputPath(workdir, appliedRepoRelativePath);
|
|
70
|
+
await mkdir(resolve(workdir, MANAGED_SPEC_DIR, MANAGED_ITERATIONS_DIR, MANAGED_APPLIED_DIR), {
|
|
71
|
+
recursive: true,
|
|
72
|
+
});
|
|
73
|
+
await mkdir(destination.parentAbsolutePath, { recursive: true });
|
|
74
|
+
await validateManagedIterationOutputParent(workdir, destination.parentAbsolutePath);
|
|
75
|
+
await copyFile(source.absolutePath, destination.absolutePath, fsConstants.COPYFILE_EXCL);
|
|
76
|
+
await rm(source.absolutePath);
|
|
77
|
+
return {
|
|
78
|
+
repoRelativePath: appliedRepoRelativePath,
|
|
79
|
+
absolutePath: destination.absolutePath,
|
|
80
|
+
text,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export async function readNonEmptyFile(file, label) {
|
|
84
|
+
const text = await readFile(file, "utf8");
|
|
85
|
+
if (text.trim().length === 0) {
|
|
86
|
+
throw new Error(`${label} is empty`);
|
|
87
|
+
}
|
|
88
|
+
return text;
|
|
89
|
+
}
|
|
90
|
+
export function managedImplementationReviewSummary(artifacts) {
|
|
91
|
+
for (const [, artifact] of artifacts.entries()) {
|
|
92
|
+
const summary = artifact.meta?.managedSpecImplementationReviewSummary;
|
|
93
|
+
if (typeof summary === "string" && summary.trim().length > 0) {
|
|
94
|
+
return summary;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
function parseManagedIterationNotification(value) {
|
|
100
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
101
|
+
throw new Error("Managed interviewer notification must be a JSON object");
|
|
102
|
+
}
|
|
103
|
+
const record = value;
|
|
104
|
+
const keys = Object.keys(record).sort();
|
|
105
|
+
if (keys.length !== 2 || keys[0] !== "disposition" || keys[1] !== "path") {
|
|
106
|
+
throw new Error('Managed interviewer notification must have exactly "path" and "disposition"');
|
|
107
|
+
}
|
|
108
|
+
if (typeof record.path !== "string") {
|
|
109
|
+
throw new Error('Managed interviewer notification field "path" must be a string');
|
|
110
|
+
}
|
|
111
|
+
if (record.disposition !== "created" && record.disposition !== "continued") {
|
|
112
|
+
throw new Error('Managed interviewer notification field "disposition" must be "created" or "continued"');
|
|
113
|
+
}
|
|
114
|
+
validatePortableIterationPath(record.path, {
|
|
115
|
+
allowLegacy: false,
|
|
116
|
+
requirePending: true,
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
path: record.path,
|
|
120
|
+
disposition: record.disposition,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function validatePortableIterationPath(repoRelativePath, opts) {
|
|
124
|
+
if (repoRelativePath.includes("\\") || repoRelativePath.includes(":")) {
|
|
125
|
+
throw new Error("Managed Iteration Spec path must use repository-relative forward slashes");
|
|
126
|
+
}
|
|
127
|
+
if (posixPath.isAbsolute(repoRelativePath) || isAbsolute(repoRelativePath)) {
|
|
128
|
+
throw new Error("Managed Iteration Spec path must be repository-relative");
|
|
129
|
+
}
|
|
130
|
+
const normalized = posixPath.normalize(repoRelativePath);
|
|
131
|
+
if (normalized !== repoRelativePath || repoRelativePath.includes("//")) {
|
|
132
|
+
throw new Error("Managed Iteration Spec path must not contain empty or parent segments");
|
|
133
|
+
}
|
|
134
|
+
const kind = classifyManagedIterationPath(repoRelativePath, opts.allowLegacy);
|
|
135
|
+
if (kind === "applied" && opts.requirePending) {
|
|
136
|
+
throw new Error(`Managed Iteration Spec path must be under ${MANAGED_PENDING_ITERATION_PREFIX}; ` +
|
|
137
|
+
"applied iterations are immutable history");
|
|
138
|
+
}
|
|
139
|
+
const prefix = prefixForKind(kind);
|
|
140
|
+
if (!repoRelativePath.endsWith(".md") || repoRelativePath.length === prefix.length) {
|
|
141
|
+
throw new Error(`Managed Iteration Spec path must match ${prefix}<name>.md`);
|
|
142
|
+
}
|
|
143
|
+
return kind;
|
|
144
|
+
}
|
|
145
|
+
async function resolveManagedIterationPath(workdir, repoRelativePath, opts) {
|
|
146
|
+
const kind = validatePortableIterationPath(repoRelativePath, opts);
|
|
147
|
+
const absolutePath = resolve(workdir, ...repoRelativePath.split("/"));
|
|
148
|
+
const containmentRoot = containmentRootForKind(workdir, kind);
|
|
149
|
+
const [realFile, realDir, realWorkdir] = await Promise.all([
|
|
150
|
+
realpath(absolutePath),
|
|
151
|
+
realpath(containmentRoot),
|
|
152
|
+
realpath(workdir),
|
|
153
|
+
]);
|
|
154
|
+
const fileStat = await stat(realFile);
|
|
155
|
+
if (!fileStat.isFile()) {
|
|
156
|
+
throw new Error(`Managed Iteration Spec path is not a file: ${repoRelativePath}`);
|
|
157
|
+
}
|
|
158
|
+
const escapeMessage = `Managed Iteration Spec path escapes ${prefixForKind(kind)}`;
|
|
159
|
+
assertRealPathContained(realDir, realWorkdir, escapeMessage);
|
|
160
|
+
assertRealPathContained(realFile, realDir, escapeMessage);
|
|
161
|
+
return {
|
|
162
|
+
absolutePath: realFile,
|
|
163
|
+
appliedSuffix: appliedSuffixForPath(repoRelativePath, kind),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function resolveManagedIterationOutputPath(workdir, repoRelativePath) {
|
|
167
|
+
const kind = validatePortableIterationPath(repoRelativePath, {
|
|
168
|
+
allowLegacy: false,
|
|
169
|
+
requirePending: false,
|
|
170
|
+
});
|
|
171
|
+
if (kind !== "applied") {
|
|
172
|
+
throw new Error(`Applied managed Iteration Spec path must be under ${MANAGED_APPLIED_ITERATION_PREFIX}`);
|
|
173
|
+
}
|
|
174
|
+
const absolutePath = resolve(workdir, ...repoRelativePath.split("/"));
|
|
175
|
+
const root = resolve(workdir, MANAGED_SPEC_DIR, MANAGED_ITERATIONS_DIR, MANAGED_APPLIED_DIR);
|
|
176
|
+
const rel = relative(root, absolutePath);
|
|
177
|
+
if (!rel || rel.startsWith("..") || isAbsolute(rel)) {
|
|
178
|
+
throw new Error(`Managed Iteration Spec path escapes ${MANAGED_APPLIED_ITERATION_PREFIX}`);
|
|
179
|
+
}
|
|
180
|
+
const parent = posixPath.dirname(repoRelativePath)
|
|
181
|
+
.split("/")
|
|
182
|
+
.reduce((path, segment) => resolve(path, segment), workdir);
|
|
183
|
+
return { absolutePath, parentAbsolutePath: parent };
|
|
184
|
+
}
|
|
185
|
+
async function validateManagedIterationOutputParent(workdir, parentAbsolutePath) {
|
|
186
|
+
const appliedRoot = resolve(workdir, MANAGED_SPEC_DIR, MANAGED_ITERATIONS_DIR, MANAGED_APPLIED_DIR);
|
|
187
|
+
const [realParent, realAppliedRoot, realWorkdir] = await Promise.all([
|
|
188
|
+
realpath(parentAbsolutePath),
|
|
189
|
+
realpath(appliedRoot),
|
|
190
|
+
realpath(workdir),
|
|
191
|
+
]);
|
|
192
|
+
const escapeMessage = `Managed Iteration Spec path escapes ${MANAGED_APPLIED_ITERATION_PREFIX}`;
|
|
193
|
+
assertRealPathContained(realAppliedRoot, realWorkdir, escapeMessage);
|
|
194
|
+
assertRealPathContained(realParent, realAppliedRoot, escapeMessage);
|
|
195
|
+
}
|
|
196
|
+
function assertRealPathContained(path, root, message) {
|
|
197
|
+
const rel = relative(root, path);
|
|
198
|
+
if (rel.startsWith("..") || isAbsolute(rel)) {
|
|
199
|
+
throw new Error(message);
|
|
200
|
+
}
|
|
201
|
+
if (rel === "")
|
|
202
|
+
return;
|
|
203
|
+
const rootWithSep = root.endsWith(sep) ? root : `${root}${sep}`;
|
|
204
|
+
const comparablePath = process.platform === "win32" ? path.toLowerCase() : path;
|
|
205
|
+
const comparableRoot = process.platform === "win32"
|
|
206
|
+
? rootWithSep.toLowerCase()
|
|
207
|
+
: rootWithSep;
|
|
208
|
+
if (!comparablePath.startsWith(comparableRoot)) {
|
|
209
|
+
throw new Error(message);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function classifyManagedIterationPath(repoRelativePath, allowLegacy) {
|
|
213
|
+
if (repoRelativePath.startsWith(MANAGED_PENDING_ITERATION_PREFIX))
|
|
214
|
+
return "pending";
|
|
215
|
+
if (repoRelativePath.startsWith(MANAGED_APPLIED_ITERATION_PREFIX))
|
|
216
|
+
return "applied";
|
|
217
|
+
if (allowLegacy && repoRelativePath.startsWith(LEGACY_MANAGED_ITERATION_PREFIX)) {
|
|
218
|
+
const suffix = repoRelativePath.slice(LEGACY_MANAGED_ITERATION_PREFIX.length);
|
|
219
|
+
if (suffix.startsWith(`${MANAGED_APPLIED_DIR}/`)) {
|
|
220
|
+
throw new Error("Legacy applied managed Iteration Specs are immutable history and cannot be continued");
|
|
221
|
+
}
|
|
222
|
+
return "legacy-pending";
|
|
223
|
+
}
|
|
224
|
+
throw new Error(`Managed Iteration Spec path must match ${MANAGED_PENDING_ITERATION_PREFIX}<name>.md`);
|
|
225
|
+
}
|
|
226
|
+
function prefixForKind(kind) {
|
|
227
|
+
switch (kind) {
|
|
228
|
+
case "pending":
|
|
229
|
+
return MANAGED_PENDING_ITERATION_PREFIX;
|
|
230
|
+
case "applied":
|
|
231
|
+
return MANAGED_APPLIED_ITERATION_PREFIX;
|
|
232
|
+
case "legacy-pending":
|
|
233
|
+
return LEGACY_MANAGED_ITERATION_PREFIX;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function containmentRootForKind(workdir, kind) {
|
|
237
|
+
switch (kind) {
|
|
238
|
+
case "pending":
|
|
239
|
+
return resolve(workdir, MANAGED_SPEC_DIR, MANAGED_ITERATIONS_DIR, MANAGED_PENDING_DIR);
|
|
240
|
+
case "applied":
|
|
241
|
+
return resolve(workdir, MANAGED_SPEC_DIR, MANAGED_ITERATIONS_DIR, MANAGED_APPLIED_DIR);
|
|
242
|
+
case "legacy-pending":
|
|
243
|
+
return resolve(workdir, LEGACY_MANAGED_SPEC_DIR, MANAGED_ITERATIONS_DIR);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function appliedSuffixForPath(repoRelativePath, kind) {
|
|
247
|
+
if (kind === "pending") {
|
|
248
|
+
return repoRelativePath.slice(MANAGED_PENDING_ITERATION_PREFIX.length);
|
|
249
|
+
}
|
|
250
|
+
if (kind === "legacy-pending") {
|
|
251
|
+
const legacySuffix = repoRelativePath.slice(LEGACY_MANAGED_ITERATION_PREFIX.length);
|
|
252
|
+
return legacySuffix.startsWith(`${MANAGED_PENDING_DIR}/`)
|
|
253
|
+
? legacySuffix.slice(`${MANAGED_PENDING_DIR}/`.length)
|
|
254
|
+
: legacySuffix;
|
|
255
|
+
}
|
|
256
|
+
return repoRelativePath.slice(MANAGED_APPLIED_ITERATION_PREFIX.length);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=managed-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-spec.js","sourceRoot":"","sources":["../src/managed-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,10 +19,11 @@ export declare class AgentArtifactViewer {
|
|
|
19
19
|
private cycle;
|
|
20
20
|
private select;
|
|
21
21
|
private availableKinds;
|
|
22
|
-
private
|
|
22
|
+
private nextAction;
|
|
23
23
|
private refreshHint;
|
|
24
24
|
private hasSpecArtifact;
|
|
25
25
|
private specText;
|
|
26
|
+
private artifactText;
|
|
26
27
|
}
|
|
27
28
|
export {};
|
|
28
29
|
//# sourceMappingURL=agent-viewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-viewer.d.ts","sourceRoot":"","sources":["../../src/offscreen/agent-viewer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAiB,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-viewer.d.ts","sourceRoot":"","sources":["../../src/offscreen/agent-viewer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAiB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAA0B,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAsBhF,KAAK,UAAU,GAAG,IAAI,CACpB,YAAY,EACV,gBAAgB,GAChB,iBAAiB,GACjB,2BAA2B,GAC3B,kBAAkB,CACrB,CAAC;AAEF,qBAAa,mBAAmB;IAM5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAP7B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,aAAa,CAAS;gBAGX,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,OAAO;IAGtC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IAwBnD,QAAQ,IAAI,IAAI;IAShB,KAAK,IAAI,IAAI;IAMb,aAAa,IAAI,IAAI;IAMrB,eAAe,IAAI,IAAI;IAMvB,sBAAsB,IAAI,IAAI;IAI9B,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,MAAM;IAgEd,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,YAAY;CAWrB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isArtifactViewerKey } from "../dump/hotkey.js";
|
|
2
2
|
import { SPEC, TASK } from "../flow/types.js";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
3
4
|
import { ArtifactPaneController } from "./artifact-pane.js";
|
|
4
5
|
import { buildPlanPane, buildSimplifyPlanPane } from "../user/plan-pane.js";
|
|
5
6
|
import { buildIssuesArtifactPane } from "../user/issues-pane.js";
|
|
@@ -20,8 +21,11 @@ export class AgentArtifactViewer {
|
|
|
20
21
|
this.phase = {
|
|
21
22
|
ctx,
|
|
22
23
|
interviewer: step.role === "interviewer",
|
|
24
|
+
managedSpec: step.managedSpec === true,
|
|
23
25
|
planKey: step.writes.plan ?? step.reads.plan,
|
|
24
26
|
issuesKey: step.writes.verdict ?? step.reads.verdict,
|
|
27
|
+
iterationKey: step.writes.iteration ?? step.reads.iteration ?? step.reads.spec,
|
|
28
|
+
explanationKey: step.writes.spec ?? step.reads.explanation,
|
|
25
29
|
};
|
|
26
30
|
this.selected = undefined;
|
|
27
31
|
this.childAttached = this.host.hasAttachedChild();
|
|
@@ -64,16 +68,16 @@ export class AgentArtifactViewer {
|
|
|
64
68
|
}
|
|
65
69
|
cycle() {
|
|
66
70
|
const available = this.availableKinds();
|
|
67
|
-
|
|
71
|
+
const action = this.nextAction(available);
|
|
72
|
+
if (!action) {
|
|
68
73
|
this.statusBar.setArtifactHint(undefined);
|
|
69
74
|
return;
|
|
70
75
|
}
|
|
71
|
-
|
|
72
|
-
if (next === "closed") {
|
|
76
|
+
if (action.verb === "Hide") {
|
|
73
77
|
this.close();
|
|
74
78
|
return;
|
|
75
79
|
}
|
|
76
|
-
this.select(
|
|
80
|
+
this.select(action.kind);
|
|
77
81
|
}
|
|
78
82
|
select(kind) {
|
|
79
83
|
const phase = this.phase;
|
|
@@ -108,6 +112,14 @@ export class AgentArtifactViewer {
|
|
|
108
112
|
const snapshot = this.specText(phase.ctx.artifacts) ?? "";
|
|
109
113
|
pane = new ArtifactPaneController((width) => buildPlanPane(snapshot, "first", width, "spec").lines);
|
|
110
114
|
}
|
|
115
|
+
else if (kind === "iteration" && phase.iterationKey) {
|
|
116
|
+
const snapshot = this.artifactText(phase.ctx.artifacts, phase.iterationKey);
|
|
117
|
+
pane = new ArtifactPaneController((width) => buildPlanPane(snapshot, "first", width, "iteration").lines);
|
|
118
|
+
}
|
|
119
|
+
else if (kind === "explanation" && phase.explanationKey) {
|
|
120
|
+
const snapshot = this.artifactText(phase.ctx.artifacts, phase.explanationKey);
|
|
121
|
+
pane = new ArtifactPaneController((width) => buildPlanPane(snapshot, "first", width, "explanation").lines);
|
|
122
|
+
}
|
|
111
123
|
else if (kind === "task") {
|
|
112
124
|
const snapshot = phase.ctx.artifacts.getText(TASK) ?? "";
|
|
113
125
|
pane = new ArtifactPaneController((width) => buildPlanPane(snapshot, "first", width, "task").lines);
|
|
@@ -124,6 +136,18 @@ export class AgentArtifactViewer {
|
|
|
124
136
|
const phase = this.phase;
|
|
125
137
|
if (!phase || !this.childAttached)
|
|
126
138
|
return [];
|
|
139
|
+
if (phase.managedSpec && phase.interviewer) {
|
|
140
|
+
const result = [];
|
|
141
|
+
if (phase.ctx.artifacts.has(TASK))
|
|
142
|
+
result.push("task");
|
|
143
|
+
if (phase.explanationKey && phase.ctx.artifacts.has(phase.explanationKey)) {
|
|
144
|
+
result.push("explanation");
|
|
145
|
+
}
|
|
146
|
+
if (phase.iterationKey && phase.ctx.artifacts.has(phase.iterationKey)) {
|
|
147
|
+
result.push("iteration");
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
127
151
|
if (phase.interviewer) {
|
|
128
152
|
return phase.ctx.artifacts.has(TASK) ? ["task"] : [];
|
|
129
153
|
}
|
|
@@ -136,33 +160,35 @@ export class AgentArtifactViewer {
|
|
|
136
160
|
if (isUnapprovedIssuesVerdict(verdict))
|
|
137
161
|
available.push("issues");
|
|
138
162
|
}
|
|
139
|
-
if (
|
|
163
|
+
if (phase.managedSpec) {
|
|
164
|
+
if (phase.iterationKey && phase.ctx.artifacts.has(phase.iterationKey)) {
|
|
165
|
+
available.push("iteration");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else if (this.hasSpecArtifact(phase.ctx.artifacts)) {
|
|
140
169
|
available.push("spec");
|
|
141
170
|
}
|
|
142
171
|
return available;
|
|
143
172
|
}
|
|
144
|
-
|
|
173
|
+
nextAction(available) {
|
|
174
|
+
if (available.length === 0)
|
|
175
|
+
return undefined;
|
|
145
176
|
if (!this.selected)
|
|
146
|
-
return available[0];
|
|
177
|
+
return { verb: "Show", kind: available[0] };
|
|
147
178
|
const current = available.indexOf(this.selected);
|
|
148
179
|
if (current < 0)
|
|
149
|
-
return available[0];
|
|
180
|
+
return { verb: "Show", kind: available[0] };
|
|
150
181
|
if (current === available.length - 1)
|
|
151
|
-
return "
|
|
152
|
-
return available[current + 1];
|
|
182
|
+
return { verb: "Hide", kind: this.selected };
|
|
183
|
+
return { verb: "Show", kind: available[current + 1] };
|
|
153
184
|
}
|
|
154
185
|
refreshHint() {
|
|
155
|
-
const
|
|
156
|
-
if (
|
|
186
|
+
const action = this.nextAction(this.availableKinds());
|
|
187
|
+
if (!action) {
|
|
157
188
|
this.statusBar.setArtifactHint(undefined);
|
|
158
189
|
return;
|
|
159
190
|
}
|
|
160
|
-
|
|
161
|
-
if (next === "closed") {
|
|
162
|
-
this.statusBar.setArtifactHint(this.selected ? labelForKind("Hide", this.selected) : undefined);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
this.statusBar.setArtifactHint(labelForKind("Show", next));
|
|
191
|
+
this.statusBar.setArtifactHint(labelForKind(action.verb, action.kind));
|
|
166
192
|
}
|
|
167
193
|
hasSpecArtifact(artifacts) {
|
|
168
194
|
return artifacts.has(SPEC) || (this.preCleared && artifacts.has(TASK));
|
|
@@ -174,6 +200,18 @@ export class AgentArtifactViewer {
|
|
|
174
200
|
return artifacts.getText(TASK) ?? "";
|
|
175
201
|
return undefined;
|
|
176
202
|
}
|
|
203
|
+
artifactText(artifacts, key) {
|
|
204
|
+
const artifact = artifacts.get(key);
|
|
205
|
+
if (artifact?.file) {
|
|
206
|
+
try {
|
|
207
|
+
return readFileSync(artifact.file, "utf-8");
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return artifact.text ?? "";
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return artifact?.text ?? "";
|
|
214
|
+
}
|
|
177
215
|
}
|
|
178
216
|
function isUnapprovedIssuesVerdict(verdict) {
|
|
179
217
|
if (typeof verdict !== "object" || verdict === null)
|
|
@@ -191,6 +229,12 @@ function isReviewIssue(issue) {
|
|
|
191
229
|
typeof issue.description === "string");
|
|
192
230
|
}
|
|
193
231
|
function labelForKind(verb, kind) {
|
|
194
|
-
|
|
232
|
+
if (kind === "task")
|
|
233
|
+
return `${verb} Task`;
|
|
234
|
+
if (kind === "iteration")
|
|
235
|
+
return `${verb} Iteration Spec`;
|
|
236
|
+
if (kind === "explanation")
|
|
237
|
+
return `${verb} Iteration Rationale`;
|
|
238
|
+
return `${verb} ${kind}`;
|
|
195
239
|
}
|
|
196
240
|
//# sourceMappingURL=agent-viewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-viewer.js","sourceRoot":"","sources":["../../src/offscreen/agent-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-viewer.js","sourceRoot":"","sources":["../../src/offscreen/agent-viewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,17 @@ import type { HostParentUiMode, TerminalHost } from "../terminal/host.js";
|
|
|
2
2
|
import type { OffscreenBinding, OffscreenSlot } from "./fork-launch.js";
|
|
3
3
|
import type { ArtifactPaneRenderer } from "./panes.js";
|
|
4
4
|
import { type SplitPaneSide } from "../user/split-surface.js";
|
|
5
|
-
export interface
|
|
6
|
-
|
|
5
|
+
export interface OffscreenCompanionArtifactConfig {
|
|
6
|
+
displayName: string;
|
|
7
7
|
renderArtifact: ArtifactPaneRenderer;
|
|
8
8
|
styleVersion?: () => unknown;
|
|
9
9
|
focusRow?: (width: number) => number | undefined;
|
|
10
10
|
}
|
|
11
|
+
export interface OffscreenArtifactPaneConfig extends OffscreenCompanionArtifactConfig {
|
|
12
|
+
inquirySide: SplitPaneSide;
|
|
13
|
+
collapseWhenNarrow?: boolean;
|
|
14
|
+
alternateArtifacts?: OffscreenCompanionArtifactConfig[];
|
|
15
|
+
}
|
|
11
16
|
export interface OffscreenInquiryConfig {
|
|
12
17
|
composeIssueQuestion(binding: OffscreenBinding): string | undefined;
|
|
13
18
|
turnPollMs?: number;
|
|
@@ -38,11 +43,12 @@ export declare class OffscreenController {
|
|
|
38
43
|
private readonly pendingTurnAttempts;
|
|
39
44
|
private readonly forkSubmitFloorReads;
|
|
40
45
|
private readonly forkLocateWarned;
|
|
46
|
+
private readonly activeArtifactIndexes;
|
|
41
47
|
private readonly unregister;
|
|
42
48
|
private split;
|
|
43
49
|
private shown;
|
|
44
50
|
private disposed;
|
|
45
|
-
constructor(host: Pick<TerminalHost, "getLayout" | "scheduleRender" | "scheduleParentUiRender" | "forwardOscClipboard" | "output" | "setActiveChildStatus" | "setMouseModeSource" | "clearMouseModeSource">, workdir: string, slots: OffscreenSlot[], artifactConfigs?: Partial<Record<OffscreenBinding, OffscreenArtifactPaneConfig>>, inquiry?: OffscreenInquiryConfig | undefined);
|
|
51
|
+
constructor(host: Pick<TerminalHost, "getLayout" | "scheduleRender" | "scheduleParentUiRender" | "forwardOscClipboard" | "output" | "setActiveChildStatus" | "setArtifactHint" | "setMouseModeSource" | "clearMouseModeSource">, workdir: string, slots: OffscreenSlot[], artifactConfigs?: Partial<Record<OffscreenBinding, OffscreenArtifactPaneConfig>>, inquiry?: OffscreenInquiryConfig | undefined);
|
|
46
52
|
isIssueInquiryReady(binding: OffscreenBinding): boolean;
|
|
47
53
|
private selectionDelegate;
|
|
48
54
|
wrap(base: HostParentUiMode): HostParentUiMode;
|
|
@@ -55,6 +61,10 @@ export declare class OffscreenController {
|
|
|
55
61
|
private hideFork;
|
|
56
62
|
private clearSplitCoordinator;
|
|
57
63
|
private activeCoordinator;
|
|
64
|
+
private activeArtifactConfig;
|
|
65
|
+
private companionArtifacts;
|
|
66
|
+
private nextCompanionArtifactHint;
|
|
67
|
+
private cycleCompanionArtifact;
|
|
58
68
|
private configurePresentation;
|
|
59
69
|
private focusArtifactForCurrentIssue;
|
|
60
70
|
private show;
|
|
@@ -76,6 +86,7 @@ export declare class OffscreenController {
|
|
|
76
86
|
private warnForkSessionUnavailable;
|
|
77
87
|
private abortIssueSend;
|
|
78
88
|
private updateStatusState;
|
|
89
|
+
private updateArtifactHint;
|
|
79
90
|
private updateVisibleMouseModes;
|
|
80
91
|
private updateForkState;
|
|
81
92
|
private visibleMouseModes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/offscreen/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/offscreen/controller.ts"],"names":[],"mappings":"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"}
|