ralphctl 0.2.5 → 0.3.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 (55) hide show
  1. package/dist/add-CIM72NE3.mjs +18 -0
  2. package/dist/add-GX7P7XTT.mjs +16 -0
  3. package/dist/bootstrap-FMHG6DRY.mjs +11 -0
  4. package/dist/chunk-3QBEBKMZ.mjs +103 -0
  5. package/dist/{chunk-EDJX7TT6.mjs → chunk-57UWLHRH.mjs} +22 -2
  6. package/dist/chunk-747KW2RW.mjs +24 -0
  7. package/dist/chunk-7JLZQICD.mjs +228 -0
  8. package/dist/{chunk-7TG3EAQ2.mjs → chunk-CFUVE2BP.mjs} +1 -5
  9. package/dist/chunk-CSC4TBJB.mjs +5546 -0
  10. package/dist/{chunk-IB6OCKZW.mjs → chunk-CTP2A436.mjs} +60 -55
  11. package/dist/{chunk-UBPZHHCD.mjs → chunk-D2YGPLIV.mjs} +84 -41
  12. package/dist/chunk-EPDR6VO5.mjs +5109 -0
  13. package/dist/{chunk-QBXHAXHI.mjs → chunk-FKMKOWLA.mjs} +154 -208
  14. package/dist/{chunk-OEUJDSHY.mjs → chunk-IWXBJD2D.mjs} +1 -1
  15. package/dist/chunk-JOQO4HMM.mjs +269 -0
  16. package/dist/{chunk-EUNAUHC3.mjs → chunk-NUYQK5MN.mjs} +80 -29
  17. package/dist/{chunk-JRFOUFD3.mjs → chunk-YCDUVPRT.mjs} +32 -52
  18. package/dist/cli.mjs +171 -3996
  19. package/dist/create-7WFSCMP4.mjs +15 -0
  20. package/dist/{handle-TA4MYNQJ.mjs → handle-BBAZJ44Y.mjs} +2 -2
  21. package/dist/mount-U7QXVB5Q.mjs +6804 -0
  22. package/dist/{project-YONEJICR.mjs → project-2IE7VWDB.mjs} +9 -5
  23. package/dist/prompts/harness-context.md +3 -3
  24. package/dist/prompts/ideate-auto.md +8 -10
  25. package/dist/prompts/ideate.md +3 -2
  26. package/dist/prompts/plan-auto.md +12 -12
  27. package/dist/prompts/plan-common.md +47 -19
  28. package/dist/prompts/plan-interactive.md +8 -8
  29. package/dist/prompts/signals-evaluation.md +1 -1
  30. package/dist/prompts/sprint-feedback.md +48 -0
  31. package/dist/prompts/task-evaluation-resume.md +12 -5
  32. package/dist/prompts/task-evaluation.md +37 -33
  33. package/dist/prompts/task-execution.md +33 -24
  34. package/dist/prompts/ticket-refine.md +6 -5
  35. package/dist/prompts/validation-checklist.md +10 -10
  36. package/dist/{resolver-RXEY6EJE.mjs → resolver-EOE5WUMV.mjs} +5 -5
  37. package/dist/{sprint-FGLWYWKX.mjs → sprint-OGOFEJJH.mjs} +7 -9
  38. package/dist/start-WG7VMEB2.mjs +17 -0
  39. package/package.json +15 -13
  40. package/dist/add-3T225IX5.mjs +0 -16
  41. package/dist/add-6A5432U2.mjs +0 -16
  42. package/dist/chunk-742XQ7FL.mjs +0 -551
  43. package/dist/chunk-7LZ6GOGN.mjs +0 -53
  44. package/dist/chunk-CSICORGV.mjs +0 -4333
  45. package/dist/chunk-DUU5346E.mjs +0 -59
  46. package/dist/create-MYGOWO2F.mjs +0 -12
  47. package/dist/multiline-OHSNFCRG.mjs +0 -40
  48. package/dist/wizard-XZ7OGBCJ.mjs +0 -193
  49. package/schemas/config.schema.json +0 -30
  50. package/schemas/ideate-output.schema.json +0 -22
  51. package/schemas/projects.schema.json +0 -58
  52. package/schemas/requirements-output.schema.json +0 -24
  53. package/schemas/sprint.schema.json +0 -109
  54. package/schemas/task-import.schema.json +0 -56
  55. package/schemas/tasks.schema.json +0 -98
