ralphctl 0.4.1 → 0.4.3

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 (36) hide show
  1. package/README.md +13 -11
  2. package/dist/{add-CIM72NE3.mjs → add-MG26JWBP.mjs} +6 -6
  3. package/dist/{add-GX7P7XTT.mjs → add-ZZYL4BSF.mjs} +5 -4
  4. package/dist/chunk-2FT37OZX.mjs +1071 -0
  5. package/dist/{chunk-CTP2A436.mjs → chunk-D2HWXEHH.mjs} +9 -2
  6. package/dist/{chunk-JOQO4HMM.mjs → chunk-EGUFQNRB.mjs} +10 -10
  7. package/dist/{chunk-3HJNVQ7N.mjs → chunk-LCY32RW4.mjs} +621 -976
  8. package/dist/{chunk-NUYQK5MN.mjs → chunk-LDSG7G2T.mjs} +1 -1
  9. package/dist/{chunk-7JLZQICD.mjs → chunk-MDE6KPJQ.mjs} +6 -6
  10. package/dist/{chunk-3QBEBKMZ.mjs → chunk-Q4AVHUZL.mjs} +7 -7
  11. package/dist/{chunk-YCDUVPRT.mjs → chunk-RQGD5WS6.mjs} +4 -72
  12. package/dist/{chunk-D2YGPLIV.mjs → chunk-TDBEEHTS.mjs} +213 -8
  13. package/dist/{chunk-SM4GGZSU.mjs → chunk-WOMGKKZY.mjs} +152 -179
  14. package/dist/{chunk-FKMKOWLA.mjs → chunk-WZTY77GY.mjs} +75 -1
  15. package/dist/cli.mjs +68 -19
  16. package/dist/{create-7WFSCMP4.mjs → create-PQK6KKRD.mjs} +5 -5
  17. package/dist/{handle-BBAZJ44Y.mjs → handle-SYVCFI6Y.mjs} +1 -1
  18. package/dist/{mount-2N6H5CWA.mjs → mount-2ANLHHQE.mjs} +556 -318
  19. package/dist/{project-2IE7VWDB.mjs → project-JF47ZWMF.mjs} +2 -2
  20. package/dist/prompts/check-script-discover.md +69 -0
  21. package/dist/prompts/ideate-auto.md +26 -1
  22. package/dist/prompts/ideate.md +5 -1
  23. package/dist/prompts/plan-auto.md +30 -2
  24. package/dist/prompts/plan-common-examples.md +82 -0
  25. package/dist/prompts/plan-common.md +26 -78
  26. package/dist/prompts/plan-interactive.md +6 -2
  27. package/dist/prompts/repo-onboard.md +111 -0
  28. package/dist/prompts/sprint-feedback.md +6 -2
  29. package/dist/prompts/task-evaluation.md +25 -10
  30. package/dist/prompts/task-execution.md +13 -13
  31. package/dist/prompts/ticket-refine.md +4 -0
  32. package/dist/prompts/validation-checklist.md +4 -0
  33. package/dist/{resolver-EOE5WUMV.mjs → resolver-PG2DZEBX.mjs} +3 -3
  34. package/dist/{sprint-OGOFEJJH.mjs → sprint-54DOSIJK.mjs} +3 -3
  35. package/dist/{start-IUDCXIEA.mjs → start-2SZTBKGF.mjs} +7 -5
  36. package/package.json +6 -6
package/dist/cli.mjs CHANGED
@@ -41,35 +41,39 @@ import {
41
41
  ticketRefineCommand,
42
42
  ticketRemoveCommand,
43
43
  ticketShowCommand
44
- } from "./chunk-SM4GGZSU.mjs";
44
+ } from "./chunk-WOMGKKZY.mjs";
45
45
  import {
46
46
  projectAddCommand
47
- } from "./chunk-D2YGPLIV.mjs";
47
+ } from "./chunk-TDBEEHTS.mjs";
48
48
  import {
49
49
  sprintCreateCommand
50
- } from "./chunk-3QBEBKMZ.mjs";
50
+ } from "./chunk-Q4AVHUZL.mjs";
51
51
  import {
52
52
  ticketAddCommand
53
- } from "./chunk-7JLZQICD.mjs";
54
- import "./chunk-NUYQK5MN.mjs";
53
+ } from "./chunk-MDE6KPJQ.mjs";
55
54
  import {
55
+ createOnboardPipeline,
56
+ executePipeline,
56
57
  getTasks,
57
58
  sprintStartCommand
58
- } from "./chunk-3HJNVQ7N.mjs";
59
+ } from "./chunk-LCY32RW4.mjs";
60
+ import "./chunk-2FT37OZX.mjs";
59
61
  import {
60
62
  truncate
61
- } from "./chunk-JOQO4HMM.mjs";
63
+ } from "./chunk-EGUFQNRB.mjs";
62
64
  import {
63
- EXIT_ERROR
65
+ EXIT_ERROR,
66
+ exitWithCode
64
67
  } from "./chunk-CFUVE2BP.mjs";
