@nonameolsson/nightjar 0.1.0 → 0.2.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 +66 -2
- package/dist/account.d.ts +12 -0
- package/dist/account.js +57 -0
- package/dist/account.js.map +1 -0
- package/dist/args.d.ts +2 -1
- package/dist/args.js +7 -2
- package/dist/args.js.map +1 -1
- package/dist/build.d.ts +4 -1
- package/dist/build.js +303 -47
- package/dist/build.js.map +1 -1
- package/dist/checks.d.ts +7 -0
- package/dist/checks.js +72 -8
- package/dist/checks.js.map +1 -1
- package/dist/config.d.ts +21 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -1
- package/dist/doctor.js +5 -0
- package/dist/doctor.js.map +1 -1
- package/dist/fakes/machine.d.ts +1 -0
- package/dist/fakes/machine.js +14 -7
- package/dist/fakes/machine.js.map +1 -1
- package/dist/init.d.ts +1 -0
- package/dist/init.js +10 -2
- package/dist/init.js.map +1 -1
- package/dist/ledger.d.ts +1 -1
- package/dist/ledger.js +1 -1
- package/dist/ledger.js.map +1 -1
- package/dist/main.js +20 -4
- package/dist/main.js.map +1 -1
- package/dist/person-config.d.ts +1 -0
- package/dist/person-config.js +8 -3
- package/dist/person-config.js.map +1 -1
- package/dist/prompt.d.ts +63 -0
- package/dist/prompt.js +74 -0
- package/dist/prompt.js.map +1 -1
- package/dist/serve.d.ts +10 -0
- package/dist/serve.js +85 -0
- package/dist/serve.js.map +1 -0
- package/dist/settings.d.ts +7 -1
- package/dist/settings.js +12 -3
- package/dist/settings.js.map +1 -1
- package/dist/skills.d.ts +4 -0
- package/dist/skills.js +51 -0
- package/dist/skills.js.map +1 -0
- package/dist/status-shape.d.ts +1 -1
- package/dist/workflow.d.ts +33 -0
- package/dist/workflow.js +53 -0
- package/dist/workflow.js.map +1 -0
- package/dist/worktree.d.ts +16 -0
- package/dist/worktree.js +51 -2
- package/dist/worktree.js.map +1 -1
- package/docs/ticket-contract.md +10 -0
- package/package.json +1 -1
- package/schema/factory.schema.json +107 -0
- package/src/status-shape.ts +2 -2
package/dist/main.js
CHANGED
|
@@ -14,6 +14,7 @@ import { ConfigError } from './config.js';
|
|
|
14
14
|
import { claimPorts, portEnv } from './ports.js';
|
|
15
15
|
import { buildOne, cannotClaim, handBack, queue } from './queue.js';
|
|
16
16
|
import { runSession } from './session.js';
|
|
17
|
+
import { startServe } from './serve.js';
|
|
17
18
|
import { StatusFile, statusPath } from './status.js';
|
|
18
19
|
import { worktreesFor } from './worktree.js';
|
|
19
20
|
import { say, why } from './say.js';
|
|
@@ -28,18 +29,23 @@ const sleep = (ms, signal) => new Promise((done) => {
|
|
|
28
29
|
async function preflight(args, host) {
|
|
29
30
|
const checked = await checkMachine({
|
|
30
31
|
useApiKey: args.useApiKey,
|
|
32
|
+
...(args.profile === undefined ? {} : { profile: args.profile }),
|
|
31
33
|
env: host.env,
|
|
32
34
|
cwd: host.cwd,
|
|
33
35
|
failFast: true,
|
|
34
36
|
...(host.request === undefined ? {} : { request: host.request })
|
|
35
37
|
});
|
|
36
|
-
const failed = checked.lines.find((l) => l.status === 'fail');
|
|
38
|
+
const failed = checked.lines.find((l) => l.status === 'fail' && l.only === undefined);
|
|
37
39
|
if (failed !== undefined)
|
|
38
40
|
throw new Refusal(failed.detail);
|
|
39
41
|
if (checked.ready === null)
|
|
40
42
|
throw new Refusal('the checks did not finish');
|
|
41
43
|
const { adapters, me } = checked.ready;
|
|
42
|
-
say(`${adapters.repo}, as ${me}, on ${
|
|
44
|
+
say(`${adapters.repo}, as ${me}, on ${checked.ready.login ?? 'ANTHROPIC_API_KEY'}`);
|
|
45
|
+
for (const l of checked.lines) {
|
|
46
|
+
if (l.status === 'fail')
|
|
47
|
+
say(`${l.name} cannot run: ${l.detail}`);
|
|
48
|
+
}
|
|
43
49
|
const found = checked.lines.flatMap((l) => (l.summary === null ? [] : [l.summary]));
|
|
44
50
|
say(`checked: ${found.join(', ')}`);
|
|
45
51
|
const { assignee, person } = checked.ready;
|
|
@@ -79,7 +85,13 @@ export async function runNightjar(argv, given = {}) {
|
|
|
79
85
|
const env = { ...host.env, GIT_TERMINAL_PROMPT: '0' };
|
|
80
86
|
if (args.mode === 'doctor') {
|
|
81
87
|
const { cwd, request } = host;
|
|
82
|
-
return runDoctor({
|
|
88
|
+
return runDoctor({
|
|
89
|
+
useApiKey: args.useApiKey,
|
|
90
|
+
...(args.profile === undefined ? {} : { profile: args.profile }),
|
|
91
|
+
env,
|
|
92
|
+
cwd,
|
|
93
|
+
...(request ? { request } : {})
|
|
94
|
+
});
|
|
83
95
|
}
|
|
84
96
|
let ready;
|
|
85
97
|
try {
|
|
@@ -116,6 +128,7 @@ export async function runNightjar(argv, given = {}) {
|
|
|
116
128
|
session: (req) => runSession(req),
|
|
117
129
|
runCheck,
|
|
118
130
|
runSetup: runCheck,
|
|
131
|
+
serve: startServe,
|
|
119
132
|
now: () => new Date(),
|
|
120
133
|
newId: () => randomUUID(),
|
|
121
134
|
say,
|
|
@@ -132,11 +145,14 @@ export async function runNightjar(argv, given = {}) {
|
|
|
132
145
|
defaults: { model: config.model, effort: config.effort },
|
|
133
146
|
review: config.review,
|
|
134
147
|
...(config.setup === undefined ? {} : { setupCommand: config.setup }),
|
|
148
|
+
...(config.workflows === undefined ? {} : { workflows: config.workflows }),
|
|
149
|
+
...(config.defaultWorkflow === undefined ? {} : { defaultWorkflow: config.defaultWorkflow }),
|
|
150
|
+
brokenWorkflows: ready.workflowProblems,
|
|
135
151
|
...(config.ports === undefined || claim === null
|
|
136
152
|
? {}
|
|
137
153
|
: { portEnv: portEnv(claim.port, config.ports.env) }),
|
|
138
154
|
allowApiKey: args.useApiKey,
|
|
139
|
-
env,
|
|
155
|
+
env: ready.env,
|
|
140
156
|
...(args.model === undefined ? {} : { model: args.model }),
|
|
141
157
|
...(args.effort === undefined ? {} : { effort: args.effort }),
|
|
142
158
|
limits: { ...LIMITS, dailyUsd: ready.person.dailyUsd },
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAa,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAyB,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAc,MAAM,aAAa,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,MAAoB,EAAE,EAAE,CAClD,IAAI,OAAO,CAAO,CAAC,IAAI,EAAE,EAAE;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,gBAAgB,CACvB,OAAO,EACP,GAAG,EAAE;QACJ,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC;IACR,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACd,CAAC;AACH,CAAC,CAAC,CAAC;AAEJ,uGAAuG;AACvG,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,IAAU;IAC9C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;KAChE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/person-config.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare const DEFAULT_DAILY_USD = 60;
|
|
|
3
3
|
export interface PersonConfig {
|
|
4
4
|
readonly dailyUsd: number;
|
|
5
5
|
readonly assignee?: string;
|
|
6
|
+
readonly profile?: string;
|
|
6
7
|
}
|
|
7
8
|
export declare function personConfigPath(env: Env): string;
|
|
8
9
|
export declare function loadPersonConfig(env: Env): PersonConfig;
|
package/dist/person-config.js
CHANGED
|
@@ -8,7 +8,8 @@ import { why } from './say.js';
|
|
|
8
8
|
export const DEFAULT_DAILY_USD = 60;
|
|
9
9
|
const PersonConfigSchema = z.strictObject({
|
|
10
10
|
dailyUsd: z.number().positive('a dollar amount above 0').optional(),
|
|
11
|
-
assignee: z.string().regex(/\S/, 'a login on the Tracker').optional()
|
|
11
|
+
assignee: z.string().regex(/\S/, 'a login on the Tracker').optional(),
|
|
12
|
+
profile: z.string().regex(/\S/, 'a Claude profile: a name, a path, or default').optional()
|
|
12
13
|
});
|
|
13
14
|
export function personConfigPath(env) {
|
|
14
15
|
const base = env.XDG_CONFIG_HOME || join(env.HOME ?? homedir(), '.config');
|
|
@@ -35,7 +36,11 @@ export function loadPersonConfig(env) {
|
|
|
35
36
|
if (!parsed.success) {
|
|
36
37
|
throw new ConfigError(parsed.error.issues.map((i) => `${path}: ${where(i.path)}${i.message}`).join('\n'));
|
|
37
38
|
}
|
|
38
|
-
const { dailyUsd = DEFAULT_DAILY_USD, assignee } = parsed.data;
|
|
39
|
-
return {
|
|
39
|
+
const { dailyUsd = DEFAULT_DAILY_USD, assignee, profile } = parsed.data;
|
|
40
|
+
return {
|
|
41
|
+
dailyUsd,
|
|
42
|
+
...(assignee === undefined ? {} : { assignee }),
|
|
43
|
+
...(profile === undefined ? {} : { profile })
|
|
44
|
+
};
|
|
40
45
|
}
|
|
41
46
|
//# sourceMappingURL=person-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"person-config.js","sourceRoot":"","sources":["../src/person-config.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,QAAQ,EAAE;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"person-config.js","sourceRoot":"","sources":["../src/person-config.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,QAAQ,EAAE;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,8CAA8C,CAAC,CAAC,QAAQ,EAAE;CAC1F,CAAC,CAAC;AAWH,MAAM,UAAU,gBAAgB,CAAC,GAAQ;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,gBAAgB,CAAC,GAAQ;IACxC,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACJ,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACJ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,iBAAiB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,WAAW,CACpB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClF,CAAC;IACH,CAAC;IACD,MAAM,EAAE,QAAQ,GAAG,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACxE,OAAO;QACN,QAAQ;QACR,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC7C,CAAC;AACH,CAAC"}
|
package/dist/prompt.d.ts
CHANGED
|
@@ -101,3 +101,66 @@ export declare function fixPrompt(round: number, rounds: number, check: string,
|
|
|
101
101
|
export declare function reviewPrompt(feature: Feature, base: string, tickets: readonly Ticket[], rules?: string): string;
|
|
102
102
|
export declare function questionsComment(questions: readonly Question[], round: number): string;
|
|
103
103
|
export declare const questionRounds: (comments: readonly Comment[]) => number;
|
|
104
|
+
export declare const STEP_SCHEMA: {
|
|
105
|
+
readonly type: "object";
|
|
106
|
+
readonly properties: {
|
|
107
|
+
readonly outcome: {
|
|
108
|
+
readonly type: "string";
|
|
109
|
+
readonly enum: readonly ["done", "blocked"];
|
|
110
|
+
};
|
|
111
|
+
readonly summary: {
|
|
112
|
+
readonly type: "string";
|
|
113
|
+
readonly description: "What you did, for the commit message";
|
|
114
|
+
};
|
|
115
|
+
readonly untilHolds: {
|
|
116
|
+
readonly type: "boolean";
|
|
117
|
+
readonly description: "Whether the Until condition holds after this round; true when none is named";
|
|
118
|
+
};
|
|
119
|
+
readonly left: {
|
|
120
|
+
readonly type: "array";
|
|
121
|
+
readonly items: {
|
|
122
|
+
readonly type: "string";
|
|
123
|
+
};
|
|
124
|
+
readonly description: "What is left to do when the Until condition does not hold yet";
|
|
125
|
+
};
|
|
126
|
+
readonly blocker: {
|
|
127
|
+
readonly type: "string";
|
|
128
|
+
readonly description: "The question that truly blocks you; empty unless the outcome is blocked";
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
readonly required: readonly ["outcome", "summary", "untilHolds", "left", "blocker"];
|
|
132
|
+
};
|
|
133
|
+
export type StepAnswer = {
|
|
134
|
+
readonly outcome: 'done';
|
|
135
|
+
readonly summary: string;
|
|
136
|
+
readonly untilHolds: boolean;
|
|
137
|
+
readonly left: string[];
|
|
138
|
+
} | {
|
|
139
|
+
readonly outcome: 'blocked';
|
|
140
|
+
readonly summary: string;
|
|
141
|
+
readonly blocker: string;
|
|
142
|
+
};
|
|
143
|
+
export declare function readStepAnswer(output: unknown): StepAnswer | null;
|
|
144
|
+
export declare const NOBODY_AT_THE_KEYBOARD = "Nobody is at the keyboard. This session runs headless under Nightjar. Decide for yourself and never ask a question in chat: no one will answer, and a session that ends its turn to wait is over. If a question truly blocks you, change no file and answer with outcome \"blocked\", naming the question in \"blocker\".";
|
|
145
|
+
export interface StepContext {
|
|
146
|
+
readonly workflow: string;
|
|
147
|
+
readonly step: {
|
|
148
|
+
readonly name: string;
|
|
149
|
+
readonly prompt: string;
|
|
150
|
+
readonly until?: string;
|
|
151
|
+
};
|
|
152
|
+
readonly rounds: number;
|
|
153
|
+
readonly feature: Feature;
|
|
154
|
+
readonly ticket?: Ticket;
|
|
155
|
+
readonly allowed: readonly string[];
|
|
156
|
+
readonly check: string;
|
|
157
|
+
readonly rules?: string;
|
|
158
|
+
readonly notes: string;
|
|
159
|
+
readonly base: string;
|
|
160
|
+
readonly diff?: {
|
|
161
|
+
readonly text: string;
|
|
162
|
+
readonly truncated: boolean;
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
export declare function stepPrompt(c: StepContext): string;
|
|
166
|
+
export declare function stepRoundPrompt(round: number, rounds: number, until: string, left: readonly string[]): string;
|
package/dist/prompt.js
CHANGED
|
@@ -140,4 +140,78 @@ ${asked}
|
|
|
140
140
|
Answer in a comment here, then mark this Ticket ready and give its Feature the Go again.`;
|
|
141
141
|
}
|
|
142
142
|
export const questionRounds = (comments) => comments.filter((c) => c.body.startsWith(QUESTIONS_MARK)).length;
|
|
143
|
+
export const STEP_SCHEMA = {
|
|
144
|
+
type: 'object',
|
|
145
|
+
properties: {
|
|
146
|
+
outcome: { type: 'string', enum: ['done', 'blocked'] },
|
|
147
|
+
summary: { type: 'string', description: 'What you did, for the commit message' },
|
|
148
|
+
untilHolds: {
|
|
149
|
+
type: 'boolean',
|
|
150
|
+
description: 'Whether the Until condition holds after this round; true when none is named'
|
|
151
|
+
},
|
|
152
|
+
left: {
|
|
153
|
+
type: 'array',
|
|
154
|
+
items: { type: 'string' },
|
|
155
|
+
description: 'What is left to do when the Until condition does not hold yet'
|
|
156
|
+
},
|
|
157
|
+
blocker: {
|
|
158
|
+
type: 'string',
|
|
159
|
+
description: 'The question that truly blocks you; empty unless the outcome is blocked'
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
required: ['outcome', 'summary', 'untilHolds', 'left', 'blocker']
|
|
163
|
+
};
|
|
164
|
+
export function readStepAnswer(output) {
|
|
165
|
+
if (!isRecord(output) || typeof output.summary !== 'string')
|
|
166
|
+
return null;
|
|
167
|
+
if (output.outcome === 'blocked') {
|
|
168
|
+
const blocker = typeof output.blocker === 'string' ? output.blocker : '';
|
|
169
|
+
return { outcome: 'blocked', summary: output.summary, blocker };
|
|
170
|
+
}
|
|
171
|
+
if (output.outcome !== 'done' || typeof output.untilHolds !== 'boolean')
|
|
172
|
+
return null;
|
|
173
|
+
const left = Array.isArray(output.left)
|
|
174
|
+
? output.left.filter((l) => typeof l === 'string')
|
|
175
|
+
: [];
|
|
176
|
+
return { outcome: 'done', summary: output.summary, untilHolds: output.untilHolds, left };
|
|
177
|
+
}
|
|
178
|
+
// The rule every Step's prompt opens with.
|
|
179
|
+
export const NOBODY_AT_THE_KEYBOARD = `Nobody is at the keyboard. This session runs headless under Nightjar. Decide for yourself and never ask a question in chat: no one will answer, and a session that ends its turn to wait is over. If a question truly blocks you, change no file and answer with outcome "blocked", naming the question in "blocker".`;
|
|
180
|
+
export function stepPrompt(c) {
|
|
181
|
+
const commands = c.allowed.length === 0 ? 'none' : c.allowed.map(code).join(', ');
|
|
182
|
+
const until = c.step.until === undefined
|
|
183
|
+
? ''
|
|
184
|
+
: `\n\n# Until\n\nYou may be run again for up to ${String(c.rounds)} rounds. After each round, report in "untilHolds" whether this holds, and list in "left" what is still to do:\n\n${c.step.until}`;
|
|
185
|
+
const diff = c.diff === undefined
|
|
186
|
+
? ''
|
|
187
|
+
: `\n\n# The Feature's diff against ${c.base}\n\nPick your own targets from it. Read more with \`git diff ${c.base}...HEAD\`.${c.diff.truncated ? ' It is cut here; the rest is in git.' : ''}\n\n\`\`\`diff\n${c.diff.text}\n\`\`\``;
|
|
188
|
+
const ticket = c.ticket === undefined
|
|
189
|
+
? ''
|
|
190
|
+
: `\n\nYou run after Ticket #${c.ticket.id} ${c.ticket.title}, which is built and committed: see it with \`git show HEAD\`.`;
|
|
191
|
+
return `${NOBODY_AT_THE_KEYBOARD}
|
|
192
|
+
|
|
193
|
+
- You run Step ${code(c.step.name)} of Workflow ${code(c.workflow)} in the current folder: the Feature's own worktree and branch, with its Tickets built on it.
|
|
194
|
+
- Do not commit, push, merge, rebase, reset or switch branches. Nightjar commits your changes.
|
|
195
|
+
- You have no network beyond what the Workflow allows. The commands you may run in Bash: ${commands}, and git status, diff, log and show. Anything else is refused.
|
|
196
|
+
- Notes folder: ${code(c.notes)}. Every Step of this run shares it. Read what earlier Steps left there; leave there what later Steps need. It is never committed, and Nightjar passes nothing else between Steps.
|
|
197
|
+
- After you, Nightjar runs the repo's check, ${code(c.check)}, and keeps your changes only once it passes.
|
|
198
|
+
- Follow the repo's own conventions, in its CLAUDE.md or AGENTS.md where it has one.
|
|
199
|
+
- Answer with the structured output: outcome "done" with a summary of what you did (one line, then detail), or outcome "blocked".${repoRules(c.rules)}
|
|
200
|
+
|
|
201
|
+
# The Feature: #${c.feature.id} ${c.feature.title}
|
|
202
|
+
|
|
203
|
+
${c.feature.body}${ticket}
|
|
204
|
+
|
|
205
|
+
# Your Step
|
|
206
|
+
|
|
207
|
+
${c.step.prompt}${until}${diff}`;
|
|
208
|
+
}
|
|
209
|
+
export function stepRoundPrompt(round, rounds, until, left) {
|
|
210
|
+
const list = left.length === 0
|
|
211
|
+
? ''
|
|
212
|
+
: `\n\nLeft from the last round:\n${left.map((l) => `- ${l}`).join('\n')}`;
|
|
213
|
+
return `Round ${String(round)} of ${String(rounds)}. This does not hold yet: ${until}${list}
|
|
214
|
+
|
|
215
|
+
The same rules hold: nobody is at the keyboard, do not commit, and answer with the same structured output.`;
|
|
216
|
+
}
|
|
143
217
|
//# sourceMappingURL=prompt.js.map
|
package/dist/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAGA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACX,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;QACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;QAClF,SAAS,EAAE;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACX,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC5B,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAClC;gBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACxC;SACD;KACD;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;CACpC,CAAC;AAWX,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAgC,EAAE,CAC7D,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1D,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,MAAe;IAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrF,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CACxC,CAAC,CAAC,EAAiB,EAAE,CACpB,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,CACtF,CAAC;IACF,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnG,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACX,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;QACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,MAAM,EAAE;YACP,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACX,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;aAC7B;SACD;KACD;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,CAAC;AAQX,MAAM,UAAU,UAAU,CAAC,MAAe;IACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAClC,CAAC,CAAC,EAAiC,EAAE,CACpC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAC3E,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;AAE7C,SAAS,KAAK,CAAC,OAA0B,EAAE,KAAa;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAO;;;;;sCAK8B,QAAQ;+CACC,IAAI,CAAC,KAAK,CAAC;;;;;uIAK6E,CAAC;AACxI,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,QAA4B,EAAE,EAAE,CAC9C,QAAQ,CAAC,MAAM,KAAK,CAAC;IACpB,CAAC,CAAC,QAAQ;IACV,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAetF,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAE,EAAE,CAC/C,KAAK,CAAC,CAAC,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAErD,MAAM,UAAU,WAAW,CAAC,CAAe;IAC1C,MAAM,IAAI,GACT,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;;kBAEvC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK;;EAE/C,CAAC,CAAC,OAAO,CAAC,IAAI;;;;EAId,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;;;;EAIxB,IAAI;;kBAEY,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;;EAE7C,CAAC,CAAC,MAAM,CAAC,IAAI;;;;EAIb,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,KAAa,EAAE,IAAY;IACnF,OAAO,qBAAqB,IAAI,CAAC,KAAK,CAAC,8CAA8C,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC;;EAEtH,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,YAAY,CAC3B,OAAgB,EAChB,IAAY,EACZ,OAA0B,EAC1B,KAAc;IAEd,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnF,OAAO;;oBAEY,IAAI;;;;;0PAKkO,SAAS,CAAC,KAAK,CAAC;;kBAExP,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK;;EAE3C,OAAO,CAAC,IAAI;;;;EAIZ,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAA8B,EAAE,KAAa;IAC7E,MAAM,KAAK,GAAG,SAAS;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,uBAAuB,CAAC,CAAC,cAAc,EAAE,CAAC;SACvF,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,GAAG,cAAc;wEAC+C,MAAM,CAAC,KAAK,CAAC;;EAEnF,KAAK;;yFAEkF,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAA4B,EAAU,EAAE,CACtE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;AAElE,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACX,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;QAChF,UAAU,EAAE;YACX,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6EAA6E;SAC1F;QACD,IAAI,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,+DAA+D;SAC5E;QACD,OAAO,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yEAAyE;SACtF;KACD;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC;CACxD,CAAC;AAWX,MAAM,UAAU,cAAc,CAAC,MAAe;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC/D,CAAC,CAAC,EAAE,CAAC;IACN,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;AAC1F,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,uTAAuT,CAAC;AAmB9V,MAAM,UAAU,UAAU,CAAC,CAAc;IACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,KAAK,GACV,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS;QACzB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,iDAAiD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,oHAAoH,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACxM,MAAM,IAAI,GACT,CAAC,CAAC,IAAI,KAAK,SAAS;QACnB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,oCAAoC,CAAC,CAAC,IAAI,gEAAgE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;IACxO,MAAM,MAAM,GACX,CAAC,CAAC,MAAM,KAAK,SAAS;QACrB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,gEAAgE,CAAC;IAC/H,OAAO,GAAG,sBAAsB;;iBAEhB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;;2FAEyB,QAAQ;kBACjF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;+CACgB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;;mIAEuE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;;kBAEnI,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK;;EAE/C,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM;;;;EAIvB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,KAAa,EACb,MAAc,EACd,KAAa,EACb,IAAuB;IAEvB,MAAM,IAAI,GACT,IAAI,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kCAAkC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7E,OAAO,SAAS,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,6BAA6B,KAAK,GAAG,IAAI;;2GAEe,CAAC;AAC5G,CAAC"}
|
package/dist/serve.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Env } from './git.js';
|
|
2
|
+
export type Served = {
|
|
3
|
+
readonly ok: true;
|
|
4
|
+
stop(): Promise<void>;
|
|
5
|
+
} | {
|
|
6
|
+
readonly ok: false;
|
|
7
|
+
readonly tail: string;
|
|
8
|
+
};
|
|
9
|
+
export type Serve = (command: string, cwd: string, env: Env, port: number | null) => Promise<Served>;
|
|
10
|
+
export declare const startServe: Serve;
|
package/dist/serve.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// A Workflow's serve command: started in the background for its Steps, stopped after them.
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { connect } from 'node:net';
|
|
4
|
+
const TAIL = 2000;
|
|
5
|
+
const READY_MS = 60_000;
|
|
6
|
+
// how long a stopped command gets to end before it is killed
|
|
7
|
+
const STOP_MS = 5000;
|
|
8
|
+
const listening = (port) => new Promise((done) => {
|
|
9
|
+
const socket = connect({ port, host: '127.0.0.1' });
|
|
10
|
+
socket.once('connect', () => {
|
|
11
|
+
socket.destroy();
|
|
12
|
+
done(true);
|
|
13
|
+
});
|
|
14
|
+
socket.once('error', () => done(false));
|
|
15
|
+
});
|
|
16
|
+
const pause = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
17
|
+
export const startServe = async (command, cwd, env, port) => {
|
|
18
|
+
// its own process group, so stopping it also ends what it started
|
|
19
|
+
const child = spawn('sh', ['-c', command], {
|
|
20
|
+
cwd,
|
|
21
|
+
env,
|
|
22
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
23
|
+
detached: true
|
|
24
|
+
});
|
|
25
|
+
let output = '';
|
|
26
|
+
const keep = (chunk) => {
|
|
27
|
+
output = (output + chunk.toString()).slice(-TAIL);
|
|
28
|
+
};
|
|
29
|
+
child.stdout.on('data', keep);
|
|
30
|
+
child.stderr.on('data', keep);
|
|
31
|
+
let exited;
|
|
32
|
+
let failed = '';
|
|
33
|
+
child.once('exit', (code) => {
|
|
34
|
+
exited = code;
|
|
35
|
+
});
|
|
36
|
+
child.once('error', (fault) => {
|
|
37
|
+
failed = `sh could not start: ${fault.message}`;
|
|
38
|
+
});
|
|
39
|
+
// The shell can exit before what it started does, so stop waits for the whole group to be gone.
|
|
40
|
+
const stop = async () => {
|
|
41
|
+
const pid = child.pid;
|
|
42
|
+
if (pid === undefined)
|
|
43
|
+
return;
|
|
44
|
+
const gone = () => {
|
|
45
|
+
try {
|
|
46
|
+
process.kill(-pid, 0);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
try {
|
|
54
|
+
process.kill(-pid, 'SIGTERM');
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
for (let waited = 0; !gone(); waited += 50) {
|
|
60
|
+
if (waited === STOP_MS) {
|
|
61
|
+
try {
|
|
62
|
+
process.kill(-pid, 'SIGKILL');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// it ended just now
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
await pause(50);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const deadline = Date.now() + READY_MS;
|
|
72
|
+
while (port !== null && !(await listening(port))) {
|
|
73
|
+
if (failed !== '' || exited !== undefined || Date.now() > deadline) {
|
|
74
|
+
await stop();
|
|
75
|
+
const why = failed ||
|
|
76
|
+
(exited === undefined
|
|
77
|
+
? `nothing listened on port ${String(port)} in time`
|
|
78
|
+
: `it exited with code ${String(exited)}`);
|
|
79
|
+
return { ok: false, tail: `${why}${output.trim() ? `\n${output.trim()}` : ''}` };
|
|
80
|
+
}
|
|
81
|
+
await pause(200);
|
|
82
|
+
}
|
|
83
|
+
return { ok: true, stop };
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export declare const BUILD_TOOLS: string[];
|
|
2
2
|
export declare const REVIEW_TOOLS: string[];
|
|
3
|
-
export
|
|
3
|
+
export interface StepExtras {
|
|
4
|
+
readonly allowedCommands?: readonly string[];
|
|
5
|
+
readonly allowedTools?: readonly string[];
|
|
6
|
+
readonly localNetwork?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const stepTools: (extras: StepExtras) => string[];
|
|
9
|
+
export declare function buildSettings(allowed: readonly string[], extras?: StepExtras): object;
|
|
4
10
|
export declare function reviewSettings(): object;
|
package/dist/settings.js
CHANGED
|
@@ -50,8 +50,15 @@ const READ_GIT = [
|
|
|
50
50
|
'Bash(git log *)',
|
|
51
51
|
'Bash(git show *)'
|
|
52
52
|
];
|
|
53
|
+
// The sandbox keeps a Step's commands to localhost; it auto-allows nothing, so the allow list still decides.
|
|
54
|
+
const LOCAL_ONLY = {
|
|
55
|
+
enabled: true,
|
|
56
|
+
autoAllowBashIfSandboxed: false,
|
|
57
|
+
network: { allowedDomains: ['localhost', '127.0.0.1'], allowLocalBinding: true }
|
|
58
|
+
};
|
|
59
|
+
export const stepTools = (extras) => [...BUILD_TOOLS, ...(extras.allowedTools ?? [])];
|
|
53
60
|
// `allowed` are factory.json's allowedCommands, as Bash permission patterns.
|
|
54
|
-
export function buildSettings(allowed) {
|
|
61
|
+
export function buildSettings(allowed, extras = {}) {
|
|
55
62
|
return {
|
|
56
63
|
permissions: {
|
|
57
64
|
defaultMode: 'dontAsk',
|
|
@@ -64,11 +71,13 @@ export function buildSettings(allowed) {
|
|
|
64
71
|
'Skill',
|
|
65
72
|
'Agent',
|
|
66
73
|
'TodoWrite',
|
|
67
|
-
...
|
|
74
|
+
...(extras.allowedTools ?? []),
|
|
75
|
+
...[...allowed, ...(extras.allowedCommands ?? [])].map((command) => `Bash(${command})`),
|
|
68
76
|
...READ_GIT
|
|
69
77
|
],
|
|
70
78
|
deny: DENY
|
|
71
|
-
}
|
|
79
|
+
},
|
|
80
|
+
...(extras.localNetwork === true ? { sandbox: LOCAL_ONLY } : {})
|
|
72
81
|
};
|
|
73
82
|
}
|
|
74
83
|
export function reviewSettings() {
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,iIAAiI;AAEjI,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;CACX,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D,0EAA0E;AAC1E,MAAM,IAAI,GAAG;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;IACpB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;IACjB,UAAU;IACV,WAAW;CACX,CAAC;AAEF,MAAM,QAAQ,GAAG;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CAClB,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,OAA0B;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,iIAAiI;AAEjI,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;CACX,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D,0EAA0E;AAC1E,MAAM,IAAI,GAAG;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;IACpB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;IACjB,UAAU;IACV,WAAW;CACX,CAAC;AAEF,MAAM,QAAQ,GAAG;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CAClB,CAAC;AASF,6GAA6G;AAC7G,MAAM,UAAU,GAAG;IAClB,OAAO,EAAE,IAAI;IACb,wBAAwB,EAAE,KAAK;IAC/B,OAAO,EAAE,EAAE,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE;CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;AAElG,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,OAA0B,EAAE,SAAqB,EAAE;IAChF,OAAO;QACN,WAAW,EAAE;YACZ,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE;gBACN,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,OAAO;gBACP,WAAW;gBACX,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,OAAO,GAAG,CAAC;gBACvF,GAAG,QAAQ;aACX;YACD,IAAI,EAAE,IAAI;SACV;QACD,GAAG,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,OAAO;QACN,WAAW,EAAE;YACZ,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAC5C,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;SAChC;KACD,CAAC;AACH,CAAC"}
|
package/dist/skills.d.ts
ADDED
package/dist/skills.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// The skills a headless Claude session loads, read off the init line it prints before it asks the model anything.
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { createInterface } from 'node:readline';
|
|
4
|
+
const WAIT_MS = 30_000;
|
|
5
|
+
const strings = (value) => Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
|
|
6
|
+
// The session is started as a build starts one and killed at its init line, so it costs nothing.
|
|
7
|
+
export const loadedSkills = (cwd, env) => new Promise((done) => {
|
|
8
|
+
const child = spawn('claude', [
|
|
9
|
+
'-p',
|
|
10
|
+
'Reply with ok.',
|
|
11
|
+
'--restricted',
|
|
12
|
+
'--strict-mcp-config',
|
|
13
|
+
'--output-format',
|
|
14
|
+
'stream-json',
|
|
15
|
+
'--verbose',
|
|
16
|
+
'--tools',
|
|
17
|
+
'Skill'
|
|
18
|
+
], { cwd, env, stdio: ['ignore', 'pipe', 'ignore'], detached: true });
|
|
19
|
+
let finished = false;
|
|
20
|
+
const end = (skills) => {
|
|
21
|
+
if (finished)
|
|
22
|
+
return;
|
|
23
|
+
finished = true;
|
|
24
|
+
clearTimeout(timer);
|
|
25
|
+
try {
|
|
26
|
+
if (child.pid !== undefined)
|
|
27
|
+
process.kill(-child.pid, 'SIGTERM');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// the group has already ended
|
|
31
|
+
}
|
|
32
|
+
done(skills);
|
|
33
|
+
};
|
|
34
|
+
const timer = setTimeout(() => end(null), WAIT_MS);
|
|
35
|
+
createInterface({ input: child.stdout }).on('line', (text) => {
|
|
36
|
+
try {
|
|
37
|
+
const line = JSON.parse(text);
|
|
38
|
+
if (line.type === 'system' && line.subtype === 'init') {
|
|
39
|
+
end([...new Set([...strings(line.skills), ...strings(line.slash_commands)])]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// not a JSON line
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
child.on('error', () => end(null));
|
|
47
|
+
child.on('close', () => end(null));
|
|
48
|
+
});
|
|
49
|
+
// Whether `name` is among the loaded skills, bare or under a plugin's prefix.
|
|
50
|
+
export const isLoaded = (loaded, name) => loaded.some((l) => l === name || l.endsWith(`:${name}`));
|
|
51
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKhD,MAAM,OAAO,GAAG,MAAM,CAAC;AAEvB,MAAM,OAAO,GAAG,CAAC,KAAc,EAAY,EAAE,CAC5C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAErF,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACtD,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IACpB,MAAM,KAAK,GAAG,KAAK,CAClB,QAAQ,EACR;QACC,IAAI;QACJ,gBAAgB;QAChB,cAAc;QACd,qBAAqB;QACrB,iBAAiB;QACjB,aAAa;QACb,WAAW;QACX,SAAS;QACT,OAAO;KACP,EACD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CACjE,CAAC;IACF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,MAAuB,EAAE,EAAE;QACvC,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC;YACJ,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACR,8BAA8B;QAC/B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC;IACd,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5D,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;YACzD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBACvD,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,kBAAkB;QACnB,CAAC;IACF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEJ,8EAA8E;AAC9E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAyB,EAAE,IAAY,EAAE,EAAE,CACnE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC"}
|
package/dist/status-shape.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type Doing = {
|
|
|
5
5
|
readonly kind: 'building';
|
|
6
6
|
readonly feature: string;
|
|
7
7
|
readonly ticket: string | null;
|
|
8
|
-
readonly step: 'setup' | 'build' | 'fix' | 'review';
|
|
8
|
+
readonly step: 'setup' | 'build' | 'fix' | 'review' | 'step';
|
|
9
9
|
readonly round: number | null;
|
|
10
10
|
readonly rounds: number | null;
|
|
11
11
|
readonly session: string | null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Config } from './config.js';
|
|
2
|
+
import type { ItemId } from './tracker.js';
|
|
3
|
+
export type WorkflowConfig = NonNullable<Config['workflows']>[string];
|
|
4
|
+
export type StepConfig = WorkflowConfig['steps'][number];
|
|
5
|
+
export type StepPoint = StepConfig['point'];
|
|
6
|
+
export declare function workflowLine(body: string): string | undefined;
|
|
7
|
+
export type Chosen = {
|
|
8
|
+
readonly kind: 'none';
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'workflow';
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly workflow: WorkflowConfig;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'refused';
|
|
15
|
+
readonly why: string;
|
|
16
|
+
};
|
|
17
|
+
export interface WorkflowSettings {
|
|
18
|
+
readonly workflows?: Readonly<Record<string, WorkflowConfig>>;
|
|
19
|
+
readonly defaultWorkflow?: string;
|
|
20
|
+
readonly brokenWorkflows?: Readonly<Record<string, string>>;
|
|
21
|
+
}
|
|
22
|
+
export declare function chooseWorkflow(settings: WorkflowSettings, body: string): Chosen;
|
|
23
|
+
export declare const stepKey: (workflow: string, step: string, ticket: ItemId | null) => string;
|
|
24
|
+
export declare function skillsNamed(prompt: string): string[];
|
|
25
|
+
export interface StepReport {
|
|
26
|
+
readonly step: StepConfig;
|
|
27
|
+
readonly ticket: ItemId | null;
|
|
28
|
+
readonly state: 'done' | 'unmet' | 'undone';
|
|
29
|
+
readonly why?: string;
|
|
30
|
+
readonly rounds?: number;
|
|
31
|
+
readonly left: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function workflowSection(name: string, reports: readonly StepReport[], ref: (id: ItemId) => string): string | null;
|