@open-tomato/rafa 0.37.0 → 0.39.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.
Files changed (29) hide show
  1. package/README.md +23 -6
  2. package/dist/PROMPT.md +3 -1
  3. package/dist/bundled/agents/loop-implementer.md +5 -0
  4. package/dist/bundled/agents/qa-bug-reporter.md +2 -2
  5. package/dist/bundled/operators/.claude-plugin/plugin.json +1 -1
  6. package/dist/bundled/operators/agents/rafa-stretch-analyst.md +7 -0
  7. package/dist/bundled/operators/agents/rafa-stretch-engineer.md +21 -45
  8. package/dist/bundled/operators/agents/rafa-stretch-watchtower.md +7 -0
  9. package/dist/bundled/operators/skills/rafa-stretch-pit-stop/SKILL.md +1 -1
  10. package/dist/bundled/operators/skills/rafa-stretch-sweep/SKILL.md +1 -1
  11. package/dist/bundled/skills/dev-planner/SKILL.md +2 -2
  12. package/dist/bundled/stretch/engineer-prompt-default.md +5 -0
  13. package/dist/cli.js +28586 -22631
  14. package/dist/{describe-5hqfwbjc.js → describe-pwhh0vws.js} +3 -3
  15. package/dist/effort/store/index.js +4 -4
  16. package/dist/{index-1mxv55ec.js → index-1r2b1052.js} +8 -7
  17. package/dist/{index-k6sd4ym5.js → index-eyjq63mx.js} +2 -2
  18. package/dist/{index-7bb0fdb7.js → index-g4116t9m.js} +2 -2
  19. package/dist/{index-jfas157k.js → index-m0wt4nr1.js} +11 -2
  20. package/dist/{index-fzhd3d4y.js → index-m2ahxjw8.js} +5 -1
  21. package/dist/{index-35ze56rz.js → index-nwgwxfkt.js} +9886 -7920
  22. package/dist/{index-b16va6he.js → index-psv1sxkv.js} +5721 -1968
  23. package/dist/{index-3mzw3kzh.js → index-sr3kc4mf.js} +1 -1
  24. package/dist/index.js +10 -8
  25. package/dist/plan/index.js +3 -3
  26. package/dist/plan-prompt.md +27 -0
  27. package/dist/plans/resolve-conflict-lockfile.md +2 -2
  28. package/dist/plans/resolve-conflict-manifest.md +1 -1
  29. package/package.json +1 -1
@@ -3,9 +3,9 @@ import {
3
3
  DESCRIBE_BINARY,
4
4
  DESCRIBE_SCHEMA_VERSION,
5
5
  describeRegistry
6
- } from "./index-k6sd4ym5.js";
7
- import"./index-3mzw3kzh.js";
8
- import"./index-fzhd3d4y.js";
6
+ } from "./index-eyjq63mx.js";
7
+ import"./index-sr3kc4mf.js";
8
+ import"./index-m2ahxjw8.js";
9
9
  import"./index-wp8c28fd.js";
10
10
  export {
11
11
  describeRegistry,
@@ -14,13 +14,13 @@ import {
14
14
  openNdjsonStore,
15
15
  openSqliteStore,
16
16
  selectEffortStore
17
- } from "../../index-1mxv55ec.js";
18
- import"../../index-jfas157k.js";
17
+ } from "../../index-1r2b1052.js";
18
+ import"../../index-m0wt4nr1.js";
19
19
  import"../../index-d6d0942q.js";
20
- import"../../index-3mzw3kzh.js";
20
+ import"../../index-sr3kc4mf.js";
21
21
  import {
22
22
  STORE_BACKENDS
23
- } from "../../index-fzhd3d4y.js";
23
+ } from "../../index-m2ahxjw8.js";
24
24
  import"../../index-wp8c28fd.js";
