@difflab/pi 0.7.0 → 0.7.1

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.
Files changed (63) hide show
  1. package/README.md +7 -7
  2. package/agents/diffpi-orchestrator.md +8 -4
  3. package/agents/diffpi-plan-reviewer.md +33 -0
  4. package/agents/diffpi-planner.md +11 -8
  5. package/agents/diffpi-reviewer.md +5 -2
  6. package/agents/diffpi-worker.md +5 -8
  7. package/dist/cli/plan.d.ts +5 -4
  8. package/dist/cli/plan.d.ts.map +1 -1
  9. package/dist/cli.js +21 -6090
  10. package/dist/extensions/index.js +549 -7225
  11. package/dist/index.d.ts +2 -3
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +344 -5985
  14. package/dist/modes.d.ts +15 -0
  15. package/dist/modes.d.ts.map +1 -1
  16. package/dist/plan/verify.d.ts +15 -0
  17. package/dist/plan/verify.d.ts.map +1 -0
  18. package/dist/setup.d.ts.map +1 -1
  19. package/dist/tools/ci.d.ts +1 -1
  20. package/dist/tools/index.d.ts +1 -1
  21. package/dist/tools/index.d.ts.map +1 -1
  22. package/dist/tools/index.js +454 -7224
  23. package/dist/tools/modes.d.ts.map +1 -1
  24. package/dist/tools/plan.d.ts +3 -5
  25. package/dist/tools/plan.d.ts.map +1 -1
  26. package/package.json +1 -1
  27. package/skills/mode/SKILL.md +3 -3
  28. package/skills/plan/SKILL.md +21 -7
  29. package/skills/plan/references/design-quality.md +17 -29
  30. package/skills/plan/references/workflows/annotate.md +3 -7
  31. package/skills/plan/references/workflows/finalize.md +9 -6
  32. package/skills/plan/references/workflows/go.md +10 -7
  33. package/skills/plan/references/workflows/help.md +3 -6
  34. package/skills/plan/references/workflows/init.md +9 -4
  35. package/skills/plan/references/workflows/new.md +10 -6
  36. package/skills/plan/references/workflows/update.md +9 -6
  37. package/skills/review/SKILL.md +6 -6
  38. package/skills/review/references/workflows/address.md +8 -9
  39. package/skills/review/references/workflows/auto.md +7 -16
  40. package/skills/review/references/workflows/complete.md +5 -5
  41. package/skills/review/references/workflows/edit.md +3 -5
  42. package/skills/review/references/workflows/help.md +10 -31
  43. package/skills/review/references/workflows/merge.md +3 -4
  44. package/skills/review/references/workflows/new.md +5 -15
  45. package/skills/review/references/workflows/open.md +3 -1
  46. package/skills/review/references/workflows/publish.md +5 -6
  47. package/skills/review/references/workflows/status.md +3 -1
  48. package/templates/plan/PLAN.md +18 -11
  49. package/templates/plan/implementation.md +25 -14
  50. package/dist/plan/index.d.ts +0 -4
  51. package/dist/plan/index.d.ts.map +0 -1
  52. package/dist/plan/markdown.d.ts +0 -9
  53. package/dist/plan/markdown.d.ts.map +0 -1
  54. package/dist/plan/operations.d.ts +0 -43
  55. package/dist/plan/operations.d.ts.map +0 -1
  56. package/dist/plan/reviews.d.ts +0 -28
  57. package/dist/plan/reviews.d.ts.map +0 -1
  58. package/dist/plan/schema.d.ts +0 -249
  59. package/dist/plan/schema.d.ts.map +0 -1
  60. package/dist/plan/store.d.ts +0 -75
  61. package/dist/plan/store.d.ts.map +0 -1
  62. package/dist/plan/types.d.ts +0 -151
  63. package/dist/plan/types.d.ts.map +0 -1
@@ -1,19 +1,9 @@
1
1
  # new
2
2
 
3
- ## Arguments
3
+ **Owner/tier:** foreground or background lifecycle coordinator; no Reviewer or Worker required.
4
4
 
5
- ```text
6
- /review new [title] [--intent text] [--base branch] [--local] [--bg]
7
- ```
5
+ 1. Parse title, intent, base, target, and `--local`. Call `review_context` first with the exact selection.
6
+ 2. Call `review_new` with the same target/backend/local values. This creates a local tuicr review or remote draft PR/MR and opens it; use `review_launch_ui` only when needed.
7
+ 3. Report the created target and draft state. Do not run findings, publish, complete, or merge.
8
8
 