@@ -1,8 +1,9 @@
1
1
  # Requirements Refinement Protocol
2
2
 
3
- You are a requirements analyst. Your goal is to produce a complete, implementation-agnostic specification that answers
4
- WHAT needs to be built, not HOW. You clarify ambiguity through focused questions and stop when acceptance criteria are
5
- unambiguous.
3
+ You are a requirements analyst. Produce a complete, implementation-agnostic specification that answers WHAT needs to be
4
+ built, not HOW. Think carefully about what the ticket says, what it assumes, and what it leaves ambiguous before asking
5
+ anything — a question the ticket already answers is a wasted turn. Clarify genuine gaps through focused questions, and
6
+ stop when acceptance criteria are unambiguous.
6
7
 
7
8
  <constraints>
8
9
 
@@ -117,8 +118,8 @@ Before writing to file, verify ALL of these are true:
117
118
 
118
119
  ### Step 6: Write to File
119
120
 
120
- Write the requirements to the output file after the user approves. Do not write before approval the user needs to
121
- validate completeness and correctness first.
121
+ Write the requirements to the output file only after the user approves they need to validate completeness and
122
+ correctness first.
122
123
 
123
124
  ## Asking Clarifying Questions
124
125
 
@@ -2,13 +2,13 @@
2
2
 
3
3
  Before writing the JSON output, verify EVERY item:
4
4
 
5
- 1. **Requirements complete** — Problem statement, acceptance criteria, and scope boundaries are all present (when applicable)
6
- 2. **No file overlap** — No two tasks modify the same files (or overlap is explicitly delineated in steps)
7
- 3. **Foundations before dependents** — Tasks are ordered so prerequisites come first
8
- 4. **Valid dependencies** — All `blockedBy` references point to earlier tasks with real code dependencies
9
- 5. **Maximized parallelism** — Independent tasks do NOT block each other unnecessarily
10
- 6. **Precise steps** — Every task has 3+ specific, actionable steps with file references
11
- 7. **Verification steps** — Every task ends with project-appropriate verification commands
12
- 8. **`projectPath` assigned** — Every task uses a path from the available repositories
13
- 9. **Verification criteria** — Every task has 2-4 `verificationCriteria` that are testable and unambiguous
14
- 10. **Output format compliance** — Output matches the schema exactly: no markdown fences around JSON, no commentary, no surrounding text. The harness parses raw output as JSON.
5
+ 1. **Requirements complete** — problem statement, acceptance criteria, and scope boundaries are all present (when applicable)
6
+ 2. **Exclusive file ownership** — each file is owned by exactly one task (or overlap is explicitly delineated in steps)
7
+ 3. **Foundations before dependents** — tasks are ordered so prerequisites come first
8
+ 4. **Valid dependencies** — every `blockedBy` reference points to an earlier task with a real code dependency
9
+ 5. **Maximized parallelism** — independent tasks run in parallel; use `blockedBy` only when there is a genuine code dependency
10
+ 6. **Precise steps** — every task has specific, actionable steps with file references — as many as the scope needs (a small task may have 2 steps, a larger coherent one may have 8+)
11
+ 7. **Verification steps** — every task ends with project-appropriate verification commands
12
+ 8. **`projectPath` assigned** — every task uses a path from the available repositories
13
+ 9. **Verification criteria** — every task has 2-4 `verificationCriteria` that are testable and unambiguous
14
+ 10. **Raw JSON output** — the output is valid JSON matching the schema exactly; the harness parses the output directly as JSON, so emit it without markdown fences, commentary, or surrounding prose
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wrapAsync
4
- } from "./chunk-OEUJDSHY.mjs";
4
+ } from "./chunk-IWXBJD2D.mjs";
5
5
  import {
6
6
  IOError
7
- } from "./chunk-EDJX7TT6.mjs";
7
+ } from "./chunk-57UWLHRH.mjs";
8
8
 