25
25
  export {
26
26
  selectEffortStore,
@@ -15,7 +15,7 @@ import {
15
15
  parseConfigText,
16
16
  readRafaBlocks,
17
17
  resolveConfig
18
- } from "./index-jfas157k.js";
18
+ } from "./index-m0wt4nr1.js";
19
19
  import {
20
20
  bless,
21
21
  merge
@@ -23,7 +23,7 @@ import {
23
23
  import {
24
24
  CommandExit,
25
25
  commandSpelling
26
- } from "./index-3mzw3kzh.js";
26
+ } from "./index-sr3kc4mf.js";
27
27
  import {
28
28
  BUSY_TIMEOUT_MAX_MS,
29
29
  BUSY_TIMEOUT_MIN_MS,
@@ -39,7 +39,7 @@ import {
39
39
  messageOf,
40
40
  resolveInstinctScopes,
41
41
  tierExists
42
- } from "./index-fzhd3d4y.js";
42
+ } from "./index-m2ahxjw8.js";
43
43
  import {
44
44
  actionHash,
45
45
  triggerKey
@@ -259,7 +259,7 @@ import { Database as Database2 } from "bun:sqlite";
259
259
 
260
260
  // package.json
261
261
  var name = "@open-tomato/rafa";
262
- var version = "0.37.0";
262
+ var version = "0.39.0";
263
263
 
264
264
  // src/cli/version.ts
265
265
  var RAFA_VERSION = version;
@@ -1802,6 +1802,7 @@ function gitRemoteUrl(dir) {
1802
1802
  // src/effort/store/store-identity.ts
1803
1803
  var HOST_ID_KEY = "rafa effort store host id";
1804
1804
  var MACHINE_ID_PATH = "/etc/machine-id";
1805
+ var IOREG_PATH = "/usr/sbin/ioreg";
1805
1806
  var IOREG_ARGS = ["-rd1", "-c", "IOPlatformExpertDevice"];
1806
1807
  function hostIdFrom(source, value) {
1807
1808
  return createHmac("sha256", HOST_ID_KEY).update(`${source}:${value}`).digest("hex");
@@ -1819,7 +1820,7 @@ function parseIoregPlatformUuid(output) {
1819
1820
  return match?.[1] ?? null;
1820
1821
  }
1821
1822
  function readIoregPlatformUuid() {
1822
- const result = spawnSync3("ioreg", [...IOREG_ARGS], { encoding: "utf8" });
1823
+ const result = spawnSync3(IOREG_PATH, [...IOREG_ARGS], { encoding: "utf8" });
1823
1824
  if (result.error !== undefined || result.status !== 0)
1824
1825
  return null;
1825
1826
  return parseIoregPlatformUuid(result.stdout);
@@ -2717,7 +2718,7 @@ function renderFixSchema(result) {
2717
2718
  case "rebuilt":
2718
2719
  return [
2719
2720
  ...rebuildLines(result),
2720
- `\u2705 Rebuilt at this rafa's migrations. The original is kept whole at ${String(result.backupPath)};` + ` rename it back to undo. ${keepsIdLine("rebuild")}`
2721
+ `\u2705 Rebuilt at this rafa's migrations. Every row the original held is copied to ${String(result.backupPath)}.` + ` ${keepsIdLine("rebuild")}`
2721
2722
  ];
2722
2723
  }
2723
2724
  }
@@ -6497,4 +6498,4 @@ function selectEffortStore(repoRoot, config) {
6497
6498
  return adapter.create({ repoRoot });
6498
6499
  }
6499
6500
 
6500
- export { EFFORT_STORE_DIR, effortStoreFileName, EFFORT_DIR_VARIABLE, effortStoreDir, guardTestProcess, EFFORT_KEY_PROJECTIONS, openNdjsonStore, name, version, RAFA_VERSION, versionLine, createGitRunner, gitSaid, NOT_A_REPOSITORY, mainCheckoutOf, SCOPE_DIR, INIT_COMMAND, DISK_FILE_SYSTEM, ScopeError, scopeAt, initHint, selfAndAncestors, resolveScope, POSITION_FILE, positionFilePath, readPositionFile, writePositionFile, positionAt, rehome, hop, goHome, HOP_FILE, hopFilePath, readHopRecord, writeHopRecord, staleAgainst, SessionRecordError, isSessionId, sessionPhase, SessionConflictError, SessionStateError, runsDir, sessionFilePath, errorCode, isPidAlive, readSessions, readSession, beginSession, updateSession, DEVELOPMENT_NEXT_STEP, DEVELOPMENT_MARK, DevelopmentBuildRefusedError, refuseUnownedDevelopmentWrite, LEGACY_GATE_OPEN, LEGACY_GATE_CLOSED, SQLITE_MIGRATIONS, sqliteCatalogue, planSchema, SchemaRefusedError, readStoreSchema, writeNames, ACROSS_STORES_ORDER, STAMPED_COLUMNS, stampedValues, activeStoreSettings, normalizeRemote, gitRemoteUrl, readStoreMeta, SQLITE_STORE_FILE_NAME, sqliteStorePath, LONE_SURROGATE, withSqliteStore, writeSqliteStore, openSqliteStore, EffortCopyRefusal, EffortCopyFailure, copyEffortStore, RebuildRefusal, readConfigFile, loadConfig, plansDirAt, requireProject, resolvePlansDir, resolveProjectConfig, countTasks, formatCounts, checkbox, planFileName, stubOfPlanFile, isFile, issueLine, plural, expectNoArgument, expectOneArgument, expectAtMostOneArgument, readSwitch, fileStamp, keepsIdLine, fix_schema_default, minutesBetween, readCommitLog, UnionSchemaMismatch, migrateStore, MOVE_TO_SQLITE, MergeRefusal, mergeStore, createFileSync, SyncModuleMissing, selectSync, SKILL_FILE, MARKDOWN_EXTENSION, scanLayout, declaredNameIssue, readFrontmatterDocument, readFrontmatter, renderFrontmatter, mergeFrontmatter, writeFrontmatter, ACTION_HEADING, CAUSE_HEADING, parseInstinct, writeInstinct, readScopes, allRecords, findRecords, instinctProject, toHeldRecords, EVENT_PREFIX, padKind, oneLine, sessionSpawnEnv, CLAUDE_BIN, claudeArgs, interruptClaudeSessions, spawnClaude, runClaude, spawnClaudeCaptured, runClaudeCaptured, planFilePath, ClaudePlannerError, ISSUE_TYPES, ISSUE_PRIORITIES, ISSUE_STATES, GITHUB_LABELS, createGhRunner, typeOfLabels, moduleOfLabels, createLocalTracker, PORT_VERSIONS, createAdapterRegistry, CORE_ADAPTER_REGISTRY, TRUSTED_PERMISSIONS, TRUST_REFUSAL_EXIT, createGhPermissions, readAuthorTrust, ghBoardTrust, readBoardTrust, requireTrustedBoardAuthor, trustRefusalClause, trustRefusalMessage, requireTrustedAuthor, createGhEditorLogin, readEditorTrust, editorRefusalMessage, WIRE_FORMAT, WIRE_VERSION, WireFormatError, WireExportRefusal, encodeWirePayload, decodeWirePayload, exportWirePayload, materialiseWirePayload, selectEffortStore };
6501
+ export { EFFORT_STORE_DIR, effortStoreFileName, EFFORT_DIR_VARIABLE, effortStoreDir, guardTestProcess, EFFORT_KEY_PROJECTIONS, openNdjsonStore, name, version, RAFA_VERSION, versionLine, createGitRunner, gitSaid, NOT_A_REPOSITORY, mainCheckoutOf, SCOPE_DIR, INIT_COMMAND, DISK_FILE_SYSTEM, ScopeError, scopeAt, initHint, selfAndAncestors, resolveScope, POSITION_FILE, positionFilePath, readPositionFile, writePositionFile, positionAt, rehome, hop, goHome, HOP_FILE, hopFilePath, readHopRecord, writeHopRecord, staleAgainst, RECORD_EXTENSION, SessionRecordError, isSessionId, isPositiveWhole, sessionPhase, parseSessionRecord, SessionConflictError, SessionStateError, runsDir, sessionFilePath, errorCode, isPidAlive, readState, readSessions, readSession, beginSession, updateSession, DEVELOPMENT_NEXT_STEP, DEVELOPMENT_MARK, DevelopmentBuildRefusedError, refuseUnownedDevelopmentWrite, LEGACY_GATE_OPEN, LEGACY_GATE_CLOSED, SQLITE_MIGRATIONS, sqliteCatalogue, planSchema, SchemaRefusedError, readStoreSchema, writeNames, ACROSS_STORES_ORDER, STAMPED_COLUMNS, stampedValues, activeStoreSettings, normalizeRemote, gitRemoteUrl, readStoreMeta, SQLITE_STORE_FILE_NAME, sqliteStorePath, LONE_SURROGATE, withSqliteStore, writeSqliteStore, openSqliteStore, EffortCopyRefusal, EffortCopyFailure, copyEffortStore, RebuildRefusal, readConfigFile, loadConfig, plansDirAt, requireProject, resolvePlansDir, resolveProjectConfig, countTasks, formatCounts, checkbox, planFileName, stubOfPlanFile, isFile, issueLine, plural, expectNoArgument, expectOneArgument, expectAtMostOneArgument, readSwitch, fileStamp, keepsIdLine, fix_schema_default, minutesBetween, readCommitLog, UnionSchemaMismatch, migrateStore, MOVE_TO_SQLITE, MergeRefusal, mergeStore, createFileSync, SyncModuleMissing, selectSync, SKILL_FILE, MARKDOWN_EXTENSION, scanLayout, declaredNameIssue, readFrontmatterDocument, readFrontmatter, renderFrontmatter, mergeFrontmatter, writeFrontmatter, ACTION_HEADING, CAUSE_HEADING, parseInstinct, writeInstinct, readScopes, allRecords, findRecords, instinctProject, toHeldRecords, EVENT_PREFIX, padKind, oneLine, sessionSpawnEnv, CLAUDE_BIN, claudeArgs, interruptClaudeSessions, spawnClaude, runClaude, spawnClaudeCaptured, runClaudeCaptured, planFilePath, ClaudePlannerError, ISSUE_TYPES, ISSUE_PRIORITIES, ISSUE_STATES, GITHUB_LABELS, createGhRunner, typeOfLabels, moduleOfLabels, createGithubTracker, createLocalTracker, PORT_VERSIONS, createAdapterRegistry, CORE_ADAPTER_REGISTRY, TRUSTED_PERMISSIONS, TRUST_REFUSAL_EXIT, createGhPermissions, readAuthorTrust, ghBoardTrust, readBoardTrust, requireTrustedBoardAuthor, trustRefusalClause, trustRefusalMessage, requireTrustedAuthor, createGhEditorLogin, readEditorTrust, editorRefusalMessage, WIRE_FORMAT, WIRE_VERSION, WireFormatError, WireExportRefusal, encodeWirePayload, decodeWirePayload, exportWirePayload, materialiseWirePayload, selectEffortStore };
@@ -4,10 +4,10 @@ import {
4
4
  commandSpelling,
5
5
  isRoutingWord,
6
6
  isTopLevel
7
- } from "./index-3mzw3kzh.js";
7
+ } from "./index-sr3kc4mf.js";
8
8
  import {
9
9
  describeValue
10
- } from "./index-fzhd3d4y.js";
10
+ } from "./index-m2ahxjw8.js";
11
11
 
12
12
  // src/cli/registry.ts
13
13
  var REFUSAL = "command registry";
@@ -3,11 +3,11 @@ import {
3
3
  activeOutput,
4
4
  isStampableStub,
5
5
  readRafaBlocks
6
- } from "./index-jfas157k.js";
6
+ } from "./index-m0wt4nr1.js";
7
7
  import {
8
8
  messageOf,
9
9
  parseTaskDeclaration
10
- } from "./index-fzhd3d4y.js";
10
+ } from "./index-m2ahxjw8.js";
11
11
  // src/preflight/prerequisites-md.ts