9
- - `title` is the optional first positional argument; quote a title containing spaces.
10
- - `--intent` and `--base` each consume the following value. `--local` is a boolean backend flag; the skill handles `--bg` before this workflow.
11
- - Flags may appear in any order. Reject unknown or duplicate flags, missing flag values, and extra positional arguments. Stating this grammar before the procedure is intentional: an explicit argument contract is the best practice for making workflow behavior predictable and preventing ambiguous execution.
12
-
13
- ## Workflow
14
-
15
- 1. Parse the arguments using the grammar above after skill-owned background dispatch. A background child follows these steps directly and must not redispatch. A remote target is the current branch; `new` creates a new review rather than opening an existing one.
16
- 2. Call `review_context` first with `local: true` when `--local` is present, otherwise `local: false`.
17
- 3. Call `review_new` with the parsed title, intent, base branch, and the same explicit backend selection (`local: true` for `--local`, otherwise `local: false`). With `--local`, it creates and opens a local tuicr working-tree review. Without `--local`, it requires a clean, pushed branch, creates a draft PR/MR, and opens that PR/MR in tuicr.
18
- 4. If a local session or remote PR/MR already exists, direct the user to `edit` instead.
19
- 5. Report the PR/MR URL and whether tuicr opened in a mux, prepared a Zed task, or returned a command. Do not generate findings, publish, complete, or merge.
9
+ Missing title/base, unsupported forge, dirty remote branch, or creation failure is an explicit error; never silently switch backend. `--bg` is one named child only.
@@ -1,3 +1,5 @@
1
1
  # open
2
2
 
3
- Call `review_context` first. Without `--local`, call `review_open` to resolve an existing PR/MR and open its URL in the system browser. It must never create a PR/MR; if none exists, direct the user to `/review new`. If browser launch fails, show the plain URL. With `--local`, call `review_new` with `local=true` to preserve local working-tree behavior.
3
+ **Owner/tier:** lifecycle coordinator, read-only.
4
+
5
+ Call `review_context` first with the exact target/backend/local, then call `review_open`. It opens an existing remote PR/MR; it never creates one. With `--local`, preserve the local behavior selected by context. Report unsupported or missing targets and browser/launch failures; do not mutate review state.
@@ -1,8 +1,7 @@
1
1
  # publish
2
2
 
3
- 1. Parse an optional PR/MR id or URL, `--local`, and one status: `--comment`, `--approve`, `--request-changes`, or `--close`. The default is comment. The skill has already handled `--bg`; a background child follows these steps without redispatch.
4
- 2. Call `review_context` first with the target and `local: true` so the exact tuicr PR session can be inspected. If no matching local session exists, continue with `local: false` only for forge-native pending review work. If that session exists and has drafts, publish through the local promotion path even when the user omitted `--local`. Use `local: false` only when no matching tuicr session exists or when the target has forge-native pending review work.
5
- 3. The local promotion path reads the exact tuicr session. A local line comment on the same file and line as an existing remote thread is treated as a response, not a new comment. A leading `[REOPEN]`, `[RESOLVE]`, or `[DELETE]` changes the thread state; the marker is removed from the response body. `[DELETE]` deletes the matched remote thread when the forge supports it. Other unpublished line comments become new review comments. The tool follows the stored local overlay path, posts unpublished replies to their remote threads, and then publishes the selected status. Question replies remain open. The tool does not post an overall review comment.
6
- 4. For a forge-native review without a matching tuicr session, call `review_publish` without `local`. Existing pending forge comments already contain provenance, so the tool only publishes them with the selected status and no overall comment.
7
- 5. Comment, approve, and request-changes mark a draft PR/MR ready before publication. Close publishes pending work as comment status and then closes the PR/MR. GitLab rejects request-changes because it has no equivalent review state.
8
- 6. Report promoted comment and reply counts, the public status, and the final PR/MR state. Publishing never merges. If a response cannot be matched by file and line, report it as a new comment rather than silently attaching it to the wrong thread.
3
+ **Owner/tier:** lifecycle coordinator; no Reviewer or Worker.
4
+
5
+ 1. Parse target, `--local`, and one status: comment (default), approve, request-changes, or close. Call `review_context` first and preserve the selected backend. A local promotion may be used only when context identifies the matching local session; never silently switch.
6
+ 2. Call `review_publish` with the same target/backend/local. It promotes/stages pending local work where applicable and publishes the selected status; remote comments remain pending until this call. Comment/approve/request-changes mark remote drafts ready; close publishes comment then closes. GitLab may reject request-changes.
7
+ 3. Report promoted bodies/comments/replies, status, and final state. Publish never merges. Unsupported target, unmatched response, or forge failure is explicit.
@@ -1,3 +1,5 @@
1
1
  # status
