runshift 0.0.3 → 0.0.4

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.
@@ -5,7 +5,9 @@
5
5
  "Bash(npm install:*)",
6
6
  "Bash(npm run:*)",
7
7
  "Read(//private/tmp/**)",
8
- "Bash(node /Users/dc/runshift-cli/dist/index.js init)"
8
+ "Bash(node /Users/dc/runshift-cli/dist/index.js init)",
9
+ "Bash(node /Users/dc/runshift-cli/dist/index.js init --help)",
10
+ "Bash(node /Users/dc/runshift-cli/dist/index.js --help)"
9
11
  ]
10
12
  }
11
13
  }
@@ -1,2 +1,2 @@
1
- export declare function init(): Promise<void>;
1
+ export declare function init(args?: string[]): Promise<void>;
2
2
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA0BA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwI1C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAiEA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqK7D"}
@@ -1,14 +1,49 @@
1
1
  import ora from "ora";
2
+ import { execSync } from "node:child_process";
2
3
  import { collectRepoContext, addFileToContext } from "../context/collector.js";
3
4
  import { getGitState } from "../context/git.js";
4
- import { showBanner, showNotGitRepo, showDirtyWarning, showBranchInfo, showScanResults, showFindings, showFileList, showSummary, showSuccess, showError, } from "../ui/display.js";
5
+ import { showBanner, showNotGitRepo, showDirtyWarning, showBranchInfo, showScanResults, showDataPolicy, showFindings, showFileList, showSummary, showSuccess, showDryRunComplete, showError, } from "../ui/display.js";
5
6
  import { confirm, promptChoice, promptFilePath } from "../ui/prompt.js";
6
7
  import { writeFiles, commitFiles } from "../writer.js";
7
8
  const API_URL = process.env.RUNSHIFT_DEV === "true"
8
9
  ? "http://localhost:3000/api/cli/init"
9
10
  : "https://runshift.ai/api/cli/init";
10
11
  const TIMEOUT_MS = 240_000;
11
- export async function init() {
12
+ function parseFlags(args) {
13
+ const flags = { dryRun: false, branch: null, help: false };
14
+ for (let i = 0; i < args.length; i++) {
15
+ const arg = args[i];
16
+ if (arg === "--dry-run") {
17
+ flags.dryRun = true;
18
+ }
19
+ else if (arg === "--branch") {
20
+ const next = args[i + 1];
21
+ flags.branch = next && !next.startsWith("--") ? next : "relay-init";
22
+ if (next && !next.startsWith("--"))
23
+ i++;
24
+ }
25
+ else if (arg === "--help") {
26
+ flags.help = true;
27
+ }
28
+ }
29
+ return flags;
30
+ }
31
+ function showInitHelp() {
32
+ console.log(`
33
+ npx runshift init [options]
34
+
35
+ options:
36
+ --dry-run preview changes without writing files
37
+ --branch <name> run on a new branch (default: relay-init)
38
+ --help show this help
39
+ `);
40
+ }
41
+ export async function init(args = []) {
42
+ const flags = parseFlags(args);
43
+ if (flags.help) {
44
+ showInitHelp();
45
+ return;
46
+ }
12
47
  showBanner();
13
48
  // ── 1. Git safety ─────────────────────────────────────────────────
14
49
  const git = getGitState();
@@ -24,11 +59,25 @@ export async function init() {
24
59
  process.exit(0);
25
60
  }
26
61
  }
62
+ // ── 1b. Branch flag — create and switch ───────────────────────────
63
+ if (flags.branch) {
64
+ try {
65
+ execSync(`git rev-parse --verify ${flags.branch}`, { stdio: "pipe" });
66
+ console.log(` branch ${flags.branch} already exists.\n`);
67
+ process.exit(1);
68
+ }
69
+ catch {
70
+ // branch doesn't exist — good
71
+ }
72
+ execSync(`git checkout -b ${flags.branch}`, { stdio: "pipe" });
73
+ console.log(` switched to new branch ${flags.branch}\n`);
74
+ }
27
75
  // ── 2. Collect context ────────────────────────────────────────────
28
76
  const root = process.cwd();
29
77
  const context = collectRepoContext(root);
30
- // ── 3. Show scan results + prompt ─────────────────────────────────
78
+ // ── 3. Show scan results + data policy + prompt ───────────────────
31
79
  showScanResults(context);
80
+ showDataPolicy();
32
81
  let choice = await promptChoice(" proceed? [y] add more files? [a] cancel? [n] ");
33
82
  while (choice === "a") {
34
83
  const filePath = await promptFilePath(" file path: ");
@@ -39,6 +88,7 @@ export async function init() {
39
88
  }
40
89
  }
41
90
  showScanResults(context);
91
+ showDataPolicy();
42
92
  choice = await promptChoice(" proceed? [y] add more files? [a] cancel? [n] ");
43
93
  }