12
12
  import { basename, dirname, join } from "path";
13
13
  var SECTION_AUTO_RE = /\[auto\]/i;
@@ -1,5 +1,6 @@
1
1
  // @bun
2
2
  import {
3
+ BOARD_PROJECT_TEMPLATE_DEFAULT,
3
4
  BOARD_RELATIONSHIP_MODES,
4
5
  CLAUDE_SETTING_SOURCES,
5
6
  CONFIG_VERSIONS,
@@ -28,6 +29,8 @@ import {
28
29
  mergeMethod,
29
30
  messageOf,
30
31
  oneOf,
32
+ projectNumber,
33
+ projectUrl,
31
34
  recurrenceCount,
32
35
  refused,
33
36
  refusedWith,
@@ -39,7 +42,7 @@ import {
39
42
  tierPin,
40
43
  tierSwitch,
41
44
  usdAmount
42
- } from "./index-fzhd3d4y.js";
45
+ } from "./index-m2ahxjw8.js";
43
46
 
44
47
  // src/config-items.ts
45
48
  var itemText = text("a non-empty string");
@@ -564,6 +567,8 @@ var CONFIG_DEFAULTS = Object.freeze({
564
567
  ...PR_DEFAULTS,
565
568
  boardTrustedAuthors: Object.freeze([]),
566
569
  boardRelationships: "labels",
570
+ boardProjectTemplate: BOARD_PROJECT_TEMPLATE_DEFAULT,
571
+ boardProjectNumber: null,
567
572
  roadmapIssue: null,
568
573
  claimsStaleAfter: "3d",
569
574
  claimsAhead: "off",
@@ -652,6 +657,8 @@ var SETTINGS = {
652
657
  read: oneOf(BOARD_RELATIONSHIP_MODES),
653
658
  cli: false
654
659
  },
660
+ boardProjectTemplate: { key: "board.project.template", read: projectUrl, cli: false },
661
+ boardProjectNumber: { key: "board.project.number", read: projectNumber, cli: false },
655
662
  roadmapIssue: { key: "roadmap.issue", read: issueNumber, cli: false },
656
663
  claimsStaleAfter: { key: "claims.staleAfter", read: claimsStaleAfter, cli: false },
657
664
  claimsAhead: { key: "claims.ahead", read: claimsAhead, cli: false },
@@ -788,6 +795,8 @@ function readLayer(rawOf, atOf) {
788
795
  prVersionCollision: read("prVersionCollision"),
789
796
  boardTrustedAuthors: read("boardTrustedAuthors"),
790
797
  boardRelationships: read("boardRelationships"),
798
+ boardProjectTemplate: read("boardProjectTemplate"),
799
+ boardProjectNumber: read("boardProjectNumber"),
791
800
  roadmapIssue: read("roadmapIssue"),
792
801
  claimsStaleAfter: read("claimsStaleAfter"),
793
802
  claimsAhead: read("claimsAhead"),
@@ -1403,4 +1412,4 @@ function activeOutputMode() {
1403
1412
  return activeMode;
1404
1413
  }
1405
1414
 
1406
- export { hubContextOf, PREREQUISITE_KINDS, requiredPrerequisite, optionalPrerequisite, MODULE_SOURCE_KINDS, 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 };
1415
+ export { hubContextOf, PREREQUISITE_KINDS, requiredPrerequisite, optionalPrerequisite, MODULE_SOURCE_KINDS, RELEASE_DEFAULTS, pinKey, pinLine, collisionMessage, readItemBytes, resolveTiers, findTierItem, DEFAULT_ROUTES, DEFAULT_ROUTING, CONFIG_FILE, CONFIG_DEFAULTS, SETTINGS, SETTING_NAMES, SETTING_BY_KEY, SECTIONS, knownKeysAbove, 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 };
@@ -414,6 +414,10 @@ function isGitHubLogin(value) {
414
414
  return typeof value === "string" && GITHUB_LOGIN.test(value);
415
415
  }
416
416
  var githubLogin = (raw, at) => isGitHubLogin(raw) ? accepted(raw) : refused(at, raw, "a GitHub login");
417
+ var BOARD_PROJECT_TEMPLATE_DEFAULT = "https://github.com/orgs/open-tomato/projects/6";
418
+ var PROJECT_URL = /^https:\/\/github\.com\/(?:orgs|users)\/[A-Za-z0-9][A-Za-z0-9-]*\/projects\/[1-9]\d*$/;
419
+ var projectUrl = (raw, at) => typeof raw === "string" && PROJECT_URL.test(raw) ? accepted(raw) : refused(at, raw, "a GitHub project URL, https://github.com/orgs/<owner>/projects/<number> or /users/<owner>/\u2026");
420
+ var projectNumber = (raw, at) => typeof raw === "number" && Number.isSafeInteger(raw) && raw > 0 ? accepted(raw) : refused(at, raw, "a project number, a whole number above zero");
417
421
  function listOf(item, expected) {
418
422
  return (raw, at) => {
419
423
  if (!Array.isArray(raw))
@@ -443,4 +447,4 @@ function subsetOf(values) {
443
447
  };
444
448
  }
445
449
 
446
- export { MERGE_METHODS, isMergeMethod, SKILL_TIERS, RAFA_INSTINCTS_PATH, BUNDLED_SKILLS_DIR, isSkillTier, realEntry, bundledBinDirectory, skillTierDirectory, resolveSkillTiers, resolveInstinctScopes, tierExists, TEST_SCOPES, isAgentName, BUDGET_FLAG, parseBudgetUsd, readTestScope, parseTaskDeclaration, stripTaskDeclaration, resolveDeclarationFlags, isMapping, describeValue, messageOf, CONFIG_VERSIONS, STORE_BACKENDS, SYNC_STRATEGIES, BOARD_RELATIONSHIP_MODES, INJECT_MODES, OUTPUT_MODES, CLAUDE_SETTING_SOURCES, PR_PROVIDERS, RELEASE_AUTO, SKILL_RESOLVERS, CLAIMS_STALE_DISABLED, refused, refusedWith, mapReading, below, oneOf, text, flag, mergeMethod, usdAmount, issueNumber, dayCount, BUSY_TIMEOUT_MIN_MS, BUSY_TIMEOUT_MAX_MS, isBusyTimeoutMs, busyTimeoutMs, confidence, recurrenceCount, releaseEnabled, tierSwitch, tierPin, routeTarget, skillResolverName, lessonSwitch, claimDurationHours, claimsStaleAfter, claimsAhead, isGitHubLogin, githubLogin, listOf, subsetOf };
450
+ export { MERGE_METHODS, isMergeMethod, SKILL_TIERS, RAFA_INSTINCTS_PATH, BUNDLED_SKILLS_DIR, isSkillTier, realEntry, bundledBinDirectory, skillTierDirectory, resolveSkillTiers, resolveInstinctScopes, tierExists, TEST_SCOPES, isAgentName, BUDGET_FLAG, parseBudgetUsd, readTestScope, parseTaskDeclaration, stripTaskDeclaration, resolveDeclarationFlags, isMapping, describeValue, messageOf, CONFIG_VERSIONS, STORE_BACKENDS, SYNC_STRATEGIES, BOARD_RELATIONSHIP_MODES, INJECT_MODES, OUTPUT_MODES, CLAUDE_SETTING_SOURCES, PR_PROVIDERS, RELEASE_AUTO, SKILL_RESOLVERS, CLAIMS_STALE_DISABLED, refused, refusedWith, mapReading, below, oneOf, text, flag, mergeMethod, usdAmount, issueNumber, dayCount, BUSY_TIMEOUT_MIN_MS, BUSY_TIMEOUT_MAX_MS, isBusyTimeoutMs, busyTimeoutMs, confidence, recurrenceCount, releaseEnabled, tierSwitch, tierPin, routeTarget, skillResolverName, lessonSwitch, claimDurationHours, claimsStaleAfter, claimsAhead, isGitHubLogin, githubLogin, BOARD_PROJECT_TEMPLATE_DEFAULT, projectUrl, projectNumber, listOf, subsetOf };