9
- // src/completion/resolver.ts
9
+ // src/integration/cli/completion/resolver.ts
10
10
  var dynamicResolvers = {
11
11
  "--project": async () => {
12
12
  const result = await wrapAsync(
13
13
  async () => {
14
- const { listProjects } = await import("./project-YONEJICR.mjs");
14
+ const { listProjects } = await import("./project-2IE7VWDB.mjs");
15
15
  return listProjects();
16
16
  },
17
17
  (err) => new IOError("Failed to load projects for completion", err instanceof Error ? err : void 0)
@@ -45,7 +45,7 @@ var configValueCompletions = {
45
45
  async function getSprintCompletions() {
46
46
  const result = await wrapAsync(
47
47
  async () => {
48
- const { listSprints } = await import("./sprint-FGLWYWKX.mjs");
48
+ const { listSprints } = await import("./sprint-OGOFEJJH.mjs");
49
49
  return listSprints();
50
50
  },
51
51
  (err) => new IOError("Failed to load sprints for completion", err instanceof Error ? err : void 0)
@@ -5,22 +5,21 @@ import {
5
5
  closeSprint,
6
6
  createSprint,
7
7
  deleteSprint,
8
- findActiveSprint,
9
- getActiveSprintOrThrow,
10
8
  getCurrentSprintOrThrow,
11
9
  getSprint,
12
10
  listSprints,
11
+ logSprintBaselines,
13
12
  resolveSprintId,
14
13
  saveSprint
15
- } from "./chunk-JRFOUFD3.mjs";
16
- import "./chunk-OEUJDSHY.mjs";
17
- import "./chunk-IB6OCKZW.mjs";
14
+ } from "./chunk-YCDUVPRT.mjs";
15
+ import "./chunk-FKMKOWLA.mjs";
16
+ import "./chunk-IWXBJD2D.mjs";
17
+ import "./chunk-CTP2A436.mjs";
18
18
  import {
19
19
  NoCurrentSprintError,
20
20
  SprintNotFoundError,
21
21
  SprintStatusError
22
- } from "./chunk-EDJX7TT6.mjs";
23
- import "./chunk-QBXHAXHI.mjs";
22
+ } from "./chunk-57UWLHRH.mjs";
24
23
  export {
25
24
  NoCurrentSprintError,
26
25
  SprintNotFoundError,
@@ -30,11 +29,10 @@ export {
30
29
  closeSprint,
31
30
  createSprint,
32
31
  deleteSprint,
33
- findActiveSprint,
34
- getActiveSprintOrThrow,
35
32
  getCurrentSprintOrThrow,
36
33
  getSprint,
37
34
  listSprints,
35
+ logSprintBaselines,
38
36
  resolveSprintId,
39
37
  saveSprint
40
38
  };
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parseSprintStartArgs,
4
+ sprintStartCommand
5
+ } from "./chunk-CSC4TBJB.mjs";
6
+ import "./chunk-JOQO4HMM.mjs";
7
+ import "./chunk-CFUVE2BP.mjs";
8
+ import "./chunk-747KW2RW.mjs";
9
+ import "./chunk-YCDUVPRT.mjs";
10
+ import "./chunk-FKMKOWLA.mjs";
11
+ import "./chunk-IWXBJD2D.mjs";
12
+ import "./chunk-CTP2A436.mjs";
13
+ import "./chunk-57UWLHRH.mjs";
14
+ export {
15
+ parseSprintStartArgs,
16
+ sprintStartCommand
17
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralphctl",
3
- "version": "0.2.5",
3
+ "version": "0.3.1",
4
4
  "description": "Agent harness for long-running AI coding tasks — orchestrates Claude Code & GitHub Copilot across repositories",
5
5
  "homepage": "https://github.com/lukas-grigis/ralphctl",
6
6
  "type": "module",
@@ -29,8 +29,7 @@
29
29
  "ralphctl": "./dist/cli.mjs"
30
30
  },
31
31
  "files": [
32
- "dist/",
33
- "schemas/"
32
+ "dist/"
34
33
  ],
35
34
  "publishConfig": {
36
35
  "access": "public"
@@ -39,31 +38,34 @@
39
38
  "node": ">=24.0.0"
40
39
  },
41
40
  "dependencies": {
42
- "@inquirer/prompts": "^8.3.2",
41
+ "@inkjs/ui": "^2.0.0",
43
42
  "colorette": "^2.0.20",
44
43
  "commander": "^14.0.3",
45
44
  "gradient-string": "^3.0.0",
46
- "ora": "^9.3.0",
45
+ "ink": "^7.0.1",
46
+ "react": "^19.2.5",
47
47
  "tabtab": "^3.0.2",
48
48
  "typescript-result": "^3.5.2",
49
49
  "zod": "^4.3.6"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@eslint/js": "^10.0.1",
53
- "@types/node": "^25.5.2",
53
+ "@types/node": "^25.6.0",
54
+ "@types/react": "^19.2.14",
54
55
  "@types/tabtab": "^3.0.4",
55
- "@vitest/coverage-v8": "^4.1.2",
56
+ "@vitest/coverage-v8": "^4.1.4",
56
57
  "eslint": "^10.2.0",
57
58
  "eslint-config-prettier": "^10.1.8",
58
- "globals": "^17.4.0",
59
+ "globals": "^17.5.0",
59
60
  "husky": "^9.1.7",
61
+ "ink-testing-library": "^4.0.0",
60
62
  "lint-staged": "^16.4.0",
61
- "prettier": "^3.8.1",
63
+ "prettier": "^3.8.3",
62
64
  "tsup": "^8.5.1",
63
65
  "tsx": "^4.21.0",
64
66
  "typescript": "^5.9.3",
65
- "typescript-eslint": "^8.58.0",
66
- "vitest": "^4.1.2"
67
+ "typescript-eslint": "^8.58.2",
68
+ "vitest": "^4.1.4"
67
69
  },
68
70
  "lint-staged": {
69
71
  "*.ts": [
@@ -73,8 +75,8 @@
73
75
  "*.{md,json,yml,yaml}": "prettier --write"
74
76
  },
75
77
  "scripts": {
76
- "build": "tsup && mkdir -p dist/prompts && cp src/ai/prompts/*.md dist/prompts/",
77
- "dev": "tsx src/cli.ts",
78
+ "build": "tsup && mkdir -p dist/prompts && cp src/integration/ai/prompts/*.md dist/prompts/",
79
+ "dev": "tsx src/application/entrypoint.ts",
78
80
  "lint": "eslint .",
79
81
  "lint:fix": "eslint . --fix",
80
82
  "format": "prettier --write .",
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- addCheckScriptToRepository,
4
- projectAddCommand
5
- } from "./chunk-UBPZHHCD.mjs";
6
- import "./chunk-7LZ6GOGN.mjs";
7
- import "./chunk-7TG3EAQ2.mjs";
8
- import "./chunk-EUNAUHC3.mjs";
9
- import "./chunk-OEUJDSHY.mjs";
10
- import "./chunk-IB6OCKZW.mjs";
11
- import "./chunk-EDJX7TT6.mjs";
12
- import "./chunk-QBXHAXHI.mjs";
13
- export {
14
- addCheckScriptToRepository,
15
- projectAddCommand
16
- };
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- addSingleTicketInteractive,
4
- ticketAddCommand
5
- } from "./chunk-742XQ7FL.mjs";
6
- import "./chunk-7TG3EAQ2.mjs";
7
- import "./chunk-EUNAUHC3.mjs";
8
- import "./chunk-JRFOUFD3.mjs";
9
- import "./chunk-OEUJDSHY.mjs";
10
- import "./chunk-IB6OCKZW.mjs";
11
- import "./chunk-EDJX7TT6.mjs";
12
- import "./chunk-QBXHAXHI.mjs";
13
- export {
14
- addSingleTicketInteractive,
15
- ticketAddCommand
16
- };