2
2
 
3
- Call `review_context` first, then `review_status` with the same target and local setting. Report branch, worktree counts, local and remote review state, URLs, and remote tuicr state. Status must remain useful when no forge or tuicr binary is installed.
3
+ **Owner/tier:** lifecycle coordinator, read-only.
4
+
5
+ Call `review_context` first with the exact target/backend/local, then `review_status` with the same values. Report branch, worktree, forge/local review, URLs, and tuicr state. Missing or unsupported targets are errors; status never creates, publishes, completes, merges, or changes comments.
@@ -1,13 +1,10 @@
1
- <!-- diffpi-plan: {"schemaVersion":1,"id":"{{id}}","revision":0,"branch":"{{branch}}","issueId":"{{issue_id}}","issueUrl":"{{issue_url}}","status":"draft","createdAt":"{{created_at}}","updatedAt":"{{updated_at}}"} -->
2
-
3
1
  # {{title}}
4
2
 
5
3
  - **Plan ID:** {{id}}
6
4
  - **Branch:** {{branch}}
5
+ - **Status:** draft
7
6
  - **Issue:** {{issue_id}}
8
7
  - **Issue URL:** {{issue_url}}
9
- - **Status:** draft
10
- - **Revision:** 0
11
8
 
12
9
  ## Intent
13
10
 
@@ -15,26 +12,36 @@
15
12
 
16
13
  ## Requirements
17
14
 
18
- <!-- Add requirements. -->
15
+ <!-- Add concrete requirements. -->
19
16
 
20
17
  ## Design
21
18
 
22
19
  ### Big Ideas
23
20
 
24
- <!-- Describe the main approach. -->
21
+ <!-- Describe the outcome-oriented design. -->
25
22
 
26
23
  ### Key API Addition/Updates
27
24
 
28
- <!-- Describe public API changes. -->
25
+ <!-- Describe public or internal contract changes. -->
29
26
 
30
27
  ### Consequences
31
28
 
32
- <!-- Describe trade-offs and limitations. -->
29
+ <!-- Describe before/after behavior, risks, and trade-offs. -->
30
+
31
+ ## Phases
32
+
33
+ <!-- Use numbered phases. State prerequisites on the phase only; do not add task dependencies here. -->
34
+
35
+ ### Phase 1: <!-- phase title -->
33
36
 
34
- ## Implementation
37
+ - **Phase ID:** <!-- assign a stable phase ID -->
38
+ - **Prerequisites:** <!-- list phase IDs, or “None” -->
39
+ - **Objective:** <!-- state the outcome -->
40
+ - **Constraints:** <!-- phase guardrails or None; do not repeat them in briefs -->
35
41
 
36
- <!-- Add phases with one complete plan_apply_revision request. -->
42
+ - [ ] <!-- assign a stable task ID --> Task title
43
+ - [ ] <!-- assign a stable task ID --> Another task title
37
44
 
38
45
  ## References
39
46
 
40
- <!-- Add references. -->
47
+ <!-- Add repository or external references. -->
@@ -1,30 +1,41 @@
1
- <!-- diffpi-implementation: {"schemaVersion":1,"planRevision":{{plan_revision}},"ordinal":{{phase_ordinal}},"phaseId":"{{phase_id}}"} -->
2
-
3
1
  # Phase {{phase_ordinal}}: {{phase_title}}
4
2
 
5
3
  - **Phase ID:** {{phase_id}}
6
- - **Plan Revision:** {{plan_revision}}
7
-
8
- ## Summary
9
-
10
- {{phase_summary}}
4
+ - **Prerequisites:** {{phase_prerequisites}}
11
5
 
12
6
  ## Objective
13
7
 
14
8
  {{phase_objective}}
15
9
 
16
- ## Tasks
10
+ ## Files Affected
17
11
 
18
- {{phase_tasks}}
12
+ <!-- This is the sole file scope for this phase. Use one fenced text tree; label each file leaf [ADD], [MODIFY], [REMOVE], [MOVE from: path], or [VERIFY]. Do not repeat file scopes in tasks or PLAN.md. -->
19
13
 
20
- ## API Changes
14
+ ```text
15
+ Phase {{phase_ordinal}}/
16
+ ├── [MODIFY] <!-- exact/path/to/implementation-file -->
17
+ └── [VERIFY] <!-- exact/path/to/test-or-check -->
18
+ {{phase_files_affected}}
19
+ ```
21
20
 
