ghostrail 0.7.2 → 0.7.5
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/agent/claude-code.d.ts.map +1 -1
- package/dist/agent/claude-code.js +18 -3
- package/dist/agent/claude-code.js.map +1 -1
- package/dist/agent/failure.d.ts +26 -0
- package/dist/agent/failure.d.ts.map +1 -1
- package/dist/agent/failure.js +26 -1
- package/dist/agent/failure.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/prompt.d.ts +10 -2
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +17 -3
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/result.d.ts +1 -1
- package/dist/agent/result.d.ts.map +1 -1
- package/dist/agent/result.js +12 -3
- package/dist/agent/result.js.map +1 -1
- package/dist/backend/container.d.ts.map +1 -1
- package/dist/backend/container.js +65 -1
- package/dist/backend/container.js.map +1 -1
- package/dist/backend/docker.d.ts +15 -0
- package/dist/backend/docker.d.ts.map +1 -1
- package/dist/backend/docker.js +15 -0
- package/dist/backend/docker.js.map +1 -1
- package/dist/claude-profile/classify.d.ts +6 -1
- package/dist/claude-profile/classify.d.ts.map +1 -1
- package/dist/claude-profile/classify.js +95 -22
- package/dist/claude-profile/classify.js.map +1 -1
- package/dist/loop/engine.d.ts +1 -1
- package/dist/loop/engine.js +29 -4
- package/dist/loop/engine.js.map +1 -1
- package/dist/loop/ports.d.ts +14 -0
- package/dist/loop/ports.d.ts.map +1 -1
- package/dist/publish/gh.d.ts +33 -0
- package/dist/publish/gh.d.ts.map +1 -1
- package/dist/publish/gh.js +61 -0
- package/dist/publish/gh.js.map +1 -1
- package/dist/publish/githost.d.ts +26 -4
- package/dist/publish/githost.d.ts.map +1 -1
- package/dist/publish/githost.js +33 -5
- package/dist/publish/githost.js.map +1 -1
- package/dist/publish/github-publisher.d.ts +23 -0
- package/dist/publish/github-publisher.d.ts.map +1 -1
- package/dist/publish/github-publisher.js +43 -3
- package/dist/publish/github-publisher.js.map +1 -1
- package/dist/respond/respond.d.ts.map +1 -1
- package/dist/respond/respond.js +17 -3
- package/dist/respond/respond.js.map +1 -1
- package/dist/source/linear.d.ts +6 -1
- package/dist/source/linear.d.ts.map +1 -1
- package/dist/source/linear.js +25 -6
- package/dist/source/linear.js.map +1 -1
- package/docker/factory.Dockerfile +15 -0
- package/package.json +1 -1
- package/templates/code-local/prompts/resolve-issue.md +5 -1
- package/templates/code-local/prompts/respond.md +1 -1
- package/templates/code-local/prompts/triage.md +4 -0
- package/templates/content-loop/prompts/draft.md +5 -1
- package/templates/content-loop/prompts/respond.md +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAK1E,+EAA+E;AAC/E,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAC/C,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAwBpE;AAYD;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,KAAK;IAO/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IANxC;;;;;OAKG;gBAC0B,UAAU,CAAC,EAAE,MAAM,YAAA;IAE1C,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAK1E,+EAA+E;AAC/E,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAC/C,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAwBpE;AAYD;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,KAAK;IAO/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IANxC;;;;;OAKG;gBAC0B,UAAU,CAAC,EAAE,MAAM,YAAA;IAE1C,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;CA6DxD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import { describeAgentFailure } from "./failure.js";
|
|
2
|
+
import { describeAgentFailure, describeSilentRun, spokenReason } from "./failure.js";
|
|
3
3
|
import { renderPrompt } from "./prompt.js";
|
|
4
4
|
import { parseAgentResult } from "./result.js";
|
|
5
5
|
/** Path, relative to the workspace root, where the agent writes its result. */
|
|
@@ -91,7 +91,18 @@ export class ClaudeCodeAgent {
|
|
|
91
91
|
}
|
|
92
92
|
const raw = await readFile(backend, workspace, RESULT_PATH);
|
|
93
93
|
if (raw !== undefined && raw.trim().length > 0) {
|
|
94
|
-
|
|
94
|
+
const outcome = parseAgentResult(raw);
|
|
95
|
+
// The scaffolded prompts document a noop as `{"status":"noop"}` and say
|
|
96
|
+
// nothing about a reason, so a well-behaved agent writes one without any.
|
|
97
|
+
// Its closing statement is still in the envelope, and a repo that was
|
|
98
|
+
// scaffolded before `reason` existed keeps its old prompt forever, so the
|
|
99
|
+
// recovery has to work here and not only when the document is missing.
|
|
100
|
+
if (outcome.status === "noop" && outcome.reason === undefined) {
|
|
101
|
+
const spoken = spokenReason(run.stdout);
|
|
102
|
+
if (spoken !== undefined)
|
|
103
|
+
return { status: "noop", reason: spoken };
|
|
104
|
+
}
|
|
105
|
+
return outcome;
|
|
95
106
|
}
|
|
96
107
|
if (run.exitCode !== 0) {
|
|
97
108
|
return {
|
|
@@ -99,7 +110,11 @@ export class ClaudeCodeAgent {
|
|
|
99
110
|
error: describeAgentFailure(run.exitCode, run.stdout, run.stderr),
|
|
100
111
|
};
|
|
101
112
|
}
|
|
102
|
-
|
|
113
|
+
// A clean exit with no result document. This is still a noop, because
|
|
114
|
+
// nothing was reported and nothing should be published, but it is not the
|
|
115
|
+
// same event as an agent that deliberately wrote {"status":"noop"}. Carry
|
|
116
|
+
// what the agent said so the two can be told apart after the fact.
|
|
117
|
+
return { status: "noop", reason: describeSilentRun(run.stdout, run.stderr) };
|
|
103
118
|
}
|
|
104
119
|
}
|
|
105
120
|
//# sourceMappingURL=claude-code.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/failure.d.ts
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
/** Said when neither stream carried anything, rather than a dangling colon. */
|
|
2
2
|
export declare const NO_OUTPUT_REASON = "the agent produced no output";
|
|
3
|
+
/**
|
|
4
|
+
* The agent's own closing statement, bounded, or undefined when it said
|
|
5
|
+
* nothing. This is the envelope's `result` field, which `claude -p` writes on
|
|
6
|
+
* every clean exit, including one where the agent also wrote a result document.
|
|
7
|
+
*/
|
|
8
|
+
export declare function spokenReason(stdout: string): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Why a run that exited clean left no result document. The agent's own closing
|
|
11
|
+
* words when it said any, else a plain statement of the facts: a bare "no
|
|
12
|
+
* change" hides the difference between deciding there was nothing to do and
|
|
13
|
+
* falling over silently, and the operator has nothing else to go on.
|
|
14
|
+
*/
|
|
15
|
+
export declare function describeSilentRun(stdout: string, stderr: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* The `result` field of the agent's output envelope, if there is one.
|
|
18
|
+
*
|
|
19
|
+
* Tries the whole text first (`--output-format json`), then the last non-empty
|
|
20
|
+
* line (`stream-json`, which is JSONL and puts the final envelope last). Both
|
|
21
|
+
* shapes are in the arg surface, and dumping raw JSONL as the reason would bury
|
|
22
|
+
* the message in noise.
|
|
23
|
+
*
|
|
24
|
+
* Exported because it is not failure-specific: an agent that exits clean and
|
|
25
|
+
* writes no result document still says what it did here, and that text is the
|
|
26
|
+
* only account of a silent run anyone gets.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resultFromJson(stdout: string): string | undefined;
|
|
3
29
|
/**
|
|
4
30
|
* The one-line error recorded for a failed agent run.
|
|
5
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure.d.ts","sourceRoot":"","sources":["../../src/agent/failure.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"failure.d.ts","sourceRoot":"","sources":["../../src/agent/failure.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,iCAAiC,CAAC;AAK/D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKxE;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASjE;AAoBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK7F"}
|
package/dist/agent/failure.js
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
export const NO_OUTPUT_REASON = "the agent produced no output";
|
|
3
3
|
/** The longest reason worth recording: it lands in a tracker comment and a run row. */
|
|
4
4
|
const MAX_REASON = 500;
|
|
5
|
+
/**
|
|
6
|
+
* The agent's own closing statement, bounded, or undefined when it said
|
|
7
|
+
* nothing. This is the envelope's `result` field, which `claude -p` writes on
|
|
8
|
+
* every clean exit, including one where the agent also wrote a result document.
|
|
9
|
+
*/
|
|
10
|
+
export function spokenReason(stdout) {
|
|
11
|
+
const spoken = resultFromJson(stdout);
|
|
12
|
+
return spoken === undefined ? undefined : truncate(spoken);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Why a run that exited clean left no result document. The agent's own closing
|
|
16
|
+
* words when it said any, else a plain statement of the facts: a bare "no
|
|
17
|
+
* change" hides the difference between deciding there was nothing to do and
|
|
18
|
+
* falling over silently, and the operator has nothing else to go on.
|
|
19
|
+
*/
|
|
20
|
+
export function describeSilentRun(stdout, stderr) {
|
|
21
|
+
const spoken = firstNonEmpty([resultFromJson(stdout), stderr.trim(), stdout.trim()]);
|
|
22
|
+
return spoken === undefined
|
|
23
|
+
? `the agent exited cleanly without writing a result, and ${NO_OUTPUT_REASON}`
|
|
24
|
+
: truncate(spoken);
|
|
25
|
+
}
|
|
5
26
|
/**
|
|
6
27
|
* Named because it is the specific trap, not a generic suggestion. When a
|
|
7
28
|
* composed Claude profile exists the agent runs with HOME pointed at it, and
|
|
@@ -17,8 +38,12 @@ const NOT_LOGGED_IN_HINT = " (set CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY:
|
|
|
17
38
|
* line (`stream-json`, which is JSONL and puts the final envelope last). Both
|
|
18
39
|
* shapes are in the arg surface, and dumping raw JSONL as the reason would bury
|
|
19
40
|
* the message in noise.
|
|
41
|
+
*
|
|
42
|
+
* Exported because it is not failure-specific: an agent that exits clean and
|
|
43
|
+
* writes no result document still says what it did here, and that text is the
|
|
44
|
+
* only account of a silent run anyone gets.
|
|
20
45
|
*/
|
|
21
|
-
function resultFromJson(stdout) {
|
|
46
|
+
export function resultFromJson(stdout) {
|
|
22
47
|
const lines = stdout.split("\n").filter((line) => line.trim().length > 0);
|
|
23
48
|
const lastLine = lines[lines.length - 1];
|
|
24
49
|
for (const candidate of [stdout, lastLine]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../../src/agent/failure.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAE/D,uFAAuF;AACvF,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,kBAAkB,GACtB,qKAAqK,CAAC;AAExK
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../../src/agent/failure.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { buildClaudeArgs, type ClaudeArgsOptions, ClaudeCodeAgent, RESULT_PATH, } from "./claude-code.js";
|
|
2
|
-
export { renderPrompt } from "./prompt.js";
|
|
2
|
+
export { NO_DESCRIPTION, renderPrompt } from "./prompt.js";
|
|
3
3
|
export { parseAgentResult } from "./result.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,iBAAiB,EACtB,eAAe,EACf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,iBAAiB,EACtB,eAAe,EACf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/agent/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { buildClaudeArgs, ClaudeCodeAgent, RESULT_PATH, } from "./claude-code.js";
|
|
2
|
-
export { renderPrompt } from "./prompt.js";
|
|
2
|
+
export { NO_DESCRIPTION, renderPrompt } from "./prompt.js";
|
|
3
3
|
export { parseAgentResult } from "./result.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,eAAe,EACf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,eAAe,EACf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/agent/prompt.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { WorkItem } from "../loop/ports.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rendered in place of `{{description}}` when the item has none. The agent has
|
|
4
|
+
* no network tools and so can never open the item's url: saying the body is
|
|
5
|
+
* missing is honest, where leaving a blank would read as an issue that says
|
|
6
|
+
* nothing at all.
|
|
7
|
+
*/
|
|
8
|
+
export declare const NO_DESCRIPTION = "(no description on the tracker item)";
|
|
2
9
|
/**
|
|
3
10
|
* Render a prompt template for an item by replacing the placeholders
|
|
4
|
-
* `{{id}}`, `{{title}}`, and `{{
|
|
5
|
-
* A missing `url` renders as an empty string
|
|
11
|
+
* `{{id}}`, `{{title}}`, `{{url}}`, and `{{description}}` with the item's fields
|
|
12
|
+
* (every occurrence). A missing `url` renders as an empty string, a missing
|
|
13
|
+
* `description` as {@link NO_DESCRIPTION}. Unknown `{{...}}` placeholders are
|
|
6
14
|
* left untouched.
|
|
7
15
|
*/
|
|
8
16
|
export declare function renderPrompt(template: string, item: WorkItem): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,yCAAyC,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAiBrE"}
|
package/dist/agent/prompt.js
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendered in place of `{{description}}` when the item has none. The agent has
|
|
3
|
+
* no network tools and so can never open the item's url: saying the body is
|
|
4
|
+
* missing is honest, where leaving a blank would read as an issue that says
|
|
5
|
+
* nothing at all.
|
|
6
|
+
*/
|
|
7
|
+
export const NO_DESCRIPTION = "(no description on the tracker item)";
|
|
1
8
|
/**
|
|
2
9
|
* Render a prompt template for an item by replacing the placeholders
|
|
3
|
-
* `{{id}}`, `{{title}}`, and `{{
|
|
4
|
-
* A missing `url` renders as an empty string
|
|
10
|
+
* `{{id}}`, `{{title}}`, `{{url}}`, and `{{description}}` with the item's fields
|
|
11
|
+
* (every occurrence). A missing `url` renders as an empty string, a missing
|
|
12
|
+
* `description` as {@link NO_DESCRIPTION}. Unknown `{{...}}` placeholders are
|
|
5
13
|
* left untouched.
|
|
6
14
|
*/
|
|
7
15
|
export function renderPrompt(template, item) {
|
|
16
|
+
// A blank description counts as absent. The Linear parser already drops
|
|
17
|
+
// blanks, but renderPrompt is reachable from any source adapter, and an
|
|
18
|
+
// empty `### Description` section is exactly the misleading output the
|
|
19
|
+
// fallback exists to prevent.
|
|
20
|
+
const description = item.description?.trim();
|
|
8
21
|
const values = {
|
|
9
22
|
id: item.id,
|
|
10
23
|
title: item.title,
|
|
11
24
|
url: item.url ?? "",
|
|
25
|
+
description: description === undefined || description.length === 0 ? NO_DESCRIPTION : description,
|
|
12
26
|
};
|
|
13
|
-
return template.replace(/\{\{(id|title|url)\}\}/g, (_match, key) => values[key] ?? "");
|
|
27
|
+
return template.replace(/\{\{(id|title|url|description)\}\}/g, (_match, key) => values[key] ?? "");
|
|
14
28
|
}
|
|
15
29
|
//# sourceMappingURL=prompt.js.map
|
package/dist/agent/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAc;IAC3D,MAAM,MAAM,GAA2B;QACrC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAc;IAC3D,wEAAwE;IACxE,wEAAwE;IACxE,uEAAuE;IACvE,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,MAAM,GAA2B;QACrC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,WAAW,EACT,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW;KACvF,CAAC;IACF,OAAO,QAAQ,CAAC,OAAO,CACrB,qCAAqC,EACrC,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAC3C,CAAC;AACJ,CAAC"}
|
package/dist/agent/result.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { AgentOutcome } from "../loop/ports.js";
|
|
|
6
6
|
* - `done` requires a string `summary` (missing/empty becomes "").
|
|
7
7
|
* - `blocked` requires a string `questions`.
|
|
8
8
|
* - `failed` requires a string `error`.
|
|
9
|
-
* - `noop` needs nothing else.
|
|
9
|
+
* - `noop` needs nothing else, and may carry a `reason` explaining why.
|
|
10
10
|
*
|
|
11
11
|
* Anything unparseable, missing a valid `status`, or missing the field its
|
|
12
12
|
* status requires is reported as a `failed` outcome describing the problem, so a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/agent/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/agent/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CA4D1D"}
|
package/dist/agent/result.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - `done` requires a string `summary` (missing/empty becomes "").
|
|
6
6
|
* - `blocked` requires a string `questions`.
|
|
7
7
|
* - `failed` requires a string `error`.
|
|
8
|
-
* - `noop` needs nothing else.
|
|
8
|
+
* - `noop` needs nothing else, and may carry a `reason` explaining why.
|
|
9
9
|
*
|
|
10
10
|
* Anything unparseable, missing a valid `status`, or missing the field its
|
|
11
11
|
* status requires is reported as a `failed` outcome describing the problem, so a
|
|
@@ -38,8 +38,17 @@ export function parseAgentResult(raw) {
|
|
|
38
38
|
...(type === undefined ? {} : { type }),
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
case "noop":
|
|
42
|
-
|
|
41
|
+
case "noop": {
|
|
42
|
+
// Optional: a noop that explains itself is the difference between "the
|
|
43
|
+
// work was already done" and an operator guessing. Absent is still valid.
|
|
44
|
+
const reason = record.reason;
|
|
45
|
+
return {
|
|
46
|
+
status: "noop",
|
|
47
|
+
...(typeof reason === "string" && reason.trim().length > 0
|
|
48
|
+
? { reason: reason.trim() }
|
|
49
|
+
: {}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
43
52
|
case "blocked": {
|
|
44
53
|
const questions = record.questions;
|
|
45
54
|
if (typeof questions !== "string" || questions.length === 0) {
|
package/dist/agent/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/agent/result.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,2EAA2E;YAC3E,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YAC5B,MAAM,IAAI,GACR,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC1E,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC9B,CAAC,CAAC,SAAS,CAAC;YAChB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;gBACjC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;aACxC,CAAC;QACJ,CAAC;QACD,KAAK,MAAM;
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/agent/result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/backend/container.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/backend/container.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,UAAU,EACV,OAAO,EACP,aAAa,EACb,SAAS,EACV,MAAM,YAAY,CAAC;AAQpB;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,QAAQ,CAAC,IAAI,eAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqC;gBAE7C,OAAO,GAAE,uBAA4B;IAKjD,wEAAwE;IACxE,OAAO,CAAC,YAAY;IASpB,yDAAyD;IACzD,OAAO,CAAC,gBAAgB;IAMxB,uDAAuD;WAC1C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKtC,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IA+IxD,IAAI,CACF,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;IAKtB,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAC9B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;IAShB,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpD"}
|
|
@@ -3,7 +3,7 @@ import { mkdir, rm } from "node:fs/promises";
|
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import process from "node:process";
|
|
6
|
-
import { CONTAINER_PROFILE_DIR, DEFAULT_CONTAINER_IMAGE, dockerCpArgs, dockerExecArgs, dockerRmArgs, dockerRunArgs, } from "./docker.js";
|
|
6
|
+
import { CONTAINER_GIT_IDENTITY, CONTAINER_PROFILE_DIR, CONTAINER_WORKDIR, DEFAULT_CONTAINER_IMAGE, dockerCpArgs, dockerExecArgs, dockerRmArgs, dockerRunArgs, } from "./docker.js";
|
|
7
7
|
import { CLONE_TOKEN_ENV, cloneCredentialArgs } from "./git-credentials.js";
|
|
8
8
|
import { spawnCollect } from "./proc.js";
|
|
9
9
|
const KIND = "container";
|
|
@@ -60,6 +60,35 @@ export class ContainerBackend {
|
|
|
60
60
|
const branch = await spawnCollect(["git", "-C", hostClone, ...checkoutArgs]);
|
|
61
61
|
if (branch.exitCode !== 0)
|
|
62
62
|
throw new Error(`git checkout failed: ${branch.stderr.trim()}`);
|
|
63
|
+
// Cloning from a local path leaves `origin` pointing at that path, which
|
|
64
|
+
// does not exist inside the container, so the publish step's push dies with
|
|
65
|
+
// "does not appear to be a git repository". Carry the source repo's own
|
|
66
|
+
// origin over instead; the image's gh credential helper authenticates it
|
|
67
|
+
// from the forwarded token. When `repoPath` is already a URL this `git -C`
|
|
68
|
+
// fails and the clone's origin is left exactly as it is.
|
|
69
|
+
const sourceOrigin = await spawnCollect([
|
|
70
|
+
"git",
|
|
71
|
+
"-C",
|
|
72
|
+
spec.repoPath,
|
|
73
|
+
"remote",
|
|
74
|
+
"get-url",
|
|
75
|
+
"origin",
|
|
76
|
+
]);
|
|
77
|
+
const originUrl = sourceOrigin.exitCode === 0 ? sourceOrigin.stdout.trim() : "";
|
|
78
|
+
if (originUrl !== "" && originUrl !== spec.repoPath) {
|
|
79
|
+
const setUrl = await spawnCollect([
|
|
80
|
+
"git",
|
|
81
|
+
"-C",
|
|
82
|
+
hostClone,
|
|
83
|
+
"remote",
|
|
84
|
+
"set-url",
|
|
85
|
+
"origin",
|
|
86
|
+
originUrl,
|
|
87
|
+
]);
|
|
88
|
+
if (setUrl.exitCode !== 0) {
|
|
89
|
+
throw new Error(`git remote set-url origin failed: ${setUrl.stderr.trim()}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
63
92
|
const run = await docker(dockerRunArgs(name, image));
|
|
64
93
|
if (run.exitCode !== 0)
|
|
65
94
|
throw new Error(`docker run failed: ${run.stderr.trim()}`);
|
|
@@ -68,6 +97,41 @@ export class ContainerBackend {
|
|
|
68
97
|
await docker(dockerRmArgs(name));
|
|
69
98
|
throw new Error(`docker cp failed: ${cp.stderr.trim()}`);
|
|
70
99
|
}
|
|
100
|
+
// `docker cp` preserves host ownership, and the image runs as root, so
|
|
101
|
+
// every git command would fail with "detected dubious ownership". Mark the
|
|
102
|
+
// workspace safe before anything touches git. `--system` rather than
|
|
103
|
+
// `--global`, because the agent runs with HOME redirected at the staged
|
|
104
|
+
// Claude profile and a --global write would land in the wrong file.
|
|
105
|
+
//
|
|
106
|
+
// Only when the image actually has git. A container image is only required
|
|
107
|
+
// to provide a shell (the clone happens on the host), and the conformance
|
|
108
|
+
// default has no git at all; refusing to provision such an image would
|
|
109
|
+
// break a backend that otherwise works. When git is absent nothing inside
|
|
110
|
+
// the container can use it, so there is nothing to make safe.
|
|
111
|
+
const hasGit = await docker(dockerExecArgs(name, ["sh", "-c", "command -v git >/dev/null 2>&1"], {}));
|
|
112
|
+
if (hasGit.exitCode === 0) {
|
|
113
|
+
const safe = await docker(dockerExecArgs(name, ["git", "config", "--system", "--add", "safe.directory", CONTAINER_WORKDIR], {}));
|
|
114
|
+
if (safe.exitCode !== 0) {
|
|
115
|
+
await docker(dockerRmArgs(name));
|
|
116
|
+
throw new Error(`marking ${CONTAINER_WORKDIR} as a safe git directory failed: ${safe.stderr.trim()}`);
|
|
117
|
+
}
|
|
118
|
+
// A fresh container has no git identity, and git refuses to commit
|
|
119
|
+
// without one, so the publish step of an otherwise green run dies with
|
|
120
|
+
// "Author identity unknown". Same reasoning as safe.directory above:
|
|
121
|
+
// `--system` so it survives the agent's redirected HOME, and applied at
|
|
122
|
+
// provision time so an image built before this change works too.
|
|
123
|
+
const identityConfig = [
|
|
124
|
+
["user.name", CONTAINER_GIT_IDENTITY.name],
|
|
125
|
+
["user.email", CONTAINER_GIT_IDENTITY.email],
|
|
126
|
+
];
|
|
127
|
+
for (const [key, value] of identityConfig) {
|
|
128
|
+
const identity = await docker(dockerExecArgs(name, ["git", "config", "--system", key, value], {}));
|
|
129
|
+
if (identity.exitCode !== 0) {
|
|
130
|
+
await docker(dockerRmArgs(name));
|
|
131
|
+
throw new Error(`setting the container's git ${key} failed: ${identity.stderr.trim()}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
71
135
|
// The container shares no filesystem with the host, so a profile has to be
|
|
72
136
|
// copied in; the agent then points HOME at the in-container path.
|
|
73
137
|
let profilePath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/backend/container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/backend/container.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/docker.d.ts
CHANGED
|
@@ -8,6 +8,21 @@ export declare const CONTAINER_WORKDIR = "/work";
|
|
|
8
8
|
* {@link CONTAINER_WORKDIR} so it is never part of the repo the agent commits.
|
|
9
9
|
*/
|
|
10
10
|
export declare const CONTAINER_PROFILE_DIR = "/ghostrail-profile";
|
|
11
|
+
/**
|
|
12
|
+
* The author a factory commit carries when the container has no git identity of
|
|
13
|
+
* its own. A fresh container has no `user.name` or `user.email`, and git refuses
|
|
14
|
+
* to commit without them, so the publish step would fail with "Author identity
|
|
15
|
+
* unknown" on a run that is otherwise green.
|
|
16
|
+
*
|
|
17
|
+
* The factory really is the author here, so it says so rather than borrowing the
|
|
18
|
+
* operator's name: a human's attribution comes from merging the PR. It is
|
|
19
|
+
* written with `--system`, the lowest precedence, so a repo or image that
|
|
20
|
+
* configures its own identity still wins.
|
|
21
|
+
*/
|
|
22
|
+
export declare const CONTAINER_GIT_IDENTITY: {
|
|
23
|
+
readonly name: "ghostrail";
|
|
24
|
+
readonly email: "ghostrail@users.noreply.github.com";
|
|
25
|
+
};
|
|
11
26
|
/**
|
|
12
27
|
* Build `docker run` args for a long-lived, detached container that idles until
|
|
13
28
|
* torn down. The container is named `name`, works out of {@link CONTAINER_WORKDIR},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/backend/docker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,iEAAiE;AACjE,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,WAAgB,GACxB,MAAM,EAAE,CAYV;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAoB,GAAG,MAAM,EAAE,CAE7F;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD"}
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/backend/docker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,iEAAiE;AACjE,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,WAAgB,GACxB,MAAM,EAAE,CAYV;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAoB,GAAG,MAAM,EAAE,CAE7F;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD"}
|
package/dist/backend/docker.js
CHANGED
|
@@ -7,6 +7,21 @@ export const CONTAINER_WORKDIR = "/work";
|
|
|
7
7
|
* {@link CONTAINER_WORKDIR} so it is never part of the repo the agent commits.
|
|
8
8
|
*/
|
|
9
9
|
export const CONTAINER_PROFILE_DIR = "/ghostrail-profile";
|
|
10
|
+
/**
|
|
11
|
+
* The author a factory commit carries when the container has no git identity of
|
|
12
|
+
* its own. A fresh container has no `user.name` or `user.email`, and git refuses
|
|
13
|
+
* to commit without them, so the publish step would fail with "Author identity
|
|
14
|
+
* unknown" on a run that is otherwise green.
|
|
15
|
+
*
|
|
16
|
+
* The factory really is the author here, so it says so rather than borrowing the
|
|
17
|
+
* operator's name: a human's attribution comes from merging the PR. It is
|
|
18
|
+
* written with `--system`, the lowest precedence, so a repo or image that
|
|
19
|
+
* configures its own identity still wins.
|
|
20
|
+
*/
|
|
21
|
+
export const CONTAINER_GIT_IDENTITY = {
|
|
22
|
+
name: "ghostrail",
|
|
23
|
+
email: "ghostrail@users.noreply.github.com",
|
|
24
|
+
};
|
|
10
25
|
/**
|
|
11
26
|
* Build `docker run` args for a long-lived, detached container that idles until
|
|
12
27
|
* torn down. The container is named `name`, works out of {@link CONTAINER_WORKDIR},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/backend/docker.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAElD,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IACvD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACxF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,IAAI,GAAG,iBAAiB;IACjF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/backend/docker.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAElD,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,oCAAoC;CACnC,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IACvD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACxF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,IAAI,GAAG,iBAAiB;IACjF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -27,7 +27,12 @@ export interface SettingsKeyReport {
|
|
|
27
27
|
* includes its heading line.
|
|
28
28
|
*/
|
|
29
29
|
export declare function splitSections(content: string): Section[];
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Judge each section keep/drop. A section is dropped when it names a concern
|
|
32
|
+
* that cannot survive a headless run: the terminal UI, a step that waits on a
|
|
33
|
+
* human, or git work the factory owns. Families are tried in order, and the
|
|
34
|
+
* reason names both the matched phrase and why it disqualifies the section.
|
|
35
|
+
*/
|
|
31
36
|
export declare function classifyClaudeMdSections(sections: readonly Section[]): ClaudeMdSection[];
|
|
32
37
|
/** Report which top-level settings keys are carried into the factory profile. */
|
|
33
38
|
export declare function classifySettingsKeys(settings: Record<string, unknown>): SettingsKeyReport[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/claude-profile/classify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,OAAO;IACtB,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/claude-profile/classify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,OAAO;IACtB,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0GD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAwBxD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,eAAe,EAAE,CAexF;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,EAAE,CAM3F;AASD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,MAAM,GAAE,MAAuB,GAC9B,MAAM,CAMR;AAED,qGAAqG;AACrG,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE"}
|