halfcycle 0.4.15 → 0.4.17
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/.claude-plugin/plugin.json +1 -1
- package/bin/bin.bundle.mjs +37 -11
- package/dist/build-record/render-v2.d.ts.map +1 -1
- package/dist/cli.js +2996 -2913
- package/dist/cli.js.map +3 -3
- package/dist/close-phase.d.ts +28 -5
- package/dist/close-phase.d.ts.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/index.js +105 -20
- package/dist/index.js.map +3 -3
- package/dist/review.d.ts +9 -1
- package/dist/review.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/close-phase.d.ts
CHANGED
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
* SHIPS TO CLIENT DISK inside the CLI: every string here is a sentence a person reads,
|
|
50
50
|
* and no comment sits beside an object member.
|
|
51
51
|
*/
|
|
52
|
-
import { unfinishedStepLine, type AcceptanceOutcome, type OwnerWaitDeclaration, type ObserveRunResult, type OpenReviewAnswer, type TimeRunResult, type TimeSummary } from '@halfcycle/events';
|
|
52
|
+
import { unfinishedStepLine, type AcceptanceOutcome, type OwnerWaitDeclaration, type ObserveRunResult, type OpenReviewAnswer, type TimeRunResult, type TimeSummary, type WorkCall } from '@halfcycle/events';
|
|
53
53
|
import type { RepoCredential } from './open-phase.js';
|
|
54
54
|
/**
|
|
55
55
|
* Whether the commit this phase closed at could be read, and if so the full hash
|
|
@@ -274,13 +274,27 @@ export declare function openPhaseReview(credential: RepoCredential, phase: strin
|
|
|
274
274
|
export declare function reviewOpenedLine(phase: string): string;
|
|
275
275
|
/** CL2 — Halfcycle could not count what the phase changed. */
|
|
276
276
|
export declare const COULD_NOT_COUNT_LINE = "[halfcycle] Halfcycle could not count what this phase changed, so the owner judges each part on what the agents reported alone.";
|
|
277
|
-
/**
|
|
278
|
-
|
|
277
|
+
/**
|
|
278
|
+
* The exact line the owner types in chat to accept every built part of `phase`, or
|
|
279
|
+
* `null` when this command cannot spell it: a name holding a `:` is typed by the
|
|
280
|
+
* phase's plan-order number (`typedPhaseReference`), which the open answer does not
|
|
281
|
+
* carry, so the listing's own lines are the ones to type then.
|
|
282
|
+
*/
|
|
283
|
+
export declare function typedAcceptLine(phase: string): string | null;
|
|
284
|
+
/**
|
|
285
|
+
* H1 (`typed-close-review`) — how the owner reviews, or that typing is switched off.
|
|
286
|
+
* While typing is offered it names the exact line that accepts every built part, and
|
|
287
|
+
* the per-part form (F-78, owner 2026-10-30: an owner told to review in the console
|
|
288
|
+
* did not know the line works in chat).
|
|
289
|
+
*/
|
|
290
|
+
export declare function typedReviewHintLine(offered: boolean, phase: string): string;
|
|
279
291
|
/**
|
|
280
292
|
* After H1 (`system-view-page` AC7): the console's way to review, ending with the
|
|
281
293
|
* phase's System view address on `engagementId`. The second way while typing is
|
|
282
|
-
* offered,
|
|
283
|
-
*
|
|
294
|
+
* offered, and then it names the line to type instead (F-78): this is the line the
|
|
295
|
+
* method has the session relay, so it alone must tell the owner that chat works. The
|
|
296
|
+
* way while it is switched off. `undefined` when there is no address (an id that is
|
|
297
|
+
* not an engagement id), and then no line is printed.
|
|
284
298
|
*/
|
|
285
299
|
export declare function systemViewReviewLine(offered: boolean, engagementId: string, phase: string): string | undefined;
|
|
286
300
|
/** CL3 — tasks of the phase are not finished, named by title, at most ten. */
|
|
@@ -365,6 +379,15 @@ export declare function readCloseOwnerWaitDeclarations(credential: RepoCredentia
|
|
|
365
379
|
* with none of them carries on silently, exactly as the spec says.
|
|
366
380
|
*/
|
|
367
381
|
export declare function ownerWaitCloseLines(declarations: readonly OwnerWaitDeclaration[] | null): string[];
|
|
382
|
+
/**
|
|
383
|
+
* THE DECISIONS THAT WENT AHEAD UNDER THE AUTONOMY SETTING, after the ones that waited
|
|
384
|
+
* (F-74, from the W-13b walk). Each listed call of the phase, oldest first, as C8 then C4
|
|
385
|
+
* (`review.ts`'s `callLines`, the one composer the review panel uses too). A declaration
|
|
386
|
+
* that went ahead never reaches `ownerWaitCloseLines`: the declarations read leaves it
|
|
387
|
+
* out, because it never waited. Calls an agent made on its own (`default`) are not
|
|
388
|
+
* printed here; C6 counts them with the rest.
|
|
389
|
+
*/
|
|
390
|
+
export declare function wentAheadCloseLines(calls: readonly WorkCall[]): string[];
|
|
368
391
|
/**
|
|
369
392
|
* C6, printed once the review has opened, only when it lists one or more calls — the
|
|
370
393
|
* phase's work read (`phase-work.ts`'s `readPhaseWork`) is the one count, never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-phase.d.ts","sourceRoot":"","sources":["../src/close-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAGH,OAAO,EAgBL,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAGzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAelB,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"close-phase.d.ts","sourceRoot":"","sources":["../src/close-phase.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAqBH,2GAA2G;AAC3G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CACpC;AAED,iGAAiG;AACjG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAqBH,2GAA2G;AAC3G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CACpC;AAED,iGAAiG;AACjG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CAC1B;AAiCD,8CAA8C;AAC9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,CA2C5E"}
|
package/dist/index.js
CHANGED
|
@@ -756,12 +756,25 @@ var seatCoverageSchema = z6.object({
|
|
|
756
756
|
message: "conformant cannot exceed enrolled",
|
|
757
757
|
path: ["conformant"]
|
|
758
758
|
});
|
|
759
|
+
var LEFT_FOR_OWNER_TEXT_MAX = 300;
|
|
760
|
+
var LEFT_FOR_OWNER_ENTRIES_MAX = 500;
|
|
761
|
+
var leftForOwnerDecisionSchema = z6.object({
|
|
762
|
+
item: plainText(LEFT_FOR_OWNER_TEXT_MAX),
|
|
763
|
+
question: plainText(LEFT_FOR_OWNER_TEXT_MAX)
|
|
764
|
+
}).strict();
|
|
765
|
+
var leftForOwnerSchema = z6.object({
|
|
766
|
+
tasks: z6.array(plainText(LEFT_FOR_OWNER_TEXT_MAX)).max(LEFT_FOR_OWNER_ENTRIES_MAX),
|
|
767
|
+
waiting: z6.array(leftForOwnerDecisionSchema).max(LEFT_FOR_OWNER_ENTRIES_MAX)
|
|
768
|
+
}).strict().refine((v) => v.tasks.length + v.waiting.length > 0, {
|
|
769
|
+
message: "is sent only when some work was left for the owner"
|
|
770
|
+
});
|
|
759
771
|
var observedCloseSchema = z6.object({
|
|
760
772
|
sequence: z6.number().int().min(1),
|
|
761
773
|
closedAt: utcIso8601,
|
|
762
774
|
closedBy: closedBySchema,
|
|
763
775
|
crossed: crossedSchema,
|
|
764
|
-
seatCoverage: seatCoverageSchema.nullable()
|
|
776
|
+
seatCoverage: seatCoverageSchema.nullable(),
|
|
777
|
+
leftForOwner: leftForOwnerSchema.optional()
|
|
765
778
|
}).strict();
|
|
766
779
|
var couldNotRunCheckSchema = z6.object({
|
|
767
780
|
check: plainText(),
|
|
@@ -1003,6 +1016,7 @@ function base64DecodedLength(text) {
|
|
|
1003
1016
|
const padding = text.endsWith("==") ? 2 : text.endsWith("=") ? 1 : 0;
|
|
1004
1017
|
return text.length / 4 * 3 - padding;
|
|
1005
1018
|
}
|
|
1019
|
+
var SYSTEM_PICTURE_THEMES = ["broadsheet", "flightdeck"];
|
|
1006
1020
|
var systemPictureSchema = z7.object({
|
|
1007
1021
|
svg: z7.string().min(1).refine((v) => utf8ByteLength2(v) <= SYSTEM_DRAW_SVG_MAX_BYTES, { message: "the picture is larger than 2 MB" }),
|
|
1008
1022
|
png: z7.string().min(1).refine((v) => v.length % 4 === 0 && BASE64.test(v), { message: "the image is not valid base64" }).refine((v) => base64DecodedLength(v) <= SYSTEM_DRAW_PNG_MAX_BYTES, { message: "the image is larger than 8 MB" })
|
|
@@ -3022,7 +3036,7 @@ var ownerWaitDeclarationSchema = z23.object({
|
|
|
3022
3036
|
path: ["fixedItem"]
|
|
3023
3037
|
});
|
|
3024
3038
|
var ownerWaitDeclarationsSchema = z23.object({ declarations: z23.array(ownerWaitDeclarationSchema) }).strict();
|
|
3025
|
-
var OWNER_WAIT_TOO_MANY = `This project already has ${String(OWNER_WAIT_ADDITIONS_MAX)} things added to what waits for the owner. Ask the owner to take one off in the console first.`;
|
|
3039
|
+
var OWNER_WAIT_TOO_MANY = `This project already has ${String(OWNER_WAIT_ADDITIONS_MAX)} things added to what waits for the owner. Ask the owner to take one off on their settings page in the console first; it cannot be done by typing in chat.`;
|
|
3026
3040
|
|
|
3027
3041
|
// ../events/dist/autonomy.js
|
|
3028
3042
|
import { z as z24 } from "zod";
|
|
@@ -6760,6 +6774,27 @@ function renderCouldNotRun(entries, p) {
|
|
|
6760
6774
|
function headlineText(observed, attested, checks) {
|
|
6761
6775
|
const met = attested.decision === "done-when-met";
|
|
6762
6776
|
const problemsReported = attested.walk !== null && attested.walk.verdict === "defects";
|
|
6777
|
+
const left = observed.leftForOwner;
|
|
6778
|
+
if (left !== void 0 && observed.crossed.kind === "none") {
|
|
6779
|
+
const saw = `Halfcycle saw work that waits for you: ${leftForYouSummary(left)}, each listed in this record.`;
|
|
6780
|
+
if (!met) {
|
|
6781
|
+
return [LEFT_FOR_YOU_TITLE, `${saw} The person closing the phase chose to override rather than state its finish conditions were met.`];
|
|
6782
|
+
}
|
|
6783
|
+
return problemsReported ? [LEFT_FOR_YOU_TITLE, `${saw} The person closing the phase reported problems found in its acceptance walk.`] : [LEFT_FOR_YOU_TITLE, `${saw} The person closing the phase stated its finish conditions were met, but this work is still yours to do.`];
|
|
6784
|
+
}
|
|
6785
|
+
const [title, sentence] = headlineOverCrossed(observed, met, problemsReported, checks);
|
|
6786
|
+
return left === void 0 ? [title, sentence] : [title, `${sentence} Halfcycle also saw work that waits for you: ${leftForYouSummary(left)}, each listed in this record.`];
|
|
6787
|
+
}
|
|
6788
|
+
var LEFT_FOR_YOU_TITLE = "Closed with work left for you.";
|
|
6789
|
+
function leftForYouSummary(left) {
|
|
6790
|
+
const parts = [];
|
|
6791
|
+
if (left.tasks.length > 0)
|
|
6792
|
+
parts.push(`${counted(left.tasks.length, "task", "tasks")} held for you`);
|
|
6793
|
+
if (left.waiting.length > 0)
|
|
6794
|
+
parts.push(`${counted(left.waiting.length, "decision", "decisions")} waiting for your answer`);
|
|
6795
|
+
return parts.join(" and ");
|
|
6796
|
+
}
|
|
6797
|
+
function headlineOverCrossed(observed, met, problemsReported, checks) {
|
|
6763
6798
|
switch (observed.crossed.kind) {
|
|
6764
6799
|
case "none":
|
|
6765
6800
|
if (!met) {
|
|
@@ -6827,6 +6862,18 @@ function outstanding(crossed, p) {
|
|
|
6827
6862
|
];
|
|
6828
6863
|
}
|
|
6829
6864
|
}
|
|
6865
|
+
function leftForYouLines(left, p) {
|
|
6866
|
+
if (left === void 0)
|
|
6867
|
+
return [];
|
|
6868
|
+
const lines = [`- Work left for you when the phase closed, which only you can do: ${leftForYouSummary(left)}.`];
|
|
6869
|
+
for (const title of left.tasks)
|
|
6870
|
+
lines.push(` - Task held for you: ${p.text(title)}`);
|
|
6871
|
+
for (const decision of left.waiting) {
|
|
6872
|
+
lines.push(` - Decision waiting for your answer, as the agent asked it: ${p.text(decision.question)}`);
|
|
6873
|
+
lines.push(` - On the list of what always waits for you as: ${p.text(decision.item)}`);
|
|
6874
|
+
}
|
|
6875
|
+
return lines;
|
|
6876
|
+
}
|
|
6830
6877
|
function shownBy(steps) {
|
|
6831
6878
|
const named = steps.filter((s) => s.name !== void 0).length;
|
|
6832
6879
|
if (named === 0)
|
|
@@ -6899,6 +6946,7 @@ function renderClose(heading, observed, attested, checks, p, closingRound = fals
|
|
|
6899
6946
|
`- Closed at: ${closedAtText(observed.closedAt, p)}`,
|
|
6900
6947
|
`- Signed in as: ${signedInAs(observed.closedBy, p)}`,
|
|
6901
6948
|
...outstanding(observed.crossed, p),
|
|
6949
|
+
...leftForYouLines(observed.leftForOwner, p),
|
|
6902
6950
|
machines(observed.seatCoverage, checks)
|
|
6903
6951
|
].join("\n"),
|
|
6904
6952
|
STATED_LABEL,
|
|
@@ -7210,7 +7258,58 @@ function writeRecordPair(repoRoot, phase, rawRecord, record2, io = NODE_RECORD_P
|
|
|
7210
7258
|
}
|
|
7211
7259
|
|
|
7212
7260
|
// dist/build-record/obtain.js
|
|
7213
|
-
import { relative as
|
|
7261
|
+
import { relative as relative4 } from "node:path";
|
|
7262
|
+
|
|
7263
|
+
// dist/draw/write.js
|
|
7264
|
+
var DOCS_DIR = "docs";
|
|
7265
|
+
var DIAGRAMS_DIR = "diagrams";
|
|
7266
|
+
var DIAGRAM_DIR_REL = `${DOCS_DIR}/${DIAGRAMS_DIR}`;
|
|
7267
|
+
var PNG_SIGNATURE = Uint8Array.from([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
7268
|
+
function svgOf(look) {
|
|
7269
|
+
return `${look}.svg`;
|
|
7270
|
+
}
|
|
7271
|
+
function pngOf(look) {
|
|
7272
|
+
return `${look}.png`;
|
|
7273
|
+
}
|
|
7274
|
+
var DIAGRAM_FILES = [
|
|
7275
|
+
...SYSTEM_PICTURE_THEMES.map(svgOf),
|
|
7276
|
+
...SYSTEM_PICTURE_THEMES.map(pngOf),
|
|
7277
|
+
"mmd"
|
|
7278
|
+
];
|
|
7279
|
+
var DIAGRAM_FILES_AS_LISTED = [
|
|
7280
|
+
...SYSTEM_PICTURE_THEMES.flatMap((look) => [pngOf(look), svgOf(look)]),
|
|
7281
|
+
"mmd"
|
|
7282
|
+
];
|
|
7283
|
+
|
|
7284
|
+
// dist/missing-route.js
|
|
7285
|
+
var MESSAGE = {
|
|
7286
|
+
GET: /^Route GET .* not found\.$/s,
|
|
7287
|
+
POST: /^Route POST .* not found\.$/s
|
|
7288
|
+
};
|
|
7289
|
+
function isMissingRoute(method, status, body) {
|
|
7290
|
+
if (status !== 404 || typeof body !== "object" || body === null)
|
|
7291
|
+
return false;
|
|
7292
|
+
const { error, message } = body;
|
|
7293
|
+
if (error !== "Not Found" || typeof message !== "string")
|
|
7294
|
+
return false;
|
|
7295
|
+
return MESSAGE[method].test(message);
|
|
7296
|
+
}
|
|
7297
|
+
|
|
7298
|
+
// dist/build-record/write-change.js
|
|
7299
|
+
import { basename as basename2, isAbsolute as isAbsolute4, join as join10, relative as relative3, resolve as resolve3 } from "node:path";
|
|
7300
|
+
var CHANGE_RECORD_DIR = join10("docs", "build-records", "changes");
|
|
7301
|
+
|
|
7302
|
+
// dist/change.js
|
|
7303
|
+
var CHANGE_USAGE = `${HALFCYCLE_COMMAND} change sort --request "<one line>" --touches <path>\u2026 [--contract <from>:<to>]\u2026 [--stored-data] [--standing-rule] [--new-part] [--repo <root>]
|
|
7304
|
+
${HALFCYCLE_COMMAND} change up <mini|full> (--change <id> | --phase <phase>) [--repo <root>]
|
|
7305
|
+
${HALFCYCLE_COMMAND} change done <id> [--repo <root>]`;
|
|
7306
|
+
|
|
7307
|
+
// dist/plan.js
|
|
7308
|
+
var PLAN_USAGE = `${HALFCYCLE_COMMAND} plan <phase> [--show] [--repo <root>]`;
|
|
7309
|
+
|
|
7310
|
+
// dist/review.js
|
|
7311
|
+
var REVIEW_USAGE = `${HALFCYCLE_COMMAND} review <phase> (--show | --answer <part> "<answer>") [--repo <root>]`;
|
|
7312
|
+
var RV9_LINE = `halfcycle review: this project is not signed in on this computer. ${HOOK_REMEDY}`;
|
|
7214
7313
|
|
|
7215
7314
|
// dist/open-phase.js
|
|
7216
7315
|
function writePhaseStamp(engagementId, phase, home) {
|
|
@@ -7229,20 +7328,6 @@ function writePhaseStamp(engagementId, phase, home) {
|
|
|
7229
7328
|
}
|
|
7230
7329
|
}
|
|
7231
7330
|
|
|
7232
|
-
// dist/missing-route.js
|
|
7233
|
-
var MESSAGE = {
|
|
7234
|
-
GET: /^Route GET .* not found\.$/s,
|
|
7235
|
-
POST: /^Route POST .* not found\.$/s
|
|
7236
|
-
};
|
|
7237
|
-
function isMissingRoute(method, status, body) {
|
|
7238
|
-
if (status !== 404 || typeof body !== "object" || body === null)
|
|
7239
|
-
return false;
|
|
7240
|
-
const { error, message } = body;
|
|
7241
|
-
if (error !== "Not Found" || typeof message !== "string")
|
|
7242
|
-
return false;
|
|
7243
|
-
return MESSAGE[method].test(message);
|
|
7244
|
-
}
|
|
7245
|
-
|
|
7246
7331
|
// dist/build-record/obtain.js
|
|
7247
7332
|
var REFUSAL_FOLLOW_UP = {
|
|
7248
7333
|
"still-open": "Nothing was written. The record is produced when the phase closes.",
|
|
@@ -7308,12 +7393,12 @@ async function obtainBuildRecord(credential, repoRoot, phase, io = NODE_RECORD_P
|
|
|
7308
7393
|
};
|
|
7309
7394
|
}
|
|
7310
7395
|
if (result.kind === "in-the-way") {
|
|
7311
|
-
return { kind: "exists", path:
|
|
7396
|
+
return { kind: "exists", path: relative4(repoRoot, result.path) };
|
|
7312
7397
|
}
|
|
7313
7398
|
return {
|
|
7314
7399
|
kind: "written",
|
|
7315
|
-
jsonPath:
|
|
7316
|
-
mdPath:
|
|
7400
|
+
jsonPath: relative4(repoRoot, result.jsonPath),
|
|
7401
|
+
mdPath: relative4(repoRoot, result.mdPath),
|
|
7317
7402
|
headline: latestCloseHeadline(answer.record),
|
|
7318
7403
|
stampFailure: clearStampFor(credential.engagementId, phase, home)
|
|
7319
7404
|
};
|