22
- {{phase_api}}
21
+ ## Tasks
22
+
23
+ <!-- Keep tasks flat and in phase order. Repeat this shape for each task. -->
23
24
 
24
- ## Libraries and Algorithms
25
+ ### 1. <!-- task title -->
25
26
 
26
- {{phase_libraries}}
27
+ - **Task ID:** <!-- stable task ID -->
28
+ - **Steps:**
29
+ 1. <!-- ordered implementation action -->
30
+ 2. <!-- ordered implementation action -->
31
+ - **Verify:**
32
+ - <!-- command or inspection that proves this task -->
33
+ - **Acceptance:** <!-- observable result -->
34
+
35
+ {{phase_tasks}}
27
36
 
28
37
  ## Implementation Constraints
29
38
 
30
- {{phase_constraints}}
39
+ <!-- Free-form implementation details, not a restatement of PLAN.md phase constraints. Add only useful optional headings: Required Libraries & Technology Choices, Key Algorithm Specifications, Core Invariants. Refer to the PLAN.md phase ID instead of repeating a phase guardrail. -->
40
+
41
+ {{phase_implementation_constraints}}
@@ -1,4 +0,0 @@
1
- export type { PlanCiRetry, PlanCiUpdate, PlanStatusUpdate, PlanStatusUpdateResult } from './operations';
2
- export { createPlanStore, type InitPlanInput, type NewPlanLogEntry, type PlanResolution, type PlanStore, type PlanStoreOptions, type ResolvePlanFilters, } from './store';
3
- export type * from './types';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plan/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACxG,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,SAAS,CAAC;AACjB,mBAAmB,SAAS,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { PlanDocument, PlanImplementationBrief, PlanPhase, PlanRecord, PlanValidationIssue, PlanValidationOptions } from './types';
2
- export declare function countDesignWords(plan: PlanDocument): number;
3
- export declare function validatePlanDocument(plan: PlanDocument, options?: PlanValidationOptions): PlanValidationIssue[];
4
- export declare function validatePlanBriefs(plan: PlanDocument, briefs: readonly PlanImplementationBrief[]): PlanValidationIssue[];
5
- export declare function validatePlanRecord(record: PlanRecord, options?: PlanValidationOptions): Promise<PlanValidationIssue[]>;
6
- export declare function renderImplementationBrief(planRevision: number, ordinal: number, phase: PlanPhase, brief: PlanImplementationBrief): string;
7
- export declare function renderPlanDocument(plan: PlanDocument, previousSource?: string): string;
8
- export declare function parsePlanDocument(source: string, ref?: string): PlanDocument;
9
- //# sourceMappingURL=markdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/plan/markdown.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,SAAS,EACT,UAAU,EAGV,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAgDjB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAM3D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,qBAA0B,GAAG,mBAAmB,EAAE,CAuDnH;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,SAAS,uBAAuB,EAAE,GACzC,mBAAmB,EAAE,CAqDvB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAMhC;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,uBAAuB,GAC7B,MAAM,CAsDR;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAgEtF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAY,GAAG,YAAY,CA6B/E"}
@@ -1,43 +0,0 @@
1
- import type { SubagentEscalation } from '../extensions/subagentx';
2
- import type { PlanStore } from './store';
3
- import type { PlanCiStatus, PlanCommit, PlanDocument, PlanPhaseStatus, PlanRecord, PlanStatus } from './types';
4
- export interface PlanStatusUpdate {
5
- target: {
6
- type: 'plan' | 'phase' | 'task';
7
- id?: string;
8
- };
9
- expectedStatus: PlanStatus | PlanPhaseStatus;
10
- status: PlanStatus | PlanPhaseStatus;
11
- actor: string;
12
- message: string;
13
- executionId?: string;
14
- evidence?: string[];
15
- blockedReason?: string;
16
- attempts?: string[];
17
- needsUserDecision?: boolean;
18
- commit?: PlanCommit;
19
- }
20
- export interface PlanStatusUpdateResult {
21
- record: PlanRecord;
22
- escalation?: SubagentEscalation;
23
- }
24
- export interface PlanCiUpdate {
25
- phaseId: string;
26
- sha: string;
27
- status: Exclude<PlanCiStatus, 'pending'>;
28
- actor: string;
29
- executionId: string;
30
- detail: string;
31
- }
32
- export interface PlanCiRetry {
33
- phaseId: string;
34
- sha: string;
35
- actor: string;
36
- executionId: string;
37
- reason: string;
38
- }
39
- export declare function updatePlanStatus(store: PlanStore, cwd: string, query: string, input: PlanStatusUpdate): Promise<PlanStatusUpdateResult>;
40
- export declare function updatePlanCi(store: PlanStore, cwd: string, query: string, input: PlanCiUpdate): Promise<PlanRecord>;
41
- export declare function retryPlanCi(store: PlanStore, cwd: string, query: string, input: PlanCiRetry): Promise<PlanRecord>;
42
- export declare function assertPhasePushEligible(plan: PlanDocument, phaseId: string, executionId: string): void;
43
- //# sourceMappingURL=operations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/plan/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,YAAY,EAEZ,eAAe,EACf,UAAU,EACV,UAAU,EAGX,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,cAAc,EAAE,UAAU,GAAG,eAAe,CAAC;IAC7C,MAAM,EAAE,UAAU,GAAG,eAAe,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,sBAAsB,CAAC,CAkIjC;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,UAAU,CAAC,CAwCrB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAiBtG"}
@@ -1,28 +0,0 @@
1
- import type { PlanRecord } from './types';
2
- interface PlanReviewDump {
3
- schemaVersion: 1;
4
- planId: string;
5
- planRevision: number;
6
- source: 'tuicr';
7
- sourceId: string;
8
- planSource: string;
9
- content: string;
10
- }
11
- interface PlanReview {
12
- path: string;
13
- dump: PlanReviewDump;
14
- }
15
- interface PlanReviewRuntime {
16
- execute?: (command: string, args: string[], cwd: string, interactive: boolean) => Promise<{
17
- code: number;
18
- stdout: string;
19
- stderr: string;
20
- }>;
21
- }
22
- export declare function createPlanReview(record: PlanRecord, runtime?: PlanReviewRuntime): Promise<{
23
- code: number;
24
- review: PlanReview;
25
- }>;
26
- export declare function readPlanReview(record: PlanRecord): Promise<PlanReview | undefined>;
27
- export {};
28
- //# sourceMappingURL=reviews.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reviews.d.ts","sourceRoot":"","sources":["../../src/plan/reviews.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,UAAU,cAAc;IACtB,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,KACjB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CA4B/C;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAiBxF"}
@@ -1,249 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const planContextParametersSchema: z.ZodObject<{
3
- cwd: z.ZodOptional<z.ZodString>;
4
- plan: z.ZodOptional<z.ZodString>;
5
- branch: z.ZodOptional<z.ZodString>;
6
- statuses: z.ZodOptional<z.ZodArray<z.ZodEnum<{
7
- draft: "draft";
8
- ready: "ready";
9
- in_progress: "in_progress";
10
- blocked: "blocked";
11
- completed: "completed";
12
- }>>>;
13
- }, z.core.$strict>;
14
- export declare const planInitParametersSchema: z.ZodObject<{
15
- cwd: z.ZodOptional<z.ZodString>;
16
- shortSlug: z.ZodString;
17
- branch: z.ZodOptional<z.ZodString>;
18
- title: z.ZodOptional<z.ZodString>;
19
- intent: z.ZodOptional<z.ZodString>;
20
- issueId: z.ZodOptional<z.ZodString>;
21
- issueUrl: z.ZodOptional<z.ZodURL>;
22
- request: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
23
- kind: z.ZodLiteral<"annotation">;
24
- text: z.ZodString;
25
- response: z.ZodString;
26
- }, z.core.$strict>, z.ZodObject<{
27
- kind: z.ZodLiteral<"user">;
28
- text: z.ZodString;
29
- response: z.ZodOptional<z.ZodString>;
30
- }, z.core.$strict>, z.ZodObject<{
31
- kind: z.ZodLiteral<"blocker">;
32
- text: z.ZodString;
33
- response: z.ZodOptional<z.ZodString>;
34
- }, z.core.$strict>], "kind">>;
35
- open: z.ZodOptional<z.ZodBoolean>;
36
- }, z.core.$strict>;
37
- export declare const planApplyRevisionParametersSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
38
- request: z.ZodDiscriminatedUnion<[z.ZodObject<{
39
- kind: z.ZodLiteral<"annotation">;
40
- text: z.ZodString;
41
- response: z.ZodString;
42
- }, z.core.$strict>, z.ZodObject<{
43
- kind: z.ZodLiteral<"user">;
44
- text: z.ZodString;
45
- response: z.ZodOptional<z.ZodString>;
46
- }, z.core.$strict>, z.ZodObject<{
47
- kind: z.ZodLiteral<"blocker">;
48
- text: z.ZodString;
49
- response: z.ZodOptional<z.ZodString>;
50
- }, z.core.$strict>], "kind">;
51
- title: z.ZodString;
52
- intent: z.ZodString;
53
- requirements: z.ZodArray<z.ZodString>;
54
- design: z.ZodObject<{
55
- bigIdeas: z.ZodString;
56
- keyApiUpdates: z.ZodString;
57
- consequences: z.ZodString;
58
- }, z.core.$strict>;
59
- references: z.ZodArray<z.ZodObject<{
60
- id: z.ZodString;
61
- value: z.ZodString;
62
- }, z.core.$strict>>;
63
- phases: z.ZodArray<z.ZodObject<{
64
- id: z.ZodString;
65
- title: z.ZodString;
66
- objective: z.ZodString;
67
- dependencies: z.ZodArray<z.ZodString>;
68
- tasks: z.ZodArray<z.ZodObject<{
69
- id: z.ZodString;
70
- title: z.ZodString;
71
- dependencies: z.ZodArray<z.ZodString>;
72
- }, z.core.$strict>>;
73
- }, z.core.$strict>>;
74
- briefs: z.ZodArray<z.ZodObject<{
75
- phaseId: z.ZodString;
76
- summary: z.ZodString;
77
- apiChanges: z.ZodArray<z.ZodString>;
78
- libraries: z.ZodArray<z.ZodString>;
79
- constraints: z.ZodArray<z.ZodString>;
80
- tasks: z.ZodArray<z.ZodObject<{
81
- taskId: z.ZodString;
82
- steps: z.ZodArray<z.ZodString>;
83
- fileScopes: z.ZodArray<z.ZodString>;
84
- acceptanceCriteria: z.ZodArray<z.ZodString>;
85
- }, z.core.$strict>>;
86
- }, z.core.$strict>>;
87
- mode: z.ZodLiteral<"create">;
88
- cwd: z.ZodOptional<z.ZodString>;
89
- shortSlug: z.ZodString;
90
- branch: z.ZodOptional<z.ZodString>;
91
- issueId: z.ZodOptional<z.ZodString>;
92
- issueUrl: z.ZodOptional<z.ZodURL>;
93
- }, z.core.$strict>, z.ZodObject<{
94
- request: z.ZodDiscriminatedUnion<[z.ZodObject<{
95
- kind: z.ZodLiteral<"annotation">;
96
- text: z.ZodString;
97
- response: z.ZodString;
98
- }, z.core.$strict>, z.ZodObject<{
99
- kind: z.ZodLiteral<"user">;
100
- text: z.ZodString;
101
- response: z.ZodOptional<z.ZodString>;
102
- }, z.core.$strict>, z.ZodObject<{
103
- kind: z.ZodLiteral<"blocker">;
104
- text: z.ZodString;
105
- response: z.ZodOptional<z.ZodString>;
106
- }, z.core.$strict>], "kind">;
107
- title: z.ZodString;
108
- intent: z.ZodString;
109
- requirements: z.ZodArray<z.ZodString>;
110
- design: z.ZodObject<{
111
- bigIdeas: z.ZodString;
112
- keyApiUpdates: z.ZodString;
113
- consequences: z.ZodString;
114
- }, z.core.$strict>;
115
- references: z.ZodArray<z.ZodObject<{
116
- id: z.ZodString;
117
- value: z.ZodString;
118
- }, z.core.$strict>>;
119
- phases: z.ZodArray<z.ZodObject<{
120
- id: z.ZodString;
121
- title: z.ZodString;
122
- objective: z.ZodString;
123
- dependencies: z.ZodArray<z.ZodString>;
124
- tasks: z.ZodArray<z.ZodObject<{
125
- id: z.ZodString;
126
- title: z.ZodString;
127
- dependencies: z.ZodArray<z.ZodString>;
128
- }, z.core.$strict>>;
129
- }, z.core.$strict>>;
130
- briefs: z.ZodArray<z.ZodObject<{
131
- phaseId: z.ZodString;
132
- summary: z.ZodString;
133
- apiChanges: z.ZodArray<z.ZodString>;
134
- libraries: z.ZodArray<z.ZodString>;
135
- constraints: z.ZodArray<z.ZodString>;
136
- tasks: z.ZodArray<z.ZodObject<{
137
- taskId: z.ZodString;
138
- steps: z.ZodArray<z.ZodString>;
139
- fileScopes: z.ZodArray<z.ZodString>;
140
- acceptanceCriteria: z.ZodArray<z.ZodString>;
141
- }, z.core.$strict>>;
142
- }, z.core.$strict>>;
143
- mode: z.ZodLiteral<"amend">;
144
- cwd: z.ZodOptional<z.ZodString>;
145
- plan: z.ZodString;
146
- expectedPlanRevision: z.ZodNumber;
147
- }, z.core.$strict>], "mode">;
148
- export declare const planValidateParametersSchema: z.ZodObject<{
149
- cwd: z.ZodOptional<z.ZodString>;
150
- plan: z.ZodString;
151
- strict: z.ZodOptional<z.ZodBoolean>;
152
- }, z.core.$strict>;
153
- export declare const planLogProgressParametersSchema: z.ZodObject<{
154
- cwd: z.ZodOptional<z.ZodString>;
155
- plan: z.ZodString;
156
- actor: z.ZodString;
157
- message: z.ZodString;
158
- executionId: z.ZodOptional<z.ZodString>;
159
- phaseId: z.ZodOptional<z.ZodString>;
160
- taskId: z.ZodOptional<z.ZodString>;
161
- evidence: z.ZodOptional<z.ZodArray<z.ZodString>>;
162
- data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
163
- }, z.core.$strict>;
164
- export declare const planRunGatesParametersSchema: z.ZodObject<{
165
- cwd: z.ZodOptional<z.ZodString>;
166
- plan: z.ZodString;
167
- phaseId: z.ZodString;
168
- expectedPhaseRevision: z.ZodNumber;
169
- executionId: z.ZodString;
170
- actor: z.ZodString;
171
- }, z.core.$strict>;
172
- export declare const planRecordCiParametersSchema: z.ZodObject<{
173
- cwd: z.ZodOptional<z.ZodString>;
174
- plan: z.ZodString;
175
- phaseId: z.ZodString;
176
- sha: z.ZodString;
177
- executionId: z.ZodString;
178
- actor: z.ZodString;
179
- status: z.ZodEnum<{
180
- skipped: "skipped";
181
- passed: "passed";
182
- failed: "failed";
183
- }>;
184
- detail: z.ZodString;
185
- retryReason: z.ZodOptional<z.ZodString>;
186
- }, z.core.$strict>;
187
- export declare const planLookupParametersSchema: z.ZodObject<{
188
- cwd: z.ZodOptional<z.ZodString>;
189
- plan: z.ZodOptional<z.ZodString>;
190
- }, z.core.$strict>;
191
- export declare const planStartExecutionParametersSchema: z.ZodObject<{
192
- cwd: z.ZodOptional<z.ZodString>;
193
- plan: z.ZodString;
194
- commitMode: z.ZodEnum<{
195
- push: "push";
196
- "no-commit": "no-commit";
197
- commit: "commit";
198
- }>;
199
- actor: z.ZodString;
200
- }, z.core.$strict>;
201
- export declare const planUpdateStatusParametersSchema: z.ZodObject<{
202
- cwd: z.ZodOptional<z.ZodString>;
203
- plan: z.ZodString;
204
- target: z.ZodObject<{
205
- type: z.ZodEnum<{
206
- phase: "phase";
207
- task: "task";
208
- plan: "plan";
209
- }>;
210
- id: z.ZodOptional<z.ZodString>;
211
- }, z.core.$strict>;
212
- expectedStatus: z.ZodEnum<{
213
- draft: "draft";
214
- ready: "ready";
215
- in_progress: "in_progress";
216
- blocked: "blocked";
217
- completed: "completed";
218
- pending: "pending";
219
- skipped: "skipped";
220
- }>;
221
- status: z.ZodEnum<{
222
- draft: "draft";
223
- ready: "ready";
224
- in_progress: "in_progress";
225
- blocked: "blocked";
226
- completed: "completed";
227
- pending: "pending";
228
- skipped: "skipped";
229
- }>;
230
- actor: z.ZodString;
231
- message: z.ZodString;
232
- executionId: z.ZodOptional<z.ZodString>;
233
- evidence: z.ZodOptional<z.ZodArray<z.ZodString>>;
234
- blockedReason: z.ZodOptional<z.ZodString>;
235
- attempts: z.ZodOptional<z.ZodArray<z.ZodString>>;
236
- needsUserDecision: z.ZodOptional<z.ZodBoolean>;
237
- commit: z.ZodOptional<z.ZodObject<{
238
- sha: z.ZodString;
239
- subject: z.ZodString;
240
- completedAt: z.ZodString;
241
- pushedAt: z.ZodOptional<z.ZodString>;
242
- ci: z.ZodOptional<z.ZodObject<{
243
- status: z.ZodLiteral<"pending">;
244
- startedAt: z.ZodString;
245
- }, z.core.$strict>>;
246
- }, z.core.$strict>>;
247
- }, z.core.$strict>;
248
- export type PlanRevisionDraft = z.infer<typeof planApplyRevisionParametersSchema>;
249
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/plan/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0DxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;kBAO7B,CAAC;AAEZ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;kBAY1B,CAAC;AAEZ,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAqB5C,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;kBAE9B,CAAC;AAEZ,eAAO,MAAM,+BAA+B;;;;;;;;;;kBAYjC,CAAC;AAEZ,eAAO,MAAM,4BAA4B;;;;;;;kBAS9B,CAAC;AAEZ,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;kBAY9B,CAAC;AAEZ,eAAO,MAAM,0BAA0B;;;kBAAkE,CAAC;AAE1G,eAAO,MAAM,kCAAkC;;;;;;;;;kBAOpC,CAAC;AAEZ,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA+BlC,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
@@ -1,75 +0,0 @@
1
- import { type DiffpiLogEntry, type NewLogEntry } from '../log';
2
- import type { PlanAuthoringRequest, PlanDocument, PlanImplementationBrief, PlanLogEntry, PlanRecord, PlanStatus } from './types';
3
- export type NewPlanLogEntry = NewLogEntry<PlanLogEntry & DiffpiLogEntry>;
4
- export interface PlanStoreOptions {
5
- homeDir?: string;
6
- now?: () => Date;
7
- bundledTemplatesDir?: string;
8
- }
9
- export interface ResolvePlanFilters {
10
- branch?: string;
11
- statuses?: readonly PlanStatus[];
12
- }
13
- export interface PlanResolution {
14
- candidates: PlanRecord[];
15
- record?: PlanRecord;
16
- ambiguous: boolean;
17
- }
18
- export interface PlanTaskDraft {
19
- id: string;
20
- title: string;
21
- dependencies: string[];
22
- }
23
- export interface PlanPhaseDraft {
24
- id: string;
25
- title: string;
26
- objective: string;
27
- dependencies: string[];
28
- tasks: PlanTaskDraft[];
29
- }
30
- interface PlanRevisionContent {
31
- request: PlanAuthoringRequest;
32
- title: string;
33
- intent: string;
34
- requirements: string[];
35
- design: PlanDocument['design'];
36
- references: PlanDocument['references'];
37
- phases: PlanPhaseDraft[];
38
- briefs: PlanImplementationBrief[];
39
- }
40
- export interface CreatePlanRevisionRequest extends PlanRevisionContent {
41
- mode: 'create';
42
- shortSlug: string;
43
- branch: string;
44
- issueId?: string;
45
- issueUrl?: string;
46
- }
47
- export interface AmendPlanRevisionRequest extends PlanRevisionContent {
48
- mode: 'amend';
49
- plan: string;
50
- expectedPlanRevision: number;
51
- }
52
- export type PlanRevisionRequest = CreatePlanRevisionRequest | AmendPlanRevisionRequest;
53
- export interface InitPlanInput {
54
- cwd: string;
55
- shortSlug: string;
56
- branch: string;
57
- title?: string;
58
- intent?: string;
59
- issueId?: string;
60
- issueUrl?: string;
61
- request?: PlanAuthoringRequest;
62
- }
63
- export interface PlanStore {
64
- context(cwd: string, query?: string, filters?: ResolvePlanFilters): Promise<PlanResolution>;
65
- init(input: InitPlanInput): Promise<PlanRecord>;
66
- read(cwd: string, query: string, filters?: ResolvePlanFilters): Promise<PlanRecord>;
67
- mutate(cwd: string, query: string, operation: string, update: (document: PlanDocument) => PlanDocument | Promise<PlanDocument>): Promise<PlanRecord>;
68
- applyRevision(cwd: string, request: PlanRevisionRequest): Promise<PlanRecord>;
69
- log(cwd: string, query: string, event: NewPlanLogEntry): Promise<PlanLogEntry>;
70
- }
71
- export declare function planRecordName(shortSlug: string, date?: Date): string;
72
- export declare function resolvePlan(cwd: string, query?: string, filters?: ResolvePlanFilters, options?: PlanStoreOptions): Promise<PlanResolution>;
73
- export declare function createPlanStore(options?: PlanStoreOptions): PlanStore;
74
- export {};
75
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/plan/store.ts"],"names":[],"mappings":"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"}