44
94
  if (choice === "n") {
@@ -65,7 +115,7 @@ export async function init() {
65
115
  catch (err) {
66
116
  spinner.stop();
67
117
  if (err instanceof Error && err.name === "AbortError") {
68
- showError("network", "request timed out after 120s");
118
+ showError("network", "request timed out after 240s");
69
119
  }
70
120
  else {
71
121
  showError("network");
@@ -102,12 +152,17 @@ export async function init() {
102
152
  showSummary(data.summary);
103
153
  showFindings(data.findings);
104
154
  showFileList(data.files);
105
- // ── 6. Confirm write ──────────────────────────────────────────────
155
+ // ── 6. Dry run exit ───────────────────────────────────────────────
156
+ if (flags.dryRun) {
157
+ showDryRunComplete();
158
+ return;
159
+ }
160
+ // ── 7. Confirm write ──────────────────────────────────────────────
106
161
  const writeConfirm = await confirm(" write these files? (y/n) ");
107
162
  if (!writeConfirm) {
108
163
  process.exit(0);
109
164
  }
110
- // ── 7. Re-check git before writing ────────────────────────────────
165
+ // ── 8. Re-check git before writing ────────────────────────────────
111
166
  const gitNow = getGitState();
112
167
  if (gitNow.isDirty && !git.isDirty) {
113
168
  const proceed = await confirm(" working tree changed since scan — continue? (y/n) ");
@@ -115,7 +170,7 @@ export async function init() {
115
170
  process.exit(0);
116
171
  }
117
172
  }
118
- // ── 8. Write + commit ─────────────────────────────────────────────
173
+ // ── 9. Write + commit ─────────────────────────────────────────────
119
174
  console.log();
120
175
  writeFiles(root, data.files);
121
176
  console.log();
@@ -123,7 +178,7 @@ export async function init() {
123
178
  if (!committed) {
124
179
  console.log(" ⚠ files written but git commit failed\n");
125
180
  }
126
- // ── 9. Success ────────────────────────────────────────────────────
181
+ // ── 10. Success ───────────────────────────────────────────────────
127
182
  showSuccess();
128
183
  }
129
184
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM;IACjC,CAAC,CAAC,oCAAoC;IACtC,CAAC,CAAC,kCAAkC,CAAC;AAEzC,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,UAAU,EAAE,CAAC;IAEb,qEAAqE;IACrE,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAE1B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,6CAA6C,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzC,qEAAqE;IACrE,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzB,IAAI,MAAM,GAAG,MAAM,YAAY,CAAC,iDAAiD,CAAC,CAAC;IAEnF,OAAO,MAAM,KAAK,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,IAAI,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,GAAG,MAAM,YAAY,CAAC,iDAAiD,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qEAAqE;IACrE,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,qCAAqC;QAC3C,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEjC,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;QAEjE,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtD,SAAS,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAC;QAClF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAuB,CAAC;QAE/D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAkB,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,SAAS,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,qEAAqE;IACrE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzB,qEAAqE;IACrE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAClE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qEAAqE;IACrE,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,sDAAsD,CAAC,CAAC;QACtF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,qEAAqE;IACrE,WAAW,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,14 +4,14 @@ const args = process.argv.slice(2);
4
4
  const command = args[0] ?? "init";
5
5
  switch (command) {
6
6
  case "init":
7
- init().catch((err) => {
7
+ init(args.slice(1)).catch((err) => {
8
8
  console.error(err.message ?? err);
9
9
  process.exit(1);
10
10
  });
11
11
  break;
12
12
  case "--version":
13
13
  case "-v":
14
- console.log("runshift 0.0.2");
14
+ console.log("runshift 0.0.3");
15
15
  break;
16
16
  case "--help":
17
17
  case "-h":
@@ -19,11 +19,15 @@ switch (command) {
19
19
  runshift — the control plane for agents, wherever they run.
20
20
 
21
21
  Usage:
22
- npx runshift init Read your repo, generate governance rules
22
+ npx runshift init [options] Read your repo, generate governance rules
23
23
 
24
24
  Options:
25
- --version, -v Show version
26
- --help, -h Show this help
25
+ --version, -v Show version
26
+ --help, -h Show this help
27
+
28
+ Init options:
29
+ --dry-run Preview changes without writing files
30
+ --branch <name> Run on a new branch (default: relay-init)
27
31
  `);
28
32
  break;
29
33
  default:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAElC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,MAAM;QACT,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IACR,KAAK,WAAW,CAAC;IACjB,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM;IACR,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC;;;;;;;;;CASf,CAAC,CAAC;QACC,MAAM;IACR;QACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,oCAAoC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAElC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IACR,KAAK,WAAW,CAAC;IACjB,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM;IACR,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAaf,CAAC,CAAC;QACC,MAAM;IACR;QACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,oCAAoC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -10,5 +10,7 @@ export declare function showWriting(filePath: string): void;
10
10
  export declare function showCommit(): void;
11
11
  export declare function showSummary(summary: string): void;
12
12
  export declare function showSuccess(): void;
13
+ export declare function showDataPolicy(): void;
14
+ export declare function showDryRunComplete(): void;
13
15
  export declare function showError(type: "network" | "rate-limit" | "validation" | "server", message?: string): void;
14
16
  //# sourceMappingURL=display.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAOxE,wBAAgB,UAAU,IAAI,IAAI,CASjC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAqD1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAsBrD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAQzD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAQlC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAmB1G"}
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAOxE,wBAAgB,UAAU,IAAI,IAAI,CAUjC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAqD1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAsBrD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAQzD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAQlC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAUrC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAmB1G"}
@@ -10,8 +10,9 @@ export function showBanner() {
10
10
  horizontalLayout: "default",
11
11
  });
12
12
  console.log(amber(banner));
13
- console.log(muted(" v0.0.2"));
14
- console.log(muted(" the control plane for agents, wherever they run.\n"));
13
+ console.log(muted(" v0.0.3"));
14
+ console.log(muted(" the control plane for agents, wherever they run."));
15
+ console.log(dim(" usage: npx runshift init [--dry-run] [--branch <name>]\n"));
15
16
  console.log(divider + "\n");
16
17
  }
17
18
  export function showNotGitRepo() {
@@ -123,6 +124,23 @@ export function showSuccess() {
123
124
  console.log(muted(" connect to the runshift control plane: ") + amber("runshift.ai"));
124
125
  console.log("\n" + divider + "\n");
125
126
  }
127
+ export function showDataPolicy() {
128
+ console.log(amber(" relay will send to runshift.ai:\n"));
129
+ console.log(dim(" ✓ package.json (dependencies and scripts only)"));
130
+ console.log(dim(" ✓ directory structure (top 2 levels, folder names only)"));
131
+ console.log(dim(" ✓ .env.example (key names only — values are never read)"));
132
+ console.log(dim(" ✓ existing CLAUDE.md (if present)"));
133
+ console.log(dim(" ✓ existing .cursor/rules/ (if present)"));
134
+ console.log(dim(" ✓ migration file names (no file contents)"));
135
+ console.log(dim("\n no source code is sent."));
136
+ console.log(dim(" no secret values are ever read.\n"));
137
+ }
138
+ export function showDryRunComplete() {
139
+ console.log("\n" + divider + "\n");
140
+ console.log(amber(" dry run complete — no files written."));
141
+ console.log(dim(" run npx runshift init to install.\n"));
142
+ console.log(divider + "\n");
143
+ }
126
144
  export function showError(type, message) {
127
145
  console.log();
128
146
  switch (type) {
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runshift",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "The control plane for agents, wherever they run.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,4 +1,5 @@
1
1
  import ora from "ora";
2
+ import { execSync } from "node:child_process";
2
3
  import { collectRepoContext, addFileToContext } from "../context/collector.js";
3
4
  import { getGitState } from "../context/git.js";
4
5
  import {
@@ -7,10 +8,12 @@ import {
7
8
  showDirtyWarning,
8
9
  showBranchInfo,
9
10
  showScanResults,
11
+ showDataPolicy,
10
12
  showFindings,
11
13
  showFileList,
12
14
  showSummary,
13
15
  showSuccess,
16
+ showDryRunComplete,
14
17
  showError,
15
18
  } from "../ui/display.js";
16
19
  import { confirm, promptChoice, promptFilePath } from "../ui/prompt.js";
@@ -24,7 +27,50 @@ const API_URL =
24
27
 
25
28
  const TIMEOUT_MS = 240_000;
26
29
 
27
- export async function init(): Promise<void> {
30
+ interface InitFlags {
31
+ dryRun: boolean;
32
+ branch: string | null;
33
+ help: boolean;
34
+ }
35
+
36
+ function parseFlags(args: string[]): InitFlags {
37
+ const flags: InitFlags = { dryRun: false, branch: null, help: false };
38
+
39
+ for (let i = 0; i < args.length; i++) {
40
+ const arg = args[i];
41
+ if (arg === "--dry-run") {
42
+ flags.dryRun = true;
43
+ } else if (arg === "--branch") {
44
+ const next = args[i + 1];
45
+ flags.branch = next && !next.startsWith("--") ? next : "relay-init";
46
+ if (next && !next.startsWith("--")) i++;
47
+ } else if (arg === "--help") {
48
+ flags.help = true;
49
+ }
50
+ }
51
+
52
+ return flags;
53
+ }
54
+
55
+ function showInitHelp(): void {
56
+ console.log(`
57
+ npx runshift init [options]
58
+
59
+ options:
60
+ --dry-run preview changes without writing files
61
+ --branch <name> run on a new branch (default: relay-init)
62
+ --help show this help
63
+ `);
64
+ }
65
+
66
+ export async function init(args: string[] = []): Promise<void> {
67
+ const flags = parseFlags(args);
68
+
69
+ if (flags.help) {
70
+ showInitHelp();
71
+ return;
72
+ }
73
+
28
74
  showBanner();
29
75
 
30
76
  // ── 1. Git safety ─────────────────────────────────────────────────
@@ -45,12 +91,27 @@ export async function init(): Promise<void> {
45
91
  }
46
92
  }
47
93
 
94
+ // ── 1b. Branch flag — create and switch ───────────────────────────
95
+ if (flags.branch) {
96
+ try {
97
+ execSync(`git rev-parse --verify ${flags.branch}`, { stdio: "pipe" });
98
+ console.log(` branch ${flags.branch} already exists.\n`);
99
+ process.exit(1);
100
+ } catch {
101
+ // branch doesn't exist — good
102
+ }
103
+
104
+ execSync(`git checkout -b ${flags.branch}`, { stdio: "pipe" });
105
+ console.log(` switched to new branch ${flags.branch}\n`);
106
+ }
107
+
48
108
  // ── 2. Collect context ────────────────────────────────────────────
49
109
  const root = process.cwd();
50
110
  const context = collectRepoContext(root);
51
111
 
52
- // ── 3. Show scan results + prompt ─────────────────────────────────
112
+ // ── 3. Show scan results + data policy + prompt ───────────────────
53
113
  showScanResults(context);
114
+ showDataPolicy();
54
115
 
55
116
  let choice = await promptChoice(" proceed? [y] add more files? [a] cancel? [n] ");
56
117
 
@@ -63,6 +124,7 @@ export async function init(): Promise<void> {
63
124
  }
64
125
  }
65
126
  showScanResults(context);
127
+ showDataPolicy();
66
128
  choice = await promptChoice(" proceed? [y] add more files? [a] cancel? [n] ");
67
129
  }
68
130
 
@@ -94,7 +156,7 @@ export async function init(): Promise<void> {
94
156
  } catch (err) {
95
157
  spinner.stop();
96
158
  if (err instanceof Error && err.name === "AbortError") {
97
- showError("network", "request timed out after 120s");
159
+ showError("network", "request timed out after 240s");
98
160
  } else {
99
161
  showError("network");
100
162
  }
@@ -133,13 +195,19 @@ export async function init(): Promise<void> {
133
195
  showFindings(data.findings);
134
196
  showFileList(data.files);
135
197
 
136
- // ── 6. Confirm write ──────────────────────────────────────────────
198
+ // ── 6. Dry run exit ───────────────────────────────────────────────
199
+ if (flags.dryRun) {
200
+ showDryRunComplete();
201
+ return;
202
+ }
203
+
204
+ // ── 7. Confirm write ──────────────────────────────────────────────
137
205
  const writeConfirm = await confirm(" write these files? (y/n) ");
138
206
  if (!writeConfirm) {
139
207
  process.exit(0);
140
208
  }
141
209
 
142
- // ── 7. Re-check git before writing ────────────────────────────────
210
+ // ── 8. Re-check git before writing ────────────────────────────────
143
211
  const gitNow = getGitState();
144
212
  if (gitNow.isDirty && !git.isDirty) {
145
213
  const proceed = await confirm(" working tree changed since scan — continue? (y/n) ");
@@ -148,7 +216,7 @@ export async function init(): Promise<void> {
148
216
  }
149
217
  }
150
218
 
151
- // ── 8. Write + commit ─────────────────────────────────────────────
219
+ // ── 9. Write + commit ─────────────────────────────────────────────
152
220
  console.log();
153
221
  writeFiles(root, data.files);
154
222
  console.log();
@@ -158,6 +226,6 @@ export async function init(): Promise<void> {
158
226
  console.log(" ⚠ files written but git commit failed\n");
159
227
  }
160
228
 
161
- // ── 9. Success ────────────────────────────────────────────────────
229
+ // ── 10. Success ───────────────────────────────────────────────────
162
230
  showSuccess();
163
231
  }
package/src/index.ts CHANGED
@@ -7,14 +7,14 @@ const command = args[0] ?? "init";
7
7
 
8
8
  switch (command) {
9
9
  case "init":
10
- init().catch((err) => {
10
+ init(args.slice(1)).catch((err) => {
11
11
  console.error(err.message ?? err);
12
12
  process.exit(1);
13
13
  });
14
14
  break;
15
15
  case "--version":
16
16
  case "-v":
17
- console.log("runshift 0.0.2");
17
+ console.log("runshift 0.0.3");
18
18
  break;
19
19
  case "--help":
20
20
  case "-h":
@@ -22,11 +22,15 @@ switch (command) {
22
22
  runshift — the control plane for agents, wherever they run.
23
23
 
24
24
  Usage:
25
- npx runshift init Read your repo, generate governance rules
25
+ npx runshift init [options] Read your repo, generate governance rules
26
26
 
27
27
  Options:
28
- --version, -v Show version
29
- --help, -h Show this help
28
+ --version, -v Show version
29
+ --help, -h Show this help
30
+
31
+ Init options:
32
+ --dry-run Preview changes without writing files
33
+ --branch <name> Run on a new branch (default: relay-init)
30
34
  `);
31
35
  break;
32
36
  default:
package/src/ui/display.ts CHANGED
@@ -13,8 +13,9 @@ export function showBanner(): void {
13
13
  horizontalLayout: "default",
14
14
  });
15
15
  console.log(amber(banner));
16
- console.log(muted(" v0.0.2"));
17
- console.log(muted(" the control plane for agents, wherever they run.\n"));
16
+ console.log(muted(" v0.0.3"));
17
+ console.log(muted(" the control plane for agents, wherever they run."));
18
+ console.log(dim(" usage: npx runshift init [--dry-run] [--branch <name>]\n"));
18
19
  console.log(divider + "\n");
19
20
  }
20
21
 
@@ -142,6 +143,25 @@ export function showSuccess(): void {
142
143
  console.log("\n" + divider + "\n");
143
144
  }
144
145
 
146
+ export function showDataPolicy(): void {
147
+ console.log(amber(" relay will send to runshift.ai:\n"));
148
+ console.log(dim(" ✓ package.json (dependencies and scripts only)"));
149
+ console.log(dim(" ✓ directory structure (top 2 levels, folder names only)"));
150
+ console.log(dim(" ✓ .env.example (key names only — values are never read)"));
151
+ console.log(dim(" ✓ existing CLAUDE.md (if present)"));
152
+ console.log(dim(" ✓ existing .cursor/rules/ (if present)"));
153
+ console.log(dim(" ✓ migration file names (no file contents)"));
154
+ console.log(dim("\n no source code is sent."));
155
+ console.log(dim(" no secret values are ever read.\n"));
156
+ }
157
+
158
+ export function showDryRunComplete(): void {
159
+ console.log("\n" + divider + "\n");
160
+ console.log(amber(" dry run complete — no files written."));
161
+ console.log(dim(" run npx runshift init to install.\n"));
162
+ console.log(divider + "\n");
163
+ }
164
+
145
165
  export function showError(type: "network" | "rate-limit" | "validation" | "server", message?: string): void {
146
166
  console.log();
147
167
  switch (type) {