@open-tomato/rafa 0.26.0 → 0.31.0

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.
@@ -11,6 +11,7 @@ import {
11
11
  REQUIRED_ITEM_KEYS,
12
12
  SKILL_TIERS,
13
13
  STORE_BACKENDS,
14
+ SYNC_STRATEGIES,
14
15
  busyTimeoutMs,
15
16
  confidence,
16
17
  dayCount,
@@ -37,12 +38,13 @@ import {
37
38
  tierPin,
38
39
  tierSwitch,
39
40
  usdAmount
40
- } from "./index-sf2brh4w.js";
41
+ } from "./index-dnwcx1cs.js";
41
42
 
42
43
  // src/config-schema.ts
43
44
  import { join } from "path";
44
45
 
45
46
  // src/config-readers.ts
47
+ import { isAbsolute, normalize } from "path";
46
48
  function mapOf(value, expected) {
47
49
  return (raw, at) => {
48
50
  if (!isMapping(raw)) {
@@ -74,6 +76,90 @@ var trackerKind = text("a tracker kind name");
74
76
  var releaseFile = text("a file path");
75
77
  var tierPins = mapOf(tierPin, "false or a tier");
76
78
  var routeTable = mapOf(routeTarget, "false or an agent name");
79
+ var RELEASE_STRATEGIES = ["semver-by-level"];
80
+ var RELEASE_SETTLE_MODES = ["push", "pr"];
81
+ var RELEASE_TAG_MODES = ["manual", "settle"];
82
+ var VERSION_COLLISION_MODES = ["allow", "report", "ask", "refuse"];
83
+ var releaseStrategy = oneOf(RELEASE_STRATEGIES);
84
+ var releaseSettleMode = oneOf(RELEASE_SETTLE_MODES);
85
+ var releaseTagMode = oneOf(RELEASE_TAG_MODES);
86
+ var versionCollisionMode = oneOf(VERSION_COLLISION_MODES);
87
+ var UNTRACKED_DIRECTORY = ".rafa";
88
+ var FRAGMENTS_EXPECTED = `a relative directory path not under ${UNTRACKED_DIRECTORY}/`;
89
+ function isUnderUntracked(path) {
90
+ const [first] = normalize(path).split(/[\\/]/);
91
+ return first === UNTRACKED_DIRECTORY;
92
+ }
93
+ var fragmentsDirectory = (raw, at) => {
94
+ const reading = text(FRAGMENTS_EXPECTED)(raw, at);
95
+ const path = reading.value;
96
+ if (path === undefined || !isAbsolute(path) && !isUnderUntracked(path))
97
+ return reading;
98
+ const problem = `${at.label} is ${describeValue(raw)}, expected ${FRAGMENTS_EXPECTED}`;
99
+ return { value: undefined, problems: [problem], extras: [] };
100
+ };
101
+
102
+ // src/config-schema-release.ts
103
+ var PR_DEFAULTS = Object.freeze({
104
+ prProvider: null,
105
+ prMergeMethod: "squash",
106
+ prBase: null,
107
+ prResolveBudget: 2,
108
+ prVersionCollision: "report"
109
+ });
110
+ var RELEASE_DEFAULTS = Object.freeze({
111
+ releaseEnabled: RELEASE_AUTO,
112
+ releaseVersionFile: "package.json",
113
+ releaseChangelog: "CHANGELOG.md",
114
+ releaseHeading: "## {version} \u2014 {date}, {title}",
115
+ releaseFragments: ".changes",
116
+ releaseStrategy: "semver-by-level",
117
+ releaseSettle: "push",
118
+ releaseTag: "manual"
119
+ });
120
+ var DANGEROUS_RELEASE_DEFAULTS = Object.freeze({
121
+ dangerousAcceptVersionCollision: false
122
+ });
123
+ var PR_SETTINGS = {
124
+ prProvider: { key: "pr.provider", read: oneOf(PR_PROVIDERS), cli: false },
125
+ prMergeMethod: { key: "pr.mergeMethod", read: mergeMethod, cli: false },
126
+ prBase: { key: "pr.base", read: text("a branch name"), cli: false },
127
+ prResolveBudget: { key: "pr.resolveBudget", read: usdAmount, cli: false },
128
+ prVersionCollision: {
129
+ key: "pr.versionCollision",
130
+ read: versionCollisionMode,
131
+ cli: false
132
+ }
133
+ };
134
+ var RELEASE_SETTINGS = {
135
+ releaseEnabled: { key: "release.enabled", read: releaseEnabled, cli: false },
136
+ releaseVersionFile: {
137
+ key: "release.versionFile",
138
+ read: releaseFile,
139
+ cli: false
140
+ },
141
+ releaseChangelog: { key: "release.changelog", read: releaseFile, cli: false },
142
+ releaseHeading: {
143
+ key: "release.heading",
144
+ read: text("a changelog heading template"),
145
+ cli: false
146
+ },
147
+ releaseFragments: {
148
+ key: "release.fragments",
149
+ read: fragmentsDirectory,
150
+ cli: false
151
+ },
152
+ releaseStrategy: { key: "release.strategy", read: releaseStrategy, cli: false },
153
+ releaseSettle: { key: "release.settle", read: releaseSettleMode, cli: false },
154
+ releaseTag: { key: "release.tag", read: releaseTagMode, cli: false }
155
+ };
156
+ var DANGEROUS_RELEASE_SETTINGS = {
157
+ dangerousAcceptVersionCollision: {
158
+ key: "dangerous.acceptVersionCollision",
159
+ read: flag,
160
+ cli: false
161
+ }
162
+ };
77
163
 
78
164
  // src/tiers/resolve.ts
79
165
  import { readFileSync } from "fs";
@@ -245,6 +331,7 @@ var CONFIG_DEFAULTS = Object.freeze({
245
331
  version: 1,
246
332
  store: "sqlite",
247
333
  effortBusyTimeoutMs: 5000,
334
+ effortSync: "local",
248
335
  inject: "stage",
249
336
  planDir: join(".rafa", "plans"),
250
337
  specsDir: join(".rafa", "specs"),
@@ -263,20 +350,17 @@ var CONFIG_DEFAULTS = Object.freeze({
263
350
  modules: Object.freeze([]),
264
351
  allowList: Object.freeze([]),
265
352
  settingSources: Object.freeze(["project", "local"]),
266
- prProvider: null,
267
- prMergeMethod: "squash",
268
- prBase: null,
269
- prResolveBudget: 2,
353
+ loopWorktreeDir: join(".rafa", "worktrees"),
354
+ ...PR_DEFAULTS,
270
355
  boardTrustedAuthors: Object.freeze([]),
271
356
  roadmapIssue: null,
272
- releaseEnabled: RELEASE_AUTO,
273
- releaseVersionFile: "package.json",
274
- releaseChangelog: "CHANGELOG.md",
275
- releaseHeading: "## {version} \u2014 {date}, {title}",
357
+ ...RELEASE_DEFAULTS,
276
358
  cleanupStaleDays: 30,
277
359
  cleanupWorktreeIdleDays: 7,
278
360
  cleanupKeep: Object.freeze([]),
279
361
  dangerousAcceptStaleRefs: false,
362
+ ...DANGEROUS_RELEASE_DEFAULTS,
363
+ dangerousSelfUpdateDuringLoop: false,
280
364
  statusNotice: true,
281
365
  tiersRafa: "on",
282
366
  tiersSkills: new Map,
@@ -289,6 +373,7 @@ var SETTINGS = {
289
373
  version: { key: "version", read: oneOf(CONFIG_VERSIONS), cli: false },
290
374
  store: { key: "store", read: oneOf(STORE_BACKENDS), cli: true },
291
375
  effortBusyTimeoutMs: { key: "effort.busyTimeoutMs", read: busyTimeoutMs, cli: false },
376
+ effortSync: { key: "effort.sync", read: oneOf(SYNC_STRATEGIES), cli: false },
292
377
  inject: { key: "plan.inject", read: oneOf(INJECT_MODES), cli: true },
293
378
  planDir: { key: "plan.dir", read: directory, cli: true },
294
379
  specsDir: { key: "specs.dir", read: directory, cli: true },
@@ -338,28 +423,15 @@ var SETTINGS = {
338
423
  read: subsetOf(CLAUDE_SETTING_SOURCES),
339
424
  cli: true
340
425
  },
341
- prProvider: { key: "pr.provider", read: oneOf(PR_PROVIDERS), cli: false },
342
- prMergeMethod: { key: "pr.mergeMethod", read: mergeMethod, cli: false },
343
- prBase: { key: "pr.base", read: text("a branch name"), cli: false },
344
- prResolveBudget: { key: "pr.resolveBudget", read: usdAmount, cli: false },
426
+ loopWorktreeDir: { key: "loop.worktreeDir", read: directory, cli: false },
427
+ ...PR_SETTINGS,
345
428
  boardTrustedAuthors: {
346
429
  key: "board.trustedAuthors",
347
430
  read: listOf(githubLogin, "GitHub logins"),
348
431
  cli: false
349
432
  },
350
433
  roadmapIssue: { key: "roadmap.issue", read: issueNumber, cli: false },
351
- releaseEnabled: { key: "release.enabled", read: releaseEnabled, cli: false },
352
- releaseVersionFile: {
353
- key: "release.versionFile",
354
- read: releaseFile,
355
- cli: false
356
- },
357
- releaseChangelog: { key: "release.changelog", read: releaseFile, cli: false },
358
- releaseHeading: {
359
- key: "release.heading",
360
- read: text("a changelog heading template"),
361
- cli: false
362
- },
434
+ ...RELEASE_SETTINGS,
363
435
  cleanupStaleDays: { key: "cleanup.staleDays", read: dayCount, cli: false },
364
436
  cleanupWorktreeIdleDays: {
365
437
  key: "cleanup.worktreeIdleDays",
@@ -376,6 +448,12 @@ var SETTINGS = {
376
448
  read: flag,
377
449
  cli: false
378
450
  },
451
+ ...DANGEROUS_RELEASE_SETTINGS,
452
+ dangerousSelfUpdateDuringLoop: {
453
+ key: "dangerous.selfUpdateDuringLoop",
454
+ read: flag,
455
+ cli: false
456
+ },
379
457
  statusNotice: { key: "status.notice", read: flag, cli: false },
380
458
  tiersRafa: { key: "tiers.rafa", read: tierSwitch, cli: false },
381
459
  tiersSkills: { key: "tiers.skills", read: tierPins, cli: false },
@@ -453,6 +531,7 @@ function readLayer(rawOf, atOf) {
453
531
  version: read("version"),
454
532
  store: read("store"),
455
533
  effortBusyTimeoutMs: read("effortBusyTimeoutMs"),
534
+ effortSync: read("effortSync"),
456
535
  inject: read("inject"),
457
536
  planDir: read("planDir"),
458
537
  specsDir: read("specsDir"),
@@ -471,20 +550,28 @@ function readLayer(rawOf, atOf) {
471
550
  modules: read("modules"),
472
551
  allowList: read("allowList"),
473
552
  settingSources: read("settingSources"),
553
+ loopWorktreeDir: read("loopWorktreeDir"),
474
554
  prProvider: read("prProvider"),
475
555
  prMergeMethod: read("prMergeMethod"),
476
556
  prBase: read("prBase"),
477
557
  prResolveBudget: read("prResolveBudget"),
558
+ prVersionCollision: read("prVersionCollision"),
478
559
  boardTrustedAuthors: read("boardTrustedAuthors"),
479
560
  roadmapIssue: read("roadmapIssue"),
480
561
  releaseEnabled: read("releaseEnabled"),
481
562
  releaseVersionFile: read("releaseVersionFile"),
482
563
  releaseChangelog: read("releaseChangelog"),
483
564
  releaseHeading: read("releaseHeading"),
565
+ releaseFragments: read("releaseFragments"),
566
+ releaseStrategy: read("releaseStrategy"),
567
+ releaseSettle: read("releaseSettle"),
568
+ releaseTag: read("releaseTag"),
484
569
  cleanupStaleDays: read("cleanupStaleDays"),
485
570
  cleanupWorktreeIdleDays: read("cleanupWorktreeIdleDays"),
486
571
  cleanupKeep: read("cleanupKeep"),
487
572
  dangerousAcceptStaleRefs: read("dangerousAcceptStaleRefs"),
573
+ dangerousAcceptVersionCollision: read("dangerousAcceptVersionCollision"),
574
+ dangerousSelfUpdateDuringLoop: read("dangerousSelfUpdateDuringLoop"),
488
575
  statusNotice: read("statusNotice"),
489
576
  tiersRafa: read("tiersRafa"),
490
577
  tiersSkills: read("tiersSkills"),
@@ -1058,4 +1145,4 @@ function activeOutputMode() {
1058
1145
  return activeMode;
1059
1146
  }
1060
1147
 
1061
- export { pinKey, pinLine, collisionMessage, readItemBytes, resolveTiers, findTierItem, DEFAULT_ROUTES, DEFAULT_ROUTING, CONFIG_FILE, CONFIG_DEFAULTS, SETTINGS, ConfigError, configFilePath, parseConfigText, resolveConfig, isStampableStub, planStubFromPrompt, stampPrompt, planStubFromPath, RAFA_BLOCK_KINDS, isRafaBlockKind, readRafaBlocks, REPORT_STATUSES, FINDING_KINDS, FINDING_SIGNALS, FINDING_DOMAINS, CHANGE_LEVELS, parseReport, createTextOutput, activeOutput, activeOutputMode };
1148
+ export { pinKey, pinLine, collisionMessage, readItemBytes, resolveTiers, findTierItem, DEFAULT_ROUTES, DEFAULT_ROUTING, CONFIG_FILE, CONFIG_DEFAULTS, SETTINGS, ConfigError, configFilePath, parseConfigText, resolveConfig, isStampableStub, planStubFromPrompt, stampPrompt, planStubFromPath, createTextOutput, activeOutput, activeOutputMode, RAFA_BLOCK_KINDS, isRafaBlockKind, readRafaBlocks, REPORT_STATUSES, FINDING_KINDS, FINDING_SIGNALS, FINDING_DOMAINS, CHANGE_LEVELS, parseReport };
package/dist/index.js CHANGED
@@ -5,14 +5,12 @@ import {
5
5
  OUTPUT_CHANNELS,
6
6
  RUNNING_MANIFEST_SEAMS,
7
7
  collect,
8
- loadConfig,
9
8
  plan,
10
- readConfigFile,
11
9
  report,
12
10
  start,
13
11
  usage,
14
12
  validateManifest
15
- } from "./index-59x3zsh4.js";
13
+ } from "./index-szgyrz6j.js";
16
14
  import {
17
15
  PLAN_BLOCK_KINDS,
18
16
  PLAN_HEADER_FIELDS,
@@ -26,7 +24,7 @@ import {
26
24
  renderInjection,
27
25
  runPreflight,
28
26
  runShellProbe
29
- } from "./index-p1265xgj.js";
27
+ } from "./index-89j1m0f6.js";
30
28
  import {
31
29
  CORE_ADAPTER_REGISTRY,
32
30
  DISK_FILE_SYSTEM,
@@ -37,13 +35,15 @@ import {
37
35
  ScopeError,
38
36
  createAdapterRegistry,
39
37
  initHint,
38
+ loadConfig,
40
39
  openNdjsonStore,
41
40
  openSqliteStore,
41
+ readConfigFile,
42
42
  resolveScope,
43
43
  scopeAt,
44
44
  selectEffortStore,
45
45
  selfAndAncestors
46
- } from "./index-azptzvp3.js";
46
+ } from "./index-13wzpgc1.js";
47
47
  import {
48
48
  CONFIG_DEFAULTS,
49
49
  CONFIG_FILE,
@@ -58,10 +58,10 @@ import {
58
58
  parseReport,
59
59
  readRafaBlocks,
60
60
  resolveConfig
61
- } from "./index-rv7y8y1j.js";
61
+ } from "./index-t6q4k1tq.js";
62
62
  import"./index-d6d0942q.js";
63
- import"./index-xwr54rzt.js";
64
- import"./index-4j1e3h26.js";
63
+ import"./index-p0njjkjj.js";
64
+ import"./index-e10rwa4g.js";
65
65
  import {
66
66
  CLAUDE_SETTING_SOURCES,
67
67
  CONFIG_VERSIONS,
@@ -71,8 +71,9 @@ import {
71
71
  PREREQUISITE_KINDS,
72
72
  PR_PROVIDERS,
73
73
  RELEASE_AUTO,
74
- STORE_BACKENDS
75
- } from "./index-sf2brh4w.js";
74
+ STORE_BACKENDS,
75
+ SYNC_STRATEGIES
76
+ } from "./index-dnwcx1cs.js";
76
77
  import"./index-wp8c28fd.js";
77
78
  export {
78
79
  validateManifest,
@@ -107,6 +108,7 @@ export {
107
108
  createAdapterRegistry,
108
109
  configFilePath,
109
110
  ScopeError,
111
+ SYNC_STRATEGIES,
110
112
  STORE_BACKENDS,
111
113
  SCOPE_DIR,
112
114
  RUNNING_MANIFEST_SEAMS,
@@ -12,7 +12,7 @@ import {
12
12
  renderInjection,
13
13
  runPreflight,
14
14
  runShellProbe
15
- } from "../index-p1265xgj.js";
15
+ } from "../index-89j1m0f6.js";
16
16
  import {
17
17
  FINDING_KINDS,
18
18
  FINDING_SIGNALS,
@@ -21,10 +21,10 @@ import {
21
21
  isRafaBlockKind,
22
22
  parseReport,
23
23
  readRafaBlocks
24
- } from "../index-rv7y8y1j.js";
24
+ } from "../index-t6q4k1tq.js";
25
25
  import {
26
26
  INJECT_MODES
27
- } from "../index-sf2brh4w.js";
27
+ } from "../index-dnwcx1cs.js";
28
28
  import"../index-wp8c28fd.js";
29
29
  export {
30
30
  runShellProbe,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-tomato/rafa",
3
- "version": "0.26.0",
3
+ "version": "0.31.0",
4
4
  "description": "Alpha. Runs a plan through the ralph loop: one Claude Code session per task, one commit per task, then a pull request and a CI wait.",
5
5
  "private": false,
6
6
  "publishConfig": {