65
68
  import {
69
+ getSharedDeps,
66
70
  setSharedDeps
67
71
  } from "./chunk-747KW2RW.mjs";
72
+ import "./chunk-LDSG7G2T.mjs";
68
73
  import {
69
74
  getCurrentSprintOrThrow,
70
- getSprint,
71
- setCurrentSprint
72
- } from "./chunk-YCDUVPRT.mjs";
75
+ getSprint
76
+ } from "./chunk-RQGD5WS6.mjs";
73
77
  import {
74
78
  colors,
75
79
  error,
@@ -78,9 +82,10 @@ import {
78
82
  log,
79
83
  printBanner,
80
84
  printHeader,
85
+ setCurrentSprint,
81
86
  showError,
82
87
  showSuccess
83
- } from "./chunk-FKMKOWLA.mjs";
88
+ } from "./chunk-WZTY77GY.mjs";
84
89
  import {
85
90
  ensureError,
86
91
  wrapAsync
@@ -88,7 +93,7 @@ import {
88
93
  import {
89
94
  ensureDir,
90
95
  getDataDir
91
- } from "./chunk-CTP2A436.mjs";
96
+ } from "./chunk-D2HWXEHH.mjs";
92
97
  import {
93
98
  DomainError
94
99
  } from "./chunk-57UWLHRH.mjs";
@@ -96,6 +101,42 @@ import {
96
101
  // src/application/entrypoint.ts
97
102
  import { Command } from "commander";
98
103
 
104
+ // src/integration/cli/commands/project/onboard.ts
105
+ async function projectOnboardCommand(options) {
106
+ const shared = getSharedDeps();
107
+ const pipeline = createOnboardPipeline(shared, options);
108
+ const initialContext = {
109
+ sprintId: "",
110
+ projectName: options.project
111
+ };
112
+ const result = await executePipeline(pipeline, initialContext);
113
+ if (!result.ok) {
114
+ showError(`Onboarding failed: ${result.error.message}`);
115
+ exitWithCode(EXIT_ERROR);
116
+ }
117
+ const ctx = result.value.context;
118
+ if (options.dryRun) {
119
+ shared.logger.info("Dry run \u2014 no files written.");
120
+ if (ctx.agentsMdDraft) {
121
+ shared.logger.info(
122
+ `Project context file draft (${String(ctx.agentsMdDraft.split("\n").length)} lines) ready for review.`
123
+ );
124
+ }
125
+ return;
126
+ }
127
+ if (ctx.alreadyCurrent) {
128
+ shared.logger.info("Already up to date \u2014 no changes needed.");
129
+ return;
130
+ }
131
+ const fields = [];
132
+ if (ctx.writtenPath) fields.push(["Project context file", ctx.writtenPath]);
133
+ if (ctx.checkScriptFinal) fields.push(["Check script", ctx.checkScriptFinal]);
134
+ if (ctx.driftWarnings && ctx.driftWarnings.length > 0) {
135
+ fields.push(["Warnings", ctx.driftWarnings.join("; ")]);
136
+ }
137
+ showSuccess("Repository onboarded", fields);
138
+ }
139
+
99
140
  // src/integration/cli/commands/project/register.ts
100
141
  function registerProjectCommands(program2) {
101
142
  const project = program2.command("project").description("Manage projects");
@@ -123,6 +164,14 @@ Examples:
123
164
  }
124
165
  );
125
166
  project.command("list").description("List all projects").action(projectListCommand);
167
+ project.command("onboard <project-name>").description("AI-assisted per-repo onboarding (project context file + check script)").option("--repo <name>", "Target repository (required when project has multiple repos)").option("--dry-run", "Generate the proposal but do not write files").option("--auto", "Skip interactive review; accept the AI proposal as-is").action(async (projectName, opts) => {
168
+ await projectOnboardCommand({
169
+ project: projectName,
170
+ repo: opts.repo,
171
+ dryRun: opts.dryRun === true,
172
+ auto: opts.auto === true
173
+ });
174
+ });
126
175
  project.command("show [name]").description("Show project details").action(async (name) => {
127
176
  await projectShowCommand(name ? [name] : []);
128
177
  });
@@ -698,14 +747,14 @@ function isQuietCommand(argv) {
698
747
  }
699
748
  async function main() {
700
749
  if (process.env["COMP_CWORD"] && process.env["COMP_POINT"] && process.env["COMP_LINE"]) {
701
- const { handleCompletionRequest } = await import("./handle-BBAZJ44Y.mjs");
750
+ const { handleCompletionRequest } = await import("./handle-SYVCFI6Y.mjs");
702
751
  if (await handleCompletionRequest(program)) return;
703
752
  }
704
753
  const argv = process.argv;
705
754
  const isBare = argv.length <= 2;
706
755
  const isInteractive = argv[2] === "interactive";
707
756
  if (isBare || isInteractive) {
708
- const { mountInkApp } = await import("./mount-2N6H5CWA.mjs");
757
+ const { mountInkApp } = await import("./mount-2ANLHHQE.mjs");
709
758
  const { fallback } = await mountInkApp({ initialView: "repl" });
710
759
  if (!fallback) return;
711
760
  printBanner();
@@ -716,14 +765,14 @@ async function main() {
716
765
  return;
717
766
  }
718
767
  if (argv[2] === "sprint" && argv[3] === "start") {
719
- const { parseSprintStartArgs } = await import("./start-IUDCXIEA.mjs");
768
+ const { parseSprintStartArgs } = await import("./start-2SZTBKGF.mjs");
720
769
  const parsed = parseSprintStartArgs(argv.slice(4));
721
770
  if (parsed.ok) {
722
- const { mountInkApp } = await import("./mount-2N6H5CWA.mjs");
723
- const { getSharedDeps } = await import("./bootstrap-FMHG6DRY.mjs");
771
+ const { mountInkApp } = await import("./mount-2ANLHHQE.mjs");
772
+ const { getSharedDeps: getSharedDeps2 } = await import("./bootstrap-FMHG6DRY.mjs");
724
773
  let sprintId;
725
774
  try {
726
- sprintId = await getSharedDeps().persistence.resolveSprintId(parsed.value.sprintId);
775
+ sprintId = await getSharedDeps2().persistence.resolveSprintId(parsed.value.sprintId);
727
776
  } catch {
728
777
  sprintId = void 0;
729
778
  }
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  sprintCreateCommand
4
- } from "./chunk-3QBEBKMZ.mjs";
5
- import "./chunk-NUYQK5MN.mjs";
4
+ } from "./chunk-Q4AVHUZL.mjs";
6
5
  import "./chunk-CFUVE2BP.mjs";
7
6
  import "./chunk-747KW2RW.mjs";
8
- import "./chunk-YCDUVPRT.mjs";
9
- import "./chunk-FKMKOWLA.mjs";
7
+ import "./chunk-LDSG7G2T.mjs";
8
+ import "./chunk-RQGD5WS6.mjs";
9
+ import "./chunk-WZTY77GY.mjs";
10
10
  import "./chunk-IWXBJD2D.mjs";
11
- import "./chunk-CTP2A436.mjs";
11
+ import "./chunk-D2HWXEHH.mjs";
12
12
  import "./chunk-57UWLHRH.mjs";
13
13
  export {
14
14
  sprintCreateCommand
@@ -7,7 +7,7 @@ async function handleCompletionRequest(program) {
7
7
  return false;
8
8
  }
9
9
  const tabtab = (await import("tabtab")).default;
10
- const { resolveCompletions } = await import("./resolver-EOE5WUMV.mjs");
10
+ const { resolveCompletions } = await import("./resolver-PG2DZEBX.mjs");
11
11
  const tabEnv = tabtab.parseEnv(env);
12
12
  const completions = await resolveCompletions(program, {
13
13
  line: tabEnv.line,